AMD GPU 아키텍처 #1: RDNA 1

Wave32·WGP·캐시 계층 개편, 그리고 NVIDIA Turing과의 구조적 비교

🇰🇷 한국어 | 🇺🇸 English

시리즈 로드맵

# 주제 상태
개요 RDNA / CDNA 전 세대 타임라인
1 RDNA 1 - Wave32, WGP, 7nm
2 RDNA 2 - Ray Accelerator, Infinity Cache, Ampere 대결
3 RDNA 3 - 칩렛(GCD+MCD), 듀얼-이슈 셰이더 🔲

GCN의 한계

RDNA 이전 AMD GPU 아키텍처는 GCN(Graphics Core Next, 2011)이었다. GCN은 그래픽과 컴퓨트를 하나의 유닛으로 처리하는 설계로, 2011년 기준으로는 현대적이었다. 그러나 7년간 이어지면서 구조적 한계가 드러났다.

가장 큰 문제는 두 가지였다.

1. Wave64 실행 모델의 비효율

GCN CU(Compute Unit)는 SIMD16 유닛 4개로 구성됐다. 기본 실행 단위는 64개 스레드 묶음인 Wave64였다. SIMD16이 클럭당 16개 스레드를 처리하므로, Wave64 하나를 완료하려면 같은 SIMD16이 4클럭을 소비했다.

Wave64가 길수록 스레드 간 분기(Divergence) 손실이 커진다. 64개 스레드 중 일부만 활성화된 상태에서 나머지는 대기한다. NVIDIA는 이미 Warp32(32스레드) 기반이었다.

2. 낮은 클럭 속도

GCN은 많은 인플라이트 웨이브프런트로 메모리 레이턴시를 숨기는 설계였다. 결과적으로 클럭 속도를 높이는 대신 동시에 많은 웨이브를 띄워 처리량을 확보했다. Vega 64의 최대 부스트 클럭은 약 1.5 GHz에 불과했다.

RDNA 1(Navi 10, 2019)은 이 두 문제를 동시에 해결했다.


Wave32와 SIMD32: 핵심 변화

RDNA 1이 GCN과 가장 크게 다른 부분은 파이프라인의 기본 실행 폭이다.

GCN CU:
┌─────────────────────────────────────────────┐
│  SIMD16 [0]   SIMD16 [1]   SIMD16 [2]   SIMD16 [3]  │
│  16 FP32      16 FP32      16 FP32      16 FP32      │
│                                                       │
│  ← Wave64: 64 스레드 / 4 클럭 (16 × 4)              │
│    각 SIMD16이 서로 다른 웨이브를 동시 처리            │
└─────────────────────────────────────────────────────┘
  CU당 FP32 ALU: 64개

RDNA 1 CU:
┌──────────────────────────────────────┐
│       SIMD32 [0]        SIMD32 [1]  │
│       32 FP32           32 FP32     │
│                                      │
│  ← Wave32: 32 스레드 / 1 클럭        │
│    각 SIMD32이 서로 다른 웨이브 처리   │
└──────────────────────────────────────┘
  CU당 FP32 ALU: 64개 (동일)

FP32 ALU 개수는 CU당 64개로 동일하다. 바뀐 것은 웨이브의 크기다.

Wave64 vs Wave32: 무엇이 달라지는가

항목 GCN Wave64 RDNA Wave32
스레드 수 64 32
SIMD 폭 16 32
웨이브 완료 클럭 4 (16×4) 1 (32×1)
최대 분기 손실 64스레드 중 1개 활성 32스레드 중 1개 활성
NVIDIA 호환성 Warp32와 다름 Warp32와 동일 폭

Wave32는 분기가 발생할 때 낭비되는 레인이 절반으로 줄어든다. 또한 1클럭에 웨이브가 완료되므로 레이턴시 히딩을 위한 인플라이트 웨이브 수를 줄여도 된다. 이것이 클럭 속도 향상의 기반이 된다.

RDNA 1은 Wave64도 지원한다(GCN 호환). 이 경우 SIMD32를 2클럭으로 나눠 처리하거나, 두 SIMD32가 협력해 처리한다.


WGP: 2개의 CU를 묶는 새 계층

