超标量处理器概览
超标量处理器概览
1.1为什么需要超标量
处理器执行速度的影响因素
-
程序中指令的数量
-
每条指令在处理器中执行所需要的周期数
- 普通流水线处理器每周期最多执行1条指令
- 超标量处理器每周期可以执行多于一条的指令
- 但不是每周期执行多于一条指令的处理器都是超标量处理器,如VLIW结构的也可以(依靠编译器和程序员来决定哪些指令可以并行执行)
-
处理器每个周期的时间
超标量处理器专门针对优化IPC(instruction per cycle),超标量处理器每周期可以从I-Cashe提取n条指令送入流水线,
1.2 普通处理器的流水线
理想流水线
- 流水线各阶段所需时间近似相等
- 各阶段的操作被重复执行。对于算数运算类型的指令不需要访问存储器,那么它只需要在访存阶段什么都不做就可以。
- 流水线中各个阶段相互独立,互不相干。但各指令间存在各种相关性,因此很难满足。
对于复杂指令集如x86,因为指令长度不等,执行时间不等,很难直接实现流水线。
对于精简指令集如arm,因为指令长度相等,并且每条指令任务量比较规整,所以容易使用流水线。
将流水线阶段合并,可以产生三级流水等,适用于对性能要不高的低功耗嵌入式领域。
将流水线阶段继续细分,可以获得更高性能,但是也会增加硬件资源开销和分支预测失败后果更严重。
指令相关性
先写后读:后一条指令的操作数来源于上一条指令的结果,后条指令必须等上一条指令得到结果才能继续执行。
先读后写:一条指令要将结果写入到某个寄存器,但这个寄存器还在被其他指令读取,不能够马上写入。
先写后写:两条指令都要将结果写入同一个寄存器,那么后面指令必须等前面指令执行完才能执行写操作。
控制相关性:分支指令只有计算出结果才可以知道后续执行哪些指令,在得到结果的等待时间中只能按照预测方式取指。
对于超标量处理器WAW、WAR、RAW三种相关性都会阻碍指令乱序执行,需要在流水线中进行特殊处理。
1.3 超标量处理器的流水线
超标量处理器执行指令两种方式:顺序执行、乱序执行
frontend指流水线中的取指、译码
issue指发射,将指令送到对应的功能单元执行。
write back指将指令结果写到目的寄存器。可通过内部寄存器重命名实现乱序。
指令完成取指、译码、寄存器重命名后进入发射阶段,此时指令存储在缓存发射队列中,一旦指令操作数准备好了,就可以从发射队列中离开,送到对应运算单元进行执行。
执行完后乱序写入重排序缓存,在重排序缓存中实现运行结果的顺序整理。
超标量处理器一般流水线深度比较深,除流水线各阶段外还需要有预测技术和恢复电路技术。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】