基准测试微控制器



目前我正在努力设置微控制器之间的基准(基于Powerpc)。所以我想知道,如果有人能给我提供一些详细的文档,哪些因素是基准测试最重要的考虑因素?换句话说,我正在寻找文档,它提供了应该考虑的因素,以提高性能的详细信息核心外围设备,记忆银行
另外,如果有人能提供算法,将会很有帮助。

只有一种有用的方法,那就是为这两种应用程序编写应用程序并计时。基准测试在很大程度上是虚假的,有太多的因素,制作一个利用差异的基准测试是相当微不足道的,甚至利用共同的特性使两件事看起来不同。

我经常执行这个特技,最近的代码是

.globl ASMDELAY
ASMDELAY:
    subs r0,r0,#1
    bne ASMDELAY
    bx lr

在一个树莓派(裸机)上运行,同样的树莓派不是比较两个,只是比较它本身,显然汇编,所以甚至没有考虑编译器的功能/技巧,你可以在基准中有意或无意地编码。这三条指令中的两条对于基准测试很重要,让循环运行数万次,我想我使用的是0x100000。这种性能的妙处是,在一个循环中,两个指令的运行速度快于93662个计时器节拍,慢于0x10000个循环的4063837个计时器节拍。当然,在各种测试中,缓存和分支预测是打开和关闭的。但是,即使同时打开了分支预测和i缓存,这两个指令的速度也会根据它们在取行和缓存行的位置而变化。

一个微控制器使得这相当糟糕,这取决于你比较什么,有些闪烁可以使用相同的等待状态为广泛的时钟速度,有些是速度限制,每N Mhz你必须添加另一个等待状态,这取决于你在哪里设置时钟影响性能在一定范围和下方和上方的边界,你添加一个等待状态(24 mhz -碎片和24 mhz的额外等待状态如果是2 - 3等待状态然后取回刚慢50% 36 mhz -有点它可能仍然在等待状态,但3等待状态36 -有点比24 mhz快3等待状态)。如果你在sram和flash中运行相同的代码,在这些平台上通常不会有等待状态问题,sram通常可以匹配CPU时钟,所以代码在任何速度下都可能比在flash中运行相同的代码快。

如果您比较来自同一供应商和家族的两个微控制器,那么它通常是毫无意义的,内部是相同的,它们通常只是由多少,多少闪存库多少ram库多少插槽,多少定时器,多少引脚等变化。

我的观点之一是,如果你不知道整体架构的细微差别,你可以通过简单地理解工作原理,使你现在在同一个电路板上运行的相同代码快百分之几到几十倍。启用你不知道在哪里的特性,正确的代码对齐(简单地在C文件中重新安排你的函数会影响性能)在引导中添加一个或多个nops来改变整个程序的对齐可以并且将会改变性能。

然后你进入编译器的差异和编译器选项,你可以玩这些,也得到一些到几倍到几十倍的改进(或损失)。

所以在一天结束的时候,唯一重要的是我有一个应用程序,它是最终的二进制文件,它在A上运行的速度有多快,然后我移植了这个应用程序,B的最终二进制文件完成了,它在A上运行的速度有多快。其他一切都可以被操纵,结果是不可信的。

相关内容

  • 没有找到相关文章

最新更新