3.2 Ö¸Á²¢ÐиÅÄîÓë¼¼Êõ

Size: px
Start display at page:

Download "3.2 Ö¸Á²¢ÐиÅÄîÓë¼¼Êõ"

Transcription

1 第三章 高级流水线与指令级并行性 第二部分 节 -3.5 节 石教英

2 3.2 指令级并行概念与技术 提高流水线性能的思路 (1) 直观思路 : 缩小流水线的 CPI CPIunpipelined 因为 Speedup= CPIpipelined CPIpipelined = Ideal pipeline CPI+ pipelined stall cycles per instruction =1+ Structual stalls + RAW stalls + WAR stalls + WAW stalls + Control stalls

3 所以 : 缩小 CPIpipelined 的途径就是 : 减少各种竞争造成的停顿周期数

4 各种高级流水线技术及其作用对象 : 技术 作用 ( 减少某类 Stall) Loop unrolling Control stalls Basic pipeline scheduling RAW stalls Dynamic scheduling with scoreboarding RAW stalls Dynamic scheduling with register renaming WAR & WAW stalls Dynamic branch prediction Control stalls Issuing multiple instruction per cycle Ideal CPI Compiler dependence analysis Ideal CPI & data stalls Software pipelining and trace scheduling Ideal CPI & data stalls Speculation data and control stalls Dynamic memory disambiguation RAW stalls involving memory

5 本质上思路 (2)---- 研究指令级并行性 (ILP,instruction-level parallelism), 据此进一步开发指令重叠执行的可能性 流水线技术就是指令重叠执行技术 前提 : 有足够硬件资源 ( 无机构竞争 ) 重叠执行的指令是相互独立的, 也就是说, 无数据依赖关系和执行顺序的约束关系, 即无数据竞争和控制竞争

6 指令之间可重叠执行性, 即所谓指令级并行性 因此进一步研究开发存在于指令之间的并行性, 将进一步提高流水线的性能 我们将从两个方面研究 ILP 研究循环的多次迭代之间存在的并行性, 即所谓循环级并行性 (loop-level parallelism)( 一类 指令并行性 ) 研究指令之间的相关性 (dependences)( 具有普 遍意义的指令并行性 )

7 3.2.2 指令级并行性 程序基本块 (basic block) 内指令间并行性是有限的 程序基本块 : 指不包括转入 ( 除程序入口 ) 和 转出 ( 除程序出口 ) 指令的连续代码序列, 通常由 6-7 条指令组成 根据统计 ( 参见 Fig.2-28, p107) 在整数程序中动 态转移的概率为 16%, 即程序中一对转移指令 之间仅含 6-7 条指令 ) 考虑到基本块内指令之间存在各种相关性, 所以程序基本块内可重叠执行的指令数远少于 6 条

8 必须研究多个基本块代码之间的可重叠 执行性, 即 ILP 最常见, 也是最简单 的一种多个基本块之间的并行行为 : 循环多次迭代之间的并行性, 称微循环级并行性 (loop-level parallelrism--llp) [ 例 ] for (i=1; I<=1000; i=i+1;) x[i] = x[i] + y[i]; loop 内指令无重叠执行可能性, loop 的每一次迭代可重叠执行

9 如何将此类 LLP 转化为 ILP? 首先把 loop 按每次迭代代码序列展开, 再根据代码指令指令之间相关性进行调度

10 3.2.3 将 LLP 转化为 ILP 方法 ---- 循环展开 (loop unrolling) 加流水线调度 (pipeline scheduling) 两种 loop unrolling 方法 : static loop unrolling by compiler dynamic loop unrolling by hardware 流水线调度 : 若 j 指令要用到 I 指令的结果 (RAW 相关 ), 流水线调度是指把 (i 和 j) 两条 指令分隔开来, 两者之间应间隔的时钟周期数等于源指令产生结果所需的延时 (latency) 时钟周期数

11 两种流水线调度方法 Static pipeline scheduling by compiler; Dynamic pipeline scheduling by hardware. 本章采用如下假设 无结构竞争 ( 即有足够硬件可供使用 ), 每一时钟周期可发射一条指令 采用 DLX 标准的整数操作流水线结构 ( 即由 IF,ID,EX,MEM,WB 五拍组成 ) 转移指令 (Branch) 后由一个时钟周期延时 浮点操作的延时时钟周期数参见表 ( Fig 4.2, p224; 表 4-37, p204)

12 浮点操作延迟时间 前操作指令 后继相关指令 等待时钟周期数 FP ALU 操作 FP ALU 操作 3 FP ALU 操作 Store( 双字 ) 2 Load( 双字 ) FP ALU 操作 1 Load( 双字 ) Store( 双字 ) 0

13 实例 : 说明编译器如何通过调度和循环 展开来提高流水线性能 For (i=1; i<=1000; i++) x[i] = x[i] +s; 其中 : x[i] ----array element; s ---- scalar.

14 转换为 DLX 汇编语言代码如下 : Loop: LD F0, 0(R1) ADDD F4, F0, F2 SD 0(R1), F4 SUBI R1, R1, 8 BNEZ R1, Loop R1: 数组元素的地址, 初始化为最高地址 F2: 标量值 s 双字地址间隔为 8 字节

15 计算未调度时 loop 一次迭代所需时钟周期数 Loop: LD F0, 0(R1) ADDD F4, F0, F2 SD 0(R1), F4 SUBI R1, R1, 8 BNEZ R1, Loop F D X M W F D s A 1 A 2 A 3 A 4 W F s D s s X M W F s s D X M W F s D X M W 10 CC F F

16 对 loop 代码进行调度后, 一次迭代所需时钟周期数 Loop: LD F0, 0(R1) SUBI R1, R1, 8 ADDD F4, F0, F2 BNEZ R1, Loop SD 8(R1), F4 F D X M W F D X M W F D A 1 A 2 A 3 A 4 W F D X M W F D s X M W 6 CC F s D X M W

17 前页说明 : 为了颠倒 SUBI 和 SD 顺序,SD 的地址发生了改变! 即恢复到原地址 一次迭代由 9 个时钟周期减少到 6 个时钟周期 是积极算一个数组元素仅需 3 个时钟周期 (Load,add 和 store); 另外 3 个时钟周期 (SUBI,BNEZ 和一个 stall) 是 loop 的开销

18 用 loop unrolling 来消除 loop overhead, 以及 进一步改善调度性能. Loop: LD F0, 0(R1) stall ADDD F4, F0, F2 stall, stall SD 0(R1), F4 LD F6, -8(R1) stall ADDD F8, F6, F2 stall, stall SD -8(R1), F8 LD F10, -16(R1) stall ADDD F12, F10, F2 stall, stall SD -16(R1), F12 LD F14, -24(R1) stall ADDD F16, F14, F2 stall, stall SD -24(R1), F16 SUBI R1, R1, #32 stall BNEZ R1, loop stall

19 前页说明 Loop 展开 4 次 SUBI 指令中 R1 要减 32 注意 loop 展开后, 每一次迭代采用不同寄存器, 如用 F0, F6, F10, F14 表示 LD 的目的寄存器, 分别表示不同变量 展开后 loop 需 28 个时钟周期, 即每次迭代平均需 28/4=7 个时钟周期, 仅通过展开, 消除 loop overhead, 就可缩短每次迭代的时钟周期数, 这 里没有做任何调度.

20 对 unrolling loop 进行调度, 达到进一步缩短 每次迭代的时钟周期数 Loop: LD F0, 0(R1) LD F6, -8(R1) LD F10, -16(R1) LD F14, -24(R1) ADDD F4, F0, F2 ADDD F8, F6, F2 ADDD F12, F10, F2 ADDD F16, F14, F2 SD 0(R1), F4 SD -8(R1), F8 SUBI R1, R1, #32 SD -16(R1), F12 BNEZ R1, Loop SD 8(R1), F16 ( 因 R1 已减 32, 所以加 8)

21 前页说明 : 展开调度后的 Loop 共需 14 个时钟周期, 则每次迭代平均只需 14/4=3.5 个时钟周期 调度展开的循环对提高性能的作用大于单纯的调度

22 例子说明的问题 : 通过例子, 我们看到研究开发 ILP 对提高处理器功能单元性能 ( 即流水线性能 ) 的巨大作用 ; 流水线思想早在 60 年代就开始应用于处理器, 但只有在 80 年代和 90 年代, 在深入研究 ILP 之后提出一系列先进流水线技术, 才成为使微处理器性能突飞猛进的关键技术 ; 上述例子所采用的一些方法对我们人类来讲都十分直观和简单, 但要使硬件和软件 ( 编译器 ) 来完成上述过程, 必须总结出一套形式化的, 方法学上的条例来确定何时以及如何来改变指令的执行顺序

23 小结 : 关于循环展开和调度方法在执行过程 中, 我们做出了以下决策和代码变换 (1) 确信把 SD 移到 SUBI 和 BNEZ 之后是合法的, 并求出 SD 的位移量 ; (2) 确信循环体的每次迭代是相互独立的 ( 除维持循环的代码外 ), 以及循环体展开有利于性能提高 ; (3) 为了避免因采用同一寄存器而造成不必要的限制, 可以采用不同寄存器表示不同变量 ;

24 (4) 消除额外测试和转移指令, 调整维持循环的代码 ; (5) 只有确信不同迭代中的 Loads 和 stores 是互相独立的之后,Loads 和 Stores 才能在展开后的循环体中互换位置 为此必须分析存储器的地址, 并确信 Loads 和 stores 访问的并非同一地址 这就是所谓的 memory disambiguation (6) 在调度指令执行顺序时, 必须确保相关性不变, 才能使调度后的代码的结果与源代码的相同

25 做出上述决策的关键在于 了解指令之间的相关性 (dependence) 了解给定的相关性下, 应如何改变指令或重 排其执行顺序

26 3.2.4 相关性 (Ep229, Cp215) 两条指令是相互独立的, 则是并行的, 其执行顺序允许重排 ; 两条指令是相关的, 则不是并行的, 其执行顺序不允许重排 ; 明确指令相关性对 调度的可行性 程序并行程度的多少 如何利用程序的并行性 至关重要

27 存在三类相关性 数据相关性 名字相关性 控制相关性

28 数据相关性 (data dependences) 定义 : 指令 j 相对于指令 I 存在数据相关性, 则下列条件之一必定成立 : 指令 i 产生的结果被指令 j 所用, 或 指令 j 与指令 k 数据相关, 以及指令 k 与指令 I 数据相关 ( 即存在相关 ) 相关性是程序的一种性质 存在相关性仅仅指出存在竞争 (hazard) 的可能性, 但是是否会造成可检测到的竞争, 以及是否会造成真正的停顿则是流水线组织的性质

29 举例 : Loop: LD F0, 0(R1) ;F0= 数组元素 ADD F4, F0, F2 ;add scalar in F2 SD 0(R1), F4 ; Store result RAW 1stall RAW 2stalls SUBI R1, R1, #8 ; decrement pointer 8 bytes(per DW) BNEZ R1, Loop RAW, 1 stall

30 注意 : 黑箭头表示存在数据相关性, 即存在 RAW 竞争可能性, 指令的执行顺序不能改变 ; 上一段代码中数据相关性将造成停顿周期 ; 下一段代码中数据相关性将不会造成停顿, 因为在 DLX 即其中 提前 硬件可以消除这一停顿

31 了解程序中存在相关性的重要性 : 因为相关性将 指出存在竞争的可能性 ; 确定指令的执行顺序, 即指令的结果必须按指定的顺序计算 ; 给出可能开发的并行性的上限 ( 参见原版书 4.7 节

32 消除数据相关性的方法, 即克服数据相 关性对指令级并行性的限制的方法有两 类 : 保持相关性不变, 但设法避免造成竞争 ---- 调度法 即调度指令, 降不相关指令插入停顿周期, 或改变指令顺序, 达到避免出现停顿, 又保持相关性不变 ( 如前例 ) 通过变换代码消除相关性 ---- 代码变换法

33 例 : LD F0, 0(R1) ADDD F4, F0, F2 SD 0(R1), F4 SUBI R1, R1, #8 LD F6, 0(R1) ADDD F8, F6, F2 SD 0(R1), F8 SUBI R1, R1, #8 未完全优化 LD F0, 0(R1) ADDD F4, F0, F2 SD 0(R1), F4 LD F6, -8(R1) ADDD F8, F6, F2 SD -8(R1), F8 SUBI R1, R1, #32 BNEZ R1, Loop 优化, 但未调度

34 注意 : 已作循环展开, 保留 SUBI, 但已消除 BNEZ; 由于 SUBI 存在, 造成数据相关性 ( 由箭头表明 ), 涉及 SUBI,LD 和 SD 等指令, 整个代码必须按顺序执行 ; 若由编译器计算 R1 的中间值, 并将其转换成 LD 和 SD 的偏移量, 最后一个 SUBI 减 32, 就可以消去由 SUBI 带来的相关性 ; 同时也可消去 SUBI 指令

35 名字相关性 定义 : 当两条指令使用同一寄存器 ( 名 ) 或 存储器单元 ( 号 ), 称为 名字, 但这 两条与该名字相关的指令之间不存在数 据流动 ( 传递 ),) 称这两条指令为名字 相关

36 两类名字相关性 设指令 i 在程序中位于指令 j 之前, 则 反相关性 : 当指令 j 写入的寄存器或存储单元是指令 I 读的寄存器或存储单元 反相关性对应于 WAR 竞争, 这也是 反相关性 名称的来由, 因为它与数据相关性对应的 RAW 竞争方向相反 因此一旦检测到 WAR 竞争, 说明存在反相关性, 必须保持其先后次序不变, 从而造成无法调度

37 两类名字相关性 输出相关性 : 指令 I 和 j 对同一寄存器或存储单元进行写操作 输出相关性对应于 WAW 竞争 同理, 若存在输出相关性 ( 即意味着存在 WAW 竞争 ), 也不能改变先后次序

38 消除名字相关性的方法 根据名字相关性的定义可知, 由于相关指令之间不存在数据流动, 因此只要改变它们使用的寄存器名或存储单元号,( 即两条指令不要使用同名字的寄存器或同一存储单元 ), 即可消除名字相关性 因此, 对于寄存器操作数而言, 只要改用其它寄存器即可, 这一方法称为 寄存器改名 法 (register renaming) 寄存器改名可由 compiler 静态完成, 也可以由硬件动态完成

39 举例 :(p233)

40 注意 : 例中循环体被展开 4 次, 每次迭代中使用相同寄存器 ; 消除了循环的额外开销 黑色箭头指示 名字相关性, 灰色箭头只是 数据相关性

41 采用 寄存器改名 方法消除名字相关性后, 得代码如下 ( 数据相关性保持不变 )p233

42 控制相关性 定义 : 控制相关性指某指令相对于转移指令的顺序关系 原则上讲, 除程序中第一基本块指令外, 每一条指令都是控制相关的, 即依赖于某组转移指令, 这种控制相关性时必须遵守的

43 举例 :if - then statements; if p1{ s1; }; if p2{ } s2; s1 与 p1 控制相关, s2 与 p2 控制相关, 但与 p1 控制无关

44 控制相关的两条限制 : 与某转移指令控制相关的指令不能调到该转移指令之前,( 即不能由控制相关变为控制不相关 ) 与某转移指令控制无关的指令不能调到该转移指令之后,( 即不能由控制无关变为控制相关 ) 注意 : 有时候可能破坏上述限制, 而仍有正确结果 ( 详见后述 投机 策略和条件指令 )

