記憶體階層與效能

在轉置大型矩陣的處理(b[j][i] = a[i][j])中,快取未命中容易增多的理由與代表性對策的組合,下列何者正確?

  1. A理由是計算量大。對策是將浮點數改為整數
  2. B理由是讀取變成跳躍式。對策是只讓寫入側連續
  3. C理由是讀取或寫入其中一邊會沿著行方向。對策是逐區塊轉置
查看答案與解析

正確答案:C. 理由是讀取或寫入其中一邊會沿著行方向。對策是逐區塊轉置

在轉置中,若沿列方向讀取a,就得沿行方向寫入b;反過來若沿列方向寫入b,就得沿行方向讀取a,兩者之中必有一邊是跳躍式存取。因此將矩陣分成能放入快取的小區塊,在區塊內進行轉置,就能在用盡載入的快取行後再前進到下一個,大幅減少未命中。只讓寫入側連續,只是讀取變成跳躍式,無法根本解決。這也不是計算量的問題。

  • A. 轉置幾乎沒有計算,改變型別也無法解決。
  • B. 即使讓一邊連續,另一邊也只是變成跳躍式。
  • C. 正確。必有一邊是沿行方向,因此逐區塊轉置。
練習這個領域 前往領域頁面

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

  1. 在一般電腦的記憶體階層中,越上層(越靠近CPU的一側)越成立的性質,下列何者正確?
  2. 評估快取效能時,不能只看未命中率,而必須以平均記憶體存取時間來比較,其理由下列何者正確?
  3. 讓兩個程式在同一個核心上交替執行時,有時會比各自單獨執行更慢。從快取的角度來看,下列何者是最恰當的說明?
  4. 下列何者最適合作為時間局部性的例子?
  5. 以上述方式走訪C語言的二維陣列a[i][j]時,若內層迴圈使用j,會比內層使用i更容易變快。其原因為下列何者?

這個領域的比較