Awkward ArrayをAMD GPUへ移植し不規則処理を最適化
Bridging the Vendor Gap: Enabling AMD GPU Support for Awkward Array via ROCm/HIP for the HL-LHC Era
この論文をやさしく読む
ひとことで言うと
素粒子物理解析で使う不規則な配列処理を、AMD GPUでも速く動かす実装研究です。単純なコード変換では遅くなるため、GPUの構造に合わせて処理を組み替えています。
何に役立つ?
AMD GPUを持つ計算機でAwkward Arrayを利用するための実装例と最適化の指針になります。公開APIを維持するため、利用側の呼び出し方法を大きく変えずに対応できます。
この研究の面白いところ
融合を増やすだけでなく、融合したカーネルを分割することも有効な最適化に含まれています。ベンダー共通の呼び出し口の下で、異なる実行戦略を選びます。
どこまで分かった?
1.03~12.5倍は128 CPUコアとの比較であり、NVIDIA GPUに対する倍率ではありません。0.37倍は12個のCPUカーネルの実行時間比の幾何平均です。効果は処理とハードウェアの条件によって異なります。
v1のアブストラクトに基づくAI解説。日本語訳とは別に、用途の解釈を含みます。
アブストラクトの日本語訳
高輝度LHC(HL-LHC)では、解析スループットを桁単位で向上させる必要があり、その向上は単一ベンダーに限らないGPUから得ることがますます重要になる。El Capitan、Frontier、LUMIといった最上位規模のシステムはAMDアクセラレーターを採用している一方、Scikit-HEPの解析ソフトウェア群、特にAwkward ArrayはCUDAを優先して発展してきた。本研究では、Awkward Arrayの入れ子状、不規則、可変長のデータ構造にROCm/HIPバックエンドを追加する、Rustを基盤としたカーネルエンジンrawkwardについて報告する。 中心的な知見は、CUDAカーネルをソースレベルで素朴にHIPへ移植すると、不規則なカーネルの性能が5~10倍悪化することである。AMDの64レーンのウェーブフロント、より高いレジスター圧力、より高コストな分岐の分岐先不一致は、NVIDIAの32スレッドのワープとは根本的に異なる振る舞いをするためである。ループの平坦化、128ビットのベクトル化ロード、融合カーネルの分割、プロファイルに基づく起動設定という、少数の再利用可能な最適化パターンにより、公開APIを変えずにCUDA並みの性能を回復できることを示す。 Rustのマクロとmatchによるディスパッチ層は、ベンダー固有のカーネル戦略を生成しながら、バックエンドに依存しない単一の呼び出し箇所を維持する。また、型システムがバッファーサイズと生存期間の正しさをコンパイル時に保証する。2ソケットのAMD Instinct MI210ノードでは、EPYC 7763の128 CPUコアに対し、GPUの高速化率は、メモリ帯域に制約されるsumで1.03倍、countで最大12.5倍となった。RustのCPUカーネルも、総合的には既存のC++カーネルに匹敵するか上回り、12カーネルにわたる実行時間比の幾何平均は0.37倍だった。これらのパターンは、性能の移植性を備え、ベンダーに依存しない高エネルギー物理解析カーネルを作るための実践的な手順になると論じる。
v1の要旨から自動生成。本文の精読・人による確認は未実施。
- 初稿
- 2026-09-21(UTC)
- 最新改訂
- 2026-09-21 · v1
- 査読・掲載
- 査読状況未確認
更新履歴
- v1 2026-09-21 この版を読む
取得できた版を表示。版の更新は査読済みを意味しません。過去版の本文差分は未解析です。
原文の要旨
The High-Luminosity LHC (HL-LHC) will demand order-of-magnitude gains in analysis throughput, and increasingly those gains must come from GPUs that are not made by a single vendor. Leadership-class systems such as El Capitan, Frontier and LUMI are built on AMD accelerators, yet the Scikit-HEP analysis stack---and Awkward Array in particular---has grown up CUDA-first. We report on $rawkward$, a Rust-backed kernel engine that adds a ROCm/HIP backend for Awkward Array's nested, jagged, variable-length data structures. Our central finding is that a naive source-level port of CUDA kernels to HIP loses $5$--$10\times$ in performance on irregular kernels, because AMD's $64$-lane wavefronts, higher register pressure and more expensive divergence behave fundamentally differently from NVIDIA's $32$-thread warps. We show that a small, reusable set of optimization patterns---loop flattening, $128$-bit vectorized loads, splitting fused kernels, and profile-guided launch configuration---recovers CUDA-class performance without changing the public API. A Rust macro-and-match dispatch layer keeps a single, backend-agnostic call site while emitting vendor-specific kernel strategies, and the type system enforces buffer-size and lifetime correctness at compile time. On a two-socket AMD Instinct MI210 node we measure GPU speedups from $1.03\times$ (bandwidth-bound $sum$) up to $12.5\times$ ($count$) over $128$ EPYC~7763 CPU cores, and the Rust CPU kernels match or beat on aggregate the incumbent C++ kernels (geometric-mean runtime ratio $0.37\times$ across twelve kernels). We argue that these patterns constitute a practical recipe for performance-portable, vendor-agnostic HEP analysis kernels.
著者のコメント
8 pages, 2 figures
arXiv ID: 2609.24628 / 要約の誤りについて