簡體   English   中英

我可以檢查是否有一塊內存(例如,使用malloc分配的內存)保留在緩存中?

[英]Can i check if a chunk of memory (e.g., allocated using malloc) stays in the cache?

假設我使用malloc分配了一些空間。 我是否可以在運行時檢查此連續內存是否保留在CPU的緩存中(甚至更好地保留在緩存級別L1,L2,L3等中)?

否,但是您可以在使用前使用預取指令將其從內存移至緩存。 如果數據已經在緩存中,則這些指令應該很快(有一些特定於體系結構的警告,但我不知道您使用的是哪個平台)。

您可以查詢內存是否在緩存中的原因是因為硬件將其管理在您容易觀察到的級別以下。 在具有硬件管理的TLB的體系結構上,將通過虛擬地址隨處跟蹤內存。

確定CPU緩存的內容非常低級,超出了C的能力范圍。 實際上,緩存對於您正在編寫的代碼是完全透明的,因為CPU幾乎決定了要緩存的內容,並且不能浪費時間在如何做的復雜邏輯上。 為此,《英特爾調試指南》和《性能分析論文》中快速搜索了專用工具, 網址為https : //software.intel.com/zh-cn/articles/processor-specific-performance-analysis-papers 顯然,這將是特定於供應商的。 AMD可能會有特定的工具。

一般而言,至少出於大多數實際目的,不是(即使您嘗試使用這些信息,即使可以,它也很陳舊)。

如果您要重復讀取數據,則可以很容易地測量長期平均訪問時間,這通常可以很好地指示數據的來源。

有一些(主要是嵌入式的)處理器可以讓您鎖定緩存中的某些數據,或者將緩存的一部分留作您可手動管理的可尋址內存。

暫無
暫無

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

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