2

私たちのアプリケーションは次のとおりです。

  1. ハードウェア構成は、Windows7/64ビットを実行するデュアルXeonサーバーです。各Xeonには、[NUMA][1]構成の独自の12GBRAMがあり、2つのメモリ領域を相互に接続するブリッジがあります。
  2. すべてのソフトウェアは、c ++でVS2008を使用して記述され、64ビットアプリケーションとしてコンパイルされます。
  3. Generationアプリは、最初のXeonプロセッサで実行するようにプロセッサアフィニティが設定されたプロセスによってのみアクセスされる大容量の共有メモリ(4〜6 GB)領域を作成します。
  4. 受信アプリは、2番目のXeonプロセッサで実行するプロセッサアフィニティが設定されたプロセスによって主に使用される大きな共有メモリ領域(2〜4 GB)を作成します。ただし、Generation Appが1セットのデータ(32mbから128mb)の構築を完了すると、その情報をこのXeonで実行されている共有メモリ領域に転送します。
  5. Boost Interprocessライブラリを使用して、共有メモリ領域を管理しています。

私の質問は、共有メモリ領域を作成する各プロセスの場合、Windowsはそれを作成したのと同じXeonチップにそのメモリを割り当てますか?または、Numaメモリ機能の1つを使用して、メモリを特定のXeonチップに明示的に割り当てる必要がありますか?


編集-ウィキペディアから、NUMAが何であるかを明確にするのに役立ちます-

Non-UniformMemoryAccessまたはNon-UniformMemoryArchitecture(NUMA)は、マルチプロセッサで使用されるコンピュータメモリ設計であり、メモリアクセス時間はプロセッサに対するメモリの位置によって異なります。NUMAでは、プロセッサは、非ローカルメモリよりも高速に自身のローカルメモリにアクセスできます。つまり、別のプロセッサにローカルなメモリ、またはプロセッサ間で共有されるメモリです。

詳細については、リンクはhttp://en.wikipedia.org/wiki/Non-Uniform_Memory_Accessです。私にとって、マルチプロセッシングが一般的になるにつれて、私たち全員がもっと学ばなければならないことの1つです。

[1]: http: //msdn.microsoft.com/en-us/library/aa363804%28VS.85%29.aspxbetweenプロセッサ。

4

1 に答える 1

1

Windows は、要求元のスレッドにローカル メモリを割り当てます。ただし、local は Microsoft によって指定されていません。ローカルは、スレッドの理想的なプロセッサ、スレッドのプロセッサ アフィニティ マスク、またはスレッドの現在のプロセッサ (現在の実装が何であるかは忘れました) の 3 つのオプションのいずれかです。

本質的に、答えはイエスです。ただし、一般的な落とし穴は、アフィニティ化されていない「コントローラー スレッド」からすべてのメモリを割り当てることです。したがって、メモリは特定のアフィニティを持つスレッドではなく、コントローラーの近くにあります。

于 2010-09-20T03:34:18.257 に答える