cpi
本文最后更新于5 天前,其中的信息可能已经过时,如有错误请发送邮件到184874483@qq.com

这题答案是:

原指令系统平均 CPI = 1.57

新指令系统平均 CPI ≈ 1.91

这道题的关键不是单纯加权平均,而是第二问中“增加寄存器-存储器型算术逻辑指令”会使程序的动态指令条数减少,所以新平均 CPI 的分母不能再用原来的 M,而要用新的指令总数。


一、原指令系统的平均 CPI

题目给出的动态指令比例和 CPI 为:

指令类型比例CPI
算术逻辑指令43%1
LOAD 指令21%2
STORE 指令12%2
转移指令24%2

平均 CPI 按动态指令比例加权:

平均 CPI = 0.43 × 1 + 0.21 × 2 + 0.12 × 2 + 0.24 × 2
         = 0.43 + 0.42 + 0.24 + 0.48
         = 1.57

所以原指令系统的平均 CPI 为:

1.57

二、新指令系统的分析

题目说:程序共有 M 条指令,其中算术逻辑指令占 43%,也就是:

算术逻辑指令数 = 0.43M

其中有 25% 的算术逻辑指令满足:

一个操作数已在寄存器中,另一个操作数在存储器中,需要先用 LOAD 取到寄存器。

因此这部分算术逻辑指令数为:

0.43M × 25% = 0.1075M

在原指令系统中,这类操作需要两条指令完成:

LOAD 指令 + 算术逻辑指令

现在新增一种“寄存器-存储器型算术逻辑指令”,可以直接完成:

寄存器操作数 + 存储器操作数

所以原来的:

LOAD + 算术逻辑指令

可以合并成:

1 条寄存器-存储器型算术逻辑指令

因此减少的指令条数就是那部分 LOAD 指令:

减少指令数 = 0.1075M

新程序的总指令数为:

M' = M - 0.1075M = 0.8925M

这是本题最容易错的地方:新平均 CPI 的分母是 0.8925M,不是 M


三、重新统计新指令系统下各类指令数量

原来算术逻辑指令有 0.43M 条,其中 25% 变成新的寄存器-存储器型指令。

普通算术逻辑指令剩余:

0.43M × 75% = 0.3225M

新增寄存器-存储器型算术逻辑指令:

0.43M × 25% = 0.1075M

LOAD 指令原来有 0.21M 条,其中 0.1075M 条被合并掉,所以剩余:

0.21M - 0.1075M = 0.1025M

STORE 指令不变:

0.12M

转移指令数量不变:

0.24M

但是题目说转移指令的 CPI 变为 3。


四、计算新指令系统总时钟周期数

各类指令的时钟周期数如下:

普通算术逻辑指令:0.3225M × 1 = 0.3225M

寄存器-存储器型算术逻辑指令:0.1075M × 2 = 0.215M

LOAD 指令:0.1025M × 2 = 0.205M

STORE 指令:0.12M × 2 = 0.24M

转移指令:0.24M × 3 = 0.72M

总时钟周期数为:

总周期数 = 0.3225M + 0.215M + 0.205M + 0.24M + 0.72M
        = 1.7025M

新平均 CPI 为:

新平均 CPI = 总周期数 / 新指令总数
           = 1.7025M / 0.8925M
           ≈ 1.9076
           ≈ 1.91

所以新指令系统的平均 CPI 约为:

1.91

五、这题为什么容易错

这题最常见的错误是直接用原来的 M 当分母,算成:

1.7025M / M = 1.7025

这个结果是错的,因为增加新指令后,原来的部分 LOAD + 算术逻辑指令 被合并成了一条指令,动态指令条数减少了。

平均 CPI 的定义是:

平均 CPI = 总时钟周期数 / 程序执行的总指令条数

所以程序指令数变化时,必须重新统计指令总数。


六、这类题的做法总结

遇到“增加新指令”“合并指令”“减少指令条数”“改变某类指令 CPI”这类题,不能只机械套加权平均。应先判断动态指令数是否发生变化。

本题中:

原平均 CPI = 1.57

新指令总数 = 0.8925M

新总周期数 = 1.7025M

新平均 CPI = 1.7025M / 0.8925M ≈ 1.91

虽然新增指令减少了一部分 LOAD 指令,但转移指令 CPI 从 2 变成 3,同时新平均 CPI 的分母也变小了,所以最终平均 CPI 反而变大。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