커스텀 테그라 SoC를 탑재하는 스위치
닌텐도가 새로운 게임기인 닌텐도 스위치(Nintendo Switch)에서 NVIDIA의 테그라(Tegra)를 사용합니다. 닌텐도가 NX라고 이름 붙였던 차세대 기종에 테그라를 사용한다는 소문은 올해(2016 년) 봄 무렵부터 반도체 업계에 널리 퍼져 있었습니다. 칩 분야의 컨퍼런스에선 그 소문이 꼭 나올 정도였지요.
NVIDIA에 따르면 닌텐도가 쓰는 건 커스텀 테그라입니다. 실리콘 수준에서 커스텀한 것인지, 기존 테그라의 기능을 일부 해제한 칩인지는 발표되지 않았습니다. 그러나 닌텐도 게임기의 핵심인 CPU 칩은 기존에도 커스텀 설계였으니, 이번에도 칩 레벨에서 물리적으로 정의된 테그라일 가능성이 높습니다. 그러나 NVIDIA의 IP를 그대로 쓸 수도 있어 세미 커스텀 방식이라고 추측됩니다.
닌텐도가 NVIDIA를 선택한 것은 의외로 보일지도 모릅니다. 그러나 NVIDIA는 사실 과거에도 닌텐도 게임기를 개발할 때 칩 제공 분야에서 접촉한 바 있습니다. NVIDIA의 기술 담당 직원이 닌텐도를 방문해 자사 기술에 대해 설명하고 닌텐도도 검토했었던 적이 있습니다. 닌텐도 입장에선 할 수 있는 모든 기술을 검토하는 것이 당연하나, 이전에는 NVIDIA와 교섭이 이루어지지 못했습니다.
NVIDIA와 닌텐도의 결합이 지금가지 게임기에서 결실을 내지 못한 이유는 몇 가지가 있습니다. 어떤 업계 관계자는 닌텐도가 게임기 칩을 개발할 때, 일본의 반도체 제조사가 중간에 끼는 구조를 갖고 있었음을 이유로 꼽습니다. 실제로는 어떨지 모르겠으나, 닌텐도와 NVIDIA 사이에서 뭔가 알력이 있었던 것으로 보입니다.
게임기 칩의 개발에선 파트너 기업의 멤버도 달라져 왔습니다. 닌텐도의 기존 파트너인 IBM은 이제 쓸 수 없습니다. 또 모바일 SoC를 탑재한 모바일 디바이스가 강력한 게임 플랫폼이 됐습니다. 그 중 모바일과 PC, 콘솔에 모두 줄을 대고 있는 NVIDIA가 닌텐도 스위치의 파트너가 된 건 자연스러운 것이라 할 수 있습니다.
여전히 수수께끼인 스위치의 제조 공정과 마이크로 아키텍처
닌텐도 스위치가 커스텀 테그라라는 건 알려졌으나, 그 내용은 아직 베일에 싸여 있습니다. 커스텀 테그라가 어떤 세대의 테그라를 기반으로 하는지는 아직 알려지지 않았습니다. CPU와 GPU의 마이크로 아키텍쳐와 제조 공정 기술이 모두 불분명합니다.
NX의 칩은 테그라 X1 기반이라는 보도가 여름 이전부터 흘러나왔습니다. 테그라 X1은 NVIDIA의 게임 콘솔인 쉴드에 탑재된 칩으로 TSMC의 20nm 공정으로 제조됩니다. 그러나 2017년 3월이란 발매 시기를 감안하면 20nm 프로세스는 생각하기 어렵고 최소한 제조 공정은 16nm FinFET 공정일 가능성이 높습니다.
파운드리도 20nm 평면 프로세스에서 16/14nm FinFET 공정으로 전환하고 있습니다. 따라서 2016년부터 2017년 사이의 게임기는 모두 FinFET 공정에 돌입하게 됩니다. 2017년이면 10nm 공정의 양산이 시작되나, 게임기는 출시 전에 게임 개발을 진행해야 하니 소량으로 생산되는 첨단 프로세스를 쓰기란 어렵습니다.
NVIDIA의 테그라 SoC는 20nm 프로세스로 만든 것이 테그라 X1(Erista)입니다. CPU 코어는 ARM의 Cortex-A57 쿼드코어와 Cortex-A53 쿼드코어로 총 8 코어. GPU 코어가 맥스웰 아키텍처로 256 정수 유닛으로 구성되며 메모리는 LPDDR4x64입니다. 16nm 프로세스는 일반적으로 테그라 X2(테그라 P1)으로서 파커 CPU는 NVIDIA가 개발한 덴버2 듀얼코어와 Cortex-A57 쿼드코어. GPU 코어가 파스칼 아키텍처의 256 정수 유닛 구성에 메모리는 LPDDR4x128입니다.
20nm 테그라 X1의 구성
16nm 파커의 구성
테그라 X1과 파커. 기존 테그라 K1과의 비교
테그라 X1은 모바일을 어느 정도 의식해서 설계했지만, 파커는 차량용에 꽤나 치우쳐진 디자인입니다. 테그라라는 이름은 같아도 성격은 전혀 다른 SoC입니다. 테그라 X1의 구성은 2017년의 게임기 치고는 빈약합니다. 왜냐하면 2017년에는 모바일 기기가 10nm 프로세스에 돌입하기 때문입니다. 그러나 파커의 구성은 스위치같은 모바일 디바이스 치고는 전력 사용량이 다소 높은 편입니다. 그런 점에서 닌텐도가 커스텀했을 가능성이 높습니다.
CPU 명령여 셋트 아키텍처는 ARMv8
닌텐도 스위치는 테그라를 사용하니까 CPU 코어의 명령어 세트 아키텍처(ISA)는 ARMv8-A가 분명합니다. ARMv8-A는 64비트 확장된 ARM의 A 계열 명령어 세트(ARM은 Cortex-A / R / M가 명령어 집합이 다름)입니다. ARMv8-A는 게임기에서는 새로운 ISA지만 스마트폰과 태블릿의 CPU 코어는 대부분이 ARMv8-A니 친숙하다 할 수 있습니다. 또 ARMv8-A 명령어의 CPU는 64비트 및 32비트 모드를 모두 실행할 수 있습니다.
ARM 명령어 자체는 닌텐도 플랫폼에서 익숙한 편입니다. 3DS는 듀얼코어 ARM11과 싱글코어의 ARM9을 탑재했습니다. ARM11는 ARMv6 명령어 세트 아키텍처입니다. 그 전신인 닌텐도 DS도 ARMv5 명령 세대의 ARM9 코어였습니다. 과거 닌텐도의 하드웨어는 모두 32비트 명령 아키텍처의 ARM 코어를 썼습니다. 같은 ARM 명령어 계열이라 해도 64비트로 확장된 ARMv8-A는 닌텐도 하드웨어 최초입니다.
덧붙여서 PS 비타도 ARM의 Cortex-A9 쿼드코어인데, 이건 32비트 ARMv7-A 명령어 코어입니다. 게임기 중에선 64비트 ARM 명령을 쓴다는 게 새로운 점입니다. ARM 명령어 세트는 ARMv8-A 64비트에서 명령을 수정해 그 체계게 크게 다릅니다. 기존의 ARM 계열 명령(ARM 및 Thumb 등)은 특별 명령어를 포함하지만, ARMv8 64비트 명령은 일반적인 RISC 방식으로 바뀌었습니다. 게임기 CPU의 아키텍처는 원래 PowerPC 계열이 차지했고, 그 전에는 MIPS, x86, PowerPC가 공존했습니다. 허나 지금은 x86(PS4와 Xbox One)과 ARMv8의 구도가 됐습니다.
NVIDIA의 현 테그라 계열 SoC의 CPU 코어는 모두 ARMv8 명령어 셋트이며, 2개의 코어를 사용합니다. 하나는 ARM이 개발한 Cortex-A 시리즈 CPU 코어고 다른 하나는 NVIDIA가 개발한 덴버 계열입니다. 스위치의 CPU는 그 두가지가 메인 CPU 코어로 쓰이느냐가 관건이 될 것입니다.
파커의 CPU 코어 구성
NVIDIA가 독자 개발한 ARM 명령어 기반 CPU 코어, 덴버
ARM은 일정 이상의 성능을 가진 CPU 코어는 자사 IP를 제공하는 정책이 있습니다. ARM 명령어 세트의 고성능 CPU 코어를 원하는 업체는 ARM에서 아키텍처 라이센스를 받아 ARM 명령어와 호환되는 CPU 코어를 개발하고 있습니다. 같은 ARMv8 명령을 실행해도 마이크로 아키텍처가 완전히 다르기에 ARM 자체 코어와 비교하면 성능이 더 높기도 합니다. NVIDIA의 덴버는 그러한 코어 중 하나이며, 애플, 퀄컴, 삼성 등이 직접 고성능 CPU 코어를 개발하고 있습니다.
NVIDIA의 덴버는 특수 마이크로 아키텍처를 사용합니다. 덴버 계열 CPU는 ARM 명령어를 명령 디코더가 2명령/사이클의 내부 마이크로 명령으로 변환, 이를 그대로 수행하면서 여러번 실행되는 패스는 별도의 최적화를 수행합니다. 그 결과 최대 7개까지 병령화된 마이크로 명령을 최적화 캐시(온 메모리)에 저장해, 다음번에 최적화된 코드를 실행합니다. 이런 최적화를 통해 최대 7+의 IPC(Instruction-per-Clock)를 달성할 수 있습니다.
트랜스메타 CPU의 하드웨어 어시스트 버전과 같은 구조로 된 덴버는 싱글스레드 성능이 높으나 다소 단점도 있는 아키텍처입니다. 또 덴버는 ARM 자체 CPU 코어와 비교하면 다이 면적이 꽤 큽니다(이건 애플도 마찬가지임).
덴버의 블럭 다이어그램과 동적 코드 최적화
반면 ARM Cortex-A57와 그 후속작인 Cortex-A72는 더욱 일반적인 형태의 아웃 오브 오더 CPU 코어 설계를 사용합니다. 3 명령 디코딩 하드웨어 스케줄링이 병령 실행하는 구조입니다. 테그라 X1에선 Cortex-A57과 Cortex-A53를 조합하지만 이건 부하가 낮을 때 저전력 Cortex-A53로 전환하여 소비 전력을 억제하기 위해서입니다. 파커에서 NVIDIA는 덴버 2와 Cortex-A57를 조합했는데 이는 주 목표가 자동차니 저전력에 집중하지 않아도 된다는 판단에서 나온 것입니다. 모바일에선 Cortex-A53같은 저전력 코어와 결합하는 게 바람직합니다.
게임기인 스위치가 NVIDIA의 CPU 코어를 어떻게 결합하느냐가 흥미로운 일입니다. 성능과 전력은 서로 상반되는 관계이니, 이것의 설계는 닌텐도가 어디에 중점을 두고 있는지에 따라 다릅니다. 스위치의 본질이 콘솔이냐 휴대용 게임기냐는 것이죠.
어떤 GPU 코어를 탑재한 게임기인가?
GPU 코어는 테그라 X1이 맥스웰 세대, 파커가 파스칼 세대입니다. 그러나 파스칼과 맥스웰은 마이크로 아키텍처가 비슷하기에 어느 쪽이건 차이는 적습니다. NVIDIA는 맥스웰 세대에서 PC와 모바일의 GPU 마이크로 아키텍처를 통합했습니다. 그 전에는 몇 세대 지난 GPU 코어가 모바일에 탑재됐으나, 맥스웰에선 차이가 거의 없어졌습니다.
맥스웰 아키텍처는 GPU 코어의 구성 요소인 SM(Streaming Multiprocessor)에 128개의 CUDA 코어(FP32 부동 소수점 연산 유닛)을 탑재합니다. 이는 파스칼도 마찬가지입니다. 맥스웰 데스크탑 버전과 큰 차이는 FP16 가속의 추가와 공유 메모리가 64KB로 다소 적다는 것 뿐입니다. 따라서 물리적 설계와 트랜지스터가 다를 뿐 마이크로 아키텍처의 차이는 적습니다.
테그라 X1의 맥스윌 GPU 코어 아키텍처
테그라 X1의 맥스웰 SM 아키텍처
테그라 X1의 맥스웰 SM 블럭 다이어그램
테그라 X1에서는 GPU 코어에 2개의 SM, 총 256 개의 CUDA 코어가 탑재됐습니다. 파커는 256 CUDA 코어니 같은 구성이라 볼 수 있습니다. 닌텐도가 모바일 수준의 소비 전력과 다이 영역으로 억제한다면 GPU 코어의 규모는 테그라 X1/파커와 마찬가지로 256 CUDA 코어가 될 것입니다. 그러나 전력보다 성능을 우선한다면 코어 수를 늘릴수도 있는데, 이것의 선택은 닌텐도가 스위치를 어떤 용도로 가정하느냐에 따라 달라집니다.
테그라 X1은 256개의 CUDA 코어를 최대 1GHz로 동작시켜 512GFLOPS의 FP32 연산 성능을 제공합니다. FP16은 그 배인 1TFLOPS가 됩니다. 파커의 경우엔 클럭을 높여 750GFLOPS (FP32) /1.5TFLOPS (FP16)가 됩니다.
메모리는 파커 수준의 인터페이스일 경우 50GB/sec 이상
모바일 그래픽에서 성능을 제약하는 가장 큰 요소는 메모리 대역폭입니다. 사실 테그라 X1과 파커는 이 부분이 크게 다릅니다. 모두 LPDDR4 메모리를 썼지만 테그라 X1은 메모리 인터페이스가 x64(64비트)고 파커는 x128(128비트)입니다. 메모리 대역폭은 3.2Gbps의 전송 속도일 때 테그라 X1이 25.6GB/sec, 파커가 2배인 51.2GB/sec가 됩니다.
50GB/sec 급의 메모리 대역은 데스크탑 PC에서 DDR4-3200 듀얼 채널(128비트) 인터페이스 수준의 대역이 됩니다. 물론 메모리 인터페이스가 2배면 인터페이스의 전력 소비는 큽니다. 또 DRAM의 수도 늘어나니 DRAM 자체의 소비 전력도 늘어나게 됩니다.
그러나 2017년에 나올 스위치는 LPDDR4X를 쓴다는 선택지도 있습니다. LPDDR4X에서는 I/O 전압을 줄여 LPDDR4보다 전력을 더욱 낮췄습니다. 그만큼 같은 전력 소비로 메모리 대역을 넓히는 것이 가능합니다. 모바일 메모리는 이 밖에도 스택 구조의 Wide I / O 2가 있으나 이건 비싸기에 대중적이지 않고, 가격이 중요한 게임기에는 쓰기 어렵습니다. 덧붙여서 LPDDR 계도 DDR 계열에 비해 비싸니 게임기에선 단가가 맞지 않아 쓰기 어렵습니다.
모바일 메모리의 대역폭
NVIDIA가 새로운 API 및 도구 / 라이브러리 제공
NVIDIA는 닌텐도 스위치에 SoC 하드웨어를 제공할 뿐만 아니라 로우레벨 API인 NVN도 제공하며, 다른 툴과 라이브러리 등을 제공합니다. NVIDIA의 API라면 의외라고 생각할 수도 있으나 NVIDIA는 벌칸이 나오기 전에 구글과 함께 새로운 API를 개발하여 보급시키려고 했던 적이 있습니다. 사실 AMD 뿐만 아니라 NVIDIA도 API는 열심히 노력하고 있습니다.
닌텐도가 NVIDIA를 사용하면서 게임기의 아키텍처는 더욱 복잡해졌습니다. 지금까지 닌텐도 Wii U가 AMD 아키텍처였으니 AMD는 기존 세대의 게임기 그래픽은 모두 AMD라 단언했습니다. 그 전 세대에선 PS3가 NVIDIA, Xbox 360이 AMD, Wii가 AMD(ATI) 계열에 독자적인 아키텍처였으나, 지금은 PS4 계열과 Xbox One 계가 AMD, 스위치가 NVIDIA입니다. 더 이전으로 거슬러 올라가면 PS2는 독자적인 아키텍처 Xbox 1은 NVIDIA, 게임큐브는 ATI였습니다. 세대마다 공급처가 달라지는 게 재미있습니다.
태블릿 + 컨트롤러 구성의 모바일 게임기, TV 화면에 출력하는 콘 솔 게임기를 모두 잡는다는 스위치의 개념은 어딘가 모르게 NVIDIA의 실드 태블릿을 연상하게 합니다. 실드 태블릿은 테그라 K1 기반이니 내부 개념에서도 비슷합니다. 사실 컨트롤러에 대한 분위기는 상당히 변하고 있으며, 반도체 칩을 제약하는 소비 전력에선 비슷한 점이 있습니다.