OpenMP1 has been a staple of high performance computing community for almost two decades and has provided its users with considerable performance compared to the effort it takes to write it, and ever since version (?) it has had the support for device offloading2, this has allowed OpenMP to be used for writing high performance device code without needed to write CUDA or OpenCL. But LLVM went one step futher to provide a more generic offloading infrastructure which can be used by different frontend ends such as SYCL3, ML compiler runtimes, etc using the same interface. This write-up is about that general offloading infrastructure in LLVM.
Device Programming
Introduction to OpenMP Offloading
Introduction to LLVM Offloading
Footnotes
device here means an accelerator such as a GPU/NPU, but it can also be a multicore CPU↩︎