Pyg*_*gmy 3 c# performance crc32 intrinsics
我已经使用 Ant 分析了我的应用程序,发现 > 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 ?
这些年来,CRC32 计算速度越来越快。部分原因是实现优化,还有新的处理器指令可用。因此,这是对近十年之久的问题的新答案!
\n\nStephan Brumme 的 CRC32 页面概述了优化,最后一页日期为 2016 年。FastCRC,作者:Yuri Babich是 Stephan Brumme 和 Bulat Ziganshin 的快速 C++ CRC32 算法“Slicing-by-16”的 2019 C# 实现。他声称他的版本仅比本机 CLI C++ 快速 CRC32 实现慢一点(大约 10%)。该算法是较旧的 CRC-32-IEEE。
\n\n如果您有能力选择其他变体,请选择CRC-32C (Castagnoli)。这在 Crc32C.NET 包中可用。
\n\n\n\n\nCRC-32C 中的多项式被证明具有更好的错误检测属性,这就是其在较新标准(iSCSI、SCTP、ext4)中采用的原因。除了更高的可靠性之外,CRC-32C 现在还具有在较新的 Intel 处理器上使用专用指令的优势。这就是为什么它被选用于高性能应用程序的原因,例如 Snappy 压缩算法。
\n
Crc32.NET是 Robert Va\xc5\xbean 对上述 Crc32C.NET 的 .NET 安全实现,但针对的是 Crc32 算法。
\n\n\n\n\n该库包含对托管代码的优化,因此,它确实比其他 Crc32 实现更快。如果您恰好需要 Crc32,\n 这个库是最佳选择。经过调查,此实现是不同变体中最快的。另外,它对于 x64 和 x86 都有好处,因此,似乎没有必要进行两种不同的实现。
\n
我不知道上述两个 .NET 实现中哪一个对于经典 CRC-32-IEEE 算法来说最快。性能比较表未参考第一个实现。
\n\nAnonymous Coward 的答案指向crcutil,它是 Andrew Kadatch 和 Bob Jenkins 在 2007 年初发明的一种新颖的多字 CRC 算法的高性能 CRC 参考实现。新算法针对现代 Intel 和 AMD 处理器进行了大力调整,并且比几乎任何处理器都快得多。所有其他软件 CRC 算法。下载中列出了他们 2010 年的论文《我们所知道的关于 CRC 但又害怕忘记的一切》。本文展示了一些可用于避免重新处理某些数据范围的技巧:
\n\n因此,当数据量足够大或环境有限时,请尝试明智地考虑需要计算的内容。
\n| 归档时间: |
|
| 查看次数: |
25089 次 |
| 最近记录: |