Алгоритмы общего назначения
Простые хэш-функции высокой производительности
Часть вторая
Множество лун тому назад было проведено общеизвестное тестирование качества простых хеш-функций общего назначения, в котором мы выявили слабые стороны ряда популярных алгоритмов. Как выяснилось, алгоритм может показывать себя довольно хорошо на определенных наборах тестового материала, а некоторых будет "сыпаться". Алгоритмы, основанные на понятной математической модели, ведут себя довольно стабильно, хотя и звезд с неба не хватают. К числу таких конструкций можно отнести алгоритмы семейства FNV. Такие функции, как правило, обладают сравнительно хорошей производительностью, качественным распределенением, соответственно и покажут примерно одинаковые результаты на различных наборах данных, включая сложные. К примеру, набор из практически идентичных строк, как-то список ip-адресов с различающимися двумя последними байтами, или даже слова одниковой длины - все это может оказаться сложным случаем для функций и некими контруктивными недостатками, но не составит труда хорошо для проработанной функции. Все тот же FNV, он родимый, довольно-таки умело справляется с вышеуказанным материалом. Примером стабильной функции в плане коллизионной чистоты можно назвать и разработку автора - функцию MaPrime2c. Этот нехитрый набор кода хотя и не отличается ошеломляющей производительностью, но имеет свои плюсы, среди которых: крайняя простота реализации, возможность использования в программно-технических (аппаратных) комплексах. Сравнительно с FNV, конечно же, этот алгорим будет медленнее. почему?
MaPrime2c
Оную функцию мы рассмотрели еще в первом выпуске. Что отличает ее от большинства существующих? В качестве подсисемы рассеивания здесь используется таблица замены (подстановки), которая инициирует массивное обращение к памяти. На аппаратных решениях это может быть выполнено весьма быстро, но программные реализации могут "проседать". Конструктивной причиной различия в производительности является еще и побайтовое сжатие, в отличие от 32-разрядного во многих из наиболее распространенных. Собственно этот момент и имеет две стороны - хорошее распределение и пропорциональное снижение производительности.
static const unsigned char sTable[256] =
{
0xa3,0xd7,0x09,0x83,0xf8,0x48,0xf6,0xf4,0xb3,0x21,0x15,0x78,0x99,0xb1,0xaf,0xf9,
0xe7,0x2d,0x4d,0x8a,0xce,0x4c,0xca,0x2e,0x52,0x95,0xd9,0x1e,0x4e,0x38,0x44,0x28,
0x0a,0xdf,0x02,0xa0,0x17,0xf1,0x60,0x68,0x12,0xb7,0x7a,0xc3,0xe9,0xfa,0x3d,0x53,
0x96,0x84,0x6b,0xba,0xf2,0x63,0x9a,0x19,0x7c,0xae,0xe5,0xf5,0xf7,0x16,0x6a,0xa2,
0x39,0xb6,0x7b,0x0f,0xc1,0x93,0x81,0x1b,0xee,0xb4,0x1a,0xea,0xd0,0x91,0x2f,0xb8,
0x55,0xb9,0xda,0x85,0x3f,0x41,0xbf,0xe0,0x5a,0x58,0x80,0x5f,0x66,0x0b,0xd8,0x90,
0x35,0xd5,0xc0,0xa7,0x33,0x06,0x65,0x69,0x45,0x00,0x94,0x56,0x6d,0x98,0x9b,0x76,
0x97,0xfc,0xb2,0xc2,0xb0,0xfe,0xdb,0x20,0xe1,0xeb,0xd6,0xe4,0xdd,0x47,0x4a,0x1d,
0x42,0xed,0x9e,0x6e,0x49,0x3c,0xcd,0x43,0x27,0xd2,0x07,0xd4,0xde,0xc7,0x67,0x18,
0x89,0xcb,0x30,0x1f,0x8d,0xc6,0x8f,0xaa,0xc8,0x74,0xdc,0xc9,0x5d,0x5c,0x31,0xa4,
0x70,0x88,0x61,0x2c,0x9f,0x0d,0x2b,0x87,0x50,0x82,0x54,0x64,0x26,0x7d,0x03,0x40,
0x34,0x4b,0x1c,0x73,0xd1,0xc4,0xfd,0x3b,0xcc,0xfb,0x7f,0xab,0xe6,0x3e,0x5b,0xa5,
0xad,0x04,0x23,0x9c,0x14,0x51,0x22,0xf0,0x29,0x79,0x71,0x7e,0xff,0x8c,0x0e,0xe2,
0x0c,0xef,0xbc,0x72,0x75,0x6f,0x37,0xa1,0xec,0xd3,0x8e,0x62,0x8b,0x86,0x10,0xe8,
0x08,0x77,0x11,0xbe,0x92,0x4f,0x24,0xc5,0x32,0x36,0x9d,0xcf,0xf3,0xa6,0xbb,0xac,
0x5e,0x6c,0xa9,0x13,0x57,0x25,0xb5,0xe3,0xbd,0xa8,0x3a,0x01,0x05,0x59,0x2a,0x46
};
#define PRIME_MULT 1717
unsigned int
maPrime2cHash (unsigned char *str, unsigned int len)
{
unsigned int hash = len, i;
for (i = 0; i != len; i++, str++)
{
hash ^= sTable[( *str + i) & 255];
hash = hash * PRIME_MULT;
}
return hash;
}
MaFastPrime1
Что можно сказать о прошлой функции? Наш алгоритм вполне себе неплох, но существующая ныне система оценки в первую очередь смотрит на производительности. Если брать на вскидку актуальный список простых хеш функций общего назначения, где обычно присутствует и MaPrime2c, то мы увидим последнюю как-раз таких ближе к концу списка. По качеству распределения она будет одной из первых, по скорости - из последних. Почему так? Всё потому, что сейчас акцент ставится именно на скорости, соответственно и оптимизация смотрит именно в этом направлении. Указанный далее алгоритм сочетает в себе элементы конструкции MaPrime2c и новомодный базис некриптографических хешей - обработку блоками в 4 байта. Как видно, подход остался прежним, за исключением табличной замены, которая теперь отсутствует. Хвост, тоесть не кратные 4 байтам данные, сжимаются отдельно. В этом случае применяется классический подход. Что мы имеем в результате? Кто пан, а кто пропал - покажут тесты, но пока можно сказать одно. Алгоритм конструктивно быстрее, особенно на блоках кратных 32-м битам. На остальных наборах данных замедление не будет принципиально ощутимо, поскольку блоки будут невелики - не более трех байт.
unsigned int
maFastPrime1Hash(char *str, unsigned int len) {
unsigned int hash = len, i = 0, k;
long rem = len;
unsigned char trail;
const unsigned char * data = (const unsigned char *)str;
while (rem >= 4) {
k = *(unsigned int*)data;
k += i++;
hash ^= k;
hash *= 171717;
data += 4;
rem -= 4;
}
while (rem >= 0) {
trail = *(unsigned char*)data;
trail += i++;
hash ^= trail;
hash *= 171717;
data++;
rem--;
}
return hash;
}
MaRushPrime1
Прошлый раз нам была представлена 32-х разрядная модификация классического алгоритма MaPrime2c. Как нам стало известно, она сочитает значительно увеличенную производительность (ввиду перехода на 4-х байтные блоки) и традиционную прозрачную структуру, основанную на простых математических операциях. Сам алгоритм не только не усложнился, но и даже "похудел" ввиду отсутствия таблицы подстановок. Безусловно, переход на 32-х разрядную обработку не мог сказаться на числе коллизий в итоге, за низкое количество которых мы так любим MaPrime2c. Будем считать это маленьким, необходимым злом. Но можно ли еще его ускорить саму функцию? Попробуем. Рассмотренный ранее FastPrime1c имеет одно особенность - там применяется побайтовый просмотр для некратных данных в конце строки. Что если мы будем использовать все тот же блок, забитый пустыми значениям до кратного? Скажется ли это на результате? Безусловно. В плане качества распределения FastPrime1 будет лучше, но, вероятно, масштаб новоприобретенных коллизий не будет столь велик?
unsigned int maRushPrime1Hash(char *str, unsigned int len) {
unsigned int hash = len, i = 0, k;
long rem = len;
const unsigned char * data = (const unsigned char *)str;
while (rem >= 4) {
k = *(unsigned int*)data;
k += i++;
hash ^= k;
hash *= 171717;
data += 4;
rem -= 4;
}
switch (rem) {
case 3:
k = (unsigned int)(data[0]) | (unsigned int)(data[1] << 8) |
(unsigned int)(data[2] << 16);
k += i++;
hash ^= k;
hash *= 171717;
break;
case 2:
k = (unsigned int)(data[0]) | (unsigned int)(data[1] << 8);
k += i++;
hash ^= k;
hash *= 171717;
break;
case 1:
k = (unsigned int)(data[0]);
k += i++;
hash ^= k;
hash *= 171717;
break;
}
return hash;
}
От слов - к делу
Теория хороша, но посмотрим, все же, что покажет практика. Постараемся провести ряд независимых, но открытых тестов, характеризующих как качество функции, так и ее производительность. Объем материала в области разработки и оценки некриптографических функций общего назначения в настоящее время совсем не велик. Преобладает обилие "скоростных" тестов, но можно ли оценивать только скорость? Вероятно, для ряда назначений она первична, но опредяляющим для выбора того или иного алгоритма будет что? Простота в реализации на требуемой платформе, возможно - портируемость, понятная разработчику структура, оптимальное соотношение качества расределения (числа коллизий) и скорости на применяемом материале. Следует подчеркнуть последнее. Существуют алгоритмы, оптимальные, скажем, только для небольших или напротив - для больших объемов хешируемого материала. Некоторые алгоримы могут быть разработаны и оптимизированы, к примеру, для определенного пространства символов, некоторые могут "сыпаться" на сложном наборе схожего матерала. А тут даже при условии высокой производительности число ложных совпадений сведет всю фору на нет.
Приступим!
Проведем исключительно синтетический тест скорости. В данном испытании наши функции будут хешировать миллион случайных строк длиной 1024, 512, 256, 128 и 64 байта. Набор материала для всех функций един, перед выполнением батареи тестов приоритет процесса устанавливается на realtime (реального времени), а сам процесс выполняется лишь на одном из ядер ЦП для исключения возможных искажений информации. Результатом замера будет разница значений функции QueryPerfomanceTimer. Сам код скомпилирован С++ Builder 16.0 с оптимизацией "fastest possible code". Следует отметить, что исходный текст алгоримтов не был никоем образом оптимизирован, поэтому вся работа в этом направлении ведется лишь компилятором. Результаты отсортированы по сренему показателю процессорного времени. Соответственно, чем оно меньше, тем быстрее показал себя испытуемый.
Тест производительности функций - C++ Builder 16.0, Core i3 (2120) |
Алгоритм |
Блок 1024 |
Блок 512
|
Блок 256
|
Блок 128
|
Блок 64 |
Среднее |
maRushPrime1 |
1244557 |
617279 |
304915 |
148274 |
67909 |
476587 |
maFastPrime1 |
1256819 |
630568 |
315702 |
151684 |
79414 |
486837 |
XXH_fast32 |
1783725 |
942527 |
529087 |
293166 |
188866 |
747474 |
PaulHsieh |
1806774 |
914041 |
469428 |
239142 |
123406 |
710558 |
SuperFastHash |
1807338 |
919355 |
475918 |
242219 |
124304 |
713827 |
Murmur2A |
1912092 |
977115 |
514278 |
283438 |
148806 |
767146 |
SBOX |
2024283 |
1020267 |
516150 |
265498 |
128310 |
790902 |
XXH_strong32 |
2315467 |
1204298 |
649836 |
355381 |
216531 |
948303 |
Murmur3 |
2319545 |
1185148 |
623534 |
334233 |
162431 |
924978 |
lookup3 |
2736543 |
1361577 |
701587 |
350986 |
190662 |
1068271 |
Murmur2 |
2786721 |
1409774 |
705895 |
388551 |
188652 |
1095919 |
x17 |
3302670 |
1659110 |
844174 |
431555 |
212017 |
1289905 |
x31 |
3470177 |
1735343 |
867012 |
434077 |
217180 |
1344758 |
Fletcher |
3611984 |
1802152 |
904394 |
461391 |
233072 |
1402599 |
CrapWow |
3671547 |
1867617 |
969502 |
482704 |
257698 |
1449814 |
Crap8 |
3978523 |
2025220 |
1039849 |
524446 |
276836 |
1568975 |
FNV |
3990102 |
1983903 |
974592 |
477033 |
224042 |
1529934 |
BKDR |
3990114 |
1982633 |
978090 |
480394 |
228444 |
1531935 |
RS |
4020749 |
2016471 |
1016928 |
511859 |
259719 |
1565145 |
DJB |
4024528 |
2009826 |
1006361 |
500140 |
249948 |
1558161 |
Novak |
4025595 |
2023000 |
1013481 |
513954 |
249758 |
1565158 |
maPrime2c |
4455741 |
2236201 |
1128484 |
573223 |
298560 |
1738442 |
FNV1 |
4996581 |
2485097 |
1232743 |
603242 |
290693 |
1921671 |
LY |
5011203 |
2492391 |
1232793 |
606098 |
288925 |
1926282 |
FNV1a |
5029644 |
2502512 |
1234058 |
604452 |
286585 |
1931450 |
DEK |
5185175 |
2594987 |
1301614 |
652183 |
331099 |
2013012 |
JS |
5337259 |
2673945 |
1338547 |
674291 |
341385 |
2073085 |
ROT13 |
5541539 |
2771521 |
1401829 |
715148 |
370364 |
2160080 |
AP |
5776146 |
2892157 |
1449848 |
730210 |
368307 |
2243334 |
SDBM |
6489631 |
3247294 |
1625272 |
812330 |
412890 |
2517483 |
PJW-32 |
6754805 |
3384722 |
1780620 |
794241 |
398405 |
2622559 |
faq6 |
7023383 |
3514522 |
1757626 |
880206 |
442262 |
2723600 |
OneAtTime |
7030164 |
3516195 |
1759438 |
881111 |
440109 |
2725403 |
Adler |
7451228 |
3722339 |
1862235 |
937637 |
474971 |
2889682 |
ELF |
8105071 |
3994902 |
1997420 |
963994 |
472225 |
3106722 |
crc32 |
9098139 |
4552497 |
2275140 |
1140333 |
568499 |
3526922 |
Goulburn |
19898903 |
9944868 |
4969909 |
2479773 |
1237808 |
7706252 |
Попробуем выявить некую зависимость результатов от выбранного компилятора. В данном конкуретном случае будем использовать GNU GCC 4.4 с опцией "optimize even more" под процессор класса Intel Core 2 DUO
Тест производительности функций - GCC, Core i3 (2120) |
Алгоритм |
Блок 1024 |
Блок 512
|
Блок 256
|
Блок 128
|
Блок 64 |
Среднее |
Murmur3 |
838619 |
434583 |
233129 |
117777 |
67536 |
338329 |
maRushPrime1 |
985239 |
487258 |
235451 |
108938 |
59336 |
375244 |
maFastPrime1 |
987265 |
487651 |
237107 |
113610 |
62457 |
377618 |
Murmur2A |
1030548 |
528850 |
279508 |
143899 |
82682 |
413097 |
Fletcher |
1043723 |
532470 |
284191 |
157257 |
79471 |
419422 |
CrapWow |
1218318 |
632412 |
320335 |
171458 |
96940 |
487893 |
SuperFastHash |
1766861 |
891562 |
454188 |
229886 |
118928 |
692285 |
PaulHsieh |
1768547 |
892574 |
454752 |
237264 |
120407 |
694709 |
lookup3 |
1812582 |
901704 |
461173 |
232755 |
125938 |
706830 |
Murmur2 |
1835496 |
924642 |
472608 |
233256 |
125337 |
718268 |
Novak |
2018288 |
1015218 |
514747 |
264414 |
139732 |
790480 |
SBOX |
2025111 |
1024183 |
521809 |
272217 |
144245 |
797513 |
DEK |
2023839 |
1022941 |
524740 |
271793 |
147495 |
798162 |
XXH_fast32 |
2221415 |
1161824 |
623352 |
327402 |
194869 |
905772 |
XXH_strong32 |
2219179 |
1155987 |
624172 |
336413 |
203631 |
907876 |
Adler |
2390338 |
1242010 |
646132 |
355438 |
202396 |
967263 |
Crap8 |
3507585 |
1736218 |
854243 |
414839 |
195451 |
1341667 |
FNV1a |
3963692 |
1963048 |
960963 |
460312 |
211121 |
1511827 |
SDBM |
3965399 |
1962686 |
963077 |
461841 |
211934 |
1512987 |
FNV1 |
3966417 |
1963141 |
963400 |
462641 |
212112 |
1513542 |
FNV |
3967164 |
1966341 |
965549 |
465063 |
215456 |
1515915 |
BKDR |
3968082 |
1966261 |
966290 |
465013 |
215969 |
1516323 |
RS |
4005813 |
1992413 |
992504 |
491388 |
241029 |
1544629 |
x31 |
4000364 |
1997794 |
996632 |
496454 |
247281 |
1547705 |
DJB |
4000003 |
2000477 |
998835 |
498773 |
248543 |
1549326 |
maPrime2c |
4008522 |
2006902 |
1007230 |
504860 |
255655 |
1556634 |
x17 |
4989591 |
2486118 |
1236297 |
610283 |
298695 |
1924197 |
ROT13 |
5040218 |
2528102 |
1270083 |
642253 |
326986 |
1961528 |
JS |
5313938 |
2662715 |
1336101 |
673775 |
341630 |
2065632 |
LY |
5924865 |
2920826 |
1420998 |
669480 |
294610 |
2246156 |
AP |
6097569 |
3052527 |
1529419 |
768813 |
386900 |
2367046 |
PJW-32 |
7213226 |
3408499 |
1685906 |
813942 |
379359 |
2700186 |
OneAtTime |
7004766 |
3502779 |
1751694 |
876612 |
438130 |
2714796 |
faq6 |
7005885 |
3503871 |
1751325 |
875887 |
438137 |
2715021 |
ELF |
7785573 |
3900946 |
1943880 |
935786 |
440138 |
3001265 |
crc32 |
8039939 |
4006116 |
1988645 |
979857 |
475834 |
3098078 |
Goulburn |
16381053 |
8187208 |
4091069 |
2041737 |
1017776 |
6343769 |
А теперь протестируем код, скомпилированный на MSVC 10 с опциями "максимальная скорость" и "поддержка SIMD2"
Тест производительности функций - VC, Core i3 (2120) |
Алгоритм |
Блок 1024 |
Блок 512
|
Блок 256
|
Блок 128
|
Блок 64 |
Среднее |
XXH_fast32 |
387064 |
209512 |
125281 |
83372 |
62273 |
173500 |
XXH_strong32 |
747196 |
390723 |
212172 |
123254 |
78770 |
310423 |
CrapWow |
894293 |
466712 |
230004 |
124500 |
71974 |
357497 |
maFastPrime1 |
992724 |
490133 |
240013 |
106687 |
57164 |
377344 |
maRushPrime1 |
995598 |
495754 |
244617 |
117622 |
53935 |
381505 |
Murmur3 |
973158 |
498728 |
263140 |
141842 |
72589 |
389891 |
Crap8 |
1048873 |
536968 |
263539 |
139505 |
78177 |
413412 |
Fletcher |
1051002 |
529649 |
279864 |
154652 |
98048 |
422643 |
Murmur2A |
1066592 |
547103 |
289669 |
152994 |
86545 |
428581 |
Murmur2 |
1832528 |
932993 |
478552 |
251542 |
127922 |
724707 |
Novak |
2014241 |
1013862 |
512938 |
263097 |
136725 |
788173 |
SBOX |
2019214 |
1018139 |
517176 |
266749 |
141932 |
792642 |
Adler |
2032708 |
1030831 |
530416 |
280566 |
153515 |
805607 |
PaulHsieh |
2258486 |
1132260 |
569681 |
287776 |
146209 |
878882 |
SuperFastHash |
2261195 |
1134828 |
568226 |
291380 |
147089 |
880544 |
lookup3 |
2448723 |
1228724 |
630957 |
320068 |
177789 |
961252 |
FNV |
3959524 |
1962414 |
957487 |
457520 |
207007 |
1508790 |
FNV1a |
3962435 |
1959820 |
961026 |
458772 |
209179 |
1510246 |
FNV1 |
3962333 |
1961136 |
959499 |
461291 |
210711 |
1510994 |
SDBM |
3965930 |
1964994 |
963843 |
463292 |
213151 |
1514242 |
BKDR |
3968377 |
1964106 |
964572 |
462716 |
213332 |
1514621 |
RS |
3997310 |
1991724 |
990365 |
491878 |
240061 |
1542268 |
DJB |
4007578 |
1995398 |
995553 |
495735 |
244506 |
1547754 |
x31 |
4003208 |
1999112 |
996971 |
496756 |
247247 |
1548659 |
DEK |
4178868 |
2089877 |
1046554 |
524355 |
263877 |
1620706 |
ROT13 |
4252865 |
2132431 |
1066144 |
535742 |
268652 |
1651167 |
JS |
5285993 |
2645633 |
1324626 |
667425 |
337052 |
2052146 |
LY |
5922553 |
2919080 |
1417699 |
667245 |
292121 |
2243740 |
AP |
5859845 |
2935032 |
1474813 |
743117 |
377785 |
2278118 |
x17 |
5982711 |
2980159 |
1477295 |
725353 |
349884 |
2303080 |
PJW-32 |
6781367 |
3392251 |
1654490 |
807060 |
376249 |
2602283 |
OneAtTime |
6986047 |
3483098 |
1731091 |
857126 |
417991 |
2695071 |
faq6 |
6989172 |
3484847 |
1732885 |
857976 |
420930 |
2697162 |
ELF |
7788886 |
3916828 |
1922221 |
931236 |
436961 |
2999226 |
crc32 |
8189748 |
4059546 |
2046837 |
1024389 |
476197 |
3159343 |
maPrime2c |
9416305 |
4695518 |
2335524 |
1155650 |
565057 |
3633611 |
Goulburn |
18403890 |
9201737 |
4603225 |
2298500 |
1148928 |
7131256 |
Стоит для чистоты тестов провести их и на ином оборудовании. В данном случае использован вариант с C++ Builder 16 на AMD Athlon II X4 640
Тест производительности функций - C++ Builder, Athlon II X4 640 |
Алгоритм |
Блок 1024 |
Блок 512
|
Блок 256
|
Блок 128
|
Блок 64 |
Среднее |
maRushPrime1 |
1276876 |
649660 |
337051 |
180068 |
101712 |
509073 |
maFastPrime1 |
1302567 |
657798 |
347311 |
190802 |
109621 |
521620 |
SuperFastHash |
1787138 |
915575 |
472668 |
252467 |
142837 |
714137 |
PaulHsieh |
1798522 |
920685 |
477374 |
253563 |
142875 |
718604 |
XXH_fast32 |
1844059 |
969305 |
557745 |
336322 |
206321 |
782750 |
Murmur3 |
2481660 |
1289680 |
664611 |
321909 |
182967 |
988165 |
lookup3 |
2645612 |
1338647 |
692945 |
348208 |
194072 |
1043897 |
Murmur2A |
2652082 |
1341862 |
691849 |
377577 |
213387 |
1055351 |
SBOX |
3035031 |
1533775 |
777536 |
402108 |
213356 |
1192361 |
x31 |
3287751 |
1657544 |
840891 |
431534 |
227966 |
1289137 |
Murmur2 |
3552961 |
1787991 |
910111 |
469898 |
252508 |
1394694 |
x17 |
3803839 |
1921528 |
973932 |
501438 |
266137 |
1493375 |
FNV |
4042619 |
2025140 |
1022646 |
521439 |
271007 |
1576570 |
BKDR |
4083692 |
2091706 |
1025921 |
521654 |
271083 |
1598811 |
CrapWow |
4111142 |
2090474 |
1052960 |
543106 |
279016 |
1615340 |
DJB |
4139572 |
2146085 |
1019888 |
560080 |
267997 |
1626724 |
Novak |
4303238 |
2175392 |
1098429 |
565460 |
298345 |
1688173 |
XXH_strong32 |
4578382 |
2338603 |
1221752 |
629117 |
317256 |
1817022 |
Fletcher |
4661857 |
2346383 |
1192765 |
619656 |
328717 |
1829876 |
Crap8 |
4867837 |
2491960 |
1162351 |
671597 |
343422 |
1907433 |
FNV1 |
5033460 |
2523836 |
1267885 |
642884 |
328774 |
1959368 |
LY |
5040469 |
2527927 |
1270041 |
644768 |
331109 |
1962863 |
FNV1a |
5043173 |
2529903 |
1271916 |
646720 |
333126 |
1964968 |
DEK |
5041499 |
2527580 |
1281313 |
646662 |
333633 |
1966137 |
JS |
5044004 |
2531296 |
1275941 |
649816 |
336544 |
1967520 |
ROT13 |
5038480 |
2530108 |
1287027 |
648140 |
335113 |
1967774 |
RS |
5049312 |
2590263 |
1291189 |
651116 |
337822 |
1983940 |
SDBM |
6041150 |
3029485 |
1536178 |
771226 |
395187 |
2354645 |
maPrime2c |
6041797 |
3035507 |
1531717 |
775170 |
399741 |
2356786 |
AP |
6046528 |
3040173 |
1531749 |
773939 |
398615 |
2358201 |
crc32 |
7045577 |
3543502 |
1777067 |
899454 |
460766 |
2745273 |
OneAtTime |
7041538 |
3540406 |
1780104 |
904057 |
462763 |
2745774 |
faq6 |
7051014 |
3540846 |
1778909 |
903420 |
466674 |
2748173 |
ELF |
8891171 |
4449007 |
2148804 |
1096976 |
527386 |
3422669 |
PJW-32 |
8902362 |
4456197 |
2162512 |
1109942 |
540072 |
3434217 |
Adler |
9243471 |
4672593 |
2371788 |
1225964 |
649589 |
3632681 |
Goulburn |
16064024 |
8049788 |
4034188 |
2030667 |
1026199 |
6240973 |
Теперь проведем общий "забег" алгоритмов, скомпилированных GCC с опцией "Athlon64 tuning" на AMD Athlon II X4 640
Тест производительности функций - GCC, Athlon II X4 640 |
Алгоритм |
Блок 1024 |
Блок 512
|
Блок 256
|
Блок 128
|
Блок 64 |
Среднее |
maRushPrime1 |
1031436 |
530447 |
279937 |
154523 |
91010 |
417471 |
maFastPrime1 |
1034439 |
533328 |
282839 |
157786 |
94912 |
420661 |
Fletcher |
1077664 |
537186 |
286703 |
161486 |
98796 |
432367 |
Murmur3 |
1407439 |
718632 |
373864 |
201611 |
115536 |
563416 |
CrapWow |
1445628 |
741801 |
389481 |
210438 |
109598 |
579389 |
lookup3 |
1709167 |
856247 |
443135 |
221154 |
122456 |
670432 |
PaulHsieh |
1789052 |
911028 |
472978 |
253449 |
144772 |
714256 |
SuperFastHash |
1794623 |
912429 |
472978 |
254435 |
144854 |
715864 |
Murmur2A |
2042096 |
916467 |
478416 |
258349 |
161419 |
771349 |
Adler |
2040493 |
1037221 |
536273 |
285842 |
160395 |
812045 |
XXH_fast32 |
2169841 |
1132378 |
613665 |
334594 |
205583 |
891212 |
XXH_strong32 |
2461215 |
1343570 |
717123 |
384566 |
234027 |
1028100 |
Murmur2 |
2788813 |
1411096 |
722234 |
377909 |
204525 |
1100915 |
DEK |
3033780 |
1526401 |
774954 |
399162 |
211549 |
1189169 |
SBOX |
3033454 |
1527676 |
775825 |
400258 |
215213 |
1190485 |
Novak |
3038003 |
1528396 |
777774 |
401157 |
214441 |
1191954 |
Crap8 |
3521311 |
1783001 |
902052 |
473573 |
229714 |
1381930 |
FNV1 |
4027738 |
2022724 |
1021390 |
519564 |
270099 |
1572303 |
BKDR |
4029177 |
2024496 |
1022479 |
521576 |
271201 |
1573786 |
SDBM |
4033660 |
2024509 |
1022698 |
521505 |
271282 |
1574731 |
FNV1a |
4038233 |
2023669 |
1021816 |
520705 |
270963 |
1575077 |
x31 |
4037670 |
2026545 |
1023351 |
523556 |
272969 |
1576818 |
DJB |
4039558 |
2025730 |
1024341 |
522804 |
273034 |
1577093 |
maPrime2c |
4040078 |
2027291 |
1025466 |
524532 |
274995 |
1578472 |
FNV |
4056731 |
2024905 |
1022583 |
521687 |
271214 |
1579424 |
x17 |
4533838 |
2273142 |
1145790 |
582125 |
300642 |
1767107 |
JS |
5032462 |
2526537 |
1274027 |
647706 |
334655 |
1963077 |
LY |
5043642 |
2526528 |
1273801 |
647858 |
334723 |
1965310 |
ROT13 |
5036414 |
2529626 |
1276842 |
650600 |
336832 |
1966063 |
RS |
5043070 |
2530609 |
1276107 |
651653 |
337531 |
1967794 |
AP |
5557079 |
2794754 |
1416045 |
727981 |
383615 |
2175895 |
crc32 |
6043525 |
3030498 |
1526547 |
775840 |
400107 |
2355303 |
OneAtTime |
7042982 |
3533191 |
1776803 |
901126 |
463749 |
2743570 |
faq6 |
7047681 |
3531386 |
1776885 |
901177 |
463692 |
2744164 |
PJW-32 |
7986285 |
3921814 |
1971487 |
976387 |
457921 |
3062779 |
ELF |
8910780 |
4390610 |
2193539 |
1092809 |
506889 |
3418925 |
Goulburn |
14063700 |
7040201 |
3533367 |
1779770 |
903049 |
5464017 |
Посмотрим, как покажет себя код, генерированный компилятором MSVC на AMD Athlon II X4 640
Тест производительности функций - MSVC, Athlon II X4 640 |
Алгоритм |
Блок 1024 |
Блок 512
|
Блок 256
|
Блок 128
|
Блок 64 |
Среднее |
XXH_fast32 |
318149 |
188903 |
126236 |
77332 |
61610 |
154446 |
CrapWow |
913259 |
475601 |
256396 |
146738 |
72340 |
372867 |
XXH_strong32 |
931756 |
494165 |
274980 |
147826 |
92938 |
388333 |
Crap8 |
1038746 |
536122 |
285870 |
160414 |
81218 |
420474 |
maRushPrime1 |
1049782 |
529420 |
278829 |
154842 |
90970 |
420769 |
maFastPrime1 |
1027678 |
550250 |
280862 |
154545 |
91961 |
421059 |
Fletcher |
1133253 |
582099 |
306439 |
167294 |
96839 |
457185 |
Murmur3 |
1278271 |
559919 |
293479 |
160552 |
93903 |
477225 |
Murmur2A |
2039563 |
1037115 |
536196 |
284713 |
159692 |
811456 |
Adler |
2237365 |
1133117 |
583427 |
306247 |
165396 |
885110 |
SuperFastHash |
2285041 |
1157674 |
593866 |
312036 |
172177 |
904159 |
PaulHsieh |
2286253 |
1158831 |
594814 |
312150 |
171262 |
904662 |
lookup3 |
2301969 |
1165440 |
605843 |
309213 |
173173 |
911128 |
SBOX |
3028994 |
1527455 |
774944 |
400161 |
211370 |
1188585 |
Novak |
3031082 |
1527307 |
776086 |
400165 |
212489 |
1189426 |
Murmur2 |
3036939 |
1533393 |
781753 |
405121 |
217505 |
1194942 |
FNV1 |
4025016 |
2020490 |
1018458 |
517549 |
267114 |
1569725 |
SDBM |
4025708 |
2021609 |
1019616 |
517501 |
267135 |
1570314 |
BKDR |
4025851 |
2021583 |
1019759 |
517501 |
267138 |
1570366 |
FNV |
4025671 |
2021992 |
1019706 |
517461 |
267127 |
1570391 |
DEK |
4025857 |
2021755 |
1019743 |
517587 |
268136 |
1570616 |
FNV1a |
4027384 |
2022651 |
1020516 |
519585 |
269097 |
1571847 |
ROT13 |
4028332 |
2023511 |
1021617 |
520666 |
270038 |
1572833 |
x31 |
4028802 |
2025668 |
1022658 |
522426 |
271013 |
1574113 |
DJB |
4065424 |
2022554 |
1254230 |
518627 |
268081 |
1625783 |
LY |
5026659 |
2521434 |
1269099 |
642790 |
329725 |
1957941 |
x17 |
5027436 |
2524805 |
1270060 |
645774 |
330757 |
1959766 |
JS |
5030291 |
2523543 |
1270972 |
643754 |
331656 |
1960043 |
AP |
5591435 |
2777962 |
1396457 |
707437 |
363018 |
2167262 |
crc32 |
6033655 |
3027303 |
1524398 |
773169 |
396245 |
2350954 |
RS |
6037080 |
3030264 |
1528550 |
776943 |
398165 |
2354200 |
OneAtTime |
7035983 |
3528618 |
1775104 |
898160 |
460075 |
2739588 |
faq6 |
7035749 |
3528481 |
1775209 |
898129 |
461906 |
2739895 |
maPrime2c |
7040283 |
3532353 |
1779045 |
901212 |
461805 |
2742940 |
PJW-32 |
8093938 |
3977967 |
2001206 |
1005366 |
455895 |
3106874 |
ELF |
8901288 |
4380785 |
2183000 |
1079194 |
500934 |
3409040 |
Goulburn |
16055419 |
8039111 |
4031465 |
2027666 |
1025439 |
6235820 |
А теперь отойдем от чисто синтетических исследований и совместим наше испытанием с вычислением качества функции, проще говоря, замерим число коллизий (случайных совпадений) на большом массиве информации. В качестве тестового материала выбран все тот же, содержащий слова, отсортированные в алфавитном порядке. В основе оного - заголовки из Русской Википедии, Большой советской энциклопедии, Большого англо-русского словаря и других словарных источников в общем колличестве 2726299 уникальных слова. Важно отменить, что все тексты - в кодировке cp866, минимальная длина - 3 символа, регистр - верхний. Исходный код скомпилирован на C++ Builder, как и в синтетическом тесте. Замер выполняется на AMD Athlon II X4 640. Отличие от синтетического теста здесь подсчет временных характеристик выполняется суммированием времени вычисления отдельных строк, что более приближено к реальным условия работы типового приложения. Набор тестов от A до H идентичен методике прошлого теста. В данной таблице результаты отсортированы по числу коллизиций, т.е. по качеству функции в рамках исследования.
Тест качества функций -BCC, Athlon II X4 640 |
Алгоритм |
Коллизии A |
Время A |
Коллизии B |
Время B |
Коллизии C |
Время C |
Коллизии D |
Время D |
Коллизии E |
Время E |
Коллизии F |
Время F |
Коллизии G |
Время G |
Коллизии H |
Время H |
Коллизии Среднее |
Время Среднее |
maPrime2c |
804 |
579597 |
814 |
603757 |
810 |
660091 |
873 |
678113 |
856 |
780422 |
869 |
1149810 |
796 |
559979 |
864 |
770582 |
836 |
722794 |
lookup3 |
886 |
512573 |
868 |
521577 |
900 |
555375 |
785 |
565621 |
867 |
635126 |
892 |
838975 |
831 |
510724 |
834 |
627614 |
858 |
595948 |
crc32 |
856 |
593875 |
856 |
624996 |
856 |
697340 |
856 |
717613 |
886 |
833701 |
827 |
1258657 |
899 |
592678 |
859 |
828011 |
862 |
768359 |
Murmur2A |
848 |
558954 |
847 |
554577 |
922 |
598009 |
836 |
604478 |
990 |
658961 |
1140 |
865412 |
879 |
540226 |
861 |
670544 |
915 |
631395 |
OneAtTime |
947 |
601329 |
947 |
619889 |
947 |
699977 |
947 |
725203 |
889 |
832536 |
869 |
1258727 |
906 |
594367 |
913 |
839883 |
921 |
771489 |
faq6 |
947 |
615677 |
947 |
631117 |
947 |
707682 |
947 |
729119 |
889 |
841544 |
869 |
1263209 |
906 |
602742 |
913 |
838249 |
921 |
778667 |
Murmur2 |
861 |
509505 |
864 |
518539 |
808 |
568075 |
823 |
580776 |
1138 |
656812 |
1832 |
916244 |
836 |
497703 |
874 |
656874 |
1005 |
613066 |
ROT13 |
987 |
562620 |
1016 |
581446 |
1095 |
650588 |
1129 |
662945 |
1015 |
745545 |
964 |
1065416 |
928 |
559499 |
1459 |
739350 |
1074 |
695926 |
Murmur3 |
887 |
501526 |
860 |
515583 |
826 |
555354 |
829 |
558233 |
2097 |
607446 |
2330 |
800575 |
861 |
498778 |
854 |
604182 |
1193 |
580210 |
AP |
873 |
589912 |
887 |
611396 |
827 |
667772 |
813 |
683480 |
1416 |
786116 |
4568 |
1150718 |
885 |
587111 |
842 |
773535 |
1389 |
731255 |
LY |
819 |
527462 |
819 |
541318 |
819 |
607587 |
819 |
623707 |
1748 |
721364 |
3543 |
1032331 |
883 |
521198 |
1766 |
709144 |
1402 |
660514 |
BKDR |
860 |
526014 |
860 |
534022 |
860 |
584938 |
860 |
596272 |
1708 |
673899 |
3548 |
933135 |
894 |
509321 |
1906 |
666115 |
1437 |
627965 |
FNV1a |
807 |
530127 |
807 |
546351 |
807 |
614627 |
807 |
629871 |
2650 |
711365 |
5235 |
1036196 |
910 |
518998 |
1695 |
731534 |
1715 |
664884 |
FNV1 |
869 |
535479 |
869 |
553619 |
869 |
615312 |
869 |
633290 |
2589 |
719605 |
5209 |
1028773 |
899 |
524284 |
1758 |
716713 |
1741 |
665884 |
DJB |
1152 |
513714 |
1152 |
524336 |
1152 |
577459 |
1152 |
593538 |
2081 |
659674 |
3787 |
929148 |
1180 |
503533 |
5952 |
664861 |
2201 |
620783 |
SBOX |
1511 |
547072 |
1521 |
557584 |
1608 |
607298 |
1594 |
616877 |
2722 |
685757 |
4940 |
903457 |
1530 |
540407 |
2308 |
692089 |
2217 |
643818 |
FNV |
873 |
516497 |
873 |
524672 |
873 |
577357 |
873 |
592250 |
4436 |
660236 |
9037 |
928300 |
800 |
501836 |
3386 |
677194 |
2644 |
622293 |
RS |
845 |
565776 |
896 |
577576 |
877 |
637797 |
867 |
655562 |
2092 |
745452 |
9298 |
1049948 |
802 |
550456 |
6375 |
731127 |
2757 |
689212 |
maFastPrime1 |
1063 |
510234 |
1096 |
519945 |
1107 |
550235 |
1057 |
552829 |
5065 |
571797 |
11610 |
673763 |
1070 |
506514 |
851 |
566163 |
2865 |
556435 |
maRushPrime1 |
1077 |
447572 |
1107 |
453776 |
1481 |
484718 |
1076 |
490518 |
5089 |
526227 |
11621 |
657008 |
1112 |
444282 |
926 |
516711 |
2936 |
502602 |
Crap8 |
851 |
621378 |
875 |
623953 |
870 |
668268 |
886 |
677415 |
9523 |
758838 |
9633 |
1051668 |
861 |
611401 |
868 |
749169 |
3046 |
720261 |
PaulHsieh |
4987 |
471788 |
3889 |
488979 |
3934 |
512539 |
3935 |
516937 |
2066 |
566527 |
1873 |
722554 |
3862 |
463620 |
968 |
557745 |
3189 |
537586 |
SuperFastHash |
4987 |
504043 |
3889 |
538659 |
3934 |
551131 |
3935 |
586711 |
2066 |
587898 |
1873 |
735826 |
3862 |
551007 |
968 |
628546 |
3189 |
585478 |
JS |
3513 |
542088 |
4151 |
559277 |
6105 |
622518 |
6735 |
635679 |
1009 |
729897 |
881 |
1040217 |
3350 |
534743 |
898 |
716972 |
3330 |
672674 |
x31 |
3266 |
504118 |
3227 |
512310 |
3292 |
562971 |
3231 |
572253 |
4930 |
653800 |
7414 |
866495 |
2650 |
488236 |
3053 |
654396 |
3883 |
601822 |
Goulburn |
5309 |
855933 |
9635 |
895867 |
22197 |
1047852 |
26506 |
1091273 |
5218 |
1317704 |
5312 |
2214734 |
5380 |
842644 |
5311 |
1331689 |
10609 |
1199712 |
SDBM |
943 |
556342 |
943 |
578487 |
943 |
648213 |
943 |
665347 |
14996 |
768275 |
30196 |
1141981 |
869 |
554351 |
89196 |
781506 |
17379 |
711813 |
x17 |
25281 |
501158 |
25346 |
513582 |
25254 |
570758 |
25239 |
598536 |
26179 |
668425 |
27892 |
928161 |
23828 |
496324 |
1903 |
665083 |
22615 |
617753 |
XXH_strong32 |
19080 |
600859 |
17624 |
614373 |
77297 |
681540 |
85310 |
707050 |
135521 |
833510 |
126831 |
1141187 |
4418 |
601968 |
1277 |
829263 |
58420 |
751219 |
XXH_fast32 |
19097 |
585011 |
17620 |
599021 |
77324 |
657700 |
85329 |
677954 |
135567 |
776863 |
138572 |
963122 |
4424 |
574768 |
1312 |
764812 |
59906 |
699906 |
DEK |
6824 |
533793 |
5474 |
553251 |
5362 |
615706 |
5070 |
640879 |
24564 |
714458 |
422012 |
1037047 |
8629 |
531949 |
1820 |
715478 |
59969 |
667820 |
CrapWow |
996 |
581273 |
970 |
586921 |
1006 |
639691 |
996 |
657019 |
397113 |
741580 |
683161 |
1001046 |
1026 |
567891 |
2757 |
740052 |
136003 |
689434 |
ELF |
52291 |
595540 |
268965 |
613364 |
268965 |
685281 |
268733 |
712980 |
455236 |
850980 |
706374 |
1387958 |
49808 |
587768 |
70326 |
850870 |
267587 |
785593 |
PJW-32 |
52291 |
612975 |
268965 |
632833 |
268965 |
706575 |
268733 |
733993 |
455236 |
865631 |
706374 |
1419954 |
49808 |
607517 |
70326 |
862341 |
267587 |
805227 |
Fletcher |
434075 |
582084 |
30303 |
599523 |
30349 |
655327 |
36015 |
667890 |
284334 |
760545 |
282984 |
1057931 |
250407 |
578489 |
2174482 |
763831 |
440369 |
708203 |
Novak |
753734 |
542963 |
753734 |
543893 |
753734 |
603313 |
753734 |
618332 |
597509 |
704157 |
598661 |
992766 |
729428 |
526979 |
34043 |
701231 |
621822 |
654204 |
Adler |
1952330 |
783743 |
1952330 |
811325 |
1952330 |
905736 |
1952330 |
939773 |
1951871 |
1078973 |
1951872 |
1609978 |
1952044 |
781131 |
2709710 |
1067858 |
2046852 |
997315 |
Отсортируем результаты по времени выполнения. Выше расположены функции, лучшие по данному показателю на все том же наборе данных. Результаты в виде электронной таблицы расположены здесь.
Тест времени выполнения функций -BCC, Athlon II X4 640 |
Алгоритм |
Коллизии A |
Время A |
Коллизии B |
Время B |
Коллизии C |
Время C |
Коллизии D |
Время D |
Коллизии E |
Время E |
Коллизии F |
Время F |
Коллизии G |
Время G |
Коллизии H |
Время H |
Коллизии Среднее |
Время Среднее |
maRushPrime1 |
1077 |
447572 |
1107 |
453776 |
1481 |
484718 |
1076 |
490518 |
5089 |
526227 |
11621 |
657008 |
1112 |
444282 |
926 |
516711 |
2936 |
502602 |
PaulHsieh |
4987 |
471788 |
3889 |
488979 |
3934 |
512539 |
3935 |
516937 |
2066 |
566527 |
1873 |
722554 |
3862 |
463620 |
968 |
557745 |
3189 |
537586 |
maFastPrime1 |
1063 |
510234 |
1096 |
519945 |
1107 |
550235 |
1057 |
552829 |
5065 |
571797 |
11610 |
673763 |
1070 |
506514 |
851 |
566163 |
2865 |
556435 |
Murmur3 |
887 |
501526 |
860 |
515583 |
826 |
555354 |
829 |
558233 |
2097 |
607446 |
2330 |
800575 |
861 |
498778 |
854 |
604182 |
1193 |
580210 |
SuperFastHash |
4987 |
504043 |
3889 |
538659 |
3934 |
551131 |
3935 |
586711 |
2066 |
587898 |
1873 |
735826 |
3862 |
551007 |
968 |
628546 |
3189 |
585478 |
lookup3 |
886 |
512573 |
868 |
521577 |
900 |
555375 |
785 |
565621 |
867 |
635126 |
892 |
838975 |
831 |
510724 |
834 |
627614 |
858 |
595948 |
x31 |
3266 |
504118 |
3227 |
512310 |
3292 |
562971 |
3231 |
572253 |
4930 |
653800 |
7414 |
866495 |
2650 |
488236 |
3053 |
654396 |
3883 |
601822 |
Murmur2 |
861 |
509505 |
864 |
518539 |
808 |
568075 |
823 |
580776 |
1138 |
656812 |
1832 |
916244 |
836 |
497703 |
874 |
656874 |
1005 |
613066 |
x17 |
25281 |
501158 |
25346 |
513582 |
25254 |
570758 |
25239 |
598536 |
26179 |
668425 |
27892 |
928161 |
23828 |
496324 |
1903 |
665083 |
22615 |
617753 |
DJB |
1152 |
513714 |
1152 |
524336 |
1152 |
577459 |
1152 |
593538 |
2081 |
659674 |
3787 |
929148 |
1180 |
503533 |
5952 |
664861 |
2201 |
620783 |
FNV |
873 |
516497 |
873 |
524672 |
873 |
577357 |
873 |
592250 |
4436 |
660236 |
9037 |
928300 |
800 |
501836 |
3386 |
677194 |
2644 |
622293 |
BKDR |
860 |
526014 |
860 |
534022 |
860 |
584938 |
860 |
596272 |
1708 |
673899 |
3548 |
933135 |
894 |
509321 |
1906 |
666115 |
1437 |
627965 |
Murmur2A |
848 |
558954 |
847 |
554577 |
922 |
598009 |
836 |
604478 |
990 |
658961 |
1140 |
865412 |
879 |
540226 |
861 |
670544 |
915 |
631395 |
SBOX |
1511 |
547072 |
1521 |
557584 |
1608 |
607298 |
1594 |
616877 |
2722 |
685757 |
4940 |
903457 |
1530 |
540407 |
2308 |
692089 |
2217 |
643818 |
Novak |
753734 |
542963 |
753734 |
543893 |
753734 |
603313 |
753734 |
618332 |
597509 |
704157 |
598661 |
992766 |
729428 |
526979 |
34043 |
701231 |
621822 |
654204 |
LY |
819 |
527462 |
819 |
541318 |
819 |
607587 |
819 |
623707 |
1748 |
721364 |
3543 |
1032331 |
883 |
521198 |
1766 |
709144 |
1402 |
660514 |
FNV1a |
807 |
530127 |
807 |
546351 |
807 |
614627 |
807 |
629871 |
2650 |
711365 |
5235 |
1036196 |
910 |
518998 |
1695 |
731534 |
1715 |
664884 |
FNV1 |
869 |
535479 |
869 |
553619 |
869 |
615312 |
869 |
633290 |
2589 |
719605 |
5209 |
1028773 |
899 |
524284 |
1758 |
716713 |
1741 |
665884 |
DEK |
6824 |
533793 |
5474 |
553251 |
5362 |
615706 |
5070 |
640879 |
24564 |
714458 |
422012 |
1037047 |
8629 |
531949 |
1820 |
715478 |
59969 |
667820 |
JS |
3513 |
542088 |
4151 |
559277 |
6105 |
622518 |
6735 |
635679 |
1009 |
729897 |
881 |
1040217 |
3350 |
534743 |
898 |
716972 |
3330 |
672674 |
RS |
845 |
565776 |
896 |
577576 |
877 |
637797 |
867 |
655562 |
2092 |
745452 |
9298 |
1049948 |
802 |
550456 |
6375 |
731127 |
2757 |
689212 |
CrapWow |
996 |
581273 |
970 |
586921 |
1006 |
639691 |
996 |
657019 |
397113 |
741580 |
683161 |
1001046 |
1026 |
567891 |
2757 |
740052 |
136003 |
689434 |
ROT13 |
987 |
562620 |
1016 |
581446 |
1095 |
650588 |
1129 |
662945 |
1015 |
745545 |
964 |
1065416 |
928 |
559499 |
1459 |
739350 |
1074 |
695926 |
XXH_fast32 |
19097 |
585011 |
17620 |
599021 |
77324 |
657700 |
85329 |
677954 |
135567 |
776863 |
138572 |
963122 |
4424 |
574768 |
1312 |
764812 |
59906 |
699906 |
Fletcher |
434075 |
582084 |
30303 |
599523 |
30349 |
655327 |
36015 |
667890 |
284334 |
760545 |
282984 |
1057931 |
250407 |
578489 |
2174482 |
763831 |
440369 |
708203 |
SDBM |
943 |
556342 |
943 |
578487 |
943 |
648213 |
943 |
665347 |
14996 |
768275 |
30196 |
1141981 |
869 |
554351 |
89196 |
781506 |
17379 |
711813 |
Crap8 |
851 |
621378 |
875 |
623953 |
870 |
668268 |
886 |
677415 |
9523 |
758838 |
9633 |
1051668 |
861 |
611401 |
868 |
749169 |
3046 |
720261 |
maPrime2c |
804 |
579597 |
814 |
603757 |
810 |
660091 |
873 |
678113 |
856 |
780422 |
869 |
1149810 |
796 |
559979 |
864 |
770582 |
836 |
722794 |
AP |
873 |
589912 |
887 |
611396 |
827 |
667772 |
813 |
683480 |
1416 |
786116 |
4568 |
1150718 |
885 |
587111 |
842 |
773535 |
1389 |
731255 |
XXH_strong32 |
19080 |
600859 |
17624 |
614373 |
77297 |
681540 |
85310 |
707050 |
135521 |
833510 |
126831 |
1141187 |
4418 |
601968 |
1277 |
829263 |
58420 |
751219 |
crc32 |
856 |
593875 |
856 |
624996 |
856 |
697340 |
856 |
717613 |
886 |
833701 |
827 |
1258657 |
899 |
592678 |
859 |
828011 |
862 |
768359 |
OneAtTime |
947 |
601329 |
947 |
619889 |
947 |
699977 |
947 |
725203 |
889 |
832536 |
869 |
1258727 |
906 |
594367 |
913 |
839883 |
921 |
771489 |
faq6 |
947 |
615677 |
947 |
631117 |
947 |
707682 |
947 |
729119 |
889 |
841544 |
869 |
1263209 |
906 |
602742 |
913 |
838249 |
921 |
778667 |
ELF |
52291 |
595540 |
268965 |
613364 |
268965 |
685281 |
268733 |
712980 |
455236 |
850980 |
706374 |
1387958 |
49808 |
587768 |
70326 |
850870 |
267587 |
785593 |
PJW-32 |
52291 |
612975 |
268965 |
632833 |
268965 |
706575 |
268733 |
733993 |
455236 |
865631 |
706374 |
1419954 |
49808 |
607517 |
70326 |
862341 |
267587 |
805227 |
Adler |
1952330 |
783743 |
1952330 |
811325 |
1952330 |
905736 |
1952330 |
939773 |
1951871 |
1078973 |
1951872 |
1609978 |
1952044 |
781131 |
2709710 |
1067858 |
2046852 |
997315 |
Goulburn |
5309 |
855933 |
9635 |
895867 |
22197 |
1047852 |
26506 |
1091273 |
5218 |
1317704 |
5312 |
2214734 |
5380 |
842644 |
5311 |
1331689 |
10609 |
1199712 |
Теперь усложним тест. Вместо слов различной длины у нас будет фиксированный список слов, различающихся незначительно. В качестве материала выбран список IP адресов, имеющих массу случайных совпадений. В данной таблице рассмотрим число выявленных коллизий в порядке возрастания. Результаты можно скачать в виде электронной таблицы не иначе как здесь.
Тест качества функций -BCC, Athlon II X4 640 |
Алгоритм |
Коллизии A |
Время A |
Коллизии B |
Время B |
Коллизии C |
Время C |
Коллизии D |
Время D |
Коллизии E |
Время E |
Коллизии F |
Время F |
Коллизии G |
Время G |
Коллизии H |
Время H |
Коллизии Среднее |
Время Среднее |
AP |
0 |
676632 |
0 |
677284 |
0 |
744655 |
0 |
765078 |
0 |
931299 |
0 |
1486240 |
0 |
672287 |
0 |
913888 |
0 |
858420 |
crc32 |
0 |
710641 |
0 |
716106 |
0 |
787135 |
0 |
800364 |
0 |
1009105 |
0 |
1672227 |
0 |
694246 |
0 |
990754 |
0 |
922572 |
x17 |
0 |
516836 |
0 |
559699 |
0 |
577842 |
0 |
594776 |
0 |
739697 |
0 |
1151253 |
0 |
536210 |
420 |
731856 |
53 |
676021 |
BKDR |
0 |
575134 |
0 |
579530 |
0 |
638370 |
0 |
643083 |
0 |
820401 |
0 |
1188280 |
0 |
555183 |
1284 |
731691 |
161 |
716459 |
ROT13 |
0 |
653847 |
0 |
731015 |
60 |
709104 |
117 |
742615 |
1224 |
937476 |
870 |
1422099 |
247 |
646914 |
1431 |
894502 |
494 |
842197 |
Murmur2A |
893 |
555029 |
798 |
590956 |
798 |
591975 |
868 |
615911 |
891 |
696745 |
829 |
1029091 |
795 |
556930 |
881 |
664499 |
844 |
662642 |
Murmur2 |
880 |
548956 |
800 |
572603 |
784 |
577007 |
898 |
610429 |
849 |
723239 |
891 |
1117976 |
824 |
539446 |
850 |
685057 |
847 |
671839 |
maPrime2c |
865 |
670135 |
837 |
679477 |
926 |
729093 |
833 |
756687 |
887 |
904343 |
845 |
1516549 |
751 |
653689 |
869 |
897250 |
852 |
850903 |
lookup3 |
885 |
565103 |
845 |
558699 |
895 |
578477 |
867 |
572985 |
881 |
663866 |
866 |
939515 |
827 |
558197 |
876 |
645900 |
868 |
635343 |
OneAtTime |
890 |
709132 |
890 |
728594 |
890 |
784932 |
890 |
826408 |
865 |
1017486 |
868 |
1665030 |
913 |
701058 |
875 |
987220 |
885 |
927483 |
faq6 |
890 |
719006 |
890 |
757007 |
890 |
802614 |
890 |
819951 |
865 |
1021794 |
868 |
1676274 |
913 |
724211 |
875 |
999362 |
885 |
940027 |
Murmur3 |
812 |
517002 |
864 |
505535 |
843 |
541908 |
868 |
581512 |
912 |
618005 |
875 |
963553 |
1363 |
526081 |
868 |
609533 |
926 |
607891 |
FNV1 |
1080 |
612921 |
1080 |
634421 |
1080 |
661274 |
1080 |
684171 |
2227 |
875818 |
4564 |
1335872 |
930 |
608379 |
1734 |
819439 |
1722 |
779037 |
FNV1a |
1108 |
618527 |
1108 |
635356 |
1108 |
687449 |
1108 |
719850 |
2333 |
848855 |
4613 |
1327275 |
1073 |
628311 |
1710 |
811771 |
1770 |
784674 |
SBOX |
1572 |
556901 |
1491 |
563771 |
1517 |
593644 |
1487 |
604526 |
2874 |
757631 |
4831 |
1071376 |
1558 |
559337 |
2265 |
750190 |
2199 |
682172 |
FNV |
736 |
584406 |
736 |
590968 |
736 |
623604 |
736 |
651559 |
3500 |
739888 |
7166 |
1162986 |
810 |
554596 |
3390 |
728996 |
2226 |
704625 |
JS |
3620 |
611290 |
4272 |
647102 |
6278 |
679128 |
6701 |
689751 |
916 |
845735 |
896 |
1337408 |
3045 |
606129 |
2682 |
818967 |
3551 |
779439 |
LY |
5740 |
618026 |
5740 |
637781 |
5740 |
666853 |
5740 |
692467 |
5740 |
837361 |
5740 |
1330350 |
0 |
590703 |
0 |
810798 |
4305 |
773042 |
Crap8 |
1723 |
652871 |
1693 |
634303 |
1670 |
703677 |
1653 |
678178 |
833 |
841386 |
823 |
1220524 |
68751 |
652180 |
823 |
811060 |
9746 |
774272 |
Goulburn |
5741 |
1079085 |
9987 |
1123018 |
22413 |
1257161 |
26734 |
1318281 |
5763 |
1751528 |
5547 |
3129221 |
17923 |
1109174 |
17707 |
1724587 |
13977 |
1561507 |
PaulHsieh |
20533 |
489495 |
26937 |
491486 |
21965 |
518552 |
31937 |
512496 |
979 |
579264 |
1641 |
849274 |
55851 |
493499 |
974 |
561294 |
20102 |
561920 |
SuperFastHash |
20533 |
540178 |
26937 |
511295 |
21965 |
544051 |
31937 |
568783 |
979 |
608325 |
1641 |
844626 |
55851 |
528602 |
974 |
640570 |
20102 |
598304 |
DJB |
0 |
583347 |
0 |
596363 |
0 |
621411 |
0 |
630173 |
0 |
744963 |
1984 |
1258970 |
0 |
573293 |
194327 |
729651 |
24539 |
717271 |
maFastPrime1 |
954 |
596541 |
68070 |
472795 |
78406 |
611041 |
69606 |
478776 |
927 |
624145 |
849 |
748957 |
592 |
573217 |
40181 |
583830 |
32448 |
586163 |
maRushPrime1 |
111076 |
440042 |
68070 |
484354 |
78406 |
471221 |
69606 |
475307 |
995 |
521672 |
849 |
758680 |
592 |
450227 |
40181 |
495588 |
46222 |
512136 |
x31 |
0 |
518166 |
0 |
554843 |
0 |
576124 |
0 |
598499 |
3888 |
735189 |
16776 |
1080780 |
6510 |
534742 |
356070 |
698270 |
47906 |
662077 |
RS |
0 |
643460 |
0 |
661726 |
0 |
702987 |
0 |
703973 |
0 |
859116 |
612 |
1363550 |
824 |
624821 |
600319 |
838081 |
75219 |
799714 |
CrapWow |
39206 |
664748 |
35814 |
662408 |
35768 |
704792 |
38757 |
709703 |
16914 |
870385 |
948 |
1220214 |
1254466 |
640014 |
4347 |
825153 |
178278 |
787177 |
SDBM |
0 |
667482 |
0 |
690221 |
0 |
714714 |
0 |
761954 |
38648 |
898898 |
180052 |
1493314 |
1080 |
646298 |
1598364 |
891864 |
227268 |
845593 |
DEK |
253552 |
615758 |
253552 |
637852 |
253552 |
676166 |
253552 |
698337 |
253552 |
842007 |
292720 |
1340523 |
548736 |
599204 |
0 |
815986 |
263652 |
778229 |
Novak |
451364 |
582537 |
451364 |
588956 |
451364 |
640118 |
451364 |
653316 |
451364 |
817564 |
451364 |
1249891 |
431483 |
578185 |
4196 |
790680 |
392983 |
737656 |
XXH_strong32 |
0 |
631923 |
2723231 |
727712 |
2696939 |
928083 |
2696939 |
889008 |
2696708 |
930151 |
126465 |
1384910 |
0 |
637598 |
126458 |
904396 |
1383343 |
879223 |
ELF |
253884 |
689238 |
1491098 |
714653 |
1491098 |
771251 |
1073498 |
816221 |
1496649 |
1057953 |
2614453 |
1969613 |
1180553 |
669283 |
2432140 |
1054433 |
1504172 |
967831 |
PJW-32 |
253884 |
698212 |
1491098 |
722998 |
1491098 |
801516 |
1073498 |
832159 |
1496649 |
1067401 |
2614453 |
2000505 |
1180553 |
696415 |
2432140 |
1069228 |
1504172 |
986054 |
XXH_fast32 |
0 |
625563 |
2723231 |
718912 |
2696939 |
783067 |
2696939 |
846301 |
2696956 |
814317 |
1814790 |
1038163 |
0 |
636635 |
140662 |
777054 |
1596190 |
780002 |
Fletcher |
2647939 |
640798 |
2489172 |
668079 |
2489172 |
674048 |
2489172 |
738835 |
2693041 |
867037 |
2693041 |
1324908 |
2489172 |
630429 |
2720961 |
854875 |
2588959 |
799876 |
Adler |
2721044 |
911108 |
2721044 |
936121 |
2721044 |
1022278 |
2721044 |
1056365 |
2721044 |
1198343 |
2721044 |
1893175 |
2721044 |
927094 |
2726245 |
1180912 |
2721694 |
1140675 |
Посмотрим теперь время вычисления хешей в предыдущем тесте. Простые математические функции были исключительно хороши, показав полное отсутствие случайных совпадений. Какова их производительность? Результаты можно скачать в виде электронной таблицы не иначе как здесь.
Тест скорости функций BCC, Athlon II X4 640 |
Алгоритм |
Коллизии A |
Время A |
Коллизии B |
Время B |
Коллизии C |
Время C |
Коллизии D |
Время D |
Коллизии E |
Время E |
Коллизии F |
Время F |
Коллизии G |
Время G |
Коллизии H |
Время H |
Коллизии Среднее |
Время Среднее |
maRushPrime1 |
111076 |
440042 |
68070 |
484354 |
78406 |
471221 |
69606 |
475307 |
995 |
521672 |
849 |
758680 |
592 |
450227 |
40181 |
495588 |
46222 |
512136 |
PaulHsieh |
20533 |
489495 |
26937 |
491486 |
21965 |
518552 |
31937 |
512496 |
979 |
579264 |
1641 |
849274 |
55851 |
493499 |
974 |
561294 |
20102 |
561920 |
maFastPrime1 |
954 |
596541 |
68070 |
472795 |
78406 |
611041 |
69606 |
478776 |
927 |
624145 |
849 |
748957 |
592 |
573217 |
40181 |
583830 |
32448 |
586163 |
SuperFastHash |
20533 |
540178 |
26937 |
511295 |
21965 |
544051 |
31937 |
568783 |
979 |
608325 |
1641 |
844626 |
55851 |
528602 |
974 |
640570 |
20102 |
598304 |
Murmur3 |
812 |
517002 |
864 |
505535 |
843 |
541908 |
868 |
581512 |
912 |
618005 |
875 |
963553 |
1363 |
526081 |
868 |
609533 |
926 |
607891 |
lookup3 |
885 |
565103 |
845 |
558699 |
895 |
578477 |
867 |
572985 |
881 |
663866 |
866 |
939515 |
827 |
558197 |
876 |
645900 |
868 |
635343 |
x31 |
0 |
518166 |
0 |
554843 |
0 |
576124 |
0 |
598499 |
3888 |
735189 |
16776 |
1080780 |
6510 |
534742 |
356070 |
698270 |
47906 |
662077 |
Murmur2A |
893 |
555029 |
798 |
590956 |
798 |
591975 |
868 |
615911 |
891 |
696745 |
829 |
1029091 |
795 |
556930 |
881 |
664499 |
844 |
662642 |
Murmur2 |
880 |
548956 |
800 |
572603 |
784 |
577007 |
898 |
610429 |
849 |
723239 |
891 |
1117976 |
824 |
539446 |
850 |
685057 |
847 |
671839 |
x17 |
0 |
516836 |
0 |
559699 |
0 |
577842 |
0 |
594776 |
0 |
739697 |
0 |
1151253 |
0 |
536210 |
420 |
731856 |
53 |
676021 |
SBOX |
1572 |
556901 |
1491 |
563771 |
1517 |
593644 |
1487 |
604526 |
2874 |
757631 |
4831 |
1071376 |
1558 |
559337 |
2265 |
750190 |
2199 |
682172 |
FNV |
736 |
584406 |
736 |
590968 |
736 |
623604 |
736 |
651559 |
3500 |
739888 |
7166 |
1162986 |
810 |
554596 |
3390 |
728996 |
2226 |
704625 |
BKDR |
0 |
575134 |
0 |
579530 |
0 |
638370 |
0 |
643083 |
0 |
820401 |
0 |
1188280 |
0 |
555183 |
1284 |
731691 |
161 |
716459 |
DJB |
0 |
583347 |
0 |
596363 |
0 |
621411 |
0 |
630173 |
0 |
744963 |
1984 |
1258970 |
0 |
573293 |
194327 |
729651 |
24539 |
717271 |
Novak |
451364 |
582537 |
451364 |
588956 |
451364 |
640118 |
451364 |
653316 |
451364 |
817564 |
451364 |
1249891 |
431483 |
578185 |
4196 |
790680 |
392983 |
737656 |
LY |
5740 |
618026 |
5740 |
637781 |
5740 |
666853 |
5740 |
692467 |
5740 |
837361 |
5740 |
1330350 |
0 |
590703 |
0 |
810798 |
4305 |
773042 |
Crap8 |
1723 |
652871 |
1693 |
634303 |
1670 |
703677 |
1653 |
678178 |
833 |
841386 |
823 |
1220524 |
68751 |
652180 |
823 |
811060 |
9746 |
774272 |
DEK |
253552 |
615758 |
253552 |
637852 |
253552 |
676166 |
253552 |
698337 |
253552 |
842007 |
292720 |
1340523 |
548736 |
599204 |
0 |
815986 |
263652 |
778229 |
FNV1 |
1080 |
612921 |
1080 |
634421 |
1080 |
661274 |
1080 |
684171 |
2227 |
875818 |
4564 |
1335872 |
930 |
608379 |
1734 |
819439 |
1722 |
779037 |
JS |
3620 |
611290 |
4272 |
647102 |
6278 |
679128 |
6701 |
689751 |
916 |
845735 |
896 |
1337408 |
3045 |
606129 |
2682 |
818967 |
3551 |
779439 |
XXH_fast32 |
0 |
625563 |
2723231 |
718912 |
2696939 |
783067 |
2696939 |
846301 |
2696956 |
814317 |
1814790 |
1038163 |
0 |
636635 |
140662 |
777054 |
1596190 |
780002 |
FNV1a |
1108 |
618527 |
1108 |
635356 |
1108 |
687449 |
1108 |
719850 |
2333 |
848855 |
4613 |
1327275 |
1073 |
628311 |
1710 |
811771 |
1770 |
784674 |
CrapWow |
39206 |
664748 |
35814 |
662408 |
35768 |
704792 |
38757 |
709703 |
16914 |
870385 |
948 |
1220214 |
1254466 |
640014 |
4347 |
825153 |
178278 |
787177 |
RS |
0 |
643460 |
0 |
661726 |
0 |
702987 |
0 |
703973 |
0 |
859116 |
612 |
1363550 |
824 |
624821 |
600319 |
838081 |
75219 |
799714 |
Fletcher |
2647939 |
640798 |
2489172 |
668079 |
2489172 |
674048 |
2489172 |
738835 |
2693041 |
867037 |
2693041 |
1324908 |
2489172 |
630429 |
2720961 |
854875 |
2588959 |
799876 |
ROT13 |
0 |
653847 |
0 |
731015 |
60 |
709104 |
117 |
742615 |
1224 |
937476 |
870 |
1422099 |
247 |
646914 |
1431 |
894502 |
494 |
842197 |
SDBM |
0 |
667482 |
0 |
690221 |
0 |
714714 |
0 |
761954 |
38648 |
898898 |
180052 |
1493314 |
1080 |
646298 |
1598364 |
891864 |
227268 |
845593 |
maPrime2c |
865 |
670135 |
837 |
679477 |
926 |
729093 |
833 |
756687 |
887 |
904343 |
845 |
1516549 |
751 |
653689 |
869 |
897250 |
852 |
850903 |
AP |
0 |
676632 |
0 |
677284 |
0 |
744655 |
0 |
765078 |
0 |
931299 |
0 |
1486240 |
0 |
672287 |
0 |
913888 |
0 |
858420 |
XXH_strong32 |
0 |
631923 |
2723231 |
727712 |
2696939 |
928083 |
2696939 |
889008 |
2696708 |
930151 |
126465 |
1384910 |
0 |
637598 |
126458 |
904396 |
1383343 |
879223 |
crc32 |
0 |
710641 |
0 |
716106 |
0 |
787135 |
0 |
800364 |
0 |
1009105 |
0 |
1672227 |
0 |
694246 |
0 |
990754 |
0 |
922572 |
OneAtTime |
890 |
709132 |
890 |
728594 |
890 |
784932 |
890 |
826408 |
865 |
1017486 |
868 |
1665030 |
913 |
701058 |
875 |
987220 |
885 |
927483 |
faq6 |
890 |
719006 |
890 |
757007 |
890 |
802614 |
890 |
819951 |
865 |
1021794 |
868 |
1676274 |
913 |
724211 |
875 |
999362 |
885 |
940027 |
ELF |
253884 |
689238 |
1491098 |
714653 |
1491098 |
771251 |
1073498 |
816221 |
1496649 |
1057953 |
2614453 |
1969613 |
1180553 |
669283 |
2432140 |
1054433 |
1504172 |
967831 |
PJW-32 |
253884 |
698212 |
1491098 |
722998 |
1491098 |
801516 |
1073498 |
832159 |
1496649 |
1067401 |
2614453 |
2000505 |
1180553 |
696415 |
2432140 |
1069228 |
1504172 |
986054 |
Adler |
2721044 |
911108 |
2721044 |
936121 |
2721044 |
1022278 |
2721044 |
1056365 |
2721044 |
1198343 |
2721044 |
1893175 |
2721044 |
927094 |
2726245 |
1180912 |
2721694 |
1140675 |
Goulburn |
5741 |
1079085 |
9987 |
1123018 |
22413 |
1257161 |
26734 |
1318281 |
5763 |
1751528 |
5547 |
3129221 |
17923 |
1109174 |
17707 |
1724587 |
13977 |
1561507 |
Усложним еще нашу задачу. Что если мы в качестве тестового набора возьмем пакет схожих, ограниченных небольшим пространством, символов? Проведем тестирование на группе IP адресов, записаных без свободных нулей. В данном случае сгрупируем по числу коллизий. Результаты тут.
Тест качества функций BCC, Athlon II X4 640 |
Алгоритм |
Коллизии A |
Время A |
Коллизии B |
Время B |
Коллизии C |
Время C |
Коллизии D |
Время D |
Коллизии E |
Время E |
Коллизии F |
Время F |
Коллизии G |
Время G |
Коллизии H |
Время H |
Коллизии Среднее |
Время Среднее |
faq6 |
812 |
600005 |
812 |
639768 |
812 |
702003 |
812 |
728264 |
877 |
869339 |
856 |
1421989 |
844 |
607349 |
834 |
877003 |
832 |
805715 |
OneAtTime |
812 |
608546 |
812 |
641132 |
812 |
710368 |
812 |
726712 |
877 |
871128 |
856 |
1413162 |
844 |
603179 |
834 |
875666 |
832 |
806237 |
maPrime2c |
908 |
570474 |
817 |
603024 |
843 |
662202 |
834 |
677894 |
852 |
801734 |
851 |
1289177 |
897 |
565889 |
891 |
806199 |
862 |
747074 |
lookup3 |
872 |
489802 |
880 |
516491 |
892 |
532352 |
874 |
539643 |
863 |
583700 |
884 |
837563 |
865 |
492632 |
911 |
589214 |
880 |
572675 |
Murmur2A |
850 |
521611 |
798 |
533038 |
877 |
556597 |
848 |
577397 |
1120 |
611878 |
1364 |
906513 |
830 |
522121 |
839 |
626557 |
941 |
606964 |
Murmur3 |
901 |
474070 |
882 |
485885 |
852 |
511794 |
874 |
516785 |
972 |
561498 |
1348 |
825180 |
933 |
472959 |
842 |
566074 |
951 |
551781 |
Murmur2 |
857 |
473264 |
873 |
490693 |
846 |
520631 |
906 |
538581 |
1103 |
616492 |
1889 |
970944 |
923 |
484762 |
873 |
624191 |
1034 |
589945 |
crc32 |
1155 |
616384 |
1155 |
645086 |
1155 |
703019 |
1155 |
725574 |
801 |
876004 |
859 |
1421234 |
1318 |
615989 |
861 |
890113 |
1057 |
811675 |
ROT13 |
977 |
557406 |
1002 |
579267 |
1076 |
638053 |
1089 |
647648 |
1115 |
794916 |
1035 |
1237511 |
842 |
554082 |
1469 |
759803 |
1076 |
721086 |
LY |
862 |
520911 |
862 |
547286 |
862 |
606202 |
862 |
629063 |
1615 |
723546 |
4631 |
1145977 |
792 |
520102 |
1645 |
730173 |
1516 |
677908 |
AP |
699 |
596768 |
700 |
611461 |
685 |
661567 |
709 |
684894 |
1719 |
802810 |
6116 |
1287297 |
790 |
598561 |
808 |
813916 |
1528 |
757159 |
BKDR |
639 |
503451 |
639 |
524770 |
639 |
567920 |
639 |
579496 |
1533 |
663045 |
3406 |
1020730 |
787 |
497588 |
4168 |
670179 |
1556 |
628397 |
x17 |
907 |
479941 |
903 |
494136 |
693 |
525659 |
1043 |
536593 |
1712 |
656054 |
3546 |
1006225 |
711 |
484909 |
4409 |
661099 |
1741 |
605577 |
FNV1a |
937 |
525014 |
937 |
554741 |
937 |
610337 |
937 |
629870 |
2721 |
729065 |
5290 |
1148294 |
884 |
520337 |
1802 |
732663 |
1806 |
681290 |
FNV1 |
982 |
512640 |
982 |
541733 |
982 |
600561 |
982 |
610896 |
2706 |
721205 |
5328 |
1145683 |
890 |
518892 |
1691 |
726157 |
1818 |
672221 |
JS |
1479 |
538540 |
2168 |
563729 |
4169 |
615457 |
4635 |
634166 |
942 |
738583 |
944 |
1159551 |
1445 |
533942 |
1229 |
757806 |
2126 |
692722 |
SBOX |
1533 |
447508 |
1531 |
468539 |
1508 |
484687 |
1515 |
501030 |
2818 |
602248 |
4919 |
911811 |
1528 |
448451 |
2325 |
611906 |
2210 |
559523 |
RS |
835 |
541779 |
860 |
567362 |
864 |
619388 |
850 |
632621 |
1934 |
741889 |
8278 |
1176526 |
800 |
537599 |
5057 |
750506 |
2435 |
695959 |
FNV |
901 |
498574 |
901 |
532511 |
901 |
572200 |
901 |
580678 |
4624 |
667106 |
9073 |
1022888 |
801 |
492040 |
3457 |
670248 |
2695 |
629531 |
DJB |
840 |
495315 |
840 |
517087 |
840 |
569881 |
840 |
574197 |
1591 |
662806 |
3463 |
1030377 |
738 |
491342 |
32051 |
668287 |
5150 |
626162 |
x31 |
748 |
465616 |
681 |
482151 |
811 |
512690 |
755 |
531532 |
3808 |
634720 |
10781 |
977037 |
906 |
469434 |
28482 |
645286 |
5872 |
589808 |
Goulburn |
5802 |
905100 |
10119 |
961610 |
22702 |
1100164 |
26575 |
1150343 |
5720 |
1469643 |
5947 |
2596824 |
7836 |
910212 |
7790 |
1473656 |
11561 |
1320944 |
SuperFastHash |
92655 |
456617 |
35260 |
460586 |
37506 |
478081 |
40716 |
485802 |
3798 |
522539 |
2284 |
738865 |
49772 |
458939 |
889 |
529079 |
32860 |
516314 |
PaulHsieh |
92655 |
454035 |
35260 |
478443 |
37506 |
471547 |
40716 |
483381 |
3798 |
532185 |
2284 |
742275 |
49772 |
446016 |
889 |
528183 |
32860 |
517008 |
Crap8 |
1609 |
601070 |
1509 |
612065 |
1523 |
649618 |
1530 |
669773 |
207148 |
734424 |
207278 |
1085805 |
2971 |
594502 |
854 |
741816 |
53053 |
711134 |
SDBM |
1614 |
564805 |
1614 |
606055 |
1614 |
652530 |
1614 |
670583 |
19524 |
791190 |
46321 |
1282282 |
818 |
557150 |
464485 |
799355 |
67201 |
740494 |
CrapWow |
2991 |
565563 |
2994 |
591631 |
2970 |
639759 |
2998 |
656711 |
16180 |
741120 |
826912 |
1040664 |
5788 |
574109 |
26706 |
746881 |
110942 |
694555 |
maFastPrime1 |
116198 |
481643 |
135967 |
494664 |
134543 |
500891 |
136698 |
509689 |
240766 |
522830 |
242510 |
671732 |
16392 |
487947 |
26851 |
527565 |
131241 |
524620 |
maRushPrime1 |
136030 |
407643 |
135913 |
417737 |
134587 |
423622 |
136385 |
429057 |
240786 |
459925 |
242490 |
662676 |
19447 |
422639 |
26889 |
462150 |
134066 |
460681 |
DEK |
275522 |
564506 |
281959 |
584559 |
280522 |
678182 |
298654 |
704562 |
273543 |
849981 |
642579 |
1393478 |
258703 |
563120 |
5531 |
854908 |
289627 |
774162 |
Novak |
318361 |
523420 |
318361 |
538935 |
318361 |
576770 |
318361 |
585848 |
313060 |
707727 |
314373 |
1081205 |
452167 |
516718 |
4553 |
706459 |
294700 |
654635 |
XXH_strong32 |
4987 |
560930 |
190106 |
577575 |
924509 |
737312 |
1141306 |
802982 |
581028 |
855138 |
128892 |
1239066 |
4815 |
564960 |
4231 |
852684 |
372484 |
773831 |
XXH_fast32 |
4987 |
574828 |
190106 |
586619 |
924479 |
706623 |
1141784 |
749062 |
580968 |
780869 |
482802 |
977358 |
4815 |
574513 |
4653 |
792229 |
416824 |
717763 |
ELF |
393367 |
578255 |
873256 |
620363 |
873256 |
682341 |
859060 |
713633 |
1026868 |
900656 |
1063857 |
1652210 |
608155 |
574831 |
1272682 |
907693 |
871313 |
828748 |
PJW-32 |
393367 |
597401 |
873256 |
636300 |
873256 |
714638 |
859060 |
738046 |
1026868 |
926204 |
1063857 |
1729711 |
608155 |
592092 |
1272682 |
936472 |
871313 |
858858 |
Fletcher |
1375277 |
573604 |
1005681 |
591810 |
1005681 |
632510 |
1005682 |
643749 |
1684534 |
755373 |
1684341 |
1168538 |
1329488 |
573351 |
2674684 |
767488 |
1470671 |
713303 |
Adler |
2679903 |
817715 |
2679903 |
850693 |
2679903 |
928433 |
2679903 |
955746 |
2679903 |
1079049 |
2679903 |
1734044 |
2679903 |
811773 |
2725829 |
1096280 |
2685644 |
1034217 |
Подсчитаем производительность алгоритмов из прошлого теста. Отсортируем по самым быстрым. Результаты опять же будут тут.
Тест качества функций BCC, Athlon II X4 640 |
Алгоритм |
Коллизии A |
Время A |
Коллизии B |
Время B |
Коллизии C |
Время C |
Коллизии D |
Время D |
Коллизии E |
Время E |
Коллизии F |
Время F |
Коллизии G |
Время G |
Коллизии H |
Время H |
Коллизии Среднее |
Время Среднее |
maRushPrime1 |
136030 |
407643 |
135913 |
417737 |
134587 |
423622 |
136385 |
429057 |
240786 |
459925 |
242490 |
662676 |
19447 |
422639 |
26889 |
462150 |
134066 |
460681 |
SuperFastHash |
92655 |
456617 |
35260 |
460586 |
37506 |
478081 |
40716 |
485802 |
3798 |
522539 |
2284 |
738865 |
49772 |
458939 |
889 |
529079 |
32860 |
516314 |
PaulHsieh |
92655 |
454035 |
35260 |
478443 |
37506 |
471547 |
40716 |
483381 |
3798 |
532185 |
2284 |
742275 |
49772 |
446016 |
889 |
528183 |
32860 |
517008 |
maFastPrime1 |
116198 |
481643 |
135967 |
494664 |
134543 |
500891 |
136698 |
509689 |
240766 |
522830 |
242510 |
671732 |
16392 |
487947 |
26851 |
527565 |
131241 |
524620 |
Murmur3 |
901 |
474070 |
882 |
485885 |
852 |
511794 |
874 |
516785 |
972 |
561498 |
1348 |
825180 |
933 |
472959 |
842 |
566074 |
951 |
551781 |
SBOX |
1533 |
447508 |
1531 |
468539 |
1508 |
484687 |
1515 |
501030 |
2818 |
602248 |
4919 |
911811 |
1528 |
448451 |
2325 |
611906 |
2210 |
559523 |
lookup3 |
872 |
489802 |
880 |
516491 |
892 |
532352 |
874 |
539643 |
863 |
583700 |
884 |
837563 |
865 |
492632 |
911 |
589214 |
880 |
572675 |
x31 |
748 |
465616 |
681 |
482151 |
811 |
512690 |
755 |
531532 |
3808 |
634720 |
10781 |
977037 |
906 |
469434 |
28482 |
645286 |
5872 |
589808 |
Murmur2 |
857 |
473264 |
873 |
490693 |
846 |
520631 |
906 |
538581 |
1103 |
616492 |
1889 |
970944 |
923 |
484762 |
873 |
624191 |
1034 |
589945 |
x17 |
907 |
479941 |
903 |
494136 |
693 |
525659 |
1043 |
536593 |
1712 |
656054 |
3546 |
1006225 |
711 |
484909 |
4409 |
661099 |
1741 |
605577 |
Murmur2A |
850 |
521611 |
798 |
533038 |
877 |
556597 |
848 |
577397 |
1120 |
611878 |
1364 |
906513 |
830 |
522121 |
839 |
626557 |
941 |
606964 |
DJB |
840 |
495315 |
840 |
517087 |
840 |
569881 |
840 |
574197 |
1591 |
662806 |
3463 |
1030377 |
738 |
491342 |
32051 |
668287 |
5150 |
626162 |
BKDR |
639 |
503451 |
639 |
524770 |
639 |
567920 |
639 |
579496 |
1533 |
663045 |
3406 |
1020730 |
787 |
497588 |
4168 |
670179 |
1556 |
628397 |
FNV |
901 |
498574 |
901 |
532511 |
901 |
572200 |
901 |
580678 |
4624 |
667106 |
9073 |
1022888 |
801 |
492040 |
3457 |
670248 |
2695 |
629531 |
Novak |
318361 |
523420 |
318361 |
538935 |
318361 |
576770 |
318361 |
585848 |
313060 |
707727 |
314373 |
1081205 |
452167 |
516718 |
4553 |
706459 |
294700 |
654635 |
FNV1 |
982 |
512640 |
982 |
541733 |
982 |
600561 |
982 |
610896 |
2706 |
721205 |
5328 |
1145683 |
890 |
518892 |
1691 |
726157 |
1818 |
672221 |
LY |
862 |
520911 |
862 |
547286 |
862 |
606202 |
862 |
629063 |
1615 |
723546 |
4631 |
1145977 |
792 |
520102 |
1645 |
730173 |
1516 |
677908 |
FNV1a |
937 |
525014 |
937 |
554741 |
937 |
610337 |
937 |
629870 |
2721 |
729065 |
5290 |
1148294 |
884 |
520337 |
1802 |
732663 |
1806 |
681290 |
JS |
1479 |
538540 |
2168 |
563729 |
4169 |
615457 |
4635 |
634166 |
942 |
738583 |
944 |
1159551 |
1445 |
533942 |
1229 |
757806 |
2126 |
692722 |
CrapWow |
2991 |
565563 |
2994 |
591631 |
2970 |
639759 |
2998 |
656711 |
16180 |
741120 |
826912 |
1040664 |
5788 |
574109 |
26706 |
746881 |
110942 |
694555 |
RS |
835 |
541779 |
860 |
567362 |
864 |
619388 |
850 |
632621 |
1934 |
741889 |
8278 |
1176526 |
800 |
537599 |
5057 |
750506 |
2435 |
695959 |
Crap8 |
1609 |
601070 |
1509 |
612065 |
1523 |
649618 |
1530 |
669773 |
207148 |
734424 |
207278 |
1085805 |
2971 |
594502 |
854 |
741816 |
53053 |
711134 |
Fletcher |
1375277 |
573604 |
1005681 |
591810 |
1005681 |
632510 |
1005682 |
643749 |
1684534 |
755373 |
1684341 |
1168538 |
1329488 |
573351 |
2674684 |
767488 |
1470671 |
713303 |
XXH_fast32 |
4987 |
574828 |
190106 |
586619 |
924479 |
706623 |
1141784 |
749062 |
580968 |
780869 |
482802 |
977358 |
4815 |
574513 |
4653 |
792229 |
416824 |
717763 |
ROT13 |
977 |
557406 |
1002 |
579267 |
1076 |
638053 |
1089 |
647648 |
1115 |
794916 |
1035 |
1237511 |
842 |
554082 |
1469 |
759803 |
1076 |
721086 |
SDBM |
1614 |
564805 |
1614 |
606055 |
1614 |
652530 |
1614 |
670583 |
19524 |
791190 |
46321 |
1282282 |
818 |
557150 |
464485 |
799355 |
67201 |
740494 |
maPrime2c |
908 |
570474 |
817 |
603024 |
843 |
662202 |
834 |
677894 |
852 |
801734 |
851 |
1289177 |
897 |
565889 |
891 |
806199 |
862 |
747074 |
AP |
699 |
596768 |
700 |
611461 |
685 |
661567 |
709 |
684894 |
1719 |
802810 |
6116 |
1287297 |
790 |
598561 |
808 |
813916 |
1528 |
757159 |
XXH_strong32 |
4987 |
560930 |
190106 |
577575 |
924509 |
737312 |
1141306 |
802982 |
581028 |
855138 |
128892 |
1239066 |
4815 |
564960 |
4231 |
852684 |
372484 |
773831 |
DEK |
275522 |
564506 |
281959 |
584559 |
280522 |
678182 |
298654 |
704562 |
273543 |
849981 |
642579 |
1393478 |
258703 |
563120 |
5531 |
854908 |
289627 |
774162 |
faq6 |
812 |
600005 |
812 |
639768 |
812 |
702003 |
812 |
728264 |
877 |
869339 |
856 |
1421989 |
844 |
607349 |
834 |
877003 |
832 |
805715 |
OneAtTime |
812 |
608546 |
812 |
641132 |
812 |
710368 |
812 |
726712 |
877 |
871128 |
856 |
1413162 |
844 |
603179 |
834 |
875666 |
832 |
806237 |
crc32 |
1155 |
616384 |
1155 |
645086 |
1155 |
703019 |
1155 |
725574 |
801 |
876004 |
859 |
1421234 |
1318 |
615989 |
861 |
890113 |
1057 |
811675 |
ELF |
393367 |
578255 |
873256 |
620363 |
873256 |
682341 |
859060 |
713633 |
1026868 |
900656 |
1063857 |
1652210 |
608155 |
574831 |
1272682 |
907693 |
871313 |
828748 |
PJW-32 |
393367 |
597401 |
873256 |
636300 |
873256 |
714638 |
859060 |
738046 |
1026868 |
926204 |
1063857 |
1729711 |
608155 |
592092 |
1272682 |
936472 |
871313 |
858858 |
Adler |
2679903 |
817715 |
2679903 |
850693 |
2679903 |
928433 |
2679903 |
955746 |
2679903 |
1079049 |
2679903 |
1734044 |
2679903 |
811773 |
2725829 |
1096280 |
2685644 |
1034217 |
Goulburn |
5802 |
905100 |
10119 |
961610 |
22702 |
1100164 |
26575 |
1150343 |
5720 |
1469643 |
5947 |
2596824 |
7836 |
910212 |
7790 |
1473656 |
11561 |
1320944 |
Один из самых сложных тестов - он и самый простой. Более двух с половиной миллионов чисел, от 0 до 2726298, могут поставить в тупик любой из самых сложных алгоритмов. Проведем испытание скомпилированного на BCC кода, тестовым стендом будет машина на базе Intel Core i3. Результаты отсортируем по колличеству коллизий. Скачать их можно будет вот здесь.
Тест качества функций BCC, I3-2120 |
Алгоритм |
Коллизии A |
Время A |
Коллизии B |
Время B |
Коллизии C |
Время C |
Коллизии D |
Время D |
Коллизии E |
Время E |
Коллизии F |
Время F |
Коллизии G |
Время G |
Коллизии H |
Время H |
Коллизии Среднее |
Время Среднее |
crc32 |
1 |
281484 |
1 |
298604 |
1 |
406032 |
1 |
395069 |
429 |
435259 |
414 |
770972 |
1 |
278971 |
420 |
434750 |
159 |
412643 |
LY |
1 |
230886 |
1 |
241196 |
1 |
279808 |
1 |
279079 |
832 |
293699 |
1705 |
458190 |
1 |
230338 |
855 |
292094 |
425 |
288161 |
x17 |
1 |
243228 |
1 |
252084 |
1 |
294124 |
1 |
293864 |
839 |
306163 |
1652 |
440136 |
1 |
239377 |
1129 |
307398 |
453 |
297047 |
AP |
307 |
274879 |
394 |
287449 |
393 |
336714 |
395 |
392039 |
404 |
377583 |
879 |
608874 |
443 |
273182 |
410 |
381334 |
453 |
366507 |
BKDR |
1 |
225542 |
1 |
234478 |
1 |
288942 |
1 |
269785 |
869 |
276304 |
1717 |
392207 |
1 |
226462 |
1130 |
313345 |
465 |
278383 |
Murmur2 |
416 |
241360 |
799 |
256763 |
877 |
277197 |
836 |
295143 |
867 |
306007 |
1154 |
433666 |
300 |
240514 |
820 |
310016 |
759 |
295083 |
maPrime2c |
831 |
263166 |
861 |
277203 |
842 |
315128 |
899 |
335116 |
868 |
356492 |
853 |
526792 |
802 |
261637 |
914 |
350613 |
859 |
335768 |
lookup3 |
848 |
321006 |
878 |
293667 |
872 |
315120 |
881 |
302966 |
899 |
343761 |
824 |
442252 |
860 |
325348 |
858 |
347407 |
865 |
336441 |
Murmur3 |
849 |
274891 |
933 |
323145 |
837 |
307538 |
890 |
306904 |
806 |
324478 |
1050 |
413998 |
836 |
269892 |
836 |
323004 |
880 |
317981 |
Murmur2A |
819 |
279951 |
823 |
285946 |
802 |
309737 |
888 |
325224 |
834 |
352055 |
1133 |
415547 |
888 |
279040 |
894 |
339117 |
885 |
323327 |
RS |
446 |
236426 |
447 |
249011 |
388 |
273342 |
418 |
289165 |
837 |
298736 |
6624 |
448891 |
411 |
236601 |
1341 |
315789 |
1364 |
293495 |
FNV1 |
463 |
236219 |
463 |
243401 |
463 |
280614 |
463 |
286970 |
2283 |
302853 |
4772 |
464467 |
864 |
234723 |
1801 |
342808 |
1447 |
299007 |
FNV1a |
737 |
236299 |
737 |
246034 |
737 |
276979 |
737 |
288211 |
2327 |
308838 |
4640 |
504493 |
706 |
237747 |
1762 |
304241 |
1548 |
300355 |
OneAtTime |
1895 |
287712 |
1895 |
305852 |
1895 |
371945 |
1895 |
388964 |
906 |
432704 |
877 |
685794 |
2549 |
287541 |
909 |
420764 |
1603 |
397660 |
faq6 |
1895 |
288439 |
1895 |
305184 |
1895 |
367311 |
1895 |
394198 |
906 |
419025 |
877 |
694809 |
2549 |
292460 |
909 |
421320 |
1603 |
397843 |
maFastPrime1 |
492 |
266065 |
449 |
250223 |
313 |
283945 |
369 |
280489 |
817 |
279791 |
2126 |
335857 |
1581 |
261936 |
9228 |
275889 |
1922 |
279274 |
Crap8 |
1135 |
340610 |
1051 |
334655 |
1072 |
393813 |
1086 |
386580 |
4761 |
425691 |
4994 |
549387 |
1380 |
341931 |
813 |
471657 |
2037 |
405541 |
maRushPrime1 |
237 |
214525 |
1 |
218657 |
1429 |
232175 |
170 |
236307 |
895 |
242854 |
2110 |
290412 |
2188 |
239234 |
9348 |
236750 |
2047 |
238864 |
SBOX |
1471 |
239201 |
1546 |
246222 |
1540 |
270233 |
1497 |
278357 |
2644 |
287322 |
4822 |
372064 |
1466 |
239402 |
2313 |
286431 |
2162 |
277404 |
FNV |
1493 |
224454 |
1493 |
232316 |
1493 |
253959 |
1493 |
264773 |
3917 |
274700 |
7799 |
420623 |
662 |
224336 |
3572 |
300243 |
2740 |
274426 |
Goulburn |
5416 |
491006 |
9584 |
541409 |
22219 |
724572 |
26388 |
768523 |
5656 |
848204 |
5609 |
1580318 |
6238 |
492045 |
6490 |
850259 |
10950 |
787042 |
JS |
17935 |
262367 |
18821 |
273654 |
20735 |
318244 |
21220 |
333909 |
921 |
362379 |
915 |
574438 |
14196 |
259579 |
1054 |
362405 |
11975 |
343372 |
XXH_strong32 |
273 |
295686 |
392 |
309258 |
423 |
346698 |
299 |
351226 |
422 |
367369 |
758 |
597963 |
28670 |
295846 |
68522 |
363980 |
12470 |
366003 |
XXH_fast32 |
273 |
293952 |
392 |
308632 |
423 |
333457 |
299 |
352059 |
422 |
366364 |
806 |
572579 |
28670 |
307758 |
68522 |
365518 |
12476 |
362540 |
DEK |
1 |
258240 |
1 |
272820 |
1 |
333265 |
1 |
346306 |
154 |
356776 |
1 |
554242 |
290519 |
257249 |
41 |
352684 |
36340 |
341448 |
ROT13 |
56172 |
280307 |
56172 |
303392 |
56191 |
342516 |
56204 |
373679 |
40602 |
395720 |
29848 |
614665 |
21523 |
278444 |
1881 |
396257 |
39824 |
373123 |
x31 |
1 |
242268 |
1 |
251901 |
1 |
276943 |
1 |
289960 |
53711 |
307238 |
174138 |
438039 |
1 |
242538 |
402997 |
309260 |
78856 |
294768 |
CrapWow |
845 |
333925 |
855 |
329680 |
859 |
382761 |
903 |
377792 |
910 |
413279 |
576575 |
531256 |
875 |
333969 |
421939 |
487067 |
125470 |
398716 |
DJB |
1 |
233296 |
1 |
245772 |
1 |
273819 |
1 |
289814 |
895 |
300363 |
1715 |
450162 |
1 |
234735 |
1214545 |
303579 |
152145 |
291443 |
PaulHsieh |
1302258 |
241401 |
385693 |
249513 |
384715 |
288145 |
384721 |
272189 |
154769 |
281311 |
11500 |
351138 |
298120 |
240642 |
1150 |
285397 |
365366 |
276217 |
SuperFastHash |
1302258 |
243324 |
385693 |
252072 |
384715 |
265945 |
384721 |
275858 |
154769 |
289449 |
11500 |
374725 |
298120 |
243775 |
1150 |
283089 |
365366 |
278530 |
SDBM |
1 |
269016 |
1 |
285219 |
1 |
373262 |
1 |
360182 |
269854 |
396101 |
636088 |
635117 |
1 |
268796 |
2389609 |
388792 |
411945 |
372061 |
ELF |
1 |
253002 |
1359899 |
269207 |
1359899 |
364857 |
1043099 |
350112 |
1162285 |
393487 |
2336423 |
695786 |
142631 |
251012 |
2672745 |
394391 |
1259623 |
371482 |
PJW-32 |
1 |
290217 |
1359899 |
303675 |
1359899 |
353846 |
1043099 |
391752 |
1162285 |
413113 |
2336423 |
668734 |
142631 |
283431 |
2672745 |
451622 |
1259623 |
394549 |
Novak |
2562948 |
256027 |
2562948 |
264659 |
2562948 |
314723 |
2562948 |
315047 |
2507396 |
327686 |
2507342 |
486209 |
2570635 |
257641 |
292644 |
330252 |
2266226 |
319031 |
Fletcher |
2603160 |
276928 |
2431144 |
291762 |
2431144 |
323186 |
2431144 |
342780 |
2574298 |
357315 |
2574299 |
517699 |
2592294 |
276871 |
2717699 |
355488 |
2544398 |
342754 |
Adler |
2717856 |
322645 |
2717856 |
339280 |
2717856 |
408723 |
2717856 |
441705 |
2717856 |
469029 |
2717856 |
736074 |
2717856 |
321369 |
2726054 |
455686 |
2718881 |
436814 |
Ну, а теперь осталось взглянуть на производительность данных функций на прошлом тестовом. Отсортируем результаты по затраченному времени. От меньшего к большего, естественно. Скачать таблицу в электронном видем сможем прямо здесь.
Тест скорости функций BCC, I3-2120 |
Алгоритм |
Коллизии A |
Время A |
Коллизии B |
Время B |
Коллизии C |
Время C |
Коллизии D |
Время D |
Коллизии E |
Время E |
Коллизии F |
Время F |
Коллизии G |
Время G |
Коллизии H |
Время H |
Коллизии Среднее |
Время Среднее |
maRushPrime1 |
237 |
214525 |
1 |
218657 |
1429 |
232175 |
170 |
236307 |
895 |
242854 |
2110 |
290412 |
2188 |
239234 |
9348 |
236750 |
2047 |
238864 |
FNV |
1493 |
224454 |
1493 |
232316 |
1493 |
253959 |
1493 |
264773 |
3917 |
274700 |
7799 |
420623 |
662 |
224336 |
3572 |
300243 |
2740 |
274426 |
PaulHsieh |
1302258 |
241401 |
385693 |
249513 |
384715 |
288145 |
384721 |
272189 |
154769 |
281311 |
11500 |
351138 |
298120 |
240642 |
1150 |
285397 |
365366 |
276217 |
SBOX |
1471 |
239201 |
1546 |
246222 |
1540 |
270233 |
1497 |
278357 |
2644 |
287322 |
4822 |
372064 |
1466 |
239402 |
2313 |
286431 |
2162 |
277404 |
BKDR |
1 |
225542 |
1 |
234478 |
1 |
288942 |
1 |
269785 |
869 |
276304 |
1717 |
392207 |
1 |
226462 |
1130 |
313345 |
465 |
278383 |
SuperFastHash |
1302258 |
243324 |
385693 |
252072 |
384715 |
265945 |
384721 |
275858 |
154769 |
289449 |
11500 |
374725 |
298120 |
243775 |
1150 |
283089 |
365366 |
278530 |
maFastPrime1 |
492 |
266065 |
449 |
250223 |
313 |
283945 |
369 |
280489 |
817 |
279791 |
2126 |
335857 |
1581 |
261936 |
9228 |
275889 |
1922 |
279274 |
LY |
1 |
230886 |
1 |
241196 |
1 |
279808 |
1 |
279079 |
832 |
293699 |
1705 |
458190 |
1 |
230338 |
855 |
292094 |
425 |
288161 |
DJB |
1 |
233296 |
1 |
245772 |
1 |
273819 |
1 |
289814 |
895 |
300363 |
1715 |
450162 |
1 |
234735 |
1214545 |
303579 |
152145 |
291443 |
RS |
446 |
236426 |
447 |
249011 |
388 |
273342 |
418 |
289165 |
837 |
298736 |
6624 |
448891 |
411 |
236601 |
1341 |
315789 |
1364 |
293495 |
x31 |
1 |
242268 |
1 |
251901 |
1 |
276943 |
1 |
289960 |
53711 |
307238 |
174138 |
438039 |
1 |
242538 |
402997 |
309260 |
78856 |
294768 |
Murmur2 |
416 |
241360 |
799 |
256763 |
877 |
277197 |
836 |
295143 |
867 |
306007 |
1154 |
433666 |
300 |
240514 |
820 |
310016 |
759 |
295083 |
x17 |
1 |
243228 |
1 |
252084 |
1 |
294124 |
1 |
293864 |
839 |
306163 |
1652 |
440136 |
1 |
239377 |
1129 |
307398 |
453 |
297047 |
FNV1 |
463 |
236219 |
463 |
243401 |
463 |
280614 |
463 |
286970 |
2283 |
302853 |
4772 |
464467 |
864 |
234723 |
1801 |
342808 |
1447 |
299007 |
FNV1a |
737 |
236299 |
737 |
246034 |
737 |
276979 |
737 |
288211 |
2327 |
308838 |
4640 |
504493 |
706 |
237747 |
1762 |
304241 |
1548 |
300355 |
Murmur3 |
849 |
274891 |
933 |
323145 |
837 |
307538 |
890 |
306904 |
806 |
324478 |
1050 |
413998 |
836 |
269892 |
836 |
323004 |
880 |
317981 |
Novak |
2562948 |
256027 |
2562948 |
264659 |
2562948 |
314723 |
2562948 |
315047 |
2507396 |
327686 |
2507342 |
486209 |
2570635 |
257641 |
292644 |
330252 |
2266226 |
319031 |
Murmur2A |
819 |
279951 |
823 |
285946 |
802 |
309737 |
888 |
325224 |
834 |
352055 |
1133 |
415547 |
888 |
279040 |
894 |
339117 |
885 |
323327 |
maPrime2c |
831 |
263166 |
861 |
277203 |
842 |
315128 |
899 |
335116 |
868 |
356492 |
853 |
526792 |
802 |
261637 |
914 |
350613 |
859 |
335768 |
lookup3 |
848 |
321006 |
878 |
293667 |
872 |
315120 |
881 |
302966 |
899 |
343761 |
824 |
442252 |
860 |
325348 |
858 |
347407 |
865 |
336441 |
DEK |
1 |
258240 |
1 |
272820 |
1 |
333265 |
1 |
346306 |
154 |
356776 |
1 |
554242 |
290519 |
257249 |
41 |
352684 |
36340 |
341448 |
Fletcher |
2603160 |
276928 |
2431144 |
291762 |
2431144 |
323186 |
2431144 |
342780 |
2574298 |
357315 |
2574299 |
517699 |
2592294 |
276871 |
2717699 |
355488 |
2544398 |
342754 |
JS |
17935 |
262367 |
18821 |
273654 |
20735 |
318244 |
21220 |
333909 |
921 |
362379 |
915 |
574438 |
14196 |
259579 |
1054 |
362405 |
11975 |
343372 |
XXH_fast32 |
273 |
293952 |
392 |
308632 |
423 |
333457 |
299 |
352059 |
422 |
366364 |
806 |
572579 |
28670 |
307758 |
68522 |
365518 |
12476 |
362540 |
XXH_strong32 |
273 |
295686 |
392 |
309258 |
423 |
346698 |
299 |
351226 |
422 |
367369 |
758 |
597963 |
28670 |
295846 |
68522 |
363980 |
12470 |
366003 |
AP |
307 |
274879 |
394 |
287449 |
393 |
336714 |
395 |
392039 |
404 |
377583 |
879 |
608874 |
443 |
273182 |
410 |
381334 |
453 |
366507 |
ELF |
1 |
253002 |
1359899 |
269207 |
1359899 |
364857 |
1043099 |
350112 |
1162285 |
393487 |
2336423 |
695786 |
142631 |
251012 |
2672745 |
394391 |
1259623 |
371482 |
SDBM |
1 |
269016 |
1 |
285219 |
1 |
373262 |
1 |
360182 |
269854 |
396101 |
636088 |
635117 |
1 |
268796 |
2389609 |
388792 |
411945 |
372061 |
ROT13 |
56172 |
280307 |
56172 |
303392 |
56191 |
342516 |
56204 |
373679 |
40602 |
395720 |
29848 |
614665 |
21523 |
278444 |
1881 |
396257 |
39824 |
373123 |
PJW-32 |
1 |
290217 |
1359899 |
303675 |
1359899 |
353846 |
1043099 |
391752 |
1162285 |
413113 |
2336423 |
668734 |
142631 |
283431 |
2672745 |
451622 |
1259623 |
394549 |
OneAtTime |
1895 |
287712 |
1895 |
305852 |
1895 |
371945 |
1895 |
388964 |
906 |
432704 |
877 |
685794 |
2549 |
287541 |
909 |
420764 |
1603 |
397660 |
faq6 |
1895 |
288439 |
1895 |
305184 |
1895 |
367311 |
1895 |
394198 |
906 |
419025 |
877 |
694809 |
2549 |
292460 |
909 |
421320 |
1603 |
397843 |
CrapWow |
845 |
333925 |
855 |
329680 |
859 |
382761 |
903 |
377792 |
910 |
413279 |
576575 |
531256 |
875 |
333969 |
421939 |
487067 |
125470 |
398716 |
Crap8 |
1135 |
340610 |
1051 |
334655 |
1072 |
393813 |
1086 |
386580 |
4761 |
425691 |
4994 |
549387 |
1380 |
341931 |
813 |
471657 |
2037 |
405541 |
crc32 |
1 |
281484 |
1 |
298604 |
1 |
406032 |
1 |
395069 |
429 |
435259 |
414 |
770972 |
1 |
278971 |
420 |
434750 |
159 |
412643 |
Adler |
2717856 |
322645 |
2717856 |
339280 |
2717856 |
408723 |
2717856 |
441705 |
2717856 |
469029 |
2717856 |
736074 |
2717856 |
321369 |
2726054 |
455686 |
2718881 |
436814 |
Goulburn |
5416 |
491006 |
9584 |
541409 |
22219 |
724572 |
26388 |
768523 |
5656 |
848204 |
5609 |
1580318 |
6238 |
492045 |
6490 |
850259 |
10950 |
787042 |
Теперь проведем еще и специальный, расширенный тест наших функций с участием новичка. Впервые будет включен и алгоритм от Google - CityHash32. Известно, что семейсво CityHash, во-первых, оптимально для 64-разрядных платформ, а во-вторых - требует поддержки SSE4.2 со стороны компилятора, со стороны целевой платформы, понятное дело. В противном случае производительность будет далека от идеала. Именно сложная конструкция, зависимость от ряда специфичных инструкций - это отличает CityHash32 от MaPrime, MaFastPrime и MaRushPrime. Да, конструкция CityHash довольно хорошо продумана, но она крайне сложна для понимания. Ребята серьезно поработали над MurmurHash, создав данный алгоритм. В итоге - хорошие статистические показатели, низкое число коллизий. Но скорость? Посмотрим, что у нас будет со скоростью. Напомним, что все участники теста в нашем случае не оптизированы "вручную", а реализованы согласно типовым имплементациям на языке C. Что качасается CityHash, то он изначально задуман под C++, использует некоторые специфичные функции. Те же MaPrime или FNV можно записать несколькими строчками кода, а под CityHash лучше выделить отдельный файл с исходником. Массивный объем кода в оригинальной записи, без ручной оптимизации под конкретный компилятор вероято не порадует своей резвостью. Да, но мы никого не оптимизировали для чистоты эксперимента. Хорошо, для начала, все же, отсортируем результаты испытания по колличеству коллизий. О самом тесте: всего 22202987 строк в западноевропейском подмножестве символов (заголовки из различных словарей и энциклопедий), компилятор - BCC, оптимизация по скорости. Результаты можно найти здесь.
Тест качества функций BCC, AMD-640 |
Алгоритм |
Коллизии A |
Время A |
Коллизии B |
Время B |
Коллизии C |
Время C |
Коллизии D |
Время D |
Коллизии E |
Время E |
Коллизии F |
Время F |
Коллизии G |
Время G |
Коллизии H |
Время H |
Коллизии Среднее |
Время Среднее |
CityHash32 |
56695 |
9157642 |
55927 |
9643783 |
54312 |
11032658 |
53034 |
11516558 |
35266 |
13301219 |
44412 |
20215332 |
56473 |
9358538 |
35472 |
13285900 |
48949 |
12188954 |
lookup3 |
57380 |
4444995 |
57238 |
4533239 |
57468 |
4777320 |
56972 |
4843473 |
57464 |
5288996 |
57133 |
7089310 |
57141 |
4498828 |
57174 |
5326841 |
57246 |
5100375 |
maPrime2c |
57678 |
4983646 |
57225 |
5152921 |
57424 |
5778068 |
57307 |
5915846 |
57490 |
6765964 |
57260 |
9849889 |
57947 |
4990581 |
57182 |
6794037 |
57439 |
6278869 |
crc32 |
58277 |
5334268 |
58277 |
5707858 |
58277 |
6196485 |
58277 |
6333024 |
56240 |
7364236 |
56476 |
10900771 |
56752 |
5398795 |
60058 |
7286619 |
57829 |
6815257 |
Murmur2A |
57663 |
4821756 |
57751 |
4901020 |
57378 |
5041230 |
57487 |
5174873 |
63368 |
5666418 |
72140 |
7419877 |
57190 |
4861569 |
57464 |
5675115 |
60055 |
5445232 |
faq6 |
64359 |
5290582 |
64359 |
5404432 |
64359 |
6064411 |
64359 |
6258925 |
57219 |
7226714 |
56945 |
10771881 |
64632 |
5304799 |
57356 |
7287248 |
61699 |
6701124 |
OneAtTime |
64359 |
5299257 |
64359 |
5509840 |
64359 |
6132057 |
64359 |
6308572 |
57219 |
7288634 |
56945 |
10833969 |
64632 |
5303328 |
57356 |
7267645 |
61699 |
6742913 |
Murmur2 |
56780 |
4342494 |
56873 |
4457520 |
56792 |
4839515 |
57169 |
4901600 |
74485 |
5652135 |
127682 |
7779621 |
56395 |
4452437 |
56995 |
5733762 |
67896 |
5269886 |
ROT13 |
61868 |
4863765 |
63611 |
4779927 |
68985 |
5352874 |
70811 |
5517474 |
71154 |
6286636 |
62834 |
9022672 |
61660 |
4764490 |
96279 |
6374273 |
69650 |
5870264 |
Murmur3 |
57202 |
4490468 |
57496 |
4536758 |
57389 |
4731674 |
57443 |
4785129 |
98563 |
5275259 |
118662 |
6879735 |
57119 |
4501561 |
57542 |
5288230 |
70177 |
5061102 |
maFastPrime1 |
63790 |
4510869 |
64202 |
4522029 |
63876 |
4673488 |
64159 |
4704717 |
128477 |
4947560 |
222153 |
5636413 |
65220 |
4568473 |
59194 |
4996188 |
91384 |
4819967 |
LY |
56353 |
4668657 |
56353 |
4807890 |
56353 |
5297102 |
56353 |
5412751 |
114920 |
6177462 |
228415 |
8805069 |
56207 |
4623472 |
113798 |
6175102 |
92344 |
5745938 |
AP |
56251 |
5442888 |
56377 |
5589105 |
56253 |
6152439 |
56224 |
6312955 |
96402 |
7378886 |
306858 |
11128019 |
56487 |
5526986 |
56884 |
7429461 |
92717 |
6870092 |
maRushPrime1 |
69949 |
3918751 |
65607 |
4059170 |
72628 |
4141735 |
63965 |
4167996 |
128130 |
4509983 |
221696 |
5568369 |
69798 |
3965593 |
58963 |
4585894 |
93842 |
4364686 |
BKDR |
57407 |
4506484 |
57407 |
4659605 |
57407 |
5077214 |
57407 |
5160715 |
113433 |
5767876 |
226079 |
7946431 |
56642 |
4528439 |
136131 |
5788202 |
95239 |
5429371 |
Crap8 |
57435 |
5343245 |
57750 |
5394526 |
57886 |
5739395 |
57519 |
5812771 |
231297 |
6467258 |
238174 |
8911924 |
57727 |
5341497 |
57187 |
6498177 |
101872 |
6188599 |
FNV1a |
56498 |
4647550 |
56498 |
4833294 |
56498 |
5357808 |
56498 |
5471950 |
169737 |
6220538 |
336958 |
8871423 |
56379 |
4670949 |
114500 |
6256374 |
112946 |
5791236 |
FNV1 |
57297 |
4880932 |
57297 |
5050408 |
57297 |
5596907 |
57297 |
5609097 |
169317 |
6403177 |
337301 |
8955546 |
57090 |
4750659 |
115325 |
6259519 |
113528 |
5938281 |
x31 |
57482 |
4231647 |
56347 |
4332221 |
55866 |
4701370 |
57827 |
4820374 |
158607 |
5453084 |
316041 |
7421842 |
57430 |
4283032 |
253184 |
5519937 |
126598 |
5095438 |
JS |
97072 |
4778601 |
139762 |
4955386 |
265358 |
5470604 |
302489 |
5605912 |
60009 |
6346009 |
59606 |
8994218 |
95863 |
4956268 |
59629 |
6419098 |
134974 |
5940762 |
SBOX |
101789 |
4216170 |
102119 |
4349619 |
101752 |
4642281 |
101820 |
4778388 |
180945 |
5424843 |
323820 |
7198494 |
102272 |
4208200 |
151816 |
5507657 |
145792 |
5040707 |
DJB |
57323 |
4441474 |
57323 |
4591050 |
57323 |
5031054 |
57323 |
5138843 |
112639 |
5724464 |
225330 |
7884705 |
57848 |
4448753 |
638361 |
5751107 |
157934 |
5376431 |
FNV |
57921 |
4446241 |
57921 |
4582822 |
57921 |
5038792 |
57921 |
5170994 |
297598 |
5809198 |
587497 |
7948148 |
57253 |
4456007 |
228855 |
5805523 |
175361 |
5407216 |
RS |
56552 |
5093239 |
56771 |
5221283 |
56599 |
5768846 |
56493 |
6006458 |
135299 |
6911643 |
599969 |
9743789 |
57059 |
5124350 |
428590 |
6767038 |
180917 |
6329581 |
PaulHsieh |
332726 |
4196142 |
236615 |
4184832 |
232988 |
4365635 |
232055 |
4420505 |
123104 |
4892745 |
112439 |
6227952 |
308140 |
4160330 |
62882 |
4935337 |
205119 |
4672935 |
SuperFastHash |
332726 |
4373956 |
236615 |
4393874 |
232988 |
4668238 |
232055 |
4743935 |
123104 |
4977834 |
112439 |
6202872 |
308140 |
4448735 |
62882 |
5006616 |
205119 |
4852008 |
XXH_strong32 |
157274 |
5164012 |
172216 |
5349630 |
494332 |
5932243 |
559006 |
6112106 |
1282583 |
7066830 |
1216796 |
9653287 |
132186 |
5227052 |
68316 |
7077587 |
510339 |
6447843 |
XXH_fast32 |
157001 |
5196848 |
172195 |
5277771 |
494363 |
5797884 |
559438 |
5951314 |
1283654 |
6653974 |
1287949 |
8173387 |
132403 |
5157777 |
68101 |
6667269 |
519388 |
6109528 |
Goulburn |
359797 |
7309826 |
631282 |
7697663 |
1406050 |
8961924 |
1647756 |
9349052 |
360404 |
11436377 |
358296 |
19044162 |
354955 |
7356981 |
354051 |
11411577 |
684074 |
10320945 |
x17 |
815841 |
4398650 |
803067 |
4523875 |
802380 |
4937491 |
803702 |
5052488 |
856824 |
5794445 |
961896 |
7856824 |
774186 |
4442900 |
134740 |
5818002 |
744080 |
5353084 |
DEK |
351553 |
4660217 |
376376 |
4843183 |
348570 |
5338540 |
351477 |
5468119 |
1021243 |
6239365 |
4446280 |
8839063 |
372797 |
4689965 |
135887 |
6247895 |
925523 |
5790793 |
SDBM |
56139 |
4929339 |
56139 |
5102168 |
56139 |
5670296 |
56139 |
5834136 |
945322 |
6671188 |
1805990 |
9767296 |
57043 |
4939497 |
5724566 |
6696635 |
1094685 |
6201319 |
CrapWow |
59910 |
5018009 |
60082 |
5118645 |
60222 |
5475647 |
59803 |
5573433 |
3431433 |
6275085 |
5781762 |
8513698 |
60423 |
5034017 |
152979 |
6282078 |
1208327 |
5911327 |
ELF |
2484724 |
5249008 |
10831309 |
5351961 |
10831309 |
5962402 |
10843269 |
6164292 |
7274933 |
7394244 |
9147162 |
12291305 |
2369305 |
5312132 |
2887242 |
7456085 |
7083657 |
6897679 |
PJW-32 |
2484724 |
5363830 |
10831309 |
5306078 |
10831309 |
5946072 |
10843269 |
6292461 |
7274933 |
7493147 |
9147162 |
12564357 |
2369305 |
5500470 |
2887242 |
7563301 |
7083657 |
7003715 |
Fletcher |
6049256 |
5100163 |
2280147 |
5154600 |
2280269 |
5567256 |
2293526 |
5719849 |
8693373 |
6527707 |
8689016 |
9059061 |
6398271 |
5198212 |
21460413 |
6617726 |
7268034 |
6118072 |
Novak |
9845389 |
4743282 |
9845389 |
4803200 |
9845389 |
5197660 |
9845389 |
5409606 |
9379772 |
6140278 |
9423276 |
8476912 |
9793173 |
4674169 |
917912 |
6171681 |
8611961 |
5702099 |
Adler |
20971797 |
6802291 |
20971797 |
7093744 |
20971797 |
7815261 |
20971797 |
8037045 |
20971765 |
9240934 |
20971765 |
13763422 |
20971802 |
6859224 |
22193986 |
9281151 |
21124563 |
8611634 |
Тот же тест, но результаты отсортируем по производительности функций. От самых быстрых - к более медленным. А сам исходный материл смотрите тут.
Тест скорости функций BCC, AMD-640 |
Алгоритм |
Коллизии A |
Время A |
Коллизии B |
Время B |
Коллизии C |
Время C |
Коллизии D |
Время D |
Коллизии E |
Время E |
Коллизии F |
Время F |
Коллизии G |
Время G |
Коллизии H |
Время H |
Коллизии Среднее |
Время Среднее |
maRushPrime1 |
69949 |
3918751 |
65607 |
4059170 |
72628 |
4141735 |
63965 |
4167996 |
128130 |
4509983 |
221696 |
5568369 |
69798 |
3965593 |
58963 |
4585894 |
93842 |
4364686 |
PaulHsieh |
332726 |
4196142 |
236615 |
4184832 |
232988 |
4365635 |
232055 |
4420505 |
123104 |
4892745 |
112439 |
6227952 |
308140 |
4160330 |
62882 |
4935337 |
205119 |
4672935 |
maFastPrime1 |
63790 |
4510869 |
64202 |
4522029 |
63876 |
4673488 |
64159 |
4704717 |
128477 |
4947560 |
222153 |
5636413 |
65220 |
4568473 |
59194 |
4996188 |
91384 |
4819967 |
SuperFastHash |
332726 |
4373956 |
236615 |
4393874 |
232988 |
4668238 |
232055 |
4743935 |
123104 |
4977834 |
112439 |
6202872 |
308140 |
4448735 |
62882 |
5006616 |
205119 |
4852008 |
SBOX |
101789 |
4216170 |
102119 |
4349619 |
101752 |
4642281 |
101820 |
4778388 |
180945 |
5424843 |
323820 |
7198494 |
102272 |
4208200 |
151816 |
5507657 |
145792 |
5040707 |
Murmur3 |
57202 |
4490468 |
57496 |
4536758 |
57389 |
4731674 |
57443 |
4785129 |
98563 |
5275259 |
118662 |
6879735 |
57119 |
4501561 |
57542 |
5288230 |
70177 |
5061102 |
x31 |
57482 |
4231647 |
56347 |
4332221 |
55866 |
4701370 |
57827 |
4820374 |
158607 |
5453084 |
316041 |
7421842 |
57430 |
4283032 |
253184 |
5519937 |
126598 |
5095438 |
lookup3 |
57380 |
4444995 |
57238 |
4533239 |
57468 |
4777320 |
56972 |
4843473 |
57464 |
5288996 |
57133 |
7089310 |
57141 |
4498828 |
57174 |
5326841 |
57246 |
5100375 |
Murmur2 |
56780 |
4342494 |
56873 |
4457520 |
56792 |
4839515 |
57169 |
4901600 |
74485 |
5652135 |
127682 |
7779621 |
56395 |
4452437 |
56995 |
5733762 |
67896 |
5269886 |
x17 |
815841 |
4398650 |
803067 |
4523875 |
802380 |
4937491 |
803702 |
5052488 |
856824 |
5794445 |
961896 |
7856824 |
774186 |
4442900 |
134740 |
5818002 |
744080 |
5353084 |
DJB |
57323 |
4441474 |
57323 |
4591050 |
57323 |
5031054 |
57323 |
5138843 |
112639 |
5724464 |
225330 |
7884705 |
57848 |
4448753 |
638361 |
5751107 |
157934 |
5376431 |
FNV |
57921 |
4446241 |
57921 |
4582822 |
57921 |
5038792 |
57921 |
5170994 |
297598 |
5809198 |
587497 |
7948148 |
57253 |
4456007 |
228855 |
5805523 |
175361 |
5407216 |
BKDR |
57407 |
4506484 |
57407 |
4659605 |
57407 |
5077214 |
57407 |
5160715 |
113433 |
5767876 |
226079 |
7946431 |
56642 |
4528439 |
136131 |
5788202 |
95239 |
5429371 |
Murmur2A |
57663 |
4821756 |
57751 |
4901020 |
57378 |
5041230 |
57487 |
5174873 |
63368 |
5666418 |
72140 |
7419877 |
57190 |
4861569 |
57464 |
5675115 |
60055 |
5445232 |
Novak |
9845389 |
4743282 |
9845389 |
4803200 |
9845389 |
5197660 |
9845389 |
5409606 |
9379772 |
6140278 |
9423276 |
8476912 |
9793173 |
4674169 |
917912 |
6171681 |
8611961 |
5702099 |
LY |
56353 |
4668657 |
56353 |
4807890 |
56353 |
5297102 |
56353 |
5412751 |
114920 |
6177462 |
228415 |
8805069 |
56207 |
4623472 |
113798 |
6175102 |
92344 |
5745938 |
DEK |
351553 |
4660217 |
376376 |
4843183 |
348570 |
5338540 |
351477 |
5468119 |
1021243 |
6239365 |
4446280 |
8839063 |
372797 |
4689965 |
135887 |
6247895 |
925523 |
5790793 |
FNV1a |
56498 |
4647550 |
56498 |
4833294 |
56498 |
5357808 |
56498 |
5471950 |
169737 |
6220538 |
336958 |
8871423 |
56379 |
4670949 |
114500 |
6256374 |
112946 |
5791236 |
ROT13 |
61868 |
4863765 |
63611 |
4779927 |
68985 |
5352874 |
70811 |
5517474 |
71154 |
6286636 |
62834 |
9022672 |
61660 |
4764490 |
96279 |
6374273 |
69650 |
5870264 |
CrapWow |
59910 |
5018009 |
60082 |
5118645 |
60222 |
5475647 |
59803 |
5573433 |
3431433 |
6275085 |
5781762 |
8513698 |
60423 |
5034017 |
152979 |
6282078 |
1208327 |
5911327 |
FNV1 |
57297 |
4880932 |
57297 |
5050408 |
57297 |
5596907 |
57297 |
5609097 |
169317 |
6403177 |
337301 |
8955546 |
57090 |
4750659 |
115325 |
6259519 |
113528 |
5938281 |
JS |
97072 |
4778601 |
139762 |
4955386 |
265358 |
5470604 |
302489 |
5605912 |
60009 |
6346009 |
59606 |
8994218 |
95863 |
4956268 |
59629 |
6419098 |
134974 |
5940762 |
XXH_fast32 |
157001 |
5196848 |
172195 |
5277771 |
494363 |
5797884 |
559438 |
5951314 |
1283654 |
6653974 |
1287949 |
8173387 |
132403 |
5157777 |
68101 |
6667269 |
519388 |
6109528 |
Fletcher |
6049256 |
5100163 |
2280147 |
5154600 |
2280269 |
5567256 |
2293526 |
5719849 |
8693373 |
6527707 |
8689016 |
9059061 |
6398271 |
5198212 |
21460413 |
6617726 |
7268034 |
6118072 |
Crap8 |
57435 |
5343245 |
57750 |
5394526 |
57886 |
5739395 |
57519 |
5812771 |
231297 |
6467258 |
238174 |
8911924 |
57727 |
5341497 |
57187 |
6498177 |
101872 |
6188599 |
SDBM |
56139 |
4929339 |
56139 |
5102168 |
56139 |
5670296 |
56139 |
5834136 |
945322 |
6671188 |
1805990 |
9767296 |
57043 |
4939497 |
5724566 |
6696635 |
1094685 |
6201319 |
maPrime2c |
57678 |
4983646 |
57225 |
5152921 |
57424 |
5778068 |
57307 |
5915846 |
57490 |
6765964 |
57260 |
9849889 |
57947 |
4990581 |
57182 |
6794037 |
57439 |
6278869 |
RS |
56552 |
5093239 |
56771 |
5221283 |
56599 |
5768846 |
56493 |
6006458 |
135299 |
6911643 |
599969 |
9743789 |
57059 |
5124350 |
428590 |
6767038 |
180917 |
6329581 |
XXH_strong32 |
157274 |
5164012 |
172216 |
5349630 |
494332 |
5932243 |
559006 |
6112106 |
1282583 |
7066830 |
1216796 |
9653287 |
132186 |
5227052 |
68316 |
7077587 |
510339 |
6447843 |
faq6 |
64359 |
5290582 |
64359 |
5404432 |
64359 |
6064411 |
64359 |
6258925 |
57219 |
7226714 |
56945 |
10771881 |
64632 |
5304799 |
57356 |
7287248 |
61699 |
6701124 |
OneAtTime |
64359 |
5299257 |
64359 |
5509840 |
64359 |
6132057 |
64359 |
6308572 |
57219 |
7288634 |
56945 |
10833969 |
64632 |
5303328 |
57356 |
7267645 |
61699 |
6742913 |
crc32 |
58277 |
5334268 |
58277 |
5707858 |
58277 |
6196485 |
58277 |
6333024 |
56240 |
7364236 |
56476 |
10900771 |
56752 |
5398795 |
60058 |
7286619 |
57829 |
6815257 |
AP |
56251 |
5442888 |
56377 |
5589105 |
56253 |
6152439 |
56224 |
6312955 |
96402 |
7378886 |
306858 |
11128019 |
56487 |
5526986 |
56884 |
7429461 |
92717 |
6870092 |
ELF |
2484724 |
5249008 |
10831309 |
5351961 |
10831309 |
5962402 |
10843269 |
6164292 |
7274933 |
7394244 |
9147162 |
12291305 |
2369305 |
5312132 |
2887242 |
7456085 |
7083657 |
6897679 |
PJW-32 |
2484724 |
5363830 |
10831309 |
5306078 |
10831309 |
5946072 |
10843269 |
6292461 |
7274933 |
7493147 |
9147162 |
12564357 |
2369305 |
5500470 |
2887242 |
7563301 |
7083657 |
7003715 |
Adler |
20971797 |
6802291 |
20971797 |
7093744 |
20971797 |
7815261 |
20971797 |
8037045 |
20971765 |
9240934 |
20971765 |
13763422 |
20971802 |
6859224 |
22193986 |
9281151 |
21124563 |
8611634 |
Goulburn |
359797 |
7309826 |
631282 |
7697663 |
1406050 |
8961924 |
1647756 |
9349052 |
360404 |
11436377 |
358296 |
19044162 |
354955 |
7356981 |
354051 |
11411577 |
684074 |
10320945 |
CityHash32 |
56695 |
9157642 |
55927 |
9643783 |
54312 |
11032658 |
53034 |
11516558 |
35266 |
13301219 |
44412 |
20215332 |
56473 |
9358538 |
35472 |
13285900 |
48949 |
12188954 |
Можно ли делать выводы на основе вышепроведенных тестов? Скептики скажут, что перечень информации не полон и говорить что-то однозначно - довольно рискованно. Они будут правы. Если мы посмотрим на материалы - исследования различных независимых экспертов, результы их деятельности могут разнится. А почему? Все потому, что тот же алгоритм может давать практически идеальные результаты на одном наборе данных, а сыпаться - на другом. И далеко не всегда удается вычленить такой вот "нехороший" исходный материал. В нашем тесте были использованы самые разные наборы, включающие более двух миллионов строк. Помимо этого проводились подтесты, уложняющие основные испытания. Как вы уже заметили, к основному материалу добавлялись модификации от B до H, тоесть всего мы имели 8 вариантов каждого теста, и каждая вариация испытавала алгоритмы на те или иные слабые места. Что характерно, в качестве итогового испытания у нас применяется подход "среднее значение", включающее среднее арифметическое по тесту. Другими словами, вычисляем лидера, стабильного лидера, а не смотрим на показатель по одному "забегу".
Однозначно, приветствуются другие испытания. Если у вас есть своя тестовая батарея - замеряйте время, вычисляйте число коллизий. Как показали наши испытания - MaPrime2c отличается высокой стабильностью и отсутствием провалов, но не блещет поизводительностью. Впрочем, оная далеко не всегда на первом месте стоит среди требований к алгоритму. Что касается функций FastPrime1 и RushPrime1, эти товарищи отличаются очень хорошей скоростью работы на кратных 32-битам строках, хорошей скоростью на прочих наборах и далеко не худшими показателями распределения. Среди конкурентых преимуществ всех трех алгоритмов - простота конструкции, возможность реализации в аппаратных решениях, отличная переносимость между языками программирования и платформами. Именно поэтому только нашему читателю (инженеру, ученому, исследователю) самому придется решать, кто же победил и кто победит в дальнейшем в нелегком соревновании, которое можно окрестить в популярной ныне стилистике MaPrime2c vs FNV, MaPrime2c vs CityHash и так далее.
Исходники тестовой батареи доступны здесь. Вы всегда сможете провести тестирование на своем собственном оборудовании и, при необходимости, на своем тестовом материале. Набор исходных слованых данных, применяемых во втором разделе тестирования можно получить по этой ссылке. Если у вас есть вопросы, пишите письма на amsoftware at yandex.by
|
|