作者H45 (!H45)
看板CSSE
标题Re: [问题] 使用 IPC 或 CPI 衡量效能的时机
时间Sat Jul 15 18:14:02 2006
※ 引述《CoTi (歌蒂)》之铭言:
: ※ 引述《H45 (!H45)》之铭言:
: : 有的时候我们把系统的 CPI 减少,企图改善整体流程
: ^^^^^ ??!! performance ?
Yes, process improvement.
: : 却忽略了 clock cycle time 的延长,导至流程其实没有改善
: : 另外,你所说的 CPI 和 IPC 不就是彼此互取倒数的结果吗?
: : 既然 CPI = 1/IPC
: : 那怎麽还会有 CPI 降低,但是 IPC 并没有显着增加的情形呢?
: : 烦请举例说明
: 比如 A, B 两系统,其中 A 有 prefetcher 而 B 没有,其他地方都一样 (miss
: latency, cycle time... etc)
: anyway, 两系统唯一的差别就是 A 的 L2 miss rate 稍低
: 下面符号定义:
: I 所执行 benchmark 的指令数
: C 所执行 benchmark 耗用的 cycle 数 (不含 L2 miss penalty)
: missA 执行 benchmark 中在 A 上所遭遇的到的 L2 miss
: missB 执行 benchmark 中在 B 上所遭遇的到的 L2 miss
: p 每次 L2 miss 的 miss penalty
: L1 miss 在两个系统会是一样的,所以并入 C 中计算
: IPC(A) = I / ( C + missA*p ) IPC(B) = I / ( C + missB*p )
: CPI(A) = ( C + missA*p ) / I CPI(B) = ( C + missB*p ) / I
: 随便代一些数值进来会比较明显: (I = 200, C = 100, missA = 1, missB = 2 )
: p = 80
: IPC(A) = 1.1111 IPC(B) = 0.7692 delta = 0.3419
: CPI(A) = 0.9 CPI(B) = 1.3 delta = 0.4
: p = 200 (slower memory or bad bus design)
: IPC(A) = 0.6666 IPC(B) = 0.4 delta = 0.2666
: CPI(A) = 1.5 CPI(B) = 2.5 delta = 1
你的算式应该没有问题
也就是说 IPC, CPI, delta 都没算错
回到你的例子
考虑 p = 200 时
IPC(A) = 0.6666 IPC(B) = 0.4 delta = 0.2666
CPI(A) = 1.5 CPI(B) = 2.5 delta = 1
这个例子下,以 IPC 的观点而言
在 A 系统,每个 cycle 执行的指令数是 0.6666
在 B 系统,每个 cycle 执行的指令数是 0.4
A 和 B 每一个 cycle 相差 0.2666 个指令数
但是我们也可以发现,A 比 B 的执行速度快了
1.6666 倍 (0.6666 / 0.4)
同样的例子,我们来看看 CPI
在 A 系统,每个指令需要的 cycle 数为 1.5
在 B 系统,每个指令需要的 cycle 数为 2.5
A 和 B 每一个指令相差 1 个 cycle 数
但是我们也可以发现,A 比 B 的执行速度快了
1.6666 倍 (2.5 / 1.5)
也就是说 IPC 和 CPI 是一体两面的东西
不管你取哪一个来衡量系统的效能,其结果都是一样的
端看你如何选择而已
不知道有没有到解答您的问题呢?
: 我画了图:
: (w/ gnuplot, 似乎会有 overflow 的问题,不过值这麽小应该不会碰上吧...)
: IPC:
: http://img91.imageshack.us/my.php?image=zipc10020012rn2.png
: CPI:
: http://img204.imageshack.us/my.php?image=zcpi10020012zx4.png
: 难不成我算式列错... ?
--
另外,如有错误,尚祈大家不吝指正
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.205.85