使用的ROCm 版本为最新7.3.0。
1. 概述
rocrtst 是 ROCr Runtime 的测试套件,基于 Google Test (gtest) 框架构建。所有测试用例统一编译为一个可执行文件 rocrtst64,通过 gtest 的 --gtest_filter 参数选择性运行。测试覆盖功能验证、性能评估、负面测试和压力测试四大类。
2. 目录结构
rocrtst/
├── README.md # 官方构建说明
├── Kernels/ # GPU kernel 源码 (.cl),编译为 .hsaco
├── common/ # 测试公共基础代码
├── gtest/ # Google Test 框架
├── thirdparty/ # 第三方依赖 (hwloc 等)
├── config/ # 配置文件
├── samples/ # 独立示例程序 (各自有 CMakeLists.txt)
│ ├── rocm_async/ # 异步内存拷贝示例
│ ├── binary_search/ # 二分查找示例
│ ├── ipc/ # 进程间通信示例
│ └── rocrinfo/ # ROCr 信息查询工具
└── suites/ # 测试套件 (统一构建)
├── test_common/ # 主入口,CMakeLists.txt 在此
├── functional/ # 功能测试
├── performance/ # 性能测试
├── negative/ # 负面测试
└── stress/ # 压力测试
3. 测试套件详情
3.1 功能测试 (functional/)
验证 ROCr API 的正确性,包含以下测试模块:
| 模块 | 说明 |
|---|---|
svm_memory |
SVM (共享虚拟内存) 功能验证 |
virtual_memory |
虚拟内存管理 API 测试 |
memory_basic |
基本内存分配/释放 |
memory_allocation |
内存分配策略测试 |
memory_access |
内存访问权限测试 |
memory_alignment |
内存对齐验证 |
memory_atomics |
内存原子操作 |
metadata_prefetch |
内存预取功能 |
cu_masking |
CU (计算单元) 掩码测试 |
signal_kernel / signal_concurrent |
HSA 信号机制 |
ipc |
进程间共享内存 |
agent_props |
GPU Agent 属性查询 |
counted_queues |
队列计数管理 |
reference_count |
引用计数机制 |
concurrent_init / concurrent_shutdown |
并发初始化/关闭 |
debug_basic |
调试功能基础测试 |
deallocation_notifier |
内存释放通知 |
filter_devices |
设备过滤 |
gpu_coredump |
GPU coredump 功能 |
cuid |
CU ID 相关 |
time_stamp |
时间戳功能 |
test_fault_example |
故障处理示例 |
aql_barrier_bit |
AQL 屏障位测试 |
3.2 性能测试 (performance/)
| 模块 | 说明 |
|---|---|
dispatch_time |
GPU 任务分发延迟 |
enqueueLatency |
队列入队延迟 |
memory_async_copy |
异步内存拷贝性能 |
memory_async_copy_numa |
NUMA 架构下的异步拷贝 |
memory_async_copy_on_engine |
指定引擎的异步拷贝 |
agent_preload |
Agent 预加载性能 |
3.3 负面测试 (negative/)
| 模块 | 说明 |
|---|---|
memory_allocate_negative_tests |
内存分配异常场景 |
queue_validation |
队列参数验证 |
3.4 压力测试 (stress/)
| 模块 | 说明 |
|---|---|
memory_concurrent_tests |
并发内存操作压力 |
queue_write_index_concurrent_tests |
队列写索引并发压力 |
4. 构建方法
4.1 前置依赖
bash
sudo apt-get install libhwloc-dev libnuma-dev libyaml-cpp-dev
4.2 环境变量
确保 ROCM_DEV_PREFIX 已设置,通常为 ROCm 安装路径(如 /opt/rocm-7.3.0)。
4.3 构建
bash
ROCM_PREFIX = 'your ROCm path'
cd rocrtst/suites/test_common
mkdir -p build && cd build
cmake \
-DCMAKE_PREFIX_PATH="$ROCM_PREFIX" \
-DCMAKE_INSTALL_PREFIX="$ROCM_PREFIX" \
-DOPENCL_DIR="$ROCM_PREFIX" \
..
make -j$(nproc)
make rocrtst_kernels
sudo make install
4.5 构建 samples(可选)
samples 下的程序需单独构建:
bash
ROCM_PREFIX = 'your ROCm path'
cd rocrtst/samples/<sample_name>
mkdir build && cd build
cmake -DCMAKE_PREFIX_PATH="$ROCM_PREFIX" ..
make
5. 运行测试
5.1 基本运行
bash
# 确保能找到 ROCr 库
export LD_LIBRARY_PATH=$ROCM_PREFIX/lib:$LD_LIBRARY_PATH
# 运行所有测试
sudo $ROCM_PREFIX/bin/rocrtst64
# 或从安装目录的 ASIC 子目录运行(推荐,可自动找到对应 kernel)
cd $ROCM_PREFIX/share/rocrtst/gfx942 # 替换为你的 GPU 型号
sudo $ROCM_PREFIX/bin/rocrtst64
5.2 筛选测试
bash
# 列出所有测试用例
rocrtst64 --gtest_list_tests
# 运行特定测试
rocrtst64 --gtest_filter="*SVM*"
rocrtst64 --gtest_filter="*VirtualMemory*"
rocrtst64 --gtest_filter="*AsyncCopy*"
# 运行某一类测试
rocrtst64 --gtest_filter="*Memory*"
5.3 rocrtst 专用参数
bash
rocrtst64 -h # 查看帮助
rocrtst64 -i 100 # 设置迭代次数
rocrtst64 -v 2 # 设置详细级别 (0=最少, 1=中间值, 2=进度, ≥3=调试)
rocrtst64 -m 1 # GPU 监控信息级别 (0=关闭, 1=打印, ≥2=更多)
5.4 组合使用
bash
# 运行 SVM 测试,迭代 10 次,显示进度
sudo rocrtst64 --gtest_filter="*SVM*" -i 10 -v 2
6. 常见问题
- 找不到 kernel 文件 :确保从对应 GPU 的 ASIC 目录运行,或 kernel
.hsaco文件在正确路径。 - cmake 报 yaml-cpp 缺失 :执行
sudo apt-get install libyaml-cpp-dev。 - 权限问题 :大多数测试需要
sudo运行以访问 GPU 设备。