私は、Windows 7の64コアNUMAマシンのMATLABで、メモリを大量に消費する並列計算を実行しています。ソケットあたり8コアです。私はそれを行うために並列計算ツールボックスを使用しています。非常に奇妙なCPUロードパターンに気づきました。たとえば、36個の並列MATLABを実行すると、1番目のソケットのコアが完全にロードされ、2番目のソケットもほぼ完全にロードされ、3番目のソケットが約50%になります。最後のソケットは通常、ほぼ完全に解放されており、何もしていません。12を超える並列ワーカーを同時に実行すると、すべてのワーカーのパフォーマンスに非常に悪影響を与えるようです。
さまざまなワーカーをさまざまなコアに固定して、CPUアフィニティを試してみました。単純なテスト(つまり、CPUの負荷パターンがすべてのコアで均一になる)には役立ちますが、実際のメモリを大量に消費する計算には役立ちません。
問題はメモリの局所性にあると思います。つまり、すべてのメモリは1番目と2番目のソケットに割り当てられます。これは奇妙なCPU負荷を説明するでしょう:OSはデータの近くで計算スレッドを実行するのに疲れています。しかし、私はこの疑惑を直接確認する方法も、それが真実である場合にそれを修正する方法も知りません。
重要な場合は、すべての並列ワーカーでmaxNumCompThreads(4)を使用します。ハイパースレッディングはオフです。