如何将__CUDACC_VER__值转换为MAJOR,MINOR,BUILD三​​元组?

时间:2018-06-01 17:49:06

标签: cuda nvcc

当一个较新的(CUDA 9)版本的nvcc遇到__CUDACC_VER__时,它会放弃并告诉你类似的东西:

/usr/local/cuda/include/crt/common_functions.h:64:24: error: token ""__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."" is not valid in preprocessor expressions
 #define __CUDACC_VER__ "__CUDACC_VER__ is no longer supported.  Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."

那么,如何将__CUDACC_VER__的使用转换为适用于旧版和新版NVCC的内容?

1 个答案:

答案 0 :(得分:3)

部分答案:

至少对于较新的版本,NVCC documentation告诉我们(第3页)公式是什么:

__CUDACC_VER__ = 
     __CUDACC_VER_MAJOR__ * 10000 +
     __CUDACC_VER_MINOR__ * 100 +
     __CUDACC_VER_BUILD__

因此,例如,从CUDA 7.5或更高版本检查nvcc意味着检查

(__CUDACC_VER__ > 70500)

并使用替代三元组

(__CUDACC_VER_MAJOR__ > 7) or ((__CUDACC_VER_MAJOR__ == 7) and (__CUDACC_VER_MINOR__ >= 5))