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

How can I tell if cuda code is being compiled with relocatable device code?

为了使用CUFFT callbacks, one of the restrictions is that the code must be compiled with relocatable relocatable device code.

当不满足这个条件时,就会发生不好的事情;无声的失败、错误的答案等

我的当前构建工作正常,但我想让这段代码更健壮,以防止未来项目中的错误编译。

有什么方法可以在编译单元中检测到这一点吗?例如预处理器标志

用于检测何时指定 -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
$