当前位置: 首页 > news >正文

06 - rocrtst 性能测试详解

本文档介绍rocrtst性能测试套件(suites/performance/)中的各个模块,帮助你理解测试指标、运行方法和结果解读。

1. 性能测试概览

性能测试注册在rocrtstPerf测试套件下,共 6 个源码模块。运行所有性能测试:

sudorocrtst64--gtest_filter="rocrtstPerf.*"
模块测量目标关键指标
dispatch_timeGPU 任务分发延迟微秒 (μs)
enqueueLatencyAQL 包入队延迟微秒 (μs)
memory_async_copy异步内存拷贝带宽GB/s
memory_async_copy_on_engine指定引擎的异步拷贝GB/s
memory_async_copy_numaNUMA 感知的异步拷贝GB/s
agent_preloadAgent 预加载延迟优化微秒 (μs)

2. dispatch_time — 分发延迟

源文件:dispatch_time.h/dispatch_time.cc

测量从 CPU 提交空 kernel 到 GPU 执行完成的端到端延迟。

2.1 测试用例

测试用例等待方式Kernel 数量说明
AQL_Dispatch_Time_Single_SpinWait自旋等待单个最低延迟场景
AQL_Dispatch_Time_Single_Interrupt中断等待单个中断驱动场景
AQL_Dispatch_Time_Multi_SpinWait自旋等待多个批量分发(自旋)
AQL_Dispatch_Time_Multi_Interrupt中断等待多个批量分发(中断)

2.2 运行

# 运行所有分发延迟测试sudorocrtst64--gtest_filter="rocrtstPerf.AQL_Dispatch_Time_*"# 仅运行单 kernel 自旋等待(最低延迟基线)sudorocrtst64--gtest_filter="rocrtstPerf.AQL_Dispatch_Time_Single_SpinWait"

2.3 测量原理

CPU 时间线: ├─ T1: 写入 AQL 包到队列 ────┐ │ │ ← Dispatch Latency ├─ T2: Signal 完成通知 ─────┘ │ Dispatch Time = T2 - T1
  • SpinWait:CPU 通过hsa_signal_wait_scacquire()自旋轮询 Signal 值变化,延迟最低但消耗 CPU
  • Interrupt:CPU 通过中断方式等待,延迟略高但 CPU 友好

2.4 结果解读

输出示例:

Mean dispatch latency (single, spin wait): 5.23 us Mean dispatch latency (single, interrupt): 8.45 us
指标典型值 (MI300X)说明
Single SpinWait3-8 μs最优分发延迟基线
Single Interrupt6-15 μs中断开销约 3-7 μs
Multi SpinWait更低平均值流水线效应

涉及 Kernel:dispatch_time_kernels.cl(空 kernel)

3. enqueueLatency — 入队延迟

源文件:enqueueLatency.h/enqueueLatency.cc

测量将 AQL 数据包写入队列的 CPU 端延迟(不包含 GPU 执行时间)。

3.1 测试用例

测试用例说明
ENQUEUE_LATENCY分别测量单包入队和多包入队延迟

该测试内部创建两个实例:

  • EnqueueLatency(true)— 单包入队
  • EnqueueLatency(false)— 多包入队

3.2 运行

sudorocrtst64--gtest_filter="rocrtstPerf.ENQUEUE_LATENCY"

3.3 测量原理

CPU 时间线: ├─ T1: 准备 AQL 包 ────────┐ │ │ ← Enqueue Latency ├─ T2: 写入队列门铃寄存器 ───┘ │ Enqueue Time = T2 - T1

dispatch_time的区别:

  • enqueueLatency仅测量 CPU 端写包的耗时
  • dispatch_time测量从写包到 GPU 执行完成的全程

3.4 结果解读

指标典型值说明
Single packet< 1 μs单个 AQL 包写入耗时
Multi packet略高多包连续写入的平均耗时

4. memory_async_copy — 异步内存拷贝

源文件:memory_async_copy.h/memory_async_copy.cc

测量不同路径下的异步内存拷贝带宽,是最重要的性能测试之一。

4.1 测试用例

测试用例说明
Memory_Async_Copy测试多种拷贝路径的带宽

4.2 拷贝路径类型

