NUMA 机器上并行 MATLAB 的性能问题
Posted
技术标签:
【中文标题】NUMA 机器上并行 MATLAB 的性能问题【英文标题】:performance issues with parallel MATLAB on a NUMA machine 【发布时间】: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 或操作系统支持它,您可以尝试启用数据交错。虽然它违反直觉,因为它破坏了局部性,但它实际上平衡了所有节点之间的总线流量。所以它实际上可能会有所帮助。 【参考方案1】:您应该只能使用 Parallel Computing Toolbox 运行 12 个本地工作器。见the data sheet。
【讨论】:
【参考方案2】:请注意,在 R2014a 中,取消了对本地工人人数的限制。见the release notes。
【讨论】:
以上是关于NUMA 机器上并行 MATLAB 的性能问题的主要内容,如果未能解决你的问题,请参考以下文章
优化调度基于matlab遗传算法求解工件的并行调度组合优化问题含Matlab源码 2234期