|Initial release||November 14, 2016|
5.7 / September 16, 2023
|Written in||C, C++, Python, Fortran, Julia|
|Engine||AMDgpu kernel driver, HIPCC, a LLVM-based compiler|
|Operating system||Linux, Windows|
|Predecessor||Close to metal, Stream, HSA|
|Type||GPGPU libraries and APIs|
ROCm is an Advanced Micro Devices (AMD) software stack for graphics processing unit (GPU) programming. ROCm spans several domains: general-purpose computing on graphics processing units (GPGPU), high performance computing (HPC), heterogeneous computing. It offers several programming models: HIP (GPU-kernel-based programming), OpenMP/Message Passing Interface (MPI) (directive-based programming), OpenCL.
ROCm was launched around 2016 with the Boltzmann Initiative. ROCm stack builds upon previous AMD GPU stacks, some tools trace back to GPUOpen, others to the Heterogeneous System Architecture (HSA).
Heterogeneous System Architecture Intermediate Language
HSAIL was aimed at producing a middle-level, hardware-agnostic intermediate representation, that could be JIT-compiled to the eventual hardware (GPU, FPGA...) using the appropriate finalizer. This approach was dropped for ROCm: now it builds only GPU code, using LLVM, and its AMDGPU backend that was upstreamed, although there is still research on such enhanced modularity with LLVM MLIR.
One of the best technical introductions about the stack and ROCm/HIP programming, remains, to date, to be found on Reddit.
HIP(HCC) kernel language
ROCm code objects
The only consumer-grade GPU that has relatively equal support is, as of January 2022, the Radeon VII (GCN 5 - Vega).
|Name of GPU series||Southern
|Vega||Navi 1X||Navi 2X|
|Released||Jan 2012||Sep 2013||Jun 2015||Jun 2016||Jun 2017||Jul 2019||Nov 2020|
|Marketing Name||Radeon HD 7000||Radeon Rx 200||Radeon Rx 300||Radeon RX 400/500||Radeon RX Vega/Radeon VII(7 nm)||Radeon RX 5000||Radeon RX 6000|
|Instruction set||GCN instruction set||RDNA instruction set|
|Microarchitecture||GCN 1st gen||GCN 2nd gen||GCN 3rd gen||GCN 4th gen||GCN 5th gen||RDNA||RDNA 2|
|Type||Unified shader model|
|OpenCL||1.2 (on Linux: 1.1 (no Image support) with Mesa 3D)||2.0 (Adrenalin driver on Win7+)
(on Linux: 1.1 (no Image support) with Mesa 3D, 2.0 with AMD drivers or AMD ROCm)
(Win 7+ or Mesa 17+)
|1.2 (Adrenalin 20.1, Linux Mesa 3D 20.0)|
|OpenGL||4.6 (on Linux: 4.6 (Mesa 3D 20.0))|
AMD ROCm product manager Terry Deem gave a tour of the stack.
The main consumers of the stack are machine learning and high-performance computing/GPGPU applications.
Various Deep Learning frameworks have a ROCm backend:
- Iree (which uses LLVM Multi-Level Intermediate Representation (MLIR))
Some related software is to be found at AMD Infinity hub.
Other acceleration & graphics interoperation
Julia has the AMDGPU.jl package, which integrates with LLVM and selects components of the ROCm stack. Instead of compiling code through HIP, AMDGPU.jl uses Julia's compiler to generate LLVM IR directly, which is later consumed by LLVM to generate native device code. AMDGPU.jl uses ROCr's HSA implementation to upload native code onto the device and execute it, similar to how HIP loads its own generated device code.
AMDGPU.jl also supports integration with ROCm's rocBLAS (for BLAS), rocRAND (for random number generation), and rocFFT (for FFTs). Future integration with rocALUTION, rocSOLVER, MIOpen, and certain other ROCm libraries is planned.
ROCm software is currently spread across dozens of public GitHub repositories. Within the main public meta-repository, there is an xml manifest for each official release: using git-repo, a version control tool built on top of git, is the recommended way to synchronize with the stack locally.
|Stack area||Public GitHub organisation|
AMD distributes itself packages tailored to various Linux distributions.
There is a growing third-party ecosystem packaging ROCm.
There are spack packages.
There is one kernel-space component, ROCk, and the rest - there is roughly a hundred components in the stack - is made of user-space modules.
The unofficial typographic policy is to use: uppercase ROC lowercase following for low-level libraries, i.e. ROCt, and the contrary for user-facing libraries, i.e. rocBLAS.
AMD is active developing with the LLVM community, but upstreaming is not instantaneous, and as of January 2022, still lagging. AMD still packages officially various LLVM forks for parts that are not yet upstreamed – compiler optimizations destined to remain proprietary, debug support, OpenMP offloading...
ROCk – Kernel driver
ROCm – Device libraries
Support libraries implemented as LLVM bitcode. These provide various utilities and functions for math operations, atomics, queries for launch parameters, on-device kernel launch, etc.
ROCt – Thunk
The thunk is responsible for all the thinking and queuing that goes into the stack.
ROCr – Runtime
The ROC runtime is a set of APIs/libraries that allows the launch of compute kernals by host applications. It is AMD's implementation of the HSA runtime API. It is different from the ROC Common Language Runtime.
ROCm – CompilerSupport
ROCclr Common Language Runtime
The common language runtime is an indirection layer adapting calls to ROCr on linux and PAL on windows. It used to be able to route between different compilers like the HSAIL-compiler. It is now being absorbed by the upper indirection layers (HIP, OpenCL).
HIPIFY is a source-to-source compiling tool, it translates CUDA to HIP and reverse, either using a clang-based tool, or a sed-like Perl script.
Like HIPIFY, GPUFORT is a tool compiling source code into other third-generation-language sources, allowing users to migrate from CUDA Fortran to HIP Fortran. It is also in the repertoire of research projects, even more so.
ROCm high-level libraries are usually consumed directly by application software, such as machine learning frameworks. Most of the following libraries are in the General Matrix Multiply (GEMM) category, which GPU architecture excels at.
The majority of these user-facing libraries comes in dual-form: hip for the indirection layer that can route to Nvidia hardware, and roc for AMD implementation.
rocBLAS / hipBLAS
rocSOLVER / hipSOLVER
This pair of libraries constitutes the LAPACK implementation for ROCm and is strongly coupled to rocBLAS.
- ROCm developer tools: Debug, tracer, profiler, System Management Interface, Validation suite, Cluster management.
- GPUOpen tools: GPU analyzer, memory visualizer...
- External tools: radeontop (TUI overview)
Comparison with competitors
ROCm is a competitor to similar stacks aimed at GPU computing: Nvidia CUDA and Intel OneAPI. Support is only offered to professional hardware. The software stack requires an extremely narrow set of libraries/system configuration. In that regard, this software stack is quite fragile: any change to kernels, libraries or any configuration can render the entire stack unusable. Also, there is no set/dedicated place on the internet where there are a 'definitive' set of intallation instructions. There are thousands of places on the internet claiming to be 'official', the majority of which offer outdated installations that will prove for the end user a waste of time/effort. As no official support is offered for this stack, there is no recourse to this problem.
Nvidia is close-source until cuBLAS and such high-level libraries.
Nvidia vendors the Clang frontend and its Parallel Thread Execution (PTX) LLVM GPU backend as the Nvidia CUDA Compiler (NVCC).
There is an open-source layer above it, for example RAPIDS.
oneAPI is open source, and all the corresponding libraries are published on its GitHub Page.
- AMD Software – a general overview of AMD's drivers, APIs, and development endeavors.
- GPUOpen – AMD's complementary graphics stack
- AMD Radeon Software – AMD's software distribution channel
- "ROCm 5.7 release". GitHub. September 16, 2023. Retrieved September 27, 2023.
- "New HIP SDK helps democratize GPU Computing".
- "Question: What does ROCm stand for? · Issue #1628 · RadeonOpenCompute/ROCm". Github.com. Retrieved January 18, 2022.
- "Debian -- Details of package firmware-amd-graphics in buster". Packages.debian.org. Retrieved January 18, 2022.
- "AMD @ SC16: Radeon Open Compute Platform (ROCm) 1.3 Released, Boltzmann Comes to Fruition". anandtech.com. Retrieved January 19, 2022.
- "AMD @ SC15: Boltzmann Initiative Announced - C++ and CUDA Compilers for AMD GPUs". anandtech.com. Retrieved January 19, 2022.
- "HSA Programmer's Reference Manual: HSAIL Virtual ISA and Programming Model, Compiler Writer, and Object Format (BRIG)" (PDF). HSA Foundation. May 2, 2018. Retrieved August 1, 2023.
- "User Guide for AMDGPU Backend — LLVM 13 documentation". Llvm.org. Retrieved January 18, 2022.
- "The LLVM Compiler Infrastructure". GitHub. January 19, 2022.
- "Introduction to AMD GPU Hardware" – via www.youtube.com.
- "Fundamentals of HIP Programming". AMD.
- "ROCm™ Learning Center". AMD.
- "AMD ROCm / HCC programming: Introduction". December 26, 2018.
- "AMD Documentation - Portal".
- "Here's something you don't see every day: PyTorch running on top of ROCm on a 6800M (6700XT) laptop! Took a ton of minor config tweaks and a few patches but it actually functionally works. HUGE!". December 10, 2021.
- "ROCm Getting Started Guide v5.2.3".
- "HOW-TO: Stable Diffusion on an AMD GPU".
- "Any update on 5700 Xt support?".
- "AMD Radeon RX 6800 XT Specs". TechPowerUp. Retrieved January 1, 2021.
- Larabel, Michael (December 7, 2016). "The Best Features of the Linux 4.9 Kernel". Phoronix. Retrieved December 7, 2016.
- "ROCm presentation". HPCwire.com. July 6, 2020. Retrieved January 18, 2022.
- "AMD Introduces Its Deep-Learning Accelerator Instinct MI200 Series GPUs". Infoq.com. Retrieved January 18, 2022.
- "AMD Chips Away at Intel in World's Top 500 Supercomputers as GPU War Looms". November 16, 2020.
- "El Capitan Supercomputer Detailed: AMD CPUs & GPUs to Drive 2 Exaflops of Compute".
- "Livermore's el Capitan Supercomputer to Debut HPE 'Rabbit' Near Node Local Storage". February 18, 2021.
- "Blender 3.0 takes support for AMD GPUs to the next level. Beta support available now!". Gpuopen.com. November 15, 2021. Retrieved January 18, 2022.
- "AMD ROCm ⋅ JuliaGPU". juliagpu.org.
- "ROCm Installation v4.3 — ROCm 4.5.0 documentation". Rocmdocs.amd.com. Retrieved January 18, 2022.
- "Running Scientific Applications on AMD Instinct Accelerators Just Got Easier". HPCwire.com. October 18, 2021. Retrieved January 25, 2022.
- "ROCm for Arch Linux". Github.com. January 17, 2022. Retrieved January 18, 2022.
- "Gentoo Linux Packages Up AMD ROCm, Makes Progress On RISC-V, LTO+PGO Python". Phoronix.com. Retrieved January 18, 2022.
- "Fedora & Debian Developers Look At Packaging ROCm For Easier Radeon GPU Computing Experience". Phoronix.com. Retrieved January 18, 2022.
- Gamblin, Todd; LeGendre, Matthew; Collette, Michael R.; Lee, Gregory L.; Moody, Adam; de Supinski, Bronis R.; Futral, Scott (November 15, 2015). "The Spack Package Manager: Bringing Order to HPC Software Chaos" – via GitHub.
- Bloor, Cordell. "20211221 Packaging session notes and small update". firstname.lastname@example.org (Mailing list). Retrieved January 18, 2022.
- "[Debian official packaging] How is ROCm LLVM fork still needed? · Issue #2449 · ROCm-Developer-Tools/HIP". GitHub.
- "Aomp - V 14.0-1". GitHub. January 22, 2022.
- "The LLVM Compiler Infrastructure". GitHub. January 10, 2022.
- "HSA Runtime Programmer's Reference Manual" (PDF). HSA Foundation. May 2, 2018. Retrieved August 1, 2023.
- "Khronos OpenCL Registry - The Khronos Group Inc". www.khronos.org.
- "List of OpenCL Conformant Products - The Khronos Group Inc". www.khronos.org. February 3, 2022.
- "Figure 3. HIPCC compilation process illustration. The clang compiler".
- "AMD Publishes Open-Source "GPUFORT" as Newest Effort to Help Transition Away from CUDA".
- Maia, Julio; Chalmers, Noel; T. Bauman, Paul; Curtis, Nicholas; Malaya, Nicholas; McDougall, Damon; van Oostrum, Rene; Wolfe, Noah (May 2021). ROCm Library Support & Profiling Tools (PDF). AMD.
- "ROCm official documentation". AMD. February 10, 2022.
- "ROCm Learning Center". AMD. January 25, 2022.
- "ROCm official documentation on the github super-project". AMD. January 25, 2022.
- "ROCm official documentation - pre 5.0". AMD. January 19, 2022.
- "GPU-Accelerated Applications with AMD Instinct Accelerators & AMD ROCm Software" (PDF). AMD. January 25, 2022.
- "AMD Infinity Hub". AMD. January 25, 2022. — Docker containers for scientific applications.