Мне нужно вычислить CRC, чтобы сформировать хеш-функцию на машине INTEL и предложили следующие две внутренние функции:
_mm_crc32_u32
_mm_crc32_u64
В моем проекте я имею дело с 32-битными переменными, и моя дилемма находится между сдвигом и ORing каждой из двух переменных (таким образом, создавая 64-битную переменную), а затем с использованием 64-битного CRC или запуска 32-битного CRC на каждом из две 32-битные переменные.
Я не могу найти сколько-нибудь циклов, которые выполняет каждая из этих функций, и из спецификаций функций Intel неясно, какой из них предпочтительнее.
Та же самая дилемма применяется и к 16-битной версии функции CRC:
_mm_crc32_u16
Я попытался проверить его, заняв время до и после CRC. Результаты были почти такими же. Поэтому мне нужен более сложный способ расчета.
Не используйте CRC для хэш-значений. Это не то же самое. Используйте murmurhash для классических потребностей в хэшировании компьютерных наук (то есть, это не огромные криптографические хеши). Это также имеет реализации для различной ширины.
Я не понимаю, что вы имеете в виду: у вас есть два 32-битных значения и вы хотите хэш этого? Это может быть разумным или не может, в зависимости от того, почему. Можете ли вы уточнить, что вы пытаетесь выполнить?