# Measuring Cache Performance CPU時間的組成部分: * 程式執行週期(Program execution cycles): * 包括快取命中時間。 * memory 暫停週期(Memory stall cycles): * 主要來自 cache misses 。 在簡化的假設下: * memory 暫停週期可以通過以下方式計算: * memory 存取數量 / 程式執行的週期 × 失效率 × 失效懲罰 * 指令數量 / 程式執行的週期 × 每指令失效次數 × 失效懲罰 這些公式可以用來估計程序執行期間由於 cache misses 而引起的 memory 暫停週期。通過這些計算,可以更好地了解快取對於系統性能的影響,並進行相應的優化以提高系統性能。 ## Cache Performance Example * 指令快取(I-cache)失效率 = 2% * 數據快取(D-cache)失效率 = 4% * 失效懲罰 = 100個週期 * 基本CPI(理想快取)= 2 * 裝載和儲存指令占總指令的36% 計算每指令的失效週期: I-cache:0.02 × 100 = 2個週期 D-cache:0.36 × 0.04 × 100 = 1.44個週期 實際CPI = 2(基本CPI)+ 2(I-cache失效週期)+ 1.44(D-cache失效週期)= 5.44 因此,實際的CPI為5.44。理想情況下,CPU的速度應該是實際CPI除以基本CPI,即5.44 / 2 = 2.72倍。這意味著如果能達到理想的快取性能,CPU將會快2.72倍。 ## Average Access Time 平均存取時間(AMAT)是衡量記憶體系統性能的指標,考慮了命中時間和失效時間。 給定的示例: CPU的時脈週期為1納秒(ns) 命中時間(Hit time)為1個時脈週期 失效懲罰(Miss penalty)為20個時脈週期 指令快取(I-cache)的失效率為5% 計算平均存取時間(AMAT): AMAT = 命中時間 + 失效率 × 失效懲罰 = 1 + 0.05 × 20 = 2 ns 因此,平均存取時間為2納秒,這意味著平均每個記憶體存取需要2個時脈週期。 ## Direct Mapped Direct Mapped 是一種 Cache 映射方式,它將主memory 中的每個資料塊映射到 Cache 中的唯一一個位置。這意味著對於主memory 中的每個資料塊,都有一個特定的 Cache 位置可以存儲它。具體來說: 對於較低層次的每個資料項,都只會有一個 Cache 位置可以存儲它,並且這個位置是根據資料的memory 地址進行映射的。 Cache 位置的選擇通常是使用資料的地址除以 Cache 的塊數,然後取餘數(即取模運算)。 ![image](https://hackmd.io/_uploads/rkq-EHP3T.png) ## Associative Caches Associative Caches 是一種 Cache 組織方式,與 Direct Mapped 相對。Associative Caches 分為 Fully associative 和 n-way set associative 兩種主要形式。 Fully associative : * 允許資料塊存放在 Cache 中的任何位置。 * 需要同時搜索所有 Cache 條目。 * 每個條目都需要一個比較器(成本高昂)。 n-way set associative : * 每個組中包含n個條目。 * 資料塊的編號決定了它應該存放在哪個組。 * 在給定的組中同時搜索所有條目。 * 每組中需要n個比較器(成本較低)。 相比於全關聯式 Cache ,n路組關聯式 Cache 具有更低的成本,因為它僅在每個組中搜索條目,而不是在整個 Cache 中搜索。然而,全關聯式 Cache 具有更靈活的映射方式,可以更好地利用 Cache 的空間,並且可以更有效地處理 Cache 命中的情況。