RDNA 1은 CU 위에 WGP(Work Group Processor)라는 계층을 새로 도입했다. 2개의 CU를 하나의 WGP로 묶고, 캐시와 스칼라 유닛 일부를 공유한다.

RDNA 1 WGP 구조:
┌──────────────────────────────────────────────────────┐
│                       WGP                            │
│  ┌─────────────────────┐  ┌─────────────────────┐   │
│  │       CU [0]        │  │       CU [1]        │   │
│  │  SIMD32 × 2 (64 SP) │  │  SIMD32 × 2 (64 SP) │   │
│  │  LDS 32KB           │  │  LDS 32KB           │   │
│  │  Scalar Unit        │  │  Scalar Unit        │   │
│  └──────────┬──────────┘  └──────────┬──────────┘   │
│             └──────────┬─────────────┘               │
│              ┌─────────▼──────────┐                  │
│              │  L0 벡터 캐시 128KB │  (두 CU 공유)    │
│              │  스칼라 캐시 32KB   │                  │
│              └────────────────────┘                  │
└──────────────────────────────────────────────────────┘
  WGP 합계: 4 × SIMD32 = 128 FP32 SP

GCN에서 각 CU의 L1 캐시는 16KB로 독립적이었다. RDNA 1에서 두 CU는 128KB L0 캐시를 공유한다. 같은 WGP 내 두 CU가 동일 데이터를 접근할 때 L0 캐시 히트로 처리된다.


캐시 계층 개편

RDNA 1은 GCN 대비 캐시 계층을 전면 재설계했다.

GCN (Vega 64) 캐시:
CU → [L1 16KB (각 CU 전용)] → [L2 4MB (전체 공유)] → GDDR5/HBM

RDNA 1 (Navi 10) 캐시:
CU → [L0 128KB (WGP 내 2CU 공유)]
   → [GL1 128KB (Shader Array 단위)]
   → [L2 4MB (전체 공유)] → GDDR6

새로 추가된 GL1(Global Level 1) 캐시는 Shader Array 내 모든 WGP가 공유하는 중간 계층이다. L0 미스가 L2로 직행하던 GCN 대비 레이턴시 계단이 하나 늘어났고, 각 계단의 히트율이 올라간다.

계층 GCN (Vega) RDNA 1 (Navi 10) 범위
CU 로컬 캐시 16KB - 코어당
WGP/L0 공유 없음 128KB WGP (CU 2개)
GL1 없음 128KB Shader Array
L2 4MB 4MB 전체

Navi 10은 TSMC 7nm 공정, 251mm² 면적에 103억 개 트랜지스터를 집적했다.

Navi 10 다이:
┌────────────────────────────────────────────────────────┐
│                                                        │
│  ┌────────────┐  ┌────────────┐  ┌────────────┐  ┌────────────┐ │
│  │    SE 0    │  │    SE 1    │  │    SE 2    │  │    SE 3    │ │
│  │ SA0 │ SA1  │  │ SA0 │ SA1  │  │ SA0 │ SA1  │  │ SA0 │ SA1  │ │
│  │5WGP│5WGP  │  │5WGP│5WGP  │  │5WGP│5WGP  │  │5WGP│5WGP  │ │
│  │(GL1│128K) │  │            │  │            │  │            │ │
│  └────────────┘  └────────────┘  └────────────┘  └────────────┘ │
│                                                        │
│  ┌────────────────────────────────────────────────┐   │
│  │  L2 캐시 4MB (16 채널 × 256KB)                 │   │
│  └────────────────────────────────────────────────┘   │
│                                                        │
│  [GDDR6 MC×8]  [Display Engine]  [Geometry Engine×4]  │
└────────────────────────────────────────────────────────┘

SE: Shader Engine (4개)
SA: Shader Array (SE당 2개)
WGP: SA당 5개 → SE당 10 WGP → 전체 40 WGP = 40 CU쌍 → 80 CU? 
  → Navi 10 전체: 40 CU (20 WGP) [SE당 10 CU, SA당 5 CU]
  → RX 5700 XT: 40 CU 모두 활성

RX 5700 XT 스펙:

