Эффективное внедрение CRC16

У меня есть программа, которая, как я знаю, будет работать только на очень специфическом оборудовании, поэтому я начал использовать crc32 в соответствии с набором инструкций SSE4.2, но теперь мне нужен crc16 для другой цели. Есть ли способ уговорить аппаратное обеспечение дать мне crc16 с той же производительностью, что и crc32 SSE?

Спасибо


person Afiefh    schedule 14.01.2014    source источник


Ответы (1)


Если у вас есть инструкция PCLMULQDQ, вы можете использовать ее для быстрой проверки CRC. Хотя и не так быстро, как инструкция crc32.

В качестве альтернативы контрольным значением для бедняков могут быть младшие 16 бит результата crc32.

person Mark Adler    schedule 14.01.2014
comment
Насколько слабее будет первая половина crc32? Я знаю, что crc не является универсальной хеш-функцией, поэтому делать это не оптимально. Редактировать: возможно, xor'ing двух половинок даст более однородный результат? - person Afiefh; 15.01.2014
comment
Это зависит от вашего приложения. Половина crc32 будет слабее, чем crc16, если вы пытаетесь обнаружить очень небольшое количество переворотов битов. Если источник ошибки оказывает большее влияние, то они будут примерно эквивалентны. В этом случае объединение двух половин не будет иметь никакого значения, поскольку исходные биты уже хорошо смешаны в младшей половине. В случае небольшого количества битовых ошибок может помочь xoring. Я не уверен. - person Mark Adler; 15.01.2014