【发布时间】:2019-10-11 19:33:29
【问题描述】:
我正在尝试compile CUDA with clang,但我尝试编译的代码取决于特定的 nvcc 标志 (-default-stream per-thread)。如何告诉 clang 将 flag 传递给 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?
【问题讨论】:
-
这不是关于 clang 编译器标志的一般答案,但对于这个特定的 (
-default-stream per-thread),this blog 表示获得相同功能的另一种方法是“#define@ 987654329@ 包含 CUDA 标头(cuda.h 或 cuda_runtime.h)之前的预处理器宏。”使用 clang 可能值得一试。 -
谢谢,这篇博文对这种情况非常有用。无论出于何种原因,在使用 clang 编译时添加定义不起作用(但在使用 nvcc 时会起作用?)。无论哪种方式,该帖子都为我提供了足够的信息来尝试找出其他东西。非常感谢!
-
请注意,定义必须在包含 cuda_runtime_api.h 之前就位。因此,正如博客所述,该定义不适用于 nvcc,因为在处理任何文件之前,nvcc 会将包含在您的文件中。我对clang不太熟悉,所以我不确定clang在处理cuda文件时是否这样做。可能确实如此,这可以解释为什么它在那里不起作用。
-
我尝试直接在 cuda_runtime.h 顶部添加定义,这对 nvcc 有效,但对 clang 无效。
标签: c++ cuda cross-compiling clang++ ptx