【じーぴーゆーかーねる】

GPUカーネル とは?

公開:
💡 GPUに渡す、計算の仕事をまとめた関数

GPUで実行するために呼び出す関数。配列の足し算などの処理を担い、OSの中核を指すカーネルとは意味が異なる。

📌 このページのポイント
GPUカーネル = GPUで実行する関数 CUDAのSIMTモデルによる配列加算の説明例 同じ関数で、担当する要素の番号を変える スレッド01 + 10 スレッド12 + 20 スレッド23 + 30 スレッド34 + 40 11223344 矢印は結果の書き込み。全スレッドの同時実行は保証しない。
OSのカーネルとは別の意味。要素ごとに処理を分担する例。
ひよこ ひよこ
ペンギン先生、GPUカーネルって、OSの中心にあるカーネルのことなの?
ペンギン先生 ペンギン先生
ここでは別の意味だよ。GPUで実行するために呼び出す関数のことなんだ。GPUという装置に、どんな計算をしてもらうかを書いたものだね。
ひよこ ひよこ
1つの関数で、たくさんのデータを計算できるの?
ペンギン先生 ペンギン先生
できるよ。たとえばCUDAのSIMTモデルでは、多数のスレッドが同じ関数のコードを実行するんだ。配列の足し算なら、各スレッドに別の要素を担当させられるよ。
ひよこ ひよこ
数字で見ると、どんな分担になるの?
ペンギン先生 ペンギン先生
4要素の配列を足す説明用の例なら、1+10、2+20、3+30、4+40を4つのスレッドに分けて、結果は11、22、33、44だよ。担当する要素の番号を使って読み書きするんだ。
ひよこ ひよこ
スレッドを増やせば、全部いっぺんに終わるんだね?
ペンギン先生 ペンギン先生
全部が同時に動く保証はないよ。GPUの実行資源に応じて処理されるんだ。速さにはメモリの使い方や処理の分け方も関わるから、カーネルにすれば必ず速い、とは言えないね。
もっと詳しく知りたい人へ

NPUのニュースにも「カーネル」と出るのはなぜ?

GPU以外の計算装置向けにも、この呼び名を使う実装があるからだよ。たとえばTileLang v0.1.15は、Ascend 950 NPU向けにCubeの行列計算とVector計算を1つのカーネルへ組み合わせる機能を説明している。ただし、GPU用の関数がそのまま任意のNPUで動くという意味ではなく、対象に合うバックエンドと実装が必要だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「GPUカーネル」って出てきたら「GPUで実行する計算用の関数」と思えればだいたいOK!
📖 おまけ:英語の意味
「GPU kernel」 = GPUで実行する関数
💬 CUDAの資料では、GPUで実行するために呼び出す関数をkernelと呼んでいるよ。同じkernelでも、OSの話とは文脈を分けようね。

参考資料

← 用語集にもどる