記憶體階層與效能
在轉置大型矩陣的處理(b[j][i] = a[i][j])中,快取未命中容易增多的理由與代表性對策的組合,下列何者正確?
- A理由是計算量大。對策是將浮點數改為整數
- B理由是讀取變成跳躍式。對策是只讓寫入側連續
- C理由是讀取或寫入其中一邊會沿著行方向。對策是逐區塊轉置
查看答案與解析
正確答案:C. 理由是讀取或寫入其中一邊會沿著行方向。對策是逐區塊轉置
在轉置中,若沿列方向讀取a,就得沿行方向寫入b;反過來若沿列方向寫入b,就得沿行方向讀取a,兩者之中必有一邊是跳躍式存取。因此將矩陣分成能放入快取的小區塊,在區塊內進行轉置,就能在用盡載入的快取行後再前進到下一個,大幅減少未命中。只讓寫入側連續,只是讀取變成跳躍式,無法根本解決。這也不是計算量的問題。
- A. 轉置幾乎沒有計算,改變型別也無法解決。
- B. 即使讓一邊連續,另一邊也只是變成跳躍式。
- C. 正確。必有一邊是沿行方向,因此逐區塊轉置。