我正在使用NVML的nvmlDeviceGetPowerUsage()获取程序的总功耗。在下面的代码中,我在openACC并行区域之前插入了一个调用,在并行区域之后插入了另一个调用。
但这似乎不对,因为documentation表示此功能“以毫瓦为单位及其相关电路(例如内存)检索此GPU的功耗”,我解释为:(纠正我如果我错了)“ GPU的当前功耗”,而不是程序执行期间的总功耗。
这是我现在正在使用的代码:
unsigned int power[device_count];
for (i = 0; i < device_count; i++){
if(nvmlDeviceGetPowerUsage ( device[i], &power[i] ) != NVML_SUCCESS){
printf("Error getting power usage for device:%d\n",i);
}
printf("Before: Power usage for device:%d = %ld mWatts\n",i,power[i]);
}
#pragma acc parallel
{
//code to run in parallel here
}
for (i = 0; i < device_count; i++){
if(nvmlDeviceGetPowerUsage ( device[i], &power[i] ) != NVML_SUCCESS){
printf("Error getting power usage for device:%d\n",i);
}
printf("After: Power usage for device:%d = %ld mWatts\n",i,power[i]);
}
我需要做什么才能获得程序的总功耗?有什么技巧可以使用吗?或其他任何可以执行此操作的功能?
感谢您的帮助。