Commit 9f1218b0 authored by Jakub Golinowski's avatar Jakub Golinowski Committed by Alexander Alekhin

Merge pull request #11897 from Jakub-Golinowski:hpx_backend

* Add HPX backend for OpenCV implementation
Adds hpx backend for cv::parallel_for_() calls respecting the nstripes chunking parameter. C++ code for the backend is added to modules/core/parallel.cpp. Also, the necessary changes to cmake files are introduced.
Backend can operate in 2 versions (selectable by cmake build option WITH_HPX_STARTSTOP): hpx (runtime always on) and hpx_startstop (start and stop the backend for each cv::parallel_for_() call)

* WIP: Conditionally include hpx_main.hpp to tests in core module
Header hpx_main.hpp is included to both core/perf/perf_main.cpp and core/test/test_main.cpp.
The changes to cmake files for linking hpx library to above mentioned test executalbles are proposed but have issues.

* Add coditional iclusion of hpx_main.hpp to cpp cpu modules

* Remove start/stop version of hpx backend
parent 90f47eb9
...@@ -252,6 +252,7 @@ OCV_OPTION(WITH_WIN32UI "Build with Win32 UI Backend support" ON ...@@ -252,6 +252,7 @@ OCV_OPTION(WITH_WIN32UI "Build with Win32 UI Backend support" ON
OCV_OPTION(WITH_QUICKTIME "Use QuickTime for Video I/O" OFF IF APPLE ) OCV_OPTION(WITH_QUICKTIME "Use QuickTime for Video I/O" OFF IF APPLE )
OCV_OPTION(WITH_QTKIT "Use QTKit Video I/O backend" OFF IF APPLE ) OCV_OPTION(WITH_QTKIT "Use QTKit Video I/O backend" OFF IF APPLE )
OCV_OPTION(WITH_TBB "Include Intel TBB support" OFF IF (NOT IOS AND NOT WINRT) ) OCV_OPTION(WITH_TBB "Include Intel TBB support" OFF IF (NOT IOS AND NOT WINRT) )
OCV_OPTION(WITH_HPX "Include Ste||ar Group HPX support" OFF)
OCV_OPTION(WITH_OPENMP "Include OpenMP support" OFF) OCV_OPTION(WITH_OPENMP "Include OpenMP support" OFF)
OCV_OPTION(WITH_PTHREADS_PF "Use pthreads-based parallel_for" ON IF (NOT WIN32 OR MINGW) ) OCV_OPTION(WITH_PTHREADS_PF "Use pthreads-based parallel_for" ON IF (NOT WIN32 OR MINGW) )
OCV_OPTION(WITH_TIFF "Include TIFF support" ON IF (NOT IOS) ) OCV_OPTION(WITH_TIFF "Include TIFF support" ON IF (NOT IOS) )
...@@ -1353,6 +1354,7 @@ endif() ...@@ -1353,6 +1354,7 @@ endif()
# Order is similar to CV_PARALLEL_FRAMEWORK in core/src/parallel.cpp # Order is similar to CV_PARALLEL_FRAMEWORK in core/src/parallel.cpp
ocv_build_features_string(parallel_status EXCLUSIVE ocv_build_features_string(parallel_status EXCLUSIVE
IF HAVE_TBB THEN "TBB (ver ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR} interface ${TBB_INTERFACE_VERSION})" IF HAVE_TBB THEN "TBB (ver ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR} interface ${TBB_INTERFACE_VERSION})"
IF HAVE_HPX THEN "HPX"
IF HAVE_OPENMP THEN "OpenMP" IF HAVE_OPENMP THEN "OpenMP"
IF HAVE_GCD THEN "GCD" IF HAVE_GCD THEN "GCD"
IF WINRT OR HAVE_CONCURRENCY THEN "Concurrency" IF WINRT OR HAVE_CONCURRENCY THEN "Concurrency"
......
...@@ -7,6 +7,13 @@ if(WITH_TBB) ...@@ -7,6 +7,13 @@ if(WITH_TBB)
include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectTBB.cmake") include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectTBB.cmake")
endif(WITH_TBB) endif(WITH_TBB)
# --- HPX ---
if(WITH_HPX)
find_package(HPX REQUIRED)
ocv_include_directories(${HPX_INCLUDE_DIRS})
set(HAVE_HPX TRUE)
endif(WITH_HPX)
# --- IPP --- # --- IPP ---
if(WITH_IPP) if(WITH_IPP)
include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindIPP.cmake") include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindIPP.cmake")
......
...@@ -1135,6 +1135,11 @@ function(ocv_add_perf_tests) ...@@ -1135,6 +1135,11 @@ function(ocv_add_perf_tests)
ocv_target_link_libraries(${the_target} LINK_PRIVATE ${perf_deps} ${OPENCV_MODULE_${the_module}_DEPS} ${OPENCV_LINKER_LIBS} ${OPENCV_PERF_${the_module}_DEPS}) ocv_target_link_libraries(${the_target} LINK_PRIVATE ${perf_deps} ${OPENCV_MODULE_${the_module}_DEPS} ${OPENCV_LINKER_LIBS} ${OPENCV_PERF_${the_module}_DEPS})
add_dependencies(opencv_perf_tests ${the_target}) add_dependencies(opencv_perf_tests ${the_target})
if(HAVE_HPX)
message("Linking HPX to Perf test of module ${name}")
ocv_target_link_libraries(${the_target} LINK_PRIVATE "${HPX_LIBRARIES}")
endif()
set_target_properties(${the_target} PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};PerfTest") set_target_properties(${the_target} PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};PerfTest")
set_source_files_properties(${OPENCV_PERF_${the_module}_SOURCES} ${${the_target}_pch} set_source_files_properties(${OPENCV_PERF_${the_module}_SOURCES} ${${the_target}_pch}
PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};PerfTest") PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};PerfTest")
...@@ -1220,6 +1225,11 @@ function(ocv_add_accuracy_tests) ...@@ -1220,6 +1225,11 @@ function(ocv_add_accuracy_tests)
ocv_target_link_libraries(${the_target} LINK_PRIVATE ${test_deps} ${OPENCV_MODULE_${the_module}_DEPS} ${OPENCV_LINKER_LIBS} ${OPENCV_TEST_${the_module}_DEPS}) ocv_target_link_libraries(${the_target} LINK_PRIVATE ${test_deps} ${OPENCV_MODULE_${the_module}_DEPS} ${OPENCV_LINKER_LIBS} ${OPENCV_TEST_${the_module}_DEPS})
add_dependencies(opencv_tests ${the_target}) add_dependencies(opencv_tests ${the_target})
if(HAVE_HPX)
message("Linking HPX to Perf test of module ${name}")
ocv_target_link_libraries(${the_target} LINK_PRIVATE "${HPX_LIBRARIES}")
endif()
set_target_properties(${the_target} PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};AccuracyTest") set_target_properties(${the_target} PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};AccuracyTest")
set_source_files_properties(${OPENCV_TEST_${the_module}_SOURCES} ${${the_target}_pch} set_source_files_properties(${OPENCV_TEST_${the_module}_SOURCES} ${${the_target}_pch}
PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};AccuracyTest") PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};AccuracyTest")
......
...@@ -174,6 +174,9 @@ ...@@ -174,6 +174,9 @@
/* Intel Threading Building Blocks */ /* Intel Threading Building Blocks */
#cmakedefine HAVE_TBB #cmakedefine HAVE_TBB
/* Ste||ar Group High Performance ParallelX */
#cmakedefine HAVE_HPX
/* TIFF codec */ /* TIFF codec */
#cmakedefine HAVE_TIFF #cmakedefine HAVE_TIFF
......
#include "perf_precomp.hpp" #include "perf_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_PERF_TEST_MAIN(calib3d) CV_PERF_TEST_MAIN(calib3d)
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
// of this distribution and at http://opencv.org/license.html. // of this distribution and at http://opencv.org/license.html.
#include "test_precomp.hpp" #include "test_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN("") CV_TEST_MAIN("")
...@@ -77,6 +77,10 @@ ocv_target_link_libraries(${the_module} LINK_PRIVATE ...@@ -77,6 +77,10 @@ ocv_target_link_libraries(${the_module} LINK_PRIVATE
"${OPENCV_HAL_LINKER_LIBS}" "${OPENCV_HAL_LINKER_LIBS}"
) )
if(HAVE_HPX)
ocv_target_link_libraries(${the_module} LINK_PRIVATE "${HPX_LIBRARIES}")
endif()
if(HAVE_CUDA) if(HAVE_CUDA)
ocv_target_compile_definitions(${the_module} PUBLIC OPENCV_TRAITS_ENABLE_DEPRECATED) ocv_target_compile_definitions(${the_module} PUBLIC OPENCV_TRAITS_ENABLE_DEPRECATED)
endif() endif()
......
...@@ -5,4 +5,8 @@ ...@@ -5,4 +5,8 @@
# endif # endif
#endif #endif
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_PERF_TEST_MAIN(core) CV_PERF_TEST_MAIN(core)
...@@ -79,6 +79,7 @@ ...@@ -79,6 +79,7 @@
/* IMPORTANT: always use the same order of defines /* IMPORTANT: always use the same order of defines
- HAVE_TBB - 3rdparty library, should be explicitly enabled - HAVE_TBB - 3rdparty library, should be explicitly enabled
- HAVE_HPX - 3rdparty library, should be explicitly enabled
- HAVE_OPENMP - integrated to compiler, should be explicitly enabled - HAVE_OPENMP - integrated to compiler, should be explicitly enabled
- HAVE_GCD - system wide, used automatically (APPLE only) - HAVE_GCD - system wide, used automatically (APPLE only)
- WINRT - system wide, used automatically (Windows RT only) - WINRT - system wide, used automatically (Windows RT only)
...@@ -95,6 +96,16 @@ ...@@ -95,6 +96,16 @@
#endif #endif
#undef min #undef min
#undef max #undef max
#elif defined HAVE_HPX
#include <hpx/parallel/algorithms/for_loop.hpp>
#include <hpx/parallel/execution.hpp>
//
#include <hpx/hpx_start.hpp>
#include <hpx/hpx_suspend.hpp>
#include <hpx/include/apply.hpp>
#include <hpx/util/yield_while.hpp>
#include <hpx/include/threadmanager.hpp>
#elif defined HAVE_OPENMP #elif defined HAVE_OPENMP
#include <omp.h> #include <omp.h>
#elif defined HAVE_GCD #elif defined HAVE_GCD
...@@ -109,6 +120,8 @@ ...@@ -109,6 +120,8 @@
#if defined HAVE_TBB #if defined HAVE_TBB
# define CV_PARALLEL_FRAMEWORK "tbb" # define CV_PARALLEL_FRAMEWORK "tbb"
#elif defined HAVE_HPX
# define CV_PARALLEL_FRAMEWORK "hpx"
#elif defined HAVE_OPENMP #elif defined HAVE_OPENMP
# define CV_PARALLEL_FRAMEWORK "openmp" # define CV_PARALLEL_FRAMEWORK "openmp"
#elif defined HAVE_GCD #elif defined HAVE_GCD
...@@ -377,6 +390,26 @@ namespace ...@@ -377,6 +390,26 @@ namespace
tbb::parallel_for(tbb::blocked_range<int>(range.start, range.end), *this); tbb::parallel_for(tbb::blocked_range<int>(range.start, range.end), *this);
} }
}; };
#elif defined HAVE_HPX
class ProxyLoopBody : public ParallelLoopBodyWrapper
{
public:
ProxyLoopBody(ParallelLoopBodyWrapperContext& ctx_)
: ParallelLoopBodyWrapper(ctx_)
{}
void operator ()() const // run parallel job
{
cv::Range stripeRange = this->stripeRange();
hpx::parallel::for_loop(
hpx::parallel::execution::par,
stripeRange.start, stripeRange.end,
[&](const int &i) { ;
this->ParallelLoopBodyWrapper::operator()(
cv::Range(i, i + 1));
});
}
};
#elif defined HAVE_GCD #elif defined HAVE_GCD
typedef ParallelLoopBodyWrapper ProxyLoopBody; typedef ParallelLoopBodyWrapper ProxyLoopBody;
static void block_function(void* context, size_t index) static void block_function(void* context, size_t index)
...@@ -409,6 +442,8 @@ static int numThreads = -1; ...@@ -409,6 +442,8 @@ static int numThreads = -1;
#else #else
static tbb::task_scheduler_init tbbScheduler(tbb::task_scheduler_init::deferred); static tbb::task_scheduler_init tbbScheduler(tbb::task_scheduler_init::deferred);
#endif #endif
#elif defined HAVE_HPX
// nothing for HPX
#elif defined HAVE_OPENMP #elif defined HAVE_OPENMP
static int numThreadsMax = omp_get_max_threads(); static int numThreadsMax = omp_get_max_threads();
#elif defined HAVE_GCD #elif defined HAVE_GCD
...@@ -508,6 +543,9 @@ static void parallel_for_impl(const cv::Range& range, const cv::ParallelLoopBody ...@@ -508,6 +543,9 @@ static void parallel_for_impl(const cv::Range& range, const cv::ParallelLoopBody
pbody(); pbody();
#endif #endif
#elif defined HAVE_HPX
pbody();
#elif defined HAVE_OPENMP #elif defined HAVE_OPENMP
#pragma omp parallel for schedule(dynamic) num_threads(numThreads > 0 ? numThreads : numThreadsMax) #pragma omp parallel for schedule(dynamic) num_threads(numThreads > 0 ? numThreads : numThreadsMax)
...@@ -579,6 +617,9 @@ int cv::getNumThreads(void) ...@@ -579,6 +617,9 @@ int cv::getNumThreads(void)
: tbb::task_scheduler_init::default_num_threads(); : tbb::task_scheduler_init::default_num_threads();
#endif #endif
#elif defined HAVE_HPX
return numThreads;
#elif defined HAVE_OPENMP #elif defined HAVE_OPENMP
return numThreads > 0 return numThreads > 0
...@@ -653,6 +694,9 @@ void cv::setNumThreads( int threads_ ) ...@@ -653,6 +694,9 @@ void cv::setNumThreads( int threads_ )
if(threads > 0) tbbScheduler.initialize(threads); if(threads > 0) tbbScheduler.initialize(threads);
#endif #endif
#elif defined HAVE_HPX
return; // nothing needed as numThreads is used
#elif defined HAVE_OPENMP #elif defined HAVE_OPENMP
return; // nothing needed as num_threads clause is used in #pragma omp parallel for return; // nothing needed as num_threads clause is used in #pragma omp parallel for
...@@ -702,6 +746,8 @@ int cv::getThreadNum(void) ...@@ -702,6 +746,8 @@ int cv::getThreadNum(void)
#else #else
return 0; return 0;
#endif #endif
#elif defined HAVE_HPX
return (int)(hpx::get_num_worker_threads());
#elif defined HAVE_OPENMP #elif defined HAVE_OPENMP
return omp_get_thread_num(); return omp_get_thread_num();
#elif defined HAVE_GCD #elif defined HAVE_GCD
......
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
// of this distribution and at http://opencv.org/license.html. // of this distribution and at http://opencv.org/license.html.
#include "test_precomp.hpp" #include "test_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN("cv") CV_TEST_MAIN("cv")
...@@ -7,6 +7,10 @@ static const char* extraTestDataPath = ...@@ -7,6 +7,10 @@ static const char* extraTestDataPath =
getenv("OPENCV_DNN_TEST_DATA_PATH"); getenv("OPENCV_DNN_TEST_DATA_PATH");
#endif #endif
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_PERF_TEST_MAIN(dnn, CV_PERF_TEST_MAIN(dnn,
extraTestDataPath ? (void)cvtest::addDataSearchPath(extraTestDataPath) : (void)0 extraTestDataPath ? (void)cvtest::addDataSearchPath(extraTestDataPath) : (void)0
) )
...@@ -7,6 +7,10 @@ static const char* extraTestDataPath = ...@@ -7,6 +7,10 @@ static const char* extraTestDataPath =
getenv("OPENCV_DNN_TEST_DATA_PATH"); getenv("OPENCV_DNN_TEST_DATA_PATH");
#endif #endif
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN("", CV_TEST_MAIN("",
extraTestDataPath ? (void)cvtest::addDataSearchPath(extraTestDataPath) : (void)0 extraTestDataPath ? (void)cvtest::addDataSearchPath(extraTestDataPath) : (void)0
) )
......
#include "perf_precomp.hpp" #include "perf_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_PERF_TEST_MAIN(features2d) CV_PERF_TEST_MAIN(features2d)
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
// of this distribution and at http://opencv.org/license.html. // of this distribution and at http://opencv.org/license.html.
#include "test_precomp.hpp" #include "test_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN("cv") CV_TEST_MAIN("cv")
#include "test_precomp.hpp" #include "test_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN("cv") CV_TEST_MAIN("cv")
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
// of this distribution and at http://opencv.org/license.html. // of this distribution and at http://opencv.org/license.html.
#include "test_precomp.hpp" #include "test_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN("highgui") CV_TEST_MAIN("highgui")
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
// of this distribution and at http://opencv.org/license.html // of this distribution and at http://opencv.org/license.html
#include "perf_precomp.hpp" #include "perf_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_PERF_TEST_MAIN(imgcodecs) CV_PERF_TEST_MAIN(imgcodecs)
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
// of this distribution and at http://opencv.org/license.html // of this distribution and at http://opencv.org/license.html
#include "test_precomp.hpp" #include "test_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN("highgui") CV_TEST_MAIN("highgui")
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
// of this distribution and at http://opencv.org/license.html. // of this distribution and at http://opencv.org/license.html.
#include "perf_precomp.hpp" #include "perf_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_PERF_TEST_MAIN(imgproc) CV_PERF_TEST_MAIN(imgproc)
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
// of this distribution and at http://opencv.org/license.html. // of this distribution and at http://opencv.org/license.html.
#include "test_precomp.hpp" #include "test_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN("cv") CV_TEST_MAIN("cv")
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
// of this distribution and at http://opencv.org/license.html. // of this distribution and at http://opencv.org/license.html.
#include "test_precomp.hpp" #include "test_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN("ml") CV_TEST_MAIN("ml")
#include "perf_precomp.hpp" #include "perf_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_PERF_TEST_MAIN(objdetect) CV_PERF_TEST_MAIN(objdetect)
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
// of this distribution and at http://opencv.org/license.html. // of this distribution and at http://opencv.org/license.html.
#include "test_precomp.hpp" #include "test_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN("cv") CV_TEST_MAIN("cv")
...@@ -8,4 +8,8 @@ static const char * impls[] = { ...@@ -8,4 +8,8 @@ static const char * impls[] = {
"plain" "plain"
}; };
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_PERF_TEST_MAIN_WITH_IMPLS(photo, impls, perf::printCudaInfo()) CV_PERF_TEST_MAIN_WITH_IMPLS(photo, impls, perf::printCudaInfo())
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
// of this distribution and at http://opencv.org/license.html. // of this distribution and at http://opencv.org/license.html.
#include "test_precomp.hpp" #include "test_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN("cv") CV_TEST_MAIN("cv")
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
// of this distribution and at http://opencv.org/license.html. // of this distribution and at http://opencv.org/license.html.
#include "test_precomp.hpp" #include "test_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN("cv") CV_TEST_MAIN("cv")
#include "perf_precomp.hpp" #include "perf_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_PERF_TEST_MAIN(stitching) CV_PERF_TEST_MAIN(stitching)
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
// of this distribution and at http://opencv.org/license.html. // of this distribution and at http://opencv.org/license.html.
#include "test_precomp.hpp" #include "test_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN(".") CV_TEST_MAIN(".")
...@@ -51,4 +51,8 @@ static const char * impls[] = { ...@@ -51,4 +51,8 @@ static const char * impls[] = {
"plain" "plain"
}; };
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_PERF_TEST_MAIN_WITH_IMPLS(superres, impls, printCudaInfo()) CV_PERF_TEST_MAIN_WITH_IMPLS(superres, impls, printCudaInfo())
...@@ -42,4 +42,8 @@ ...@@ -42,4 +42,8 @@
#include "test_precomp.hpp" #include "test_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN("superres") CV_TEST_MAIN("superres")
#include "perf_precomp.hpp" #include "perf_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_PERF_TEST_MAIN(video) CV_PERF_TEST_MAIN(video)
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
// of this distribution and at http://opencv.org/license.html. // of this distribution and at http://opencv.org/license.html.
#include "test_precomp.hpp" #include "test_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN("cv") CV_TEST_MAIN("cv")
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
// of this distribution and at http://opencv.org/license.html // of this distribution and at http://opencv.org/license.html
#include "perf_precomp.hpp" #include "perf_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_PERF_TEST_MAIN(videoio) CV_PERF_TEST_MAIN(videoio)
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
// of this distribution and at http://opencv.org/license.html. // of this distribution and at http://opencv.org/license.html.
#include "test_precomp.hpp" #include "test_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN("highgui") CV_TEST_MAIN("highgui")
...@@ -4,4 +4,8 @@ ...@@ -4,4 +4,8 @@
#include "test_precomp.hpp" #include "test_precomp.hpp"
#if defined(HAVE_HPX)
#include <hpx/hpx_main.hpp>
#endif
CV_TEST_MAIN("cv") CV_TEST_MAIN("cv")
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment