問題タブ [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.

0 投票する
0 に答える
187 参照

multiprocessing - x86_64 マシンでの NUMA シミュレーション

ある種のシミュレーション ツールを使用して、x86_64 マシンで NUMA アーキテクチャに固有の実験を実行する方法があるかどうかを知りたかったのです。

偽の NUMA ノードの作成に関するリソースに出くわしましたが、それらを正確に使用する方法がわかりませんでした。方法があれば、仮想マシンも問題ありません。

ありがとう、

0 投票する
0 に答える
328 参照

multithreading - CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN は Intel/AMD OpenCL CPU ランタイムでサポートされていません

条件:

デュアル ソケットXeonを備えた HPC サーバーの説明に従って、AMD OpenCL バージョンAMD-APP-SDK-v2.8-lnx64および Intel OpenCL バージョン *intel_sdk_for_ocl_applications_xe_2013_r2_sdk_3.1.1.11385_x64* (バージョン識別はこれ以上複雑ではありません) をインストールしました。 E5-2650、Xeon Phi コプロセッサー、64 GB のホスト メモリ、および Red Hat Enterprise Server 6.4。

問題の説明:

NUMAの問題を回避するために、OpenCLデバイスの分割を行いたいと考えています。残念ながら、デバイス (Intel CPU) または Linux カーネルがCL_DEVICE_PARTITION_BY_AFFINITY_DOMAINをサポートしていないようです。Intel OpenCL と AMD OpenCL の両方を試しました。AMD OpenCL デバイス クエリでは、アフィニティ ドメイン オプションをサポートしていると表示されていますが、実際にはサポートされていません。フォーラムの投稿によると、これは現在の Intel OpenCL ドライバーのバグだと思います。

考えられる解決策:

(合計 32 個の並列計算コアから) 最初の 16 個の並列計算コア (8 コア + 8 ハイパースレッド) を選択できれば、それらは最初のソケットにマップされると考えました。残念ながら、Intel OpenCL は 16 個の並列計算コアを 32 個のコアにランダムに分散します。一方、AMD OpenCL は最初の 16 個の並列計算コアを選択しますが、OpenCL コンパイラは私が実行しているカーネルでうまく機能しません。ここでもランチなしの定理が成り立ちます。

質問:

  1. OpenCL が計算に使用する並列計算コアを指定する方法はありますか?
  2. OpenCL でこの NUMA の問題を解決する方法はありますか?

NUMA アフィニティの経験に関するコメントは大歓迎です。

ありがとうございました!


アップデート

単一ソケットのテストにのみ適用される部分的な回避策:

(Linux の場合) NUMA ノードからすべてのコアを無効にして、OpenCL ICD が他の NUMA ノードのハードウェア スレッドからのみ選択できるようにします。例えば。2 ソケット 32 HTT システムの場合:

このハッキングに副作用がないかどうかはわかりませんが、これまでのところ (少なくともテストでは) 機能しているようです。

0 投票する
2 に答える
2502 参照

c++ - NUMA: C++ 配列が割り当てられている RAM の部分をチェックする方法は?

2 つの CPU と 64 GB の RAM、CPU あたり 32 GB のサーバーがあります。

各CPUにはRAMの独自の部分があることを知っています.RAM1とRAM2と呼びましょう。プログラムにデータを割り当てる RAM (RAM1 または RAM2) を知らせたいと思います。

ポインターの値を確認しようとしました:

しかし、出力はランダムに見えます。これは、アドレスが仮想であるためだと思います。仮想メモリ アドレスと RAM の一部との間に対応関係はありますか?

配列「a」が割り当てられているRAMを確認するにはどうすればよいですか?

0 投票する
2 に答える
1871 参照

linux - numademo の出力の解釈方法

numademo ユーティリティ (numactl パッケージの一部) は、多くの一般的な Linux ディストリビューション (RHEL、SLES など) に同梱されています。このツールに関連するドキュメントを見つけようとしましたが、有用な情報を見つけることができませんでした。誰も使っていないか、使っている人全員が知っているかのどちらかです。

ここに出力例があります

2ノード利用可能

これらのテストがどのように実行されるかを知る必要がありますか?

これらの結果をどのように解釈するか?

例: 次の数値が大幅に異なる原因は何ですか。

ありがとう、ハルシャナ

0 投票する
1 に答える
472 参照

multithreading - NUMA システム、仮想ページ、偽の共有

私が理解しているように、NUMA システムでのパフォーマンスのために、避けるべき 2 つのケースがあります。

  1. 同じソケット内のスレッドが同じキャッシュ ラインに書き込む (通常は 64 バイト)
  2. 異なるソケットから同じ仮想ページに書き込むスレッド (通常は 4096 バイト)

簡単な例が役に立ちます。2 ソケット システムがあり、各ソケットに 2 つの物理コア (および 2 つの論理コア、つまりモジュールごとに Intel ハイパースレッディングまたは AMD 2 コアがない) を備えた CPU があると仮定します。OpenMPの図をお借りしましょう: スケジュール用

したがって、ケース 1 に基づいて、たとえばスレッド 0 とスレッド 1 が同じキャッシュラインに書き込むことを避けるのが最善であり、ケース 2 に基づいて、たとえばスレッド 0 がスレッド 2 と同じ仮想ページに書き込むことを避けるのが最善です。

ただし、最新のプロセッサでは、2 番目のケースはもはや問題ではないとのことです。ソケット間のスレッドは、同じ仮想ページに効率的に書き込むことができます (同じキャッシュ ラインに書き込まない限り)。

ケース 2 はもはや問題ではありませんか? それでも問題がある場合、これに対する正しい用語は何ですか? 両方のケースを一種の偽の共有と呼ぶのは正しいですか?