very simple self-answer : replacing ParallelEnumerable.Range(0, 200000)
with Enumerable.Range(...).AsParallel()
was enough to solve this problem. The it seems that the workload is distributed dynamically in Enumerable.Range(...).AsParallel()
.
ParallelQuery core balancing
-
17-01-2022 - |
Question
I have 200,000 tasks that will run in parallel for speed gains. I'm using ParallelEnumerable.Range(0, 200000).Sum( a => /*do_something*/ )
.
as the task counter goes from 0 to 200,000 the required number of iterations decreases. The task with a=0
requires most number of iterations, while tasks with a>100,000
finish with one or no iteration.
due to this, my quad-core machine isn't reaching max cpu utilization peak as the tasks progress. It seems like the workload is distributed to all 4 cores at start, and some cores go idle earlier as their portion was mainly tasks with high a
s. cpu utilization starts with 100%, but drops gradually to 75~50~25%. How can I achieve full cpu utilization from start to end?
Solution
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow