并行查询核心平衡

本文关键字:平衡 核心 查询 并行 | 更新日期: 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()中动态分布。