用NVAPI获取GPU信息

本文介绍了一种利用NVAPI库获取NVIDIA GPU温度及性能参数的方法。通过示例代码展示了初始化NVAPI、枚举物理GPU、获取GPU名称、温度及性能状态的过程。
AI助手已提取文章相关产品:

通过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;


您可能感兴趣的与本文相关内容

在C#中使用WMI(Windows Management Instrumentation)可以获取系统中GPU的显存信息。WMI是Windows操作系统提供的一个管理框架,允许通过查询`Win32_VideoController`类来获取与显卡相关的信息,包括显存大小。 以下是一个完整的C#代码示例,用于通过WMI获取GPU显存信息: ```csharp using System; using System.Management; class Program { static void Main() { // 查询 Win32_VideoController 类以获取显卡信息 ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController"); foreach (ManagementObject obj in searcher.Get()) { // 获取显存大小(以字节为单位) if (obj["AdapterRAM"] != null) { ulong adapterRAM = (ulong)obj["AdapterRAM"]; Console.WriteLine($"显卡显存: {adapterRAM / (1024 * 1024)} MB"); } // 获取显卡名称 if (obj["Name"] != null) { string name = obj["Name"].ToString(); Console.WriteLine($"显卡名称: {name}"); } Console.WriteLine(); // 空行分隔多个显卡信息 } } } ``` ### 代码说明: - `Win32_VideoController` 类提供了与显卡相关的属性,其中 `AdapterRAM` 表示显存大小(以字节为单位)。 - 显存大小转换为MB时,使用了 `1024 * 1024` 进行单位转换。 - `Name` 属性表示显卡的名称,便于识别具体的GPU型号。 ### 注意事项: - 需要添加对 `System.Management` 程序集的引用,以便使用 `ManagementObjectSearcher` 和 `ManagementObject` 类。 - 如果系统中存在多个GPU(例如集成显卡和独立显卡),该代码会列出所有GPU的显存信息。 ### 扩展功能: 如果需要更详细的显存信息(例如显存频率、显存带宽等),可以通过调用其他API(如 `NVAPI` 或 `ADL`)来实现,这些API通常由显卡厂商提供[^1]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值