private void divideTask(Region[][] array, int hij, int loj, int hii, int loi,
            int t, boolean irregular) {
        if (irregular) {
            int midh2 = (loi + hii) >>> 1;
            int midh1 = (loi + midh2) >>> 1;
            int midh3 = (hii + midh2) >>> 1;
            invokeAll(new UpdateTask(array, hij, loj, midh1, loi, t, false),
                    new UpdateTask(array, hij, loj, midh2, midh1, t, false),
                    new UpdateTask(array, hij, loj, midh3, midh2, t, false),
                    new UpdateTask(array, hij, loj, hii, midh3, t, false));
        } else {
            int midh = (loi + hii) >>> 1;
            int midv = (loj + hij) >>> 1;
            invokeAll(new UpdateTask(array, hij, midv, hii, midh, t, false),
                    new UpdateTask(array, hij, midv, midh, loi, t, false),
                    new UpdateTask(array, midv, loj, hii, midh, t, false),
                    new UpdateTask(array, midv, loj, midh, loi, t, false));
        }
    }