7nm 공정, 360제곱mm의 대형 다이
TSMC N7 이후의 첨단 프로세스 기술
마이크로소프트의 차세대 게임기, Xbox 시리즈 X는 AMD의 젠 2 계열 CPU 코어와 RDNA 계열 GPU 코어를 기반으로 한 커스텀 SoC를 사용합니다. 이전 세대 뿐만 아니라 PS5와도 아키텍처가 비슷하지요. 마이크로소프트는 2020년 8월에 개최된 프로세서 컨퍼런스 Hot Chips를 통해 그 내용을 적극적으로 공개했습니다.
Xbox 시리즈 X는 TSMC의 7nm 노드 프로세스인 N7의 확장판, N7e에서 생산합니다. 다이 크기는 360.4제곱mm에 트랜지스터 수는 153억개, 그 중 GPU 코어의 면적이 가장 큽니다. Xbox 시리즈 X의 GPU 코어는 AMD RDNA2 아키텍처와 기능이 비슷합니다. RDNA을 기반으로 하여 레이 트레이싱 하드웨어 가속과 가변 쉐이딩(Variable-Rate Shading : VRS), 샘플러 피드백 스트리밍(Sampler Feedback Streaming : SFS) 등의 제어 기능을 갖춥니다.
16nm에서 7nm까지 TSMC 프로세스의 스펙 비교
AMD 계열의 GPU 코어는 CU(Compute Unit라고 불리는 연산 유닛을 기본 구조로 삼습니다. Xbox 시리즈 X의 GPU 코어는 총 52개의 CU가 있습니다. 각각의 CU는 64개의 FP32 연산 코어(스트리밍 프로세서)가 있으며, 프로세서 전체에선 총 3328개의 연산 유닛을 갖춥니다. 클럭은 1.825GHz로 최고 성능은 12TFLOPS에 달합니다.
Xbox 시리즈 X의 다이 레이아웃
Xbox 시리즈 X의 스펙
Xbox 시리즈 X의 시스템
기본은 AMD의 RDNA 계열 아키텍처
Xbox 시리즈 X의 GPU 아키텍처는 AMD의 RDNA 계열 아키텍처를 기초로 만들어졌습니다. 기본적인 구조는 RDNA와 같습니다. CU에는 그래픽 연산과 텍스처 등의 기본적인 처리 장치가 포함됩니다. 1세대 RDNA와 Xbox 시리즈 X의 설계에서 가장 큰 특징은 레이 트레이싱 가속 장치(Ray Accelerator)의 탑재입니다. 레이 엑셀레이터는 CU마다 1개씩 탑재됩니다.
RDNA1의 CU 아키텍처
Xbox 시리즈 X의 GPU CU 아키텍처
Xbox 시리즈 X의 GPU CU
MD의 RDNA 아키텍처는 2개의 CU가 결합된 구조입니다. 2개의 CU로 구성된 유닛은 WGP (Workgroup Processor)라고 부릅니다. WGP는 2개의 CU 외에도 명령 캐시, 스칼라 데이터 캐시, 로컬 스크래치 패드 메모리인 로컬 데이터 공유 메모리(Local Data Share Memory : LDS)가 포함됩니다. 이 장치는 2개의 CU가 공유합니다. WGP는 AMD의 GPU의 연산 클러스터를 구성하는 최소 단위입니다.
WGP는 디바이스의 공유에 의미가 있습니다. AMD GPU의 실행 배치는 Wavefront나 Wave라고 부릅니다. 그리고 웨이브프론트를 그룹으로 묶은 워크그룹 단위로 CU 클러스터에 할당합니다. 워크그룹은 LDS를 사용한 데이터 공유가 가능합니다. RDNA 아키텍처는 워크그룹을 CU에 할당할 뿐만 아니라 WGP에 할당하는 모드도 있습니다. WGP를 워크그룹을 지정하면 공유 LDS를 통해 두개의 CU에 할당된 모든 웨이브에서 데이터를 교환할 수 있습니다. WGP 구성으로 더 큰 워크그룹에서 데이터 공유가 가능합니다.
AMD 아키텍처의 GPU 코어에서 WGP는 여러 유닛을 모아 클러스터를 형성합니다. 클러스터의 WGP 사이에 L1 데이터 캐시와 라스터라이저 프리미티브 어셈블리 유닛을 공유합니다. WGP의 내부 CU를 더 잘게 나누면 CU가 2개의 연산 블럭으로 나뉩니다. 2개의 연산 블럭마다 명령 유닛이 있어, 1사이클에 2개의 명령 유닛이 서로 다른 명령 스트림 발행을 수행합니다.
CU의 실행 유닛은 2개의 연산 블럭으로 나뉜 유닛과 공유 유닛이 있습니다. 있다. 32레인의 벡터 연산 유닛(VALU)와 1개의 스칼라 연산 유닛 (SALU), 메시징 등의 제어 유닛은 2세트씩 있습니다. 2개의 명령 유닛은 각각 전용 VALU과 SALU, 제어 장치에 명령을 발행합니다. 메모리 액세스 계열 유닛은 1 유닛을 2개의 연산 블럭이 공유합니다. CU에서 공유하는 리소스는 로드/스토어 텍스처 프로세싱, 로컬 데이터 공유 액세스가 포함됩니다.
2개의 명령 유닛이 2세트의 연산 어레이와 공유 리소스에 명령 발행
Xbox 시리즈 X의 GPU 코어에 탑재된 CU에는 레이 트레이싱 가속 장치가 있습니다. CU마다 1개가 있으며 2개의 명령 유닛이 공유하는 자원이란 겄가진 텍스처 유닛과 같습니다. CU의 레이 트레이싱 가속장치는 4레이의 오퍼레이션을 1클럭으로 실행합니다.
일반적으로 레이 트레이싱 가속은 레이 트레이싱의 흐름 중에 광선을 탐색(Traversal)하고 레이와 오브젝트의 교차 판정인 인터섹션 테스트(Intersection Test)를 하드웨어로 처리합니다. 하나의 레이 트레이싱은 여러 작업이 필요하기에 4레이 오퍼레이션/클럭이 그대로 레이 트레이싱 성능으로 이어지진 않습니다. GPU 코어 전체 380G/s의 레이 박스, 95G/s의 레이 트라이앵글로 쉐이더 프로세서가 소프트웨어적으로 레이 트레이싱을 수행하는 것과 비교하면 최대 10배의 성능을 낸다고 합니다.
Xbox 시리즈 X에서 레이 트레이싱을 하드웨어 가속
Xbox 시리즈 X에서 레이 트레이싱 기능
AMD의 RDNA CU는 2개의 명령 유닛이 각각 1개의 벡터 ALU 명령과 1개의 스칼라 ALU 명령, 그리고 1개의 제어 명령, 1개의 벡터 데이터 명령을 동시에 발행합니다. 최대 4명령/사이클입니다. 그리고 MS는 Xbox 시리즈 X의 CU에서 7개의 명령을 동시에 발행한다고 설명합니다. 2개의 벡터 ALU 명령, 2개의 스칼라 ALU 명령, 2개의 제어 명령, 그리고 1개의 벡터 데이터 명령입니다. 벡터 데이터 명령만 1명령/사이클입니다. 벡터 데이터 명령의 실행 유닛은 공유 유닛이기에 명령 중재기가 2개의 명령 유닛을 조정합니다. 따라서 벡터 데이터 명령은 각 사이클당 수행하는 명령으로 보입니다.
AMD RDNA의 경우 공유 리소스에서 실행되는 명령은 벡터 메모리 명령, 텍스처 명령, 로컬 데이터 공유 (LDS) 명령이 있고 Xbox 시리즈 X는 여기에 레이 트레이싱 명령이 추가됩니다. MS는 이런 유닛 군에 대한 명령을 1사이클당 명령으로 봅니다. 즉 공유 중재기가 2개의 명령 유닛에서 벡터 메모리 / 텍스처 / LDS / 레이트 레이싱 명령을 조정해 1사이클당 1명령씩 발행한다고 추측합니다.
공유 리소스로 분리된 레이 트레이싱 가속장치
GPU는 연산 계열 명령 스케줄링과 메모리 액세스가 필요한 명령 스케줄링이 명확하게 분리된 경우가 많습니다. GPU의 경우 내부에서 처리하는 스레드 수가 많으니, 연산과 그 준비 과정 동안 다른 스레드로 전환해 레이턴시를 숨길 수 있습니다. 그러나 레이턴시가 긴 메모리 액세스의 경우 다른 방식의 제어가 필요합니다. 그래서 이런 작업은 분리해서 제어합니다. 레이 트레이싱 가속도 3D 스페이스 오브젝트를 관리하는 바운딩 볼륨(BVH) 데이터에 액세스해야 하니 대기 시간이 길어집니다.
Xbox 시리즈 X에서 레이 트레이싱 가속의 구현 방법은 NVIDIA 튜링에서 처음으로 도입한 레이 가속 방식과 비슷합니다. 튜링은 1개의 SM(Streaming Multiprocessor)에 4개의 프로세싱 블럭이 있습니다. 명령 유닛과 연산 엔진은 각각의 프로세싱 블럭에 배치된 텍스처 유닛과 레이 가속기 RT 코어를 공유합니다.
Xbox 시리즈 X는 2개의 블럭이 레이 트레이싱 유닛을 공유하고, 튜링은 4개의 프로세싱 블럭이 공유하는 구조입니다. 그러나 AMD 아키텍처는 각 연산 블럭의 벡터 엔진은 FP32 32웨이고, 튜링은 16웨이니까 벡터 연산 대비 유닛의 공유 비율은 같습니다. 이런 구조라서 Xbox 시리즈 X는 레이 트레이싱의 BVH 탐색 등의 작업이 쉐이더 프로세싱과 완전히 분리돼 진행합니다. 즉, 쉐이더 성능에 영향을 주지 않습니다.
NVIDIA 튜링
RDNA 아키텍처에서는 Wave가 64개, 혹은 32개의 두 가지 모드가 있습니다. 기존의 AMD 아키텍처는 64개였지만 RDNA는 단위가 더 작은 32개를 주로 씁니다. 또 Special Function Unit (SFU)도 연산 유닛에서 독립되면서 벡터 명령의 실행이 크게 바뀌었습니다.
RDNA의 Wave32에서 명령 스케줄링
Xbox One 계열 GPU 코어의 GCN (Graphics Core Next) 아키텍처 명령 스케줄링
그래픽 렌더링 제어 부분에선 Xbox 시리즈 X가 가변 쉐이딩과 샘플러 피드백 스트리밍 등의 제어 기능을 도입했습니다. 가변 쉐이딩은 쉐이딩 프로세싱의 부담을 줄이고, 샘플러 피드백 스트리밍은 메모리 대역의 사용을 줄여줍니다.
Variable-Rate Shading
Sampler Feedback Streaming
수율을 위해 56개의 CU를 넣은 GPU 코어
Xbox 시리즈 X는 2개의 CU를 탑재한 WGP 유닛 7개를 묶어 하나의 쉐이더 엔진으로 배열합니다. WGP 7유닛으로 구성된 클러스터에는 라스터라이저와 렌더 백엔드가 있습니다. RDNA 아키텍처의 GPU응 여러 WGP 유닛의 클러스터를 큰 단위로 묶지만 여기에는 특별한 이름이 없습니다. 그냥 WGP 클러스터라고 부릅시다.
AMD의 기존 GPU는 WGP 클러스터에 해당하는 클러스터에 지오메트리 처리 장치가 딸려 있었습니다. 그러나 RDNA 아키텍처는 지오메트리 파이프 라인의 마지막 단계에서 원시 어셈블리 유닛 (Primitive Assembly Unit)만 WGP 클러스터 측에 배치했습니다. 원시 어셈블리 이전의 지오메트리 프로세싱은 GPU 코어 전체에서 하나의 유닛으로 정리합니다.
WGP 클러스터는 지오메트리 처리에서 파이프 라인에 필요한 장치까지 모두 갖춰진 미니 GPU입니다. 또한 L1 데이터 캐시도 공유합니다. 이런 구성은 RDNA 아키텍처의 특징입니다. 기존의 GPU에서 렌더링 백엔드는 프로세서 클러스터의 내부 버스로 분리되고 L2 캐시에 연결됐습니다. RDNA에서 렌더 백엔드는 CU 군과 클러스터를 이루며 L1 캐시를 공유합니다. 따라서 WGP 클러스터와 렌더 백엔드 사이에서 풀 컬러 압축 기술을 사용할 수 있습니다.
Xbox 시리즈 X의 WGP 클러스터와 CU
Xbox 시리즈 X의 GPU 코어는 4어레이의 WGP 클러스터로 분리됩니다. 각각의 WGP 클러스터는 7 유닛의 WGP가 배치됩니다. 총 28유닛의 WGP와 56 유닛의 CU가 있습니다. 실제 제품에선 이 중 2개의 WGP(= 4개의 CU)가 비활성화됩니다. 이건 불량이 난 CU를 비활성화하고 전체 칩의 수율을 높이기 위해서입니다. 즉 4개 분량의 CU를 수율을 높이기 위해 예비용으로 씁니다.
Xbox 시리즈 X GPU 코어
Xbox 계열 시스템에 맞춘 듀얼 명령 프로세서
Xbox 시리즈 X의 GPU 코어와 AMD GPU 코어의 가장 큰 차이는 그래픽 명령 프로세서 (Graphics Command Processor)의 숫자입니다 Xbox 시리즈 X는 이게 2유닛이 있지요. 그래픽 명령 프로세서는 그래픽 명령 스트림을 처리하는 스칼라 프로세서로 GPU를 움직이는 지휘부 역할을 합니다. 실제로는 RISC (Reduced Instruction Set Computer) 형 명령어 세트의 마이크로 컨트롤러이며 명령 스트림 처리를 위한 명령 확장이 이루어졌습니다.
Xbox 시리즈 X GPU 코어의 다른 기능 확장
Xbox 시리즈 X는 일반 명령 프로세서가 2개 있습니다. 여러 명령 프로세서로 두 개의 가상 머신에서 2개의 완전히 독립된 명령 스트림을 동시에 처리할 수 있다는 게 MS의 설명입니다. 보통의 GPU는 명령 프로세서를 1유닛만 제공합니다. 사실 듀얼 명령 프로세서는 MS의 새로운 아키텍처는 아니고 Xbox 원 시리즈에서 썼던 적이 있습니다. 듀얼 명령 프로세서는 게임 OS와 시스템 OS를 함께 운용하는 MS 게임기만의 아키텍처입니다. Xbox 원 시리즈는 CPU 코어도 독자적으로 확장해 가상 머신 전환 속도를 높였습니다.
Xbox Series X의 GPU 코어
AMD 아키텍처의 명령 프로세서는 그래픽을 포함한 일반 명령 프로세서 외에 컴퓨팅 처리 전용 부분 집합 프로세서, ACE (Asynchronous Compute Engine)가 있습니다. ACE는 컴퓨팅 작업을 선택해 메모리에서 Asynchronous Compute Queue로 대기시키고 CU 그룹에 할당합니다. Xbox 시리즈 X는 여러 Asynchronous Compute Queue를 처리 할 수 있습니다.
AMD의 GCN (Graphics Core Next) 이상의 GPU 아키텍처는 명령 프로세서 아래에 GPU 전체 작업의 배분을 행하는 Work Distributor가 있습니다. Xbox 시리즈 X에는 이 구조가 없지만, 기본 구조가 바뀌지 않았을테니 이를 통해 GPU 전체 작업을 제어한다고 보입니다.
Xbox 시리즈 X는 그래픽 엔진이 1유닛 있습니다. 최근 대형 GPU는 그래픽 파이프라인이 여럿 있는 아키텍처가 많았으나 Xbox 시리즈 X는 그렇지 않습니다. 이는 RDNA 계열 아키텍처의 공통점이기도 합니다. RDNA는 GPU의 규모와 상관 없이 지오메트리 프로세서를 통합합니다. 하지만 기본 어셈블러는 클러스터마다 나눕니다. Xbox 시리즈 X의 경우 4개의 클러스터에 4개의 기본 어셈블러가 있습니다.
Xbox 시리즈 X의 GPU 코어는 RDNA 아키텍처를 기반으로 레이 트레이싱 하드웨어를 추가했으며, 프로세싱과 메모리 효율을 높이기 위한 구조를 통합했습니다. 아직은 어디까지가 AMD GPU의 일반적인 기능이고 어디가 Xbox 시리즈 X만의 기능인지는 알 수 없습니다. AMD의 RDNA2 아키텍처인 나비 2X도 레이 트레이싱 하드웨어와 VRS를 지원하기 때문입니다.