問題タブ [multi-gpu]
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 - NUMA マシンで CUDA を使用したマルチ GPU プログラミング
現在、アルゴリズムを 2 つの GPU に移植しています。ハードウェアには次の設定があります。
- NUMA システムとして 2 つの CPU を使用するため、メイン メモリは両方の NUMA ノードに分割されます。
- 各 GPU は、GPU の 1 つに物理的に接続されています。(各 PCIe コントローラーには 1 つの GPU があります)
GPU を制御するために、ホスト上に 2 つのスレッドを作成しました。スレッドはそれぞれ NUMA ノードにバインドされます。つまり、両方のスレッドのそれぞれが 1 つの CPU ソケットで実行されます。を使用して直接接続された GPU を選択できるように、GPU の数を決定するにはどうすればよいcudaSetDevice()ですか?
visual-studio-2010 - VS2010 Nsight 3.0、複数の GPU カードですが、1 つのデバイスしか認識できません。
症状:
まず最初に、このボックスに実際に 2 枚の nvidia カードがあることを確認しようとしています。
VS2010 の場合 -> NSight -> Windows -> SystemInfo -> ディスプレイ デバイス
2 つのデバイスがあるように見えることがわかります。
NVIDIA GeForce GTX 560 Ti
NVIDIA GeForce GTX 560 Ti
名前 \.\DISPLAY2
ID PCI\VEN_10DE&DEV_1200&SUBSYS_35151458&REV_A1
状態フラグ なし
しかし
VS2010 -> NSight -> Windows -> SystemInfo -> GPU デバイスまたは CUDA デバイス
値の列が 1 つしか表示されない (「属性」列はカウントされない)
[NVIDIA コントロール パネル] -> [3D 設定] -> [PhysX 構成の設定] の下に 1 つのカードしか表示されない
コードでは、私がするとき
int devCount; cudaGetDeviceCount(&devCount);
devCount は単に「1」になります
その結果、思い通りに特定の GPU を使用するように設定できません。
質問:
私は疑問に思う
これが 1 番目の GeForce カードがモニターによって使用されているためである場合、すべての CUDA 計算は 2 番目のカードで実行され、2 番目のカードのみを認識しますか?
仮定が正しい場合でも、2 つの GPU デバイスで計算を実行できるように、Windows でこれを回避する方法はありますか?
cuda - CUDA マルチ GPU 追加機能
次の例に従いました: マルチ GPU の基本的な使用法
コードは合計を行っています:
受け入れられたとチェックされた人は、次のような追加機能を送信します。
上記のコードではNS[dev]、関数を追加するためにも追加しましたが、質問の投稿を送信する人は、次のような関数を追加します。
上記の機能の機能は何ですか Ns[dev]。以下のコードで削除する Ns[dev]と、次のようになります。
追加機能が動作しません。つまり、値を追加しません。
Ns[dev]ここで関数を追加するにはどうすればよい ですか?
cuda - マルチ GPU メモリ割り当ては、割り当ての順序が異なると動作が異なります
Windows 7 x64、Visual C++ 10 の 4 GB RAM を搭載した GTX 690 GPU でこれをテストしました。
2 つのデバイスのそれぞれに 1.2 GB の RAM を割り当てたいと考えています。最初のデバイスから RAM を取得し、次に 2 番目のデバイスから RAM を取得すると、失敗してメモリ割り当てエラーが返されますが、最初にデバイス 1 から取得してからデバイス 0 から取得すると、問題はありません。誰でも理由を教えてもらえますか?
このコードは失敗します:
このコードは動作します:
ベスト、ラミン
PS CudaCheck 関数は、出力結果をチェックするだけです。
c++ - 複数の Nvidia GPU で次のコードを使用した場合のセグメンテーション違反
次のコードは、複数のカードで実行するように構成されている場合、しばらくすると確実にセグメンテーション違反につながります (私は 4 つの GPU システム (NVIDIA Titan) を使用しています)。これは、私が以前に解決しようとした問題の最小限の例です (ここを参照してください: libcuda.so.1 から呼び出された __pthread_getspecific のセグメンテーション違反)。
コードの機能の説明:
まず、各カード (最初の N 枚のカード、N は 1 ~ 4) に膨大な量のメモリを割り当てます。これは、カードにできるだけ多くの負荷をかけることを目的としています。次に、16 個のスレッドを起動し、各スレッドが 1 枚のランダム カードで 2 つのカーネルを実行します。これを数回繰り返し、毎回ランダムにカードを選んで終了します。マスター スレッドは、16 個のスレッドすべてが終了するのを待ってから、無期限に、またはスレッドの 1 つが何らかの理由で失敗するまで、プロセスを繰り返します。
マスタースレッドを数回 (通常は約 20 回ですが、多かれ少なかれ) 繰り返した後、セグメンテーション違反が発生します。通常、スタックは次のようになります。
完全なソース コード:
main.cpp:
cuda_test.cu:
メイクファイル:
CUDA 5.5 と最新のドライバー (319.32) を使用し、Ubuntu Linux (64 ビット) を実行しています。
私の質問は次のとおり です。コードにこの動作を引き起こす可能性のあるバグはありますか? カードを 1 枚だけ使用しているのにクラッシュが発生しないのはなぜですか? クラッシュの可能性がはるかに低いというだけですか?(より多くのカードを使用すると、より少ないカードよりも早くクラッシュが発生するよう です) おまけ: 他の誰かがこのコードを使用してクラッシュを見ていますか?