뇌피셜 IT

[GPU FUTURE] 그래픽 카드의 미래 1부

easylearn 2020. 2. 2. 06:02
GPU FUTRE 은 총 3부로 구성되는 칼럼이다. 그래픽 카드의 특성은 무엇이고, 현재 어디까지 발전했으며, 앞으로는 어떤 방향으로 발전해 갈 것인지를 조망해 본다. 이런 조망을 통하여 향후 어떤 연관 기술과 기업이 유리하고 앞서 나갈 수 있을지도 추측해 보고자 한다.


GPU란 무엇인가? 그래픽 카드란 무엇인가?
그래픽 카드는 원래 디지털 신호를 영상신호로 바꾸어 모니터에 표시해 주는 CPU (Central Processing Unit; 중앙 처리 장치) 연산을 해 주는 보조 장치였다. 시간이 흐를수록 이런 그래픽 작업은 그래픽 카드로 특화되어 발전되어 기능의 분화가 이루어졌다. 이후 2D에서 세밀하고 다양한 색상을 표현하며, 복잡한 3D 그래픽이 등장하면서 그래픽 작업은 그래픽 카드의 기능으로 완전히 분리되게 되었다. 현재는 연산은 CPU가, 그래픽 작업은 그래픽 카드가 전담하고 있다.
그럼 GPU는 무엇인가? 사실 그래픽 카드는 그래픽 작업을 위한 여러가지 유닛을 포함한 그래픽 확장 장치를 이르는 말이다. 그 유닛 중에서 가장 중요한 그래픽 작업을 계산하는 요소가 GPU(Graphics Processing Unit; 그래픽 처리 장치)가 된다. 그래픽 카드 = 기판 + GPU + 그래픽 메모리 + 전원부 등으로 구성된다. 하지만 통상적으로 GPU라는 말로 그래픽 카드를 지칭한다.
미리 말한 것과도 같이 GPU는 CPU의 그래픽 처리 부분을 특화시켜 발전했다. 그렇기 때문에 CPU와 GPU는 다른 특성을 가질 수 밖에 없다. 서로의 약점을 보완해 주는 것으로 봐도 좋다.

1. CPU와 GPU는 무엇이 다른가

둘의 차이를 알려면 그래픽 작업의 특성에 대하여 알아야 할 필요가 있다.
혹시 FHD (1920x1080) 모니터의 화면은 어떻게 출력되는지 아는가? 기본적으로 FHD는 2,073,600(=1920x1080) 픽셀로 구성되어 있다. 그래픽 카드는 저장장치에 있는 화상 디지털 정보(사진or영상)를 각 픽셀에 맞게 색상을 계산하고 배치해 모니터로 전송해 준다. 이 정보가 모니터에 출력되는 것이다. 만약 움직이는 영상은 어떻게 되는가? 만약 60프레임의 영상이라면, 1초마다 1억 2441만 픽셀의 정보를 계산(픽셀 파이프라인)하여 모니터로 출력(랜더 아우풋 유닛; ROP)해 준다. 여기서 3D 게임이라면? 색상 계산 외에도, 피사체 내부 표현을 위한 테셀레이션(테셀레이터), 피사체 표면을 표현하기 위한 텍스쳐링(텍스처 유닛)과 표면의 광원과 그림자등의 하드웨어 렌더링을 위한 쉐이더링(스트림 프로세서; SP; CUDA)도 해야 한다. 이는 게임이 단순 영상보다 그래픽 사양을 더 잡아먹는 원인이 된다.
번외로 만약 4K (4096x2160) 모니터로 60프레임을 재생한다면? 1초마다 5억 3082만 픽셀의 정보를 계산해 모니터로 출력해 줘야 한다. 3D게임의 처리량도 FHD의 4배 정도 되어 버린다.
이렇게 보면 복잡해 보이지만 GPU가 할 일은 간단하다.

