OpenMP on AMD MI250X is 3x slower than OpenACC on NVIDIA A100
A new study finds up to 47x slowdown in low-parallelism kernels...
A team led by Alessandro Romeo evaluated the performance portability of directive-based GPU programming by porting gPLUTO, a production magnetohydrodynamics code, from OpenACC to OpenMP. They tested on two major exascale systems: NVIDIA A100 (Leonardo Booster) and AMD MI250X (LUMI-G). On NVIDIA platforms, both APIs achieve comparable performance due to a shared compiler backend, providing a consistent baseline. However, on AMD MI250X, the same OpenMP implementation is approximately three times slower at the application level compared to the NVIDIA OpenACC baseline, with kernel-level slowdowns reaching up to an order of magnitude.
Kernel-level profiling reveals that runtime is dominated by memory-latency bounds rather than peak bandwidth limitations. In low-parallelism kernels, C++ abstraction layers increase register pressure and spilling, causing extreme slowdowns of up to 47× in specific cases. The researchers conclude that achieving portable performance across GPU architectures requires not only application-level changes but also continued advances in compiler backends and architecture-aware optimization strategies.
- On NVIDIA A100, OpenACC and OpenMP deliver comparable performance due to shared compiler backend.
- On AMD MI250X, OpenMP implementation is ~3x slower at application level, with kernel slowdowns up to 10x.
- Low-parallelism kernels suffer up to 47x slowdown due to register spilling from C++ abstraction layers.
Why It Matters
Highlights real-world limits of cross-vendor GPU portability, crucial for exascale scientific computing decisions.