体系结构复习2——指令级并行(分支预测和VLIW)
第五章内容较多,接体系结构复习1
5.4 基于硬件推测的指令级并行
动态分支预测是在程序运行时,根据转移的历史信息等动态确定预测分支方向,主要方法有:
- 基于BPB(Branch Prediction Buffer)和BHT(Branch History Table)的方法
- 高性能指令发送(High Performance Instruction Delivery)
5.4.1 基于BPB和BHT的方法
(1)1-bit BHT
分支指令PC的低位索引1位记录上一次转移是否成功(不是预测是否正确),不做地址检查
1-bit BHT有无法避免的问题,在一个循环中会造成至少两次预测错误:
- 最后一次循环,前面均循环成功,但这次需要跳出循环即需要预测失败
- 首次循环,前面最后一次循环失败,但这次需要预测成功
(2)2-bit BHT
用两位表示预测,设1表示分支成功、0表示分支失败,那么有如下状态转移表:
状态 | 当前失败 | 当前成功 | 预测 |
---|---|---|---|
00 | 00 | 01 | 预测失败 |
01 | 10 | 11 | 预测失败 |
10 | 00 | 01 | 预测成功 |
11 | 10 | 11 | 预测成功 |
看FSM比较好理解一点:
把2位预测器想像成一个黑盒(只知道是基于两次历史分支记录),执行分支语句是查看该黑盒是“预测执行”还是“预测不执行”(即和当前分支情况无关的预测),然后根据当前分支执行与否修改状态
BHT性能分析:
- 会发生预测错误:只是用PC低位查找,可能会找错历史纪录
- 经分析当表项达到一定数量以后,通过增加表项提高准确率几乎没有效果
(3)相关分支预测器
相关分支预测把其他分支的历史行为也纳入考虑,相关分支预测能够捕捉到邻近的分支之间的相关性,又叫两级预测
两级预测器的一般表达形式为(m,n)预测器,其含义是根据全局最近的m个分支的行为,来从2^m个n位预测器中做出预测
m个分支的行为一共有2^m种情况,根据具体情况选择与最近m个分支的行为对应的预测器,该预测器记录的是n位局部分支历史(n和m完全独立)
5.4.2 动态调度预测——ROB Tomasulo
扩展Tomasulo支持预测,需要用旁路的思想去执行不能确定的指令,旁路执行只是执行指令并保存它的中间结果,但不更新任何寄存器或存储器
当一条指令不再具有不确定性时(也就是确定执行时),才更新寄存器或存储器的值,把这一操作叫做提交(Commit)
不确定指令的旁路执行的时刻可能快于其准备好提交的时刻,因此需要用一组硬件缓冲区来保存已经完成执行但还没有提交的指令结果,称之为重排缓冲区(Reorder Buffer,ROB),ROB保证指令循序提交
ROB有四个域:指令类型、执行状态、目的地址和值,ROB可以向RS一样作为操作数据源;当指令执行完毕后用ROB编号代替RS中的值
Tomasulo增加一个Commit阶段,由以下四阶段构成ROB Tomasulo:
阶段 | 内容 |
---|---|
Issue发射 | 如果对应RS空闲且ROB中有空插槽(无结构相关)则发射指令。如果寄存器或ROB中已经有操作数,则发送到保留站。为结果分配的ROB项目编号也发送给RS,以便标记CDB上广播的结果 |
Execute执行 | 两操作数就绪后RS开始执行,若没准备好随时监听CDB以获取所需的操作数(避免RAW) |
Write写结果 | CDB传送所有结果给等待结果的RS和ROB,并修改Register result status |
Commit提交 | 按照ROB表中顺序,如果分支结果已出是分支成功,则处理器用ROB结果更新寄存器或存储器,并在ROB表中删除该指令;如果分支结果已出是分支失败,则刷新ROB表 |
注意:ROB Tomasulo在Register Status里记录的寄存器值也是ROB编号,除非Commit提交更新
5.6 多发射&静态调度的指令级并行
如果想要理想CPI<1
,则需要允许在一个时钟周期内发射多条指令,多发射处理器主要有以下三类:
- VLIW超长指令字处理器:
- 静态调度超标量处理器
- 动态调度超标量处理器
Superscalar DLX允许一个周期内发送一条fp指令和一条其他指令,如果指令间整数操作和浮点操作易于区分组合(无任何相关)则可以达到理想CPI=0.5
;但不是同时发射越多指令就越好,多发射给译码和发射带来不少困难
5.6.1 VLIW的循环展开
VLIW使用多个独立运算单元,书上假设有:1个整数/分支单元、2个浮点单元和2个存储器引用单元,但VLIW不是想单元发送多条独立指令,而是将多个操作包装在一条非常长的长指令中或发送包中;静态调度时可以不用在意VLIW实现方式,而是直接用多发射的思想来考虑
把上面的循环:
Loop: LD F0,0(R1)ADDD F4,F0,F2SD 0(R1),F4DADDI R1,R1,#-8BNEZ R1,Loop
用VLIW做8段循环展开如下:
存储器引用1 存储器引用2 浮点运算1 浮点运算2 整数运算/分支
LD F0,0(R1) LD F6,-8(R1)
LD F10,-16(R1) LD F14,-24(R1)
LD F18,-32(R1) LD F22,-40(R1) ADDD F4,F0,F2 ADDD F8,F0,F2
LD F26,-48(R1) LD F30,-56(R1) ADDD F12,F0,F2 ADDD F16,F0,F2ADDD F20,F0,F2 ADDD F24,F0,F2
SD 0(R1),F4 SD -8(R1),F8 ADDD F28,F0,F2 ADDD F32,F0,F2
SD -16(R1),F12 SD -24(R1),F16 DADDI R1,R1,#-64
SD 32(R1),F20 SD 24(R1),F24
SD 16(R1),F28 SD 8(R1),F32 BNEZ R1,Loop
(不好排版)9周期完成8段循环,一段循环只需要1.125周期!
5.7 多发射&动态调度的指令级并行
多发射动态调度略,基本思路是扩展Tomasulo让其有多个发射控制器(浮点和整数),最主要的思想是保证指令序的前提下,用队列检测的方法防止三种相关
体系结构复习2——指令级并行(分支预测和VLIW)相关推荐
- 深入理解操作系统(12)第四章:处理器体系结构(4)Y86-64的流水线实现(包括:PIPE-处理器/预测下一个PC/分支预测/流水线冒险/暂停,转发避免冒险/PPE硬件结构及实现/CPI)
深入理解操作系统(12)第四章:处理器体系结构(4)Y86-64的流水线实现(包括:PIPE-处理器/预测下一个PC/分支预测/流水线冒险/暂停,转发避免冒险/PPE硬件结构及实现/CPI) 1. Y ...
- 体系结构实验(5)——分支预测
文章目录 Chp5 Lab: Branch Prediction Q1 1.1 理论分析 1.2 实验验证 Q2 Chp5 Lab: Branch Prediction Q1 Run the foll ...
- 体系结构复习(张晨曦 计算机系统结构教程第二版)
文章目录 体系结构复习(张晨曦 计算机系统结构教程第二版) 第一章 计算机系统的多层级结构 分类法 Flynn分类法 冯氏分类法 Handler分类法 Amdahl定律,加速比 CPU性能公式 程序的 ...
- 时序图 分支_BOOM微架构学习(1)——取指单元与分支预测
之前在RISC-V的"Demo"级项目--Rocket-chip一文中曾经简介过BOOM处理器的流水线,这次我们开始一个系列,深入学习一下BOOM的微架构,这样对于乱序执行的超标量 ...
- Cachegrind:缓存和分支预测分析器
目录 5.1.概观5.2.使用Cachegrind,cg_annotate和cg_merge 5.2.1.运行Cachegrind5.2.2.输出文件5.2.3.运行cg_annotate5.2.4. ...
- 设计模式与软件体系结构复习资料——设计模式
考试题型:选择.简答.设计 目录 软件设计模式 第一章 面向对象设计概述 1. 面向对象设计的表示方法 2. 优秀软件系统特性 3. 面向对象设计原则 3.1 ==单一职责原则== 3.2 ==开闭原 ...
- CPU当中的分支预测
今天看到的一个有关cpu的问题,所以分享总结一下: 抛出一个问题 首先有一段代码 #include <algorithm> #include <ctime> #include ...
- 计算机组成原理branch,处理器结构--分支预测(Branch Prediction)
背景 条件分支指令通常具有两路后续执行分支.即不采取(not taken)跳转,顺序执行后面紧挨JMP的指令:以及采取(taken)跳转到另一块程序内存去执行那里的指令.是否条件跳转,只有在该分支指令 ...
- CPU的流水线,分支预测与乱序执行
流水线 转自:http://www.elecfans.com/emb/dsp/20180405657563.html 流水线的概念来源于工业制造领域,以汽车装配为例来解释流水线的工作方式,假设装配一辆 ...
- 【linux】Valgrind工具集详解(十四):Cachegrind(缓存和分支预测分析器)
一.概述 Cachegrind,它模拟CPU中的一级缓存I1,Dl和二级缓存,能够精确地指出程序中cache的丢失和命中.如果需要,它还能够为我们提供cache丢失次数,内存引用次数,以及每行代码,每 ...
最新文章
- 「镁客·请讲」全盛科技吕盛:将侦测、跟踪、识别、管控融于一体,做低空安全守卫者...
- 【bzoj2300】【Luogu P2521】 [HAOI2011]防线修建 动态凸包,平衡树,Set
- D3 dataset - what is usage of key function in data
- [SpringBoot2]yaml
- 访问修饰符(C# 编程指南)
- C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母
- php 连接mssql
- 云计算之路-阿里云上:Web服务器请求到达量突降
- tar.xz如何解压:linux和windows下tar.xz解压命令介绍
- 项目长期运维中产生的一些问题
- 快速清洗数据库数据(数据脱敏方案)
- 使用ARouter进行Android模块化开发,详解系列文章
- 计算机论文字数要求吗,2016年夏季学期计算机(软件)学院学年论文字数、页数及格式要求.doc...
- TYVJ P1092 麻将
- 记录一个网易云IM和直播功能中,服务器API的Java调用代码
- 没有雨伞的孩子必须努力奔跑(转)
- vue实现简单计算商品价格
- 海康威视摄像头使用网线连网输入IP地址跳转显示“网站处于联机状态,但未对联机尝试做出反应”
- Android BLE 蓝牙实践
- 董卿《朗读者》12期开场白,“碾压”一切作文素材!