一、NVML是什么
NVIDIA Management Library,简称NVML,是一个C-based的API库,可以用于检测和管理NVIDIA GPU的健康状况,包括设备查询、性能监视、显存管理和电源管理等。它与NVIDIA驱动程序一起安装在CUDA Toolkit中,因此,您无需额外安装或配置NVML即可使用它。
以下是一个使用NVML查询GPU设备属性的示例:
#include <nvml.h>
#include <stdio.h>
int main(){
unsigned int count;
nvmlDevice_t device;
nvmlPciInfo_t pci;
//初始化NVML库
nvmlInit();
//查询NVIDIA GPU设备数量
nvmlDeviceGetCount(&count);
printf("%d NVIDIA devices found.\n",count);
//输出每个GPU设备的PCI总线ID
for (int i=0; i<count; i++){
nvmlDeviceGetHandleByIndex(i,&device);
nvmlDeviceGetPciInfo(device,&pci);
printf("Device %d: %04x:%02x:%02x.%d\n",i,pci.domain,pci.bus,pci.device,pci.function);
}
//卸载NVML库
nvmlShutdown();
return 0;
}
二、NVML的主要API操作
1. 设备查询操作
NVML提供了丰富的API函数,用于查询GPU设备的多个属性和状态信息。以下是一些常见的设备查询函数:
nvmlDeviceGetCount(unsigned int *device_count)
:查询系统中的NVIDIA GPU设备数量。nvmlDeviceGetHandleByIndex(unsigned int index, nvmlDevice_t *device)
:通过索引获取一个NVML设备句柄。nvmlDeviceGetName(nvmlDevice_t device, char *name, unsigned int length)
:获取给定NVIDIA GPU设备的名称信息。nvmlDeviceGetTemperature(nvmlDevice_t device, nvmlTemperatureSensors_t sensorType, unsigned int *temp)
:获取GPU设备的温度信息。
2. 性能监视操作
除了设备查询之外,NVML还可以提供底层性能监视,以帮助您优化GPU应用程序并诊断相关问题。以下是一些常见的性能监视函数:
nvmlDeviceGetUtilizationRates(nvmlDevice_t device, nvmlUtilization_t *utilization)
:获取GPU设备的当前使用率,包括计算和存储使用率。nvmlDeviceGetFanSpeed(nvmlDevice_t device, unsigned int *speed)
:获取GPU设备的风扇转速。nvmlDeviceGetMemoryInfo(nvmlDevice_t device, nvmlMemory_t *memory)
:获取GPU设备的显存使用和可用情况。nvmlDeviceGetClockInfo(nvmlDevice_t device, nvmlClockType_t type, unsigned int *clock)
:获取GPU设备的时钟信息,包括核心和存储器时钟。
3. 显存管理操作
作为显存管理的一部分,NVML支持显存使用的查询和管理。以下是一些常见的显存管理函数:
nvmlDeviceGetMemoryInfo(nvmlDevice_t device, nvmlMemory_t *memory)
:获取GPU设备的显存使用和可用情况。nvmlDeviceSetApplicationsClocks(nvmlDevice_t device, unsigned int memClockMHz, unsigned int graphicsClockMHz)
:为GPU设备设置应用程序的时钟。
4. 电源管理操作
NVML提供了一些操作来管理电源使用和功率。以下是一些常见的电源管理函数:
nvmlDeviceGetPowerUsage(nvmlDevice_t device, unsigned int *power)
:获取GPU设备的实时功率使用情况。nvmlDeviceGetPowerManagementMode(nvmlDevice_t device, nvmlEnableState_t *mode)
:获取对于给定的GPU设备,功率管理模式开关的状态。nvmlDeviceSetPowerManagementMode(nvmlDevice_t device, nvmlEnableState_t mode)
:将对于给定的GPU设备,功率管理模式开关的状态设置为启用或禁用。
三、总结
通过NVML,您可以轻松获取GPU设备的各种性能信息。它提供了一个强大而易于使用的API,可帮助管理和最大限度地利用您的GPU硬件。此外,NVML还为性能监视、显存管理和电源管理提供了重要的功能。