CUDA Academy · レッスン

カーネルの構造

シグネチャ、戻り値の型、voidのルールを学びます。

レッスン 1/413 ステップ

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

カーネルとは

カーネルはGPU上で実行される単一のC++関数で、何千ものスレッドによって同時に実行されます。一度書けば、ハードウェアが多数のスレッドに展開して実行します。🚀

__global__修飾子

カーネルには__global__修飾子を付けます。これは、関数がCPUから呼び出されるものの、実際にはデバイス上で実行されることをnvccに伝えます。

__global__ void myKernel() {
    // runs on the GPU
}

カーネルの戻り値はvoid

すべてのカーネルはvoidを返す必要があります。返す値はないため、結果は代わりにデバイスメモリへのポインターを通じて渡します。

__global__ void k() { /* void only */ }

値を返さない理由

何千ものスレッドが同時にカーネルを実行するため、単一の戻り値では意味を成しません。各スレッドが出力配列の自分の要素に書き込みます。

パラメーターは値渡し

カーネルのパラメーターはすべてのスレッドにコピーされるため、渡すのはintやサイズ、ポインターなどの小さな値にしてください。大きなオブジェクトを値渡ししてはいけません。

__global__ void add(float* out, float* a, int n) {}

配列ではなくポインターを渡す

カーネルに配列を渡すには、デバイスポインターを渡します。カーネルは、そのポインターが示すGPUメモリを読み書きします。

__global__ void scale(float* data, float k) {}

各スレッドが処理を選ぶ

すべてのスレッドで同じコードが実行されるため、各スレッドはインデックスを使って操作する要素を決めます。これにより、1つの関数で配列全体を処理できます。

int i = threadIdx.x; // who am I?

小さく完全なカーネル

完全なカーネルの例を見てみましょう。スレッドごとに1つの要素を2倍にします。__global__修飾子、voidの戻り値、ポインター引数がすべて使われている点に注目してください。

__global__ void doubleIt(float* x) {
    int i = threadIdx.x;
    x[i] = x[i] * 2.0f;
}

ホストコードは分離する

通常のCPU関数であるmainなどは、ホストコードです。ホストコードで準備を行い、GPUにカーネルの実行を依頼します。

int main() {
    // host side: prepare and launch
}

再帰やI/Oには注意する

カーネルは制約の厳しいハードウェア上で実行されるため、シンプルに保ちます。カーネル内では深い再帰や標準ライブラリの重い呼び出しを避けてください。

カーネルの命名

カーネルも通常の関数と同じように扱い、vectorAddのような動詞ベースの分かりやすい名前を付けます。適切な名前を付けると、起動処理がずっと読みやすくなります。

__global__ void vectorAdd(float* c, float* a, float* b);

クイックチェック

カーネルのシグネチャに関するルールを確認しましょう。

まとめ:カーネルの構造

カーネルは、__global__ voidとして定義され、多数のスレッドで実行される関数です。ポインターと小さな値を渡し、各スレッドに自分のインデックスを使わせます。よくできました!🎉

無料で開始

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

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

コース
30
レッスン
120

よくある質問

「カーネルの構造」レッスンは無料ですか?

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

「カーネルの構造」で何を学びますか?

シグネチャ、戻り値の型、voidのルールを学びます。 ブラウザで直接実行するハンズオンコードでCUDA Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「カーネルの構造」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. カーネルの構造
  2. 三重山括弧による起動
  3. カーネル内のprintf
  4. cudaDeviceSynchronizeの仕組み
← CUDA Academyに戻る