路径类型缩写说明
Host → DeviceH2D主机内存 → GPU 显存
Device → HostD2HGPU 显存 → 主机内存
Peer-to-PeerP2PGPU → GPU(直连)
Host → Device (Remote)H2DRemote远端 NUMA 节点 → GPU
Device → Host (Remote)D2HRemoteGPU → 远端 NUMA 节点
P2P (Remote)P2PRemoteGPU → GPU(跨 NUMA)

4.3 运行

# 运行默认拷贝测试(CPU↔GPU + GPU↔GPU)sudorocrtst64--gtest_filter="rocrtstPerf.Memory_Async_Copy"# 增加迭代次数以获得更稳定的数据sudorocrtst64--gtest_filter="rocrtstPerf.Memory_Async_Copy"-i20# 开启详细输出查看中间数据sudorocrtst64--gtest_filter="rocrtstPerf.Memory_Async_Copy"-v2

4.4 结果解读

输出示例:

Copy: CPU(0) -> GPU(1) Size: 4096 KB Time: 0.52 ms BW: 7.69 GB/s Copy: GPU(1) -> CPU(0) Size: 4096 KB Time: 0.48 ms BW: 8.33 GB/s Copy: GPU(1) -> GPU(2) Size: 4096 KB Time: 0.21 ms BW: 19.05 GB/s
路径典型带宽取决于
H2D / D2H10-26 GB/sPCIe Gen4/Gen5 带宽
P2P(直连)50-200 GB/sxGMI / Infinity Fabric 带宽
P2P(跨 NUMA)较低跨 socket 互联带宽

涉及 API:hsa_amd_memory_async_copy()

5. memory_async_copy_on_engine — 指定引擎拷贝

源文件:memory_async_copy_on_engine.h/memory_async_copy_on_engine.cc

继承自MemoryAsyncCopy,在指定的 DMA 引擎上执行拷贝并验证数据正确性。

5.1 测试用例

测试用例说明
Memory_Async_Copy_On_Engine在指定 SDMA 引擎上拷贝并验证

5.2 运行

sudorocrtst64--gtest_filter="rocrtstPerf.Memory_Async_Copy_On_Engine"

5.3 说明

  • 使用hsa_amd_memory_async_copy_on_engine()API(AMD 扩展)
  • 可以指定使用哪个 SDMA(System DMA)引擎
  • 包含数据验证(Benchmark with Verification),确保拷贝正确性

6. memory_async_copy_numa — NUMA 感知拷贝

源文件:memory_async_copy_numa.h/memory_async_copy_numa.cc

测试 NUMA 架构下,不同 NUMA 节点间的内存拷贝带宽。

6.1 测试用例

测试用例说明
DISABLED_Memory_Async_Copy_NUMANUMA 感知异步拷贝(默认禁用)

⚠️ 此测试默认 DISABLED,且构建时通过ENABLE_COPY_NUMA=OFF排除源文件。启用需要修改 CMake 选项。

6.2 启用方法

cmake-DENABLE_COPY_NUMA=ON...

运行时:

sudorocrtst64--gtest_also_run_disabled_tests--gtest_filter="*NUMA*"

6.3 依赖

  • 需要libhwloc(NUMA 拓扑检测)
  • 多 NUMA 节点系统(如双路服务器 + 多 GPU)

7. agent_preload — Agent 预加载

源文件:agent_preload.h/agent_preload.cc

测量 Agent 预加载对性能的影响,对比开启/关闭预加载时的操作延迟。

7.1 测试用例

测试用例说明
Agent_Preload_Latency对比预加载开启/关闭的延迟

7.2 运行

sudorocrtst64--gtest_filter="rocrtstPerf.Agent_Preload_Latency"

7.3 测量内容

该测试对比两个场景的延迟:

场景说明
Profiling Enable 延迟首次调用hsa_amd_profiling_async_copy_enable()的耗时
首次异步拷贝延迟首次hsa_amd_memory_async_copy()的耗时(包含 Blit 初始化)

预加载(Preload)会在 Agent 初始化时预先加载 Blit kernel,避免首次拷贝时的冷启动开销。

7.4 结果解读

输出示例:

Profiling Enable Latency: Without preload: 1500.00 us With preload: 200.00 us Improvement: 1300.00 us First Async Copy Latency: Without preload: 2000.00 us With preload: 300.00 us Improvement: 1700.00 us

8. 性能测试最佳实践

8.1 获取稳定结果

