2014-10-12 1 views
0

мне нужно вычислить CRC для формирования хеш-функции на машине INTEL и придумал следующие две встроенные функции:Выбор между 32 и 64 бит внутренней CRC на процессоре Intel

  1. _mm_crc32_u32
  2. _mm_crc32_u64

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

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

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

_mm_crc32_u16

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

+0

Если вы хотите бенчмарка альтернативы, вот начало: http://stackoverflow.com/questions/15752770/mm-crc32-u64-poorly-defined/15754706#15754706 _mm_crc32_u64 не доступен для использования в 32-битных сборках. – ScottD

ответ

1

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

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

+0

Привет, я хочу сохранить столько циклов, сколько могу, моя дилемма заключается в том, чтобы использовать 32-битный CRC дважды по двум 32-битным значениям или использовать сдвиги и OR, чтобы объединить их в одно 64-битное значение и запустить на нем функцию CRC. Я думаю, что вопрос может быть сведен к тому, что больше разницы между 64-битным и 32-битным CRC или сменой и операцией OR. И причина, по которой я использую crc, - beacause, имеет встроенную функцию. –

+1

Говорить то же самое снова не помогает. В чем смысл CRC только для 32 бит ввода? Это то, что вы говорите? Почему вы спариваете размер ввода и длину CRC? Это заставляет меня думать, что я не понимаю. CRC * не быстрый * для текущих процессоров, поскольку он использует таблицу. Объясните иначе, чем «два 32-битных значения» или покажите пример. –

+1

@ Anton.P: Вы пробовали измерить производительность? Какой из них быстрее работает для вас? Удостоверьтесь, что вы не наказываете одного из пропусков кеша, когда другой выигрывает от первого, уже запущенного. Насколько большой объем данных вы рассчитываете для CRC? Насколько хорошо он выровнен? –

 Смежные вопросы

  • Нет связанных вопросов^_^