我想在我的代码中为每个非内联函数f()
构造一个指令缓存惩罚的直方图。因此,如果我的代码中总共有k个非内联函数,我想要k个单独的直方图。我想知道是否有任何已知的解决方案。
任何一个特定函数f1()
的简单方法是在代码中找到对f1()
的所有调用,在调用之前立即记录时间戳值,并在开始时记录时间戳f1()
的{{1}},构建差异的直方图。它需要添加(n + 1)个新代码行,其中n是调用f1()
的次数。
我基本上想要这个天真解决方案的可扩展版本。
答案 0 :(得分:0)
根据您的操作系统和处理器,可提供更精确的解决方案。如果您使用的是Linux,请使用perf_events
。它为PMU事件提供了良好的界面。您可以使用它来获取icache-miss的精确计数,并对这些事件的堆栈快照进行采样,以找出icache-miss正在发生的位置。