svoid stepAllWithStats_multiThreaded(Steppable s) { if (s cast SplittableSteppable) { int cores = coresToUse(); //print("Have SplittableSteppable, cores=" + cores); if (cores > 1) { MultiThreadStepper stepper = new(s.split(cores)); //print("Have stepper, n=" + l(stepper.steppables)); stepAllWithStats_multiThreaded(stepper); ret; } } stepAllWithStats(s); } svoid stepAllWithStats_multiThreaded(final MultiThreadStepper stepper) { long n = 0; final new Flag done; stepper.onDone(r { print(n2(stepper.steps(), "step") + " in " + stepper.elapsedTime + " ms on " + n2(stepper.cores, "core")); done.raise(); }); //print("Starting stepper"); stepper.start(); done.waitUntilUp(); }