可以在OpenCV构建中启用TBB,OpenMP和OpenCL吗?

时间:2014-02-26 21:50:45

标签: opencv

我正在构建OpenCV,并想知道添加全部3是否有意义?或者,如果这会导致错误,因为它们都用于并行执行?

1 个答案:

答案 0 :(得分:4)

我最近想知道同样的事情,我的研究已经调出文件modules\core\src\parallel.cpp,其中包含并行for循环的实现,parallel_for_以及相应的数据结构和线程控制函数。

根据此文件判断,OpenCV准备以此优先顺序支持以下框架:

/* 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)
*/

只有在此列表中最上面的框架才会被编译到库中;其余的代码被预处理程序指令禁用。

总而言之,您应该只启用您希望OpenCV使用的框架 如果添加多个,则应自动选择上面列表中首先出现的那个。其他人不会提供额外的好处,但也不应该造成任何麻烦。

可以在Utility and System Functions and Macros部分找到与线程相关的函数的文档。

希望有所帮助!