簡體   English   中英

需要建議以將陣列保留在L1緩存中

[英]Need suggestion to keep arrays in L1 cache

我有以下問題,請您幫我一下:

我有以下整數數組(大小為1024),並且嘗試查找所有數組中存在的公共元素(以及發現公共元素的位置):

Array1: 15, 89, 100, 167, 202, ...
Array2: 16, 89, 109, 178,179, 202, ...
Array3: 15, 89, 100, 178, 189, 202, ...
Array4: 17, 89, 109, 167, 178, 202, ...
Array5: 7,   89, 100, 178, 179, 180, 202, ...

現在,公共元素及其在各個數組中的位置為:

Array1: 89(2), 202(5), ...
Array2: 89(2), 202(6), ...
Array3: 89(2), 202(6), ...
Array4: 89(2), 202(6), ...
Array5: 89(2), 202(7), ...

當數組相交時,是否可以將這些數組保留在L1緩存中。 我編寫了一個簡單的C ++代碼,該代碼將通用元素及其作為std :: pair的位置推入std :: vector。 此代碼是否正確以將元素保留在L1緩存中,還是應該修改我的代碼...如果是,則建議。

只要處理器需要它或處理器需要將其他數據放入緩存中,您的數據就將保留在緩存中。

我最好的建議是將數據保持在一起並一起執行所有數據訪問。 例如:輸入所有數據,處理所有數據,輸出所有數據。 更糟糕的情況是:輸入一些數據,處理一些數據,輸出一些數據,對所有數據重復。

您可能要使用數組而不是向量,因為向量動態分配內存,並且可能在不同的時間分配。 如果數組的大小沒有變化,請使用數組。

編輯1:
以下是一些不錯的鏈接,它們描述了緩存優化:
CPU緩存優化
有效的緩存使用量

第一個鏈接有很好的圖表,說明了緩存的工作方式。

您還應該搜索“數據緩存優化”。 這里有一些更多的鏈接:
將陣列保留在L1緩存中
低級C語言優化
數據局部性
EETimes-優​​化緩存性能

暫無
暫無

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

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