我在.cpp文件中调用cuSPARSE库,这些调用在旧工具包中不可用.为了支持使用旧工具包的系统,我想使用编译器指令编译不同的代码段.特别是,我想使用CSR格式的矩阵解决旧工具包的稀疏三角形系统和新工具包的BSR格式.
问题是,我没有在本节中使用nvcc编译任何实际的CUDA代码,只是进行库调用,因此获取版本信息的nvcc宏不可用.
cuda.h中有__CUDA_API_VERSION的#define,但在编译我的.cpp时它是0,无论我是否包含cuda.h.
在这种情况下,如何在编译时获取有关工具包版本的信息?我在CentOS 7工作,用g ++编译我的.cpp.
一种可能的方法:
在.cpp文件中包含cuda_runtime_api.h(例如,如果你在那里使用任何CUDA运行时API函数,你可能已经这样做了cudaMalloc
)
使用该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)
或类似的.