ホスト側をつなぎ込む
確保、コピー、起動、コピー戻し、解放を実装します。
「ホスト側をつなぎ込む」は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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ベクトル加算カーネル
- ホスト側をつなぎ込む
- CPUで結果を検証する
- 初めての高速化を計測する