From 51663f5612215cf2e0135e07e2a351f9d798a84d Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Wed, 30 Oct 2013 10:20:45 +0400 Subject: [PATCH 1/6] enable CUDA support for android --- CMakeLists.txt | 6 +++--- modules/gpu/CMakeLists.txt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ebaf45e56..2a7c730bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,9 +127,9 @@ endif() OCV_OPTION(WITH_1394 "Include IEEE1394 support" ON IF (NOT ANDROID AND NOT IOS) ) OCV_OPTION(WITH_AVFOUNDATION "Use AVFoundation for Video I/O" ON IF IOS) OCV_OPTION(WITH_CARBON "Use Carbon for UI instead of Cocoa" OFF IF APPLE ) -OCV_OPTION(WITH_CUDA "Include NVidia Cuda Runtime support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) ) -OCV_OPTION(WITH_CUFFT "Include NVidia Cuda Fast Fourier Transform (FFT) library support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) ) -OCV_OPTION(WITH_CUBLAS "Include NVidia Cuda Basic Linear Algebra Subprograms (BLAS) library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) ) +OCV_OPTION(WITH_CUDA "Include NVidia Cuda Runtime support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT IOS) ) +OCV_OPTION(WITH_CUFFT "Include NVidia Cuda Fast Fourier Transform (FFT) library support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT IOS) ) +OCV_OPTION(WITH_CUBLAS "Include NVidia Cuda Basic Linear Algebra Subprograms (BLAS) library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT IOS) ) OCV_OPTION(WITH_NVCUVID "Include NVidia Video Decoding library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS AND NOT APPLE) ) OCV_OPTION(WITH_EIGEN "Include Eigen2/Eigen3 support" ON) OCV_OPTION(WITH_VFW "Include Video for Windows support" ON IF WIN32 ) diff --git a/modules/gpu/CMakeLists.txt b/modules/gpu/CMakeLists.txt index 8650b3f09..a61659789 100644 --- a/modules/gpu/CMakeLists.txt +++ b/modules/gpu/CMakeLists.txt @@ -1,4 +1,4 @@ -if(ANDROID OR IOS) +if(IOS) ocv_module_disable(gpu) endif() From 20641b4a0b7200a5b6b7f6ab9a0c87c3f582a4f9 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Wed, 30 Oct 2013 10:21:13 +0400 Subject: [PATCH 2/6] fixed CC arch/pts for android (used sm_32) --- cmake/OpenCVDetectCUDA.cmake | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/cmake/OpenCVDetectCUDA.cmake b/cmake/OpenCVDetectCUDA.cmake index 156d90e72..0b61f1480 100644 --- a/cmake/OpenCVDetectCUDA.cmake +++ b/cmake/OpenCVDetectCUDA.cmake @@ -90,12 +90,17 @@ if(CUDA_FOUND) endif() if(NOT DEFINED __cuda_arch_bin) - if(${CUDA_VERSION} VERSION_LESS "5.0") - set(__cuda_arch_bin "1.1 1.2 1.3 2.0 2.1(2.0) 3.0") + if(ANDROID) + set(__cuda_arch_bin "3.2") + set(__cuda_arch_ptx "") else() - set(__cuda_arch_bin "1.1 1.2 1.3 2.0 2.1(2.0) 3.0 3.5") + if(${CUDA_VERSION} VERSION_LESS "5.0") + set(__cuda_arch_bin "1.1 1.2 1.3 2.0 2.1(2.0) 3.0") + else() + set(__cuda_arch_bin "1.1 1.2 1.3 2.0 2.1(2.0) 3.0 3.5") + endif() + set(__cuda_arch_ptx "3.0") endif() - set(__cuda_arch_ptx "3.0") endif() set(CUDA_ARCH_BIN ${__cuda_arch_bin} CACHE STRING "Specify 'real' GPU architectures to build binaries for, BIN(PTX) format is supported") From 26cb0ce1d55bbd2cf9ed4647ac8089594b80be86 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Wed, 30 Oct 2013 10:21:30 +0400 Subject: [PATCH 3/6] fixed compilation warnings in .cu files --- cmake/OpenCVDetectCUDA.cmake | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cmake/OpenCVDetectCUDA.cmake b/cmake/OpenCVDetectCUDA.cmake index 0b61f1480..74781c0cd 100644 --- a/cmake/OpenCVDetectCUDA.cmake +++ b/cmake/OpenCVDetectCUDA.cmake @@ -174,6 +174,14 @@ if(CUDA_FOUND) # we remove -Wsign-promo as it generates warnings under linux string(REPLACE "-Wsign-promo" "" ${var} "${${var}}") + + # we remove -Wno-delete-non-virtual-dtor because it's used for C++ compiler + # but NVCC uses C compiler by default + string(REPLACE "-Wno-delete-non-virtual-dtor" "" ${var} "${${var}}") + + # we remove -frtti because it's used for C++ compiler + # but NVCC uses C compiler by default + string(REPLACE "-frtti" "" ${var} "${${var}}") endforeach() if(BUILD_SHARED_LIBS) From 81acc5e73e1b0cf5de884ea8a8482f638b9ef48c Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Wed, 30 Oct 2013 10:21:55 +0400 Subject: [PATCH 4/6] added `-Xptxas;-dlcm=ca` and `-target-os-variant=Android` to nvcc flags --- cmake/OpenCVDetectCUDA.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmake/OpenCVDetectCUDA.cmake b/cmake/OpenCVDetectCUDA.cmake index 74781c0cd..b35a7977c 100644 --- a/cmake/OpenCVDetectCUDA.cmake +++ b/cmake/OpenCVDetectCUDA.cmake @@ -152,6 +152,11 @@ if(CUDA_FOUND) set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ${NVCC_FLAGS_EXTRA}) set(OpenCV_CUDA_CC "${NVCC_FLAGS_EXTRA}") + if(ANDROID) + set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "-Xptxas;-dlcm=ca") + set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "-target-os-variant=Android") + endif() + message(STATUS "CUDA NVCC target flags: ${CUDA_NVCC_FLAGS}") OCV_OPTION(CUDA_FAST_MATH "Enable --use_fast_math for CUDA compiler " OFF) From 5ac8444c227df9016672f9fa0144398b9c5f3c5a Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Thu, 28 Nov 2013 13:35:23 +0400 Subject: [PATCH 5/6] fixed CUDA_TOOLKIT_TARGET_DIR for android: use targets/armv7-linux-androideabi is exists --- cmake/FindCUDA.cmake | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/cmake/FindCUDA.cmake b/cmake/FindCUDA.cmake index 35f6497c9..e7ece0e21 100644 --- a/cmake/FindCUDA.cmake +++ b/cmake/FindCUDA.cmake @@ -759,11 +759,15 @@ endif() set(CUDA_VERSION_STRING "${CUDA_VERSION}") # Support for arm cross compilation with CUDA 5.5 -if(CUDA_VERSION VERSION_GREATER "5.0" AND CMAKE_CROSSCOMPILING AND ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm" AND EXISTS "${CUDA_TOOLKIT_ROOT_DIR}/targets/armv7-linux-gnueabihf") - set(CUDA_TOOLKIT_TARGET_DIR "${CUDA_TOOLKIT_ROOT_DIR}/targets/armv7-linux-gnueabihf" CACHE PATH "Toolkit target location.") -else() - set(CUDA_TOOLKIT_TARGET_DIR "${CUDA_TOOLKIT_ROOT_DIR}" CACHE PATH "Toolkit target location.") +set(__cuda_toolkit_target_dir_initial "${CUDA_TOOLKIT_ROOT_DIR}") +if(CUDA_VERSION VERSION_GREATER "5.0" AND CMAKE_CROSSCOMPILING AND ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") + if(ANDROID AND EXISTS "${CUDA_TOOLKIT_ROOT_DIR}/targets/armv7-linux-androideabi") + set(__cuda_toolkit_target_dir_initial "${CUDA_TOOLKIT_ROOT_DIR}/targets/armv7-linux-androideabi") + elseif(EXISTS "${CUDA_TOOLKIT_ROOT_DIR}/targets/armv7-linux-gnueabihf") + set(__cuda_toolkit_target_dir_initial "${CUDA_TOOLKIT_ROOT_DIR}/targets/armv7-linux-gnueabihf") + endif() endif() +set(CUDA_TOOLKIT_TARGET_DIR "${__cuda_toolkit_target_dir_initial}" CACHE PATH "Toolkit target location.") mark_as_advanced(CUDA_TOOLKIT_TARGET_DIR) # Target CPU architecture From fc1d38ced8f46b82b1fc5f540fc092f22f91f183 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Fri, 29 Nov 2013 14:53:33 +0400 Subject: [PATCH 6/6] fixed compilation of gpu-basics-similarity tutorial: initialize TIMES variable with some default value (10) --- .../gpu/gpu-basics-similarity/gpu-basics-similarity.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/cpp/tutorial_code/gpu/gpu-basics-similarity/gpu-basics-similarity.cpp b/samples/cpp/tutorial_code/gpu/gpu-basics-similarity/gpu-basics-similarity.cpp index edb01f6a7..627b1383e 100644 --- a/samples/cpp/tutorial_code/gpu/gpu-basics-similarity/gpu-basics-similarity.cpp +++ b/samples/cpp/tutorial_code/gpu/gpu-basics-similarity/gpu-basics-similarity.cpp @@ -69,7 +69,7 @@ int main(int, char *argv[]) BufferPSNR bufferPSNR; BufferMSSIM bufferMSSIM; - int TIMES; + int TIMES = 10; stringstream sstr(argv[3]); sstr >> TIMES; double time, result = 0;