• 计算机指令流水线和吞吐率


    计算机指令-流水线和吞吐率

     

    流水线

    我们把计算机的一条指令抽象成三个步骤(实际不止这些)

     现在向计算机发送三条指令A,B,C,如果不采用流水线的方式传输,那么在每个机器周期中的执行步骤如下图所示(我们假设每个步骤都会耗费一个机器周期):

    采用流水线的方式传输如下图所示:

     对比上面两张图,我们可以看出,流水线是一种准并行处理技术:

    第1个机器周期:处理A指令的取指步骤

    第2个机器周期:处理A指令的分析步骤,同时也在处理B指令的取指步骤

    以此类推,我们可以看出,同一机器周期只允许处理不同的步骤,不能处理相同的步骤,这样在保证指令安全的同时也可以加快处理速度,提升了效率,这就是流水线带来的好处

    吞吐率

    流水线理解了,吞吐率就好说了,这里的吞吐率指的是流水线的吞吐率,简单理解吞吐率就是通过数值来反应计算的处理速度,先列个公式:吞吐率 = 指令条数 / 流水线时间

    指令条数:需要计算吞吐率的指令的总数

    流水线时间:这里的流水线时间指的并不是一个指令流水线花费的时间,而是跑完公式中指定的指令条数所需要的时间,对比上面两个图,一条指定所需要耗费的流水线时间是3个机器周期,而跑完ABC三条指令耗费的流水线时间是5个机器周期,对于流水线时间,有个计算公式:一条指令流水线所需要耗费的时间   + (指令条数 - 1)* 一条流水线中最耗时的步骤时间

    吞吐率一般分为实际吞吐率和最大吞吐率,下面我从两个案例来分别讲述:

      实际吞吐率

      

        按照上面的公式,指令条数为8条,流水线时间=(1+2+3+1) + (8-1) * 3=28,结果就显而易见是C了 

      

       最大吞吐率

      

       我们列个一元二次方程,设最大吞吐率为y,指令条数为x,按照上面的公式y=x /((2+1+3+1+2) + (x-1)* 3),简化下就是y=x / (3x + 6)=1 / 3 - 2 / (3x-6),x为正整数,当x趋于无穷大的时候,y的最大值为1/3

     大家想要更加详细的了解其中的原理,可以参考:https://blog.csdn.net/yi_zz/article/details/7479912

    用通俗易懂的语言阐述复杂的概念,学无止境,共勉前进!!!

  • 相关阅读:
    移植Linux2.6.38到Tiny6410_1GNandflash
    【转载】Mini6410启动过程
    【转载】Mini2440启动配置文件说明
    【转载】linux2.6内核initrd机制解析
    第十三章 StringTable
    第十二章 执行引擎
    第十一章 直接内存(Direct Memory)
    第十章 对象的实例化、内存布局与访问定位
    第九章 方法区
    第八章 堆
  • 原文地址:https://www.cnblogs.com/duanweishi/p/16826849.html
Copyright © 2020-2023  润新知