Lec 4 调度约束与瞬态历史寄存器(Scheduling & EHRs)
MIT 6.1920 · Constructive Computer Architecture 讲师:Martin Chan / Arvind · 日期:2024-02-15
1. 弹性流水线与并发需求
定义 — 弹性流水线(Elastic Pipeline)
弹性流水线中,相邻级之间用 FIFO 解耦,使各级可独立地以最大速率工作。关键条件:上游规则的
弹性流水线中,相邻级之间用 FIFO 解耦,使各级可独立地以最大速率工作。关键条件:上游规则的
enq 和下游规则的 deq 必须能在同一周期并发执行。x → [inQ] → fifo1 → fifo2 → [outQ]fifo1 的 enq(被 inQ 规则调用)和 deq(被 outQ 规则调用)能否并发,决定了流水线吞吐量。
2. 三种高性能 FIFO
2.1 无冲突 FIFO(Conflict-Free FIFO, CF FIFO)
enq CF deq:只要 FIFO 非满且非空,可同时执行
enq 的效果对 deq 不可见(本周期内)适合:上下游规则速率相同,无需"入队的同时出队"。
2.2 流水线 FIFO(Pipeline FIFO)
- 允许对满 FIFO 执行
enq,条件是同一周期有deq deq优先执行,腾出空间后enq再填入- 关键应用:下游比上游慢时,避免流水线因 FIFO 满而停顿
2.3 旁路 FIFO(Bypass FIFO)
- 允许对空 FIFO 执行
deq,条件是同一周期有enq enq先执行,数据立即透传给deq(0 延迟,组合路径)- 关键应用:缓存命中(hit Q)需要零延迟响应
推论 — FIFO 类型选择 选择 FIFO 类型的核心问题是:上下游规则的调度顺序需求是什么?CF FIFO 用于无依赖情况,Pipeline FIFO 用于"先出后进",Bypass FIFO 用于"先进即出"。三种 FIFO 均可由 1 元素或 2 元素基础 FIFO 推导而来。
3. GCD 流水化示例
GCD 模块通过 FIFO 连接:
bsv
rule invokeGCD;
gcd.start(inQ.first); inQ.deq;
endrule
rule getResult;
let x <- gcd.getResult; outQ.enq(x);
endruleinvokeGCD 调用 start,getResult 调用 getResult——能否并发取决于 GCD 模块内部的调度关系。
4. 冲突矩阵(Conflict Matrix)
对于模块方法,冲突关系同样适用 RS/WS 分析,但表示为方法间的有序对。BSV 编译器自动构建冲突矩阵,生成调度逻辑。
例题 — 1 元素 FIFO 的冲突矩阵
1 元素 FIFO(Reg#(Maybe#(t))):
enq写 data,deq写 data,first读 data→ enq C deq(冲突!)
Sol:1 元素 FIFO 中 enq 与 deq 冲突,不能并发;需换用 2 元素 FIFO 或 CF FIFO。
5. 瞬态历史寄存器(Ephemeral History Register, EHR)
定义 — EHR(Ephemeral History Register)
EHR 是一种特殊寄存器,在单个时钟周期内提供多个有序读写端口(port)。端口按下标排序:端口 [0] 最先,端口 [n-1] 最后。同一周期内,后面的端口能看到前面端口写入的值(组合传播),最终只有最后一次写入保存到真实寄存器。
EHR 是一种特殊寄存器,在单个时钟周期内提供多个有序读写端口(port)。端口按下标排序:端口 [0] 最先,端口 [n-1] 最后。同一周期内,后面的端口能看到前面端口写入的值(组合传播),最终只有最后一次写入保存到真实寄存器。
EHR#(n, type) — n 个端口的 EHR。bsv
EHR#(2, Bit#(32)) counter <- mkEHR(0);
rule inc_low; counter[0] <= counter[0] + 1; endrule // 端口 0
rule inc_high; counter[1] <= counter[1] + 1; endrule // 端口 1若两规则都触发,端口 0 先写,端口 1 读到端口 0 写后的值再加 1,等效于 counter += 2。
5.1 EHR 实现 Conflict-Free FIFO
CF FIFO 的关键:deq(端口 0)和 enq(端口 1)不冲突且顺序无关。
- 用
count_ehr[0]给deq递减,用count_ehr[1]给enq递增 - 由于端口不同,写集合不重叠 → 可并发
推论 — EHR 是细粒度并发的关键 普通 Reg 只有一个逻辑端口(读+写),多规则同时写会冲突。EHR 通过多端口将原本冲突的写操作"分开"到不同端口,在硬件上用多路选择器实现有序传播,代价是额外的逻辑面积。
6. 三种 FIFO 与 EHR 对应关系
| FIFO 类型 | enq/deq 关系 | EHR 端口分配 |
|---|---|---|
| CF FIFO | enq CF deq | enq 和 deq 用不同 EHR 端口 |
| Pipeline FIFO | deq < enq | deq 用端口 [0],enq 用端口 [1] |
| Bypass FIFO | enq < deq | enq 用端口 [0],deq 用端口 [1] |
本讲总结
高性能 FIFO 通过不同的 enq/deq 调度关系(CF、SC)实现不同的并发语义;EHR 以多端口有序写入机制,使原本冲突的状态更新可以并发执行;三种 FIFO 均可用 EHR 实现,是构建弹性流水线处理器的基础组件。