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

How do I convert a __CUDACC_VER__ value into a MAJOR, MINOR, BUILD triplet?

当较新的 (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 的东西?

部分答案:

至少对于较新的版本,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))

相反。