GPU = 픽셀 처리(픽셀 F/L) + 폴리곤화(테셀레이터) + 텍스쳐링(텍스처 유닛) + 쉐이더링(SP;CUDA) + 모니터로 출력(ROP)


특징으로는 각각의 픽셀에 대하여 계산하는 것이 중요한 게 된다. 이는 굳이 복잡한 하드웨어 구성이 아니어도 된다는 구현적 형태를 보여준다. 이게 왜 간단하단 말인가? 의문을 표할지 모르겠지만, CPU는 말 그대로 컴퓨터의 전반적인 처리를 도맡아 해야 하기에, 처리하는 명령어가 복합하고 많다. 아래는 살짝 맛보기다.

번지 지정 방식 데이터 지정 즉시 모드, 직접 지정, 간접 지정, 레지스터 직접 지정, 레지스터 간접 지정
기계어 코드 위치 지정 절대 주소 지정, 프로그램 카운터 상대 지정, 레지스터 간접 지정
명령어의 기능 및 종류 ALU에 의한 연산 명령어 더하기와 빼기, 곱하기와 나누기, 비교 명령어, 논리 연산 명령어, 시프트 명령어
데이터 전송 명령어  
실행 제어 명령어 점프 명령어, 조건 점프 명령어, call-return 명령어
기타 명령어 인터럽트 명령, 입출력 전송 명령, 특권 레벨 제어

어떤가? 이걸보고 GPU 역할을 보니 정말 쉬워 보이지 않는가? 그래서 이렇게들 말한다. GPU는 사칙연산을 하는 초등학생이고 CPU는 미적분과 벡터연산을 하는 수학과 교수라고 말이다. 물론 CPU로 GPU 연산을 대신 할 수 있다. 다만 닭 잡는데 소 잡는 칼 쓴다고, 교수님 데려다가 초등학생 구몬 학습지를 풀게 만드는 격이다.

2. CPU와 GPU의 발전 방향

1번의 내용을 종합해 보자면, CPU는 복잡하고 어려운 계산을 빨리 해야 하고 GPU는 간단한 계산을 한번에 많이 (해상도만큼) 해야 한다. 그래서 발전 방향도 전혀 달라지게 되었다.

  • CPU의 경우

컴퓨터의 CPU는 위의 표에서 나온 계산을 넘어서 더 복잡한 명령어인 SSE와 AVX등의 명령어를 다뤄야 했다. 그러기 위해서는 코어 하나의 성능을 올려야 할 필요가 넘쳤다. 그러기 위한 가장 쉬운 방법은 무엇이었을까? 바로 CPU의 클럭을 높이는 것이었다. 클럭은 CPU가 1초에 몇 번의 동작을 하느냐를 나타내는 단위였다. 당연하겠지만, 1초에 많은 동작을 할수록 계산 능력이 좋아진다. 요즘 AMD의 핫한 CPU - 라이젠 7 3700x는 기본클럭이 3.6GHz로 1초에 36억의 동작을 한다.
그래서 2000년대 초까지의 CPU는 (지금보면 익숙하지 않겠지만) 1코어 CPU에서 클럭만 높여가는 것이었다. 당연히 1초에 동작을 많이 시키면 (=클럭을 높이면) 열이 많이 발생하게 되는데, 이는 반도체 공정 (= CPU 회선 폭)이 낮아지면서 열을 낮추었기에 충분히 가능했다. 어느 때 까지는.

CPU의 클럭 변화 (stanford, cpudb)

전설의 보일러, 인텔의 펜티엄4 프레스캇에 이르러서 클럭을 높인만큼의 발열처리가 불가능해졌다. 그래서 (2000년대 당시) 4GHz 이후로 클럭을 높이기 힘들어졌고, 무리하게 높인 결과 인텔은 활활 타는 보일러를 야심차게 출시하게 되었다. 이를 4 GHz의 벽이라고 부른다.

펜티엄4 프래스캇으로 계란 후라이 하기

