Как включить раздельную компиляцию CUDA с ROS? - PullRequest
1 голос
/ 09 марта 2019

По умолчанию CUDA требует, чтобы все коды устройств были скомпилированы в одном модуле преобразования / компиляции, если вы не разрешите раздельную компиляцию / связывание кода устройства.

Но как я могу включить его в CMakeList.TXT для ROS (или в более общем случае Camke)?

Ниже мой текущий файл CMakeList:

cmake_minimum_required(VERSION 2.8.3)
project(edt)
set(ROS_BUILD_TYPE Debug)
set(CMAKE_BUILD_TYPE Debug)

# Compile as C++11, supported in ROS Kinetic and newer
add_compile_options(-std=c++11)
find_package(catkin REQUIRED COMPONENTS
    roscpp
    rospy
    std_msgs
    )

FIND_PACKAGE(CUDA REQUIRED)
SET(CUDA_NVCC_FLAGS "-arch=sm_61;-g;-G" CACHE STRING "nvcc flags" FORCE)
SET (CUDA_VERBOSE_BUILD ON CACHE BOOL "nvcc verbose" FORCE)


catkin_package(
    INCLUDE_DIRS include
    CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
    )

include_directories(
    include
    ${catkin_INCLUDE_DIRS}
    ${ZED_INCLUDE_DIRS}
    )

cuda_add_executable(
    ${PROJECT_NAME}_node
    src/main.cpp
    src/test.cu
    src/test2.cu
    )

add_dependencies(
    ${PROJECT_NAME}_node
    ${${PROJECT_NAME}_EXPORTED_TARGETS}
    ${catkin_EXPORTED_TARGETS}
    )

## Specify libraries to link a library or executable target against
target_link_libraries(
    ${PROJECT_NAME}_node
    ${catkin_LIBRARIES}
    ${ZED_LIBRARIES}
    )

test2.cu определяет функцию, которая вызывается в test.cu (см. cuda_add_executable в CMakeList), и в настоящее время он выдает ошибку, указав, что файл .o не может быть создан.

1 Ответ

1 голос
/ 12 марта 2019

Это работает для вас?

set_property(TARGET ${TARGET_NAME}PROPERTY CUDA_SEPARABLE_COMPILATION ON)

Это обычный способ, в моем понимании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...