c++ - 如何将编译器标志从 clang 传递给 nvcc
问题描述
我正在尝试使用 clang 编译 CUDA,但我尝试编译的代码取决于特定的 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 标志。
推荐阅读
- julia - Savefig 关闭会话
- palantir-foundry - 如何摄取具有多个选项卡的 Excel 电子表格?
- python - 在python中解析csv字符串
- cypress - 在柏树中,您如何模拟按空格键进行键盘导航以打开选择?
- python - 从较大的坐标群中选择较小的“均匀”分布坐标样本
- authentication - 清除缓存后 Visual Studio 不允许登录
- azure - 使用 terraform 在预建资源组中部署 azure 资源
- c++ - 如何获得通过终端编译的 C++ 代码以使用 Qt IDE 进行编译?
- python - 用户在 Firebase 中更改值时如何更新值
- node.js - 在附近解析时,位置 XXX 处 JSON 中出现意外标记的错误