Modern CUDA usage

This commit is contained in:
Carles Fernandez 2019-06-24 20:02:19 +02:00
parent e28062de87
commit 0e5211dbf0
No known key found for this signature in database
GPG Key ID: 4C583C52B0C3877D
8 changed files with 69 additions and 42 deletions

View File

@ -2112,13 +2112,33 @@ if(DEFINED ENV{CUDA_GPU_ACCEL})
endif() endif()
if(ENABLE_CUDA) if(ENABLE_CUDA)
find_package(CUDA REQUIRED) if(CMAKE_VERSION VERSION_GREATER 3.11)
set_package_properties(CUDA PROPERTIES include(CheckLanguage)
URL "https://developer.nvidia.com/cuda-downloads" check_language(CUDA)
DESCRIPTION "Library for parallel programming in Nvidia GPUs" if(CMAKE_CUDA_COMPILER)
PURPOSE "Used in some processing block implementations." enable_language(CUDA)
TYPE REQUIRED set(CUDA_FOUND TRUE)
) if(NOT DEFINED CMAKE_CUDA_STANDARD)
set(CMAKE_CUDA_STANDARD 11)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
endif()
else()
set(ENABLE_CUDA OFF)
endif()
else()
find_package(CUDA REQUIRED)
set_package_properties(CUDA PROPERTIES
URL "https://developer.nvidia.com/cuda-downloads"
DESCRIPTION "Library for parallel programming in Nvidia GPUs"
PURPOSE "Used in some processing block implementations."
TYPE REQUIRED
)
if(NOT CUDA_FOUND)
set(ENABLE_CUDA OFF)
endif()
endif()
endif()
if(ENABLE_CUDA)
message(STATUS "NVIDIA CUDA GPU Acceleration will be enabled.") message(STATUS "NVIDIA CUDA GPU Acceleration will be enabled.")
message(STATUS " You can disable it with 'cmake -DENABLE_CUDA=OFF ..'") message(STATUS " You can disable it with 'cmake -DENABLE_CUDA=OFF ..'")
else() else()

View File

@ -104,7 +104,6 @@ if(MATIO_INCLUDE_DIR)
endif() endif()
if(MATIO_CONFIG_FILE) if(MATIO_CONFIG_FILE)
# Read and parse MATIO config header file for version number # Read and parse MATIO config header file for version number
file(STRINGS "${MATIO_INCLUDE_DIR}/${MATIO_CONFIG_FILE}" _matio_HEADER_CONTENTS REGEX "#define MATIO_((MAJOR|MINOR)_VERSION)|(RELEASE_LEVEL) ") file(STRINGS "${MATIO_INCLUDE_DIR}/${MATIO_CONFIG_FILE}" _matio_HEADER_CONTENTS REGEX "#define MATIO_((MAJOR|MINOR)_VERSION)|(RELEASE_LEVEL) ")

View File

