我已经使用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

09-04 17:19
查看更多