※ 引述《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