45 举例 : 目的 : 说明控制相关的存在 说明如何去掉控制相关性 (p235)

46 第一块指令无控制相关性 因为存在三条 BEQZ, 所以存在 控制相关性 ( 黑 箭头表示 ) 因 此此循环展开代 码不能进行调度

47 可以去掉中间三条 BEQZ, 从而去掉由它们造成的控制相关性 理由 : R1 是等于 32 的倍数, 所以中间三条 BEQZ 是不会成功的, 这三条转移指令相当于空操作 去掉了控制相关性后, 整个循环展开代码 就可以进行优化 ( 调度 )

48 程序中控制相关性的保证得益于简单流水线 (3.1 节 ) 的两条性质 : 1. 指令的按序执行性 确保 Branch 前的指令只能在 Branch 前执行 ; 2. 控制竞争的检测将确保控制相关指令只有当转移方向明确后才能执行

49 遵守控制相关性是保证程序正确性的一种有用的且简单的方法, 然而控制相关性并非是必须确保的关键性质, 例如在上例中, 可以去掉 BEQZ 指令达到消除控制相关性 确保程序正确性的两个关键性性质是 : 1. 遵守异常 ( 中断 ) 行为 ; 2. 遵守数据流向 通常, 这两个性质是由控制相关性来保证的

50 遵守异常 ( 中断 ) 行为指改变指令执行 顺序时不应引起新的异常 ( 中断 ) 例 :BEQZ R2, L1 LW R1, 0(R2); L1: 这里存在控制相关, 但无数据相关 若不遵守控制相关性, 把 LW 移到 BEQZ 前, 这里虽然无数据相关性, 但由于执行 LW 时可能出现存储器保护异常 ( 中断 ), 因此不能将 LW 提前

51 数据流向指某结果的产生以及被应 用的流向 转移指令使数据流向不再是静态的, 而变为动态的, 即源数据可以由多种来 源, 因此为确保数据流向, 必须遵守控 制相关性

52 例 : ADD R1, R2, R3] BEQZ R4, L SUB R1, R5, R6 L: OR R7, R1, R8 R1 有两个源 说明 : OR 的操作数 R1 有两个来源, 即 ADD 或 SUB 这与 BEQZ 成功与否有关 所以只有遵守控制相关性才能确保数据的正确流向

53 破坏控制相关性, 而不影响异常 ( 中断 ) 行为和数据流向的例子 : ADD R1, R2, R3 BEQZ R12, skip SUB R4, R5, R6 ADD R5, R4, R9 skip: OR R7, R8, R9 若我们知道 SUB 指令的结果 R4 在 skip 后不再被用到, 称为 死 的, 且不会引起异常, 则我们可以不遵守控制相关性将 SUB 提前到 BEQZ 前执行

54 这种调度技术称为 投机 (speculation), 因为 compiler 通常根据转移指令的行为投机地预测其成功与否 这里的做法对于不成功转移概率大的情况有利

55 前面已经介绍过 : 控制竞争与控制相关性是紧密联系在一起的 通过检测控制竞争的存在与否来确保控制相关性不被破坏 控制竞争将导致控制停顿 (stalls), 因此确保控制相关性可消除控制竞争, 从而消除控制 Stalls.

56 消除或减少控制停顿 (stalls) 的方法有 : 采用 delayed branch 方法减少停顿周期数 ( 见 ) 循环展开来消除控制相关性 ( 见 ) 将转移指令转变为条件执行指令 (conditional instruction) 和 compilerbased and hardware speculation (3.3 节 )

57 3.2.5 循环级并行性 (LLP): 概念和技术 本节研究如何把相关性概念扩充到 loop 之间 : 仅指操作数在不同迭代之间的相 关性, 即 loop 间的数据相关性 ( 重点研究 ) loop 间的名字相关性 ( 可用 renaming 方法消除 ) Loop 之间存在的数据相关性, 称为 Loop-carried dependence( 循环传递相 关性 )

58 举例 1: 指出 loop 中 S1 和 S2 之间的相关性 For (i=1;i<=100;i=i+1){ A[i+1] = A[i]+C[i]; /*S1*/ B[i+1] = B[i] +A[i+1]; /*S2*/ } 分析 : 存在两种数据相关性 : S1 中 A[i+1] 和 S2 中的 B[i+1] 均要用到各自上一次迭代的值 这就是所谓 loop-carried dependence. 对这种相关性而言, 该循环的不同迭代是不能并行的, 即必须顺序执行 S2 中的 A[i+1] 来自本次迭代的 S1, 故不是 loopcarried 如果 loop 中只含这种相关性, 则该 loop 的不同迭代是可以并行执行的 S1 S2

59 举例 2: 虽然存在 loop-carried 相关性, 仍能实 现 loop 并行执行的例子 说明 For (i=1;i<=100;i=i+1){ } A[i] = A[i]+B[i]; /*S1*/ B[i+1] = C[i] +D[i]; /*S2*/ S1 S2 S1 中 B[i] 依赖于上一次迭代的 S2, 所以这是一种 loop-carried 相关性 但这一相关性不是 Circular( 连环的 ) 因为 S1 和 S2 本身相对不同迭代无相关性, 且只有 S1 依赖于上次迭代的 S2, 而 S2 不依赖于 S1

