問題タブ [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.
java - Windows 7 で DB2 インフォメーション・センターを開始できない - NUMA エラー
DB2 Information Center をダウンロードし、解凍して開始しました。ただし、この時点でクラッシュが発生し、アプリケーションは起動しませんでした。ディレクトリにダンプファイルを作成しました。javacore ファイルには、次の部分が含まれています。
どういう意味ですか?Google で検索したところ、boot.ini ファイルに /usepmtimer に関する情報が見つかりましたが、Windows 7 にはこのファイルがありません。Windows 7 で Information Center をローカルで使用するにはどうすればよいですか?
python - NUMAハードウェアでのメモリ割り当てとアクセス
私はPythonで科学計算ツールを開発しています。これは、NUMA共有メモリ環境の複数のコアに作業を分散できるはずです。私はこれを行う最も効率的な方法を検討しています。
スレッドは-残念ながら-Pythonのグローバルインタープリターロックのためにゲームから外れています。これは私の唯一の選択肢としてフォークを残します。プロセス間通信の場合、オプションはパイプ、ソケット、またはmmapだと思います。このリストに不足しているものがある場合は、それを指摘してください。
私のアプリケーションでは、プロセス間のかなりの通信と、ある程度の共通データへのアクセスが必要になります。私の主な関心事はレイテンシーです。
私の質問:プロセスをフォークすると、そのメモリは割り当てられているコアの近くに配置されますか?書き込み時の*nixコピーのフォークとして、最初はこれが当てはまらないと思います。メモリアクセスを高速化するためにコピーを強制しますか?その場合、それを行うための最良の方法は何ですか?通信にmmapを使用する場合、そのメモリは引き続きコアに分散できますか、それとも単一のコアに配置されますか?アクセスを最適化するためにデータを透過的に再配置するプロセスはありますか?物理的な割り当てを直接制御する方法、または最適化を支援するために割り当てに関する情報を要求する方法はありますか?
より高いレベルでは、これらのうちどれが私のハードウェアによって決定され、どれがオペレーティングシステムによって決定されますか?私はハイエンドのマルチソケットマシンを購入している最中であり、AMDOpteronとIntelXeonの間で疑問を抱いています。上記の質問のいずれかに対する特定のハードウェアの影響は何ですか?
windows - NUMA-ローカルメモリ
我慢してください、私はこのCPU全体を掘り下げ始めたところです。
下のRAM
図に示されている正方形は、何を指しているのでしょうか。メモリページ?私の知る限り、CPUにはメモリに関連するものが1つだけあります。それは、キャッシュです。
それでRAM
、図の上のは単なる共有キャッシュですか、それともそれは何ですか?
c - ポインタ アドレスから NUMA ノードを取得できますか (Linux の C)?
NUMA システムでローカルにデータを慎重にロードして処理するようにコードをセットアップしました。おもう。つまり、デバッグ目的で、他の多くの関数によって設定された特定の関数内でアクセスされるポインターアドレスを使用して、メモリが指している NUMA ノードを直接識別できるようにしたいと考えています。に常駐しているので、すべてが配置されるべき場所に配置されていることを確認できます。これは可能ですか?
msdn http://social.msdn.microsoft.com/Forums/en-US/parallelcppnative/thread/37a02e17-e160-48d9-8625-871ff6b21f72でこのリクエストを見つけましたが、答えは QueryWorkingSetEx() を使用していますWindows固有のようです。これは Linux で実行できますか? 正確には、Debian Squeeze を使用しています。
ありがとう。
c - numa_alloc_onnode()を使用して割り当てると、「ページが存在しません」と表示されるのはなぜですか?
次のようにnuma_alloc_onnode()を使用して特定のNUMAノードにメモリを割り当てると:
次に、move_pages()を使用して、割り当てられたメモリが実際にノード1にあることを確認します。
どこ
「ptrはノード-2にあります」という答えが返ってきます。errno-base.hから、2がENOENTであることがわかり、move_pages()のマニュアルページには、このコンテキストでの-ENOENTのステータスは「ページが存在しない」ことを意味すると記載されています。
numa_alloc_onnode()を通常のmalloc()に置き換えると、正常に機能します。ノード番号を取得します。
ここで何が起こっているのか誰かが知っていますか?
前もって感謝します。
linux - NUMA 対応のキャッシュ アラインメント メモリ割り当て
Linux システムでは、pthreads ライブラリーは、キャッシュ・アライメント用の関数 (posix_memalign) を提供して、誤った共有を防ぎます。また、アーキテクチャの特定の NUMA ノードを選択するには、libnuma ライブラリを使用できます。私が欲しいのは、両方を必要とするものです。特定のスレッドを特定のプロセッサにバインドし、スレッドのメモリ操作の遅延を減らすために、対応する NUMA ノードから各スレッドにローカル データ構造を割り当てたいと考えています。これどうやってするの?
linux - ユーザーモードの NUMA 対応メモリアロケーターでインターリーブページ割り当てを実装する方法は?
Linux用のユーザーモードNUMA対応メモリアロケータを構築しています。初期化中のアロケータは、NUMA ノードごとに 1 つのチャンクである大量のメモリ チャンクを取得します。この後、ユーザーが要求したメモリー・ページは、ラージ・チャンク・プールからできるだけ多くのメモリー・ページを提供することで満たされます。
ユーザーが n ページを要求した場合、特定のチャンクから n ページを提供するのは簡単です。しかし今は、インターリーブ割り当てポリシーを実装したいと考えています。このポリシーでは、ユーザーは各チャンクから 1 ページをラウンドロビン方式で最大 n ページ取得します。これにより、これらのページの仮想アドレスが連続しなくなるという問題が発生します。
Q1: 仮想的にアドレス可能な連続メモリを返す方法はありますか? 私が考えることができる唯一の解決策は、あるページから別のページにジャンプする方法を知っている「スマート」ポインターを使用することです。
私がこの道を歩んでいる理由の 1 つは、ラウンドロビン ポリシーが厳密ではない (決定論的) Linux の MPOL_INTERLEAVE メモリ割り当てポリシーに満足できないことです。
Q2: 特定の仮想アドレス範囲がどのページと NUMA ノードにマップされているかを安価に知る方法はありますか? より正確には、 /proc/< proc_id >/numa_maps を読み取ってページレベルの詳細な情報を取得する方法がわかりません。
回答ありがとうございます。
powershell - Powershell: NUMA が構成されているかどうか、および各 NUMA ノードに割り当てられている CPU の数を調べますか?
Powershell を使用して、サーバーで NUMA が有効になっているかどうか、および各 NUMA ノードに割り当てられている CPU の数を確認するにはどうすればよいですか?
アップデート:
私はここで、microsoft.sqlserver.management.smo.server オブジェクト オブジェクトにaffinityinfo フィールドがあることを知りました。ただし、そのフィールドは、作成時に Powershell のサーバー オブジェクトに存在しません (Windows XP 上の SQL Server 2005)。
アップデート:
affinityinfo フィールドは、SQL Server 2008 R2 以降にのみ存在するようです。
matlab - NUMAマシンでの並列MATLABのパフォーマンスの問題
私は、Windows 7の64コアNUMAマシンのMATLABで、メモリを大量に消費する並列計算を実行しています。ソケットあたり8コアです。私はそれを行うために並列計算ツールボックスを使用しています。非常に奇妙なCPUロードパターンに気づきました。たとえば、36個の並列MATLABを実行すると、1番目のソケットのコアが完全にロードされ、2番目のソケットもほぼ完全にロードされ、3番目のソケットが約50%になります。最後のソケットは通常、ほぼ完全に解放されており、何もしていません。12を超える並列ワーカーを同時に実行すると、すべてのワーカーのパフォーマンスに非常に悪影響を与えるようです。
さまざまなワーカーをさまざまなコアに固定して、CPUアフィニティを試してみました。単純なテスト(つまり、CPUの負荷パターンがすべてのコアで均一になる)には役立ちますが、実際のメモリを大量に消費する計算には役立ちません。
問題はメモリの局所性にあると思います。つまり、すべてのメモリは1番目と2番目のソケットに割り当てられます。これは奇妙なCPU負荷を説明するでしょう:OSはデータの近くで計算スレッドを実行するのに疲れています。しかし、私はこの疑惑を直接確認する方法も、それが真実である場合にそれを修正する方法も知りません。
重要な場合は、すべての並列ワーカーでmaxNumCompThreads(4)を使用します。ハイパースレッディングはオフです。
c++ - Windows SetThreadAffinityMask は効果がありません
Windows API 呼び出し SetThreadAffinityMask を使用してスレッドを 1 つの NUMA ノードにロックする小さなテスト プログラムを作成しました。GetNumaNodeProcessorMask API 呼び出しでノードの CPU ビットマスクを取得し、そのビットマスクを GetCurrentThread によって返されたスレッド ハンドルと共に SetThreadAffinityMask に渡します。これが私のコードの大幅に簡略化されたバージョンです:
もちろん、コード内で API 呼び出しが 0 を返すかどうかを確認します。また、NUMA ノード マスクも出力しましたが、これはまさに期待どおりです。また、他の場所で提供されたアドバイスに従い、SetThreadAffinityMask への 2 回目の同一の呼び出しによって返されたマスクを出力しました。これはノード マスクと一致します。
ただし、DoWork 関数の実行時にリソース モニターを監視すると、表面上はバインドされているコアだけでなく、すべてのコアに作業が分割されます。SetThreadAffinityMask を使用しているときに見逃した可能性のあるトリップアップはありますか? 私は Windows 7 Professional 64 ビットを実行しており、DoWork 関数には OpenMP で並列化されたループが含まれており、3 つの非常に大きな配列の要素に対して操作を実行します (結合してもノードに収まります)。
編集: David Schwartz の回答を拡張するために、Windows では、OpenMP で生成されたスレッドは、それらを生成したスレッドのアフィニティを継承しません。問題は、SetThreadAffinityMask ではなく、それにあります。