我一直在嘗試編寫一個pintool來緩存命中程序中的緩存命中和未命中。 我發現有調用,如INS_IsMemoryRead/Write來確定指令是LD/ST。使用英特爾的PIN工具來計算程序中的緩存命中/未命中數
- 有沒有辦法確定指令是否有緩存命中或未命中?
- 如果是這樣,是否也有可能獲得從緩存/內存中獲取數據的週期數?
我一直在嘗試編寫一個pintool來緩存命中程序中的緩存命中和未命中。 我發現有調用,如INS_IsMemoryRead/Write來確定指令是LD/ST。使用英特爾的PIN工具來計算程序中的緩存命中/未命中數
這是不可能的。
附帶引腳的緩存工具「Memory」是一個非常簡單的緩存功能模擬器。換句話說,通過使用緩存工具,可以看到/模擬應用程序可能具有多少緩存未命中,具體取決於緩存組織,例如大小,路數,緩存級別。用一些簡單的代碼編寫就可以報告緩存未命中發生的位置,然後將這些指令映射回源代碼。然而,即使緩存模擬器被配置爲具有與真實系統相同的緩存組織,來自緩存模擬的命中/未命中結果可能與真實計算機系統不相同或對應。
此外,高速緩存工具的另一個限制是它是單線程的。您不能將其用於多線程應用程序。
此外,將不可能獲得任何時間信息,例如服務緩存未命中所需的週期數。這非常依賴架構,我不知道可以從真實系統提供這些信息的工具。相反,人們使用CPU時序仿真器。示例CPU時序仿真器是Gem5 http://www.gem5.org/和基於PtlSim http://marss86.org/的火星。