如何衡量ARM性能?

MrG*_*igu 10 c arm

我正在优化软件,并希望衡量性能.所以,我目前模拟与OVP的ARM平台(开放虚拟平台)和我得到的统计数字仿真时间和仿真的指令.

我的问题是,为什么每次运行软件时模拟指令都不同(不同但非常接近)?它应该每次都不一样吗?难道不是这样的,我用C编写的软件会被编译成ARM汇编指令,每一个软件运行时间,模拟指示将这些ARM汇编指令多少时间运行?每次都应该是一样的吗?

我该如何衡量绩效?取10个模拟指令样本并获得平均值?

Guy*_*ton 4

根据我在真实(非模拟)ARM 中的经验,如果我对一段代码进行周期计数,周期数将会有所不同,这是因为:

  • 执行代码的过程中可能会发生上下文切换。
  • 进入代码段后,CPU 的初始状态可能会有所不同。(例如管道的内容、分支预测等)
  • 进入代码部分时,缓存状态将有所不同。
  • 外部因素,例如其他硬件访问外部存储器。

由于所有这些,取平均值(加上一些其他统计测量)实际上是真实硬件和真实操作系统的唯一实用方法。在一个好的模拟器中,其中一些因素可能会被消除。

在某些真实芯片上(或者如果模拟器支持的话),ARM性能监控单元可能很有用。

如果您正在为 Cortex A8 编码,是一个很酷的在线周期计数器,它可以真正帮助您从代码中获得更多性能。