GPU-offload in Rust: Draagbaar, Veilig en Snel

Samenvatting

Hoogwaardige GPU-programmering heeft traditioneel een compromis vereist tussen executie-efficiëntie en geheugenveiligheid. Terwijl Rust via zijn strikte eigendommodel compile-time geheugenveiligheid garandeert voor host-CPU's, vereiste de toepassing van deze beperkingen op massaal parallelle GPU-executieomgevingen voorheen ofwel vendor-specifieke domeinspecifieke talen (DSL's) of het gebruik van expliciete onveilige raw pointers.

Dit artikel presenteert een zero-overhead, multi-vendor GPU-compilatieframework dat native is ingebouwd in de Rust-compiler (rustc) en de LLVM-backends.

Technische Implementatie

We maken gebruik van het rijke typesysteem van Rust, het eigendomssysteem en de strikte aliasing-garanties (noalias) om dataoverdrachten efficiënt te beheren en te optimaliseren via de Offload-infrastructuur van LLVM.

In dit kader belichten we de technische uitdagingen van cross-vendor ABI lowering mismatches tussen Host- en Device-targets. We introduceren een compilatiepijplijn met twee fasen die in staat is om zowel handmatige als door de compiler gegenereerde geheugenverplaatsingen veilig af te handelen.

Evaluatie en Resultaten

De evaluatie van ons framework op RAJAPerf demonstreert dat onze op rustc gebaseerde oplossing competitieve LLVM IR kan genereren voor GPU-kernels. Hiermee wordt een solide kernelprestatie behaald ten opzichte van native, handmatig geoptimaliseerde CUDA- en HIP C++-baselines.