Dit artikel presenteert een zero-overhead, multi-vendor GPU-compilatieframework dat direct is geïntegreerd in de Rust-compiler (rustc) en de LLVM-backends. Door gebruik te maken van het eigendomssysteem van Rust en strikte aliasing-garanties (noalias), wordt geheugenveiligheid gewaarborgd zonder in te leveren op prestaties. De implementatie bevat een twee-fasen compilatiepijplijn die cross-vendor ABI lowering mismatches tussen host- en device-targets oplost. Uit evaluaties met RAJAPerf blijkt dat de prestaties van dit framework competitief zijn met handmatig geoptimaliseerde CUDA- en HIP C++-baselines.
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.
Auteurs: Manuel S. Drehwald, Marcelo Domínguez, Kevin Sala, Alán Aspuru-Guzik, Johannes Doerfert
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.