GPGPU에 대해 처음 접해보는 분들에겐 위의 설명 정확하지만 너무 어려울 수 있을거 같네요.
다들 기본 프로그래밍 언어에 대한 지식이 있다는 전제로 "CPU 대신 GPU로 데이터를 병렬처리 할 수 있다." 정도 일거 같네요. 위키 백과에서는 다음과 같이 설명이 나와있습니다.
"GPGPU(General-Purpose computing on Graphics Processing Units, GPU 상의 범용 계산)는 일반적으로 컴퓨터 그래픽스를 위한 계산만 맡았던 그래픽 처리 장치(GPU)를, 전통적으로 중앙 처리 장치(CPU)가 맡았던 응용 프로그램들의 계산에 사용하는 기술이다. 이를 가능하게 한 것은 프로그램 가능한 층과 고정도 연산을 그래픽 파이프라인에 연결하는 것으로, 이를 통하여 소프트웨어 개발자들이 그래픽이 아닌 데이터에 스트림 프로세싱을 사용할 수 있게 된다." 출처 : 위키백과 |
CPU와 GPU를 이용한 처리는 다음 영상을 보시면 이해가 쉬울거 같습니다. 아래 영상에서 표현하고 자하는 바는 "GPU가 훨씬더 많은 코어를 가지고 있기 때문에 병렬처리에 적합하다" 아닐까 싶네요!
이제 GPU로 병렬처리를 위해 생각해야될 항목을 확인하면 아래와 같습니다. 아래 내용은 제가 아는 지식내에서 게시글을 차차 써나가면서 설명을 쓰려고합니다.
- GPU 하드웨어 특성
- 병렬처리구조
- 메모리 종류 및 최적화
오늘은 GPGPU 병렬처리 플랫폼의 종류에 대해 간략하게 설명할게요. 물론 여타 블로그에서도 찾아보실수 있을거 같네요.
이번 게시물까지는 GPGPU에 대해 간략하게 조사를 하였고 다음 게시물 부터는 NVIDA CUDA에 대해 게시물을 작성할 예정입니다.
1. CUDA(Compute Unified Device Architecture)
- NVIDA에서 사용하는 GPGPU 기술
- CUDA C 이용(C언어와 유사)
- 최초 SDK는 2007년 2월 15일 공개
- NVIDA 그래픽 카드에 종속
2. OpenCL
- CPU, GPU, DSP등의 프로세서로 이루어진 이종 플랫폼에서 실행되는 프로그램 작성
- 애플이 최초 개발 후 AMD, Intel, NVIDA 가 함께 최초 제안서 제출
- NVIDA, AMD, Intel CPU/GPU와 임베디드 프로세서 등에서 동작[그래픽카드 상관 없음]
- 2008년 12월 8일 공식적으로 발표
3. Compute Shader
- OpenGL과 DirectX도 파이프라인이 필요 없는 compute shader을 제공함으로 GPGU를 위한 새로운 모델 제시
- CUDA 및 OpenCL과 유사한 쓰레드 관리 수단 및 인덱싱 방식 제공
- 그래픽 렌더링용으로 GPGPU를 주로 활용
4. C++ AMP(Accelerated Massive Parallelism)
- GPU의 병렬 처리를 이용하여 C++ 코드 실행의 고속화 목적
- C++ STL과 호환되는 다차원 컨테이너, 인덱싱, 메모리 전송 제공
- C++11에 추가된 람다함수를 이용하여 커널 함수를 기술
- 계산 도메인을 이용해 쓰레드 생성 개수를 정해 개발자에게 친숙한 C++에 가까운 프로그래밍 모델 제공
- Visual Studio 2012 이상 사용 가능
이외의 python에서 이용되는 GPGPU라이브러리 등등 많은 방법이 존재하지만 저는 위에서 사용되는 방법 중 한 개를 선택하기위해 위 내용만 조사했습니다.
해당 용도에 따라서 위 항목을 선택하신 후 공부하시는걸 추천드립니다.(CUDA에대해 공부하다보니 CUDA로 이런부분은 단점이 있다. 뭐 이런 내용이 간간히 보이더군요.... 물론 제가 해보진 않았습니다.)
읽어주셔서 감사합니다.
'GPGPU > CUDA' 카테고리의 다른 글
CUDA 설치 및 설치 실패 대처 (0) | 2022.02.18 |
---|---|
CUDA Host<->Device cudaHostGetDevicePointer (0) | 2020.10.27 |
CUDA 처리 구조 (0) | 2019.12.31 |
CUDA란? (0) | 2019.12.30 |
GPU 하드웨어 특징 (0) | 2019.11.11 |