Раздельная компиляция и связывание кода устройства CUDA C ++ с помощью cmake - PullRequest
0 голосов
/ 03 мая 2018

Я хочу добавить код cuda в существующую базу кода C ++, которая использует системы сборки cmake. Я нашел статью (ссылка ниже) от NVIDIA, которая точно показывает, как это можно сделать, за исключением использования make build. Я новичок в системе сборки cmake, но я очень старался, читая и экспериментируя с другими ссылками на этом сайте. Пока что безуспешно! У кого-нибудь есть идеи по этому поводу? Если да, то, пожалуйста, ведите меня.

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

Вот мой файл CMakeLists.txt

cmake_minimum_required(VERSION 3.5.1)
message(STATUS "CMake version: ${CMAKE_VERSION}")

project(CUDAwithC)
find_package(CUDA 9.1 REQUIRED)
INCLUDE(FindCUDA)
INCLUDE_DIRECTORIES(/usr/local/cuda-9.1/include include)
set(SOURCE_FILES src/app.cpp src/particle.cpp src/v3.cpp)
cuda_add_executable(
    tee ${SOURCE_FILES}
)
set(
    CUDA_NVCC_FLAGS
    ${CUDA_NVCC_FLAGS};
    -x cu -gencode -arch=compute_20 -dc
)

target_link_libraries(
    tee /usr/local/cuda/lib64/libcudart.so
)

1 Ответ

0 голосов
/ 03 мая 2018

Это поможет увидеть сообщения об ошибках.

Вместо того, чтобы просто указывать путь к библиотеке, используйте $ {CUDA_LIBRARIES}.

Дамп раздела флагов и использование аргумента OPTIONS для cuda_add_executable для передачи флага -arch.

Не используйте include_directories (лучшие практики), вместо этого используйте target_include_directories и передайте его $ {CUDA_INCLUDE_DIRS}. Вы не должны делать это вообще, поскольку cuda_add_executable делает это для вас (по сообщениям).

Полезно включить compile_commands.json, чтобы увидеть, что пытается сделать система сборки.

set( CMAKE_EXPORT_COMPILE_COMMANDS ON )

Также стоит прочитать через FindCUDA.cmake, чтобы увидеть, что он предлагает.

/usr/share/cmake-3.10/Modules/FindCUDA.cmake
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...