Как передать флаг компилятору nvcc в CMAKE - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть проект 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 компилятору?

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

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

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

set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --ptxas-options=-v")
0 голосов
/ 15 ноября 2018

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

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

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

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

0 голосов
/ 12 ноября 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

...