setNumThreads(x)是否正在并行化我的OpenCV代码?
我真的想知道是否使用OpenCV的setNumThreads(x)是否正在并行化我的OpenCV代码?,opencv,Opencv,我真的想知道是否使用OpenCV的setNumThreads()确实允许我的代码并行运行。我在互联网上搜索了很多,没有找到我的问题的答案 有人能回答我的问题吗?效果很大程度上取决于您在cmake configure上选择的配置选项,例如,请参见,以及不同配置的捕获: 有了这些,你就能理解。尽管如此,如果你运行的是一个固有的顺序算法,并行引擎将不会有多大作用,这实际上是OpenCV下的一切。。。我的猜测是,如果您有几个OpenCV程序并行运行,您可能会看到一个有意义的差异。觉得有必要根据migue
setNumThreads()
确实允许我的代码并行运行。我在互联网上搜索了很多,没有找到我的问题的答案
有人能回答我的问题吗?效果很大程度上取决于您在cmake configure上选择的配置选项,例如,请参见,以及不同配置的捕获:
有了这些,你就能理解。尽管如此,如果你运行的是一个固有的顺序算法,并行引擎将不会有多大作用,这实际上是OpenCV下的一切。。。我的猜测是,如果您有几个OpenCV程序并行运行,您可能会看到一个有意义的差异。觉得有必要根据miguelao的答案构建:OpenCV的大部分功能不是多线程的。setNumThreads仅影响多线程函数,例如
calcOpticalFlowPyrLK
通常默认情况下,OpenCV将使用与内核数量相同的线程。因此setNumThreads
不会给您带来速度提升
我的主要用途是禁用多线程,这样我就可以用更粗的粒度来完成自己的任务
/* 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)
*/