Compute Unified Device Architecture
GPU에서 수행하는 병렬 처리 알고리즘을 C 프로그래밍 언어를 비롯한 산업 표준 언어를 사용하여 작성할 수 있도록 하는 GPGPU 기술
Nvidia가 개발
GPU와 스트림 처리 드라이버가 필요
https://developer.nvidia.com/cuda-downloads
wget https://developer.download.nvidia.com/compute/cuda/11.4.3/local_installers/cuda_11.4.3_470.82.01_linux.run
sudo sh cuda_11.4.3_470.82.01_linux.run
Continue
accept
기존 드라이버 사용하므로 Driver 체크 해제
Options > Toolkit Options
CUDA 버전 여러 개 사용 시 기존 심볼릭 링크 삭제 방지
설치 완료
Driver 선택 X, Toolkit은 /usr/local/cuda-11.4에 설치
https://developer.nvidia.com/rdp/cudnn-download
Local Installer for Linux x86_64 (Tar) 다운
압축 해제
tar xf cudnn-linux-x86_64-8.9.0.131_cuda11-archive.tar.xz
CUDA toolkit directory에 파일 복사
cd cudnn-linux-x86_64-8.9.6.50_cuda11-archive
version=11.7
sudo cp include/cudnn*.h "/usr/local/cuda-$version/include" \
&&sudo cp -P lib/libcudnn* "/usr/local/cuda-$version/lib64/" \
&&sudo chmod a+r "/usr/local/cuda-$version/include"/cudnn*.h "/usr/local/cuda-$version/lib64"/libcudnn*
CUDNN 8.9.0 설치 확인
메인 모듈
https://github.com/opencv/opencv/releases
추가 모듈
https://github.com/opencv/opencv_contrib/tags
OpenCV 메인 모듈 소스 코드 및 빌드 폴더 설정
dnn
├ CMakeLists.txt
├ examples
│ └ cudahough
│ ├ building.jpg
│ ├ lenna.bmp
│ └ exec_cudahough.cpp
├ modules
│ ├ CMakeLists.txt
│ └ cudahough
│ ├ CMakeLists.txt
│ ├ main.cpp
│ └ include
│ └ hough.hpp
└ thirdparty
└ OpenCV
├ build
├ install
├ opencv-4.5.5
└ opencv_contrib-4.5.5
cd build
cmake \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=../install \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D CUDA_FAST_MATH=ON \
-D WITH_CUBLAS=ON \
-D WITH_CUFFT=ON \
-D WITH_FFMPEG=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.5/modules/ \
-D OPENCV_ENABLE_NONFREE=ON \
../opencv-4.5.5
make -j
sudo make install
sudo vim /etc/bash.bashrc
export PATH=/usr/local/cuda-11.4/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.4/extras/CUPTI/lib64:$LD_LIBRARY_PATH
source /etc/bash.bashrc
nvcc -V
nvidia-smi
Open Computing Lanuage
여러 개의 CPU, GPU, DSP 등의 프로세서로 이루어진 이종 플랫폼에서 동작하는 프로그램 코드 작성을 위한 개방형 범용 병렬 컴퓨팅 프레임워크
애플에서 최초 개발 크로노스 그룹에서 관리
Transparent-API
Mat frame, gray, blr, edge;
최소한의 소스 코드 변경을 통해 HW 가속 기능 사용 Mat 대신 UMat 사용
UMat frame, gray, blr, edge;
Mat mat = imread("lenna.bmp");
UMat umat1;
mat.copyTo(umat1);
UMat umat2 = mat.getUMat(ACCESS_READ);
Mat umat;
videocap >> umat;
Mat mat1;
umat.copyTo(mat1);
UMat mat2 = umat.getMat(ACCESS_READ);
Border 처리 연산 시 BORDER_REPLICATE 옵션 권장
Mat::getUMat() 또는 UMat::getMat() 함수 사용 시 주의 사항
getUMat() 함수를 통해 UMat 객체를 생성할 경우 새로 생성한 UMat 객체가 완전히 소멸한 후 원본 Mat 객체 사용
안녕하세요 의문이 있어서 댓글남깁니다
cd cudnn-linux-x86_64-8.9.6.50_cuda11-archive
version=11.7
sudo cp include/cudnn.h "/usr/local/cuda-$version/include" \
&&sudo cp -P lib/libcudnn "/usr/local/cuda-version/lib64/" \ &&sudo chmod a+r "/usr/local/cuda-version/include"/cudnn.h "/usr/local/cuda-$version/lib64"/libcudnn
cuda 버전을 11.4로 설치하셨는데
위 명령어 모음에서 version=11.7로 선언하시고
복사할때 위치를 /usr/local/cuda-$version으로 하면 디렉터리 Not found 에러가 발생하지 않나요?