计算机系统结构:第四章 指令级并行_第1页
计算机系统结构:第四章 指令级并行_第2页
计算机系统结构:第四章 指令级并行_第3页
计算机系统结构:第四章 指令级并行_第4页
计算机系统结构:第四章 指令级并行_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第四章 指令级并行Instruction-Level Parallelism, ILP指令之间存在的潜在并行性称为指令级并行(Instruction-Level parallelism, ILP)思考:是什么阻碍实现指令级并行? CPI流水线 = CPI理想 ?第四章 指令集并行 -指令的相关第四章 指令集并行流水线实际CPI理想流水线的CPI加上各类停顿的时钟周期数: CPI流水线 = CPI理想 + 停顿结构冲突 + 停顿数据冲突+ 停顿控制冲突理想CPI是衡量流水线最高性能的一个指标。IPC:Instructions Per Cycle (每个时钟周期完成的指令条数)第四章 指令级并行

2、指令级并行相关技术技术主要克服的停顿相关章节基本流水线调度数据先写后读冲突停顿3.4寄存器换名写后写和读后写3.4指令动态调度(记分牌和Tomasulo算法)各种数据冲突停顿4.2动态分支预测控制冲突停顿4.3前瞻所有数据/控制冲突停顿4.3多指令流出(超标量和超长指令字)提高理想CPI4.4循环展开控制冲突停顿4.5静态调度依靠编译器对代码进行静态调度,以减少相关和冲突。它不是在程序执行的过程中、而是在编译期间进行代码调度和优化。通过把相关的指令拉开距离来减少可能产生的停顿。动态调度在程序的执行过程中,依靠专门硬件对代码进行调度,减少数据相关导致的停顿。第四章 指令级并行指令的动态调度优点能

3、够处理一些在编译时情况不明的相关(比如涉及到存储器访问的相关),并简化了编译器;能够使本来是面向某一流水线优化编译的代码在其他的流水线(动态调度)上也能高效地执行。代价 硬件复杂性的显著增加第四章 指令级并行指令的动态调度 简单流水线的最大的局限性:指令按序流出和执行考虑下面一段代码:DIV.DF4,F0,F2SUB.DF10,F4,F6 ADD.DF12,F6,F14 SUB.D指令与DIV.D指令关于F4相关,导致流水线停顿。ADD.D指令与流水线中的任何指令都没有关系,但也因此受阻。动态调度的基本思想第四章 指令级并行指令的动态调度为了允许乱序执行,我们将5段流水线的译码阶段再分为两个阶

4、段:流出(Issue,IS):指令译码,检查是否存在结构冲突。 (in-order issue)读操作数(Read Operands,RO):等待数据冲突消失,然后读操作数。 (out of order execution)ISRO检测结构冲突检测数据冲突第四章 指令级并行指令的动态调度第四章 指令级并行指令的动态调度简单的5段流水线中,是不会发生读后写冲突和写后写冲突的。但乱序执行就使得它们可能发生了。例如,考虑下面的代码 DIV.D F10, F0, F2 SUB.D F10, F4, F6 ADD.D F6, F8, F14存在反相关存在输出相关Tomasulo算法可以通过使用寄存器重命

5、名来消除。 动态调度的流水线支持多条指令同时处于执行当中。要求:具有多个功能部件、或者流水功能部件、或者兼而有之。我们假设具有多个功能部件。第四章 指令级并行指令的动态调度指令乱序完成带来的最大问题: 异常处理比较复杂 (精确异常处理、不精确异常处理) 动态调度要保持正确的异常行为只有那些在程序严格按程序顺序执行时会发生的异常,才能真正发生。保持正确的异常行为:对于一条会产生异常的指令来说,只有当处理机确切地知道该指令将被执行后,才允许它产生异常。第四章 指令级并行指令的动态调度精确异常和不精确异常不精确异常:当执行指令i导致发生异常时,处理机的现场(状态)与严格按程序顺序执行时指令i的现场不

6、同。精确异常:处理机的现场跟严格按程序顺序执行时指令i的现场相同。不精确异常产生原因?第四章 指令级并行指令的动态调度核心思想记录和检测指令相关,操作数一旦就绪就立即执行,把发生RAW冲突的可能性减少到最小;通过寄存器换名来消除WAR冲突和WAW冲突。第四章 指令级并行指令的动态调度 Tomasulo算法第四章 指令级并行指令的动态调度 Tomasulo算法基本思想浮点寄存器FP共有16个浮点寄存器:F0,F2,F4,F30。它们通过一对总线连接到功能部件,并通过CDB连接到store缓冲器。指令队列指令部件送来的指令放入指令队列指令队列中的指令按先进先出的顺序流出运算部件浮点加法器完成加法和

