NVIDIA가 무어의 법칙 이후를 향한 멀티 다이를 연구
NVIDIA는 GPU의 멀티 다이를 향해 나아가고 있습니다. 조만간 NVIDIA의 하이엔드 GPU는 하나의 거대한 다이가 아니라 2~4개의 다이로 구성될 것입니다. NVIDIA는 학회에서 앞으로 나올 GPU 아키텍처에서 여러 로직 다이를 패키징한 멀티 다이를 구현하는 방법에 대해 여러 차례 이야기했습니다.
NVIDIA가 구상한 앞으로의 GPU 아키텍처. 멀티 다이를 하나의 기판에 패키지.
멀티 다이 모듈을 여러 오프-칩 인터커넥트로 연결
하나의 거대한 GPU에서 작지만 많은 수의 GPU로
NVIDIA가 주최하는 GPU 컴퓨팅 컨퍼런스 GTC(GPU Technology Conference) 2019에서 멀티 다이로 나아가는 구체적인 방안을 밝혔습니다. NVIDIA의 연구 부문을 총괄하는 Bill Dally(William J. Dally, Chief Scientist and SVP of Research, NVIDIA / Professor(Research), Stanford University)는 GTC 기술 세션과 GTC에 맞춰 열린 설명회에서 멀티 다이를 위한 연구용 칩에 대해 설명했습니다.
주요 반도체 제조사는 연구를 위해 칩을 설계합니다. 인텔은 매년 다양한 연구용 칩을 학회해서 발표했으나, NVIDIA가 자사의 연구용 칩에 대해 설명하는 일은 드뭅니다. NVIDIA의 연구 부문을 총괄하는 Bill Dally는 연구용 칩에 대해 이렇게 설명했습니다.
"딥 러닝을 확장하는 실험을 연구하기 위해 프로토타입(칩)을 시연했습니다. 최근 테이프 아웃해 제조한 칩으로 테스트 중입니다. RC 18, '2018년의 리서치 칩'이라는 이름으로 부릅니다. 딥 러닝의 가속 칩이며 크기가 아주 작습니다. 작은 다이 하나에 16개의 PE(Processing Element)가 있습니다."
RC 18 칩은 상대적으로 작고, TSMC 16nm 공정으로 제조했으며, 트랜지스터 수는 8,700만 개밖에 안 됩니다. 또 1개의 다이가 아니라 여러 다이를 패키지에 넣은 멀티 다이 구성입니다. 36개의 다이를 기판에 배치한 MCM(Multi-Chip Module)으로, 여러 다이에 통합/확장 가능합니다.
많은 실험을 시도한 NVIDIA의 연구용 칩 RC 18
"이 칩은 많은 기술을 시연할 수 있다는 장점이 있습니다. 확장 기능합 딥 러닝 아키텍처와 유기 기판(Organic Substrate)에서 다이와 다이의 효율적인 전송 기술을 시연했습니다."
정확히 말해서 NVIDIA가 이 칩으로 입증한 기술은 4개입니다. 위에서 설명하지 않은 것 2개를 더해서요. 우선 객체 지향의 하이 레벨 합성 기반 설계 기법(OOHLS. Object-Oriented High-Level Synthesis), 파티션 단위로 클럭을 만드는 시스템(GALS, Fine-grained Globally Asynchronous Locally Synchronous), 확장 딥 러닝 아키텍처, 저전력 다이 사이의 전송 신호(GRS, Ground-Referenced Signaling)입니다. 또 앞으로의 GPU 내부 네트워크로 언급한 온 다이 메쉬 네트워크도 구현했습니다.
이 중에 Object-Oriented High-Level Synthesis(OOHLS)와 Fine-grained Globally Asynchronous Locally Synchronous (GALS)는 NVIDIA가 2018년의 DAC(Design Automation Conference)에서 발표한 내용이며, 칩 아키텍처도 여기서 발표했습니다.또 Ground-Referenced Signaling은 2018년 ISSCC(IEEE International Solid-State Circuits Conference)에서 발표했습니다.
간단히 말해서 앞으로의 NVIDIA 칩을 위해 필요한 멀티 다이 구현, 개발 도구, 클러킹 시스템, 내부 아키텍처 다이 사이의 확장 가능한 제어까지, 다양한 연구를 하나로 모은 칩이 RC 18입니다. RC 18 자체는 딥 러닝과 컴퓨터 비전을 위한 가속 칩이나, 여기서 시도한 기술의 대부분은 GPU를 비롯한 다른 칩에서도 쓸 수 있습니다. 바로 여기에 앞으로 NVIDIA GPU나 다른 칩의 개발 방향이 담겨져 있습니다.
RC 18 기반 아키텍처
RC 18는 TSMC의 16nm FinFET 공정으로 제조됩니다. 8,700만 개의 트랜지스터와 16nm 세대니 다이 크기는 비교적 작으나, 여기에 딥 러닝을 위한 PE(Processing Element)가 16개, 제어용 CPU 코어의 온 칩 글로벌 버퍼 메모리, GRS(Ground-Referenced Signaling)이 8링크 탑재됩니다. 실제 다이에선 GRS 링크가 상당한 면적을 차지하며, 1칩 당 GRS의 I/O 대역폭은 100GB/s입니다. 이 설계를 보면 멀티 다이의 실증을 위해 이 칩을 만들었음을 알 수 있습니다.
16개의 PE는 4x4로 배열, 구조는 Eyeriss와 비슷하다고 논문에서 설명했습니다. Eyeriss는 NVIDIA와 MIT(Massachusetts Institute of Technology)의 연구 프로젝트로 진행한 신경망 가속 칩으로 GTC 2016에서도 발표했습니다. 매우 낮은 전력으로 딥 컨버셔널 신경망(DCNN)을 실행합니다. NVIDIA가 관계된 신경망 프로세서는 그 밖에도 스탠포드 대학의 EIE, NVIDIA의 자체 구조인 DLA가 있는데 RC 18은 그것과 다른 PE를 기반으로 삼습니다.
각각의 PE는 처리 장치와 스크래치 패드, 메모리 제어 장치, 라우터로 구성됩니다. PE는 온 칩 메시인 Network-on-Chip(NoC)와 라우터를 통해 연결됩니다. NoC 형 상호 연결은 앞으로의 GPU 개념도에서 나온 바 있으며, 지금의 크로스바 스위치에서 GPU 내부 인터커넥트에 적용하는 방안도 고려중인 듯 합니다. 또 PC 18의 PE는 NoC에서 크로스바 스위치를 통해 온 칩 멀티 뱅크의 글로벌 메모리에 연결됩니다. CPU 코어는 AXI Bus를 통해 NoC에 연결합니다.
RC 18는 일반 CPU 코어도 들어 있습니다. RISC-V 명령어 세트의 아키텍처인 로켓(Rocket) 코어입니다. 로켓은 싱글 이슈/5스테이지의 간단한 CPU 코어입니다. arm Cortex-A5 급의 코어지만 arm보다 실장 면적이 작고 효율이 좋습니다. 로켓 코어의 역할은 글로벌 컨트롤러입니다. 각각의 PE 컨트롤 레지스터를 세트해 PE를 시작하고, PE의 스크래치 패드 메모리와 온칩 PE 공유의 글로벌 메모리, 오프 칩 메모리까지 메모리 계층에서 데이터 전송을 제어합니다.
RISC-V는 오픈 소스 CPU 명령어 세트 아키텍처로, 누구나 RISC-V 아키텍처의 CPU를 개발할 수 있습니다. 그러나 RISC-V 설계의 CPU를 오픈 소스로 만들 필요는 없으며, 상용 라이센스 CPU 코어를 만들어도 됩니다. 로켓은 US 버클리에서 개발한 초칭기 RISC-V 코어 오픈 소스라서 쓰기 쉽고, 대학을 비롯한 연구 기관에서 널러 사용 중입니다. NVIDIA의 2007년 이후 GPU는 Falcon(FAst Logic CONtroller)이라는 독자적인 프로세서 코어와 마이크로 컨트롤러가 다수 포함되나, 이것도 조만간 RISC-V 기반의 CPU 코어로 바뀌어 나갈 전망입니다.
SystemC/C++ 기반의 설계 흐름을 도입
RC 18은 설계 과정에서도 실험적인 시도를 했습니다. 현재의 SoC는 방대한 트랜지스터로 구성되며 설계가 복잡해 설계 과정이 큰 부담입니다. NVIDIA는 SystemC에서 C++ 구성 요소의 객체 지향 라이브러리로 하이레벨 프로그래밍 언어를 사용해 합성 설계를 쉽게 하는 구조를 RC 18에서 시도했습니다. 단순히 말하면 SystemC에서 설계를 끝내겠다는 이야기입니다.
칩의 회로 설계는 수동 회로도에서 하드웨어 기술 언어(HDL : Hardware Description Language)로 넘어가고, 소프트웨어 컴파일에 해당되는 합성으로 RTL(Register Transfer Level)에서 실제 회로 설계로 변환해 칩 설계를 간단하게 수행합니다. 그러나 Verilog, VHDL 같은 지금의 HDL은 추상도가 낮아 칩의 합성에 많은 하드웨어 설계가 필요합니다. 그래서 보다 추상도가높은 언어로 설계하자는 분위기가 있습니다.
C ++ 클래스 라이브러리 인 SystemC는 그 대표적인 방법이나, 칩을 모두 SystemC로 설계해 RTL로 자동 변환(합성)해서 넷리스트까지 만드는 설계는 많이 보급되지 않았습니다. RTL로 자동 변환하고 이를 최적화하기 어려워서입니다. NVIDIA가 주목한 부분이 바로 여기로 Object-Oriented High-Level Synthesis(OOHLS)로 SystemC/C++ 모델을 RTL 합성해 디자인을 최적화하는 방법을 만들어냈씁니다.
보편적인 하드웨어 구성 요소 라이브러리 화도 진행합니다. MatchLib 라이브러리는 라우터와 프로세서의 데이터 경로 SerDes를 비롯한 커널 부분까지 포함합니다. RC 18는 SystemC 아키텍처 모델을 로켓 코어 외에 모든 구성에 도입할 예정입니다.
로켓 코어를 제외하는 이유는 오픈소스 하드웨어 기술 언어인 Chisel을 사용해서 로켓을 만들었기 때문입니다. RISC-V 초기 오픈소스 코어는 Chisel 기반이 많습니다. Chisel는 Scala을 토대로 추상도를 높이고 생산성을 향상시키기 위해 도입했으나, 여기에선 C++ 기반 SystemC를 쓰기에 로켓 코어는 제외했습니다.
그 밖에도 RC 18은 새로운 클러킹 기법인 파티션 단위의 세분화 클럭 생성 Fine-grained Globally Asynchronous Locally Synchronous (GALS)을 채용했습니다. 각 파티션마다 작은 로컬 클럭 제네레이터가 있으며, 파티션 사이의 클럭 동기화는 비동기 핸드 쉐이킹 신호가 구현됩니다.
OOHLS과 GALS 등의 새로운 설계 시도는 분명 대현 칩을 대상으로 한 것입니다. 하이엔드 GPU 같은 몬스터 칩에서의 구현을 염두에 둔 듯 합니다. NVIDIA가 칩 설계에서 EDA 툴에 모든 것을 맡기지 않고, 협력은 하돼 더 높은 효율을 찾아나고 있다 보입니다. 거대하고 복잡한 칩을 낮은 노력으로 설계할 수 있게 하여 설계 생산성을 높이는 게 NVIDIA의 방향입니다. 이런 시도는 설계 시간의 단축과 제품 다양성 증가로 이어집니다.
이처럼 RC 18은 설계 흐름과 내부 네트워크 등 다양한 부분에서 실험적인 시도가 이루어졌으나, 그 핵심은 멀티 다이 구현입니다. 다음번엔 RC 18의 코어에 대해 보겠습니다.