Учитывая, что SSE 4.2 (компоненты Intel Core i7 и i5) содержит инструкцию CRC32, представляется разумным исследовать, можно ли построить более быструю хэш-функцию общего назначения. Согласно this, только 16 бит CRC32 равномерно распределены. Итак, какое другое преобразование применимо для преодоления этого?
Обновление Как насчет этого? Только 16 бит подходят для хэш-значения. Хорошо. Если ваш стол составляет 65535 или меньше, то отлично. Если нет, запустите значение CRC с помощью команды Nehalem POPCNT (подсчет количества населения), чтобы получить количество бит. Затем используйте это как индекс в массив таблиц. Это работает, если ваша таблица находится на юге от 1 мм записей. Я бы поспорил, что дешевле/быстрее, чем самые эффективные хэш-функции. Теперь, когда GCC 4.5 имеет встроенный CRC32, он должен быть легко протестирован... если бы у меня было достаточно свободного времени для работы над ним.
Дэвид