CUDA Driver API 获取驱动版本设备信息

Posted 洪流之源

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CUDA Driver API 获取驱动版本设备信息相关的知识,希望对你有一定的参考价值。

主要包括如下功能: 

1. cuda初始化

CUresult CUDAAPI cuInit(unsigned int Flags);

这里的flags目前必须给0,对于cuda的所有函数,必须先调用cuInit,否则其他API都会返CUDA_ERROR_NOT_INITIALIZED,可参考链接:

https://docs.nvidia.com/cuda/archive/11.2.0/cuda-driver-api/group__CUDA__INITIALIZE.html

2. 获取驱动版本

CUresult CUDAAPI cuDriverGetVersion(int *driverVersion);

获取当前cuda驱动的版本

3. 获取设备信息

CUresult CUDAAPI cuDeviceGetName(char *name, int len, CUdevice dev);

获取当前设备信息

code:


// CUDA驱动头文件cuda.h
#include <cuda.h>

#include <stdio.h>
#include <string.h>

// 很明显,这种代码封装方式,更加的便于使用
//宏定义 #define <宏名>(<参数表>) <宏体>
#define checkDriver(op)  __check_cuda_driver((op), #op, __FILE__, __LINE__)

bool __check_cuda_driver(CUresult code, const char* op, const char* file, int line)


    if(code != CUresult::CUDA_SUCCESS)
        
        const char* err_name = nullptr;    
        const char* err_message = nullptr;  
        cuGetErrorName(code, &err_name);    // 获取错误代码的字符串
        cuGetErrorString(code, &err_message);  // 获取错误代码的字符串描述 
        printf("%s:%d  %s failed. \\n  code = %s, message = %s\\n", file, line, op, err_name, err_message);   
        return false;
    
    return true;


int main()


    /* 
    cuInit(int flags), 这里的flags目前必须给0;
        对于cuda的所有函数,必须先调用cuInit,否则其他API都会返回CUDA_ERROR_NOT_INITIALIZED
        https://docs.nvidia.com/cuda/archive/11.2.0/cuda-driver-api/group__CUDA__INITIALIZE.html
     */
    checkDriver(cuInit(0));

    /* 
    测试获取当前cuda驱动的版本
    显卡、CUDA、CUDA Toolkit

        1. 显卡驱动版本,比如:Driver Version: 460.84
        2. CUDA驱动版本:比如:CUDA Version: 11.2
        3. CUDA Toolkit版本:比如自行下载时选择的10.2、11.2等;这与前两个不是一回事, CUDA Toolkit的每个版本都需要最低版本的CUDA驱动程序
        
        三者版本之间有依赖关系, 可参照https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
        nvidia-smi显示的是显卡驱动版本和此驱动最高支持的CUDA驱动版本
        
     */
    int driver_version = 0;
    if(!checkDriver(cuDriverGetVersion(&driver_version))) // 获取驱动版本
    
        return -1;
    
    printf("Driver version is %d\\n", driver_version); // 若driver_version为11020指的是11.2

    // 测试获取当前设备信息
    char device_name[100];
    CUdevice device = 0;
    checkDriver(cuDeviceGetName(device_name, sizeof(device_name), device)); // 获取设备名称、型号如:Tesla V100-SXM2-32GB
    printf("Device %d name is %s\\n", device, device_name);
    return 0;

以上是关于CUDA Driver API 获取驱动版本设备信息的主要内容,如果未能解决你的问题,请参考以下文章

pytorch、显卡、显卡驱动、cuda版本是如何对应的

使用CUDA Driver API VS2012时未解析的外部符号

Cuda 中的运行时 VS 驱动程序 API

第一篇 CUDA基础

如何从命令行获取 nvidia 驱动程序版本?

在包含 CUDA 运行时 API 的主机代码中使用 CUDA 驱动程序 API