記憶體階層與效能
二維陣列的一列大小為4096位元組(2的冪次)時,沿著行方向走訪元素,即使快取容量有餘裕,未命中也可能變多。作為對策,下列何者有效?
- A在每列末端加上填充,使列的大小偏離2的冪次
- B將陣列的型別換成相同大小的另一種型別
- C將整個陣列重新對齊到較大的2的冪次位址邊界
查看答案與解析
正確答案:A. 在每列末端加上填充,使列的大小偏離2的冪次
若一列剛好是4096位元組,沿著行方向走訪的元素,其位址每次都相差4096的倍數,索引的位元相同,因而集中在同一組。當走訪的列數多於相聯度時,即使容量有餘裕,也會發生互相逐出的衝突未命中。只要在每列加上約一條快取行的填充(padding),各元素所對應的組就會錯開而分散。即使對齊到2的冪次位址,問題也不會改變,換成相同大小的型別也沒有效果。
- A. 正確。讓列的大小錯開後,元素會分散到不同的組。
- B. 相同大小的型別,位址的排列不會改變。
- C. 即使對齊到2的冪次,集中在同一組的問題依然存在。