最近我一直在分析我的并行计算在 16 核处理器上实际上是如何加速的。我得出的一般公式——线程越多,每个核心的速度就越慢——让我很尴尬。以下是我的CPU负载和处理速度的图表:
因此,您可以看到处理器负载增加,但速度增加得慢得多。我想知道为什么会发生这种效果以及如何找到不可扩展行为的原因。
我已经确定要使用服务器GC模式。
我已确保只要代码执行的操作仅是,我就会并行化适当的代码
- 从 RAM 加载数据(服务器有 96 GB RAM,交换文件不应被命中)
- 执行并不复杂的计算
- 将数据存储在 RAM 中
I've profiled我的应用程序仔细地发现没有瓶颈 - 看起来每个操作随着线程数量的增长而变得更慢。
我被困住了,我的场景有什么问题吗?
我使用.Net 4 任务并行库。
你总会得到这种曲线,它被称为阿姆达尔定律 http://en.wikipedia.org/wiki/Amdahl%27s_law.
问题是这种情况多久会趋于平稳。
您说您检查了代码是否存在瓶颈,我们假设这是正确的。然后还有内存带宽和其他硬件因素。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)