remake hash_set realization. rm indexing
This commit is contained in:
@@ -1,11 +1,15 @@
|
||||
В этой реалзации попытка хранить хэш функции напрямую, без кодирования
|
||||
В этой реализации хэши хранятся напрямую, без Golomb-Rice-кодирования.
|
||||
|
||||
В теории это должно увеличить размер set-строки ~x2, но
|
||||
Set-строка целиком декодируется и проверяется при первом обращении. Как и в
|
||||
`set9.c`, полностью декодированные массивы хэшей сохраняются в двух LRU-кэшах
|
||||
по 512 записей — отдельно для первого и второго операнда.
|
||||
|
||||
- позволить индексироваться по элементам хэша
|
||||
- кратно сократить время на дешифровку
|
||||
- кэшировать можно соответствия индекс - значение, чтобы не работать с битами (может и не стоит того)
|
||||
- стоит этого
|
||||
Для 32-битного формата Base64
|
||||
декодируется сразу в три `unsigned` за блок с одновременной проверкой порядка.
|
||||
Большое понижение BPP выполняется radix-сортировкой, а не отдельным проходом на
|
||||
каждый бит.
|
||||
|
||||
Последний запуск `taskset -c 2 python3 benchmark.py`:
|
||||
|
||||
```text
|
||||
symbols=1000 required=500 bpp=32
|
||||
@@ -14,8 +18,14 @@ set9 3994 golomb/base62
|
||||
direct 5340 D1/base64
|
||||
|
||||
operation set9 direct direct/set9
|
||||
set_fini only 150.44 us 99.28 us 0.66x
|
||||
new+add+fini 1034.22 us 949.62 us 0.92x
|
||||
rpmsetcmp cold 292.86 us 210.30 us 0.72x
|
||||
rpmsetcmp warm 5.89 us 23.02 us 3.91x
|
||||
set_fini only 147.45 us 105.09 us 0.71x
|
||||
new+add (ctypes) 611.28 us 608.24 us 1.00x
|
||||
new+add+fini (ctypes) 769.66 us 693.60 us 0.90x
|
||||
rpmsetcmp cold 129.67 us 113.04 us 0.87x
|
||||
rpmsetcmp warm 2.99 us 1.04 us 0.35x
|
||||
```
|
||||
|
||||
Для разреженного сравнения
|
||||
(`taskset -c 2 python3 benchmark.py --required 1`) получено
|
||||
`83.22 us` на холодном кэше и `0.86 us` на прогретом: соответственно `0.88x`
|
||||
и `1.02x` от времени `set9`.
|
||||
|
||||
Reference in New Issue
Block a user