실제로 필자가 어릴 적 펜티엄4 프래스캇을 쓴 컴퓨터를 사용했는데, 겨울만 되면 컴퓨터가 있는 방은 보일러 없이도 뜨끈뜨끈했다. 또한 여름에는 사우나가 따로 없었드랬다.
4GHz의 벽을 마주한 이후, CPU의 클럭당 처리 효율(IPC; Instructions Per Cycle)을 높였다. 여기서 성능 향상에 한계에 부딛히자 어쩔 수 없이 코어 수를 하나 둘씩 높여갔다. 2000년대 중반부터 (펜티엄4 프래스캇 후부터) 코어가 증가하는 것을 알 수 있다.

CPU 성능의 시대별 발전 (Youtube, GNU Radio)

2005년 AMD의 애슬론 64 X2 (듀얼코어)를 시작으로 2020년 일반 사용자용은 AMD의 라이젠 9 3950X (16코어)까지 코어가 늘어났다. 아직까지는 일반 사용자용으로는 16코어가 최대고, 2019년은 일반적으로 6~8코어의 CPU가 시장의 주류다. INTEL의 i5-9400F~i9-9900K / AMD의 R5 3500~R7 3800X가 여기에 해당된다. 부가로 서버용으로 AMD의 Epyc 7742는 64코어로 가장 많은 코어를 가지고 있다.

  • GPU의 경우

1번의 내용을 종합해 보자면, GPU는 단순한 계산을 한번에 많이 해야 한다. 그렇다면 간단하다. 단순한 기능의 코어(연산 유닛)를 수없이 많이 한 칩셋에 넣으면 되는 것이다. 즉 CPU의 아주아주아주 간단한 부분을 작게 만든 게 GPU에 들어있는 연산유닛이라고 생각하면 된다. GPU는 연산유닛 하나가 성능이 좋아질 필요가 없다. 그냥 갯수만 많으면 성능의 향상으로 이어지는 것이다. 연산유닛 하나의 성능을 높일 노력을 쏟느니 얼마나 더 박을까 고민하는 게 낫다는 사실.
반도체 공정(= 회로 폭)이 발달할 수록, 같은 공간에 넣을 수 있는 그래픽의 연산 유닛 수는 늘어났고 그대로 그래픽 카드의 성능 향상으로 이어졌다. 어쩌면 CPU보다 성능 향상이 간단하다고 볼 수 있다. 하지만 이 수 많은 연산 유닛에 그래픽 데이터를 잘 분배하는 것은 제조사의 노하우였고, 운영체제에 설치하게 되는 그래픽 드라이버에 이게 녹아들어있다. INTEL이 아직도 그래픽 카드 분야에서 죽 쑤는 이유다. CPU와 GPU의 주안점이 다르기에 단순간에 따라잡기가 힘들다. CPU는 하드웨어 자체의 성능 향상에 집중한다면, GPU는 많은 연산 유닛을 드라이버 단(하드웨어와 소프트웨어 사이에서 연결하는 요소)에서 얼마나 잘 처리하느냐에 집중하는 것이다. 그래서 그래픽 드라이버의 완성도에 따라서 그래픽 카드 성능이 올라가기도 한다. 이 말은 초창기 그래픽 드라이버가 그래픽의 성능을 다 쓰지 못했다는 말이기도 하다. AMD가 유독 그렇다. INTEL은 성능을 끌어 올리지도 못하니까 논외다.

그래픽 카드 FP32 성능 (shoalgroup)
1달러 당 성능 (techbuyersguru)

CPU에 비하여 성능 발전이 둔화되지 않고 지속적으로 발전해 온 것을 알 수 있다. 왜냐하면 그냥 연산 유닛만 많이 박으면 되는 거라서 그렇다.

1부 요약,

GPU = 모자이크 그림을 만들기 위한 초등학교 전교생
CPU = 논문을 써 내려가는 많아봐야 10명 내외인 연구소의 박사들