05 - rocrtst 功能测试详解

本文档深入介绍 rocrtst 功能测试套件(suites/functional/)中的各个测试模块,帮助你理解每个测试验证的 HSA API 功能。

1. 功能测试概览

功能测试注册在 rocrtstFunc 测试套件下,共 26 个源码模块,涵盖 ROCr Runtime 的核心 API。运行所有功能测试:

bash 复制代码
sudo rocrtst64 --gtest_filter="rocrtstFunc.*"

按功能领域可分为以下 6 类:

复制代码
功能测试 (rocrtstFunc)
├── 内存管理 ─── memory_basic / memory_allocation / memory_access
│              memory_alignment / memory_atomics / metadata_prefetch
│              svm_memory / virtual_memory
├── 队列与信号 ─ counted_queues / aql_barrier_bit
│              signal_kernel / signal_concurrent
├── 设备管理 ─── agent_props / filter_devices / cu_masking / cuid
├── 生命周期 ─── concurrent_init / concurrent_shutdown
│              concurrent_init_shutdown / reference_count
├── 进程与调试 ─ ipc / debug_basic / gpu_coredump
└── 其他 ─────── deallocation_notifier / time_stamp / test_fault_example

2. 内存管理类测试

2.1 memory_basic --- 基本内存操作

源文件: memory_basic.h / memory_basic.cc

验证 HSA 内存池的基本查询和分配能力。

测试用例 说明
Memory_Max_Mem 测试单次最大内存分配量
Memory_Available 查询可用内存量
bash 复制代码
sudo rocrtst64 --gtest_filter="rocrtstFunc.Memory_Max_Mem:rocrtstFunc.Memory_Available"

涉及 API: hsa_amd_memory_pool_get_info()hsa_amd_memory_pool_allocate()

2.2 memory_allocation --- 内存分配策略

源文件: memory_allocation.h / memory_allocation.cc

测试不同内存分配场景。

测试用例 说明
GroupMemoryAllocationTest 动态组内存分配(LDS)
MemoryAllocateAndFreeTest 基本分配与释放
MemoryAllocateContiguousTest 连续内存分配
bash 复制代码
sudo rocrtst64 --gtest_filter="rocrtstFunc.*MemoryAllocat*:rocrtstFunc.*GroupMemory*"

涉及 API: hsa_amd_memory_pool_allocate()hsa_amd_memory_pool_free()

2.3 memory_access --- 内存访问

源文件: memory_access.h / memory_access.cc

验证 CPU 和 GPU 之间的交叉内存访问。

测试用例 说明
MemoryAccessTests CPU 访问 GPU 内存 + GPU 访问 CPU 内存
MemoryAccessCoherent 一致性内存访问测试
bash 复制代码
sudo rocrtst64 --gtest_filter="rocrtstFunc.MemoryAccess*"

涉及 API: hsa_amd_agents_allow_access()hsa_amd_memory_pool_allocate()

2.4 memory_alignment --- 内存对齐

源文件: memory_alignment.h / memory_alignment.cc

测试用例 说明
Memory_Alignment_Test 验证各内存池返回的对齐要求

涉及 API: hsa_amd_memory_pool_get_info(HSA_AMD_MEMORY_POOL_INFO_RUNTIME_ALLOC_ALIGNMENT)

2.5 memory_atomics --- 内存原子操作

源文件: memory_atomics.h / memory_atomics.cc

通过 GPU kernel 验证各种原子操作的正确性。

测试用例 原子操作
Memory_Atomic_Add_Test 原子加
Memory_Atomic_Sub_Test 原子减
Memory_Atomic_And_Test 原子与
Memory_Atomic_Or_Test 原子或
Memory_Atomic_Xor_Test 原子异或
Memory_Atomic_Min_Test 原子最小值
Memory_Atomic_Max_Test 原子最大值
Memory_Atomic_Inc_Test 原子自增
Memory_Atomic_Dec_Test 原子自减
Memory_Atomic_Xchg_Test 原子交换
bash 复制代码
# 运行所有原子操作测试
sudo rocrtst64 --gtest_filter="rocrtstFunc.Memory_Atomic_*"

