本文档深入介绍 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-性能测试详解 --- 性能测试模块与数据解读