The hash tables
- Google’s dense and sparse hash tables
– Use open addressing – Quadratic probing
- SGI
– Is a chained hash table – Referred to as gnu in graphs
- One-table and Two-table
Cache misses for lookup, existing of random ints Cache misses for - - PDF document
The hash tables Googles dense and sparse hash tables Use open addressing Quadratic probing SGI Is a chained hash table Referred to as gnu in graphs One-table and Two-table Doubly linked: Rather large compartments
CPU time
Cache CPU time
Cache CPU time
Cache random genome random words paths random words paths reference value integer value string CPU time
Cache
insert lookup, existing lookup, non-e. erase iterate fwd. iterate bwd.
1e+08 2e+08 3e+08 4e+08 5e+08 6e+08 100000 200000 300000 400000 500000 600000 700000 800000 Total CPU cycles for lookup, existing of random ints google_dense google_sparse gnu
twotable chained 1e+09 2e+09 3e+09 4e+09 5e+09 6e+09 100000 200000 300000 400000 500000 600000 700000 800000 Total CPU cycles for lookup, existing of genome-based ints google_dense google_sparse gnu
twotable chained
200000 400000 600000 800000 1e+06 1.2e+06 1.4e+06 1.6e+06 1.8e+06 100000 200000 300000 400000 500000 600000 700000 800000 Cache misses for lookup, existing of random ints google_dense google_sparse gnu
twotable chained 500000 1e+06 1.5e+06 2e+06 100000 200000 300000 400000 500000 600000 700000 800000 Cache misses for lookup, non-existing of random ints google_dense google_sparse gnu
twotable chained 2 4 6 8 10 12 14 100000 200000 300000 400000 500000 600000 700000 800000 Cache miss ratio for lookup, existing of random ints google_dense google_sparse gnu
twotable chained 2 4 6 8 10 12 14 100000 200000 300000 400000 500000 600000 700000 800000 Cache miss ratio for lookup, non-existing of random ints google_dense google_sparse gnu
twotable chained
5 10 15 20 100000 200000 300000 400000 500000 600000 700000 800000 Cache miss ratio for lookup, existing of genome-based ints google_dense google_sparse gnu
twotable chained 5 10 15 20 25 30 100000 200000 300000 400000 500000 600000 700000 800000 Cache miss ratio for lookup, non-existing of genome-based ints google_dense google_sparse gnu
twotable chained
100 200 300 400 500 100000 200000 300000 400000 500000 600000 700000 800000 Standard deviation of CPU cycle count per operation for lookup, existing of pointers to random strings google_dense google_sparse gnu
twotable chained
100 200 300 400 500 600 700 800 900 100000 200000 300000 400000 500000 600000 700000 800000 Standard deviation of CPU cycle count per operation for lookup, existing of pointers to filenames google_dense google_sparse gnu
twotable chained
15 20 25 30 35 40 100000 200000 300000 400000 500000 600000 700000 800000 Allocated bytes per element for insertion of random ints gnu
twotable chained chained (linear fit) 15 20 25 30 35 40 100000 200000 300000 400000 500000 600000 700000 800000 Allocated bytes per element for insertion of genome-based ints gnu
twotable chained chained (linear fit)
16 18 20 22 24 100000 200000 300000 400000 500000 600000 700000 800000 Allocated bytes per element for insertion of random ints gnu
twotable chained chained (linear fit) 16 18 20 22 24 100000 200000 300000 400000 500000 600000 700000 800000 Allocated bytes per element for insertion of genome-based ints gnu
twotable chained chained (linear fit)
2e+08 4e+08 6e+08 8e+08 1e+09 1.2e+09 100000 200000 300000 400000 500000 600000 700000 800000 Total CPU cycles for insertion of random ints google_dense google_sparse gnu
twotable chained 2e+09 4e+09 6e+09 8e+09 1e+10 1.2e+10 100000 200000 300000 400000 500000 600000 700000 800000 Total CPU cycles for insertion of genome-based ints google_dense google_sparse gnu
twotable chained
2e+08 4e+08 6e+08 8e+08 1e+09 1.2e+09 1.4e+09 1.6e+09 1.8e+09 100000 200000 300000 400000 500000 600000 700000 800000 Total CPU cycles for insertion of pointers to random strings google_dense google_sparse gnu
twotable chained 5e+08 1e+09 1.5e+09 2e+09 2.5e+09 3e+09 100000 200000 300000 400000 500000 600000 700000 800000 Total CPU cycles for insertion of pointers to filenames google_dense google_sparse gnu
twotable chained
1 1.5 2 2.5 3 100000 200000 300000 400000 500000 600000 700000 800000 Cache miss ratio for insertion of random ints google_dense google_sparse gnu
twotable chained 1 2 3 4 5 6 7 8 9 100000 200000 300000 400000 500000 600000 700000 800000 Cache miss ratio for insertion of genome-based ints google_dense google_sparse gnu
twotable chained 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3 100000 200000 300000 400000 500000 600000 700000 800000 Cache miss ratio for insertion of pointers to random strings google_dense google_sparse gnu
twotable chained 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.1 2.2 100000 200000 300000 400000 500000 600000 700000 800000 Cache miss ratio for insertion of pointers to filenames google_dense google_sparse gnu
twotable chained
2e+06 4e+06 6e+06 8e+06 1e+07 100000 200000 300000 400000 500000 600000 700000 800000 Cache misses for insertion of pointers to random strings google_dense google_sparse gnu
twotable chained 2e+06 4e+06 6e+06 8e+06 1e+07 1.2e+07 100000 200000 300000 400000 500000 600000 700000 800000 Cache misses for insertion of pointers to filenames google_dense google_sparse gnu
twotable chained
50000 100000 150000 200000 250000 300000 350000 400000 450000 100000 200000 300000 400000 500000 600000 700000 800000 Standard deviation of CPU cycle count per operation for insertion of genome-based ints google_dense google_sparse gnu
twotable chained 50000 100000 150000 200000 250000 300000 350000 100000 200000 300000 400000 500000 600000 700000 800000 Standard deviation of CPU cycle count per operation for insertion of random ints google_dense google_sparse gnu
twotable chained
1e+08 2e+08 3e+08 4e+08 5e+08 100000 200000 300000 400000 500000 600000 700000 800000 Total CPU cycles for deletion of random ints google_dense google_sparse gnu
twotable chained 1e+09 2e+09 3e+09 4e+09 5e+09 6e+09 7e+09 8e+09 100000 200000 300000 400000 500000 600000 700000 800000 Total CPU cycles for deletion of genome-based ints google_dense google_sparse gnu
twotable chained
1e+08 2e+08 3e+08 4e+08 5e+08 6e+08 7e+08 100000 200000 300000 400000 500000 600000 700000 800000 Total CPU cycles for deletion of pointers to random strings google_dense google_sparse gnu
twotable chained 2e+08 4e+08 6e+08 8e+08 1e+09 1.2e+09 100000 200000 300000 400000 500000 600000 700000 800000 Total CPU cycles for deletion of pointers to filenames google_dense google_sparse gnu
twotable chained
100 150 200 250 100000 200000 300000 400000 500000 600000 700000 800000 Standard deviation of CPU cycle count per operation for deletion of random ints google_dense google_sparse gnu
twotable chained 5000 10000 15000 20000 100000 200000 300000 400000 500000 600000 700000 800000 Standard deviation of CPU cycle count per operation for deletion of genome-based ints google_dense google_sparse gnu
twotable chained
0.5 1 1.5 2 2.5 3 100000 200000 300000 400000 500000 600000 700000 800000 Cache miss ratio for deletion of random ints google_dense google_sparse gnu
twotable chained 1 2 3 4 5 6 7 8 100000 200000 300000 400000 500000 600000 700000 800000 Cache miss ratio for deletion of genome-based ints google_dense google_sparse gnu
twotable chained
2e+07 4e+07 6e+07 8e+07 1e+08 1.2e+08 1.4e+08 1.6e+08 1.8e+08 2e+08 100000 200000 300000 400000 500000 600000 700000 800000 Total CPU cycles for iteration of random ints google_dense google_sparse gnu
twotable chained 5e+07 1e+08 1.5e+08 2e+08 100000 200000 300000 400000 500000 600000 700000 800000 Total CPU cycles for iteration of genome-based ints google_dense google_sparse gnu
twotable chained 40 50 60 70 80 90 100 110 100000 200000 300000 400000 500000 600000 700000 800000 Standard deviation of CPU cycle count per operation for iteration of random ints google_dense google_sparse gnu
twotable chained
500 1000 1500 2000 2500 3000 100000 200000 300000 400000 500000 600000 700000 800000 Standard deviation of CPU cycle count per operation for iteration of genome-based ints google_dense google_sparse gnu
twotable chained