计算流水线
下面的图就可以知道流水线的思维了,I1 ,I2 ,I3 为需要经过ABC 组合逻辑的信号,可以看到当I1 到了 B 时,I2 已经到了A 了,
同理 I3也一样,流水线的思维提高了工作效率.
这里说一下吞吐量 , 延迟 , 时间周期的计算,下图为例,可以看到, 假如我们的时间周期为 70ps. 那么下面一个信号走完就需要 6*70 = 420ps , 那么 420ps 就是延迟, 吞吐量就是单位时间内可以处理的信号量,可以知道用一除以70乘以一个时间单位得到 14.29 GIPS .即是时间周期的倒数.
流水线的局限性
- 不一致的划分
我们可以看到以B 为周期(以为B里的延迟最大,思考一下要是选AC会是怎么样的),那么AC中会有空闲的地方.
- 流水线过深,收益反而下降
流水线的改进
电路重定时( circuit retiming )
将计算PC的部分移到时序的开头.具体的查看下面的链接
分支预测
当出现分支的时候, 猜测分支的方向并根据猜测的方向进行预测.
流水线冒险
一个准备写入的时候,一个提前先拿了出来就会造成数据错误,解决这个问题可以通过以下的方式
- 用暂停来比避免数据冒险(stalling)
但是这样会暂停三个周期,严重影响了性能.
- 用转发来避免数据冒险
还是上图的那种情况,一个写入,一个读取,读取的时候发现这个值需要被其他操作写入,那么读取的操作直接就拿写入的值就够了,不再等其他操作写入后,我再读取了(仔细想想,类型于并发中的可视性啊!!)
- 加载/使用数据冒险
下面为暂停+转发的方式来解决加载/使用冒险