11

キャッシュコヒーレントな 不均一メモリアクセス(NUMA)を備えたマルチプロセッサボードがある場合、つまり、プロセッサごとに個別のRAMを備えた個別の「ノースブリッジ」がある場合、コンパイラは、データをさまざまなメモリシステムに自動的に分散する方法を知っていますか?ローカルスレッドで動作しているプロセスは、ほとんどの場合、スレッドが実行されているプロセッサに関連付けられているRAMからデータを取得していますか?

1 GBがプロセッサ0に接続され、1GBがプロセッサ1に接続されるなどの設定があります。最大4つのプロセッサ。コヒーレントメモリ空間では、1番目のプロセッサのRAMの物理メモリはアドレス0〜1GB-1です。2番目のプロセッサの場合は1GBから2GB-1、というようになります。

malloc特定のコア上のプロセスによって割り当てられた新しいメモリを、そのコアに関連付けられた物理RAMに関連付けるコンパイラはありますか?

4

3 に答える 3

7

Linux カーネルは NUMA を認識しており、ローカル メモリから現在の CPU へのプロセス ページを提供しようとします (出典: U. Drepper、"What Every Programmer Should Know About Memory" )。

于 2010-01-26T19:55:58.593 に答える
5

NUMA 対応のメモリ割り当ては、コンパイル時には行われません。このような仮定を行うと、移植性が低下します。

Linux では、これはカーネル関数ですが、実行時にnumactlまたはset_mempolicyまたはで制御できますlibnuma

于 2010-01-26T20:27:36.657 に答える
4

MS プラットフォームの場合、コンパイラは NUMA を認識しません。ただし、システムは NUMA を認識しており、同じノードにメモリを割り当てようとします。

最近のバージョンの Windows での NUMA の処理方法の詳細については、http://code.msdn.microsoft.com/64plusLPを参照してください。

于 2010-01-26T19:50:30.587 に答える