【发布时间】:2018-01-21 15:10:01
【问题描述】:
我有两个嵌套的 Parallel.ForEach 循环,它们对并行度没有限制。据我了解,在大多数情况下,使用此设置更多的内核 = 更快的运行时间。但是,在两台不同的机器上运行,一台具有 4 核 4 线程,2.8GHz CPU,另一台具有 6 核 12 线程 3.3GHz CPU。该程序的运行时间相同:约 5 小时。
我在谷歌上找不到任何东西(虽然,除了这个问题的标题之外,我不完全确定要搜索什么。)这可以解释为什么会这样。
我确实注意到程序在更快的 CPU 机器上使用的系统内存要少得多,35MB 与 160MB 相比,根据 Visual Studio 诊断工具,更快的 CPU 更频繁地使用垃圾收集器。不知道为什么会出现这种情况或它们对运行时有什么影响?
【问题讨论】:
-
这真的完全取决于并行运行的代码,例如,如果它在远程服务器上等待,更多的线程不会帮助你。
-
@Skami 这一切都使用本地数据运行,不等待任何外部数据。它本质上只是运行许多具有不同起点和终点的 dijkstra 算法。
-
@Jack 它不必是外部的,如果您在每次试验之间从磁盘重新加载数据,可能会导致相同的问题。除非您向我们展示并行运行的代码,否则我们真的无法确定。
-
@ScottChamberlain 在并行部分运行之前,所有数据都加载到 RAM 中。实际代码是我没有源代码的库的一部分,所以我想我只能保持原样。
-
见here。当然你需要 Range Partitioner。
标签: c# multithreading performance parallel-processing