簡體   English   中英

如何將編譯器標志從 clang 傳遞給 nvcc

[英]How to pass compiler flags to nvcc from clang

我正在嘗試使用 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 標志。

如果您僅在主機端使用特定於 clang 的功能,而實際上在設備端不需要它 - 您可能正在尋找這個:

https://devblogs.nvidia.com/separate-compilation-linking-cuda-device-code/

正如@Increasingly-Idiotic 指出的那樣-我相信 clang 不會在內部“調用” nvcc,因此我認為您不能將 arguments 傳遞給它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM