www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - parallel foreach stuck on 8 workUnitSize

reply Booster <Booster Rooster.com> writes:
https://dlang.org/library/std/parallelism/task_pool.parallel.html#workUnitSize

Basically have no difference than the above but when I change the 
workUnitSize to 1, 4, whatever it is always running 8 parallel 
loops.

Either a bug or workUnitSize is not what I think it is. I simply 
want to execute n iterations of the loop at the time, not fixed 
at 8.
Jan 08 2022
parent =?UTF-8?Q?Ali_=c3=87ehreli?= <acehreli yahoo.com> writes:
On 1/8/22 7:18 PM, Booster wrote:
 
https://dlang.org/library/std/parallelism/task_pool.parallel.html#workUnitSize
 Basically have no difference than the above but when I change the
 workUnitSize to 1, 4, whatever it is always running 8 parallel loops.

 Either a bug or workUnitSize is not what I think it is. I simply want to
 execute n iterations of the loop at the time, not fixed at 8.
Work unit size is the number of elements each thread will work sequentially before causing a context switch. You need to create a TaskPool object to configure the number of threads because the default TaskPool uses all cores. I have a slide about this in my DConf Online 2020 presentation right here: https://www.youtube.com/watch?v=dRORNQIB2wA&t=1700s import std.parallelism; void main() { int[] elements; auto tp = new TaskPool(totalCPUs / 2); // 1. Thread count foreach (e; tp.parallel(elements, 1)) { // 2. Work unit size // ... } tp.finish(); // Don't forget } Ali
Jan 08 2022