最近我一直在分析我的并行计算是如何在 16 核处理器上实际加速的。我得出的一般公式——线程越多,每个核心的速度越慢——让我很尴尬。这是我的cpu负载和处理速度的图表:
因此,您可以看到处理器负载增加,但速度增加得慢得多。我想知道为什么会发生这种影响以及如何获得不可扩展行为的原因。我确保使用Server GC mode。我已经确保我正在并行化适当的代码,只要代码只做
- 从 RAM 加载数据(服务器有 96 GB 的 RAM,不应命中交换文件)
- 执行不复杂的计算
- 将数据存储在 RAM 中
我仔细分析了我的应用程序并没有发现任何瓶颈 - 看起来每个操作都会随着线程数的增加而变慢。
我被卡住了,我的场景有什么问题?
我使用 .Net 4 任务并行库。