デバイスの列挙と選択
cudaSetDevice と GPU ごとのコンテキスト
「デバイスの列挙と選択」はCoddyKit上の無料CUDA Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCUDA Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CUDA Academyコースには全4レッスンが含まれています。
複数のGPU
1台のマシンに複数のGPUを搭載できます。すべてを使うには、処理を送る前に、プログラムがまず存在するデバイスの数を検出する必要があります。
デバイスを数える
ランタイムから見えるGPUの数は、1回の呼び出しで取得できます。cudaGetDeviceCountは、その数を渡したintに書き込みます。
int count;
cudaGetDeviceCount(&count);デバイスには番号が付く
各GPUには、0からcountマイナス1までの整数IDが割り当てられます。このデバイスIDで、ランタイムに特定のカードを指定します。
アクティブなデバイスを選ぶ
次の呼び出しの対象にするGPUは、cudaSetDeviceで選択します。以降、メモリ確保とカーネルの起動はそのカードに対して行われます。
cudaSetDevice(1);カレントデバイスが存在する
常に、呼び出し元スレッドに対してちょうど1つのGPUがカレントデバイスになります。すべてのcudaMallocやカーネル起動は、その時点でカレントになっているデバイス上で行われます。
デバイスを調べる
GPUを信頼して使用する前に、その仕様を読み取れます。cudaGetDevicePropertiesは、名前、メモリ容量、compute capabilityをstructに格納します。
cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, 0);プロパティを読む
プロパティstructには多くの情報が含まれます。nameやtotalGlobalMemなどのフィールドを使うと、最適なカードを選んだり、容量が小さすぎるカードを除外したりできます。
各デバイスが自身のメモリを所有する
cudaMallocから返されたポインタは、その時点でカレントだったGPUに属します。別のデバイスをカレントにした状態でそのポインタを使用すると、エラーにつながります。
デバイスごとのコンテキスト
各GPUの背後には、そのGPUのメモリ割り当てとストリームを保持するコンテキストがあります。カレントデバイスを切り替えると、そのデバイスのコンテキストへ切り替わります。
すべてのGPUをループする
一般的なパターンは、各IDに対してcudaSetDeviceを呼び出し、そのカード上で初期設定を行うループです。これにより、すべてのデバイスに処理を分散できます。
for (int d = 0; d < count; d++) {
cudaSetDevice(d);
}離れる前に元へ戻す
ヘルパー関数がカレントデバイスを変更した場合は、処理の完了時に元へ戻してください。カレントデバイスを変更したままにすると、コードの他の部分が予期しない動作をする可能性があります。
簡単な確認
次のメモリ割り当てとカーネル起動で使用するGPUを選択する呼び出しを思い出してください。
まとめ
GPUの数を数え、cudaSetDeviceで1つを選び、プロパティを調べます。各デバイスは独自のメモリとコンテキストを所有します。次は、それらの間で処理を分割します。✨
AI チューターと学ぶ C++ — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「デバイスの列挙と選択」レッスンは無料ですか?
はい。「デバイスの列挙と選択」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CUDA Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CUDA Academyコースには全4レッスンが含まれています。
「デバイスの列挙と選択」で何を学びますか?
cudaSetDevice と GPU ごとのコンテキスト ブラウザで直接実行するハンズオンコードでCUDA Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
CUDA Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCUDA Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「デバイスの列挙と選択」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCUDA Academyレッスンでコードを書いて実行できますか?
はい。すべてのCUDA Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- デバイスの列挙と選択
- GPU 間のワーク分割
- ピアツーピアメモリアクセス
- NCCL によるマルチ GPU