HBM 메모리 컨트롤러 분석 — Bank·Row·Column·Address Mapping·Scheduling
#한 줄 요약
**“메모리 컨트롤러가 bank parallelism을 짜내는 정도가 sustained BW의 80~95%를 결정합니다.” — bank·row·column 계층, command scheduling, address XOR mapping, per-bank refresh가 모두 컨트롤러의 책임입니다. 같은 HBM3 stack이라도 *컨트롤러 설계가 미숙하면 효율이 50%*로 떨어집니다.
Ch 6에서 HBM의 전력과 열을 봤습니다. 이번 장은 컨트롤러가 HBM을 어떻게 보는지입니다. DRAM 명령 인터페이스, bank scheduling, address mapping은 NPU/GPU 설계의 차별화 지점이기도 합니다. NVIDIA·AMD·Google·Rebellions가 같은 HBM3 stack을 쓰면서도 다른 효율을 내는 이유가 컨트롤러 IP에 있습니다.
#컨트롤러가 보는 HBM
컨트롤러 입장에서 HBM3 stack 1개는 다음 주소 공간입니다.
HBM3 stack 주소 계층
stack (1024-bit)├── Channel 0 .. Channel 15 (16 channel)│ └── Pseudo Channel 0, 1│ └── Bank Group 0 .. 3 (HBM3)│ └── Bank 0 .. 3│ └── Row 0 .. 32767 (16 Gb DRAM 기준)│ └── Column 0 .. 1023│ └── prefetch 8 byte burst
주소 비트:[Channel : 4][PC : 1][BankGroup : 2][Bank : 2][Row : 15][Column : 6][Byte : 6] ↑ burst boundary총 bank 수는 16 channel × 2 PC × 4 BG × 4 bank = 512 bank입니다. 512 outstanding request가 이론상 동시 가능합니다.
| 단위 | 폭 | 개수 (HBM3) |
|---|---|---|
| Bit per cell | 1 | — |
| Column | 32 byte (burst) | 1024 / channel |
| Row | 1 KB | 32768 / bank |
| Bank | 32 MB | 4 / BG |
| Bank Group | 128 MB | 4 / PC |
| Pseudo Channel | 512 MB | 2 / channel |
| Channel | 1 GB | 16 / stack |
| Stack | 16 GB (16 Gb die × 8) ~ 36 GB (24 Gb die × 12) | — |
#DRAM 명령 인터페이스
컨트롤러가 HBM에 보내는 기본 명령은 다음과 같습니다.
HBM3 commands
활성화 ACT (Activate) : row를 sense amp에 올림 PRE (Precharge) : row를 닫고 bit line 충전 PREA (Precharge All) : 모든 bank precharge
데이터 RD (Read) : column 읽기 (burst 8) RDA (Read + AutoPre) : 읽고 자동 precharge WR (Write) : column 쓰기 WRA (Write + AutoPre) : 쓰고 자동 precharge
Refresh REFab (All-bank) : 모든 bank refresh REFsb (Single-bank) : 한 bank만 refresh REFpb (Per-bank) : 지정 bank refresh
Mode MRS (Mode Register) : config 변경 ZQCAL (impedance cal) : on-die termination 조정 RFM (Refresh Mgmt) : Row Hammer 대응명령 사이에는 minimum timing constraint가 있습니다.
주요 timing parameter (HBM3, 3.2 GHz clock)
tRCD (ACT → RD/WR latency) : 15 ns (~48 clock)tRP (PRE → ACT latency) : 15 ns (~48 clock)tRAS (ACT → PRE 사이 최소) : 32 nstWR (WR → PRE recovery) : 18 nstRC (ACT → ACT 같은 bank) : tRAS + tRP = 47 nstCCD_L (RD → RD same bank group) : 4 clocktCCD_S (RD → RD different BG) : 2 clock ← 빠른 인터리브 가능tFAW (4개 row activation 윈도) : 30 ns핵심 통찰은 tCCD_L < tCCD_S입니다. 다른 bank group끼리 인터리브하면 명령 발행 간격이 2 clock까지 줄어 bus utilization이 최고치가 됩니다.
#Scheduling — Open vs Closed Page
같은 row를 계속 열어 둘지(Open) *바로 닫을지(Closed)*가 핵심 정책 선택입니다.
Open Page Policy — 같은 row를 열어 두고 여러 column을 연속 read. row hit이면 tCL만 필요. row miss 시 PRE → ACT로 새 row 진입.
ACT row=RRD col=0RD col=1RD col=2RD col=3RD col=7PREACT row=R'- 장점: row hit 비율이 높으면 latency 짧음
- 단점: row miss 시
tRP + tRCD = 30 ns추가
Closed Page Policy — 한 번 읽고 바로 auto-precharge로 닫음. row buffer locality가 없을 때 단순.
ACT row=R + RD col=0 + auto PREACT row=R + RD col=1 + auto PREACT row=R + RD col=2 + auto PRE- 장점: row buffer locality 없을 때 simple
- 단점: row hit 가능성 버림
대부분 컨트롤러는 Adaptive Page Policy를 씁니다. 최근 access history를 보고 open할지 close할지 결정합니다.
Adaptive page policy 예
queue를 본 시점에 같은 row 추가 access가 있으면: open page 유지없으면: RDA/WRA로 auto precharge
NVIDIA H100, AMD MI300X 모두 adaptive 사용#Bank parallelism — 인터리브의 핵심
컨트롤러가 bank parallelism을 짜내는 방식이 *효율의 80%*를 결정합니다.
- Bad — 같은 bank만 hit. 매번 PRE를 기다려야 하고 나머지 511 bank가 idle → BW utilization 6 %.
- Good — 라운드 로빈. 모든 bank가 pipeline으로 동작 → BW utilization 90 %+.
이를 가능하게 하려면 address-to-bank mapping이 균등해야 합니다.
#Address mapping — XOR hash
linear mapping(상위 비트 = bank)은 연속 access에서 bank conflict 다발입니다.
Linear mapping (나쁨)
address = 0x0000_0000 → bank 0address = 0x0010_0000 → bank 1 (1 MB step)address = 0x0020_0000 → bank 2...
연속 메모리 sweep(matrix scan): addr[0..N]이 모두 bank 0 ← 한 bank만 hit!해결책은 XOR hash mapping입니다.
XOR mapping
bank_index = addr[bits low] XOR addr[bits mid] XOR addr[bits high]이 방식의 효과:
- 연속 access가 자동으로 bank 분산
- adversarial pattern을 만들기 어려움
- stride access (matrix column scan)도 분산
// 의사 코드: HBM3 컨트롤러 address mappinguint64_t addr; // 입력 byte address
// burst boundary 무시uint64_t base = addr >> 5; // 32 byte burst
// XOR로 channel 계산 (4 bit)int ch = (base >> 4) & 0xF;ch ^= (base >> 12) & 0xF;ch ^= (base >> 20) & 0xF;
// XOR로 bank 계산 (4 bit)int bank = (base >> 8) & 0xF;bank ^= (base >> 16) & 0xF;
// row, column 분리int row = (base >> 12) & 0x7FFF;int col = base & 0x3F;실제 GPU/NPU 컨트롤러의 XOR pattern은 비공개 IP입니다. workload-specific tuning이 들어가서 AI training pattern에 특히 최적화되어 있습니다.
#Per-bank refresh — bandwidth 보호
전통적인 *all-bank refresh(REFab)*는 모든 bank를 350 ns 동안 stall시킵니다. bus가 통째로 멈춥니다.
REFab의 비용
각 REFab: 350 ns × bus 정지64 ms / 3.9 μs = 16384 REFab per cycletotal stall: 16384 × 350 ns = 5.7 ms / 64 ms = 8.9%
→ 8.9% bandwidth loss*per-bank refresh(REFpb)*는 한 bank만 refresh합니다. 다른 bank는 계속 일합니다.
REFpb는 한 번에 한 bank만 refresh합니다. 나머지 bank는 그동안에도 active 상태 유지.
- bandwidth loss: 8.9 % / 16 banks ≈ 0.6 %
- 조건: 컨트롤러가 bank별 refresh schedule을 추적해야 함
- HBM3에서 표준 지원
NVIDIA·AMD 컨트롤러는 REFpb를 기본으로 합니다. AI training cluster에서 *0.6 vs 9 %*의 효율 차이가 수십억 원 단위입니다.
#Read-write turnaround
같은 bus 위에서 Read 후 Write나 Write 후 Read는 turnaround penalty가 있습니다.
Turnaround 비용
| 방향 | 비용 |
|---|---|
| RD → WR (same bank) | tRTW = 8 clock (data bus 방향 전환) |
| WR → RD (same bank) | tWTR = tWR + tCL = 18 + 14 = 32 ns |
queue에서 RD/WR가 섞이면 turnaround가 빈번해집니다. batch grouping이 효율적입니다.
좋은 컨트롤러는 RD batch + WR batch 형태로 grouping해 turnaround를 최소화합니다.
queue가 R W R W R W R W로 도착해도 컨트롤러가 R R R R / W W W W / R R R R로 묶어 turnaround를 N번 → 2번으로 줄입니다.
#ECC 처리
HBM3 on-die ECC는 base die가 처리하지만, 컨트롤러도 추가 ECC를 둘 수 있습니다.
NVIDIA H100은 system-level ECC를 on으로 출하합니다. 데이터센터 신뢰성을 위해서입니다.
#Outstanding request queue
컨트롤러는 수십 개의 outstanding request를 동시에 추적해 bank 별로 schedule합니다.
FR-FCFS는 First-Ready, First-Come-First-Served입니다. 같은 row에 있는 request가 우선 처리됩니다.
큐 깊이가 32~64 per bank에 달합니다. AI workload의 outstanding miss 수가 수천에 달하기 때문에 queue가 깊어야 합니다.
#NPU vs GPU 컨트롤러 차이
같은 HBM3을 쓰지만 NPU와 GPU의 컨트롤러는 최적화 방향이 다릅니다.
NVIDIA GPU 컨트롤러 (H100)
- generic workload 대응 (graphics, HPC, AI)- adaptive page policy (다양한 access pattern)- L2 cache 큼 (50 MB), MSHR 수천 개- cache miss → controller로 lat masking
AMD MI300X 컨트롤러- AI focused- 8 stack × 64 channel parallelism- Infinity Fabric로 cache coherent
Google TPU 컨트롤러- systolic array에 맞춘 access pattern- predictable strided access- prefetch 기반 latency hiding
Rebellions Atom (Korean NPU)- transformer-specific access- attention KV cache locality 최적화- per-tile address remap
Sapeon X330 (SK Telecom NPU)- inference 전용- weight streaming 우선- DRAM-side compression 옵션같은 HBM3 stack에서도 컨트롤러 IP의 차이가 *workload별 효율 5~15%*를 만듭니다.
#AXI4-Stream wrapper
NPU·FPGA 설계에서 HBM 컨트롤러를 AXI-Stream으로 추상화하는 경우가 많습니다.
Xilinx HBM Controller IP가 AXI-Stream wrapper로 32-channel access를 제공합니다. 각 channel은 256-bit로 동작하고 내부적으로 16개 HBM channel로 분산됩니다.
Xilinx Alveo U55C (16 GB HBM2)
User logic ──► AXI4 [256-bit × 32 master] │ ▼ HBM Controller IP │ ▼ 16 HBM channels × 2 stack#자주 하는 실수
#”address mapping은 컨트롤러 IP가 알아서 한다”
기본 mapping은 generic입니다. workload-specific tuning을 하면 5~10% bandwidth 추가가 가능합니다. AI training cluster에서 큰 효과입니다.
#bank 수가 많으면 무조건 좋다고 가정
bank가 늘어나면 컨트롤러 큐가 깊어져야 하고 scheduler logic이 복잡해집니다. 큐 자체가 die area를 차지합니다. HBM3의 512 bank가 현재 GPU에서 fully utilize되지 않습니다.
#REFab과 REFpb를 비슷하게 가정
8.9% vs 0.6% bandwidth loss는 15배 차이입니다. 컨트롤러가 REFpb를 지원하지 않으면 AI training의 단가가 크게 달라집니다.
#”open page가 항상 좋다”
random access workload에서는 closed page가 빠릅니다. workload별 page policy 선택이 5~10% 차이를 냅니다. Adaptive가 가장 안전합니다.
#ECC overhead를 무시
system-level ECC를 on하면 bus utilization에서 *12.5%*가 redundancy로 쓰입니다. 그러나 off하면 수일 단위 training에서 bit flip이 모델을 망칠 수 있습니다. 데이터센터 표준은 항상 ECC on입니다.
#정리
- HBM3 컨트롤러는 512 bank를 동시 추적하며 FR-FCFS scheduling으로 동작합니다.
- bank parallelism이 *sustained BW의 80~95%*를 결정합니다.
- address XOR mapping은 연속 access도 자동으로 bank 분산시킵니다.
- open vs closed page policy는 workload pattern에 따라 adaptive로 선택해야 합니다.
- REFpb는 REFab 대비 8.3% bandwidth를 절약합니다. AI training에서 반드시 사용입니다.
- RD/WR turnaround penalty는 batch grouping으로 최소화합니다.
- NVIDIA·AMD·Google·Korean NPU(Rebellions, Sapeon)는 같은 HBM3를 쓰지만 컨트롤러 IP의 차이로 workload별 효율이 5~15% 갈립니다.
- Xilinx 같은 FPGA 솔루션은 AXI-Stream wrapper로 32 master를 HBM channel에 매핑합니다.
#다음 편
Ch 8: NPU·GPU에서의 활용에서는 LLM weight·activation·KV cache가 HBM에 어떻게 자리잡는지를 봅니다. 시리즈의 마무리입니다.
#관련 항목
- Ch 5: 대역폭 계산과 병목 분석
- Ch 6: 열 설계와 전력 관리
- Ch 8: NPU·GPU 활용
- CXL Ch 4: CXL.mem — 외부 메모리 컨트롤러
- BoW Ch 4: BoW Memory — 메모리 트랜잭션의 일반론
HBM·GDDR 심화 · 7 of 12
- 1HBM과 GDDR 분기점 분석 — Bandwidth·Capacity·Cost 트레이드오프
- 2HBM 3D 스택 구조 분해 — TSV·Microbump·Base Die의 역할
- 3HBM2·HBM2E·HBM3·HBM3E 세대 비교 — JEDEC 표준 진화 흐름
- 4GDDR6·GDDR6X·GDDR7 분석 — PAM 신호로 32 Gbps 도달한 경로
- 5메모리 대역폭 병목 분석 — Theoretical vs Achievable·Roofline·Memory Wall
- 6HBM 열 설계와 전력 관리 — Stack 열 부하·Refresh Cost·냉각 솔루션
- 7HBM 메모리 컨트롤러 분석 — Bank·Row·Column·Address Mapping·Scheduling
- 8NPU·GPU에서의 HBM 활용 — Weight·Activation·KV Cache 배치 분석
- 9CXL.mem 분석 — HBM·GDDR·DDR 다음의 메모리 계층
- 10CXL.mem 프로토콜 분해 — M2S·S2M 메시지와 HDM Decoder
- 11CXL Type 1·2·3 디바이스 분류 — Cache·Accelerator·Memory
- 12메모리 풀링과 데이터센터 토폴로지 — CXL Switch와 Fabric
관련 글
CXL.mem 분석 — HBM·GDDR·DDR 다음의 메모리 계층
CXL.mem이 메모리 계층에 끼어드는 자리 — on-package HBM과 DRAM DIMM 사이의 새 tier.
NPU·GPU에서의 HBM 활용 — Weight·Activation·KV Cache 배치 분석
Weight·activation·KV cache — HBM 자리잡기와 시리즈 마무리.
HBM 열 설계와 전력 관리 — Stack 열 부하·Refresh Cost·냉각 솔루션
HBM stack의 열 부하·power state·refresh의 cost와 냉각 솔루션.