gpt4 book ai didi

c++ - 如何将编译器标志从 clang 传递给 nvcc

转载 作者:行者123 更新时间:2023-11-28 04:08:08 25 4
gpt4 key购买 nike

我正在尝试 compile CUDA with clang ,但我尝试编译的代码取决于特定的 nvcc 标志(-default-stream per-thread)。我如何告诉 clang 将标志传递给 nvcc?

例如,我可以使用 nvcc 进行编译并且一切正常:

nvcc -default-stream per-thread *.cu -o app

但是当我从 clang 编译时,程序无法正常运行,因为我无法传递 default-steam 标志:

clang++ --cuda-gpu-arch=sm_35 -L/usr/local/cuda/lib64 *.cu -o app -lcudart_static -ldl -lrt -pthread

如何让 clang 将标志传递给 nvcc?

最佳答案

看起来可能是不可能的。

nvcc 在幕后使用一些自定义生成的标志调用 clang/gcc,然后调用 ptxas 和其他一些东西来创建二进制文件。

例如

nvcc -default-stream per-thread foo.cu
# Behind the scenes
gcc -custom-nvcc-generated-flag -DCUDA_API_PER_THREAD_DEFAULT_STREAM=1 -o foo.ptx
ptxas foo.ptx -o foo.cubin

从clang编译成CUDA时,clang直接编译成ptx,然后调用ptxas:

clang++ foo.cu -o app -lcudart_static -ldl -lrt -pthread
# Behind the scenes
clang++ -triple nvptx64-nvidia-cuda foo.cu -o foo.ptx
ptxas foo.ptx -o foo.cubin

clang 实际上从未调用过 nvcc。它只针对 ptx 并调用 ptx 汇编程序。

除非您知道 nvcc 将生成哪些自定义后端标志并在调用 clang 时手动包含它们,否则我不确定您是否可以从 clang 自动传递 nvcc 标志。

关于c++ - 如何将编译器标志从 clang 传递给 nvcc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58347466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com