0Pricing
CUDA Academy · レッスン

コピーと計算をオーバーラップさせる

カーネルの背後に転送処理を隠します。

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

重要な考え方

本当の高速化は、2 つの処理を同時に行うことで実現します。つまり、GPU が別のデータチャンクを計算している間に、1 つのチャンクをコピーします。🔀

分離されたハードウェアエンジン

GPU には、個別のコピーエンジンと計算ユニットがあります。これらが交互ではなく本当に並列で動作できるため、処理を重ね合わせられます。

ページ固定メモリが必要

非同期コピーには、cudaMallocHost で確保したページ固定ホストメモリが必要です。通常のページング可能な malloc ではブロッキングコピーが強制され、重ね合わせられません。

cudaMallocHost(&h_data, bytes);

非同期コピー

ストリームとともに cudaMemcpyAsync を使うと、転送はすぐに戻り、カーネルと同じストリームのキューに入ります。

cudaMemcpyAsync(d_in, h_in, bytes, cudaMemcpyHostToDevice, s);

処理をチャンクに分割する

配列を複数の部分に分け、それぞれを専用のストリームに割り当てます。stream 0 が計算している間に、stream 1 はすでにコピーを開始できます。

コピー、計算、コピー戻し

各チャンクは、自分のストリームで同じ 3 つの手順を実行します。入力をアップロードし、カーネルを実行し、出力をダウンロードします。ホストはブロックされません。

cudaMemcpyAsync(d, h, n, H2D, s);
k<<<g, b, 0, s>>>(d);
cudaMemcpyAsync(h, d, n, D2H, s);

重ね合わせが形成される仕組み

チャンクが異なるストリームに存在するため、GPU はチャンク 1 の計算中にチャンク 2 をコピーできます。タイムラインが埋まっていきます。📊

PCIe のコストを隠す

転送時間はもはや総時間に加算されず、計算処理の背後に隠れます。理想的には、実行時間はコピー時間とカーネル時間の長い方に近づきます。

デフォルトストリームに注意する

ループの途中にデフォルトストリームを使う呼び出しが 1 つでもあると、すべてが再び直列化される可能性があります。すべての非同期処理を、実際の非デフォルトストリームに関連付けてください。

プロファイラーで確認する

Nsight Systems を開き、コピーと計算のレーンが時間的に重なっているか確認します。レーンが積み重なってビジーになっていれば、並行性が実際に発揮されています。

最後に同期する

すべてのチャンクを発行したら、cudaDeviceSynchronize を 1 回呼び出し、ホストで最終結果を読み取る前にすべてのストリームを完了させます。

cudaDeviceSynchronize();

理解度チェック

非同期転送を計算と重ね合わせるには、何が必要でしょうか。

まとめ

ページ固定メモリと非同期コピーを使い、処理をストリーム間でチャンクに分けることで、転送を計算の背後に隠し、GPU を本当に稼働させ続けられます。🚀

よくある質問

「コピーと計算をオーバーラップさせる」レッスンは無料ですか?

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

「コピーと計算をオーバーラップさせる」で何を学びますか?

カーネルの背後に転送処理を隠します。 ブラウザで直接実行するハンズオンコードでCUDA Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「コピーと計算をオーバーラップさせる」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. デフォルトストリームの落とし穴
  2. ストリームを作成して使う
  3. 計測と同期にイベントを使う
  4. コピーと計算をオーバーラップさせる
← CUDA Academyに戻る