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期

Linux上MySQL优化提升性能 哪些可以优化的关闭NUMA特性

高性能Matlab的并行计算之parfor

Linux下NFS上的并行文件写入性能

Hyper-V 性能加速之NUMA

Linux 操作系统原理 — NUMA 架构中的多线程调度开销与性能优化