指令级并行ppt课件.ppt_第1页
指令级并行ppt课件.ppt_第2页
指令级并行ppt课件.ppt_第3页
指令级并行ppt课件.ppt_第4页
指令级并行ppt课件.ppt_第5页
已阅读5页,还剩111页未读 继续免费阅读

下载本文档

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

文档简介

第4章指令级并行 本章学习内容 指令级并行的基本概念指令的动态调度动态分支预测技术多指令流出技术 2 4 1指令级并行 指令之间存在的潜在并行性称为指令级并行 ILP Instruction LevelParallelism 只有将硬件技术和软件技术互相配合 才能够最大限度地挖掘出程序中存在的指令级并行 3 1 流水线处理机的实际CPI 流水线处理机的实际CPI就是理想流水线的CPI加上各类停顿的时钟周期数 CPI流水线 CPI理想 停顿结构冲突 停顿数据冲突 停顿控制冲突CPI理想即理想CPI 是衡量流水线最高性能的指标之一 4 IPC InstructionsPerCycle IPC 每个时钟周期内完成的指令条数 IPC是CPI的倒数 提高IPC的途径之一是减少CPI流水线 5 2 基本程序块 基本程序块 一段除了入口和出口以外不包含其他分支的一个线性代码段 因为程序往往平均每5 7条指令就会有一个分支 而且指令之间还可能存在相关 所以在基本程序块中能开发的并行性是很有限的 很可能比基本块的大小要小很多 为了明显地提高性能 必须跨越多个基本块开发指令的并行性 6 3 开发指令级并行常用的方法 1 开发循环级并行循环级并行 Loop levelparallelism 循环程序不同迭代之间存在的并行性 例 for i 1 i 500 i i 1 a i a i s 在每一次循环的内部 没有任何的并行性 每一次循环都可以与其他的循环重叠并行执行 开发循环级并行性是增加指令之间并行性的最简单和最常用的方法 7 开发循环级并行的基本技术 采用循环展开技术采用向量指令和向量数据表示 8 2 解决相关与流水线冲突问题 相关是程序固有的一种属性 它反映了程序中指令之间的相互依赖关系 相关的三种类型 数据相关 名相关 控制相关 如果两条指令相关 它们就不能并行执行 或只能部分重叠执行 由于相关的存在 使得指令流中的下一条指令不能在指定时钟周期执行 就是发生了流水线冲突 相关的存在限制了指令级并行 ILP 的开发 9 流水线冲突的三种类型 结构冲突 数据冲突 控制冲突 结构冲突 由硬件资源冲突造成 数据冲突 由数据相关和名相关造成 控制冲突 由控制相关造成 具体的一次相关是否会导致实际冲突的发生以及该冲突会带来多长的停顿 根据流水线的属性而定 10 解决相关与冲突的方法 保持相关 但避免发生冲突 方法 指令调度 包括静态调度和动态调度 通过代码变换 消除相关 11 解决相关与冲突时需注意的问题 由于相关的存在 在开发指令级并行时 如果可能影响到程序的正确性 就必须注意保持程序顺序 程序顺序 由源程序确定的在完全串行方式下指令的执行顺序 控制相关并不是一个必须严格保持的关键属性 当存在控制相关时 在对程序的正确性没有影响的前提下 可以不遵守控制相关的依赖关系 执行本来不该执行的指令 12 必须保持的最关键的两个属性 要正确地执行程序 必须保持的最关键的两个属性是 数据流和异常行为 保持异常行为 无论怎么改变指令的执行顺序 都不能改变程序中异常的发生情况 原来程序中是怎么发生的 改变执行顺序后还是怎么发生 可弱化为 指令执行顺序的改变不能导致程序中发生新的异常 如果能做到保持程序的数据相关和控制相关 就能保持程序的数据流和异常行为 13 例 DADDUR2 R3 R4BEQZR2 L1LWR1 0 R2 L1 如果不保持关于R2的数据相关 程序的执行结果就会改变 如果不保持控制相关 把LW指令移到BEQZ之前 就有可能产生一个新的 访存保护 异常 如果R2 0 14 数据流 指数据值从其产生者指令到其消费者指令的实际流动 分支指令使得数据流具有动态性 因为它使得给定指令的数据可以有多个来源 仅仅保持数据相关性是不够的 一条指令可能与多条先前的指令数据相关 程序顺序决定了哪条指令真正是所需数据的产生者 只有再加上保持控制顺序 才能够保持程序顺序 15 例 DADDUR1 R2 R3BEQZR4 L1DSUBUR1 R5 R6L1 ORR7 R1 R8OR指令中使用的R1值取决于BEQZ指令分支的是否成功 即OR与DADDU或DSUBU指令相关 必须通过保持控制相关 避免对数据流的修改 以保证数据流的正确 DSUBU不能被移到BEQZ之前 16 有时 不遵守控制相关既不影响异常行为 也不改变数据流 在这种情况下 可以大胆地进行指令调度 把失败分支中的指令调度到分支指令之前 17 例 DADDUR1 R2 R3BEQZR12 SkipnextDSUBUR4 R5 R6DADDUR5 R4 R9Skipnext ORR7 R8 R9如果已知R4在Skipnext后不再被使用 而且DSUBU指令不会产生异常 那么就可以把DSUBU指令移到BEQZ之前 因为这个移动不会改变数据流 18 开发指令的并行性的方法 硬件方法 指令的动态调度 动态分支预测 多指令流出技术 软件方法 指令的静态调度 循环展开技术 软硬件结合方法 显式并行指令计算EPIC 19 4 5循环展开和指令调度 4 5 1循环展开和指令调度的基本方法为了充分发挥流水线的作用 必须设法让它满负荷工作 因此要充分开发指令之间存在的并行性 找出不相关的指令序列 让它们在流水线上重叠并行执行 增加指令间并行性最简单和最常用的方法开发循环级并行性 循环的不同迭代之间存在的并行性 在把循环展开后 通过重命名和指令调度来开发更多的并行性 20 编译器指令调度能力的限制 编译器完成指令调度的能力受限于两个特性 程序固有的指令级并行性 流水线功能部件的执行延迟 浮点流水线延迟 Load指令的结果可以通过定向路径及时送给store指令 所以延迟为0 不用插入停顿 例4 6对于下面的源代码 转换成MIPS汇编语言 在不进行指令调度和进行指令调度两种情况下 分析其代码一次循环所需的执行时间 for i 1 i 1000 i x i x i s 解 该循环的不同迭代之间不存在相关 所以多次迭代可以并行执行 23 MIPS汇编语言代码 假设R1的初值指向第一个元素 8 R2 指向最后一个元素 Loop L DF0 0 R1 取一个向量元素放入F0ADD DF4 F0 F2 加上在F2中的标量S DF4 0 R1 存结果DADDIUR1 R1 8 将指针减8 每个数据占8个字节 BNER1 R2 Loop 若R1不等于R2 表示尚未结束 转移到Loop继续执行其中 整数寄存器R1 指向向量中的当前元素 初值为向量中最高端元素的地址 浮点寄存器F2 用于保存常数s 24 不进行指令调度的情况下 程序的实际执行情况 Loop L DF0 0 R1 1 空转 2ADD DF4 F0 F23 空转 4 空转 5S DF4 0 R1 6DADDIUR1 R1 87 空转 8BNER1 R2 Loop9 空转 10每个元素的操作需要10个时钟周期 其中5个是空转周期 25 指令调度以后 程序的执行情况 Loop L DF0 0 R1 空转 ADD DF4 F0 F2 空转 空转 S DF4 0 R1 DADDIUR1 R1 8 空转 BNER1 R2 Loop 空转 Loop L DF0 0 R1 DADDIUR1 R1 8ADD DF4 F0 F2 空转 BNER1 R2 LoopS DF4 8 R1 因为修改指针R1的减8操作提前了 所以S D指令中变址指针的偏移量要从0改为8 26 指令流出时钟Loop L DF0 0 R1 1DADDIUR1 R1 82ADD DF4 F0 F23 空转 4BNER1 Loop5S DF4 8 R1 6一个元素的操作时间从10个时钟周期减少到6个 其中5个周期是有指令执行的 1个为空转周期 27 例子中的问题及解决方案 只有L D ADD D和S D这3条指令是有效操作 占用3个时钟周期 而DADDIU 空转和BEN这3个时钟周期都是附加的循环控制开销 有效操作比例不高 循环展开技术把循环体的代码复制多次并按顺序排列 然后相应调整循环的结束条件 28 例4 7将例4 6中的循环展开3次得到4个循环体 然后对展开后的指令序列在不调度和调度两种情况下 分析代码的性能 设R1的初值为32的倍数 即循环次数为4的倍数 因此不需要在循环体后面增加补偿代码 方法 消除冗余的指令 并且不重复使用寄存器 29 分配寄存器 不重复使用寄存器 F0 F4 用于展开后的第1个循环体F2 用于保存常数F6 F8 用于展开后的第2个循环体F10 F12 用于展开后的第3个循环体F14 F16 用于展开后的第4个循环体 30 展开后没有调度的代码 31 结果分析 这个循环每遍共使用了28个时钟周期 有4个循环体 完成4个元素的操作 平均每个元素使用28 4 7个时钟周期原始循环的每个元素需要10个时钟周期 节省的时间 从减少循环控制的开销中获得的 在整个展开后的循环中 实际指令只有14条 其他14个周期都是空转 结论 效率并不高 32 对指令序列进行优化调度 指令流出时钟Loop L DF0 0 R1 1L DF6 8 R1 2L DF10 16 R1 3L DF14 24 R1 4ADD DF4 F0 F25ADD DF8 F6 F26ADD DF12 F10 F27ADD DF16 F14 F28S DF4 0 R1 9S DF8 8 R1 10DADDIUR1 R1 3212S DF12 16 R1 11BNER1 R2 Loop13S DF16 8 R1 14 33 结果分析 没有数据相关引起的空转等待 整个循环仅仅使用了14个时钟周期 平均每个元素的操作使用14 4 3 5个时钟周期 通过循环展开 寄存器重命名和指令调度 可以有效地开发出指令级并行 34 循环展开和指令调度时要注意的问题 保证正确性 在循环展开和调度过程中尤其要注意两个地方的正确性 循环控制 操作数偏移量的修改 注意有效性 只有能够找到不同循环体之间的无关性 才能有效地使用循环展开 使用不同的寄存器 否则可能导致新的冲突 删除多余的测试指令和分支指令 并对循环结束代码和新的循环体代码进行相应的修正 35 注意对存储器数据的相关性分析例如对于load指令和store指令 如果它们在不同的循环迭代中访问的存储器地址是不同的 它们就是相互独立的 可以相互对调 注意新的相关性由于原循环不同次的迭代在展开后都到了同一次循环体中 因此可能带来新的相关性 36 4 2指令的动态调度 静态调度依靠编译器对代码进行静态调度 以减少相关和冲突 不是在程序执行的过程中 而是在编译期间进行代码调度和优化 通过把相关的指令拉开距离来减少可能产生的停顿 动态调度在程序的执行过程中 依靠专门硬件对代码进行调度 减少数据相关导致的停顿 37 指令的动态调度的特点 能够处理一些在编译时情况不明的相关 比如涉及到存储器访问的相关 并简化了编译器 能够使本来是面向某一流水线优化编译的代码在其他的流水线 动态调度 上也能高效地执行 以硬件复杂性的显著增加为代价 38 4 2 1动态调度的基本思想 到目前为止我们所使用流水线的最大的局限性 指令必须按序流出和执行考虑下面一段代码 DIV DF4 F0 F2SUB DF10 F4 F6ADD DF12 F6 F14SUB D指令与DIV D指令关于F4相关 导致流水线停顿 ADD D指令与流水线中的任何指令都没有关系 但也因此受阻 39 在前面的基本流水线中译码功能段的工作 ID 检测结构冲突检测数据冲突 一旦一条指令受阻 其后的指令都将停顿 解决办法 允许乱序执行 40 为了允许乱序执行 将5段流水线的译码阶段再分为两个阶段 流出 Issue IS 指令译码 检查是否存在结构冲突 读操作数 ReadOperands RO 等待数据冲突消失 然后读操作数 IS RO 检测结构冲突 检测数据冲突 41 在前述5段流水线中 顺序执行时是不会发生WAR冲突和WAW冲突的 但乱序执行有可能发生 例 DIV DF10 F0 F2SUB DF10 F4 F6ADD DF6 F8 F14 存在反相关 存在输出相关 可以通过使用寄存器重命名技术来消除相关 42 动态调度的流水线支持多条指令同时处于执行当中 要求 具有多个功能部件 或者流水功能部件 或者兼而有之 假设具有多个功能部件 指令乱序完成带来的最大问题 异常处理比较复杂动态调度要保持正确的异常行为 只有那些在程序严格按程序顺序执行时会发生的异常 才能真正发生 43 保持正确的异常行为 对于一条会产生异常的指令来说 只有当处理机确切地知道该指令将被执行后 才允许它产生异常 即使保持了正确的异常行为 动态调度处理机仍可能发生不精确异常 44 精确异常与不精确异常 精确异常 发生异常时 处理机的现场跟严格按程序顺序执行时指令i的现场相同 不精确异常 当执行指令i导致发生异常时 处理机的现场 状态 与严格按程序顺序执行时指令i的现场不同 发生不精确异常的原因 当发生异常 设为指令i 时 流水线可能已经执行完按程序顺序是位于指令i之后的指令 流水线可能还没完成按程序顺序是指令i之前的指令 不精确异常使得在异常处理后难以接着继续执行程序 45 4 2 2Tomasulo算法 核心思想记录和检测指令相关 操作数一旦就绪就立即执行 把发生RAW冲突的可能性减少到最小 通过寄存器换名来消除WAR冲突和WAW冲突 原因 46 IBM360 91首先采用了Tomasulo算法 1 IBM360 91的设计目标是基于整个360系列的统一指令集和编译器来实现高性能 而不是设计和利用专用的编译器来提高性能 因此需要更多地依赖硬件 IBM360体系结构只有4个双精度浮点寄存器 限制了编译器调度的有效性 360 91的访存时间和浮点计算时间都很长 也是Tomasulo算法要解决的问题 寄存器换名可以消除WAR冲突和WAW冲突 47 考虑以下代码 DIV DF0 F2 F4ADD DF6 F0 F8S DF6 0 R1 SUB DF8 F10 F14MUL DF6 F10 F8 输出相关 F6 导致WAW冲突 反相关 F8 导致WAR冲突 48 消除名相关引入两个临时寄存器S和T把这段代码改写为 DIV DF0 F2 F4ADD DS F0 F8S DS 0 R1 SUB DT F10 F14MUL DF6 F10 T 两个F6都换名为S 两个F8都换名为T 49 基于Tomasulo算法的MIPS处理器浮点部件的基本结构 保留站 reservationstation 每个保留站中保存一条已经流出并等待到本功能部件执行的指令 相关信息 包括 操作码 操作数以及用于检测和解决冲突的信息 在一条指令流出到保留站的时候 如果该指令的源操作数已经在寄存器中就绪 则将之取到该保留站中 如果操作数还没有计算出来 则在该保留站中记录将产生这个操作数的保留站的标识 浮点加法器有三个保留站 ADD1 ADD2 ADD3浮点乘法器有两个保留站 MULT1 MULT2每个保留站都有一个标识字段 唯一地标识了该保留站 51 公共数据总线CDB CDB是一条重要的数据通路所有功能部件的计算结果都是送到CDB上 由它把这些结果直接送到 播送到 各个需要该结果的地方 在具有多个执行部件且采用多流出 即每个时钟周期流出多条指令 的流水线中 需要采用多条CDB 52 load缓冲器和store缓冲器 用于存放读 写存储器的数据或地址load缓冲器的作用 存放用于计算有效地址的分量 记录正在进行的load访存 等待存储器的响应 保存已经完成了的load的结果 即从存储器取来的数据 等待CDB传输 store缓冲器的作用 存放用于计算有效地址的分量 保存正在进行的store访存的目标地址 该store正在等待存储数据的到达 保存该store的地址和数据 直到存储部件接收 53 浮点寄存器FP共有16个浮点寄存器 F0 F2 F4 F30 它们通过一对总线连接到功能部件 并通过CDB连接到store缓冲器 指令队列指令部件送来的指令放入指令队列指令队列中的指令按先进先出的顺序流出运算部件浮点加法器完成加法和减法操作浮点乘法器完成乘法和除法操作 54 在Tomasulo算法中 寄存器换名是通过保留站和流出逻辑来共同完成的 当指令流出时 如果其操作数还没有计算出来 则将该指令中相应的寄存器号换名为将产生这个操作数的保留站的标识 指令流出到保留站后 其操作数寄存器号或者换成了数据本身 如果该数据已经就绪 或者换成了保留站的标识 不再与寄存器有关系 55 Tomasulo算法的特点 冲突检测和指令执行控制是分布的 每个功能部件的保留站中的信息决定了什么时候指令可以在该功能部件开始执行 计算结果通过CDB直接从产生它的保留站传送到所有需要它的功能部件 而不用经过寄存器 56 指令执行的步骤 使用Tomasulo算法的流水线需3段 流出 从指令队列的头部取一条指令 如果该指令的操作所要求的保留站有空闲的 就把该指令送到该保留站 设为r 如果其操作数在寄存器中已经就绪 就将这些操作数送入保留站r 如果其操作数还没有就绪 就把将产生该操作数的保留站的标识送入保留站r 一旦被记录的保留站完成计算 它将直接把数据送给保留站r 寄存器换名和对操作数进行缓冲 消除WAR冲突 完成对目标寄存器的预约工作 消除了WAW冲突 如果没有空闲的保留站 指令就不能流出 发生了结构冲突 57 执行当两个操作数都就绪后 本保留站就用相应的功能部件开始执行指令规定的操作 load和store指令的执行需要两个步骤 计算有效地址 要等到基地址寄存器就绪 把有效地址放入load或store缓冲器写结果功能部件计算完毕后 就将计算结果放到CDB上 所有等待该计算结果的寄存器和保留站 包括store缓冲器 都同时从CDB上获得所需要的数据 58 每个保留站有以下6个字段 Op 要对源操作数进行的操作 Qj Qk 将产生源操作数的保留站号 等于0表示操作数已经就绪且在Vj或Vk中 或者不需要操作数 Vj Vk 源操作数的值 对于每一个操作数来说 V或Q字段只有一个有效 对于load来说 Vk字段用于保存偏移量 Busy 为 yes 表示本保留站或缓冲单元 忙 A 仅load和store缓冲器有该字段 开始是存放指令中的立即数字段 地址计算后存放有效地址 59 Qi 寄存器状态表 每个寄存器在该表中有对应的一项 用于存放将把结果写入该寄存器的保留站的站号 为0表示当前没有正在执行的指令要写入该寄存器 也即该寄存器中的内容就绪 60 设有指令 MULF0 F2 F4ADDF2 F0 F6 61 62 63 64 例4 1对于下述指令序列 给出当第一条指令完成并写入结果时 Tomasulo算法所用的各信息表中的内容 L DF6 34 R2 L DF2 45 R3 MUL DF0 F2 F4SUB DF8 F2 F6DIV DF10 F0 F6ADD DF6 F8 F2 65 当采用Tomasulo算法时 在上述给定的时刻 保留站 load缓冲器以及寄存器状态表中的内容 66 VkMem 34 Regs R2 Reg F4 Mem 34 Regs R2 名称 保留站 Load1Load2Add1Add2Add3Mult1Mult2 Busynoyesyesyesnoyesyes OpLDSUBADDMULDIV Vj QjLoad2Add1Load2Mult1 QkLoad2 A45 Regs R3 67 Tomasulo算法的主要优点 冲突检测逻辑是分布的 通过保留站和CDB实现 如果有多条指令已经获得了一个操作数 并同时在等待同一运算结果 那么这个结果一产生 就可以通过CDB同时播送给所有这些指令 使它们可以同时执行 消除了WAW冲突和WAR冲突导致的停顿使用保留站进行寄存器换名 并且操作数一旦就绪就将之放入保留站 68 4 4多指令流出技术 如果每次只能流出一条指令 单流出 则CPI不可能小于1 要想进一步提高性能 使CPI 1 就必须采用多流出技术 69 单流出和多流出处理机执行指令的时空图 70 提高流水并行处理的方法 增加流水部件套数 超标量合并多条指令操作码 超长指令字细化流水部件段数 超流水 71 4 4 1超标量方法 Superscalar 在处理机内设置多个可并行操作的功能部件和多条流水线 在一个时钟周期内启动 发射 多条指令进行并行处理 使得CPI 1 超标量方法是采用资源重复的策略开发并行性 超级标量机主要是借助对硬件资源重复来实现空间的并行操作 72 采用超标量技术时在每个时钟周期流出的指令条数不固定 依代码的具体情况而定 有上限 设这个上限为n 就称该处理机为n流出 可以通过编译器进行指令的静态调度 也可以基于Tomasulo算法进行动态调度 以实现超标量技术 73 理想的RISC机中指令流水的执行情况 理想的RISC机 74 在超标量机中每个时钟周期可同时启动三条指令的情况 每拍启动3条指令要求并行度 3 b 超级标量机 配置多个功能部件多个译码器 寄存器端口 总线 能同时执行多个操作 75 单发射与多发射 发射 处理机从指令存储单元取得指令的过程单发射 处理机在单时钟周期内只能取出一条指令供执行 处理机只有一个IF和ID部件 但可以有多个运算部件 多发射 处理机在单时钟周期内可取出多条指令供执行 处理机必须设置多个IF ID WR等部件 76 超标量机的典型结构 77 指令执行部件的功能 存储器操作部件 执行Load Store指令 ALU 执行整数运算 转移控制部件 执行转移指令 78 指令调度部件 状态记录部件 的功能 进行流水动态调度 依靠硬件在程序运行过程中对可能出现的相关情况加以检测 从而保证流水线中的各个功能部件能最大限度的重叠工作 对流水线中的各个功能部件的工作状态 进入流水线中的各条指令的工作状态 它们所使用的源寄存器和目的寄存器情况等进行集中的统一记录和调度 在译码阶段 状态记录部件根据所记录的状态决定是否将译码后的指令发送给有关功能部件进行处理 79 指令调度部件的主要检查内容 指令要使用的功能部件是否已被流水线中的其它指令占用 资源冲突 指令的源操作数寄存器是否为其它指令的目的寄存器 或者它所要写入的目的寄存器又正好是前面其它指令所要读出的操作数 或是要写入的目的寄存器 即检查是否存在RAW WAR WAW的数据相关 80 多流水线中指令的发射策略 调度方法 采用不同发射策略的目的 减少相关性 1 从指令的发射顺序和完成顺序两个方面考虑顺序发射 指令的发射顺序是按照程序中指令的排列顺序进行的 乱序发射 指令的发射顺序不是按照程序中指令的排列顺序进行的 顺序完成 指令的完成顺序是按照程序中指令的排列顺序进行的 乱序完成 指令的发射顺序不是按照程序中指令的排列顺序进行的 81 2 三种策略 顺序发射顺序完成优点 流水线的控制逻辑比较简单缺点 使吞吐率和效率降低 是调度策略的基础 但死板 不实用 顺序发射乱序完成优点 缩短了流水线中任务的总的执行时间 提高了功能部件的利用率 缺点 指令执行时间长短不一 控制逻辑比较复杂 82 乱序发射乱序完成优点 功能部件的利用率最高 流水线中任务的总的执行时间最短 缺点 需要硬件 软件的支持 控制复杂 需设置先行指令窗口 数据相关分析部件 功能部件冲突检测部件等 通常采用记分牌机制分析数据的相关性和功能部件的冲突 通过优化编译对指令序列进行重组开发程序中指令的并行性 83 乱序发射乱序完成中的先行指令窗口指令译码后 先行指令窗口 功能单元 未满 不断送至窗口 可用 取窗口不断执行 84 目前 许多高性能超标量处理机中均采用了乱序发射乱序完成的指令调度方法 85 超标量机的主要特点 1 配置有多个性能不同的处理部件 采用多条流水线并行处理 2 能同时对若干条指令进行译码 将可并行执行的指令送往不同的执行部件 从而达到在每个周期启动多条指令的目的 3 在程序运行期间由硬件 通常是状态记录部件和调度部件 检查操作的并行性 完成指令的调度 86 4 4 2超长指令字VLIW 超长指令字 VeryLongInstructionWord 以一条长指令来实现多个操作的并行执行 以减少对存储器的访问 在每个时钟周期流出的指令条数是固定的 将这些指令构成一条长指令或者一个指令包 在指令包中 指令之间的并行性通过指令显式地表示出来 指令调度由编译器静态完成 87 超长指令字的实现 在处理机中设置多个可并行操作的功能部件 在一条超长指令字的多个操作控制字段的直接控制下并行操作 超长指令字是采用资源重复的策略开发并行性 超长指令字的长度达上百位 甚至上千位 超长指令字的并发操作主要是在流水的执行阶段进行的 88 例 在执行阶段并行执行三个操作 0 1 2 3 4 5 6 T 3个操作 每拍启动一条长指令 执行3个操作 相当于3条指令 要求并行度 3 超长指令字计算机 VLIW 的原理结构 89 超长指令机的主要特点 1 单一的控制流 只有一个控制器 每个周期启动一条长指令 2 超长指令字被分成多个控制字段 每个字段直接独立地控制每个功能部件 3 含有大量的数据通路和功能部件 由于编译器在编译时间已考虑可能出现的数据相关和资源相关 故控制硬件较简单 4 在编译阶段完成超长指令中多个可并行执行操作的调度 90 例 一个含有两个存取部件 一个浮点加部件和一个浮点乘部件的VLIW机 主存 VLIW中的操作字段 RF 寄存器堆 LD ST1 LD ST2 FADD FMUL LD ST1 LD ST2 FADD FMUL 存 取1 存 取2 浮点加 浮点乘 91 在VLIW机中 所有功能部件均由同一时钟驱动 在同一时刻控制每个功能部件的操作字段组成一个超长指令字 超长指令字的指令字长度与功能部件的数量有关 超长指令字的生成是由编译器来完成的 编译器将串行的操作序列合并为可并行执行的指令序列 以最大限度实现操作并行性 超长指令字的压缩技术可分为局部压缩和全局压缩两种方法 92 1 局部压缩 在程序基本块范围内进行指令压缩 表调度法是局部压缩方法中的一种 例 实现以下赋值语句 C A BK I JL M KQ C K若按串行操作进行 则其所用的指令序列为 93 共需14个周期 源代码 源代码 所需周期 C A B LOADALOADBC A BSTOREC 1111 K I J LOADILOADJK I JSTOREK 1111 L M K LOADML M KSTOREL 111 Q C K Q C KSTOREQ 21 94 压缩技术 表调度法 只需要6个周期 超标量结构 超流水线结构一般采用指令窗方法 把一段指令 长度为窗口的大小 例为8 取到窗口中 判断这段指令能否并行执行 95 2 全局压缩法 全局压缩是指进行压缩的代码操作可在基本块之间移动 全局压缩法可获得更好的压缩效果 全局压缩的代码操作在基本块间移动需有一定的限制 而且为了保持程序原来的语义 某些代码操作移动后 通常还需要增加一些辅助操作 全局压缩主要有三种方法 路径调度 Tracescheduling 渗透调度 Percolationscheduling 软件流水 Softwarepipelining 96 VLIW机与超标量机的比较 4 4 3超流水线处理机 超流水线处理机将每个流水段进一步细分 使流水线在一个时钟周期内能够分时流出多条指令 对于一台每个时钟周期能流出n条指令的超流水线计算机来说 这n条指令不是同时流出的 而是每隔1 n个时钟周期流出一条指令 实际上该超流水线计算机的流水线周期为1 n个时钟周期 超流水方法是采用时间重叠的策略开发并行性 98 每个时钟周期分时流出两条指令的超流水线计算机的时空图 在分解流水段时要根据实际情况 有些流水段分解的流水级数可多些 如 译码 ID 流水段 可以再细分为 译码 流水级 取第一个操作数 流水级和 取第二个操作数 流水级等 有些流水段分解的流水级数可少些 也的流水段可以不再细分 如 写回结果 流水段一般不再细分 100 超流水线技术不用增加硬件 而是采用时间重叠的方法将流水线中各功能段的延迟时间缩短 利用超流水线技术可提高系统的时钟频率 但是流水深度加深后 当指令间出现各种相关时所引起的流水线的停顿时间也将增长 101 MIPSR4000指令流水线结构 102 各级的功能 IF 取指令的前半步 根据PC值去启动对指令Cache的访问 IS 取指令的后半步 在这一级完成对指令

温馨提示

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

评论

0/150

提交评论