第1页:流水线技术封面
流水线技术封面
流水线技术
第2页:流水线技术目录
流水线技术目录
- 3.1 重叠执行和先行控制
- 3.2 流水线的基本概念
- 3.3 流水线的性能指标
- 3.4 流水线的相关与冲突
- 3.5 流水线的实现
- 3.6 向量处理机
第3页:将一条指令的执行过程分为三个阶段
将一条指令的执行过程分为三个阶段
第4页:重叠执行和先行控制:取指令
重叠执行和先行控制:取指令
- 取指令
- 按照指令计数器PC的内容访问主存,取出一条指令送到指令寄存器。
- 指令分析
- 对指令的操作码进行译码,按照给定的寻址方式和地址字段形成操作数的地址,并用这个地址读取操作数。
- 指令执行
- 按照操作码的要求,完成指令规定的功能。在指令的执行过程中还要更新PC值,为读取下一条指令做好准备。
第5页:三种执行方式
三种执行方式
- 三种执行方式
- 顺序执行方式
- 一次重叠执行方式
- 二次重叠执行方式
第6页:执行n条指令所花的时间3.顺序执行方式
执行n条指令所花的时间3.顺序执行方式
- 执行n条指令所花的时间3.顺序执行方式
- 指令的执行过程
第7页:如果取指令、指令分析和指令执行的时间相等
如果取指令、指令分析和指令执行的时间相等
- 如果取指令、指令分析和指令执行的时间相等,都是t,则T=3nt
- 优点
- 主要缺点
第8页:一次重叠执行方式
一次重叠执行方式
- 一次重叠执行方式
- 指令的执行过程执行第k条指令与取第k+l条指令同时进行。(一种最简单的重叠方式)
第9页:如果执行一条指令的3个阶段的时间相等
如果执行一条指令的3个阶段的时间相等
- 如果执行一条指令的3个阶段的时间相等,都是t,则执行n条指令所花的时间为T=(1+2n)t
- 优点
- 程序的执行时间减少了近1/3。
- 功能部件的利用率明显提高。
- 缺点
第10页:二次重叠执行方式
二次重叠执行方式
- 二次重叠执行方式
- 指令的执行过程取第k+l条指令提前到与分析第k条指令同时进行,分析第k+l条指令与执行第k条指令同时进行。
第11页:如果执行一条指令的3个阶段的时间相等
如果执行一条指令的3个阶段的时间相等
- 如果执行一条指令的3个阶段的时间相等,都是t,则执行n条指令所花的时间为T= (2+n)t
- 优点
- 与顺序执行方式相比,执行时间缩短了近2/3。
- 部件的利用率有了进一步的提高。
- 缺点
- 需要增加更多的硬件。
- 需要设置独立的取指令部件、指令分析部件和指令执行部件。
第12页:访问主存的冲突问题4种解决方法
访问主存的冲突问题4种解决方法
- 访问主存的冲突问题4种解决方法
- 设置两个独立编址的存储器:指令存储器(存放指令)、数据存储器(存放数据)
- 指令和数据仍然混合存放在同一个主存中,但设置两个Cache:指令Cache、数据Cache程序空间和数据空间相互独立的系统结构被称为哈佛结构。
- 指令和数据仍然混合存放在同一个主存中,但主存采用多体交叉结构。(有一定的局限性)
第13页:在主存和指令分析部件之间增设指令缓冲站
在主存和指令分析部件之间增设指令缓冲站
- 在主存和指令分析部件之间增设指令缓冲站(又被称为先行指令缓冲站)
- 主存不是满负荷工作的,插空从主存中预先把后面将要执行的指令取出来,存放到指令缓冲站中。
- 在“取指令”阶段从指令缓冲站读取指令(如果指令缓冲站不为空),而不用去访问主存。
第14页:先行指令缓冲站
先行指令缓冲站
第15页:指令缓冲存储区和相应的控制逻辑
指令缓冲存储区和相应的控制逻辑
- 指令缓冲存储区和相应的控制逻辑
- 按队列方式工作。
- 只要指令缓冲站不满,它就自动地向主存控制器发取指令请求,不断地预取指令。
- 指令分析部件
- 每分析完一条指令,就自动向指令缓冲站发出取下一条指令的请求。指令取出之后就把指令缓冲站中的该指令作废。
- 指令缓冲站中存放的指令的条数是动态变化的。
- 两个程序计数器
第16页:先行程序计数器PC1
先行程序计数器PC1
- 先行程序计数器PC1
- 用于从主存预取指令;
- 若取指令阶段的时间很短,可以把这个操作合并到分析指令中。
- 上述的二次重叠就演变成了一次重叠
- 把一条指令的执行过程分为分析和执行两个阶段;
- 让前一条指令的执行与后一条指令的分析重叠进行。
第17页:如果指令分析和指令执行所需要的时间都是t
如果指令分析和指令执行所需要的时间都是t
- 如果指令分析和指令执行所需要的时间都是t,则采用这种方式连续执行n条指令所需要的时间为:T= (1+n)t
- 控制方式比较简单,得到了广泛应用。
第18页:当指令分析和指令执行所需要的时间不相等时
当指令分析和指令执行所需要的时间不相等时
- 当指令分析和指令执行所需要的时间不相等时,其执行过程为:指令分析部件和指令执行部件存在相互等待的时候,会出现部件空闲的情况。
第19页:先行控制技术
先行控制技术
- 先行控制技术
- 缓冲技术和预处理技术的结合
- 缓冲技术
- 在工作速度不固定的两个功能部件之间设置缓冲器,用以平滑它们的工作。
- 预处理技术
- 预取指令、对指令进行加工以及预取操作数等。2.采用先行控制方式的处理机结构
第20页:重叠执行和先行控制
重叠执行和先行控制
第21页:设置了4个缓冲站
设置了4个缓冲站
- 设置了4个缓冲站(平滑主存、指令分析部件、运算器三者之间的工作)
- 先行指令缓冲站(前面已讲述)
- 先行操作站
- 先行读数站
- 后行写数站共同特点:按先进先出的方式工作,而且都是由一组若干个能快速访问的存储单元和相关的控制逻辑组成。
第22页:重叠执行和先行控制:先行操作站
重叠执行和先行控制:先行操作站
- 先行操作站
- 在指令分析部件和运算器之间提供缓冲
- 先行:因为其中的指令对于运算器正在执行的指令来说是后续的,但却被先行取出并预处理。
- 指令分析部件
- 从先行指令缓冲站取指令,并进行预处理,加工成统一格式的RR型操作命令,然后送入先行操作站。
- 对于不同指令做不同的处理。
第23页:寄存器-寄存器型(RR型)指令
寄存器-寄存器型(RR型)指令
- 寄存器-寄存器型(RR型)指令
- 可以不作任何处理,直接送入。
第24页:重叠执行和先行控制:运算器
重叠执行和先行控制:运算器
- 运算器
- 从先行操作站取出RR型操作命令并执行。
- 每执行完一条,将运算结果写入通用寄存器组或者后行写数站。
- 继续执行先行操作站中的后续命令。
- 先行读数站
- 作用:接收指令分析部件送来的访问主存的有效地址,按顺序依次从主存读取操作数,提供给运算器使用。
- 先行:因为对于正在执行的指令来说,先行读数站中的操作数是先行取出的。
第25页:每个存储单元由3部分组成
每个存储单元由3部分组成
- 每个存储单元由3部分组成
- 先行地址字段、先行操作数字段、标志字段
- 每当从指令分析部件接收有效地址时,将之放入先行地址字段,并将地址有效标志置位。
- 等到该单元成为队列的第一项时,先行读数站会用该地址向主存发出读请求,把取来的操作数放入该单元的先行操作数字段,同时将数据有效标志置位。
- 当以后运算器需要该操作数时,就可以直接从先行读数站取得,而不必去访问主存。
第26页:重叠执行和先行控制:后行写数站
重叠执行和先行控制:后行写数站
- 后行写数站
- 作用:接收从运算器送来的结果数据,并负责将之写入主存。
- 后行:因为站在运算器的角度来看,结果数据不是在相应的指令运算完后立即写入主存,而是由后行写数站滞后写入的。
- 每一个存储单元由3部分组成:后行地址字段、后行数据字段、标志字段每当从运算器接收数据时,将之放入后行数据字段,并把相应的数据有效标志置位。后行写数站的控制逻辑自动向主存发出写数请求。当写数据操作完成后,也要置位有关标志。
第27页:采用先行控制后的一次重叠执行指令分析部件
采用先行控制后的一次重叠执行指令分析部件
- 采用先行控制后的一次重叠执行指令分析部件在不间断地分析指令,而指令执行部件则在不间断地执行指令,它们都始终处于忙碌状态。
第28页:理想情况下,指令执行部件应该是一直忙碌的
理想情况下,指令执行部件应该是一直忙碌的
- 理想情况下,指令执行部件应该是一直忙碌的。
- 处理机连续执行n条指令所需要的时间为
第29页:工业生产流水线下面通过一个例子来说明流水
工业生产流水线下面通过一个例子来说明流水
- 工业生产流水线下面通过一个例子来说明流水线的好处:
- 两种方案
- 两种方案的工作过程对比
- 流水线生产过程的抽象描述
- 这种流水工作方式的主要特点
第30页:流水线的基本概念:流水线技术
流水线的基本概念:流水线技术
- 流水线技术
- 把一个重复的过程分解为若干个子过程,每个子过程由专门的功能部件来实现。
- 把多个处理过程在时间上错开,依次通过各功能段,这样,每个子过程就可以与其他的子过程并行进行。3.流水线中的每个子过程及其功能部件称为流水线的级或段,段与段相互连接形成流水线。流水线的段数称为流水线的深度。
第31页:流水线的基本概念:指令流水线
流水线的基本概念:指令流水线
- 指令流水线
- 把指令的解释过程分解为分析和执行两个子过程,并让这两个子过程分别用独立的分析部件和执行部件来实现。理想情况:速度提高一倍
- 4段指令流水线
第32页:浮点加法流水线
浮点加法流水线
- 浮点加法流水线
- 把流水线技术应用于运算的执行过程,就形成了运算操作流水线,也称为部件级流水线。
- 把浮点加法的全过程分解为求阶差、对阶、尾数相加、规格化4个子过程。理想情况:速度提高3倍
第33页:流水线的基本概念:时空图
流水线的基本概念:时空图
- 时空图
- 时空图从时间和空间两个方面描述了流水线的工作过程。时空图中,横坐标代表时间,纵坐标代表流水线的各个段。
- 4段指令流水线的时空图
第34页:流水技术的特点
流水技术的特点
- 流水技术的特点
- 流水线把一个处理过程分解为若干个子过程(段),每个子过程由一个专门的功能部件来实现。
- 流水线中各段的时间应尽可能相等,否则将引起流水线堵塞、断流。时间长的段将成为流水线的瓶颈。
- 流水线每一个功能部件的后面都要有一个缓冲寄存器(锁存器),称为流水寄存器。
- 作用:在相邻的两段之间传送数据,以保证提供后面要用到的数据,并把各段的处理工作相互隔离。
第35页:流水技术适合于大量重复的时序过程
流水技术适合于大量重复的时序过程
- 流水技术适合于大量重复的时序过程,只有在输入端不断地提供任务,才能充分发挥流水线的效率。
- 流水线需要有通过时间和排空时间。
- 通过时间:第一个任务从进入流水线到流出结果所需的时间。
- 排空时间:最后一个任务从进入流水线到流出结果所需的时间。
第36页:把流水线分成多种不同的种类
把流水线分成多种不同的种类
- 单功能流水线
- 只能完成一种固定功能的流水线。
- 多功能流水线
- 流水线的各段可以进行不同的连接,以实现不同的功能。例:ASC的多功能流水线
- 把流水线分成多种不同的种类。1.单功能流水线与多功能流水线(按照流水线所完成的功能来分类)
第37页:
第38页:静态流水线与动态流水线
静态流水线与动态流水线
- 静态流水线
- 在同一时间内,多功能流水线中的各段只能按同一种功能的连接方式工作。
- 静态流水线与动态流水线(按照同一时间内各段之间的连接方式对多功能流水线做进一步的分类)
第39页:流水线的基本概念:动态流水线
流水线的基本概念:动态流水线
- 动态流水线
- 在同一时间内,多功能流水线中的各段可以按照不同的方式连接,同时执行多种功能。动画
第40页:
第41页:部件级、处理机级及处理机间流水线
部件级、处理机级及处理机间流水线
- 部件级流水线(运算操作流水线)
- 把处理机的算术逻辑运算部件分段,使得各种类型的运算操作能够按流水方式进行。
- 处理机级流水线(指令流水线)
- 把指令的解释执行过程按照流水方式处理。把一条指令的执行过程分解为若干个子过程,每个子过程在独立的功能部件中执行。例如:前面的4段指令流水线
- 部件级、处理机级及处理机间流水线(按照流水的级别来进行分类)
第42页:处理机间流水线(宏流水线)
处理机间流水线(宏流水线)
- 处理机间流水线(宏流水线)
- 它是由两个或者两个以上的处理机串行连接起来,对同一数据流进行处理,每个处理机完成整个任务中的一部分。动画解析
第43页:线性流水线与非线性流水线
线性流水线与非线性流水线
- 线性流水线
- 流水线的各段串行连接,没有反馈回路。数据通过流水线中的各段时,每一个段最多只流过一次。
- 非线性流水线
- 流水线中除了有串行的连接外,还有反馈回路。(举例)
- 线性流水线与非线性流水线(按照流水线中是否有反馈回路来进行分类)
- 非线性流水线的调度问题
- 确定什么时候向流水线引进新的任务,才能使该任务不会与先前进入流水线的任务发生冲突——争用流水段。
第44页:流水线的基本概念
流水线的基本概念
第45页:顺序流水线与乱序流水线
顺序流水线与乱序流水线
- 顺序流水线
- 流水线输出端任务流出的顺序与输入端任务流入的顺序完全相同。每一个任务在流水线的各段中是一个跟着一个顺序流动的。
- 乱序流水线
- 流水线输出端任务流出的顺序与输入端任务流入的顺序可以不同,允许后进入流水线的任务先完成(从输出端流出)。也称为无序流水线、错序流水线、异步流水线
- 顺序流水线与乱序流水线(根据任务流入和流出的顺序是否相同来进行分类)
第46页:标量处理机与向量流水处理机
标量处理机与向量流水处理机
- 标量处理机
- 处理机不具有向量数据表示和向量指令,仅对标量数据进行流水处理。
- 向量流水处理机
- 具有向量数据表示和向量指令的处理机。向量数据表示和流水技术的结合。
- 标量处理机与向量流水处理机
- 把指令执行部件中采用了流水线的处理机称为流水线处理机。
第47页:吞吐率n:吞吐率
吞吐率n:吞吐率
- 吞吐率
- 在单位时间内流水线所完成的任务数量或输出结果的数量。3.3流水线的性能指标:任务数Tk:处理完成n个任务所用的时间
第48页:各段时间均相等的流水线
各段时间均相等的流水线
- 各段时间均相等的流水线
- 各段时间均相等的流水线时空图
第49页:流水线完成n个连续任务所需要的总时间为
流水线完成n个连续任务所需要的总时间为
- 流水线完成n个连续任务所需要的总时间为(假设一条k段线性流水线)Tk=kΔt+(n-1)Δt=(k+n-1)Δt
- 流水线的实际吞吐率
- 最大吞吐率
第50页:最大吞吐率与实际吞吐率的关系
最大吞吐率与实际吞吐率的关系
- 最大吞吐率与实际吞吐率的关系
- 流水线的实际吞吐率小于最大吞吐率,它除了与每个段的时间有关外,还与流水线的段数k以及输入到流水线中的任务数n等有关。
- 只有当n>>k时,才有TP≈TPmax。
第51页:各段时间不完全相等的流水线
各段时间不完全相等的流水线
- 各段时间不完全相等的流水线
- 各段时间不等的流水线及其时空图举例(时空图)
- 一条4段的流水线
- S1,S3,S4各段的时间:Δt
- S2的时间:3Δt(瓶颈段)流水线中这种时间最长的段称为流水线的瓶颈段。
第52页:流水线的性能指标
流水线的性能指标
第53页:各段时间不等的流水线的实际吞吐率
各段时间不等的流水线的实际吞吐率
- 各段时间不等的流水线的实际吞吐率
- (Δti为第i段的时间,共有k个段)
第54页:一条4段的流水线中
一条4段的流水线中
- 一条4段的流水线中,S1,S2,S4各段的时间都是Δt,唯有S3的时间是3Δt。最大吞吐率为
第55页:解决流水线瓶颈问题的常用方法举例
解决流水线瓶颈问题的常用方法举例
- 细分瓶颈段例如
- 对前面的4段流水线把瓶颈段S3细分为3个子流水线段:S3a,S3b,S3c改进后的流水线的吞吐率:
第56页:重复设置瓶颈段
重复设置瓶颈段
- 重复设置瓶颈段
- 举例:时空图
- 缺点:控制逻辑比较复杂,所需的硬件增加了。例如:对前面的4段流水线重复设置瓶颈段S3:S3a,S3b,S3c
第57页:流水线的性能指标:的时空图
流水线的性能指标:的时空图
第58页:完成同样一批任务,不使用流水线所用的时间
完成同样一批任务,不使用流水线所用的时间
- 完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比。假设:不使用流水线(即顺序执行)所用的间为Ts,使用流水线后所用的时间为Tk,则该流水线的加速比为
第59页:流水线各段时间相等(都是△t)
流水线各段时间相等(都是△t)
- 顺序执行n个任务所需要的时间
- Ts=nk△t(解释)
- 流水线各段时间相等(都是△t)
- 一条k段流水线完成n个连续任务所需要的时间为Tk= (k+n-1)Δt
- 流水线的实际加速比为
第60页:最大加速比当n>>k时
最大加速比当n>>k时
- 最大加速比当n>>k时,S≈k思考:流水线的段数愈多愈好?
第61页:流水线的各段时间不完全相等时
流水线的各段时间不完全相等时
- 流水线的各段时间不完全相等时
- 一条k段流水线完成n个连续任务的实际加速比为
第62页:流水线中的设备实际使用时间与整个运行时间
流水线中的设备实际使用时间与整个运行时间
- 流水线中的设备实际使用时间与整个运行时间的比值,即流水线设备的利用率。由于流水线有通过时间和排空时间,所以在连续完成n个任务的时间内,各段并不是满负荷地工作。1.各段时间相等
- 各段的效率ei相同(解释)
第63页:整条流水线的效率为
整条流水线的效率为
- 整条流水线的效率为
- 可以写成
- 最高效率为当n>>k时,E≈1。
第64页:当流水线各段时间相等时
当流水线各段时间相等时
- 当流水线各段时间相等时,流水线的效率与吞吐率成正比。E=TP△t2.流水线的效率是流水线的实际加速比S与它的最大加速比k的比值。当E=1时,S=k,实际加速比达到最大。
第65页:从时空图上看,效率就是n个任务占用的时空
从时空图上看,效率就是n个任务占用的时空
- 从时空图上看,效率就是n个任务占用的时空面积和k个段总的时空面积之比。当各段时间不相等时
第66页:例3.1 设在下图所示的静态流水线上计算
例3.1 设在下图所示的静态流水线上计算
- 例3.1设在下图所示的静态流水线上计算
- 流水线的输出可以直接返回输入端或暂存于相应的流水寄存器中,试计算其吞吐率、加速比和效率。为△t)
第67页:(1)选择适合于流水线工作的算法
(1)选择适合于流水线工作的算法
- (1)选择适合于流水线工作的算法
- 先计算A1+B1、A2+B2、A3+B3和A4+B4;
- 再计算(A1+B1)×(A2+B2)和(A3+B3)×(A4+B4);
- 然后求总的乘积结果。(2)画出时空图
第68页:流水线的性能指标
流水线的性能指标
第69页:在18个△t时间中
在18个△t时间中
- 在18个△t时间中,给出了7个结果。吞吐率为
- 不用流水线,由于一次求和需6△t,一次求积需4△t,则产生上述7个结果共需(4×6+3×4)△t= 36△t加速比为(3)计算性能
第70页:流水线的效率可以看出
流水线的效率可以看出
- 流水线的效率可以看出,在求解此问题时,该流水线的效率不高。(原因)
第71页:流水线的性能指标:主要原因
流水线的性能指标:主要原因
- 主要原因
- 多功能流水线在做某一种运算时,总有一些段是空闲的。
- 静态流水线在进行功能切换时,要等前一种运算全部流出流水线后才能进行后面的运算。
- 运算之间存在关联,后面有些运算要用到前面运算的结果。
- 流水线的工作过程有建立与排空部分。
第72页:例3.2 有一条动态多功能流水线由5段组
例3.2 有一条动态多功能流水线由5段组
- 例3.2有一条动态多功能流水线由5段组成,加法用1、3、4、5段,乘法用1、2、5段,第2段的时间为2△t,其余各段时间均为△t,而且流水线的输出可以直接返回输入端或暂存于相应的流水寄存器中。若在该流水线上计算:试计算其吞吐率、加速比和效率。
第73页:(1)选择适合于流水线工作的算法
(1)选择适合于流水线工作的算法
- (1)选择适合于流水线工作的算法
- 应先计算A1×B1、A2×B2、A3×B3和A4×B4;
- 再计算(A1×B1)+(A2×B2)(A3×B3)+(A4×B4);
- 然后求总的累加结果。(2)画出时空图(3)计算性能
第74页:流水线的性能指标
流水线的性能指标
第75页:例在静态流水线上计算:求
例在静态流水线上计算:求
- 例在静态流水线上计算:求
- 吞吐率,加速比,效率。解:(1)确定适合于流水处理的计算过程(2)画时空图(3)性能计算吞吐率TP=7/(20△t)加速比S=(34△t)/(20△t)=1.7效率E=(4×4+3×6)/(8×20)=0.21
第76页:流水线的性能指标
流水线的性能指标
第77页:在求解此问题时,该流水线的效率不高
在求解此问题时,该流水线的效率不高
- 在求解此问题时,该流水线的效率不高。动态流水线的时空图举例Ⅰ举例Ⅱ :这样行不行?正确答案
第78页:流水线设计中的若干问题:瓶颈问题
流水线设计中的若干问题:瓶颈问题
- 瓶颈问题
- 理想情况下,流水线在工作时,其中的任务是同步地每一个时钟周期往前流动一段。
- 当流水线各段不均匀时,机器的时钟周期取决于瓶颈段的延迟时间。
- 在设计流水线时,要尽可能使各段时间相等。2.流水线的额外开销
第79页:流水寄存器需要建立时间和传输延迟
流水寄存器需要建立时间和传输延迟
- 流水寄存器需要建立时间和传输延迟
- 建立时间:在触发写操作的时钟信号到达之前,寄存器输入必须保持稳定的时间。
- 传输延迟:时钟信号到达后到寄存器输出可用的时间。
- 时钟偏移开销
- 流水线中,时钟到达各流水寄存器的最大差值时间。(时钟到达各流水寄存器的时间不是完全相同)
第80页:流水线的性能指标:几个问题
流水线的性能指标:几个问题
- 几个问题
- 流水线并不能减少(而且一般是增加)单条指令的执行时间,但却能提高吞吐率。
- 增加流水线的深度(段数)可以提高流水线的性能。
- 流水线的深度受限于流水线的额外开销。
- 当时钟周期小到与额外开销相同时,流水已没意义。因为这时在每一个时钟周期中已没有时间来做有用的工作。3.冲突问题流水线设计中要解决的重要问题之一。
第81页:介绍一个经典的5段RISC流水线
介绍一个经典的5段RISC流水线
- 介绍一个经典的5段RISC流水线
- 首先讨论在非流水情况下是如何实现的1.一条指令的执行过程分为以下5个周期
- 取指令周期(IF)
- IR ← Mem[PC]。
- PC值加4。(假设每条指令占4个字节)的5段流水线
第82页:指令译码/读寄存器周期(ID)
指令译码/读寄存器周期(ID)
- 指令译码/读寄存器周期(ID)
- 译码。
- 用IR中的寄存器编号去访问通用寄存器组,读出所需的操作数。
- 执行/有效地址计算周期(EX)不同指令所进行的操作不同
- 存储器访问指令:ALU把所指定的寄存器的内容与偏移量相加,形成用于访存的有效地址。
- 寄存器-寄存器ALU指令:ALU按照操作码指定的操作对从通用寄存器组中读取的数据进行运算。
第83页:寄存器-立即数ALU指令
寄存器-立即数ALU指令
- 寄存器-立即数ALU指令
- ALU按照操作码指定的操作对从通用寄存器组中读取的第一操作数和立即数进行运算。
- 存储器访问/分支完成周期(MEM)该周期处理的指令只有load、store和分支指令。其他类型的指令在此周期不做任何操作。
第84页:load和store指令load指令
load和store指令load指令
- load和store指令load指令
- 用上一个周期计算出的有效地址从存储器中读出相应的数据。store指令:把指定的数据写入这个有效地址所指出的存储器单元。
第85页:写回周期(WB)
写回周期(WB)
- 写回周期(WB)ALU运算指令和load指令在这个周期把结果数据写入通用寄存器组。ALU运算指令:结果数据来自ALU。load指令:结果数据来自存储器系统。在这个实现方案中:
- 分支指令需要4个时钟周期(如果把分支指令的执行提前到ID周期,则只需要2个周期)。
- store指令需要4个周期。
- 其他指令需要5个周期才能完成。
第86页:将上述实现方案修改为流水线实现
将上述实现方案修改为流水线实现
- 将上述实现方案修改为流水线实现
- 一个经典的5段流水线
- 每一个周期作为一个流水段。
- 在各段之间加上锁存器(流水寄存器)。
第87页:5段流水线的两种描述方式
5段流水线的两种描述方式
第88页:第二种描述(按时间错开的数据通路序列)
第二种描述(按时间错开的数据通路序列)
第89页:采用流水线方式实现时
采用流水线方式实现时
- ID段和WB段都要访问同一寄存器文件。ID段
- 读WB段:写
- 采用流水线方式实现时,应解决以下几个问题
- 要保证不会在同一时钟周期要求同一个功能段做两件不同的工作。例如,不能要求ALU同时做有效地址计算和算术运算。
- 避免IF段的访存(取指令)与MEM段的访存(读/写数据)发生冲突。
- 可以采用分离的指令存储器和数据存储器;
- 一般采用分离的指令Cache和数据Cache。
第90页:器的访问冲突?把写操作安排在时钟周期的前
器的访问冲突?把写操作安排在时钟周期的前
- 器的访问冲突?把写操作安排在时钟周期的前半拍完成,把读操作安排在后半拍完成。
- 考虑PC的问题
- 流水线为了能够每个时钟周期启动一条新的指令,就必须在每个时钟周期进行PC值的加4操作,并保留新的PC值。这种操作必须在IF段完成,以便为取下一条指令做好准备。(需设置一个专门的加法器)
- 但分支指令也可能改变PC的值,而且是在MEM段进行,这会导致冲突。请考虑一下,如何处理分支指令?
第91页:相关与流水线冲突
相关与流水线冲突
- 相关
- 两条指令之间存在某种依赖关系。如果两条指令相关,则它们就有可能不能在流水线中重叠执行或者只能部分重叠执行。
- 相关有3种类型
- 数据相关(也称真数据相关)
- 名相关
- 控制相关3.4.2.1相关
第92页:流水线的相关与冲突:数据相关
流水线的相关与冲突:数据相关
- 数据相关
- 对于两条指令i(在前,下同)和j(在后,下同),如果下述条件之一成立,则称指令j与指令i数据相关。
- 指令j使用指令i产生的结果;
- 指令j与指令k数据相关,而指令k又与指令i数据相关。
- 数据相关具有传递性。数据相关反映了数据的流动关系,即如何从其产生者流动到其消费者。
第93页:下面这一段代码存在数据相关。Loop
下面这一段代码存在数据相关。Loop
- 下面这一段代码存在数据相关。Loop
- L.DF0,0(R1)// F0为数组元素ADD.DF4,F0,F2//加上F2中的值S.DF4,0(R1)//保存结果DADDIUR1,R1,-8//数组指针递减8个字节BNER1,R2,Loop//如果R1≠R2,则分支
第94页:当数据的流动是经过寄存器时
当数据的流动是经过寄存器时
- 名
- 指令所访问的寄存器或存储器单元的名称。
- 当数据的流动是经过寄存器时,相关的检测比较直观和容易。
- 当数据的流动是经过存储器时,检测比较复杂。
- 相同形式的地址其有效地址未必相同。
- 形式不同的地址其有效地址却可能相同。2.名相关
- 如果两条指令使用相同的名,但是它们之间并没有数据流动,则称这两条指令存在名相关。
第95页:指令j与指令i之间的名相关有两种
指令j与指令i之间的名相关有两种
- 指令j与指令i之间的名相关有两种
- 反相关:如果指令j写的名与指令i读的名相同,则称指令i和j发生了反相关。指令j写的名=指令i读的名
- 输出相关:如果指令j和指令i写相同的名,则称指令i和j发生了输出相关。指令j写的名=指令i写的名
第96页:名相关的两条指令之间并没有数据的传送
名相关的两条指令之间并没有数据的传送
- 名相关的两条指令之间并没有数据的传送。
- 如果一条指令中的名改变了,并不影响另外一条指令的执行。
- 换名技术
- 换名技术:通过改变指令中操作数的名来消除名相关。
- 对于寄存器操作数进行换名称为寄存器换名。既可以用编译器静态实现,也可以用硬件动态完成。
第97页:考虑下述代码
考虑下述代码
- 考虑下述代码
- DIV.DF2,F6,F4ADD.DF6,F0,F12SUB.DF8,F6,F14DIV.D和ADD.D存在反相关。进行寄存器换名(F6换成S)后,变成:DIV.DF2,F6,F4ADD.DS,F0,F12SUB.DF8,S,F14
第98页:流水线的相关与冲突:控制相关
流水线的相关与冲突:控制相关
- 请看一个示例
- if p1 {S1;};S;if p2 {S2;};
- 控制相关
- 控制相关是指由分支指令引起的相关。
- 为了保证程序应有的执行顺序,必须严格按控制相关确定的顺序执行。
- 典型的程序结构是“if-then”结构。
第99页:控制相关带来了以下两个限制
控制相关带来了以下两个限制
- 控制相关带来了以下两个限制
- 与一条分支指令控制相关的指令不能被移到该分支之前,否则这些指令就不受该分支控制了。对于上述的例子,then部分中的指令不能移到if语句之前。
- 如果一条指令与某分支指令不存在控制相关,就不能把该指令移到该分支之后。对于上述的例子,不能把S移到if语句的then部分中。
第100页:具体的流水线来说,由于相关的存在
具体的流水线来说,由于相关的存在
- 具体的流水线来说,由于相关的存在,使得指令流中的下一条指令不能在指定的时钟周期执行。流水线冲突有3种类型
- 结构冲突:因硬件资源满足不了指令重叠执行的要求而发生的冲突。
- 数据冲突:当指令在流水线中重叠执行时,因需要用到前面指令的执行结果而发生的冲突。
- 控制冲突:流水线遇到分支指令和其他会改变PC值的指令所引起的冲突。3.4.2.2流水线冲突
第101页:流水线的相关与冲突
流水线的相关与冲突
- 导致错误的执行结果。
- 流水线可能会出现停顿,从而降低流水线的效率和实际的加速比。
- 我们约定当一条指令被暂停时,在该暂停指令之后流出的所有指令都要被暂停,而在该暂停指令之前流出的指令则继续进行(否则就永远无法消除冲突)。
第102页:流水线的相关与冲突:结构冲突
流水线的相关与冲突:结构冲突
- 结构冲突
- 在流水线处理机中,为了能够使各种组合的指令都能顺利地重叠执行,需要对功能部件进行流水或重复设置资源。
- 如果某种指令组合因为资源冲突而不能正常执行,则称该处理机有结构冲突。
- 常见的导致结构相关的原因
第103页:结构冲突举例
结构冲突举例
- 结构冲突举例
- 访存冲突有些流水线处理机只有一个存储器,将数据和指令放在一起,访存指令会导致访存冲突。
第104页:器而引起的结构冲突
器而引起的结构冲突
第105页:入的流水线气泡
入的流水线气泡
第106页:时钟周期指令编号10987654321W
时钟周期指令编号10987654321W
- 时钟周期指令编号10987654321WBMEMEXIDIF指令iWBMEMEXIDIF指令i+1WBWBMEMEXIDIF指令i+2WBMEMEXIDIFstall指令i+3WBMEMEXIDIF指令i+4MEMEXIDIF指令i+5
第107页:有时流水线设计者允许结构冲突的存在主要原
有时流水线设计者允许结构冲突的存在主要原
- 有时流水线设计者允许结构冲突的存在主要原因
- 减少硬件成本
第108页:流水线的相关与冲突:例
流水线的相关与冲突:例
- 例
- DADDR1,R2,R3DSUB R4,R1,R5XOR R6,R1,R7AND R8,R1,R9OR R10,R1,R11
第109页:流水线的相关与冲突:例
流水线的相关与冲突:例
第110页:根据指令读访问和写访问的顺序
根据指令读访问和写访问的顺序
- 根据指令读访问和写访问的顺序,可以将数据冲突分为3种类型。考虑两条指令i和j,且i在j之前进入流水线,可能发生的数据冲突有
- 写后读冲突(RAW)在i写入之前,j先去读。j读出的内容是错误的。这是最常见的一种数据冲突,它对应于真数据相关。
第111页:写后写冲突(WAW)在i写入之前
写后写冲突(WAW)在i写入之前
- 写后写冲突(WAW)在i写入之前,j先写。最后写入的结果是i的。错误!这种冲突对应于输出相关。写后写冲突仅发生在这样的流水线中
- 流水线中不只一个段可以进行写操作。
- 当先前某条指令停顿时,允许其后续指令继续前进。前面介绍的5段流水线不会发生写后写冲突。(只在WB段写寄存器)
第112页:读后写冲突(WAR)在i读之前
读后写冲突(WAR)在i读之前
- 读后写冲突(WAR)在i读之前,j先写。i读出的内容是错误的!由反相关引起。这种冲突仅发生在这样的情况下
- 有些指令的写结果操作提前了,而且有些指令的读操作滞后了。
- 指令被重新排序了。读后写冲突在前述5段流水线中不会发生。(读操作(在ID段)在写结果操作(在WB段)之前)
第113页:通过定向技术减少数据冲突引起的停顿
通过定向技术减少数据冲突引起的停顿
- 通过定向技术减少数据冲突引起的停顿(定向技术也称为旁路或短路)
- 关键思想:在某条指令产生计算结果之前,其他指令并不真正立即需要该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令需要它的地方,那么就可以避免停顿。
- 采用定向技术消除上例中的相关工作过程演示
第114页:水线数据通路
水线数据通路
第115页:当定向硬件检测到前面某条指令的结果寄存器
当定向硬件检测到前面某条指令的结果寄存器
- 当定向硬件检测到前面某条指令的结果寄存器就是当前指令的源寄存器时,控制逻辑会将前面那条指令的结果直接从其产生的地方定向到当前指令所需的位置。
- 结果数据不仅可以从某一功能部件的输出定向到其自身的输入,而且还可以定向到其他功能部件的输入。举例:DSUBR1,R2,R3LDR5,0(R1)SDR5,12(R1)
第116页:流水线的相关与冲突
流水线的相关与冲突
第117页:需要停顿的数据冲突
需要停顿的数据冲突
- 需要停顿的数据冲突
- 并不是所有的数据冲突都可以用定向技术来解决。举例:LDR1,0(R2)DADD R4,R1,R5AND R6,R1,R7XOR R8,R1,R9
- 增加流水线互锁硬件,插入“暂停”。作用:检测发现数据冲突,并使流水线停顿,直至冲突消失。举例:演示A演示B
第118页:果定向到DADD指令
果定向到DADD指令
第119页:气泡后的执行过程
气泡后的执行过程
第120页:流水线的相关与冲突时空图
流水线的相关与冲突时空图
本页含数据表/图示,源文件文字与数字粘连,未能安全切分为表格,以下为原文提取文字,具体数值请对照原课件图片核对。
IFLD R1,0(R2)WBMEMEXIDIFDADD R4,R1,R5WBMEMEXIDIFAND R6,R1,R7WBMEMEXIDIFXOR R8,R1,R9WBMEMEXIDIFLD R1,0(R2)WBMEMEXstallIDIFDADD R4,R1,R5WBMEMEXIDstallIFAND R6,R1,R7MEMEXIDIFstallXOR R8,R1,R9插入停顿前后的流水线时空图
第121页:IFLD Rb
IFLD Rb
- IFLD Rb,BWBWBMEMEXEXIDIFLD Rc,CWBMEMEXstallIDIFDADD Ra,Rb,RcWBMEMEXIDstallIFSD Ra,A
- 依靠编译器解决数据冲突让编译器重新组织指令顺序来消除冲突,这种技术称为指令调度或流水线调度。
- 例如:采用典型的代码生成方法,表达式A=B+C的代码会导致暂停
第122页:调度后的代码调度前的代码LD Rb
调度后的代码调度前的代码LD Rb
- 调度后的代码调度前的代码LD Rb,BLD Rc,CLD Re,EDADD Ra,Rb,RcLD Rf,FSD Ra,ADSUB Rd,Re,RfSD Rd,DLD Rb,BLD Rc,CDADD Ra,Rb,RcSD Ra,ALD Re,ELD Rf,FDSUB Rd,Re,RfSD Rd,D
- 举例:请为下列表达式生成没有暂停的指令序列:A=B+C;D=E-F;假设载入延迟为1个时钟周期。题解
第123页:流水线的相关与冲突:控制冲突
流水线的相关与冲突:控制冲突
- 处理分支指令最简单的方法
- “冻结”或者“排空”流水线。优点:简单。
- 控制冲突
- 执行分支指令的结果有两种
- 分支成功:PC值改变为分支转移的目标地址。在条件判定和转移地址计算都完成后,才改变PC值。
- 不成功或者失败:PC的值保持正常递增,指向顺序的下一条指令。
第124页:流水线的相关与冲突:WB
流水线的相关与冲突:WB
- WBMEMEXIDIF分支指令WBMEMEXIDIFstallstallIF分支目标指令WBMEMEXIDIF分支目标指令+1MEMEXIDIF分支目标指令+2EXIDIF分支目标指令+3WBMEMEXIDIF分支指令WBMEMEXIDIFstallstallIF分支后继指令WBMEMEXIDIF分支后继指令+1MEMEXIDIF分支后继指令+2EXIDIF分支后继指令+3简单处理分支指令:分支成功的情况简单处理分支指令:分支失败的情况
第125页:把由分支指令引起的延迟称为分支延迟
把由分支指令引起的延迟称为分支延迟
- 把由分支指令引起的延迟称为分支延迟。
- 分支指令在目标代码中出现的频度
- 每3~4条指令就有一条是分支指令。假设:分支指令出现的频度是30%,流水线理想CPI=1,那么:流水线的实际CPI=1.9。
- 可采取两种措施来减少分支延迟。
- 在流水线中尽早判断出分支转移是否成功;
- 尽早计算出分支目标地址。
第126页:中,我们假设
中,我们假设
- 中,我们假设
- 这两步工作被提前到ID段完成,即分支指令是在ID段的末尾执行完成,所带来的分支延迟为一个时钟周期。
第127页:3种通过软件(编译器)来减少分支延迟的方
3种通过软件(编译器)来减少分支延迟的方
- 3种通过软件(编译器)来减少分支延迟的方法共同点
- 对分支的处理方法在程序的执行过程中始终是不变的,是静态的。
- 要么总是预测分支成功,要么总是预测分支失败。
- 允许分支指令后的指令继续在流水线中流动,就好象什么都没发生似的。
- 若确定分支失败,将分支指令看作是一条普通指令,流水线正常流动。
第128页:若确定分支成功,流水线就把在分支指令之后
若确定分支成功,流水线就把在分支指令之后
- 若确定分支成功,流水线就把在分支指令之后取出的所有指令转化为空操作,并按分支目地重新取指令执行。要保证:分支结果出来之前不会改变处理机的状态,以便一旦猜错时,处理机能够回退到原先的状态。流水线的处理过程
第129页:
第130页:预测分支成功假设分支转移成功
预测分支成功假设分支转移成功
- 预测分支成功假设分支转移成功,并从分支目标地址处取指令执行。起作用的前题:先知道分支目标地址,后知道分支是否成功。前述5段流水线中,这种方法没有任何好处。
- 延迟分支主要思想:从逻辑上“延长”分支指令的执行时间。把延迟分支看成是由原来的分支指令和若干个延迟槽构成,不管分支是否成功,都要按顺序执行延迟槽中的指令。延迟分支以及指令的执行顺序
第131页:流水线的相关与冲突:具有
流水线的相关与冲突:具有
- 具有一个分支延迟槽的流水线的执行过程WBMEMEXIDIF分支指令i分支失败WBMEMEXIDIF延迟槽指令i+1WBMEMEXIDIF指令i+2WBMEMEXIDIF指令i+3WBMEMEXIDIF指令i+4分支延迟槽中的指令“掩盖”了流水线原来必须插入的暂停周期。WBMEMEXIDIF分支指令i分支成功WBMEMEXIDIF延迟槽指令i+1WBMEMEXIDIF分支目标指令jWBMEMEXIDIF分支目标指令j+1WBMEMEXIDIF分支目标指令j+2
第132页:流水线的相关与冲突:任务
流水线的相关与冲突:任务
- 任务
- 在延迟槽中放入有用的指令。由编译器完成。能否带来好处取决于编译器能否把有用的指令调度到延迟槽中。三种调度方法:
第133页:调度前和调度后的代码
调度前和调度后的代码
第134页:果调度策略对调度的要求什么情况下起作用从
果调度策略对调度的要求什么情况下起作用从
- 果调度策略对调度的要求什么情况下起作用从前调度从目标处调度从失败处调度必须保证在分支失败时执行被调度的指令不会导致错误。有可能需要复制指令被调度的指令必须与分支无关必须保证在分支成功时执行被调度的指令不会导致错误任何情况分支成功时(但由于复制指令,有可能会增大程序空间)分支失败时
第135页:流水线的相关与冲突:面的限制
流水线的相关与冲突:面的限制
- 面的限制
- 可以被放入延迟槽中的指令要满足一定的条件。
- 编译器预测分支转移方向的能力。进一步改进:分支取消机制(取消分支)当分支的实际执行方向和事先所预测的一样时,执行分支延迟槽中的指令,否则就将分支延迟槽中的指令转化成一个空操作。“预测成功-取消”分支的执行过程
第136页:WBMEMEXIDIF分支指令i分支失败
WBMEMEXIDIF分支指令i分支失败
- WBMEMEXIDIF分支指令i分支失败idleidleidleidleIF延迟槽指令i+1WBMEMEXIDIF指令i+2WBMEMEXIDIF指令i+3WBMEMEXIDIF指令i+4WBMEMEXIDIF分支指令i分支成功WBMEMEXIDIF延迟槽指令i+1WBMEMEXIDIF分支目标指令jWBMEMEXIDIF分支目标指令j+1WBMEMEXIDIF分支目标指令j+2预测分支成功的情况下,分支取消机制的执行情况
第137页:实现MIPS指令子集的一种简单数据通路
实现MIPS指令子集的一种简单数据通路
- 只讨论整数指令的实现(包括
- load和store,等于0转移,整数ALU指令等。)现
- 实现MIPS指令子集的一种简单数据通路。
- 该数据通路的操作分成5个时钟周期
- 取指令
- 指令译码/读寄存器
- 执行/有效地址计算
- 存储器访问/分支完成
- 写回
第138页:
第139页:一条MIPS指令最多需要以下5个时钟周期
一条MIPS指令最多需要以下5个时钟周期
- 一条MIPS指令最多需要以下5个时钟周期
- 取指令周期(IF)操作
- 指令译码/读寄存器周期(ID)操作
- A←Regs[rs]
- B←Regs[rt]
- Imm←((IR16)16##IR16..31)指令的译码操作和读寄存器操作是并行进行的。原因:在MIPS指令格式中,操作码字段以及rs、rt字段都是在固定的位置。这种技术称为固定字段译码技术。
第140页:执行/有效地址计算周期(EX)不同指令所
执行/有效地址计算周期(EX)不同指令所
- 执行/有效地址计算周期(EX)不同指令所进行的操作不同
- 存储器访问指令操作ALUo←A + Imm
- 寄存器-寄存器ALU指令操作ALUo←A func B
- 寄存器-立即值ALU指令操作ALUo←A op Imm
- 分支指令操作ALUo←NPC+(Imm<<2);cond←(A == 0)
第141页:周期合并为一个时钟周期
周期合并为一个时钟周期
- 周期合并为一个时钟周期,这是因为MIPS指令集采用load/store结构,没有任何指令需要同时进行数据有效地址的计算、转移目标地址的计算和对数据进行运算。
- 存储器访问/分支完成周期(MEM)
- 所有指令都要在该周期对PC进行更新。除了分支指令,其他指令都是做PC←NPC
- 在该周期内处理的MIPS指令仅仅有load、store和分支三种指令。
第142页:存储器访问指令操作LMD←Mem[
存储器访问指令操作LMD←Mem[
- 存储器访问指令操作LMD←Mem[ALUo]或者Mem[ALUo]←B
- 分支指令操作if(cond)PC←ALUo else PC←NPC
- 写回周期(WB)不同的指令在写回周期完成的工作也不一样。
- 寄存器-寄存器ALU指令操作Regs[rd]←ALUo
- 寄存器-立即数ALU指令操作Regs[rt]←ALUo
- load指令操作Regs[rt]←LMD
第143页:不采用单周期实现方案的主要原因
不采用单周期实现方案的主要原因
- 不采用单周期实现方案的主要原因
- 对于大多数CPU来说,单周期实现效率很低,因为不同的指令所需完成的操作差别相当大,因而所需要的时钟周期时间也大不一样。
- 单周期实现时,需要重复设置某些功能部件,而在多周期实现方案中,这些部件是可以共享的。
第144页:每一个时钟周期完成的工作看作是流水线的一
每一个时钟周期完成的工作看作是流水线的一
- 每一个时钟周期完成的工作看作是流水线的一段,每个时钟周期启动一条新的指令。1.流水实现的数据通路
- 设置了流水寄存器
- 段与段之间设置流水寄存器
- 流水寄存器的命名用其相邻的两个段的名称拼合而成。例如:ID段与EX段之间的流水寄存器用ID/EX表示
- 每个流水寄存器是由若干个寄存器构成的
第145页:流水线的实现
流水线的实现
第146页:寄存器的命名形式为
寄存器的命名形式为
- 寄存器的命名形式为
- x.y
- 将各段的工作隔开,使得它们不会互相干扰。
- 保存相应段的处理结果。
第147页:EX/MEM.ALUo
EX/MEM.ALUo
- EX/MEM.ALUo
- 保存EX段ALU的运算结果MEM/WB.LMD:保存MEM段从数据存储器读出的数据
- 向后传递后面将要用到的数据或者控制信息所有有用的数据和控制信息每个时钟周期会随着指令在流水线中的流动往后流动一段。
- 增加了向后传递IR和从MEM/WB.IR回送到通用寄存器组的连接。
- 将对PC的修改移到了IF段,以便PC能及时地加4,为取下一条指令做好准备。
第148页:每一个流水段进行的操作
每一个流水段进行的操作
- 每一个流水段进行的操作
- IR[rs]=IR6..10
- IR[rt]=IR11..15
- IR[rd]=IR16..20
第149页:流水段流水线的每个流水段的操作所有指令类
流水段流水线的每个流水段的操作所有指令类
- 流水段流水线的每个流水段的操作所有指令类型ALU指令load/store指令分支指令IFIDEXIF/ID.IR←Mem[PC]IF/ID.NPC, PC ←(if((EX/MEM.IR[op] == branch)&EX/MEM.cond){EX/MEM.ALUo} else {PC+4});ID/EX.A ← Regs[IF/ID.IR[rs]];ID/EX.B ← Regs[IF/ID.IR[rt]];ID/EX.NPC ← IF/ID.NPC;ID/EX.IR ←IF/ID.IR;ID/EX.Imm ←(IF/ID.IR16)16##IF/ID.IR16..31;EX/MEM.IR ← ID/EX.IR;EX/MEM.ALUo ←ID/EX.AfuncID/EX.B或EX/MEM.ALUo ←ID/EX.AopID/EX.Imm;EX/MEM.IR ← ID/EX.IR;EX/MEM.ALUo ←ID/EX.A + ID/EX.Imm;EX/MEM.B←ID/EX.B;EX/MEM.IR ← ID/EX.IR;EX/MEM.ALUo ←ID/EX.NPC +ID/EX.Imm<<2;EX/MEM.cond ←(ID/EX.A==0);(动画演示)(动画演示)(动画演示)(动画演示)(动画演示)
第150页:流水段任何指令类型ALU指令load/s
流水段任何指令类型ALU指令load/s
- 流水段任何指令类型ALU指令load/store指令分支指令MEMWBMEM/WB.IR ←EX/MEM.IR;MEM/WB.ALUo ←EX/MEM.ALUo;MEM/WB.IR ← EX/MEM.IR;MEM/WB.LMD ←Mem[EX/MEM.ALUo];或Mem[EX/MEM.ALUo] ←EX/MEM.B;Regs[MEM/WB.IR[rd]] ←MEM/WB.ALUo;或Regs[MEM/WB.IR[rt]] ←MEM/WB.ALUo;Regs[MEM/WB.IR[rt]] ←MEM/WB.LMD;流水线的每个流水段的操作(动画演示)(动画演示)(动画演示)(动画演示)
第151页:流水线的控制
流水线的控制
- 流水线的控制
- 主要是如何控制4个多路选择器。
- MUX2:若ID/EX.IR中的指令是分支指令,则选择ID/EX.NPC,否则选ID/EX.A。
- MUX3:若ID/EX.IR中的指令是寄存器-寄存器型ALU指令,则选ID/EX.B,否则选ID/EX.Imm。
- MUX1:若EX/MEM.IR中的指令是分支指令,而且EX/MEM.cond为真,则选EX/MEM.ALUo,即分支目标地址,否则选PC+4。
- MUX4:若MEM/WB.IR中的指令是load指令,则选MEM/WB.LMD,否则选MEM/WB.ALUo。
第152页:第5个多路器
第5个多路器
- 第5个多路器
- 从MEM/WB回传至通用寄存器组的写入地址应该是从MEM/WB.IR[rd]和MEM/WB.IR[rt]中选一个。
- 寄存器-寄存器型ALU指令
- 选择MEM/WB.IR[rd];
- 寄存器-立即数型ALU指令和load指令
- 选择MEM/WB.IR[rt]。
- 解决数据冲突的问题
- 所有的数据冲突均可以在ID段检测到。如果存在数据冲突,就在相应的指令流出ID段之前将之暂停。完成该工作的硬件称为流水线的互锁机制。
第153页:在ID段确定需要什么样的定向
在ID段确定需要什么样的定向
- 在ID段确定需要什么样的定向,并设置相应的控制。降低流水线的硬件复杂度。不必挂起已经改变了机器状态的指令)
- 也可以在使用操作数的那个时钟周期的开始检测冲突和确定必需的定向。
- 检测冲突是通过比较寄存器地址是否相等来实现的。举例:load互锁由于使用load的结果而引起的流水线互锁称为load互锁。
第154页:D中的操作码(IF/ID.IR[op])
D中的操作码(IF/ID.IR[op])
- D中的操作码(IF/ID.IR[op])ID/EX中的操作码(ID/EX.IR[op])ID/EX.IR[rt]=IF/ID.IR[rs]RR ALUloadID/EX.IR[rt]=IF/ID.IR[rt]RR ALUloadID/EX.IR[rt]=IF/ID.IR[rs]load、storeALU立即数或分支load在ID段检测是否存在RAW冲突(这时load指令在EX段)
第155页:若检测到RAW冲突
若检测到RAW冲突
- 若检测到RAW冲突,流水线互锁机制必须在流水线中插入停顿,并使当前正处于IF段和ID段的指令不再前进。
- 将ID/EX.IR中的操作码改为全0(全0表示空操作)
- IF/ID寄存器的内容回送到自己的入口
- 定向逻辑
- 要考虑的情况更多
- 通过比较流水寄存器中的寄存器地址来确定
第156页:流水线的实现
流水线的实现
- 若(ID/EX.IR.op==RR ALU)&(EX/MEM.IR.op==RR ALU)&(ID/EX.IR[rt]==EX/MEM.IR[rd]),则EX/MEM.ALUo定向到ALU的下面一个输入。
- 若(ID/EX.IR[op]==RR ALU)&(MEM/WB.IR[op]==load)&(ID/EX.IR[rt]==MEM/WB.IR[rt]),则把MEM/WB.LMD定向到ALU的下面一个输入。
第157页:流水线增设的定向路径
流水线增设的定向路径
第158页:流水线的实现:控制冲突
流水线的实现:控制冲突
- 减少分支延迟
- 做如下改进(把上述工作提前到ID段进行)
- 控制冲突
- 分支指令的条件测试和分支目标地址计算在EX段完成,对PC的修改在MEM段完成。
- 它所带来的分支延迟是3个时钟周期。
第159页:流水线的实现
流水线的实现
第160页:DEXIF/ID.IR ← Mem[
DEXIF/ID.IR ← Mem[
- DEXIF/ID.IR ← Mem[PC];IF/ID.NPC, PC ←(if(( IF/ID.IR[op]= =branch)&((Regs[IF/ID.IR[rs]] = =0)){IF/ID.NPC + (IF/ID.IR16)16##(IF/ID.IR16..31<< 2)}else {PC+4});ID/EX.A ←Regs[IF/ID.IR[rs]];ID/EX.B← Regs[IF/ID.IR[rt]];ID/EX.IR ← IF/ID.IR;ID/EX.Imm ←(IF/ID.IR16)16## IF/ID.IR16..31;MEMWB改进后流水线的分支操作
第161页:在流水线处理机中,设置向量数据表示和相应
在流水线处理机中,设置向量数据表示和相应
- 在流水线处理机中,设置向量数据表示和相应的向量指令,称为向量处理机。
- 不具有向量数据表示和相应的向量指令的流水线处理机,称为标量处理机。3.6向量处理机=A×(B+C)为例A、B、C、D──长度为N的向量
第162页:横向(水平)处理方式
横向(水平)处理方式
- 横向(水平)处理方式
- 向量计算是按行的方式从左到右横向地进行。
- 先计算:d1←a1×(b1+c1)
- 再计算:d2←a2×(b2+c2)
- ……
- 最后计算:dN←aN×(bN+cN)
- 组成循环程序进行处理。ki←bi+cidi←ki×ai
- 不适合于向量处理机的并行处理。
第163页:纵向(垂直)处理方式
纵向(垂直)处理方式
- 表示成向量指令
- K=B+CD=K×A
- 纵向(垂直)处理方式
- 向量计算是按列的方式从上到下纵向地进行。k1←b1+c1d1←k1×a1先计算……再计算……kN←bN+cNdN←kN×aN
第164页:对处理机结构的要求
对处理机结构的要求
- 对处理机结构的要求
- 存储器-存储器结构
第165页:纵横(分组)处理方式
纵横(分组)处理方式
- 对于上述的例子,设
- N=S×n+r
- 纵横(分组)处理方式
- 又称为分组处理方式。
- 把向量分成若干组,组内按纵向方式处理,依次处理各组。
- 运算过程为
第166页:向量处理机:先算第1组
向量处理机:先算第1组
- 先算第1组
- k1~n←b1~n+c1~nd1~n←k1~n×a1~n
第167页:对处理机结构的要求
对处理机结构的要求
- 对处理机结构的要求
- 寄存器-寄存器结构
第168页:以CRAY-1机为例
以CRAY-1机为例
- 以CRAY-1机为例
- 美国CRAY公司
- 1976年
- 每秒1亿次浮点运算
- 时钟周期:12.5 ns1.CRAY-1的基本结构
- 功能部件共有12条可并行工作的单功能流水线,可分别流水地进行地址、向量、标量的各种运算。
第169页:
第170页:6个单功能流水部件
6个单功能流水部件
- 6个单功能流水部件
- 进行向量运算
- 整数加(3拍)
- 逻辑运算(2拍)
- 移位(4拍)
- 浮点加(6拍)
- 浮点乘(7拍)
- 浮点迭代求倒数(14拍)括号中的数字为其流水经过的时间,每拍为一个时钟周期,即12.5 ns。
第171页:向量寄存组V
向量寄存组V
- 向量寄存组V
- 由512个64位的寄存器组成,分成8块。
- 编号:V0~V7
- 每一个块称为一个向量寄存器,可存放一个长度(即元素个数)不超过64的向量。
- 每个向量寄存器可以每拍向功能部件提供一个数据元素,或者每拍接收一个从功能部件来的结果元素。
- 标量寄存器S和快速暂存器T
- 标量寄存器有8个:S0~S764位
- 快速暂存器T用于在标量寄存器和存储器之间提供缓冲。
第172页:向量屏蔽寄存器VM
向量屏蔽寄存器VM
- 向量屏蔽寄存器VM
- 64位,每一位对应于向量寄存器的一个单元。
- 作用:用于向量的归并、压缩、还原和测试操作、对向量某些元素的单独运算等。2.CRAY-1向量处理的一个显著特点
- 每个向量寄存器Vi都有连到6个向量功能部件的单独总线。
- 每个向量功能部件也都有把运算结果送回向量寄存器组的总线。
第173页:只要不出现Vi冲突和功能部件冲突
只要不出现Vi冲突和功能部件冲突
- 只要不出现Vi冲突和功能部件冲突,各Vi之间和各功能部件之间都能并行工作,大大加快了向量指令的处理。
- Vi冲突:并行工作的各向量指令的源向量或结果向量使用了相同的Vi。例如:源向量相同V3←V1+V2V5←V4∧V1
- 功能部件冲突:并行工作的各向量指令要使用同一个功能部件。例如:都需使用乘法功能部件V3←V1×V2V5←V4×V6
第174页:CRAY-1向量指令类型
CRAY-1向量指令类型
- CRAY-1向量指令类型
- Vk← Viop Vj
- Vk← Siop Vj
- Vk←主存
- 主存←Vi
第175页:设置多个功能部件,使它们并行工作
设置多个功能部件,使它们并行工作
- 设置多个功能部件,使它们并行工作。
- 采用链接技术,加快一串向量指令的执行。
- 采用循环开采技术,加快循环的处理。
- 采用多处理机系统,进一步提高性能。
第176页:设置多个功能部件
设置多个功能部件
- 向量部件
- 向量加,移位,逻辑运算
- 浮点部件
- 浮点加,浮点乘,浮点求倒数
- 标量部件
- 标量加,移位,逻辑运算,数“1”/计数
- 地址运算部件
- 整数加,整数乘
- 设置多个功能部件
- 设置多个独立的功能部件。这些部件能并行工作,并各自按流水方式工作,从而形成了多条并行工作的运算操作流水线。例如:CRAY-1向量处理机有4组12个单功能流水部件:
第177页:向量处理机:链接技术
向量处理机:链接技术
- 链接特征
- 具有先写后读相关的两条指令,在不出现功能部件冲突和源向量冲突的情况下,可以把功能部件链接起来进行流水处理,以达到加快执行的目的。
- 链接技术
- 链接特性的实质把流水线定向的思想引入到向量执行过程的结果。
第178页:例3.3 在CRAY-1上用链接技术进行
例3.3 在CRAY-1上用链接技术进行
- 例3.3在CRAY-1上用链接技术进行向量运算D=A×(B+C)假设向量长度N≤64,向量元素为浮点数,且向量B、C已存放在V0和V1中。画出链接示意图,并分析非链接执行和链接执行两种情况下的执行时间。解用以下三条向量完成上述运算:V3←存储器//访存取向量AV2← V0+V1//向量B和向量C进行浮点加V4←V2×V3//浮点乘,结果存入V4
第179页:向量处理机
向量处理机
- 假设
- 把向量数据元素送往向量功能部件以及把结果存入向量寄存器需要一拍时间,从存储器中把数据送入访存功能部件需要一拍时间。
第180页:3条指令全部用串行方法执行,则执行时间为
3条指令全部用串行方法执行,则执行时间为
- 3条指令全部用串行方法执行,则执行时间为
- [(1+6+1)+N-1]+[(1+6+1)+N-1]+[(1+7+1)+N-1] = 3N+22(拍)
- 前两条指令并行执行,然后再串行执行第3条指令,则执行时间为:[(1+6+1)+N-1]+[(1+7+1)+N-1]= 2N+15(拍)
- 第1、2条向量指令并行执行,并与第3条指令链接执行。
第181页:从访存开始到把第一个结果元素存入V4所需
从访存开始到把第一个结果元素存入V4所需
- 从访存开始到把第一个结果元素存入V4所需的拍数(亦称为链接流水线的建立时间)为:[(1+6+1)]+[(1+7+1)] = 17(拍)
- 3条指令的执行时间为:[(1+6+1)]+[(1+7+1)]+(N-1)= N+16(拍)
第182页:进行向量链接的要求保证
进行向量链接的要求保证
- 进行向量链接的要求保证
- 无向量寄存器使用冲突和无功能部件使用冲突
第183页:分段开采技术如果向量的长度大于向量寄存器
分段开采技术如果向量的长度大于向量寄存器
- 分段开采技术如果向量的长度大于向量寄存器的长度,该如何处理呢?
- 当向量的长度大于向量寄存器的长度时,必须把长向量分成长度固定的段,然后循环分段处理,每一次循环只处理一个向量段。
- 这种技术称为分段开采技术。
第184页:例3.4 设A和B是长度为N的向量
例3.4 设A和B是长度为N的向量
- 例3.4设A和B是长度为N的向量,考虑在Cray-1向量处理器上实现以下的循环操作:DO 10 I = 1,N10 A(I)= 5.0 * B(I)+ C
第185页:1← 5.0;将常数5.0送入标量寄存器
1← 5.0;将常数5.0送入标量寄存器
- 1← 5.0;将常数5.0送入标量寄存器S1S2← 1.0;将常数1.0送入标量寄存器S2VL ← N;在向量长度寄存器VL中设置向量长度NV0← B;从存储器中将向量B读入向量寄存器V0V1← S1×V0;向量B中的每个元素分别和常数S1相乘V2← S2+ V1;向量V1中的每个元素分别和常数S2相加A ← V2;将计算结果从向量寄存器V2存入存储器的向量A
- 当N≤64时,可以用以下指令序列
第186页:当N>64时,就需要进行分段开采
当N>64时,就需要进行分段开采
第187页:1← 5.0;将常数5.0送入标量寄存器
1← 5.0;将常数5.0送入标量寄存器
- 1← 5.0;将常数5.0送入标量寄存器S1S2← 1.0;将常数1.0送入标量寄存器S2VL ← L;在向量长度寄存器VL中设置向量长度LV0← B;从存储器中将向量B[0..L-1]读入向量;寄存器V0V1← S1* V0;向量B中的每个元素分别和常数S1相乘V2← S2+ V1;向量V1中的每个元素分别和常数S2相加A ← V2;将计算结果从向量寄存器V2存入存储器;的向量A[0..L-1]处理余数部分,计算L个元素
第188页:=0 to K-1) {V0← B
=0 to K-1) {V0← B
- =0 to K-1) {V0← B;从存储器中将向量B[L+I*64..L+I*64+63];读入向量寄存器V0V1← S1* V0;向量B中的每个元素分别和常数S1;相乘;V2← S2+ V1;向量V1中的每个元素分别和常数S2;相加A ← V2;将计算结果V2存入存储器的向量;A[L+I*64… L+I*64+63]}循环K次,分段处理
第189页:采用多处理机系统许多新型向量处理机系统采
采用多处理机系统许多新型向量处理机系统采
- 采用多处理机系统许多新型向量处理机系统采用了多处理机系统结构。例如
- 包含了4个向量处理机
- 浮点运算速度最高可达1800MFLOPS
- CRAY Y-MP、C90最多可包含16个向量处理机
第190页:向量处理机的性能评价:数
向量处理机的性能评价:数
- 数
- 1.向量指令的处理时间
- 执行一条向量长度为n的向量指令所需的时间为
- Ts:向量流水线的建立时间
- Tvf:向量流水线的流过时间它是从向量指令开始译码算起,到第一对向量元素流过流水线直到产生第一个结果元素所需的时间。
- Tc:流水线瓶颈段的执行时间
第191页:如果流水线不存在“瓶颈”
如果流水线不存在“瓶颈”
- 如果流水线不存在“瓶颈”,每段的执行时间等于一个时钟周期,则上式可以写为
- s:向量流水线的建立时间所对应的时钟周期数
- e:向量流水线的流过时间所对应的时钟周期数
- Tclk:时钟周期时间
- 也可以将上式改写为
第192页:对于一组向量指令而言
对于一组向量指令而言
- 对于一组向量指令而言,其执行时间主要取决于三个因素
- 向量的长度
- 向量操作之间是否链接
- 向量功能部件的冲突和数据的冲突性
- 把几条能在同一个时钟周期内一起开始执行的向量指令集合称为一个编队。
- 可以看出,同一个编队中的向量指令之间一定不存在流水向量功能部件的冲突和数据的冲突。
第193页:例3.5 假设每种向量功能部件只有一个
例3.5 假设每种向量功能部件只有一个
- 例3.5假设每种向量功能部件只有一个,那么下面的一组向量指令能分成几个编队?LV V1,RxMULTSV V2,R0,V1LV V3,RyADDV V4,V2,V3SV Ry,V4解:分为4个编队
- 第一编队:LV
- 第二编队:MULTSV;LV
- 第三编队:ADDV
- 第四编队:SV
第194页:一个编队内所有向量指令执行完毕所要的时间
一个编队内所有向量指令执行完毕所要的时间
- 一个编队内所有向量指令执行完毕所要的时间为
- (假设第i个编队中所有向量指令处理的向量元素个数均为n)
第195页:编队后的向量指令序列总的执行时间为
编队后的向量指令序列总的执行时间为
- 编队后的向量指令序列总的执行时间为
- m:向量指令序列编队的个数
- Tstart:向量指令序列编队总的启动时钟周期数
第196页:编队并采用分段开采技术后
编队并采用分段开采技术后
- 编队并采用分段开采技术后,向量指令序列执行所需的总的时钟周期数为
- Tloop:分段开采所需的额外的时间开销
- MVL:向量处理机的向量寄存器长度
第197页:例3.6
例3.6
- 例3.6在某向量处理机上执行DAXPY的向量指令序列,也即计算双精度浮点向量表达式。其中X和Y是双精度浮点向量,最初保存在外部存储器中,α是一个双精度浮点常数,已存放在浮点寄存器F0中。计算该表达式的向量指令序列如下:LV V1,RxMULTFV V2,F0,V1LV V3,RyADDV V4,V2,V3SV Ry,V4
第198页:可以把上述5条向量指令按如下方式进行编队
可以把上述5条向量指令按如下方式进行编队
- 可以把上述5条向量指令按如下方式进行编队
- 第一编队:LV V1,Rx;
- 第二编队:MULTFV V2,F0,V1;LV V3,Ry;
- 第三编队:ADDV V4,V2,V3;
- 第四编队:SV Ry,V4。假设:Tloop=15向量存储部件的启动:12个时钟周期向量乘法部件的启动:7个时钟周期向量加法部件的启动:6个时钟周期向量寄存器长度:MVL
第199页:对n个向量元素进行计算所需的时钟周期数为
对n个向量元素进行计算所需的时钟周期数为
- 对n个向量元素进行计算所需的时钟周期数为
- 采用向量链接技术,那么指令序列可以编队为
- 第一编队:LV V1,Rx;MULTFV V2,F0,V1;
- 第二编队:LV V3,Ry;ADDV V4,V2,V3;
- 第三编队:SV Ry,V4。
第200页:第一编队启动需要12+7=19个时钟周期
第一编队启动需要12+7=19个时钟周期
- 第一编队启动需要12+7=19个时钟周期
- 第二个编队启动需要12+6=18个时钟周期
- 第三个编队启动仍然需要12个时钟周期对n个向量元素进行计算所需的时钟周期数为
第201页:向量处理机的峰值性能R∞
向量处理机的峰值性能R∞
- 向量处理机的峰值性能R∞
- R∞表示当向量长度为无穷大时,向量处理机的最高性能,也称为峰值性能。
- 对于上述例题3.6向量指令序列中的操作而言,只有“MULTFV V2,F0,V1”和“ADDV V4,V2,V3”两条浮点操作向量指令。
第202页:行所需时钟频率算次数向量指令序列中浮点运
行所需时钟频率算次数向量指令序列中浮点运
- 行所需时钟频率算次数向量指令序列中浮点运×=∞∞nRlim2×n×200=∞nlimMFLOPSn64×64+3nMFLOPS2×n×200=∞nlim4nMFLOPS=100MFLOPS
第203页:半性能向量长度n1/2
半性能向量长度n1/2
- 半性能向量长度n1/2
- 半性能向量长度n1/2是指向量处理机的运行性能达到其峰值性能的一半时所必须满足的向量长度。
- 对于上面的例子由于该向量处理机的峰值性能R∞=100 MFLOPS,所以根据半性能向量长度的定义有
第204页:向量处理机数据表
向量处理机数据表
本页含数据表/图示,源文件文字与数字粘连,未能安全切分为表格,以下为原文提取文字,具体数值请对照原课件图片核对。
≤64,那么有:n1/264+3n1/2=2×n1/2×20050=8n1/25n1/2=64,n1/2=12.8n1/2=132×n1/2×200×64+3n1/2n1/264=50
第205页:向量长度临界值nv
向量长度临界值nv
- 向量长度临界值nv是指
- 对于某一计算任务而言,向量方式的处理速度优于标量串行方式处理速度时所需的最小向量长度。
- 向量长度临界值nv
- 对于上述DAXPY的例子
- 假设,在标量串行工作方式下实现DAXPY循环的开销为10个时钟周期。那么在标量串行方式下,计算DAXPY循环所需要的时钟周期数为:Ts=( 10+12+12+7+6+12 )×nv= 59nv
第206页:在向量方式下,计算DAXPY循环所需要的
在向量方式下,计算DAXPY循环所需要的
- 在向量方式下,计算DAXPY循环所需要的时钟周期数为:Tv= 64+3nv
- 根据向量长度临界值的定义,有:Tv=Ts64+3nv= 59nv=6456= 2nv