首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MIPS r10000 fetch如何隐藏指令缓存延迟?

MIPS r10000 fetch如何隐藏指令缓存延迟?
EN

Stack Overflow用户
提问于 2018-09-09 20:52:22
回答 1查看 266关注 0票数 4

我正在研究mips r10000的不同管道阶段。这篇论文说,处理器每次从指令高速缓存中提取4条指令。虽然我不知道指令缓存的确切命中延迟,但指令缓存的延迟必须大于一个周期,在Haswell处理器中,L1数据缓存的命中延迟约为4个周期。

因此,如果我们假设L1指令缓存延迟为3-4个周期,那么处理器如何在每个周期获取4条指令?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-10 02:11:37

MIPS R10000具有单周期延迟指令高速缓存,并且可以在没有对齐限制的情况下获取高速缓存块中的四个连续的指令块。

机械地说,这可能意味着它使用了四个至少部分独立寻址的SRAM存储体(高速缓存组地址解码可以共享)。

由于每个存储体都是可独立寻址的,因此可以访问包含在16个字中的任何连续的四个字序列。寻址行0,0,0,0获取单词0, 1, 2, 3;行1,0,0,0获取单词4, 1, 2, 3;行1,1,0,0获取单词4, 5, 2, 3;...;行3,3,3,2获取单词12, 13, 14, 11;行3,3,3,3获取单词12, 13, 14, 15

(相同的组可以跨越缓存块边界,但随后必须并行地确认两个缓存块命中。对于较大高速缓存块中的顺序访问的常见情况,先前访问的路的记忆将减少到一组检查;一组将使用记忆的路,而另一组将在进入新的高速缓存块时执行正常检查。页面交叉也是一个类似的问题。)

(多指令提取的常见替代方案确实具有自然对准的块的对准约束,例如,16字节。)

在第二个流水线阶段(解码)检测到分支之前,此处理器不会重定向指令获取,因此,即使预测正确,采用的分支也会引入一个周期气泡。可能直到一些循环之后才能确定不正确的预测,因为执行开始于第四流水线阶段,并且指令被乱序执行。(错误预测的执行分支可能会解码已在执行分支气泡中获取的指令,因为这些指令存储在“恢复高速缓存”中。)

缓冲指令可以消除这样的风险,因为由于数据相关性和其他风险,吞吐量很少接近最大值。

一般而言,高速缓冲存储器可提供每次提取多个字(自然对齐限制便于单个存储体提供区块)或每周期被多次存取(例如,比流水线的其它部分更深入地流水线传送指令高速缓冲存储器或使用昂贵的多端口SRAM)。

只要在每个周期提供新地址,就可以在每个周期完成对多个连续指令的获取。如果每个周期有两个地址可用(预测),则可以在同一周期中获取采用分支之后的指令。(另一种减少采用分支的惩罚并提供其他分支后优化机会的方法是使用跟踪缓存。)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52244725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档