在Intel CPU上选择32位和64位固有CRC

时间:2014-10-12 06:26:34

标签: c++ c intel intrinsics

我需要计算CRC以便在INTEL机器上形成散列函数,并提出以下两个内在函数:

  1. _mm_crc32_u32
  2. _mm_crc32_u64
  3. 在我的项目中,我正在处理32位变量,我的困境是在移位和ORing每两个变量之间(从而创建一个64位变量),然后使用64位CRC或运行32位CRC在两个32位变量中的每一个上。

    我无法找到这些功能中每个功能所需的周期数量,而且根据英特尔功能规格,不清楚哪一个更适合。

    同样的困境也适用于16位版本的CRC功能:

    _mm_crc32_u16

    我尝试在CRC之前和之后花时间检查它。结果几乎相同。所以我需要一种更复杂的计算方法。

1 个答案:

答案 0 :(得分:1)

不要将CRC用于哈希值。这不是一回事。 使用murmurhash进行经典计算机科学哈希需求(即不是巨大的加密强度哈希)。这也有不同宽度的实现。

我不明白你的意思:你有两个32位的值并想要一个哈希值?这可能是明智的,也可能不是,取决于原因。你能澄清一下你想要完成的事情吗?