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

 

流水线

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

 

 现在向计算机发送三条指令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

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

原文地址:http://www.cnblogs.com/duanweishi/p/16826849.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性