항목
공정 TSMC 7nm
다이 면적 251mm²
트랜지스터 103억
CU 수 40 (20 WGP)
셰이더 프로세서 2,560
ROPs 64
L2 캐시 4MB
메모리 GDDR6 8GB, 256-bit
메모리 대역폭 448 GB/s
부스트 클럭 ~1905 MHz
FP32 성능 9.75 TFLOPS
TDP 225W
인터페이스 PCIe 4.0 x16 (소비자 GPU 최초)

부스트 클럭 1905 MHz는 Vega 64(~1546 MHz)보다 약 23% 높다. 아키텍처 효율 개선과 7nm 공정의 결합이다.


NVIDIA Turing과의 구조 비교

RDNA 1의 직접 경쟁자는 2018년 9월 출시된 NVIDIA Turing 아키텍처다. RTX 20 시리즈의 TU102, TU104, TU106이 해당한다.

SM vs CU/WGP 실행 유닛 구조

NVIDIA Turing SM (TU104 기준):
┌───────────────────────────────────────────────────┐
│              Turing SM                            │
│  ┌──────────────────────────────────────────────┐ │
│  │  Warp Scheduler × 4  │  Dispatch Unit × 4   │ │
│  └──────────────────────────────────────────────┘ │
│                                                   │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌──────┐ │
│  │FP32 ×16 │  │FP32 ×16 │  │FP32 ×16 │  │FP32×16│ │
│  │INT32 ×16│  │INT32 ×16│  │INT32 ×16│  │INT32×16│ │
│  └─────────┘  └─────────┘  └─────────┘  └──────┘ │
│  FP32 합계: 64   INT32 합계: 64  (FP32+INT32 동시 발행 가능) │
│  Tensor Core × 8   RT Core × 1                   │
│  공유 메모리/L1: 최대 96KB                         │
└───────────────────────────────────────────────────┘

AMD RDNA 1 WGP:
┌───────────────────────────────────────────────────┐
│               WGP                                 │
│  ┌─────────────────────┐ ┌──────────────────────┐ │
│  │       CU [0]        │ │       CU [1]         │ │
│  │  SIMD32 × 2 (64 SP) │ │  SIMD32 × 2 (64 SP)  │ │
│  │  (FP32/INT32 공유)   │ │  (FP32/INT32 공유)   │ │
│  └─────────────────────┘ └──────────────────────┘ │
│  FP32 합계: 128  INT32: FP32 유닛과 공유, 동시 불가 │
│  Tensor/RT 없음                                    │
│  L0 캐시 128KB (공유)                              │
└───────────────────────────────────────────────────┘

핵심 설계 차이

1. FP32 + INT32 동시 발행 (Turing 독자 기능)

Turing SM은 FP32 파이프라인과 INT32 파이프라인이 독립적이다. 부동소수점 연산과 정수 연산을 동일 클럭에 동시 발행할 수 있다. 셰이더 코드에서 어드레스 계산(INT32)이 데이터 연산(FP32)과 겹쳐 실행된다.

RDNA 1은 FP32 유닛이 정수 연산도 처리한다. 동시 발행이 없으므로 정수 주소 계산이 FP32 실행과 직렬로 처리된다.

2. Ray Tracing

Turing RT Core: BVH(Bounding Volume Hierarchy) 순회와 박스-광선 교차 판정을 전용 고정 기능 하드웨어로 처리. DXR 지원.

RDNA 1: RT 전용 하드웨어 없음. DXR 명세상 DirectX 12 지원 GPU는 소프트웨어로 RT를 처리할 수 있으나, 성능이 매우 낮다.

3. Tensor Core (AI 가속)

Turing 2세대 Tensor Core: FP16, INT8, INT4 행렬 연산 전용 유닛. DLSS 1.0(딥러닝 기반 업스케일링)에 사용.

RDNA 1: Tensor/Matrix 가속 유닛 없음. DLSS에 대응하는 기능 없음.

4. 독립 스레드 스케줄링 (Independent Thread Scheduling)

NVIDIA Volta/Turing부터 각 스레드가 독립적인 PC(Program Counter)와 콜 스택을 가진다. 스레드 단위로 실행 순서 제어가 가능하다.

RDNA 1은 웨이브 단위 스케줄링을 유지한다. 웨이브 내 발산(Divergence)은 활성/비활성 레인 마스크로 처리한다.

