CPU와 GPU는 둘 다 데이터를 읽어들여 연산처리를 통해 답을 도출하는 기능을 수행합니다. 컴퓨터에서의 두뇌 역할을 한다는 점에서는 비슷합니다. 다만, 프로세서 내부의 구조를 살펴보면 CPU와 GPU는 차이가 큽니다.
CPU와 GPU 같은 프로세서 내부는 크게 연산을 담당하는 산출연산처리장치(ALU)와 명령어를 해석하고 실행하는 컨트롤유닛(CU), 각종 데이터를 담아두는 캐시로 나뉘게 됩니다.
먼저 CPU 내부 구조부터 살펴보겠습니다.
CPU는 명령어가 입력된 순서대로 데이터를 처리하는 직렬(순차)처리 방식에 특화된 구조를 가지고 있습니다. 즉, 한번에 한가지 명령어만 처리하게 되는데요. 그래서 연산을 담당하는 ALU의 개수가 많을 필요는 없습니다. 최근 출시된 옥타(8)코어 CPU에는 코어당 1개씩, 총 8개의 ALU가 탑재되어있습니다.
CPU 내부면적의 절반 이상은 캐시메모리로 채워져있습니다. 캐시메모리는 CPU와 RAM사이의 속도차이로 발생하는 병목현상을 막기 위한 장치입니다. CPU가 처리할 데이터를 RAM에서 미리 불러와 내부 캐시 메모리에 임시로 저장해서 처리 속도를 높일 수 있습니다.
CPU와는 반대로 GPU는 여러 명령어를 동시에 처리하는 병렬 처리 방식을 가지고 있습니다. 캐시 메모리 비중이 크지 않고 연산을 할 수 있는 ALU 개수가 많습니다. 1개의 코어에는 수백, 수천개의 ALU가 장착되어있다고 합니다.
정리하자면 CPU는 하나를 빠르게 처리하는데 특화. GPU는 여러개를 처리하는데 특화되었다고 볼 수 있겠네요.
이렇듯 CPU와 GPU는 그 구조가 다른만큼 쓰임새도 다릅니다.
쓰임새를 알기 전에 컴퓨터가 데이터를 저장하는 방법에 대해 알아야 합니다.
정수 : 0과 1의 수로 구분하여 저장
실수 : 고정소수점 혹은 부동소수점이라는 데이터 저장방식으로 저장
고정소수점(fixed point) : C#에서 decimal가 고정소수점 방식. 정밀한 표현이 가능하지만 표현할 수 있는 범위가 적습니다.
부동소수점(floating point) : C#에서 float, double가 부동소수점 방식. 훨씬 더 넓은 범위까지 표현할 수 있지만 오차가 발생합니다.
반면 GPU 제조사들은 CPU로는 시간이 많이 걸리는 부동소수점 실수 연산과 벡터연산을 가지는 멀티미디어, 특히 3차원 그래픽과 사운드를 잘 수행하도록 칩을 만듭니다. CPU를 10배 이상 초월하는 성능을 가지고 있다고 합니다.
게임 그래픽을 예를 들어볼까요? 1920×1080 해상도에 60FPS를 구현하려면 1초에 1920×1080×60(= 124,416,000)개의 픽셀을 그려내는 성능을 가져야 합니다. 1프레임으로 따지면 0.016초 안에 다 그려내야 합니다. 또한 3D 그래픽을 표현하기 위해서는 더 복잡한 절차를 거쳐야 하는데 이들을 모두 수행하려면 GPU가 필수적입니다.
GPU의 병렬처리의 우수성을 딥러닝에도 적용할 수 있습니다. 대용량의 벡터 데이터를 가지고 연산할 때 각 칼럼과 로우에 대한 합,곱 연산을 병렬처리하면 CPU를 통한 처리보다 빠르기 때문에 GPU를 사용하는 기술들이 발전하고 있습니다.
General Purpose computing on Graphics Processing Units
의 약자. 해석하면 GPU를 이용한 범용연산. GPU를 CPU가 맡았던 연산에 사용해 연산 속도를 향상시키는 기술입니다. 2000년 후반부터 GPU 진영이 그래픽 처리 분야를 넘어 고도의 계산을 요하는 수퍼컴 분야까지 속속 진출하게 되었는데 이때 각광받은 기술이 바로 GPGPU입니다.
GPU에게 연산을 시키려면 하드웨어적으로 몇 가지 요구 사항을 충족해야 합니다. 첫번째로는 프로그램 가능한 셰이더가 있어야 합니다. 또한, 데이터 자료형의 추가도 필요합니다.
GPGPU를 돌리기 위해서는 소프트웨어적으로 변환시키는 레이어 혹은 라이브러리가 필요한데, CUDA
와 OpenCL
이 많이 알려져 있습니다.
그 밖에도 CPU 쪽에서 GPU가 담당할 연산을 정해주는 문제, if 문과 같은 제어문에 취약한 문제 등이 GPU 사용에 대한 문제점으로 작용하고 있습니다.
GPGPU로 CPU 한 개에 비해 100배~250배의 속도 향상을 이룰 수 있지만, 병렬도가 지극히 높은 응용 프로그램에서만 이 정도의 혜택을 볼 수 있을 것이다. 한 개의 GPU 처리 코어는 데스크톱 CPU의 코어 한 개와 대등하지 않습니다.
GPU하면 사실 게임사양볼때 빼고는 별로 관심이 없었는데... 딥러닝을 공부하면서 CPU와 GPU 차이를 확실하게 느꼈던 경험이 있습니다. 그만큼 최근들어서 주가가 계속 상승하는게 GPU 아닌가 싶네요.
다음시간에는 그 유명한 암달의 법칙, 구스타프슨의 법칙, 리틀의 법칙에 대해 공부해보겠습니다.