60 作程序变换如下 : A[1] = A[1] + B[1]; For (i=1; i<=99; i=i+1){ B[i+1]= C[i] + D[i]; A[i+1] = A[i+1] +B[i+1] } B[101]=C[100+D[100]; 说明 : 作适当程序变幻, 可以使这一 loop 变为并行

61 3.3 克服数据相关的动态调度方法 调度 (scheduling)---- 重排指令执行顺 序, 消除指令相关性, 达到减少或消除 流水线的停顿周期 调度分两类 静态调度 ---- 由编译器将相关指令隔离开来 动态调度 ---- 由硬件在指令执行过程中重排指令的执行次序

62 动态调度 动态调度的优点 可处理在编译时不清楚的相关性 可减轻编译器的复杂性 适用于不同流水线 动态调度的代价 硬件复杂度的提高

63 3.3.1 动态调度思想 简单流水线技术的主要缺陷 指令按序发射 (issue), 指令按序执行, 按序结束 一旦前面指令停顿, 后面指令不能提前执行 例 DIVD F0, F2, F4 ADDD F10, F0, F8 SUBD F12, F8, F14 DIVD 与 ADDD 之间存在 RAW 竞争, 它们之间要插入 Stall 周期 ; SUBD 与它们无关, 在普通流水线中, 不能提前执行, 也必须跟着停顿

64 启发 : 若指令能不按顺序执行, 只要它们的操作数已准备好, 可以提前执行, 可以提前完成, 就可提高流水线的效率 ---- 这就是 调度 思想的基础, 调度又分静态调度和动态调度 动态调度的必要条件 : 允许多条指令发射, 有足够硬件支持多条发射, 和多份功能单元支持并行操作 即将指令送入 EX

65 动态调度思想 ---- 按顺序发射多条指令, 只要条件成熟 : 无结构竞争 ( 即有足够硬件 ) 操作数已准备好就可以不按顺序执行, 不按顺序完成

66 为实现动态调度, 流水线必须具备以下功能 : (1) 允许按序取多条指令和发射多条指令 ---- 取指 (IF) 流水级允许按顺序取多条指令进入单口暂存器 (single-entry latch) 或队列 (queue), 指令然后从 latch 或 queue 取出, 进入 ID 节拍 (2) 能检查并消除 hazards---- 将 ID 流水级分为独立的两级 :Issue 级和 Read operand 级 : Issue 级功能 ---- 指令译码, 检查是否存在结构竞争 ( 即在这一流水级解决结构竞争问题 ; Read operands 级功能 ---- 等到无数据竞争 (RAW) 后, 读出操作数, 即在这一流水级解决数据竞争问题

67 在简单 DLX 流水线中 Write result 总是发生在最 后一拍, 因此在按序执行时, 不可能出现 WAR 和 WAW 竞争, 然而在允许不按序执行时, 就可能出现 WAR 和 WAW 竞争 例 :DIVD F0, F2, F4 ADDD F10, F0, F8 SUBD F8, F8, F14 RAW, 要插入 3 个 stalls WAR, 若允许乱序执行, 则出现了 WAR 在动态调度时如何解决 WAR 和 WAW 两种竞争, 将作进一步介绍

68 (3) 具备多重功能单元或流水化的功能单元 ---- 为了满足不按序执行何不按序结束, 在 EX 流水级必须至少准备好多重功能单元, 如多个加法器, 乘法器, 除法器等, 或者将这些功能单元也设计成流水线结构, 允许多条指令重叠执行, 最终达到每一流水周期完成一条指令的目的

69 3.3.2 记分牌动态调度法 (Dynamic Scheduling with Scoreboard) 记分牌是动态调度的一种方法,1964 年 CDC6600 提出这一思想 带记分牌的 DLX FP 处理器结构

70 带记分牌的 DLX 处理器基本结构图 寄存器数据总线浮点乘浮点乘 浮点除 浮点加 整数部件 控制 / 状态 记分牌 控制 / 状态

71 上图说明 : 处理器有 5 个 : 2 个 FP Multiplier 1 个 FP Divide 1 个 FP Add 1 个 Integer Unit 寄存器和功能单元之间数据流通过数据总线传送 记分牌控制指令执行过程, 并纪录数据的状态

72 什么是记分牌? 记分牌是一集中控制部件, 其功能是控制数据寄存器与处理部件之间的数据传送 在记分牌中保存有与各个处理部件相联系的寄存器中的数据装载情况 当一个处理部件所要求的数据都已就绪 ( 装载完毕 ), 记分牌允许处理部件开始执行 当执行完成后, 处理部件通知记分牌释放相关资源 所以在记分牌中记录了数据寄存器和多个处理部件状态的变化情况, 通过它来检测和消除或减少数据相关性, 加快程序执行速度

73 记分牌的功能 : 负责 指令发射和执行 竞争检测和消除 每一条指令都要经过记分牌 ( 记录在 指令状态表 中 ), 即发射到记分牌 数据结构中 ; 纪录数据相关性, 把源和目的操作数记录在 功能单元状态表 中 ; 决定指令何时可读出操作数 ( 检测是否有 RAW 竞争 )

74 决定指令何时可以开始执行 ( 一旦操作数就绪, 立即开始执行 ); 若某条指令不能立即执行, 则由记分牌监控硬件的每一变化, 并决定何时才能开始执行 ; 控制指令何时能将结果写入目的寄存器 ( 即检测是否有 WAR 竞争 )

75 记分牌在每一流水级中的功能 DLX 简单流水线分 5 拍 :IF ID EX MEM WB; 我们只考虑 FP 操作, 因此可略去 MEM 拍 ; 如前所述已将 ID 改为 Issue 和 Read operands 两拍 ; 记分牌的功能是把指令从取指队列取出送入 Issue 拍开始 所以我们将考虑记分牌在下列流水级的功能 : Issue, Read operands, EX, WB.

76 1.Issue( 看指令状态表 ) 若某指令所需的功能单元为空 ( 即无结构竞争 ); 且无其它指令用到同一目的寄存器 ( 确保不会出现 WAW 竞争 ), 则记分牌把该指令发射 (issue) 到功能单元, 并更新其内部数据结构 ; 若存在结构竞争或 WAW 竞争, 则停顿指令发射, 直到竞争消失 ---- 检测结构竞争和 WAW 竞争, 若有则停顿

77 2. Read operands( 看功能部件状态表 ) 记分牌监控源操作数是否就绪 一个源操作数就绪的条件为 : 早前发射的活动指令对该操作数不进行写入操作 ( 即无 RAW 竞争 ) 含有操作数之一的寄存器, 就是该活动功能单元即将写入的寄存器, 如 SUBD F8, F8, F14. ( 即也不会出现 RAW 竞争 ) 记分牌在这一步解决了 RAW 竞争问题 当源操作数准备就绪, 记分牌通知功能单元读出操作数, 并开始执行

78 检测 RAW, 若有, 则停顿该指令, 但是在动态调度时, 有多条指令并行操作, 所以可能有另外指令满足条件, 则继续执行下去, 从而消除了停顿的损失

79 3. Execution 功能单元开始对操作数执行操作 当得到 结果 后, 功能单元通知记分牌该操作已执行完毕

80 4. Write result 当记分牌知道功能单元已结束执行流水线, 记分牌检查是否存在 WAR 竞争 如果存在 WAR 竞争, 则停顿指令, 即停顿 Write result 节拍, 一直到上一条指令读完为止 ---- 检测 WAR, 若有则停顿

81 例 :DIVD F0, F2, F4 ADDD F10, F0, F8 SUBD F8, F8, F14 RAW WAR 说明 : ADDD 和 SUBD 之间对 F8 存在 WAR 竞争, 所以 SUBD 将停顿下来, 一直到 ADDD 读出 R8 拍后

82 通常, 一条已完成的指令在下列条件下不允许写它的结果 : 在这条已完成指令前面 ( 按发射顺序而言 ), 有一条指令还未读该操作数 这条已完成指令的一个操作数与其结果采用同一个寄存器 若不存在 WAR 竞争, 或 WAR 消失后, 记分牌通知功能单元把其结果存入目的寄存器 在下一节介绍完记分牌的数据结构以后, 将给出记分牌在每一流水线的功能以形式化描述

83 DLX 记分牌的数据结构 由三部分组成 指令状态表 (instruction status) 指示每一条指令处于哪一流水级 寄存器结果状态表 (Register result status) 指示哪一功能单元将把结果写入哪一个寄存器

84 功能单元状态表 (Functional unit status) 指示功能单元所处状态, 每一功能单元有 9 个状态 : Busy---- 指示功能单元是 忙 还是 空 Op---- 功能单元正在完成何种操作 Fi---- 目的寄存器号 Fj, Fk ---- 源寄存器号 Qj, Qk ---- 生成源寄存器数 Fj, Fk 的功能单元 Rj, Rk ----Fj, Fk 就绪标识

85 举例 : 分析下列指令序列在记分牌中的状态 LD F6, 34(R2) LD F2, 45(R3) MULTD F0, F2, F4 SUBD F8, F6, F2 DIVD F10, F0, F6 ADDD F6, F8, F2

86 指令状态指令发射读操执行写结作数完成果 LD 已结束 说明 LD 已结束 EX, 但结果未写入 MULTD SUBD 功能部件有空, 故均已发射, 但操作数未就绪 DIVD ADDD 功能部件忙, 不能发射

87 名称 功能部件工作状态 Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Yes Load F2 F3 No Mult1 Yes Mult F0 F2 F4 Integer No Yes Mult2 No Add Yes Sub F8 F6 F2 Integer Yes No Divide Yes Div F10 F0 F6 Mult1 No Yes 寄存器结果状态 F0 F2 F4 F6 F8 F10 F12 F30 FU Mult1 Integer Sub Divide

88 说明 : ADDD 指令因为记分牌有空而列入, 但由于 Fpadd 被 SUBD 占用, 即出现结构竞争 ( 无加法器可用 ), 而处于 Stall, 即未进入 issue 状态 MULTD,SUBD,DIVD 均已进入 issue 状态, 但由于源操作数未就绪, 而不能进入 Read operand.

89 MULTD is ready to go to write result 指令状态指令发射读操执行写结作数完成果 LD 已结束 LD 已结束 说明 MULTD 已结束 EX, 但结果未写入 SUBD 已提前结束 DIVD 功能部件忙, 不能发射 ADDD WAR (F6) 竞争, 故不 能进入写结果流水级

90 名称 功能部件工作状态 Busy Op Fi Fj Fk Qj Qk Rj Rk Integer No Mult1 Yes Mult F0 F2 F4 Yes Yes Mult2 No Add Yes Sdd F6 F8 F2 Yes Yes Divide Yes Div F10 F0 F6 Mult1 No Yes 寄存器结果状态 F0 F2 F4 F6 F8 F10 F12 F30 FU Mult1 Add Divide

91 说明 : 初始状态为 : MULTD 已结束 EX, 但尚未写结果, 即 F0 未就绪 SUBD, 各项条件均满足, 已提早结束, 体现了不按序执行, 即动态调度思想 DIVD 因为 F0 未就绪, 不能进入 Read operand ADDD 已完成执行, 但与 DIVD 之间存在 WAR(F6) 竞争, 故不能写结果

92 DIVD is ready to go to write result 指令状态 指令 发射读操执行写结作数完成果 说明 LD 已结束 LD 已结束 MULTD 已结束 SUBD 已结束 DIVD 以执行完, 还未写结果 ADDD 早已提前结束

93 名称 功能部件工作状态 Busy Op Fi Fj Fk Qj Qk Rj Rk Integer No Mult1 Mult2 Add No No No Divide Yes Div F10 F0 F6 Yes Yes 寄存器结果状态 F0 F2 F4 F6 F8 F10 F12 F30 FU Divide

94 说明 : 初始状态为 : DIVD 已结束 EX, 但尚未写结果 当 MULTD 将结果写入 F0,DIVD 就立即进入 Read operands 及 EX 两步 当 DIVD 一读出 F6, 与 ADDD 之间的 WAR 竞争就消失, 所以 ADDD 立即将其结果写入 F6, 即 ADDD 先于 DIVD 完成

95 指令在不同流水级的功能, 既要做的 checks 和 Bookkeeping 动作的形式化描述如下 : 流水级 等待结束条件 操作 发射级 Not busy(fu) and Not Result(D) Busy(FU) Yes; Op(FU) Op; Fi(FU) D, Fj(FU) S1 ; Fk(FU) S2, Qj Result( S1 ); Qk Result( S2 ), Rj not Qj; Rk not Qk; Result( D ) FU 读操作数 Rj and Rk Rj No; Rk No; Qj 0, Qk 0 执行完成功能执行完写结果 f(fj(f) Fi(FU) or Rj(f)=No &(Fk(f) Fi(FU) or Rk(f)=No)) f(if Qj(f)= FU then Rj(f) Yes) f(if Qk(f)= FU then Rk(f) Yes) Result(Fi(FU)) 0; Busy(FU) No

96 DLX 记分牌动态调度演示实验

97 记分牌算法的性能限制 记分牌动态调度方法利用了程序中存在的 ILP, 通过乱序执行, 达到减少 RAW 造成的停顿周期, 然而其性能, 即消除 Stall 的能力受下列因素影响 指令级并行性不高 ( 需进一步研究开发更多的 ILP) 记分牌表项较少 ( 可增加硬件加以解决 )

98 功能单元数少 ( 可增加硬件加以解决 ) 存在反相关性 (WAR) 和输出相关性 (WAW), 导致 WAR 和 WAW 停顿, 也就是说, 记分牌方法无法消除 WAR 和 WAW 两种相关性 ---- 这一点对性能影响较大, 需研究新的动态调度方法 记分牌方法可消除 RAW 是由于乱序执行, 实际出现 RAW 时, 也是停顿的

99 3.3.3 Tomasulo 动态调度 Tomasulo 算法简介 Tomasulo 动态调度方法是在保留记分牌方法的关键技术 ( 多指令发射和不按顺序执行两种思想 ) 基础上加上寄存器改名技术 ( 用来消除 WAW 和 WAR 两种相关性 ) 的一种动态调度方法 这是 Tomasulo 在 1967 年研制 IBM360/91 机器时提出的

100 Tomasulo 方法所采用的 Resister-renaming 的实现方法是把记分牌中的寄存器名用一大组虚拟寄存器的名来代替, 即 用虚拟寄存器集来代替真实的 FP 寄存器组 虚拟寄存器集所含虚拟寄存器数目远大于真实 的寄存器组 因此用它来完成寄存器改名就很容易了 See p233, 如何用 reg 改名消除 WAR. Seep248, fig4.5 DIVD,ADDD 有 WAR, 故 ADDD 不能提前结束

101 虚拟寄存器集在 Tomasulo 方法中由每一功能单元所带的保留站 (reservation station) 和 Load buffers 和 Store buffers 组成 保留站与发射逻辑相结合完成寄存器改名将进一步介绍

102 DLX 的 Tomasulo FP 处理器的基本结构来自指令部件 取数缓冲器 来自存储器 浮点操作队列 浮点寄存器 操作数总线 操作总线 保存站 存数缓冲器 2 1 去存储器 浮点加法器浮点乘法器 公共数据总线 (CDB)

103 结构图说明 (1) FP operation queue----fp 指令发射时, 由指令单元 (instruction unit) 进入 FP 操作队列 Reservation station( 保留站 ) 每一 FP 功能单元带一保留站 保留站的内容 : 已发射的, 在功能单元等待执行的指令 该指令的操作数 : 若已算出, 或已 Load 的, 则为该操作数的值 若是该操作数的源, 即来自哪一保留站, 如某保留站号 其它信息, 用于控制该功能单元中正在执行指令所必需的信息

104 与 scoreboard 的区别 这里可由 CDB(common data bus) 将由功能单元输出的值, 送到需要改值得保留站 ( 需要该值的可能不止一个保留站 ) 记分牌方法中, 数据传送通路为 : 功能单元 register file 功能单元输入

105 结构图说明 (2) Load buffers---- 保存被访问的存储单元的数据和地址 FP registers---- 通过一对总线 (operand buses) 与每一功能单元相连接, 这一对总线分别对应两个操作数 通过一条总线与 Store buffer 相连接, 功能单元的输出和 Load Buffer 的输出汇总在 CDB 与 FP registers 的输入相连接

106 结构图说明 (3) Common data bus(cdb)----cdb 与 FP registers, reservation stations 和 Store buffers 等输入相连, 唯一无连接关系的是 Load buffers 的输入 ( 实际上是正常数据通路 +forwarding path?) 保留站和所有 Buffers 都含有标识域, 用来消除竞争 ( 标识域代表虚拟寄存器号 )

107 Tomasulo 方法的基本思想 (1) 一旦指令从 FP operation queue 进入保留站, 保留站立即从 FP registers, Load buffers 取出已就绪的操作数的值, 并立即送入保留站中暂存起来 当指令开始操作时, 不必再从 FP register file 中读取操作数的值 ( 试与记分牌比较 : 记分牌中保存的是操作数的寄存器号, 而不是其值 )

108 Tomasulo 方法的基本思想 (2) 那些未就绪的操作数称为挂起操作数, 挂起操作数的寄存器号在保留站中采用将要提供该操作数的保留站名, 或 Load buffer 名来表示 这个过程称为 register renaming( 寄存器改名 ), 由 issue logic( 发射逻辑硬件 ) 完成 一旦被挂起操作数由某功能单元算出后, 或在 Load Buffer 就绪后, 可通过 CDB 立即送往需要的保留站

109 Tomasulo 方法的基本思想 (3) 当出现对某寄存器进行相继写入操作时, 只 允许最后一次写操作可以更新该寄存器, 避免了 WAW 竞争 由此可见,Tomasulo 方法的 register renaming 过程是由 issue logic 和 reservation station 结合起来完成的 由于保留站存放操 作数的容量远大于 FP register file, 因此通 过这一 register renaming 过程就很容易消除 WAR 和 WAW 竞争

110 寄存器改名实质 寄存器改名的实质是保留站中的操作数不再使用实际 FP 寄存器名, 而是直接用操作数的值 ( 若该操作数已就绪 ), 或用产生该操作数的保留站号,Load buffers 等的标识号来表示

111 Tomasulo 法和 Scoreboarding 法的异同 概念上的异同 相同之处 ---- 两者消除 RAW 竞争的思想相同 Tomasulo 方法采用了 Scoreboarding 方法 的动态调度的核心思想, 几多条指令处于 发射状态, 等待条件成熟, 可以不按顺序 执行, 不按顺序完成的思想, 即为动态调度来消除 RAW 竞争

112 Tomasulo 法和 Scoreboarding 法的异同 (2) 不同之处 ---- 两者处理 WAR 和 WAW 竞争的思想不同 Tomasulo 方法通过 Register renaming 过程可以消除 WAR 和 WAW 竞争 Scoreboarding 方法能检测 WAR 和 WAW 竞争, 一旦检测到存在 WAR 和 WAW 竞争, 通过插入停顿周期来解决这一竞争 所以 Scoreboarding 方法不能消除 WAR 和 WAW 竞争

113 Tomasulo 法和 Scoreboarding 法的异同 (3) 硬件组织上的不同有两点 检测竞争和控制指令执行方式的不同 Tomasulo 方法检测竞争和控制指令执行两方面功能是通过分布在每一功能单元的保留站来进行的, 因此 Tomasulo 方法是一种分布式方法 Scoreboarding 方法的上述功能是通过统一的记分牌来实现的, 因此 Scoreboarding 方法是一种集中式方法

114 Tomasulo 法和 Scoreboarding 法的异同 (4) 写结果方法的不同 Tomasulo 方法通过 CDB 直接将功能单元输出的结果送往需要该结果的所有保留站, 而不必经过 register file 这一中间环节 Scoreboarding 方法是将结果写入 FP register file, 因而可能造成等待着一结果的指令都出现停顿现象, 之后, 所有相关指令的功能单元在读 FP register file 时又可能出现竞争现象

115 Tomasulo 方法在每一流水级的功能 Tomasulo 方法分三个流水级 : 1. Issue---- 从 FP operation queue 取一条 指令, 若是一条 FP 操作指令, 如果保留站有空, 则将其送往保留站 ; 如果该指令的操作数已在 FP register file, 将操作数的值送往保留站 若是一条 Load 或 Store 指令, 如果 buffer 有空, 将其送往相应的 buffer

116 Tomasulo 方法在每一流水级的功能 (2) 若保留站或 buffers 不空, 则存在结构竞争, 停顿该指令直到对应保留站或 buffer 有空为止 本流水级同时完成 register renaming 过城, 因为保留站中的操作数不再使用寄存器号

117 Tomasulo 方法在每一流水级的功能 (3) 2. Execute---- 若有一个或几个操作数未就绪, 等待计算该操作数, 同时监控 CDB 一旦操作数就绪, 立即存入相应的保留站 ; 若两个操作数均已就绪, 则执行该操作 本步同时检查是否存在 RAW 竞争

118 Tomasulo 方法在每一流水级的功能 (4) 3. Write result---- 当结果算出后, 将其写入 CDB, 并从 CDB 写入 register file, 以及等待此结果的相应保留站 当连续写同一寄存器时, 只有最后一次才能写入

119 Tomasulo 方法的流水级功能与记分牌比较 存在三种不同之处 : 1.Tomasulo 方法中无检查 WAW 和 WAR 竞争功能, 因为在指令发射过程中, 由 issue logic 结合保留站完成了 register operands 的改名过程, 即消除了这两种竞争 2.CDB 起到广播结果的作用, 不必通过 register file 直接将结果送到所有需要该结果的保留站和 buffers. 3. Load 和 Store buffers 相当于基本功能单元

120 Tomasulo 方法的数据结构 (1) 1. 用于检测和消除竞争的数据结构附加在保留站,register file,load 和 Store buffer 之上 虽然所附加的信息各不相同, 但是除 Load buffer 外, 其它三种对象 ( 保留站 register file 和 store buffer) 的每一表项都附有一标识域 (tag field) 这些 tag 本质上是作为扩展的虚拟寄存器的 名字 (name), 用于寄存器改名过程 Tag field 用来描述哪一个保留站含有将生成源操作数的指令

121 Tomasulo 方法的数据结构 (2) 寄存器改名过程 : 当指令发送到保留站, 等待某一操作数时, 用含有将生成所需源操作数的指令的保留站名 (tag field) 来表示该操作数的来源, 不再使用该操作数在指令中的寄存器号, 即寄存器在指令进入保留站时被丢弃不用 由于保留站数多于实际寄存器述, 因而应用保留站号 ( 名 ) 对结果进行改名, 从而消除了 WAW WAR 竞争

122 Tomasulo 方法的数据结构 (3) 2. 保留站有 6 个域 : OP- 对源操作数 S1 和 S2 进行的操作 ; Qj Qk- 表示生成相应源操作数的保留站号 ( 名 ) 该值为空表示 Vj 或 Vk 中的源操作数已就绪, 或者是不需要的 ; Vj Vk- 源操作数的值, 对每一操作数的 V 域或 Q 域而言, 其中只能有一个域为有效 ; Busy- 指示这一保留站, 及其相关功能单元已被占用

123 Tomasulo 方法的数据结构 (4) 3.Register file 和 store buffer 各有一个 Qi 域 : Qi- 指示某保留站号 ( 名 ), 该保留站含有某条指令, 其生成的结果应存入该寄存器或存储单元 ;register file 的 Qi 为空时, 表示该寄存器未被占用 ( 不忙 ); 4.Load 和 Store buffer 各有一 Busy field, 表示该 buffer 何时可用 ; 5.Store buffer 还有一个 V 域, 该域保存将要存入存储器的值

124 Tomasulo 方法实例 采用下列代码 : LD F6, 34(R2) LD MULTD SUBD DIVD ADDD F2, 45(R3) F0, F2, F4 F8, F6, F2 F10, F0, F6 F6, F8, F2 RAW 竞争 WAR 竞争

125 指令状态表 : 指令状态指令发射执行写结果 LD F6,34(R2) LD F2,45(R3) MULTD F0, F2, F4 SUBD F8, F6, F2 DIVD F10, F0, F6 ADDD F6, F8, F2

126 保留站状态表, 寄存器结果状态 名称 保留站 Busy Op Vj Vk Qj Qk Add1 Yes SUB Mem[34+ Regs[R2]] Load2 Add2 Yes ADD Add1 Load2 Add3 No Mult1 Yes MULTD Regs[F4] Load2 Mult2 Yes DIV Mem[34+ Regs[R2]] Mult1 域 寄存器结果状态 F0 F2 F4 F6 F8 F10 F12 F30 Qi Mult1 Load2 Add2 Add1 Mult2

127 说明 : 指令状态表 - 所有 6 条指令均已进入对应的保留站, 第一条指令 (LD) 已结束, 其结果 (Mem[34+Reg[R2]] 的值 ) 已通过 CDB, 送到 Add1 保留站的 Vj 保留站状态表 - 给出 4 条 FD 指令的状态, 已就绪的操作数 ( 见 Vj,Vk) 和需等待来自何方的操作数 ( 见 Qj,Qk)

128 变化以后的指令状态表 指令状态指令发射执行写结果 LD F6,34(R2) LD F2,45(R3) MULTD F0, F2, F4 SUBD F8, F6, F2 DIVD F10, F0, F6 ADDD F6, F8, F2

129 变化后的保留站状态表和寄存器状态表 名称 保留站 Busy Op Vj Vk Qj Qk Add1 No Add2 No Add3 No Mult1 Yes MULTD Mem[45+ Regs[F4] Load2 Regs[R3]] Mult2 Yes DIV Mem[34+ Regs[R2]] Mult1 域 寄存器结果状态 F0 F2 F4 F6 F8 F10 F12 F30 Qi Mult1 Mult2

130 注意 : ADDD 可先于 DIVD 结束, 并先把结果写入 F6, 这样做不会造成 WAR 竞争的原因在于 DIVD 的操作数 F6 在保留站中为实际 Load1 的值, 即寄存器改名后消除了这一 WAR 竞争

131 Tomasulo 方法中指令在不同流水级的功能的形式化描述 : 指令状态发射级 读操作数 等待结束条件保留站或缓冲器空 (RS[r].Qj=0) and (RS[r].Qk=0) 操作 If (Register[S1].Qj 0) {RS[r].Qj Register[S1].Qj} else {RS[r].Vj S1; RS[r].Qj 0}; if (Register[S2].Qj 0) {RS[r].Qk Register[S2].Qi} else {RS[r].Vk S2; RS[r].Qk 0}; RS[r].Busy Yes; Register[D].Qj= r; 无操作 - 操作数在 Vj 和 Vk 中

132 续前页表 写结果 在 r 执行完成, 且 CDB 可用 x(if Register[x].Qi=r {Fx result; Register[x].Qi 0}); x(if RS[x].Qj=r {RS[x].Vj result; RS[x].Qj 0}); x(if RS[x].Qk=r {RS[x].Vk result; RS[x].Qk 0}); x(ifstore[x].qi=r {Store[x].V result; Store[x].Qi 0}); RS[r].Busy No;

133 Tomasulo 方法的演示实验

134 Tomasulo 方法在 loop unrolling 中的应 用 进一步理解 register renaming 消除 WAW 和 WAR 竞争的能力 Loop: LD F0, 0(R1) MULTD F4, F0, F2 SD 0(R1), F4 SUBI R1, R1, #8 BNEZ R1, Loop 循环展开两次, 用 Tomasulo 方法

135 指令状态表 指令状态 指令 来自 发射 执行 写结 迭代 果 LD F0,0(R1) 1 MULTD F4, F0, F2 1 SD 0(R1), F4 1 LD F0,0(R1) 2 MULTD F4, F0, F2 2 SD 0(R1), F4 2

136 保留站和寄存器状态 名称 保留站 Busy Op Vj Vk Qj Qk Add1 No Add2 No Add3 No Mult1 Yes MULTD Regs[F2] Load1 Mult2 Yes MULTD Regs[R2]] Load2 域 寄存器结果状态 F0 F2 F4 F6 F8 F10 F12 F30 Qi Load2 Mult2

137 取数和存数缓冲器 域 取数缓冲器 Load1 Load2 Load3 Address Regs[R1] Regs[R1]-8 Busy Yes Yes No 域 存数缓冲器 Store1 Store2 Store3 Qi Mult1 Mult2 Busy Yes Yes No Address Regs[R1] Regs[R1]-8

138 说明 : 两次迭代共 6 条指令 : 保留站内仅 2 条 MULT 指令,LD 和 SD 在 Load 和 Store buffer 中 保留站中 Qj field 分别用 Load1,Load2 表示原来的 F0, 即已经改名, 消除了 WAW 竞争 Register Status 表中,F4 先后被两次 Mult1 和 Mult2 缩写如, 实际只允许 Mult2 写入, 即最后一次写入才能改写 Register, 消除了 WAW 竞争

139 续前页说明 : 动态消除地址的不明确性 (dynamic disambiguation of address). 针对 Load 与 Store 在不同迭代中的顺序 问题, 即第二次迭代中的 Load 的结束可先于第一 次迭代中的 Store. 这样做的前提是二种操作 (Store 和 Load) 针对不同地址进行 ( 如针对同一地址, 则必须遵守次序 ) 具体做法是 : 当发射后一条 Load 指令时, 检查是否与上一次迭代中的 Store 地 址相同 若不同, 则允许 Load 先于上一次 Store 执 行, 否则 Load 要停顿 从而消除了 Memory address 的不确定性

140 总结 : 动态调度 寄存器改名 (register renaming) 动态消除存储器地址不明确性 (dynamic memory disambiguation)

141 3.4 减少控制相关代价的动态预测 复习 : Branch 指令的行为及克服控制相关的已 有方法 p128 简介 DLX 转移指令执行过程 ; EX 节拍 : 计算转移地址, 条件比较 MEM 拍 : 将转移地址送 PC, 或 NPC 送 PC P130 简介 DLX 硬件与此 cycle 的关系 p162 分析了 Branch 造成三个 stall p163 通过增加硬件并重新安排硬件, 将转移地址计算和条件比较移到 ID 级, 将 3 个 Stall 缩短到 1 个 stall. P169 介绍消除 delay slot 的静态调度的三种方法.

142 本节内容 : 通过硬件动态预测转移指令的行 为来减少转移代价 基本思想 : 设置一预测 branch 指令行为 ( 即转移成功与否 ) 的硬件, 取出 Branch 指 令时, 同时取出其预测结论 ( 转移成功或 不成功 ). 若预测为不成功, 则下一节拍就立即取出下一条指令, 无任何停顿. 若预测为成功, 则继续执行把 Branch 指令, 计算出转移地址, 此时有一个 stall, 存在 delay slot.

143 Branch 动态预测过程特别适用于用静态调度方法 ( 即在 compiling 阶段无法解决 ( 预测 ) 的情况 如本次转移方向取决于其它的 branch 结果, 即存在关联 (correlation) 关系的时候

144 转移预测的效率与代价 : 转移预测的效率与下列因素有关 : 预测的正确率 转移的代价, 指预测正确时的代价, 和预测出错时的代价 转移的代价与下列因素有关 : 流水线的结构 ( 如硬件安排方式等 ) 预测器的类型 ( 将在下面介绍不同预测器的效率 ) 预测失败时, 恢复的策略

145 3.4.1 转移预测基础和转移预测缓冲器 最简单的动态转移预测器就是采用转移预测缓冲器, 缓冲其中储存预测信息, 又可称为转移历史表 这是一个小的存储器, 由转移指令地址的低位来索引 介绍两种转移预测缓冲器方案 : 一位预测器 (one-bit) 和两位预测器 (two bits)

146 一位转移预测器 所谓一位转移预测器是指预测缓冲器每一存储单元仅含一位 (one bit) 信息, 该位信息表示该 branch 指令最近一次转移的状态, ( 是成功, 还是失败 ) 然后, 根据这一信息来预测本次是否成功 存在问题 : 由于预测缓冲器单元, 是由转移指令的低位地址索引的, 因此该单元的信息可能由另一条低位地位与本条 Branch 指令相同的 branch 指令的转移历史纪录, 并非本条 branch 指令上一次转移行为的历史纪录

147 一位转移预测器 (2) 这实际上是没有关系的 因为我们把预测仅仅是看作一种提示 ( 预测 ), 若预测是正确的, 则按预测方向取指令 ; 若预测是错误的, 程序仍按正确方向执行, 同时将预测位置反即可 也就是说 branch 指令仍然是在执行的, 一旦 branch 指令的判断与预测结果相矛盾时, 仍按实际 Branch 的实际结果执行

148 一位转移预测器 (3) 转移预测缓冲器从硬件角度来看类似于一个每次都命中的 Cache. 同时该缓冲器的性能是与下列因素有关的 预测位的结论属于我们感兴趣转移指令的频度, 即预测结论与转移指令是否匹配 预测的正确性 ( 一旦匹配的话 ) 我们可以利用 Cache 技术来提高匹配率

149 一位转移预测器 (4) 一位预测器的缺点 : 如果某条 Branch 指令几乎总是成功转移, ( 如 10 次有 9 次成功, 仅有 1 次转移不成功 ), 一旦有 1 此不成功, 则应用一位预测器的话, 将会出现两次预测错误, 而不是应该发生的一次预测错误 若成功与不成功交替发生时, 将一直是预测错误的 改进的方法是 : 采用两位预测器

150 二位转移预测器 (two-bit predictor) 两位预测器中只有当预测出错两次后才改变预测状态 即预测信息有两位, 不再是仅仅指示转移奖惩成功或不成功 共有四种预测状态 状态转移图见下页

151 两位预测器的状态转移图 : 对偶然一次预 测出错, 不会出现两次预测错 成功 预测转移成功 成功 预测转移不成功 不成功成功不成功成功 预测转移成功不成功预测转移不成功不成功

152 转移预测缓冲器的实现技术 两种实现方法 : 该缓冲器作为一种专门的 Cache, 在 IF 节拍取指时, 用指令地址访问这一缓冲器 即取出指令时, 同时取出预测值 在指令 Cache 每一 Block 中附加两个预测位, 从而与指令一起读出

153 转移预测的正确率 测试条件 : 转移预测缓冲器有 4096 个 entries, 每个 entry 含 2 位预测位 ; 对 SPEC89 的 banchmark 进行测试

154 转移预测的正确率 matrix300 0% doduc fpppp espresso li 1% 1% 5% 5% 9% 9% 10% 12% 预测出错率 18% 0% 5% 10% 15% 20%

155 缓冲大小对转移预测出错率的影响 SPEC 基准程序 0% nasa7 0% matrix300 0% 0% 0% tomcatv doduc spice fpppp gcc esp resso eqntott li 1% 1% 1% 1% 5% 5% 5% 5% 5% 5% 5% 4% 5% 6% 9% 9% 9% 9% 10% 10% 12% 11% 11% 2 位 4K 项 2 位无限项 1K 项 (2,2) 18% 18% 0% 5% 10% 15% 20%

156 两位预测器测试结果 : 测试结果 : 预测正确率 :82%-99% 预测出错率 :1%-18% 小 buffer 结果差,4K 的 buffer 足够大 浮点测试程序的预测正确率高于整数测试程序 因为浮点程序中 loop 出现次数多 由图 4.15 说明 :buffer 大于 4K 已对提高预测正确率无益 同样, 增加预测位 ( 即大于 2 bits) 也无益

157 如何进一步提高预测的正确率 迄今为止, 我们根据转移指令最近的转移行为预测当前的转移行为 进一步提高预测正确率的出路在于根据其它相关转移指令的行为来预测我们感兴趣 branch 指令的行为, 即称为相关预测 (correlating prediction) 或两级预测 ( two-level prediction)

158 例 IF ( aa == 2) aa = 0; IF ( bb == 2) bb = 0; IF (aa == bb ) { } SUBI R3, R1, #2 BNEZ R3, L1 ; br.b1 (aa!=2) ADD R1, R0, R0 ; aa==0 L1: SUBI F3, R2, #2 BNEZ R3, L2 ; br.b2 (bb!=2) ADD R2, R0, R0 ; bb==0 L2: SUB R3, R1, R2; R3=aa-bb BEQZ R3, L3 ; br.b3 (aa==bb)

159 例子说明 : 这里 b3 的行为与 b1,b2 两条转移指令相关, 即只有当 b1,b2 不成功时,b3 才会成功 如果我们仅根据 b3 过去行为来预测 b3 当前行为是不可能的 如何预测此类转移指令? 参看下例 :

160 例 If (d==0) d=1; if (d==1){... } 设 Reg[R1] = d BNEZ R1, L1 ; br b1, (d!=0) ADDI R1, R0, #1 ; d==0, so d=0 L1: SUBI R3, R1, #1 ; BNEZ R3, L2 ; br b2, (d!=1) L2:

161 设 d 的初值为 0,1,2, 上述代码段的转移特征如下 : d 的 d==0? B1 在 b2 以前 d==1? b2 初值 的 d 值 0 Yes Not taken 1 Yes Not taken 1 No Taken 1 Yes Not taken 2 No Taken 2 no Taken 结论 : 当 b1 not taken, b2 也为 not taken. 所以, 若利用相关预测器, 就能成功作出预测.

162 若利用传统的 one-bit 预测器, 则无法利用这一相关性, 且预测总是错的 d=? b1 b1 新的 b1 b2 b2 新的 b2 预测 动作 预测 预测 动作 预测 2 NT T T NT T T 0 T NT NT T NT NT 2 NT T T NT T T 0 T NT NT T NT NT 预测与实际动作 总是相反 预测与实际动作 总是相反

163 引入相关性的预测器 : 设 branch 的预测器由两位组成 : 第一位是上次 br. 为 NT 时的预测, 即上次 br. 为 NT 时取第一位作预测值 ; 第二位是上次 br. 为 T 时的预测, 即上次 br. 为 NT 时取第二位作预测值 ; 这样就有四种预测组合

164 四种组合的含义 : 预测 上一次 Br 为 NT, 预上一次 Br 为 T, 预测 组合 测本次位 ( 看第一位 ) 本次为 ( 看第二位 ) NT/NT NT NT NT/ T NT T T /NT T NT T / T T T 注意 : 这里体现了相关性 虽然上一次 Br 指令, 并非一定是本次 br 指令, 但在简单的 loop 中是可能的, 如简单 loop 中不含其它 br 指令

165 用这种相关预测器来预测上述例子 初值为 NT/NT. ( 第一次迭代预测错, 其余均正确 ) d=? b1 预测 b1 动作 新的 b1 预测 b2 预测 b2 动作 新的 b2 预测 2 NT/NT T T/NT NT/NT T NT/T 0 T/NT NT T/NT NT/T NT NT/T 2 T/NT T T/NT NT/T T NT/T 0 T/NT NT T/NT NT/T NT NT/T 粗体字表示本次预测预测出错 b1 动作与 b2 预测值选用关系 预测正确 新预测值 b2 动作与 b1 预测值选用关系

166 上面相关预测器称为 (1,1) 维转移预测器, 即根据前一次 br 指令的执行情况, 以一对预测位选择预测值 一般情况的相关预测器应为 (m,n) 维, 即根据前 m 条 br 指令的转移历史纪录, 从 2m 个预测器中选择一个预测器, 每个预测器有 n 位来预测本次 br 指令的行为, 即预测也是相关 ( 纪录 ) 的, 相当于前面介绍过的 2 位预测器一样

167 (2,2) 相关预测器的硬件框图 : 可寻址的预测单元为 :2 4+2 =64 个 4 本次 br 指令的低位地址 每个转移预测器 2 位 本次 br 的预测位为 xx 2 位全局转移历史记录 : 最后两条指令的转移情况

168 相关预测器与简单预测器性能比较 ( 前提是总预测容量相等 ) SPEC 基准程序 nasa7 matrix300 tomcatv doduc spice fpppp gcc espresso eqntott li 1% 0% 1% 0% 0% 0% 1% 1% 0% 5% 5% 5% 5% 5% 5% 5% 4% 5% 6% 9% 9% 9% 9% 10% 10% 12% 11% 11% 2 位 4K 项 2 位无限项 1K 项 (2,2) 18% 18% 0% 5% 10% 15% 20% 预测出错率

169 比较结果 预测容量 (0,2)4K entries: K = 8K (2,2)1K entries: K = 8K 结论相关预测器的性能明显优于简单预测器

170 3.4.2 转移目标缓冲器 ---- 进一步减少控制竞争带来的延迟 转移目标缓冲器 : 如果一个转移预测缓冲器存储了被调用转移指令的下一条要执行的预测指令的地址, 则称之为转移目标缓冲器, 或转移目标 Cache.

171 转移目标缓冲器结构 : 要取指令的 查找 PC 值 预测 PC 值 转移目标 缓冲器的 项数 = N o: 指令未被 预测为转移指 令, 正常执行 预测转移发 生或不发生 Yes: 是转移指令, 预测的 值将作为下一个 PC 值 PC

172 转移预测缓冲器与转移目标缓冲器的差别 在 IF 级访问转移目标缓冲器, 在 IF 级结束前就能得到转移目标地址 一般, 在 ID 级访问转移预测缓冲器, 在 ID 级结束前得到转移目标地址 ; 访问转移目标缓冲器时, 还无法判定是否是转移指令, 所以必须进行 PC 值的匹配 而转移预测缓冲器是按地址访问的 ] 转移目标缓冲器中只需存放预测转移成功的转移指令, 无需存放预测不成功的转移指令

173 采用转移目标缓冲器时的指令流水处理过程 IF 将 PC 送入存储器 和转移目标缓冲器 命中转移目标缓冲器 ID 指令正常执行 指令是转移成功分支? 送出预测 PC 值 转移成功? EX 进入转移目标指令地址并将下一个 PC 值送入转移目标缓冲器 错误预测分支, 清除已取的指令 ; 在其它目标处开始重取指令 ; 删除转移目标缓冲器中的相应项 预测正确, 不必暂停, 继续执行

174 转移目标缓冲器的几种变形 在转移目标缓冲器中直接存放转移目标指令而不是转移目标指令地址 同时存放转移目标指令和转移目标地址 设置很大的目标缓冲器, 即存放预测路径的转移目标指令, 也同时存放非预测路径的转移目标指令 这要求存储器系统必须是双端口的,cache 是以并行交叉方式工作的

175 3.5 应用指令多发射技术进一步利用指令 级并行性 一 指令多发射技术的基本概念 迄今为止介绍的各类提高性能的技术都 是围绕使 CPI=1 这一目标展开的 如 : 流水线中消除数据相关 控制相关 静态调度 动态调度等 根据公式 CPUtime=IC CPI cycle time, 进一步提高性能的启发是使 CPI <1

176 多发射技术基本概念 (2) 在传统每一周期发射一条指令的系统中, 是无法实现 CPI<1 的 也就是说, 未达到 CPI<1, 必须要求实现在一个时钟周期里发射多条指令, 即指令的多发射技术 多发射技术的两种方法 : superscalar( 超标量 ) 方法 VLIW( 超长指令字 ) 方法 实现指令多发射技术的前提 : 有足够硬件, 即功能单元 寄存器 及存储器带宽的基础上 也就是说不存在机构竞争

177 Superscalar 的基本概念 在一个周期里能发射可变可变数量的指令, 通常为 1-8 条指令 /cycle; 同时发射的指令按一定规律搭配, 即有 一定限制, 不能自由搭配 ; 用静态调度 (compiler 完成 ) 和 / 或动态 调度 ( 硬件完成 ) 方法确定可同时发射 的指令条数

178 VLIW 的基本概念 在一个时钟周期里发射固定固定数量的指令, 实际为一条长指令, 或固定的指令包 ; VLIW 也是按固定格式组织的 ; VLIW 是由 Compiler 组织的,( 即不能 由硬件动态组织 )

179 二 DLX 的超标量处理器的实现 DLX 的超标量处理器规定 : 每一周期最多能发射 2 条指令 ; 前一条为 Load,Store,Branch,interger ALU 等整数操作指令 ; 后一条为 FP 操作 严格按此顺序发射 这一规定的理由在于 : (1) 可同时发挥整数和浮点单元的作用 ; (2) 整数寄存器和浮点寄存器不会冲突

180 DLX 的超标量处理器规定 (2) 两条同时发射的指令必须是独立独立的, 即无 数据竞争 ; 且只能有一次一次存储器访问 ( 因为在一个时钟周期里, 不能同时完成 2 次存储访问 ) 不满足这一条件的组合作 为结构竞争处理

181 双发射处理器的流水时序 (Ep280,4.26; Cp209, 表 4-38) 指令类型 Pipe stages 整数指令浮点指令 IF IF ID ID EX EX MEM MEM WB WB 整数指令浮点指令 IF IF ID ID EX EX MEM MEM WB WB 整数指令浮点指令 IF IF ID ID EX EX MEM MEM WB WB 整数指令浮点指令 IF IF ID ID EX EX MEM MEM WB WB

182 双发射流水线结构示意图 FA1 FA2 FA3 浮点加法部件 IF1 ID1 MD1 MD2 MD3 MEM1 ID1 乘除法部件 IF2 ID2 ALU MEM2 ID2 定点算术逻辑部件 LS 取数存数部件

183 几个情况的处理 (1) 当整数指令为 Load/Store/Move 浮点数 时, 可能造成 在 FP register file 处出现寄存器口的竞争 与下一条 FP 操作指令可能有 RAW 数据竞争 解决方法 当出现上述情况时, 把它作为结构竞争处理, 即不允许出现此类搭配 将 FP register file 做成 Read/Write 双口寄存器, 允许同时访问不同 FP registers.

184 几个情况的处理 (2) Load 浮点数的结果不能被同一周期的另一条指令所应用, 实际上也不能被下一周期的两条指令所应用 因为 LD 后跟 FP 操作之间有一个 Stall 周期 由于这里每一个周期发射两条指令, 因此 LD 的结果不能被紧接的三条指令所用 同理, 由于 Br. 指令后存在一个周期的 Br. Delay, 所以也要影响三条指令, 即要用三条不相关指令来填充这一延时槽, 而不是传统处理器中只需填一条指令 所以需要更强的编译调度和硬件调度策略

185 超级标量处理器中循环展开和调度 例 :(Ep281, Cp210) Loop: LD F0, 0(R1) ;F0=array element ADDD F4, F0, F2 ;add scalar in F2 SD 0(R1), F4 ;store result SUBI R1, R1, #8 ;decrement pointer ;8 bytes per DW BNEZ R1, Loop ;branch R1!=0

186 循环展开 5 次的结果 (Ep281, 4.27; Cp210, 表 4-39) Integer Instruction FP instruction Clock cycle Loop:LD F0, 0(R1) 1 LD F6, -8(R1) 2 LD F10, -16(R1) ADDD F4, F0, F2 3 LD F14, -24(R1) ADDD F8, F6, F2 4 LD F18, -32(R1) ADDD F12, F10, F2 5 SD 0(R1), F4 ADDD F16, F14, F2 6 SD 8(R1), F8 ADDD F20, F18, F2 7 SD 16(R1), F12 8 SUBI R1, R1, #40 9 SD 24(R1), F16 10 BNEZ R1, Loop 11 SD +8(R1), F20 12

187 结论 : 5 次迭代只需 12 个时钟周期所以每次迭代仅需 12/5 = 2.4 cycles/iteration 由此可见所发射技术带来的好处是显而易见的 迄今针对上述 loop 最好的结果是 3.5cycle/iteration. 从 9--> 6 --> > >1.29 ( 调度 ) ( 展开 + 调度 ) ( 多发射 + 展开 + 调度 )

188 三 应用动态调度的多发射技术多发射技术也可采用动态调度方法 (Scoreboard Tomasulo) 来组织, 即决策可同时发射的指令 现将 Tomasulo 动态调度算法扩展到 支持每个周期同时发射两条指令的多发 射机制

189 约定 两条同时发射的指令搭配 : 一条为整数操作, 一条为 FP 操作 ; 按序发射, 而非乱序发射 ; 采用独立的整数寄存器堆和 FP 寄存器堆, 使同时发射的两条指令可同时进入对应的保留站, 可分别同时访问对应的寄存器堆

190 如何处理相邻相邻的两条相关相关指令? 在非动态调度的多发射处理器钟, 由 compiler 作静态调度, 选择两条非相关 指令同时发射同时执行 再采用 Tomasulo 动态调度算法时, 可 以按序, 按搭配规定同时发射两条指令, 由硬件 ( 保留站等 ) 自动解决相关性问 题, 即乱序执行, 乱序结束

191 例 : (Cp283, Ep210) Loop: LD F0, 0(R1) ADDD F4, F0, F2 SD 0(R1), F4 SUBI R1, R1, #8 BNEZ R1, Loop

192 双发射 Tomasulo 流水线 (Ep284, Fig4.28; Cp212) ( 图中的访存时刻 6 10 是否应为 7 11) 迭代次数 指令 发射时刻 执行时刻 访存时刻 回写时刻 1 LD F0, 0(R1) ADDD F4, F0, F SD 0(R1), F SUBI R1, R1, # BNEZ R1, LOOP LD F0, 0(R1) ADDD F4, F0, F SD 0(R1), F SUBI R1, R1, # BNEZ R1, LOOP 8 9

193 结果 注意 : 这里是按序发射的, 且由硬件进行组合, 按搭配要求进行多发射 ; 由于 FP 操作指令少, 所以多发射次数少 ; 这里是不按顺序执行, 也不按顺序写结果 结论 : 11 cycles/2 iteration = 5.5 cycles/iteration 如果增加整数部件, 则可提高多发射机会, 达到加速目的

194 四 VLIW 方法 : VLIW 处理器的特点 1 一次发射一条长指令, 其中包含多个操作, 而不是像超标量处理器那样一次发射多条指令 这样做可以减轻指令发射逻辑电路的带宽, 因为超标量处理器中为了发射多条指令的需要, 必须将指令发射逻辑电路流水化, 并提高其带宽, 使其硬件复杂化, 同时增加了成本

195 VLIW 处理器的特点 (2) 2 长指令的组装由 Compiler 完成, 而不需要像超标量处理器那样由动态调度硬件完成, 从而进一步减轻硬件负担, 当然也丧失了动态调度的优点 所以 :VLIW 与 Superscalar 相比较, 硬件 相对简单 廉价

196 例 :VLIW 究竟有多长? 以一个拥有 7 个功能单元的 VLIW 处理器为例, 指令长度由多少位? 设 7 个功能单元可支持 2 个整数操作,2 个 FP 操作,2 个 memory 访问操作和 1 个 Br. 则实际上一条 VLIW 含 7 条指令 为支持每一功能单元正常工作, 续分配每一个功能单元相应的数据域 一般每一数据域为 位. VLIW 长度为 :16 7 = 112 bits 或 :24 7 = 168 bits

197 VLIW 处理器的特点 (3) 3 为了使所有功能单元充分发挥作用, 必须要开发更多的指令并行性, 即有足 够多能并行执行的指令去填充 VLIW 这里要采用全局调度技术 (Globle scheduling technique) 全局调度技术 : 即跨越条件转移指令的 调度技术, 包含 : 循环展开, 跨越基本 块的调度, 路径调度 (Trace scheduling) 等技术

198 例 :VLIW 处理器实例 含 5 个功能单元 :1 个整数操作和转移指令部件,2 个 FP 操作部件,2 个访存操作部件 指令数组加法的实例 : (Ep286,Fig4.29; Cp213, 表 4-41) 例中 loop 展开 7 次, 总共需 9 个时钟周期 这是我们得到的最好结果 ( 由 9 cycles/iteration 下降至 1.29cycles/iteration)

199 VLIW 展开循环 封装指令的结果 Memory Reference1 Memory Reference2 FP operation1 FP operation2 Int. Operation /branch LDF0, 0(R1) LD F6,-8(R1) LD F10,-16(R1) LDF14, -24(R1) LD F18,-32(R1) LD F22, -40(R1) ADDD F4,F0, F2 ADDD F8, F6, F2 LD F26,-48(R1) ADDD F12, F10, F2 ADDD F16, F14, F2 ADDD F20, F18, F2 ADDD F24, F22, F2 SD 0(R1),F4 SD -8(R1),F8 ADDD F28, F26, F2 SD 16(R1),F12 SD 24(R1),F16 SD 32(R1), F20 SD 40(R1), F24 SUBI R1,R1, #8 SD +8(R1),F28 BNEZ R1, Loop

200 五 多发射处理器的局限性 既然可以在一个时钟周期内发射 5 条指令, 那么为什么不同时发射 50 条指 令呢? 多发射方法的困难由哪些? 存在三方面困难 : 程序中固有 ILP 有限 ; 多发射处理器硬件复杂性高, 成本高 ; Superscalar 和 VLIW 实现的专有困难

201 多发射方法的困难 (1) 程序固有 ILP 有限是多发射处理器的本质困难我们需要的可并行的指令数并非等于功能单元数就能满足 一般, 我们需要的可并行 ( 即独立的 ) 指令数大致等于功能单元数乘以平均流水级数 这是因为这些功能单元钟, 如存储器访问, 转移指令,FP 操作都是流水化的, 或有一定延时

202 多发射方法的困难 (2) 硬件复杂, 成本高 对多发射处理器来讲, 在多指令发射和执行方面, 既要增加发射和执行的硬件数量, 又要提高它们的带宽 ( 速度, 即性能 ) 数量的解释 因为执行需要, 需增加功能单元数目和 register file 数 ( 将整数 reg 和浮点 reg. 分离开来 ) 数量增加造成成本线性增加

203 带宽的解释 对含 5 个功能单元的 VLIW 处理器来说 : 3 个整数 reg. File 需 6 个读口 ( 对应两个操作数 )+ 3 个写口 ; 2 个浮点 reg. File 需 6 个读口 (2 FP units L/S units 1 ) 4 个写口 (2 FP units L/S units 1 ) 因为有 2 个 L/S 部件, 需增加 2 个 memory ports, 这比 reg. ports 要贵得多 ; 若要增加指令发射率, 还要再增加 memory ports 数目

204 多发射方法的困难 (3) Superscalar 的特殊困难 发射逻辑复杂且高速 动态调度硬件更复杂化

205 多发射方法的困难 (4) VLIW 的特殊困难 造成代码 (code) 量增大 因为 VLIW 指令中有很多域是未填满的, 造成浪费码长 ; 一条长指令中任一个功能单元的锁操作 ( 即停顿 ) 造成所有功能单元停顿 因为所有功能单元都是同步工作的 对 VLIW 系列处理器, 二进制代码兼容困难 系列机中发射指令数目和功能单元延时长短不一, 造成系列机中二进制代码不兼容

第五章 重叠、流水和现代处理器技术

第五章 重叠、流水和现代处理器技术 2006 5 l t 1 t 2 t 3 t 4 I: add r1,r2,r3 J: sub r4,r1,r5 : (Hazard) : (Hazard) Instr 1 Instr 2 ( ) Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5 Cycle 6 Cycle 7 Load Ifetch ALU DMem Instr 1 Ifetch ALU DMem

More information

chx10_arch02_ilp.ppt [兼容模式]

chx10_arch02_ilp.ppt [兼容模式] 高等计算机系统结构 指令级并行处理 ( 第二讲 ) 程旭 2010 年 3 月 29 日 复习 : 三种数据冒险 对于执行如下类型的指令序列 : r k (r i ) op (r j ) 真数据相关 (True Data-dependence) r 3 (r 1 ) op (r 2 ) Read-after-Write r 5 (r 3 ) op (r 4 ) (RAW) hazard 反相关 (Anti-dependence)

More information

3.2 指令级并行概念与技术

3.2 指令级并行概念与技术 硬件投机及多发射 浙大计算机陈文智 chenwz@zju.edu.cn 2014 年 11 月 2014/11/9 1 3.7 Reducing Branch Costs with Dynamic Hardware Prediction(2.3) 1-bit Branch-Prediction Buffer 2-bit Branch-Prediction Buffer Correlating Branch

More information

计算机组织与系统结构

计算机组织与系统结构 高等计算机系统结构 指令级并行处理 ( 第二讲 ) 程旭 2012 年 3 月 5 日 复习 : 三种数据冒险 对于执行如下类型的指令序列 : r k (r i ) op (r j ) 真数据相关 (True Data-dependence) r 3 (r 1 ) op (r 2 ) r 5 (r 3 ) op (r 4 ) Read-after-Write (RAW) hazard 反相关 (Anti-dependence)

More information

Microsoft PowerPoint - chx08_arch02_ilp.ppt

Microsoft PowerPoint - chx08_arch02_ilp.ppt 高等计算机系统结构 指令级并行处理 ( 第二讲 ) 程旭 2008 年 10 月 13 日 复习 : 三种数据冒险 对于执行如下类型的指令序列 : r k (r i ) op (r j ) 真数据相关 (True Data-dependence) r 3 (r 1 ) op (r 2 ) Read-after-Write r 5 (r 3 ) op (r 4 ) (RAW) hazard 反相关 (Anti-dependence)

More information

计算机组织与系统结构

计算机组织与系统结构 高等计算机系统结构 指令级并行处理 ( 第三讲 ) 程旭 2014 年 3 月 31 日 三种数据相关 1. Data dependences (also called true data dependences) 2. name dependences 3. control dependences An instruction j is data dependent on instruction

More information

没有幻灯片标题

没有幻灯片标题 高等计算机系统结构 Tomasulo 算法 ( 第四讲 ) 程旭 2004 年 3 月 8 日 上一讲小结 软件或硬件的指令级并行 (ILP) 循环级并行最容易判定 软件并行性取决于程序, 如果硬件不能支持就出现冒险 软件相关性 / 编译器复杂性决定编译中是否能展开循环 存储器相关是最难判定的 硬件开采 ILP 动态调度 (dynamic scheduling) 在编译时有些相关情况不能真正判定,

More information

Microsoft PowerPoint - CHX05_arch04_tomasulo.ppt

Microsoft PowerPoint - CHX05_arch04_tomasulo.ppt 高等计算机系统结构 Tomasulo 算法 ( 第四讲 ) 程旭 2005 年 3 月 21 日 上一讲小结 软件或硬件的指令级并行 (ILP) 循环级并行最容易判定 软件并行性取决于程序, 如果硬件不能支持就出现冒险 软件相关性 / 编译器复杂性决定编译中是否能展开循环 存储器相关是最难判定的 硬件开采 ILP 在编译时有些相关情况不能真正判定 针对某一机器产生的代码可以在另一机器上有效运行 记分板的核心思想

More information

没有幻灯片标题

没有幻灯片标题 高等计算机系统结构 Tomasulo 算法 ( 第三讲 ) 程旭 2013 年 3 月 25 日 上一讲小结 软件或硬件的指令级并行 (ILP) 循环级并行最容易判定 软件并行性取决于程序, 如果硬件不能支持就出现冒险 软件相关性 / 编译器复杂性决定编译中是否能展开循环 存储器相关是最难判定的 硬件开采 ILP 动态调度 (dynamic scheduling) 在编译时有些相关情况不能真正判定,

More information

计算机组织与系统结构

计算机组织与系统结构 高等计算机系统结构 指令级并行处理 ( 第二讲 ) 程旭 2016 年 3 月 14 日 三种指令相关 1. Data dependences (also called true data dependences) 2. name dependences 3. control dependences An instruction j is data dependent on instruction

More information

计算机组织与系统结构

计算机组织与系统结构 高等计算机系统结构 指令级并行处理 ( 第二讲 ) 程旭 2015 年 3 月 30 日 三种指令相关 1. Data dependences (also called true data dependences) 2. name dependences 3. control dependences An instruction j is data dependent on instruction

More information

计算机组织与系统结构

计算机组织与系统结构 高等计算机系统结构 指令级并行处理 ( 第二讲 ) 程旭 2017 年 3 月 13 日 三种指令相关 1. Data dependences (also called true data dependences) 2. name dependences 3. control dependences An instruction j is data dependent on instruction

More information

chx10_arch03_OoOIssue.ppt [兼容模式]

chx10_arch03_OoOIssue.ppt [兼容模式] 高等计算机系统结构 Tomasulo 算法 ( 第三讲 ) 程旭 2010 年 4 月 12 日 上一讲小结 < 软件或硬件的指令级并行 (ILP) < 循环级并行最容易判定 < 软件并行性取决于程序, 如果硬件不能支持就出现冒险 < 软件相关性 / 编译器复杂性决定编译中是否能展开循环 = 存储器相关是最难判定的 < 硬件开采 ILP 动态调度 (dynamic scheduling) = 在编译时有些相关情况不能真正判定,

More information

¸ß¼¶¼ÆËã»úÌåϵ½á¹¹

¸ß¼¶¼ÆËã»úÌåϵ½á¹¹ 第三章 高级流水线与指令级并行 石教英 内容提要及与各节的关系 (1) 流水线技术就是指令重叠执行技术, 达到加快运算速度的目的 由于存在三种流水线竞争 : 结构竞争 数据竞争 控制竞争, 导致流水线性能降低, 不能运作在理想的重叠状态, 需要插入停顿周期, 从而使流水线性能降低 --3.1 流水线技术基础 内容提要及与各节的关系 (2) 指令之间可重叠执行性称为指令级并行性 (Instruction

More information

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63> 第三章 Q3 1 1. 省略了 I/O 操作的复杂逻辑, 易实现, 耗费低 ; 2. 可以利用丰富的内存寻址模式实现灵活的 I/O 操作 Q3 2 假设存储单元 ds1 处寄存器地址为 0x2000, 代码如下 #define ds1 0x2000 while ( *ds1 == 0 ) ; Q3 3 假设设备 (dev1) 中有两个寄存器 ds1 和 dd1,dev1 的地址为 0x1000,ds1

More information

没有幻灯片标题

没有幻灯片标题 高等计算机系统结构 Tomasulo 算法 ( 第四讲 ) 程旭 2014 年 3 月 31 日 上一讲小结 软件或硬件的指令级并行 (ILP) 循环级并行最容易判定 软件并行性取决于程序, 如果硬件不能支持就出现冒险 软件相关性 / 编译器复杂性决定编译中是否能展开循环 存储器相关是最难判定的 硬件开采 ILP 动态调度 (dynamic scheduling) 在编译时有些相关情况不能真正判定,

More information

Pipelining Advanced

Pipelining Advanced 计算机组织与系统结构 利用流水线改进性能 Enhancing Performance with Pipelining ( 第八讲 ) 程旭 2014.12.1 上一讲总结 流水线向下传递控制信息, 就象向下传递数据一样 通过局部控制解决前递 / 暂停 意外事件会导致流水线停止 MIPS 指令系统体系结构中流水线是可见的 ( 延迟转移 延迟装入 ) 更深的流水线 更多的并行度可能获得出更高的性能 中断

More information

Microsoft PowerPoint - chx09_org16_pipelining_3.ppt

Microsoft PowerPoint - chx09_org16_pipelining_3.ppt 计算机组织与系统结构 利用流水线改进性能 Enhancing Performance with Pipelining ( 第十六讲 ) 程旭 2009.6.4 上一讲总结 流水线向下传递控制信息, 就象向下传递数据一样 通过局部控制解决前递 / 暂停 意外事件会导致流水线停止 MIPS 指令系统体系结构中流水线是可见的 ( 延迟转移 延迟装入 ) 更深的流水线 更多的并行度可能获得出更高的性能 中断

More information

Microsoft PowerPoint - CA_04 Chapter6 v ppt

Microsoft PowerPoint - CA_04 Chapter6 v ppt Chap. 6 Enhancing Performance with Pipelining 臺大電機系吳安宇教授 V1. 2007/04/20 臺大電機吳安宇教授 - 計算機結構 1 Outline 6.1 An Overview of Pipelining 6.2 A Pipelined Datapath 6.3 Pipelined Control 6.4 Data Hazards and Forwarding

More information

1 CPU

1 CPU 2000 Tel 82316285 82317634 Mail liuxd@buaa.edu.cn 1 CPU 2 CPU 7 72 A B 85 15 3 1/2 M301 2~17 : 3/4 1/2 323 IBM PC 1. 2. 3. 1. 2. 3. 1.1 Hardware Software 1.2 M3 M2 M1 1.2 M3 M1 M2 M2 M1 M1 M1 1.2 M3 M1

More information

<4D F736F F F696E74202D20B5DAC1F9D5C220D7F7D2B5B2CEBFBCB4F0B0B8>

<4D F736F F F696E74202D20B5DAC1F9D5C220D7F7D2B5B2CEBFBCB4F0B0B8> 第六章利用流水线提高性能 作业参考答案 参考答案 : P.373 中 ALU 操作时间为 200ps a. ALU 操作时间缩短 25% 不能加快流水线指令速度 因为流水线的速度最终由时钟周期的宽度决定, 而它不会缩短时钟周期 b. 如果 ALU 操作时间延长 25%, 那么,ALU 时间将变为 250ps, 这样,ALU 操作将变成瓶颈, 使得流水线的时钟周期为 250ps, 其效率降低 (250-200)/250=20%

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

Microsoft PowerPoint - CA_02 Chapter5 Part-I_Single _V2.ppt

Microsoft PowerPoint - CA_02 Chapter5 Part-I_Single _V2.ppt Chapter5- The Processor: Datapath and Control (Single-cycle implementation) 臺大電機系吳安宇教授 V. 3/27/27 V2. 3/29/27 For 27 DSD Course 臺大電機吳安宇教授 - 計算機結構 Outline 5. Introduction 5.2 Logic Design Conventions 5.3

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

More information

[Group 9] Give an example of structural hazard ans 1. 假設下列指令是在只有單一記憶體的 datapath 中執行 lw $5, 100($2) add $2, $7, $4 add $4, $2, $5 sw $5, 100($2)

[Group 9] Give an example of structural hazard ans 1. 假設下列指令是在只有單一記憶體的 datapath 中執行 lw $5, 100($2) add $2, $7, $4 add $4, $2, $5 sw $5, 100($2) Computer Architecture Fall, 2017 Week 13 2017.12.04 [Group 11] 1. 請詳述為何在 MIPS 中不會發生 WAR 與 WAW 這兩種 Hazards ANS: Use simple, fixed designs WAR: 因為 Write 是第五個 Stage,Read 是第二個 Stage, 因此 Write 永遠在 Read 後面,

More information

L23

L23 Lecture 26: VLIW & Superscalar 高级流水线技术 高性能流水线 - 指令级并行 (ILP) 技术 超流水线 多发射流水线 - 静态多发射 (VLIW 处理器 + 编译器静态调度 ) - 动态多发射 ( 超标量处理器 + 动态流水线调度 ) 静态多发射 (VLIW- 超长指令字 ) 编译器静态推测完成 指令打包 和 冒险处理 MIPS 2- 发射流水线数据通路 循环展开指令调度

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

水晶分析师

水晶分析师 大数据时代的挑战 产品定位 体系架构 功能特点 大数据处理平台 行业大数据应用 IT 基础设施 数据源 Hadoop Yarn 终端 统一管理和监控中心(Deploy,Configure,monitor,Manage) Master Servers TRS CRYSTAL MPP Flat Files Applications&DBs ETL&DI Products 技术指标 1 TRS

More information

untitled

untitled CPU!! 00-11-8 Liping zhang, Tsinghua 1 : ADD(r1, r, r) CMPLEC(r, 5, r0) MUL(r1, r, r) SUB(r1, r, r5) ADD r, ( ) r CMP. CMP r.. t t + 1 t + t + t + t + 5 t + 6 IF( ) ADD CMP MUL SUB RF NOP ADD CMP MUL SUB

More information

Microsoft PowerPoint - CA_03 Chapter5 Part-II_multi _V1.ppt

Microsoft PowerPoint - CA_03 Chapter5 Part-II_multi _V1.ppt Chapter5-2 The Processor: Datapath and Control (Multi-cycle implementation) 臺大電機系 吳安宇教授 V1. 03/27/2007 For 2007 DSD Course 臺大電機吳安宇教授 - 計算機結構 1 Outline 5.1 Introduction 5.2 Logic Design Conventions 5.3

More information

Chapter 6

Chapter 6 Chapter 4 (Part II) The Processor: Datapath and Control (Enhancing Performance with Pipelining) 陳瑞奇 (J.C. Chen) 亚洲大学资讯工程学系 Adapted from class notes by Prof. M.J. Irwin, PSU and Prof. D. Patterson, UCB

More information

投影片 1

投影片 1 2 理 1 2-1 CPU 2-2 CPU 理 2-3 CPU 類 2 什 CPU CPU Central Processing Unit ( 理 ), 理 (Processor), CPU 料 ( 例 ) 邏 ( 例 ),, 若 了 CPU, 3 什 CPU CPU 了, 行, 利 CPU 力 來 行 4 什 CPU 5 2-2-1 CPU CPU 了 (CU, Control Unit) / 邏

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

没有幻灯片标题

没有幻灯片标题 高等计算机系统结构 现代指令级并行技术 ( 第四讲 ) 程旭 2012 年 3 月 26 日 流水线的性能 通过更加复杂的流水线和动态调度开发隐形 (imlicit) 指令级并行性 乱序执行执行, 同时保证 : 真数据相关 (RAW) 精确中断 通过寄存器换名, 消除 WAR 和 WAW 冒险 重排序缓冲器 (Reorder buffer) 保存尚未提交 (committing) 但已完成的结果,

More information

lecture21

lecture21 Lecture 21: CPU - Datapath and Control 中央处理器 : 数据通路和控制器 singlepath2 单周期数据通路的设计 主要内容 CPU 的功能及其与计算机性能的关系 数据通路的位置 单周期数据通路的设计 数据通路的功能和实现 - 操作元件 ( 组合逻辑部件 ) - 状态 / 存储元件 ( 时序逻辑部件 ) 数据通路的定时 选择 MIPS 指令集的一个子集作为

More information

计算机体系结构

计算机体系结构 6.823 2002 180 22 6 : 6 Part A: ( 1 4) 20 Part B: ( 5 7) 16 Part C: ( 8 12) 24 Part D: ( 13 20) 24 Part E: ( 21 24) 31 Part F: ( 25 27) 16 Part G: ( 28 30) 12 Part H: ( 31 37) 31 : 180 Part A: 20 DLX 14

More information

L15 MIPS Assembly

L15 MIPS Assembly Lecture 19: MIPS Assembly Language 程序的机器级表示主要内容 MIPS 指令格式 R- 类型 / I- 类型 / J- 类型 MIPS 寄存器 长度 / 个数 / 功能分配 MIPS 操作数 寄存器操作数 / 存储器操作数 / 立即数 / 文本 / 位 MIPS 指令寻址方式 立即数寻址 / 寄存器寻址 / 相对寻址 / 伪直接寻址 / 偏移寻址 MIPS 指令类型

More information

The MIPS Processor Implementation: Pipeline ILP Computer Organization & Design John Hennessy, David Patterson

The MIPS Processor Implementation: Pipeline ILP Computer Organization & Design John Hennessy, David Patterson The IPS Processor Implementation: Pipeline ILP Computer Organization & Design John Hennessy, David Patterson 内容提要 流水线技术原理 IPS 的五级流水线实现 流水线的 Hazard( 冲突 / 依赖 / 相关 ) 及其处理 结构冲突 : 哈佛结构 数据依赖 编译技术 : 插入 nop, 指令重排,

More information

Microsoft PowerPoint - notes3-Simple-filled12

Microsoft PowerPoint - notes3-Simple-filled12 Generic Computer Organization CSE 30321 Computer Architecture I Lecture Notes 3: A Simple Computer: Simple12 And Design at Register Transfer Level Stored Program Machine (vonneumann Model) Instructions

More information

Name__________________________________

Name__________________________________ 6.823 180 21 5 : 5 Part A: 1 5 10 Part B: 6 11 12 Part C: 12 14 12 Part D: 15 23 34 Part E: 24 26 18 Part F: 27 28 16 Part G: 29 32 25 Part H: 33 10 Part I: 34 38 28 Part H: 39 40 10 : 180 Part A 10 Cache

More information

工 序 的 是 ( ) A. 卷 筒 切 筒 装 药 造 粒 B. 搬 运 造 粒 切 引 装 药 C. 造 粒 切 引 包 装 检 验 D. 切 引 包 装 检 验 运 输 7. 甲 公 司 将 其 实 施 工 项 目 发 包 给 乙 公 司, 乙 公 司 将 其 中 部 分 业 务 分 包 给

工 序 的 是 ( ) A. 卷 筒 切 筒 装 药 造 粒 B. 搬 运 造 粒 切 引 装 药 C. 造 粒 切 引 包 装 检 验 D. 切 引 包 装 检 验 运 输 7. 甲 公 司 将 其 实 施 工 项 目 发 包 给 乙 公 司, 乙 公 司 将 其 中 部 分 业 务 分 包 给 2013 年 安 全 工 程 师 法 律 知 识 答 案 解 析 一 单 选 择 题 1. 某 省 人 大 常 务 委 员 会 公 布 实 施 了 某 省 安 全 生 产 条 例, 随 后 省 政 府 公 布 实 施 了 某 省 生 产 经 营 单 位 安 全 生 产 主 体 责 任 规 定, 下 列 关 于 两 者 法 律 地 位 和 效 力 的 说 法, 正 确 的 是 ( ) A. 某 省 安

More information

工程项目进度管理 西北工业大学管理学院 黄柯鑫博士 甘特图 A B C D E F G 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 甘特图的优点 : 直观明了 ( 图形化概要 ); 简单易懂 ( 易于理解 ); 应用广泛 ( 技术通用 ) 甘特图的缺点 : 不能清晰表示活动间的逻辑关系 WBS 责任分配矩阵 ( 负责〇审批

More information

2/80 2

2/80 2 2/80 2 3/80 3 DSP2400 is a high performance Digital Signal Processor (DSP) designed and developed by author s laboratory. It is designed for multimedia and wireless application. To develop application

More information

吉林大学学报 工学版 244 第 4 卷 复杂 鉴于本文篇幅所限 具体公式可详见参考文 献 7 每帧的动力学方程建立及其解算方法如图 3 所示 图4 滚转角速度与输入量 η 随时间的变化波形 Fig 4 Waveform of roll rate and input η with time changing 图5 Fig 5 滚转角随时间的变化波形 Waveform of roll angle with

More information

<4D F736F F D20C7B0CBC4D5C2D7F7D2B5CCE22E646F6378>

<4D F736F F D20C7B0CBC4D5C2D7F7D2B5CCE22E646F6378> 第一章第二章 Q2 1: 高序 : 最低位字节存储在字的最低位 ; 低序 : 最低位字节存储在字的最高位 ; Q2 2: 冯. 诺依曼结构 : 数据和指令都存储在同一存储器中 ; 哈佛结构 : 数据和程序存储在各自独立的存储器中 Q2 3: a) ARM 有 16 个通用寄存器,r0 r15, 其中 r15 还被用作程序计数器 b) CPSR 是程序状态寄存器, 包含了条件码标识 中断禁止位 当前处理器模式和其他状态

More information

<4D F736F F F696E74202D DB5DABEC5BDB22DCEA2B4A6C0EDC6F7B5C4D3B2BCFEBDE1B9B9A3A8D2BBA3A92E >

<4D F736F F F696E74202D DB5DABEC5BDB22DCEA2B4A6C0EDC6F7B5C4D3B2BCFEBDE1B9B9A3A8D2BBA3A92E > 第九讲 授课教师 : 陆俊林王箫音 2012 年春季学期 主要内容 一 微处理器的总体结构 二 高速缓存 三 流水线 四 超标量流水线 教材相关章节 : 微型计算机基本原理与应用 ( 第二版 ) 第 7 章微处理器的内部结构及外部功能特性 1 主要内容 一 微处理器的总体结构 二 高速缓存 三 流水线 四 超标量流水线 2 微处理器相关的若干关键设计 总线 : 提高微处理器 存储器和外设之间的传输效率

More information

KV-cache 1 KV-cache Fig.1 WorkflowofKV-cache 2.2 Key-value Key ; Key Mem-cache (FIFO) Value Value Key Mem-cache ( Value 256B 100 MB 20%

KV-cache 1 KV-cache Fig.1 WorkflowofKV-cache 2.2 Key-value Key ; Key Mem-cache (FIFO) Value Value Key Mem-cache ( Value 256B 100 MB 20% 38 11 2013 11 GeomaticsandInformationScienceofWuhanUniversity Vol.38No.11 Nov.2013 :1671-8860(2013)11-1339-05 :A GIS Key-value 1 1 1 1 (1 129 430079) : 设计了一种基于 Key-value 结构的缓存 KV-cache 旨在简化数据结构 高效管理缓存数据

More information

* 4 6 R P r p . 1 2 3 4 7 89bk 6 5 1 2 3 4 5 6 7 8 9 0 bk r bl bm bn^ bo bl br bq bpbo bn bm [ ] [ ] [ ] bp 8 2 4 6 bq p [ ] [SET] br clckbt bs bs bt ck cl. 1 2 1 2+- 3 3 . 1 2 3 4 5 6 7 8 9 bk bl bm

More information

L15 MIPS Assembly

L15 MIPS Assembly Lecture 20: MIPS Assembly Language II Example: 过 程 调 用 int i; i 是 全 局 静 态 变 量 void set_array(int num) { array 数 组 是 局 部 变 量 int array[10]; for (i = 0; i < 10; i ++) { set_array 是 调 用 过 程 arrar[i] = compare

More information

Microsoft PowerPoint ren-build-CPU [兼容模式]

Microsoft PowerPoint ren-build-CPU [兼容模式] 嵌入式系统设计与应用 如何设计一个处理器? 从 0 到 1 西安交通大学电信学院 任鹏举 如何设计一个处理器? 从 0 到 1 如何设计一个处理器? 如何扩展一个处理器的指令集? 是否可以从处理器的指令集反向设计出相应的处理器?From ISA to Micro-Architecture? 如何设计一个处理器? 从 0 到 1 Application Software programs 单时钟处理器

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

Microsoft PowerPoint - chx09_org14_pipelining_1.ppt

Microsoft PowerPoint - chx09_org14_pipelining_1.ppt 计算机组织与系统结构 流水技术引论 Itroductio to Pipeliig ( 第十四讲 ) 程旭 29.5 rach Jump st 单周期处理器 busw Wr 5 5 Istructio Fetch Uit Rd imm6 Istr Rs 5 Rw Ra Rb -bit isters 6 Istructio op bus Exteder

More information

Training

Training 计算机组织与系统结构 流水技术引论 Introduction to Pipelining ( 第六讲 ) 程旭 2014.11.26 MUX 0 1 MUX 0 1 Mux 0 1 32 ctr Clk busw Wr 32 32 busa 32 busb 5 5 5 Rw Ra Rb 32 32-bit isters Rs Rt Rt Rd Dst Extender 32 16 imm16 Src

More information

多核心CPU成長日記.doc

多核心CPU成長日記.doc 篇 名 : 多 核 心 CPU 成 長 日 記 作 者 : 劉 重 安 國 立 溪 湖 高 中 高 三 11 班 趙 芃 凱 國 立 溪 湖 高 中 高 三 11 班 蔡 文 凱 國 立 溪 湖 高 中 高 三 11 班 指 導 老 師 : 潘 秀 欽 老 師 第 1 頁 壹 前 言 微 處 理 器 (CPU, 被 稱 為 中 央 處 理 器 ) 可 說 是 電 腦 系 統 的 大 腦, 掌 管 整

More information

C语言的应用.PDF

C语言的应用.PDF AVR C 9 1 AVR C IAR C, *.HEX, C,,! C, > 9.1 AVR C MCU,, AVR?! IAR AVR / IAR 32 ALU 1KBytes - 8MBytes (SPM ) 16 MBytes C C *var1, *var2; *var1++ = *--var2; AVR C 9 2 LD R16,-X ST Z+,R16 Auto (local

More information

单周期数据通路

单周期数据通路 计算机组织与系统结构 设计单周期数据通路的处理器 Designing a Single Cycle Datapath Microprocessor 第四讲 程旭 27..2 2 Processor Processor Control Enable? Read/Write Memory Datapath PC Registers Arithmetic & Logic Unit (ALU) Address

More information

提纲. 1 实验准备. 2 从实模式进入保护模式. 3 小结 陈香兰 ( 中国科学技术大学计算机学院 ) 软件综合实验之操作系统 July 1, / 11

提纲. 1 实验准备. 2 从实模式进入保护模式. 3 小结 陈香兰 ( 中国科学技术大学计算机学院 ) 软件综合实验之操作系统 July 1, / 11 .. 软件综合实验之操作系统 进入保护模式 陈香兰 中国科学技术大学计算机学院 July 1, 2016 陈香兰 ( 中国科学技术大学计算机学院 ) 软件综合实验之操作系统 July 1, 2016 1 / 11 提纲. 1 实验准备. 2 从实模式进入保护模式. 3 小结 陈香兰 ( 中国科学技术大学计算机学院 ) 软件综合实验之操作系统 July 1, 2016 2 / 11 实验准备 实验环境准备

More information

第5章:汇编语言程序设计

第5章:汇编语言程序设计 第 5 章 : 汇编语言程序设计 程 汇编语言指令格式 系统伪指令 存储器选择方式 常用子程序 1 汇编语言程序设计 PIC 指令系统 语言系统 指 CPU 编 器语言 器语言 器语言 设计 用 语言 设计 语言 汇编语言 2 汇编语言指令格式 汇编语言指令格式 ( 指令 ) label opcode operand comment 指令 用 存 指令 指令语 3 汇编语言指令格式 1 指令 用 指令

More information

Microsoft PowerPoint - STU_EC_Ch08.ppt

Microsoft PowerPoint - STU_EC_Ch08.ppt 樹德科技大學資訊工程系 Chapter 8: Counters Shi-Huang Chen Fall 2010 1 Outline Asynchronous Counter Operation Synchronous Counter Operation Up/Down Synchronous Counters Design of Synchronous Counters Cascaded Counters

More information

器之 间 向一致时为正 相反时则为负 ③大量电荷的定向移动形成电 流 单个电荷的定向移动同样形成电流 3 电势与电势差 1 陈述概念 电场中某点处 电荷的电势能 E p 与电荷量 q Ep 的比值叫做该点处的电势 表达式为 V 电场中两点之间的 q 电势之差叫做电势差 表达式为 UAB V A VB 2 理解概念 电势差是电场中任意两点之间的电势之差 与参考点的选择无关 电势是反映电场能的性质的物理量

More information

untitled

untitled 8086/8088 CIP /. 2004.8 ISBN 7-03-014239-X.... TP313 CIP 2004 086019 16 100717 http://www.sciencep.com * 2004 8 2004 8 1 5 500 787 1092 1/16 16 1/2 391 000 1 2 ii 1 2 CAI CAI 3 To the teacher To the student

More information

第四章 102 图 4唱16 基于图像渲染的理论基础 三张拍摄图像以及它们投影到球面上生成的球面图像 拼图的圆心是相同的 而拼图是由球面图像上的弧线图像组成的 因此我 们称之为同心球拼图 如图 4唱18 所示 这些拼图中半径最大的是圆 Ck 最小的是圆 C0 设圆 Ck 的半径为 r 虚拟相机水平视域为 θ 有 r R sin θ 2 4畅11 由此可见 构造同心球拼图的过程实际上就是对投影图像中的弧线图像

More information

101

101 Lecture 04 Modeling, Anlysis nd Simultion in Logic Design 逻辑设计中的建模 分析与仿真 Dr. Engineering Design Process 工程设计过程 定义问题研究勾画可能的解答 Identify nd define prolem reserch sketch possile solutions 建模 Modeling 分析 Anlysis

More information

RS-232C [11-13] 1 1 (PLC) (HMI) Visual Basic (PLC) 402

RS-232C [11-13] 1 1 (PLC) (HMI) Visual Basic (PLC) 402 年 路 年 1 [1-3][4] [5-7] [15] Visual Basic [10] 401 RS-232C [11-13] 1 1 (PLC) (HMI) Visual Basic (PLC) 402 1 1 X0 X1 X2 X3 SENSOR Y0 SENSOR VB X3 Y0 Y1 Y2 Y3 Y4 Y5 Y1~Y5 Y6 VB Y7 VB Y11 Y12 Y13 Y14 Y15 Y11~Y15

More information

<4D F736F F D20AD70BAE2BEF7B2D5C2B4BB50B5B2BA632D3936B8D5C344B8D4B8D12DB2C4A440A6B8B0C9BB7EB8EAAEC62D2D2D312E646F63>

<4D F736F F D20AD70BAE2BEF7B2D5C2B4BB50B5B2BA632D3936B8D5C344B8D4B8D12DB2C4A440A6B8B0C9BB7EB8EAAEC62D2D2D312E646F63> 計算機組織與結構 96 年試題詳解 - 勘誤表 [ 一 ] 96-6 頁, 第 5 題解答修正為 : (C) 汪兆慶老師提供 96-6 頁, 第 7 題解答修正為 : 7. (B) 執行指令數 = 1+(1+1+1+1) 20+1+1+1 = 84 執行週期數 = 1+(1 2+1+1+1 2) 20+1 2+1+1 = 125 CPI = 125/84 MIPS = [2GHz/(125/84)]/10

More information

L21

L21 Lecture 25: Pipeline Hazard 流水线冒险的处理主要内容 流水线冒险的几种类型 数据冒险的现象和对策 数据冒险的种类 - 相关的数据是 结果 : 可以通过转发解决 - 相关的数据是 DM 读出的内容 : 随后的指令需被阻塞一个时钟 数据冒险和转发 - 转发检测 / 转发控制 数据冒险和阻塞 - 阻塞检测 / 阻塞控制 控制冒险的现象和对策 静态分支预测技术 动态分支预测技术

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

lecture13

lecture13 Lecture 13: Cache V 1 Cache 大 小 Block 大 小 和 缺 失 率 的 关 系 Cache 性 能 由 缺 失 率 确 定, 而 缺 失 率 与 Cache 大 小 Block 大 小 Cache 级 数 等 有 关 Cache 大 小 :Cache 越 大,Miss 率 越 低, 但 成 本 越 高! Block 大 小 :Block 大 小 与 Cache 大 小

More information

Microsoft Word - em78 sub program.doc

Microsoft Word - em78 sub program.doc 一 二进制数转换为 ASCⅡ 码 将一个字节的二进制数转换为两位 16 进制数的 ASCⅡ 码 main: mov a,@0x9f ; 二进制数为 0x9f mov 0x30,a ; 二进制数存入 0x30 mov a,@0x02 mov 0x10,a ;0x10 中存放转换次数 mov a,@0x31 mov 0x04,a ;0x04 中为转换后数据存放地址 mov a,0x30 B1: ; 取

More information

Bus Hound 5

Bus Hound 5 Bus Hound 5.0 ( 1.0) 21IC 2007 7 BusHound perisoft PC hound Bus Hound 6.0 5.0 5.0 Bus Hound, IDE SCSI USB 1394 DVD Windows9X,WindowsMe,NT4.0,2000,2003,XP XP IRP Html ZIP SCSI sense USB Bus Hound 1 Bus

More information

数学分析(I)短课程 [Part 2] 4mm 自然数、整数和有理数

数学分析(I)短课程 [Part 2]   4mm 自然数、整数和有理数 .. 数学分析 (I) 短课程 [Part 2] 自然数 整数和有理数 孙伟 华东师范大学数学系算子代数中心 Week 2 to 18. Fall 2014 孙伟 ( 数学系算子代数中心 ) 数学分析 (I) 短课程 Week 2 to 18. Fall 2014 1 / 78 3. 自然数理论初步 孙伟 ( 数学系算子代数中心 ) 数学分析 (I) 短课程 Week 2 to 18. Fall 2014

More information

论文,,, ( &, ), 1 ( -, : - ), ; (, ), ; ;, ( &, ),,,,,, (, ),,,, (, ) (, ),,, :. : ( ), ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ), ( ),,,, 1 原译作 修补者, 但在英译版本中, 被译作

论文,,, ( &, ), 1 ( -, : - ), ; (, ), ; ;, ( &, ),,,,,, (, ),,,, (, ) (, ),,, :. : ( ), ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ), ( ),,,, 1 原译作 修补者, 但在英译版本中, 被译作 * 夏传玲 : 本文简要回顾了国内外定性研究在最近 多年的发展概况, 总结 了定性研究的六个发展趋势和分析策略上的三种流派 在上述两种背景下, 本文探讨了计算机辅助的定性分析给定性研究带来的机遇和挑战, 特别是它和手工操作对比时的优势和劣势, 以及应用这种定性分析技术所可能面临的困难 : 定性研究定性分析 文化差异,, (, ),,,, ( - ) ( - ) ( - ) ( - ) ( - ) (

More information

01

01 ZEBRA 技术白皮书 条码编码 101 相关知识介绍 引言 20 70 数据 80 20 90 (JIT) AIAG EIA HIBCC HAZMAT 条码的优势提高数据准确性 99% 85% / / 提升效率 / 2 Zebra Technologies 保持一致性 ID 改进库存和资产管理 成本 / 效益分析 ID ID ID (ERP) RFID Zebra Technologies 3 ID

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

* r p . 4 6 12 3 5 7 8 9bk bm btbsbrbqbp bo bn bl [ ] [ ] [ ] [ ] [SET] 1 2 3 4 5 6 7. cmcl ck 8 9 0 bk bl bm bn bo 1 2 1 2+ - bp bq 8 2 4 6 br r bs p bt ck cl cm 3 3 . 1 2 3 4 5 6 7 8 9 bk bl bm

More information

Huawei Technologies Co

Huawei Technologies Co Testbench Preliminary itator 1 TESTBENCH... 3 2 TESTBENCH... 3 2.1 Testbench... 3 2.2... 4 2.2.1 HDL... 4 2.2.2... 5 2.2.3 PLI... 5 2.3... 6 2.4... 6 2.4.1... 6 2.4.2... 7 3 TESTBENCH... 9 3.1 2-4... 9

More information

4 (QN )? m O i? :i I? +a% 3 1'. U li g ffl o ffl E ffl "I H 21 H i q ffl s E$" ffl "1 e'5 o m 4 ).ffl?os- ou>'a?o 'co- Ing M'::l: " 5a!. l(j r?i?-i

4 (QN )? m O i? :i I? +a% 3 1'. U li g ffl o ffl E ffl I H 21 H i q ffl s E$ ffl 1 e'5 o m 4 ).ffl?os- ou>'a?o 'co- Ing M'::l:  5a!. l(j r?i?-i ( ) : I +% 3 1'. U "I 21 q $" '5 ). - ' 'c- I '::: " 5. (j -j (11 R kt. j.5 5()() q ' :: B : :}(, d, *. [I,. C/' -S) )-+ jq - 5 C 3;5 )p ' " ).. "- --- :C f " =h (L I C) " % )-5, = = ::I * ( -= ' "6 *

More information

Chapter #

Chapter # 第三章 TCP/IP 协议栈 本章目标 通过本章的学习, 您应该掌握以下内容 : 掌握 TCP/IP 分层模型 掌握 IP 协议原理 理解 OSI 和 TCP/IP 模型的区别和联系 TCP/IP 介绍 主机 主机 Internet TCP/IP 早期的协议族 全球范围 TCP/IP 协议栈 7 6 5 4 3 应用层表示层会话层传输层网络层 应用层 主机到主机层 Internet 层 2 1 数据链路层

More information

Microsoft PowerPoint 輸入輸出裝置(I_O Devices).pptx

Microsoft PowerPoint 輸入輸出裝置(I_O Devices).pptx 作業系統 Operating Systems 靜宜大學資訊傳播工程學系 劉國有助理教授 kyliu@pu.edu.tw 輸入 / 輸出裝置 (I/O Devices) 裝置控制器 (Device Controllers) I/O Devices I/O devices can be roughly divided into two categories: Block devices: stores

More information

第5章修改稿

第5章修改稿 (Programming Language), ok,, if then else,(), ()() 5.0 5.0.0, (Variable Declaration) var x : T x, T, x,,,, var x : T P = x, x' : T P P, () var x:t P,,, yz, var x : int x:=2. y := x+z = x, x' : int x' =2

More information

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 TEMPLATE 1 Template 描述 使用模板函数求最大值 使用如下 main 函数对程序进行测试 int main() { double a, b; cin >> a >> b; cout c >> d; cout

More information

Microsoft Word - Delta Controller ASCII_RTU_SC

Microsoft Word - Delta Controller ASCII_RTU_SC Delta Controller ASCII/RTU ( 适用台达变频器 伺服驱动器 PLC 温度控制器 ) 人机默认值通讯速率 :9600, 7, None, 2 (ASCII); 9600, 8, None, 2 (RTU) 控制器站号 :1 控制区 / 状态区 :None/None 控制器接线的说明 Delta Servo a. RS-232(DOP-A/AE/AS, DOP-B 系列适用 )

More information

第七章 中断

第七章 中断 计算机组成原理 总结 图说 COD llxx@ustc.edu.cn 计算科学 (Computing) 计算机组成 :how computers work 硬盘 电源导线和电缆 软驱 内存 扩展槽 扩展卡 主板 微处理器 (CPU) 各种外设接口, 包括 : 键盘 鼠标 显示器 USB 声卡 网卡 并行口等 CPU 风扇支架 PCI 扩展槽 IDE 内存 CPU 硬条插盘接插槽槽口 华硕 P4S533-MX

More information

Microsoft PowerPoint - C15_LECTURE_NOTE_04.ppt

Microsoft PowerPoint - C15_LECTURE_NOTE_04.ppt MACHINE LANGUAGE CODING AND THE DEBUG SOFTWARE DEVELOPMENT PROGRAM OF THE PC General instruction format for machine code 611 37100 微處理機原理與應用 Lecture 04-4 MACHINE LANGUAGE CODING AND THE DEBUG SOFTWARE

More information

Microsoft PowerPoint - C15_LECTURE_NOTE_05.ppt

Microsoft PowerPoint - C15_LECTURE_NOTE_05.ppt 8088/8086 MICROPROCESSOR PROGRAMMING INTEGER INSTRUCTIONS AND COMPUTATIONS 8088/8086 MICROPROCESSOR PROGRAMMING INTEGER INSTRUCTIONS AND COMPUTATIONS 5.1 Data-Transfer Instructions 5.2 Arithmetic Instructions

More information

50-FB23-24_BES_V_ z1_ b

50-FB23-24_BES_V_ z1_ b CPX CPX-FB23, CPX-FB23-24 CC-Link 1411b [8042126] CPX-FB23, CPX-FB23-24 P.BE-CPX-FB23-24-ZH CC-Link Mitsubishi TORX : : : 1. 2 Festo P.BE-CPX-FB23-24-ZH 1411b CPX-FB23, CPX-FB23-24 CPX-FB23, CPX-FB23-24

More information

第 15 章 程 式 編 写 語 言 15.1 程 式 編 写 語 言 的 角 色 程 式 編 寫 語 言 是 程 式 編 寫 員 與 電 腦 溝 通 的 界 面 語 法 是 一 組 規 則 讓 程 式 編 寫 員 將 字 詞 集 合 起 來 電 腦 是 處 理 位 元 和 字 節 的 機 器, 與

第 15 章 程 式 編 写 語 言 15.1 程 式 編 写 語 言 的 角 色 程 式 編 寫 語 言 是 程 式 編 寫 員 與 電 腦 溝 通 的 界 面 語 法 是 一 組 規 則 讓 程 式 編 寫 員 將 字 詞 集 合 起 來 電 腦 是 處 理 位 元 和 字 節 的 機 器, 與 程 式 編 写 語 言 在 完 成 這 章 後, 你 將 能 夠 了 解 程 式 編 写 語 言 的 功 能 了 解 高 階 語 言 和 低 階 語 言 之 間 的 分 別 知 道 翻 譯 程 式 的 意 義 和 能 夠 把 翻 譯 程 式 分 類 為 : 匯 編 程 式 編 譯 程 式 和 解 譯 程 式 認 識 不 同 翻 譯 程 式 的 優 點 和 缺 點 程 式 是 指 揮 電 腦 的 指

More information

µÚ¶þÕ µ¥´¦ÀíÆ÷Ìåϵ½á¹¹

µÚ¶þÕ  µ¥´¦ÀíÆ÷Ìåϵ½á¹¹ 第二章 单处理器体系结构 石教英 2.1 Intel80x86 处理器体系结构综述 (1) CISC 体系结构 计算机自 40 年代中叶问世以来, 其体系结构的发展经历了 : 简单 复杂 极其复杂 简单 复杂 极其复杂 接线控制器, 速度作数不定:0-6 个; 操作数种类十几种; 寻址方设计, 以便于修改, 纠指令数增加; 寻址方式增加; 指令格式复杂指令数少: 加法和转移令数增加; CPI 接近于1;

More information

Microsoft PowerPoint - 05-第五讲-寻址方式.pptx

Microsoft PowerPoint - 05-第五讲-寻址方式.pptx 第五讲 授课教师 : 陆俊林王箫音 2012 年春季学期 主要内容 一 寻址方式概述 二 数据的寻址方式 三 转移地址的寻址方式 教材相关章节 : 微型计算机基本原理与应用 ( 第二版 ) 第 4 章寻址方式与指令系统 1 主要内容 一 寻址方式概述 二 数据的寻址方式 三 转移地址的寻址方式 2 指令的组成 指令由操作码和操作数两部分组成 操作码操作数 MOV AX, 8726H ADD AX,

More information

附件1-1

附件1-1 學 校 名 稱 : 臺 中 市 南 屯 區 黎 明 國 民 小 學 方 案 名 稱 : 學 習 的 源 頭 活 水 ~ 圖 書 教 師 計 畫 壹 前 言 ~ 黎 明 教 閱 讀 半 畝 方 塘 一 鑑 開 天 光 雲 影 共 徘 徊 問 渠 哪 得 清 如 許 為 有 源 頭 活 水 來 宋 朝 朱 熹 < 觀 書 有 感 > 本 校 自 99 學 年 度 起 連 續 申 請 教 育 部 試 辦

More information

Computer Architecture

Computer Architecture ECE 3120 Computer Systems Assembly Programming Manjeera Jeedigunta http://blogs.cae.tntech.edu/msjeedigun21 Email: msjeedigun21@tntech.edu Tel: 931-372-6181, Prescott Hall 120 Prev: Basic computer concepts

More information

Ps22Pdf

Ps22Pdf ( ) 158,,,,,, ( CIP) /. :, 1996. 12 ISBN 7 302 02353 0... :. F275 CIP ( 96) 20860 : ( :, 100084) : : : 850 1168 1/ 32 : 13. 25 : 344 : 1996 12 1 1996 12 1 : ISBN 7 302 02353 0/ F 130 : 0001 5000 : 16.

More information

Microsoft PowerPoint - C15_LECTURE_NOTE_05.ppt

Microsoft PowerPoint - C15_LECTURE_NOTE_05.ppt 8088/8086 MICROPROCSOR PROGRAMMING INTEGER INSTRUCTIONS AND COMPUTATIONS The MOVE The move (MOV) instruction is used to transfer a byte or a word of data from a source operand to a destination operand

More information

C/C++ - 文件IO

C/C++ - 文件IO C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;

More information

EK-STM32F

EK-STM32F STMEVKIT-STM32F10xx8 软 件 开 发 入 门 指 南 目 录 1 EWARM 安 装... 1 1.1 第 一 步 : 在 线 注 册... 1 1.2 第 二 步 : 下 载 软 件... 2 1.3 第 三 步 : 安 装 EWARM... 3 2 基 于 STMEVKIT-STM32F10xx8 的 示 例 代 码 运 行... 6 2.1 GPIO Demo... 6 2.2

More information

CH01.indd

CH01.indd 3D ios Android Windows 10 App Apple icloud Google Wi-Fi 4G 1 ( 3D ) 2 3 4 5 CPU / / 2 6 App UNIX OS X Windows Linux (ios Android Windows 8/8.1/10 BlackBerry OS) 7 ( ZigBee UWB) (IEEE 802.11/a/b/g/n/ad/ac

More information

上海盛瑞电子有限公司

上海盛瑞电子有限公司 2015/5/22 1 / 9 一运动指令 MoveJ MoveJ[\Conc,]ToPoint,Speed[\V] [\T],Zone[\Z][\Inpos],Tool[\WObj]; 1 [\Conc,]: 协作运动开关 (switch) 2 ToPoint: 目标点, 默认为 * (robotarget) 3 Speed: 运行速度数据 (speeddata) 4 [\V]: 特殊运行速度 mm/s

More information

目 录(目录名)

目  录(目录名) 目录 1 域名解析配置命令... 1-1 1.1 域名解析配置命令...1-1 1.1.1 display dns domain... 1-1 1.1.2 display dns dynamic-host... 1-2 1.1.3 display dns proxy table... 1-2 1.1.4 display dns server... 1-3 1.1.5 display ip host...

More information