問題タブ [numa]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - CLRがNUMAをすぐに適応させると思いますか?
NUMAは並列プログラミングに有望であるように思われます。私が間違っていなければ、現在の最新のCPUにはi7のようなサポートが組み込まれています。
CLRがNUMAをすぐに適応させると思いますか?
編集:これは、それをサポートし、それを利用することを意味します。
windows - 32 ビット OS での Nehalem Xeon のパフォーマンス、XP と 2003 の比較
WinXP または Win2003 で 32 ビット コードを実行する必要があります。Nehalem Xeons (5500 シリーズ) が最速のはずですが、メモリ配置がどうなるかはわかりません。私は2つの部分について確信が持てません:
- 最高速度のメモリ セットアップを取得するには、少なくとも 6 GB の RAM をインストールする必要があります (各 CPU に 3 スティックを動作させるため)。32 ビット OS (WinXP または 2003) で最大のパフォーマンスが得られるようにメモリがインターリーブされていますか? (数 GB の RAM を浪費しても問題ありません)。
- Win2003 の NUMA サポートは Xeon 5500 で動作しますか? (もしそうなら、WinXP ではなく Win2003 を使うべきだと思いますか?)
c++ - NUMA システムでノード距離 (ホップ) を取得する
2 つの NUMA ノード間の「距離」(文献では「ホップ」と呼ばれる) を取得する API/方法はありますか? これを利用したメモリ割り当てシステムを実装したいと考えています (アクセスが速いため、最も近いノードからメモリを再利用します)。
Windows にはそのような機能がないようです...そして libnuma (Linux の場合) にもないようです。この情報を取得する方法はありますか (「cpuid」などを使用しても) ?
linux - プロセスを同時に開始すると、ずらして開始するよりも遅くなります。なぜ?
16GB RAM を搭載した 8 コア マシンで実験的なシステム セットアップのパフォーマンスを評価しています。私は 2 つのメイン メモリ Java RDBMS (hsqldb) を実行しており、これらのそれぞれに対して (jTPCC/BenchmarkSQL から派生した) TPCC クライアントを実行しています。
私は物事を起動するためのスクリプトを持っているので、例えば hsqldb インスタンスは以下で開始されます:
ほぼ同時にクライアントを起動した場合:
次に、これらの各クライアントの初期レートが約 500 ~ 1000 tpmC (基本的には 1 分あたりのトランザクション数) で急上昇し、その後すぐに (1 秒以内に) 約 200 ~ 250 tpmC のレートに落ち着きます。OTOH、2 番目のクライアントを開始する前に 1 ~ 2 秒待つと、次のようになります。
次に、各クライアントは 2500+ tpmC で実行されます。1 秒以上待っても、それ以上の違いはありません。
クライアント 0 はサーバー 0 と通信し、クライアント 1 はサーバー 1 と通信するだけなので、これは奇妙です。なぜこのような劇的なパフォーマンスの干渉があるのかは不明です。
これはクライアントの CPU スケジューラ アフィニティによるのではないかと考えましたが、低速で実行するとシングル コアの約 1 ~ 3% しか使用しません (高速で実行すると 20 ~ 25%)。別の疑いは、クライアントの NUMA バインディング (同じメモリ ノードでのメモリ競合) にありましたが、マシンにはメモリ ノードが 1 つしかなく (/sys/devices/system/node/node0 しかありません)、さらに各クライアントはわずか 0.8% しか使用していません。メモリの。
また、hsqldb インスタンスの CPU バインディングが原因であるとは思われません。クライアントを再起動するだけで (そして 1 秒間待機する/待機しない)、高速と低速の両方の動作が見られ、両方で同じ hsqldb インスタンスが実行されたままになるためです (つまり、 hsqldb を再起動する必要はありません)。hsqldb は、低速の場合は 4 ~ 8% の CPU、高速の場合は 80% の CPU、および 4.3% のメモリを消費します。
なぜこれが起こっているのか、他のアイデアはありますか?ディスク IO は関係なく、システムのメモリを使い果たすことはほとんどありません。前もって感謝します。その他の関連情報は次のとおりです。
c++ - GetNumaProximityNode(Win7 +)の使用方法は?
Win7 / Server2008R2以降、GetNumaProximityNode(Ex)関数を使用できます。NUMAノード間の距離を取得するのに役立つはずですが、ドキュメント( http://msdn.microsoft.com/en-us/library/ms683206(VS.85).aspx)からはどのように機能するのか理解できません。 。距離を指定すると、対応するノードが返されます(存在する場合)。
LinuxカーネルといくつかのHPAPICドキュメントからいくつかのコードを読むと、距離は10の整数倍で表されることがわかりました(自己までの距離は10です)が、18のようなものになることもあります(正確に2倍遅くなるわけではありません)。しかし、Windows APIを使用して2つのノード間の距離を計算する方法をまだ理解できません(Linuxではlibnumaにはこれを行う「距離」関数があります)。
この関数の使い方を知っている人はいますか?
linux - gcc、icc、またはMicrosoftのC / C ++コンパイラはNUMAをサポートまたは知っていますか?
キャッシュコヒーレントな 不均一メモリアクセス(NUMA)を備えたマルチプロセッサボードがある場合、つまり、プロセッサごとに個別のRAMを備えた個別の「ノースブリッジ」がある場合、コンパイラは、データをさまざまなメモリシステムに自動的に分散する方法を知っていますか?ローカルスレッドで動作しているプロセスは、ほとんどの場合、スレッドが実行されているプロセッサに関連付けられているRAMからデータを取得していますか?
1 GBがプロセッサ0に接続され、1GBがプロセッサ1に接続されるなどの設定があります。最大4つのプロセッサ。コヒーレントメモリ空間では、1番目のプロセッサのRAMの物理メモリはアドレス0〜1GB-1です。2番目のプロセッサの場合は1GBから2GB-1、というようになります。
malloc
特定のコア上のプロセスによって割り当てられた新しいメモリを、そのコアに関連付けられた物理RAMに関連付けるコンパイラはありますか?
atomic - _mm_mwait はどのように機能しますか?
どのよう_mm_mwait
にpmmintrin.h
働くのですか?(asm ではなく、アクションと、このアクションが NUMA システムでどのように実行されるかを意味します。store
監視は、バスのスヌーピングを備えたバスベースの SMP システムでのみ簡単に実装できます。)
どのプロセッサがそれを実装していますか?
一部のスピンロックで使用されていますか?
memory - Windows XP での物理モジュールへのメモリ アドレスのマッピング
Intel の Nehalem マイクロアーキテクチャに基づくデュアル プロセッサとトリプル チャネル RAM を搭載したワークステーションで 32 ビット Windows XP を実行する予定です。XP の RAM は 4 GB に制限されていますが、4 GB 以上をインストールしても機能しますが、公開されるのは 4 GB (またはわずかに少ない) だけであると理解しています。
私の質問は次のとおりです。6 GB の RAM が 6 つの 1 GB モジュールにインストールされていると仮定すると、Windows が実際にそのアドレス空間にマップする物理的な 4 GB はどれですか?
特に:
すべてのメモリ チャネルを利用して、6 つの 1 GB モジュールすべてを使用しますか? (私の推測ではそうです。グループ内の個々のモジュールへのマッピングはハードウェアで行われると思います。)
2 つの NUMA ノードのそれぞれに 2 GB のアドレス空間をマップするか (各プロセッサには独自のメモリ インターフェイスがあるため)、または一方のプロセッサが 3 GB の RAM に高速アクセスし、もう一方のプロセッサには 1 GB しかありませんか?
ありがとう!
c++ - Windows7でのNUMAメモリ領域の割り当て
私たちのアプリケーションは次のとおりです。
- ハードウェア構成は、Windows7/64ビットを実行するデュアルXeonサーバーです。各Xeonには、[NUMA][1]構成の独自の12GBRAMがあり、2つのメモリ領域を相互に接続するブリッジがあります。
- すべてのソフトウェアは、c ++でVS2008を使用して記述され、64ビットアプリケーションとしてコンパイルされます。
- Generationアプリは、最初のXeonプロセッサで実行するようにプロセッサアフィニティが設定されたプロセスによってのみアクセスされる大容量の共有メモリ(4〜6 GB)領域を作成します。
- 受信アプリは、2番目のXeonプロセッサで実行するプロセッサアフィニティが設定されたプロセスによって主に使用される大きな共有メモリ領域(2〜4 GB)を作成します。ただし、Generation Appが1セットのデータ(32mbから128mb)の構築を完了すると、その情報をこのXeonで実行されている共有メモリ領域に転送します。
- 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プロセッサ。
c++ - Windows7/64のVirtualAllocExNumaでメモリアクセス時間が遅い
このアプリケーションでは、各プロセッサに対してローカルで12GBとして構成されたメモリと、2つのXeonを接続するメモリバスを備えたデュアルXeonサーバーで実行しています。パフォーマンス上の理由から、メモリの大きな(> 6gb)ブロックを割り当てる場所を制御する必要があります。以下は簡略化されたコードです-
コードはそのままで、Win7/64でVS2008を使用して正しく機能します。
このアプリケーションでは、このメモリブロックは、通常はハードドライブに保存される静的オブジェクト(1〜2 MB EA)のキャッシュストアとして機能します。私の問題は、memcpyを使用してデータをキャッシュ領域に転送する場合、を使用してメモリを割り当てる場合の10倍以上の時間がかかることnew char[xxxx]
です。そして、他のコードは変更されません。
なぜこれが起こっているのか理解するのに途方に暮れています。どこを見るべきかについて何か提案はありますか?