Installazione_N100 - finzic/n100-ffmpeg-onevpl GitHub Wiki

Installazione N100

  • xubuntu-desktop
    3 sudo apt install net-tools
    4 sudo apt install htop
    8 sudo apt install avahi-daemon
    15 sudo apt install zfsutils-linux
    25 sudo apt install powertop
    apt install autoconf libtool libdrm-dev xorg xorg-dev openbox libx11-dev
    libgl1-mesa-glx - nota questa qui non sembra piu' disponibile.
  • pv
  • parallel
  • samba
  • gitk
  • sudo apt-get install git cmake pkg-config meson automake
  • git-lfs
    • git lfs install
  • gcc build-essential cmake
  • intel-gpu-tools

Adding oneVPL stuff

We want to build the oneVPL implementation for our N100 completely and efficiently with compiler options. Here we go.

Environment file

finzic@conan:~$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
XDG_RUNTIME_DIR=/run/user/
LIBVA_DRIVER_NAME=iHD
LIBVA_DRIVER_PATH=/usr/lib/x86_64-linux-gnu/dri
CFLAGS="-march=native -mtune=native"
CXXFLAGS="-march=native -mtune=native"
CMAKE_C_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG"
CMAKE_CXX_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG"
ONEVPL_SEARCH_PATH=/opt/intel/mediasdk/lib/
VPL_INSTALL_DIR=/home/finzic/src/libvpl-tools/../_vplinstall

This is how the file should look at the end of the work.

Groups added to the user

stat -c “%G” /dev/dri/render*
groups ${USER}
sudo gpasswd -a ${USER} render
newgrp render
sudo gpasswd -a ${USER} video
newgrp video
    1. LIBVPL
  • The following commands will build the project and install it locally in _vplinstall. Note that the bootstrap script will install dependencies needed to build the project.

  • git clone https://github.com/intel/libvpl

  • export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) # cosi' si builda con N core

cd libvpl
export VPL_INSTALL_DIR=`pwd`/../_vplinstall
sudo script/bootstrap
cmake -B _build -DCMAKE_C_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG" -DCMAKE_CXX_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG" -DCMAKE_INSTALL_PREFIX=$VPL_INSTALL_DIR
cmake --build _build
cmake --install _build
pushd libvpl-tools 
export VPL_INSTALL_DIR=`pwd`/../_vplinstall 
sudo script/bootstrap 
cmake -B _build -DCMAKE_C_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG" -DCMAKE_CXX_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG" -DCMAKE_PREFIX_PATH=$VPL_INSTALL_DIR 
cmake --build _build 
cmake --install _build --prefix $VPL_INSTALL_DIR
  • Ora: VPL-GPU-RT : Intel® VPL GPU Runtime depends on LibVA. This version of Intel® VPL GPU Runtime is compatible with the open source Intel Media Driver for VAAPI. Dispatcher and Samples code hosted in Intel® VPL repository.
  • Now I gotta build LibVA
    1. https://github.com/intel/libva
    1. gmmlib
    • git clone https://github.com/intel/gmmlib.git
    • cd gmmlib
    • mkdir build && cd build
    • cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG" -DCMAKE_CXX_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG" ..
    • make -j"$(nproc)"
    • sudo make install
    1. media driver
    • mkdir media-driver-wks
    • cd media-driver-wks
    • mkdir build_media
    • git clone https://github.com/intel/media-driver.git
    • cd build_media
    • cmake -DCMAKE_C_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG" -DCMAKE_CXX_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG" ../media-driver
    • make -j"$(nproc)"
    • sudo make install
    • export LIBVA_DRIVERS_PATH=/usr/lib/x86_64-linux-gnu/dri
    • export LIBVA_DRIVER_NAME=iHD
  1. VPL GPU Runtime
  • git clone https://github.com/intel/vpl-gpu-rt vpl-gpu-rt
  • cd vpl-gpu-rt
  • mkdir build && cd build
  • cmake -DCMAKE_C_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG" -DCMAKE_CXX_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG" ..
  • make -j"$(nproc)" -> this shall make the mfx component.
  • sudo make install
  • add this : ONEVPL_SEARCH_PATH=/opt/intel/mediasdk/lib/ to /etc/environment
  • this will add a second implementation #0 to vpl-inspect. it "should" now be the default one.
  • And it fucking WORKS!

Building FFMPEG

https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu

LIbraries

sudo apt-get install libva-dev libmfx-dev nasm

334 sudo apt-get install libva-dev libmfx-dev
336 sudo apt install nasm
400 sudo apt install libmp3lame-dev
404 sudo apt install libvorbis-dev
408 sudo apt install libx264-dev libx265-dev
411 sudo apt install libopencl-dev

Source code and configuration

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg

Add to the environment the following variable;

PKG_CONFIG_PATH=/home/finzic/src/_vplinstall/lib/pkgconfig:/opt/intel/mediasdk/lib/pkgconfig

