Как передать флаги компилятора в nvcc из clang - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь скомпилировать CUDA с помощью clang , но код, который я пытаюсь скомпилировать, зависит от определенного флага nvcc (-default-stream per-thread). Как я могу сказать clang передать флаг nvcc?

Например, я могу скомпилировать с nvcc, и Everythign отлично работает:

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?

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Похоже, что это невозможно.

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

При компиляции в CUDA из clang 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, я не уверен, что вы можете автоматически передавать флаг nvcc из clang.

0 голосов
/ 11 октября 2019

Если вы используете функции, специфичные для clang, только на стороне хоста и вам на самом деле не нужна эта функция на стороне устройства - вы, вероятно, ищете это:

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

Как отмечает @ всё более идиотски - я считаю, что clang не «вызывает» nvcc внутри, поэтому я не думаю, что вы можете передать ему аргументы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...