计算机组成原理:CPI、MIPS、IPC与执行时间全解析
一、核心概念辨析
| 概念对 | 说明 |
|---|---|
| CPI 与 平均CPI | 微观单条指令:执行某一条特定指令所需的时钟周期数(如加法指令 CPI=1),无需加"平均"。宏观整体程序:程序包含不同比例的各类指令,评价整体性能时,必须使用加权平均值。因此"CPU的CPI"默认指代平均CPI。 |
| 平均指令周期 与 IPC | 平均指令周期(对应CPI):执行一条指令平均需要的时钟周期数(或时间)。数值越大,CPU越慢。IPC (Instructions Per Cycle):每个时钟周期平均执行的指令条数。数值越大,CPU越快。关系:互为倒数,IPC = 1 / CPI。 |
| 平均指令周期 与 CPU执行时间 | 平均指令周期:执行一条指令平均花的时间(单位:\mu s/条 或 ns/条)。CPU执行时间:执行整个程序的总耗时。关系:CPU执行时间 = 指令总数 \times 平均指令周期。 |
| 平均指令周期 与 MIPS | MIPS是速度指标(百万条/秒),平均指令周期是时间指标(秒/条),二者互为倒数。平均指令周期 = 1 / MIPS。直接计算时,1 / MIPS 的结果单位就是微秒(\mu s)。 |
二、公式与单位汇总表
| 指标名称 | 核心公式 | 基础单位 | 单位换算/备注 |
|---|---|---|---|
| 时钟周期 (T) | T = \frac{1}{主频(f)} | 秒 (s) | 1s = 10^3ms = 10^6\mu s = 10^9ns |
| CPI | CPI = \frac{总时钟周期数}{总指令数} | 周期数/条 | 无量纲 |
| 平均指令周期 | = \frac{总时间}{总指令数} 或 = \frac{1}{MIPS} | 秒/条 | 通常为 \mu s/条 或 ns/条 |
| MIPS | MIPS = \frac{主频(f)}{CPI \times 10^6} | 百万条/秒 | 速度指标,注意 10^6 |
| IPC | IPC = \frac{1}{CPI} | 条/周期 | 速度指标 |
| CPU执行时间 | = 指令总数 \times CPI \times 时钟周期 | 秒 (s) | 最终结果常写为 ms, \mu s 或 ns |
| CPU执行时间 | = \frac{指令总数}{MIPS \times 10^6} | 秒 (s) | 需注意 10^6 的换算 |
三、易混淆/相似公式对比
| 对比项 | 公式 | 说明 |
|---|---|---|
| CPI vs IPC | CPI = \frac{周期数}{指令数} | 做一件事要几个周期 |
| IPC = \frac{指令数}{周期数} | 一个周期能做几件事 | |
| IPC = 1 / CPI | 互为倒数 | |
| 平均指令周期(周期数) vs 平均指令周期(时间) | 单位是"周期数/条":它等于 CPI | |
| 单位是"时间(\mu s 或 ns)/条":它等于 CPI \times 时钟周期(即平均指令执行时间) | ||
| 主频 vs 时钟周期 | 主频单位是 Hz(如 1GHz),时钟周期单位是秒(如 1ns) | |
| 倒数关系:时钟周期 = \frac{1}{主频}。主频越高,时钟周期越短。 |
四、真题避坑:文字陷阱解析
题目场景:程序由 M 条指令组成。原算术逻辑指令占 43%,其中 25% 需要额外用 LOAD 指令取数。现在引入一种"寄存器-存储器型"新指令,将 LOAD 和算术合并。同时转移指令 CPI 变为 3。求新系统的平均 CPI。
🚨 陷阱剖析:"增加"实际是"替换"
前提是"程序由 M 条指令组成",编译器优化时,是把原来的 [1条LOAD + 1条算术指令] 替换成了 [1条新指令]。程序的总指令数 M 固定不变,只是内部比例重新洗牌。
正确解题推演(以 M=100 为基准):
| 步骤 | 内容 |
|---|---|
| 1. 原比例 | 算术逻辑 43\%(其中 10.75\% 被新指令替换),LOAD 21\%,STORE 12\%,转移 24\%。 |
| 2. 替换后新比例洗牌 | 新指令:10.75\%(继承原有算术逻辑的份额,CPI=2)剩余算术逻辑:43\% - 10.75\% = 32.25\%(CPI=1)剩余LOAD:21\% - 10.75\% = 10.25\%(CPI=2)STORE:12\%(CPI=2)转移指令:24\%(CPI=3,注意题目末尾的变化) |
| 3. 计算新CPI | CPI_{新} = (10.75\% \times 2) + (32.25\% \times 1) + (10.25\% \times 2) + (12\% \times 2) + (24\% \times 3)CPI_{新} = 0.215 + 0.3225 + 0.205 + 0.24 + 0.72 = \mathbf{1.7025} |
五、考试防坑口诀
| 口诀 | 说明 |
|---|---|
| 1 | 求 MIPS 换算时:千万别忘了乘以或除以 10^6(MIPS 是"百万"条)。 |
| 2 | 看到"平均指令周期":先看单位,是求"时间"(\mu s/条)还是"周期数"(CPI)。 |
| 3 | 看到"速度"求"时间":直接倒数,MIPS 的倒数就是 \mu s/条。 |
| 4 | 遇到程序优化题:牢记"源逻辑不变,总指令数 M 不变",只改变内部比例。 |
平均指令周期与 MIPS 的倒数关系推导
已知定义
- MIPS:每秒执行的百万条指令数。单位:\text{百万条/秒}
- 平均指令周期:执行一条指令的平均耗时。单位:\text{秒/条} 或 \mu s/\text{条}
推导过程
假设程序总指令数为 N,总执行时间为 T(秒)。
1. 由 MIPS 定义得出每秒执行指令数:
MIPS = \frac{N}{T \times 10^6}
2. 将总时间 T 用 N 和 MIPS 表示:
T = \frac{N}{MIPS \times 10^6} \text{ (秒)}
3. 计算平均指令周期(总时间 ÷ 总指令数):
\text{平均指令周期} = \frac{T}{N} = \frac{\frac{N}{MIPS \times 10^6}}{N} = \frac{1}{MIPS \times 10^6} \text{ (秒)}
4. 进行单位换算(1\text{ 秒} = 10^6 \mu s):
\text{平均指令周期} = \frac{1}{MIPS \times 10^6} \times 10^6 = \frac{1}{MIPS} \text{ (}\mu s\text{)}
核心公式
\text{平均指令周期(}\mu s/\text{条)} = \frac{1}{MIPS}