Is there a list of functions/methods of OpenCV that have been optimized with IPP and/or TBB and/or OpenMP?
问题:
回答1:
Disclaimer: I have no experience in OpenCV usage.
I found no such a list on the official opencv.org site. However, the ChangeLog says:
switched all the remaining parallel loops from TBB-only tbb::parallel_for() to universal cv::parallel_for_() with many possible backends (MS Concurrency, Apple's GDC, OpenMP, Intel TBB etc.)
Now, we know what to search and grep -IRl parallel_for_
applied on opencv
directory gives us the following:
build/include/opencv2/core/core.hpp sources/apps/traincascade/boost.cpp sources/modules/calib3d/src/stereobm.cpp sources/modules/contrib/src/basicretinafilter.cpp sources/modules/contrib/src/magnoretinafilter.cpp sources/modules/contrib/src/parvoretinafilter.cpp sources/modules/contrib/src/retinacolor.cpp sources/modules/contrib/src/templatebuffer.hpp sources/modules/core/include/opencv2/core/core.hpp sources/modules/core/src/matrix.cpp sources/modules/core/src/parallel.cpp sources/modules/core/src/stat.cpp sources/modules/features2d/src/detectors.cpp sources/modules/gpu/src/calib3d.cpp sources/modules/highgui/test/test_ffmpeg.cpp sources/modules/imgproc/src/clahe.cpp sources/modules/imgproc/src/color.cpp sources/modules/imgproc/src/distransform.cpp sources/modules/imgproc/src/generalized_hough.cpp sources/modules/imgproc/src/histogram.cpp sources/modules/imgproc/src/imgwarp.cpp sources/modules/imgproc/src/morph.cpp sources/modules/imgproc/src/smooth.cpp sources/modules/imgproc/src/thresh.cpp sources/modules/ml/src/ann_mlp.cpp sources/modules/ml/src/gbt.cpp sources/modules/ml/src/knearest.cpp sources/modules/ml/src/nbayes.cpp sources/modules/ml/src/svm.cpp sources/modules/nonfree/src/surf.cpp sources/modules/objdetect/src/cascadedetect.cpp sources/modules/objdetect/src/haar.cpp sources/modules/objdetect/src/hog.cpp sources/modules/ocl/src/kmeans.cpp sources/modules/photo/src/denoising.cpp sources/modules/stitching/src/matchers.cpp sources/modules/superres/src/btv_l1.cpp sources/modules/video/src/bgfg_gaussmix2.cpp sources/modules/video/src/bgfg_gmg.cpp sources/modules/video/src/lkpyramid.cpp sources/modules/video/src/tvl1flow.cpp
Here, we see the list of modules and parts which use the parallel loop. I hope it's enough to answer the question for TBB and OpenMP. For more details, please open the corresponding file and search for parallel_for_
to find out in which circumstances it is applied.
As for IPP, it seems it is quite extensively used by the core library, egrep -IRl '\bipp'
gives the following:
modules/calib3d/src/calibration.cpp modules/core/include/opencv2/core/core_c.h modules/core/include/opencv2/core/internal.hpp modules/core/src/arithm.cpp modules/core/src/dxt.cpp modules/core/src/mathfuncs.cpp modules/core/src/matmul.cpp modules/core/src/precomp.hpp modules/core/src/stat.cpp modules/core/src/system.cpp modules/imgproc/src/canny.cpp modules/imgproc/src/color.cpp modules/imgproc/src/deriv.cpp modules/imgproc/src/distransform.cpp modules/imgproc/src/filter.cpp modules/imgproc/src/imgwarp.cpp modules/imgproc/src/morph.cpp modules/imgproc/src/samplers.cpp modules/imgproc/src/smooth.cpp modules/imgproc/src/sumpixels.cpp modules/legacy/test/test_pyrsegmentation.cpp modules/objdetect/src/haar.cpp modules/objdetect/src/hog.cpp modules/ocl/src/haar.cpp