现代微处理器体系结构课堂笔记.docx
《现代微处理器体系结构课堂笔记.docx》由会员分享,可在线阅读,更多相关《现代微处理器体系结构课堂笔记.docx(25页珍藏版)》请在冰豆网上搜索。
![现代微处理器体系结构课堂笔记.docx](https://file1.bdocx.com/fileroot1/2022-12/12/017cc2a4-d8e3-49ae-b0fb-9ae36c023412/017cc2a4-d8e3-49ae-b0fb-9ae36c0234121.gif)
现代微处理器体系结构课堂笔记
系统结构笔记
第一章绪论
1、背景介绍,市场变化及原因及趋势
2、计算机体系结构基本概念
计算机体系结构的定义
ComputerArchitecture=InstructionSetArchitecture+
MachineOrganization+Hardware
指令级结构(InstructionSetArchitecture)
研究软、硬件功能分配以及机器级界面的确定,既由机器语言程序设计者或编译程序设计者所看到的机器物理系统的抽象或定义。
但它不包括机器内部的数据流和控制流、逻辑设计和器件设计等。
计算机组织(ComputerOrganization)
ISA的逻辑实现,包括机器级内的数据流和控制流的组成以及逻辑设计等。
它着眼于机器内各事件的排序方式与控制机构、各部件的功能以及各部件间的联系。
计算机实现(ComputerImplementation)
是指计算机组成的物理实现,包括处理机、主存等部件的物理结构,器件的集成度和速度,器件、模块、插件、底板的划分与连接,专用器件的设计,微组装技术,信号传输,电源、冷却及整机装配技术等。
它着眼于器件技术和微组装技术,其中,器件技术在实现技术中起着主导作用。
计算机体系结构=ISA+Organization+Hardware
3、定量分析技术基础
1、计算机系统评价
当客户拿到一组机器时,他们肯定想知道哪个性能最好,哪个价格最低,哪个性价比最高?
而我们设计者则需要最大限度的提高性能,使性价比达到最高,因此我们必须要就基本的评价标准和方法。
常用性能评价指标:
执行时间(CPUTime)、峰值速度(PeakPerformance)、负载(load)
开销(overhead)、利用率(utilizationratio)、饱和性能(saturateperformance)、
带宽(bandwidth)、延迟(latency)、吞吐率(throughout)、加速比(speedup)、
Amdahi定律(amdahilaw)、效率(efficiency)、基准测试(benchmark)、
响应时间(responsetime)等等
2、性能度量
性能定义为每秒完成的任务数-biggerisbetter
如果我们更关心响应时间(responsetime)
X性能是Y的n倍是指
3、性能设计与评测的基本原则
并行性
大概率事件优先原则
所有指令都需要取指令操作,只有部分指令访问数据
优化指令访问操作比优化数据访问操作优先
程序局部性原理:
时间局部性、空间局部性
4、Amdahl’s定律
Speedup(withE)=1/((1-F)+F/S))F指fraction(小部分)S指小部分的加速比
CPUtime=CPI*IC*T
CPUtime=Seconds=InstructionsxCyclesxSeconds
ProgramProgramInstructionCycle
执行时间是计算机系统度量的最实际,最可靠的方式
第二章指令集结构设计
对于一种指令集结构,我们必须要知道指令格式或编码方式,操作数和操作结果存放的位置,数据类型和大小,寻址方式,支持哪些操作,下一条指令的地址(jumps,conditions,branches)
1、指令集结构分类
累加器型、堆栈型、通用寄存器型、存储器-存储器型
通用寄存器型占主导地位,因为寄存器比存储器快,对编译器而言,寄存器更容易使用
通用寄存器的分类:
优点
缺点
Register-Register
指令格式简单,并且长度固定,是一种简单的代码生成模型,各种指令的执行时钟周期数相近。
指令条数相对较多,目标代码大。
Register-Memory
直接对存储器操作数进行访问,容易对指令进行编码,且其目标代码较小。
指令中的操作数类型不同。
指令的操作数可以存储在不同类型的存储器单元,所以每条指令的执行时钟周期数也不尽相同。
Memory-Memory
编码方式紧密,不用为保存临时变量而浪费寄存器空间。
指令字长多种多样。
每条指令的执行时钟周期数也大不一样,对存储器的频繁访问将导致存储器访问瓶颈问题。
2、寻址方式
如何解释存储器地址?
如何说明寻址方式?
目前几乎所有的机器的存储器都是按字节编址的,当读取一个32位字时,如果每次一个字节,四次完成,每次一个字,一次就可以了,问题来了:
如何将字节地址映射到字地址(尾端问题)
一个字是否可以存放在任何字节边界上(对齐问题)
对齐问题:
对一个s字节的对象访问,地址为A,如果Amods=0那么它就是边界对齐的。
边界对齐的原因是存储器本身读写的要求,存储器本身读写通常就是边界对齐的,对于不是边界对齐的对象的访问可能要导致存储器的两次访问,然后再拼接出所需要的数。
(或发生异常)
重要的寻址方式:
偏移寻址方式,立即数寻址方式,寄存器间址方式
SPEC测试表明,使用频度达到75%--99%
还有其他很多寻址方式,这里就不解释了
3、操作数的类型、表示和大小
操作数类型是面向应用,面向软件系统所处理的各种数据结构
整型、浮点型、字符、字符串、向量类型等
类型由操作码确定或数据附加硬件解释的标记,一般采用由操作码确定
操作数的表示:
硬件结构能够识别,指令系统可以直接调用的结构
整型:
原码、反码、补码
浮点:
IEEE754标准
十进制:
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”引起的
DLX5段基本流水线不会有此类相关因为,所有的指令都是5段,并且读操作总是在第2段,而写操作在第5段。
WAW(写后写)也是由于重复使用寄存器“r1”引起的
在DLX5段基本流水线中,也不会发生。
因为所有指令都是5段,并且写操作都在第5段,在后面的复杂的流水线中我们将会看到WAR和WAW相关。
控制相关由于控制类指令引起的,试图在条件未评估之前,就做决定
分支需要解决两个问题:
分支目标地址(转移成功意谓着PC值不是PC+4),转移条件是否有效,这两点在DLX中都在流水线的靠后段中确定
译码在ID段后,转移地址必须在ID段后才知道,此时取进来的指令可能是错误的指令
解决控制相关的静态方法:
1、Stall:
直到分支方向确定
2、预测分支失败:
直接执行后继指令,如果分支实际情况为分支成功,则撤销流水线中的指令对流水线状态的更新
DLX分支指令平均47%为分支失败
由于PC+4已经计算出来,因此可以用它来取下一条指令
3、预测分支成功:
平均53%DLX分支为分支成功,但分支目标地址在ID段才能计算出目标地址
4、延迟转移:
选择指令来填充延迟槽
3、异常精确中断非精确中断
异常发生在指令中,并且要求恢复执行,要求==>流水线必须安全地shutdown
PC必须保存,如果重新开始的是一条分支指令,它需要重新执行
引起异常的指令前面的指令都已执行完,故障后的指令可以重新从故障点后执行
理想情况,引起故障的指令没有改变机器的状态
要正确的处理这类异常请求,必须保证故障指令不产生副作用
精确中断对整数流水线而言,不是太难实现
第四章指令级并行
本章研究的是减少停顿(stalls)数的方法和技术
流水线提高的是指令带宽(吞吐率),而不是单条指令的执行速度
相关限制了流水线性能的发挥
结构相关:
需要更多的硬件资源
数据相关:
需要定向,编译器调度
控制相关:
尽早检测条件,计算目标地址,延迟转移,预测
增加流水线的级数会增加相关产生的可能性
异常,浮点运算使得流水线控制更加复杂
编译器可降低数据相关和控制相关的开销
Load延迟槽
Branch延迟槽
Branch预测
1、指令级并行的概念
计算机系统的并行性,从执行程序的角度,分为:
指令内部并行:
指令内部的微操作
指令级并行:
并行执行两条或多条指令
任务级或过程级并行:
并行执行两个或多个过程或任务
作业或程序级并行:
在多个作业或程序间并行
从处理数据的角度,并行性等级分为:
字串位串
字串位并
字并位串
全并行
提高并行的三种途径
时间重叠
资源重复
资源共享
ILP:
无关的指令重叠执行
流水线的平均CPI
PipelineCPI=IdealPipelineCPI+StructStalls+RAWStalls+WARStalls+WAWStalls+ControlStalls
2、硬件方案:
指令级并行
为什么要使用硬件调度方案?
在编译时无法确定的相关,可以通过硬件调度来优化
编译器简单
代码在不同组织结构的机器上,同样可以有效的运行
基本思想:
允许stall后的指令继续向前流动
DIVDF0,F2,F4
ADDDF10,F0,F8
SUBDF12,F8,F14
允许乱序执行(out-of-orderexecution)=>out-of-ordercompletion
硬件方案之一:
记分牌
记分牌控制的四阶段
1、Issue—指令译码,检测结构相关
如果当前指令所使用的功能部件空闲,并且没有其他活动的指令使用相同的目的寄存器(WAW),记分牌发射该指令到功能部件,并更新记分牌内部数据,如果有结构相关或WAW相关,则该指令的发射暂停,并且也不发射后继指令,直到相关解除.
2、Readoperands—没有数据相关时,读操作数
如果先前已发射的正在运行的指令不对当前指令的源操作数寄存器进行写操作,或者一个正在工作的功能部件已经完成了对该寄存器的写操作,则该操作数有效.操作数有效时,记分牌控制功能部件读操作数,准备执行。
记分牌在这一步动态地解决了RAW相关,指令可能会乱序执行。
3、Execution—取到操作数后执行(EX)
接收到操作数后,功能部件开始执行.当计算出结果后,它通知记分牌,可以结束该条指令的执行.
4、Writeresult—finishexecution(WB)
一旦记分牌得到功能部件执行完毕的信息后,记分牌检测WAR相关,如果没有WAR相关,就写结果,如果有WAR相关,则暂停该条指令。
Example:
DIVDF0,F2,F4
ADDDF10,F0,F8
SUBDF8,F8,F14
CDC6600scoreboard将暂停SUBD直到ADDD读取操作数后,才进入WR段处理。
记分牌的主要思想是:
允许stall后的指令继续进行处理
可以out-of-orderexecution=>out-of-ordercompletion
ID段检测结构相关和WAW相关
6600scoreboard的缺陷:
没有定向数据通路
指令窗口较小,仅局限于基本块内的调度
功能部件数较少,容易产生结构相关,特别是其Loadstore操作也是用IU部件完成的
结构冲突时不能发射
WAR相关是通过等待解决的
WAW相关时,不会进入IS阶段
动态调度方案之二:
TomasuloAlgorithm
Tomasulo算法的三阶段:
性能受限于CommonDataBus
1、Issue—从FP操作队列中取指令
如果RS空闲(nostructuralhazard),则控制发射指令和操作数(renamesregisters).消除WAR,WAW相关
2、Execution—operateonoperands(EX)
当两操作数就绪后,就可以执行
如果没有准备好,则监测CommonDataBus以获取结果。
通过推迟指令执行避免RAW相关
3、Writeresult—finishexecution(WB)
将结果通过CommonDataBus传给所有等待该结果的部件;
表示RS可用
Tomasulo
Scoreboard
流水化的功能部件
多个功能部件
(6load,3store,3+,2x/÷)
(1load/store,1+,2x,1÷)
指令窗口大小:
~14instructions
~5instructions
有结构冲突时不发射
相同
WAR:
用寄存器重命名避免
stall来避免
WAW:
用寄存器重命名避免
停止发射
从FU广播结果
写寄存器方式
Control:
RS
集中式scoreboard
关于异常处理?
乱序完成加大了实现精确中断的难度
在前面指令还没有完成时,寄存器文件中可能会有后面指令的运行结果.如果这些前面的指令执行时有中断产生,怎么办?
例如:
DIVDF10,F0,F2
SUBDF4,F6,F8
ADDDF12,F14,F16
需要“rollback”寄存器文件到原来的状态:
精确中断含义是其返回地址为:
该地址之前的所有指令都已完成,其后的指令还都没有完成
实现精确中断的技术:
顺序完成(或提交)
即提交指令完成的顺序必须与指令发射的顺序相同
ReorderBuffer:
提供了撤销指令运行的机制
指令以发射序存放在ROB中
指令顺序提交
有效的支持精确中断,推测执行
分支预测对提高性能是非常重要的
推断执行是利用了ROB撤销指令执行的机制
控制相关的动态解决技术
控制相关:
由条件转移或程序中断引起的相关,也称全局相关。
控制相关对流水线的吞吐率和效率影响相对于数据相关要大得多
条件指令在一般程序中所占的比例相当大
中断虽然在程序中所占的比例不大,但中断发生在程序中的哪一条指令,发生在一条指令执行过程中的哪一个功能段都是不确定的
处理好条件转移和中断引起的控制相关是很重要的。
当分支方向预测错误时,不仅流水线中有多个功能段要浪费,更严重的是可能造成程序执行结果发生错误,因此当程序沿着错误方向运行后,作废这些程序时,一定不能破坏通用寄存器和主存储器的内容。
动态分支预测方法
基于BPB(BranchPredictionBuffer)
1、一位预测1-bitBHT
问题:
在一个循环中,1-bitBHT将导致2次分支预测错误
最后一次循环,前面都是预测成功,而这次需要退出循环
第一次循环,由于前面预测为失败,而这次实际上为成功
2、两位预测2-bitBHT
解决办法:
2位记录分支历史
3、两级预测
记录转移历史信息
根据所记录的转移历史信息,预测转移的方向
3、多指令流出技术
如何使CPI<1两种基本方法
Superscalar:
每个时钟周期所发射的指令数不定(1-8条)
由编译器或硬件完成调度
IBMPowerPC,SunUltraSparc,DECAlpha,HP8000
该方法对目前通用计算是最成功的方法
(Very)LongInstructionWords(V)LIW:
每个时钟周期流出的指令数(操作)固定(4-16)
由编译器调度,实际上由多个单操作指令构成一个超长指令
目前比较成功的应用于DSP,多媒体应用
1999/2000HP和Intel达成协议共同研究VLIW
第五章存储系统
计算机(CPU+存储系统+I/O)冯诺依曼结构是五个部分(控制器,运算器,主存,输入,输出)
Cpu_time=IC*CPI*I
前面第四章主要讲cpu方面的,通过指令级并行来减少平均的指令执行时间,以及各种相关及其解决方案(减少stall),和超标量(多发射),来减少CPI
存储系统主要讲cache(提高访存速度)和虚存技术(提高主存容量),主要讲下面四个部分:
映射功能,查找策略,替换策略,写策略.
一、存储层次结构
1、存储系统的设计目标
通过优化存储系统的组织来使得针对典型的应用平均访存时间最短
基本解决方法:
多级层次结构CPU-M1-M2-----Mn
存储系统速度接近速度最快M1,容量和价格接近最大最便宜的Mn。
2、存储层次的工作原理和基本概念
TemporalLocality(时间局部性):
保持最近访问的数据项最接近微处理器
SpatialLocality(控件局部性):
把地址连续的若干个字构成的块从底层复制到上一层
Block:
(块,不同层次的block大小可能不同)
镜像和一致性问题:
高层存储器是低层存储器的一个镜像,高层存储器内容修改必须反映到低层存储器中去,保持数据的一致性。
寻址:
访问数据的方式。
若一组程序对存储器的访问,其中N1次在M1中找到所需数据,N2次在M2中找到数据则
HitRate(命中率):
存储器访问在较高层命中的比例H=N2/(N1+N2)
HitTime(命中时间):
访问较高层的时间,TA1
失效率:
访问的块不在存储系统较高层次上的概率
MissRate(失效率)=1-(HitRate)=1–H=N2/(N1+N2)
当在M1中没有命中时,一般必须从M2中将所访问的数据所在块搬到M1中,然后CPU才能在M1中访问
设传送一个块的时间为TB,即不命中时的访问时间为:
TA2+TB+TA1=TA1+TM
TM通常称为失效开销
平均访存时间TA=HTA1+(1-H)(TA1+TM)=TA1+(1-H)TM
3、常见的存储层次的组织
Registers<->Memory由编译器完成调度
cache<->memory由硬件完成调度
memory<->disks由硬件和操作系统(虚拟管理),由程序员完成调度
二、Cache基本知识
Cache是CPU和主存之间的一个高速,小容量的存储器
1、映象规则
当要把一个块从主存调入Cache时,如何放置问题
三种方式
全相联方式:
即所调入的块可以放在cache中的任何位置
直接映象方式:
主存中每一块只能存放在cache中的唯一位置一般,主存块地址i与cache中块地址j的关系为:
j=imod(M),M为cache中的块数
组相联映象:
主存中每一块可以被放置在Cache中唯一的一个组中的任意一个位置,组由若干块构成,若一组由n块构成,我们称N路组相联
组间直接映象
组内全相联
若cache中有G组,则主存中的第i块的组号K
K=imod(G),
2、查找方法
显然相联度N越大,实现查找的机制就越复杂,代价就越高
无论直接映象还是组相联,查找时,只需比较tag,index无需参加比较
主存地址格式
Cache结构中主存地址格式:
CacheTag放在高位段,CacheIndex放中间,字节选择位放在低位段
CacheTag
CacheIndex
Blockoffset
Cache标记块地址块内地址
Cache地址格式
块地址
Blockoffset
3、替换算法
主存中块数一般比cache中的块多,可能出现该块所对应的一组或一个Cache块已全部被占用的情况,这时需强制腾出其中的某一块,以接纳新调入的块,替换哪一块,这是替换算法要解决的问题:
直接映象,因为只有一块,别无选择
组相联和全相联有多种选择
替换方法
随机法(Random),随机选择一块替换
优点:
简单,易于实现
缺点:
没有考虑Cache块的使用历史,反映程序的局部性较差,失效率较高
FIFO-选择最早调入的块
优点:
简单
虽然利用了同一组中各块进入Cache的顺序,但还是反映程序局部性不够,因为最先进入的块,很可能是经常使用的块
最近最少使用法(LRU)(LeastRecentlyUsed)
优点:
较好地利用了程序的局部性,失效率较低
缺点:
比较复杂,硬件实现较困难
观察结果(失效率)
相联度高,失效率较低。
Cache容量较大,失效率较低。
L