Skip to content

Commit

Permalink
Refine wording: power of 2
Browse files Browse the repository at this point in the history
  • Loading branch information
jserv committed Dec 6, 2023
1 parent 66ad620 commit 1c12cd6
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 3 deletions.
2 changes: 1 addition & 1 deletion cpu-caches/cache-operation-at-high-level.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ L2 | ~14
<figcaption>圖 3.4:隨機寫入的存取時間</figcaption>
</figure>

有關快取行為影響的圖表,見圖 3.4。我們稍候會談到產生資料的程式;這是個不停地以隨機的方式存取可控制記憶體總量的程式的簡易模擬。每筆資料有著固定的容量。元素的數量視選擇的工作集容量而定。Y 軸表示處理一個元素所花費的 CPU 週期的平均;注意到 Y 軸為對數刻度。這同樣適用於所有這類圖表的 X 軸。工作集的容量總是以二的冪次表示
有關快取行為影響的圖表,見圖 3.4。我們稍候會談到產生資料的程式;這是個不停地以隨機的方式存取可控制記憶體總量的程式的簡易模擬。每筆資料有著固定的容量。元素的數量視選擇的工作集容量而定。Y 軸表示處理一個元素所花費的 CPU 週期的平均;注意到 Y 軸為對數刻度。這同樣適用於所有這類圖表的 X 軸。工作集的容量總是以二的冪表示

這張圖顯示三個不同的平穩階段。這並不讓人意外:這個處理器有 L1d 與 L2 快取,但沒有 L3。經由一些經驗,我們可以推論這個 L1d 容量為 2<sup>13</sup> 位元組,而 L2 容量為 2<sup>20</sup> 位元組。假如整個工作集能塞進 L1d 中,對每個元素的每次操作的週期數會低於 10。一旦超過 L1d 的容量,處理器就必須從 L2 載入資料,而平均時間則迅速成長到 28 左右。一旦 L2 也不夠大,時間便飆升到 480 個週期以上。這即是許多、或者大部分操作必須從主記憶體載入資料的時候。更糟的是:由於資料被修改,髒的快取行也必須被寫回。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ struct order {

使用這張圖,我們能夠確定使用的處理器擁有一個關聯度 8、且總容量為 32kB 的 L1d 快取。這表示,這個測試能夠 –– 必要的話 –– 用以確定這些值。可以為 L2 快取量測相同的影響,但在這裡更為複雜,因為 L2 快取是使用實體位址來索引的,而且它要大得多。

但願程式開發者將這個數據視為值得關注集合關聯度的一種暗示。將資料擺放在二的冪次的邊界上足夠常見於現實世界中,但這正好是容易導致上述影響與效能下降的情況。非對齊存取可能會提高衝突性錯失的可能性,因為每次存取都可能需要額外的快取行。
但願程式開發者將這個數據視為值得關注集合關聯度的一種暗示。將資料擺放在二的冪的邊界上足夠常見於現實世界中,但這正好是容易導致上述影響與效能下降的情況。非對齊存取可能會提高衝突性錯失的可能性,因為每次存取都可能需要額外的快取行。

<figure>
<img src="../../assets/figure-6.6.png" alt="圖 6.6:Bank Address of L1d on AMD">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ if (likely(a > 1))

`-falign-functions=N`

這個選項命令編譯器將所有函式對齊到下一個大於 `N` 的二的冪次的邊界。這表示會產生一個至多 `N` 位元組的間隔。對小函式而言,使用一個很大的 `N` 值是個浪費。對只有難得才會執行的程式也相同。在可能同時包含常用與沒那麼常用的介面的函式庫中,後者可能經常發生。選項值的明智選擇可以藉由避免對齊來讓工作加速或是節省記憶體。能夠藉由使用 1 作為 `N` 的值、或是使用 `-fno-align-functions` 選項來關掉所有的對齊。
這個選項命令編譯器將所有函式對齊到下一個大於 `N` 的二的冪的邊界。這表示會產生一個至多 `N` 位元組的間隔。對小函式而言,使用一個很大的 `N` 值是個浪費。對只有難得才會執行的程式也相同。在可能同時包含常用與沒那麼常用的介面的函式庫中,後者可能經常發生。選項值的明智選擇可以藉由避免對齊來讓工作加速或是節省記憶體。能夠藉由使用 1 作為 `N` 的值、或是使用 `-fno-align-functions` 選項來關掉所有的對齊。

有關前述的第二種情況的對齊 –– 無法循序達到的基礎區塊的開頭 –– 能夠使用一個不同的選項來控制:

Expand Down

0 comments on commit 1c12cd6

Please sign in to comment.