我在.cpp文件中有一些对cuSPARSE库的调用,这些调用在较旧的工具包中不可用。为了支持使用较旧工具箱的系统,我想使用编译器指令来编译代码的不同部分。特别是,我想使用旧工具箱的CSR格式矩阵和新工具箱的BSR格式矩阵来解决稀疏三角系统。
问题是,我没有在本节中用nvcc编译任何实际的CUDA代码,只是进行了库调用,因此获取版本信息的nvcc宏不可用。
cuda.h中有一个#define __CUDA_API_VERSION,但无论我是否包含cuda.h,在编译我的.cpp时它都为0。
在这种情况下,如何在编译时获取有关工具包版本的信息?我正在CentOS 7中工作,并使用g ++编译.cpp。
一种可能的方法:
在您的.cpp文件中包含cuda_runtime_api.h(例如,如果您正在使用其中的任何CUDA运行时API函数,则可能已经在执行此操作了cudaMalloc
)
使用该CUDART_VERSION
头文件中包含的定义:
#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
或类似。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句