CUDA Academy · レッスン

ホスト側をつなぎ込む

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

レッスン 2/413 ステップ

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

ホストにも役割がある

計算を行うのはカーネルですが、host CPUがすべての準備を整えます。役割は、確保、入力のコピー、起動、結果のコピー、解放です。🧩

2種類のポインタ

CPUの配列にはhost pointersを使い、GPUのバッファには別のdevice pointersを使います。h_Aとd_Aのように命名するのが一般的です。

float *h_A, *h_B, *h_C;
float *d_A, *d_B, *d_C;

CPUで入力を埋める

まず、通常のホストメモリ上でデータを準備します。ここでは、後でGPUが加算する値でh_Aとh_Bを初期化します。

for (int i = 0; i < n; i++) {
    h_A[i] = i; h_B[i] = 2 * i;
}

デバイス上で確保する

GPUには専用のバッファが必要なので、各配列に対してcudaMallocを呼び出します。サイズはバイト単位で、要素数にsizeof(float)を掛けて計算します。

size_t bytes = n * sizeof(float);
cudaMalloc(&d_A, bytes);

入力をコピーする

cudaMemcpyとHostToDevice方向を使って、入力配列をGPUへ移動します。カーネルが参照できるのは、デバイス上にあるデータだけです。

cudaMemcpy(d_A, h_A, bytes, cudaMemcpyHostToDevice);
cudaMemcpy(d_B, h_B, bytes, cudaMemcpyHostToDevice);

起動形状を決める

1ブロックあたりのスレッド数を決め、すべての要素をカバーするブロック数を計算します。切り上げれば、すべての要素にスレッドが割り当てられます。

int threads = 256;
int blocks = (n + threads - 1) / threads;

カーネルを起動する

デバイスポインタを渡し、triple-angle-bracket構文でカーネルを起動します。この呼び出しはすぐに戻り、GPUは処理を続けます。

vecAdd<<<blocks, threads>>>(d_A, d_B, d_C, n);

結果をコピーして戻す

カーネルが完了したら、cudaMemcpyDeviceToHostを使ってCを戻します。このコピーも、先に起動処理が完了するまで待機します。

cudaMemcpy(h_C, d_C, bytes, cudaMemcpyDeviceToHost);

デバイスメモリを解放する

GPUメモリはガベージコレクションされないため、すべてのバッファをcudaFreeで解放します。これを省略すると、プロセス終了までメモリリークが続きます。

cudaFree(d_A); cudaFree(d_B); cudaFree(d_C);

順序は厳守する

常に同じ順序に従ってください。確保、入力のコピー、起動、結果のコピー、解放の順です。順序を入れ替えると、カーネルが古いデータや無効なデータを読み取ります。

ホストコードは通常のC++

ホスト側は普通のC++に、いくつかのcuda呼び出しを加えたものです。カーネル起動以外に特別なコンパイラの仕組みはありません。

確認問題

vecAddカーネルを起動する前に、何を行う必要がありますか?

まとめ

ホスト側を最初から最後まで接続できました。2組のポインタ、cudaMalloc、データのコピー、起動、コピーの戻し、そして cudaFree までです。すべてのカーネルを動かす定型処理が整いました。✅

無料で開始

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

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

コース
30
レッスン
120

よくある質問

「ホスト側をつなぎ込む」レッスンは無料ですか?

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

「ホスト側をつなぎ込む」で何を学びますか?

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

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

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

「ホスト側をつなぎ込む」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. ベクトル加算カーネル
  2. ホスト側をつなぎ込む
  3. CPUで結果を検証する
  4. 初めての高速化を計測する
← CUDA Academyに戻る