如何编译openCV以保证单线程?
Posted
技术标签:
【中文标题】如何编译openCV以保证单线程?【英文标题】:How to compile openCV to be guaranteed single threaded? 【发布时间】:2016-03-06 15:37:53 【问题描述】:我在多线程软件中使用 openCV,并且我正在启动尽可能多的线程,因为 CPU 可用。此外,我正在使用一些 openCV 函数,我的问题就开始了。在我看来,openCV 在内部启动了自己的线程。
$ ps huH p 30266 | wc -l
1650
1650 个线程???停止 openCVs 多线程支持的 cmake 标志是什么?
【问题讨论】:
我认为您可以在运行时使用omp_set_num_threads(1);
来实现 - 尽管我从未尝试过。
这会影响我的程序和 std::thread 吗?
我尝试使用cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_EXAMPLES=OFF -DBUILD_DOCS=OFF -DWITH_TBB=OFF -DWITH_OPENMP=OFF -DWITH_CSTRIPES=OFF -DWITH_PTHREADS_PF=OFF -DENABLE_SSE=ON -DENABLE_SSE2=ON -DENABLE_SSE3=ON -DENABLE_SSSE3=ON -DENABLE_SSE41=ON -DENABLE_SSE42=ON -DENABLE_POPCNT=ON -DENABLE_AVX=ON -DENABLE_FAST_MATH=ON ..
进行编译,但线程数再次极高$ ps huH p 47241 | wc -l
显示1202
omp_set_num_threads(1);
帮不上忙。 ps huH p 47241 | wc -l
显示1449
cv::setNumThreads()
在运行时调用应该可以工作。而且不仅仅是为了 omp。
【参考方案1】:
正如mainactual 提到的,您可以使用cv::setNumThreads(int nthreads)
在运行时设置线程数。
更多信息请参考here。
【讨论】:
以上是关于如何编译openCV以保证单线程?的主要内容,如果未能解决你的问题,请参考以下文章
从 Flutter 和前端角度出发,聊聊单线程模型下如何保证 UI 流畅性
从 Flutter 和前端角度出发,聊聊单线程模型下如何保证 UI 流畅性