記憶體階層與效能
在上述迴圈中,int為4位元組、快取行為64位元組,陣列不在快取中且起始位置對齊快取行邊界,若沒有預取,讀取陣列時的未命中率為多少?
int a[1024];
for (i = 0; i < 1024; i++)
sum += a[i];
- A12.5%
- B6.25%
- 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個元素的跳躍式存取。