在現代多核處理器中,我們通常擁有本地L1緩存但共享L2緩存。是否有可能繞過一部分內存的L1緩存,同時仍然使用L2緩存?我想要這樣做來提高時間可預測性,但這可能會降低性能。是否有可能在多核處理器中繞過L1緩存
回答
據我所知,沒有辦法繞過主流CPU的L1緩存。但是,爲了實現您的目標(即避免可能導致時序測量變化的緩存未命中),您可以嘗試請求您的編譯器將數據預取到緩存中。
如果使用GCC或LLVM,請參閱__builtin_prefetch。
但是,您的問題非常模糊,我不確定您的建議是否適合您的需求。
緩存
我強烈懷疑,你誤會緩存做什麼以及它是什麼。
從存儲器內容的角度來看,緩存是透明的。如果一個內核寫入內存位置,那麼其他緩存(L1,L2,L3等)共享或不共享的其他內核恰好被緩存,該位置也將被更新。
請注意,而不是表示核心無法競爭該值。你仍然可以有一個競爭條件,即一個核心在另一個核心地區讀取一個位置之前讀取一個位置「得到錯誤的值」。此外,無論您的CPU是否具有任何類型的緩存,都會發生。爲了解決這個'排序'問題,你必須在源代碼中使用信號燈或其他IPC原語。
一些緩存系統允許你給他們「提示」。 Matthieu Rouget以__builtin_prefetch爲例。這些東西允許程序員告訴緩存系統,提前獲取一些數據是值得的。某些系統(例如PowerPC 7450)允許程序員使用部分高速緩存作爲內存而不是高速緩存,這是程序員高速緩存控制中最終的一種。
但是,這些東西都不會對所有高速緩存所具有的內存視圖產生任何影響。如果一個緩存的內容得到更新,其餘的內容也會更新。
緩存和高性能的編程
最好的程序員都能夠通過周圍的高速緩存的行爲編碼從CPU中提取峯值性能。在那個領域,人們通常會發現自己希望緩存根本就不存在。這個最終的體現是PS3中的Cell處理器。數學上的核心根本沒有緩存。相反,您必須實際上完成所有自己的數據獲取操作,並將自己寫回源代碼中,而不是將其保留在某個緩存中,以便再次猜測程序將要請求的數據。說得對,表現仍然很好。
總線偵聽
某些CPU沒有緩存總線偵聽,編寫設備驅動程序時,它可以是一個特殊的問題。總線監聽是一種機制,通過這種機制,CPU高速緩存將被CPU核心以外的內容(例如,由DMA控制器讀取來自設備的數據)更新的內存內容發現。反過來也是如此 - 從內存中的DMA獲取當前停留在緩存中的值。 AFAIK現在幾乎所有的CPU都在進行總線監聽,所以這可能不成問題。
在具有IO以及內存地址空間的系統上(例如Intel),我認爲I/O地址空間不會被緩存。對於具有內存映射設備的系統,其內存通常也不會被緩存,操作系統會以這種方式設置CPU(請參閱this)。
時序可預測性
要回到你的問題的原因 - 定時可預測性。您可能會使用錯誤的技術。如果您的系統具有時序約束,因此問題在於主存儲器寫入時間的變化,那麼坦率地使用多核CPU聽起來像是錯誤的東西。 @Griwes在這一點上是完全正確的(甚至整個評論)。您更可能需要採用純粹的硬件設計,這與FPGA的一些方面有關(請不要評論固件是否真的是軟件!)。
如果我懷疑你實際上是在試圖避免使用信號量和其他IPC原語來同步系統中的兩個線程,那麼你不會成功,共享緩存或不。你需要使用信號量等來使你的代碼正常工作。
- 1. 是否有可能在Javascript中處理緩存?
- 2. CUDA:FERMI上的紋理緩存是否與L1緩存分開?
- 3. 進程跳轉內核時是否刷新了L1緩存?
- 4. 處理器x86/x86_64中是否使用物理或虛擬尋址在L1,L2和L3中緩存?
- 5. Couchbase:是否有可能存在過時的低溫緩存?
- 6. 如何在併發批處理中繞過JDBC語句緩存?
- 7. 是否有可能在apache flink CEP中處理多個流?
- 8. Apigee Edge Node容器是否支持多核處理能力
- 9. ASP.NET會話/緩存+多核處理器服務器
- 10. 是否可以通過代碼清理瀏覽器緩存?
- 11. 繞過FreeMarker緩存?
- 12. 多核心處理器上有多少個CS:EIP寄存器?
- 13. 時鐘振盪器是否在多核處理器的核心之間共享?
- 14. 「緩存:false」PREVENT緩存還是UNIQUE-IFY請求繞過緩存?
- 15. 保留所有處理器資源,核心和高速緩存
- 16. Asp.net是否有可能將服務器控件存儲在緩存中?
- 17. 有關多核處理器與單核多處理器的說明
- 18. L1緩存與主內存
- 19. 我是否可以通過編程方式處理webforms中的緩存頁面
- 20. 我可以繞過OpenCL緩存嗎?
- 21. 是否有可能在多個處理器上運行spatstat函數
- 22. 是否有可能在油漆中做甜甜圈緩存?
- 23. 是否有可能清除使用JavaScript的瀏覽器緩存?
- 24. 緩存在處理設備時是否有限制?
- 25. 是否有可能通過AJAX處理一個條形式?
- 26. 在事務中繞過休眠緩存
- 27. 在Chrome或Firefox中繞過緩存
- 28. 是否可以從一個不同的核心中的L1緩存線協議獲取狀態信息?
- 29. 是否有可能知道圖像是否在iPhone系統緩存中?
- 30. 是否有可能在LINQ查詢中處理異常?
你使用實時操作系統嗎? –
爲什麼我會得到低估? – MetallicPriest
在讀取或寫入或兩者上繞過L1? – osgx