2

我有 200,000 个任务将并行运行以提高速度。我正在使用ParallelEnumerable.Range(0, 200000).Sum( a => /*do_something*/ ).

随着任务计数器从 0 变为 200,000,所需的迭代次数减少。a=0需要最多迭代次数的任务,而完成a>100,000一次或没有迭代的任务。

因此,随着任务的进行,我的四核机器没有达到最大 cpu 利用率峰值。似乎工作负载在开始时被分配到所有 4 个核心,并且一些核心更早地空闲,因为它们的部分主要是具有高as 的任务。cpu 利用率从 100% 开始,逐渐下降到 75~50~25%。如何从头到尾实现充分的 CPU 利用率?

4

1 回答 1

0

非常简单的自我回答:替换ParallelEnumerable.Range(0, 200000)Enumerable.Range(...).AsParallel()足以解决此问题。似乎工作负载是动态分布的Enumerable.Range(...).AsParallel()

于 2013-01-24T01:18:18.560 回答