뇌피셜 IT

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

easylearn 2021. 11. 28. 23:20
어쩌다보니 대략 2년이나 지나서야 작성하게 된다. 뭔가 시장에 결과가 나오거 나서야 예측하는 척 하는 것 같긴 하다만 시리즈물은 결론을 내어야 하는 성격상 3부를 마무리 짓고자 한다

더보기

믿거나 안 믿거나지만, 이러한 구조 출현의 예측은 2019년에 이미 하였다. 왜냐? NVIDIA에서와 AMD에서는 이미 관련 특허가 출원되었고, 이를 위한 전단계의 시제품은 이미 있었기 때문이다.

NVIDIA는 기업/연구실 연산용으로 2018년도에 HGX-2라는 가속카드를 내놓았다. 여기에서 그래픽 카드 간 연결에 NVlink라는 것을 써서 링크당 단방향 25GB/s로 총 대역폭 300GB/s를 구현하였다.

AMD에서는 이미 Ryzen의 CPU코어에서 인피티니 페브릭(Infinity Gebric)이라는 고속 데이터링크를 구현하여 사용하고 있었기에, 이 기술을 그대로 그래픽 카드에 가져오는 것은 당연한 기정사실이었다. AMD 또한 2019년 1월 ZEN2를 발표하며 인피니티 페브릭이 25GT/s를 실현하여, DDR4 3200Mhz 시스템에서 링크당 51.2GB/s를 구현하였다.

GPU FUTRE 은 총 3부로 구성되는 칼럼이다. 앞선 게시글에서는 GPU 성능 발전 방향의 한계를 지적하였다.
성능/칩셋 생산단가는 이제 단순 공정우위로는 달성하기 어렵다. 그렇다면 어떻게 해야 할 것인가?
이제 그에 대한 미래를 고민해 보고자 한다.


GPU의 미래도 결국은 CPU의 절차를 따라갈 수 밖에 없다. 단일 칩셋의 단가 상승이 이제 겉잡을 수 없이 올라가고 있기 때문이다. 아니 대안이 있었다면 왜 그래픽 칩셋 제조사(NVIDIA, AMD)는 이를 일찍 도입하지 않은 것인가라는 의문을 표할 수도 있겠다. 이에 대한 대답은 간단하다. CPU 처럼 멀티 칩셋을 구현하기 무지무지무지 힘들다는 거다.
본론을 들어가기 전에 그래픽 카드의 구조에 대해서 짚어봐야 한다. 기본적으로 GPU는 CPU와 발전 방향이 달랐기에 병렬화는 기본적인 전제로 개발이 되었다. 왜? 발전 방향이 다르냐?
한 기업의 조직구조에서 한 사람이 100명을 관리할 수 없어 10명 마다 1명의 관리자를 세워서 관료조직을 만들어 내듯이, GPU의 매우매우 작은 코어(편의상 CC; ChildChipset)들을 무작정 몰아넣고 하나의 관리 프로세서(편의상 MC; MotherChipset)가 처리할 수는 없는 법이다. 넣는다 해도 효율이 너무 떨어진다. 그래서 그래픽 제조사들은 이 최소단위의 코어와 이를 관리하는 관리 프로세서간의 비율을 최적화 해가며, 각자의 취향대로 이름붙여 아키텍쳐(Architecture; 칩셋을 제조하는 하드웨어적 구조)를 만들어 발전시켜 왔다.
NVIDIA의 경우 가장 최신의 암페어(Ampere) 아키텍쳐에서는 SM(Streaming Multiprocessor)라는 MC를 가지고 1MC마다 128개[64(범용;INT32+FP32)+64(전용;FP32)] 의 CUDA(Compute Unified Device Architecture)라는 CC를 가지고 있다. 그래서 플래그쉽인 RTX3090에서는 82개의 MC와 10,496이라는 무지막지한 숫자의 CC를 가지고 있다. 물론 5,376x2라는 CUDA구조라지만...
AMD의 가장 최신 RDNA2 아키텍쳐에서는 CU(Compute Unit)라는 MC를 가지고 1MC마다 64개의 SP(Stream Processor)라는 CC를 가지고 있다. 그래퍼 플래그쉽인 RX6900XT에서는 80개의 MC와 5120의 CC를 가지고 있다. 이것을 보고 NVIDIA보다 CC가 반토박이구나... 그래서 성능이 딸리겠다고 볼 필요는 없다. 왜냐하면 NVIDIA의 범용CC만 비교하면 AMD와 동급이기 때문이다. 같은 80MC를 가진 NVIDIA의 RTX3080Ti와 AMD의 RX6900XT는 범용CC만 보자면 5120으로 동일하며 게임 성능은 사실상 동급, AMD가 아주 소폭 앞서는 것을 볼 수 있다. 어쨋거나 GPU의 발전사(History)는 사실상 작은 코어인 CC와 관리 프로세서인 MC의 비율 최적화와 이 MC그룹을 얼마나 더 한 그래픽 카드에 박아 넣느냐의 싸움이었다. 이를 더 넣는 그래픽 칩셋이 사실상 그 시대의 게이밍-킹(Gaming-King) 플래그십(Flag-Ship) 그래픽카드가 되는 식이었다. 그래서 최신 공정을 먼저 사용하는 회사가 유리하였으며, 최신 공정은 또한 가격 또한 낮춰주는 마법의 무안단물이었다. 하지만 이 시대는 결국 종말을 맞았다. 최신 공정이 너무 비싸져버렸다. 아아 얼마나 비극인가? 그래픽카드 제조사들은 무안단물을 퍼가는 와중에서도 (그 한 시대에서는 더 이상 발전하지 않고 있는) 공정을 뛰어넘는 방법을 찾아냈다. 한 세대에서 최고가 되기 위해서는 이를 사용했다. 매우 비효율적이었지만 말이다.

