記憶體階層與效能

在上述迴圈中,int為4位元組、快取行為64位元組,陣列不在快取中且起始位置對齊快取行邊界,若沒有預取,讀取陣列時的未命中率為多少?

int a[1024];
for (i = 0; i < 1024; i++)
    sum += a[i];
  1. A12.5%
  2. B6.25%
  3. C100%
查看答案與解析

正確答案:B. 6.25%

64位元組的快取行可放入 64 ÷ 4 = 16個int。依序讀取時,每條快取行的第一個元素會未命中1次,其餘15個命中,因此未命中率為 1 ÷ 16 = 6.25%。若為1024個,則未命中 1024 ÷ 16 = 64次。12.5%是誤以為一條快取行只能放8個時的值。要達到100%,需是每隔16個(每隔64位元組)讀取、每條快取行只使用1個元素的存取。

  • A. 12.5%是誤以為一條快取行有8個元素時的值。
  • B. 正確。每16個元素未命中1次,所以是1/16 = 6.25%。
  • C. 會達到100%的是每條快取行只使用1個元素的跳躍式存取。
練習這個領域 前往領域頁面

記憶體階層與效能的其他題目

  1. 矩陣乘法等所使用的迴圈分塊(loop blocking,亦稱tiling)的主要目的為下列何者?
  2. 如上將僅加總x座標的處理,改寫成陣列結構(各成分分別放入不同的陣列)後容易變快,其原因為下列何者?
  3. 將快取分為指令用(I快取)與資料用(D快取)的L1快取,其主要優點為下列何者?
  4. 在分頁大小4 KB、快取行大小64位元組的系統中,想讓L1快取採用虛擬索引、實體標籤(VIPT)方式,且索引與偏移量僅由頁面內的位元構成。若為8路組相聯,快取容量最大可以做到多少?
  5. L1快取常採用虛擬索引、實體標籤(VIPT)方式的主要理由為下列何者?

這個領域的比較