Commit 97c9bd44344e57c5c5c343d0104859828f0f440b

Authored by DepthDeluxe
1 parent d4022e85

modified build environment to build CUDA programs

CMakeLists.txt
... ... @@ -108,6 +108,7 @@ endif()
108 108 if(UNIX)
109 109 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wno-strict-overflow -Wno-comment -Wno-unknown-pragmas -fvisibility=hidden -fno-omit-frame-pointer")
110 110 set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib ${_qt5Core_install_prefix}/lib)
  111 + set(CUDA_NVCC_FLAGS "") # put NVCC compiler flags here
111 112 if(NOT APPLE)
112 113 if(${CMAKE_CXX_COMPILER} STREQUAL "/opt/intel/bin/icpc")
113 114 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-intel -wd2196")
... ...
openbr/CMakeLists.txt
... ... @@ -8,6 +8,7 @@ set(SRC openbr.cpp
8 8 universal_template.cpp)
9 9 aux_source_directory(core BR_CORE)
10 10 include(plugins/plugins.cmake)
  11 +include(cuda-plugins/cuda-plugins.cmake)
11 12  
12 13 # Janus API
13 14 option(BR_WITH_JANUS "Build IARPA Janus related applications." ON)
... ... @@ -28,6 +29,7 @@ if(NOT BR_EMBEDDED)
28 29 install(FILES ${HEADERS} DESTINATION include/openbr/gui)
29 30 endif()
30 31  
  32 +# normal BR library declaration
31 33 add_library(openbr SHARED ${SRC} ${BR_CORE} ${BR_JANUS} ${BR_GUI} ${BR_ICONS} ${BR_THIRDPARTY_SRC} ${BR_RESOURCES} ${NATURALSTRINGCOMPARE_SRC})
32 34 qt5_use_modules(openbr ${QT_DEPENDENCIES})
33 35 set_target_properties(openbr PROPERTIES
... ... @@ -37,6 +39,15 @@ set_target_properties(openbr PROPERTIES
37 39 target_link_libraries(openbr ${BR_THIRDPARTY_LIBS})
38 40 add_cppcheck(openbr)
39 41  
  42 +# CUDA portion of BR
  43 +
  44 +cuda_add_library(openbr-cuda SHARED ${BR_THIRDPARTY_CUDA_SRC})
  45 +qt5_use_modules(openbr-cuda ${QT_DEPENDENCIES})
  46 +set_target_properties(openbr-cuda PROPERTIES
  47 + DEFINE_SYMBOL BR_CUDA_LIBRARY
  48 + VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}
  49 + SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR})
  50 +
40 51 # Janus implementation
41 52 if(BR_WITH_JANUS)
42 53 set(JANUS_BUILD_PP5_WRAPPER ${BR_WITH_PP5} CACHE BOOL "Build Janus implementation using PittPatt 5")
... ...
openbr/plugins/cuda/copyfrom.cpp renamed to openbr/cuda-plugins/cglg/copyfrom.cpp
openbr/plugins/cuda/copyto.cpp renamed to openbr/cuda-plugins/cglg/copyto.cpp
openbr/cuda-plugins/cglg/customthreshold.cu 0 → 100644
  1 +/*
  2 +#include <iostream>
  3 +
  4 +// external opencv CUDA interface
  5 +#include <opencv2/opencv.hpp>
  6 +#include <opencv2/gpu/gpu.hpp>
  7 +
  8 +// internal CUDA stuff
  9 +#include <opencv2/core/cuda/common.hpp>
  10 +#include <opencv2/core/cuda/emulation.hpp>
  11 +#include <opencv2/core/cuda/transform.hpp>
  12 +#include <opencv2/core/cuda/functional.hpp>
  13 +#include <opencv2/core/cuda/utility.hpp>
  14 +
  15 +#include <openbr/plugins/openbr_internal.h>
  16 +
  17 +using namespace std;
  18 +
  19 +using namespace cv;
  20 +using namespace cv::gpu;
  21 +using namespace cv::cuda;
  22 +using namespace cv::cuda::device;
  23 +
  24 +namespace br
  25 +{
  26 + class CUDACustomThresholdTransform : public UntrainableTransform
  27 + {
  28 + Q_OBJECT
  29 +
  30 +private:
  31 + void project(const Template &src, Template &dst) const
  32 + {
  33 + // get the mat to send to the GPU
  34 + GpuMat gpuMat_src, gpuMat_dst;
  35 +
  36 + try
  37 + {
  38 + // copy the contents to the GPU
  39 + gpuMat_src.upload(src.m());
  40 +
  41 + threshold(gpuMat_src, gpuMat_dst, 128.0, 255.0, CV_THRESH_BINARY);
  42 +
  43 + gpuMat_dst.download(dst.m());
  44 + }
  45 + catch(const cv::Exception& ex)
  46 + {
  47 + cout << "Error: " << ex.what() << endl;
  48 + }
  49 + }
  50 + };
  51 +
  52 + BR_REGISTER(Transform, CUDACustomThresholdTransform);
  53 +
  54 + namespace cuda { namespace customthreshold {
  55 + texture<uchar, cudaTextureType2D, cudaReadModeElementType> tex_src(false, cudaFilterModePoint, cudaAddressModeClamp);
  56 + struct SrcTex {
  57 + __host__ SrcTex(int _xoff, int _yoff) : xoff(_xoff), yoff(_yoff) {}
  58 + __device__ __forceinline__ int operator ()(int y, int x) const {
  59 + return tex2D(tex_src, x + xoff, y + yoff);
  60 + }
  61 + }
  62 + __global__ void testKernel(const SrcTex src) {
  63 + const int x = blockIdx.x * blockDim.x + threadIdx.x;
  64 + const int y = blockIdx.y * blockDim.y + threadIdx.y;
  65 +
  66 + src(x, y) = 1;sajfflksajlkfjdsalkfjsadjflkdsaf
  67 + }
  68 + }
  69 +}
  70 +
  71 +#include "cglg/customthreshold.moc"
  72 +*/
