On 4/1/23 15:30, Paul wrote:
> Is there a way to verify that it split up the work in to tasks/threads
> ...?
It is hard to see the difference unless there is actual work in the loop
that takes time. You can add a Thread.sleep call. (Commented-out in the
following program.)
Another option is to monitor a task manager like 'top' on unix based
systems. It should multiple threads for the same program.
However, I will do something unspeakably wrong and take advantage of
undefined behavior below. :) Since iteration count is an even number,
the 'sum' variable should come out as 0 in the end. With .parallel it
doesn't because multiple threads are stepping on each other's toes (values):
import std;
void main() {
long sum;
foreach(i; iota(0, 2_000_000).parallel) {
// import core.thread;
// Thread.sleep(1.msecs);
if (i % 2) {
++sum;
} else {
--sum;
}
}
if (sum == 0) {
writeln("We highly likely worked serially.");
} else {
writefln!"We highly likely worked in parallel because %s !=
0."(sum);
}
}
If you remove .parallel, 'sum' will always be 0.
Ali