Monday, March 09, 2020

Use OpenCL interoperability with OpenVINO


1. Install Intel NEO driver :

$ cd /opt/intel/openvino/install_dependencies
$ sudo -E ./install_NEO_OCL_driver.sh

2. Check if OCL driver ready

$ clinfo -l
Platform #0: Intel(R) OpenCL HD Graphics
 `-- Device #0: Intel(R) Gen9 HD Graphics NEO


2. Check if OCL driver ready

export environment variables :


$ export LIBVA_DRIVERS_PATH=/opt/intel/mediasdk/lib64
$ export LIBVA_DRIVER_NAME=iHD


Or source script directly:

$ . /etc/profile.d/intel-mediasdk.sh

$ /opt/intel/mediasdk/bin/vainfo --display drm --device /dev/dri/renderD128 
libva info: VA-API version 1.4.1
libva info: va_getDriverName() returns 0
libva info: User requested driver 'iHD'
libva info: Trying to open /opt/intel/mediasdk/lib64/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.4 (libva 2.4.1)
vainfo: Driver version: Intel iHD driver - 19.1.0.git_42f6f23_2019-04-23
vainfo: Supported profile and entrypoints
      VAProfileNone                   : VAEntrypointVideoProc
      VAProfileNone                   : VAEntrypointStats
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Simple            : VAEntrypointEncSlice
      ...

3. Download OpenCL C headers :

$ sudo -E apt install opencl-c-headers

$ sudo cp /usr/include/CL/cl_va_api_media_sharing_intel.h /usr/include/CL/va_ext.h


4. Download OpenCV source from https://github.com/opencv/opencv/archive/4.2.0-openvino.zip, and config cmake to build

$ mkdir build && cd build
$ cmake -DWITH_VA_INTEL=ON \
        -DBUILD_EXAMPLES=ON \
        -DVA_INTEL_IOCL_ROOT=/usr/include \
        -DVA_INCLUDE_DIR=/opt/intel/mediasdk/include \
        -DVA_INTEL_LIBRARIES= "/opt/intel/mediasdk/lib64/libva.so;/opt/intel/mediasdk/lib64/libva-drm.so" \
-DVA_LIBRARIES= "/opt/intel/mediasdk/lib64/libva.so;/opt/intel/mediasdk/lib64/libva-drm.so" ..

$ make -j `nproc`

5. Test interop

Test with interop enabled:

$ ./bin/example_va_intel_va_intel_interop ../samples/data/HappyFish.jpg on_orig.jpg on_blur.jpg
libva info: VA-API version 1.4.1
libva info: va_getDriverName() returns 0
libva info: User requested driver 'iHD'
libva info: Trying to open /opt/intel/mediasdk/lib64/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
VA display opened successfully
Interop ON : processing time, msec: 1.27697

Test with interop disabled (fallback):

$ ./bin/example_va_intel_va_intel_interop \
       -f ../samples/data/HappyFish.jpg off_orig.jpg off_blur.jpg
libva info: VA-API version 1.4.1
libva info: va_getDriverName() returns 0
libva info: User requested driver 'iHD'
libva info: Trying to open /opt/intel/mediasdk/lib64/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
VA display opened successfully
Interop OFF: processing time, msec: 9.83819

Check libraries dependence :


$ ldd bin/example_va_intel_va_intel_interop
        linux-vdso.so.1 (0x00007ffe9dca3000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007efc03690000)
        libva.so.2 => /opt/intel/mediasdk/lib64/libva.so.2 (0x00007efc0346d000)

        libva-drm.so.2 => /opt/intel/mediasdk/lib64/libva-drm.so.2 (0x00007efc0326a000)

Reference :
https://software.intel.com/en-us/articles/tutorial-opencl-interoperability-with-video-acceleration-api-on-linux-os

No comments: