[CUDA] CUDA 공부 1 - 이미지 읽어와 GPU에 복사/가져오기
자 이제 본격적으로 해보자
우선 이미지 읽어와서 GPU에 복사, GPU 메모리 안에서 복사, GPU에서 시스템 메모리로 복사
등을 해보자.
참조한 블로그 : Z-wony 님 블로그의 [CUDA] 02. Memory Copy 및 Crop
z-wony 님은 리룩스에서 작성하셨으나 난 윈도우니까 그에 맞게 소스를 수정하고 공부해보자
우선 프로젝트를 생성하고 속성에서 opencv 와 CUDA를 추가하자.
(include, lib 추가)
기존 read_JPEG_file 함수를 opencv 함수로 바꾸고
cv::Mat Img;
Img = cv::imread(SAMPLE_IMG, CV_8U);
imgWidth = Img.cols;
imgHeight = Img.rows;
imgBuffer = Img.data;
회색조 이미지 이니까 pitch * 3 된 곳을 3배를 없앤다.
imageWriteToGPU 함수 안에도 opencv 함수로 수정
cv::Mat Img = cv::Mat(height, width, CV_8U, hostMem).clone();
cv::imwrite(filepath, Img);
추후 GPU 구해서 GPUDirect Storage 를 구현하면 달라지겠지만
CUDA에서 사용하는 명칭을 사용하여 설명하자
CUDA에서는 기존 메모리 (시스템 메모리) 를 Host Memory
GPU 메모리를 Device Memory 라고 한다.
이 두 메모리 간에 복사 및 GPU 메모리 내의 복사를 할 때 cudaMemcpy 나 cudaMemcpy2D 함수를 사용한다.
출처: https://z-wony.tistory.com/21 [끄적끄적 프로그래밍]
출처: https://z-wony.tistory.com/21 [끄적끄적 프로그래밍]
어느 메모리에서 어느 메모리로 복사하느냐에 따라 transfer type 을 다르게 넣어주면 된다.
- System Memory -> Device Memory : cudaMemcpyHostToDevice
- Device Memory -> System Memory : cudaMemcpyDeviceToHost
- Device Memory 내 메모리 복사 : cudaMemcpyDeviceToDevice
댓글
댓글 쓰기