多发射指令的算法细节

合集下载

多发射处理器的指令调度算法研究

多发射处理器的指令调度算法研究

第 29 卷 第 12 期2008 年12 月井冈山学院学报(自然科学)Journal of Jinggangshan University(Science and Technology)Vol 〃29 No 〃12Dec 〃2008多发射处理器的指令调度算法研究孙凌宇,冷 明,夏洁武,李金忠(井冈山大学 信息科学与传媒学院, 江西 吉安 343009)[摘要] RI S C 体系作为精简指令集计算机的兴起,使得多发射处理器的指令调度算法成为研究热点。

本文从程序 块划分和执行角度,讨论了多发射处理器的指令调度算法,介绍了几种局部指令和全局指令调度的影响力较大 的算法。

它们通过指令调度的优化,提高多发射处理器内部功能部件的执行并行性。

本文还给出了进一步研究 方向,构造多发射结构多处理器并行处理系统,实现处理器之间的并行技术和处理器内部的并行技术的整合。

[关键词] 精简指令集计算机;处理器;多发射结构;指令调度算法 [中图分类号] TP391[文献标识码] A[文章编号] 1673-4718(2008)12-0025-030 引言由于VLSI 工艺迅速发展改变了传统计算机设 计思想、指令系统运行效率的二八法则、计算机系 统的软硬件间优化划分等因素,使得20世纪80年代 初 兴起的精简指令集计算机 (RISC :Reduce Instruction Set Computer )技术一直是计算机处理器 发展的主流,其发展方向是尽量减少平均每条指令 执行的所需周期数 (CPI :Cycle PerInstruction ),或 者尽量提高平均每个周期可执行的指令数 (IPC : Instruction Per Cycle ),使得流水线设计和优化编译 成为关键技术。

然而,即使假设在理想情况下,IPC 因 为单发射的RISC 使得在每个周期只发射一条指令, 限制IPC 只能小于或等于1。

因此,RISC 由单发射逐 渐演变成多发射,在流水线基础上每个周期可以发 射多条指令,但这也使得多发射处理器中的指令调 度算法更为重要[1]。

Tomasulo算法

Tomasulo算法

F0,0(R1) F4,F0,F2 0(R1),F4 F0,-8(R1) F4,F0,F2 -8(R1),F4 F0,-16(R1) F4,F0,F2 -16(R1),F4 F0,-24(R1) F4,F0,F2 -24(R1),F4 R1,R1,#32 R1,LOOP
;drop SUBI & BNEZ
;delayed branch ;altered when move past SUBI
Instruction producing result FP ALU op FP ALU op Load double
Instruction using result Another FP ALU op Store double FP ALU op
Loop: LD ADDD SD SUBI BNEZ NOP F0,0(R1) F4,F0,F2 0(R1),F4 R1,R1,8 R1,Loop ;F0=vector element ;add scalar from F2 ;store result ;decrement pointer 8B (DW) ;branch R1!=zero ;delayed branch slot
• 注意把SD与SUBI交换次序时偏移量的变化 • 注意SD与LD交换次序不会影响正确性 • 每4个循环需要14拍,每个循环 3.5 拍
1 Loop: 2 3 4 5 6 7 8 9 10 11 12 13 14 LD LD LD LD ADDD ADDD ADDD ADDD SD SD SD SUBI BNEZ SD F0,0(R1) F6,-8(R1) F10,-16(R1) F14,-24(R1) F4,F0,F2 F8,F6,F2 F12,F10,F2 F16,F14,F2 0(R1),F4 -8(R1),F8 -16(R1),F12 R1,R1,#32 R1,LOOP 8(R1),F16

超标量处理机和超流水线处理机——计算机系统结构

超标量处理机和超流水线处理机——计算机系统结构

超标量处理机和超流⽔线处理机——计算机系统结构在表5.2中,基准标量处理机是⼀台普通的单流⽔线处理机。

为了便于进⾏⽐较,把基准标量处理机的机器流⽔线周期和指令发射等待时间都假设为1个时钟周期,同时发射的指令条数为⼀条,它的指令级并⾏度ILP(Instruction Level Parallelism)假设为1。

另外三种指令级并⾏处理机,即并⾏度为m的超标量处理机,并⾏度为n的超流⽔线处理机,以及并⾏度为(m,n)的超标量超流⽔线处理机,它们的性能都相对于基准标量处理机进⾏⽐较。

单流⽔线处理机只有⼀条指令流⽔线,只有⼀个多功能的操作部件,每个时钟周期"取指令"和"分析"完成⼀条指令。

