如何实现Radeon GPU功耗定时采样?求替代rocm-smi单次采样的方案
解决Radeon RX6900 XT定时功耗采样的方案
一、用Shell脚本封装rocm-smi实现定时采样
rocm-smi本身没有像nvidia-smi那样的内置定时采样参数,但可以通过shell循环调用+时间戳注入的方式实现需求。以下是bash脚本示例:
#!/bin/bash OUTPUT_FILE="amd_power_trace.csv" # 写入CSV表头 echo "timestamp,power.draw (W)" > $OUTPUT_FILE # 设置采样间隔(1ms,与nvidia-smi配置一致) SAMPLING_INTERVAL=0.001 while true; do # 获取精确到毫秒的时间戳 TIMESTAMP=$(date +%Y-%m-%dT%H:%M:%S.%3N) # 提取rocm-smi输出的功耗值(输出格式为"GPU索引,功耗(W)") POWER=$(rocm-smi -P --csv | awk -F ',' '{print $2}') # 写入采样数据 echo "$TIMESTAMP,$POWER" >> $OUTPUT_FILE # 等待采样间隔 sleep $SAMPLING_INTERVAL done
使用说明:
- 保存为
amd_power_sampler.sh,赋予执行权限:chmod +x amd_power_sampler.sh - 运行脚本后持续采样,按
Ctrl+C终止 - 若系统bash版本不支持小数参数的
sleep,可替换为usleep 1000(对应1ms等待)
二、直接读取sysfs硬件节点(轻量无依赖)
AMD GPU的功耗数据会暴露在sysfs文件系统中,无需依赖rocm-smi,采样开销更低:
- 定位功耗节点路径:
执行以下命令找到对应GPU的hwmon目录:
ls /sys/class/drm/card0/device/hwmon/
进入目标目录(如hwmon0),其中power1_input文件存储的是**微瓦(μW)**单位的瞬时功耗值。
- 定时采样脚本示例:
#!/bin/bash OUTPUT_FILE="amd_sysfs_power_trace.csv" echo "timestamp,power.draw (W)" > $OUTPUT_FILE SAMPLING_INTERVAL=0.001 # 替换为你的实际功耗节点路径 POWER_PATH="/sys/class/drm/card0/device/hwmon/hwmon0/power1_input" while true; do TIMESTAMP=$(date +%Y-%m-%dT%H:%M:%S.%3N) # 读取微瓦值并转换为瓦 POWER_RAW=$(cat $POWER_PATH) POWER=$(echo "scale=2; $POWER_RAW / 1000000" | bc) echo "$TIMESTAMP,$POWER" >> $OUTPUT_FILE sleep $SAMPLING_INTERVAL done
三、ROCm性能分析工具rocprof(结合应用场景)
如果需要和OpenCL应用的性能数据联动采集,可使用rocprof工具:
- 创建配置文件
profile_config.txt:
trace: power: enabled: true sample_interval_ms: 1
- 启动应用时附加rocprof采样:
rocprof --config profile_config.txt ./your_opencl_application
采样完成后,rocprof会生成包含功耗时序数据的结果文件,可从中提取时间戳与功耗值进行能耗计算。
内容的提问来源于stack exchange,提问作者Iago Storch
相关产品推荐
相关产品推荐

