《计算机系统结构复习汇总.ppt》由会员分享,可在线阅读,更多相关《计算机系统结构复习汇总.ppt(414页珍藏版)》请在金锄头文库上搜索。
1、1 1/79/79 第1章 计算机系统结构的基本概念张晨曦张晨曦 刘依刘依2 2/79/791.1 引言1.2 计算机系统结构的概念1.3 定量分析技术1.4 计算机系统结构的发展1.5 计算机系统结构中并行性的发展3 3/79/791.第一台通用电子计算机诞生于1946年 2.计算机技术的飞速发展得益于两个方面 计算机制造技术的发展 计算机系统结构的创新3.经历了4个发展过程 1.1 引 言4 4/79/79时 间原 因每年的性能增长19461946年起的年起的2525年年 两种因素都起着主要的作用两种因素都起着主要的作用 25% 25% 2020世纪世纪7070年代末年代末8080年代初年
2、代初 大规模集成电路和微处理器大规模集成电路和微处理器出现出现, ,以集成电路为代表的制以集成电路为代表的制造技术的发展造技术的发展 约约35% 35% 2020世纪世纪8080年代中开年代中开始始 RISCRISC结构的出现,系统结构不断更结构的出现,系统结构不断更新和变革,制造技术不断发展新和变革,制造技术不断发展50%50%以上以上维持了约维持了约1616年年 20022002年以来年以来 3 3个(见下页)个(见下页)约约20%20%1.1 引言5 5/79/791.1 引言 功耗问题(已经很大)。 可以进一步有效开发的指令级并行性已经很少。 存储器访问速度的提高缓慢。 6 6/79/
3、791.1 引言系统结构的重大转折: 从单纯依靠指令级并行转向开发线程级并行和数从单纯依靠指令级并行转向开发线程级并行和数据级并行。据级并行。 计算机系统结构在计算机的发展中有着极其重要计算机系统结构在计算机的发展中有着极其重要的作用。的作用。7 7/79/791.计算机系统硬件/固件软件2.计算机语言从低级向高级发展 高一级语言的语句相对于低一级语言来说功能更强,高一级语言的语句相对于低一级语言来说功能更强,更便于应用,但又都以低级语言为基础。更便于应用,但又都以低级语言为基础。 3.从计算机语言的角度,把计算机系统按功能划分成 多级层次结构。 每一层以一种语言为特征 1.2 计算机系统结构
4、的概念1.2.1 计算机系统的层次结构软件软件硬件或固件硬件或固件9 9/79/791.2 计算机系统结构的概念 虚拟机:由软件实现的机器 语言实现的两种基本技术q翻译:翻译:先把先把N N+1+1级程序全部转换成级程序全部转换成N N级程序后,再去执级程序后,再去执行新产生的行新产生的N N级程序,在执行过程中级程序,在执行过程中N N+1+1级程序不再被级程序不再被访问。访问。 q解释:解释:每当一条每当一条N N+1+1级指令被译码后,就直接去执行级指令被译码后,就直接去执行一串等效的一串等效的N N级指令,然后再去取下一条级指令,然后再去取下一条N N+1+1级的指令,级的指令,依此重
5、复进行。依此重复进行。 解释执行比编译后再执行所花的时间多,但占用的存储空间较少。 1010/79/791.2 计算机系统结构的概念1.计算机系统结构的经典定义程序员所看到的计算机属性,即概念性结构与功能特性。2.按照计算机系统的多级层次结构,不同级程序员所看到的计算机具有不同的属性。3.透明性在计算机技术中,把这种本来存在的事物或属性,但从某种角度看又好像不存在的概念称为透明性。1.2.2 计算机系统结构的定义1111/79/791.2 计算机系统结构的概念4.Amdahl提出的系统结构 传统机器语言级程序员所看到的计算机属性。5.广义的系统结构定义:指令集结构、组成、硬件 (计算机设计的(
6、计算机设计的3 3个方面)个方面)6.对于通用寄存器型机器来说,这些属性主要是指:指令系统 包括机器指令的操作类型和格式、指令间的包括机器指令的操作类型和格式、指令间的排序和控制机构等。排序和控制机构等。数据表示 硬件能直接识别和处理的数据类型。硬件能直接识别和处理的数据类型。寻址规则 包括最小寻址单元、寻址方式及其表示。包括最小寻址单元、寻址方式及其表示。 1212/79/791.2 计算机系统结构的概念寄存器定义 (包括各种寄存器的定义、数量和使用方式)(包括各种寄存器的定义、数量和使用方式) 中断系统(中断的类型和中断响应硬件的功能等)(中断的类型和中断响应硬件的功能等) 机器工作状态的
7、定义和切换(如管态和目态等)(如管态和目态等) 存储系统 (主存容量、程序员可用的最大存储容量等)(主存容量、程序员可用的最大存储容量等) 信息保护(包括信息保护方式和硬件对信息保护的支持)(包括信息保护方式和硬件对信息保护的支持) 1313/79/791.2 计算机系统结构的概念I/O结构包括包括I/OI/O连接方式、处理机连接方式、处理机/ /存储器与存储器与I/OI/O设备之间设备之间数据传送的方式和格式以及数据传送的方式和格式以及I/OI/O操作的状态等操作的状态等计算机系统结构概念的实质: 确定计算机系统中软、硬件的界面,界面之上是软件实现的功能,界面之下是硬件和固件实现的功能。14
8、14/79/791.2 计算机系统结构的概念1.2.3 计算机组成和计算机实现1.计算机系统结构:计算机系统的软、硬件的界面即机器语言程序员所看到的传统机器级所具有的属性。 2.计算机组成:计算机系统结构的逻辑实现包含物理机器级中的数据流和控制流的组成以及逻辑设计等。着眼于:物理机器级内各事件的排序方式与控制方式、各部件的功能以及各部件之间的联系。1515/79/791.2 计算机系统结构的概念3.计算机实现:计算机组成的物理实现包括处理机、主存等部件的物理结构,器件的集 成度和速度,模块、插件、底板的划分与连接, 信号传输,电源、冷却及整机装配技术等。着眼于:器件技术(起主导作用)、微组装技
9、术。 一种体系结构可以有多种组成。 一种组成可以有多种物理实现。1616/79/791.2 计算机系统结构的概念4.系列机 由同一厂家生产的具有相同系统结构、但具有不同组成和实现的一系列不同型号的计算机。 例如,例如,IBMIBM公司的公司的IBM 370IBM 370系列,系列,IntelIntel公司的公司的x86x86系列等。系列等。1.2.4 计算机系统结构的分类常见的计算机系统结构分类法有两种: Flynn分类法、冯氏分类法1717/79/791.2 计算机系统结构的概念1.冯氏分类法用系统的最大并行度对计算机进行分类。最大并行度:计算机系统在单位时间内能够处理 的最大的二进制位数。
10、 用平面直角坐标系中的一个点代表一个计算机系用平面直角坐标系中的一个点代表一个计算机系统,其横坐标表示字宽(统,其横坐标表示字宽(n n位位),纵坐标表示一次能同),纵坐标表示一次能同时处理的字数(时处理的字数(m m字字)。)。m mn n就表示了其最大并行度。就表示了其最大并行度。 2.Flynn分类法 按照指令流和数据流的多倍性进行分类。指令流:计算机执行的指令序列。1818/79/791.2 计算机系统结构的概念1919/79/791.2 计算机系统结构的概念数据流:由指令流调用的数据序列。多倍性:在系统受限的部件上,同时处于同一执 行阶段的指令或数据的最大数目。Flynn分类法把计算
11、机系统的结构分为4类:q 单指令流单数据流单指令流单数据流(SISD)(SISD)q 单指令流多数据流单指令流多数据流(SIMD)(SIMD)q 多指令流单数据流多指令流单数据流(MISD)(MISD)q 多指令流多数据流多指令流多数据流(MIMD)(MIMD)4类计算机的基本结构ISIS:指令流,:指令流,DSDS:数据流,:数据流,CSCS:控制流,:控制流,CUCU:控制部件,:控制部件,PUPU:处理部件,:处理部件,MMMM和和SMSM:存储器。:存储器。2121/79/794个定量原理:1.以经常性事件为重点对经常发生的情况采用优化方法的原则进行选 择,以得到更多的总体上的改进。优
12、化是指分配更多的资源、达到更高的性能或 者分配更多的电能等。 1.3 定量分析技术1.3.1 计算机系统设计的定量原理2222/79/791.3 定量分析技术2.Amdahl定律 加快某部件执行速度所能获得的系统性能加速比,受限于该部件的执行时间占系统中总执行时间的百分比。系统性能加速比:加速比系统性能改进后系统性能改进前总执行时间改进前总执行时间改进后 2323/79/791.3 定量分析技术加速比依赖于两个因素q可改进比例:可改进比例:在改进前的系统中,可改进部分的执在改进前的系统中,可改进部分的执 行时间在总的执行时间中所占的比例。行时间在总的执行时间中所占的比例。 它总是小于等于它总是
13、小于等于1 1。例如:例如:一个需运行一个需运行6060秒的程序中有秒的程序中有2020秒的运算可以加速,秒的运算可以加速, 那么这个比例就是那么这个比例就是20/6020/60。q部件加速比:部件加速比:可改进部分改进以后性能提高的倍数。可改进部分改进以后性能提高的倍数。 它是改进前所需的执行时间与改进后执行时间的比。它是改进前所需的执行时间与改进后执行时间的比。 一般情况下部件加速比是大于一般情况下部件加速比是大于1 1的。的。例如:例如:若系统改进后,可改进部分的执行时间是若系统改进后,可改进部分的执行时间是2 2秒,秒, 而改进前其执行时间为而改进前其执行时间为5 5秒,则部件加速比为
14、秒,则部件加速比为5/25/2。2424/79/791.3 定量分析技术改进后程序的总执行时间总执行时间改进后 不可改进部分的执行时间 可改进部分改进后的执行时间总执行时间改进后 (1可改进比例)总执行时间改进前 + (1 可改进比例) + 总执行时间改进前 可改进比例部件加速比可改进比例总执行时间改进前部件加速比2525/79/791.3 定量分析技术系统加速比为改进前与改进后总执行时间之比加速比 总执行时间改进前总执行时间改进后 (1可改进比例)+可改进比例部件加速比12626/79/791.3 定量分析技术 例例1.1 1.1 将计算机系统中某一功能的处理速度提高到原来的将计算机系统中某
15、一功能的处理速度提高到原来的2020倍,但该功能的处理时间仅占整个系统运行时间的倍,但该功能的处理时间仅占整个系统运行时间的40%40%,则采,则采用此提高性能的方法后,能使整个系统的性能提高多少?用此提高性能的方法后,能使整个系统的性能提高多少? 解解 由题可知,可改进比例由题可知,可改进比例 = 40% = 0.4= 40% = 0.4, 部件加速比部件加速比 = 20= 20 根据根据AmdahlAmdahl定律可知:定律可知: 采用此提高性能的方法后,能使整个系统的性能提高到原采用此提高性能的方法后,能使整个系统的性能提高到原来的来的1.6131.613倍倍。 总加速比 = 10.6
16、+0.420= 1.6132727/79/791.3 定量分析技术 例例1.2 1.2 某计算机系统采用浮点运算部件后,使浮点运算速某计算机系统采用浮点运算部件后,使浮点运算速度提高到原来的度提高到原来的2020倍,而系统运行某一程序的整体性能提高到倍,而系统运行某一程序的整体性能提高到原来的原来的5 5倍,试计算该程序中浮点操作所占的比例。倍,试计算该程序中浮点操作所占的比例。 解解 由题可知,部件加速比由题可知,部件加速比 = 20= 20,系统加速比,系统加速比 = 5= 5 根据根据AmdahlAmdahl定律可知定律可知 由此可得:可改进比例由此可得:可改进比例 = 84.2% =
17、84.2% 即程序中浮点操作所占的比例为即程序中浮点操作所占的比例为84.2%84.2%。2828/79/791.3 定量分析技术Amdahl定律:一种性能改进的递减规则q如果仅仅对计算任务中的一部分做性能改进,则改如果仅仅对计算任务中的一部分做性能改进,则改 进得越多,所得到的总体性能的提升就越有限。进得越多,所得到的总体性能的提升就越有限。重要推论:如果只针对整个任务的一部分进行改 进和优化,那么所获得的加速比不超过 1/(1可改进比例) 2929/79/791.3 定量分析技术3.CPU性能公式执行一个程序所需的CPU时间CPU时间 = 执行程序所需的时钟周期数时钟周期时间其中,时钟周期
18、时间是系统时钟频率的倒数。每条指令执行的平均时钟周期数CPI (Cycles Per InstructionCycles Per Instruction) CPI = 执行程序所需的时钟周期数IC ICIC:所执行的指令条数所执行的指令条数程序执行的CPU时间可以写成 CPU时间 = IC CPI 时钟周期时间 3030/79/791.3 定量分析技术CPU的性能取决于3个参数q时钟周期时间:时钟周期时间:取决于硬件实现技术和计算机组成。取决于硬件实现技术和计算机组成。qCPICPI:取决于计算机组成和指令集结构。取决于计算机组成和指令集结构。qICIC:取决于指令集结构和编译技术。取决于指令
19、集结构和编译技术。对CPU性能公式进行进一步细化 假设:计算机系统有假设:计算机系统有n n种指令;种指令; CPICPIi i :第第i i种指令的处理时间;种指令的处理时间; ICICi i :在程序中第在程序中第i i种指令出现的次数;种指令出现的次数;则则 CPUCPU时钟周期数时钟周期数 = = (CPI (CPIi i IC ICi i) )n ni i=1=13131/79/791.3 定量分析技术CPU时间 = 执行程序所需的时钟周期数时钟周期时间 = (CPIiICi)时钟周期时间CPI可以表示为CPI = = = 其中,(ICi/IC)反映了第i种指令在程序中所占的比例。
20、i=1n时钟周期数IC(CPIiICi)i=1nIC(CPIi )i=1nICiIC3232/79/791.3 定量分析技术 例例1.3 1.3 考虑条件分支指令的两种不同设计方法:考虑条件分支指令的两种不同设计方法: (1 1)CPUCPUA A:通过比较指令设置条件码,然后测试条件码进行通过比较指令设置条件码,然后测试条件码进行分支。分支。 (2 2)CPUCPUB B:在分支指令中包括比较过程。在分支指令中包括比较过程。 在这两种在这两种CPUCPU中,条件分支指令都占用中,条件分支指令都占用2 2个时钟周期,而所有个时钟周期,而所有其他指令占用其他指令占用1 1个时钟周期。对于个时钟周
21、期。对于CPUCPUA A,执行的指令中分支指令占,执行的指令中分支指令占20%20%;由于每条分支指令之前都需要有比较指令,因此比较指令也;由于每条分支指令之前都需要有比较指令,因此比较指令也占占20%20%。由于。由于CPUCPUA A在分支时不需要比较,因此在分支时不需要比较,因此CPUCPUB B的时钟周期时间的时钟周期时间是是CPUCPUA A的的1.251.25倍。问:哪一个倍。问:哪一个CPUCPU更快?如果更快?如果CPUCPUB B的时钟周期时间的时钟周期时间只是只是CPUCPUA A的的1.11.1倍,哪一个倍,哪一个CPUCPU更快呢?更快呢?3333/79/791.3
22、定量分析技术 解解 我们不考虑所有系统问题,所以可用我们不考虑所有系统问题,所以可用CPUCPU性能公式。占用性能公式。占用2 2个时钟个时钟周期的分支指令占总指令的周期的分支指令占总指令的20%20%,剩下的指令占用,剩下的指令占用1 1个时钟周期。个时钟周期。所以所以 CPICPIA A = 0.2 = 0.2 2 + 0.80 2 + 0.80 1 = 1.2 1 = 1.2则则CPUCPUA A性能为性能为 总总CPUCPU时间时间A A = IC = ICA A 1.2 1.2 时钟周期时钟周期A A根据假设,有根据假设,有 时钟周期时钟周期B B = 1.25 = 1.25 时钟周
23、期时钟周期A A 在在CPUCPUB B中没有独立的比较指令,所以中没有独立的比较指令,所以CPUCPUB B的程序量为的程序量为CPUCPUA A的的80%80%,分支指令的比例为,分支指令的比例为3434/79/791.3 定量分析技术 20%/80% = 25%20%/80% = 25% 这些分支指令占用这些分支指令占用2 2个时钟周期,而剩下的个时钟周期,而剩下的75%75%的指令占用的指令占用1 1个时钟个时钟周期,因此周期,因此 CPICPIB B = 0.25 = 0.25 2 + 0.75 2 + 0.75 1 = 1.25 1 = 1.25因为因为CPUCPUB B不执行比较
24、,故不执行比较,故 ICICB B = 0.8 = 0.8 IC ICA A因此因此CPUCPUB B性能为性能为 总总CPUCPU时间时间B B = IC = ICB B CPI CPIB B 时钟周期时钟周期B B = 0.8 = 0.8 ICICA A 1.25 1.25 (1.25 1.25 时钟周期时钟周期A A) = 1.25 = 1.25 ICICA A 时钟周期时钟周期A A3535/79/791.3 定量分析技术 在这些假设之下,尽管在这些假设之下,尽管CPUCPUB B执行指令条数较少,执行指令条数较少,CPUCPUA A因为有着更因为有着更短的时钟周期,所以比短的时钟周期
25、,所以比CPUCPUB B快。快。 如果如果CPUCPUB B的时钟周期时间仅仅是的时钟周期时间仅仅是CPUCPUA A的的1.11.1倍,则倍,则 时钟周期时钟周期B B = 1.10 = 1.10 时钟周期时钟周期A ACPUCPUB B的性能为的性能为 总总CPUCPU时间时间B B = IC = ICB B CPICPIB B 时钟周期时钟周期B B = 0.8 = 0.8 ICICA A 1.25 1.25 (1.10 1.10 时钟周期时钟周期A A) = 1.10 = 1.10 IC ICA A 时钟周期时钟周期A A 因此因此CPUCPUB B由于执行更少指令条数,比由于执行更
26、少指令条数,比CPUCPUA A运行更快。运行更快。3636/79/791.3 定量分析技术4.程序的局部性原理 程序执行时所访问的存储器地址分布不是随机的,而是相对地簇聚。常用的一个经验规则程序执行时间的程序执行时间的90%90%都是在执行程序中都是在执行程序中10%10%的代码。的代码。程序的时间局部性程序即将用到的信息很可能就是目前正在使用的信息。程序即将用到的信息很可能就是目前正在使用的信息。程序的空间局部性 程序即将用到的信息很可能与目前正在使用的信息程序即将用到的信息很可能与目前正在使用的信息在空间上相邻或者临近。在空间上相邻或者临近。3737/79/791.3 定量分析技术1.执
27、行时间和吞吐率 如何评测一台计算机的性能,与测试者看问题的角度有关。用户关心的是:单个程序的执行时间(执行单个 程序所花的时间很少)数据处理中心的管理员关心的是:吞吐率(在单 位时间里能够完成的任务很多 )1.3.2 计算机系统的性能评测3838/79/791.3 定量分析技术假设两台计算机为X和Y,X比Y快的意思是: 对于给定任务,X的执行时间比Y的执行时间少。X的性能是Y的n倍,即而执行时间与性能成反比,即 执行时间Y执行时间X=nn= = =执行时间Y执行时间X性能Y1性能X1性能X性能Y3939/79/791.3 定量分析技术执行时间可以有多种定义:q计算机完成某一任务所花费的全部时间
28、,包括计算机完成某一任务所花费的全部时间,包括磁盘访磁盘访问、存储器访问、输入问、存储器访问、输入/输出、操作系统开销等。输出、操作系统开销等。qCPU时间:时间:CPUCPU执行所给定的程序所花费的时间,不执行所给定的程序所花费的时间,不包含包含I/OI/O等待时间以及运行其他程序的时间。等待时间以及运行其他程序的时间。n用户用户CPUCPU时间:时间:用户程序所耗费的用户程序所耗费的CPUCPU时间。时间。n系统系统CPUCPU时间:时间:用户程序运行期间操作系统耗费的用户程序运行期间操作系统耗费的 CPUCPU时间。时间。4040/79/791.3 定量分析技术2.基准测试程序 用于测试
29、和比较性能的基准测试程序的最佳选择是真实应用程序。 (例如编译器)(例如编译器) 以前常采用简化了的程序,例如: q核心测试程序:核心测试程序:从真实程序中选出的关键代码段构从真实程序中选出的关键代码段构 成的小程序。成的小程序。q小测试程序:小测试程序:简单的只有几十行的小程序。简单的只有几十行的小程序。q合成的测试程序:合成的测试程序:人工合成出来的程序。人工合成出来的程序。WhetstoneWhetstone与与DhrystoneDhrystone是最流行的合成测试程序。是最流行的合成测试程序。 从测试性能的角度来看,上述测试程序就不可信了。 4141/79/791.3 定量分析技术原因
30、:p这些程序比较小,具有片面性;这些程序比较小,具有片面性;p系统结构设计者和编译器的设计者可以系统结构设计者和编译器的设计者可以“合谋合谋”把他把他们的计算机面向这些测试程序进行优化设计,使得们的计算机面向这些测试程序进行优化设计,使得 该计算机显得性能更高。该计算机显得性能更高。性能测试的结果除了和采用什么测试程序有关以 外,还和在什么条件下进行测试有关。基准测试程序设计者对制造商的要求q采用同一种编译器;采用同一种编译器;q对同一种语言的程序都采用相同的一组编译标志。对同一种语言的程序都采用相同的一组编译标志。 4242/79/791.3 定量分析技术一个问题:是否允许修改测试程序的源程
31、序三种不同的处理方法:q不允许修改。不允许修改。q允许修改,但因测试程序很复杂或者很大,几乎是允许修改,但因测试程序很复杂或者很大,几乎是无法修改。无法修改。q允许修改,只要保证最后输出的结果相同。允许修改,只要保证最后输出的结果相同。基准测试程序套件:由各种不同的真实应用程序构成。 (能比较全面地反映计算机在各个方面的处理性能(能比较全面地反映计算机在各个方面的处理性能 )SPEC系列:最成功和最常见的测试程序套件(美国的标准性能评估公司开发)(美国的标准性能评估公司开发)4343/79/791.3 定量分析技术q台式计算机的基准测试程序套件可以分为两大类:台式计算机的基准测试程序套件可以分
32、为两大类:处理器性能测试程序,图形性能测试程序处理器性能测试程序,图形性能测试程序qSPEC89SPEC89:用于测试处理器性能。用于测试处理器性能。1010个程序(个程序(4 4个整数程个整数程序,序,6 6个浮点程序)个浮点程序)q演化出了演化出了4 4个版本个版本SPEC92SPEC92:2020个程序个程序SPEC95SPEC95:1818个程序个程序SPEC2000SPEC2000:2626个程序个程序SPEC CPU2006SPEC CPU2006: 2929个程序个程序qSPEC CPU2006SPEC CPU20064444/79/791.3 定量分析技术整数程序整数程序121
33、2个(个(CINT2006CINT2006)9 9个是用个是用C C写的,写的,3 3个是用个是用C+C+写的写的浮点程序浮点程序1717个(个(CFP2006CFP2006)6 6个是用个是用FORTRANFORTRAN写的,写的,4 4个是用个是用C+C+写的,写的,3 3个个是用是用C C写的,写的,4 4个是用个是用C C和和FORTRANFORTRAN混合编写的。混合编写的。SPEC测试程序套件中的其他一系列测试程序组件qSPECSFSSPECSFS:用于用于NFSNFS(网络文件系统)文件服务器的测(网络文件系统)文件服务器的测试程序。它不仅测试处理器的性能,而且测试试程序。它不仅
34、测试处理器的性能,而且测试I/OI/O系统系统的性能。它重点测试吞吐率。的性能。它重点测试吞吐率。qSPECWebSPECWeb:WebWeb服务器测试程序。服务器测试程序。4545/79/791.3 定量分析技术qSPECviewperfSPECviewperf:用于测试图形系统支持用于测试图形系统支持OpenGLOpenGL库库的性能。的性能。qSPECapcSPECapc:用于测试图形密集型应用的性能。用于测试图形密集型应用的性能。事务处理(TP)性能测试基准程序:用于测试计算机在事务处理方面的能力,包括数据库访问 和更新等。q2020世纪世纪8080年代中期,一些工程师成立了称为年代中
35、期,一些工程师成立了称为TPCTPC的独的独立组织。目的是开发用于立组织。目的是开发用于TPTP性能测试的真实而又公平性能测试的真实而又公平的基准程序。的基准程序。q先后发布了多个版本:先后发布了多个版本: TPC-ATPC-A、TPC-CTPC-C、TPC-HTPC-H、TPC-WTPC-W、TPC-AppTPC-App等等(主要是用于测试服务器的性能(主要是用于测试服务器的性能 )4646/79/791.3 定量分析技术用于测试基于Microsoft公司的Windows系列操作系统平台的测试套件q PCMark04PCMark04:中央处理器测试组、内存测试组、图形芯片中央处理器测试组、内
36、存测试组、图形芯片测试组、硬盘测试组等。测试组、硬盘测试组等。qBusiness Winstone 2004Business Winstone 2004:主要用于测试计算机系统主要用于测试计算机系统商业应用的综合性能。商业应用的综合性能。qMultimedia Content Creation Winstone 2004Multimedia Content Creation Winstone 2004:主要用主要用于测试计算机系统多媒体应用的综合性能。于测试计算机系统多媒体应用的综合性能。qSiSoft Sandra Pro 2004SiSoft Sandra Pro 2004:一套功能强大的
37、系统分析一套功能强大的系统分析评比工具,拥有超过评比工具,拥有超过3030种以上的分析与测试模块。种以上的分析与测试模块。 主要包括:主要包括:CPUCPU、存储器、存储器、I/OI/O接口、接口、I/OI/O设备、主板等。设备、主板等。 4747/79/793.性能比较A机 B机 C机 W(1) W(2) W(3) 程序程序1 1 1.00 1.00 10.00 10.00 20.00 20.00 0.50 0.50 0.909 0.909 0.999 0.999 程序程序2 2 1000.00 1000.00 10.00 10.00 20.0020.000.50 0.50 0.091 0.
38、091 0.001 0.001 加权算术加权算术平均值平均值A Am m(1 1) 500.50 500.50 10.00 10.00 20.0020.00加权算术加权算术平均值平均值A Am m(2 2) 91.91 91.91 10.00 10.00 20.0020.00加权算术加权算术平均值平均值A Am m(3 3) 2.00 2.00 10.00 10.00 20.0020.00两个程序在A、B、C三台计算机上的执行时间1.3 定量分析技术4848/79/791.3 定量分析技术如何比较这3台计算机的性能呢?从该表可以得出:执行程序执行程序1:1:qA A机机的速度是的速度是B B机
39、机的的1010倍倍qA A机机的速度是的速度是C C机机的的2020倍倍qB B机机的速度是的速度是C C机机的的2 2倍倍执行程序执行程序2:2:qB B机机的速度是的速度是A A机机的的100100倍倍qC C机机的速度是的速度是A A机机的的5050倍倍qB B机机的速度是的速度是C C机机的的2 2倍倍4949/79/791.3 定量分析技术总执行时间:计算机执行所有测试程序的总时间qB B机机执行程序执行程序1 1和程序和程序2 2的速度是的速度是A A机机的的50.0550.05倍倍qC C机机执行程序执行程序1 1和程序和程序2 2的速度是的速度是A A机机的的24.0224.0
40、2倍倍qB B机机执行程序执行程序1 1和程序和程序2 2的速度是的速度是C C机机的的2 2倍倍平均执行时间:各测试程序执行时间的算术平均值其中其中,T Ti i:第:第i i个测试程序的执行时间个测试程序的执行时间 n n:测试程序组中程序的个数:测试程序组中程序的个数 5050/79/791.3 定量分析技术加权执行时间:各测试程序执行时间的加权平均值其中,其中,W Wi i:第:第i i个测试程序在测试程序组中所占的比重个测试程序在测试程序组中所占的比重 T Ti i:该程序的执行时间:该程序的执行时间5151/79/791.4 计算机系统结构的发展1.4.1 冯诺依曼结构 存储程序计
41、算机的结构存储程序计算机的结构 5252/79/791.4 计算机系统结构的发展1.存储程序原理的基本点:指令驱动程序预先存放在计算机存储器中,计算机一旦启动,就能按照程序指定的逻辑顺序执行这些程序,自动完成由程序所描述的处理工作。2.冯诺依曼结构的主要特点以运算器为中心。在存储器中,指令和数据同等对待。 指令和数据一样可以进行运算,即由指令组成的程指令和数据一样可以进行运算,即由指令组成的程序是可以修改的。序是可以修改的。存储器是按地址访问、按顺序线性编址的一维结 构,每个单元的位数是固定的。5353/79/791.4 计算机系统结构的发展指令的执行是顺序的。q一般是按照指令在存储器中存放的
42、顺序执行。一般是按照指令在存储器中存放的顺序执行。q程序的分支由转移指令实现。程序的分支由转移指令实现。q由指令计数器由指令计数器PCPC指明当前正在执行的指令在存储器指明当前正在执行的指令在存储器 中的地址。中的地址。指令由操作码和地址码组成。指令和数据均以二进制编码表示,采用二进制运算。5454/79/791.4 计算机系统结构的发展3.对系统结构进行的改进输入/输出方式的改进采用并行处理技术 q如何挖掘传统机器中的并行性?如何挖掘传统机器中的并行性?q在不同的级别采用并行技术。在不同的级别采用并行技术。 例如,微操作级、指令级、线程级、进程级、任务级等。例如,微操作级、指令级、线程级、进
43、程级、任务级等。5555/79/791.4 计算机系统结构的发展存储器组织结构的发展q相联存储器与相联处理机相联存储器与相联处理机q通用寄存器组通用寄存器组q高速缓冲存储器高速缓冲存储器CacheCache指令集的发展 两个发展方向:q复杂指令集计算机(复杂指令集计算机(CISCCISC)q精减指令集计算机(精减指令集计算机(RISCRISC)5656/79/791.4 计算机系统结构的发展软件的可移植性:一个软件可以不经修改或者只 需少量修改就可以由一台计算机移植到另一台计算机上正确地运行。差别只是执行时间的不同。 我们称这两台计算机是软件兼容的。实现可移植性的常用方法 采用系列机,模拟与仿
44、真,统一高级语言采用系列机,模拟与仿真,统一高级语言 。1.4.2 软件对系统结构的影响 5757/79/791.系列机 由同一厂家生产的具有相同的系统结构,但具有不同组成和实现的一系列不同型号的机器。q较好地解决软件开发要求系统结构相对稳定与器较好地解决软件开发要求系统结构相对稳定与器 件、硬件技术迅速发展的矛盾。件、硬件技术迅速发展的矛盾。软件兼容1.4 计算机系统结构的发展5858/79/791.4 计算机系统结构的发展q向上(下)兼容:向上(下)兼容:按某档机器编制的程序,不加修改按某档机器编制的程序,不加修改 就能运行于比它高(低)档的机器。就能运行于比它高(低)档的机器。q向前(后
45、)兼容:向前(后)兼容:按某个时期投入市场的某种型号机按某个时期投入市场的某种型号机 器编制的程序,不加修改地就能运行于在它之前器编制的程序,不加修改地就能运行于在它之前 (后)投入市场的机器。(后)投入市场的机器。 向后兼容是系列机的根本特征。兼容机:由不同公司厂家生产的具有相同系统结 构的计算机 。5959/79/791.4 计算机系统结构的发展2.模拟和仿真使软件能在具有不同系统结构的机器之间相互移植。q在一种系统结构上实现另一种系统结构。在一种系统结构上实现另一种系统结构。q从指令集的角度来看,就是要在一种机器上实现从指令集的角度来看,就是要在一种机器上实现 另一种机器的指令集。另一种
46、机器的指令集。模拟:用软件的方法在一台现有的机器(称为宿主机)上实现另一台机器(称为虚拟机)的指令集。q通常用解释的方法来实现。通常用解释的方法来实现。q运行速度较慢,性能较差。运行速度较慢,性能较差。6060/79/791.4 计算机系统结构的发展仿真:用一台现有机器(宿主机)上的微程序 去解释实现另一台机器(目标机)的指令集。q运行速度比模拟方法的快运行速度比模拟方法的快q仿真只能在系统结构差距不大的机器之间使用仿真只能在系统结构差距不大的机器之间使用3.统一高级语言 实现软件移植的一种理想的方法较难实现6161/79/791.4 计算机系统结构的发展1.摩尔定律 集成电路芯片上所集成的晶
47、体管数目每隔18个月就翻一番。2.计算机的分代主要以器件作为划分标准。它们在器件、系统结构和软件技术等方面都有各 自的特征。SMP:对称式共享存储器多处理机 MPP:大规模并行处理机 1.4.3 器件发展对系统结构的影响 分代 器件特征 结构特征 软件特征 典型实例 第一代第一代(1945194519541954年)年) 电子管和继电器电子管和继电器 存储程序计算机存储程序计算机程序控制程序控制I/O I/O 机器语言机器语言汇编语言汇编语言 普林斯顿普林斯顿ISAISA,ENIACENIAC,IBM 701 IBM 701 第二代第二代(1955195519641964年)年) 晶体管、磁芯
48、晶体管、磁芯印刷电路印刷电路 浮点数据表示浮点数据表示寻址技术寻址技术中断、中断、I/OI/O处理机处理机 高级语言和编译高级语言和编译批处理监控系统批处理监控系统 Univac LAPCUnivac LAPC,CDC 1604CDC 1604,IBM 7030 IBM 7030 第三代第三代(1965196519741974年)年) SSISSI和和MSIMSI多层印刷电路多层印刷电路微程序微程序 流水线、流水线、CacheCache先行处理先行处理系列机系列机 多道程序多道程序分时操作系统分时操作系统 IBM 360/370IBM 360/370,CDC 6600/7600CDC 6600
49、/7600,DEC PDP-8 DEC PDP-8 第四代第四代(1975197519901990年)年) LSILSI和和VLSIVLSI半导体存储器半导体存储器 向量处理向量处理分布式存储器分布式存储器 并行与分布处理并行与分布处理 Cray-1Cray-1,IBM IBM 30903090,DEC VAX DEC VAX 90009000,Convax-1Convax-1第五代第五代(19911991年年) 高性能微处理器高性能微处理器高密度电路高密度电路超标量、超流水超标量、超流水SMPSMP、MPMP、MPPMPP机群机群 大规模、可扩展大规模、可扩展并行与分布处理并行与分布处理 S
50、GI Cray T3ESGI Cray T3E,IBM SP2IBM SP2,DECDECAlphaServer AlphaServer 8400 8400 6363/79/791.4 计算机系统结构的发展1.不同的应用对计算机系统结构的设计提出了不同的要求2.应用需求是促使计算机系统结构发展的最根本的动力3.一些特殊领域:需要高性能的系统结构 高结构化的数值计算气象模型、流体动力学、有限元分析气象模型、流体动力学、有限元分析非结构化的数值计算蒙特卡洛模拟、稀疏矩阵蒙特卡洛模拟、稀疏矩阵实时多因素问题语音识别、图像处理、计算机视觉语音识别、图像处理、计算机视觉1.4.4 应用对系统结构的影响
51、6464/79/791.4 计算机系统结构的发展大存储容量和输入输出密集的问题数据库系统、事务处理系统数据库系统、事务处理系统图形学和设计问题计算机辅助设计计算机辅助设计人工智能面向知识的系统、推理系统等面向知识的系统、推理系统等4.计算机性能随时间下移 6565/79/791.4 计算机系统结构的发展1.系统结构的生命周期:从诞生、发展、成熟到消亡从硬件成熟到系统软件成熟大约需要57年的时间从系统软件成熟到应用软件成熟,大约也需要57年时间。再过57年的时间,这种系统结构就不会作为主流系统结构存在了。2.Intel的x86系列微处理器中32位系统结构的发展1.4.5 系统结构的生命周期 66
52、66/79/791.4 计算机系统结构的发展6767/79/791.并行性:计算机系统在同一时刻或者同一时间间隔内 进行多种运算或操作。只要在时间上相互重叠,就存在并行性。只要在时间上相互重叠,就存在并行性。同时性:两个或两个以上的事件在同一时刻发生。并发性:两个或两个以上的事件在同一时间间隔 内发生。 1.5 计算机系统结构中并行性的发展1.5.1 并行性的概念 6868/79/791.5 计算机系统结构中并行性的发展2.从处理数据的角度来看,并行性等级从低到高可分为:字串位串:每次只对一个字的一位进行处理。 最基本的串行处理方式,不存在并行性。最基本的串行处理方式,不存在并行性。字串位并:
53、同时对一个字的全部位进行处理,不 同字之间是串行的。 开始出现并行性。开始出现并行性。字并位串:同时对许多字的同一位(称为位片) 进行处理。 具有较高的并行性。具有较高的并行性。全并行:同时对许多字的全部位或部分位进行处理。 最高一级的并行。最高一级的并行。6969/79/791.5 计算机系统结构中并行性的发展3.从执行程序的角度来看,并行性等级从低到高可分为:指令内部并行:单条指令中各微操作之间的并行。指令级并行:并行执行两条或两条以上的指令。线程级并行:并行执行两个或两个以上的线程。 通常是以一个进程内派生的多个线程为调度单位。通常是以一个进程内派生的多个线程为调度单位。任务级或过程级并
54、行:并行执行两个或两个以上 的过程或任务(程序段) 以子程序或进程为调度单元。以子程序或进程为调度单元。作业或程序级并行:并行执行两个或两个以上的 作业或程序。 7070/79/791.5 计算机系统结构中并行性的发展三种途径:1.时间重叠 引入时间因素,让多个处理过程在时间上相互错开,轮流重叠地使用同一套硬件设备的各个部分,以加快硬件周转而赢得速度。2.资源重复 引入空间因素,以数量取胜。通过重复设置硬件资源,大幅度地提高计算机系统的性能。1.5.2 提高并行性的技术途径 7171/79/791.5 计算机系统结构中并行性的发展3.资源共享 这是一种软件方法,它使多个任务按一定时间顺序轮流使
55、用同一套硬件设备。 7272/79/791.5 计算机系统结构中并行性的发展1.在发展高性能单处理机过程中,起主导作用的是时间 重叠原理。实现时间重叠的基础:部件功能专用化q把一件工作按功能分割为若干相互联系的部分;把一件工作按功能分割为若干相互联系的部分;q把每一部分指定给专门的部件完成;把每一部分指定给专门的部件完成;q按时间重叠原理把各部分的执行过程在时间上按时间重叠原理把各部分的执行过程在时间上 重叠起来,使所有部件依次分工完成一组同样的工作。重叠起来,使所有部件依次分工完成一组同样的工作。1.5.3 单机系统中并行性的发展 7373/79/791.5 计算机系统结构中并行性的发展 例
56、如: 对于解释指令的5个过程,就分别需要5个专用的部件:取指令部件(IF)、指令译码部件(ID)、指令执行部件(EX)、访问存储器部件(M)和写结果部件(WB)。7474/79/791.5 计算机系统结构中并行性的发展2.在单处理机中,资源重复原理的运用也已经十分普遍。多体存储器多操作部件q通用部件被分解成若干个专用部件,如加法部件、乘通用部件被分解成若干个专用部件,如加法部件、乘 法部件、除法部件、逻辑运算部件等,而且同一种部法部件、除法部件、逻辑运算部件等,而且同一种部 件也可以重复设置多个。件也可以重复设置多个。q只要指令所需的操作部件空闲,就可以开始执行这条只要指令所需的操作部件空闲,
57、就可以开始执行这条 指令(如果操作数已准备好的话)。指令(如果操作数已准备好的话)。q这实现了这实现了指令级并行指令级并行。 7575/79/791.5 计算机系统结构中并行性的发展阵列处理机(并行处理机) 更进一步,设置许多相同的处理单元,让它们在同更进一步,设置许多相同的处理单元,让它们在同一个控制器的指挥下,按照同一条指令的要求,对向量一个控制器的指挥下,按照同一条指令的要求,对向量或数组的各元素同时进行同一操作,就形成了阵列处理或数组的各元素同时进行同一操作,就形成了阵列处理机机 。3.在单处理机中,资源共享的概念实质上是用单处理机 模拟多处理机的功能,形成所谓虚拟机的概念。q分时系统
58、分时系统7676/79/791.5 计算机系统结构中并行性的发展1.多机系统遵循时间重叠、资源重复、资源共享原理,发展为3种不同的多处理机: 异构型多处理机、同构型多处理机、分布式系统2.耦合度 反映多机系统中各机器之间物理连接的紧密程度和交互作用能力的强弱。紧密耦合系统(直接耦合系统):在这种系统 中,计算机之间的物理连接的频带较高,一般是1.5.4 多机系统中并行性的发展 7777/79/791.5 计算机系统结构中并行性的发展 通过总线或高速开关互连,可以共享主存。松散耦合系统(间接耦合系统):一般是通过通 道或通信线路实现计算机之间的互连,可以共享 外存设备(磁盘、磁带等)。机器之间的
59、相互作 用是在文件或数据集一级上进行的。表现为两种形式:表现为两种形式: q多台计算机和共享的外存设备连接,不同机器之间多台计算机和共享的外存设备连接,不同机器之间实现功能上的分工(功能专用化),机器处理的结实现功能上的分工(功能专用化),机器处理的结果以文件或数据集的形式送到共享外存设备,供其果以文件或数据集的形式送到共享外存设备,供其他机器继续处理。他机器继续处理。q计算机网络,通过通信线路连接,实现更大范围的计算机网络,通过通信线路连接,实现更大范围的资源共享。资源共享。 7878/79/791.5 计算机系统结构中并行性的发展3.功能专用化(实现时间重叠 )专用外围处理机例如,输入例如
60、,输入/输出功能的分离。输出功能的分离。 专用处理机如数组运算、高级语言翻译、数据库管理等,分离出来。如数组运算、高级语言翻译、数据库管理等,分离出来。异构型多处理机系统 由多个不同类型、至少担负不同功能的处理机组成,由多个不同类型、至少担负不同功能的处理机组成,它们按照作业要求的顺序,利用时间重叠原理,依次对它们按照作业要求的顺序,利用时间重叠原理,依次对它们的多个任务进行加工,各自完成规定的功能动作。它们的多个任务进行加工,各自完成规定的功能动作。 7979/79/791.5 计算机系统结构中并行性的发展4.机间互连容错系统可重构系统 对计算机之间互连网络的性能提出了更高的要求。对计算机之
61、间互连网络的性能提出了更高的要求。高带宽、低延迟、低开销的机间互连网络是高效实现程高带宽、低延迟、低开销的机间互连网络是高效实现程序或任务一级并行处理的前提条件。序或任务一级并行处理的前提条件。同构型多处理机系统 由多个同类型或至少担负同等功能的处理机组成,由多个同类型或至少担负同等功能的处理机组成,它们同时处理同一作业中能并行执行的多个任务。它们同时处理同一作业中能并行执行的多个任务。8080/79/79第2章 计算机指令集结构张晨曦 刘依8181/79/792.1指令集结构的分类2.2寻址方式2.3指令集结构的功能设计2.4操作数的类型和大小2.5指令格式的设计2.6MIPS指令集结构82
62、82/79/791.区别不同指令集结构的主要因素 CPU中用来存储操作数的存储单元的类型2.CPU中用来存储操作数的存储单元的主要类型堆栈累加器通用寄存器组3.将指令集结构分为三种类型2.1 指令集结构的分类8383/79/792.1 指令集结构的分类堆栈结构累加器结构通用寄存器结构根据操作数的来源不同,又可进一步分为根据操作数的来源不同,又可进一步分为:q寄存器寄存器- -存储器结构存储器结构(RMRM结构)结构) ( (操作数可以来自存储器操作数可以来自存储器 ) )q寄存器寄存器- -寄存器结构寄存器结构(RRRR结构)结构) ( (所有操作数都是来自通用寄存器组所有操作数都是来自通用寄
63、存器组) ) 也称为也称为load-storeload-store结构,这个名称强调:只有结构,这个名称强调:只有loadload指令和指令和storestore指令能够访问存储器。指令能够访问存储器。 8484/79/792.1 指令集结构的分类4.对于不同类型的指令集结构,操作数的位置、个数以及操作数的给出方式(显式或隐式)也会不同。显式给出:用指令字中的操作数字段给出隐式给出:使用事先约定好的存储单元 8585/79/792.1 指令集结构的分类 例: 表达式表达式C=A+BC=A+B在在4 4种类型指令集结构上的代码。种类型指令集结构上的代码。 假设:假设:A A、B B、C C均保存
64、在存储器单元中,并且不能均保存在存储器单元中,并且不能 破坏破坏A A和和B B的值。的值。堆 栈 累加器寄存器(RM型) 寄存器(RR型) push Aload Aload R1,Aload R1,Apush Badd Badd R1,Bload R2,Baddstore Cstore R1,Cadd R3,R1,R2pop Cstore R3,C8686/79/792.1 指令集结构的分类6.通用寄存器结构现代指令集结构的主流在灵活性和提高性能方面有明显的优势q跟其他的跟其他的CPUCPU内部存储单元一样,寄存器的访问内部存储单元一样,寄存器的访问 速度比存储器快。速度比存储器快。q对编译
65、器而言,能更加容易、有效地分配和使用对编译器而言,能更加容易、有效地分配和使用 寄存器。寄存器。q寄存器可以用来存放变量。寄存器可以用来存放变量。 (1 1)减少对存储器的访问,加快程序的执行速度;减少对存储器的访问,加快程序的执行速度; (因为寄存器比存储器快)(因为寄存器比存储器快) 8787/79/792.1 指令集结构的分类(2 2)用更少的地址位(相对于存储器地址来说)来对寄用更少的地址位(相对于存储器地址来说)来对寄 存器进行寻址,从而有效地减少程序的目标代码的存器进行寻址,从而有效地减少程序的目标代码的 大小。大小。7.根据ALU指令的操作数的两个特征对通用寄存器型指 令集结构进
66、一步细分ALU指令的操作数个数q3 3个操作数的指令个操作数的指令 两个源操作数、一个目的操作数两个源操作数、一个目的操作数q2 2个操作数的指令个操作数的指令其中一个操作数既作为源操作数,又作为目的操作数。其中一个操作数既作为源操作数,又作为目的操作数。8888/79/792.1 指令集结构的分类ALU指令中存储器操作数的个数可以是可以是0 0中的某一个,为中的某一个,为0 0表示没有存储器操作数。表示没有存储器操作数。8989/79/79ALU指令中存储器操作数的个数 ALU指令中操作数的最多个数 结构类型 机器实例 03RR MIPS,SPARC,Alpha,PowerPC,ARM12R
67、M IBM 360/370,Intel 80x86,Motorola 680003RM IBM 360/370 22MM VAX 33MM VAX 8.ALU指令中操作数个数和存储器操作数个数的典型组合9090/79/792.1 指令集结构的分类9.通用寄存器型指令集结构进一步细分为3种类型寄存器-寄存器型(RR型)寄存器-存储器型(RM型)存储器-存储器型(MM型)10. 3种通用寄存器型指令集结构的优缺点 表中(m,n)表示指令的n个操作数中有m个存 储器操作数。9191/79/79指令集结构类型指令集结构类型 优优 点点 缺缺 点点 寄存器寄存器型寄存器寄存器型 (0 0,3 3) 指令
68、字长固定,指令结构指令字长固定,指令结构简洁,是一种简单的代码简洁,是一种简单的代码生成模型,各种指令的执生成模型,各种指令的执行时钟周期数相近行时钟周期数相近 与指令中含存储器操作数的指令集结与指令中含存储器操作数的指令集结构相比,指令条数多,目标代码不够构相比,指令条数多,目标代码不够紧凑,因而程序占用的空间比较大紧凑,因而程序占用的空间比较大 寄存器存储器型寄存器存储器型 (1 1,2 2) 可以在可以在ALUALU指令中直接对存指令中直接对存储器操作数进行引用,而储器操作数进行引用,而不必先用不必先用loadload指令进行加指令进行加载。容易对指令进行编码,载。容易对指令进行编码,目
69、标代码比较紧凑目标代码比较紧凑 指令中的两个操作数不对称。在一条指令中的两个操作数不对称。在一条指令中同时对寄存器操作数和存储器指令中同时对寄存器操作数和存储器操作数进行编码,有可能限制指令所操作数进行编码,有可能限制指令所能够表示的寄存器个数。指令的执行能够表示的寄存器个数。指令的执行时钟周期数因操作数的来源(寄存器时钟周期数因操作数的来源(寄存器或存储器)不同而差别比较大或存储器)不同而差别比较大 存储器存储器型存储器存储器型 (2 2,2 2) 或(或(3 3,3 3) 目标代码最紧凑,不需要目标代码最紧凑,不需要设置寄存器来保存变量设置寄存器来保存变量 指令字长变化很大,特别是指令字长
70、变化很大,特别是3 3操作数操作数指令。而且每条指令完成的工作也差指令。而且每条指令完成的工作也差别很大。对存储器的频繁访问会使存别很大。对存储器的频繁访问会使存储器成为瓶颈。这种类型的指令集结储器成为瓶颈。这种类型的指令集结构现在已不用了构现在已不用了9292/79/791.一种指令集结构如何确定所要访问的数据的地址?2.当前的指令集结构中所采用的一些操作数寻址方式:赋值操作Mem:存储器Regs:寄存器组方括号:表示内容qMem Mem :存储器的内容:存储器的内容qRegs Regs :寄存器的内容:寄存器的内容qMemRegsR1MemRegsR1:以寄存器:以寄存器R1R1中的内容作
71、为地址的中的内容作为地址的 存储器单元中的内容存储器单元中的内容2.2 寻址方式9393/79/792.2 寻址方式 采用多种寻址方式可以显著地减少程序的指令条 数,但可能增加计算机的实现复杂度以及指令的CPI。9494/79/792.2 寻址方式程序所使用的偏移量大小分布十分广泛 主要是因为在存储器中所保存的数据并不是十分主要是因为在存储器中所保存的数据并不是十分集中,需要使用不同的偏移量才能对其进行访问。集中,需要使用不同的偏移量才能对其进行访问。 较小的偏移量和较大的偏移量均占有相当大 的比例 9595/79/792.2 寻址方式5.立即数寻址方式立即数寻址方式的使用频度 指令类型 使用
72、频度 整型平均 浮点平均 load指令 23% 22% ALU指令 25% 19% 所有指令 21% 16% 大约1/4的load指令和ALU指令采用了立即数寻址。 9696/79/791.指令集结构的功能设计确定软、硬件功能分配,即确定哪些基本功能应该由硬件实现,哪些功能由软件实现比较合适。2.在确定哪些基本功能用硬件来实现时,主要考虑3个因素:速度、成本、灵活性硬件实现的特点 速度快、成本高、灵活性差速度快、成本高、灵活性差软件实现的特点 速度慢、价格便宜、灵活性好速度慢、价格便宜、灵活性好2.3 指令集结构的功能设计9797/79/792.3 指令集结构的功能设计3.对指令集的基本要求
73、完整性、规整性、高效率、兼容性 完整性:在一个有限可用的存储空间内,对于任何可解的问题,编制计算程序时,指令集所提供的指令足够用。q要求指令集功能齐全、使用方便要求指令集功能齐全、使用方便q下表为许多指令集结构都包含的一些指令类型下表为许多指令集结构都包含的一些指令类型 n前前4 4类类属于通用计算机系统的基本指令属于通用计算机系统的基本指令n对于最后对于最后4 4种类型的操作,不同指令集结构的支种类型的操作,不同指令集结构的支 持大不相同持大不相同 。 9898/79/792.3 指令集结构的功能设计操作类型 实 例 算术和逻辑运算 算术运算和逻辑操作:加,减,乘,除,与,或等 数据传输 l
74、oad,store控制 分支,跳转,过程调用和返回,自陷等 系统 操作系统调用,虚拟存储器管理等 浮点 浮点操作:加,减,乘,除,比较等 十进制 十进制加,十进制乘,十进制到字符的转换等 字符串 字符串移动,字符串比较,字符串搜索等 图形 像素操作,压缩/解压操作等 9999/79/792.3 指令集结构的功能设计规整性:主要包括对称性和均匀性。q对称性:对称性:所有与指令集有关的存储单元的使用、所有与指令集有关的存储单元的使用、 操作码的设置等都是对称的。操作码的设置等都是对称的。例如:例如:在存储单元的使用上,所有通用寄存器都要同等对在存储单元的使用上,所有通用寄存器都要同等对 待。在操作
75、码的设置上,如果设置了待。在操作码的设置上,如果设置了A-BA-B的指的指 令,就应该也设置令,就应该也设置B-AB-A的指令。的指令。 q均匀性:均匀性:指对于各种不同的操作数类型、字长、操作指对于各种不同的操作数类型、字长、操作 种类和数据存储单元,指令的设置都要同等对待。种类和数据存储单元,指令的设置都要同等对待。例如:例如:如果某机器有如果某机器有5 5种数据表示,种数据表示,4 4种字长,两种存储单种字长,两种存储单 元,则要设置元,则要设置5 54 42=402=40种同一操作的指令。种同一操作的指令。 100100/79/792.3 指令集结构的功能设计高效率:指指令的执行速度快
76、、使用频度高。4.在设计指令集结构时,有两种截然不同的设计策略。 (产生了两类不同的计算机系统 )CISC(复杂指令集计算机)q增强指令功能,把越来越多的功能交由硬件来实增强指令功能,把越来越多的功能交由硬件来实 现,并且指令的数量也是越来越多。现,并且指令的数量也是越来越多。RISC(精简指令集计算机)q尽可能地把指令集简化,不仅指令的条数少,而且尽可能地把指令集简化,不仅指令的条数少,而且 指令的功能也比较简单。指令的功能也比较简单。 101101/79/792.3 指令集结构的功能设计1.CISC结构追求的目标 强化指令功能,减少程序的指令条数,以达到提高性能的目的。2.增强指令功能主要
77、是从以下几个方面着手:面向目标程序增强指令功能 q增强运算型指令的功能增强运算型指令的功能q增强数据传送指令的功能增强数据传送指令的功能q增强程序控制指令的功能增强程序控制指令的功能 丰富的程序控制指令为编程提供了多种选择。丰富的程序控制指令为编程提供了多种选择。 2.3.1 CISC指令集结构的功能设计102102/79/792.3 指令集结构的功能设计例如:循环在程序中占有相当大的 比例,所以在指令上提供专 门的支持。循环控制部分通常用3条指令完成:q一条加法指令一条加法指令q一条比较指令一条比较指令q一条分支指令一条分支指令设置循环控制指令,用一条指令完成上述3条指令的功能。 一般循环程
78、序的结构一般循环程序的结构103103/79/792.3 指令集结构的功能设计面向高级语言的优化实现来改进指令集 (缩小高级语言与机器语言的语义差距) 高级语言与一般的机器语言的语义差距非常大,为高级语言程序的编译带来了一些问题。(1 1)编译器本身比较复杂。)编译器本身比较复杂。(2 2)编译生成)编译生成的目标代码比较难以达到很好的优化。的目标代码比较难以达到很好的优化。 104104/79/792.3 指令集结构的功能设计105105/79/792.3 指令集结构的功能设计q增强对高级语言和编译器的支持增强对高级语言和编译器的支持 p对源程序中各种高级语言语句的使用频度进行对源程序中各种
79、高级语言语句的使用频度进行 统计与分析,对使用频度高、执行时间长的语句,统计与分析,对使用频度高、执行时间长的语句,增强有关指令的功能,加快这些指令的执行速度,增强有关指令的功能,加快这些指令的执行速度,或者增加专门的指令,可以达到减少目标程序的或者增加专门的指令,可以达到减少目标程序的执行时间和减少目标程序长度的目的。执行时间和减少目标程序长度的目的。 p增强系统结构的规整性,减少系统结构中的各种增强系统结构的规整性,减少系统结构中的各种例外情况。例外情况。 (面向高级语言的计算机(面向高级语言的计算机 )106106/79/792.3 指令集结构的功能设计q高级语言计算机高级语言计算机 间
80、接执行高级语言机器间接执行高级语言机器 高级语言成为机器的汇编语言,这时高级语言和机高级语言成为机器的汇编语言,这时高级语言和机器语言是一一对应的。用汇编的方法把高级语言源程序器语言是一一对应的。用汇编的方法把高级语言源程序翻译成机器语言程序。翻译成机器语言程序。 直接执行高级语言的机器直接执行高级语言的机器 直接把高级语言作为机器语言,直接由固件直接把高级语言作为机器语言,直接由固件/硬件对硬件对高级语言源程序的语句逐条进行解释执行。这时既不用高级语言源程序的语句逐条进行解释执行。这时既不用编译,也不用汇编。编译,也不用汇编。107107/79/792.3 指令集结构的功能设计面向操作系统的
81、优化实现改进指令集 q操作系统和计算机系统结构是紧密联系的,操作系操作系统和计算机系统结构是紧密联系的,操作系 统的实现在很大程度上取决于系统结构的支持。统的实现在很大程度上取决于系统结构的支持。q指令集对操作系统的支持主要有:指令集对操作系统的支持主要有:p处理机工作状态和访问方式的切换。处理机工作状态和访问方式的切换。p进程的管理和切换。进程的管理和切换。p存储管理和信息保护。存储管理和信息保护。p进程的同步与互斥,信号灯的管理等。进程的同步与互斥,信号灯的管理等。 支持操作系统的有些指令属于特权指令,一般用户支持操作系统的有些指令属于特权指令,一般用户程序是不能使用的。程序是不能使用的。
82、 108108/79/792.3 指令集结构的功能设计1.CISC指令集结构存在的问题 (1979年开始,Patterson等人的研究)各种指令的使用频度相差悬殊q据统计:只有据统计:只有2020的指令使用频度比较高,占运的指令使用频度比较高,占运行时间的行时间的8080,而其余,而其余8080的指令只在的指令只在2020的运行时的运行时间内才会用到。间内才会用到。q使用频度高的指令也是最简单的指令。使用频度高的指令也是最简单的指令。2.3.2 RISC指令集结构的功能设计109109/79/79执行频度排序 80x86指令 指令执行频度(占执行指令总数的百分比) 1load 22% 2条件分
83、支 20% 3比较 16% 4store 12% 5加 8% 6与 6% 7减 5% 8寄存器-寄存器间数据移动 4% 9调用子程序 1% 10返回 1% 合 计 95% Intel 80x86最常用的10条指令110110/79/792.3 指令集结构的功能设计指令集庞大,指令条数很多,许多指令的功能又 很复杂,使得控制器硬件非常复杂。 导致的问题:q占用了大量的芯片面积(如占用占用了大量的芯片面积(如占用CPUCPU芯片总面积的芯片总面积的一半以上),给一半以上),给VLSIVLSI设计造成很大的困难;设计造成很大的困难;q增加了研制时间和成本,容易造成设计错误。增加了研制时间和成本,容易
84、造成设计错误。许多指令由于操作繁杂,其CPI值比较大,执行 速度慢。采用这些复杂指令有可能使整个程序的 执行时间反而增加。由于指令功能复杂,规整性不好,不利于采用流 水技术来提高性能。 111111/79/792.3 指令集结构的功能设计2.设计RISC机器遵循的原则 指令条数少而简单。只选取使用频度很高的指令,在此基础上补充一些最有用的指令。采用简单而又统一的指令格式,并减少寻址方式;指令字长都为32位或64位。指令的执行在单个机器周期内完成。 ( (采用流水线机制采用流水线机制) )只有load和store指令才能访问存储器,其他指令的操作都是在寄存器之间进行。 (即采用(即采用load-
85、storeload-store结构)结构)大多数指令都采用硬连逻辑来实现。112112/79/792.3 指令集结构的功能设计强调优化编译器的作用,为高级语言程序生成优化的代码。充分利用流水技术来提高性能。3.早期的RISC微处理器1981年 ,Berkeley分校的Patterson 等人的32位微处理器RISC I :q3131条条指令,指令字长都是指令,指令字长都是3232位位,7878个个通用寄存器,时通用寄存器,时钟频率为钟频率为8 MHz8 MHz;q控制部分所占的芯片面积只有约控制部分所占的芯片面积只有约6%6%。商品化微处理器。商品化微处理器MC68000MC68000和和Z8
86、000Z8000分别为分别为50%50%和和53%53%;q性能比性能比MC68000MC68000和和Z8000Z8000快快3 34 4倍。倍。113113/79/792.3 指令集结构的功能设计1983年的RISC:q指令条数为指令条数为3939,通用寄存器个数为,通用寄存器个数为138138,时钟频率为,时钟频率为12 MHz12 MHz。q后来发展成了后来发展成了SunSun公司的公司的SPARCSPARC系列微处理器。系列微处理器。1981年,Stanford大学Hennessy等人的MIPS后来发展成了后来发展成了MIPSRxxx系列微处理器。系列微处理器。IBM的801共同特点
87、:q采用采用load-storeload-store结构结构q指令字长为指令字长为3232位位q采用高效的流水技术采用高效的流水技术114114/79/792.3 指令集结构的功能设计1.控制指令是用来改变控制流的。 跳转:当指令是无条件改变控制流时,称之为跳转指令。分支:当控制指令是有条件改变控制流时,则称之为分支指令。 2.能够改变控制流的指令q分支分支q跳转跳转q过程调用过程调用q过程返回过程返回2.3.3 控制指令115115/79/792.3 指令集结构的功能设计3.控制指令的使用频度 (load-storeload-store型指令集结构的机器,基准程序为型指令集结构的机器,基准程
88、序为SPEC CPU2000SPEC CPU2000)指令类型 使用频度 整型平均 浮点平均 调用/返回 19% 8% 跳转 6% 10% 分支 75% 82% 改变控制流的大部分指令是分支指令(条件转移)。 116116/79/794.常用的3种表示分支条件的方法及其优缺点 名 称 检测分支条件的方法 优 点 缺 点 条件码(CC) 检测由ALU操作设置的一些特殊的位(即CC) 可以自由设置分支条件 条件码是增设的状态。而且它限制了指令的执行顺序,因为要保证条件码能顺利地传送给分支指令 条件寄存器 比较指令把比较结果放入任何一个寄存器,检测时就检测该寄存器 简单 占用了一个寄存器 比较与分支
89、 比较操作是分支指令的一部分,通常这种比较是受到一定限制的 用一条指令(而不是两条)就能实现分支 当采用流水方式时,该指令的操作可能太多,在一拍内做不完 117117/79/792.3 指令集结构的功能设计5.转移目标地址的表示最常用的方法 在指令中提供一个偏移量,由该偏移量和程序计数在指令中提供一个偏移量,由该偏移量和程序计数器(器(PCPC)的值相加而得出目标地址。)的值相加而得出目标地址。 (PCPC相对寻址)相对寻址)优点q有效地减少表示该目标地址所需要的位数。有效地减少表示该目标地址所需要的位数。q位置无关(代码可被装载到主存的任意位置执行)。位置无关(代码可被装载到主存的任意位置执
90、行)。关键:确定偏移量字段的长度q模拟结果表明:采用模拟结果表明:采用4 48 8位位的偏移量字段(以指令字的偏移量字段(以指令字为单位)就能表示大多数控制指令的转移目标地址了。为单位)就能表示大多数控制指令的转移目标地址了。118118/79/792.3 指令集结构的功能设计6.过程调用和返回除了要改变控制流之外,可能还要保存机器状态,至少也得保存返回地址(放在专用的链接寄存器或堆栈中)。过去有些指令集结构提供了专门的保存机制来保存许多寄存器的内容。现在较新的指令集结构则要求由编译器生成load和store指令来保存或恢复寄存器的内容。 119119/79/79数据表示:计算机硬件能够直接识
91、别、指令集可以直接调用的数据类型。q所有数据类型中最常用、相对比较简单、用硬件实现比较所有数据类型中最常用、相对比较简单、用硬件实现比较容易的几种。容易的几种。 数据结构:由软件进行处理和实现的各种数据类型。研究:研究:这些数据类型的逻辑结构与物理结构之间的关这些数据类型的逻辑结构与物理结构之间的关 系,并给出相应的算法。系,并给出相应的算法。 系统结构设计者要解决的问题:如何确定数据表示?(软硬件取舍折中的问题)(软硬件取舍折中的问题)2.4 操作数的类型和大小120120/79/792.4 操作数的类型和大小1.表示操作数类型的方法有两种由指令中的操作码指定操作数的类型。带标志符的数据表示
92、。给数据加上标识,由数据本身给出操作数类型。q优点:优点:简化指令集,可由硬件自动实现一致性检查和简化指令集,可由硬件自动实现一致性检查和类型转换,缩小了机器语言与高级语言的语义差距,类型转换,缩小了机器语言与高级语言的语义差距,简化编译器等。简化编译器等。q缺点:缺点:由于需要在执行过程中动态检测标志符,动态由于需要在执行过程中动态检测标志符,动态开销比较大,所以采用这种方案的机器很少见。开销比较大,所以采用这种方案的机器很少见。2.操作数的大小:操作数的位数或字节数。主要的大小:主要的大小:字节(字节(8 8位)、半字(位)、半字(1616位)位) 字(字(3232位)、双字(位)、双字(
93、6464位)位)121121/79/792.4 操作数的类型和大小字符:用ASCII码表示,为一个字节大小。整数:用二进制补码表示,其大小可以是字节、半字或单字。浮点操作数:单精度浮点数(1个字)、双精度浮点数(双字)。 一般都采用一般都采用IEEE 754IEEE 754浮点浮点标准标准十进制操作数类型q压缩十进制或二进制编码十进制(压缩十进制或二进制编码十进制(BCDBCD码):用码):用4 4位二位二进制编码表示数字进制编码表示数字0 09 9,并将两个十进制数字合并到,并将两个十进制数字合并到一个字节中存储。一个字节中存储。q非压缩十进制:将十进制数直接用字符串来表示。非压缩十进制:将
94、十进制数直接用字符串来表示。122122/79/793.访问不同操作数大小的频度(SPECSPEC基准程序基准程序 )操作数大小 访问频度 整型平均 浮点平均 字节 7% 0% 半字 19% 0% 单字 74% 31% 双字 0% 69% 基准程序对单字和双字的数据访问具有较高的频度。 一台一台3232位的机器应该支持位的机器应该支持8 8、1616、3232位整型操作数以及位整型操作数以及3232位和位和6464位的位的IEEE 754IEEE 754标准的浮点操作数。标准的浮点操作数。123123/79/791.指令由两部分组成:操作码、地址码2.指令格式的设计 确定指令字的编码方式,包括
95、操作码字段和地址码字段的编码和表示方式。3.操作码的编码比较简单和直观Huffman编码法 减少操作码的平均位数,但所获得的编码是变长减少操作码的平均位数,但所获得的编码是变长的,不规整,不利于硬件处理。的,不规整,不利于硬件处理。 固定长度的操作码 保证操作码的译码速度。保证操作码的译码速度。 2.5 指令格式的设计124124/79/792.5 指令格式的设计4.两种表示寻址方式的方法将寻址方式编码于操作码中,由操作码描述相应操作的寻址方式。适合:适合:处理机采用处理机采用l load-storeoad-store结构,寻址方式只有很少几种。结构,寻址方式只有很少几种。设置专门的地址描述符
96、,由地址描述符表示相应操作数的寻址方式。 适合:适合:处理机具有多种寻址方式,且指令有多个操作数。处理机具有多种寻址方式,且指令有多个操作数。125125/79/792.5 指令格式的设计5.考虑因素机器中寄存器的个数和寻址方式的数目对指令平均字长的影响以及它们对目标代码大小的影响。所设计的指令格式便于硬件处理,特别是流水实现。指令字长应该是字节(8位)的整数倍,而不能是随意的位数。6.指令集的3种编码格式 变长编码格式、定长编码格式、混合型编码格式变长编码格式、定长编码格式、混合型编码格式126126/79/792.5 指令格式的设计变长编码格式q当指令集的寻址方式和操作种类很多时,这种编码
97、当指令集的寻址方式和操作种类很多时,这种编码格式是最好的。格式是最好的。q用最少的二进制位来表示目标代码。用最少的二进制位来表示目标代码。q可能会使各条指令的字长和执行时间相差很大。可能会使各条指令的字长和执行时间相差很大。127127/79/792.5 指令格式的设计定长编码格式q将操作类型和寻址方式一起编码到操作码中。将操作类型和寻址方式一起编码到操作码中。q当寻址方式和操作类型非常少时,这种编码格式非当寻址方式和操作类型非常少时,这种编码格式非常好。常好。q可以有效地降低译码的复杂度,提高译码的速度。可以有效地降低译码的复杂度,提高译码的速度。q大部分大部分RISCRISC的指令集均采用
98、这种编码格式。的指令集均采用这种编码格式。128128/79/792.5 指令格式的设计混合型编码格式q提供若干种固定的指令字长。提供若干种固定的指令字长。q以期达到既能够减少目标代码长度又能降低译码复以期达到既能够减少目标代码长度又能降低译码复杂度的目标。杂度的目标。129129/79/791.32个64位通用寄存器(GPRs)R0,R1,R31也被称为整数寄存器R0的值永远是02.32个64位浮点数寄存器(FPRs)F0,F1,F312.6 MIPS指令集结构介绍MIPS64的一个子集,简称为MIPS。2.6.1 MIPS的寄存器130130/79/792.6 MIPS指令集结构用来存放3
99、2个单精度浮点数(32位),也可以用来存放32个双精度浮点数(64位)。存储单精度浮点数(32位)时,只用到FPR的一半,其另一半没用。3.一些特殊寄存器它们可以与通用寄存器交换数据。例如,浮点状态寄存器用来保存有关浮点操作结果的信息。131131/79/792.6 MIPS指令集结构1.MIPS的数据表示整数字节(字节(8 8位)位) 半字(半字(1616位)位)字(字(3232位)位) 双字(双字(6464位)位)浮点数单精度浮点数(单精度浮点数(3232位)位) 双精度浮点数(双精度浮点数(6464位)位)2.字节、半字或者字在装入64位寄存器时,用零扩展或者用符号位扩展来填充该寄存器的
100、剩余部分。装入以后,对它们将按照64位整数的方式进行运算。2.6.2 MIPS的数据表示132132/79/792.6 MIPS指令集结构1.立即数寻址与偏移量寻址立即数字段和偏移量字段都是立即数字段和偏移量字段都是1616位的。位的。2.寄存器间接寻址是通过把0作为偏移量来实现的3.16位绝对寻址是通过把R0(其值永远为0)作为基址 寄存器来完成的4.MIPS的存储器是按字节寻址的,地址为64位5.所有存储器访问都必须是边界对齐的2.6.3 MIPS的数据寻址方式133133/79/792.6 MIPS指令集结构1.寻址方式编码到操作码中2.所有的指令都是32位的3.操作码占6位4.3种指令
101、格式2.6.4 MIPS的指令格式134134/79/792.6 MIPS指令集结构I类指令q包括所有的包括所有的loadload和和storestore指令、立即数指令、分支指令、立即数指令、分支指令、寄存器跳转指令、寄存器链接跳转指令。指令、寄存器跳转指令、寄存器链接跳转指令。q立即数字段为立即数字段为1616位,用于提供立即数或偏移量。位,用于提供立即数或偏移量。135135/79/792.6 MIPS指令集结构qloadload指令指令 访存有效地址:访存有效地址:RegsrsRegsrsimmediateimmediate 从存储器取来的数据放入寄存器从存储器取来的数据放入寄存器rt
102、rtqstorestore指令指令 访存有效地址:访存有效地址:RegsrsRegsrsimmediateimmediate 要存入存储器的数据放在寄存器要存入存储器的数据放在寄存器rtrt中中q立即数指令立即数指令 Regsrt Regsrs op immediateRegsrt Regsrs op immediateq分支指令分支指令 转移目标地址:转移目标地址:RegsrsRegsrsimmediateimmediate 要判断的数据放在寄存器要判断的数据放在寄存器rtrt中中q寄存器跳转、寄存器跳转并链接寄存器跳转、寄存器跳转并链接 转移目标地址为转移目标地址为RegsrsRegsrs
103、136136/79/792.6 MIPS指令集结构R类指令q包括包括ALUALU指令、专用寄存器读指令、专用寄存器读/ /写指令、写指令、movemove指令等。指令等。qALUALU指令指令 Regsrd Regsrs funct RegsrtRegsrd Regsrs funct Regsrt func func为具体的运算操作编码为具体的运算操作编码137137/79/792.6 MIPS指令集结构J类指令q包括跳转指令、跳转并链接指令、自陷指令、异常返回包括跳转指令、跳转并链接指令、自陷指令、异常返回指令。指令。q在这类指令中,指令字的低在这类指令中,指令字的低2626位是偏移量,它与
104、位是偏移量,它与PCPC值相值相加形成跳转的地址。加形成跳转的地址。138138/79/792.6 MIPS指令集结构1.MIPS指令可以分为四大类qloadload和和storestoreqALUALU操作操作q分支与跳转分支与跳转q浮点操作浮点操作2.符号的意义 xny:从y传送n位到xx,yz:把z传送到x和y 2.6.5 MIPS的操作139139/79/792.6 MIPS指令集结构下标:表示字段中具体的位;q对于指令和数据,按从最高位到最低位(即从左到右)对于指令和数据,按从最高位到最低位(即从左到右)的顺序依次进行编号,最高位为第的顺序依次进行编号,最高位为第0 0位,次高位为第
105、位,次高位为第1 1位,依此类推。位,依此类推。q下标可以是一个数字,也可以是一个范围。下标可以是一个数字,也可以是一个范围。例如:例如:RegsR4RegsR40 0:寄存器:寄存器R4R4的符号位的符号位 RegsR4RegsR456.6356.63:R4R4的最低字节的最低字节Mem:表示主存;q按字节寻址,可以传输任意个字节。按字节寻址,可以传输任意个字节。上标:用于表示对字段进行复制的次数。例如:例如:0 0 3232:一个:一个3232位长的全位长的全0 0字段字段140140/79/792.6 MIPS指令集结构符号#:用于两个字段的拼接,并且可以出现在数据传送的任何一边。举例举
106、例:R8R8、R10R10:6464位的寄存器,则位的寄存器,则RegsR8RegsR832.6332.63 3232 (Mem RegsR6Mem RegsR60 0)2424 # Mem RegsR6 # Mem RegsR6表示的意义是:表示的意义是: 以以R6R6的内容作为地址访问内存,得到的字节按符的内容作为地址访问内存,得到的字节按符号位扩展为号位扩展为3232位后存入位后存入R8R8的低的低3232位,位,R8R8的高的高3232位(即位(即RegsR8RegsR80.310.31)不变。)不变。 141141/79/793.load和store指令指令举例 指令名称 含 义 L
107、D R2,20(R3) 装入双字 RegsR264 Mem20+RegsR3 LW R2,40(R3) 装入字 RegsR264 (Mem40+RegsR30)32 # Mem40+RegsR3 LB R2,30(R3) 装入字节 RegsR264 (Mem30+RegsR30)56 # Mem30+RegsR3 LBU R2,40(R3) 装入无符号字节 RegsR264 056 # Mem40+RegsR3 LH R2,30(R3) 装入半字 RegsR264 (Mem30+RegsR30)48 #Mem30+RegsR3# Mem31+RegsR3 L.S F2,60(R4) 装入半字
108、RegsF264 Mem60+RegsR4 # 032 L.D F2,40(R3) 装入双精度浮点数 RegsF264 Mem40+RegsR3 SD R4,300(R5) 保存双字 Mem300+RegsR564 RegsR4 SW R4,300(R5) 保存字 Mem300+RegsR532 RegsR4 S.S F2,40(R2) 保存单精度浮点数Mem40+RegsR232 RegsF2 031 SH R5,502(R4)保存半字Mem502+RegsR416 RegsR5 48.63 142142/79/794.ALU指令寄存器寄存器- -寄存器型(寄存器型(RRRR型)指令或立即数
109、型型)指令或立即数型算术和逻辑操作:加、减、与、或、异或和移位等算术和逻辑操作:加、减、与、或、异或和移位等指令举例 指令名称 含义 DADDUR1,R2,R3 无符号加 RegsR1 RegsR2+ RegsR3 DADDIU R4,R5,#6 加无符号立即数 RegsR4 RegsR5+6 LUIR1,#4 把立即数装入到一个字的高16位 RegsR1 032 # 4 # 016DSLLR1,R2,#5 逻辑左移 RegsR1 RegsR25 DSLT R1,R2,R3 置小于 If(RegsR2 RegsR3)RegsR1 1 else RegsR10 2.6 MIPS指令集结构1431
110、43/79/792.6 MIPS指令集结构R0的值永远是0,它可以用来合成一些常用的操作。例如:DADDIU R1DADDIU R1,R0R0,#100#100 / /给寄存器给寄存器R1R1装入常数装入常数100100DADD R1DADD R1,R0R0,R2R2 / /把寄存器把寄存器R2R2中的数据传送到寄存器中的数据传送到寄存器R1R1144144/79/792.6 MIPS指令集结构1.由一组跳转和一组分支指令来实现控制流的改变2.典型的MIPS控制指令2.6.6 MIPS的控制指令145145/79/79指令举例 指令名称 含义 J name 跳转 PC 3663 name2JA
111、L name 跳转并链接 RegsR31PC+4;PC 3663namek k时,才有时,才有TPTPTPTPmaxmax。 173173/79/793.2 流水线的性能指标2.各段时间不完全相等的流水线 各段时间不等的流水线及其时空图 举例(时空图)q一条一条4 4段段的流水线的流水线qS1S1,S3S3,S4S4各段的时间:各段的时间:t tqS2S2的时间:的时间:33t t (瓶颈段)瓶颈段)流水线中这种时间最长的段称为流水线的瓶颈段。 174174/79/793.2 流水线的性能指标175175/79/793.2 流水线的性能指标各段时间不等的流水线的实际吞吐率:( t ti i为第
112、为第i i段的时间,共有段的时间,共有k k个段个段 )流水线的最大吞吐率为176176/79/793.2 流水线的性能指标 例如:一条4段的流水线中,S1,S2,S4各段的时间都是t,唯有S3的时间是3t。 最大吞吐率为177177/79/793.2 流水线的性能指标3.解决流水线瓶颈问题的常用方法 举例细分瓶颈段 例如:例如:对前面的对前面的4 4段段流水线流水线把瓶颈段把瓶颈段S S3 3细分为细分为3 3个子流水线段:个子流水线段:S S3a3a,S S3b3b,S S3c3c改进后的流水线的吞吐率改进后的流水线的吞吐率 :178178/79/793.2 流水线的性能指标重复设置瓶颈段
113、q举例:举例:时空图时空图q缺点:缺点:控制逻辑比较复杂,所需的硬件增加了。控制逻辑比较复杂,所需的硬件增加了。例如:例如:对前面的对前面的4 4段流水线段流水线 重复设置瓶颈段重复设置瓶颈段S S3 3:S S3a3a,S S3b3b,S S3c3c179179/79/793.2 流水线的性能指标重复设置瓶颈段后的时空图重复设置瓶颈段后的时空图180180/79/793.2 流水线的性能指标加速比:完成同样一批任务,不使用流水线所用的时间 与使用流水线所用的时间之比。假设:不使用流水线(即顺序执行)所用的间假设:不使用流水线(即顺序执行)所用的间为为T Ts s,使用流水线后所用的时间为,使
114、用流水线后所用的时间为T Tk k,则该流水,则该流水线的加速比为线的加速比为3.2.2 加速比181181/79/793.2 流水线的性能指标1.流水线各段时间相等(都是t)一条k段流水线完成n个连续任务 所需要的时间为所需要的时间为 Tk = (kn-1)t顺序执行n个任务 所需要的时间:所需要的时间: Ts=nkt (解释解释)流水线的实际加速比为182182/79/793.2 流水线的性能指标最大加速比当当n nk k时,时,S S k k思考:思考:流水线的段数愈多愈好?流水线的段数愈多愈好? 183183/79/793.2 流水线的性能指标2.流水线的各段时间不完全相等时一条k段流
115、水线完成n个连续任务的实际加速比为184184/79/793.2 流水线的性能指标效率:流水线中的设备实际使用时间与整个运行时间 的比值,即流水线设备的利用率。 由于流水线有通过时间和排空时间,所以在连续由于流水线有通过时间和排空时间,所以在连续完成完成n n个个任务的时间内,各段并不是满负荷地工作。任务的时间内,各段并不是满负荷地工作。1.各段时间相等各段的效率ei相同 3.2.3 效率185185/79/793.2 流水线的性能指标186186/79/793.2 流水线的性能指标整条流水线的效率为 可以写成 最高效率为 当当n nk k时,时,E E11。 187187/79/793.2
116、流水线的性能指标当流水线各段时间相等时,流水线的效率与吞吐率 成正比。 E=TPt 2.流水线的效率是流水线的实际加速比S与它的最大加速 比k的比值。 当当E E=1=1时,时,S S= =k k,实际加速比达到最大。,实际加速比达到最大。188188/79/793.2 流水线的性能指标3.从时空图上看,效率就是n个任务占用的时空面积和 k个段总的时空面积之比。当各段时间不相等时 举例189189/79/793.2 流水线的性能指标190190/79/793.2 流水线的性能指标 例例3.13.1 设在下图所示的静态流水线上计算:设在下图所示的静态流水线上计算: 流水线的输出可以直接返回输入端
117、或暂存于相应的流水寄存器中,流水线的输出可以直接返回输入端或暂存于相应的流水寄存器中,试计算其吞吐率、加速比和效率。试计算其吞吐率、加速比和效率。3.2.4 流水线的性能分析举例( (每段的时间都为每段的时间都为t t) )191191/79/793.2 流水线的性能指标解解:(1 1)选择适合于流水线工作的算法选择适合于流水线工作的算法q先计算先计算A A1 1+ +B B1 1、A A2 2+ +B B2 2、A A3 3+ +B B3 3和和A A4 4+ +B B4 4;q再计算再计算( (A A1 1+ +B B1 1) )( (A A2 2+ +B B2 2) )和和( (A A3
118、 3+ +B B3 3) )( (A A4 4+ +B B4 4) );q然后求总的乘积结果。然后求总的乘积结果。(2 2)画出时空图)画出时空图 192192/79/793.2 流水线的性能指标193193/79/793.2 流水线的性能指标p在在1818个个t t时间中,给出了时间中,给出了7 7个个结果。吞吐率为:结果。吞吐率为: p 不用流水线,由于一次求和需不用流水线,由于一次求和需66t t,一次求积需一次求积需44t t, 则产生上述则产生上述7 7个结果共需个结果共需(4 46+36+34 4)t t = 36 = 36t t 加速比为加速比为(3 3)计算性能)计算性能194
119、194/79/793.2 流水线的性能指标p 流水线的效率流水线的效率 可以看出,在求解此问题时,该流水线的效率不高。 195195/79/793.2 流水线的性能指标主要原因q多功能流水线在做某一种运算时,总有一些段是空多功能流水线在做某一种运算时,总有一些段是空闲的。闲的。q静态流水线在进行功能切换时,要等前一种运算全静态流水线在进行功能切换时,要等前一种运算全部流出流水线后才能进行后面的运算。部流出流水线后才能进行后面的运算。q运算之间存在关联,后面有些运算要用到前面运算运算之间存在关联,后面有些运算要用到前面运算的结果。的结果。q流水线的工作过程有建立与排空部分。流水线的工作过程有建立
120、与排空部分。 196196/79/793.2 流水线的性能指标 例例3.2 3.2 有一条动态多功能流水线由有一条动态多功能流水线由5 5段组成,加法用段组成,加法用1 1、3 3、4 4、5 5段,乘法用段,乘法用1 1、2 2、5 5段,第段,第2 2段的时间为段的时间为22t t,其余各段时间均,其余各段时间均为为t t,而且流水线的输出可以直接返回输入端或暂存于相应的,而且流水线的输出可以直接返回输入端或暂存于相应的流水寄存器中。若在该流水线上计算流水寄存器中。若在该流水线上计算: : 试计算其吞吐率、加速比和效率。试计算其吞吐率、加速比和效率。197197/79/793.2 流水线的
121、性能指标解解: : (1) (1) 选择适合于流水线工作的算法选择适合于流水线工作的算法p应先计算应先计算A A1 1B B1 1、A A2 2B B2 2、A A3 3B B3 3和和A A4 4B B4 4;p再计算再计算( (A A1 1B B1)1)( (A A2 2B B2)2) ( (A A3 3B B3)3)( (A A4 4B B4)4);p然后求总的累加结果。然后求总的累加结果。(2) (2) 画出时空图画出时空图(3) (3) 计算性能计算性能198198/79/793.2 流水线的性能指标199199/79/793.2 流水线的性能指标1.瓶颈问题理想情况下,流水线在工作
122、时,其中的任务是同步地每一个时钟周期往前流动一段。当流水线各段不均匀时,机器的时钟周期取决于瓶颈段的延迟时间。在设计流水线时,要尽可能使各段时间相等。2.流水线的额外开销p流水寄存器延迟流水寄存器延迟p时钟偏移开销时钟偏移开销3.2.5 流水线设计中的若干问题200200/79/793.2 流水线的性能指标流水寄存器需要建立时间和传输延迟q建立时间:建立时间:在触发写操作的时钟信号到达之前,寄在触发写操作的时钟信号到达之前,寄 存器输入必须保持稳定的时间。存器输入必须保持稳定的时间。q传输延迟:传输延迟:时钟信号到达后到寄存器输出可用的时时钟信号到达后到寄存器输出可用的时 间。间。时钟偏移开销
123、q流水线中,时钟到达各流水寄存器的最大差值时间。流水线中,时钟到达各流水寄存器的最大差值时间。(时钟到达各流水寄存器的时间不是完全相同)(时钟到达各流水寄存器的时间不是完全相同)201201/79/793.2 流水线的性能指标几个问题q流水线并不能减少(而且一般是增加)单条指令的流水线并不能减少(而且一般是增加)单条指令的执行时间,但却能提高吞吐率。执行时间,但却能提高吞吐率。q增加流水线的深度(段数)可以提高流水线的性能。增加流水线的深度(段数)可以提高流水线的性能。q流水线的深度受限于流水线的额外开销。流水线的深度受限于流水线的额外开销。q当时钟周期小到与额外开销相同时,流水已没意义。当时
124、钟周期小到与额外开销相同时,流水已没意义。因为这时在每一个时钟周期中已没有时间来做有用因为这时在每一个时钟周期中已没有时间来做有用的工作。的工作。3.冲突问题 流水线设计中要解决的重要问题之一。 202202/79/79介绍一个经典的5段RISC流水线 首先讨论在非流水情况下是如何实现的1.一条指令的执行过程分为以下5个周期:取指令周期(IF)qIR MemPC IR MemPC 。qPCPC值加值加4 4。(假设每条指令占。(假设每条指令占4 4个字节)个字节) 3.3 流水线的相关与冲突3.3.1 一个经典的5段流水线203203/79/793.3 流水线的相关与冲突指令译码/读寄存器周期
125、(ID)q译码。译码。q用用IRIR中的寄存器编号去访问通用寄存器组,读出所需中的寄存器编号去访问通用寄存器组,读出所需的操作数。的操作数。执行/有效地址计算周期(EX) 不同指令所进行的操作不同:q存储器访问指令:存储器访问指令:ALUALU把所指定的寄存器的内容与偏把所指定的寄存器的内容与偏 移量相加,形成用于访存的有效地址。移量相加,形成用于访存的有效地址。q寄存器寄存器寄存器寄存器ALUALU指令:指令:ALUALU按照操作码指定的操按照操作码指定的操 作对从通用寄存器组中读取的数据进行运算。作对从通用寄存器组中读取的数据进行运算。204204/79/793.3 流水线的相关与冲突q寄
126、存器立即数寄存器立即数ALUALU指令:指令:ALUALU按照操作码指定的操按照操作码指定的操 作对从通用寄存器组中读取的第一操作数和立即数作对从通用寄存器组中读取的第一操作数和立即数 进行运算。进行运算。q分支指令:分支指令:ALUALU把偏移量与把偏移量与PCPC值相加,形成转移目标值相加,形成转移目标 的地址。同时,对在前一个周期读出的操作数进行的地址。同时,对在前一个周期读出的操作数进行 判断,确定分支是否成功。判断,确定分支是否成功。存储器访问分支完成周期(MEM) 该周期处理的指令只有load、store和分支指令。 其他类型的指令在此周期不做任何操作。205205/79/793.
127、3 流水线的相关与冲突qloadload和和storestore指令指令loadload指令:指令:用上一个周期计算出的有效地址从存储器中用上一个周期计算出的有效地址从存储器中 读出相应的数据。读出相应的数据。storestore指令:指令:把指定的数据写入这个有效地址所指出的存把指定的数据写入这个有效地址所指出的存 储器单元。储器单元。q分支指令分支指令 分支分支“成功成功”,就把转移目标地址送入,就把转移目标地址送入PCPC。 分支指令执行完成。分支指令执行完成。206206/79/793.3 流水线的相关与冲突写回周期(WB) ALU运算指令和load指令在这个周期把结果数据写入通用寄存
128、器组。 ALUALU运算指令:运算指令:结果数据来自结果数据来自ALUALU。 loadload指令:指令:结果数据来自存储器系统。结果数据来自存储器系统。 在这个实现方案中:p分支指令需要分支指令需要4 4个时钟个时钟周期(如果把分支指令的执行周期(如果把分支指令的执行 提前到提前到IDID周期,则只需要周期,则只需要2 2个个周期)。周期)。pstorestore指令需要指令需要4 4个个周期。周期。p其他指令需要其他指令需要5 5个个周期才能完成。周期才能完成。207207/79/792.将上述实现方案修改为流水线实现一个经典的5段流水线 q每一个周期作为一个流水段。每一个周期作为一个流
129、水段。q在各段之间加上锁存器(流水寄存器)。在各段之间加上锁存器(流水寄存器)。 208208/79/793.3 流水线的相关与冲突5段流水线的两种描述方式q第一种描述(类似于时空图)第一种描述(类似于时空图)209209/79/79第二种描述(按时间错开的数据通路序列)210210/79/79 3.采用流水线方式实现时,应解决以下几个问题:要保证不会在同一时钟周期要求同一个功能段做 两件不同的工作。例如,不能要求例如,不能要求ALUALU同时做有效地址计算和算术运算。同时做有效地址计算和算术运算。避免IF段的访存(取指令)与MEM段的访存(读/写数据)发生冲突。q可以采用分离的指令存储器和数
130、据存储器;可以采用分离的指令存储器和数据存储器;q一般采用分离的指令一般采用分离的指令CacheCache和数据和数据CacheCache。ID段和WB段都要访问同一寄存器文件。 IDID段:读段:读WBWB段:写段:写3.3 流水线的相关与冲突211211/79/793.3 流水线的相关与冲突如何解决对同一寄存器的访问冲突?如何解决对同一寄存器的访问冲突? 把写操作安排在时钟周期的前半拍完成,把读操作把写操作安排在时钟周期的前半拍完成,把读操作安排在后半拍完成。安排在后半拍完成。考虑PC的问题q流水线为了能够每个时钟周期启动一条新的指令,流水线为了能够每个时钟周期启动一条新的指令,就必须在每
131、个时钟周期进行就必须在每个时钟周期进行PCPC值的加值的加4 4操作,并保留操作,并保留新的新的PCPC值。这种操作值。这种操作必须在必须在IFIF段完成,段完成,以便为取下以便为取下一条指令做好准备。一条指令做好准备。 (需设置一个专门的加法器)(需设置一个专门的加法器)q但分支指令也可能改变但分支指令也可能改变P PC C的值,而且是在的值,而且是在MEMMEM段段进行,进行,这会导致冲突。这会导致冲突。请考虑一下,如何处理分支指令?请考虑一下,如何处理分支指令?212212/79/793.3 流水线的相关与冲突相关:两条指令之间存在某种依赖关系。 如果两条指令相关,则它们就有可能不能在流
132、如果两条指令相关,则它们就有可能不能在流水线中重叠执行或者只能部分重叠执行。水线中重叠执行或者只能部分重叠执行。相关有3种类型q数据相关(也称真数据相关)数据相关(也称真数据相关)q名相关名相关q控制相关控制相关3.3.2 相关与流水线冲突1. 相关213213/79/793.3 流水线的相关与冲突(1)数据相关 对于两条指令i(在前,下同)和j(在后,下同),如果下述条件之一成立,则称指令j与指令i数据相关。 q指令指令j j使用指令使用指令i i产生的结果;产生的结果;q指令指令j j与指令与指令k k数据相关,而指令数据相关,而指令k k又与指令又与指令i i数据相关。数据相关。数据相关
133、具有传递性。 数据相关反映了数据的流动关系,即如何从其产 生者流动到其消费者。 214214/79/793.3 流水线的相关与冲突 例如:例如:下面这一段代码存在数据相关。下面这一段代码存在数据相关。LoopLoop: L.D L.D F0F0,0 0(R1R1)/ F0/ F0为数组元素为数组元素 ADD.D ADD.D F4F4,F0F0,F2F2/ / 加上加上F2F2中的值中的值 S.D S.D F4F4,0 0(R1R1)/ / 保存结果保存结果 DADDIU DADDIU R1R1,R1R1,8 8/ / 数组指针递减数组指针递减8 8个字节个字节 BNE BNE R1R1,R2R
134、2,LoopLoop/ / 如果如果R1R2R1R2,则分支,则分支 215215/79/793.3 流水线的相关与冲突当数据的流动是经过寄存器时,相关的检测比较 直观和容易。当数据的流动是经过存储器时,检测比较复杂。q相同形式的地址其有效地址未必相同。相同形式的地址其有效地址未必相同。q形式不同的地址其有效地址却可能相同。形式不同的地址其有效地址却可能相同。(2)名相关名:指令所访问的寄存器或存储器单元的名称。如果两条指令使用相同的名,但是它们之间并没有数据流动,则称这两条指令存在名相关。216216/79/793.3 流水线的相关与冲突指令j与指令i之间的名相关有两种:q反相关:反相关:如
135、果指令如果指令j j写的名与指令写的名与指令i i读的名相同,则读的名相同,则 称指令称指令i i和和j j发生了反相关。发生了反相关。 指令指令j j写的名指令写的名指令i i读的名读的名q输出相关:输出相关:如果指令如果指令j j和指令和指令i i写相同的名,则称指写相同的名,则称指 令令i i和和j j发生了输出相关。发生了输出相关。 指令指令j j写的名指令写的名指令i i写的名写的名217217/79/793.3 流水线的相关与冲突名相关的两条指令之间并没有数据的传送。如果一条指令中的名改变了,并不影响另外一条指令的执行。换名技术q换名技术:换名技术:通过改变指令中操作数的名来消除名
136、相关。通过改变指令中操作数的名来消除名相关。q对于寄存器操作数进行换名称为对于寄存器操作数进行换名称为寄存器换名。寄存器换名。既可以用编译器静态实现,也可以用硬件动态完成。既可以用编译器静态实现,也可以用硬件动态完成。218218/79/793.3 流水线的相关与冲突例如:例如:考虑下述代码:考虑下述代码: DIV.DDIV.DF2F2,F6F6,F4F4 ADD.D ADD.DF6F6,F0F0,F12F12 SUB.D SUB.DF8F8,F6F6,F14F14 DIV.DDIV.D和和ADD.DADD.D存在反相关。存在反相关。 进行寄存器换名(进行寄存器换名(F6F6换成换成S S)后
137、,变成:)后,变成: DIV.DDIV.DF2F2,F6F6,F4F4 ADD.D ADD.DS S,F0F0,F12F12 SUB.D SUB.DF8F8,S S,F14 F14 219219/79/793.3流水线的相关与冲突(3)控制相关 控制相关是指由分支指令引起的相关。q为了保证程序应有的执行顺序,必须严格按控制相为了保证程序应有的执行顺序,必须严格按控制相 关确定的顺序执行。关确定的顺序执行。典型的程序结构是“if-then”结构。请看一个示例:if p1 if p1 S1 S1; ;S S;if p2 if p2 S2 S2; ;220220/79/793.3 流水线的相关与冲突
138、控制相关带来了以下两个限制:q与一条分支指令控制相关的指令不能被移到该分支与一条分支指令控制相关的指令不能被移到该分支 之前,否则这些指令就不受该分支控制了。之前,否则这些指令就不受该分支控制了。 对于上述的例子,对于上述的例子,thenthen 部分中的指令不能移到部分中的指令不能移到ifif语语句之前。句之前。 q如果一条指令与某分支指令不存在控制相关,就不如果一条指令与某分支指令不存在控制相关,就不 能把该指令移到该分支之后。能把该指令移到该分支之后。对于上述的例子,不能把对于上述的例子,不能把S S移到移到ifif语句的语句的thenthen部分中。部分中。221221/79/793.
139、3 流水线的相关与冲突 流水线冲突是指对于具体的流水线来说,由于相关的存在,使得指令流中的下一条指令不能在指定的时钟周期执行。 流水线冲突有3种类型:q结构冲突:结构冲突:因硬件资源满足不了指令重叠执行的要因硬件资源满足不了指令重叠执行的要 求而发生的冲突。求而发生的冲突。q数据冲突:数据冲突:当指令在流水线中重叠执行时,因需要当指令在流水线中重叠执行时,因需要 用到前面指令的执行结果而发生的冲突。用到前面指令的执行结果而发生的冲突。q控制冲突:控制冲突:流水线遇到分支指令和其他会改变流水线遇到分支指令和其他会改变PCPC值值 的指令所引起的冲突。的指令所引起的冲突。2.流水线冲突222222
140、/79/793.3 流水线的相关与冲突带来的几个问题:导致错误的执行结果。流水线可能会出现停顿,从而降低流水线的效率 和实际的加速比。我们约定 当一条指令被暂停时,在该暂停指令之后流出的所当一条指令被暂停时,在该暂停指令之后流出的所有指令都要被暂停,而在该暂停指令之前流出的指令则有指令都要被暂停,而在该暂停指令之前流出的指令则继续进行(否则就永远无法消除冲突)。继续进行(否则就永远无法消除冲突)。223223/79/793.3 流水线的相关与冲突(1)结构冲突在流水线处理机中,为了能够使各种组合的指令 都能顺利地重叠执行,需要对功能部件进行流水 或重复设置资源。如果某种指令组合因为资源冲突而不
141、能正常执 行,则称该处理机有结构冲突。常见的导致结构相关的原因:q功能部件不是完全流水功能部件不是完全流水q资源份数不够资源份数不够224224/79/793.3 流水线的相关与冲突结构冲突举例:访存冲突 有些流水线处理机只有一个存储器,将数据和指令放在一起,访存指令会导致访存冲突。q解决办法解决办法:插入暂停周期插入暂停周期 (“流水线气泡流水线气泡”或或“气泡气泡”) 引入暂停后的时空图引入暂停后的时空图q解决方法解决方法: 设置相互独立的指令存储器和数据存储器设置相互独立的指令存储器和数据存储器 或设置相互独立的指令或设置相互独立的指令CacheCache和数据和数据CacheCache
142、。225225/79/793.3 流水线的相关与冲突由于访问同一个存储器而引起的结构冲突由于访问同一个存储器而引起的结构冲突 226226/79/793.3 流水线的相关与冲突为消除结构冲突而插入的流水线气泡为消除结构冲突而插入的流水线气泡 227227/79/793.3 流水线的相关与冲突引入暂停后的时空图引入暂停后的时空图指令编号指令编号 时钟周期时钟周期 1 12 23 34 45 56 67 78 89 91010指令指令i i IF IF ID ID EX EX MEM MEM WB WB 指令指令i+1 i+1 IF IF ID ID EX EX MEM MEM WB WB 指令指
143、令i+2 i+2 IF IF ID ID EX EX MEM MEM WB WB WB WB 指令指令i+3 i+3 stallstall IFIFID ID EX EX MEM MEM WB WB 指令指令i+4 i+4 IFIFID ID EX EX MEM MEM WB WB 指令指令i+5 i+5 IFIFIDIDEX EX MEM MEM 228228/79/793.3 流水线的相关与冲突有时流水线设计者允许结构冲突的存在主要原因:主要原因:减少硬件成本减少硬件成本q如果把流水线中的所有功能单元完全流水化,或者如果把流水线中的所有功能单元完全流水化,或者 重复设置足够份数,那么所花费
144、的成本将相当高。重复设置足够份数,那么所花费的成本将相当高。(2)数据冲突 当相关的指令靠得足够近时,它们在流水线中的重叠执行或者重新排序会改变指令读/写操作数的顺序,使之不同于它们非流水实现时的顺序,则发生了数据冲突。229229/79/793.3 流水线的相关与冲突举例: DADD DADD R1R1,R2R2,R3R3 DSUB R4 DSUB R4,R1R1,R5R5 XOR R6 XOR R6,R1R1,R7R7 AND R8 AND R8,R1R1,R9R9 OR R10 OR R10,R1R1,R11R11230230/79/793.3 流水线的相关与冲突流水线的数据冲突举例流水
145、线的数据冲突举例 231231/79/793.3 流水线的相关与冲突根据指令读访问和写访问的顺序,可以将数据冲 突分为3种类型。 考虑考虑两条指令两条指令i i和和j j ,且,且i i在在j j之前进入流水线,之前进入流水线,可能发生的数据冲突有:可能发生的数据冲突有:q写后读冲突(写后读冲突(RAWRAW) 在在 i i 写入之前,写入之前,j j 先去读。先去读。 j j 读出的内容是错误的。读出的内容是错误的。 这是最常见的一种数据冲突,它对应于真数据相关。这是最常见的一种数据冲突,它对应于真数据相关。 232232/79/793.3 流水线的相关与冲突q写后写冲突(写后写冲突(WAW
146、WAW) 在在 i i 写入之前,写入之前,j j 先写。先写。 最后写入的结果是最后写入的结果是 i i 的。错误!的。错误! 这种冲突对应于输出相关。这种冲突对应于输出相关。 写后写冲突仅发生在这样的流水线中:n流水线中不只一个段可以进行写操作。流水线中不只一个段可以进行写操作。n当先前某条指令停顿时,允许其后续指令继续前进。当先前某条指令停顿时,允许其后续指令继续前进。 前面介绍的5段流水线不会发生写后写冲突。(只在(只在WBWB段写寄存器)段写寄存器) 233233/79/793.3 流水线的相关与冲突q读后写冲突(读后写冲突(WARWAR) 在在 i i 读之前,读之前,j j 先写
147、。先写。 i i 读出的内容是错误的!读出的内容是错误的! 由反相关引起。由反相关引起。 这种冲突仅发生在这样的情况下:n有些指令的写结果操作提前了,而且有些指令有些指令的写结果操作提前了,而且有些指令 的读操作滞后了。的读操作滞后了。n指令被重新排序了。指令被重新排序了。 读后写冲突在前述5段流水线中不会发生。(读操作(在(读操作(在IDID段)在写结果操作(在段)在写结果操作(在WBWB段)之前)段)之前)234234/79/793.3 流水线的相关与冲突通过定向技术减少数据冲突引起的停顿 (定向技术也称为旁路或短路)(定向技术也称为旁路或短路)q关键思想:关键思想:在某条指令产生计算结果
148、之前,其他指在某条指令产生计算结果之前,其他指 令并不真正立即需要该计算结果,如果能够将该计令并不真正立即需要该计算结果,如果能够将该计 算结果从其产生的地方直接送到其他指令需要它的算结果从其产生的地方直接送到其他指令需要它的 地方,那么就可以避免停顿。地方,那么就可以避免停顿。q采用定向技术消除上例中的相关采用定向技术消除上例中的相关 235235/79/793.3 流水线的相关与冲突采用定向技术后的流水线数据通路采用定向技术后的流水线数据通路 236236/79/793.3 流水线的相关与冲突q当定向硬件检测到前面某条指令的结果寄存器就是当前当定向硬件检测到前面某条指令的结果寄存器就是当前
149、指令的源寄存器时,控制逻辑会将前面那条指令的结果指令的源寄存器时,控制逻辑会将前面那条指令的结果直接从其产生的地方定向到当前指令所需的位置。直接从其产生的地方定向到当前指令所需的位置。q结果数据不仅可以从某一功能部件的输出定向到其自身结果数据不仅可以从某一功能部件的输出定向到其自身的输入,而且还可以定向到其他功能部件的输入。的输入,而且还可以定向到其他功能部件的输入。 举例举例: DSUB DSUB R1R1,R2R2,R3R3LD LD R5R5,0 0(R1R1)SD SD R5R5,1212(R1R1)237237/79/793.3 流水线的相关与冲突更多的定向路径更多的定向路径 238
150、238/79/793.3 流水线的相关与冲突需要停顿的数据冲突 q并不是所有的数据冲突都可以用定向技术来解决。并不是所有的数据冲突都可以用定向技术来解决。 举例举例: LD LD R1R1,0 0(R2R2)DADD R4DADD R4,R1R1,R5R5AND R6AND R6,R1R1,R7R7XOR R8XOR R8,R1R1,R9R9q增加流水线互锁硬件,插入增加流水线互锁硬件,插入“暂停暂停”。 作用:作用:检测发现数据冲突,并使检测发现数据冲突,并使流水线停顿流水线停顿,直至,直至冲突消失。冲突消失。 举例:举例:演示演示A A 演示演示B B239239/79/793.3 流水线
151、的相关与冲突无法将无法将LDLD指令的结果定向到指令的结果定向到DADDDADD指令指令 240240/79/793.3 流水线的相关与冲突流水线互锁机制插入气泡后的执行过程流水线互锁机制插入气泡后的执行过程 241241/79/793.3 流水线的相关与冲突LD R1LD R1,0 0(R2R2) IF IF ID ID EX EX MEM MEM WB WB DADD R4DADD R4,R1R1,R5 R5 IF IF ID ID EX EX MEM MEM WB WB AND R6AND R6,R1R1,R7 R7 IF IF ID ID EX EX MEM MEM WB WB XOR
152、 R8XOR R8,R1R1,R9 R9 IF IF ID ID EX EX MEM MEM WB WB LD R1LD R1,0 0(R2R2) IF IF ID ID EX EX MEM MEM WB WB DADD R4DADD R4,R1R1,R5 R5 IF IF ID ID stall stall EX EX MEM MEM WB WB AND R6AND R6,R1R1,R7 R7 IF IF stall stall ID ID EX EX MEM MEM WB WB XOR R8XOR R8,R1R1,R9 R9 stall stall IF IF ID ID EX EX ME
153、M MEM 插入停顿前后的流水线时空图插入停顿前后的流水线时空图 242242/79/793.3 流水线的相关与冲突LD RbLD Rb,B B IF IF ID ID EX EX MEM MEM WB WB LD RcLD Rc,C C IF IF ID ID EX EX EX EX MEM MEM WB WB WB WB DADD RaDADD Ra,RbRb,Rc Rc IF IF ID ID stallstall EX EX MEM MEM WB WB SD Ra SD Ra ,A A IF IF stallstall ID ID EX EX MEM MEM WB WB 依靠编译器解决
154、数据冲突 让编译器重新组织指令顺序来消除冲突,这种技术让编译器重新组织指令顺序来消除冲突,这种技术称为称为指令调度指令调度或或流水线调度。流水线调度。p例如:例如:采用典型的代码生成方法,采用典型的代码生成方法, 表达式表达式A AB BC C的代码会导致暂停的代码会导致暂停243243/79/79调度前的代码调度前的代码 调度后的代码调度后的代码 LD RbLD Rb,B BLD RcLD Rc,C CDADD RaDADD Ra,RbRb,Rc Rc SD RaSD Ra,A ALD ReLD Re,E ELD RfLD Rf,F FDSUB RdDSUB Rd,ReRe,RfRfSD R
155、dSD Rd,D D LD RbLD Rb,B BLD RcLD Rc,C CLD ReLD Re,E E DADD RaDADD Ra,RbRb,RcRcLD RfLD Rf,F FSD RaSD Ra,A A DSUB RdDSUB Rd,ReRe,RfRfSD RdSD Rd,D D p举例:举例: 请为下列表达式生成没有暂停的指令序列请为下列表达式生成没有暂停的指令序列: : ABC ; DEF ; 假设载入延迟为假设载入延迟为1 1个个时钟周期。时钟周期。 题解题解244244/79/793.3 流水线的相关与冲突(3)控制冲突 执行分支指令的结果有两种q分支成功:分支成功:PCPC
156、值改变为分支转移的目标地址。值改变为分支转移的目标地址。 在条件判定和转移地址计算都完成后,才改变在条件判定和转移地址计算都完成后,才改变PCPC值。值。q不成功或者失败:不成功或者失败:PCPC的值保持正常递增,的值保持正常递增, 指向顺序的下一条指令。指向顺序的下一条指令。处理分支指令最简单的方法:“冻结冻结”或者或者“排空排空”流水线流水线 。 优点:优点:简单。简单。p前述前述5 5段流水线中,改变段流水线中,改变PCPC值是在值是在MEMMEM段进行的。段进行的。 给流水线带来了给流水线带来了3 3个时钟周期的延迟个时钟周期的延迟。245245/79/79分支指令分支指令 IF IF
157、 ID ID EX EX MEM MEM WB WB 分支目标指令分支目标指令 IFIF stallstall stallstall IF IF ID ID EX EX MEM MEM WB WB 分支目标指令分支目标指令+1 +1 IF IF ID ID EX EX MEM MEM WB WB 分支目标指令分支目标指令+2 +2 IF IF ID ID EX EX MEM MEM 分支目标指令分支目标指令+3 +3 IF IF ID ID EX EX 分支指令分支指令 IF IF ID ID EX EX MEM MEM WB WB 分支后继指令分支后继指令 IF IF stallstall
158、stallstall IF IF ID ID EX EX MEM MEM WB WB 分支后继指令分支后继指令+1+1 IF IF ID ID EX EX MEM MEM WB WB 分支后继指令分支后继指令+2 +2 IF IF ID ID EX EX MEM MEM 分支后继指令分支后继指令+3 +3 IF IF ID ID EX EX 简单处理分支指令:分支成功的情况简单处理分支指令:分支成功的情况 简单处理分支指令:分支失败的情况简单处理分支指令:分支失败的情况 246246/79/793.3 流水线的相关与冲突把由分支指令引起的延迟称为分支延迟。分支指令在目标代码中出现的频度q每每3
159、 34 4条指令就有一条是分支指令。条指令就有一条是分支指令。 假设:假设:分支指令出现的频度是分支指令出现的频度是3030, 流水线理想流水线理想 CPICPI1 1, 那么:那么:流水线的实际流水线的实际 CPI CPI 1.91.9。可采取两种措施来减少分支延迟。q在流水线中尽早判断出分支转移是否成功;在流水线中尽早判断出分支转移是否成功;q尽早计算出分支目标地址。尽早计算出分支目标地址。247247/79/793.3 流水线的相关与冲突下面的讨论中,我们假设: 这两步工作被提前到ID段完成,即分支指令是在ID段的末尾执行完成,所带来的分支延迟为一个时钟周期。 248248/79/793
160、.3 流水线的相关与冲突3种通过软件(编译器)来减少分支延迟的方法 共同点:n对分支的处理方法在程序的执行过程中始终是对分支的处理方法在程序的执行过程中始终是 不变的,是静态的。不变的,是静态的。n要么总是预测分支成功,要么总是预测分支失败。要么总是预测分支成功,要么总是预测分支失败。q预测分支失败预测分支失败 n允许分支指令后的指令继续在流水线中流动,就允许分支指令后的指令继续在流水线中流动,就 好象什么都没发生似的。好象什么都没发生似的。n若确定分支失败,将分支指令看作是一条普通指若确定分支失败,将分支指令看作是一条普通指 令,流水线正常流动。令,流水线正常流动。249249/79/793
161、.3 流水线的相关与冲突n若确定分支成功,流水线就把在分支指令之后若确定分支成功,流水线就把在分支指令之后 取出的所有指令转化为空操作,并按分支目地取出的所有指令转化为空操作,并按分支目地 重新取指令执行。重新取指令执行。要保证:要保证:分支结果出来之前不会改变处理机的状态,以分支结果出来之前不会改变处理机的状态,以 便一旦猜错时,处理机能够回退到原先的状态。便一旦猜错时,处理机能够回退到原先的状态。流水线的处理过程流水线的处理过程250250/79/79251251/79/793.3 流水线的相关与冲突q预测分支成功预测分支成功 假设分支转移成功,并从分支目标地址处取指令执行。假设分支转移成
162、功,并从分支目标地址处取指令执行。起作用的前题:起作用的前题:先知道分支目标地址,后知道分支是否先知道分支目标地址,后知道分支是否 成功。成功。前述前述5 5段流水线中,这种方法没有任何好处。段流水线中,这种方法没有任何好处。252252/79/793.3 流水线的相关与冲突q延迟分支延迟分支主要思想:主要思想: 从逻辑上从逻辑上“延长延长”分支指令的执行时间。把延迟分支分支指令的执行时间。把延迟分支看成是由原来的分支指令和若干个延迟槽构成,不管分看成是由原来的分支指令和若干个延迟槽构成,不管分支是否成功,都要按顺序执行延迟槽中的指令。支是否成功,都要按顺序执行延迟槽中的指令。 253253/
163、79/79具有一个分支延迟槽的流水线的执行过程具有一个分支延迟槽的流水线的执行过程分分支支失失败败 分支指令分支指令i i IF IF ID ID EX EX MEM MEM WBWB延迟槽指令延迟槽指令 i+1i+1 IF IF ID ID EX EX MEM MEM WBWB指令指令 i+2 i+2 IF IF ID ID EX EX MEM MEM WBWB指令指令 i+3 i+3 IF IF ID ID EX EX MEMMEMWBWB指令指令 i+4 i+4 IF IF ID ID EX EX MEMMEMWBWB分支延迟槽中的指令分支延迟槽中的指令“掩盖掩盖”了流水线原来必须插入的
164、暂停周期。了流水线原来必须插入的暂停周期。分分支支成成功功 分支指令分支指令i i IF IF ID ID EX EX MEMMEMWBWB 延迟槽指令延迟槽指令 i+1i+1 IF IF ID ID EX EX MEMMEMWBWB分支目标指令分支目标指令j j IF IF ID ID EX EX MEMMEMWBWB分支目标指令分支目标指令j+1 j+1 IF IF ID ID EX EX MEMMEMWBWB分支目标指令分支目标指令j+2j+2IF IF ID ID EX EX MEMMEMWBWB254254/79/793.3 流水线的相关与冲突 分支延迟指令的调度任务:任务:在延迟槽
165、中放入有用的指令。在延迟槽中放入有用的指令。由编译器完成。能否带来好处取决于编译器能否把有用由编译器完成。能否带来好处取决于编译器能否把有用的指令调度到延迟槽中。的指令调度到延迟槽中。三种调度方法:三种调度方法: n从前调度从前调度n从目标处调度从目标处调度n从失败处调度从失败处调度255255/79/79调度前和调度后的代码256256/79/793.3 流水线的相关与冲突三种方法的要求及效果调 度 策 略对调度的要求什么情况下起作用从从 前前 调调 度度从目标处调度从目标处调度从失败处调度从失败处调度必须保证在分支失败时执行被调度必须保证在分支失败时执行被调度的指令不会导致错误。有可能需要
166、的指令不会导致错误。有可能需要复制指令复制指令被调度的指令必须与分支无关被调度的指令必须与分支无关必须保证在分支成功时执行被调度必须保证在分支成功时执行被调度的指令不会导致错误的指令不会导致错误任何情况任何情况 分支成功时分支成功时( (但由于复制指令,有但由于复制指令,有可能会增大程序空间可能会增大程序空间) )分支失败时分支失败时257257/79/793.3 流水线的相关与冲突分支延迟受到两个方面的限制:q可以被放入延迟槽中的指令要满足一定的条件。可以被放入延迟槽中的指令要满足一定的条件。q编译器预测分支转移方向的能力。编译器预测分支转移方向的能力。进一步改进:分支取消机制(取消分支)
167、当分支的实际执行方向和事先所预测的一样时,当分支的实际执行方向和事先所预测的一样时,执行分支延迟槽中的指令,否则就将分支延迟槽中的执行分支延迟槽中的指令,否则就将分支延迟槽中的指令转化成一个空操作。指令转化成一个空操作。“预测预测成功取消成功取消”分支的执行过程分支的执行过程258258/79/79分分支支失失败败 分支指令分支指令i i IF IF ID ID EX EX MEM MEM WBWB延迟槽指令延迟槽指令 i+1i+1 IF IF idleidle idle idle idle idle idleidle指令指令 i+2 i+2 IF IF ID ID EX EX MEM MEM
168、 WBWB指令指令 i+3 i+3 IF IF ID ID EX EX MEMMEMWBWB指令指令 i+4 i+4 IF IF ID ID EX EX MEMMEMWBWB分分支支成成功功 分支指令分支指令i i IF IF ID ID EX EX MEMMEMWBWB 延迟槽指令延迟槽指令 i+1i+1 IF IF ID ID EX EX MEMMEMWBWB分支目标指令分支目标指令j j IF IF ID ID EX EX MEMMEMWBWB分支目标指令分支目标指令j+1 j+1 IF IF ID ID EX EX MEMMEMWBWB分支目标指令分支目标指令j+2j+2IF IF I
169、D ID EX EX MEMMEMWBWB预测分支成功的情况下,分支取消机制的执行情况预测分支成功的情况下,分支取消机制的执行情况 3.3 流水线的相关与冲突259259/79/791.实现MIPS指令子集的一种简单数据通路。该数据通路的操作分成5个时钟周期q取指令取指令q指令译码指令译码/读寄存器读寄存器q执行执行/有效地址计算有效地址计算q存储器访问存储器访问/分支完成分支完成q写回写回 只讨论整数指令的实现(包括:(包括:loadload和和storestore,等于,等于0 0转转移,整数移,整数ALUALU指令等。)指令等。) 3.4 流水线的实现3.4.1 MIPS的一种简单实现2
170、60260/79/79261261/79/793.4 流水线的实现2.一条MIPS指令最多需要以下5个时钟周期:取指令周期(IF) 操作pIRIRMemPCMemPCpNPCNPCPC+4PC+4指令译码/读寄存器周期(ID) 操作qA A RegsrsRegsrsqB B RegsrtRegsrtqImm Imm (IRIR1616)1616#IRIR16.3116.31) 指令的译码操作和读寄存器操作是并行进行的。指令的译码操作和读寄存器操作是并行进行的。 原因:在原因:在MIPSMIPS指令格式中,操作码字段以及指令格式中,操作码字段以及rsrs、rtrt 字段都是在固定的位置。字段都是
171、在固定的位置。 这种技术称为这种技术称为固定字段译码固定字段译码技术技术。 262262/79/793.4 流水线的实现执行/有效地址计算周期(EX) 不同指令所进行的操作不同:q存储器访问指令存储器访问指令 操作操作 ALUoALUoA + ImmA + Immq寄存器寄存器寄存器寄存器ALUALU指令指令 操作操作 ALUoALUoA func BA func Bq寄存器立即值寄存器立即值ALUALU指令指令 操作操作 ALUoALUoA op ImmA op Immq分支指令分支指令 操作操作 ALUoALUoNPC+NPC+(Imm2Imm2);); condcond(A =A = =
172、 0= 0)263263/79/793.4 流水线的实现 将有效地址计算周期和执行周期合并为一个时将有效地址计算周期和执行周期合并为一个时钟周期,这是因为钟周期,这是因为MIPSMIPS指令集采用指令集采用loadloadstorestore结结构,没有任何指令需要同时进行数据有效地址的计构,没有任何指令需要同时进行数据有效地址的计算、转移目标地址的计算和对数据进行运算。算、转移目标地址的计算和对数据进行运算。存储器访问/分支完成周期(MEM)q所有指令都要在该周期对所有指令都要在该周期对PCPC进行更新。进行更新。 除了分支指令,其他指令都是做除了分支指令,其他指令都是做PCPCNPCNPC
173、q在该周期内处理的在该周期内处理的MIPSMIPS指令仅仅有指令仅仅有loadload、storestore和分和分支支三种指令。三种指令。264264/79/793.4 流水线的实现q存储器访问指令存储器访问指令 操作操作 LMD LMDMemALUo MemALUo 或者或者 MemALUoMemALUoB Bq分支指令分支指令 操作操作 if if (condcond) PC PC ALUo else PCALUo else PCNPCNPC写回周期(WB)不同的指令在写回周期完成的工作也不一样。不同的指令在写回周期完成的工作也不一样。q寄存器寄存器寄存器寄存器ALUALU指令指令 操作
174、操作 RegsrdRegsrd ALUo ALUoq寄存器立即数寄存器立即数ALUALU指令指令 操作操作 RegsrtRegsrt ALUo ALUoqloadload指令指令 操作操作 RegsrtRegsrt LMD LMD265265/79/793.4 流水线的实现3.不采用单周期实现方案的主要原因对于大多数CPU来说,单周期实现效率很低,因为不同的指令所需完成的操作差别相当大,因而所需要的时钟周期时间也大不一样。单周期实现时,需要重复设置某些功能部件,而在多周期实现方案中,这些部件是可以共享的。266266/79/793.4 流水线的实现每一个时钟周期完成的工作看作是流水线的一段,每
175、个时钟周期启动一条新的指令。1.流水实现的数据通路设置了流水寄存器q段与段之间设置流水寄存器段与段之间设置流水寄存器q流水寄存器的命名流水寄存器的命名 用其相邻的两个段的名称拼合而成。用其相邻的两个段的名称拼合而成。 例如:例如:IDID段段与与EXEX段段之间的流水寄存器用之间的流水寄存器用ID/EXID/EX表示表示q每个流水寄存器是由若干个寄存器构成的每个流水寄存器是由若干个寄存器构成的 3.4.2 基本的MIPS流水线267267/79/793.4 流水线的实现流水实现的数据通路流水实现的数据通路268268/79/793.4 流水线的实现q寄存器的命名形式为:寄存器的命名形式为:x.
176、yx.yq所包含的字段的命名形式为:所包含的字段的命名形式为:x.ysx.ys 其中:其中:x x:流水寄存器名称流水寄存器名称 y y:具体寄存器名称具体寄存器名称 s s:字段名称字段名称 例如:例如: ID/EX.IRID/EX.IR:流水寄存器流水寄存器ID/EXID/EX中的子寄存器中的子寄存器IRIR IRID/EX.IRop IRID/EX.IRop:该寄存器的该寄存器的opop字段(即操作码字段)字段(即操作码字段)q流水寄存器的作用流水寄存器的作用n将各段的工作隔开,使得它们不会互相干扰。将各段的工作隔开,使得它们不会互相干扰。n保存相应段的处理结果。保存相应段的处理结果。2
177、69269/79/793.4 流水线的实现例如:例如:EX/MEM.ALUoEX/MEM.ALUo:保存保存EXEX段段ALUALU的运算结果的运算结果MEM/WB.LMDMEM/WB.LMD:保存保存MEMMEM段从数据存储器读出的数据段从数据存储器读出的数据n向后传递后面将要用到的数据或者控制信息向后传递后面将要用到的数据或者控制信息 所有有用的数据和控制信息每个时钟周期所有有用的数据和控制信息每个时钟周期 会随着指令在流水线中的流动往后流动一段。会随着指令在流水线中的流动往后流动一段。 增加了向后传递IR和从MEM/WB.IR回送到通用寄存 器组的连接。 将对PC的修改移到了IF段,以便
178、PC能及时地加 4,为取下一条指令做好准备。 270270/79/793.4 流水线的实现2.每一个流水段进行的操作qIRrsIRrsIRIR6.106.10qIRrtIRrtIRIR11.1511.15qIRrdIRrdIRIR16.2016.20 271271/79/79流水段流水段流水线的每个流水段的操作所有指令类型所有指令类型ALU ALU 指令指令load/store load/store 指令指令分支指令分支指令IFIFIDIDEXEXIF/ID.IR IF/ID.IR MemPC MemPCIF/ID.NPC, PC IF/ID.NPC, PC (ifif( EX/MEM.IRo
179、p = branch EX/MEM.IRop = branch )& & EX/MEM.condEX/MEM.cond)EX/MEM.ALUo else PC+4EX/MEM.ALUo else PC+4);); ID/EX.A RegsIF/ID.IRrsID/EX.A RegsIF/ID.IRrs;ID/EX.B RegsIF/ID.IRrtID/EX.B RegsIF/ID.IRrt;ID/EX.NPC IF/ID.NPCID/EX.NPC IF/ID.NPC;ID/EX.IR IF/ID.IRID/EX.IR IF/ID.IR;ID/EX.Imm ID/EX.Imm (IF/ID.IR
180、IF/ID.IR1616) )1616#IF/ID.IR#IF/ID.IR16.3116.31; EX/MEM.IR ID/EX.IREX/MEM.IR ID/EX.IR;EX/MEM.ALUo EX/MEM.ALUo ID/EX.A ID/EX.A funcfunc ID/EX.B ID/EX.B或或EX/MEM.ALUo EX/MEM.ALUo ID/EX.A ID/EX.A opop ID/EX.Imm ID/EX.Imm; EX/MEM.IR ID/EX.IREX/MEM.IR ID/EX.IR;EX/MEM.ALUo EX/MEM.ALUo ID/EX.A + ID/EX.Imm I
181、D/EX.A + ID/EX.Imm;EX/MEM.BID/EX.BEX/MEM.BID/EX.B; EX/MEM.IR ID/EX.IREX/MEM.IR ID/EX.IR;EX/MEM.ALUo EX/MEM.ALUo ID/EX.NPC + ID/EX.NPC + ID/EX.Imm ID/EX.Imm2 2;EX/MEM.cond EX/MEM.cond (ID/EX.A ID/EX.A =0 0);); (动画演示)(动画演示)(动画演示)(动画演示)(动画演示)272272/79/79流水段流水段任何指令类型任何指令类型ALU ALU 指令指令load/store load/sto
182、re 指令指令分支指令分支指令MEMMEMWBWBMEM/WB.IR EX/MEM.IRMEM/WB.IR EX/MEM.IR;MEM/WB.ALUo MEM/WB.ALUo EX/MEM.ALUo EX/MEM.ALUo; MEM/WB.IR EX/MEM.IRMEM/WB.IR EX/MEM.IR;MEM/WB.LMD MEM/WB.LMD MemEX/MEM.ALUo MemEX/MEM.ALUo;或或MemEX/MEM.ALUo MemEX/MEM.ALUo EX/MEM.B EX/MEM.B; RegsMEM/WB.IRrd RegsMEM/WB.IRrd MEM/WB.ALUo M
183、EM/WB.ALUo;或或RegsMEM/WB.IRrt RegsMEM/WB.IRrt MEM/WB.ALUo MEM/WB.ALUo; RegsMEM/WB.IRrt RegsMEM/WB.IRrt MEM/WB.LMD MEM/WB.LMD; 流水线的每个流水段的操作(动画演示)(动画演示)(动画演示)(动画演示)273273/79/793.4 流水线的实现3.流水线的控制主要是如何控制4个多路选择器。qMUX2MUX2:若若ID/EX.IRID/EX.IR中的指令是分支指令,则选择中的指令是分支指令,则选择ID/EX.NPCID/EX.NPC,否则选,否则选ID/EX.AID/EX.A
184、。qMUX3MUX3:若若ID/EX.IRID/EX.IR中的指令是寄存器寄存器型中的指令是寄存器寄存器型ALUALU指令,则选指令,则选ID/EX.BID/EX.B,否则选,否则选ID/EX.ImmID/EX.Imm。qMUX1MUX1:若若EX/MEM.IREX/MEM.IR中的指令是分支指令,而且中的指令是分支指令,而且EX/MEM.condEX/MEM.cond为真,则选为真,则选EX/MEM.ALUoEX/MEM.ALUo,即分支目标地,即分支目标地址,否则选址,否则选PC+4PC+4。qMUX4MUX4:若若MEM/WB.IRMEM/WB.IR中的指令是中的指令是loadload指
185、令,则选指令,则选MEM/WB.LMDMEM/WB.LMD,否则选,否则选MEM/WB.ALUoMEM/WB.ALUo。 274274/79/793.4 流水线的实现q第第5 5个多路器:个多路器:从从MEM/WBMEM/WB回传至通用寄存器组的写入回传至通用寄存器组的写入 地址应该是从地址应该是从MEM/WB.IRrdMEM/WB.IRrd 和和MEM/WB.IRrtMEM/WB.IRrt中选中选 一个。一个。n寄存器寄存器型寄存器寄存器型ALUALU指令:选择指令:选择MEM/WB.IRrdMEM/WB.IRrd ;n寄存器立即数型寄存器立即数型ALUALU指令和指令和loadload指令
186、:选择指令:选择MEM/WB.IRrtMEM/WB.IRrt 。解决数据冲突的问题 q所有的数据冲突均可以在所有的数据冲突均可以在IDID段检测到。段检测到。 如果存在数据冲突,就在相应的指令流出如果存在数据冲突,就在相应的指令流出IDID段之段之前将之暂停。前将之暂停。 完成该工作的硬件称为完成该工作的硬件称为流水线的互锁机制。流水线的互锁机制。 275275/79/793.4 流水线的实现q在在IDID段段确定需要什么样的定向,并设置相应的控制。确定需要什么样的定向,并设置相应的控制。 降低流水线的硬件复杂度。不必挂起已经改变降低流水线的硬件复杂度。不必挂起已经改变 了机器状态的指令)了机
187、器状态的指令)q也可以在也可以在使用操作数的那个时钟周期使用操作数的那个时钟周期的开始检测冲突的开始检测冲突 和确定必需的定向。和确定必需的定向。q检测冲突是通过比较寄存器地址是否相等来实现的。检测冲突是通过比较寄存器地址是否相等来实现的。举例:举例: loadload互锁互锁由于使用由于使用loadload的结果而引起的流水线互锁称为的结果而引起的流水线互锁称为loadload互锁。互锁。 276276/79/793.4 流水线的实现ID/EXID/EX中的操作码中的操作码 (ID/EX.IRopID/EX.IRop) IF/ID IF/ID中的操作码中的操作码 (IF/ID.IRopIF/
188、ID.IRop) 比较的操作数字段比较的操作数字段 load load RR ALU RR ALU ID/EX.IRrt=IF/ID.IRrsID/EX.IRrt=IF/ID.IRrsload load RR ALU RR ALU ID/EX.IRrt=IF/ID.IRrt ID/EX.IRrt=IF/ID.IRrt load load loadload、storestoreALUALU立即数或分支立即数或分支 ID/EX.IRrt=IF/ID.IRrs ID/EX.IRrt=IF/ID.IRrs 在在IDID段检测是否存在段检测是否存在RAWRAW冲突冲突 (这时(这时loadload指令在
189、指令在EXEX段)段) 277277/79/793.4 流水线的实现q若检测到若检测到RAWRAW冲突,流水线互锁机制必须在流水线中冲突,流水线互锁机制必须在流水线中 插入停顿,并使当前正处于插入停顿,并使当前正处于IFIF段和段和IDID段的指令不再段的指令不再 前进。前进。n将将ID/EX.IRID/EX.IR中的操作码改为全中的操作码改为全0 0 (全(全0 0表示空操作)表示空操作)nIF/IDIF/ID寄存器的内容回送到自己的入口寄存器的内容回送到自己的入口定向逻辑q要考虑的情况更多要考虑的情况更多 q通过比较流水寄存器中的寄存器地址来确定通过比较流水寄存器中的寄存器地址来确定278
190、278/79/793.4 流水线的实现例如: p若若 (ID/EX.IR.op=RR ALU)&(ID/EX.IR.op=RR ALU)&(EX/MEM.IR.op=RR EX/MEM.IR.op=RR ALUALU)& &(ID/EX.IRrt=EX/MEM.IRrdID/EX.IRrt=EX/MEM.IRrd),), 则则 EX/MEM.ALUoEX/MEM.ALUo定向到定向到ALUALU的下面一个输入。的下面一个输入。p若若(ID/EX.IRop=RR ALUID/EX.IRop=RR ALU)& &(MEM/WB.IRop=loadMEM/WB.IRop=load)& & (ID/E
191、X.IRrt=MEM/WB.IRrtID/EX.IRrt=MEM/WB.IRrt),), 则则 把把MEM/WB.LMDMEM/WB.LMD定向到定向到ALUALU的下面一个输入。的下面一个输入。279279/79/79q流水线流水线增设的定向路径增设的定向路径 280280/79/793.4 流水线的实现4.控制冲突分支指令的条件测试和分支目标地址计算在EX段完成,对PC的修改在MEM段完成。它所带来的分支延迟是3个时钟周期。减少分支延迟: (把上述工作提前到(把上述工作提前到IDID段进行)段进行)q在在IDID段段增设一个加法器,用于增设一个加法器,用于计算分支目标地址。计算分支目标地址
192、。q把条件测试把条件测试“=0=0?”的逻辑电路移到的逻辑电路移到IDID段。段。q这些结果直接回送到这些结果直接回送到IFIF段的段的MUX1MUX1。q改进后的流水线对分支指令的处理。改进后的流水线对分支指令的处理。281281/79/793.4 流水线的实现282282/79/793.4 流水线的实现流流 水水 段段分分 支支 指指 令令 操操 作作IFIFIDIDEXEXIF/ID.IR MemPCIF/ID.IR MemPC;IF/ID.NPC, PC IF/ID.NPC, PC (if( IF/ID.IRop= =branch)&(RegsIF/ID.IRrs = = (if( I
193、F/ID.IRop= =branch)&(RegsIF/ID.IRrs = = 0)0) IF/ID.NPC + (IF/ID.IR IF/ID.NPC + (IF/ID.IR1616) )1616 # # (IF/ID.IRIF/ID.IR16.3116.31 2 2) else PC+4) else PC+4); ID/EX.A RegsIF/ID.IRrsID/EX.A RegsIF/ID.IRrs; ID/EX.B RegsIF/ID.IRrtID/EX.B RegsIF/ID.IRrt;ID/EX.IR IF/ID.IRID/EX.IR IF/ID.IR;ID/EX.Imm ID/E
194、X.Imm ( IF/ID.IRIF/ID.IR1616 )16 16 # IF/ID. # IF/ID. IRIR16.3116.31; MEMMEMWBWB改进后流水线的分支操作改进后流水线的分支操作 283283/79/79在流水线处理机中,设置向量数据表示和相应的向量指令,称为向量处理机。不具有向量数据表示和相应的向量指令的流水线处理机,称为标量处理机。3.5 向量处理机3.5.1 向量处理方式以计算表达式以计算表达式 D D= =A A(B BC C)为例为例 A A、B B、C C、D D 长度为长度为N N的向量的向量284284/79/793.5 向量处理机1.横向(水平)处理
195、方式向量计算是按行的方式从左到右横向地进行。q先计算:先计算: d d1 1a a1 1( (b b1 1c c1 1) )q再计算:再计算: d d2 2a a2 2( (b b2 2c c2 2) )q q最后计算:最后计算: d dN Na aN N( (b bN Nc cN N) )组成循环程序进行处理。 k ki ib bi ic ci i d di ik ki ia ai iq数据相关:数据相关:N N次次 功能切换:功能切换:2 2N N次次不适合于向量处理机的并行处理。285285/79/793.5 向量处理机2.纵向 (垂直)处理方式向量计算是按列的方式从上到下纵向地进行。
196、k1 1b b1 1c c1 1 d d1 1k k1 1a a1 1先计算先计算 再计算再计算 k kN Nb bN Nc cN N d dN Nk kN Na aN N表示成向量指令: K KB BC C D DK KA Aq两条向量指令之间:两条向量指令之间: 数据相关:数据相关:1 1次次 功能切换:功能切换:1 1次次286286/79/793.5 向量处理机对处理机结构的要求:存储器存储器结构q向量指令的源向量和目的向量都存放在存储器向量指令的源向量和目的向量都存放在存储器 中,运算的中间结果需要送回存储器。中,运算的中间结果需要送回存储器。 q存储器存储器型操作的运算流水线存储器
197、存储器型操作的运算流水线q例如:例如:STAR-100STAR-100、CYBER-205CYBER-205287287/79/793.5 向量处理机3.纵横 (分组)处理方式又称为分组处理方式。把向量分成若干组,组内按纵向方式处理,依次处理各组。对于上述的例子,设: N N= =S Sn nr rq其中其中N N为向量长度,为向量长度,S S为组数,为组数,n n为每组的长度,为每组的长度,r r为余为余数。数。q若余下的若余下的r r个数也作为一组处理,则共有个数也作为一组处理,则共有S S+1+1组。组。运算过程为:288288/79/793.5 向量处理机q先算第先算第1 1组:组:
198、k k1 1n nb b1 1n nc1 1n n d d1 1n nk k1 1n na a1 1n nq再算第再算第2 2组:组: k k( (n n+1)+1)2 2n nb b( (n n+1)+1)2 2n nc c( (n n+1)+1)2 2n n d d( (n n+1)+1)2 2n nk k( (n n+1)+1)2 2n na a( (n n+1)+1)2 2n nq依次进行下去,直到最后一组:第依次进行下去,直到最后一组:第S S+1+1组。组。q每组内各用两条向量指令。每组内各用两条向量指令。 数据相关:数据相关:1 1次次 功能切换:功能切换:2 2次次289289
199、/79/793.5 向量处理机对处理机结构的要求:寄存器寄存器结构q设置能快速访问的向量寄存器,用于存放源向量、设置能快速访问的向量寄存器,用于存放源向量、 目的向量及中间结果,让运算部件的输入、输出端目的向量及中间结果,让运算部件的输入、输出端 都与向量寄存器相联,构成寄存器寄存器型操作都与向量寄存器相联,构成寄存器寄存器型操作 的运算流水线。的运算流水线。q典型的寄存器寄存器结构的向量处理机典型的寄存器寄存器结构的向量处理机 美国的美国的CRAY-1CRAY-1、我国的、我国的YH-1YH-1巨型机巨型机290290/79/793.5 向量处理机以CRAY-1机为例q美国美国CRAYCRA
200、Y公司公司 q19761976年年q每秒每秒1 1亿次浮点运算亿次浮点运算 q时钟周期:时钟周期:12.5 ns12.5 ns 1.CRAY-1的基本结构功能部件 共有共有1212条条可并行工作的可并行工作的单功能流水线单功能流水线,可分别流,可分别流水地进行地址、向量、标量的各种运算。水地进行地址、向量、标量的各种运算。3.5.2 向量处理机的结构291291/79/79292292/79/793.5 向量处理机q6 6个单功能流水部件:个单功能流水部件:进行向量运算进行向量运算 n整数加(整数加(3 3拍)拍)n逻辑运算(逻辑运算(2 2拍)拍)n移位(移位(4 4拍)拍)n浮点加(浮点加
201、(6 6拍)拍)n浮点乘(浮点乘(7 7拍)拍)n浮点迭代求倒数(浮点迭代求倒数(1414拍)拍) 括号中的数字为其流水经过的时间,每拍为一个括号中的数字为其流水经过的时间,每拍为一个时钟周期,即时钟周期,即12.5 ns12.5 ns。293293/79/793.5 向量处理机向量寄存组Vq由由512512个个6464位位的寄存器组成,分成的寄存器组成,分成8 8块块。q编号:编号:V V0 0V V7 7q每一个块称为一个每一个块称为一个向量寄存器向量寄存器,可存放一个长度,可存放一个长度 (即元素个数)不超过(即元素个数)不超过6464的向量。的向量。q每个向量寄存器可以每拍向功能部件提
202、供一个数据元每个向量寄存器可以每拍向功能部件提供一个数据元素,或者每拍接收一个从功能部件来的结果元素。素,或者每拍接收一个从功能部件来的结果元素。标量寄存器S和快速暂存器Tq标量寄存器有标量寄存器有8 8个个:S S0 0S S7 7 64 64位位q快速暂存器快速暂存器T T用于在标量寄存器和存储器之间提供缓用于在标量寄存器和存储器之间提供缓 冲。冲。 294294/79/793.5 向量处理机向量屏蔽寄存器VMq6464位位,每一位对应于向量寄存器的一个单元。,每一位对应于向量寄存器的一个单元。q作用:作用:用于向量的归并、压缩、还原和测试操作、用于向量的归并、压缩、还原和测试操作、 对向
203、量某些元素的单独运算等。对向量某些元素的单独运算等。2.CRAY-1向量处理的一个显著特点每个向量寄存器Vi都有连到6个向量功能部件的单独总线。每个向量功能部件也都有把运算结果送回向量寄存器组的总线。 295295/79/793.5 向量处理机只要不出现Vi冲突和功能部件冲突,各Vi之间和各 功能部件之间都能并行工作,大大加快了向量指 令的处理。qV Vi i冲突:冲突:并行工作的各向量指令的源向量或结果向量并行工作的各向量指令的源向量或结果向量使用了相同的使用了相同的V Vi i。例如:例如:源向量相同源向量相同 V V3 3V V1 1V V2 2 V V5 5VV4 4V V1 1q功能
204、部件冲突:功能部件冲突:并行工作的各向量指令要使用同一个并行工作的各向量指令要使用同一个功能部件。功能部件。例如:例如:都需使用乘法功能部件都需使用乘法功能部件 V V3 3VV1 1V V2 2 V V5 5VV4 4V V6 6296296/79/793.5 向量处理机3.CRAY-1向量指令类型qV Vk k V Vi i op V op Vj jqV Vk k S Si i op V op Vj jqV Vk k 主存主存q主存主存 V Vi i 297297/79/793.5 向量处理机提高向量处理机性能的方法设置多个功能部件,使它们并行工作。采用链接技术,加快一串向量指令的执行。采
205、用循环开采技术,加快循环的处理。采用多处理机系统,进一步提高性能。3.5.3 提高向量处理机性能的方法298298/79/793.5 向量处理机1.设置多个功能部件设置多个独立的功能部件。这些部件能并行工作,并各自按流水方式工作,从而形成了多条并行工作的运算操作流水线。例如:例如:CRAY-1CRAY-1向量处理机有向量处理机有4 4组组1212个个单功能流水部件:单功能流水部件:n向量部件:向量加,移位,逻辑运算向量部件:向量加,移位,逻辑运算n浮点部件:浮点加,浮点乘,浮点求倒数浮点部件:浮点加,浮点乘,浮点求倒数n标量部件:标量加,移位,逻辑运算,标量部件:标量加,移位,逻辑运算, 数数
206、“1 1”/ /计数计数n地址运算部件:整数加,整数乘地址运算部件:整数加,整数乘299299/79/793.5 向量处理机2.链接技术链接特征:具有先写后读相关的两条指令,在不出现功能部件冲突和源向量冲突的情况下,可以把功能部件链接起来进行流水处理,以达到加快执行的目的。链接特性的实质 把流水线把流水线定向定向的思想引入到向量执行过程的结果的思想引入到向量执行过程的结果。300300/79/793.5 向量处理机 例例3.33.3 在在CRAY-1CRAY-1上用链接技术进行向量运算上用链接技术进行向量运算 D D= =A A(B B+ +C C) 假设向量长度假设向量长度N N6464,向
207、量元素为浮点数,且向量,向量元素为浮点数,且向量B B、C C已存已存放在放在V V0 0和和V V1 1中。中。 画出链接示意图,并分析非链接执行和链接执行两种情况下画出链接示意图,并分析非链接执行和链接执行两种情况下的执行时间。的执行时间。 解解 用以下三条向量完成上述运算:用以下三条向量完成上述运算: V V3 3 存储器存储器/ / 访存取向量访存取向量A A V V2 2 V V0 0 V V1 1 / / 向量向量B B和向量和向量C C进行浮点加进行浮点加 V V4 4 V V2 2 V V3 3/ / 浮点乘,结果存入浮点乘,结果存入V V4 4301301/79/793.5
208、向量处理机假设:把向量数据元素送往向量功能部件以及把结果存入向量寄存器需要一拍时间,从存储器中把数据送入访存功能部件需要一拍时间。302302/79/793.5 向量处理机3条指令全部用串行方法执行,则执行时间为: (1 16 61 1)N N11 (1 16 61 1)N N11 (1 17 71 1)N N1 = 3N 1 = 3N 22 22 (拍)(拍)前两条指令并行执行,然后再串行执行第3条指令,则执行时间为: (1 16 61 1)N N11 (1 17 71 1)N N1 1 = 2 = 2N N 15 15 (拍)(拍)第1、2条向量指令并行执行,并与第3条指令链接执行。 30
209、3303/79/793.5 向量处理机q从访存开始到把第一个结果元素存入从访存开始到把第一个结果元素存入V V4 4所需的拍数所需的拍数 (亦称为(亦称为链接流水线的建立时间链接流水线的建立时间)为:)为: (1 16 61 1) (1 17 71 1) = 17 = 17 (拍)(拍)q3 3条指令的执行时间为:条指令的执行时间为: (1 16 61 1) (1 17 71 1) (N N1 1) = N= N16 16 (拍)(拍)304304/79/793.5 向量处理机进行向量链接的要求保证:无向量寄存器使用冲突和无功能部件使用冲突保证:无向量寄存器使用冲突和无功能部件使用冲突q只有在
210、前一条指令的第一个结果元素送入结果向量只有在前一条指令的第一个结果元素送入结果向量寄存器的那一个时钟周期才可以进行链接。寄存器的那一个时钟周期才可以进行链接。q当一条向量指令的两个源操作数分别是两条先行指当一条向量指令的两个源操作数分别是两条先行指令的结果寄存器时,要求先行的两条指令产生运算结果令的结果寄存器时,要求先行的两条指令产生运算结果的时间必须相等,即要求有关功能部件的通过时间相的时间必须相等,即要求有关功能部件的通过时间相等。等。q要进行链接执行的向量指令的向量长度必须相等,要进行链接执行的向量指令的向量长度必须相等,否则无法进行链接。否则无法进行链接。305305/79/793.5
211、 向量处理机3.分段开采技术 如果向量的长度大于向量寄存器的长度,该如何处理呢? 当向量的长度大于向量寄存器的长度时,必须把长向量分成长度固定的段,然后循环分段处理,每一次循环只处理一个向量段。这种技术称为分段开采技术。q由系统硬件和软件控制完成,对程序员是透明的。由系统硬件和软件控制完成,对程序员是透明的。 306306/79/793.5 向量处理机 例例3.43.4 设设A A和和B B是长度为是长度为N N的向量,考虑在的向量,考虑在Cray-1Cray-1向量处理器上向量处理器上实现以下的循环操作:实现以下的循环操作: DO 10 I = 1DO 10 I = 1,N N 10 A 1
212、0 A(I I)= 5.0 * B= 5.0 * B(I I) + C+ C307307/79/793.5 向量处理机S S1 1 5.0 5.0 ;将常数;将常数5.05.0送入标量寄存器送入标量寄存器S S1 1S S2 2 1.0 1.0 ;将常数;将常数1.01.0送入标量寄存器送入标量寄存器S S2 2VL NVL N ;在向量长度寄存器;在向量长度寄存器VLVL中设置向量长度中设置向量长度N NV V0 0 B B ;从存储器中将向量;从存储器中将向量B B读入向量寄存器读入向量寄存器V V0 0V V1 1 S S1 1 V V0 0 ;向量;向量B B中的每个元素分别和常数中的
213、每个元素分别和常数S S1 1相乘相乘V V2 2 S S2 2 + V+ V1 1 ;向量;向量V V1 1中的每个元素分别和常数中的每个元素分别和常数S S2 2 相加相加A VA V2 2 ;将计算结果从向量寄存器;将计算结果从向量寄存器V V2 2存入存储存入存储 器的向量器的向量A A 当当N N 64 64时,可以用以下指令序列:时,可以用以下指令序列:308308/79/793.5 向量处理机当N 64时,就需要进行分段开采。q循环次数循环次数K K :q余数余数L L: 309309/79/793.5 向量处理机S S1 1 5.0 5.0 ;将常数;将常数5.05.0送入标量
214、寄存器送入标量寄存器S S1 1S S2 2 1.0 1.0 ;将常数;将常数1.01.0送入标量寄存器送入标量寄存器S S2 2VL L VL L ;在向量长度寄存器;在向量长度寄存器VLVL中设置向量长度中设置向量长度L LV V0 0 B B ;从存储器中将向量;从存储器中将向量B0.L-1B0.L-1读入向量读入向量 ; 寄存器寄存器V V0 0V V1 1 S S1 1 * V* V0 0 ;向量向量B B中的每个元素分别和常数中的每个元素分别和常数S S1 1相乘相乘V V2 2 S S2 2 + V+ V1 1 ;向量;向量V V1 1中的每个元素分别和常数中的每个元素分别和常数
215、S S2 2相加相加A VA V2 2 ;将计算结果从向量寄存器;将计算结果从向量寄存器V V2 2存入存储器存入存储器 ;的向量;的向量A0.L-1A0.L-1处理余处理余数部分数部分, ,计算计算L L个元素个元素 310310/79/793.5 向量处理机For (I=0 to K-1) For (I=0 to K-1) V V0 0 B B ;从存储器中将向量;从存储器中将向量BL+I*64.L+I*64+63BL+I*64.L+I*64+63 ;读入向量寄存器;读入向量寄存器V V0 0V V1 1 S S1 1 * V* V0 0 ;向量;向量B B中的每个元素分别和常数中的每个元
216、素分别和常数S S1 1 ;相乘;相乘;V V2 2 S S2 2 + V+ V1 1 ;向量;向量V V1 1中的每个元素分别和常数中的每个元素分别和常数S S2 2 ;相加;相加A VA V2 2 ;将计算结果;将计算结果V V2 2存入存储器的向量存入存储器的向量 ; AL+I*64AL+I*64 L+I*64+63 L+I*64+63 循环循环K K次次, ,分段分段处理处理311311/79/793.5 向量处理机4.采用多处理机系统 许多新型向量处理机系统采用了多处理机系统结构。例如:qCRAY-2CRAY-2n包含了包含了4 4个个向量处理机向量处理机n浮点运算速度最高可达浮点运
217、算速度最高可达1800MFLOPS1800MFLOPSqCRAY Y-MPCRAY Y-MP、C90C90 最多可包含最多可包含1616个个向量处理机向量处理机 312312/79/79第4章 指令级并行张晨曦张晨曦 刘依刘依313313/79/794.1指令级并行的概念4.2指令的动态调度4.3动态分支预测技术4.4多指令流出技术4.5循环展开和指令调度314314/79/79几乎所有的处理机都利用流水线来使指令重叠并行执行,以达到提高性能的目的。这种指令之间存在的潜在并行性称为指令级并行。 (ILPILP:Instruction-Level ParallelismInstruction-L
218、evel Parallelism)本章研究:如何通过各种可能的技术,获得更多的指令级并行性。 硬件软件技术硬件软件技术 必须要硬件技术和软件技术互相配合,才能够最大必须要硬件技术和软件技术互相配合,才能够最大限度地挖掘出程序中存在的指令级并行。限度地挖掘出程序中存在的指令级并行。4.1 指令级并行4.1.1 指令级并行的概念315315/79/794.1 指令级并行1.流水线处理机的实际CPI理想流水线的CPI加上各类停顿的时钟周期数: CPICPI流水线流水线 = CPI= CPI理想理想 + + 停顿停顿结构冲突结构冲突 + + 停顿停顿数据冲突数据冲突 + + 停顿停顿控制冲突控制冲突理
219、想CPI是衡量流水线最高性能的一个指标。IPC:Instructions Per Cycle (每个时钟周期完成的指令条数)(每个时钟周期完成的指令条数)2.基本程序块基本程序块:一段除了入口和出口以外不包含其他分支的线性代码段。程序平均每57条指令就会有一个分支。316316/79/794.1 指令级并行3.循环级并行:使一个循环中的不同循环体并行执行。开发循环体中存在的并行性q最常见、最基本最常见、最基本指令级并行研究的重点之一 例如,考虑下述语句: for for (i=1i=1; i=500i2n2)分支预测的性能差不多。)分支预测的性能差不多。两位分支预测的状态转换如下所示: 369
220、369/79/794.3 动态分支预测技术两位分支预测中的操作有两个步骤:q分支预测。分支预测。n当分支指令到达译码段当分支指令到达译码段(IDID)时,根据从时,根据从BHTBHT读出读出的信息进行分支预测的信息进行分支预测 。n若预测正确,就继续处理后续的指令,流水线没有若预测正确,就继续处理后续的指令,流水线没有断流。否则,就要作废已经预取和分析的指令,恢断流。否则,就要作废已经预取和分析的指令,恢复现场,并从另一条分支路径重新取指令。复现场,并从另一条分支路径重新取指令。 q状态修改。状态修改。 4.BHT方法只在以下情况下才有用:判定分支是否成功所需的时间大于确定分支目标地址所需的时
221、间。 370370/79/794.3 动态分支预测技术前述前述5 5段经典流水线段经典流水线:由于判定分支是否成功和计算:由于判定分支是否成功和计算分支目标地址都是在分支目标地址都是在IDID段完成,所以段完成,所以BHTBHT方法不会给方法不会给该流水线带来好处。该流水线带来好处。5.研究结果表明:对于SPEC89测试程序来说,具有大小为4K的BHT的预测准确率为82%99%。 一般来说,采用一般来说,采用4K4K的的BHTBHT就可以了。就可以了。 6. BHT可以跟分支指令一起存放在指令Cache中,也可以用一个专门的硬件来实现。 371371/79/794.3 动态分支预测技术目标:将
222、分支的开销降为 0方法:分支目标缓冲将分支成功的分支指令的地址和它的分支目标地址都放到一个缓冲区中保存起来,缓冲区以分支指令的地址作为标识。这个缓冲区就是分支目标缓冲器(Branch-Target Buffer,简记为BTB,或者Branch-Target Cache)。 4.3.2 采用分支目标缓冲器BTB372372/79/794.3 动态分支预测技术1.BTB的结构 373373/79/794.3 动态分支预测技术看成是用专门的硬件实现的一张表格。 表格中的每一项至少有两个字段: q执行过的成功分支指令的地址;执行过的成功分支指令的地址;(作为该表的匹配标识(作为该表的匹配标识 )q预测
223、的分支目标地址。预测的分支目标地址。2.采用BTB后,在流水线各个阶段所进行的相关操作: 374374/79/79375375/79/794.3 动态分支预测技术3.采用BTB后,各种可能情况下的延迟 :指令在指令在BTBBTB中?中? 预测预测 实际情况实际情况 延迟周期延迟周期 是是 成功成功 成功成功 0 0 是是 成功成功 不成功不成功 2 2 不是不是 成功成功 2 2 不是不是 不成功不成功 0 0 376376/79/794.3 动态分支预测技术4.BTB的另一种形式 在分支目标缓冲器中存放一条或者多条分支目标处的指令。有三个潜在的好处:q更快地获得分支目标处的指令;更快地获得分
224、支目标处的指令;q可以一次提供分支目标处的多条指令,这对于多流出可以一次提供分支目标处的多条指令,这对于多流出处理器是很有必要的;处理器是很有必要的;q使我们可以进行称为使我们可以进行称为分支折叠分支折叠(branch foldingbranch folding)的的优化。优化。 实现零延迟无条件分支,甚至有时还可以做到实现零延迟无条件分支,甚至有时还可以做到零延迟条件分支。零延迟条件分支。377377/79/79378378/79/794.3 动态分支预测技术前瞻执行(speculation)的基本思想: 对分支指令的结果进行猜测,并假设这个猜测总是对的,然后按这个猜测结果继续取、流出和执行
225、后续的指令。只是执行指令的结果不是写回到寄存器或存储器,而是放到一个称为ROB(ReOrder Buffer)的缓冲器中。等到相应的指令得到“确认”(commit)(即确实是应该执行的)之后,才将结果写入寄存器或存储器。 4.3.3 基于硬件的前瞻执行379379/79/794.3 动态分支预测技术1.基于硬件的前瞻执行结合了三种思想:动态分支预测。用来选择后续执行的指令。在控制相关的结果尚未出来之前,前瞻地执行后续指令。用动态调度对基本块的各种组合进行跨基本块的调度。2.对Tomasulo算法加以扩充,就可以支持前瞻执行。 把Tomasulo算法的写结果和指令完成加以区分,分成两个不同的段:
226、 写结果写结果,指令确认指令确认 380380/79/794.3 动态分支预测技术写结果段q把前瞻执行的结果写到把前瞻执行的结果写到ROBROB中;中;q通过通过CDBCDB在指令之间传送结果,供需要用到这些结果在指令之间传送结果,供需要用到这些结果的指令使用。的指令使用。指令确认段 在分支指令的结果出来后,对相应指令的前瞻执行在分支指令的结果出来后,对相应指令的前瞻执行给予确认。给予确认。q如果前面所做的猜测是对的,把在如果前面所做的猜测是对的,把在ROBROB中的结果写到中的结果写到寄存器或存储器。寄存器或存储器。q如果发现前面对分支结果的猜测是错误的,那就不予如果发现前面对分支结果的猜测
227、是错误的,那就不予以确认,并从那条分支指令的另一条路径开始重新执以确认,并从那条分支指令的另一条路径开始重新执行。行。 381381/79/794.3 动态分支预测技术3.实现前瞻的关键思想: 允许指令乱序执行,但必须顺序确认。4.支持前瞻执行的浮点部件的结构 382382/79/79383383/79/794.3 动态分支预测技术ROB中的每一项由以下4个字段组成:q指令类型指令类型 指出该指令是分支指令、指出该指令是分支指令、storestore指令或寄存器操作指令。指令或寄存器操作指令。q目标地址目标地址 给出指令执行结果应写入的目标寄存器号(如果是给出指令执行结果应写入的目标寄存器号(
228、如果是 loadload和和ALUALU指令)或存储器单元的地址(如果是指令)或存储器单元的地址(如果是storestore指指 令)。令)。q数据值字段数据值字段 用来保存指令前瞻执行的结果,直到指令得到确认。用来保存指令前瞻执行的结果,直到指令得到确认。q就绪字段就绪字段 指出指令是否已经完成执行并且数据已就绪。指出指令是否已经完成执行并且数据已就绪。384384/79/794.3 动态分支预测技术Tomasulo算法中保留站的换名功能是由ROB来完成的。 5.采用前瞻执行机制后,指令的执行步骤:(在(在TomasuloTomasulo算法的基础上改造的算法的基础上改造的 )流出 q从浮点
229、指令队列的头部取一条指令。从浮点指令队列的头部取一条指令。q如果有空闲的保留站(设为如果有空闲的保留站(设为r r)且有空闲的)且有空闲的ROBROB项(设项(设为为b b),就流出该指令,并把相应的信息放入保留站),就流出该指令,并把相应的信息放入保留站r r和和ROBROB项项b b。q如果保留站或如果保留站或ROBROB全满,便停止流出指令,直到它们全满,便停止流出指令,直到它们都有空闲的项。都有空闲的项。 385385/79/794.3 动态分支预测技术执行 q如果有操作数尚未就绪,就等待,并不断地监测如果有操作数尚未就绪,就等待,并不断地监测CDBCDB。 ( (检测检测RAWRAW
230、冲突冲突) )q当两个操作数都已在保留站中就绪后,就可以执行该指当两个操作数都已在保留站中就绪后,就可以执行该指令的操作。令的操作。写结果 q当结果产生后,将该结果连同本指令在流出段所分配到当结果产生后,将该结果连同本指令在流出段所分配到的的ROBROB项的编号放到项的编号放到CDBCDB上,经上,经CDBCDB写到写到ROBROB以及所有等待以及所有等待该结果的保留站。该结果的保留站。q释放产生该结果的保留站。释放产生该结果的保留站。q storestore指令指令在本阶段完成,其操作为在本阶段完成,其操作为: : 386386/79/794.3 动态分支预测技术n如果要写入存储器的数据已经
231、就绪,就把该数如果要写入存储器的数据已经就绪,就把该数据写入分配给该据写入分配给该storestore指令的指令的ROBROB项。项。n否则,就监测否则,就监测CDBCDB,直到那个数据在,直到那个数据在CDBCDB上播送上播送出来,这时才将之写入分配给该出来,这时才将之写入分配给该storestore指令的指令的ROBROB项项。确认 对分支指令、storestore指令以及其他指令的处理不同:q其他指令其他指令(除分支指令和除分支指令和storestore指令)指令) 当该指令到达当该指令到达ROBROB队列的头部而且其结果已经队列的头部而且其结果已经就绪时,就把该结果写入该指令的目标寄存
232、器,并从就绪时,就把该结果写入该指令的目标寄存器,并从ROBROB中删除该指令。中删除该指令。 387387/79/794.3 动态分支预测技术qstorestore指令指令 处理与上面类似,只是它把结果写入存储器。处理与上面类似,只是它把结果写入存储器。q分支指令分支指令 n当预测错误的分支指令到达当预测错误的分支指令到达ROBROB队列的头部时,队列的头部时,清空清空ROBROB,并从分支指令的另一个分支重新开始,并从分支指令的另一个分支重新开始执行。执行。 (错误的前瞻执行)(错误的前瞻执行)n当预测正确的分支指令到达当预测正确的分支指令到达ROBROB队列的头部时,队列的头部时,该指令
233、执行完毕。该指令执行完毕。 388388/79/794.3 动态分支预测技术 例例4.34.3 假设浮点功能部件的延迟时间为:加法假设浮点功能部件的延迟时间为:加法2 2个时钟周期,个时钟周期,乘法乘法1010个时钟周期,除法个时钟周期,除法4040个时钟周期。对于下面的代码段,给个时钟周期。对于下面的代码段,给出当指令出当指令MUL.DMUL.D即将确认时的状态表内容。即将确认时的状态表内容。 L.D L.DF6,34F6,34(R2R2) L.D L.DF2,45F2,45(R3R3) MUL.D F0,F2,F4 MUL.D F0,F2,F4 SUB.D F8,F6,F2 SUB.D F
234、8,F6,F2 DIV.D F10,F0,F6 DIV.D F10,F0,F6 ADD.D F6,F8,F2 ADD.D F6,F8,F2389389/79/794.3 动态分支预测技术名称名称 保留站保留站 Busy Op Vj Vk Qj Qk Dest A Add1 no Add2 no Add3 no Mult1 no MUL Mem45+ RegsR2 RegsF4 #3 Mult2 yes DIV Mem34+RegsR2 #3 #5 前瞻执行中MUL.D确认前,保留站和ROB的状态 390390/79/79项号项号 ROB Busy 指令指令 状态状态 目的目的 Value 1
235、no L.D F6, 34(R2) 确认确认 F6 Mem34+RegsR2 2no L.D F2, 45(R3) 确认确认 F2 Mem45+RegsR3 3yes MUL.D F0, F2, F4 写结果写结果 F0 #2RegsF4 4yes SUB.D F8, F6, F2 写结果写结果 F8 #1#2 5yes DIV.D F10, F0, F6 执行执行 F10 6yes ADD.D F6,F8,F2 写结果写结果 F6 #4#2 字段字段 浮点寄存器状态浮点寄存器状态 F0 F2 F4 F6 F8 F10 F30 ROB项编号 3645Busy yes no no yes yes
236、 yes no391391/79/794.3 动态分支预测技术6.前瞻执行通过ROB实现了指令的顺序完成。能够实现精确异常。很容易地推广到整数寄存器和整数功能单元上。 主要缺点:所需的硬件太复杂。 392392/79/791.充分开发指令之间存在的并行性,找出不相关的指令序列,让它们在流水线上重叠并行执行。 2.增加指令间并行性最简单和最常用的方法开发循环级并行性循环的不同迭代之间存在的并行性。在把循环展开后,通过重命名和指令调度来开发更多的并行性。 4.5 循环展开和指令调度4.5.1 循环展开和指令调度的基本方法393393/79/794.5 循环展开和指令调度3.编译器完成这种指令调度的
237、能力受限于两个特性:程序固有的指令级并行性;流水线功能部件的执行延迟。4.本节中,我们使用的浮点流水线延迟为: 产生结果的指令 使用结果的指令 延迟(时钟周期数) 浮点计算 另一个浮点计算 3 浮点计算 浮点store(S.D) 2 浮点load(L.D) 浮点计算 1 浮点load(L.D) 浮点store(S.D) 0 394394/79/794.5 循环展开和指令调度假设采用第3章的5段整数流水线:分支的延迟:1个时钟周期。整数load指令的延迟:1个时钟周期。整数运算部件是全流水或者重复设置了足够的份数。 395395/79/794.5 循环展开和指令调度 例例4.64.6 对于下面的
238、源代码,转换成对于下面的源代码,转换成MIPSMIPS汇编语言,汇编语言,在在不进行指令调度不进行指令调度和和进行指令调度进行指令调度两种情况下,分析其两种情况下,分析其代码一次循环所需的执行时间。代码一次循环所需的执行时间。 for (i=1for (i=1; i=1000i=1000; i+)i+) xi = xi + s xi = xi + s;解解 把该程序翻译成把该程序翻译成MIPSMIPS汇编语言代码:汇编语言代码:假设假设R1R1的初值是指向第一个元素,的初值是指向第一个元素,8 8(R2R2)指向最后一个元素。指向最后一个元素。396396/79/794.5 循环展开和指令调度
239、LoopLoop:L.DL.D F0F0,0,0(R1R1) ADD.DADD.D F4F4, ,F0F0,F2,F2 S.D S.D F4F4, 0, 0(R1R1) DADDIU DADDIU R1R1,R1,R1,#-8#-8 BNE BNE R1R1,R2,Loop,R2,Loop其中:p整数寄存器整数寄存器R1R1:指向向量中的当前元素。指向向量中的当前元素。 (初值为向量中最高端元素的地址)(初值为向量中最高端元素的地址)p浮点寄存器浮点寄存器F2F2:用于保存常数用于保存常数s s。 397397/79/794.5 循环展开和指令调度不进行指令调度的情况下,程序的实际执行情况:
240、指令流出时钟指令流出时钟 Loop: L.DLoop: L.D F0F0,0,0(R1R1) 1 1 (空转)(空转) 2 2 ADD.D ADD.D F4F4, ,F0F0,F2 ,F2 3 3 (空转)空转) 4 4 (空转)(空转) 5 5 S.D S.D F4F4, 0, 0(R1R1) 6 6 DADDIU DADDIU R1R1,R1,R1,# -8 # -8 7 7 (空转)(空转) 8 8 BNE BNE R1R1,R2,Loop ,R2,Loop 9 9 (空转)(空转) 1010 每个元素的操作需要每个元素的操作需要1010个个时钟周期,其中时钟周期,其中5 5个个是空转周
241、期。是空转周期。398398/79/794.5 循环展开和指令调度指令调度以后,程序的执行情况如下:q把把DADDIUDADDIU指令调度到了指令调度到了L.DL.D指令和指令和ADD.DADD.D指令之间的指令之间的“空转空转”拍。拍。q把把S.DS.D指令放到了分支指令的延迟槽中。指令放到了分支指令的延迟槽中。q对存储器地址偏移量进行调整。对存储器地址偏移量进行调整。 399399/79/794.5 循环展开和指令调度 Loop: L.DLoop: L.D F0F0,0,0(R1R1) (空转)(空转) ADD.DADD.D F4F4, ,F0F0,F2 ,F2 (空转)空转) (空转)(
242、空转) S.DS.D F4F4, 0, 0(R1R1) DADDIU DADDIU R1R1,R1,#-8 ,R1,#-8 (空转)(空转) BNEBNE R1R1,R2,Loop ,R2,Loop (空转)(空转)Loop: L.D F0, 0(R1)Loop: L.D F0, 0(R1) DADDIU R1,R1,#-8DADDIU R1,R1,#-8 ADD.D F4, F0, F2 ADD.D F4, F0, F2 (空转)(空转) BNE R1,R2,LoopBNE R1,R2,Loop S.D F4S.D F4,8(R1) 8(R1) 400400/79/794.5 循环展开和指令
243、调度 指令流出时钟指令流出时钟Loop: L.D F0, 0(R1)Loop: L.D F0, 0(R1) 1 1 DADDIU R1, R1, #-8 DADDIU R1, R1, #-8 2 2 ADD.D F4, F0, F2 ADD.D F4, F0, F2 3 3 (空转)(空转) 4 4 BNE R1, Loop BNE R1, Loop 5 5 S.D F4 S.D F4,8(R1) 8(R1) 6 6 一个元素的操作时间从一个元素的操作时间从1010个个时钟周期减少到时钟周期减少到6 6个个, ,其中其中5 5个个周期是有指令执行的,周期是有指令执行的,1 1个为个为空转周期。
244、空转周期。401401/79/794.5 循环展开和指令调度例子中的问题及解决方案q只有只有L.DL.D、ADD.DADD.D和和S.DS.D这这3 3条指令是有效操作。条指令是有效操作。 ( (取、加、存取、加、存) )n占用占用3 3个时钟周期。个时钟周期。n而而DADDIUDADDIU、空转、空转和和BENBEN这这3 3个时钟周期都是附加个时钟周期都是附加的循环控制开销。的循环控制开销。q循环展开技术循环展开技术n把循环体的代码复制多次并按顺序排列,然后把循环体的代码复制多次并按顺序排列,然后相应调整循环的结束条件。相应调整循环的结束条件。n这给编译器进行指令调度带来了更大的空间。这给
245、编译器进行指令调度带来了更大的空间。 402402/79/794.5 循环展开和指令调度 例例4.7 4.7 (体现循环展开技术的特点)体现循环展开技术的特点) 将上述例子中的循环展开将上述例子中的循环展开3 3次得到次得到4 4个循环体,然后对展开个循环体,然后对展开后的指令序列在不调度和调度两种情况下,分析代码的性能。假后的指令序列在不调度和调度两种情况下,分析代码的性能。假定定R1R1的初值为的初值为3232的倍数,即循环次数为的倍数,即循环次数为4 4的倍数。消除冗余的指的倍数。消除冗余的指令,并且不要重复使用寄存器。令,并且不要重复使用寄存器。 解解 无需在循环体后面增加补偿代码无需
246、在循环体后面增加补偿代码403403/79/794.5 循环展开和指令调度qF0F0、F4F4:用于展开后的第:用于展开后的第1 1个循环体个循环体qF2F2:保存常数:保存常数qF6F6、F8F8:展开后的第:展开后的第2 2个循环体个循环体qF10F10、F12F12:第:第3 3个循环体个循环体qF14F14、F16F16:第:第4 4个循环体个循环体 分配寄存器分配寄存器(不重复使用寄存器(不重复使用寄存器 ):):404404/79/79展开后没有调度的代码如下: 指令流出时钟指令流出时钟Loop:Loop:L.DL.DF0,0(R1)F0,0(R1)1 1(空转)(空转)2 2AD
247、D.DADD.DF4,F0,F2F4,F0,F23 3(空转)(空转)4 4(空转)(空转)5 5S.DS.DF4, 0F4, 0(R1R1)6 6L.DL.DF6,-8(R1)F6,-8(R1)7 7(空转)(空转)8 8ADD.DADD.DF8,F6,F2F8,F6,F29 9(空转)(空转)1010(空转)(空转)1111S.DS.DF8, -8F8, -8(R1R1)1212L.DL.DF10,-16(R1)F10,-16(R1)1313(空转)(空转)1414 指令流出时钟指令流出时钟ADD.DADD.DF12,F10,F2F12,F10,F21515(空转)(空转)1616(空转)
248、(空转)1717S.DS.DF12,-16(R1)F12,-16(R1)1818L.DL.DF14,-24(R1)F14,-24(R1)1919(空转)(空转)2020ADD.DADD.DF16,F14,F2F16,F14,F22121(空转)(空转)2222(空转)(空转)2323S.DS.DF16,-24(R1)F16,-24(R1)2424DADDIUDADDIU R1,R1,#-32R1,R1,#-322525(空转)(空转)2626BNEBNER1,R2,LoopR1,R2,Loop2727(空转)(空转)2828405405/79/794.5 循环展开和指令调度结果分析:q这个循环
249、每遍共使用了这个循环每遍共使用了2828个时钟周期。个时钟周期。q有有4 4个循环体,完成个循环体,完成4 4个元素的操作。个元素的操作。 平均每个元素使用平均每个元素使用28/4=728/4=7个时钟周期个时钟周期q原始循环的每个元素需要原始循环的每个元素需要1010个时钟周期。个时钟周期。 节省的时间:节省的时间:从减少循环控制的开销中获得的。从减少循环控制的开销中获得的。q在整个展开后的循环中,实际指令只有在整个展开后的循环中,实际指令只有1414条,其他条,其他1414个周期都是空转。个周期都是空转。 效率并不高效率并不高406406/79/79对指令序列进行优化调度,以减少空转周期:
250、 指令流出时钟指令流出时钟Loop:Loop:L.DL.DF0,0(R1)F0,0(R1) 1 1L.DL.DF6,-8(R1)F6,-8(R1) 2 2L.DL.DF10,-16(R1)F10,-16(R1) 3 3L.DL.DF14,-24(R1)F14,-24(R1) 4 4ADD.DADD.DF4,F0,F2F4,F0,F2 5 5ADD.DADD.DF8,F6,F2F8,F6,F2 6 6ADD.DADD.DF12,F10,F2F12,F10,F2 7 7ADD.DADD.DF16,F14,F2F16,F14,F2 8 8S.DS.DF4,0(R1)F4,0(R1) 9 9S.DS.
251、DF8,-8(R1)F8,-8(R1) 10 10DADDIUDADDIUR1,R1,#-32R1,R1,#-32 12 12S.DS.DF12,16(R1)F12,16(R1) 11 11BNEBNER1,R2,LoopR1,R2,Loop 13 13S.DS.DF16,8(R1)F16,8(R1) 14 14407407/79/794.5 循环展开和指令调度结果分析:q没有数据相关引起的空转等待。没有数据相关引起的空转等待。 整个循环仅仅使用了整个循环仅仅使用了1414个时钟周期。个时钟周期。 平均每个元素的操作使用平均每个元素的操作使用14/4=3.514/4=3.5个时钟周期。个时钟周
252、期。q通过循环展开、寄存器重命名和指令调度,可以有效通过循环展开、寄存器重命名和指令调度,可以有效地开发出指令级并行。地开发出指令级并行。 408408/79/794.5 循环展开和指令调度5.循环展开和指令调度时要注意以下几个方面:保证正确性。 在循环展开和调度过程中尤其要注意在循环展开和调度过程中尤其要注意两个地方的正两个地方的正确性:确性:循环控制,操作数偏移量的修改。循环控制,操作数偏移量的修改。注意有效性。 只有能够找到不同循环体之间的无关性,才能有效只有能够找到不同循环体之间的无关性,才能有效地使用循环展开。地使用循环展开。使用不同的寄存器。 (否则可能导致新的冲突)(否则可能导致
253、新的冲突)删除多余的测试指令和分支指令,并对循环结束代码和新的循环体代码进行相应的修正。409409/79/794.5 循环展开和指令调度注意对存储器数据的相关性分析 例如:例如:对于对于loadload指令和指令和storestore指令,如果它们在不同指令,如果它们在不同的循环迭代中访问的存储器地址是不同的,它们就是相互的循环迭代中访问的存储器地址是不同的,它们就是相互独立的,可以相互对调。独立的,可以相互对调。注意新的相关性 由于原循环不同次的迭代在展开后都到了同一次循由于原循环不同次的迭代在展开后都到了同一次循环体中,因此可能带来新的相关性。环体中,因此可能带来新的相关性。 41041
254、0/79/794.5 循环展开和指令调度 根据表4.4给出的延迟条件,超标量处理器如何进行循环展开和指令调度?4.5.2 静态超标量处理机中的循环展开411411/79/794.5 循环展开和指令调度 例例4.84.8 下面是前面使用的循环程序段,对其进行循环展开,并下面是前面使用的循环程序段,对其进行循环展开,并在超标量流水线上进行调度。在超标量流水线上进行调度。 Loop:Loop: L.DL.DF0,0F0,0(R1R1)/ / 取一个数组元素放入取一个数组元素放入F0F0 ADD.D ADD.DF4,F0,F2F4,F0,F2/ / 加上在加上在F2F2中的标量中的标量 S.DS.DF
255、4,0F4,0(R1R1)/ / 存结果存结果 DADDIUDADDIUR1,R1,#-8R1,R1,#-8 / / 将指针减少将指针减少8 8(每个数据占(每个数据占8 8个字节)个字节) BNEBNER1,R2,LoopR1,R2,Loop / / 若若R1R1不等于不等于R2R2,表示尚未结束,转移到,表示尚未结束,转移到LoopLoop继续继续 412412/79/79解解 将循环展开将循环展开5 5遍并调度,可得如下代码:遍并调度,可得如下代码: Loop:Loop:L.DL.DF0,0(R1)F0,0(R1)L.DL.DF6,-8(R1)F6,-8(R1)L.DL.DF10,-16
256、(R1)F10,-16(R1)L.DL.DF14,-24(R1)F14,-24(R1)L.DL.DF18,-32(R1)F18,-32(R1)ADD.DADD.DF4,F0,F2F4,F0,F2ADD.DADD.DF8,F6,F2F8,F6,F2ADD.DADD.DF12,F10,F2F12,F10,F2ADD.DADD.DF16,F14,F2F16,F14,F2ADD.D F20,F18.F2ADD.D F20,F18.F2S.DS.DF4,0(R1)F4,0(R1)S.DS.DF8,-8(R1)F8,-8(R1)S.DS.DF12,-16(R1)F12,-16(R1)DADDIUDADDI
257、U R1,R1,# -40R1,R1,# -40S.DS.DF16,16 (R1)F16,16 (R1)BNEBNER1,R2,LoopR1,R2,LoopS.DS.DF20,8(R1)F20,8(R1) 413413/79/79q进一步针对超标量进行调度后的指令序列如下所示进一步针对超标量进行调度后的指令序列如下所示 整数指令整数指令 浮点指令浮点指令 时钟周期时钟周期Loop: L.D F0(R1)1 L.D F6,-8(R1)2 L.D F10,-16(R1) ADD.D F4,F0,F23 L.D F14,-24(R1) ADD.D F8,F6,F24 L.D F18,-32(R1)
258、ADD.D F12,F10,F25 S.D F4,0(R1) ADD.D F16,F14,F26 S.D F8,-8(R1) ADD.D F20,F18,F27 S.D F12,-16(R1)8 DADDIU R1,R1,#-409 S.D F16,16 (R1)10 BNE R1,R2,Loop11 S.D F20,8(R1)12414414/79/794.5 循环展开和指令调度q每次循环需每次循环需1212个时钟周期,即计算每个结果需要个时钟周期,即计算每个结果需要2.42.4个时个时钟周期。钟周期。 (每次循环计算(每次循环计算5 5个结果)个结果)q在普通的在普通的MIPSMIPS流水
259、线上,没有调度的代码迭代一次为流水线上,没有调度的代码迭代一次为9 9个个时钟周期,调度后为时钟周期,调度后为6 6个时钟周期,展开个时钟周期,展开4 4次并调度后每次并调度后每个迭代为个迭代为3.53.5个时钟周期。个时钟周期。q与之相比,超标量流水线的性能提高分别为:与之相比,超标量流水线的性能提高分别为: 3.753.75倍、倍、2.52.5倍、倍、1.41.4倍倍q在这个例子中可以看到,超标量在这个例子中可以看到,超标量MIPSMIPS流水线的流水线的性能主要性能主要受限于:受限于:整数计算和浮点计算之间的平衡问题。整数计算和浮点计算之间的平衡问题。本例中没有足够的浮点指令来使两路流水线都达到饱和。本例中没有足够的浮点指令来使两路流水线都达到饱和。