并行查询核心平衡
本文关键字:平衡 核心 查询 并行 | 更新日期: 2023-09-27 17:55:26
我有 200,000 个任务将并行运行以提高速度。我正在使用ParallelEnumerable.Range(0, 200000).Sum( a => /*do_something*/ )
.
当任务计数器从 0 增加到 200,000 时,所需的迭代次数会减少。具有 a=0
的任务需要最多的迭代次数,而具有 a>100,000
的任务以一次或没有迭代完成。
因此,随着任务的进行,我的四核计算机没有达到最大 CPU 利用率峰值。似乎工作负载在开始时分配给所有 4 个内核,并且一些内核更早地空闲,因为它们的部分主要是具有高a
的任务.CPU 利用率从 100% 开始,但逐渐下降到 75~50~25%。如何从头到尾实现 CPU 的完全利用率?
非常简单的自我回答:用Enumerable.Range(...).AsParallel()
替换ParallelEnumerable.Range(0, 200000)
就足以解决这个问题。似乎工作负载在Enumerable.Range(...).AsParallel()
中动态分布。