通过CUDA的NVML库获取显卡的使用率-针对NVIDIA显卡

在使用CUDA的NVML库之前,需要安装CUDA SDK.
需要确定文件夹“C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include”下包含nvml.h文件,并将该地址包含在工程中。
需要确定文件夹“C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include下”包含nvml.lib文件,并将该地址包含在工程中。
将文件夹“C:\Program Files\NVIDIA Corporation\NVSMI”下的nvml.dll拷贝到工程目录下。

在VS2010上编写的代码如下:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "cuda_runtime.h"
#include 
#include "nvml.h"

int main(int argc, char* argv[])
{
    nvmlReturn_t result0;
    unsigned int device_count;
    result0 = nvmlInit();

    result0 = nvmlDeviceGetCount(&device_count);
    if (NVML_SUCCESS != result0)
    {
        std::cout << "Failed to query device count: " << nvmlErrorString(result0);
        return -1;
    }
    std::cout << "Found" << device_count <<" device" << std::endl;
    std::stringstream availGPUTxt;

    for (int i=0; iKB->MB->GB
        availGPUTxt << "全部可用显存:" << (float)(memory.total)/1024.0f/1024.0f/1024.0f << "GB" << std::endl;
        availGPUTxt << "剩余可用显存:" << (float)(memory.free)/1024.0f/1024.0f/1024.0f << "GB" << std::endl;
        availGPUTxt << "-----------------------------------------------------------" << std::endl;
    }
    
    std::string fileFitBetaName = "E:\\test\\availGPUTest.txt";
    std::ofstream fileFitBetaInfo(fileFitBetaName, std::ios::out|std::ios::binary|std::ios::ate);
    fileFitBetaInfo.write((char*)availGPUTxt.str().c_str(), (int)availGPUTxt.str().length());
    fileFitBetaInfo.close();

    return 0;
}

在本地输出的结果为:
通过CUDA的NVML库获取显卡的使用率-针对NVIDIA显卡_第1张图片
在以上代码中,使用NVML的nvmlDeviceGetUtilizationRates函数获得显卡的使用率,单位是百分比。此外,还可用使用GPU-Z查看显卡的使用。其他NVML的显卡信息查看函数可用查看NVML查看显卡信息或者直接查看官方文档。
上面的程序使用nvmlDeviceGetMemoryInfo函数获得显卡的全部可用内存和剩余可用内存。获得显卡的可用内存也可用使用CUDA Runtime API的cudaMemGetInfo函数。代码如下:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "cuda_runtime.h"
#include 

int main(int argc, char* argv[])
{

    int id = -1;
    cudaGetDevice(&id);
    printf("cuda id=%d\n", id);

    unsigned int flags;
    cudaGetDeviceFlags(&flags);
    
    int count;
    if(cudaGetDeviceCount(&count)|| count < 1)
    {
        printf("cudaSetDevice failed! Do you have a CUDA-capable GPU installed?");
        return -3;
    }
    
    std::stringstream availGPUTxt;
    for (int i=0; iKB->MB->GB
        availGPUTxt <<"GPU 全部可用显存:"<< (float)(total)/1024.0f/1024.0f/1024.0f << "GB" << std::endl;
        availGPUTxt <<"GPU 剩余可用显存:"<< (float)(available)/1024.0f/1024.0f/1024.0f << "GB" << std::endl;
        availGPUTxt << "-----------------------------------------------------------" << std::endl;
    }

    std::string fileFitBetaName = "E:\\test\\availGPUTest.txt";
    std::ofstream fileFitBetaInfo(fileFitBetaName, std::ios::out|std::ios::binary|std::ios::ate);
    fileFitBetaInfo.write((char*)availGPUTxt.str().c_str(), (int)availGPUTxt.str().length());
    fileFitBetaInfo.close();

    return 0;
}

在本地的输出结果为:
通过CUDA的NVML库获取显卡的使用率-针对NVIDIA显卡_第2张图片

你可能感兴趣的:(GPU-Z,cuda,gpu,c++,nvidia)