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部分找到。
希望有幫助!