具体类可以自行设计,核心思想是调用NVAPI接口读取显卡性能数据进行解析,本例中以GPUMonitorEx.h GPUMonitorEx.CPP设计具体解析过程。
配置:
需要在工程路径中添加nvapi64.lib和cudart.lib等文件
代码:
1.头文件代码 GPUMonitorEx.h
#include <Windows.h>
#include <direct.h>
#include <io.h>
#include <string>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <time.h>
#include <tchar.h>
#include "NVAPI/nvapi.h"
#define NVAPI_MAX_PHYSICAL_GPUS 64
struct GPUState
{
int iTemperature;
int iTachometer;
int iGPUUsage;
int iPerfstate;
GPUState()
:iTemperature(0)
,iTachometer(0)
,iGPUUsage(0)
,iPerfstate(0)
{
}
};
struct MemInfo
{
float fFreeMemory;
float fTotalMemory;
float fMemUsage;
MemInfo()
:fFreeMemory(0)
,fTotalMemory(0)
,fMemUsage(0.0f)
{
}
};
class GPUMonitorEx
{
public:
GPUMonitorEx(void);
~GPUMonitorEx(void);
bool GPUInit();
void getGPUInfo();
private:
int getClockFreq(NvPhysicalGpuHandle gpuHandle); //GPU Frequency MHz
GPUState getDeviceState(NvPhysicalGpuHandle gpuHandle,int iDeviceID);
MemInfo getDeviceMemory(NvPhysicalGpuHandle gpuHandle);
void getDeviceProfile();
void setDeviceProfileSetting(NvDRSSessionHandle hSession, NvDRSProfileHandle hProfile);
private:
int m_iDeviceID;
NvPhysicalGpuHandle m_gpuHandle;
std::string m_slogDir;
};
2.CPP文件GPUMonitorEx.cpp
#include "GPUMonitorEx.h"
GPUMonitorEx::GPUMonitorEx(void)
:m_iDeviceID(0)
,m_gpuHandle(NULL)
{
m_slogDir = "D:\\UIH\\log\\GPUInfo\\";
if (-1 == _access(m_slogDir.c_str(), 0))
{
_mkdir(m_slogDir.c_str());
}
}
GPUMonitorEx::~GPUMonitorEx(void)
{
}