检查OpenCV是否使用TBB库编译

前言

TBB全称Threading Building Blocks,是Intel针对基于多核处理器进行软件开发而创建的一套C++模板库,核心作用是用来在任务处理中做多线程加速。OpenCV提供了接口来编译和使用TBB。
检查OpenCV是否使用TBB库编译_第1张图片
关于更多TBB的优势见参考资料[6]和[7]。

OpenCV基于TBB编译

在Cmake配置编译选项中指定-D WITH_TBB=ON,例如 :

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_C_COMPILER=/usr/bin/gcc \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D WITH_TBB=ON \
-D BUILD_opencv_cudacodec=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUDA=ON \
-D WITH_CUBLAS=1 \
-D WITH_FFMPEG=ON \
-D WITH_V4L=ON \
-D WITH_QT=OFF \
-D WITH_OPENGL=ON \
-D WITH_GSTREAMER=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_PC_FILE_NAME=opencv.pc \
-D OPENCV_ENABLE_NONFREE=ON \
-D OPENCV_PYTHON3_INSTALL_PATH=/home/ubuntu/conda/envs/pytorch/lib/python3.6/site-packages \
-D WITH_NVCUVID=ON \
-D BUILD_opencv_python3=yes \
-D OPENCV_EXTRA_MODULES_PATH=/home/ubuntu/installs/opencv_contrib/modules \
-D PYTHON2_EXECUTABLE=/home/ubuntu/conda/envs/pytorch/bin/python \
-D PYTHON3_EXECUTABLE=/home/ubuntu/conda/envs/pytorch/bin/python \
-D PYTHON_INCLUDE_DIR=/home/ubuntu/conda/envs/pytorch/include/python3.6m \
-D PYTHON_INCLUDE_DIR2=/home/ubuntu/conda/envs/pytorch/include/python3.6m \
-D PYTHON2_LIBRARY=/home/ubuntu/conda/envs/pytorch/lib/libpython3.6m.so \
-D PYTHON3_LIBRARY=/home/ubuntu/conda/envs/pytorch/lib/libpython3.6m.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/home/ubuntu/conda/envs/pytorch/lib/python3.6/site-packages/numpy/core/include \
-D BUILD_EXAMPLES=ON \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D CUDA_ARCH_BIN=7.5 ..

更多编译安装OpenCV内容见参考资料[3]。

检查TBB编译

ldd /usr/local/lib/libopencv_core.so

如果没有成功基于TBB编译,则打印信息中没有tbb相关内容:

linux-vdso.so.1 (0x00007000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00efec000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x0fbbc5000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x009a8000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00061f000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00281000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x0ac78000)
/lib64/ld-linux-x86-64.so.2 (0x000076000)

否则应该类似:
检查OpenCV是否使用TBB库编译_第2张图片

OpenCV基于TBB开发

OpenCV提供了cv::parallel_for_ 方法来更加方便地使用TBB。如果编译的时候没有使用TBB库,那么OpenCV会调用自身实现的parallel_for方法来实现并行加速。

基于TBB的OpenCV编程示例见参考资料[8]。

版权说明

本文为原创文章,独家发布在blog.csdn.net/TracelessLe。未经个人允许不得转载。如需帮助请email至[email protected]
检查OpenCV是否使用TBB库编译_第3张图片

参考资料

[1] Advanced HPC Threading: Intel® oneAPI Threading Building Blocks
[2] Intel® Threading Building Blocks Tutorial
[3] Ubuntu上安装opencv-cuda加速_TracelessLe的博客-CSDN博客
[4] linux - Check if OpenCV is compiled with TBB - Stack Overflow
[5] linux - 检查OpenCV是否用TBB编译 - IT工具网
[6] Intel Thread Building Blocks (TBB) 入门篇_mob604756f976e6的技术博客_51CTO博客
[7] 交叉编译了TBB库的opencv会得到明显的速度优化吗? - 知乎
[8] Multithreading in OpenCV using TBB

你可能感兴趣的:(#,OpenCV,opencv,tbb)