Как использовать cmake для компиляции файла C ++ и файла CUDA - PullRequest
0 голосов
/ 13 ноября 2018

Я знаю, как использовать cmake для компиляции файла C ++ с функцией cuda, такой как cublas.Однако в моем проекте есть функция ядра, которую я пишу сам.Я вижу, что компилятор g ++ не знает, как обращаться с ядром <<<, >>>.Не могли бы вы помочь мне решить эту проблему?Ниже приведены списки CMakeList, которые я использовал для компиляции файлов C ++ с помощью cublas.

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS_DEBUG "-g")
cmake_minimum_required(VERSION 3.0)

project(GPU_LMM)
find_package(GSL REQUIRED)
find_package(BLAS REQUIRED)
find_package(CUDA)
if (CUDA_FOUND)
    message("CUDA found")
else()
    message("CUDA not found, doing something alternatively")
endif()

include_directories(test_cuda PRIVARE
                ${GSL_INCLUDE_DIRS}
                ${BLAS_INCLUDE_DIRS}
                ${CUDA_INCLUDE_DIRS}
                ${CUDA_CUBLAS_DIRS}
                                    ${PROJECT_SOURCE_DIR})

add_executable(GPU_LMM main.cpp aux.cpp)
target_link_libraries( GPU_LMM  PRIVATE
                    ${GSL_LIBRARY}
                    ${BLAS_LIBRARIES}
                    ${CUDA_LIBRARIES}
                    ${CUDA_CUBLAS_LIBRARIES})

У меня есть три файла для компиляции, как показано ниже.

main.cpp aux.cpp aux.hpp

Файл aux.cpp содержит функцию ядра cuda.Спасибо всем!

1 Ответ

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

Если у вас есть ядра cuda, которые должны быть скомпилированы с nvcc, их расширение должно быть .cu, а не .cpp (поэтому должно быть aux.cu). Тогда cmake будет использовать правильный компилятор для правильного файла.

Начиная с cmake 3.10.0, поддержка CUDA даже встроена, вам просто нужно активировать язык.

...