如何将 __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))
相反。
当较新的 (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))
相反。