cpu-architecture - 带有流水线的 cpu 中的 CPI
问题描述
考虑在 CPU 中,加法指令的 CPI 为 0.5(它通过流水线在一个周期内执行两条加法指令)。因此,当我们要计算 10 条加法指令的 CPU 时间时,我们乘以 10 * 0.5 * 2(时钟周期时间为 2 纳秒),一切正常。
但是当根据公式只有一个加法指令时,我们将 1 * 0.5 * 2 相乘,这是不正确的。因为执行加法指令至少需要一个时钟周期。
解决方案
考虑在 CPU 中,加法指令的 CPI 为 0.5(它通过流水线在一个周期内执行两条加法指令)
但是当根据公式只有一个加法指令时,我们将 1 * 0.5 * 2 相乘,这是不正确的。
您正在混淆延迟和吞吐量。
吞吐量描述了在给定时间内可以执行的操作数。您使用的 CPI 是一种吞吐量。因此,如果您说 CPI=0.5,您的意思是每个周期可以提供 2 个添加结果。
延迟是指令(或操作、内存读取等)开始到结束之间时间的度量。它与吞吐量无关,并且与处理器中的阶段数相关。
所以如果你看一个单独的add
指令,它的持续时间显然不是半个周期。最近 pentium 中的流水线在 14 到 19 个周期之间(但旧版本的流水线要长两倍)。单个添加的持续时间约为 15 个周期(最多)。
因此,当我们要计算 10 条加法指令的 CPU 时间时,我们乘以 10 * 0.5 * 2(时钟周期时间为 2 纳秒),一切正常。
不会。其他因素可能会产生影响,例如依赖关系以及与其他指令的一般交互。CPI 被引入作为衡量完整程序中每条指令的平均周期数的指标。当前计算机的复杂性使得在不执行程序的情况下几乎不可能准确估计 CPI。因此,为了得到它,我们对程序进行计时,然后除以执行指令的数量。这将考虑到内存访问、依赖关系、分支错误预测等,这对于想要知道其程序速度的最终用户来说是有意义的。您的估计是理论上的估计,在现实生活中从未发生过。
推荐阅读
- reactjs - 如何使用 styled-components 覆盖离子组件的样式
- python - 使用 lineplot 用 seaborn 绘制两条线
- node.js - 我在哪里可以找到这个 mongodb 连接功能是如何实现的?
- wix-react-native-navigation - 问:带有自定义组件而不是“三个点”的溢出菜单
- javascript - 如何添加外部 javascript 文件 postman 环境?
- javascript - 从字符串中删除字符会删除某些字母的倍数,但不会删除其他字母
- ios - iPad 上 NavigationLink 的奇怪行为
- svg - svg 鼠标悬停位置的工具提示
- python - 根据下一行列创建列
- hive - 在 Hive2 中向 ORC 表中插入数据