第 3 章:性能计数器
学习目标
- 实现性能计数器
- 通过 CSR 读取统计
- 分析性能数据
3.1 思考:如何监控性能?
需要实时监控处理器运行状态。
解决方案:性能计数器 CSR!
3.2 设计性能计数器
// 性能计数器 CSR
reg [63:0] mcycle; // 周期计数
reg [63:0] minstret; // 指令计数
reg [31:0] mbranch; // 分支数
reg [31:0] mbranch_miss; // 分支预测失败
3.3 CSR 地址映射
0xB00: mcycle[31:0]
0xB80: mcycle[63:32]
0xB02: minstret[31:0]
0xB82: minstret[63:32]
0xBC0: mbranch
0xBC1: mbranch_miss
3.4 软件读取
uint64_t read_cycle() {
uint32_t lo, hi;
asm volatile("csrr %0, mcycle" : "=r"(lo));
asm volatile("csrr %0, mcycleh" : "=r"(hi));
return ((uint64_t)hi << 32) | lo;
}
思考:如何计算分支预测准确率?