Выбор между 32 и 64-битной внутренней CRC на процессоре Intel

0

Мне нужно вычислить CRC, чтобы сформировать хеш-функцию на машине INTEL и предложили следующие две внутренние функции:

  1. _mm_crc32_u32
  2. _mm_crc32_u64

В моем проекте я имею дело с 32-битными переменными, и моя дилемма находится между сдвигом и ORing каждой из двух переменных (таким образом, создавая 64-битную переменную), а затем с использованием 64-битного CRC или запуска 32-битного CRC на каждом из две 32-битные переменные.

Я не могу найти сколько-нибудь циклов, которые выполняет каждая из этих функций, и из спецификаций функций Intel неясно, какой из них предпочтительнее.

Та же самая дилемма применяется и к 16-битной версии функции CRC:

_mm_crc32_u16

Я попытался проверить его, заняв время до и после CRC. Результаты были почти такими же. Поэтому мне нужен более сложный способ расчета.

  • 0
    Если вы хотите сравнить альтернативы, вот начало: stackoverflow.com/questions/15752770/… _mm_crc32_u64 не доступно для использования в 32-битных сборках.
Теги:
intel
intrinsics

1 ответ

1

Не используйте CRC для хэш-значений. Это не то же самое. Используйте murmurhash для классических потребностей в хэшировании компьютерных наук (то есть, это не огромные криптографические хеши). Это также имеет реализации для различной ширины.

Я не понимаю, что вы имеете в виду: у вас есть два 32-битных значения и вы хотите хэш этого? Это может быть разумным или не может, в зависимости от того, почему. Можете ли вы уточнить, что вы пытаетесь выполнить?

  • 0
    Привет, я хочу сохранить как можно больше циклов, моя дилемма заключается в том, чтобы использовать 32-битный CRC дважды на двух 32-битных значениях или использовать сдвиги и операционные операции для объединения их в одно 64-битное значение и запуска функции CRC на нем. Я думаю, что вопрос может быть сведен к тому, какая большая разница между 64-битной и 32-битной CRC или операцией сдвига и ИЛИ. И причина, по которой я использую crc, заключается в том, что он имеет встроенную функцию
  • 1
    Сказать то же самое снова не поможет. Какой смысл в CRC только на 32 битах ввода? Это то, что вы говорите? Почему вы соединяете входной размер и длину CRC? Это заставляет меня думать, что я не понимаю. CRC не работает быстро на современных процессорах, поскольку использует таблицу. Объясните иначе, чем «два 32-битных значения» или покажите пример.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню