首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nvmlDeviceGetPowerManagementMode()总是返回NVML_ERROR_INVALID_ARGUMENT?

nvmlDeviceGetPowerManagementMode()总是返回NVML_ERROR_INVALID_ARGUMENT?
EN

Stack Overflow用户
提问于 2016-05-18 20:24:23
回答 1查看 464关注 0票数 1

我正在编写一个代码来定期使用NVML来测量NVIDIA K20 GPU (开普勒架构)的功率使用情况。

变量

代码语言:javascript
复制
nvmlReturn_t result;
nvmlEnableState_t pmmode;
nvmlDevice_t nvmlDeviceID;
unsigned int powerInt;

Basic代码

代码语言:javascript
复制
result = nvmlDeviceGetPowerManagementMode(nvmlDeviceID, &pmmode);
if (pmmode == NVML_FEATURE_ENABLED) {
    result = nvmlDeviceGetPowerUsage(nvmlDeviceID, &powerInt);
}

我的问题是nvmlDeviceGetPowerManagementMode总是返回NVML_ERROR_INVALID_ARGUMENT。我查过这个了。

NVML文档指出,当NVML_ERROR_INVALID_ARGUMENT无效或pmmodeNULL时,将返回pmmode

nvmlDeviceID绝对是有效的,因为我能够查询它的属性,这些属性与我的GPU匹配。但是我不明白为什么我应该将pmmode的值设置为任何东西,因为文档中说它是一个Reference in which to return the current power management mode。为了记录在案,我尝试给它分配一个启用值,但是结果仍然是一样的。

我显然做错了什么,因为系统的其他用户已经使用这个函数编写了自己的库,而且他们没有遇到任何问题。我无法联系他们。要使这个函数正确工作,我应该修复什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-19 23:04:44

这里的问题不是直接在API调用中--而是在其余的代码中--但是答案可能对其他人有用。在尝试此解决方案之前,必须知道启用了电源管理模式(请与nvidia-smi -q -d POWER检查)。

在参数错误无效的情况下,问题很可能是nvmlDeviceID造成的。我说过我能够查询设备属性,当时我确信它是正确的,但是要注意稍后修改nvmlDeviceID值的任何API调用。

例如,在本例中,下面的API调用将some_variable作为无效索引,因此nvmlDeviceID变得无效。

代码语言:javascript
复制
nvmlDeviceGetHandleByIndex(some_variable, &nvmlDeviceID);

它必须改为:

代码语言:javascript
复制
nvmlDeviceGetHandleByIndex(0, &nvmlDeviceID);

因此,解决方案要么删除所有更改或使nvmlDeviceID值无效的API调用,要么至少确保代码中的任何现有API调用都不会修改该值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37309449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档