vaughn0223 发表于 2013-11-16 18:10:12

求助字节数组逐一比较如何优化?

做一个数据采集系统,每帧数据数据量相同,大概1000多个字节,采集频率现在400HZ,后面需要提高到600~800HZ。

数据采集过来,有两个数组比较操作:
1,跟上一帧数据逐字节比较,并合并;如果某一个字节值大于上一帧数据相同位置的字节值,就取较大的值。
2,跟一个阀值比较,如果小于就置该位置的字节为0,否则就减去阀值。(大于阀值的很少,最多十几个)。

有一个想法,就是转换成32位无符号数来比较,就是一次比较4个字节。但是不知道怎么实现。{:sad:}
请教各位大虾,上面两个有没有什么优化办法呢?

bitter 发表于 2013-11-16 21:34:54

还没有验证目前的方式效率如何,就先考虑优化?
很多时候最先的方法有可能就是最正确的方法

hhxb 发表于 2013-11-16 21:41:11

本帖最后由 hhxb 于 2013-11-16 22:18 编辑

“转换成32位无符号数来比较”
这个思路肯定是错的,32处理器用共用体就行了。

zhuzaixingfu 发表于 2013-11-16 21:49:45

如果是32位的处理器,可以在读取内存时一次性读出32位,分别对4个字节进行比较。主要应该是对内存读取效率的优化吧,毕竟在这里内存数据读取占用的时间太长。

vaughn0223 发表于 2013-11-19 17:04:38

zhuzaixingfu 发表于 2013-11-16 21:49 static/image/common/back.gif
如果是32位的处理器,可以在读取内存时一次性读出32位,分别对4个字节进行比较。主要应该是对内存读取效率 ...

忙着干其他的活,把这个给忘了,几天没上论坛。感谢几位老大的意见。
优化就是想优化内存读。

我的想法是,ARM里面32位减法运算的时候,如果在某一个寄存器里面设置每个字节借位标志,并且C语言可以读取这个寄存器的话,就可以比较显著的提高效率了。这个就需要熟悉ARM汇编了。
还请各位老大提供些意见。

zhuzaixingfu 发表于 2013-11-19 22:56:35

另外就是减少在循环中的分支if,如图,就是有点小麻烦

vaughn0223 发表于 2013-11-20 08:20:23

zhuzaixingfu 发表于 2013-11-19 22:56 static/image/common/back.gif
另外就是减少在循环中的分支if,如图,就是有点小麻烦

xingfu兄的这两条语句很有创意{:victory:}
准备先按照这两条语句来修改下!

另外继续期待其他的优化意见,看能否有更加快速的算法?

NewKing 发表于 2013-11-21 21:21:17

学习了,谢谢!
页: [1]
查看完整版本: 求助字节数组逐一比较如何优化?