記憶體階層與效能
矩陣乘法等所使用的迴圈分塊(loop blocking,亦稱tiling)的主要目的為下列何者?
- A以能放入快取的小區塊為單位進行計算,增加資料的重複使用
- B減少迴圈的次數,以減少在迴圈結尾執行的分支指令數量
- C在不改變計算順序的情況下,使所用的記憶體總量減半
查看答案與解析
正確答案:A. 以能放入快取的小區塊為單位進行計算,增加資料的重複使用
若直接計算大型矩陣的乘法,一度載入的元素在被再次使用之前就會被逐出快取,必須一再從主記憶體重新讀取。迴圈分塊將矩陣切成能放入快取的小區塊,在區塊內完成計算,使載入的資料得以多次重複使用,大幅減少容量未命中。減少分支指令是迴圈展開(loop unrolling)的目的,所用的記憶體總量也不會改變。
- A. 正確。以能放入快取的單位計算,增加資料的重複使用。
- B. 減少分支是迴圈展開的目的。
- C. 計算順序會改變,所用的記憶體總量則不變。