例如,我有一个大的线性函数(1个基本块,~1000个指令) 这被称为很多次。经过一些摆弄编译器选项后,我得到了 Cortex-A57出乎意料的10%性能下降。据推测它是由于 一点点不同的指令调度。我想调查这个问题 更深入,找出哪些指令组合导致不必要的管道 摊位。但我不知道我怎么能这样做。我想,我需要一个非常详细的 执行跟踪以了解发生了什么,虽然我不确定它是否存在 可能会得到这样的痕迹。
所以,问题是:我可以使用哪些工具来调查这种低级别 性能问题?如何确定阻止CPU执行的内容 每个周期的最大指令数?
PS 我最感兴趣的是Cortex-A57内核,但我很感激有用 关于任何其他核心甚至不同架构的信息。
PPS 该函数访问内存,但预计几乎所有内存
访问命中缓存。该假设由perf stat -e r42,r43
确认
(L1D_CACHE_REFILL_LD
和L1D_CACHE_REFILL_ST
事件。)