簡體   English   中英

編程以填充我們系統的L1或L2緩存

[英]Programming to fill our system's L1 or L2 cache

我們如何系統地編寫代碼來將數據加載到我們的L1或L2緩存中?

我特意試圖填充我的系統的L1 I緩存,以進行更高分析。 任何建議都可以 - 關於編寫匯編代碼或簡單的C編程。 有關此主題的相關文章將更有幫助。

緩存存儲最近訪問的數據。 要填充緩存,只需訪問數據。 或者在這種情況下,說明。 使用無操作指令(以及最后的循環分支指令)填充內存塊並跳轉到它。

棘手的部分是在加載后將數據保存在那里。 只要您的基准測試運行,您就無法訪問32K(或其他)數據集之外的任何內容。

我無法想象你從人工填充緩存然后保持它填充相同的數據集得到什么,但你去了。

您需要找出CPU和替換策略的緩存關聯性。 我無法想到這個問題的一般解決方案,它可以在我使用過的所有CPU上運行。 即使廣告宣傳為與LRU替換策略完全關聯的緩存也不是現實中的,並且很難找出完全填充緩存的內存訪問模式。

如果你想要一些非常具體的基准測試(由於其他原因這是一個壞主意),我建議你試着弄清楚如何刷新緩存。 這實際上是可行的。

我上周剛剛為ECC填充l1和l2緩存執行了此任務。

基本上,如果您有64Kbyte緩存,例如,數據的總數(x路數,y數量的緩存行等)只是通過緩存線性訪問那么多數據(可能需要mmu啟用緩存)一些64K字節的邊界,如果可能的話,理想情況下在高速緩存行大小讀取(或倍數)中讀取64K字節的數據。 對於icache,你需要那么多字節的指令(nops或者添加reg + 1或者其他東西),記住最后可能有一個預取,所以你可能不得不退回最后的幾條指令,這樣預取就需要了你一直到最后(可能需要一些練習,如果你不了解邏輯(芯片模擬),那么你可能不會想出來。

你可以使用你的邏輯可能有的mmu或其他游戲來減少所需的內存量,例如,如果你的mmu的條目大小覆蓋了4Kb,那么你可以用數據填充4Kb的實內存,然后使用16不同的mmu條目(具有16個不同的虛擬地址)和16個通過4K讀取的每一個。 當然,如果您的緩存位於mmu的虛擬地址側。

總的來說,這是一件很丑陋的事情,如果你的mmu阻止了指令緩存,你可以把執行測試的代碼放在一個非緩存的空間中,這樣它就不會搞亂icache,只有用來填充緩存的指令在緩存的地址空間。

祝好運...

暫無
暫無

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

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