./configure --enable-libvpl -> this will work with no errors. Now we refine the configure command to enable x86_64 Alder Lake architecture and all possible coders/encoders

Compilation Options

/usr/libexec/gcc/x86_64-linux-gnu/13/cc1 -quiet -imultiarch x86_64-linux-gnu /usr/include/stdlib.h "-march=alderlake" -mmmx -mpopcnt -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -mavx2 -mno-sse4a -mno-fma4 -mno-xop -mfma -mno-avx512f -mbmi -mbmi2 -maes -mpclmul -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512cd -mno-avx512er -mno-avx512pf -mno-avx512vbmi -mno-avx512ifma -mno-avx5124vnniw -mno-avx5124fmaps -mno-avx512vpopcntdq -mno-avx512vbmi2 -mgfni -mvpclmulqdq -mno-avx512vnni -mno-avx512bitalg -mno-avx512bf16 -mno-avx512vp2intersect -mno-3dnow -madx -mabm -mno-cldemote -mclflushopt -mclwb -mno-clzero -mcx16 -mno-enqcmd -mf16c -mfsgsbase -mfxsr -mno-hle -msahf -mno-lwp -mlzcnt -mmovbe -mmovdir64b -mmovdiri -mno-mwaitx -mno-pconfig -mpku -mno-prefetchwt1 -mprfchw -mptwrite -mrdpid -mrdrnd -mrdseed -mno-rtm -mserialize -mno-sgx -msha -mshstk -mno-tbm -mno-tsxldtrk -mvaes -mwaitpkg -mno-wbnoinvd -mxsave -mxsavec -mxsaveopt -mxsaves -mno-amx-tile -mno-amx-int8 -mno-amx-bf16 -mno-uintr -mno-hreset -mno-kl -mno-widekl -mavxvnni -mno-avx512fp16 -mno-avxifma -mno-avxvnniint8 -mno-avxneconvert -mno-cmpccxadd -mno-amx-fp16 -mno-prefetchi -mno-raoint -mno-amx-complex --param "l1-cache-size=32" --param "l1-cache-line-size=64" --param "l2-cache-size=6144" "-mtune=alderlake" -quiet -dumpdir a- -dumpbase stdlib.h -dumpbase-ext .h -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccZBeuGC.s --output-pch /usr/include/stdlib.h.gch

This was taken out of the Gentoo guide, https://wiki.gentoo.org/wiki/GCC_optimization#-march

FFmpeg final compilation options

./configure --enable-libvpl --enable-vaapi --enable-libvorbis --enable-libdrm --enable-gpl --enable-libx264 --enable-libx265 --enable-nonfree --enable-libmp3lame --arch=x86_64 --cpu=alderlake

Compiling and installing

make -j4

sudo make install

Updated /etc/environment:

finzic@conan:~/src/ffmpeg$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
XDG_RUNTIME_DIR=/run/user/
LIBVA_DRIVER_NAME=iHD
LIBVA_DRIVER_PATH=/usr/lib/x86_64-linux-gnu/dri
CFLAGS="-march=native -mtune=native --param \"l1-cache-size=32\" --param \"l1-cache-line-size=64\" --param \"l2-cache-size=6144\""
CXXFLAGS="-march=native -mtune=native --param \"l1-cache-size=32\" --param \"l1-cache-line-size=64\" --param \"l2-cache-size=6144\""
CMAKE_C_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG --param \"l1-cache-size=32\" --param \"l1-cache-line-size=64\" --param \"l2-cache-size=6144\" "
CMAKE_CXX_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG --param \"l1-cache-size=32\" --param \"l1-cache-line-size=64\" --param \"l2-cache-size=6144\" "
ONEVPL_SEARCH_PATH=/opt/intel/mediasdk/lib/
VPL_INSTALL_DIR=$HOME/src/libvpl-tools/../_vplinstall
PKG_CONFIG_PATH=$HOME/src/_vplinstall/lib/pkgconfig:/opt/intel/mediasdk/lib/pkgconfig

