Hi All,
I installed latest IPP product and I have video processing code in OpenCV. I recompiled OpenCV with flag WITH_IPP however I don't see any performance improvement. What I'm missing ? How can I tell OpenCV is detecting the IPP ?
Now after make finish I'm getting error:
You need to apply this patch: https://github.com/opencv/opencv/pull/8109/files
链接已复制
Hi,
You may enable IPP on OpenCV by passing switches "-D WITH_IPP=ON -D IPPROOT=<Your IPP Location>" to cmake command like the following.
cmake -D WITH_IPP=ON -D IPPROOT=<Your IPP Location> .
For more detailed information, please refer to https://software.intel.com/en-us/articles/enabling-ipp-on-opencv-windows-and-linux-ubintu
/* ****************************************** */
To confirm how your OpenCV works with IPP, please check in version_string.tmp under your OpenCV build directory.
Suppose you follow the following official OpenCV installation guide, you will find the version_string.tmp under ~/opencv/release.
-
Create a temporary directory, which we denote as <cmake_binary_dir>, where you want to put the generated Makefiles, project files as well the object files and output binaries.
-
Enter the <cmake_binary_dir> and type
cmake [<some optional parameters>] <path to the OpenCV source directory>
For example
cd ~/opencv mkdir release cd release cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
-
Enter the created temporary directory (<cmake_binary_dir>) and proceed with:
make sudo make install
Thanks for reply. Still not working.
I got the version_string.tmp file.
Why I see ?
Use IPP: IPP not found or implicitly disabled\n"
"\n"
"General configuration for OpenCV 3.1.0 =====================================\n"
" Version control: unknown\n"
"\n"
" Platform:\n"
" Host: Linux 4.4.0-59-generic x86_64\n"
" CMake: 3.5.1\n"
" CMake generator: Unix Makefiles\n"
" CMake build tool: /usr/bin/make\n"
" Configuration: RELEASE\n"
"\n"
" C/C++:\n"
" Built as dynamic libs?: YES\n"
" C++ Compiler: /usr/bin/c++ (ver 5.4.0)\n"
".........................
"\n"
" Video I/O:\n"
" DC1394 1.x: NO\n"
" DC1394 2.x: NO\n"
" FFMPEG: YES\n"
" codec: YES (ver 56.60.100)\n"
" format: YES (ver 56.40.101)\n"
" util: YES (ver 54.31.100)\n"
" swscale: YES (ver 3.1.101)\n"
" resample: NO\n"
" gentoo-style: YES\n"
" GStreamer: NO\n"
" OpenNI: NO\n"
" OpenNI PrimeSensor Modules: NO\n"
" OpenNI2: NO\n"
" PvAPI: NO\n"
" GigEVisionSDK: NO\n"
" UniCap: NO\n"
" UniCap ucil: NO\n"
" V4L/V4L2: NO/YES\n"
" XIMEA: NO\n"
" Xine: NO\n"
" gPhoto2: NO\n"
"\n"
" Parallel framework: pthreads\n"
"\n"
" Other third-party libraries:\n"
" Use IPP: IPP not found or implicitly disabled\n"
" Use IPP Async: NO\n"
" Use VA: NO\n"
" Use Intel VA-API/OpenCL: NO\n"
" Use Eigen: NO\n"
" Use Cuda: NO\n"
" Use OpenCL: YES\n"
" Use custom HAL: NO\n"
"\n"
" OpenCL:\n"
" Version: dynamic\n"
" Include path: /home/eitans/opencv-3.1.0/3rdparty/include/opencl/1.2\n"
" Use AMDFFT: NO\n"
" Use AMDBLAS: NO\n"
"\n"........
Your log indicates that OpenCV was not built with IPP support.
Please follow the following steps to compile OpenCV with IPP.
Suppose your root directory of IPP is <IPPROOT>. It should be similar to "/opt/intel/compilers_and_libraries(_2017 or _2017.x.yyy or null)/linux/ipp".
-
Create a temporary directory, which we denote as <cmake_binary_dir>, where you want to put the generated Makefiles, project files as well the object files and output binaries.
-
Enter the <cmake_binary_dir> and type
cmake [<some optional parameters>] <path to the OpenCV source directory>
For example
cd ~/opencv mkdir release cd release cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_IPP=ON -DIPPROOT=<IPPROOT> ..
-
Enter the created temporary directory (<cmake_binary_dir>) and proceed with:
make sudo make install
If these do not work for your compiling, could you share more detailed information like your command line history to compile OpenCV, and where is your IPP root directory, and so on, please?
Specified DIPPROOT=/opt/intel/ipp
Now a version is detected but I'm getting failure.
Any advise how to resolve those ?
-- found IPP: 2017.0.0 [2017.0.0]
-- at: /opt/intel/ipp
-- Can't find IPP library: m at /opt/intel/ipp/lib/intel64/libippm.a
CMake Error at cmake/OpenCVFindIPP.cmake:204 (message):
Intel compiler EM64T libraries not found
Call Stack (most recent call first):
cmake/OpenCVFindIPP.cmake:254 (ipp_detect_version)
cmake/OpenCVFindLibsPerf.cmake:37 (include)
CMakeLists.txt:562 (include)
-- Can't find compiler library: irc at /opt/intel/compilers_and_libraries_2017.0.098/linux/compiler/lib/intel64/libirc.so
-- Can't find compiler library: imf at /opt/intel/compilers_and_libraries_2017.0.098/linux/compiler/lib/intel64/libimf.so
-- Can't find compiler library: svml at /opt/intel/compilers_and_libraries_2017.0.098/linux/compiler/lib/intel64/libsvml.so
Could you share us your compiling command history, CMakeCache.txt and version_string.tmp with us, please? (Starting from unzip opencv from the zip file)
Besides, did you install the IPP with Intel System Studio or Intel Parallel Studio or using standalone package?
yes, make command fail.
Notice that I have errors for cmake
Maybe I install IPP incorrectly ?
How can I check that IPP is install correctly ?
Can you point me to the install instructions for IPP over ubuntu ?
-- Checking for module 'libavresample'
-- No package 'libavresample' found
-- Checking for module 'libgphoto2'
-- No package 'libgphoto2' found
-- found IPP: 2017.0.0 [2017.0.0]
-- at: /opt/intel/ipp
-- Can't find IPP library: m at /opt/intel/ipp/lib/intel64/libippm.a
CMake Error at cmake/OpenCVFindIPP.cmake:204 (message):
Intel compiler EM64T libraries not found
Call Stack (most recent call first):
cmake/OpenCVFindIPP.cmake:254 (ipp_detect_version)
cmake/OpenCVFindLibsPerf.cmake:37 (include)
CMakeLists.txt:562 (include)
-- Can't find compiler library: irc at /opt/intel/compilers_and_libraries_2017.0.098/linux/compiler/lib/intel64/libirc.so
-- Can't find compiler library: imf at /opt/intel/compilers_and_libraries_2017.0.098/linux/compiler/lib/intel64/libimf.so
-- Can't find compiler library: svml at /opt/intel/compilers_and_libraries_2017.0.098/linux/compiler/lib/intel64/libsvml.so
Hi Eitan,
-- Can't find compiler library: irc at /opt/intel/compilers_and_libraries_2017.0.098/linux/compiler/lib/intel64/libirc.so
-- Can't find compiler library: imf at /opt/intel/compilers_and_libraries_2017.0.098/linux/compiler/lib/intel64/libimf.so
-- Can't find compiler library: svml at /opt/intel/compilers_and_libraries_2017.0.098/linux/compiler/lib/intel64/libsvml.so
These libraries shouldn't be required for IPP 2017, build scripts are a little out of date.
yes, make command fail.
Can you also attach your make log?
The main problem is that I'm not getting a Makefile so I can't run make :(
-- found IPP: 2017.0.0 [2017.0.0]
-- at: /opt/intel/ipp
-- Can't find IPP library: m at /opt/intel/ipp/lib/intel64/libippm.a
CMake Error at cmake/OpenCVFindIPP.cmake:204 (message):
Intel compiler EM64T libraries not found
Call Stack (most recent call first):
cmake/OpenCVFindIPP.cmake:254 (ipp_detect_version)
cmake/OpenCVFindLibsPerf.cmake:37 (include)
CMakeLists.txt:562 (include)
The macro in cmake file OpenCVFindIPP.cmake that fail when called with name='m'
macro(_ipp_add_library name)
# dynamic linking is only supported for standalone version of IPP
if (BUILD_WITH_DYNAMIC_IPP AND NOT HAVE_IPP_ICV_ONLY)
set(IPP_LIB_PREFIX ${CMAKE_SHARED_LIBRARY_PREFIX})
set(IPP_LIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
else ()
set(IPP_LIB_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX})
set(IPP_LIB_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
endif ()
if (EXISTS ${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX})
if (BUILD_WITH_DYNAMIC_IPP AND NOT HAVE_IPP_ICV_ONLY)
# When using dynamic libraries from standalone IPP it is your responsibility to install those on the target system
list(APPEND IPP_LIBRARIES ${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX})
else ()
add_library(ipp${name} STATIC IMPORTED)
set_target_properties(ipp${name} PROPERTIES
IMPORTED_LINK_INTERFACE_LIBRARIES ""
IMPORTED_LOCATION ${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}
)
list(APPEND IPP_LIBRARIES ipp${name})
if (NOT BUILD_SHARED_LIBS)
# CMake doesn't support "install(TARGETS ${IPP_PREFIX}${name} " command with imported targets
install(FILES ${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}
DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
string(TOUPPER ${name} uname)
set(IPP${uname}_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_3P_LIB_INSTALL_PATH}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}" CACHE INTERNAL "" FORCE)
set(IPP${uname}_LOCATION_PATH "${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}" CACHE INTERNAL "" FORCE)
endif()
endif()
else()
message(STATUS "Can't find IPP library: ${name} at ${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}")
endif()
endmacro()
By the way when dropping "DIPPROOT" and just running - cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_IPP=ON .. than cmake works well and also make.
Other third-party libraries:
-- Use IPP: 9.0.1 [9.0.1]
-- at: /home/eitans/opencv/build/3rdparty/ippicv/ippicv_lnx
-- Use IPP Async: NO
-- Use VA: NO
-- Use Intel VA-API/OpenCL: NO
-- Use Lapack: NO
-- Use Eigen: NO
-- Use Cuda: NO
-- Use OpenCL: YES
-- Use OpenVX: NO
-- Use custom HAL: NO
The problem in that case is that I don't see any improvement later on when using OpenCV and so I assume it is not using the IPP product :(
Looking more in OpenCVFindIPP.cmake I see difference between ICV and standalone IPP
Any idea why we have this difference ?
We are failing on _ipp_add_library(m)
=======================
if(HAVE_IPP_ICV_ONLY)
_ipp_add_library(icv)
else()
_ipp_add_library(core)
_ipp_add_library(s)
_ipp_add_library(i)
_ipp_add_library(cc)
_ipp_add_library(cv)
_ipp_add_library(vm)
_ipp_add_library(m)
=======================
Looks like relevant post with same issues - http://answers.opencv.org/question/94302/multiple-opencv-3-ipp-build-issues/
You are using release OpenCV 3.1, right? Can you update to 3.2? As I remember there were compatibility updates for IPP 2017. I can configure OpenCV 3.2 with IPP 2017.0.0 without any problem. There are some building problems, but I can help to fix them.
Other third-party libraries:
-- Use IPP: 9.0.1 [9.0.1]
-- at: /home/eitans/opencv/build/3rdparty/ippicv/ippicv_lnx
The problem in that case is that I don't see any improvement later on when using OpenCV and so I assume it is not using the IPP product :(
This is a special IPP package for OpenCV which downloads by default. It has some limitations, but there is no guaranty that you are using any OpenCV function with IPP optimizations at all.
You can check performance difference by using cv::ipp::setUseIPP(bool) function before OpenCV calls.
After removing the library _ipp_add_library(m) I'm getting error around
message(SEND_ERROR "Intel compiler EM64T libraries not found")
I think the problem is that I'm missing soft link under: /opt/intel/lib
intel64 ==> intel64_lin
so I added it
Now after make finish I'm getting error:
../../lib/libopencv_core.so.3.2.0: undefined reference to `n8_ownsAdd_8u_Bound'
collect2: error: ld returned 1 exit status
apps/version/CMakeFiles/opencv_version.dir/build.make:105: recipe for target 'bin/opencv_version' failed
make[2]: *** [bin/opencv_version] Error 1
CMakeFiles/Makefile2:6905: recipe for target 'apps/version/CMakeFiles/opencv_version.dir/all' failed
make[1]: *** [apps/version/CMakeFiles/opencv_version.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2
Regarding ICV you wrote:
This is a special IPP package for OpenCV which downloads by default. It has some limitations, but there is no guaranty that you are using any OpenCV function with IPP optimizations at all.
[EITANS] "there is no guaranty" .... is that a general statement or only when using ICV ?
You can check performance difference by using cv::ipp::setUseIPP(bool) function before OpenCV calls.
[EITANS] Can you elaborate how to use it and what does it tells me ?
