当前位置:网站首页>超标量处理器设计 姚永斌 第2章 Cache --2.4 小节摘录
超标量处理器设计 姚永斌 第2章 Cache --2.4 小节摘录
2022-06-11 21:42:00 【岐岇】
2.4 超标量处理器的取指令

如果一个超标量处理器在每周期可以同时解码4条指令,这个处理器就称为4-way的超标量处理器,此处理器每周期应该能够从I-Cache中至少取得4条指令,才能喂饱后续的流水线,如果少于这个值,则会造成后面的流水线浪费。

对于一个n-way超标量处理器来说,它给出一个取指令的地址后,I-Cache应该能够至少送出n条指令,称这n条指令为一组(fetch group)。I-Cahce支持这个功能最简单的方式就是使用data block的大小为n个字,每周期将其全部进行输出如果处理器送出的取指令地址是n字对齐的,那么此时就可以实现每周期从I-Cache中读取n条指令的功能,在数据块data block部分需要n个32位的SRAM,当I-Cache命中时,这些SRAM会同时进行输出。但是由于存在跳转指令,处理器送出的取指令地址不可能总是n字对齐。
当取指令的地址不再是是字对齐时,一个组fetch group中的指令就可能落在两个Cache line中,但是对于Cache来说,每周期只能访问一个Cache line,这会导致在一个周期内无法取出4条指令,使得后续流水线无法得到充足的指令,使部分资源空置。
处理器每周期取出的指令多余它能够解码的指令个数,通过一个缓存来将多余的指令缓存起来,这样就可以使后续的流水线得到充足的指令,避免了硬件资源的浪费,这些指令会存储到一个称为指令缓存Instruction Buffer,IB地方,后续的指令解码器会从指令缓存中取指令。
即使当前周期送出的取指令地址不是四字对齐,只要以后的周期中不出现引起指令的执行顺序改变的情况,例如分支指令和异常等情况,下个周期取指令的地址也会变成四字对齐,此时就可以在一个周期内取出四条指令了。
其实在现实世界中,分支指令出现的频率还是比较高的,这一方面会导致取指令的地址无法四字对齐,另一方面还会在分支指令执行的时候导致过多的无用指令进入流水线,因此需要对分支指令进行预测。
即使取指令的地址不是四字对齐的,仍旧可以在一个周期内读取4条指令,最简单的实现方法是使数据块data block大小变大,例如其包含8个字,只要取指令的地址不是落在数据块的最后三个字,就可以在每周期内读取4条指令。这样做的前提是增大了数据块的容量,如果在Cache的总容量一定的情况下,意味着Cache set的个数会减少,可能会增大Cache miss的概率。
而且,如果Cache的每个数据块是8个字,是不是也需要使用8个32位的SRAM来实现呢? 问题就是如果SRAM的个数过多,会导致保护电路也占用过多的面积,而且要从8个SRAM的输出中选用4个字也是一件很浪费电路的事情。
若一个Cache line中包含的8个字实际上占据了SRAM的两行,因此共使用了4个32位的SRAM。其中需要一段重排序的逻辑电路,对4个SRAM的4条指令进行重排序,使它们满足最原始的指令顺序,这样才能够使后续的流水线得到正确的指令。此外,当取指令的地址指向了Cache line中最后的三条指令的某一条时,此时本周期并不能输出4条指令,因此在重排序逻辑电路中还需要假如指示每条指令是否有效的标志信号,这样才能够将有效的指令写入到后续的指令缓存Instruction Buffer中。
为什么要实现分支预测呢?因此在超标量处理器中,并行度很高,流水线很深,一条指令从进入流水线直到结果被计算出来,中间会经历很多段流水线,如果使用最简单的静态预测方法,那么一旦发现这条分支指令是需要执行的,就需要将流水线中,在分支指令之后进入流水线的所有指令都抹掉,也就是这段时间做了无用功。如果能够提起知道在本周期取出的指令中,那条指令是分支指令,且可以预知这条分支指令的结果,那么就可以减少流水线被打断的次数。
实现分支预测之后,从I-Cache中取指令的同时,已经可以知道当前指令组fetch group中那条指令时分支指令,如果它被预测执行,那么指令组中位于它之后的指令就不应该进入到后续的流水线。
在实现虚拟存储器VA的处理器中,处理器送出的取指令地址是虚拟地址,需要使用一定的方法将其转换为物理地址,然后才能够从存储器中取指令,在这个转换过程中可能发生很多事情,它们都可以打断流水线的正常执行。
边栏推荐
- 自定义实现offsetof
- Redis basic data type (list)
- Huawei equipment configuration hovpn
- RPA超自动化 | 农耕记携手云扩加速财务智能化运营
- Add anti debugging function to game or code (application level)
- Classes and objects (2)
- 189. rotation array
- LeetCode-110-平衡二叉树
- JVM | virtual machine stack (local variable table; operand stack; dynamic link; method binding mechanism; method call; method return address)
- Leetcode-104- maximum depth of binary tree
猜你喜欢

Nmap进行主机探测出现网段IP全部存活情况分析

LabVIEW Arduino electronic weighing system (project Part-1)

学习位段(1)

2021 Niuke multi school 5 double strings

JVM | runtime data area; Program counter (PC register);

Release of version 5.6 of rainbow, add multiple installation methods, and optimize the topology operation experience

zypper命令使用示例

Cdr2022 serial number coreldraw2022 green key
![[niuke.com] dp31 [template] complete Backpack](/img/81/5f35a58c48f05a5b4b6bdc106f5da0.jpg)
[niuke.com] dp31 [template] complete Backpack

Endnotex9 introduction and basic tutorial instructions
随机推荐
D. Game With Array
R language book learning 03 "in simple terms R language data analysis" - Chapter 7 linear regression model
学习位段(1)
2022-02-28(1)
判断大小端存储两种办法
Educational Codeforces Round 114 (Rated for Div. 2) D
Matlab: 文件夹锁定问题的解决
Codeworks round 739 (Div. 3) problem solving Report
On the night of the joint commissioning, I beat up my colleagues
RPA超自动化 | 农耕记携手云扩加速财务智能化运营
Classes and objects (1)
Redis basic data type (Zset) ordered collection
Top - k问题
Redis transaction
LeetCode-110-平衡二叉树
Carry and walk with you. Have you ever seen a "palm sized" weather station?
如何使用事物码 SAT 查找某个 SAPGUI 屏幕字段对应的后台存储数据库表的名称
Why microservices are needed
Parker plunger pump pv180r1k1t1nmmc
带有 ceph-csi 的静态 PVC