NVIDIA의 SLI구성

1. 처음은 NVIDIA의 SLI(Scalable Link Interface)나 AMD의 CrossFire 같은 그래픽 카드 다중연결 방식을 사용했다. 이게 무슨 말이냐고? 그냥 그래픽 카드를 여러개 꼽고, 하나의 프로그램에서 그래픽 처리는 꽂은 다중의 그래픽 카드로 동시에 처리해서 일을 성능을 높이는 것이다. 이는 매우 비효율적인 방법이었다. DirectX12라는 윈도우용 종합 멀티미디어 라이브러리 버전이 2015년도에 나오기 전까지 그래픽 카드를 아무리 많이 꽂아서 연산을 공유하더라도, (1)한번에 연산 가능한 그래픽 카드의 메모리 용량은 늘어나지는 않았다. 또한 그래픽카드는 CPU의 데이터 전송로를 사용하는 데(PCI Express Lane이라고 한다) 이는 CPU와 메인보드의 칩셋에 따라 최대 개수가 제한된다. 그 결과 (2)최대로 꽂을 수 있는 그래픽 카드의 개수는 한정되며, 이마저도 (3)많이 꽂을 수록 효율이 떨어진다. 2개면 60~100%, 3개면 120~180%, 4개면 170~260%의 성능향상이 한계이다. 그리고 (4)꽂는 수만큼 전력량도 곱해진다. 그야말로 전기먹는 하마 기술인 것이다. 이 기술은 사실상 PC 2개 설치하고, 데스크탑끼리 10G 광랜을 연결 후 잘 설계한 프로그램을 2개의 PC의 CPU에서 동시에 처리하는 것과 같은 개념이다. 그래서 추가적인 제한사항이 있다. (5)프로그램 개발부터 개발자가 그래픽 카드 다중연결 방식을 위한 병렬로 게임이나 프로그램을 개발하지 않으면, 이 기능은 제공되지 않는다. 그리고 실제로 이 기능을 지원하는 개발은 매우 어려웠고, 지원하는 게임을 적었다. 그야말로 연구실에서의 연구나 데이터 분석을 위한 것 외에 3D Mark 같은 성능벤치마크의 숫자과시용 말고는 쓸모가 거의 없는 기술이다. 그래서 지금은 거의 사장되고 있다. 그래픽 카드 제조사에서는 이 기능을 더 이상 제공하려고 하지 않고 있다.

NVIDIA의 GTX690, 그래픽 칩셋을 2개 박은 것을 볼 수 있다 by TechPowerUp

2. 그 다음은 무엇이냐? 듀얼GPU라는 것을 만들어 내었다. 하나의 그래픽 카드에 2개의 그래픽 칩셋을 박아 넣는 것이다.

이게 위의 방법에서 나아진 방법은 단 몇 개 있다. (1)PCIe 레인을 1/2 쓰고, (2)전력이 2개의 다중연결 방식보다는 쪼오금 덜 먹는다는 것이다. 그 외의 단점은 그대로고, 실제로 개발자 입장에서의 병렬 처리를 위한 개발 난이도는 위의 것과 차이가 별로 없다. 즉 위의 단점 3개를 그대로 가져오고, 단일 그래픽 카드는 발열의 2배가 가까이 되었다.

인텔의 C621 칩셋의 듀얼 CPU장착 메인보드 by danawa

