2014-01-14 60 views
1

我得到一個程序,我知道只能在非常特定的硬件上運行,所以我開始使用由SSE4.2指令集提供的crc32,但現在我需要crc16來達到不同的目的。有沒有辦法哄騙硬件讓我crc16具有與SSE crc32相同的性能?有效實現CRC16

感謝

回答

1

如果你有PCLMULQDQ指令,你可以用它來進行快速CRC。雖然速度不如crc32指令快。

或者,窮人的檢查值可能是crc32結果的低16位。

+0

crc32的前半部分會變弱多少?我知道crc不是一個統一的散列函數,所以它不是最優的。編輯:也許這兩個一半會給一個更統一的結果? – Afiefh

+1

這取決於您的應用程序。如果您嘗試檢測極少數位翻轉,crc32的一半將比crc16更弱。如果錯誤來源有較大的影響,那麼兩者將大致相當。在這種情況下,對這兩個半部分進行着色並不會產生任何影響,因爲源位在低半部分已經很好地混合了。對於少量的位錯誤情況,xoring可能會有所幫助。我不確定。 –