記憶體階層與效能

如上將僅加總x座標的處理,改寫成陣列結構(各成分分別放入不同的陣列)後容易變快,其原因為下列何者?

struct P { float x, y, z, mass; };
struct P p[N];
for (i = 0; i < N; i++)
    sx += p[i].x;
  1. A因為維持結構的陣列時,編譯器無法產生只讀取x的指令
  2. B因為分成不同的陣列後,浮點數的計算會變成更高的精度
  3. C因為只有x連續排列,載入的快取行中不會混入不需要的成分
查看答案與解析

正確答案:C. 因為只有x連續排列,載入的快取行中不會混入不需要的成分

在結構的陣列(AoS)中,x、y、z、mass共16位元組為一組排列,因此即使只讀取x,64位元組的快取行中仍有四分之三是用不到的資料。若將各成分分成不同的陣列(SoA),則只有x連續排列,載入的快取行可以全部用上,記憶體的傳輸量約降為四分之一。也更容易進行SIMD向量化。AoS也能產生讀取x的指令,改變陣列的形式也不會改變計算的精度。

  • A. AoS也能照常產生讀取x的指令。
  • B. 改變資料的排列方式,計算精度並不會改變。
  • C. 正確。只有需要的x連續排列,快取行不會被浪費。
練習這個領域 前往領域頁面

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

  1. 將快取分為指令用(I快取)與資料用(D快取)的L1快取,其主要優點為下列何者?
  2. 在分頁大小4 KB、快取行大小64位元組的系統中,想讓L1快取採用虛擬索引、實體標籤(VIPT)方式,且索引與偏移量僅由頁面內的位元構成。若為8路組相聯,快取容量最大可以做到多少?
  3. L1快取常採用虛擬索引、實體標籤(VIPT)方式的主要理由為下列何者?
  4. 快取的命中時間為2個週期、未命中率為4%、未命中代價為150個週期時,平均記憶體存取時間為多少個週期?
  5. 在快取理想時平均CPI為1.0的處理器中,每條指令平均有1.3次記憶體存取,其未命中率為2%、未命中代價為100個週期時,實際的平均CPI為多少?

這個領域的比較