setNumThreads(x)是否可以并行化我的OpenCV代码?

时间:2014-03-01 13:48:32

标签: opencv

我真的很想知道使用OpenCV的setNumThreads();是否真的允许我的代码并行运行。我在互联网上搜索了很多,但没有找到任何答案。

有人对我的问题有任何答案吗?

2 个答案:

答案 0 :(得分:4)

效果在很大程度上取决于您在cmake configure上选择的配置选项,例如参见CMakeLists.txt,以及不同configuration options的捕获:

/* IMPORTANT: always use the same order of defines
   1. HAVE_TBB         - 3rdparty library, should be explicitly enabled
   2. HAVE_CSTRIPES    - 3rdparty library, should be explicitly enabled
   3. HAVE_OPENMP      - integrated to compiler, should be explicitly enabled
   4. HAVE_GCD         - system wide, used automatically        (APPLE only)
   5. HAVE_CONCURRENCY - part of runtime, used automatically    (Windows only - MSVS 10, MSVS 11)
*/

有了这些,你就可以理解the code itself。所有这一切,如果你运行一个固有的顺序算法,并行引擎将不会做太多,这几乎是OpenCV下的一切...我的猜测是如果你将运行几个OpenCV程序与此同时,你可以看到有意义的差异。

答案 1 :(得分:0)

感觉有必要基于miguelao的答案:大多数OpenCV的功能都不是多线程的。 setNumThreads仅影响多线程功能,例如calcOpticalFlowPyrLK

通常默认情况下,OpenCV将使用与内核一样多的线程。因此setNumThreads不会给您带来速度上的进步。

我的主要用途是禁用多线程,以便我可以使用更粗粒度的方法。