7、减法操作浮点乘法器完成乘法和除法操作 第四章 指令级并行指令的动态调度 Tomasulo算法基本思想保留站(reservation station) 每个保留站中保存一条已经流出并等待到本功能部件执行的指令(相关信息)。包括:操作码、操作数以及用于检测和解决冲突的信息。在一条指令流出到保留站的时候,如果该指令的源操作数已经在寄存器中就绪,则将之取到该保留站中。如果操作数还没有计算出来,则在该保留站中记录将产生这个操作数的保留站的标识。浮点加法器有3个保留站:ADD1,ADD2,ADD3浮点乘法器有两个保留站:MULT1,MULT2 每个保留站都有一个标识字段,唯一地标识了该保留站。 第四章 指

8、令级并行指令的动态调度 Tomasulo算法基本思想load缓冲器和store缓冲器 存放读/写存储器的数据或地址 load缓冲器的作用有3个:存放用于计算有效地址的分量;记录正在进行的load访存,等待存储器的响应;保存已经完成了的load的结果(即从存储器取来的数据),等待CDB传输。store缓冲器的作用有3个:存放用于计算有效地址的分量;保存正在进行的store访存的目标地址,该store正在等待存储数据的到达;保存该store的地址和数据,直到存储部件接收。第四章 指令级并行指令的动态调度 Tomasulo算法基本思想公共数据总线CDB (一条重要的数据通路)所有功能部件的计算结果都

9、是送到CDB上,由它把这些结果直接送到(播送到)各个需要该结果的地方。在具有多个执行部件且采用多流出(即每个时钟周期流出多条指令)的流水线中,需要采用多条CDB。第四章 指令级并行指令的动态调度 Tomasulo算法基本思想在Tomasulo算法中,寄存器换名是通过保留站和流出逻辑来共同完成的。当指令流出时,如果其操作数还没有计算出来,则将该指令中相应的寄存器号换名为将产生这个操作数的保留站的标识。指令流出到保留站后,其操作数寄存器号或者换成了数据本身(如果该数据已经就绪),或者换成了保留站的标识,不再与寄存器有关系。 第四章 指令级并行指令的动态调度 Tomasulo算法基本思想Tomasu

10、lo算法具有以下两个特点:冲突检测和指令执行控制 是分布的。 每个功能部件的保留站中的信息决定了什么时候指令可以在该功能部件开始执行。计算结果通过CDB直接从产生它的保留站传送到所有需要它的功能部件,而不用经过寄存器。第四章 指令级并行指令的动态调度 Tomasulo算法基本思想使用Tomasulo算法的流水线需3段:流出:从指令队列的头部取一条指令。如果该指令的操作所要求的保留站有空闲的,就把该指令送到该保留站(设为r)。如果其操作数在寄存器中已经就绪,就将这些操作数送入保留站r。如果其操作数还没有就绪,就把将产生该操作数的保留站的标识送入保留站r。一旦被记录的保留站完成计算,它将直接把数据

11、送给保留站r。(寄存器换名和对操作数进行缓冲,消除WAR冲突)完成对目标寄存器的预约工作 (消除了WAW冲突)如果没有空闲的保留站,指令就不能流出。 (发生了结构冲突) 第四章 指令级并行指令的动态调度 Tomasulo算法执行顺序执行 当两个操作数都就绪后,本保留站就用相应的功能部件开始执行指令规定的操作。 load和store指令的执行需要两个步骤:计算有效地址(要等到基地址寄存器就绪)把有效地址放入load或store缓冲器写结果 功能部件计算完毕后,就将计算结果放到CDB上,所有等待该计算结果的寄存器和保留站(包括store缓冲器)都同时从CDB上获得所需要的数据。 第四章 指令级并行

12、指令的动态调度 Tomasulo算法执行顺序 例4.1 对于下述指令序列,给出当第一条指令完成并写入结果时,Tomasulo算法所用的各信息表中的内容。 L.DF6,34(R2) L.DF2,45(R3) MUL.DF0,F2,F4 SUB.DF8,F2,F6 DIV.DF10,F0,F6 ADD.DF6,F8,F2 第四章 指令级并行指令的动态调度 Tomasulo算法执行顺序指 令 指令状态表 流出 执行 写结果 L.D F6 , 34(R2) L.D F2 , 45(R3) MUL.DF0 , F2 , F4 SUB.D F8 , F6 , F2 DIV.DF10 , F0 , F6 A

