如何在没有nvcc的情况下在编译时获取CUDA工具包版本?

use*_*820 2 c++ cuda

我在.cpp文件中调用cuSPARSE库,这些调用在旧工具包中不可用.为了支持使用旧工具包的系统,我想使用编译器指令编译不同的代码段.特别是,我想使用CSR格式的矩阵解决旧工具包的稀疏三角形系统和新工具包的BSR格式.

问题是,我没有在本节中使用nvcc编译任何实际的CUDA代码,只是进行库调用,因此获取版本信息的nvcc宏不可用.

cuda.h中有__CUDA_API_VERSION的#define,但在编译我的.cpp时它是0,无论我是否包含cuda.h.

在这种情况下,如何在编译时获取有关工具包版本的信息?我在CentOS 7工作,用g ++编译我的.cpp.

Rob*_*lla 6

一种可能的方法:

  1. 在.cpp文件中包含cuda_runtime_api.h(例如,如果你在那里使用任何CUDA运行时API函数,你可能已经这样做了cudaMalloc)

  2. 使用该CUDART_VERSION头文件中包含的define:

    #include <cuda_runtime_api.h>
    ...
    #ifndef CUDART_VERSION
    #error CUDART_VERSION Undefined!
    #elif (CUDART_VERSION == 8000)
    // your code for the CUDA 8.0 case
    #elif (CUDART_VERSION == 7050)
    // your code for the CUDA 7.5 case
    #elif ...
    //etc.
    #else
    #error Unknown CUDART_VERSION!
    #endif
    
    Run Code Online (Sandbox Code Playgroud)

    或类似的.

  • 请注意,对于 CUDA 10.0,它是 10000,对于 CUDA 10.1,它是 10010,等等。 (3认同)