涉及 Kernel: atomicOperations_kernels.cl

2.6 metadata_prefetch --- 内存预取

源文件: metadata_prefetch.h / metadata_prefetch.cc

测试用例 说明
Test_MetadataPrefetchPacket 测试元数据预取 AQL 包

涉及 API: AQL Vendor Specific 包提交

2.7 svm_memory --- 共享虚拟内存 (SVM)

源文件: svm_memory.h / svm_memory.cc

验证 SVM(Shared Virtual Memory)功能,CPU 和 GPU 共享同一虚拟地址空间。

测试用例 说明
SvmMemory_Basic_Test SVM 创建/销毁、预取、批量丢弃
SvmMemory_Negative_Test SVM 丢弃操作的负面测试
bash 复制代码
sudo rocrtst64 --gtest_filter="rocrtstFunc.SvmMemory*"

涉及 API: hsa_amd_svm_attributes_set()hsa_amd_svm_prefetch_async()

⚠️ SVM 功能需要 GPU 和驱动支持(通常 gfx90a+ 及 XNACK 模式)。

2.8 virtual_memory --- 虚拟内存管理

源文件: virtual_memory.h / virtual_memory.cc

测试 HSA 虚拟内存管理 API(地址预留、物理内存映射等)。

测试用例 说明
VirtMemory_Basic_Test 创建/销毁、引用计数、部分映射
VirtMemory_Access_Test CPU↔GPU、GPU↔GPU 虚拟内存访问
VirtMemory_Accounting_Test 内存计量测试
VirtMemory_Aliasing_Test 虚拟地址别名(多个VA映射同一物理页)
VirtMemory_Interprocess_Test 虚拟内存跨进程共享
bash 复制代码
sudo rocrtst64 --gtest_filter="rocrtstFunc.VirtMemory_*"

涉及 API: hsa_amd_vmem_address_reserve()hsa_amd_vmem_map()hsa_amd_vmem_set_access()

3. 队列与信号类测试

3.1 counted_queues --- 计数队列

源文件: counted_queues.h / counted_queues.cc

测试 AMD 扩展的计数队列(Counted Queue)API。

测试用例 说明
Counted_Queue_Basic_Test 基本 API 创建/销毁
Counted_Queue_Same_Priority_Max_Limit_Test 同优先级最大队列数限制
Counted_Queue_Invalid_Args_Test 无效参数处理
Counted_Queue_Multiple_Priorities_Limit_Test 多优先级队列限制
Counted_Queue_Set_Priority_Nack_Test 设置优先级(XNACK 模式)
Counted_Queue_Set_CUMask_Nack_Test 设置 CU 掩码(XNACK 模式)
Counted_Queue_Dispatch_Test 队列任务分发
Counted_Queue_Multithreaded_Dispatch_Test 多线程分发
Counted_Queue_Overflow_And_Wraparound_Test 队列溢出与回绕
bash 复制代码
sudo rocrtst64 --gtest_filter="rocrtstFunc.Counted_Queue_*"

3.2 signal_concurrent --- 信号并发操作

源文件: signal_concurrent.h / signal_concurrent.cc

测试用例 说明
Signal_Destroy_Concurrently 并发销毁信号
Signal_Max_Consumer 最大消费者数量
Signal_Create_Concurrently 并发创建信号
bash 复制代码
sudo rocrtst64 --gtest_filter="rocrtstFunc.Signal_*"

涉及 API: hsa_signal_create()hsa_signal_destroy()

3.3 signal_kernel --- 信号与 Kernel 交互

源文件: signal_kernel.h / signal_kernel.cc

测试 GPU kernel 中的信号操作(目前为 DISABLED 状态)。

