代码之家  ›  专栏  ›  技术社区  ›  Mark Borgerding

如何判断cuda代码是否与可重定位设备代码一起编译?

  •  2
  • Mark Borgerding  · 技术社区  · 8 年前

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

    如果不满足这个条件,就会发生坏事;无声的失败、错误的答案等。

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

    有没有办法在编译单元内检测到这一点?e、 g.预处理器标志

    1 回复  |  直到 8 年前
        1
  •  1
  •   Robert Crovella    8 年前

    -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
    $