各位好,
我在A15上运行裸机程序,我编写一个汇编文件,在调试的时候,单步执行每条指令,通过观察C9_PMCCNTR 寄存器的值,发现汇编执行ADD 指令的时候C9_PMCCNTR 寄存器的值会增加几十个cycle,这个跟手册中执行ADD指令只需要一个cycle的说法不一致。希望各位技术支持给出解答,谢谢。
你好,
Add指令需要一个cycle是指add指令停留在pipeline的execution stage需要一个cycle。PMU可以用来做code的profilling,但是不会有这么高的精度。
另外对于CA15,要实现单步执行,debugger通常会设software breakpoint,这些操作也会影响PMU counter的值。所以你的方法不适合 用来测试单条指令执行需要花费的cycle数。
手册中的数据并不是测试出来的,而是designer根据pipeline的设计计算出来的。
joeyxu,
多谢你的回复。按照你的说法,在编写arm 汇编后,无法确定已经编写的汇编优化效率了, 如果汇编优化效率不高,那该如何修改?
你好。
可以使用PMU来比较不同汇编(一段code)的performance的差异。但是不推荐使用PMU来测量单条指令的cycle。
你好:
对于A15 这种处理器的汇编优化主要手段是使用NEON 指令来实现加速吗?由于A15上支持跳转预测以及乱序执行,所以通过调整汇编代码来优化pipeline的方法可能性应该不是很大,对吗?如果是,优化的时候,只需要尽可能的使用NEON指令即可? 不知道理解对不对。
顺便插一个问题,PMU是什么的缩写?
PMU Performance Monitor Unit
好的。谢谢。
如果是多媒体或者是信号处理算法的话用NEON应该会比较好。通过自己改写汇编来优化需要对CPU的微架构有所了解,所以难度很大。
你可以参考我在cortex-A 系列汇编问题给的建议。