13、DD.D F6 , F8 , F2 第四章 指令级并行指令的动态调度 Tomasulo算法执行顺序Tomasulo算法具有两个主要的优点:冲突检测逻辑是分布的 (通过保留站和CDB实现)如果有多条指令已经获得了一个操作数,并同时在等待同一运算结果,那么这个结果一产生,就可以通过CDB同时播送给所有这些指令,使它们可以同时执行。消除了WAW冲突和WAR冲突导致的停顿 使用保留站进行寄存器换名,并且操作数一旦就绪就将之放入保留站。注意: 指令是按照程序的顺序流出的,但是不一定按照程序顺序执行。 第四章 指令级并行指令的动态调度 Tomasulo算法执行顺序 每个时钟周期流出n条,称为 n 流出。处

14、理器一个时钟周期流出多条指令受到以下两个因素的限制: 流出n条指令的处理器中,遇到分支指令的速度也快了n倍; 根据Amdahl定律可知,随着机器CPI的降低,控制相关对性能的影响越来越大。第四章 指令级并行动态分支预测技术回忆:前面所讲过的静待分支处理的方法: ? 和 ?, 特点是?动态分支预测着重于: 根据分支指令过去的表现来预测将来的行为。第四章 指令级并行动态分支预测技术动态分支预测必须解决的问题: 如何记录一个分支操作的历史。 决定预测的走向。 预测错误时,如何恢复现场。 记录分支历史的方法有以下几种: (1)仅仅记录最近一次或最近几次的分支历史; (2)记录分支成功的目标地址; (3

15、)记录分支历史和分支目标地址,相当于前 面两种方式的结合; (4)记录分支目标地址的一条或若干条指令。 分支历史表(Branch History Table,BHT): 目前广泛使用的最简单的动态分支预测技术。 使用一片存储区域,记录最近一次或几次分支特征的历史。 1. 只有1个预测位的分支历史表 索引:分支指令地址的低位。存储区:1位的分支历史记录位,又称为预测位,记录该指令最近一次分支是否成功。(“0”记录分支不成功 ;“1”记录分支成功)第四章 指令级并行动态分支预测技术-分支历史表状态转换图 只有1个预测位的分支预测缓冲状态转换图 第四章 指令级并行动态分支预测技术-分支历史表2. 分

16、支预测缓冲技术包括两个步骤 分支预测 如果当前缓冲记录的预测位为“1”,则预 测分为成功;如果预测位为“0”,则预测分支为不成功。预测位修改 如果当前分支成功,则预测位置为“1”; 如果当前分支不成功,预测位置为“0”。 3.分支预测错误时,预测位就被修改,并且需 要恢复现场,程序从分支指令处重新执行。 第四章 指令级并行动态分支预测技术-分支历史表分支预测执行不成功和重新执行过程 第四章 指令级并行动态分支预测技术-分支历史表例4.6 一个循环共循环10次,它将分支成功9次,1次不成功。假设此分支的预测位始终在缓冲区中。那么分支预测的准确性是多少? 解 这种固定的预测将会在第一次和最后一次

17、循环中出现预测错误。第一次预测错误是源于上次程序的执行,因为上一次程序最后一次分支是不成功的。最后一次预测错误是不可避免的,因为前面的分支总是成功,共九次。因此,尽管分支成功的比例率是90%,但分支预测的准确性为80%(两次不正确,8次确)。 第四章 指令级并行动态分支预测技术-分支历史表4. 采用两个预测位的预测机制。 在两个预测位的分支预测中,更改对分支的预测必须有两次连续预测错误。 第四章 指令级并行动态分支预测技术-分支历史表5. n位分支预测缓冲采用n位计数器,则计数器的值在0到2n-1之间: 当计数器的值大于或等于最大值的一半(2n-1)时,则预测下一次分支成功;否则预测下一次分支

18、不成功。预测位的修改和两位预测时相同:当分支成功时计数器的值加1,不成功时减1。研究表明: n位分支预测的性能和两位分支预测差不多,因而大多数处理器都只采用两位分支预测。第四章 指令级并行动态分支预测技术-分支历史表6.对于真实的应用程序,两位的分支预测的准确率可达到多少呢? SPEC89标准程序的测试: 在使用4096个记录项的缓冲区时,分支 预测准确率可达到99%到82%。 使用无穷多历史记录项的分支预测缓冲, 只有少量程序的分支预测准确率仅仅比4096 个记录项提高1%,多数程序的预测精度是相 同的。 因此,对于SPEC89应用环境而言,4K的 缓冲区是恰当的。第四章 指令级并行动态分支