测试用例 说明
DISABLED_Signal_Kernel_Set Kernel 中设置信号
DISABLED_Signal_Kernel_Multi_Set Kernel 中多次设置
DISABLED_Signal_Kernel_Wait Kernel 中等待信号
DISABLED_Signal_Kernel_Multi_Wait Kernel 中多重等待

3.4 aql_barrier_bit --- AQL 屏障位

源文件: aql_barrier_bit.h / aql_barrier_bit.cc

测试 AQL 包中的 Barrier 位功能(目前为 DISABLED 状态)。

测试用例 说明
DISABLED_Aql_Barrier_Bit_Set 设置屏障位的行为验证
DISABLED_Aql_Barrier_Bit_Not_Set 未设置屏障位的行为验证

4. 设备管理类测试

4.1 agent_props --- Agent 属性查询

源文件: agent_props.h / agent_props.cc

测试用例 说明
AgentPropertiesTests 查询 GPU 的 UUID 和时钟计数器
bash 复制代码
sudo rocrtst64 --gtest_filter="rocrtstFunc.AgentPropertiesTests"

涉及 API: hsa_agent_get_info()

4.2 filter_devices --- 设备过滤

源文件: filter_devices.h / filter_devices.cc

测试用例 说明
Filter_Devices_Test 验证 ROCR_VISIBLE_DEVICES 环境变量的过滤功能

4.3 cu_masking --- CU 掩码

源文件: cu_masking.h / cu_masking.cc

测试用例 说明
DISABLED_CU_Masking 设置计算单元掩码,限制 kernel 使用的 CU 数量

涉及 API: hsa_amd_queue_cu_set_mask()
涉及 Kernel: cu_mask_kernels.cl

⚠️ 当前为 DISABLED 状态,等待修复。

4.4 cuid --- CU 标识

源文件: cuid.h / cuid.cc

测试用例 说明
Cuid_GPU_Validation_Test 验证 GPU CU ID 功能

需要编译时定义 HSA_ENABLE_AMDCUID_SUPPORT 宏。

5. 生命周期类测试

5.1 concurrent_init --- 并发初始化

源文件: concurrent_init.h / concurrent_init.cc

测试用例 说明
Concurrent_Init_Test 多线程同时调用 hsa_init()

5.2 concurrent_shutdown --- 并发关闭

源文件: concurrent_shutdown.h / concurrent_shutdown.cc

测试用例 说明
Concurrent_Shutdown 多线程同时调用 hsa_shut_down()

5.3 concurrent_init_shutdown --- 并发初始化与关闭

源文件: concurrent_init_shutdown.h / concurrent_init_shutdown.cc

测试用例 说明
Concurrent_Init_Shutdown_Test 多线程交替执行 init 和 shutdown

5.4 reference_count --- 引用计数

源文件: reference_count.h / reference_count.cc

测试用例 说明
Reference_Count 验证 hsa_init()/hsa_shut_down() 的引用计数机制
Max_Reference_Count 测试最大引用计数
bash 复制代码
sudo rocrtst64 --gtest_filter="rocrtstFunc.Reference_Count:rocrtstFunc.Max_Reference_Count"

涉及 API: hsa_init()hsa_shut_down()

6. 进程与调试类测试

6.1 ipc --- 进程间通信

源文件: ipc.h / ipc.cc

测试用例 说明
IPC 测试跨进程的 GPU 内存共享

涉及 API: hsa_amd_ipc_memory_create()hsa_amd_ipc_memory_attach()

6.2 debug_basic --- 调试基础

源文件: debug_basic.h / debug_basic.cc

测试用例 说明
DISABLED_DebugBasicTests 使用 debug trap 指令的向量加法测试

涉及 Kernel: vector_add_debug_trap_kernel.cl

6.3 gpu_coredump --- GPU 核心转储

源文件: gpu_coredump.h / gpu_coredump.cc

测试 GPU 发生故障时的核心转储功能。

