Installation Intel oneAPI base toolkit on Ubuntu 20.04 LTS and Build with CMake

Ubuntu 20.04에 Intel oneAPI base toolkit 설치 방법과 CMakeLists 와 cmake를 이용한 OpenCV 와의 컴파일 방법

Note : This Site was referred.

## oneAPI 설치

1. 필요한 드라이버 설치

# Add package repository  
sudo  apt-get  install -y gpg-agent wget  wget -qO https://repositories.intel.com/graphics/intel-graphics.key |  sudo apt-key add - 
sudo apt-add-repository 'deb [arch=amd64] https://repositories.intel.com/graphics/ubuntu focal main'  
# Install run-time packages  
sudo  apt-get update sudo  apt-get  install intel-opencl-icd intel-level-zero-gpu level-zero intel-media-va-driver-non-free libmfx1 
# OPTIONAL: Install developer packages  sudo  apt-get  install libigc-dev intel-igc-cm libigdfcl-dev libigfxcmrt-dev level-zero-dev
# if have GPU
stat -c "%G" /dev/dri/render*

2. Intel oneAPI 설치

cd /tmp 
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB 
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB 
rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB 
echo  "deb https://apt.repos.intel.com/oneapi all main"  |  sudo  tee /etc/apt/sources.list.d/oneAPI.list 
sudo  apt update

base toolkit을 위한 package 다운 받기

sudo  apt  install intel-basekit

3. Configuration

source /opt/intel/oneapi/setvars.sh

Check

ifort --version
icc --version
icpc --version

## Building IPP and OpenCV with CMake

### 1. CMakeLists.txt 작성 It’s really simple.

cmake_minimum_required(VERSION 3.16)
project( ex )
find_package( OpenCV REQUIRED )
find_package(IPP REQUIRED)
include_directories( ${OpenCV_INCLUDE_DIRS} )
set(IPP_LIBRARIES IPP::ippcore IPP::ippcc IPP::ipp_iw IPP::ippcv IPP::ippe IPP::ippi IPP::ipps IPP::ippvm )
add_executable( ex ex.cpp )
target_link_libraries( ex PUBLIC ${IPP_LIBRARIES}  ${OpenCV_LIBS})

2. Sample Code

//ex.cpp
#include  <iostream>
#include  "opencv2/opencv.hpp"
#include  <ipp.h> 

using  namespace cv;
using  namespace std;

int  main()
{
	Mat  image  =  imread("../image/Grab_Image.bmp", 0);
	resize(image, image, image.size()  /  6);
	IppiSize size, tsize;
	size.width =  image.cols;
	size.height =  image.rows;
	Ipp8u *S_img = (Ipp8u *)ippsMalloc_8u(size.width * size.height);
	Ipp8u *T_img = (Ipp8u *)ippsMalloc_8u(size.width * size.height);
	Ipp16s *T = (Ipp16s *)ippsMalloc_16s(size.width * size.height);
	ippiCopy_8u_C1R((const Ipp8u *)image.data, size.width, S_img, size.width, size);
	tsize.width =  image.cols;
	tsize.height =  image.rows;
	ippiFilterSobelHorizBorder_8u16s_C1R(S_img, size.width, T, size.width *  2, tsize, ippMskSize5x5, ippBorderConst, 255, T_img);
	Size  s;
	s.width  =  image.cols;
	s.height  =  image.rows;
	cv::Mat  dst(s, CV_16S, T);
	imshow("Image", image);
	imshow("DST", dst);
	waitKey(0);
	destroyAllWindows();
	return  0;
}

Build

    mkdir build
    cd build
    cmake ..
    make
    ./ex

Result

Image

이상 입니닷

학교 수업중에 병렬영상처리 과목에서 IPP 설치해서 OpenCV 랑 시간 비교하는 과제가 있는데, 윈도우에서 비쥬얼스튜디오깔아서 하는방법을 위주로 한다. 비쥬얼스튜디오 안쓴지 거의 오년 다되가서 어떻게 쓰는지 다까먹어서 쓰기싫음 ㅠ 그리고 너무 복잡해 어려웍 그래서 암튼 리눅스에서 설치해서 하려는데 cmake로 빌드하고싶은데 cmakelist 작성하는데 애를 좀 먹었지만,,, 우야됐든 성공!