引言
本文的目的是帮助有一定CPU微架构基础但是不了解XS-GEM5项目的朋友初步认识XS-GEM5。针对各部分微架构设计的介绍还在持续更新中。
本文会对比说明XS-GEM5与上游GEM5的区别、XS-GEM5的架构与昆明湖RTL的区别。本文会对比以下几点:
- 模拟/仿真的功能支持
- ISA支持
- CPU流水线前端架构
- CPU流水线后端架构
- 访存子系统架构
XS-GEM5简介
XS-GEM5与香山处理器的昆明湖架构同时开始开发,其目的是提高香山处理器的架构探索效率,帮助昆明湖架构达到SPECint2k6
15/GHz的性能。
理论上,1)在进行架构探索之前,需要精准地将架构模拟器与RTL进行对齐;2)架构模拟器的微架构设计应该领先于RTL。实际上,出于项目进展的考虑,目前XS-GEM5与RTL主要对齐了流水线前端架构(包括分支预测器、取指流水线),后端指令调度执行引擎的延迟和计算带宽,缓存访问延迟和带宽,缓存预取和替换算法。
下图展示了截至现阶段(2024年1月),XS-GEM5与RTL的模块对齐程度,其中对齐程度较高的模块用绿色标注,未对齐或差异较大的模块用灰色标注。整体上,XS-GEM5对流水线前端和缓存子系统的对齐程度较高。而在2024年,我们会加强流水线后端的对齐。
性能对比
| 上游GEM5 | XS-GEM5 | 香山昆明湖RTL |
---|
SPECint2k6/GHz | <10 | 15.5 | 14.9 |
SPECfp2k6/GHz | <9 | 16.5 | 14.5 |
XS-GEM5相对于上游GEM5,在性能方面有较大优势,性能提升主要来自访存子系统的大量改进,解耦流水线前端和分支预测器bug
修复。
模拟/仿真的功能支持
| 上游GEM5 | XS-GEM5 | 香山昆明湖RTL |
---|
Difftest | | Y | Y |
RVGCpt | | Y | Y |
Fastforward | Y | Y | |
Functional warmup | Y | Y | Experimental |
M5 checkpoint | Y | | |
SimPoint profiling | Y | | |
SimPoint take cpt | Y | | |
SystemCall Emulation | Y | Partial | |
Topdown analysis | | Y | Y |
Accelerate simulation with PGO | | Y | |
ISA支持
| 上游GEM5 | XS-GEM5 | 香山昆明湖RTL |
---|
Non-RISCV ISAs | Y | | |
RISCV Vector | Partial | RVV 1.0 | RVV 1.0 partial |
RISCV GCB | Partial | Y | Y |
RISCV H | ? | Y | Y |
CSR instruction implementation | 50分? | 60分? | 70分? |
RISCV zcond | ? | Y | |
RISCV zbt | ? | Y | |
CPU流水线前端架构
| 上游GEM5 | XS-GEM5 | 香山昆明湖RTL |
---|
Decoupled frontend | | Y | Y |
Fetch directed prefetching | | Y | Y |
Fetch target buffer | | Y | Y |
Performance of TAGE Broken SCL branch predictor | Broken | Y | Y |
Performance of return addr stack | + | ++ | ++ |
CPU流水线后端架构
| 上游GEM5 | XS-GEM5 | 香山昆明湖RTL |
---|
指令调度、执行延迟 | | 与RTL对齐 | |
集中式保留站 | Y | Y | |
分布式保留站 | | Ongoing | Y |
发射后读寄存器堆 | Y | Y | Y |
发射前读寄存器堆 | | | Y |
真-推测执行 | | Ongoing | Y |
访存依赖预测算法 | Basic storeset with perf bug | Storeset supporting multi producer | Storeset supporting multi producer |
FMA拆分执行 | | Y | Y |
ROB压缩 | | | Y |
Move elimination | | Y | Y |
Recover policy | Rollback only | Rollback or replay | Rollback or replay |
Renaming Vector misc register | | Y | Y |
访存子系统架构
虚存系统(TLB、PTW)
| 上游GEM5 | XS-GEM5 | 香山昆明湖RTL |
---|
Parallel PTW | | Y | Y |
PTW request coalescing | | Y | Y |
L2 TLB | | Y | Y |
TLB prefetching | | Y | Y |
缓存
| 上游GEM5 | XS-GEM5 | 香山昆明湖RTL |
---|
L1 composite prefetcher | Broken | Manually composited prefetcher | Manually composited prefetcher |
L2 composite prefetcher | Broken | Manually composited prefetcher | Manually composited prefetcher |
Prefetching request offloading | | Y; Active & passive | Y; Active only |
VA-prefetching | Y | Y | Y |
Stream prefetcher | Not tuned | Y | Y |
Stride prefetcher | Not tuned | Y | Y |
Berti prefetcher | | Better than stride | |
BOP prefetcher | Broken | Y; with VA support | Y |
SMS prefetcher | | Y | Y |
Temporal prefetcher | | Y | Y |
Complex stride prefetcher | | Y | |
Content-directed prefetcher | | Y | |