Как передать флаг компилятору nvcc в CMAKE

У меня есть проект C в Cmake, в который я встроил cuda модуль ядра.

Я хочу передать --ptxas-options=-v только nvcc, чтобы просмотреть количество использованных регистров на поток и использование общей памяти на блок.

В поисках того, как передать флаги в nvcc в Cmake, я нашел решение

add_compile_options(myprog
    PRIVATE
    $<$<COMPILE_LANGUAGE:C>:-Wall>
    $<$<COMPILE_LANGUAGE:CUDA>:-arch=sm_20 -ptxas-options=-v>
)

но это не показало мне вышеуказанных свойств. Я думаю, что эти флаги не передаются nvcc должным образом.

Как передать --ptxas-options=-v своему nvcc компилятору?


person Nouman Tajik    schedule 12.11.2018    source источник
comment
Я думаю, вы ищете target_compile_options, а не add_compile_options.   -  person havogt    schedule 13.11.2018
comment
target_compile_options (myprog PUBLIC $ ‹$‹ COMPILE_LANGUAGE: CUDA ›: - ptxas-options = -v›) работал. Спасибо.   -  person Nouman Tajik    schedule 13.11.2018


Ответы (3)


Правильный способ установить флаги CUDA только для цели -

target_compile_options(<my_target> PRIVATE $<$<COMPILE_LANGUAGE:CUDA>:my_cuda_option>) 

Это установит параметр через выражение генератора только для файлов, которые скомпилированы для языка CUDA.

Использование CMAKE_CUDA_FLAGS, как было предложено в другом ответе, устанавливает глобальное свойство для всех целей, что может быть или не может быть правильным подходом в зависимости от варианта использования.

person havogt    schedule 15.11.2018
comment
Этот ответ намного точнее, установка CMAKE_CUDA_FLAGS - это кладж - person Michael; 18.05.2020

Новый подход cmake cuda устанавливает некоторые другие переменные. Ознакомьтесь с документами здесь.

Нам нужно установить CMAKE_ ‹LANG› _FLAGS, что на самом деле CMAKE_CUDA_FLAGS здесь.

set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --ptxas-options=-v")
person halfelf    schedule 13.11.2018

Как насчет?...

find_package( CUDA REQUIRED )
set( CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}" "--ptxas-options=-v" )

include_directories( ${CUDA_INCLUDE_DIRS} )
cuda_add_library( kernel_lib ${sources} )    

Вы также можете проверить документацию CMake CUDA в Интернете ... https://cmake.org/cmake/help/latest/module/FindCUDA.html

person KlingonJoe    schedule 12.11.2018
comment
Убедитесь, что вы компилируете с помощью команд cuda__add ... target. - person KlingonJoe; 12.11.2018
comment
Вам также следует подумать о том, чтобы разбить файл CMakeLists.txt. У тебя там много чего. Подумайте о том, чтобы отправить кое-что в каталог / config и добавить подкаталог - здесь хорошей идеей является разделение кода C и CUDA на отдельные каталоги. - person KlingonJoe; 12.11.2018