在许多流⽔线处理机中,指令流⽔线的流⽔段数k=4;它把⼀条指令的执⾏过程主要分解为"取指令"、"分析"、"执⾏"和"写结果"4个阶段。

指令所要执⾏的功能主要在多功能操作部件中,在"执⾏"这⼀流⽔段完成。

多数流⽔线处理机的多功能操作部件采⽤流⽔线结构。

有的简单指令,只要⼀个时钟周期就能够在"执⾏"流⽔段中完成,⽽⽐较复杂的指令往往需要多个时钟周期。

另外,还有条件转移等的影响;因此,⼀般流⽔线标量处理机每个时钟周期平均执⾏指令的条数⼩于1,即它的指令级并⾏度ILP<1。

超标量、超流⽔线和超标量超流⽔线三种处理机在⼀个时钟周期内可以执⾏完成多条指令,即它们的指令级并⾏度ILP都⼤于1。

超标量处理机基本结构超标量处理机的典型结构是有多个操作部件,⼀个或⼏个⽐较⼤的通⽤寄存器堆,⼀个或两个⾼速Cache。

先进的超标量处理机⼀般都包含有三个处理单元,⼀个是定点处理单元,通常称为中央处理单元(CPU),它由⼀个或多个整数处理部件组成;第⼆个是浮点处理单元(FPU),它由浮点加减法部件和浮点乘除法部件等组成;第三个是图形加速部件,也称为图形处理单元(GPU),这是现代处理机中不可缺少的⼀个部分。

mips中为了减少停顿 采用的技术

mips中为了减少停顿 采用的技术

mips中为了减少停顿采用的技术MIPS是一种常用的指令集架构,它采用了一系列的技术来优化指令的执行过程,从而减少停顿,提高程序的执行效率。

本文将介绍MIPS中为了减少停顿所采用的一些技术。

一、流水线技术流水线技术是指将指令的执行过程分为若干个阶段,然后将不同指令的不同阶段交错在一起,从而使得多条指令可以同时执行,提高了程序的执行效率。

MIPS中采用了五级流水线技术,将指令的执行过程分为取指阶段、译码阶段、执行阶段、访存阶段和写回阶段。

这样,每条指令在执行时都可以同时进行不同的阶段,从而提高了程序的执行效率。

二、分支预测技术分支指令是指在程序执行过程中需要根据条件进行跳转的指令。

在MIPS中,分支指令的执行会影响到流水线的执行顺序,从而导致停顿的发生。

为了减少这种停顿,MIPS采用了分支预测技术。

分支预测技术是指根据历史执行情况,对分支指令的跳转方向进行预测。

如果预测正确,程序可以继续执行;如果预测错误,程序会回滚到分支指令的位置重新执行。

通过这种技术,可以减少分支指令带来的停顿,提高程序的执行效率。

三、乱序执行技术乱序执行技术是指在流水线执行过程中,根据指令之间的依赖关系,动态调整指令的执行顺序,从而减少停顿的发生。

MIPS中采用了乱序执行技术,将指令的执行顺序动态调整,使得不同指令之间的依赖关系得到了更好的处理。

通过这种技术,可以充分利用流水线的并行性,提高程序的执行效率。

四、多发射技术多发射技术是指在一个时钟周期内同时发射多条指令,从而提高程序的执行效率。

MIPS中采用了多发射技术,将流水线分为多个单元,并且每个单元都可以发射一条指令。

通过这种技术,可以使得多条指令可以同时执行,提高程序的执行效率。

五、数据前推技术数据前推技术是指在指令执行过程中,将计算结果直接传递给需要使用这个结果的指令,从而减少停顿的发生。

MIPS中采用了数据前推技术,将计算结果直接传递给需要使用这个结果的指令,从而避免了停顿的发生,提高了程序的执行效率。

流水线的多发射技术

流水线的多发射技术
.超级流水线(Super pipelining):将每个功能部件进一
步流水化,使得一个功能部件在一个时钟周期中可以
处理多条指令(可以简单地理解为很长的流水线)
多发射流水线
0
1
2
3
4
5
6
7
T
正常流水线
Байду номын сангаас
超标量流水线
0
1
2
3
4
5
. 单发射处理机的指令流水线
取指令指令译码执行指令EX写回结果
FA1FA2FA3
浮点加法部件
来自指令
CacheIFIDMD1MD2MD3WR通用寄存器
后行写数栈
乘除法部件
AL
定点算术逻辑部件
LS
取数存数部件
. 同时发射两条指令的多发射处理机的指令流水线
取指令指令译码执行指令写回结果
8 流水线技术(3)
张伟
计算机学院
大纲
.回顾上节内容
.流水线相关
.结构相关
.数据相关
.控制相关
.高级流水线技术
流水线性能分析
.吞吐率(throughput rate)
单位时间内流水线所完成的任务数或输出结果
的数量
.加速比(speedup ratio)
超标量处理机的指令级并行度(ILP)大于1。
改变PC值的指令
结构相关
.1. 在流水线机器中,为了使各种指令组合能顺
利地重叠执行,需要把功能部件流水化,并把资
源重复设置。
.2. 如果某种指令组合因资源冲突而不能顺利重

