我如何知道cuda代码是否正在用可重定位的设备代码编译



为了使用CUFFT回调,其中一个限制是代码必须用可重定位的可重定位设备代码编译。

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

我已经得到了我当前的构建工作,但我想使这段代码更健壮,防止在未来的项目中错误编译。

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

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

__CUDACC_RDC__
这里发表的

作为一个简单的测试用例,您可以这样做:
$ 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
$

最新更新