【发布时间】:2012-10-02 12:05:48
【问题描述】:
最近我一直在分析我的并行计算如何在 16 核处理器上实际加速。我得出的一般公式——线程越多,每个核心的速度越慢——让我很尴尬。这是我的cpu负载和处理速度的图表:
因此,您可以看到处理器负载增加,但速度增加得慢得多。我想知道为什么会发生这种影响以及如何获得不可扩展行为的原因。 我确保使用Server GC 模式。 我已经确保只要代码执行的只是
,我就会并行化适当的代码- 从 RAM 加载数据(服务器有 96 GB 的 RAM,不应该命中交换文件)
- 执行不复杂的计算
- 将数据存储在 RAM 中
我已仔细分析我的应用程序,没有发现任何瓶颈 - 看起来每个操作都会随着线程数的增加而变慢。
我卡住了,我的场景有什么问题?
我使用 .Net 4 任务并行库。
【问题讨论】:
-
它是真正的 16 核 CPU 还是带有超线程的 8 核?
-
确实如此,但 32 核的速度为 0%,所以我省略了它
-
线程是预加载数据还是根据需要拉取数据?如果他们拉数据,多久拉一次,是否有等待时间拉?
-
线程查询数据 - 经常,但我不知道如何衡量和衡量什么
-
“线程查询数据”——这听起来像是一个热点。
标签: c# .net multithreading scalability task-parallel-library