危障對有效 CPI 的影響
/ CPI = see-pee-eye /
在完美、無危障的管線裡,每個週期完成一條指令:每指令週期數,即 CPI,等於 1。那是夢想。但每次停頓、每次清空都是沒有指令完成的一個週期,所以真實 CPI 悄悄爬到 1 之上。有效 CPI 是誠實、全包的平均——實際花掉的週期除以完成的指令——它是唯一一個能道盡危障傷你多深的數字。
記帳很直接。從理想 CPI 為 1 出發,加上每種危障每條指令平均貢獻的停頓週期:有效 CPI = 1 +(每指令的載入-使用停頓)+(每指令的分支懲罰)+(任何結構停頓)。每一項都是一個頻率乘上一個懲罰。以分支為例:若五分之一的指令是分支、你的預測器每十次錯一次、每次誤測清空 3 個週期,分支項就是 0.20 乘 0.10 乘 3 = 0.06。把所有這類項加起來,你就有了真實 CPI。這直接代入效能的鐵律——執行時間等於指令數乘 CPI 乘週期時間——所以較高的有效 CPI 直接拉長程式執行時間。
有效 CPI 是整場管線遊戲的計分板,它讓各種權衡變得誠實。前饋把資料危障項逼向零;好的預測縮小分支項;額外的硬體移除結構項。但它也暴露深管線的陷阱:更多階段買到更短的週期時間,卻抬高誤測懲罰(要清空的階段更多),於是把分支項推高。加深到底有沒有幫助,取決於更快的時脈是否勝過更胖的 CPI——這正是管線深度權衡,而有效 CPI 就是你量度它的方式。
理想 CPI 為 1。加上資料危障停頓:15% 的指令遇到載入-使用停頓(0.15 週期)。加上分支:20% 是分支、10% 誤測、3 週期懲罰(0.20 x 0.10 x 3 = 0.06)。有效 CPI = 1 + 0.15 + 0.06 = 1.21——純因危障,比理想管線慢了 21%。
有效 CPI 把理想的 1 與每種危障的頻率乘懲罰相加;它直接餵進鐵律:執行時間 = 指令數 x CPI x 週期時間。
光是低 CPI 並不代表機器快。鐵律把 CPI 乘上指令數與週期時間;一個設計可能贏在 CPI 卻輸在較慢的時脈或較多的指令。永遠以執行時間判斷,而非孤立地看 CPI。