New /etc/environment:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
XDG_RUNTIME_DIR=/run/user/
LIBVA_DRIVER_NAME=iHD
LIBVA_DRIVER_PATH=/usr/lib/x86_64-linux-gnu/dri
#CFLAGS="-march=native -mtune=native --param \"l1-cache-size=32\" --param \"l1-cache-line-size=64\" --param \"l2-cache-size=6144\""
#CXXFLAGS="-march=native -mtune=native --param \"l1-cache-size=32\" --param \"l1-cache-line-size=64\" --param \"l2-cache-size=6144\""
#CMAKE_C_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG --param \"l1-cache-size=32\" --param \"l1-cache-line-size=64\" --param \"l2-cache-size=6144\" "
#CMAKE_CXX_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG --param \"l1-cache-size=32\" --param \"l1-cache-line-size=64\" --param \"l2-cache-size=6144\" "
#CFLAGS="-march=native -mtune=native"
#CXXFLAGS="-march=native -mtune=native"
#CMAKE_C_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG"
#CMAKE_CXX_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG"
CFLAGS="-march=alderlake -mtune=alderlake -mmmx -mpopcnt -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -mavx2 -mno-sse4a -mno-fma4 -mno-xop -mfma -mno-avx512f -mbmi -mbmi2 -maes -mpclmul -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512cd -mno-avx512er -mno-avx512pf -mno-avx512vbmi -mno-avx512ifma -mno-avx5124vnniw -mno-avx5124fmaps -mno-avx512vpopcntdq -mno-avx512vbmi2 -mgfni -mvpclmulqdq -mno-avx512vnni -mno-avx512bitalg -mno-avx512bf16 -mno-avx512vp2intersect -mno-3dnow -madx -mabm -mno-cldemote -mclflushopt -mclwb -mno-clzero -mcx16 -mno-enqcmd -mf16c -mfsgsbase -mfxsr -mno-hle -msahf -mno-lwp -mlzcnt -mmovbe -mmovdir64b -mmovdiri -mno-mwaitx -mno-pconfig -mpku -mno-prefetchwt1 -mprfchw -mptwrite -mrdpid -mrdrnd -mrdseed -mno-rtm -mserialize -mno-sgx -msha -mshstk -mno-tbm -mno-tsxldtrk -mvaes -mwaitpkg -mno-wbnoinvd -mxsave -mxsavec -mxsaveopt -mxsaves -mno-amx-tile -mno-amx-int8 -mno-amx-bf16 -mno-uintr -mno-hreset -mno-kl -mno-widekl -mavxvnni -mno-avx512fp16 -mno-avxifma -mno-avxvnniint8 -mno-avxneconvert -mno-cmpccxadd -mno-amx-fp16 -mno-prefetchi -mno-raoint -mno-amx-complex --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=6144"
CXXFLAGS=${CFLAGS}
CMAKE_C_FLAGS_RELEASE="${CFLAGS} -O3 -DNDEBUG"
CMAKE_CXX_FLAGS_RELEASE="${CFLAGS} -O3 -DNDEBUG"
ONEVPL_SEARCH_PATH=/opt/intel/mediasdk/lib/
VPL_INSTALL_DIR=$HOME/src/libvpl-tools/../_vplinstall
PKG_CONFIG_PATH=$HOME/src/_vplinstall/lib/pkgconfig:/opt/intel/mediasdk/lib/pkgconfig

Last Run

sudo apt install net-tools xubuntu-desktop htop -y
6 sudo apt install net-tools htop avahi-daemon zfsutils-linux powertop pv parallel samba git gitk cmake pkg-config meson automake git-lfs build-essential intel-gpu-tools libtool -y
14 sudo apt-get install -y gpg-agent wget
18 sudo apt-get install intel-opencl-icd intel-level-zero-gpu level-zero intel-media-va-driver-non-free libmfx1
20 sudo apt install vainfo
38 sudo apt-get install libmfxgen1
39 sudo apt-get install libigc-dev intel-igc-cm libigdfcl-dev libigfxcmrt-dev level-zero-dev

Wrong tentative

  • https://github.com/intel/gmmlib
    • cd gmmlib/
    • mkdir build && cd build
    • cmake -DCMAKE_BUILD_TYPE=Release ..
    • make -j"$(nproc)"
    • sudo make install
      • Questo installa /usr/local/lib/libigdgmm.so.12.6.0
  • LIBVA:
    • conan@lana:~/src/libva$ cat /etc/environment
      PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
      CFLAGS="-march=native -mtune=native"
      CXXFLAGS="-march=native -mtune=native"
      LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}
    • git clone https://github.com/intel/libva.git
    • cd libva
    • ./autogen.sh --libdir=/usr/lib/x86_64-linux-gnu
    • make -j$(nproc)
    • sudo make install
  • Intel Media Driver for VAAPI
    • in ~/src perform mkdir media-driver-wks
    • cd media-driver-wks
    • git clone https://github.com/intel/media-driver.git
    • mkdir build-media
    • cd build-media/
      • old driver: -rw-r--r-- 1 root root 13589472 Dec 29 2023 /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
    • cmake ../media-driver
    • make -j"$(nproc)"
    • sudo make install
      • new driver: -rwxr-xr-x 1 root root 482637000 Dec 27 11:16 /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
    • git clone https://github.com/intel/vpl-gpu-rt vpl-gpu-rt
    • cd vpl-gpu-rt
    • mkdir build && cd build
    • cmake -DCMAKE_C_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG" -DCMAKE_CXX_FLAGS_RELEASE="-march=native -mtune=native -O3 -DNDEBUG" ..
    • make -j"$(nproc)"
    • sudo make install