MIPS r10000如何获取隐藏指令缓存延迟?

mat*_*ker 4 processor mips cpu-architecture

我正在研究mips r10000的不同管道阶段.该论文称处理器每次从指令缓存中每个周期取出4条指令.但是指令缓存的延迟必须超过一个周期,但我不知道指令缓存的确切命中延迟,Haswell处理器中L1数据缓存的命中延迟大约是4个周期.

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

Pau*_*ton 6

MIPS R10000具有单周期延迟指令高速缓存,并且可以在高速缓存块内获取四个指令的连续而没有对齐约束.

从机械上讲,这可能意味着它使用了四个具有至少部分独立寻址的SRAM存储区(可以共享高速缓存集地址解码). 4个16字的银行数组

由于每个存储体是可独立寻址的,因此可以在图中看到,可以访问16个字中包含的四个字的任何连续序列.寻址行[0,0,0,0]得到字[0,1,2,3](字0-3); 行[1,0,0,0]得到单词[4,1,2,3](单词1-4); 行[1,1,0,0]得到单词[4,5,2,3](单词2-5); ...; 行[3,3,3,2]得到单词[12,13,14,11](单词11-14); 行[3,3,3,3]得到单词[12,13,14,15](单词12-15).

(相同的银行可以跨越缓存块边界,但是必须并行确认两个缓存块命中.对先前访问的方式的记忆将减少到一组检查大型缓存块中的顺序访问的常见情况;一组将使用memoized方式,另一组将在进入新的缓存块时执行正常检查.页面交叉是一个类似的问题.)

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

该处理器直到在第二个流水线级(解码)中检测到分支才重定向指令获取,因此即使具有正确的预测,所采用的分支也引入了一个循环气泡.在某些周期之后可能无法确定不正确的预测,因为执行在第四个流水线阶段开始,并且指令是无序执行的.(错误预测的已采用分支可能会解码已采用的分支气泡中已获取的指令,因为这些指令存储在"恢复缓存"中.)

缓冲指令可以消除这些危险,因为数据依赖性和其他危险,吞吐量很少接近最大值.

通常,高速缓存可以提供每个提取多个字(自然对齐限制促进提供块的单个存储体)或者每个周期多次访问(例如,比管道的其他部分或使用昂贵的多端口更深入地管理指令高速缓存) SRAM).

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