GPGPU - 1부

GPGPU - 1부

GPGPU (General Purpose computation on GPU) 란??

GPU 부터 알아보자 (간단하게)

GPU (Graphics Processing Unit) 은 다들 알겠지만 Graphics 연산을 위한 전용 하드웨어이다.
보통 외장 그래픽카드에 달린 가운데 큰 칩이다.
(그래픽카드는 GPU가 아니라 GPU와 메모리가 같이 달린 보드임.)
요즈음에는 CPU에도 내장 GPU가 같이 달려나온다.

Intel Core CPU 계열에는 HD graphics 혹은 Iris 라는 이름으로 나오고, AMD APU에는 외장 GPU를 조금 손봐서 같이 붙어있다. 제어판-장치관리자 에서 확인할 수 있음.
제어판에서 확인한 GPU

GPU는 원래 무슨 일을 하냐면 그래픽을 만든다... 가장 많이 쓰이는 곳이 게임.
게임 덕분에 상업성이 있어서 GPU가 지금까지 발전할 수 있었다. 고전적인 관점에서 영상보는 것은 사실 GPU와 전혀 관계가 없다.
영상은 인코딩된 데이터를 디코딩에서 틀어주는 것 뿐이고, 이는 GPU가 하는 일이 아니다.
자세한 그래픽에 관한 내용은 나중에 따로 다루겠다.

GPGPU는 무엇?

General Purpose compuation on GPU 의 약자다.
이름에서 알 수 있듯이 GPU에서 그래픽처리가 아닌 일반적인 연산을 한다는 개념이다.
대표적인 예로 요즈음 가장 핫한 것은 deep learning 이다.
Deep learning 의 경우, CPU로 수행 하면 엄청 느려서 대부분 GPU로 수행한다.
왜 빠른지는 또 다음에 다루도록 하겠다.
GPGPU 는 이 외에도 영상 처리, 입자 시뮬레이션, 대규모 수학 연산등 여러분야에서 쓰이고 있다.

GPGPU는 어떻게?

GPGPU는 당연히 일반적인 CPU에서 돌아가는 코드를 바로 돌릴 수 없다.
CUDA 혹은 OpenCL로 주로 코딩이 가능하며, SIMT execution model을 사용한다.
(SIME executiuon model 에 관한 내용은 다음에 GPU의 하드웨어 구조 및 왜 GPGPU가 빠른지에 대한 내용과 함께 같이 설명하도록 하겠다.)
CUDA가 가장 흔히 쓰이고 있는데, NVIDIA 에서 제공한 플랫폼(? 프로그래밍 모델?)으로, 프로그래머의 편의를위해 C랑 매우 비슷하다.
개인적인 생각으로는 CUDA코드를 잘 짜기는 매우 힘들지만... 그냥 짜는건 어렵지 않은 것 같다.

다음에는 GPGPU 예제 코드 및 실제 동작에 대해 설명하도록 하겠다.