流水线会影响时钟时间或每指令周期 (CPI)?

2023-12-20

我的书中提到“根据您所考虑的基线,减少可以被视为减少每条指令的时钟周期数(CPI),减少时钟周期时间,或作为组合。如果起点是处理器每条指令需要多个时钟周期,那么流水线通常被视为降低 CPI。”

我无法理解的是,流水线会影响 CPI 或时钟周期,因为在流水线的情况下,时钟周期被视为最大阶段延迟 + 锁存延迟,因此流水线确实会影响时钟时间。它还会影响 CPI,因为在管道化的情况下它会变成 1。我错过了一些概念吗?


执行一条指令需要一组操作。为了简单起见,假设有 5 个: 获取-指令解码-执行-内存访问-写回。

这可以通过多种方案来实现。

A/ 单循环处理器

方案如下: 处理器获取一条指令,将其引导至一个解码器,该解码器控制一组多路复用器,这些多路复用器将配置一个用于实现该指令的大型组合数据路径。

在此模型中,每条指令需要一个周期,并且假设所有 5 个“阶段”需要相等的时间 t,则周期将为 5t。 因此CPI=1,T=5

实际上,这或多或少是 20 世纪 40 年代末早期计算机的基本模型。除此之外,还没有真正的处理器这样做,但理论上是完全可行的。

B/ 多周期处理器

与之前的模型相比,您在数据路径上引入了寄存器。第一个获取指令并将其发送到自动机的输入,该自动机将顺序应用计算“阶段”。

在这种情况下,指令需要 5 个周期(可能会稍微少一些,因为某些指令可能更简单,例如跳过内存访问)。周期为 1t(或者可能稍长一些,以考虑寄存器遍历时间)。

消费者物价指数=5,T=1

第一个“真正的”计算机就是这样实现的,这是直到 80 年代初的主要架构模型。如今,一些微控制器,或者例如更简单的 NIOS 版本,仍然依赖于这种方案。

C/管道处理器

您可以在各个阶段之间添加额外的寄存器,以便跟踪指令和所有部分结果。在这种情况下,每个阶段的执行可以是独立的,您可以在不同阶段同时执行多个指令。

CPI 变为 1,因为您可以在每个时钟周期启动一条新指令(由于存在危险,可能会多一点,但那是另一个故事了)。 并且T=1。

所以CPI=1,T=1

(CPI反映了吞吐量的增加但单条指令的执行时间并没有减少)

因此,管道可以被视为减少方案 A 的周期时间,或减少方案 B 的 CPI。您还可以想象一个中间方案(例如 3 个阶段,周期为 2),其中管道将减少两者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

流水线会影响时钟时间或每指令周期 (CPI)? 的相关文章

