四.处理器体系结构

指令集体系结构(ISA)

一个处理器支持的指令和指令的字节级编码

冒险:一条指令的位置或者操作数依赖于其他仍在流水线中的指令

1.Y86-64指令集体系结构

指令集
指令编码
高4位是代码部分,低4位是功能部分
寄存器标识符
示例:
rmmovq %rsp,0X123456789abcd(%rdx)的字节编码:
rmmovq+%rsp+%rdx:40 4 2
小端法:cdab8967452301
指令编码:4042cdab8967452301
状态码
程序示例
Y86-64:
加载常数到寄存器,因为不能使用立即数
从内存中读数并与一个寄存器相加,需要两条指令
第9行subq设置了条件码,但需在循环前第5行设置条件码

2.逻辑设计和硬件处理语言HCL

要实现一个数组系统需要三个主要的组成部分:
计算对位进行操作的函数的组合逻辑、存储位的存储器单元、控制存储器单元更新的时钟单元
多级复用器MUX
多级复用函数通过情况表达式描述,顺序求值,不要求互斥,第一个求值为1的情况会被选中
word Out4=[
!s1 && !s0 : A;
!s1 : B;
!s0 : C;
1 : D;
];
集合关系
bool s1=code in {2,3};
当code在集合{2,3}中,s1为1
两类存储器设备:
时钟寄存器(简称寄存器):存储单个位或字。时钟信号控制寄存器加载输入值。
随机访问存储器(简称内存):存储多个字,用地址来选择该读或写哪个字。示例包括:
处理器的虚拟内存系统,硬件和操作系统软件结合,使处理器可以在大的地址空间访问任意的字。
寄存器文件,寄存器标识符作为地址。
每当每个时钟到达上升沿时,值才会从寄存器的输入传送到输出。
硬件寄存器:寄存器直接将它的输入和输出线连接到电路的其他部分。
程序寄存器:寄存器代表CPU中为数不多的可寻址的字,地址是寄存器ID。

3.Y86-64的顺序实现(SEQ处理器)

各阶段执行操作:
取指(fetch) :从内存读取指令字节,地址为PC的值,PC增加器计算valP
译码(decode) :从寄存器文件读入最多两个操作数(寄存器值),得到valA、valB
执行(execute) :ALU执行指令指明的操作,计算内存引用的有效地址,或加减栈指针,或设置条件码
访存(memory) :数据内存读出或写入一个内存字
写回(write back) :最多写两个结果到寄存器,ALU计算的值,从数据内存读出的值
更新PC(PC update) :把PC设置成valP(下一条指令的地址)、valC(调用指令或跳转指令指定的目标地址)、valM(从内存读取的返回地址)
PC是SEQ中唯一的时钟寄存器
SEQ的时序
需要明确控制时序的硬件单元:PC、条件码寄存器、数据内存、寄存器文件
原则:从不回读
处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态
nop:只将PC+1,不进行任何处理
halt:使处理器状态被设置为HLT,停止运行
SEQ唯一的问题是太慢。
时钟必须非常慢,以使信号能在一个周期内传播所有的阶段

4.流水线的通用原理

提高系统的吞吐量,但也轻微增加延迟
设计的目的是每个时钟周期都发射一条新指令,即吞吐量是每个时钟周期一条指令
未流水线化
延迟是吞吐量的倒数
流水线化
吞吐量 3.12->8.33
延迟 320->360
延迟变大是由于增加了流水线寄存器的时间开销
信号传播到流水线寄存器的输入,直到时钟上升时才会改变寄存器的状态。
局限性
不一致的划分
流水线过深,收益反而下降

5.Y86-64的流水线实现

5.1 SEQ+

更新PC阶段在一个时钟周期开始时执行,而不是结束时执行

没有硬件寄存器来存放PC,而是根据前一条指令保存的一些状态信息来动态计算PC

这种改进称为重定时,改变系统的状态表示,但不改变逻辑行为。用来平衡各个阶段之间的延迟

5.2 PIPE-

插入流水线寄存器
M_stat是流水线寄存器M的状态码字段
m-stat是流水线阶段产生的状态信号

5.3 冒险

将流水线技术引用一个带反馈的系统,这些相关可能会导致流水线产生计算错误,称为冒险

冒险分为:数据冒险、控制冒险

5.3.1 数据冒险
避免冒险的方式:
暂停:让一组指令阻塞在它们所处的阶段,而允许其他指令继续通过流水线
插入气泡:机器动态插入nop指令
转发/旁路:将阶段中的值直接从一个流水线阶段传到较早阶段,作为操作数
PIPE流水线化的最终实现
用暂停来处理 加载/使用冒险 的方法称为加载互锁
加载互锁与转发结合可以处理所有可能的数据冒险
5.3.2 控制冒险

当处理器无法根据处于取指阶段的当前指令来确定下一条指令的地址时,出现控制冒险

只发生在ret指令和方向预测错误的跳转指令

向译码和执行阶段插入气泡,并同时取出跳转指令后面的指令,就可以取消预测错误的指令(指令排除)

5.4 异常处理

三种内部产生的异常:

halt指令、有非法指令和功能码的指令、取指或数据读写试图访问一个非法地址

流水线中最深的指令引起的异常,优先级最高

5.5 性能分析

一个加载/使用冒险会产生一个气泡
一个预测错误的分支会产生两个气泡
一条返回指令会产生三个气泡

衡量方法:CPI(每指令周期数)

处理条指令和个气泡,大概需要个时钟周期

后面的处罚项分为三个来源

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

B.D.S.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值