![](/img/trans.png)
[英]Adding arrays of L1 cache size. Large arrays are absolute faster than short arrays
[英]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.