私は、Windows 7の64コアNUMAマシン上でMATLABでメモリ集約型並列計算を実行しています。ソケットあたり8コアです。私はこれを行うために並列計算ツールボックスを使用しています。私は非常に奇妙なCPU負荷パターンに気付きました。次に、36個の並列MATLABを実行し、1番目のソケットのコアは完全にロードされ、2番目のソケットはほぼ完全にロードされ、3番目のソケットは約50%というように続きます。最後のソケットは通常ほとんど完全にフリーで、何もしません。同時に12人を超える並列作業者を同時に実行することは、すべての作業者のパフォーマンスに非常に悪影響を与えるように見える。NUMAマシン上の並列MATLABのパフォーマンスに関する問題
私はCPUアフィニティを実験して、別のワーカーを別のコアに固定しました。シンプルなテストでは役立ちますが(つまり、すべてのコアでCPU負荷パターンが均一になります)、実際のメモリ集約型計算では役立ちません。
私は、メモリの局所性に問題があると思われます。私。すべてのメモリは1番目と2番目のソケットに割り当てられます。これは奇妙なCPU負荷を説明するでしょう:OSは計算スレッドをデータに近づけるように動く。しかし、私はこの疑惑を直接どうやって確認するか、またそれをどう修正するかはわかりません。
すべての並列労働者にmaxNumCompThreads(4)を使用します(重要な場合)。ハイパースレッディングはオフです。
あなたの仮説は妥当と思われます。 BIOSまたはOSでサポートされている場合は、データインターリーブを有効にしてみてください。ローカル性を破壊するため直感的ではありませんが、実際にはすべてのノードでバストラフィックが均衡しています。だから実際に役立つかもしれません。 – Mysticial