1 / 96

高性能计算机系统结构

高性能计算机系统结构. 胡伟武. 复 习( 1 ). 乱序执行(有序结束) : 充分利用资源 动态调度 : 前面指令因相关而等待时,后面的可继续前进。 寄存器重命名 : 指令结果产生后不能立即修改寄存器(结束时改),因为该指令可能被取消(由于转移猜测错误或由于前面指令发生例外)。 转移猜测 : 在转移条件确定前,猜测某个分支取指并执行。平均 6-7 条指令中有一条转移指令,简单的猜测方法可以猜到 90% 左右。 乱序执行可以提高性能 1.5-2 倍。. EU. EU. EU. EU. 相关检查及发射. 相关检查及发射. 相关检查及发射.

celina
Download Presentation

高性能计算机系统结构

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 高性能计算机系统结构 胡伟武

  2. 复 习(1) • 乱序执行(有序结束): 充分利用资源 • 动态调度: 前面指令因相关而等待时,后面的可继续前进。 • 寄存器重命名: 指令结果产生后不能立即修改寄存器(结束时改),因为该指令可能被取消(由于转移猜测错误或由于前面指令发生例外)。 • 转移猜测: 在转移条件确定前,猜测某个分支取指并执行。平均6-7条指令中有一条转移指令,简单的猜测方法可以猜到90%左右。 • 乱序执行可以提高性能1.5-2倍。

  3. EU EU EU EU 相关检查及发射 相关检查及发射 相关检查及发射 相关检查及发射 EU EU EU EU 保留站 保留站 保留站 保留站 译码及相关检查 译 码 指令队列 复 习(2) • 动态调度的主要作用及其思想 • 把相关检查和等待从译码中区分开来,避免前面的相关操作影响后面指令的执行 • 利用保留站等指令缓存技术,增加同时可以执行的指令的条数

  4. EU EU EU EU EU EU EU EU EU EU EU EU 相关检查及发射 相关检查及发射 相关检查及发射 相关检查及发射 相关检查及发射 相关检查及发射 相关检查及发射 保留站 保留站 保留站 保留站 保留站 保留站 保留站 译 码 译 码 译 码 指令队列 指令队列 指令队列 复 习(3) • 保留站组织 • 独立保留站:每个功能部件一个保留站 • 分组保留站:多个功能部件共享保留站 • 全局保留站:所有功能部件共享保留站 • 比较:数据通路复杂度(结果总线传送)、保留站项数、保留站效率、发射复杂度

  5. EU EU EU EU EU EU EU EU 保留站及发射 保留站及发射 保留站及发射 保留站及发射 寄存器 保留站及发射 保留站及发射 保留站及发射 保留站及发射 寄存器 指令队列及译码 指令队列及译码 复 习(4) • 保留站前读寄存器 • 保留站中有值域,较复杂 • 操作数没准备好就读寄存器,保留站侦听结果总线 • 有序发射 • 保留站选择和执行同一拍 • 保留站后读寄存器 • 保留站中无值域,较简单 • 操作数全部准备号后才能读寄存器 • 乱序发射 • 执行阶段延迟短

  6. 复 习(5) • 硬件重命名基本上可以分成两大类 • 重命名寄存器和结构寄存器分开 • 重命名到保留站、ROB、专门的重命名寄存器、发射队列 • 重命名寄存器和结构寄存器不分开 • 为每个逻辑寄存器动态分配物理寄存器,需要建立逻辑寄存器和物理寄存器之间的映射表。 • 映射表可以是RAM的方式,即有逻辑寄存器那么多项,也可以是CAME的方式,即有物理寄存器那么多项 • 保留站前还是保留站后读寄存器对重命名过程有很大影响

  7. 复 习(6)

  8. 本次内容 • 转移预测技术 • 转移指令对性能的影响 • 解决转移条件相关的方法 • 动态转移预测 • 转移猜测有关研究 • 常见处理器的转移猜测

  9. 指令级并行的关键技术 • 指令流水线: 时间重叠 • 多发射: 空间重复 • 乱序执行(有序结束): 充分利用资源 • 动态调度: 前面指令因相关而等待时,后面的可继续前进。 • 寄存器重命名: 指令结果产生后不能立即修改寄存器(结束时改),因为该指令可能被取消(由于转移猜测错误或由于前面指令发生例外)。 • 转移猜测: 在转移条件确定前,猜测某个分支取指并执行。平均6-7条指令中有一条转移指令,简单的猜测方法可以猜到90%左右。 • 乱序执行可以提高性能1.5-2倍。

  10. Speculative Execution Control speculation Data speculation Branch direction(binary) Data location Aliased(binary) Branch target(multivalued) Address(multivalued) Data value(multivalued) 猜测执行的分类

  11. 控制相关 • PC相关 • 转移指令计算的下一条指令地址在EX阶段计算,下一条指令等2拍 • 使用专门的地址运算部件把地址计算提前到译码阶段可以少等一拍 • 使用一个delay slot可以不用等待,多发射情况下延迟槽成为需要专门照顾的负担 • 转移条件相关 • 如果在ID阶段执行转移指令时转移条件未确定还是要等待

  12. 转移指令对性能的影响 • 分支指令的影响是开发指令级并行性的重要障碍 • 增加ILP是通用微处理器提高性能的重要手段 • 通用代码 • 一条指令流中,平均每5-7条指令中就有一条是分支指令,也即基本块大小为5-7条指令。 • 增大发射宽度 • 在发射宽度为n的处理器中,遇到分支指令的速度也快了n倍 • 增加流水线深度 • 流水线越深,处理分支指令所需要的时钟周期数就越多

  13. 一个例子 • 假设:处理器5发射,第10级流水解决分支地址,如果预测失败,那么会产(10-1)*5 = 45个气泡 • A系统:猜错率为10%,那么第50条指令预测错误,指令带宽浪费45/(45+50)=47% • B系统:猜错率4%,那么第125条指令预测错误,取指令带宽浪费45/(45+125)=26%

  14. 转移指令的类型 • 条件转移与无条件转移指令:branch • 条件转移:需等待条件的确定后才能取指 • 整个程序中条件分支所占比例高 • 整型程序中的条件分支所占的比例,比浮点程序中条件分支所占的比例更高 • 无条件转移:不用判断条件就转移 • 如call/return • 直接转移与间接转移 • 直接转移:转移目标根据指令内容直接得出 • 间接转移:转移目标在寄存器中 • 相对转移与绝对转移 • 相对转移:转移目标为当前PC值加上偏移量 • 绝对转移:转移目标由指令或寄存器内容直接给出

  15. MIPS指令系统的转移指令 • 条件转移 • 都是直接、相对转移,如BEQ,BGEZ • likely与非likely,如BEQL,BGEZL • branch and link,如BGEZALL • 无条件直接转移 • 转移目标为{PC[31:28],IR[25:0],2’b0} • J与JAL • 无条件间接转移 • 转移目标为寄存器内容 • JR与JALR • 没有Call/Return • 只有ERET

  16. SPEC CPU2000转移指令统计(1)

  17. SPEC CPU2000转移指令统计(2)

  18. 转移指令间距离统计(1) 发射宽度增加,分支间的动态距离就会越小,分支预测的延迟对性能的影响就越大,当要求更高的发射宽度时,需要每个周期做不止一个预测

  19. 转移指令间距离统计(2) • Inter-branch distance(cycles) 模拟环境:4发射乱序机器 @SPECint2000

  20. 不同分支类型所占SPEC程序比例 • 17%是无条件立即跳转指令,跳转地址在指令中 • 10%是返回指令,返回地址栈RAS预测 • 1%是间接分支指令,采用BTB预测 • 72%是条件分支,大量的工作是进行条件分支预测。

  21. 分支指令执行的频率分布 • 大部分条件分支在程序运行过程中,仅仅执行几次 • 平均来说所有分支指令的53%仅仅执行99次或者更少 • 只有11%的分支执行了超过10000次或者更多。

  22. 分支执行的频率占整个SPEC分支的权重 • 说明了不同分支指令执行在整个程序分支总数的权重 • 执行99次或者更少的分支指令有53%,这53%的指令在spec程序分支执行比重中只占0.2%,在图上显示不出来 • 所示的占11%的分支指令(10000次以上)占据了所有分支执行的87%,也就是10%的指令占据了程序90%的运行时间。

  23. 分支成功率权重分布 • 分支成功率是分支指令成功跳转除以整个程序的分支总数 • 大概28%的指令总是跳转或者总不跳转, • 32%的指令跳转的几率总少于5%或者多于95%总跳转,也就是说60%的分支指令具有强烈的一个跳转方向 • 具有挑战性的工作是预测其余40%的分支跳转

  24. 程序的分支行为 • 循环结构 • 用一个0和1字符串来记录程序循环模式,分支预测器根据模式预测 • 程序分支联想性 • parse程序中“chines”,会预测到下一个字母是e • 30%的分支有这样的系统推测行为 • 程序分支之间相关性 • 多出现在程序的if-else • 60%的分支指令具有相关性

  25. 分支的可预测性(1) • 可以利用转移指令的 • 利用单个转移指令的重复性=>基于模式的预测方法 • 利用不同转移指令之间的关系=>基于相关的预测方法 • 方向相关、路径相关 • 利用单个转移指令重复性 • 循环型分支 • for型循环:TT…TN(成功n次后跟一次不成功 ) • while型循环:NN…NT(不成功n次后跟一次成功) • 周期重复模式型分支 • 定长重复模式类分支:{pat}q , |pat|=k (每隔k个分支模式就重复一次) • 块模式类分支:{Tn Nm}q 成功n次,不成功m次,如此循环

  26. Example: Y:if (cond1)  X:if (cond1 AND cond2) Z:if (cond1)  Y:if (cond2)  X:if (cond1 AND cond2) Y:if (cond1) a = 2  X:if (a = = 0) 分支的可预测性(2) • 利用转移指令之间的方向相关 • 两个分支的条件(完全或部分)基于相同或相关的信息 • 第二个分支的结果基于第一个分支的结果产生

  27. Example: Z: if (NOT (cond1)) Y:else if (NOT(cond2)) V:else if (cond3)  X:if (cond1 AND cond2) 分支的可预测性(3) • 利用转移指令之间的路径相关 • 如果一个分支是通向当前分支的前n条分支之一,则称该分支处在当前分支的路径之上。 • 处在当前分支路径上的分支与当前分支结果之间的相关称为路径相关

  28. 分支的可预测性(4)

  29. 分支指令行为小结 • 分支指令是很频繁的 • 分支指令有较好的局部性 • 分支指令具有可预测性

  30. 解决转移条件相关的方法 • 阻塞 • 等待直到转移条件确定 • 用delay slot容忍延迟 • 延迟槽指令来源 • 编译器优化 • 循环:循环展开减少转移指令、软流水减少阻塞 • 分支:全局代码调度 • 函数调用:inline • 转换为数据相关 • 条件指令、谓词 • 软件猜测执行 • 硬件保证猜错的指令执行不会引起不良后果 • 硬件转移预测 • 转移条件未确定时预测转移是否成功 • 静态与动态预测

  31. 利用延迟槽 • 延迟槽指令的来源 • 来自转移指令前:肯定执行 • 来自转移目标地址:转移成功才执行 • 来自转移不成功地址:转移不成功才执行 • 单延迟槽的编译效果 • 能为 60% 左右的转移延迟槽找到有效操作 • 大约80%的延迟槽指令用于有效计算 • 因此大约50% (60% x 80%) 的延迟槽操作用于有效计算 • 延迟槽的限制 • 超流水情况下一条延迟槽不够 • 多发射情况下延迟槽反而成为需要特殊照顾的兼容负担

  32. 循环展开 • 循环的数据相关关系 • 循环内相关:S2使用同一次循环中S1计算的A[i+1]. • 循环间(loop-carried)相关:本次循环计算的A[i+1]/B[i+1]将被下一次循环使用。 • 循环内相关表示一个循环体内的多条指令不能并行执行 • 循环间相关表示多个循环体不能并行执行

  33. 循环展开的条件 • 数组元素相关的判断 • Affine和nonaffine • X[a*i+b] • X[Y[i]] • 最大公约数法 • X[a*j+b] = X[c*k+d] • GCD(a,c)整除(d-b)则有相关 • 名字相关的消除 • 重命名技术 • 指针相关的判断 • 只有一些经验的方法

  34. 软件循环展开消除控制相关 LD F0 0 R1 MULTD F4F0 F2 SD F4 0 R1 LD F0 0 R1 MULTD F4F0 F2 SD F4 0 R1 • 软件展开两个循环 • 循环展开、寄存器重命名、变换次序 • 需要18拍, 与Tomasulo算法一样 • 软件循环展开的不足 • 有些循环不好展开(如循环次数不定的循环) • 增加指令CACHE的负担 LD F0 0 R1 MULTD F4F0 F2 SD F4 0 R1 LD F6 0 R1 MULTD F8F6 F2 SD F8 0 R1 LD F0 0 R1 //第1拍发射, 第9拍执行结束, 第10拍写回 LD F6 0 R1 //第2拍发射, 第10拍执行结束, 第11拍写回 MULTD F4F0 F2 //第11拍开始执行, 第14拍执行结束, 第15拍写回 MULTD F8F6 F2 //第12拍开始执行, 第15拍执行结束, 第16拍写回 SD F4 0 R1 //第16拍开始执行, 第16拍执行结束, 第17拍写回 SD F8 0 R1 //第17拍开始执行, 第17拍执行结束, 第18拍写回

  35. 动态调度进行自动循环展开 • 在以前Tomasulo算法中,利用动态调度以及定点与浮点运算的重叠对如下程序段可以掩盖转移指令的开销,达到自动循环展开的效果 Loop: LD F0 0 R1 MULTD F4 F0 F2 SD F4 0 R1 SUBI R1 R1 #8 BNEZ R1 Loop • 每个循环需要的拍数与软件循环展开一样

  36. 新循环体的每个操作来自不同的循环体,以分开数据相关的指令,相当于软件的Tomasulo算法新循环体的每个操作来自不同的循环体,以分开数据相关的指令,相当于软件的Tomasulo算法 • 符号级循环展开,比真正循环展开代码开销小 软流水

  37. 全局代码调度 • 循环展开和软流水解决循环的问题,全局代码调度解决分支的问题 • 尤其是核心循环内的分支语句对性能影响大 • 越过转移指令调度代码 • 循环展开分析数据相关,全局代码调度分析控制相关 • 数据相关确定部分序 • 控制相关确定全序 • 全局代码调度要考虑 • 某分支执行的频度 • 不改变数据依赖和例外行为 • 把对B的赋值移到BNEZ之前 • THEN和ELSE部分的执行频度? • B是不是在关键路径上? • BNEZ之前是不是有指令空槽? • ELSE部分使用B的值? • 移C的赋值更好? • 全局代码调度的复杂性 • Trace scheduling • Super block

  38. Trace Scheduling • 注重优化频繁路径 • 可能增加非频繁路径开销 • 常与Profiling结合使用 • 两步调度 • Trace选择:通过转移静态猜测,把几个基本块连续放在一起,通过循环展开增加Trace长度 • Trace压缩:代码调度 • 好处 • 在Trace内部调度代码方便 • 跳转只能跳入/跳出Trace,跨过Trace的入口或出口移代码时,需要在入口/出口处进行调整 • 主要对科学计算代码有好处

  39. Super Block • Trace有多个入口多个出口,Super Block只有一个入口多个出口,更容易进行代码压缩 • 通过“tail duplication”代码负责非频繁路径的处理,从而实现单入口。 • 超块比Trace更像基本块,因此更有利于代码压缩和优化,但增加了代码

  40. x A = B op C 把控制相关转换成数据相关 • 把条件转移指令转换为条件执行 if (x) then A = B op C else NOP • 只有条件为真时才写结果,为假时不写结果也不发生例外 • RISC系统如Alpha, MIPS, PowerPC, SPARC都增加了条件MOVE指令; PA-RISC可以取消任何后续指令 • EPIC: 使用64个1位的谓词寄存器来选择是否写执行结果 • 条件指令的缺点 • 条件为假时仍需要1拍,占用发射槽和功能部件 • 条件未确定仍需要在执行前等待,转移猜测反而在执行后 • 条件复杂时会降低效率,因为条件在执行时才确定

  41. 条件指令举例 • 假设转移指令没有延迟槽 • 条件指令可消除简单的条件转移,对取绝对值等操作有用 • 条件指令仍要在执行前等待条件,注意例外的处理 //if (A=0) {S=T;} BNEZ R1,L ADDU R2,R3,R0 L: CMOVZ R2,R3,R1 LW R1,40(R2) ADD R3,R4,R5 LWC R8,0(R10),R10 ADD R6,R3,R7 BEQZ R10,L LW R9,0(R8) LW R1,40(R2) ADD R3,R4,R5 ADD R6,R3,R7 BEQZ R10,L LW R8,0(R10) LW R9,0(R8)

  42. 硬件支持的软件猜测 • 条件指令把控制相关转换成数据相关 • 仍要在执行前等待条件 • 不能利用转移猜测(提交前等待) • 通过软件猜测执行彻底消除控制相关 • 编译器(通过寄存器重命名)移动指令而不改变数据流行为,如错误猜测所修改的寄存器以后不会用到 • 访存操作的地址冲突,load或store越过前面的store执行 • 猜测执行的指令引起的例外不会改变程序行为

  43. 软件猜测执行引起的例外处理 • 猜测引起的例外 • 猜测引起的可恢复例外(如TLB失效)只影响性能 • 不可恢复例外(如地址错、存储保护错)影响程序的正确执行。 • 猜测引起的例外处理 • 把猜测引起的例外当作正常例外一样处理,不可恢复例外返回一个任意值(正确程序没问题,不能终止错误程序) • 猜测的指令不引起不可恢复例外,专门指令检查例外 • 猜测指令发生不可恢复例外时,通过poison位把例外记录在寄存器中,后续指令读寄存器时进行例外处理 • 硬件保证猜测消除后(相关转移条件确定)才能提交,修改ROB

  44. 访存操作的软件猜测执行 • load或store越过前面的store执行 • 降低关键执行路径的长度 • 冲突的处理 • 编译保证不会冲突(如前面循环的例子) • 把访存操作提前,但在原位保留一条检查冲突的指令,提前的访存指令执行时硬件记录访存地址,以便与后面的store操作进行比较。检查指令如果发现相关,则重新执行提前的访存指令以及后续相关指令。 • 1 Loop: LD F0,0(R1) • 2 LD F6,-8(R1) • 3 LD F10,-16(R1) • 4 LD F14,-24(R1) • 5 ADDD F4,F0,F2 • 6 ADDD F8,F6,F2 • 7 ADDD F12,F10,F2 • 8 ADDD F16,F14,F2 • 9 SD 0(R1),F4 • 10 SD -8(R1),F8 • 11 SD -16(R1),F12 • 12 SUBI R1,R1,#32 • BNEZ R1,LOOP • SD 8(R1),F16; 8-32 = -24 1 Loop: LD F0,0(R1) 2 ADDD F4,F0,F2 3 SD 0(R1),F4 4 LD F6,-8(R1) 5 ADDD F8,F6,F2 6 SD -8(R1),F8 7 LD F10,-16(R1) 8 ADDD F12,F10,F2 9 SD -16(R1),F12 10 LD F14,-24(R1) 11 ADDD F16,F14,F2 12 SD -24(R1),F16 13 SUBI R1,R1,#32 14 BNEZ R1,LOOP 15 NOP

  45. 转移预测技术(1) • 转移预测基本原理 • 在取指或译码阶段预测转移是否成功以及转移目标进行后续指令的取指,以减少指令流水线由于控制相关而堵塞 • 在转移条件或转移目标确定后再对预测结果进行修正 • 分支处理机制的性能取决于 • 预测精度(BPA)=> 设计好的预测器 • 预测精度越高,能抽取的并行性就越多 • 预测正确所付的代价:转到目标地址处执行所需的延迟 • 译码时根据IR内容预测:有一拍的延迟槽,在4发射情况下有4条指令的延迟槽 • 取指时根据PC预测:没有延迟槽,需要BTB/Trace Cache等机制 • MIPS R10000无BTAC,MIPS R12000有32项BTAC • 预测错所付的代价 • 尽量提前执行转移操作 • Pentium II/III和Alpha 21264重新刷新流水线需要11周期以上

  46. 转移预测技术(2) • 转移预测关键技术 • 如何保证准确的预测:根据记录的历史进行预测 • 如何记录转移历史,记录哪些转移历史 • 记录多少转移历史 • 何时更新:更新太早,转移指令也可能被取消;更新太晚,导致转移历史不准确 • 如何在取消猜测执行的操作时保证现场精确性 • 增加提交流水级,在提交时修改寄存器和内存 • I/O指令的猜测执行难以取消 • 如何识别流水线中的指令哪些需要取消,哪些不要取消 • 例外取消一般在提交时,取消所有后续指令 • 转移取消一般在执行后,只取消部分指令 • 延迟槽指令的处理

  47. 转移预测技术(3) • 静态/动态转移预测 • 静态预测:总是预测转移成功或总是预测转移不成功 • 预测转移成功:较精确,计算转移地址需要delay slot • 预测转移不成功:直接用PC+4 • 动态预测:根据转移指令执行历史进行预测 • 复杂预测技术:精确、控制复杂 • 混合预测:利用编译器的提示,结合动态和静态预测 • 每周期1个/多个分支预测(宽带分支预测) • 每周期1个预测,基本可满足4-6 发射需要的取指带宽 • 每周期多个预测,大都与Trace Cache相结合,以满足6发射以上需要的取指带宽

  48. .7  .3 .49 .21  .7 .3   .34 .15  .49 .21 .21 .09 .24      .10 (b) 完全急进执行 .17  .07 .12  .05 .7 .3   .49 .21   (a) 单通路推测执行 .34 .15  .24 .10  (c) dis-joint 急进执行 转移预测技术(4) • 单通路执行/多通路执行分支预测 • Single path execution • full eager execution • disjoint eager execution

  49. 转移预测技术(5) • 高性能转移预测机制的特征 • 预测时减少延迟槽:如用BTB/BTAC • 执行时尽早确定转移结果 • 发现预测错要有有效的流水线刷新机制 • 提供优良的分支预测器和推测执行机制:是研究得最多的,如提供多级预测机制

  50. Branch outcome and other info Predicted direction (taken/not taken) Branch Predictor Program Counter (PC) Predicted target address (where the branch is going) 转移猜测技术(6) Predicting where the next instruction is in the instruction stream.

More Related