热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

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

流水线我们把计算机的一条指令抽象成三个步骤(实际不止这些)现在向计算机发送三条指令A,B,C,如果不采用流水线的方式传输,那么在每个机器周期中的执行步骤如下图所示(我们假设每个

流水线

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

 

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

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


推荐阅读
  • 本文整理了一系列Java面试问题,涵盖Java开发环境的分类、Java语言的核心特性、Linux环境下Java SE的安装步骤、常用的Java开发工具介绍,以及类与对象的基本概念等。 ... [详细]
  • Node.js 中 GET 和 POST 请求的数据处理
    本文详细介绍了如何在 Node.js 中使用 GET 和 POST 方法来处理客户端发送的数据。通过示例代码展示了如何解析 URL 参数和表单数据,并提供了完整的实现步骤。 ... [详细]
  • 通过特定网站,用户可以直接在网页上运行Matlab代码,无需下载或安装任何软件。访问以下链接了解更多:https://www.mathworks.cn/products/matlab-online.html ... [详细]
  • 使用Jenkins构建Java项目实践指南
    本指南详细介绍了如何使用Jenkins构建Java项目,包括环境搭建、工具配置以及项目构建的具体步骤。 ... [详细]
  • Vue 项目构建与部署指南
    本文将指导您完成Vue项目的构建和部署过程,包括环境搭建、项目初始化及配置、以及最终的部署步骤。 ... [详细]
  • jQuery中 $(selector).each() 和 $.each() 的区别与应用
    在JavaScript开发中,jQuery库提供了两种遍历方法:$(selector).each() 和 $.each()。本文将详细探讨这两种方法的不同之处及其应用场景。 ... [详细]
  • 本文详细介绍了C#中的基本选择结构(如if、if-else、if-else-if及嵌套if)、switch结构、数组与循环控制结构(包括while、do-while、for和foreach循环)以及跳转语句(break和continue)。此外,还简要探讨了二重循环的应用和冒泡排序算法。 ... [详细]
  • 本文详细解释了一个具体的Python列表推导式代码片段,并提供等效的传统循环版本以加深理解。 ... [详细]
  • 时间序列分析入门:平稳性与白噪声检验
    本文详细介绍了时间序列分析中的两个基本概念——平稳性和白噪声的检验方法,帮助读者更好地理解和应用这些技术。 ... [详细]
  • Kotlin 扩展函数详解及其工作原理
    本文详细探讨了 Kotlin 中的扩展函数概念,包括其定义、使用方式以及背后的实现机制,并分析了使用扩展函数时的一些限制。 ... [详细]
  • 本文详细记录了利用HTML5和CSS3进行企业网站开发的过程,包括技术要点、实践技巧以及常见问题解决方法。 ... [详细]
  • 微信PC版1.2更新:支持自定义公众号菜单与多项新功能
    微信桌面应用程序最新版本1.2 for Windows现已发布,新增了保存聊天记录、使用公众号自定义菜单、同步手机表情等多项实用功能。 ... [详细]
  • 本文详细介绍了ASP.NET缓存的基本概念和使用方法,包括输出缓存、数据缓存及其高级特性,如缓存依赖、自定义缓存和缓存配置文件等。通过合理利用这些缓存技术,可以显著提升Web应用程序的性能。 ... [详细]
  • 本文详细介绍了如何在Linux系统中安装和配置GitLab Runner,包括添加YUM源、安装GitLab Runner以及注册Runner的具体步骤。 ... [详细]
  • 本文将详细介绍Docker的网络架构,包括Docker自带的几种网络模式及其创建方法,探讨容器间及容器与外部世界的通信方式。此外,还将简要介绍单主机环境下的容器网络配置。 ... [详细]
author-avatar
逃跑的骨拉拉gf_761
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有