19、预测技术-分支历史表目标:将分支的开销降为零。方法:分支目标缓冲 将分支成功的分支指令的地址和它的分支目标地址都放到一个缓冲区中保存起来,缓冲区以分支指令的地址作为标示;取指令阶段,所有指令地址都与保存的标示作比较,一旦相同,我们就认为本指令是分支指令,且认为它转移成功,并且它的分支目标(下一条指令)地址就是保存在缓冲区中的分支目标地址。 这个缓冲区就是分支目标缓冲区(Branch-Target Buffer,简记为BTB,或者Branch-Target Cache)。 第四章 指令级并行动态分支预测技术-分支目标缓冲第四章 指令级并行动态分支预测技术-分支目标缓冲在流水线的各个阶段中,具有分

20、支目标缓冲的工作分配。问题:解决预测错误或不命中的延迟。 第四章 指令级并行动态分支预测技术-分支目标缓冲指令在BTB中?是是不是不是预测结果成功成功实际的动作成功不成功成功不成功延迟周期0220采用BTB技术时指令在各种情况下的延迟 第四章 指令级并行动态分支预测技术-分支目标缓冲例4.7 按表4.3计算分支转移总的延迟,根据下面的假 设,计算分支目标缓冲的性能。 (1)对于BTB中的指令,预测准确率90% (2)缓冲区命中率90% (3)不在BTB中分支转移成功的比例为60% 解 提示:性能是指平均延迟,也就是延迟的数学期望条件概率。第四章 指令级并行动态分支预测技术-分支目标缓冲(1)在

21、BTB中,预测成功,延迟为0; (2)在BTB中: BTB命中率 预测错误率 2 = 90% 10% 2 = 0.18(时钟周期)(3)不在BTB中,实际成功,此时的延迟为:(1-BTB命中率) 不在BTB中分支转移成功率 2 = 10% 60% 2 = 0.12(时钟周期)(4)不在BTB中,实际不成功,此时的延迟为0。第四章 指令级并行动态分支预测技术-分支目标缓冲对分支预测机制的一种改进: 在缓冲区中不仅存入目的地址,而且还存入一 个或多个目标指令。有两种潜在的好处: 在连续取指令之前,可以较长时间的访问缓冲区,这时的分支目的缓冲区较大。对目的指令进行缓冲,构成称为分支目标指令缓冲(br

22、anch folding)的结构,它可使无条件分支的延迟达到零,甚至有的条件分支也可达到零延迟 。第四章 指令级并行动态分支预测技术-分支目标缓冲前瞻(Speculation)的技术方法: 它允许在处理器还未判断指令是否能执行之前就提前执行,以克服控制相关。 在大多数指令前瞻正确的前提下,前瞻就可以有效地加快分支处理的速度。 基于硬件的前瞻执行结合了三种思想: (1)采用动态的分支预测技术来选择后续执行语句; (2)在控制相关消除之前指令前瞻执行; (3)对基本块采用动态调度。 第四章 指令级并行动态分支预测技术-基于硬件的前瞻执行基于硬件的前瞻是动态地根据数据相关性来选择指令和指令的执行时间

23、。 实质:数据流驱动运行(data-flow execution)只要操作数有效,指令就可以执行。指令的确认 前瞻执行的指令产生的结果要一直到指令处于非前瞻执行状态时,才能确定为最终结果,才允许最终写到寄存器或存储器中去。 第四章 指令级并行动态分支预测技术-基于硬件的前瞻执行实现前瞻的关键思想: 允许指令乱序执行,但必须顺序确认。再定序缓冲(reorder buffer,简记为ROB) 保存那些执行完毕但未经确认的指令及其结果。在指令执行完毕和确认之间这段时间里,由 再定序缓冲提供所有其他指令需要的作为操作数的数据。再定序缓冲区还可以取代取(load)缓 冲区。 第四章 指令级并行动态分支预

