MIPS 指標(the MIPS metric)
/ MIPS: mips /
MIPS 代表每秒百萬指令數。它聽起來像個完美的速度分數:只要數一台電腦每秒跑幾條指令,數字越大越好,對吧?它之所以誘人,是因為它是個能印在包裝盒上的單一、簡單數字。但它是衡量電腦時最大的陷阱之一,而搞懂它為何誤導,會教會你什麼才是真正的效能。(注意:作為指標的 MIPS,和作為指令集名稱的 MIPS 不是同一回事,這是個不幸的撞名。)
MIPS 的算法是指令數除以執行時間,再除以一百萬;等價地說,它是時脈頻率除以 CPI,再除以一百萬。致命缺陷就明擺在眼前:它數的是指令,但指令並不是等量的工作單位。一台用簡單指令集的機器,可能要三條指令才能做另一台機器一條就做完的事。於是第一台機器能堆出更高的 MIPS 數字,實際做的工作卻更少。MIPS 獎勵的是快速跑很多便宜指令,即使它們成就甚微——這正好和你想要的相反。
更糟的是,同一台機器上 MIPS 會因程式而異(不同的指令組合給出不同的 CPI),所以一台電腦並沒有單一的 MIPS。而且你根本無法跨不同指令集比較 MIPS,因為它們的指令代表的工作量不一樣。這個教訓就是效能鐵律:唯一誠實的量度是跑完一個真實程式所花的時間,也就是指令數乘以 CPI 乘以時脈週期時間。MIPS、原始 FLOPS、時脈 GHz 全都是可被操弄的替代指標;工程師半開玩笑地把 MIPS 解作「毫無意義的處理器速度指標」(meaningless indicator of processor speed)。
機器 A(簡單指令集)用 6e9 條指令完成一項任務;機器 B(較豐富的指令集)用 2e9 條指令,兩者都花 1 秒。A 得分 6000 MIPS,B 得分 2000 MIPS——但它們在相同時間內完成了完全相同的任務。照 MIPS 看,A 似乎「快」3 倍;照唯一誠實的量度(執行時間)看,兩者打平。
每秒更多指令並不等於每秒更多工作。MIPS 可能把較慢的機器排得更高。
絕不要拿 MIPS(或原始 FLOPS、或 GHz)跨不同機器當作真實速度的量度來比較。只有你在意的那個實際程式的牆上時鐘時間才誠實。作為指標的 MIPS 和 MIPS 指令集儘管同名,卻毫無關係。