Я пишу код для периодического измерения энергопотребления графического процессора NVIDIA Tesla K20 (архитектура Kepler) с использованием NVML API.
Переменные:
nvmlReturn_t result;
nvmlEnableState_t pmmode;
nvmlDevice_t nvmlDeviceID;
unsigned int powerInt;
Базовый код:
result = nvmlDeviceGetPowerManagementMode(nvmlDeviceID, &pmmode);
if (pmmode == NVML_FEATURE_ENABLED) {
result = nvmlDeviceGetPowerUsage(nvmlDeviceID, &powerInt);
}
Моя проблема в том, что nvmlDeviceGetPowerManagementMode
всегда возвращает NVML_ERROR_INVALID_ARGUMENT
. Я проверил это.
В документации NVML API сказано, что NVML_ERROR_INVALID_ARGUMENT
возвращается, когда либо nvmlDeviceID
недопустимо, либо pmmode
равно NULL
.
nvmlDeviceID
определенно действителен, потому что я могу запросить его свойства, которые соответствуют моему графическому процессору. Но я не понимаю, почему я должен устанавливать значение pmmode
на что-либо, потому что в документации сказано, что это Reference in which to return the current power management mode
. Для записи я попытался присвоить ему значение включения, но результат был тот же.
Я явно делаю что-то не так, потому что другие пользователи системы написали свои собственные библиотеки, используя эту функцию, и у них не возникает проблем. Я не могу связаться с ними. Что нужно исправить, чтобы эта функция работала корректно?