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)
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)
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} )
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
#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));