幾何平均(geometric mean)
你在一台新機器上跑一個程式,在一項測試上快 2 倍、在另一項上快 8 倍。它「典型」的加速是多少?你的直覺說平均一下:(2 加 8)除以 2 是 5。但那種普通平均對比值來說是錯的工具,而且它可能把贏家弄反。為加速比值取平均的正確工具是幾何平均——而看懂為什麼,是誠實量測中最犀利的一課。
n 個數字的幾何平均是它們乘積的 n 次方根,而不是總和除以 n。對 2 和 8 這兩個加速比,它是(2 乘以 8)的平方根,也就是 16 的平方根,等於 4——不是 5。它對比值正確的理由是對稱性:加速 2 倍和減速為 1/2 應該互相抵消成 1,而 2 和 1/2 的幾何平均是 1 的平方根,等於 1——剛剛好正確,反觀普通平均給出 1.25,錯誤地宣稱有淨增益。等價地說,幾何平均就是在對數空間裡做平均:取每個比值的對數、把它們平均、再取指數還原。
這就是為什麼 SPEC 和其他基準測試組用幾何平均來總結每程式的比值:無論你挑哪台機器當參考,它給出的整體排名都相同,所以不能靠挑一個方便的基準線來偏頗。比值的算術平均沒有這個性質,是可以被操弄的。誠實的告誡:幾何平均是正規化比值的正確總結,但當程式跑的時長差很多時,它不是合併原始執行時間的正確方式——要算總時間,你必須把實際的秒數相加(依每個程式跑多久加權),而不是把它們的比值平均。
兩個加速比,2 倍和 8 倍。算術平均 = (2+8)/2 = 5。幾何平均 = sqrt(2 x 8) = sqrt(16) = 4。檢驗對稱性:對加速比 2 和 1/2,幾何平均 = sqrt(2 x 0.5) = sqrt(1) = 1(正確地表示「沒有淨變化」),而算術平均錯誤地給出 (2+0.5)/2 = 1.25。
對比值而言,幾何平均尊重對稱性、且與參考機器無關;算術平均則不然。
對正規化的比值要用幾何平均,絕不用算術平均。但要總結實際的執行時間(真實秒數)時,要把時間相加——別把比值平均——因為一個跑很久的程式理應比一個跑很短的算得更重。