我使用Ants对我的应用进行了分析,发现超过10%的时间用于CRC32计算。(该CRC32计算是在C#中完成的)
经过一些搜索,我了解到在Visual Studio 2008中有以下几个内置函数:
_mm_crc32_u8
_mm_crc32_u16
_mm_crc32_u32
_mm_crc32_u64
(http://msdn.microsoft.com/en-us/library/bb514036.aspx)
请问有人能告诉我如何使用这些内置函数来替换我的自制CRC32吗?
我使用Ants对我的应用进行了分析,发现超过10%的时间用于CRC32计算。(该CRC32计算是在C#中完成的)
经过一些搜索,我了解到在Visual Studio 2008中有以下几个内置函数:
_mm_crc32_u8
_mm_crc32_u16
_mm_crc32_u32
_mm_crc32_u64
(http://msdn.microsoft.com/en-us/library/bb514036.aspx)
请问有人能告诉我如何使用这些内置函数来替换我的自制CRC32吗?
我不知道上面两个.NET实现哪一个对于经典的CRC-32-IEEE算法来说是最快的。性能比较表没有提到第一个实现。
匿名用户的答案指向了crcutil,这是一种高性能的CRC参考实现,采用了Andrew Kadatch和Bob Jenkins在2007年初发明的新型多字节CRC算法。新算法针对现代英特尔和AMD处理器进行了大量调整,比几乎所有其他软件CRC算法都要快得多。他们2010年的论文我们所知道的关于CRC但害怕忘记的一切列在下载中。这篇论文展示了一些技巧,可以用来避免重新处理某些数据范围:
因此,当数据量足够大或环境受限时,请尝试聪明地计算需要计算的内容。
http://code.google.com/p/crcutil/
Crcutil库提供了CRC算法的高效实现。它包括Andrew Kadatch和Bob Jenkins在2007年初发明的新型多字CRC算法的参考实现。这种新算法针对现代英特尔和AMD处理器进行了大量优化,并且比几乎所有其他软件CRC算法都要快得多。