并行计算机体系结构的分类

并行计算机体系结构的分类

并行计算机体系结构的分类并行计算机体系结构是指在计算机系统中,通过多个处理单元同时执行任务以提高计算性能的架构框架。

根据不同的设计思想和实现方式,可以将并行计算机体系结构分为多种分类。

本文将介绍几种常见的并行计算机体系结构分类,并对其特点和应用进行讨论。

1.指令级并行体系结构指令级并行体系结构(ILP)是基于指令级并行技术的一种体系结构。

ILP通过将单个指令分解为多个子操作,并在不同的处理单元上同时执行这些子操作,从而实现指令级并行。

这种体系结构适用于需要大量计算的应用,如科学计算和图像处理。

其中,超标量和超流水线是常见的ILP体系结构。

超标量体系结构通过在一个时钟周期内同时发射多条指令,利用指令之间的独立性实现指令级并行。

而超流水线体系结构则通过将指令的执行过程分解为多个阶段,并在每个阶段上同时执行不同的指令,进一步提高了并行度。

这两种体系结构能够充分利用处理器资源,提高计算性能。

2.向量处理体系结构向量处理体系结构是基于向量处理器的一种体系结构。

向量处理器是一种特殊的处理器,能够同时处理多个数据元素。

在向量处理体系结构中,处理器通过执行向量指令,对向量数据进行并行操作。

这种体系结构适用于需要对大规模数据进行相同类型操作的应用,如科学计算和图像处理。

向量处理体系结构具有高度的并行性和数据吞吐量,能够充分利用数据级并行性,提高计算性能。

然而,由于向量处理器对数据的访问具有一定的限制,对于不适合向量化的应用,其性能优势可能会受到限制。

3.多核体系结构多核体系结构是指在一个计算机系统中,使用多个处理核心来执行任务的体系结构。

每个处理核心都具有独立的处理器和内存,能够同时执行不同的指令流。

多核体系结构适用于需要同时执行多个任务的应用,如服务器和大数据处理。

多核体系结构具有良好的可扩展性和并行性,能够提供更高的计算性能。

通过将任务分配给不同的处理核心,可以充分利用系统资源,提高系统的吞吐量和响应速度。

然而,多核体系结构也面临着任务调度和数据共享的挑战,需要采用合适的并行编程模型和调度算法来优化性能。

ILP开发的技术

ILP开发的技术

综述:ILP开发的技术前言:自1985年以来,所有的处理器都采用流水线方式使指令的执行可以重叠进行以提高性能。

由于可以将指令间的关系看做是并行的,因此将指令间的这种潜在重叠称为指令级并行。

于是可以提高对并行的开发能力的相关技术越来越受到人们的关注。

开发指令级并行的方法大致可以分为两类,一种方法是依赖硬件,动态地发现和开发指令级并行;另一种方法是依赖与软件技术,在编译阶段静态地发现。

本文中将着重讨论一系列技术,这些技术都是用来提高指令序列的并行度和扩展流水线的。

1.静态编译技术基本流水线调度:要保持一条流水线不停顿,就要去发现可以流水重叠的不想关的指令序列,并加以充分利用,为避免流水线的停顿,就要事先找出指令代码中的相关指令并将它们分离,使其相隔的时钟周期能正好等于原来指令在流水执行时的时延,编译器进行这类调度的能力既依赖与程序的指令级并行度,也依赖与流水线中功能单元的时延循环展开:为了增加有效操作对转移和开销指令的比重,循环展开可以通过多次复制循环体和调整循环中止码来实现。

循环展开因为它可以消除转移,所以它也可以用来改进调度。

并且循环展开这种转换方法对于各种处理器,从简单流水线到超标量多发射结构等等都适用。

但是这种转换也确实增加了现代编译器的复杂度。

