본문 바로가기
프로그래밍/컴퓨터

[CS] GPGPU

by Sik.K 2023. 7. 11.

GPGPU란?

 

GPGPU는 General Purpose computing on Graphics Processing Unit의 약자이며

 

일반적으로 CPU가 처리하던 연산을 GPU에서 처리하도록 하는 것을 말한다.

 

 

보통 CPU는 복잡한 연산을 처리하기 위한 장치이고, GPU는 오로지 그래픽 부분의 연산만을 담당하는 장치이지만 CPU에서 담당할 경우 부하가 많이 걸리는, 예를 들면 단순하지만 반복 작업이 많이 들어가는 연산을 넘겨 받아 처리를 할 수 있다.

 

이런 방법은 GPU가 그래픽 처리를 위해 대량의 병렬 처리 유닛을 보유하고 있기 때문에 가능한 것으로 기존에 적용된 병렬 처리 기능을 강화하여 연산을 훨씬 대량, 효율적으로 가능케 한다.

 

현재는 각 그래픽 카드 회사마다 각 제품에 특화된 플랫폼이 있으며 대표적인 예로는 NVIDIA의 CUDA와 AMD의 OpenCL이 있다. 하지만 저마다 단점을 가지고 있기 때문에 상황에 맞는 선택이 필요하다.

 


 

장점

 

 

높은 병렬 처리 능력

 

그래픽 카드는 수많은 저수준의 코어를 장착하고 있기 때문에 단순 연산을 병렬로 빠르게 처리가 가능하다. 때문에 이를 이용하는 GPGPU 또한 높은 수준의 병렬 처리 능력을 보유한다.

 

 

비용 효율성

 

CPU보다 연산에 들어가는 비용이 훨씬 저렴하다.

 

 

에너지 효율성

 

GPU는 일반적으로 CPU에 비해 전력 소모량이 적다.

 

 

단점

 

 

병렬 작업 특화로 인한 순차적 작업, 혹은 제어문에 취약

 

태생적으로 GPU는 연산 처리에 특화되어 제작된 장치이기 때문에 if문과 같은 분기를 나누는 제어문에 취약하다. 또한, 병렬 작업을 위한 장치이기 때문에 당연히 순차적으로 이뤄지는 작업에서는 CPU 보다 처리 속도가 느리며 상위의 작업을 기다리는 바쁜 대기 현상이 일어날 수 있다.

 

 

메모리 관리의 복잡성

 

CPU와는 별도의 메모리를 사용하기 때문에 사용자(개발자)는 알맞은 자원을 적절한 타이밍에 GPU에 전달해줘야 한다.

 

이 경우 메모리 복사와 데이터 전송에서 일어나는 오버헤드가 발생하기 쉬우며, 관리가 어렵다.

 

 

 

메모리 제약

 

일부 그래픽 카드의 경우 CPU 보다 상대적으로 작은 메모리 용량을 가진다. 때문에 대규모 데이터 집합을 처리해야 하는 경우 문제가 발생할 수  있다.

 

기존 환경과는 다른 개발환경

 

API를 이용해야 하기 때문에 새롭게 공부를 해야한다. 단, NVIDIA의 CUDA의 경우 C 언어와 유사한 점이 있다고 하기 때문에 모든 플랫폼이 완전히 새롭지는 않다.

 

 

댓글