提问人:ajp 提问时间:11/16/2023 最后编辑:ajp 更新时间:11/16/2023 访问量:30
如何找到导致 l3 停滞的具体功能?
How can I find the specific function causing l3 stalls?
问:
我正在优化一个程序(在 Rust 中)。在一个小的测试输入中,我看到程序运行得相对较快,并且几乎没有时间在缓存未命中上停滞不前。(在 linux 上使用)perf
cycle_activity.stalls_l1d_miss: 50,833,346
cycle_activity.stalls_l3_miss: 9,958,752
cycles: 3,850,988,364
instructions: 9,563,267,270
在大输入上,我发现程序运行速度要慢得多,并且花费大量时间在缓存未命中上。(请注意,指令计数几乎相同。
cycle_activity.stalls_l1d_miss: 2,142,605,809
cycle_activity.stalls_l3_miss: 1,845,486,382
cycles: 6,097,683,006
instructions: 9,357,073,844
对于那些在 l3 访问上停滞不前的大约周期,我想知道我的代码中的哪些访问导致了它们,以任何可能的粒度(函数/指令指针/调用堆栈)。就源代码而言,我知道我怀疑可能有贡献的几个位置,但我不知道如何弄清楚到底是哪个是问题所在。我怎样才能找到这个?是否可以使用 ,也许使用 PEBS?我应该使用其他工具(例如 valgrind)吗?2,000,000,000
perf
请注意,我尝试过使用 + ,但查看顶部的慢速指令并没有给我答案,而且它混合了所有慢速来源(例如分支),而在这里我想专门关注 l3 停滞。perf record
perf report
另请注意,我的程序有大量的安装代码,如果可能的话,我想从分析中排除这些代码。
答: 暂无答案
评论
perf record -e cycle_activity.stalls_l3_miss
perf record
cycles
man perf record
cycles
cpu_clk_unhalted.thread
-e
--event
perf stat -e
perf list