24、测技术-基于硬件的前瞻执行再定序缓冲的每个项包含三个域: (1)指令的类型 指令类型包括是否是分支(尚无结果)、 存操作(目的地址为存储器)或寄存器操作 (ALU操作或目的地址是寄存器的取操作)。 (2)目的地址 目的地址域给出结果应写入的目的寄存 器号(对于取操作和ALU指令)或存储器的地 址(存操作)。 (3)值域 值域用来保存指令前瞻执行的结果,直 到指令得到确认。 第四章 指令级并行动态分支预测技术-基于硬件的前瞻执行 使用再定序缓冲的处理部件的硬件结构 例4.8 假设浮点功能单元的延迟为加法是2个时钟周 期,乘法是10个时钟周期,除法40个时钟周 期。给出下面的代码段当指令MULTD

25、要确认 时的状态。 LDF6,34(R2) LDF2,45(R3) MULTDF0,F2,F4 SUBDF8,F6,F2 DIVDF10,F0,F6 ADDDF6,F8,F2第四章 指令级并行动态分支预测技术-基于硬件的前瞻执行解 状态如图4.15所示。 名称 保留站 Add1Add2Add3Mult1Mult2忙 no no no no yes 操作 MULTD DIVD VjMem45+RegsR2Vk Regs4Mem34+RegsR2Qj #3Qk 目的#3#5第四章 指令级并行动态分支预测技术-基于硬件的前瞻执行项号 ROB123456忙 no no yes yes yes yesL

26、DLDMULTDSUBDDIVDADDD指令 F6,34(R2)F2,45(R3)F0,F2,F4F8,F6,F2F10,F0,F6F6,F8,F2状态 确认 确认写结果写结果 执行写结果目的 F6 F2 F0 F8 F10 F6值Mem34+RegsR2Mem45+RegsR3#2RegsF4#1-#2#4+#2 浮点寄存器状态表 F0 F2 F4 F6 F8 F10 F30ROB号 3 6 4 5 忙 yes no no yes yes yes no域通过再定序缓冲,可以在进行精确异常处理的同时进行动态指令调度。 前瞻执行的技术策略很容易的推广到整数寄存器和整数功能单元上。前瞻技术存在的一

27、个主要缺点: 支持前瞻的硬件太复杂,需要大量的硬件资源。 第四章 指令级并行动态分支预测技术-基于硬件的前瞻执行 一个时钟周期内流出多条指令, CPI1。 多指令流出处理器有三种基本结构: 超标量(Superscalar) 每个时钟周期流出的指令数不定,它既可以通过编译器静态调度,也可以通过记分牌或Tomasulo算法动态调度。 超长指令字VLIW(Very Long Instruction Word,简记为VLIW) 每个时钟周期流出的指令数是固定的,它们构成一条长指令,或说是一个混合指令包,这种处理器目前只能通过编译静态调度。 超流水(Super Pipeline) 将每个功能部件进一步流

28、水化,特别是取指令或指令流出被分解为多个段,使得一个功能部件在一拍中可以处理多条指令。第四章 指令级并行动态分支预测技术- 多指令流出技术 小论文:三种多指令流出技术分析 超标量(Superscalar) 超长指令字VLIW(Very Long Instruction Word,简记为VLIW) 超流水(Super Pipeline)提纲:1. 多指令流出技术提出背景 2. 三种常见的多指令流出技术核心思想 3. 三种多指令流出技术的优缺点分析第四章 指令级并行动态分支预测技术- 多指令流出技术WBWBMEMMEMEXEXIDIDWBWBMEMMEMEXEX指令整数指令浮点指令整数指令浮点指令

29、整数指令浮点指令整数指令浮点指令IFIFIDIDIFIFEXEXIDIDIFIFMEMMEMEXEXIDIDIFIFWBWBMEMMEMWBWB流水线工作情况 两路超标量指令执行示意图 第四章 指令级并行动态分支预测技术- 多指令流出技术超长字指令技术采用多个独立的功能部件,将多条指令的操作 组装成固定格式的指令包,形成一条非常长的 指令。 超长指令字的格式固定,处理过程简单,采用 超长指令字的处理器所需硬件量比超标量要少。 下面讨论流出通道较宽的超长指令字处理器。 第四章 指令级并行动态分支预测技术- 多指令流出技术1.超长指令字处理器的指令包括: 两个整数操作、两个浮点操作、两个访存操作和

