从二进制大小中获得性能影响

时间:2014-01-01 12:06:28

标签: c performance microcontroller

我正在研究一个电子项目。在项目中我有一个微控制器。我想衡量一下我的变化对时间表现的影响。

二进制文件并不大(实际上是11760字节)。微控制器运行大约20Mhz(基于晶体值)。所以基本上他每秒可以运行20M操作。

您是否认为根据每个功能的指令数检查由于更改而导致的性能影响是一个好主意?类似的东西:

enter image description here

2 个答案:

答案 0 :(得分:6)

您似乎在混淆静态指令与动态指令计数。

函数或二进制文件的大小并不表示它将运行多少指令。以一个简单的循环为例(在我编写的一些伪程序集中)转换为

    mov r1, 100
label1:
    dec r1
    jnz label1

这些是3个静态指令,并且会占用二进制上的一些小空间(取决于它们的操作码大小),但运行它的处理器必须执行100次循环,相当于201个动态指令。当然,性能取决于执行的动态指令的数量(加上由气泡,错误预测,管道深度等引起的任何延迟)。

例如,如果您要用10000替换100,那么您将在二进制文件上使用完全相同的空间(假设100以int开头的形式存储),但执行速度可能会慢100倍。

答案 1 :(得分:2)

程序大小和程序速度没有直接关系。

我已经做了你正在做的事情 - 编程一个微控制器并希望尽可能快地完成它。

首先,我让程序正常运行,做必要的事情。

然后我在它周围缠绕一个临时循环,所以它无休止地重复它的工作,或者很长一段时间。

当它运行时,我在调试器或模拟器下手动中断它,然后根据需要检查调用堆栈和任何其他变量。
我的目标是详细了解为什么它正在花费那个时刻。

我重复了几次,好像是10次。

从这10个样本中,我看看是否有超过1个活动存在,我可以消除或缩短。 例如,如果我在其中4个样本中看到有一个函数被调用,来自某个特定的地方,并且如果我能想到一种方法来避免大多数时间的调用,那么这样做可以节省大约40%的执行时间处理时间。 这是1 /(1-0.4)= 1 / 0.6 = 1.67 = 67%的加速,给予或接受。 这是一次严重的加速。

你知道,如果你可以采取任何措施使代码运行得更快,那么这种技术就能找到它。

与通常的建议不同,测量,测量"。 所有测量都告诉你,如果一个例行程序没有花费太多的包容时间,你应该去别处看看。

测量告诉您不应该的样子,但是, 除了玩具程序以外,你应该看的地方非常不明确。 (人们有时会把这看作是好消息,好像没有找到加快程序速度的方法意味着没有:)

The interrupting technique pinpoints problems.