05 - rocrtst 功能测试详解
本文档深入介绍rocrtst功能测试套件(suites/functional/)中的各个测试模块,帮助你理解每个测试验证的 HSA API 功能。
1. 功能测试概览
功能测试注册在rocrtstFunc测试套件下,共 26 个源码模块,涵盖 ROCr Runtime 的核心 API。运行所有功能测试:
sudorocrtst64--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_example2. 内存管理类测试
2.1 memory_basic — 基本内存操作
源文件:memory_basic.h/memory_basic.cc
验证 HSA 内存池的基本查询和分配能力。
| 测试用例 | 说明 |
|---|---|
Memory_Max_Mem | 测试单次最大内存分配量 |
Memory_Available | 查询可用内存量 |
sudorocrtst64--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 | 连续内存分配 |
sudorocrtst64--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 | 一致性内存访问测试 |
sudorocrtst64--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 | 原子交换 |
# 运行所有原子操作测试sudorocrtst64--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 丢弃操作的负面测试 |
sudorocrtst64--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 | 虚拟内存跨进程共享 |
sudorocrtst64--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 | 队列溢出与回绕 |
sudorocrtst64--gtest_filter="rocrtstFunc.Counted_Queue_*"3.2 signal_concurrent — 信号并发操作
源文件:signal_concurrent.h/signal_concurrent.cc
| 测试用例 | 说明 |
|---|---|
Signal_Destroy_Concurrently | 并发销毁信号 |
Signal_Max_Consumer | 最大消费者数量 |
Signal_Create_Concurrently | 并发创建信号 |
sudorocrtst64--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 和时钟计数器 |
sudorocrtst64--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 | 测试最大引用计数 |
sudorocrtst64--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 | 管道模式转储 |
sudorocrtst64--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-性能测试详解 — 性能测试模块与数据解读
