winterw 发表于 2012-12-31 18:10:18

和大家探讨下代码优化,谁有想被优化的代码可以贴上来

在对时间要求严格的场合,优化过的代码能够节省出更多的时间,这个是这两天的教训。
感兴趣的兄弟可以将代码片段贴上来,共同锻炼提高。

dr2001 发表于 2012-12-31 23:03:43

如果有兴趣研究具体算法的优化,不妨研究研究CRC:
一方面,CRC可以变换的花样有很多,CRC8/16/32或者其它,还有不同的移位方向。
一方面,CRC用到的地方多,属于常用算法,结果容易被复用。
考虑MCU的资源消耗,可以应用CRC的半字节查表法,CRC32的表也就是64个字节而已,一个字节的CRC也就是查两次表。

这个东西有意思的地方在于,
1、核心代码很短,只有几行;但对于不同的CRC长度和方向,需要设计有细微差别的方法。
2、可以体会C代码,编译器,指令集甚至CPU架构之间的互动。

比如,CRC16-XModem算法,这里是该CRC的具体参数:
CRC16;按Bit操作时,数据从LSB移入,从MSB移出(MSB First);CRC多项式0x1021;CRC寄存器初值:0x0000;CRC计算结果XOR 0x0000。

i55x 发表于 2012-12-31 23:18:52

撸主看过<hacker's delight>这本书吗?

i55x 发表于 2012-12-31 23:21:46

dr2001 发表于 2012-12-31 23:03 static/image/common/back.gif
如果有兴趣研究具体算法的优化,不妨研究研究CRC:
一方面,CRC可以变换的花样有很多,CRC8/16/32或者其它 ...

CRC算法,可以参考这篇文章:
http://www.hackersdelight.org/crc.pdf

dr2001 发表于 2012-12-31 23:34:55

i55x 发表于 2012-12-31 23:21 static/image/common/back.gif
CRC算法,可以参考这篇文章:
http://www.hackersdelight.org/crc.pdf

呵呵,CRC我已经很熟悉了。你提供的这个文章对于CRC算法的介绍十分的粗略,尤其是软件算法实现的部分。

对于CRC本身的介绍以及CRC基本算法的推导,我还没有看到过比“A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS”更好的资料。
参考地址是:http://www.ross.net/crc/download/crc_v3.txt
尤其是15. A Parameterized Model For CRC Algorithms,对于确定所使用的CRC算法是一个非常重要的章节;目前很多代码都基于这个描述确定所使用的CRC算法。

当然,对于多表的递推查表法(不是严格的名称,似乎也没人起名字),我还没看到相关详细的文档介绍,但是了解了基本算法原理后不难推出来,需要一点点时间就行。

需要特别注意的是,就算是使用了查表法,依然有可能针对具体的CRC算法进一步进行优化。
别看查表法的核心代码可能只有一行,但也是对应了好几条汇编的,少一条就是不少的性能提升。

winterw 发表于 2013-1-1 08:37:41

i55x 发表于 2012-12-31 23:18 static/image/common/back.gif
撸主看过

没有看过,回头学习一下
页: [1]
查看完整版本: 和大家探讨下代码优化,谁有想被优化的代码可以贴上来