2 つ以上のホスト スレッドが cuda ランタイムを使用している場合、cuda ランタイムが GPU デバイスを選択する方法を教えてください。
ランタイムはスレッドごとに個別の GPU デバイスを選択しますか?
GPU デバイスを明示的に設定する必要がありますか?
ありがとう
2 つ以上のホスト スレッドが cuda ランタイムを使用している場合、cuda ランタイムが GPU デバイスを選択する方法を教えてください。
ランタイムはスレッドごとに個別の GPU デバイスを選択しますか?
GPU デバイスを明示的に設定する必要がありますか?
ありがとう
はい、GPU デバイスを明示的に設定する必要があります。そうしないと、デフォルトのデバイスが使用されます (通常はデバイス 0)。
ランタイムが 1 つのデバイスの使用を開始すると、同じスレッドで呼び出されるすべての関数がそのデバイスに固定されることに注意してください。
スレッドを開始するときに役立つと思うのは
cudaThreadExit(); // clears all the runtime state for the current thread
cudaSetDevice(deviceId); // explicit set the current device for the other calls
cudaMalloc
cudaMemcpy
etc..
プログラミング ガイドには、専用の章があります。
GPU が設定されているモードによって異なります。
を呼び出してGPUnvidia-smi -q
の を見つけます。Compute Mode
使用する CUDA フレームワークのバージョンによって、出力は異なります。
基本的に、デフォルトモードは GPU に設定されています。複数のコンテキストを同じ GPU 上で交互に実行できます。ただし、各コンテキストは GPU を明示的に解放する必要があります。コンテキストが GPU を所有している間、他のコンテキストは短期間ブロックされ、タイムアウト後に強制終了されます。
この制限を回避するnvidia-smi -c
には、必要に応じて、次の明示的な値のいずれかを使用して呼び出すことができます。
はい、GPUデバイスは明示的に設定する必要があります。
1つの簡単な戦略は、すべてのGPUをEXCLUSIVE_THREAD
(jopasseratで示されているように)に設定することです。スレッドは、使用可能なすべてのGPUを反復処理し、成功するまで無料のGPUを取得しようとします。
の場合、同じメカニズムが正常に機能しEXCLUSIVE_PROCESS
ます。
cudaツールキットのドキュメントの3.4計算モードを参照してください。