看板 CSSE 關於我們 聯絡資訊
※ 引述《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