sCROOGe: RISC-V GPU(Vortex) 에 out-of-order 실행을 RTL 로 직접 만들어, simulator 가 놓친 성능·면적·전력·timing 을 다시 재기
papers/sCROOGeː_Circuit-level_Design_and_Optimization_Framework_for_RISC-V_Out-of-Order_GPUs.pdf (17쪽, 본문 13쪽 + appendix·참고문헌) · §V-C p.6 = 논문이 그렇게 쓴 절·쪽 · 해석 = 논문 내용에서 요약자가 끌어낸 설명 · 논문에 없음 = 배경지식·예시 · 용어는 1 절 용어표의 뜻으로만 쓴다 · 그림은 누르면 크게 열린다0한눈에 보기
GPU 는 warp 를 바꿔 가며 stall 을 숨기는데(TLP), 동시에 돌릴 warp 가 부족한 workload 는 stall 이 그대로 드러난다. 그래서 한 warp 안에서 독립 명령어를 먼저 실행하는 out-of-order(OoO) GPU 가 제안돼 왔지만 모두 software simulator 로만 평가됐다 §I p.1.
이 논문은 frontend OoO(Issue stage)와 backend OoO(Operand Collect stage)를 open-source RISC-V GPU 인 Vortex 에 합성 가능한 RTL 로 처음 구현하고, ASIC synthesis 로 성능·면적·전력·timing 을 다시 쟀다 Abstract p.1.
1배경: GPU pipeline, 의존성, RTL 평가
GPU 의 SM 은 warp 단위로 명령어를 순서대로(in-order) 내보내고, register 의존성(hazard)이 풀릴 때까지 그 warp 를 멈춘다. OoO 는 이 순서를 깨되 결과가 같도록 hazard 를 추적해야 한다 §IV p.4–5.
이 논문의 주장은 그 추적 회로의 비용(면적·전력·critical path)은 RTL 을 합성해 봐야 정확히 보인다는 것이다 §II p.2–3.
1.1용어표
| 용어 | 정확한 뜻 (이 요약에서) | 기호 | 논문 원문 표기 |
|---|---|---|---|
| 1.1.1.1warp · thread | warp = 같은 명령어를 함께 실행하는 thread 묶음. thread 수 = warp 하나의 폭(SIMD width) | W, T | "warps", "threads per warp". 구성은 (W, T) 로 적는다. 예 (32,4) = 32 warp × warp 당 4 thread |
| 1.1.1.2SM (Vortex core) | warp scheduler·pipeline·register file·L1 을 가진 실행 단위 하나. 평가는 processing block 1 개, L1 16 KB 의 SM 하나 | – | "SM", "core" 혼용 (§VII-A p.8) |
| 1.1.1.3TLP · ILP | TLP = 동시에 실행 가능한 warp 수에서 오는 병렬성. ILP = 한 warp 의 명령어 열 안에서 서로 독립인 명령어의 병렬성 | – | "Thread-Level Parallelism", "Instruction-Level Parallelism" |
| 1.1.1.4OoO | 앞 명령어가 stall 일 때 뒤의 독립 명령어를 먼저 실행하는 방식. 이 논문은 warp 안의 명령어 순서를 바꾼다 | – | "Out-of-Order (OoO) execution", "instruction reordering" |
| 1.1.1.5frontend OoO | Issue stage 에서 순서를 바꾸는 방식. GhOST·SIMIL 계열. Issue Buffer + Dependence Checker 로 구현 | – | "frontend-based OoO". CPU 의 fetch/decode frontend 와 다른 뜻이다 |
| 1.1.1.6backend OoO | Operand Collect(OC) stage 에서 순서를 바꾸는 방식. LOOG 계열. Collector Unit + RAT + RRS 로 구현 | – | "backend-based OoO" |
| 1.1.1.7baseline | 수정하지 않은 in-order Vortex SM | – | "baseline Vortex" |
| 1.1.1.8CU (Collector Unit) | OC stage 에서 명령어 하나의 operand 를 모으는 slot. backend OoO 에서는 reservation station 역할 | N | "Collector Units (CUs)". compute unit(AMD) 과 다른 뜻이다 |
| 1.1.1.9IsB (Issue Buffer) | frontend OoO 에서 decode 된 명령어를 담아 두고 독립인 것을 고르는 buffer. entry 수가 reordering 깊이 | – | "Issue Buffer (IsB)" |
| 1.1.1.10InFl (In-Flight buffer) | frontend OoO 에서 이미 issue 됐고 writeback 전인 명령어의 destination register 를 기록하는 buffer | – | "In-Flight buffer (InFL)". 원문 표기가 InFL·InFl 로 섞인다 |
| 1.1.1.11RAT | register 마다 "값을 RF 에서 읽을지, 어느 RRS entry 의 broadcast 를 기다릴지" 를 적은 표 | – | "Register Alias Table" |
| 1.1.1.12RRS | backend OoO 에서 writeback 을 기다리는 명령어의 이름표(ID)와 결과 임시 저장 칸. CU 를 일찍 풀어 주려고 둔다 | R | "Register Renaming Stack" |
| 1.1.1.13UUID | warp 마다 증가하는 명령어 순번. 원래 program order 를 기억해 commit·memory 순서를 지킨다 | N bit | §V-A 는 "Universal Unique Identification", §I 은 "unique instruction identifiers" 라 쓴다 |
| 1.1.1.14scoreboard | baseline 이 쓰는, 쓰기 대기 중인 register 표. 의존 명령어를 멈춘다 | – | "scoreboard" |
| 1.1.1.15IPC | cycle 당 실행한 warp 명령어 수. 같은 주파수일 때 성능 비교 지표 | – | "Instructions Per Cycle". 원문 "speedup", "IPC gain", "IPC Delta" 는 모두 baseline 대비 IPC 증가율 |
| 1.1.1.16RTL · synthesis · PnR | RTL = 회로를 register 와 논리로 적은 HDL 코드. synthesis = RTL 을 표준 cell 회로로 바꾸기. PnR = 그 cell 을 칩 위에 배치·배선하기 | – | "Register Transfer Level", "logic synthesis", "Place-and-Route" |
| 1.1.1.17PPA · ADP · EDP | PPA = 성능·전력·면적. ADP = 면적 × 실행시간, EDP = 에너지 × 실행시간. 둘 다 작을수록 좋다 | – | "Area-Delay Product", "Energy-Delay Product" (§VII-F p.12) |
| 1.1.1.18iso-area | 면적을 같게 맞춘 비교. 이 논문은 OoO SM 과 "warp 수를 2배로 늘린 in-order SM" 을 비교한다 | – | "iso-area" (Table IV) |
1.2Vortex 의 6 단 pipeline 과 OoO 가 끼어드는 자리
1.3hazard 세 종류와 register renaming
1.4simulator 와 RTL 평가의 차이
SIMT · warp scheduling
GPU 는 thread 여러 개를 warp 로 묶어 한 명령어로 함께 실행한다(SIMT). warp scheduler 는 매 cycle 실행 가능한 warp 하나를 골라 명령어를 낸다. NVIDIA Volta·Ampere·Blackwell 도 sub-core 당 cycle 마다 warp 명령어 하나만 schedule 한다 §I p.1.OoO 는 warp 를 더 늘리지 않고 한 warp 의 명령어 순서를 바꿔 stall 을 줄이는 대안이다.Tomasulo · reservation station
CPU OoO 의 고전 방식으로, 명령어를 reservation station 에 두고 operand 가 broadcast 로 도착하면 실행한다 논문에 없음. LOOG 는 CU 를 reservation station 으로 썼다 §V-C p.6.sCROOGe backend 는 CU 를 dispatch 직후 풀고, writeback 대기는 작은 RRS entry 가 맡는다.critical path · 최대 주파수
한 cycle 안에 신호가 지나야 하는 가장 긴 논리 경로다. 이 경로 지연이 clock 주기를 정한다 논문에 없음. sCROOGe 에서 global critical path 는 Execute stage 993 ps 다 Table III p.9.OoO 회로가 Issue stage 경로를 늘려도 993 ps 를 넘지 않으면 주파수는 그대로이고, IPC 만으로 성능을 비교할 수 있다.Vortex
RISC-V ISA 를 확장한 open-source soft GPGPU 다. 전부 합성 가능한 Verilog 이고, SM 수·cache·FU 수 등을 설정할 수 있다. 소프트웨어는 POCL(OpenCL)·LLVM 을 쓴다 §IV p.4 §VII-A p.8.sCROOGe 는 Vortex 위에 두 OoO 방식을 얹은 framework 다.2문제: simulator 는 OoO GPU 의 이득은 크게, 비용은 작게 보았다
Accel-Sim 은 실제 V100 대비 per-kernel cycle 오차가 평균 11.55%, Deepbench 는 30% 초과, GRU RNN inference 는 73% 다 §II p.2.
64 warp × 32 thread 에서 sCROOGe RTL 로 잰 IPC 이득은 backend 4.18%, frontend 0.86% 로, simulator 기반 원 논문 보고치(23%·6.9%·31%)보다 훨씬 작고 면적·전력 overhead 는 더 크다 Table II p.3.
simulator 가 틀리는 이유 (논문 설명)
- 2.3
- 2.3.1면적: GPUWattch 의 McPAT 변형은 CPU template 에서 GPU 면적을 외삽하고 최신 공정으로 정규화하지 못해, 새 micro-architecture 평가에는 부정확하다 §II p.3.
- 2.3.2전력: AccelWattch 의 SASS 모드는 세밀한 구조 변경을 잡지 못하고, 추가 부품을 일부만 합성해 공정 정규화하므로 실제 연결·크기를 반영하지 못한다 §II p.3.
- 2.3.3예: LOOG 의 simulator 분석은 CU 32→48 확장 비용을 면적 2.57%, 전력 1% 미만으로 봤지만, sCROOGe 는 CU 8→12 에서 면적 10.3%, 전력 10.4% 를 쟀다 §II p.3.
- 2.3.4timing: OoO 구조는 critical path 를 늘리거나 바꾸고, 구조가 커질수록 interconnect 가 비선형으로 늘지만 simulator 는 이를 다루지 않는다 §II p.3.
- 2.3.5속도: RTL 을 FPGA 로 emulation 하면 수백 MHz 로 돌아 Accel-Sim(수 kHz)보다 빠르다고 논문은 쓴다 §II p.3. 다만 이 논문의 성능 측정은 Verilator RTL simulation 이며 전체 재현에 단일 process 로 약 270 시간이 든다 Appendix B p.14.
3기법: sCROOGe 의 두 OoO 방식과 RTL 최적화
두 방식 공통으로 UUID 생성기를 두어 원래 program order 를 기억한다. frontend OoO 는 Issue Buffer 에서 Dependence Checker 로 RAW·WAR·WAW 를 검사해 독립 명령어를 먼저 내보내고, backend OoO 는 CU 에서 RAT 로 renaming 해 operand 가 준비된 명령어를 먼저 dispatch 한다 §V p.5–7.
RTL 로 만들면서 broadcast 배선 축소, scoreboard 제거, LSQ 재평가 같은 설계 결정을 추가로 내렸다 §V-C·VI p.7–8.
3.1① UUID: 짧은 순번을 순환해 쓰기
OoO 로 실행해도 commit 과 memory 순서를 맞추려면 각 명령어의 원래 순번이 필요하다. sCROOGe 는 warp 마다 오름차순 UUID 를 붙여 Commit stage 까지 함께 보낸다. 이 방식으로 fully associative reorder buffer 없이 순서를 지킨다고 논문은 쓴다 §V-A p.5.
Fig.3 — out-of-bounds 검사 회로
3.2② frontend OoO: Issue Buffer 에서 독립 명령어 먼저
decode 된 명령어는 Issue Buffer(IsB)에 들어가고, Dependence Checker 가 IsB 와 In-Flight buffer(InFl)의 register 를 비교해 의존 bit-vector 를 만든다. Issue Arbiter 는 독립 명령어 중 IsB ID 가 가장 낮은 것을 고른다 §V-B p.5–6. RAW 는 rs 3 개를 InFl·IsB 의 모든 rd 와, WAW 는 rd 끼리, WAR 는 rd 를 IsB 의 rs 와만 비교한다. Issue 이후는 in-order 라 InFl 에서는 WAR 가 생기지 않기 때문이다 §V-B p.5.
Fig.4 — Dependence Checker 회로 · GhOST 와 다른 점
- 3.2.3
- 3.2.3.1GhOST 는 IBuffer 에서 IsB 로 in-order 로 옮기는 arbiter 를 두지만, sCROOGe 는 Fetch·Decode 처리량이 cycle 당 1 명령어라 decode 쪽 IBuffer 를 없앴다 §V-B p.5.
- 3.2.3.2GhOST 의 synchronization 제어 flag 도 Schedule stage 가 synchronization 을 처리하므로 필요 없다 §V-B p.5.
3.3③ backend OoO: CU 에서 operand 준비된 명령어 먼저
명령어는 순서대로 CU 에 들어간다. CU 는 RAT 를 보고 source register 를 RF 에서 읽을지, 어느 RRS entry 의 broadcast 를 기다릴지 정한다. operand 가 다 모인 CU 중 하나를 Dispatch Arbiter 가 매 cycle Execute 로 보내므로, 늦게 들어온 명령어가 먼저 실행될 수 있다 §V-C p.6–7. RAT 가 register 이름을 RRS ID 로 바꾸므로 WAR·WAW 가 사라지고, scoreboard stage 는 없앴다 §V-C p.6.
Fig.8 · Fig.9 — writeback/broadcast 회로 · memory 명령어 reordering 을 뺀 이유
3.4④ RTL 에서 내린 최적화: broadcast 배선과 scoreboard 제거
backend OoO 는 RRS entry $R$ 개 각각이 CU $N$ 개의 rs 3 칸 모두에 결과를 보낼 수 있어야 하므로, warp 당 thread $T$ 개면 배선이 $3 \times N \times R \times T \times \text{datasize}$ 다. writeback 은 cycle 당 하나뿐이므로, sCROOGe 는 중간 result register 하나를 두어 배선을 $4 \times N \times T \times \text{datasize}$ 로 줄였다. 추가 cycle 은 writeback 에 이미 필요한 두 stage 안에 숨는다 §VI p.8.
frontend 최적화 — frontend OoO 에서 "per-warp oldest" 명령어를 고르면 그 명령어가 scoreboard 로 가서 의존 때문에 pipeline 을 멈추는 일이 잦았다. Issue Arbiter 에 독립 명령어만 주도록 바꾸자 IPC 가 2% 더 오르고, per-warp oldest buffer 와 scoreboard 의 SRAM 배열과 관련 논리를 없앨 수 있었다 §VI p.8. 논문은 이런 결정이 simulator 기반 연구에서는 고려되지 않았다고 쓴다 §VI p.8.
4구현
두 방식을 SystemVerilog 로 구현하고 Synopsys Design Compiler(v2022.12)로 GF 22nm FDSOI(TT, 0.9 V, 25°C)에 합성했다. RF·local memory·cache 는 GF Memory Compiler 의 SRAM macro 를 썼고, 전력은 gate-level simulation 의 VCD switching activity 를 PrimeTime 으로 분석했다 §VII-A p.8.
성능은 Verilator RTL simulation 으로 kernel 별 명령어·cycle 을 쟀고, 일부 구성은 Cadence Innovus(v23.11) PnR 과 IMEC N2(2nm) PDK 로 다시 확인했다 Appendix B·H p.14.
실험 구성 세부
| 항목 | 값 | 근거 |
|---|---|---|
| 4.1.1평가 단위 | Vortex SM 1 개 (processing block 1 개, L1 16 KB). 수정이 SM 안에 한정되므로 GPU 전체로 확장된다고 논문은 쓴다 | §VII-A p.8 |
| 4.1.2DRAM | Ramulator 연동 | §VII-A p.8 |
| 4.1.3구성 범위 | (warp, thread) = (4,4) ~ (64,32). NVIDIA 는 32·48·64 warp × 32 thread, embedded GPU 는 더 좁다 | §VII-A p.8 |
| 4.1.4benchmark | Vortex framework 의 22 개 (OpenCL, POCL + LLVM) + ML 4 개(llama2-Gemm, CNN-Layer, Squeeze-Layer, llama-260k) | §VII-A p.8, §VII-C p.10–11 |
| 4.1.5synthesis 주파수 | timing 분석은 최대 1 GHz, 면적·전력 DSE 는 400 MHz | §VII-C p.9, Fig.19 |
| 4.1.6PnR | Cadence, 400 MHz (22nm) · 1.2 GHz (2nm) | §VII-G·H p.12–13 |
| 4.1.7artifact | Zenodo 10.5281/zenodo.19453033, Docker, RAM 32 GB 초과, 성능 실험 단일 process 약 270 h | Appendix p.14 |
| 4.1.8공개 범위 | RTL 전체 공개. 표준 cell·memory compiler 는 NDA 로 비공개, 면적·전력은 csv 로 제공 | Appendix E·H p.14 |
5평가
두 OoO 모두 Issue stage critical path 가 늘지만 Execute stage(993 ps)를 넘지 않아 baseline 과 같은 1 GHz 로 동작하므로, 성능은 IPC 로 비교한다 §VII-C p.9. backend 가 모든 구성에서 frontend 보다 IPC 이득이 크고, (32,4) 에서 application 별 최대 27.3% 다 §I p.2 §VII-C p.9–10.
비용은 frontend 가 면적 최대 7.5%, 전력 8.2%, backend 가 28.6%, 32.1% 이고, 같은 면적의 in-order SM(warp 2배) 대비 backend 가 IPC 평균 14.4% 높다 §VII-E p.11–12.
Fig.10 · Fig.11 · Fig.12 — workload 의 ILP 와 baseline 성능
Fig.15 · Fig.17 · Fig.18 — 여러 SM, ML workload, cache 크기
Fig.20 · Fig.21 · Fig.22 — 주파수·전압과 component 별 비용
Fig.24 — PnR 과 2nm 로 synthesis 결과 다시 확인
6결론과 한계
논문의 결론은 sCROOGe 가 GPU 의 frontend·backend instruction reordering 을 처음으로 합성 가능한 RTL 로 구현해 면적·전력·주파수를 ASIC synthesis 로 검증하는 platform 을 만들었고, 가벼운 OoO 가 EDP 를 최대 27.9% 줄이며 warp 를 늘리는 방식보다 14% 넘게 앞선다는 것이다 §VIII p.13.
논문에 limitation 절은 없다. 아래는 요약자가 정리한 한계다 논문에 없음.
| 한계 | 근거 |
|---|---|
| 6.1.1평가 대상이 Vortex SM 이다. NVIDIA 급 구성(64 warp × 32 thread)에서는 OoO 이득이 작고(backend 4.18%, frontend 0.86%) 면적·전력 overhead 가 커서, 논문 스스로 이 구성에서의 유효성에 의문을 적는다 | Table II p.3, §VII-E p.11 |
| 6.1.2RTL 정확도의 기준이 실측 실리콘이 아니다. Accel-Sim 은 V100 실측과 비교했지만, sCROOGe 의 cycle·전력은 Verilator·synthesis·PnR 결과이며 실제 칩 측정은 없다 | §II p.2, §VII-G p.12 |
| 6.1.3workload 가 Vortex 의 OpenCL benchmark 22 개와 작은 ML kernel 4 개(llama-260k 등)라, 대형 GPU workload(Rodinia·Deepbench 전체, 큰 LLM)에서의 이득은 확인되지 않았다 | §VII-A p.8, §VII-C p.10–11 |
| 6.1.4Table II 비교는 sCROOGe 의 RTL 판과 원 논문 simulator 수치의 비교라, baseline micro-architecture(Vortex vs NVIDIA 계열)의 차이도 함께 섞여 있을 수 있다 | §II p.3 (iso-resource 구성 가정) |
| 6.1.5memory 명령어 reordering(LSQ)은 Vortex workload 에서 상한 1.1% 미만이라 뺐다. memory 병렬성이 큰 workload 에서는 판단이 달라질 수 있다 | §V-C p.7–8 |
| 6.1.6공정 라이브러리가 NDA 라 면적·전력 수치는 csv 로만 재현 가능하고, 같은 PDK 접근권이 있어야 독립 검증할 수 있다 | Appendix H p.14 |
7관련 연구
Table I 은 기존 OoO GPU 7 개가 모두 simulator(PTXPlus·SASS·Multi2Sim)로 성능을, GPUWattch·AccelWattch·부분 합성으로 전력·면적을 평가했고, clock(timing)은 아무도 평가하지 않았다고 보인다 Table I p.2.
sCROOGe 는 frontend·backend 를 모두 RTL 로 구현하고 22nm·2nm 전체 합성으로 PPA 와 clock 을 함께 잰다 §III p.4.
관련 연구 한 줄씩
| 연구 | 한 일 | sCROOGe 와 차이 |
|---|---|---|
| 7.2.1LOOG | OC stage 에서 CU + register renaming 으로 backend reordering | simulator 평가. CU 를 writeback 까지 점유, LSQ 포함 (§I, §V-C) |
| 7.2.2GhOST · SIMIL | Issue stage 에서 dependence checker 와 queue 로 frontend reordering, renaming 없음 | simulator + 부분 합성. IBuffer·sync flag 등 sCROOGe 에서 없앤 부품 있음 (§III, §V-B) |
| 7.2.3Warped-P | stall 중 독립 명령어를 pseudo-speculative 하게 issue | speculative path 에 한정, 진짜 OoO 아님 (§III p.4) |
| 7.2.4HAWS | compiler hint 로 stall 중 issue 를 안내 | compiler 의존 (§III p.4) |
| 7.2.5Turbulence | 거리 기반 operand 인코딩으로 ISA 를 바꿔 renaming 회피 | ISA·toolchain 변경 필요 (§III p.4) |
| 7.2.6MIAOW · Vortex · Skybox · SoftGPU · VeriGPU · Nyuzi | 합성 가능한 open-source GPU RTL | 모두 in-order. MIAOW 는 cache·memory controller 를 생략한 hybrid 모델 (§III p.4) |
8세미나 발표 대본 (약 19 분)
Fig.1~24 와 Table I~IV 를 발표 순서대로 놓고, 그림마다 말할 내용을 2~4 문장으로 적었다. 세부 회로와 지엽적인 수치는 줄이고, 문제 → 설계 → 실험 환경 → 평가 흐름을 남겼다.
발화문은 요약자가 쓴 것이고 논문에 없음, 수치와 주장은 원문에서 확인한 것만 넣었다. caption 끝의 시간은 권장 분량이다.