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

标签 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 的内容?

最佳答案

部分答案:

至少对于较新的版本,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 - 如何将 __CUDACC_VER__ 值转换为 MAJOR、MINOR、BUILD 三元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50648671/

相关文章:

performance - CUDA 中的分歧 - 从内核中的线程退出

CUDA 构建共享库

cuda - 我们如何使用 cuPrintf()?

cuda nvcc使__device__有条件

cuda - 限制 CUDA 中的寄存器使用 : __launch_bounds__ vs maxrregcount

cuda - 我可以相信 NVCC 可以优化返回类型中的 std::pair 吗?

c - 如何使用 Nsight Eclipse 在 Jetson TK1 上远程运行程序

c++ - 如何在GPU内核中使用Eigen稀疏矩阵

c - magmablas_dgemm 不适用于更大的网格尺寸

performance - cuda内在函数sqrtf和powf性能问题