... ...
openbr/plugins/cuda/passthrough.cpp renamed to openbr/cuda-plugins/cglg/passthrough.cpp
openbr/plugins/cuda/threshold.cpp renamed to openbr/cuda-plugins/cglg/threshold.cpp
openbr/cuda-plugins/cuda-plugins.cmake 0 → 100644
  1 +# Optional Appendable CMake Variables:
  2 +# BR_THIRDPARTY_CUDA_PLUGINS - Additional plugins
  3 +# BR_THIRDPARTY_CUDA_PLUGINS_DIR - Additional folder(s) of plugins
  4 +# BR_EXCLUDED_CUDA_PLUGINS - Plugins that should not be built
  5 +# BR_THIRDPARTY_SRC - Additional source code needed by a plugin
  6 +# BR_THIRDPARTY_LIBS - Additional libaries needed by a plugin
  7 +
  8 +# Also look for CMake modules in the thirdparty plugins folder(s)
  9 +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${BR_THIRDPARTY_CUDA_PLUGINS_DIR})
  10 +
  11 +# Gather all of the plugin subdirectories
  12 +file(GLOB SUBFILES cuda-plugins/*)
  13 +foreach(FILE ${SUBFILES})
  14 + if(IS_DIRECTORY ${FILE})
  15 + set(BR_CUDA_PLUGINS_DIR ${BR_CUDA_PLUGINS_DIR} ${FILE})
  16 + endif()
  17 +endforeach()
  18 +set(BR_CUDA_PLUGINS_DIR ${BR_CUDA_PLUGINS_DIR} cuda-plugins/) # Remove this when finished with reorg
  19 +
  20 +# Exclude pertinent plugins based on .cmake files
  21 +mark_as_advanced(BR_EXCLUDED_CUDA_PLUGINS)
  22 +foreach(DIR cuda-plugins/cmake ${BR_THIRDPARTY_CUDA_PLUGINS_DIR})
  23 + file(GLOB CMAKE_FILES ${DIR}/*.cmake)
  24 + foreach(CMAKE_FILE ${CMAKE_FILES})
  25 + if (NOT ${CMAKE_FILE} MATCHES "Find.*cmake")
  26 + include(${CMAKE_FILE})
  27 + endif()
  28 + endforeach()
  29 +endforeach()
  30 +
  31 +# Collect all source files except for excluded plugins
  32 +foreach(DIR ${BR_CUDA_PLUGINS_DIR} ${BR_THIRDPARTY_CUDA_PLUGINS_DIR})
  33 + get_filename_component(DIR_NAME ${DIR} NAME)
  34 + file(GLOB CUDA_PLUGINS ${DIR}/*.cu ${DIR}/*.cpp ${DIR}/*.h)
  35 + foreach(CUDA_PLUGIN ${CUDA_PLUGINS})
  36 + get_filename_component(CUDA_PLUGIN_NAME ${CUDA_PLUGIN} NAME)
  37 + set(EXCLUDE FALSE)
  38 + foreach(EXCLUDED_CUDA_PLUGIN ${BR_EXCLUDED_CUDA_PLUGINS})
  39 + get_filename_component(EXCLUDED_CUDA_PLUGIN_NAME ${EXCLUDED_CUDA_PLUGIN} NAME)
  40 + if (${CUDA_PLUGIN_NAME} STREQUAL ${EXCLUDED_CUDA_PLUGIN_NAME})
  41 + set(EXCLUDE TRUE)
  42 + endif()
  43 + endforeach()
  44 + if(NOT ${EXCLUDE})
  45 + set(BR_THIRDPARTY_CUDA_PLUGINS ${BR_THIRDPARTY_CUDA_PLUGINS} ${CUDA_PLUGIN})
  46 + endif()
  47 + endforeach()
  48 +endforeach()
  49 +
  50 +set(BR_THIRDPARTY_CUDA_SRC ${BR_THIRDPARTY_CUDA_SRC} ${BR_THIRDPARTY_CUDA_PLUGINS})
... ...