我一直在尝试编写一个pintool来监视给定程序中的缓存命中和未命中。 我发现有一些调用如INS_IsMemoryRead / Write来确定指令是否是LD / ST。
答案 0 :(得分:2)
这两种情况都不可能。
缓存工具" Memory",它附带pin是一个非常简单的缓存功能模拟器。换句话说,通过使用高速缓存工具,可以根据高速缓存组织(例如大小,路数,高速缓存级别)来查看/模拟应用程序可能具有多少高速缓存未命中。通过一些简单的代码编写,可以报告缓存未命中的指令,然后将这些指令映射回源代码。但是,即使缓存模拟器配置为具有与真实系统相同的缓存组织,缓存模拟的命中/未命中结果也可能与真实计算机系统不同或对应。
此外,缓存工具的另一个限制是它是单线程的。您不能将它用于多线程应用程序。
此外,不可能获得任何定时信息,例如服务高速缓存未命中所需的周期数。这是非常依赖于体系结构的,我不知道可以从真实系统提供此信息的工具。相反,人们使用CPU计时模拟器。示例CPU时序仿真器是Gem5 http://www.gem5.org/和基于PtlSim http://marss86.org/的火星。