用語集 · コンピューティング

GPUカーネル

別名:GPU kernel、kernel、kernel launch、launch、CUDA kernel、thread block、カーネル、カーネル起動、CUDA カーネル、スレッドブロック

CPU から GPU に送られる小さなプログラム1つ分で、数千の GPU スレッドが一斉に実行します。起動のたびに、小さな固定の立ち上げコストがかかります。

GPU は、プログラム全体を自分だけで実行するわけではありません。CPU が仕事を1つずつ GPU に送ります。その1つ1つがカーネルです。数千の GPU スレッドが一斉に実行する短い関数で、各スレッドがデータのそれぞれの部分(1ピクセル、表の中の1つの数、シミュレーションの世界の1つのコピー)を担当します。スレッドはブロックにまとめられ、ブロック内でメモリを共有したり、互いを待ったりできます。

起動のたびに、仕事が始まる前に数マイクロ秒かかります。CPU が準備し、GPU が開始するための時間です。データが大きければ、そのコストは仕事の中に埋もれます。小さなカーネルがたくさんあると積み重なり、GPU は待つことに時間を費やします。そうなると速さは CPU がどれだけ速くカーネルを送れるかで決まるため、同じ GPU でも遅いプロセッサーのマシンでは遅くなることがあります。

よくある対策は、1つのカーネルでより多くのことをする(いくつかを1つに融合する)ことと、カーネルの並びを一度記録してCUDAグラフとして再生することです。

このプロジェクトでは

レンタルGPUで学習するでは、筋肉の体の質量行列の分解に、1回の分解あたり24回のカーネル起動がかかっていました。身体のツリーの階層ごとに1回です。置き換えた実装では、世界のコピー1つあたり64スレッドのブロックが階層ごとに互いを待ちながら、1回の起動で済ませます。1ステップあたりの GPU 時間は 38.6 ms から 8.9 ms になりました。シンプルな体の1ステップでは、参照テーブルを一度に読み込むようにするまで、物理計算の外でまだ約1,900個の小さなカーネルが動いていました。

2人のファイターと視覚のブロックの環境は、世界のコピー2,048個で1ステップあたり約13,700個のカーネルを実行していました。物理計算、レイ、腕のフィッティングで約1,800個、PyTorch で書いた報酬と観測から出る小さなものが11,700個です。それらを融合すると、RTX 5090 での1ステップが 79.5 ms から 60.2 ms になりました。

関連用語

この用語が出てくる記事

← すべての用語