簡體   English   中英

什么是LUT和類似的L1 / L2緩存行為?

[英]What is L1/L2 cache behavior for LUTs and the alike?

假設一個LUT說512KB的64位雙類型。 一般來說,CPU如何緩存L1或L2中的結構?

例如:我訪問中間元素,是否嘗試緩存整個LUT或只是其中的一部分 - 比如說中間元素然后是n個后續元素?

CPU使用什么樣的算法來確定它在L2緩存中保留的內容? 它是否遵循一定的前瞻策略

注意:我假設是x86,但我有興趣知道其他架構如何工作POWER,SPARC等。

這取決於您用於LUT的數據結構(查找表?)

高速緩存是最好的,連續布局的東西是內存(例如作為數組或std :: vector)而不是散布在周圍。

簡單來說,當你訪問一個內存位置時,一塊RAM(一個“緩存行”,價值 - 在x86上為64字節)被加載到緩存中,可能會驅逐一些以前緩存的數據。

通常,有幾個級別的緩存,形成層次結構。 隨着每個級別,訪問時間增加,但容量也增加。

是的,有前瞻,它受到相當簡單的算法和無法跨頁邊界的限制(在x86上內存頁面的大小通常為4KB)。

我建議你閱讀每個程序員應該了解的內存 它有很多關於這個主題的好信息。

高速緩存通常形成為高速緩存行的集合。 每個高速緩存行的粒度與高速緩存行的大小對齊,因此,例如,具有128字節高速緩存行的高速緩存將具有緩存數據的地址以對齊到128字節。

CPU高速緩存通常使用一些LRU驅逐機制(最近最少使用,如驅逐高速緩存未命中的最老的高速緩存行),以及具有從存儲器地址到特定高速緩存行集的一些映射。 (如果您嘗試從4k或16M邊界上對齊的多個地址讀取,則會導致x86中出現許多錯誤共享錯誤之一。)

因此,當您有緩存未命中時,CPU將讀取包含錯過的地址范圍的內存緩存行。 如果您碰巧讀取了緩存行邊界,這意味着您將讀入兩個緩存行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM