目前我正致力于在微控制器之间建立基准(基于Powerpc)。所以我想知道,如果有人能够提供一些详细的文档,那么哪些因素对于基准测试最重要?
换句话说,我正在寻找文档,提供有关应该考虑增强性能的因素的详细信息
核心
外设,
记忆库
另外,如果有人可以提供非常有用的算法。
答案 0 :(得分:0)
只有一种有用的方法,那就是为应用程序编写应用程序并为应用程序计时。基准测试在很大程度上是假的,因为有太多的因素,制作一个利用差异的基准,甚至利用共同的功能,使两个事物看起来不同,这是非常微不足道的。
我定期执行此噱头,最近这段代码
.globl ASMDELAY
ASMDELAY:
subs r0,r0,#1
bne ASMDELAY
bx lr
在覆盆子pi(裸机)上运行相同的覆盆子pi不比较两个只是将它与自身进行比较,清楚地组装所以甚至不考虑您可以有意或无意地在基准测试中编码的编译器功能/技巧。这三个指令中的两个对于基准测试目的很重要,循环运行数万次,我认为我使用了0x100000。该性能的优势在于循环中的两个指令运行速度与93662计时器滴答速度一样快,并且对于0x10000循环缓慢为4063837计时器滴答。当然,我为各种测试打开和关闭缓存和分支预测。但即使启用了分支预测和i缓存,这两条指令的速度也会有所不同,具体取决于它们在取指令行和缓存行中的位置。
根据您所比较的内容,微控制器会使这种情况变得更糟,有些闪存可以在各种时钟速度下使用相同的等待状态,有些是速度限制的,并且对于每N Mhz,您必须添加另一个等待状态,因此,根据您设置时钟的位置,它会影响该范围内的性能,当然只是在您添加等待状态的边界下方(24Mhz减去smidge和24Mhz,如果是等待2-3等待状态)状态然后获取刚刚减慢50%36Mhz减去微微它可能仍然处于3个等待状态但是在36分钟时有3个等待状态,一个微弱的速度比24mhz 3个等待状态快。如果你在sram vs flash中为这些平台运行相同的代码,那么通常没有等待状态问题,sram通常可以匹配cpu时钟,因此任何速度的代码都可能比从flash运行的相同代码更快。
如果你要比较来自同一供应商和家族的两个微控制器那么它通常是没有意义的,内部是相同的,它们通常只是有多少,有多少闪存库有多少sram bank有多少uarts,有多少定时器,多少针等等。
我的一点是,如果你不了解整体架构的细微差别,你可以通过简单地理解工作原理,使你现在在同一块板上运行的代码相同,速度提高几个百分点到几十倍。启用你不知道在哪里的功能,经常执行的代码的正确对齐(只需在C文件中重新安排你的函数可能/将影响性能)在引导程序中添加一个或多个nop来改变整个程序的对齐方式可以而且会改变表现。
然后你会进入编译器差异和编译器选项,你可以使用它们,也可以获得几次到几十次改进(或丢失)。
所以在一天结束时,唯一重要的是我有一个应用程序,它是最终的二进制文件,它在A上运行的速度有多快,然后我移植了该应用程序,B的最终二进制文件已完成且速度有多快它在那里运行吗?其他一切都可以被操纵,结果不可信任。