CUDA Academy · レッスン

CUDAプログラムのライフサイクル

確保、コピー、起動、コピー戻し、解放を学びます。

レッスン 4/413 ステップ

「CUDAプログラムのライフサイクル」はCoddyKit上の無料CUDA Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCUDA Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CUDA Academyコースには全4レッスンが含まれています。

繰り返しのリズム

ほぼすべてのCUDAプログラムは、同じ5つの手順に従います。一度このリズムを覚えれば、どんなGPUコードでも読めるようになります。🕺

ステップ1:確保

まず、入力と出力のためのデバイスメモリをcudaMallocで確保します。GPUはホストバッファを直接使用できないためです。

cudaMalloc(&d_a, bytes);
cudaMalloc(&d_b, bytes);

ステップ2:コピーイン

次に、cudaMemcpyで入力データをホストからデバイスへアップロードします。これでGPUは処理用の独自のコピーを持ちます。

cudaMemcpy(d_a, h_a, bytes, cudaMemcpyHostToDevice);

ステップ3:起動

次に、カーネルを多数のスレッドで起動します。ここで、デバイス上の並列処理が実際に行われます。🚀

myKernel<<<blocks, threads>>>(d_a, d_b, n);

ステップ4:コピーアウト

計算が終わったら、結果をデバイスからホストへダウンロードし、CPUが読み取って利用できるようにします。

cudaMemcpy(h_b, d_b, bytes, cudaMemcpyDeviceToHost);

ステップ5:解放

最後に、すべてのデバイスバッファをcudaFreeで解放します。これを省略すると、ほかの処理で使えるGPUメモリがリークします。

cudaFree(d_a);
cudaFree(d_b);

同期を忘れない

カーネルの起動は非同期なので、結果を読み取る前にcudaDeviceSynchronizeを呼び出し、GPUの処理が本当に完了したことを確認します。

cudaDeviceSynchronize();

コピーには時間がかかる

コピー処理は低速なPCIeバスを通るため、ボトルネックはカーネル自体ではなく、データ転送であることがよくあります。

バッファを再利用する

一度だけメモリを確保して複数回の起動でバッファを再利用するほうが、ループの反復ごとに新しいメモリを確保するよりも効率的です。

パターンの対称性

対称性に注目してください。すべてのcudaMallocにはcudaFreeが対応し、すべてのコピーインには最終的にコピーアウトが対応します。

ライフサイクルを一息で

マントラのように唱えてみましょう。確保、コピー、起動、コピーアウト、解放。この一行が、ほぼすべてのカーネルプログラムの骨格です。

クイックチェック

標準的なCUDAプログラムのライフサイクルを確認しましょう。

まとめ

CUDAの5段階のライフサイクル、つまり確保、コピーイン、起動、コピーアウト、解放と、結果を読み取る前の同期について学びました。🎉

無料で開始

AI チューターと学ぶ C++ — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「CUDAプログラムのライフサイクル」レッスンは無料ですか?

はい。「CUDAプログラムのライフサイクル」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CUDA Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CUDA Academyコースには全4レッスンが含まれています。

「CUDAプログラムのライフサイクル」で何を学びますか?

確保、コピー、起動、コピー戻し、解放を学びます。 ブラウザで直接実行するハンズオンコードでCUDA Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

CUDA Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCUDA Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「CUDAプログラムのライフサイクル」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCUDA Academyレッスンでコードを書いて実行できますか?

はい。すべてのCUDA Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. __global__関数修飾子
  2. __device__関数と__host__関数
  3. アドレス空間を分離する
  4. CUDAプログラムのライフサイクル
← CUDA Academyに戻る