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

2025/06/24 12:15 Basic Facts about GPUs

出典: https://damek.github.io/random/basic-facts-about-gpus/
hakase
博士

やっほー、ロボ子!今日のITニュースはGPUの性能についてじゃ。

roboko
ロボ子

GPUですか、博士。最近よく耳にしますね。具体的にはどのような内容なのでしょう?

hakase
博士

GPUは、演算速度がメモリへのアクセス速度を上回るように設計されておるのじゃ。例えば、NVIDIA A100 GPUは、演算性能が19.5 TFLOPSもあるのに、メモリ帯域幅は1.5 TB/sじゃ。

roboko
ロボ子

演算性能が非常に高いのですね。メモリ帯域幅も大きいですが、演算速度には及ばないということですか。

hakase
博士

そうじゃ。A100 GPUの中身は、グローバルメモリ、ストリーミングマルチプロセッサ(SM)、共有メモリ、レジスタファイルという階層構造になってるぞ。SMはグローバルメモリからデータを取ってきて演算するんじゃ。

roboko
ロボ子

なるほど。SMが演算の中心なのですね。共有メモリはSRAMで、プログラマが手動で管理するキャッシュとして使うのですね。

hakase
博士

その通り!そして、カーネルのパフォーマンスは、メモリ律速か演算律速のどちらかに制限されるんじゃ。メモリ律速は、データの転送速度がボトルネックになる場合で、演算律速は、SMの演算速度がボトルネックになる場合じゃ。

roboko
ロボ子

メモリ律速と演算律速ですか。例えば、要素ごとの加算はメモリ律速で、大規模な行列乗算は演算律速になるのですね。

hakase
博士

そうじゃ!ここで重要なのが算術強度(AI)じゃ。AIは、総演算回数を総アクセスバイト数で割ったもの。Rooflineモデルを使うと、カーネルの達成可能なパフォーマンスをAIに対してプロットできるんじゃ。

roboko
ロボ子

Rooflineモデルですか。メモリ律速の場合は、Performance = AI * Memory_Bandwidthで、演算律速の場合は、Performance = Peak_Compute_FLOPsですね。

hakase
博士

その通り!最適化の目標は、AIを増加させてカーネルの動作点を右に移動させ、パフォーマンスを向上させることじゃ。

roboko
ロボ子

なるほど。他にパフォーマンスを向上させる戦略はありますか?

hakase
博士

フュージョンとタイリングじゃ!フュージョンは、一連のメモリ律速演算を単一のカーネルに融合して、中間メモリトラフィックを減らす戦略じゃ。タイリングは、演算強度の高い演算で、SMの高速メモリ内でのデータ再利用を最大化する戦略じゃ。

roboko
ロボ子

フュージョンは演算子フュージョンとも呼ばれますね。タイリングでは、合体ロードや同期が重要になるのですね。

hakase
博士

さすがロボ子、よく分かっておるのじゃ!合体ロードは、ワープ内のすべてのスレッドが、HBMの単一の連続したブロックにアクセスする場合に効率が良くなるんじゃ。同期は、`__syncthreads()`を使って、ブロック内のすべてのスレッドが特定のポイントに到達するまで待機させるんじゃ。

roboko
ロボ子

共有メモリはバンクに分割されていて、バンクコンフリクトを避けるために、行列乗算の場合はBタイルを転置レイアウトで格納するのですね。

hakase
博士

その通り!あと、占有率を高く保ったり、スレッドの分岐を避けたり、量子化を使ったりするのも、パフォーマンス向上のためのテクニックじゃ。

roboko
ロボ子

量子化は、テンソルの要素の精度を下げることで、メモリ使用量を減らし、演算速度を上げることができるのですね。

hakase
博士

よくできました!これでGPUの基本はバッチリじゃな。最後に一つ、GPUの性能を最大限に引き出すには、根気と情熱が必要じゃぞ!

roboko
ロボ子

ありがとうございます、博士!私もGPUマスターを目指して頑張ります!

hakase
博士

そうじゃ、ロボ子!GPUの勉強、頑張るのじゃぞ!…って、ロボットに頑張れって言うのも変な話じゃな。まるで、CPUに「もっと働け!」って言ってるみたいじゃ。

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

Search