音无结弦之时,天使跃动之心。立于浮华之世,奏响天籁之音。.|

次林梦叶

园龄:3年3个月粉丝:22关注:3

计算机体系结构------流水线

------------恢复内容开始------------

流水线的基本概念

  流水线的分类

  

 

 

 

 

流水线的评判标准

   吞吐量

   加速比

   效率

   计算效率其实就是计算流水线时空图中的面积

  分子的面积是 实际用到的面积

  分母的面积是 功能段数*总时间

题目分析:

 

注意他这个画时空图的方法,十分清楚明白

 

 

流水线的瓶颈段以及解决方法

  什么是流水线的瓶颈段?

  如下图为某一个流水线结构

   可以看出其分为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 中国大陆许可协议进行许可。

posted @   次林梦叶  阅读(568)  评论(0编辑  收藏  举报
历史上的今天:
2022-05-27 node--http模块
2022-05-27 path模块
2022-05-27 fs下的路径问题
2022-05-27 js好用的函数
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起