【发布时间】:2012-01-13 19:33:04
【问题描述】:
我在 Windows 7 下的 64 核 NUMA 机器上运行 MATLAB 中的内存密集型并行计算,每个插槽 8 个内核。我正在使用并行计算工具箱来做到这一点。我注意到一个非常奇怪的 cpu 负载模式:然后运行 36 个并行 MATLAB,第一个插槽上的内核已满载,第二个插槽也几乎满载,第三个插槽约为 50%,依此类推。最后一个套接字通常几乎是完全免费的并且什么也不做。同时运行超过 12 个并行工作器似乎对所有工作器的性能产生了非常不利的影响。
我尝试尝试使用 cpu 亲和力,将不同的 worker 固定到不同的内核。虽然它有助于简单的测试(即 cpu 负载模式在所有内核上变得一致),但它对我们现实生活中的内存密集型计算没有帮助。
我怀疑问题出在内存局部性上。 IE。所有内存都分配在第一个和第二个套接字上。这可以解释奇怪的 cpu 负载:操作系统厌倦了运行更接近数据的计算线程。但我既不知道如何直接证实这种怀疑,也不知道如果它是真的,如何解决它。
如果这很重要,我会在所有并行工作程序中使用 maxNumCompThreads(4)。超线程已关闭。
【问题讨论】:
-
你的假设似乎是合理的。如果您的 BIOS 或操作系统支持它,您可以尝试启用数据交错。虽然它违反直觉,因为它破坏了局部性,但它实际上平衡了所有节点之间的总线流量。所以它实际上可能会有所帮助。
标签: matlab numa parallel-processing