体系结构复习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,F2
SD 0(R1),F4
DADDI R1,R1,#-8
BNEZ 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,F2
ADDD 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)的更多相关文章
- 用R语言分析与预測员工离职
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/kMD8d5R/article/details/83542978 https://mmbiz.qpic ...
- 时间序列深度学习:状态 LSTM 模型预測太阳黑子(一)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/kMD8d5R/article/details/82111558 作者:徐瑞龙,量化分析师,R语言中文 ...
- LIME:模型预測结果是否值得信任?
花了一天时间对LIME论文:http://arxiv.org/pdf/1602.04938v1.pdf 细致阅读和代码阅读,实验.大体理解了作者的设计思路. 背景: 我们在建立模型的时候,常常会思考我 ...
- HM编码器代码阅读(14)——帧间预測之AMVP模式(二)predInterSearch函数
简单介绍 predInterSearch基本的工作是ME(运动预计)和MC(运动补偿). 函数中有一个bTestNormalMC变量.它表示是否进行正常的MC过程,正常的MC过程就是进 ...
- x264代码剖析(十三):核心算法之帧间预測函数x264_mb_analyse_inter_*()
x264代码剖析(十三):核心算法之帧间预測函数x264_mb_analyse_inter_*() 帧间预測是指利用视频时间域相关性,使用临近已编码图像像素预測当前图像的像素,以达到有效去除视频时域冗 ...
- MapR CEO对2016大数据的5个预測
本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2016/02/mapr-ceo-5-big-data-predictions MapR ...
- 使用excel进行数据挖掘(6)---- 预測
在配置环境后,能够使用excel进行数据挖掘. 环境配置问题可參阅: http://blog.csdn.net/xinxing__8185/article/details/46445435 例子 DM ...
- 基于SVM的数据分类预測——意大利葡萄酒种类识别
update:把程序源代码和数据集也附上http://download.csdn.net/detail/zjccoder/8832699 2015.6.24 --------------------- ...
- 【Energy Forecasting】能源预測的发展和展望
说明 本文的内容来自Tao Hong博士的Energy Forecasting: Past, Present and Future一文的翻译和整理. 引入 能源预測包括了电力行业中有关预測的广泛的内容 ...
随机推荐
- apache2.4.x三种MPM介绍
三种MPM介绍 Apache 2.X 支持 ...
- 字符设备驱动1:新的方式添加cdev + 在open函数中将文件私有数据指向设备结构体
本例中,驱动入口处,使用cdev_add添加驱动,这点也可与字符设备驱动0:一个简单但完整的字符设备驱动程序对比一下. 另外主要讲xx_open实现文件私有数据指向设备结构体. 引子: 偶然看到,在j ...
- BZOJ 1977: [BeiJing2010组队]次小生成树 Tree( MST + 树链剖分 + RMQ )
做一次MST, 枚举不在最小生成树上的每一条边(u,v), 然后加上这条边, 删掉(u,v)上的最大边(或严格次大边), 更新答案. 树链剖分然后ST维护最大值和严格次大值..倍增也是可以的... - ...
- Linux怎么设置PostgreSQL远程访问
原文链接: Linux怎么设置PostgreSQL远程访问 安装PostgreSQL数据库之后,默认是只接受本地访问连接.如果想在其他主机上访问PostgreSQL数据库服务器,就需要进行相应的配置. ...
- 【 D3.js 入门系列 — 2 】 绑定数据和选择元素
1. 如何绑定数据 D3 有一个很独特的功能:能将数据绑定到 DOM 上,也就是绑定到文档上.这么说可能不好理解,例如网页中有段落元素<p>,我们可以将整数 5 与 <p>绑定 ...
- jQuery带有定时器的tab栏切换
现在网上很多类似选项卡的切换,我们成为tab栏切换,比如下图: 新浪的tab栏切换 淘宝的tab栏切换 其中,新浪的tab栏鼠标放上去,可以快速的来回切换,但是如果采取ajax异步传输,不停去加载服务 ...
- UIScrollView方法 属性详解
--前言:UIScrollView使用非常广,本文研究UIScrollView各属性和方法,明白它们的意义.作用.在后面的一篇文章有整理UIScrollView一些常见用法以及一些效果的实现思路. - ...
- 15个最受欢迎的Python开源框架
以下是伯乐在线从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框 ...
- 飞翔(LIS变形)
飞翔 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 鹰最骄傲的就是翱翔,但是鹰们互相都很嫉妒别的鹰比自己飞的快,更嫉妒其他的鹰比自己飞行的有技巧.于是,他们决定举办一场 ...
- JavaScript和JQuery获取DIV的值
1.设计源代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...