5. 공정 노드

  RDNA 1 (Navi 10) Turing (TU104)
공정 TSMC 7nm TSMC 12nm
다이 면적 251mm² 545mm²
트랜지스터 103억 134억
면적 대비 트랜지스터 41M/mm² 24.6M/mm²

같은 트랜지스터 수를 구현하는 데 RDNA 1이 약 40% 작은 다이를 사용한다. 이는 생산 원가와 전력 효율에 직결된다.

사양 비교 (동급 대결)

Navi 10 vs TU104: 핵심 사양 비교

  RX 5700 XT (RDNA 1) RTX 2070 Super (Turing) RTX 2080 Super (Turing)
공정 7nm 12nm 12nm
다이 Navi 10 (251mm²) TU104 (545mm²) TU104 (545mm²)
셰이더 2,560 SP 2,560 CUDA 3,072 CUDA
FP32 TFLOPS 9.75 ~9.06 ~11.1
메모리 BW 448 GB/s 448 GB/s 496 GB/s
RT 없음 1세대 RT Core 1세대 RT Core
Tensor/DLSS 없음 2세대 Tensor 2세대 Tensor
PCIe 4.0 3.0 3.0
TDP 225W 215W 250W
출시가 $399 $499 $699

순수 래스터라이제이션 성능에서 RX 5700 XT는 RTX 2070 Super와 대등하게 경쟁했다. 7nm 공정과 Wave32 개선의 결과다. 그러나 레이 트레이싱과 DLSS가 배제된 비교다.


소프트웨어 스택: ROCm과 CUDA

컴퓨트 관점에서도 RDNA 1과 Turing의 격차는 하드웨어만의 이야기가 아니었다.

NVIDIA CUDA: 2007년부터 누적된 생태계. cuBLAS, cuDNN, NCCL 등 ML 프레임워크가 CUDA에 최적화돼 있다.

AMD ROCm: RDNA 1 시기에는 RDNA 아키텍처에 대한 ROCm 지원이 제한적이었다. RDNA 계열 GPU의 본격적인 ROCm 지원은 이후 세대에서 개선됐다. RDNA 1 당시에는 사실상 Vega 기반 카드가 ROCm 컴퓨트의 주력이었다.


결과와 의의

RDNA 1이 달성한 것:

  • Wave32 도입으로 분기 효율 개선 및 고클럭 기반 마련
  • 7nm 공정으로 Turing 대비 작은 다이에서 대등한 래스터 성능
  • WGP와 캐시 계층 재설계로 메모리 레이턴시 개선
  • PCIe 4.0 최초 채택

RDNA 1이 해결하지 못한 것:

  • 레이 트레이싱 전용 하드웨어 없음 (RDNA 2에서 추가)
  • INT32 전용 파이프라인 없음 (FP32/INT32 동시 실행 불가)
  • 행렬 가속 유닛 없음 (CDNA 1에서 별도 추가)
  • DLSS에 대응하는 업스케일링 기술 없음 (후에 FSR로 대응, 단 하드웨어 가속 아님)

요약

항목 RDNA 1 (Navi 10) GCN (Vega) 대비 Turing (TU104) 대비
웨이브 크기 Wave32 절반 (Wave64 → 32) 동일 (Warp32)
SIMD 폭 32 2× (SIMD16 → 32) 동일
클럭 ~1905 MHz +23% 유사
공정 7nm 동일 5nm 우위
다이 면적 251mm² - TU104 545mm² 대비 54%
RT 없음 없음 열세 (Turing 전용)
INT32 동시 없음 없음 열세 (Turing 전용)
Tensor 없음 없음 열세 (Turing 전용)
래스터 성능/W 개선 1.25× (AMD 발표) 유사

RDNA 1은 GCN에서 벗어나는 데 성공했다. Wave32와 WGP, 캐시 재설계로 실행 효율을 높이고 클럭 속도를 끌어올렸다. 그러나 Turing이 도입한 레이 트레이싱·AI 가속 유닛 없이 순수 래스터 경쟁을 이어가야 했다. 이 격차는 RDNA 2에서 처음 좁혀졌다.

다음 글: RDNA 2 - Ray Accelerator, Infinity Cache, 그리고 Big Navi

Share: LinkedIn