
CPU와 GPU는 뭐가 다를까??
왜 AI가 뜨면서 GPU가 주목받고 있는걸까??
이 두 가지 관점으로 한 번 살펴보고자 한다.
Central Processing Unit (중앙 처리 장치)
말 그대로 컴퓨터의 중심(Center)이다.
사람으로 비유하자면 뇌(brain)에 해당한다고 볼 수 있다.
PC의 여러 장치들의 연산과 제어를 관리하고 제어한다.

CPU는 수많은 트랜지스터(Transistor)의 집합이다.
M1 Max의 경우 무려 570억개의 트랜지스터가 들어있기도 하다...
이 트랜지스터의 기능은 크게 두가지가 있다.
바로 증폭(Amplification)과 스위칭(switching) 이다.
트랜지스터에 대한 자세한 내용은 이 주제에 대한 핵심이 아니므로 생략하고,
트랜지스터를 일종의 스위치라고 생각하면 (전류가 흐르면 1, 흐르지 않으면 0)
트랜지스터 2개를 병렬로 이을 경우, 논리(logic) 연산 중 OR에 해당하고
( 둘 중 하나만 ON 되면 전체 결과가 ON이므로)
2개를 직렬로 이을 경우, AND에 해당한다.
( 두 스위치가 모두 ON 되어야 전체가 ON 되므로)
이런 식으로 여러 개의 트랜지스터를 이용해 Logic gate를 만들 수 있다.
이러한 논리적인 회로를 통해 산술연산도 가능하게 끔 한다.

컴퓨터의 구성 요소를 보면 SSD와 HDD와 같은 보조기억장치가 있다.
HDD에 비해 SSD가 훨씬 빠르긴 하지만, 그래도 CPU에 비하면 너무 느리다.
그래서 Main Memory라 불리는 RAM(Random Access Memory)를 중간에 둔다.
RAM도 종류가 많이 있는데, 보통 DRAM을 메인메모리로 쓴다.
참고로 SSD, HDD와 같은 장치는 non-volatile, RAM은 volatile memory다.
즉, 전원이 꺼지면 RAM은 모두 날라가고 보조기억장치는 남아있다.
아 그리고, 동작 속도를 높이기 위해서
자주 사용되는 data를 예측해서 Cache-memory라는 공간에 저장해두기도 한다.
(얘도 사실 RAM의 일종이다, SRAM을 주로 씀!)
우리가 작성한 소스코드, 즉 프로그램(Program)은 보조기억장치에 저장되어있다.
이 프로그램을 실행시키고자하면 메인메모리에 올라가게 되는데,
그 상태를 프로세스(process)라고 한다.
CPU는 이 RAM에 올라가있는 data를 가져오게 되는데,
이 과정을 fetch라고 한다.
그리고 나서 Control Unit이 명령어(command)를 decode(해석) 한다.
해석 된 data를 ALU에서 연산을 하고, CPU내 레지스터에 연산 결과를 임시 저장한다.
이 과정을 execute라고 한다.
fetch - decode - execute 이 세 과정을, Instruction cycle이라고 한다.
이러한 방식으로 CPU는 컴퓨터의 전반적인 동작을 지휘한다.

CPU는 적은 양의 고성능 ALU,
GPU는 많은 양의 단순한 연산을 처리할 수 있는 ALU를 가지고 있다.
대충 비유를 해 보자면,
CPU는 똑똑한 교수 1명(single core 기준),
GPU는 초등학생이 엄청 많이 있다고 볼 수 있다.
만약에, 교수에게 1+2, 3*4 와 같은 아주 간단한 사칙연산 1000개를 하라고 시키면 어떻게 될까?
이게 바로 GPU를 쓰는 가장 큰 목적이다!!
아래 그림을 통해 그 차이를 조금 더 구체적으로 살펴보자.

CPU는 한 번에 하나씩 task를 순차적으로(sequential) 처리한다.(single core 기준)
반면 GPU는 많은 양의 task를 한 번에 병렬적으로(parallel) 처리한다.
CPU는 프로세스의 속도(speed)를 높이기 위한 방향으로 설계되었으며,
GPU는 처리량(throughput)을 늘리도록 설계가 되어있더.
CPU는 더 많고 다양한 instruction을 처리할 수 있는 것들이 내장되어있어
복잡하고 어려운 연산을 할 수 있다.
그래서 컴퓨터의 기본적인 산술, 논리, 제어, 입출력 등 다양한 연산이 가능하다.
반면 GPU는 가능한 연산의 수가 제한적이다. (instruction set이 적음)
그리고 embarrasingly parallel 한 task에 적합하다.
( 다른 task와 의존성이 거의 없는 task를 뜻함)
그러다면 왜 GPU가 AI시스템에서 선호가 되는걸까?

Deep learning은 위 그림과 같은 neural network를 사용한다.
엄청나게 많은 data가 들어오고, 많은 연산이 요구된다..
그런데 그 구조는 생각보다 단순하다!?!

보통은 이러한 matrix 끼리의 곱 연산이 많이 필요하다.
그런데 정작 까놓고 보면, 각 요소의 곱하기 와 더하기로 이루어진 단순한 연산이다.
이러한 단순한 연산들이 어어어엄청나에 많은 data에 대해 이루어진다.
즉, GPU에게 더 적합하단 소리다!
GPU는 원래 이름에서부터 유추할 수 있듯이 Graphic processing을 위해 만들어졌다.
근데 이와 같이 general 한 목적으로 쓰이는 것을
GPGPU(General Purpose computing on Graphics Processing Units)라고 부른다.
ref
each icons : https://www.flaticon.com/kr/
http://www.tcpschool.com/deep2018/deep2018_deeplearning_intro
https://www.youtube.com/watch?v=8IqQQg13Xbc
https://www.youtube.com/watch?v=tsB97IAejbk
https://www.youtube.com/watch?v=ZdITviTD3VM
https://www.youtube.com/watch?v=Fg00LN30Ezg