Я использую nvmlDeviceGetPowerUsage () NVML, чтобы получить общее энергопотребление для моей программы.В приведенном ниже коде я вставил один вызов до моей параллельной области openACC и другой вызов после параллельной области.
Но это не кажется правильным, поскольку в документации говорится, что эта функция "извлекает энергопотребление для этого графического процессора в милливаттах и связанных схемах (например, памяти)", которые я интерпретируюкак: (поправьте меня, если я ошибаюсь) "Текущее энергопотребление графического процессора", а не общее энергопотребление во время выполнения моей программы.
Вот код, который я сейчас использую:
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]);
}
Что мне нужно сделать, чтобы получить общее энергопотребление для моей программы?Есть ли хитрость, чтобы использовать это?или любая другая функция, которая могла бы сделать это?
Любая помощь приветствуется.