이는 CPU와 양상이 조금 달라진다. 위의 듀얼GPU 방식은 CPU에 있어서 듀얼 CPU 메인보드 방식과 같다. 그리고 예엣날 Intel에서 급하게 출시했던 펜티엄D와도 같다. CPU 내부의 캐시(CPU 내부 RAM이라고 이해하자)가 공유되지 않는다. 하지만 듀얼 CPU는 마이크로소프트의 운영체제인 Windows에서 병렬이 구현이 되어있다. 물론 개인용이 아닌 기업용 버전(Enterprise)에서 말이다. 그래서 듀얼CPU는 개발자 입장에서는 평소와 같이 개발하더라도 OS차원에서 병렬 계산을 지원해서 성능일 쭉쭉 오르겠지만, 듀얼GPU인 그래픽 카드에서는 게임마다 맞춰서 개발해야 하니.... 그림의 떡이다.
그래서 이 방법도 사장되다. 더 이상 개인용으로 듀얼GPU 그래픽 카드는 NVIDIA GTX690, AMD RX295X2 이후로 나오지 않고 있다.

AMD Zen3 Chiplet 구조
Chiplet인 Die0과 Die1을 연결하는 Infinity Fabric

3. 마지막 방법이 있다. 듀얼GPU에서 개념을 발전시켜, GPU간의 메모리를 공유하고 연산을 공유하는 구조를 사용하는 것이다. 이는 고상하게 멀티 칩 모듈(MCM; Multi Chip Module) 구조라고 부른다. 이를 AMD는 칩렛(Chiplet) 구조라고 명명하고, 칩렛의 연결은 초고속 데이터링크(Infinity Fabric; 인피니티 페브릭)을 사용하여 데이터를 공유한다.

32C 1Chipset은 8C x 4Chiplet보다 약 70% 제조단가가 높다

GPU 칩셋 제조단가는 여기서 주구장창 우려먹던 CPU 칩셋 가격처럼, 크기가 작을 수록 생산단가에서 유리하고, 크기가 커지면 수율이 떡락한다. 그래서 새로운 공정이 비싸지니 칩셋의 크기를 제한하고 이를 여러개 그래픽 카드에 박는 것이 유리하다. 이는 AMD가 Ryzen CPU를 제조하면서 인텔에 제조단가를 이기면서 증명했다.
문제는 이 그래픽 카드 안에서 각각의 칩셋(Die)를 연결하는 기술이 필요해 졌다. 기존에는 그냥 하나의 칩셋이었기에 이것이 문제가 안 되었으나, 이제는 여러 개의 칩셋으로 하나의 그래픽 카드를 구현하려면 이 칩셋들 사이의 데이터를 공유하는 데이터링크가 핵심 기술이 된 것이다.
다행히도 NVIDIA는 NVLink라는 기술을, AMD는 Infinity Fabric이라는 고속 데이터링크 기술이 있다. 그리고 아마 다음 세대에서는 AMD가 최초로 MCM 구조의 그래픽 카드를 내놓을 것으로 보인다. 물론 여기에서도 숙제가 있다. GPU Chiplet 간을 연결할 I/O 코어를 얼마나 잘 설계하느냐실제 CPU처럼 GPU에서도 MCM이 효과가 좋을지에 대해서다. 또한 이렇게 통합된 MCM-GPU를 운영체제가 어떻게 1개의 그래픽 칩으로 여기게 만들지에 대한 그래픽 드라이버 최적화가 중요하다. 물론 이론적으로는 아마 CPU처럼 성능은 잘 나올테지만, Infinity Fabric의 대역폭이 부족하다던지, I/O코어 연산 능력에서 병목이 일어난다면 이 또한 AMD 차기 그래픽 카드의 비극이 될 것이다.

+α. 이제는 GPU도 각 MC(MotherChipset; NVIDIA SM Unit / AMD CU Unit)의 IPC(Instruction per Clock) 성능을 높일 때가 왔다. 물론 지금까지도 해 왔지만 이는 MC와 CC의 최적비율을 찾아온 것에 가깝다. 이제는 단일 MC 성능 최적화도 필요한 것이다. 진짜 개꿀타이밍은 종말이 왔다.


3부 요약,

1. 단일 칩셋은 더 커지기에는 새로운 공정은 너무나 비싸졌다.
2. CPU에 이어서 이제는 GPU에서도 멀티 칩 모듈(MCM) 방식을 선택할 것이다.
3. 다만 MCM에서 Chiplet 간 연결하기 위한 데이터링크와 I/O칩셋의 완성도는 나와봐야 알 수 있다.
4. 그래픽 드라이버 완성도가 이제는 더 중요해졌다. 그래픽카드 제조업에서 이제는 SW비중이 더 커진다는 말이다.
5. 이제는 GPU에서도 각 연산 코어 그룹(MC; MotherChipset) 내 IPC 향상이 중요하게 되었다.