This is a first attempt at using parallel, but no improvement in speed on a corei7. It is about 3x slower than the prior versions. Probably the join was not a good idea. Also, no foreach_reverse for the parallel, so it requires extra calculations for the reverse index.

void printDiamonde2cpa(in uint N)
{
    size_t N2 = N/2;
    char p[] = uninitializedArray!(char[])(N2+N);
    p[0..N2] = ' ';
    p[N2..$] = '*';
    char nl[] = uninitializedArray!(char[])(1);
    nl[] = '\n';

    char[][] wc = minimallyInitializedArray!(char[][])(N);

    auto w = appender!(char[])();

    foreach(n, ref elem; taskPool.parallel(wc[0..N2+1],100)){
        elem = p[n .. N2+2*n+1];
    }

    foreach (rn, ref elem ; taskPool.parallel(wc[0..N2],100)){
        int n = N2 - rn - 1;
        elem = p[n .. N2+2*n+1];
    }
    auto wj = join(wc,nl);
    w.put(wj);

    writeln(w.data);
}

Reply via email to