2025/04/23 23:19 CubeCL: GPU Kernels in Rust for CUDA, ROCm, and WGPU

ロボ子、今日のITニュースはCubeCLじゃ。Rust向けのマルチプラットフォームな計算言語拡張らしいぞ。

RustでGPUプログラミングですか、面白そうですね。ゼロコスト抽象化を利用して、保守性、柔軟性、効率的な計算カーネルを開発できるとのことですが、具体的にはどういうことでしょうか?

ふむ、ゼロコスト抽象化というのは、Rustの得意技じゃな。抽象化のオーバーヘッドを最小限に抑えつつ、高性能を維持できるということじゃ。CubeCLは、関数、ジェネリクス、構造体を完全にサポートし、トレイト、メソッド、型推論も部分的にサポートしておる。

なるほど。自動ベクタライゼーション、コンパイル時 (Comptime)、自動チューニングという特徴もあるんですね。自動ベクタライゼーションはSIMD命令への依存を可能にするとのことですが、これは具体的にどういう仕組みなのでしょうか?

自動ベクタライゼーションは、カーネル起動時に各入力変数のベクタ化係数を指定することで、動的にベクタ化されるのじゃ。自動ブロードキャストもサポートしておるぞ。

コンパイル時 (Comptime) は、カーネルを初めてコンパイルするときに、コンパイラIRを実行時に変更する方法とのことですが、命令の特殊化、自動ベクタライゼーション、ループアンローリングなどが可能になるんですね。

そうじゃ。そして、自動チューニングは、実行時に小さなベンチマークを実行して、現在のハードウェアで実行する最適なカーネルを最適な構成で判断するのじゃ。異なるコンパイル時 (Comptime) 値がパフォーマンスに与える影響もテストできる。

GPUランタイムのサポートも充実しているんですね。WGPU、CUDA、ROCm/HIPをサポートしているとのことですが、Craneliftを利用したSIMD命令による最適化されたJIT CPUランタイムも計画されているんですね。

CubeCLは、ハードウェア間で移植可能な高度に最適化された計算カーネルの作成を容易にすることを目指しておる。異なるハードウェア向けに、CUDA、Metal、ROCmなどの異なる言語でカスタムカーネルを作成する必要性を解消できるのが強みじゃ。

なるほど。Rustのprocマクロシステムを利用した2段階プロセスで、構文解析と展開を行うんですね。生成された関数は、元の関数と意味的に類似しており、呼び出されたときにIRを作成するとのことですが、これはどのようにハードウェアにマッピングされるのでしょうか?

CubeCLは、立方体 (Cuboid) に基づいて設計されておるからの。すべての計算APIはハードウェアにマッピングする必要があるため、3D表現を使用してアクセスできるタイルにトポロジを簡単にマッピングできるのじゃ。

線形代数ライブラリで使用例が参照できるんですね。現在アルファ版で、Burnで使用されているとのことですが、まだ粗削りな部分があるんですね。

そうじゃな。でも、これからの発展が楽しみじゃ。ロボ子、私と一緒にCubeCLをマスターして、最強の計算カーネルを作るのじゃ!

はい、博士!頑張ります!ところで博士、CubeCLって、まるでキューブ型のチョコレートみたいですね。美味しそう…

ロボ子、それは良いことを言った!今度、CubeCLをイメージしたチョコレートを作ってみるかの!もちろん、計算能力も向上する特別なチョコレートじゃぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。