随机推荐

  • 将一个时间范围按其他时间范围分割成多个部分

    我有一项复杂的任务 几天来我一直在用头撞墙 我已经尝试了大约 4 种不同的方法 但是每种方法似乎都停滞不前 并且变得非常令人沮丧 我有一个时间范围 例如 14 30 00 至 18 30 00 考虑某人轮班的时间范围 在此时间范围内 他们表
  • jasmine 与 jscoverage 自动化测试

    一直在看 jsunit 和 jcoverage 演示 单击覆盖率报告链接 在新选项卡中打开此内容 我想知道是否有人对 Jasmine 和 JSCoverage 做过类似的事情 我有点不确定如何继续 编辑 我想知道有什么可以和茉莉花记者一起做
  • fopen b 标志是什么

    在阅读中php fopen 的文档 http php net manual en function fopen php对于 php 我看到以下内容 为了可移植性 强烈建议您在使用以下命令打开文件时始终使用 b 标志fopen http ph
  • 某些 lua/c++ 代码中出现 SIGSEGV 错误

    以下代码以 SIGSEGV 错误结束 extern C include lua lua h include lua lualib h include lua lauxlib h int main int argc char argv lua
  • 创建具有左偏概率分布的随机数

    我想在 1 100 之间随机选择一个数字 这样获得数字 60 100 的概率高于 1 59 我希望数字 1 100 的概率为左偏分布 也就是说 它有一个长尾和一个峰 大致意思是 pers np arange 1 101 1 prob
  • 在 IF ELSE 块中包含 InstallDir

    我尝试使用以下代码 The default installation directory InstallDir PROGRAMFILES PRODUCT NAME to include x64 nsh If RunningX64 The d
  • css 中的图像轮播无法正常工作

    我正在制作一个网站的轮播 但宽度有问题 我希望每个图像都占据视口的整个宽度 但最后一个图像出现在第一个图像的下方 即使滑块动画也无法通过在右侧滑动额外内容来正确滑动图像 任何帮助 将不胜感激 carousel container carou
  • 将 Angular2 应用程序包含到 Asp.Net Webforms 页面

    当我将 angular cli ng build 生成的带有 aot 配置的 js 文件包含到我的 aspx 页面中时 我在 Chrome 控制台中收到一条错误消息 gt TypeError Error parameterCount is
  • 函数式语言对于飞行模拟器来说是一个不错的选择吗? Lisp 怎么样?

    我做面向对象编程也有几年了 函数式编程做的不多 我对飞行模拟器很感兴趣 并且对 Lisp 的函数式编程方面感到好奇 在面向对象的范例中 飞行模拟器或任何其他现实世界模拟器对我来说都是有意义的 这是我的问题 面向对象是表示现实世界模拟领域的最
  • .node 不是有效的 Win32 应用程序

    在 Window 10 Home x64 位 上 我尝试在命令提示符下运行以下命令 节点索引 js 错误如下 C Users cooldudeasateen OneDrive Coding sil node modules bindings
  • 如何避免在父组件状态更新时重新渲染循环中的所有子组件

    我有一个子组件 它位于父组件的循环内 当子组件之一更新父组件的状态时 它会重新渲染所有子组件 因为它是循环的 我怎样才能避免每次迭代的重新渲染 function Parent const selectedChild setSelectedC
  • 使用 React CSS 过渡组在输入时使组件错开

    我想为在 ReactCssTransitionGroup 中渲染的所有子级添加交错效果 但不知道如何去做 我在看this https stackoverflow com questions 31394719 react transition
  • F# 对元组的成员约束

    当我意识到我需要在某个地方提供额外的值时 我在编写 F 时通常都会有一个 哦耶 的时刻 这通常可以通过向传递的元组添加另一个值来轻松完成 然而 这意味着各种地图 排序 收集 等 需要更新 特别是函数 fst snd 仅适用于长度为 2 的元
  • 如何在flutter中自定义单选按钮?

    我想做这样的按钮 我尝试使用单选按钮 但无法自定义它们 你有什么想法我该怎么做吗 我编写了一个可重复使用的小部件 它模仿单选按钮的行为 自定义无线电小部件 class CustomRadioWidget
  • Crystal Reports:如何将参数从子报表传递到父报表?

    我有许多子报告 我在其中计算总计 在主要报告中 我需要这些总数的总和 我不知道如何访问子报告中的总计 您需要考虑使用共享变量 父报表及其子报表都可以读取和写入该变量 例子 在父报告中 有一个用于初始化称为 InitTotal 的公式 其中包
  • System.Drawing 内存不足异常

    我的应用程序图形引擎抛出这些异常 它们都被一个空的 catch 块消耗掉 早期 我发现了一个没有被困住的东西 我记得与笔加宽有关 我用 try 和一个空的 catch 块包围它 看来这些异常对生成的绘图没有影响 我已经阅读了一些相关内容 但
  • 覆盖 ListBox 的 DrawItem - 未选择的项目不会重绘

    这是一个 C 桌面应用程序 这DrawStyle我的财产ListBox被设定为OwnerDrawFixed 问题 我重写 DrawItem 以使用不同的字体绘制文本 并且它有效 但是 当我开始在运行时调整表单大小时 所选项目会正确绘制 但其
  • Java Thread:请澄清这个理解

    public class Qn static class Friend private final String name public Friend String name this name name public String get
  • 原因:`object` ("[object Date]") 无法序列化为 JSON。请仅返回 JSON 可序列化数据类型

    我正在使用 Prisma 和 Next js 当我尝试从 Prisma 检索内容时getStaticProps它确实获取了数据 但我无法将其传递给主要组件 export const getStaticProps async gt const
  • 流水线会影响时钟时间或每指令周期 (CPI)?

    我的书中提到 根据您所考虑的基线 减少可以被视为减少每条指令的时钟周期数 CPI 减少时钟周期时间 或作为组合 如果起点是处理器每条指令需要多个时钟周期 那么流水线通常被视为降低 CPI 我无法理解的是 流水线会影响 CPI 或时钟周期 因