测试用例 说明
GpuCoreDump_DefaultPattern 默认转储路径模式
GpuCoreDump_CustomPattern 自定义路径模式
GpuCoreDump_DisableFlag 禁用标志
GpuCoreDump_PatternSubstitution 路径模式中的变量替换
GpuCoreDump_InvalidPath 无效路径处理
GpuCoreDump_ContentIntegrity 转储内容完整性
GpuCoreDump_PipePattern 管道模式转储
bash 复制代码
sudo rocrtst64 --gtest_filter="rocrtstFunc.GpuCoreDump_*"

7. 其他功能测试

7.1 deallocation_notifier --- 内存释放通知

源文件: deallocation_notifier.h / deallocation_notifier.cc

测试用例 说明
Deallocation_Notifier_Test 注册和触发内存释放回调

涉及 API: hsa_amd_register_deallocation_callback()

7.2 time_stamp --- 时间戳

源文件: time_stamp.h / time_stamp.cc

测试用例 说明
Time_Stamp 验证 HSA 系统时间戳的正确性

涉及 API: hsa_system_get_info(HSA_SYSTEM_INFO_TIMESTAMP)

7.3 test_fault_example --- 故障处理示例

源文件: test_fault_example.h / test_fault_example.cc

通用测试模板示例,也作为新测试用例的参考。

测试用例 说明
Test_Example 标准测试流程示例
Test_Example_InterruptDisabled 禁用中断模式的测试示例

8. 功能测试速查表

筛选命令 说明
--gtest_filter="rocrtstFunc.*" 全部功能测试
--gtest_filter="rocrtstFunc.*Memory*" 所有内存相关测试
--gtest_filter="rocrtstFunc.*Svm*" SVM 测试
--gtest_filter="rocrtstFunc.*VirtMemory*" 虚拟内存测试
--gtest_filter="rocrtstFunc.*Signal*" 信号测试
--gtest_filter="rocrtstFunc.Counted_Queue_*" 计数队列测试
--gtest_filter="rocrtstFunc.*Concurrent*" 并发生命周期测试
--gtest_filter="rocrtstFunc.GpuCoreDump_*" GPU 核心转储测试
--gtest_filter="rocrtstFunc.Memory_Atomic_*" 原子操作测试

9. DISABLED 测试汇总

以下测试默认不运行,需要 --gtest_also_run_disabled_tests 参数:

测试 禁用原因
DISABLED_CU_Masking 等待修复
DISABLED_Signal_Kernel_* (4 个) 信号 kernel 交互待完善
DISABLED_Aql_Barrier_Bit_* (2 个) 屏障位功能待完善
DISABLED_DebugBasicTests 调试功能依赖特定环境

上一篇:04-运行第一个测试

下一篇:06-性能测试详解 --- 性能测试模块与数据解读

相关推荐
DeeplyMind5 小时前
1.1 ROCr 测试集 (rocrtst) 完整使用指南
rocr·rocrtst
程序设计实验室3 天前
ROCm on Windows 性能排查:RX 6650 XT 跑 PyTorch,为什么加速不明显?
ai·rocm
DeeplyMind1 个月前
AMDGPU驱动中Doorbell与Event机制简要对比
rocm·doorbell·hsa event
DeeplyMind2 个月前
第05章:HSA-API快速入门
agent·signal·queue·rocm·rocr-runtime·hsa
DeeplyMind3 个月前
11 - SVM的高级特性:多GPU支持
svm·amdgpu·rocm·kfd
DeeplyMind3 个月前
09 - SVM缺页处理机制
svm·amdgpu·rocm·kfd·rocr
DeeplyMind3 个月前
07 - SVM内存迁移机制
svm·amdgpu·rocm·kfd·rocr
DeeplyMind3 个月前
06 - SVM范围管理
svm·amdgpu·rocm·kfd
DeeplyMind3 个月前
05 - 进程与SVM的关系
svm·amdgpu·rocm·kfd