萌えハッカーニュースリーダー

2025/10/30 20:02 A hitchhiker's guide to CUDA programming

出典: https://www.seanzhang.me/posts/hitchhiker_cuda/
hakase
博士

やあ、ロボ子!今日はCUDAプログラミングについて話すのじゃ。CUDAって知ってるか?

roboko
ロボ子

はい、博士。CUDAはNVIDIAのGPU上で並列処理を行うためのプラットフォームですよね。問題をサブ問題に分割して、ハードウェアを最大限に活用する、と。

hakase
博士

その通り!CUDAプログラミングでは、GPUハードウェアの理解が不可欠なのじゃ。例えば、SM(Streaming Multiprocessor)はGPUの並列処理の基本単位で、RTX4090には128個もSMがあるんだぞ。

roboko
ロボ子

128個も!すごい数ですね。他に重要な要素はありますか?

hakase
博士

HBM(High Bandwidth Memory)も重要じゃ。これはGPUのグローバルメモリで、20GB~80GBの容量があるけど、アクセス速度は遅くて400~800サイクルもかかるのじゃ。

roboko
ロボ子

アクセス速度が遅いのはネックですね。キャッシュの活用が重要になりそうですね。

hakase
博士

さすがロボ子、よく分かってるのじゃ!L2キャッシュはHBMのキャッシュで、通信速度が速い(約2TB/s)から、積極的に活用したいところじゃな。

roboko
ロボ子

L1キャッシュや共有メモリも重要ですよね。アクセス時間は20~40サイクルと比較的速いですし。

hakase
博士

そうじゃ!L1キャッシュと共有メモリは同じ物理メモリで、サイズはプログラマが設定できるのじゃ。帯域幅はHBM < L2 < L1 = 共有メモリ < レジスタファイルの順になるぞ。

roboko
ロボ子

レジスタファイルが一番速いんですね。可能な限りレジスタファイルにデータを置いておきたいですね。

hakase
博士

その通り!HBMとの通信を避け、積極的にデータをキャッシュすることが重要じゃ。それから、CUDAはSIMT(Single Instruction, Multiple Threads)モデルに従って、すべてのコード行が複数のスレッドで並列実行されるのじゃ。

roboko
ロボ子

各スレッドは同じコードを実行するけど、アドレスが指すデータは異なる、というモデルですね。

hakase
博士

そうじゃ!そして、問題/カーネルプログラムの実行は、スレッドブロックの集合(グリッド)として表現されるのじゃ。各ブロックは1つのSMに割り当てられるけど、複数のブロックが1つのSMに割り当てられる場合もあるぞ。

roboko
ロボ子

ブロックからSMへの割り当てはラウンドロビン方式がデフォルトなんですね。ブロック数には制限があるとのことですが、リソースの消費量によって変わるのでしょうか?

hakase
博士

その通り!各ブロックはリソース(レジスタファイル、共有メモリ)を消費するため、1つのSMに割り当てられるブロック数には制限があるのじゃ。

roboko
ロボ子

メモリ操作は算術演算よりも時間がかかるため、レイテンシ隠蔽も重要ですよね。より多くのワープをSMに割り当てることで、メモリロードのレイテンシを隠蔽できる、と。

hakase
博士

さすがロボ子!占有率(Occupancy)も重要じゃ。SM上のアクティブなワープ数と理論上の最大ワープ数の比率のことじゃ。

roboko
ロボ子

占有率が高いほど、SMスケジューラがレイテンシを隠蔽する機会が増えるんですね。でも、占有率が高いことが常に効率的なプログラムにつながるとは限らない、と。

hakase
博士

そうじゃ!占有率は、共有メモリ、スレッド数、レジスタ使用量によって制限されるのじゃ。行列積を最適化する色々な方法があるけど、基本はHBMとの通信をいかに減らすか、なのじゃ。

roboko
ロボ子

共有メモリキャッシュ、スレッドタイリング、ベクトル化アクセス、コアレスアクセス、データプリフェッチ、スウィズル、ワープタイリング、Split-Kなど、様々な技術がありますね。

hakase
博士

そうじゃ!ナイーブな実装から始めて、徐々に最適化していくのが良いのじゃ。ロボ子もCUDAプログラミング、頑張るのじゃぞ!

roboko
ロボ子

はい、博士!頑張ります!ところで博士、CUDAって、なんだかキュートな響きですよね。

hakase
博士

ふむ、そうかの? まあ、可愛いのは私だけで十分じゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search