当前位置:网站首页>超标量处理器设计 姚永斌 第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的处理器中,处理器送出的取指令地址是虚拟地址,需要使用一定的方法将其转换为物理地址,然后才能够从存储器中取指令,在这个转换过程中可能发生很多事情,它们都可以打断流水线的正常执行。
边栏推荐
- 继承的所有特征
- zypper命令使用示例
- RPA super automation | nongnongji and cloud expansion accelerate financial intelligent operation
- Sword finger offer 29 Print matrix clockwise
- 科普 | NFT的类型有哪些(上)
- 快速排序的三种方法
- [niuke.com] ky41 put apples
- Building a custom CNN model: identifying covid-19
- The network connection is normal, but Baidu web page can not be opened and displayed. You can't access this website solution
- Leetcode-322- change exchange
猜你喜欢

189. 轮转数组

EndnoteX9简介及基本教程使用说明

Flink error: multiple tasks are started, and only one task is executed

RPA超自动化 | 农耕记携手云扩加速财务智能化运营

Leetcode-129- sum of numbers from root node to leaf node

Building a custom CNN model: identifying covid-19

Endnotex9 introduction and basic tutorial instructions

Leetcode - 第2天

效率起飞啊!还能这样开发的?

《物联网开发实战》18 场景联动:智能电灯如何感知光线?(上)(学习笔记)
随机推荐
Leetcode-155-minimum stack
[v2.1] automatic update system based on motion step API (repair bug, increase completion display, support disconnection reconnection and data compensation)
多态的所有特征
Carry and walk with you. Have you ever seen a "palm sized" weather station?
R language book learning 03 "in simple terms R language data analysis" - Chapter 7 linear regression model
华为设备配置H-VPN
每日一题-删除有序数组的重复项
go os模块
Leetcode-32- longest valid bracket
即将首发 | 业界首个零售数字化创新白皮书,解锁全链路数字化致胜秘籍
Leetcode-104- maximum depth of binary tree
Educational codeforces round 111 (rated for Div. 2) C Supplement
Look for leap years and see how many leap years I have had since I was born (I have had five)
Leetcode-110-balanced binary tree
2022-02-28(2)
实验10 Bezier曲线生成-实验提高-交互式生成B样条曲线
联调这夜,我把同事打了...
[niuke.com] ky41 put apples
R语言书籍学习03 《深入浅出R语言数据分析》-第七章 线性回归模型
R语言书籍学习03 《深入浅出R语言数据分析》-第十二章 支持向量机 第十三章 神经网络