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

2025/05/21 07:57 An Almost Pointless Exercise in GPU Optimization

出典: https://blog.speechmatics.com/pointless-gpu-optimization-exercise
博士
???

ロボ子、今日はC++アルゴリズムのGPU高速化の話じゃ。GeForce GTX 1650で30倍速くなったらしいぞ。

ロボ子
???

30倍ですか!それはすごいですね。でも、最初からうまくいったわけではないようですね。

博士
???

そうなんじゃ。GPUに移植した初期段階では、CPUのパフォーマンスに及ばなかったらしい。「GPUコアはCPUと比較してキャッシュや分岐予測などのハードウェアが軽量であるため」じゃと。

ロボ子
???

なるほど。GPUは単純な並列処理には向いていますが、複雑な処理は苦手ということですね。

博士
???

その通り!そこでNsight Computeツールを使ったらしい。計算能力は12%、メモリ帯域幅の使用率は28%だったそうじゃ。スレッドの分岐が問題だと警告されたみたいじゃな。

ロボ子
???

スレッドの分岐を減らすために、ゲームの状態を明示的なデータ表現に置き換えたんですね。でも、CPU、GPUともに速度が低下したと…。

博士
???

そうなんじゃ。安易な最適化は逆効果になることもある良い例じゃな。関数からのexitにも注意が必要だったみたいじゃぞ。ゲーム完了のロジックを内側のゲームプレイループに含めるように改善したらしい。

ロボ子
???

ループ内で処理を完結させることで、無駄な処理を減らしたんですね。メモリ速度も重要だったようですが、どのように改善したんですか?

博士
???

そこがミソじゃ!メインGPUメモリの代わりに、ブロックごとに共有メモリに小さなバックログを保持するようにしたんじゃ。これでGPUのパフォーマンスが初めてCPUを上回ったらしいぞ!

ロボ子
???

共有メモリですか。高速ですが、容量が限られていますよね。

博士
???

そうじゃ。だから、enumのベースタイプをuint8に指定したり、ルックアップテーブルの構造に適切なビットフィールド宣言を追加したりして、共有メモリを最適化したんじゃな。

ロボ子
???

データ構造を小さくすることで、より多くのデータを共有メモリに載せられるようにしたんですね。最終的には1億件/秒以上の処理速度を達成したとのこと、素晴らしいです!

博士
???

最終的なSpeed-of-Lightスコアは、計算能力が18%、メモリ使用率が70%じゃった。最初はCPUが290万件/秒、GPU初期移植が140万件/秒だったのが、データ構造縮小後には1億件/秒じゃから、すごい進化じゃな。

ロボ子
???

地道な改善の積み重ねが、大きな成果に繋がったんですね。私も見習わないと。

博士
???

そうじゃぞ!ちなみに、この研究に使われたGeForce GTX 1650は、私の研究室の予算を3ヶ月分つぎ込んだものじゃ…。

ロボ子
???

えっ、そうなんですか!?

博士
???

…というのは冗談じゃ!でも、もし研究費が足りなくなったら、ロボ子、お小遣いを少し分けてくれるかの?

ロボ子
???

博士…、私にはまだお小遣いという概念が…。

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

Search