计算机体系结构.docx
- 文档编号:11192203
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:21
- 大小:58.34KB
计算机体系结构.docx
《计算机体系结构.docx》由会员分享,可在线阅读,更多相关《计算机体系结构.docx(21页珍藏版)》请在冰豆网上搜索。
计算机体系结构
计算机体系结构
班级:
计11任课教师:
高清华
5月12日----5月16日教学指导
一多指令流出技术
1.技术背景:
每个时钟周期流出一条指令,而且要减少数据相关和控制相关,达到CPI为1。
为了更好的提高性能,若每个时钟周期流出多条指令,CPI就能小于1,这就是多指令流出。
2.多指令流出处理器有三种:
超标量、超流水、超长指令字。
●超标量:
每个时钟周期流出1到8条指令不定,可以通过编译器静态调度,也可以通过记分牌或Tomasulo算法动态调度。
●超长字令字(VLIW):
每个时钟周期流出的指令数量是固定的,它们构成一条长字令,或说是一个混合指令包。
超长字令字的处理器目前只能通过编译静态调度。
硬件不负责动态处理。
●超流水:
就是每一个功能部件一步流水化,使得一个功能部件在一拍中可以处理多条指令。
本章不作讨论。
二超标量
超标量处理器每时钟周期流出1--8条流水指令数不定。
能够同时流出指令满足条件:
●指令不相关
●某些其他限制条件:
如每个时钟周期访存不能多于1次;不同处理器限制不同。
●如果出现相关或不满足限制条件,只能流出前面指令,所以流出指令数不定。
超标量处理器的指令序列可以采用静态调度或动态调度。
1、DLX处理器的超标量实现:
●一次流出两条指令
●先一条整数指令(Load/store/分支/整数运算)和后跟任意一条浮点指令。
●编译要求指令成对,且与64位边界对齐,整数部分在前。
●第一条指令流出后才可以流出第二条,由硬件动态决定,如果不满足条件只流出第一条指令。
图4.16给出两路超标量指令流示意图。
2、多指令流出需解决的问题:
●必须采用流水功能部件或多个独立功能部件。
●整数操作和浮点操作搭配使用不同的寄存器组和不同的功能部件。
不必增加硬件。
但是浮点访存指令,使用整数部件,从而导致结构冲突;需增加冲突监测机制的硬件。
●整数部分指令是浮点数据访存,导致浮点寄存器端口访存竞争。
流出指令对中浮点指令和整数指令相关,会产生新的数据相关。
浮点寄存器端口问题通过限制浮点存取(访存)指令单独执行来解决。
也可解决数据存取和浮点操作指令同时流出的结构相关。
另一种方法是给浮点寄存器设置两个端口:
一个读端口、一个写端口。
●浮点Load后跟浮点操作指令且相关,硬件能检测出,从而限制后面浮点指令流出。
●简单DLX中Load有一个时钟周期延迟,使用此结果的指令没有停是无法使用Load结果的;而在DLX超标量流水线中,在同一个时钟周期和下一个时钟周期不能使用Load结果。
这意味着后面三条指令不能使用Load结果。
为了有效的利用超标量可获得的并行度,需采用更有效的编译技术和硬件调度技术,以克服限制超标量流水线的性能发展障碍。
3、超标量处理器的循环展开和指令调度。
(静态调度)
例4.9
Loop:
LDF0,0(R1):
F0=数组元素
ADDDDF4,F0,F2:
加上在F2中标量
SD0(R1),F4:
存结果
SUBIR1,R1,#8:
将指令减少8(每个DW)
BNEZR1,Loop:
R1不等于0,转移
循环展开5次5个LD,ADDD,SD
1个SUBI,1个BNEZ
如图4.17所示
性能分析:
●12个时钟周期/5=2.4时钟周期/每个迭代
●性能受限于整数计算和浮点计算之间平衡问题,无足够浮点指令使流水线达到饱和。
超标量处理器(双指令流出):
第一条整数指令和第二条浮点指令同时流出,如果相关,顺序流出。
超标量处理器与超长指令字处理器相比有两个优点:
●超标量结构对代码是透明的,处理器自己检测下一条指令能否流出,从而不需要排列指令来满足指令流出。
●即使未经过调度的代码或是旧的编译器编译过代码也可以运行,当然运行的效果不会很好。
解决办法:
用动态调度技术。
三多指令流出的动态调度
1、多指令流出,可用记分牌技术或Tomasulo算法进行动态调度处理。
扩展Tomasulo算法,流出两条指令:
一条是整数指令,另一条是浮点指令顺序流向保留站。
整数数据寄存器和浮点寄存器分开,不使用相同寄存器就可以同时将一条整数指令和一条浮点指令送到它们的保留站中。
这种方法阻碍了在一个时钟周期内先浮点Load和浮点加两条相关指令的流出。
但可以送到保留站中以后顺序执行。
2、双指令流出两种方法:
1指令流出进一步流水化,指令流水速度是基本机器周期的两倍。
这样,在后面指令流出前更改寄存器表,于是两条指令可同时执行。
2对流水的指令进行限制。
只有浮点的取操作指令或是从整数寄存器将数据送入浮点寄存器的传送操作,才会产生相关而导致两条指令不能同时流出。
3、使用结果队列前减少存储器取操作或数据传送操作对保留站的需求量。
使用队列还可以使等待操作数的存操作指令提高流出。
动态调度对数据传送最有效,静态调度对R-R操作的代码序列最有效。
例:
利用Tomasulo算法同时流出两条指令(整数+浮点)DLX。
如相关,先流出整数。
延迟时间如表4.2;指令流出和结果写回各占一个时钟周期。
采用二次迭代。
代码起LOOPLDF0,0(R1);F0=数组元素
ADDDDF4,F0,F2;加上在F2中标量
SD0(R1),F4;存结果
SUBIR1,R1,#8;将指针减少8
RNEER1,Loop;R1不等于0,转移
结果如图4.18
分析:
指令双流出的数目很少。
每次只有一条浮点指令流出。
四超长指令字技术
超标量所需硬件多。
如双流出指令需多达6个寄存器,然后再决定流出一条还是两条,并将其送到相应功能部件上。
如扩充到多条指令,硬件更多,动态调度,复杂度更大。
采用超长字令字,比超标量省硬件。
超长指令字采用多个独立的功能部件,但它并不是将多条指令流到各个功能单元,而是将多条指令操作打包,形成一条非常长的指令,超长指令由此得名。
选择同时可流出多条指令由编译器完成,而超标量机器中此功能是硬件完成,所以超长指令字机器可以节省大量硬件。
超长字令字包括:
两个整数操作、两个浮点操作、两个访存操作和一个分支操作,每个操作可能占用16-24位,指令长度达112-168位。
指令中每一个操作字段称为操作槽。
要求代码序列必须有较大的并行度来填充有效的操作槽。
这工作有编译器通过循环展开等指令调度完成。
例4.11超长字令字含:
两条访存、两浮、一条整型/分支、代码序列与前面同。
如图:
4.19。
展开后代码序列如例4.11
5次展开,消除所有空转,运行8个时钟周期。
8/5次=1.6时钟周期/每个迭代
17条/8=2.1条/每周期
操作槽8*5=40;17/40=42.5%,槽有效性
超长字节需较多寄存器:
展开5次,需6个浮点寄存器
展开10次,需11个浮点寄存器
五多流出处理器受到的限制
1.程序内在指令级并行性
这是根本因素。
流水线处理器需要大量可并行执行操作才能避免流水线停顿。
如延迟5个时钟周期,则需5条无关指令。
通常:
无关指令数=流水线深度*可以同时工作功能部件数。
所以意味着5个功能部件的流水线忙起来,大约需15-25条无关指令。
2.多指令流出需要大量硬件资源
●整数部件和浮点部件加倍;
●存储带宽和寄存器带宽增加;
●存储器带宽增加存储器系统的复杂性,增加寄存器,加大硅片面积,降低时钟频率;
●超标量动态调度(记分牌或Tomasulo算法)增加大量硬件、设计复杂性升高。
3.超标量和超长指令字固有的技术限制
●超长指令技术问题:
①代码体积增长和操作锁定关联(Lock-step)将循环多次展开,获取足够元素操作,从而增加代码长度。
②指令不满时,用空操作填充功能部件操作槽,效率不高。
●超长指令逻辑问题:
二进制代码兼容性。
每个处理器之间,实现的基本指令是相同。
不同处理器的指令流出数目和功能单元延迟等是不同的。
超长指令字机器的代码移植是非常困难的。
采用目标代码的转换的仿真的方法。
代码兼容性是超长指令字机器面临的最棘手的问题。
4.如何获得较大数目的指令级并行性
浮点程序中,通过简单地循环展开获得的并行度,还不如原始代码在向量处理机上运行的效率。
是否多指令流出的处理器是否比向量处理器更好?
开销基本相同,但向量处理机速度可能更高。
5.多流出处理器两方面优势:
●多流出处理器有潜力从不规则的代码中发掘更高的并行度
●所使用的存储系统开销较小。
目前,多指令流出将是利用指令级并行性的主要方法,向量处理器技术主要是这些处理器的扩展。
本章小结:
指令级并行是实现高性能中央处理器的主要手段。
指令功能调度:
记分牌技术和Tomasulo;
多流出技术:
超标量、超长指令字、超流水。
5月19日----5月23日教学指导
第五章存储层次
存储器是计算机的核心部件,其性能直接关系到整个计算机系统性能的高低。
存储系统的设计目标是:
高速度、大容量、低成本。
5.1存储器的层次结构
5.1.1单机存储器,多级存储器和存储层次
计算机软件设计者和计算机用户希望容量越大越好,而求速度要快,价格不能太昂贵。
存储器的三个主要指标是:
容量、速度和价格(每位价格)。
实际情况:
速度越快,每位价格就越高;容量越大,每位价格就越低;容量越大,速度越慢。
解决方法:
采用存储层次,用多种存储器,构成存储器的层次结构。
存储层次
…
多级存储层次
在多级存储层次中,M1:
速度最快、容量最小、价格最高;Mn:
速度最慢、容量最大、价格最低。
层次存储器中的数据特征:
最常用的数据在M1中,次常用的在M2中,最少使用的在Mn中。
层次存储器设计的目标:
M1的速度,Mn的容量和价格。
层次存储器设计的依据:
程序局部性原理。
在层次存储中,靠近CPU的存储器中的数据一般都是其下一层存储器中数据的子集。
CPU访存时的基本原则:
由近及远,首先是访问M1,若在M1中找不到所要的数据,就要访问M2,将包含所需数据的块或页面调入M1。
若在M2中还找不到,就要访问M3,依次类推。
如果所有层次中都没有,就出现错误。
5.1.2存储层次的性能参数
研究方法:
层次存储器基本问题通过两层存储器结构进行研究。
对于由M1和M2构成的两级存储层次结构,假设的M1、M2容量、访问时间和每位价格分别为S1、TA1、C1和S2、TA2、C2。
1.存储层次的平均每位价格为:
显然,当S1< 2.命中率H: 命中率为CPU访问存储系统时,在中M1找到所需信息地概率。 访问M1和M2的次数为N1和N2,则 ,不命中率或失效率F是指CPU访存时在M1中找不到所需信息的概率: F=1-H 3.平均访问时间TA 分两种情况来考虑CPU的一次访存: (1)当命中时,访问时间即为TA1。 TA1常称为命中时间(hit-time) (2)大多数二级存储层次结构下,当不命中M1时,就必须从M2中访问这个字,并把包含所请求的字的信息块传送到M1。 设传送一个信息块所需的时间为TB,则不命中时的访问时间为: TA1+TB+TA2=TA1+TM 其中TM=TB+TA2,为从向M2发出访问请求到把整个数据块调入M1中所需的时间。 TM常称为实效开销(miss-penalty)。 根据以上分析可知: TA=HTA1+(1-H)(TA1+TM)=TA1+(1-H)TM或TA=TA1+FTM即: 平均访问时间=(命中时间)+(失效率)*(失效开销) 5.1.3“Cache-主存”和“主存-辅存”层次 1.“Cache-主存”层次 CPU和主存之间在性能上的差别越来越大,如图5-2所示(P181)。 现代计算机都采用Cache来解决这个问题。 “Cache-主存”层次的工作几乎完全由硬件实现,因此它不但对应用程序员是透明的,而且对系统程序员几乎也是透明的。 2.“主存-辅存”层次 为弥补主存的容量,在主存外面增加一个容量更大、价格更便宜、但速度更慢的存储器(称为辅存,一般是硬盘)。 “主存-辅存”层次目前通常采用虚拟存储器技术来实现,以向编程人员提供大量的程序空间。 3.“Cache-主存”层和“主存-辅存”层的简单比较 “Cache-主存”结构层次如图5-3(a)所示(P181) “主存-辅存”结构层次如图5-3(b)所示(P181) P182表5.1对“Cache-主存”层和“主存-辅存”层做了一个简单比较。 4.两级存储器之间的四个基本问题 ●当把一个块调入高一层存储器时,可以放到那些位置上? (映象规则) ●当所要访问的块在高一层存储器时,如何找到该块? (查找方法) ●当发生失效时,应替换那一块? (替换算法) ●当进行写访问时,应进行那些操作? (写策略) 5.2Cache基本知识 Cache用于解决前面所说的四个基本问题,即映象规则、查找方法、替换算法、写策略。 Cache是按块进行管理的,Cache和主存均被分割成大小相同的块,信息以块为单位调入Cache。 CPU的访问地址被分割成两部分: 块地址和块内位移。 主存地址: 块地址 块内偏移量 5.2.1映象规则 三种映象规则如图5-4所示(P184) 1.全相联: 是指主存中的任一块可以被放置到Cache中的任何一个位置的方法。 2.直接映象: 是指主存中的每一个块只能被放置到Cache中唯一的一个位置。 3.组相联映象: 是指主存中的每一块可以被放置到Cache中唯一的一个组中的任何一个位置。 ⏹全相联映象主存中的任一块可以被放置到Cache中的任何一个位置。 如图5-4(a)所示(P184) ⏹直接映象如图5-4(b)所示(P184)。 一般的,对于主存的第i块(即块地址为i),设它映象到Cache的第j块,则j=imodM,其中M为Cache的块数。 设M=2m,则当地址表示为二进制时,Cache的块号j实际上就是主存地址i的低m位。 如图所示: j 主存块地址i m位 因此,可以直接用主存块地址的低m位去选择直接映象Cache中的相应块。 ⏹组相联映象如图5-4(c)所示(P184)。 它是直接映象和全相联的一种折衷: 首先是映象到唯一的一个组上(直接映象的特征),然后这个块可以被放入这个组中的任何一个位置(全相联的特征)。 若主存第i块映象到Cache的第k组,则: k=imodG,其中G为Cache的组数。 设G=2j,二进制时,k就是i的低G位。 如图所示: k 主存块地址i g位 可以直接用主存块地址的低G位去选择Cache中的相应组。 这里的低G位以及上述直接映象中的低m位通称位索引(Index)。 n路组相联: 如果每组中有n个块(n=M/G),则称该映象规则为n路组相联。 n的值称为相联度。 直接映象和全相联是组相联的两种极端情况。 P185表5-2给出了路数n和组数G的取值。 表中M为Cache的块数。 下面进行一般性分析: (1)相联度越高(即n值越大),Cache空间的利用率越高,块冲突(一个主存块要进入已被占用的Cache块位置)概率越低,因而Cache的失效率就越低; (2)全相联的失效率最低,直接映象的失效率最高; (3)增大n值并不一定能使整个计算机系统的性能提高,而且还会使Cache的实现复杂度和代价增大。 绝大多数计算机都采用直接映象,两路组相联或四路组相联。 作业: P255 5.1解释术语: 存储层次、全相联映象、直接映象、组相联映象失效率、实效开销、相联度 5.2 5月26日----5月30日教学指导 5.2.2查找方法 两个问题: (1)当CPU访问Cache时,如何确定Cache中是否有所要访问的块? (2)若有的话,如何确定其位置? 步骤: 查找目录表。 Cache中设有一个目录表,该表共有M项,每一项对应于Cache中的一个块,称为标识(Tag)。 在目录表中给每一项设置一个有效位,记录Cache中相应块所包含的信息有效。 一个主存块被调入Cache中某一个块位置时,它的标识就被填入目录表中与该Cache块相对应的项中,并且该项的有效位被置“1”,否则为“0”。 候选位置: 根据映象规则不同,一个主存块可能映象到Cache中的一个或多个Cache块位置。 当CPU访问该主存块时,必须且只需查找它的候选位所对应的目录表项(标识)。 如果有与所访问的主存块相同的标识,且其有效值为“1”,则它所对应的Cache块即是所要找的块。 为了保证速度,对各候选位置的标识的检查比较应并行进行。 直接映象Cache的候选位置只有一个;全相联Cache的候选位置为m个;n路组相联则介于两者之间,为n个。 一般采用单体多字节存储器和比较器来实现并行查找。 N越大,实现查找的机制就越复杂,代价就越高。 无论是直接映象还是组相联,查找时,只需比较Tag,Index无需比较。 如果Cache的容量不变,提高相联度会增加每一组中的块数,从而会减少index的位数和增加Tag的位数。 P1865-5给出了4路组相联并行标识比较。 5.2.3替换算法 当要从主存调入一个块到Cache中时,会出现该块所映象的一组(或一个)Cache块已全被占用的情况。 这时,必须强迫腾出其中的一块,以接纳新调入的块。 腾出哪一块呢? 这就是替换算法所要解决的问题。 直接映象: Cache中的替换很简单,因为只有一个块可选择。 组相联和全相联: Cache中有多个块供选择,替换算法有随机法、FIFO和LRU三种。 评价替换算法的标准: 尽可能避免替换马上就要用到的信息。 1.随机法 随机地选择被替换的块。 优点: 简单、易于用硬件实现,且对于调试硬件很有用。 不足: 没有考虑Cache块被使用的情况,反映不了程序的局部性。 2.先进先出法FIFO 最早装入相应组的块作为被替换的块。 优点: 容易实现。 不足: 虽然利用了各块进入Cache的顺序这“历史”信息,但还是不能正确地反映程序的局部性。 因为最先进入的块,很可能是经常要用的块。 3.最近最少使用法LRU 选择近期最少被访问的块作为被替换的块。 优点: 反映程序的局部性原理,因而其失效率在上述三种方法中最低的。 不足: LRU比较复杂,硬件实现比较困难,特别当组的大小增加时,LRU的实现代价会越来越高,而且经常知识近似实现(选择最久没有被访问过的块作为被替换的块)。 LRU实际上是依据局部性原理的一个推论: 如果最近刚用过的块很可能就是马上要再用到的块,则最久没用过的块就是最佳的被替换者。 P188表5-3给出了LRU与随机法在失效率方面的比较。 LRU和随机法分别因其失效率低和实现简单而被广泛采用。 5.2.4写策略 写需要对存储器和Cache两部分进行操作。 写和读的比较: (1)检查标识不能与写入Cache块并行进行,“写”一般比“读”花费更多的时间。 (2)处理器要写入的数据的宽度不是定长的(通常1-8字节),写入时,只能修改Cache块中相应的部分,不能够多修改。 而“读”则可以多读出几个字节也没关系。 Cache与主存内容的一致性问题: Cache内容是主存部分内容的一个副本。 “写”访问却可能导致它们内容的不一致。 显然,为了保证正确性,主存的内容也必须更新。 何时更新主存,是写策略所要解决的问题。 写策略是区分不同Cache设计方案的一个重要标志。 写策略主要有写直达法和写回法两种。 1.写直达法 该法也称为存直达法。 在执行“写”操作时,不仅把信息写入Cache中相应的块,而且也写入下一级存储器中相应的块。 优点: 易于实现。 下一级存储器中的数据总是最新的。 这一个优点对于I/O和多处理机来说是重要的。 问题: 写直达法在进行“写”操作的过程中CPU必须等待,直到“写”操作结束,称为CPU写停顿。 常用的优化技术: 写缓冲器。 CPU一旦把数据写入该缓冲器,就可以继续执行,使下一级存储器的更新和CPU的执行重叠起来。 2.写回法 该法也称为拷回法。 只把信息写入Cache中相应的块。 该块只有在被替换时,才被写回主存。 为了减少在替换时块的写回,为在Cache中的每一块设置一个“污染位”,用于指出该点是“脏”的(被修改过)还是“干净的”(没有被修改过)。 替换时。 若被替换的块是干净的,则不必写回下一级存储器。 只有被修改过的块写回。 写回法的优点: 速度快,“写”操作能以Cache存储器的速度进行。 对于同一单元的多个写只需最后一次写回下一级存储器。 有些写只能到达Cache,不能到达主存,所使用存储器频带较低。 这使得写回法对于多处理机很有吸引力。 写访问失效时的内存分配。 当发生写失效时,是否调入相应的块,有两种选择: (1)按写分配法 写失效时,先把所写单元所在的块调入Cache,然后再进行写入。 与读失效类似。 这种方法也称为写时取法。 (2)不按写分配法 写失效时,直接写入下一级存储器而不讲相应的块调入Cache。 这种方法也称为绕写法。 写回法Cache一般采用按写分配法(这样以后对那个块的“写”就能被Cache捕获)。 写直达法一般采用不按写分配法(因为以后对那个块的“写”仍然还要到达下一级存储器)。 作业: P255 5.1解释术语: 替换算法、LRU、写直达法、写回法、按写分配法、不按写分配法 6月2日----6月6日教学指导 5.2.521064的内部数据Cache 该Cache的结构如图5.6所示(P190)。 容量为8KB,块大小为32字节,共有256个块;直接相连映象;采用写直达方式,写缓冲器的大小为4个块,并且在写失效时不按写分配。 四选一的多路选择器: 数据RAM为8个字节宽;索引加上块内偏移量的高两位作为RAM的地址,就选取了相应的8个字节,多路选择器仅仅是块内偏移量高两位的译码示意。 (1)21064读数据Cache 第一步: 地址的分割。 21064微处理器传送给Cache的物理地址为34位。 这个地址被分为两部分: 块地址(29位)和块内偏移量(5位)。 块地址进一步被分为地址标识(21位)和Cache索引(8位);索引从256个Cache块中选择一块,读出数据和标识;标识用于判断要访问的块是否在Cache中(是否命中);索引的位数由Cache容量、块大小、相联度决定。 21064的Cache是直接映象的,所以相联度为1,索引所需的位数满足: 索引为8位,标识为29-8=21位。 第二步: 按索引选择标识和数据。 在直接映象的Cache中,读出数据并送往CPU与读出标识并进行匹配这两个过程可以并行进行。 第三步: 标识比较。 标识从Cache中读出来后,就去和CPU送来的物理地址中的标识部分进行比较。 为了保证标识信息有效,其相应的有效位必须位“1”,否则比较的结果就是无效的。 第四步: CPU从Cache中取数据。 如果标识比较的结果是匹配,且有效位为“1”,那么最后一步就是发信号通知CPU从Cache中取走数据。 其它说明: 21064完成这4步骤需要2个时钟周期;在这两个周期中间。 指令需要用到本次“读”的结果,这条指令就只好等待。 (2)21064写数据Cache 写命中: 前三步跟上面是一样的。 在确认标识比较为匹配之后,才把数据写入。 因为21064使用写直达Cache,所以到此写过程还未结束,还应将数据送往写缓冲器。 21064的写缓冲器有四块,每块大小为4个字,缓冲器是按字寻址的(21064中每个字为8字节)。 写缓冲器为空,就把数据和完整的地址写入缓冲器。 对CPU而言,本次“写”访问已完成,可以继续工
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机体系结构