@ -108,7 +108,7 @@ target_include_directories(tracking_adapters
${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/interfaces
) )
if(ENABLE_CUDA) if(ENABLE_CUDA AND NOT CMAKE_VERSION VERSION_GREATER 3.11)
target_link_libraries(tracking_adapters target_link_libraries(tracking_adapters
PUBLIC PUBLIC
${CUDA_LIBRARIES} ${CUDA_LIBRARIES}

View File

@ -97,7 +97,7 @@ target_link_libraries(tracking_gr_blocks
tracking_libs tracking_libs
) )
if(ENABLE_CUDA) if(ENABLE_CUDA AND NOT CMAKE_VERSION VERSION_GREATER 3.11)
target_link_libraries(tracking_gr_blocks target_link_libraries(tracking_gr_blocks
PUBLIC PUBLIC
${CUDA_LIBRARIES} ${CUDA_LIBRARIES}

View File

@ -17,18 +17,6 @@
# #
if(ENABLE_CUDA)
# Append current NVCC flags by something, eg comput capability
# set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} --gpu-architecture sm_30)
list(APPEND CUDA_NVCC_FLAGS "-gencode arch=compute_30,code=sm_30; -std=c++11;-O3; -use_fast_math -default-stream per-thread")
set(CUDA_PROPAGATE_HOST_FLAGS OFF)
cuda_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
set(LIB_TYPE STATIC) #set the lib type
cuda_add_library(CUDA_CORRELATOR_LIB ${LIB_TYPE} cuda_multicorrelator.h cuda_multicorrelator.cu)
set(OPT_TRACKING_LIBRARIES ${OPT_TRACKING_LIBRARIES} CUDA_CORRELATOR_LIB)
set(OPT_TRACKING_INCLUDES ${OPT_TRACKING_INCLUDES} ${CUDA_INCLUDE_DIRS})
endif()
set(TRACKING_LIB_SOURCES set(TRACKING_LIB_SOURCES
cpu_multicorrelator.cc cpu_multicorrelator.cc
cpu_multicorrelator_real_codes.cc cpu_multicorrelator_real_codes.cc
@ -63,6 +51,22 @@ set(TRACKING_LIB_HEADERS
exponential_smoother.h exponential_smoother.h
) )
if(ENABLE_CUDA)
if(CMAKE_VERSION VERSION_GREATER 3.11)
set(TRACKING_LIB_SOURCES ${TRACKING_LIB_SOURCES} cuda_multicorrelator.cu)
set(TRACKING_LIB_HEADERS ${TRACKING_LIB_HEADERS} cuda_multicorrelator.h)
else()
list(APPEND CUDA_NVCC_FLAGS "-gencode arch=compute_30,code=sm_30; -std=c++11;-O3; -use_fast_math -default-stream per-thread")
set(CUDA_PROPAGATE_HOST_FLAGS OFF)
cuda_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
set(LIB_TYPE STATIC) #set the lib type
cuda_add_library(CUDA_CORRELATOR_LIB ${LIB_TYPE} cuda_multicorrelator.h cuda_multicorrelator.cu)
set(OPT_TRACKING_LIBRARIES ${OPT_TRACKING_LIBRARIES} CUDA_CORRELATOR_LIB)
set(OPT_TRACKING_INCLUDES ${OPT_TRACKING_INCLUDES} ${CUDA_INCLUDE_DIRS})
endif()
endif()
if(ARMADILLO_VERSION_STRING VERSION_GREATER 7.400) if(ARMADILLO_VERSION_STRING VERSION_GREATER 7.400)
# sqrtmat_sympd() requires 7.400 # sqrtmat_sympd() requires 7.400
set(TRACKING_LIB_SOURCES ${TRACKING_LIB_SOURCES} nonlinear_tracking.cc) set(TRACKING_LIB_SOURCES ${TRACKING_LIB_SOURCES} nonlinear_tracking.cc)
@ -95,10 +99,16 @@ target_link_libraries(tracking_libs
Glog::glog Glog::glog
) )
target_include_directories(tracking_libs if(NOT CMAKE_VERSION VERSION_GREATER 3.11)
PUBLIC target_link_libraries(tracking_libs
${OPT_TRACKING_INCLUDES} PUBLIC
) ${OPT_TRACKING_LIBRARIES}
)
target_include_directories(tracking_libs
PUBLIC
${OPT_TRACKING_INCLUDES}
)
endif()
if(Boost_VERSION VERSION_GREATER "106599") if(Boost_VERSION VERSION_GREATER "106599")
target_compile_definitions(tracking_libs target_compile_definitions(tracking_libs

View File

@ -40,12 +40,6 @@ set(GNSS_RECEIVER_HEADERS
control_message.h control_message.h
) )
if(ENABLE_CUDA)
set(OPT_RECEIVER_INCLUDE_DIRS
${OPT_RECEIVER_INCLUDE_DIRS} ${CUDA_INCLUDE_DIRS}
)
endif()
list(SORT GNSS_RECEIVER_HEADERS) list(SORT GNSS_RECEIVER_HEADERS)
list(SORT GNSS_RECEIVER_SOURCES) list(SORT GNSS_RECEIVER_SOURCES)
@ -127,6 +121,9 @@ else()
endif() endif()
if(ENABLE_CUDA) if(ENABLE_CUDA)
if(NOT CMAKE_VERSION VERSION_GREATER 3.11)
target_include_directories(core_receiver PUBLIC ${CUDA_INCLUDE_DIRS})
endif()
target_compile_definitions(core_receiver PRIVATE -DCUDA_GPU_ACCEL=1) target_compile_definitions(core_receiver PRIVATE -DCUDA_GPU_ACCEL=1)
endif() endif()
@ -213,5 +210,4 @@ endif()
set_property(TARGET core_receiver APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES set_property(TARGET core_receiver APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/core/receiver> $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/core/receiver>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/core/interfaces> $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/core/interfaces>
$<BUILD_INTERFACE:${OPT_RECEIVER_INCLUDE_DIRS}>
) )

View File

@ -45,14 +45,16 @@ if(NOT ENABLE_LOG)
endif() endif()
if(ENABLE_CUDA) if(ENABLE_CUDA)
target_link_libraries(gnss-sdr if(NOT CMAKE_VERSION VERSION_GREATER 3.11)
PUBLIC target_link_libraries(gnss-sdr
${CUDA_LIBRARIES} PUBLIC
) ${CUDA_LIBRARIES}
target_include_directories(gnss-sdr )
PUBLIC target_include_directories(gnss-sdr
${CUDA_INCLUDE_DIRS} PUBLIC
) ${CUDA_INCLUDE_DIRS}
)
endif()
target_compile_definitions(gnss-sdr PRIVATE -DCUDA_GPU_ACCEL=1) target_compile_definitions(gnss-sdr PRIVATE -DCUDA_GPU_ACCEL=1)
endif() endif()

View File

@ -443,7 +443,7 @@ if(ENABLE_UNIT_TESTING)
) )
endif() endif()
endif() endif()
if(ENABLE_CUDA) if(ENABLE_CUDA AND NOT CMAKE_VERSION VERSION_GREATER 3.11)
target_link_libraries(run_tests target_link_libraries(run_tests
PUBLIC PUBLIC
${CUDA_LIBRARIES} ${CUDA_LIBRARIES}