LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

Ubuntu 24.04下使用TheRock编译ROCm

ROCm/TheRock: The HIP Environment and ROCm Kit是专为AMD ROCm生态设计的轻量级开源构建系统,旨在简化HIP(异构计算接口)和ROCm(AMD GPU计算平台)的开发、编译与集成流程。

1 AMD GPU架构

详细请参考:

架构名称:

  • GCN — Graphics Core Next,通用图形/计算老架构。
  • RDNA — Radeon DNA,游戏/图形高能效新架构。
  • CDNA — Compute DNA,纯计算/AI/HPC 架构。

不同架构之间对比:

维度GCNRDNACDNA
定位 图形 + 通用计算(混合) 游戏/图形优先 数据中心 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

不同架构不同版本差异:

  1. GCN 1.0-5.0:
    1. 连续10年迭代,CU数量上限64个,后期功耗/效率瓶颈明显。
  2. RDNA 1→2→3→4:
    1. Wave32引入,IPC提升1.25×,功耗降低50%。
    2. 硬件光追、InfinityCache;每瓦性能再提65%。
    3. ChipletMCM、双发射ALU、AI单元,FP32峰值翻倍。
    4. 4nmEUV,第四代CU+第三代RTCore+第二代AICore,每CU性能再提40%,RX9070XT峰值FP32≈92TF,4K游戏功耗降低30%。
  3. CDNA 1→2→3:
    1. 首发HBM2,FP6415.7TF,支持PCIe4.0。
    2. Chiplet2.5D,2×MatrixCore,FP6495TF,首次支持MCM双芯封装MI250X。
    3. 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 flagDescription
-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 flagDescription
-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 等)

 

posted on 2025-08-10 23:59  ArnoldLu  阅读(49)  评论(0)    收藏  举报

导航