体系结构学习-6-超标量处理器

 MIPS32-5段流水线采用了指令级并行方式(5个流水段同时运行5条指令)提升系统吞吐率,是一种标量处理器( C P I ≥ 1 CPI \ge 1 CPI1),但是一个周期一条指令以及无法满足现代计算机需求了。

超标量处理器(Superscalar)

1、基本思想:增强指令集并行,让每个周期执行更多指令,实现 C P I < 1 CPI<1 CPI<1 。( I P C = 1 / C P I IPC = 1/ CPI IPC=1/CPI)

2、实现限制:在理想情况下,受到程序本身最大的并行程度限制,即ILP(Instruction-Level Parallelism)是程序本身关于数据流的属性, 也就是说 I P C ≤ I L P IPC \le ILP IPCILP

3、计算程序ILP: 在数据流图中没有链式链接前后其他指令的指令可以单独并行,ILP + 1。现代CPU大部分ILP范围在 ( 0.9 , 1.9 ) (0.9,1.9) (0.9,1.9) ,所以CPU四发射往往够用了。(大部分是双发射、四发射,也有六发射)

4、对CPU性能的提升:由 Amdahl’s Law, 并行处理是有极限的。
S p e e d u p = 1 1 − f + f n Speedup = \dfrac{1}{1 - f + \dfrac{f}{n}} Speedup=1f+nf1
S p e e d u p Speedup Speedup: 程序性能的提升率
f f f:程序可以并行执行的部分占比(Max ILP)
n n n:处理器数量

 只有整个程序都能并行(通常是不可能的),即 f = 1 f=1 f=1, 性能提升的倍数才是运行处理器的数量,增加处理器便是增加性能。

潜在的问题

以乱序双发射为例

  • 每次抓取两条指令,那么inst cache的必须要比抓取速度更快

  • 如果抓取指令时,地址不对齐(跨cache line行抓取)怎么处理

  • 如果抓取多条跳转指令,如何判断npc

  • 如何处理数据依赖关系(WAW, WAR)?需要设计一个完美的算法处理。

  • 如何处理操作数少的循环?循环展开,增加顺序执行代码(basic block),减少分支次数,有利于代码优化。但是不一定能完美展开,而且会增加代码量,消耗存储空间,占用寄存器。

  • 需要增加可执行的流水线(每一条指令对应一条流水线)。可能会降低设备利用率,而且不同的流水线可能完成时间不一样,需要不同长度的流水线执行不同功能指令来降低latency,但还是有潜在的结构冒险问题。

  • 确保指令执行完成后按序写回

  • 分支预测错误后如何恢复

  • 出现中断或者异常怎么办

你可能感兴趣的:(体系结构)