您的位置:

介绍NVIDIA Management Library(NVML)

一、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还为性能监视、显存管理和电源管理提供了重要的功能。