如何判断cuda代码是否使用可重定位设备代码进行编译?

时间:2016-06-30 13:30:07

标签: cuda c-preprocessor nvcc cufft

为了使用CUFFT callbacks,其中一个限制是必须使用可重定位的relocatable device code编译代码。

如果不满足这个条件,就会发生不好的事情;沉默的失败,错误的答案等。

我的当前构建工作正在运行,但我希望在未来的项目中使这段代码更加强大,防止错误编译。

有没有办法在编译单元中检测到这个?例如预处理器标志

1 个答案:

答案 0 :(得分:1)

用于检测何时指定-rdc=true的宏是:

__CUDACC_RDC__

发布here

作为一个简单的测试案例,你可以这样做:

$ cat t1.cu
#ifndef __CUDACC_RDC__
#error THIS CODE REQUIRES CUDA RELOCATABLE DEVICE CODE COMPILATION
#endif

int main(){}
$ nvcc -c t1.cu
t1.cu:2:2: error: #error THIS CODE REQUIRES CUDA RELOCATABLE DEVICE CODE COMPILATION
 #error THIS CODE REQUIRES CUDA RELOCATABLE DEVICE CODE COMPILATION
  ^
$ nvcc -rdc=true -c t1.cu
$