1. 程式人生 > >用NVAPI獲取GPU資訊

用NVAPI獲取GPU資訊

               

通過nvapi可以獲得GPU的溫度和效能引數。主頁在這裡:https://developer.nvidia.com/nvapi

我的程式碼基礎是來自網際網路,不過略加變化。首先是獲取物理GPU,然後是獲取溫度,最後是獲取GPU效能。另外,獲取GPU效能不需要自己通過offset從dll中匯出函式。

#include "stdafx.h"#include "R313-developer/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 str;        NvAPI_GetErrorMessage(ret, str);        printf("NVAPI NvAPI_Initialize: %s\n", str);  return 1;    }    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);  return 1;    }    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);  return 1;    }    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);  return 1;    }  printf("Temp: %u C\n", static_cast<unsigned>(thermal.sensor[0].currentTemp)); NV_GPU_DYNAMIC_PSTATES_INFO_EX infoEx; infoEx.version = NV_GPU_DYNAMIC_PSTATES_INFO_EX_VER; ret = NvAPI_GPU_GetDynamicPstatesInfoEx(phys, &infoEx); if (!ret == NVAPI_OK) {        NvAPI_ShortString string;        NvAPI_GetErrorMessage(ret, string);        printf("NVAPI NvAPI_GPU_GetDynamicPstatesInfoEx: %s\n", string);  return 1; } //printf("Physical GPU utilization%s", infoEx.utilization[0].);     return 0;