预测技术:由于需要通过转移冒险和停顿来保持控制相关,因此转移会降低流水线的性能,上文提到的循环展开是减小转移冒险的方法之一,另外还可以通过转移预测技术来减小转移引起的性能损耗。

而且想要开发指令级并行,转移预测的准确率是个关键问题。

可以通过缓存的容量,增加每次预测所使用的预测方案的准确率。

2.动态调度机制一个简单的静态调度流水线负责取指令并将它发射出去,除非流水线中的指令与取到的指令之间存在数据相关,而且无法通过旁路技术和直接通路技术避免数据相关,如果有无法避免的数据相关,那么检测冒险的硬件将从使用相关结果的指令开始暂停流水线,停止取指令和发射指令的工作,直到相关被清除,而动态调度技术就是通过硬件对指令执行顺序进行重组,在保持数据流和异常行为的同时减少停顿,它可以处理一些在编译阶段无法预见的相关情况,同时它简化了编译器的设计,但是动态调度的这些优势是以硬件复杂度的显著增加为代价的。

多发射指令的算法细节讲解

多发射指令的算法细节讲解

循环展开4次(straightforward way)
1 Loop: LD
2
ADDD
3
SD
4
LD
5
ADDD
6
SD
7
LD
8
ADDD
9
SD
10
LD
11
ADDD
12
SD
13
SUBI
14
BNEZ
15
NOP
F0,0(R1) stall
F4,F0,F2 stall stall
0(R1),F4
;drop SUBI & BNEZ
Ch 4 指令级并行
Embedded System Lab Fall 2012
4.1 指令级并行 (Instruction Level Parallelism)
• 相关是程序运行的本质特征
• 相关带来数据冒险
Loop: LD F0,0(R1) SUBI R2,R2,8
• 冒险导致CPU停顿 Stall
产生结果的指令 FP ALU op FP ALU op Load double Load double Integer op
使用结果的指令 Another FP ALU op Store double FP ALU op Store double Integer op
所需的延时 3 2 1 0 0
• 需要在哪里加stalls?(假设分支在ID段得到地址和条件)
A[1] = A[1] + B[1];
for (i=1; i<=99; i=i+1) {
NEW:
B[i+1] = C[i] + D[i];
A[i+1] = A[i+1] + B[i+1];
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Ch 4 指令级并行
Embedded System Lab Fall 2012
4.1 指令级并行 (Instruction Level Parallelism)
• 相关是程序运行的本质特征
• 相关带来数据冒险
Loop: LD F0,0(R1) SUBI R2,R2,8
• 冒险导致CPU停顿 Stall
FP 循环中的Stalls
1 Loop: 2 3 4 5 6 7 8 9 10
LD F0,0(R1) stall ADDD F4,F0,F2 stall stall SD 0(R1),F4 SUBI R1,R1,8 stall BNEZ R1,Loop stall
;F0=vector element ;add scalar in F2
for (i=1; i<=100; i=i+1) { A[i+1] = A[i] + C[i]; B[i+1] = B[i] + A[i+1];
}
/* S1 */ /* S2 */
1. S2使用由S1在同一循环计算出的 A[i+1]. 2. S1 使用由S1在前一次循环中计算的值,同样S2也使用由S2在前一次循 环中计算的值. 这种存在于循环间的相关,我们称为 “loop-carried dependence”
1. S1和S2没有相关,S1和S2互换不会影响程序的正 确性 2. 在第一次循环中,S1依赖于前一次循环的B[i].
循环展开(3/3)
for (i=1; i<=100; i=i+1) {
OLD:
A[i] = A[i] + B[i]; /* S1 */
B[i+1] = C[i] + D[i];} /* S2 */
12
SD
-24(R1),F4
13
SUBI R1,R1,#32
14
BNEZ R1,LOOP
15
NOP
如何消除名相关?
指令级并行的若干定义
• 基本块的定义
– 直线型代码,无分支 – 整个程序是由分支语句连接基本块构成 – MIPS 的分支指令占15%左右,基本块的大小在4~7条指令
指令级并行的若干定义
6 clocks: 通过循环展开4次是否可以提高性能?
1 Loop: LD
F0,0(R1)
2
SUBI R1,R1,8
3
ADDD F4,F0,F2
4
stall
5
BNEZ R1,Loop
;delayed branch
6
SD 8(R1),F4
;altered when move past SUBI
Swap BNEZ and SD by changing address of SD
A[1] = A[1] + B[1];
for (i=1; i<=99; i=i+1) {
NEW:
B[i+1] = C[i] + D[i];
A[i+1] = A[i+1] + B[i+1];
}
B[101] = C[100] + D[100];
4.2 硬件调度方案:
• 为什么要使用硬件调度方案?
– 在编译时无法确定的相关,可以通过硬件调度来优化 – 简化了编译器的设计 – 代码在不同组织结构的机器上,同样可以有效的运行
;store result ;decrement pointer 8B (DW) ;branch R1!=zero ;delayed branch slot
产生结果的指令 使用结果的指令
所需的延时
FP ALU op
Another FP ALU op
3
FP ALU op
Store double
2
Load double
简单循环及其对应的汇编程序
for (i=1; i<=1000; i++) x(i) = x(i) + s;
Loop: LD F0,0(R1) ADDD F4,F0,F2 SD 0(R1),F4 SUBI R1,R1,8 BNEZ R1,Loop NOP
;F0=vector element ;add scalar from F2 ;store result ;decrement pointer 8B (DW) ;branch R1!=zero ;delayed branch slot
• 代码移动后
– SD移动到SUBI后, 注意偏移量的修改
– Loads移动到SD前, 注意偏移量的修改
; 8-32 = -24
14 clock cycles, or 3.5 per iteration
循环展开示例小结
• 移动SD到SUBI和BNEZ后,需要调整SD中的偏移 • 循环展开对循环间无关的程序是有效降低stalls的手段(对
FP ALU op
1
Load double
Store double
0
Integer op
Integer op
0
10 clocks: 是否可以通过调整代码顺序使stalls减到最小
FP 循环中的最少Stalls数
1 Loop: LD
F0,0(R1)
;F0=vector element
2
stall
3
ADDD F4,F0,F2
产生结果的指令 FP ALU op FP ALU op Load double Load double Integer op
使用结果的指令 Another FP ALU op Store double FP ALU op Store double Integer op
所需的延时 3 2 1 0 0
• 需要在哪里加stalls?(假设分支在ID段得到地址和条件)
• Instruction j 所写的寄存器或存储单元,与 instruction i 所读的寄存 器或存储单元相同,注instruction i 先执行
– 输出相关(Output dependence) (WAW)
• Instruction i 和instruction j 对同一寄存器或存储单元进行写操作, 必须保证两条指令的写顺序
;add scalar in F2
4
stall
5
stall
6
SD
0(R1),F4
;store result
7
SUBI R1,R1,8
;decrement pointer 8B (DW)
8
stall
9
BNEZ R1,Loop
;branch R1!=zero
10
stall
;delayed branch slot
FP 循环中的相关
Loop:
LD ADDD SD SUBI BNEZ NOP
F0,0(R1) F4,F0,F2 0(R1),F4 R1,R1,8 R1,Loop
;F0=vector element ;add scalar from F2 ;store result ;decrement pointer 8B (DW) ;branch R1!=zero ;delayed branch slot
• OS代码中的分支较少
• 负责资源管理 • 填写状态寄存器 • 填写控制寄存器 • 设置控制变量
• 跨基本块的并行(循环级并行)
– 循环的特征
• 控制循环的分支指令是有执行偏好的 • 绝大多数是成功的, 预测比较容易,但必须有预测方

• 流水线的平均CPI
Pipeline CPI = Ideal Pipeline CPI + Struct Stalls + RAW Stalls + WAR Stalls + WAW Stalls + Control Stalls
F6,-8(R1) stall
F8,F6,F2 stall stall
-8(R1),F8
;drop SUBI & BNEZ
F10,-16(R1) stall
F12,F10,F2 stall stall
-16(R1),F12 ;drop SUBI & BNEZ
F14,-24(R1) stall
F16,F14,F2 stall stall
循环级并行). • 不同次的循环,使用不同的寄存器. • 指令调度,必须保证程序运行的结果不变
• 指令重排+循环展开
– 不做任何优化 10000 – 采用指令重排 6000 – 4次循环展开 7000 – 4次循环展开+指令重排 3500
循环展开(1/3)
• Example: 下列程序段存在哪些数据相关? (A,B,C 指向不同的存储区且不存在覆盖区)
循环展开4次(straightforward way)
1 Loop: LD
2
ADDD
3
SD
4
LD
5
ADDD
6
SD
7
LD
8
ADDD
9
SD
10
LD
11
ADDD
12
SD
13
SUBI
14
BNEZ
15
NOP
F0,0(R1) stall
F4,F0,F2 stall stall
0(R1),F4
;drop SUBI & BNEZ
一个循环的例子
for (i = 1; i <= 1000; i++) x(i) = x(i) + y(i);
• 特征
相关文档
最新文档