8月17日、Manuel S. Drehwaldらが「GPU Offload in Rust: Portable, Safe, and Fast」と題した論文をarXivで公開した。rustc(Rustコンパイラ)とLLVMのOffloadインフラにネイティブ統合されたゼロオーバーヘッドのマルチベンダー対応GPUコンパイルフレームワークを提案するもので、著者陣にはLLVM/OpenMP Offload研究の第一人者であるJohannes Doerfert(Argonne National Laboratory)が名を連ねている。なお本論文はarXivへの投稿段階であり、現時点で査読誌への採録は確認されていない点は留意されたい。
GPUプログラミングには長年の二律背反があった。実行効率を取ればCUDA/HIPのunsafeな生ポインタ操作、安全性を取ればベンダーロックインのDSL(ドメイン固有言語)という構図だ。この論文はその妥協を不要にすることを目指す。ベンダーに依存せず(NVIDIA・AMD両対応)、unsafeブロックなしに、ネイティブCUDA/HIPと肩を並べる性能を実現するという主張は、HPC(高性能計算)分野でRust採用を模索するエンジニアにとって直接刺さる内容だ。
技術的な核心:Rustの型システムをGPUへ持ち込む
このフレームワークの鍵は、Rustがすでに持つ言語機能の徹底した活用にある。
- 所有権システム:ホストとデバイス間のデータ転送を安全に管理する
- 厳格なエイリアシング保証(
noalias):LLVMのOffloadインフラを通じたデータ転送最適化に利用 - リッチな型システム:コンパイル時にGPUオフロードの安全性を検証
ゼロオーバーヘッドを実現するために2パスコンパイルパイプラインを採用している。1パス目でホスト側コードとGPUカーネルを分離・解析し、2パス目でメモリ移動(手動・コンパイラ自動生成の両方)を最適化・統合するという構成で、追加の実行時コストを発生させない設計だ。
また、論文ではABI不一致(ABI mismatch)問題も詳細に論じられている。GPUとCPUではコンパイラが前提とする呼び出し規約やデータレイアウトが異なるため、両者を同一コードベースで扱う際に構造体サイズや引数の受け渡しに不整合が生じやすい。GPU向けコンパイラ開発の経験がある開発者なら、この問題の厄介さは身に覚えがあるはずだ。
性能評価:CUDA手書き最適化コードと互角
ベンチマークにはRAJAPerf(LLNLが開発するパフォーマンスポータビリティテストスイート)を使用した。RAJAPerfはLawrence Livermore National Laboratoryが管理するHPCカーネルのポータビリティ検証用スイートであり、現実的なHPCワークロードに近い条件でのベンチマークとして広く参照されている。
結果として、rustcベースのソリューションはGPUカーネル向けに競争力のあるLLVM IRを生成し、手書きで最適化されたCUDAおよびHIPのC++実装に対して十分に競合する性能を達成したとされる。論文の主張を端的にまとめると次の通りだ:
- ポータブル:NVIDIAとAMD GPUの両方をサポート
- 安全:既存のRust安全性保証をGPUオフロードコードにも適用
- 高速:ネイティブCUDA/HIPと比較して競争力のある性能
位置づけ:既存のRust GPU取り組みとの違い
RustのGPUサポートをめぐっては、rust-gpu(EmbarkStudiosが開始し現在はコミュニティ主導)やwgpuといったプロジェクトがすでに存在する。ただしこれらはグラフィクス・シェーダー用途が中心であり、HPCカーネルオフロードとは異なる文脈に位置する。
本論文のアプローチはrustc本体とLLVMのOffloadインフラに直接統合する点が根本的に異なる。CUDAやOpenMPオフロードが歩んできた道筋をRustで実現しようとする方向性であり、既存エコシステムとの相互運用性も視野に入れた設計だ。LLVMのOffloadインフラについてはLLVMの公式ドキュメントも参照されたい。
なお、本実装がrustc本体へのupstream統合を目指しているか、あるいは外部ツールチェーンとして提供されるかは論文内で明示されていない。
HPC × Rustという文脈
HPC分野ではFortranやC++が長らく支配的だったが、Rustのメモリ安全性がシステムソフトウェアの信頼性向上に寄与するという認識が広がる中、科学計算・スパコン領域でのRust採用を探る動きが加速している。本論文はその流れに乗りつつ、「安全だが遅い」というRustのGPU利用における懸念に正面から答えようとする試みだ。
13ページ・5図構成の論文であり、実装詳細からベンチマーク評価まで踏み込んだ内容になっている。
詳細はGPU Offload in Rust: Portable, Safe, and Fastを参照していただきたい。