Ubuntu 24.04下使用TheRock编译ROCm
ROCm/TheRock: The HIP Environment and ROCm Kit是专为AMD ROCm生态设计的轻量级开源构建系统,旨在简化HIP(异构计算接口)和ROCm(AMD GPU计算平台)的开发、编译与集成流程。
1 AMD GPU架构
详细请参考:
- 《Compatibility matrix》:查看ROCm支持的操作系统和内核、GPU架构类型、GPU具体型号、支持的AI框架列表和版本等等。
- 《Accelerator and GPU hardware specifications》:给出GPU加速器和规格表格。
架构名称:
-
GCN — Graphics Core Next,通用图形/计算老架构。
-
RDNA — Radeon DNA,游戏/图形高能效新架构。
-
CDNA — Compute DNA,纯计算/AI/HPC 架构。
不同架构之间对比:
| 维度 | GCN | RDNA | CDNA |
|---|---|---|---|
| 定位 | 图形 + 通用计算(混合) | 游戏/图形优先 | 数据中心 HPC & AI |
| 首代发布时间 | 2011(HD 7000) | 2019(RX 5700) | 2020(MI100) |
| 微架构重点 | 4×SIMD16 的 CU;Wave64 | 2×SIMD32 的 WGP;Wave32/64 | 矩阵 ALU + 大量 FP64 |
| 缓存/内存 | L1/L2 + GDDR5/6 | L0/L1/L2 + GDDR6/6X | 大容量 L2 + HBM2/2e/3 |
| 矩阵/AI 单元 | 无专用单元,靠 SIMD | 少量 AI 加速器(RDNA3) | 专用 Matrix Core(MFMA) |
| 典型精度比 | FP64:FP32≈1:4 | FP64:FP32≈1:16 | FP64:FP32≈1:1(CDNA2 达 3 TF FP64) |
| 产品线 | Radeon HD/RX 200-500, Radeon VII | Radeon RX 5000/6000/7000 | Instinct MI100/200/300 |
| API/软件栈 | OpenCL, Vulkan, ROCm | Vulkan, DirectX, ROCm | ROCm, HIP, OpenMP |
不同架构不同版本差异:
- GCN 1.0-5.0:
- 连续10年迭代,CU数量上限64个,后期功耗/效率瓶颈明显。
- RDNA 1→2→3→4:
- Wave32引入,IPC提升1.25×,功耗降低50%。
- 硬件光追、InfinityCache;每瓦性能再提65%。
- ChipletMCM、双发射ALU、AI单元,FP32峰值翻倍。
- 4nmEUV,第四代CU+第三代RTCore+第二代AICore,每CU性能再提40%,RX9070XT峰值FP32≈92TF,4K游戏功耗降低30%。
- CDNA 1→2→3:
- 首发HBM2,FP6415.7TF,支持PCIe4.0。
- Chiplet2.5D,2×MatrixCore,FP6495TF,首次支持MCM双芯封装MI250X。
- 5nm+3D堆叠,HBM3,AI训练每瓦性能比CDNA2再提5×。
2 下载代码、安装环境ROCm@Ubuntu 24.04
安装必须工具、clone仓库、准备python环境:
# Install Ubuntu dependencies sudo apt update sudo apt install gfortran git git-lfs ninja-build cmake g++ pkg-config xxd patchelf automake libtool python3-venv python3-dev libegl1-mesa-dev ccache meson dvc # Clone the repository git clone --recursive https://github.com/ROCm/TheRock.git -b main cd TheRock # Init python virtual environment and install python dependencies python3 -m venv .venv && source .venv/bin/activate pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # Download submodules and apply patches python ./build_tools/fetch_sources.py
去激活执行如下命令:
deactivate
切换到这个commit,对应的是ROCm 6.4.0:
commit 0f97bd525e6d1d0f71c1ac70149ecdd9e9fc4125 Author: Marius Brehler <marius.brehler@amd.com> Date: Mon May 19 17:27:20 2025 +0200 Bump submodules 20250519 (#652)
DVC 全称 Data Version Control,是一个面向机器学习和数据科学项目的版本管理和数据管道工具。
3 编译选项
《therock_amdgpu_targets.cmake》中给出了ROCm支持的Family和Target列表:
-DTHEROCK_AMDGPU_FAMILIES= -DTHEROCK_AMDGPU_TARGETS=
其他支持的编译选项包括:
| 选项(CMake -DXXX=…) | 默认值 | 说明 |
|---|---|---|
| Group Flags | ||
THEROCK_ENABLE_ALL |
ON | 一键启用所有可选组件(除显式 OFF 外)。 |
THEROCK_ENABLE_CORE |
ON | 控制核心组件(runtime、编译器)总开关。 |
THEROCK_ENABLE_COMM_LIBS |
ON | 控制通信库(RCCL、RCCL-tests 等)总开关。 |
THEROCK_ENABLE_MATH_LIBS |
ON | 控制数学库(BLAS/SOLVER/FFT/SPARSE/RAND)总开关。 |
THEROCK_ENABLE_ML_LIBS |
ON | 控制机器学习库(MIOpen、MIGraphX 等)总开关。 |
THEROCK_ENABLE_PROFILER |
ON | 控制性能分析工具(rocprofv3、rocTracer 等)总开关。 |
|
Component Flags |
||
THEROCK_ENABLE_COMPILER |
ON | 启用 ROCm 编译器栈(LLVM/Clang/LLD/Flang)。 |
THEROCK_ENABLE_HIPIFY |
ON | 启用 hipify-perl & hipify-clang 迁移工具。 |
THEROCK_ENABLE_CORE_RUNTIME |
ON | 启用 ROCclr、ROCr、ROCdbgapi 等核心运行时。 |
THEROCK_ENABLE_HIP_RUNTIME |
ON | 启用 HIP 运行时(hiprt、hipRTC)。 |
THEROCK_ENABLE_ROCPROFV3 |
ON | 启用 rocprofv3(新一代采样/跟踪器)。 |
THEROCK_ENABLE_RCCL |
ON | 启用 RCCL(多 GPU 通信/集合通信库)。 |
THEROCK_ENABLE_PRIM |
ON | 启用 PRIM(rocPRIM / hipCUB 基础算法库)。 |
THEROCK_ENABLE_BLAS |
ON | 启用 rocBLAS / hipBLAS(GEMM、BLAS1/2/3)。 |
THEROCK_ENABLE_RAND |
ON | 启用 rocRAND / hipRAND(随机数生成)。 |
THEROCK_ENABLE_SOLVER |
ON | 启用 rocSOLVER / hipSOLVER(线性代数求解)。 |
THEROCK_ENABLE_SPARSE |
ON | 启用 rocSPARSE / hipSPARSE(稀疏矩阵运算)。 |
THEROCK_ENABLE_MIOPEN |
ON | 启用 MIOpen(深度学习卷积/GEMM 加速库)。 |
4 编译ROCm
编译ROCm和HIP:
cmake -S . -B build -GNinja -DTHEROCK_AMDGPU_FAMILIES=gfx942
关闭所有数学库(加快编译):
cmake -S . -B build -GNinja -DTHEROCK_AMDGPU_FAMILIES=gfx1100 -DTHEROCK_ENABLE_MATH_LIBS=OFF
查看实际生效值:
cmake -LH -N build | grep THEROCK
全核编译:
cmake --build build -j$(nproc)
使用CCache
使用ccache进行编译加速:
# Any shell used to build must eval setup_ccache.py to set environment # variables. eval "$(./build_tools/setup_ccache.py)" cmake -B build -GNinja -DTHEROCK_AMDGPU_FAMILIES=gfx1100 \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
. cmake --build build -j$(nproc)
THEROCK_AMDGPU_FAMILIES选择哪一个,可以参考Accelerator and GPU hardware specifications找到对应GPU型号的LLVM Target name。
|
Model |
Architecture |
LLVM target name |
|---|---|---|
|
Radeon RX 9070 XT |
RDNA4 |
gfx1201 |
|
Radeon RX 9070 GRE |
RDNA4 |
gfx1201 |
|
Radeon RX 9070 |
RDNA4 |
gfx1201 |
|
Radeon RX 9060 XT |
RDNA4 |
gfx1200 |
|
Radeon RX 7900 XTX |
RDNA3 |
gfx1100 |
|
Radeon RX 7900 XT |
RDNA3 |
gfx1100 |
选择一个基本功能的编译:
# 1. 初始化 ccache eval "$(./build_tools/setup_ccache.py)" # 2. 配置 CMake(最小化构建) cmake -B build -GNinja \ -DTHEROCK_AMDGPU_FAMILIES=gfx1100 \ -DTHEROCK_ENABLE_MATH_LIBS=OFF \ -DTHEROCK_ENABLE_MIOPEN=OFF \ -DTHEROCK_ENABLE_COMPOSABLE_KERNEL=OFF \
-DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ . # 3. 构建 cmake --build build -j$(nproc)
支持的配置选项包括:
| Group flag | Description |
|---|---|
-DTHEROCK_ENABLE_ALL=OFF |
Disables all optional components |
-DTHEROCK_ENABLE_CORE=OFF |
Disables all core components |
-DTHEROCK_ENABLE_COMM_LIBS=OFF |
Disables all communication libraries |
-DTHEROCK_ENABLE_MATH_LIBS=OFF |
Disables all math libraries |
-DTHEROCK_ENABLE_ML_LIBS=OFF |
Disables all ML libraries |
-DTHEROCK_ENABLE_PROFILER=OFF |
Disables profilers |
| Component flag | Description |
|---|---|
-DTHEROCK_ENABLE_COMPILER=ON |
Enables the GPU+host compiler toolchain |
-DTHEROCK_ENABLE_HIPIFY=ON |
Enables the hipify tool |
-DTHEROCK_ENABLE_CORE_RUNTIME=ON |
Enables the core runtime components and tools |
-DTHEROCK_ENABLE_HIP_RUNTIME=ON |
Enables the HIP runtime components |
-DTHEROCK_ENABLE_ROCPROFV3=ON |
Enables rocprofv3 |
-DTHEROCK_ENABLE_RCCL=ON |
Enables RCCL |
-DTHEROCK_ENABLE_PRIM=ON |
Enables the PRIM library |
-DTHEROCK_ENABLE_BLAS=ON |
Enables the BLAS libraries |
-DTHEROCK_ENABLE_RAND=ON |
Enables the RAND libraries |
-DTHEROCK_ENABLE_SOLVER=ON |
Enables the SOLVER libraries |
-DTHEROCK_ENABLE_SPARSE=ON |
Enables the SPARSE libraries |
-DTHEROCK_ENABLE_MIOPEN=ON |
Enables MIOpen |
使用swap解决内存不足导致编译失败
由于编译过程中堆内存需求较大,出现内存不够导致编译错误。可以通过打开swap来解决:
sudo fallocate -l 32G /swapfile # 创建 4GB 文件(大小按需调整) sudo chmod 600 /swapfile # 限制仅 root 可读写 [1,3,4](@ref) sudo mkswap /swapfile # 标记为 Swap 空间 [1,2,3](@ref) sudo swapon /swapfile # 临时激活 Swap [1,3,4](@ref)
使用预编译ROCm
使用python安装Installing ROCm Python packages:
python -m pip install \ --index-url https://d2awnip2yjpvqn.cloudfront.net/v2/gfx94X-dcgpu/ \ rocm[libraries,devel]
或者通过下载tarballInstall from tarball安装:
mkdir therock-tarball && cd therock-tarball # For example... wget https://therock-nightly-tarball.s3.us-east-2.amazonaws.com/therock-dist-linux-gfx94X-dcgpu-6.4.0rc20250519.tar.gz
wget https://therock-nightly-tarball.s3.us-east-2.amazonaws.com/therock-dist-linux-gfx94X-dcgpu-7.0.0rc20250611.tar.gz
mkdir install
tar -xf *.tar.gz -C install
5 测试
ctest --test-dir build
测试结果:
Internal ctest changing into directory: /home/lbq/data/rocm/TheRock/build Test project /home/lbq/data/rocm/TheRock/build Start 1: build_tools_artifacts_test 1/30 Test #1: build_tools_artifacts_test .............................. Passed 0.05 sec Start 2: build_tools_fetch_artifacts_test 2/30 Test #2: build_tools_fetch_artifacts_test ........................ Passed 0.15 sec Start 3: build_tools_fileset_tool_test ... 29/30 Test #29: therock-validate-shared-lib-libhiprtc.so ................ Passed 0.02 sec Start 30: therock-examples-cpp-sdk-user 30/30 Test #30: therock-examples-cpp-sdk-user ........................... Passed 2.47 sec 100% tests passed, 0 tests failed out of 30 Total Test time (real) = 3.58 sec
6 ROCm目录结构
ROCm目录结构和解释如下:
├── base -- 基础组件目录,包含ROCm核心基础设施。
│ ├── artifact.toml -- 工件清单文件(Artifact Manifest),定义构建依赖项。
│ ├── aux-overlay -- 辅助覆盖层,用于自定义构建配置。
│ ├── CMakeLists.txt -- CMake构建配置文件。
│ ├── half -- 半精度浮点库(16-bit floating point support)。
│ ├── post_hook_rocm_smi_lib.cmake -- ROCm SMI库构建后钩子脚本。
│ ├── README.md -- 说明文档。
│ ├── rocm-cmake -- ROCm CMake工具集。
│ ├── rocm-core -- ROCm核心运行时库。
│ ├── rocm_smi_lib -- ROCm系统管理接口库(System Management Interface),系统管理接口,提供GPU监控和管理功能。
│ └── rocprofiler-register -- ROCProfiler注册工具
├── build_tools -- 构建工具集合。
│ ├── bootstrap_build.py -- 引导构建脚本。
│ ├── build_python_packages.py -- Python包构建脚本。
│ ├── bump_submodules.py -- 子模块版本升级工具。
│ ├── CMakeLists.txt
│ ├── detail -- 工具实现细节目录。
│ ├── export_source_archive.py -- 源码归档导出工具。
│ ├── fetch_artifacts.py -- 工件下载工具。
│ ├── fetch_repo.py -- 仓库克隆工具。
│ ├── fetch_sources.py -- 源码下载工具。
│ ├── fileset_tool.py -- 文件集管理工具。
│ ├── github_actions -- GitHub Actions工作流配置。
│ ├── hack -- 临时解决方案/补丁目录。
│ ├── install_rocm_from_artifacts.py -- 从工件安装ROCm。
│ ├── linux_portable_build.py -- Linux可移植构建脚本。
│ ├── merge_compile_commands.py -- 编译命令合并工具。
│ ├── packaging -- 打包工具。
│ ├── patch_linux_so.py -- Linux共享库补丁工具。
│ ├── patch_monorepo.py -- 单体仓库补丁工具。
│ ├── posix_ccache_compiler_check.py -- POSIX ccache编译器检查。
│ ├── save_patches.sh -- 补丁保存脚本。
│ ├── setup_ccache.py -- ccache配置脚本(编译器缓存加速)。
│ ├── setup_venv.py -- 虚拟环境设置脚本。
│ ├── teatime.py -- 资源监控工具(Tea Time Monitor)。
│ ├── tests -- 测试目录。
│ ├── _therock_utils -- TheRock内部工具(TheRock是AMD内部构建系统代号)。
│ ├── third_party -- 第三方依赖。
│ ├── validate_shared_library.py -- 共享库验证工具。
│ └── watch_top_processes.sh -- 进程监控脚本。
├── cmake -- CMake构建系统配置
│ ├── custom_install_amdgpu_compiler.cmake -- AMD GPU编译器安装配置。
│ ├── custom_install_amdgpu_runtime.cmake -- AMD GPU运行时安装配置。
│ ├── custom_install_amdgpu_runtime_dev.cmake -- AMD GPU开发版运行时安装。
│ ├── finders -- CMake查找模块。
│ ├── templates -- CMake模板文件。
│ ├── therock_amdgpu_targets.cmake -- AMD GPU目标架构配置。
│ ├── therock_artifacts.cmake -- 工件管理配置。
│ ├── therock_compiler_config.cmake -- 编译器配置。
│ ├── therock_explicit_finders.cmake -- 显式依赖查找器。
│ ├── therock_features.cmake -- 特性开关配置。
│ ├── therock_global_post_subproject.cmake -- 全局子项目后处理。
│ ├── therock_install_linux_build_id_files.cmake -- Linux构建ID文件安装。
│ ├── therock_job_pools.cmake -- 并行作业池配置。
│ ├── therock_subproject.cmake -- 子项目管理。
│ ├── therock_subproject_dep_provider.cmake -- 子项目依赖提供器。
│ ├── therock_subproject_utils.cmake -- 子项目工具集。
│ └── therock_testing.cmake -- 测试配置。
├── CMakeLists.txt -- 根项目CMake配置。
├── CMakePresets.json -- CMake预设配置。
├── comm-libs -- 通信库目录。
│ ├── artifact-rccl.toml
│ ├── CMakeLists.txt 。
│ ├── pre_hook_rccl.cmake
│ ├── rccl -- ROCm通信集合库(ROCm Communication Collectives Library),ROCm集合通信库,类似NCCL,用于多GPU通信。
│ └── rccl-tests -- RCCL测试套件。
├── compiler -- 编译器组件。
│ ├── amd-llvm -- AMD LLVM分支(ROCm基础编译器)。
│ ├── artifact-amd-llvm.toml
│ ├── artifact-hipify.toml
│ ├── CMakeLists.txt
│ ├── hipify -- CUDA到HIP代码转换工具。
│ ├── pre_hook_amd-comgr.cmake
│ ├── pre_hook_amd-llvm.cmake
│ └── pre_hook_hipify.cmake
├── CONTRIBUTING.md -- 贡献指南。
├── core -- 核心运行时目录。
│ ├── amdgpu-windows-interop -- AMD GPU Windows互操作层。
│ ├── artifact-core-hip.toml
│ ├── artifact-core-runtime.toml
│ ├── clr -- 公共语言运行时(Common Language Runtime),是一个核心的中间层运行时组件,负责为上层编程模型(如 HIP、OpenCL)提供统一的硬件抽象和底层资源调度能力。
│ ├── CMakeLists.txt
│ ├── HIP -- 异构计算接口(Heterogeneous-compute Interface for Portability),AMD开发的跨平台GPU编程模型,支持AMD/NVIDIA GPU。
│ ├── post_hook_hip-clr.cmake
│ ├── pre_hook_ROCR-Runtime.cmake
│ ├── rocminfo -- ROCm系统信息工具。
│ └── ROCR-Runtime -- ROCm运行时(Radeon Open Compute Runtime)。
├── dockerfiles -- Docker容器配置。
│ └── cpubuilder -- CPU构建容器。
├── docs -- 文档目录。
│ ├── development -- 开发文档。
│ ├── environment_setup_guide.md -- 环境设置指南。
│ ├── packaging -- 打包文档。
│ └── rfcs -- 设计提案(Request For Comments)。
├── examples -- 示例代码。
│ ├── clean_configure_test_project.cmake -- 测试项目配置模板。
│ ├── CMakeLists.txt
│ └── cpp-sdk-user -- C++ SDK使用示例。
├── experimental -- 实验性功能。
│ └── rockbuilder -- TheRock构建系统实验模块。
├── external-builds -- 外部项目构建。
│ └── pytorch -- PyTorch框架支持。
├── LICENSE -- 许可证文件。
├── math-libs -- 数学计算库。
│ ├── artifact-fft.toml
│ ├── artifact-prim.toml
│ ├── artifact-rand.toml
│ ├── BLAS -- 基础线性代数子程序库(Basic Linear Algebra Subprograms)。
│ ├── CMakeLists.txt
│ ├── hipCUB -- HIP CUB库(CUDA原语移植)。
│ ├── hipFFT -- HIP FFT库(快速傅里叶变换)。
│ ├── hipRAND -- HIP随机数生成库。
│ ├── pre_hook_rocPRIM.cmake
│ ├── pre_hook_rocRAND.cmake
│ ├── rocFFT -- ROCm FFT库,Fast Fourier Transform。
│ ├── rocPRIM -- ROCm HIP 并行原语库(Parallel Primitives)。
│ ├── rocRAND -- ROCm随机数生成库。
│ ├── rocThrust -- ROCm Thrust库(并行算法模板库)。
│ └── support -- 数学库支持组件。
├── ml-libs -- 机器学习库。
│ ├── artifact-composable-kernel.toml -- 可组合内核工件清单。
│ ├── artifact-miopen.toml -- MIOpen工件清单。
│ ├── CMakeLists.txt
│ ├── composable_kernel -- 可组合内核库(高性能算子开发框架)。
│ ├── MIOpen -- Machine Intelligence Open,AMD的深度学习加速库,提供优化算子实现。
│ └── pre_hook_MIOpen.cmake -- MIOpen构建前钩子。
├── patches -- 补丁目录。
│ └── amd-mainline -- 主线内核补丁。
├── profiler -- 性能分析工具。
│ ├── aqlprofile -- AQL分析工具(AMD Queue Language Profiler),AMD GPU底层任务队列语言。
│ ├── artifact-rocprofiler-sdk.toml
│ ├── CMakeLists.txt
│ ├── post_hook_rocprofiler-sdk.cmake
│ ├── rocprofiler-sdk -- ROCm性能分析SDK。
│ ├── rocprof-trace-decoder -- ROCProf跟踪解码器。
│ └── roctracer -- ROCm跟踪库(API/Activity Tracer)。
├── README.md -- 项目总览。
├── RELEASES.md -- 版本发布说明。
├── requirements-test.txt -- 测试依赖清单。
├── requirements.txt -- Python依赖清单。
├── ROADMAP.md -- 开发路线图。
├── tests -- 测试用例。
│ ├── dlopen-hip.c -- HIP动态加载测试。
│ ├── hipcc_check.cpp -- HIP编译器检查。
│ └── test_rocm_sanity.py -- ROCm环境健康检查。
├── third-party -- 第三方库。
│ ├── boost -- Boost C++库。
│ ├── Catch2 -- C++测试框架。
│ ├── CMakeLists.txt
│ ├── eigen -- Eigen矩阵库。
│ ├── fmt -- 文本格式化库({fmt})。
│ ├── frugally-deep -- Keras模型推理库。
│ ├── FunctionalPlus -- C++函数式编程库。
│ ├── googletest -- Google测试框架。
│ ├── host-blas -- 主机端BLAS实现。
│ ├── indexer -- 索引生成库。
│ ├── libdivide -- 快速除法库。
│ ├── msgpack-cxx -- MessagePack序列化库。
│ ├── nlohmann-json -- JSON解析库。
│ ├── spdlog -- 快速日志库。
│ ├── SuiteSparse -- 稀疏矩阵计算套件。
│ ├── sysdeps -- 系统依赖库。
│ └── yaml-cpp -- YAML解析库。
└── version.json -- 版本定义文件。
编译后输出的build目录如下:
├── artifacts -- 构建生成的最终产物(库、可执行文件、安装包) ├── base -- 基础组件(例如 rocm-core、cmake 脚本等) ├── build.ninja -- ninja 构建规则文件 ├── build_tools -- 构建和打包辅助工具 ├── CMakeCache.txt -- CMake 配置缓存 ├── CMakeFiles -- CMake 内部中间文件 ├── cmake_install.cmake -- CMake 安装脚本 ├── comm-libs -- 通信相关库(如 RCCL) ├── compile_commands_fragment_* -- 各子模块编译命令片段(用于生成 compile_commands.json) ├── compile_commands.json -- 完整的编译数据库(支持 clangd / IDE 跳转) ├── compile_commands_merged.json -- 合并后的编译数据库 ├── compiler -- 编译器相关模块(hipcc、llvm、amd-comgr) ├── core -- ROCm 核心运行库(ROCR-Runtime、rocm-smi、rocminfo 等) ├── CTestTestfile.cmake -- CTest 测试配置 ├── DartConfiguration.tcl -- CTest/CDash 配置文件 ├── dist -- 安装包生成目录(.deb/.rpm/.tar.xz) ├── dlopen-hip -- 动态加载 HIP 的支持库 ├── examples -- 示例程序 ├── logs -- 构建日志和错误输出 ├── math-libs -- 数学库(rocBLAS、rocFFT、rocRAND、rocSOLVER、rocSPARSE 等) ├── ml-libs -- 机器学习库(MIOpen、composable_kernel 等) ├── profiler -- 性能分析相关工具(rocprofiler、roctracer) ├── Testing -- CTest 测试输出目录 └── third-party -- 外部依赖(Boost、googletest、zlib、eigen 等)
浙公网安备 33010602011771号