我已经使用 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 没有定义为模块/core/src/parallel.cpp https://github.com/opencv/opencv/blob/master/modules/core/src/parallel.cpp#L121还有更多:
#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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)