30、一个分支操作,每个操作可能占用16到24位,从而指令长度达到112到168位。2.指令中每一个操作字段称为操作槽。3.超长指令字处理器中功能部件的数量和指令中包含的操作数量是对应的。4.假设有一种技术可以产生满足超长指令字要求的代码段,这个代码段用来构建超长指令字。 5.下面看一个最基本的超长指令字处理器的操作过程。 第四章 指令级并行动态分支预测技术- 多指令流出技术LDLDLDSDSDSDF0,0(R1)F10,-16(R1)F18,-32(R1)0(R1),F4-16(R1),F128(R1),F20LDLDSDSDF6,-8(R1)F14,-24(R1)-8(R1),F824(R1),

31、F16ADDDADDDADDDF4,F0,F2F12,F10,F2F20,F18,F2ADDDADDDF8,F6,F2F16,F14,F2SUBIBNEZR1,R1,#40R1,Loop访存指令1 访存指令2 浮点指令1 浮点指令2 整数/转移指令 这段程序的运行时间为8个时钟周期,每遍循环平均1.6个时钟周期。8个时钟周期内流出了17条指令,每个时钟周期2.1条。8个时钟周期共有操作槽85=40个,有效槽的比例为42.5%。 功能部件使用效率不高是超长指令字的不足之一。 1.处理器中指令流出能力是有限的,它主要受 以下方面的影响: (1) 程序内在的指令级并行性;(最简单、最根本的因素)所需

32、要的无关指令数等于流水线的深度 乘以可以同时工作的功能部件数。 (2) 硬件实现的困难; 多指令流出的处理器需要大量的硬件资源。 (3) 超标量和超长指令字处理器固有的技术限制。 第四章 指令级并行动态分支预测技术- 多指令流出技术2. 设计多流出处理器的主要难点: 访存的开销 硬件的复杂性 编译器技术的难度 第四章 指令级并行动态分支预测技术- 多指令流出技术超标量 重复设置硬件资源超流水 细分流水线段第四章 指令级并行动态分支预测技术- 多指令流出技术第四章 指令级并行循环级并行性基本程序块基本程序块:一段除了入口和出口以外不包含其他分支的线性代码段。程序平均每57条指令就会有一个分支。第

33、四章 指令级并行循环级并行性基本程序块基本程序块:一段除了入口和出口以外不包含其他分支的线性代码段。程序平均每57条指令就会有一个分支。第四章 指令级并行循环级并行循环级并行:使一个循环中的不同循环体并行执行。开发循环体中存在的并行性最常见、最基本是指令级并行研究的重点之一例如,考虑下述语句: for (i=1; i=500; i=i1) ai=ais;每一次循环都可以与其他的循环重叠并行执行;在每一次循环的内部,却没有任何的并行性。 第四章 指令级并行循环展开调度基本方法基本思想:把循环展开后,通过重命名和指令调度来开发更多的并行性。调度: 通过改变指令在程序中的位置,将相关指令之间的距离加

34、大到不小于指令执行延迟的周期数,这样就可以将相关的指令转化为无关指令。编译器完成这种指令调度的能力受限于两个特性:程序固有的指令级并行性;流水线功能部件的执行延迟。本节中,我们使用的浮点流水线延迟为: 产生结果的指令 使用结果的指令 延迟(时钟周期数) 浮点计算 另一个浮点计算 3 浮点计算 浮点store(S.D) 2 浮点load(L.D) 浮点计算 1 浮点load(L.D) 浮点store(S.D) 0 第四章 指令级并行循环展开调度基本方法 假设指令i在前,指令j在后;所谓的“延迟”,是由于发生冲突造成的停顿时间。(采用定向技术,没有结构冲突) 例4.6 对于下面的源代码,转换成MI

35、PS汇编语言,在不进行指令调度和进行指令调度两种情况下,分析其代码一次循环所需的执行时间。 for (i=1; i=1000; i+) xi = xi + s;第四章 指令级并行循环展开调度基本方法 - 实例把该程序翻译成MIPS汇编语言代码:Loop:L.D F0,0(R1) / 取一个向量元素放入F0 ADD.D F4,F0,F2 / 加上在F2中的标量 S.D F4, 0(R1)/ 保存结果 DADDIU R1,R1,#-8/指针减8(每个数据占8个字节) BNE R1,R2,Loop / 如果R1不等于R2,未结束,继续其中:整数寄存器 R1:指向向量中的当前元素,初值为向量中最高端元素的地址)整数寄存器 R2:8(R2)指向最后一个元素。浮点寄存器 F2:用于保存常数 s。 第四章 指令级并行循环展开调度基本方法 - 实例不进行指令调度的情况下,程序的实际执行情况: 指令流出时钟 Loop: L.D F0,0(R1) 1 (空转)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论