平均記憶體存取時間(AMAT)
/ AY-mat or A-M-A-T /
假設大多數時候筆就在你桌上(即時),但偶爾你得走去抽屜(慢)。你拿一支筆的「典型」時間是多少?不是最好情況、也不是最壞情況,而是一種混合:快的情況依其發生頻率加權,加上慢的情況依其發生頻率加權。平均記憶體存取時間(AMAT)正是這個混合而誠實的度量,衡量一次記憶體存取平均要花多久,同時計入命中與未命中。
公式簡單而值得背:AMAT = 命中時間 + (未命中率 x 未命中代價)。命中時間每次存取都要付(你至少都會查一下快取);在未命中的那一部分,你還額外付未命中代價。對多層快取,代價那一項本身會遞迴展開——L1 的未命中代價就是 L2 的 AMAT,L2 的未命中代價是 L3 或記憶體的 AMAT,依此類推。這一條方程式把所有重要的事綁在一起:快取多快、你多常命中、未命中多痛。
AMAT 是對的尺,因為它正確地把少見卻昂貴的未命中、相對於常見卻便宜的命中加權——這正是只看命中率會自欺掉進的陷阱。它也讓設計取捨變得具體:更大、更高相聯度的快取會抬高命中時間、卻降低未命中率;這是否淨賺,取決於哪一項主導,而 AMAT 讓你算得出來,而非用猜的。誠實的提醒:AMAT 是某個模型下的平均、忽略了重疊,所以在會掩蓋部分未命中延遲的亂序核心上,AMAT 公式會高估真實的變慢——它是乾淨的一階工具,不是效能的最終定論。
命中時間 1 週期、未命中率 5%、未命中代價 100 週期:AMAT = 1 + 0.05 x 100 = 6 週期。把未命中率降到 2%:AMAT = 1 + 0.02 x 100 = 3 週期——存取現在快了一倍,全來自更少的未命中,沒有一分來自更快的命中。
AMAT = 命中時間 + 未命中率 x 未命中代價——以代價加權未命中的誠實平均。
AMAT 是簡單模型下的平均,並假設未命中完全使核心停頓。在會把未命中和有用工作重疊的亂序機器上,AMAT 會高估真實的變慢——把它當作乾淨的估計器,而非精確的執行時間預測。