]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/commitdiff
Added some basic compability for FFTW with OpenMP. (WIP)
authorShanigen <vkaraf@gmail.com>
Tue, 20 Feb 2018 07:47:56 +0000 (08:47 +0100)
committerShanigen <vkaraf@gmail.com>
Tue, 20 Feb 2018 07:47:56 +0000 (08:47 +0100)
CMakeLists.txt
src/kcf.cpp
src/kcf.h

index 5b7f91d7404312c6863b117b95ca2da2d1d11fbc..374e1f1be214bfa5415e78d4a211a43736ec903c 100644 (file)
@@ -5,11 +5,12 @@ project(kcf_tracker)
 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -pedantic -O3 -Wno-long-long -fno-omit-frame-pointer")
 
 option(OPENCV_CUFFT "If OFF CPU implementation using OpenCV implementation of fft will be used. If ON Nvidia CUFFT implemented in OpenCV will be used. Together with Hostmem from OpenCV." OFF)
-option(FFTW "Use FFTW implementation of DFT." OFF)
-option(FFTW_PARALLEL "Use FFTW implementation of DFT." OFF)
-option(ASYNC "Default setting is on. Works only if OPENCV_CUFFT is not ON. Will enable C++ async directive." OFF)
+option(FFTW "Use FFTW implementation of FFT. If selected together with OPENCV_CUFFT then this option will not be used." OFF)
+option(FFTW_PARALLEL "Use parrallel implementation of FFTW without OpenMP." OFF)
+option(FFTW_OPENMP "Use parrallel implementation of FFTW with OpenMP." OFF)
+option(ASYNC "Works only if OPENCV_CUFFT is not ON. Will enable C++ async directive." OFF)
 option(VISULIZE_RESULT "Check if you want to visulize the result." OFF)
-option(DEBUG_MODE "Additional debug output." OFF)
+option(DEBUG_MODE "Additional terminal outputs and screens. " OFF)
 
 IF(VISULIZE_RESULT)
   add_definitions(-DVISULIZE_RESULT)
@@ -30,7 +31,10 @@ ELSEIF(FFTW)
   IF(FFTW_PARALLEL)
   add_definitions(-DFFTW_PARALLEL)
   MESSAGE(STATUS "FFTW_PARALLEL")
-  ENDIF() #FFTW_PARALLEL
+  ELSEIF (FFTW_OPENMP)
+  add_definitions(-DFFTW_OPENMP)
+  MESSAGE(STATUS "FFTW_OPENMP")
+  ENDIF()#FFTW_PARALLEL
 ENDIF() #OPENCV_CUFFT
 
 IF(ASYNC AND NOT OPENCV_CUFFT AND NOT FFTW)
@@ -43,7 +47,11 @@ link_directories ( ${OpenCV_LIB_DIR} )
 MESSAGE(STATUS "OpenCV_LIB_DIR: ${OpenCV_LIB_DIR} ")
 
 IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+    IF(NOT FFTW_OPENMP)
     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
+    ELSE()
+    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
+    ENDIF() #FFTW_OPENMP
 ENDIF ()
 
 include_directories ( ${OpenCV_INCLUDE_DIRS} )
@@ -78,6 +86,8 @@ target_link_libraries(kcf_vot ${OpenCV_LIBS} kcf)
         target_link_libraries(kcf_vot fftw3f)
         IF(FFTW_PARALLEL)
             target_link_libraries(kcf_vot fftw3_threads)
-        ENDIF() #ASYNC
+        ELSEIF(FFTW_OPENMP)
+            target_link_libraries(kcf_vot fftw3_omp)
+        ENDIF() #FFTW_PARALLEL
     ENDIF() #FFTW
 ENDIF() #OPENCV_CUFFT
index 824f0c8bc7da5d3d1f2415223bdca9b5cc15c135..c0cb5542935500b8aca3eeed0d3974a5699e2097 100644 (file)
@@ -85,7 +85,10 @@ void KCF_Tracker::init(cv::Mat &img, const cv::Rect & bbox)
 #ifdef FFTW_PARALLEL
         fftw_init_threads();
         fftw_plan_with_nthreads(2);
-# endif
+# elif FFTW_OPENMP
+        fftw_init_threads();
+        fftw_plan_with_nthreads(omp_get_max_threads());
+#endif
     
     //window weights, i.e. labels
     p_yf = fft2(gaussian_shaped_labels(p_output_sigma, p_windows_size[0]/p_cell_size, p_windows_size[1]/p_cell_size));
index 35881be0cbd2a01f49e4805cb0b41a6ea91e1b58..25806d82157b895608082e564176fd502b2fbcac 100644 (file)
--- a/src/kcf.h
+++ b/src/kcf.h
 #include <fftw3.h>
 #endif
 
+#ifdef FFTW_OPENMP
+#include <omp.h>
+#endif
+
 struct BBox_c
 {
     double cx, cy, w, h;