我正在尝试优化某些功能,我意识到我几乎不了解某些事情需要多长时间。
我可以在这里提出所有问题,但如果有人知道的话,我宁愿找一篇关于这个问题的好文章。
我正在使用IAR在C中为ATMEL SAM7S处理器编写程序。我有一个大约500uS左右的排序功能,我想知道我是否可以加快速度。我也可以在这里发帖,但我希望自己学习。
比如,减去两个16位整数比减去两个32位整数更快吗?这样的手术需要多长时间?只需一个周期或更长时间?与减法相比,乘法需要多长时间?
任何人都知道要看的地方吗?我尝试使用谷歌搜索一些东西,但我无法想出任何有用的搜索条件。
如果有人对我的具体功能有任何想法,我可以发布详细信息。我基本上试图将两个模拟值匹配到校准值表中最接近的索引。现在我遍历整个表并使用最小二乘来确定最接近的匹配。它非常简单,我不确定如果没有在我的表中应用一些额外的逻辑,有更快的方法。但如果我至少知道某些事情花了多长时间,我可能会自己优化它。
答案 0 :(得分:1)
良好的第一阶段可能是研究您正在编码的架构的汇编语言。
之后你应该能够读取编译器生成的二进制文件,最后比较一下计算机与两种不同的实现方式有什么关系。
答案 1 :(得分:1)
减去两个16位整数比减去两个32位整数要快吗?
不在具有本机32位寄存器的ARM体系结构上,没有。
任何人都知道要看的地方吗?
指令周期时间的规范位置将是您的芯片实现的特定架构的技术参考手册,例如。 ARM7TDMI;简单的alu ops here的时间安排,是的,它是一个循环。如果您还不熟悉指令集,那么这不是一个友好的文档,但是......
现在我遍历整个表格
在这里查看算法优化会更好(例如索引表格,按一个坐标排序以缩小范围等),而不是担心指令级微观优化。
答案 2 :(得分:0)