体系结构概念总结 本文关键词:体系结构,概念
体系结构概念总结 本文简介:第1章计算机系统结构的基本概念层次机构:按照计算机语言从低级到高级的次序,把计算机系统按功能划分成多级层次结构,每一层以一种不同的语言为特征。这些层次依次为:微程序机器级,传统机器语言机器级,汇编语言机器级,高级语言机器级,应用语言机器级等。翻译:先用转换程序把高一级机器上的程序转换为低一级机器上等
体系结构概念总结 本文内容:
第1章
计算机系统结构的基本概念
层次机构:按照计算机语言从低级到高级的次序,把计算机系统按功能划分成多级层次结构,每一层以一种不同的语言为特征。这些层次依次为:微程序机器级,传统机器语言机器级,汇编语言机器级,高级语言机器级,应用语言机器级等。
翻译:先用转换程序把高一级机器上的程序转换为低一级机器上等效的程序,然后再在这低一级机器上运行,实现程序的功能。
解释:对于高一级机器上的程序中的每一条语句或指令,都是转去执行低一级机器上的一段等效程序。执行完后,再去高一级机器取下一条语句或指令,再进行解释执行,如此反复,直到解释执行完整个程序。
计算机系统结构:传统机器程序员所看到的计算机属性,即概念性结构与功能特性。
透明性:在计算机技术中,把这种本来存在的事物或属性,但从某种角度看又好像不存在的概念称为透明性。
计算机组成:计算机系统结构的逻辑实现,包含物理机器级中的数据流和控制流的组成以及逻辑设计等。
计算机实现:计算机组成的物理实现,包括处理机、主存等部件的物理结构,器件的集成度和速度,模块、插件、底板的划分与连接,信号传输,电源、冷却及整机装配技术等。
系统加速比:对系统中某部分进行改进时,改进后系统性能提高的倍数。
Amdahl定律:当对一个系统中的某个部件进行改进后,所能获得的整个系统性能的提高,受限于该部件的执行时间占总执行时间的百分比。
大概率事件优先原则的基本思想是:对于大概率事件(最常见的事件),赋予它优先的处理权和资源使用权,以获得全局的最优结果。
程序的局部性原理:程序执行时所访问的存储器地址不是随机分布的,而是相对地簇聚。包括时间局部性和空间局部性。
CPI:每条指令执行的平均时钟周期数。CPI=执行程序所需的时钟周期数/所执行的指令条数
CPU性能公式:CPU时间=执行程序所需的时钟周期数×时钟周期时间
CPU时间=IC×CPI×时钟周期时间
,IC为所执行的指令条数
并行性:计算机系统在同一时刻或者同一时间间隔内进行多种运算或操作。只要在时间上相互重叠,就存在并行性。它包括同时性与并发性两种含义。
时间重叠:在并行性概念中引入时间因素,让多个处理过程在时间上相互错开,轮流重叠地使用同一套硬件设备的各个部分,以加快硬件周转而赢得速度。
资源重复:在并行性概念中引入空间因素,以数量取胜。通过重复设置硬件资源,大幅度地提高计算机系统的性能。
资源共享:这是一种软件方法,它使多个任务按一定时间顺序轮流使用同一套硬件设备。
异构型多处理机系统:由多个不同类型、至少担负不同功能的处理机组成,它们按照作业要求的顺序,利用时间重叠原理,依次对它们的多个任务进行加工,各自完成规定的功能动作。
同构型多处理机系统:由多个同类型或至少担负同等功能的处理机组成,它们同时处理同一作业中能并行执行的多个任务。
第2章
指令集结构的分类
2.1
区别不同指令集结构的主要因素是什么?根据这个主要因素可将指令集结构分为哪3类?
答:区别不同指令集结构的主要因素是CPU中用来存储操作数的存储单元。据此可将指令系统结构分为堆栈结构、累加器结构和通用寄存器结构。
2.2
CISC指令集结构的计算机有什么缺点?
答:缺点:
(1)
CISC结构的指令集中,各种指令的使用频率相差悬殊。(2)CISC结构指令的复杂性带来了计算机体系结构的复杂性,这不仅增加了研制时间和成本,而且还容易造成设计错误。(3)CISC结构指令集的复杂性给VLSI设计增加了很大负担,不利于单片集成。(4)CISC结构的指令集中,许多复杂指令需要很复杂的操作,因而运行速度慢。
(5)
在CISC结构的指令集中,由于各条指令的功能不均衡性,不利于采用先进的计算机体系结构技术(如流水技术)来提高系统的性能。
2.3
简述RISC指令集结构的设计原则。
答(1)
选取使用频率最高的指令,并补充一些最有用的指令;(2)每条指令的功能应尽可能简单,并在一个机器周期内完成;(3)所有指令长度均相同;(4)只有Load和Store操作指令才访问存储器,其它指令操作均在寄存器之间进行;
(5)
以简单有效的方式支持高级语言。
2.4RISC和CISC处理机的指令系统结构在指令格式、寻址方式和每条指令的周期数(CPI)三方面有哪些区别?
比较内容
CISC
RISC
指令格式
变长编码
定长编码
寻址方式
各种都有
只有load/store指令可以访存
CPI
远远大于1
为1
2.5
通常有哪几种指令格式,请简述其适用范围。
答:
(1)
变长编码格式。如果系统结构设计者感兴趣的是程序的目标代码大小,而不是性能,就可以采用变长编码格式。(2)固定长度编码格式。如果感兴趣的是性能,而不是程序的目标代码大小,则可以选择固定长度编码格式。
(3)
混合型编码格式。需要兼顾降低目标代码长度和降低译码复杂度时,可以采用混合型编码格式。
第3章
流水线技术
流水线:将一个重复的时序过程,分解成为若干个子过程,而每一个子过程都可有效地在其专用功能段上与其它子过程同时执行。
单功能流水线:指流水线的各段之间的连接固定不变、只能完成一种固定功能的流水线。
多功能流水线:指各段可以进行不同的连接,以实现不同的功能的流水线。
静态流水线:指在同一时间内,多功能流水线中的各段只能按同一种功能的连接方式工作的流水线。当流水线要切换到另一种功能时,必须等前面的任务都流出流水线之后,才能改变连接。
动态流水线:指在同一时间内,多功能流水线中的各段可以按照不同的方式连接,同时执行多种功能的流水线。它允许在某些段正在实现某种运算时,另一些段却在实现另一种运算。
吞吐率:在单位时间内流水线所完成的任务数量或输出结果的数量。
流水线的加速比:使用顺序处理方式处理一批任务所用的时间与按流水处理方式处理同一批任务所用的时间之比。
流水线的效率:即流水线设备的利用率,它是指流水线中的设备实际使用时间与整个运行时间的比值。
数据相关:考虑两条指令i和j,i在j的前面,如果下述条件之一成立,则称指令j与指令i数据相关:
(1)指令j使用指令i产生的结果;
(2)指令j与指令k数据相关,而指令k又与指令i数据相关。
名相关:如果两条指令使用了相同的名,但是它们之间并没有数据流动,则称这两条指令存在名相关。
控制相关:是指由分支指令引起的相关。它需要根据分支指令的执行结果来确定后面该执行哪个分支上的指令。
结构冲突:因硬件资源满足不了指令重叠执行的要求而发生的冲突。
数据冲突:当指令在流水线中重叠执行时,因需要用到前面指令的执行结果而发生的冲突。
控制冲突:流水线遇到分支指令或其它会改变PC值的指令所引起的冲突。
定向技术:用来解决写后读冲突的。在发生写后读相关的情况下,在计算结果尚未出来之前,后面等待使用该结果的指令并不见得是马上就要用该结果。如果能够将该计算结果从其产生的地方直接送到其它指令需要它的地方,那么就可以避免停顿。
写后读冲突(RAW):考虑两条指令i和j,且i在j之前进入流水线,指令j用到指令i的计算结果,而且在i将结果写入寄存器之前就去读该寄存器,因而得到的是旧值。
读后写冲突(WAW):考虑两条指令i和j,且i在j之前进入流水线,指令j的目的寄存器和指令i的源操作数寄存器相同,而且j在i读取该寄存器之前就先对它进行了写操作,导致i读到的值是错误的。
写后写冲突(WAR):考虑两条指令i和j,且i在j之前进入流水线,,指令j和指令i的结果单元(寄存器或存储器单元)相同,而且j在i写入之前就先对该单元进行了写入操作,从而导致写入顺序错误。这时在结果单元中留下的是i写入的值,而不是j写入的。
向量处理方式:a.横向处理方式
b.纵向处理方式c纵横处理方式
简述三种向量处理方式,它们对向量处理机的结构要求有何不同?
答
(1)横向处理方式:若向量长度为N,则水平处理方式相当于执行N次循环。若使用流水线,在每次循环中可能出现数据相关和功能转换,不适合对向量进行流水处理。
(2)纵向处理方式:将整个向量按相同的运算处理完毕之后,再去执行其他运算。适合对向量进行流水处理,向量运算指令的源/目向量都放在存储器内,使得流水线运算部件的输入、输出端直接与存储器相联,构成M-M型的运算流水线。
(3)纵横处理方式:把长度为N的向量分为若干组,每组长度为n,组内按纵向方式处理,依次处理各组,组数为「N/n」,适合流水处理。可设长度为n的向量寄存器,使每组向量运算的源/目向量都在向量寄存器中,流水线的运算部件输入、输出端与向量寄存器相联,构成R-R型运算流水线。
第4章
指令级并行
超标量(superscalar):一种多指令流出技术。它在每个时钟周期流出的指令条数不固定,依代码的具体情况而定,但有个上限。
超流水线处理机(superpipelining):在一个时钟周期内分时流出多条指令。
超长指令字VLIW(Very
Long
Instruction
Word):一种多指令流出技术。VLIW处理机在每个时钟周期流出的指令条数是固定的,这些指令构成一条长指令或者一个指令包,在这个指令包中,指令之间的并行性是通过指令显式地表示出来的。
(1).超标量结构对程序员来说是透明的,因为处理机能自己检测下一条指令能否流出,从而不需要重新排列指令来满足指令的流出。
(2).即使是没有经过编译器针对超标量结构进行调度优化的代码或是旧的编译器生成的代码页可以运行,当然运行的效果不是很好。
(3).超标量处理机是通过重复设置多份硬件来提高性能的,即设置多个取指部件,设置多个译码,执行,访存,写结果等部件,并让它们同时工作。它要增加比较多的硬件。而超流水线处理机则不同,它只需要增加少量硬件,是通过各部分硬件的充分重叠工作来提高性能的。
超标量处理机采用的是空间并行性,而超流水线处理机采用的是时间并行性。
第5章
存储层次
性能参数(C、H、TA)公式(略);P155
全相联映象:主存中的任一块可以被放置到Cache中任意一个地方。
直接映象:主存中的每一块只能被放置到Cache中唯一的一个地方。
组相联映象:主存中的每一块可以放置到Cache中唯一的一组中任何一个地方(Cache分成若干组,每组由若干块构成)。
目录表:目录表所包含的项数与Cache的块数相同,每一项对应于Cache中的一个块,用于指出当前该块中存放的信息是哪个主存块的。
替换算法:由于主存中的块比Cache中的块多,所以当要从主存中调一个块到Cache中时,会出现该块所映象到的一组(或一个)Cache块已全部被占用的情况。这时,需要被迫腾出其中的某一块,以接纳新调入的块。
LRU:选择最近最少被访问的块作为被替换的块。实际实现都是选择最久没有被访问的块作为被替换的块。
写直达法:在执行写操作时,不仅把信息写入Cache中相应的块,而且也写入下一级存储器中相应的块。
写回法:只把信息写入Cache中相应块,该块只有被替换时,才被写回主存。
按写分配法:写失效时,先把所写单元所在的块调入Cache,然后再进行写入。
不按写分配法:写失效时,直接写入下一级存储器中,而不把相应的块调入Cache。
命中时间:访问Cache命中时所用的时间。
失效率:CPU访存时,在一级存储器中找不到所需信息的概率。
失效开销:CPU向二级存储器发出访问请求到把这个数据调入一级存储器所需的时间。
强制性失效:当第一次访问一个块时,该块不在Cache中,需要从下一级存储器中调入Cache,这就是强制性失效。
容量失效:如果程序在执行时,所需要的块不能全部调入Cache中,则当某些块被替换后又重新被访问,就会产生失效,这种失效就称作容量失效。
冲突失效:在组相联或直接映象Cache中,若太多的块映象到同一组(块)中,则会出现该组中某个块被别的块替换(即使别的组或块有空闲位置),然后又被重新访问的情况。
2:1Cache经验规则:大小为N的直接映象Cache的失效率约等于大小为N
/2的两路组相联Cache的实效率。
相联度:在组相联中,每组Cache中的块数。
TLB:一个专用高速存储器,用于存放近期经常使用的页表项,其内容是页表部分内容的一个副本。
5.2
简述“Cache—主存”层次与“主存—辅存”层次的区别。
答:
存储层次
比较项目
“Cache—主存”层次
“主存—辅存”层次
目的
为了弥补主存速度的不足
为了弥补主存容量的不足
存储管理的实现
全部由专用硬件实现
主要由软件实现
访问速度的比值
(第一级比第二级)
几比一
几万比一
典型的块(页)大小
几十个字节
几百到几千个字节
CPU对第二级的访问方式
可直接访问
均通过第一级
不命中时CPU是否切换
不切换
切换到其它进程
5.3
地址映象方法有哪几种?它们各有什么优缺点?
答:(1)
全相联映象。实现查找的机制复杂,代价高,速度慢。Cache空间的利用率较高,块冲突概率较低,因而Cache的失效率也低。(2)直接映象。实现查找的机制简单,速度快。Cache空间的利用率较低,块冲突概率较高,因而Cache的失效率也高。(3)组相联映象。组相联是直接映象和全相联的一种折衷。
5.4
降低Cache失效率有哪几种方法?简述其基本思想。
答:常用的降低Cache失效率的方法有下面几种:
(1)
增加Cache块大小。增加块大小利用了程序的空间局部性。
(2)
增加Cache的容量。
(3)
提高相联度,降低冲突失效。
(4)
伪相联Cache,降低冲突失效。当对伪相联Cache进行访问时,首先是按与直接映象相同的方式进行访问。如果命中,则从相应的块中取出所访问的数据,送给CPU,访问结束。如果不命中,就将索引字段的最高位取反,然后按照新索引去寻找“伪相联组”中的对应块。如果这一块的标识匹配,则称发生了“伪命中”。否则,就访问下一级存储器。
(5)
硬件预取技术。在处理器提出访问请求前预取指令和数据。
(6)
由编译器控制的预取,硬件预取的替代方法,在编译时加入预取的指令,在数据被用到之前发出预取请求。
(7)
编译器优化,通过对软件的优化来降低失效率。
(8)
“牺牲”Cache。在Cache和其下一级存储器的数据通路之间增设一个全相联的小Cache,存放因冲突而被替换出去的那些块。每当发生不命中时,在访问下一级存储器之前,先检查“牺牲”Cache中是否含有所需的块。如果有,就将该块与Cache中某个块做交换,把所需的块从“牺牲”Cache
调入Cache。
5.5
简述减小Cache失效开销的几种方法。
答:让读失效优先于写、写缓冲合并、请求字处理技术、非阻塞Cache或非锁定Cache技术、采用二级Cache。
个人总结,仅供参考。
篇2:现代微处理器体系结构课堂笔记
现代微处理器体系结构课堂笔记 本文关键词:微处理器,体系结构,课堂,笔记
现代微处理器体系结构课堂笔记 本文简介:系统结构笔记第一章绪论1、背景介绍,市场变化及原因及趋势2、计算机体系结构基本概念计算机体系结构的定义ComputerArchitecture=InstructionSetArchitecture+MachineOrganization+Hardware指令级结构(InstructionSetArc
现代微处理器体系结构课堂笔记 本文内容:
系统结构笔记
第一章
绪论
1、背景介绍,市场变化及原因及趋势
2、计算机体系结构基本概念
计算机体系结构的定义
Computer
Architecture
=
Instruction
Set
Architecture
+
Machine
Organization
+
Hardware
指令级结构(Instruction
Set
Architecture)
研究软、硬件功能分配以及机器级界面的确定,既由机器语言程序设计者或编译程序设计者所看到的机器物理系统的抽象或定义。但它不包括机器内部的数据流和控制流、逻辑设计和器件设计等。
计算机组织(Computer
Organization)
ISA的逻辑实现,包括机器级内的数据流和控制流的组成以及逻辑设计等。它着眼于机器内各事件的排序方式与控制机构、各部件的功能以及各部件间的联系。
计算机实现(Computer
Implementation)
是指计算机组成的物理实现,包括处理机、主存等部件的物理结构,器件的集成度和速度,器件、模块、插件、底板的划分与连接,专用器件的设计,微组装技术,信号传输,电源、冷却及整机装配技术等。它着眼于器件技术和微组装技术,其中,器件技术在实现技术中起着主导作用。
计算机体系结构=ISA
+
Organization
+
Hardware
3、定量分析技术基础
1、计算机系统评价
当客户拿到一组机器时,他们肯定想知道哪个性能最好,哪个价格最低,哪个性价比最高?而我们设计者则需要最大限度的提高性能,使性价比达到最高,因此我们必须要就基本的评价标准和方法。
常用性能评价指标:执行时间(CPU
Time)、峰值速度(Peak
Performance)、负载(load)
开销(overhead)、利用率(utilization
ratio)、饱和性能(saturate
performance)、
带宽(bandwidth)、延迟(latency)、吞吐率(throughout)、加速比(speedup)、
Amdahi定律(amdahi
law)、效率(efficiency)、基准测试(benchmark)、
响应时间(response
time)等等
2、性能度量
性能定义为每秒完成的任务数-bigger
is
better
如果我们更关心响应时间(response
time)
X性能是Y的n倍是指
3、性能设计与评测的基本原则
并行性
大概率事件优先原则
所有指令都需要取指令操作,只有部分指令访问数据
优化指令访问操作比优化数据访问操作优先
程序局部性原理:时间局部性、空间局部性
4、Amdahl’s
定律
Speedup(with
E)
=
1/((1-F)+F/S))
F指fraction(小部分)S指小部分的加速比
CPU
time
=
CPI
IC
T
CPU
time=
Seconds
=
Instructions
x
Cycles
x
Seconds
Program
Program
Instruction
Cycle
执行时间是计算机系统度量的最实际,最可靠的方式
第二章
指令集结构设计
对于一种指令集结构,我们必须要知道指令格式或编码方式,操作数和操作结果存放的位置,数据类型和大小,寻址方式,支持哪些操作,下一条指令的地址(jumps,conditions,branches)
1、指令集结构分类
累加器型、堆栈型、通用寄存器型、存储器-存储器型
通用寄存器型占主导地位,因为寄存器比存储器快,对编译器而言,寄存器更容易使用
通用寄存器的分类:
优点
缺点
Register-Register
指令格式简单,并且长度固定,是一种简单的代码生成模型,各种指令的执行时钟周期数相近。
指令条数相对较多,目标代码大。
Register-Memory
直接对存储器操作数进行访问,容易对指令进行编码,且其目标代码较小。
指令中的操作数类型不同。指令的操作数可以存储在不同类型的存储器单元,所以每条指令的执行时钟周期数也不尽相同。
Memory-Memory
编码方式紧密,不用为保存临时变量而浪费寄存器空间。
指令字长多种多样。每条指令的执行时钟周期数也大不一样,对存储器的频繁访问将导致存储器访问瓶颈问题。
2、寻址方式
如何解释存储器地址?如何说明寻址方式?
目前几乎所有的机器的存储器都是按字节编址的,当读取一个32位字时,如果每次一个字节,四次完成,每次一个字,一次就可以了,问题来了:
如何将字节地址映射到字地址(尾端问题)
一个字是否可以存放在任何字节边界上(对齐问题)
对齐问题:对一个s字节的对象访问,地址为A,如果A
mod
s
=0
那么它就是边界对齐的。
边界对齐的原因是存储器本身读写的要求,存储器本身读写通常就是边界对齐的,对于不是边界对齐的对象的访问可能要导致存储器的两次访问,然后再拼接出所需要的数。(或发生异常)
重要的寻址方式:
偏移寻址方式,立即数寻址方式,寄存器间址方式
SPEC测试表明,使用频度达到
75%--99%
还有其他很多寻址方式,这里就不解释了
3、操作数的类型、表示和大小
操作数类型是面向应用,面向软件系统所处理的各种数据结构
整型、浮点型、字符、字符串、向量类型等
类型由操作码确定或数据附加硬件解释的标记,一般采用由操作码确定
操作数的表示:硬件结构能够识别,指令系统可以直接调用的结构
整型:原码、反码、补码
浮点:IEEE
754标准
十进制:BCD码,二进制十进制表示
单字、双字的数据访问具有较高的频率
4、指令集功能设计
需考虑的因素:速度、价格和灵活性。基本要求:指令系统的完整性、规整性、高效率和兼容性
完整性设计:具备基本指令种类
兼容性:系列机
高效率:指令执行速度快、使用频度高
规整性:让所有运算部件都能对称、均匀的在所有数据存储单元之间进行操作。对所有数据存储单元都能同等对待,无论是操作数或运算结果都可以无约束地存放到任意数据存储单元中
正交性:数据类型独立于寻址方式,寻址方式独立于所要完成的操作
1、
CISC计算机指令集结构的功能设计
目标:增强指令功能,减少指令的指令条数,以提高系统性能
面向目标程序的优化,面向高级语言和编译器的优化
对大量的目标程序机器执行情况进行统计分析,找出使用频度高,执行时间长的指令或指令串
对于那些使用频度高的指令,用硬件加快其执行,对于那些使用频度高的指令串,用一条新的指令来代替它
2、
RISC计算机指令结构的功能设计
通过简化指令系统,用最高效的方法实现最常用的指令
充分发挥流水线的效率,减少CPI
硬件方面:硬布线控制逻辑,减少指令和寻址方式的种类,使用固定格式,采用Load/Store,指令执行过程中设置多级流水线。
软件方面:十分强调优化编译的作用
5、指令格式
指令格式选择策略
如果代码长度最重要,那么使用变长指令格式
如果性能至关重要,使用固定长度指令
有些嵌入式CPU附加可选模式,由每一应用自己选择性能还是代码量
有些机器使用边执行边解压的方式
如果每条指令存在多个存储器操作数,或有多种寻址方式,每一操作数都要说明其寻址方式
6、
编译技术与计算机体系结构
编译优化-4个层次
高层优化:一般在源码上进行,同时把输出传递给以后的优化扫描步骤
局部优化:仅在一系列代码片断之内(基本块)将代码优化
全局优化:将局部优化扩展为跨越分支,并且引入一组针对优化循环的转换
与机器相关的优化:充分利用特定的系统结构
第三章
流水线技术
1、流水线技术
流水线技术要点
流水线技术并不能提高单个任务的执行效率,它可以提高整个系统的吞吐率
流水线中的瓶颈——最慢的那一段
多个任务同时执行,但使用不同的资源
其潜在的加速比=流水线的级数
流水段所需时间不均衡将降低加速比
流水线存在装入时间和排空时间,使得加速比降低
由于存在相关问题,会导致流水线停顿
流水线正常工作的基本条件
增加寄存器文件保存当前段传送到下一段的数据和控制信息
存储器带宽是非流水的5倍
指令流水线通过指令重叠减小
CPI
充分利用数据通路
当前指令执行时,启动下一条指令
其性能受限于花费时间最长的段:解决办法:
串联:将最慢段进一步划分
并联:增加部件
检测和消除相关
如何有利于流水线技术的应用
所有的指令都等长
只有很少的指令格式
只用Load/Store来进行存储器访问
TP:吞吐率
S加速比
E效率-设备利用效率
2、流水线的相关
采用流水线技术必然会带来流水线相关问题,虽然我们使用等待策略总是可以解决相关,但是,流水线控制必须能检测相关,否则由软件设计来避免
结构相关
同一时间两种方式使用同一资源
(停顿等待)
数据相关
在数据未准备好之前,就需要使用数据当前指令的执行需要上一条指令的结果(RAW,WAW,WAR
硬件方法:采用定向技术,软件方法:指改变指令顺序,插入缓冲槽,指令集调度)
RAW(写后读)由于实际的数据交换需求而引起的
WAR(读后写)由于重复使用寄存器名“r1”引起的
DLX
5
段基本流水线不会有此类相关因为,所有的指令都是5段,并且读操作总是在第2段,而写操作在第5段。
WAW(写后写)也是由于重复使用寄存器“r1”引起的
在DLX
5段基本流水线中,也不会发生。因为所有指令都是5段,并且写操作都在第5段,在后面的复杂的流水线中我们将会看到
WAR
和WAW
相关。
控制相关
由于控制类指令引起的,试图在条件未评估之前,就做决定
分支需要解决两个问题:分支目标地址(转移成功意谓着PC值不是
PC+4),转移条件是否有效,这两点在DLX中都在流水线的靠后段中确定
译码在ID段后,转移地址必须在ID段后才知道,此时取进来的指令可能是错误的指令
解决控制相关的静态方法:
1、Stall:直到分支方向确定
2、预测分支失败:直接执行后继指令,如果分支实际情况为分支成功,则撤销流水线中的指令对流水线状态的更新
DLX分支指令平均47%为分支失败
由于PC+4已经计算出来,因此可以用它来取下一条指令
3、预测分支成功:平均53%
DLX
分支为分支成功,但分支目标地址在ID段才能计算出目标地址
4、延迟转移:选择指令来填充延迟槽
3、异常
精确中断
非精确中断
异常发生在指令中,并且要求恢复执行,要求==>流水线必须安全地
shut
down
PC必须保存,如果重新开始的是一条分支指令,它需要重新执行
引起异常的指令前面的指令都已执行完,故障后的指令可以重新从故障点后执行
理想情况,引起故障的指令没有改变机器的状态
要正确的处理这类异常请求,必须保证故障指令不产生副作用
精确中断对整数流水线而言,不是太难实现
第四章
指令级并行
本章研究的是减少停顿(stalls)数的方法和技术
流水线提高的是指令带宽(吞吐率),而不是单条指令的执行速度
相关限制了流水线性能的发挥
结构相关:需要更多的硬件资源
数据相关:需要定向,编译器调度
控制相关:尽早检测条件,计算目标地址,延迟转移,预测
增加流水线的级数会增加相关产生的可能性
异常,浮点运算使得流水线控制更加复杂
编译器可降低数据相关和控制相关的开销
Load
延迟槽
Branch
延迟槽
Branch预测
1、指令级并行的概念
计算机系统的并行性,从执行程序的角度,分为:
指令内部并行:指令内部的微操作
指令级并行:并行执行两条或多条指令
任务级或过程级并行:并行执行两个或多个过程或任务
作业或程序级并行:在多个作业或程序间并行
从处理数据的角度,并行性等级分为:
字串位串
字串位并
字并位串
全并行
提高并行的三种途径
时间重叠
资源重复
资源共享
ILP:
无关的指令重叠执行
流水线的平均CPI
Pipeline
CPI
=
Ideal
Pipeline
CPI
+
Struct
Stalls
+
RAW
Stalls
+
WAR
Stalls
+
WAW
Stalls
+
Control
Stalls
2、硬件方案:
指令级并行
为什么要使用硬件调度方案?
在编译时无法确定的相关,可以通过硬件调度来优化
编译器简单
代码在不同组织结构的机器上,同样可以有效的运行
基本思想:
允许
stall后的指令继续向前流动
DIVDF0,F2,F4
ADDDF10,F0,F8
SUBDF12,F8,F14
允许乱序执行(out-of-order
execution)
=>
out-of-order
completion
硬件方案之一:
记分牌
记分牌控制的四阶段
1、Issue—指令译码,检测结构相关
如果当前指令所使用的功能部件空闲,并且没有其他活动的指令使用相同的目的寄存器(WAW),记分牌发射该指令到功能部件,并更新记分牌内部数据,如果有结构相关或WAW相关,则该指令的发射暂停,并且也不发射后继指令,直到相关解除.
2、Read
operands—没有数据相关时,读操作数
如果先前已发射的正在运行的指令不对当前指令的源操作数寄存器进行写操作,或者一个正在工作的功能部件已经完成了对该寄存器的写操作,则该操作数有效.
操作数有效时,记分牌控制功能部件读操作数,准备执行。
记分牌在这一步动态地解决了RAW相关,指令可能会乱序执行。
3、Execution—取到操作数后执行
(EX)
接收到操作数后,功能部件开始执行.
当计算出结果后,它通知记分牌,可以结束该条指令的执行.
4、Write
result—finish
execution
(WB)
一旦记分牌得到功能部件执行完毕的信息后,记分牌检测WAR相关,如果没有WAR相关,就写结果,如果有WAR
相关,则暂停该条指令。
Example:
DIVDF0,F2,F4
ADDDF10,F0,F8
SUBDF8,F8,F14
CDC
6600
scoreboard
将暂停SUBD直到ADDD读取操作数后,才进入WR段处理。
记分牌的主要思想是:允许stall后的指令继续进行处理
可以out-of-order
execution
=>
out-of-order
completion
ID
段检测结构相关和WAW相关
6600
scoreboard的缺陷:
没有定向数据通路
指令窗口较小,仅局限于基本块内的调度
功能部件数较少,容易产生结构相关,特别是其Load
store操作也是用IU部件完成的
结构冲突时不能发射
WAR相关是通过等待解决的
WAW相关时,不会进入IS阶段
动态调度方案之二:Tomasulo
Algorithm
Tomasulo
算法的三阶段:性能受限于Common
Data
Bus
1、Issue—从FP操作队列中取指令
如果RS空闲(no
structural
hazard),则控制发射指令和操作数
(renames
registers).
消除WAR,WAW相关
2、Execution—operate
on
operands
(EX)
当两操作数就绪后,就可以执行
如果没有准备好,则监测Common
Data
Bus
以获取结果。通过推迟指令执行避免RAW相关
3、Write
result—finish
execution
(WB)
将结果通过Common
Data
Bus传给所有等待该结果的部件;
表示RS可用
Tomasulo
Scoreboard
流水化的功能部件
多个功能部件
(6
load,3
store,3
+,2
x/÷)
(1
load/store,1
+,2
x,1
÷)
指令窗口大小:
~
14
instructions
~
5
instructions
有结构冲突时不发射
相同
WAR:
用寄存器重命名避免
stall
来避免
WAW:用寄存器重命名避免
停止发射
从FU广播结果
写寄存器方式
Control:
RS
集中式scoreboard
关于异常处理?
乱序完成加大了实现精确中断的难度
在前面指令还没有完成时,寄存器文件中可能会有后面指令的运行结果.如果这些前面的指令执行时有中断产生,怎么办?
例如:
DIVD
F10,F0,F2
SUBD
F4,F6,F8
ADDD
F12,F14,F16
需要“rollback”
寄存器文件到原来的状态:
精确中断含义是其返回地址为:该地址之前的所有指令都已完成,其后的指令还都没有完成
实现精确中断的技术:顺序完成(或提交)
即提交指令完成的顺序必须与指令发射的顺序相同
Reorder
Buffer:
提供了撤销指令运行的机制
指令以发射序存放在ROB中
指令顺序提交
有效的支持精确中断,推测执行
分支预测对提高性能是非常重要的
推断执行是利用了ROB撤销指令执行的机制
控制相关的动态解决技术
控制相关:由条件转移或程序中断引起的相关,也称全局相关。控制相关对流水线的吞吐率和效率影响相对于数据相关要大得多
条件指令在一般程序中所占的比例相当大
中断虽然在程序中所占的比例不大,但中断发生在程序中的哪一条指令,发生在一条指令执行过程中的哪一个功能段都是不确定的
处理好条件转移和中断引起的控制相关是很重要的。
当分支方向预测错误时,不仅流水线中有多个功能段要浪费,更严重的是可能造成程序执行结果发生错误,因此当程序沿着错误方向运行后,作废这些程序时,一定不能破坏通用寄存器和主存储器的内容。
动态分支预测方法
基于BPB(Branch
Prediction
Buffer)
1、
一位预测1-bit
BHT
问题:
在一个循环中,1-bit
BHT
将导致2次分支预测错误
最后一次循环,前面都是预测成功,而这次需要退出循环
第一次循环,由于前面预测为失败,而这次实际上为成功
2、
两位预测2-bit
BHT
解决办法:
2位记录分支历史
3、
两级预测
记录转移历史信息
根据所记录的转移历史信息,预测转移的方向
3、多指令流出技术
如何使CPI
PPN,Tag标识该页是否在主存
可变长段
-段表:段表中存放所有可能的段信息,段号
->段基址
再加段内偏移量,可能由许多小尺寸段
页表
页表中所含项数:一般为虚页的数量
功能:
VPN->PPN,方便页重新分配,有一位标识该页是否在内存
替换规则
LRU是最好的,但真正的LRU方法,硬件代价较大
用硬件简化,通过OS来完成
为了帮助OS寻找LRU页,每个页面设置一个
use
bit
当访问主存中一个页面时,其use
bit置位
OS定期复位所有使用位,这样每次复位之前,使用位的值就反映了从上次复位到现在的这段时间中,哪些页曾被访问过。
当有失效冲突时,由OS来决定哪些页将被换出去。
写策略:总是用写回法,因为访问硬盘速度很慢。
页面大小的选择
页面选择较大的优点,减少了页表的大小,如果局部性较好,可以提高命中率
页面选择较大的缺点,内存中的碎片较多,内存利用率低,进程启动时间长,失效开销加大
TLB
(Translation
look-aside
Buffer)
页表一般很大,存放在主存中。,导致每次访存可能要两次访问主存,一次读取页表项,一次读写数据
解决办法:采用
TLB
存放近期经常使用的页表项,是整个页表的部分内容的副本。
速度至关重要
TLB过小,意义不大
TLB过大,代价较高
相联度较高(容量小)