我已经使用Intel IPP构建了OpenCV,因此我想尽可能地使用它(例如矩阵乘法)。
我想通过与串行版本进行比较来测试并行应用程序的可伸缩性。为此,当我这样做时:
omp_set_num_threads(1);
cv::setNumThreads(1);
但是,通过监视CPU使用率,我发现仍在使用多个CPU。这是为什么?以及如何仅使用一个CPU来强制执行程序?
最佳答案
使用以下CMake参数从源重新构建OpenCV应该可以:
cmake .. -DWITH_IPP=OFF -DWITH_TBB=OFF -DWITH_OPENMP=OFF -DWITH_PTHREADS_PF=OFF
并且您会发现宏CV_PARALLEL_FRAMEWORK在modules/core/src/parallel.cpp中不再定义为:
#if defined HAVE_TBB
# define CV_PARALLEL_FRAMEWORK "tbb"
#elif defined HAVE_HPX
# define CV_PARALLEL_FRAMEWORK "hpx"
#elif defined HAVE_OPENMP
# define CV_PARALLEL_FRAMEWORK "openmp"
#elif defined HAVE_GCD
# define CV_PARALLEL_FRAMEWORK "gcd"
#elif defined WINRT
# define CV_PARALLEL_FRAMEWORK "winrt-concurrency"
#elif defined HAVE_CONCURRENCY
# define CV_PARALLEL_FRAMEWORK "ms-concurrency"
#elif defined HAVE_PTHREADS_PF
# define CV_PARALLEL_FRAMEWORK "pthreads"
#endif