2
我正在构建OpenCV并想知道是否有意义添加全部3个?或者如果以后因为全部用于并行执行而导致错误?可以在OpenCV构建中启用TBB,OpenMP和OpenCL吗?
我正在构建OpenCV并想知道是否有意义添加全部3个?或者如果以后因为全部用于并行执行而导致错误?可以在OpenCV构建中启用TBB,OpenMP和OpenCL吗?
我最近想知道同样的事情,并且我的研究发现了文件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部分找到。
希望有帮助!