效能、功耗與能量

基準測試(benchmark)

你要怎麼公平比較兩台車?你不會相信型錄上的極速數字;你會把兩台車開上同一條測試跑道,用同樣的油、同一位駕駛,然後計時。基準測試就是電腦的那條測試跑道:一個標準的、大家同意的程式(或一組程式),讓你在受控條件下在每台機器上跑它,這樣比較執行時間時數字才有意義。

基準測試是一個被選來代表真實使用的工作負載,在競爭的系統上以完全相同的方式執行,並記錄執行時間(或由它導出的某種分數)。最好的基準測試是真實、完整的程式——一個編譯器在編譯程式碼、一個流體模擬、一個西洋棋引擎——因為它們像實際軟體那樣操練整台機器。較弱的基準測試是隔離單一特性的小型合成核心或微基準;這些對診斷有用,但很容易被誤讀成整體速度。因為沒有單一程式能代表所有用途,認真的基準測試會用一套含好幾個程式的測試組,並謹慎地把它們總結起來。

基準測試誠實的核心是:它一直在被操弄,你必須帶著懷疑去讀結果。廠商把編譯器調成能偵測基準測試程式碼、套用對其他東西毫無幫助的技巧;他們挑選最能襯托自家晶片的測試組;他們報出看起來最漂亮的總結(常是幾何平均)。基準測試也會隨著軟體和工作負載演進而過時。防禦之道是:使用像 SPEC 這種被廣泛接受、經過稽核的測試組;堅持基準測試要像你實際的工作負載;並牢記最高準則——唯一真正要緊的基準測試,是你自己的程式跑你自己的資料。

某廠商宣傳自家晶片在一個熱門基準測試上勝出 20%。一查之下,這勝利來自測試組裡某一個被編譯器特例處理的基準;在其他程式上兩顆晶片打平,而在你那個測試組根本不相似的特定資料庫工作負載上,那個「贏家」其實更慢。

基準測試的誠實程度,只取決於它和你真實工作負載的相似度——而且前提是沒人動過手腳。

最終唯一要緊的基準測試,是你自己的程式跑你自己的資料。已發表的基準測試是參考、不是保證,而且它們經常被編譯器調校、測試組挑選、以及挑漂亮的總結統計量所操弄。

又稱
benchmark suiteperformance test基準測試效能評測