ROCm
ROCm is an Advanced Micro Devices software stack for graphics processing unit programming. ROCm spans several domains, including general-purpose computing on graphics processing units, high performance computing, and heterogeneous computing. It offers several programming models: [|HIP], OpenMP, and OpenCL.
ROCm is free, libre and open-source software, and it is distributed under various licenses. The name initially stood for Radeon Open Compute platform; however, due to Open Compute being a registered trademark, the name no longer functions as an acronym.
Background
The first GPGPU software stack from ATI/AMD was Close to Metal, which became Stream.ROCm was launched around 2016 with the Boltzmann Initiative. ROCm stack builds upon previous AMD GPU stacks; some tools trace back to GPUOpen and others to the Heterogeneous System Architecture.
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 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.Programming abilities
ROCm as a stack ranges from the kernel driver to the end-user applications.AMD has introductory videos about AMD GCN hardware, and ROCm programming via its learning portal.
One of the best technical introductions about the stack and ROCm/HIP programming, remains, to date, to be found on Reddit.
Hardware support
ROCm is primarily targeted at discrete professional GPUs, but consumer GPUs and APUs of the same architecture as a supported professional GPU are known to work with ROCm. For example, all professional GPUs of the RDNA 2 architecture are officially supported by ROCm 5.x; users report that Consumer RDNA2 units such as the Radeon 6800M APU and the Radeon 6700XT GPU also work.Professional-grade GPUs
Consumer-grade GPUs
Software ecosystem
Machine learning
Various deep learning frameworks have a ROCm backend:ROCm is gaining significant traction in the top 500.
ROCm is used with the Exascale supercomputers El Capitan and Frontier.
Some related software is to be found at .
Other acceleration & graphics interoperation
As of version 3.0, Blender can now use HIP compute kernels for its renderer cycles.Other languages
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, rocRAND, and rocFFT. Future integration with rocALUTION, rocSOLVER, MIOpen, and certain other ROCm libraries is planned.
Software distribution
Official
Installation instructions are provided for Linux and Windows in the . ROCm software is currently spread across several public GitHub repositories. Within the main public , there is an for each official release: using , a version control tool built on top of Git, is the recommended way to synchronize with the stack locally.AMD starts distributing containerized applications for ROCm, notably scientific research applications gathered under .
AMD packages tailored to various Linux distributions.
Third-party
There is a growing .Linux distributions are officially packaging ROCm, with various degrees of advancement: Arch Linux, Gentoo, Debian, Fedora
, GNU Guix, and NixOS.
There are Spack packages.
Components
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, is still lagging. AMD still officially packages various LLVM forks for parts that are not yet upstreamed compiler optimizations destined to remain proprietary, debug support, OpenMP offloading, etc.
Low-level
ROCk Kernel driver
ROCm Device 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 is responsible for all the thinking and queuing that goes into the stack.ROCr Runtime
The is a set of APIs/libraries that allows the launch of compute kernels by host applications. It is AMD's implementation of the HSA runtime API. It is different from the ROC Common Language Runtime.ROCm CompilerSupport
is in charge of interacting with LLVM intermediate representation.Mid-level
ROCclr Common Language Runtime
The 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.
OpenCL
ROCm ships its installable client driver loader and an OpenCL .As of January 2022, ROCm 4.5.2 ships OpenCL 2.2, and is lagging behind competition.
HIP https://github.com/rocm-developer-tools/hip Heterogeneous Interface for Portability
The AMD implementation for its GPUs is called . There is also a mostly for demonstration purposes.HIPCC
HIP builds a `HIPCC` compiler that either wraps Clang and compiles with LLVM open AMDGPU backend, or redirects to the NVIDIA compiler.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.GPUFORT
Like HIPIFY, 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.High-level
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 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 the AMD implementation.
rocBLAS / hipBLAS
and are central in high-level libraries, it is the AMD implementation for Basic Linear Algebra Subprograms.It uses the library privately.
rocSOLVER / hipSOLVER
This pair of libraries constitutes the LAPACK implementation for ROCm and is strongly coupled to rocBLAS.Utilities
- : Debug, tracer, profiler, System Management Interface, Validation suite, Cluster management.
- : GPU analyzer, memory visualizer...
- External tools: radeontop
Comparison with competitors
Nvidia CUDA
Nvidia's CUDA is closed-source, whereas AMD ROCm is open source. There is open-source software built on top of the closed-source CUDA, for instance .CUDA is able to run on consumer GPUs, whereas ROCm support is mostly offered for professional hardware such as AMD Instinct and AMD Radeon Pro.
Nvidia provides a C/C++-centered frontend and its Parallel Thread Execution LLVM GPU backend as the Nvidia CUDA Compiler.