计算机体系结构------流水线
------------恢复内容开始------------
流水线的基本概念
流水线的分类
流水线的评判标准
吞吐量
加速比
效率
计算效率其实就是计算流水线时空图中的面积
分子的面积是 实际用到的面积
分母的面积是 功能段数*总时间
题目分析:
注意他这个画时空图的方法,十分清楚明白
流水线的瓶颈段以及解决方法
什么是流水线的瓶颈段?
如下图为某一个流水线结构
可以看出其分为4个功能段,各个功能段需要的延迟分别为1,1,1,3 (单位)
其时空图画出来如图所示:
可以看到段4的延迟实在太大,导致了其他段完成后需要等待
导致了流水线的堵塞
我们称这种功能段为流水线的瓶颈段
解决方法:
1.瓶颈段细分(拆分瓶颈段)
改进后 流水线结构如下:
时空图如下:
可以看到 各个性能方面都有很大的提高
2.瓶颈段并联
也可以看到相对于最初始的性能也有较大提高
题目分析:
流水线中相关的基本概念
所谓相关即是有依赖关系,必须要有先后与等待
资源相关
操作数相关(数据相关)
题目分析:
《非流水线》
优秀博客<----
对于非流水线,相较于流水线用时空图来进行描述过程,其使用的是预约表
因为非流水线本身可能有多种使用的功能段的情况,所以预约表也是多样的
但是不用担心,题目一般会给出预约表
《非流水线的调度问题》
《非流水线上的效率问题》
对于非流水线,我们应该如何安排任务使得工作流水线上冲突尽量小,效率尽量高呢?
《非流水线上的效率评估》
《调度方法》
1. 通过预约表得到禁止表,从而得到初始冲突向量
我们知道预约表长成这样:
那什么是禁止表?
如何生成禁止表?
禁止表为何是这样生成的?
我们首先要知道禁止表的本质是:
在当前流水线的任务中,应该禁止什么时间段新任务进入流水线
使得流水线上不会发生冲突
我们来看下优秀博客中的那张图:
我们的目的是这两个任务不会在同一时间段上占用相同的功能段
初始状态两个任务相隔0个时间段,这肯定是不行的
我们一行一行分析:
为了买冬瓜这个功能段不冲突,在第一个任务进入流水线后,下面一个任务
不能恰好相隔8个时间段进入流水线,否则会与第一个任务买冬瓜这个功能段冲突
同理为了买西瓜这个功能段不冲突,两个任务相隔不能恰好是1,6,5
即3-2=1,8-2=6,8-3=5,即是我们上面说的方法
(如果不理解,那就从上面那张图平移的角度来想,如何平移才会使得
在相同时间内两个任务之间没有功能段的冲突)
剩下的以此类推
于是得到的禁止表格式类似为:
什么是冲突向量,什么是初始冲突向量,如何生成冲突向量?
生成冲突向量的方法就是简单地看下禁止表
有哪些时间段是禁止输入后继任务,并将这个位数上的二进制位上为1
其余为0
冲突向量表格式类似:
2.生成后继冲突向量
现在我们有了初始冲突向量表,假设是 C0=(101100)
说明禁止表中最大值为6
在第一个流水线输入后,相隔3,4,6个时间段均不能输入下一个任务
其余时间段均可
有多少个0表示我们可以有多少个时间段输入下一个任务
也表示后继冲突向量可以有多少个
我们来模拟一下全过程来理解以下什么是后继冲突向量
1.现在我有初始冲突向量表C0=(101100),我当前冲突向量表C1也就是 初始冲突向量表
即C1=C0
2.
我可以在相隔1个时间段后加入下一个任务
加入后得到的新的冲突向量表即是后继冲突向量表
得到的方法为:
C2=C0 | C1>>(相隔的时间段)
这里是 C2=C0 | C1>>1
我也可以相隔2个时间段后加入下一个任务
C2=C0 | C1>>2
可以相隔5个时间段后加入下一个任务
C2=C0 | C1>>5
3.
如果从状态机的角度来看的话目前我们得到了
然后通过我们上面的算法不断得到新的冲突向量
如: C3=C0 | C2>>(C2中为0的数的位置)
...
Ci=C0 | Ci-1>>(NUM)
不断扩大状态机状态
但是这个过程不是无止境的
到最后都一定状态会有相同的(即可以形成环)
或者是冲突向量全为1,这个时候只有使流水线断流,再回到最初始的状态
即是要相隔N个时间段(N是预约表中最大时间数)
注意任何状态都可以通过相隔N个时间段回到最初始的状态
3.画图,计算最小启动循环
这里需要注意的是:
生成了11111,即冲突向量全1,我们是相隔预约表中最大的时间数(这里是7)后
回到了最初始的状态
其余状态均可相隔7后回到最初始的状态
这里所谓的无冲突调度策略就是 循环使用哪个时间段间隔进行调度
需要注意的是:只要有环就要算是一个无冲突调度策略
就算其没有回到最初始的状态
本文作者:次林梦叶
本文链接:https://www.cnblogs.com/cilinmengye/p/17436336.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2022-05-27 node--http模块
2022-05-27 path模块
2022-05-27 fs下的路径问题
2022-05-27 js好用的函数