首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NVAPI从NVidia图形处理器获取温度

使用NVAPI从NVidia图形处理器获取温度
EN

Stack Overflow用户
提问于 2013-03-30 03:14:16
回答 4查看 7.8K关注 0票数 4

在过去的几天里,我一直在尝试使用C++来获取我的图形处理器的温度

使用NVAPI时,我得到了以下代码

代码语言:javascript
复制
#include "stdafx.h"
#include "nvapi.h"


int _tmain(int argc, _TCHAR* argv[])
{
    NvAPI_Status ret = NVAPI_OK;
    int i=0;

    NvDisplayHandle hDisplay_a[NVAPI_MAX_PHYSICAL_GPUS*2] = {0};

    ret = NvAPI_Initialize();

    if (!ret == NVAPI_OK){
        NvAPI_ShortString string;
        NvAPI_GetErrorMessage(ret, string);
        printf("NVAPI NvAPI_Initialize: %s\n", string);
    }

    NvAPI_ShortString ver;

    NvAPI_GetInterfaceVersionString(ver);
    printf("NVAPI Version: %s\n", ver);

    NvU32 cnt;

    NvPhysicalGpuHandle phys;

    ret = NvAPI_EnumPhysicalGPUs(&phys, &cnt);

    if (!ret == NVAPI_OK){
        NvAPI_ShortString string;
        NvAPI_GetErrorMessage(ret, string);
        printf("NVAPI NvAPI_EnumPhysicalGPUs: %s\n", string);
    }

    NvAPI_ShortString name;

    NV_GPU_THERMAL_SETTINGS thermal;

    ret = NvAPI_GPU_GetFullName(phys, name);
    if (!ret == NVAPI_OK){
        NvAPI_ShortString string;
        NvAPI_GetErrorMessage(ret, string);
        printf("NVAPI NvAPI_GPU_GetFullName: %s\n", string);
    }

    printf("Name: %s\n", name);
    thermal.version =NV_GPU_THERMAL_SETTINGS_VER;
    ret = NvAPI_GPU_GetThermalSettings(phys,0, &thermal);

    if (!ret == NVAPI_OK){
        NvAPI_ShortString string;
        NvAPI_GetErrorMessage(ret, string);
        printf("NVAPI NvAPI_GPU_GetThermalSettings: %s\n", string);
    }

    printf("Temp: %l C\n", thermal.sensor[0].currentTemp);

    return 0;
}

我得到的输出是

代码语言:javascript
复制
NVAPI Version: NVidia Complete Version 1.10
Name: GeForce GTX 680
Temp:  C

所以NVAPI正在初始化,它可以找到我的图形处理器,这是一个GTX680,但它不会返回温度

EN

回答 4

Stack Overflow用户

发布于 2013-03-30 03:37:19

printf对传递给它的参数的大小和类型非常敏感。

由于currentTemp固定为32位无符号(并且C++不保证printf喜欢的类型的特定位数),因此将其强制转换为printf可以预期的类型。

代码语言:javascript
复制
printf("Temp: %u C\n", static_cast<unsigned>(thermal.sensor[0].currentTemp) );
票数 3
EN

Stack Overflow用户

发布于 2013-11-19 08:56:16

我认为问题在于您需要通过以下方式设置热设置:

代码语言:javascript
复制
NV_GPU_THERMAL_SETTINGS ThermalInfo;
ThermalInfo.version = NV_GPU_THERMAL_SETTINGS_VER_2;
ThermalInfo.sensor[0].controller = NVAPI_THERMAL_CONTROLLER_GPU_INTERNAL;
ThermalInfo.sensor[0].target = NVAPI_THERMAL_TARGET_GPU;

另外,你还应该写:

代码语言:javascript
复制
NvPhysicalGpuHandle  nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS];

因为你可能会损坏内存。(注意,请查看随NVAPI提供的文档中的NvAPI_EnumPhysicalGPUs )。

票数 3
EN

Stack Overflow用户

发布于 2014-11-14 01:35:10

您的代码几乎可以正常工作,只是在这些行上出现了打字错误;)

代码语言:javascript
复制
(!ret == NVAPI_OK)

将它们更改为:

代码语言:javascript
复制
(ret != NVAPI_OK)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15709958

复制
相关文章

相似问题

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