Ошибка nvlink при связывании кода CUDA со статической библиотекой CUDA — CMake

Я создаю статическую библиотеку, которая содержит некоторый код CUDA и обычный код C ++.
CMakeLists.txt для этой статической библиотеки выглядит так:

SET(TARGET_H some_header.h)
SET(CUDA_SRC cudaclass1.cu cudaclass2.cu)
SET(TARGET_SRC cppclass1.cpp cppclass2.cpp)
SET(CUDA_NVCC_FLAGS "")
SET(CUDA_SEPARABLE_COMPILATION ON)
CUDA_ADD_LIBRARY(somestatic ${TARGET_H} ${TARGET_SRC} ${CUDA_SRC} OPTIONS -arch sm_20)

Это произведет libsomestatic.a.

Теперь я хочу связать эту статическую библиотеку с исполняемым файлом, который сам состоит из кода CUDA и кода C ++.

В коде CUDA этого исполняемого файла мне нужно создать экземпляр CudaClass1 из libsomestatic.a и использовать его.

Это файл CMakeLists.txt для исполняемого файла:

SET(TARGET_H some_header.h)
SET(CUDA_SRC cudafile.cu)
SET(TARGET_SRC main.cpp)
SET(CUDA_NVCC_FLAGS "")
SET(CUDA_SEPARABLE_COMPILATION ON)
CUDA_ADD_EXECUTABLE(some_exe ${TARGET_H} ${TARGET_SRC} ${CUDA_SRC} OPTIONS -arch sm_20)
TARGET_LINK_LIBRARIES(some_exe somestatic)

Но я получаю следующую ошибку при сборке:

nvlink error: Undefined reference to '_ZN10test7CudaClass1C1EPKNS_11intE' in ...

У меня есть два вопроса:

  1. Можно ли вообще это сделать? Связывание кода CUDA с библиотекой, которая содержит код CUDA?
  2. Если да, то как бы я сделал это с помощью CMake?

Документация CUDA гласит (http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#examples)

«Можно сделать несколько ссылок на устройства в пределах одного исполняемого файла хоста, если каждая ссылка на устройство независима от другой (они не могут совместно использовать код между исполняемыми файлами устройства)»

Звучит так, будто я не могу делать то, что хочу, верно?

Я использую CUDA 5.5 и GCC 4.8.

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]