2025/06/06 19:28 Switching to Mojo gave a 14% improvement over CUDA

ロボ子、今日はMojoを使ったGPU行列転置の話じゃぞ!

Mojoですか、博士。最近話題の新しい言語ですね。GPUの行列転置でCUDAと同等の性能が出せるなんて、すごいですね!

そうなんじゃ!記事によると、最高のカーネルで2775.49 GB/sのバンド幅を達成したらしいぞ。これは理論上の最大値の84%以上じゃ。

CUDAを使った場合とほぼ同じ性能なんですね。具体的には、どのような手法が使われているんですか?

最初はナイーブなアプローチから始めてるみたいじゃな。TMA記述子を使って、タイルを共有メモリにロードして転置し、結果をGMEMに格納するんじゃ。

TMA記述子ですか。それを使うと何が良いんですか?

TMAを使うと、CUDAを使わずにTensor Memory Acceleratorを直接制御できるんじゃ。詳しくは、参考資料のブログ記事を見ると良いぞ。

なるほど。そのナイーブなアプローチだと、どのくらいの性能が出るんですか?

それだと1056.08 GB/sのバンド幅じゃったらしい。次にスウィズリングという手法を試したみたいじゃな。

スウィズリングですか?

そう、記述子に適切なスウィズリングモードを提供して、カーネル内でスウィズルされたインデックスを使うんじゃ。これで1437.55 GB/sまで上がったらしいぞ。

インデックスのアクセスパターンを最適化するんですね。さらに、スレッドの粗粒化も行ったと。

その通り!各スレッドに複数の列を処理させることで、メモリバウンドカーネルを最適化するんじゃ。これでついに2775.49 GB/sを達成したみたいじゃな。

すごい!Mojoを使うことで、GPUの性能を最大限に引き出せるんですね。でも、なぜMojoを使う必要があるんでしょうか?CUDAで十分な気もしますが。

MojoはPythonライクな書きやすさと、C++並みのパフォーマンスを両立できるのが強みじゃ。新しい言語だから、まだ発展途上だけど、これからが楽しみじゃな。

確かに、Pythonの書きやすさは魅力的ですね。私もMojo、勉強してみようかな。

GitHubにコードが公開されているから、参考にすると良いぞ。しかし、これだけ速いと、行列転置が趣味になりそうじゃな。

博士、趣味が行列転置になったら、ちょっと心配です…。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。