# 增加迭代次数sudorocrtst64--gtest_filter="rocrtstPerf.*"-i50# 多次重复整个测试sudorocrtst64--gtest_filter="rocrtstPerf.*"-i20--gtest_repeat=3

8.2 减少干扰因素

# 固定 CPU 频率(避免频率调节影响)sudocpupower frequency-set-gperformance# 固定 GPU 频率sudorocm-smi--setperfdeterminism1800# 关闭不必要的进程

8.3 结合 GPU 监控

# 打印每个测试前后的 GPU 状态(温度、频率、功耗等)sudorocrtst64--gtest_filter="rocrtstPerf.*"-m1

8.4 导出结果

# 导出为 XML(可被 CI 系统解析)sudorocrtst64--gtest_filter="rocrtstPerf.*"-i20--gtest_output=xml:perf_report.xml

9. 性能测试速查表

命令说明
--gtest_filter="rocrtstPerf.*"所有性能测试
--gtest_filter="rocrtstPerf.AQL_Dispatch_Time_*"分发延迟
--gtest_filter="rocrtstPerf.ENQUEUE_LATENCY"入队延迟
--gtest_filter="rocrtstPerf.Memory_Async_Copy"异步拷贝带宽
--gtest_filter="rocrtstPerf.Memory_Async_Copy_On_Engine"指定引擎拷贝
--gtest_filter="rocrtstPerf.Agent_Preload_Latency"预加载延迟

上一篇:05-功能测试详解
下一篇:07-负面测试与压力测试详解 — 异常场景与高并发测试

http://www.jsqmd.com/news/801018/

相关文章:

  • 重庆迅灵 AI 代理选购指南,哪个口碑好? - 工业品牌热点
  • 芯片设计成本飙升的深层逻辑与一线工程师的破局之道
  • 如何用开源Linux桌面便签应用提升3倍工作效率
  • Design Compiler实战——从RTL到门级的综合流程精解
  • 2026年重庆优云GEO优化费用一览 - 工业品牌热点
  • KiwiSDR开源项目:基于BeagleBone的SDR与GPS融合接收机深度解析
  • 别再傻傻等pip下载了!PyCharm 2023.3 一键配置清华/阿里云镜像源(附速度对比)
  • 无线充电技术解析:从Qi标准到射频远距充电的现状与未来
  • 英雄联盟智能助手:三步提升游戏效率的自动化解决方案
  • 华硕笔记本终极性能管理指南:如何用GHelper替代Armoury Crate的完整教程
  • 2026年重庆优云GEO优化好用吗?口碑与价格全解析 - myqiye
  • 继电器功耗优化:从吸合保持原理到PWM与专用IC驱动方案
  • TerraScan背后的PTD算法,在复杂城区与陡峭山地LiDAR数据处理中到底表现如何?
  • 88%企业部署未经验证Agent,本篇揭秘Agent安全实战架构(含防御清单)
  • NHSE终极指南:解锁动物森友会存档编辑的完整教程
  • AMD Ryzen性能调校神器:SMU Debug Tool完全指南,解锁CPU隐藏潜能!
  • 从LTE到5G NR:同步信号SSB的设计演进与工程权衡(附频段/子载波配置差异)
  • 硬件原型设计:可测试性、调试支持与验证策略的工程实践
  • 2026年能做品牌词占位的GEO优化服务商排名,如何选择? - 工业品牌热点
  • 2026年8款必备降AI工具(含免费版),亲测高效降AIGC - 降AI实验室
  • MTKClient终极指南:掌握联发科设备刷机与逆向工程的完整解决方案
  • 专为Kubernetes设计的不可变操作系统operator-os:原理、部署与运维指南
  • 英特尔Optane持久内存技术解析:从3D XPoint原理到数据中心实践
  • UnityAgentClient:在Unity编辑器内集成AI智能体的完整指南
  • 求推荐靠谱的ODF配线架 - myqiye
  • ARM PMU架构与性能监控技术详解
  • 2026年重庆优云AI获客选购指南,品牌排名前列 - 工业品牌热点
  • 2026年美国留学靠谱机构排名:常青藤精英教育名列前茅 - mypinpai
  • DesignCon 2014参会指南:测试测量工程师如何高效规划与深度聚焦
  • AI Agent失控?雷神揭秘企业级可控自治论,双环框架教你管住数字劳动力!