horton tables: fast hash tables for in-memory data ... · 4 | horton tables: fast hash tables for...
TRANSCRIPT
HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING
ALEX D. BRESLOW, DONG PING ZHANG, JOSEPH L. GREATHOUSE, NUWAN JAYASENA, AND DEAN M. TULLSEN
6/23/2016
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 20162
THE ROLE OF HASH TABLESIN IN-MEMORY DATA-INTENSIVE COMPUTING
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 20163
THE ROLE OF HASH TABLES
Data stores and caches
‒ Key-value stores (e.g., Memcached, Redis, and MongoDB)
‒ Relational databases (e.g., MonetDB, HyPer, IBM DB2 with BLU)
IN IN-MEMORY DATA-INTENSIVE COMPUTING
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 20164
THE ROLE OF HASH TABLES
Data stores and caches
‒ Key-value stores (e.g., Memcached, Redis, and MongoDB)
‒ Relational databases (e.g., MonetDB, HyPer, IBM DB2 with BLU)
Graphics
‒ Accelerate computations by computing on hash tables that store sparse images, textures, or surfaces
IN IN-MEMORY DATA-INTENSIVE COMPUTING
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 20165
THE ROLE OF HASH TABLES
Data stores and caches
‒ Key-value stores (e.g., Memcached, Redis, and MongoDB)
‒ Relational databases (e.g., MonetDB, HyPer, IBM DB2 with BLU)
Graphics
‒ Accelerate computations by computing on hash tables that store sparse images, textures, or surfaces
General data compression schemes used in common compression utilities
IN IN-MEMORY DATA-INTENSIVE COMPUTING
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 20166
THE ROLE OF HASH TABLES
Data stores and caches
‒ Key-value stores (e.g., Memcached, Redis, and MongoDB)
‒ Relational databases (e.g., MonetDB, HyPer, IBM DB2 with BLU)
Graphics
‒ Accelerate computations by computing on hash tables that store sparse images, textures, or surfaces
General data compression schemes used in common compression utilities
In each of these fields, having a fast hash table is important.
IN IN-MEMORY DATA-INTENSIVE COMPUTING
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 20167
FOCUS OF THIS TALKOPTIMIZING MEMORY ACCESSES IN FAST IN-MEMORY HASH TABLES
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 20168
FOCUS OF THIS TALKOPTIMIZING MEMORY ACCESSES IN FAST IN-MEMORY HASH TABLES
COMPUTE ELEMENTS
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 20169
FOCUS OF THIS TALKOPTIMIZING MEMORY ACCESSES IN FAST IN-MEMORY HASH TABLES
PRIVATE CACHES
COMPUTE ELEMENTS
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201610
FOCUS OF THIS TALKOPTIMIZING MEMORY ACCESSES IN FAST IN-MEMORY HASH TABLES
SHARED
LLCs
PRIVATE CACHES
COMPUTE ELEMENTS
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201611
FOCUS OF THIS TALKOPTIMIZING MEMORY ACCESSES IN FAST IN-MEMORY HASH TABLES
MAIN
MEMORY
SHARED
LLCs
PRIVATE CACHES
COMPUTE ELEMENTS
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201612
FOCUS OF THIS TALK
Hash tables have poor temporal and spatial locality.
OPTIMIZING MEMORY ACCESSES IN FAST IN-MEMORY HASH TABLES
MAIN
MEMORY
SHARED
LLCs
PRIVATE CACHES
COMPUTE ELEMENTS
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201613
FOCUS OF THIS TALK
Hash tables have poor temporal and spatial locality.
In-memory hash tables often have hot working sets that are bigger than LLCs.
OPTIMIZING MEMORY ACCESSES IN FAST IN-MEMORY HASH TABLES
MAIN
MEMORY
SHARED
LLCs
PRIVATE CACHES
COMPUTE ELEMENTS
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201614
FOCUS OF THIS TALK
Hash tables have poor temporal and spatial locality.
In-memory hash tables often have hot working sets that are bigger than LLCs.
OPTIMIZING MEMORY ACCESSES IN FAST IN-MEMORY HASH TABLES
MAIN
MEMORY
SHARED
LLCs
PRIVATE CACHES
COMPUTE ELEMENTS
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201615
FOCUS OF THIS TALK
Hash tables have poor temporal and spatial locality.
In-memory hash tables often have hot working sets that are bigger than LLCs.
OPTIMIZING MEMORY ACCESSES IN FAST IN-MEMORY HASH TABLES
MAIN
MEMORY
SHARED
LLCs
PRIVATE CACHES
COMPUTE ELEMENTS
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201616
FOCUS OF THIS TALK
Hash tables have poor temporal and spatial locality.
In-memory hash tables often have hot working sets that are bigger than LLCs.
OPTIMIZING MEMORY ACCESSES IN FAST IN-MEMORY HASH TABLES
MAIN
MEMORY
SHARED
LLCs
PRIVATE CACHES
COMPUTE ELEMENTS
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201617
FOCUS OF THIS TALK
Hash tables have poor temporal and spatial locality.
In-memory hash tables often have hot working sets that are bigger than LLCs.
OPTIMIZING MEMORY ACCESSES IN FAST IN-MEMORY HASH TABLES
MAIN
MEMORY
SHARED
LLCs
PRIVATE CACHES
COMPUTE ELEMENTS
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201618
FOCUS OF THIS TALK
Hash tables have poor temporal and spatial locality.
In-memory hash tables often have hot working sets that are bigger than LLCs.
OPTIMIZING MEMORY ACCESSES IN FAST IN-MEMORY HASH TABLES
MAIN
MEMORY
SHARED
LLCs
PRIVATE CACHES
COMPUTE ELEMENTS
Comparatively low bandwidth and high latency per memory transaction leads to
memory-boundedness.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201619
FOCUS OF THIS TALK
Hash tables have poor temporal and spatial locality.
In-memory hash tables often have hot working sets that are bigger than LLCs.
OPTIMIZING MEMORY ACCESSES IN FAST IN-MEMORY HASH TABLES
MAIN
MEMORY
SHARED
LLCs
PRIVATE CACHES
COMPUTE ELEMENTS
Comparatively low bandwidth and high latency per memory transaction leads to
memory-boundedness.
We need to aggressively
optimize hash tables to be
cognizant of this limitation.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201620
BUCKETIZED CUCKOO HASH TABLES
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201621
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201622
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201623
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
H2
H1
INSERT KV1
KEY VALUE
3
4
5
6
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201624
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
H2
H1
INSERT KV1
KEY VALUE
3
4
5
6
2
1
0
Load balancingInsert KV1 into the least full candidate bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201625
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
H2
INSERT KV1
KEY VALUE
3
4
5
6
2
1
0
Load balancingInsert KV1 into the least full candidate bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201626
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
H2
INSERT KV1
KEY VALUE
3
4
5
6
2
1
0
KV1
Load balancingInsert KV1 into the least full candidate bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201627
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
H2
INSERT KV1
KEY VALUE
3
4
5
6
2
1
0
Load balancingInsert KV1 into the least full candidate bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201628
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
H2
H1
INSERT KV1
KEY VALUE
3
4
5
6
2
1
0
Load balancingInsert KV1 into the least full candidate bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201629
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
H2
H1
INSERT KV1
KEY VALUE
3
4
5
6
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201630
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
H2
H1
INSERT KV1
KEY VALUE
3
4
5
6
2
1
0
First-fitEvaluate the hash functions in numerical order and insert KV1 into the firstcandidate bucket with a free slot
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201631
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
H1
INSERT KV1
KEY VALUE
3
4
5
6
2
1
0
First-fitEvaluate the hash functions in numerical order and insert KV1 into the firstcandidate bucket with a free slot
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201632
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
H1
INSERT KV1
KEY VALUE
3
4
5
6
2
1
0 KV1
First-fitEvaluate the hash functions in numerical order and insert KV1 into the firstcandidate bucket with a free slot
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201633
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
3
4
5
6
2
1
0 KV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201634
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
INSERT KV2
H2
H1
3
4
5
6
2
1
0 KV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201635
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
INSERT KV2
H2
H1
3
4
5
6
2
1
0
Discover cuckoo chain with breadth-first search
KV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201636
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
INSERT KV2
H2
H1
3
4
5
6
2
1
0
Discover cuckoo chain with breadth-first search
KV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201637
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
INSERT KV2
H2
H1
3
4
5
6
2
1
0
Discover cuckoo chain with breadth-first search
KV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201638
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
INSERT KV2
H2
H1
3
4
5
6
2
1
0
Discover cuckoo chain with breadth-first search
KV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201639
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
INSERT KV2
H1
3
4
5
6
2
1
0
Discover cuckoo chain with breadth-first search
KV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201640
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
INSERT KV2
H1
3
4
5
6
2
1
0
Discover cuckoo chain with breadth-first searchRemap in sequence with alternate hash function
KV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201641
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
INSERT KV2
H1
3
4
5
6
2
1
0
e
Discover cuckoo chain with breadth-first searchRemap in sequence with alternate hash function
KV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201642
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
INSERT KV2
H1
3
4
5
6
2
1
0
e
m
Discover cuckoo chain with breadth-first searchRemap in sequence with alternate hash function
KV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201643
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
INSERT KV2
H1
3
4
5
6
2
1
0
e
m
u
Discover cuckoo chain with breadth-first searchRemap in sequence with alternate hash function
KV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201644
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
INSERT KV2
H1
3
4
5
6
2
1
0
e
m
u
KV2
Discover cuckoo chain with breadth-first searchRemap in sequence with alternate hash function
KV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201645
BUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
INSERT KV2
H1
3
4
5
6
2
1
0
e
m
u
KV2
Discover cuckoo chain with breadth-first searchRemap in sequence with alternate hash function
KV1
Each bucket is typically sized to one hardware cache line or less.
Overwhelmingly, accesses to the bucket’s cache line hit in the hardware caches during accesses to consecutive cells.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201646
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
H2
H1
INSERT KV1
KEY VALUE
3
4
5
6
2
1
0
KV1
LOOKUPS AND LOAD BALANCING HEURISTICBUCKETIZED CUCKOO HASH TABLES
Expected Positive Lookup Cost Per Item in Buckets: (Fraction of Items Hashed by H1) + 2 * (Fraction of Items Hashed by H2)
Expected Negative Lookup Cost per Item in Buckets: 2 (also worst-case)
Expected Positive Lookup Cost Per Item in Buckets: 1.5 = (0.5 Hashed by H1) + 2 * (0.5 Hashed by H2)
Expected Negative Lookup Cost per Item in Buckets: 2 (also worst-case)
Load balancingInsert KV1 into the least full candidate bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201647
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
H2
H1
INSERT KV1
KEY VALUE
3
4
5
6
2
1
0 KV1
LOOKUPS AND FIRST-FIT INSERTION HEURISTICBUCKETIZED CUCKOO HASH TABLES
First-fitInsert KV1 into the firstcandidate with a free slot
Expected Positive Lookup Cost Per Item in Buckets: 1 to 1.3ish depending on the table load factor and the slots per bucket
Expected Negative Lookup Cost per Item in Buckets: 2 (also worst-case)
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201648
BENEFITS OF FIRST-FITBUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
H23
4
5
6
2
1
0
e
m
u
KV2
KV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201649
BENEFITS OF FIRST-FITBUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
H23
4
5
6
2
1
0
e
m
u
KV2
KV1
LOOKUP KV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201650
BENEFITS OF FIRST-FITBUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
H23
4
5
6
2
1
0
e
m
u
KV2
KV1 H1
LOOKUP KV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201651
BENEFITS OF FIRST-FITBUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
H23
4
5
6
2
1
0
e
m
u
KV2
KV1 H1
LOOKUP KV1
a.key == KV1.key?
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201652
BENEFITS OF FIRST-FITBUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
H23
4
5
6
2
1
0
e
m
u
KV2
KV1 H1
LOOKUP KV1
a.key == KV1.key?
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201653
BENEFITS OF FIRST-FITBUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
H23
4
5
6
2
1
0
e
m
u
KV2
KV1 H1
LOOKUP KV1
a.key == KV1.key?b
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201654
BENEFITS OF FIRST-FITBUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
H23
4
5
6
2
1
0
e
m
u
KV2
KV1 H1
LOOKUP KV1
a.key == KV1.key?b
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201655
BENEFITS OF FIRST-FITBUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
H23
4
5
6
2
1
0
e
m
u
KV2
KV1 H1
LOOKUP KV1
a.key == KV1.key?bc
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201656
BENEFITS OF FIRST-FITBUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
H23
4
5
6
2
1
0
e
m
u
KV2
KV1 H1
LOOKUP KV1
a.key == KV1.key?bc
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201657
BENEFITS OF FIRST-FITBUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
H23
4
5
6
2
1
0
e
m
u
KV2
KV1 H1
LOOKUP KV1
a.key == KV1.key?bcKV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201658
BENEFITS OF FIRST-FITBUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
LOOKUP KV2
H2
H1
3
4
5
6
2
1
0
e
m
u
KV2
KV1 H1
LOOKUP KV1
a.key == KV1.key?bcKV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201659
BENEFITS OF FIRST-FITBUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
LOOKUP KV2
H2
H1
3
4
5
6
2
1
0
e
m
u
KV2
KV1 H1
LOOKUP KV1
a.key == KV1.key?bcKV1
Positive Lookups:
‒ First-fit gets us most of the way to 1.0 on positive lookups because most elements are hashed with H1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201660
BENEFITS OF FIRST-FITBUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
LOOKUP KV2
H2
H1
3
4
5
6
2
1
0
e
m
u
KV2
KV1 H1
LOOKUP KV1
a.key == KV1.key?bcKV1
Positive Lookups:
‒ First-fit gets us most of the way to 1.0 on positive lookups because most elements are hashed with H1
But…
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201661
LIMITATIONS OF FIRST-FITBUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
H2
3
4
5
6
2
1
0
e
m
u
KV2
KV1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201662
LIMITATIONS OF FIRST-FITBUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
H2
3
4
5
6
2
1
0
e
m
u
KV2
KV1
Expected Negative Lookup Cost per Item in Buckets:
‒ First-fit doesn’t address the comparatively expensive negative lookup cost. We still need to check all candidate buckets.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201663
LIMITATIONS OF FIRST-FITBUCKETIZED CUCKOO HASH TABLES
a b c EMPTY
d e f g
h EMPTY EMPTY EMPTY
i j k l
m n o p
q r s EMPTY
t u v w
KEY VALUE
H2
3
4
5
6
2
1
0
e
m
u
KV2
KV1
H1
H2
LOOKUP KV3
Expected Negative Lookup Cost per Item in Buckets:
‒ First-fit doesn’t address the comparatively expensive negative lookup cost. We still need to check all candidate buckets.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201664
HORTON TABLESDESIGN GOALS
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201665
HORTON TABLES
Positive lookups that typically require accessing only 1 bucket per query
‒ If buckets are at most a cache line in size, then only 1 cache line is accessed as well.
DESIGN GOALS
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201666
HORTON TABLES
Positive lookups that typically require accessing only 1 bucket per query
‒ If buckets are at most a cache line in size, then only 1 cache line is accessed as well.
Negative lookups that typically require accessing only 1 bucket per query
‒ If buckets are at most a cache line in size, then only 1 cache line is accessed as well.
DESIGN GOALS
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201667
HORTON TABLES
Positive lookups that typically require accessing only 1 bucket per query
‒ If buckets are at most a cache line in size, then only 1 cache line is accessed as well.
Negative lookups that typically require accessing only 1 bucket per query
‒ If buckets are at most a cache line in size, then only 1 cache line is accessed as well.
Retain a worst-case lookup cost of 2 buckets (i.e., often 2 hardware cache lines)
DESIGN GOALS
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201668
HORTON TABLES
Positive lookups that typically require accessing only 1 bucket per query
‒ If buckets are at most a cache line in size, then only 1 cache line is accessed as well.
Negative lookups that typically require accessing only 1 bucket per query
‒ If buckets are at most a cache line in size, then only 1 cache line is accessed as well.
Retain a worst-case lookup cost of 2 buckets (i.e., often 2 hardware cache lines)
Achieve a load factor exceeding 0.95 (akin to a bucketized cuckoo hash table that uses 2 hash functions and 4-cell buckets)
DESIGN GOALS
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201669
HORTON TABLESPRIMARY INSERTIONS AND LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 EMPTY
EMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201670
HORTON TABLES
Horton tables start off as standard bucketized cuckoo hash tables
PRIMARY INSERTIONS AND LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 EMPTY
EMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201671
HORTON TABLES
Horton tables start off as standard bucketized cuckoo hash tables
Like first-fit, they strongly bias inserts by using a primary hash function called Hprimary
PRIMARY INSERTIONS AND LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 EMPTY
EMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201672
HORTON TABLES
Horton tables start off as standard bucketized cuckoo hash tables
Like first-fit, they strongly bias inserts by using a primary hash function called Hprimary
Most positive lookups therefore only require accessing a single cache line
PRIMARY INSERTIONS AND LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 EMPTY
EMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201673
HORTON TABLES
Horton tables start off as standard bucketized cuckoo hash tables
Like first-fit, they strongly bias inserts by using a primary hash function called Hprimary
Most positive lookups therefore only require accessing a single cache line
PRIMARY INSERTIONS AND LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 EMPTY
EMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
INSERT 13Hprimary
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201674
HORTON TABLES
Horton tables start off as standard bucketized cuckoo hash tables
Like first-fit, they strongly bias inserts by using a primary hash function called Hprimary
Most positive lookups therefore only require accessing a single cache line
PRIMARY INSERTIONS AND LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 EMPTY
EMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13 INSERT 13Hprimary
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201675
HORTON TABLES
Horton tables start off as standard bucketized cuckoo hash tables
Like first-fit, they strongly bias inserts by using a primary hash function called Hprimary
Most positive lookups therefore only require accessing a single cache line
PRIMARY INSERTIONS AND LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 EMPTY
EMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201676
HORTON TABLES
Horton tables start off as standard bucketized cuckoo hash tables
Like first-fit, they strongly bias inserts by using a primary hash function called Hprimary
Most positive lookups therefore only require accessing a single cache line
PRIMARY INSERTIONS AND LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 EMPTY
EMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
INSERT 16Hprimary
13
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201677
HORTON TABLES
Horton tables start off as standard bucketized cuckoo hash tables
Like first-fit, they strongly bias inserts by using a primary hash function called Hprimary
Most positive lookups therefore only require accessing a single cache line
PRIMARY INSERTIONS AND LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 EMPTY
EMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
INSERT 16Hprimary16
13
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201678
HORTON TABLES
Horton tables start off as standard bucketized cuckoo hash tables
Like first-fit, they strongly bias inserts by using a primary hash function called Hprimary
Most positive lookups therefore only require accessing a single cache line
PRIMARY INSERTIONS AND LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 EMPTY
EMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
16
13
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201679
HORTON TABLES
Horton tables start off as standard bucketized cuckoo hash tables
Like first-fit, they strongly bias inserts by using a primary hash function called Hprimary
Most positive lookups therefore only require accessing a single cache line
PRIMARY INSERTIONS AND LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 EMPTY
EMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
16
13 Hprimary LOOKUP 13
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201680
HORTON TABLES
Horton tables start off as standard bucketized cuckoo hash tables
Like first-fit, they strongly bias inserts by using a primary hash function called Hprimary
Most positive lookups therefore only require accessing a single cache line
PRIMARY INSERTIONS AND LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 EMPTY
EMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
Hprimary16
13 Hprimary LOOKUP 13
LOOKUP 16
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201681
HORTON TABLESINSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
16
13
3
4
5
2
1
0
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201682
HORTON TABLESINSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
INSERT 23Hprimary16
13
3
4
5
2
1
0
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201683
HORTON TABLESINSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
INSERT 23Hprimary16
13
Evict 163
4
5
2
1
0
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201684
HORTON TABLESINSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
INSERT 23Hprimary
13
Evict 163
4
5
2
1
0
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201685
HORTON TABLESINSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
INSERT 23Hprimary
13
Evict 16
16
3
4
5
2
1
0
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201686
HORTON TABLESINSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
INSERT 23Hprimary
13
16
3
4
5
2
1
0
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201687
HORTON TABLESINSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
INSERT 23
13
16
3
4
5
2
1
0
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201688
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201689
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16
0 20
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201690
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13 R1 INSERT 23
16
0 20
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201691
INSERT 23
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13 R1 INSERT 23
16R2
0 20
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201692
INSERT 23
INSERT 23
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13 R1 INSERT 23
16R3
R2
0 20
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201693
INSERT 23
INSERT 23
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13 R1 INSERT 23
16R3
R2
0 20
Use R2 for inserting 23 because it maps 23 to least full secondary bucket candidate.
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201694
INSERT 23
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16R2
0 20
Use R2 for inserting 23 because it maps 23 to least full secondary bucket candidate.
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201695
INSERT 23
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16R223
0 20
Use R2 for inserting 23 because it maps 23 to least full secondary bucket candidate.
3
4
5
2
1
0
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201696
INSERT 23
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16R223
0 20
Use R2 for inserting 23 because it maps 23 to least full secondary bucket candidate.
3
4
5
2
1
0
Compute index into remap entry array using Htag with key as input
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201697
INSERT 23
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16R223
Htag(23) = 17 0 20
Use R2 for inserting 23 because it maps 23 to least full secondary bucket candidate.
3
4
5
2
1
0
Compute index into remap entry array using Htag with key as input
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201698
INSERT 23
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16R223
Htag(23) = 17 0 20
Use R2 for inserting 23 because it maps 23 to least full secondary bucket candidate.
3
4
5
2
1
0
Compute index into remap entry array using Htag with key as inputStore 2 at index Htag(23)=17 to indicate that R2 was used to remap 23
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 201699
INSERT 23
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16R223
Htag(23) = 17 0 20
Use R2 for inserting 23 because it maps 23 to least full secondary bucket candidate.
3
4
5
2
1
0
Compute index into remap entry array using Htag with key as inputStore 2 at index Htag(23)=17 to indicate that R2 was used to remap 23
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016100
INSERT 23
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16R223
Htag(23) = 17 0 20
Use R2 for inserting 23 because it maps 23 to least full secondary bucket candidate.
3
4
5
2
1
0
2
Compute index into remap entry array using Htag with key as inputStore 2 at index Htag(23)=17 to indicate that R2 was used to remap 23
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016101
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
1623
0 20
3
4
5
2
1
0
2
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016102
16 now also needs to be remapped to a
secondary bucket.
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
1623
0 20
3
4
5
2
1
0
2
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016103
16 now also needs to be remapped to a
secondary bucket.
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
1623
0 20
3
4
5
2
1
0
2
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016104
16 now also needs to be remapped to a
secondary bucket.
INSERT 16
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16R123
0 20
3
4
5
2
1
0
2
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016105
16 now also needs to be remapped to a
secondary bucket.
INSERT 16
INSERT 16
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
R216
R123
0 20
3
4
5
2
1
0
2
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016106
16 now also needs to be remapped to a
secondary bucket.
INSERT 16
INSERT 16
INSERT 16
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
R216
R3
R123
0 20
3
4
5
2
1
0
2
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016107
16 now also needs to be remapped to a
secondary bucket.
INSERT 16
INSERT 16
INSERT 16
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
R216
R3
R123
0 20
Use R3 for inserting 16 because it maps 16 to least full secondary bucket candidate.
3
4
5
2
1
0
2
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016108
16 now also needs to be remapped to a
secondary bucket.
INSERT 16
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16
R3
23
0 20
Use R3 for inserting 16 because it maps 16 to least full secondary bucket candidate.
3
4
5
2
1
0
2
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016109
16 now also needs to be remapped to a
secondary bucket.
INSERT 16
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16
R3
23
0 20
Use R3 for inserting 16 because it maps 16 to least full secondary bucket candidate.
3
4
5
2
1
0
2
16
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016110
16 now also needs to be remapped to a
secondary bucket.
INSERT 16
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16
R3
23
0 20
Use R3 for inserting 16 because it maps 16 to least full secondary bucket candidate.
3
4
5
2
1
0
2
Compute index into remap entry array using Htag with key as input
16
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016111
16 now also needs to be remapped to a
secondary bucket.
INSERT 16
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16
R3
23
Htag(16) = 1 0 20
Use R3 for inserting 16 because it maps 16 to least full secondary bucket candidate.
3
4
5
2
1
0
2
Compute index into remap entry array using Htag with key as input
16
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016112
16 now also needs to be remapped to a
secondary bucket.
INSERT 16
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16
R3
23
Htag(16) = 1 0 20
Use R3 for inserting 16 because it maps 16 to least full secondary bucket candidate.
3
4
5
2
1
0
2
Compute index into remap entry array using Htag with key as input
16
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016113
16 now also needs to be remapped to a
secondary bucket.
INSERT 16
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16
R3
23
Htag(16) = 1 0 20
Use R3 for inserting 16 because it maps 16 to least full secondary bucket candidate.
3
4
5
2
1
0
2
Compute index into remap entry array using Htag with key as inputStore 3 at index Htag(16)=1 to indicate that R3 was used to remap 16
16
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016114
16 now also needs to be remapped to a
secondary bucket.
INSERT 16
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16
R3
23
Htag(16) = 1 0 20
Use R3 for inserting 16 because it maps 16 to least full secondary bucket candidate.
3
4
5
2
1
0
2
Compute index into remap entry array using Htag with key as inputStore 3 at index Htag(16)=1 to indicate that R3 was used to remap 16
16
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016115
16 now also needs to be remapped to a
secondary bucket.
INSERT 16
HORTON TABLES
For buckets that overflow, we remap surplus elements using one of many secondary hash functions and register its numerical identifier (e.g., R1, R2, and R3) as an element in a remap entry array (REA), a sparse, in-bucket array that tracks remapped elements.
INSERTS THAT TRIGGER CREATION OF REMAP ENTRY ARRAY
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
16
R3
23
Htag(16) = 1 0 20
Use R3 for inserting 16 because it maps 16 to least full secondary bucket candidate.
3
4
5
2
1
0
2
Compute index into remap entry array using Htag with key as inputStore 3 at index Htag(16)=1 to indicate that R3 was used to remap 16
16
3
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016116
HORTON TABLES
Remapped items can always be retrieved by accessing 2 buckets, even when many secondary hash functions are used
E.g., when retrieving 16, we only access buckets 2 (primary bucket) and 3 (secondary bucket). We skip buckets 4 and 5 even though they were previously candidates.
RETRIEVING REMAPPED ITEMS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016117
HORTON TABLES
Remapped items can always be retrieved by accessing 2 buckets, even when many secondary hash functions are used
E.g., when retrieving 16, we only access buckets 2 (primary bucket) and 3 (secondary bucket). We skip buckets 4 and 5 even though they were previously candidates.
RETRIEVING REMAPPED ITEMS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Compute primary hash function and examine primary bucket (bucket 2)
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016118
HORTON TABLES
Remapped items can always be retrieved by accessing 2 buckets, even when many secondary hash functions are used
E.g., when retrieving 16, we only access buckets 2 (primary bucket) and 3 (secondary bucket). We skip buckets 4 and 5 even though they were previously candidates.
RETRIEVING REMAPPED ITEMS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
LOOKUP 16Hprimary
Compute primary hash function and examine primary bucket (bucket 2)
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016119
HORTON TABLES
Remapped items can always be retrieved by accessing 2 buckets, even when many secondary hash functions are used
E.g., when retrieving 16, we only access buckets 2 (primary bucket) and 3 (secondary bucket). We skip buckets 4 and 5 even though they were previously candidates.
RETRIEVING REMAPPED ITEMS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
LOOKUP 16Hprimary
Compute primary hash function and examine primary bucket (bucket 2)Determine 16 is not stored in its primary bucket and proceed to examine REA
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016120
HORTON TABLES
Remapped items can always be retrieved by accessing 2 buckets, even when many secondary hash functions are used
E.g., when retrieving 16, we only access buckets 2 (primary bucket) and 3 (secondary bucket). We skip buckets 4 and 5 even though they were previously candidates.
RETRIEVING REMAPPED ITEMS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
0 20
3
4
5
2
1
0
2
16
3
Determine 16 is not stored in its primary bucket and proceed to examine REA
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016121
HORTON TABLES
Remapped items can always be retrieved by accessing 2 buckets, even when many secondary hash functions are used
E.g., when retrieving 16, we only access buckets 2 (primary bucket) and 3 (secondary bucket). We skip buckets 4 and 5 even though they were previously candidates.
RETRIEVING REMAPPED ITEMS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
0 20
3
4
5
2
1
0
2
16
3
Determine 16 is not stored in its primary bucket and proceed to examine REA
Compute index into remap entry array using Htag with key as input
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016122
HORTON TABLES
Remapped items can always be retrieved by accessing 2 buckets, even when many secondary hash functions are used
E.g., when retrieving 16, we only access buckets 2 (primary bucket) and 3 (secondary bucket). We skip buckets 4 and 5 even though they were previously candidates.
RETRIEVING REMAPPED ITEMS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
Htag(16) = 1 0 20
3
4
5
2
1
0
2
16
3
Determine 16 is not stored in its primary bucket and proceed to examine REA
Compute index into remap entry array using Htag with key as input
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016123
HORTON TABLES
Remapped items can always be retrieved by accessing 2 buckets, even when many secondary hash functions are used
E.g., when retrieving 16, we only access buckets 2 (primary bucket) and 3 (secondary bucket). We skip buckets 4 and 5 even though they were previously candidates.
RETRIEVING REMAPPED ITEMS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
Htag(16) = 1 0 20
3
4
5
2
1
0
2
16
3
Determine 16 is not stored in its primary bucket and proceed to examine REA
Compute index into remap entry array using Htag with key as input
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016124
HORTON TABLES
Remapped items can always be retrieved by accessing 2 buckets, even when many secondary hash functions are used
E.g., when retrieving 16, we only access buckets 2 (primary bucket) and 3 (secondary bucket). We skip buckets 4 and 5 even though they were previously candidates.
RETRIEVING REMAPPED ITEMS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
Htag(16) = 1 0 20
3
4
5
2
1
0
2
16
3
Determine 16 is not stored in its primary bucket and proceed to examine REA
Compute index into remap entry array using Htag with key as inputThe remap entry shows R3 was used to remap 16, so compute R3(16).
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016125
LOOKUP 16
HORTON TABLES
Remapped items can always be retrieved by accessing 2 buckets, even when many secondary hash functions are used
E.g., when retrieving 16, we only access buckets 2 (primary bucket) and 3 (secondary bucket). We skip buckets 4 and 5 even though they were previously candidates.
RETRIEVING REMAPPED ITEMS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
R3
23
Htag(16) = 1 0 20
3
4
5
2
1
0
2
16
3
Determine 16 is not stored in its primary bucket and proceed to examine REA
Compute index into remap entry array using Htag with key as inputThe remap entry shows R3 was used to remap 16, so compute R3(16).
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016126
LOOKUP 16
HORTON TABLES
Remapped items can always be retrieved by accessing 2 buckets, even when many secondary hash functions are used
E.g., when retrieving 16, we only access buckets 2 (primary bucket) and 3 (secondary bucket). We skip buckets 4 and 5 even though they were previously candidates.
RETRIEVING REMAPPED ITEMS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
R3
23
Htag(16) = 1 0 20
3
4
5
2
1
0
2
16
3
Determine 16 is not stored in its primary bucket and proceed to examine REA
Compute index into remap entry array using Htag with key as inputThe remap entry shows R3 was used to remap 16, so compute R3(16).
Retrieve 16 from bucket 3
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016127
LOOKUP 16
HORTON TABLES
Remapped items can always be retrieved by accessing 2 buckets, even when many secondary hash functions are used
E.g., when retrieving 16, we only access buckets 2 (primary bucket) and 3 (secondary bucket). We skip buckets 4 and 5 even though they were previously candidates.
RETRIEVING REMAPPED ITEMS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
R3
23
Htag(16) = 1 0 20
3
4
5
2
1
0
2
16
3
Determine 16 is not stored in its primary bucket and proceed to examine REA
Compute index into remap entry array using Htag with key as inputThe remap entry shows R3 was used to remap 16, so compute R3(16).
Retrieve 16 from bucket 3
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016128
HORTON TABLESNEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016129
HORTON TABLESNEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Most negative lookups only require accessing a single bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016130
HORTON TABLESNEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16 LOOKUP 25
Most negative lookups only require accessing a single bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016131
HORTON TABLESNEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16 LOOKUP 25Hprimary
Most negative lookups only require accessing a single bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016132
HORTON TABLESNEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16 LOOKUP 25Hprimary
Most negative lookups only require accessing a single bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016133
HORTON TABLESNEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16 LOOKUP 25Hprimary
Most negative lookups only require accessing a single bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016134
HORTON TABLESNEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16 LOOKUP 25Hprimary
Most negative lookups only require accessing a single bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016135
HORTON TABLESNEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16 LOOKUP 25Hprimary
Most negative lookups only require accessing a single bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016136
HORTON TABLES
Lookups where the primary bucket is a conventional BCHT bucket without remap entries only ever require examining 1 bucket and thus 1 cache line for positive and negative queries alike
NEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16 LOOKUP 25Hprimary
Most negative lookups only require accessing a single bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016137
HORTON TABLES
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
NEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Most negative lookups only require accessing a single bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016138
HORTON TABLES
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
NEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
LOOKUP 28
Most negative lookups only require accessing a single bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016139
HORTON TABLES
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
NEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
LOOKUP 28Hprimary
Most negative lookups only require accessing a single bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016140
HORTON TABLES
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
NEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
LOOKUP 28Hprimary
Most negative lookups only require accessing a single bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016141
HORTON TABLES
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
NEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
LOOKUP 28Hprimary
Most negative lookups only require accessing a single bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016142
HORTON TABLES
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
NEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
LOOKUP 28Hprimary
Most negative lookups only require accessing a single bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016143
HORTON TABLES
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
NEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
LOOKUP 28Hprimary
Most negative lookups only require accessing a single bucket
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016144
Most negative lookups only require accessing a single bucket
HORTON TABLESNEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
0 20
3
4
5
2
1
0
2
16
3
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016145
Most negative lookups only require accessing a single bucket
HORTON TABLESNEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
0 20
3
4
5
2
1
0
2
16
3
Determine 28 is not stored in its primary bucket (2) and proceed to examine REA
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016146
Most negative lookups only require accessing a single bucket
HORTON TABLESNEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
0 20
3
4
5
2
1
0
2
16
3
Determine 28 is not stored in its primary bucket (2) and proceed to examine REACompute index into remap entry array using Htag with key as input
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016147
Most negative lookups only require accessing a single bucket
HORTON TABLESNEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
Htag(28) = 10 0 20
3
4
5
2
1
0
2
16
3
Determine 28 is not stored in its primary bucket (2) and proceed to examine REACompute index into remap entry array using Htag with key as input
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016148
Most negative lookups only require accessing a single bucket
HORTON TABLESNEGATIVE LOOKUPS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
Htag(28) = 10 0 20
3
4
5
2
1
0
2
16
3
Determine 28 is not stored in its primary bucket (2) and proceed to examine REACompute index into remap entry array using Htag with key as inputExamine 10th slot of remap entry array and see it is empty. The search can stop.
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016149
Negative lookups only require accessing 2 buckets on a tag alias
HORTON TABLESNEGATIVE LOOKUPS WITH TAG ALIAS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016150
Negative lookups only require accessing 2 buckets on a tag alias
HORTON TABLESNEGATIVE LOOKUPS WITH TAG ALIAS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
LOOKUP 7
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016151
Negative lookups only require accessing 2 buckets on a tag alias
HORTON TABLESNEGATIVE LOOKUPS WITH TAG ALIAS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
LOOKUP 7Hprimary
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016152
Negative lookups only require accessing 2 buckets on a tag alias
HORTON TABLESNEGATIVE LOOKUPS WITH TAG ALIAS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
LOOKUP 7Hprimary
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016153
Negative lookups only require accessing 2 buckets on a tag alias
HORTON TABLESNEGATIVE LOOKUPS WITH TAG ALIAS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
LOOKUP 7Hprimary
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016154
Negative lookups only require accessing 2 buckets on a tag alias
HORTON TABLESNEGATIVE LOOKUPS WITH TAG ALIAS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
LOOKUP 7Hprimary
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016155
Negative lookups only require accessing 2 buckets on a tag alias
HORTON TABLESNEGATIVE LOOKUPS WITH TAG ALIAS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
LOOKUP 7Hprimary
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016156
Negative lookups only require accessing 2 buckets on a tag alias
HORTON TABLESNEGATIVE LOOKUPS WITH TAG ALIAS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Determine 7 is not stored in its primary bucket (2) and proceed to examine REA
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
LOOKUP 7Hprimary
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016157
Negative lookup with a tag alias, e.g. 7 reads remap entry set by 23
HORTON TABLESNEGATIVE LOOKUPS WITH TAG ALIAS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
0 20
3
4
5
2
1
0
2
16
3
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016158
Negative lookup with a tag alias, e.g. 7 reads remap entry set by 23
HORTON TABLESNEGATIVE LOOKUPS WITH TAG ALIAS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
0 20
3
4
5
2
1
0
2
16
3
Compute index into remap entry array using Htag with key as input
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016159
Negative lookup with a tag alias, e.g. 7 reads remap entry set by 23
HORTON TABLESNEGATIVE LOOKUPS WITH TAG ALIAS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
Htag(7) = 17 0 20
3
4
5
2
1
0
2
16
3
Compute index into remap entry array using Htag with key as input
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016160
Negative lookup with a tag alias, e.g. 7 reads remap entry set by 23
HORTON TABLESNEGATIVE LOOKUPS WITH TAG ALIAS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
Htag(7) = 17 0 20
3
4
5
2
1
0
2
16
3
Compute index into remap entry array using Htag with key as input
Examine 18th slot of remap entry array and see that R2 was likely used to remap 7.
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016161
Negative lookup with a tag alias, e.g. 7 reads remap entry set by 23
HORTON TABLESNEGATIVE LOOKUPS WITH TAG ALIAS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
Htag(7) = 17 0 20
3
4
5
2
1
0
2
16
3
Compute index into remap entry array using Htag with key as input
Examine 18th slot of remap entry array and see that R2 was likely used to remap 7.
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
LOOKUP 7
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016162
Negative lookup with a tag alias, e.g. 7 reads remap entry set by 23
HORTON TABLESNEGATIVE LOOKUPS WITH TAG ALIAS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
Htag(7) = 17 0 20
3
4
5
2
1
0
2
16
3
Compute index into remap entry array using Htag with key as input
Examine 18th slot of remap entry array and see that R2 was likely used to remap 7.
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
LOOKUP 7R2
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016163
Negative lookup with a tag alias, e.g. 7 reads remap entry set by 23
HORTON TABLESNEGATIVE LOOKUPS WITH TAG ALIAS
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
Htag(7) = 17 0 20
3
4
5
2
1
0
2
16
3
Compute index into remap entry array using Htag with key as input
Examine 18th slot of remap entry array and see that R2 was likely used to remap 7.
Lookups where the primary bucket’s final slot is converted into an REA often only require accessing 1 bucket and at most 2 for positive and negative queries alike
LOOKUP 7R2
Determine that no slots of secondary bucket (0) match 7, so stop looking.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016164
ADDITIONAL CONTENT IN THE PAPER
Sharing of remap entries among multiple remapped elements while still permitting their deletion
Further optimizations for improving lookup throughput
Analytical models for lookups, insertions and deletions
More in-depth discussion of prior work and how Horton tables improves over first-fit for positive lookups
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016165
EXPERIMENTAL METHODOLOGY
Conducted a series of analytical studies to determine 8-slots per bucket was a good design point (more details in paper)
‒ Fills a 64-byte cache line with 8-byte entries
‒ High load factors (>95% table can be filled with key-value pairs)
‒ Positive lookups that typically access less than 1.18 buckets per query
‒ Negative lookups that typically access less than 1.06 buckets per query
Further analytical studies demonstrated that 21 entries per REA and 7 secondary functions is often more than sufficient for 8-slot buckets (more details in paper)
Experimental studies conducted on an AMD RadeonTM R9 290X GPU
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016166
RESULTSPOSITIVELOOKUPS
Bytes Transferred from DRAM per Query
Positive Lookup Throughput
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016167
RESULTSPOSITIVELOOKUPS
Bytes Transferred from DRAM per Query
Positive Lookup Throughput
HIGHER IS BETTER
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016168
RESULTSPOSITIVELOOKUPS
Bytes Transferred from DRAM per Query
Positive Lookup Throughput
HIGHER IS BETTER
Load balancing insertion heuristic
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016169
RESULTSPOSITIVELOOKUPS
Bytes Transferred from DRAM per Query
Positive Lookup Throughput
HIGHER IS BETTER
LOWER
IS BETTER
Load balancing insertion heuristic
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016170
RESULTSPOSITIVELOOKUPS
Bytes Transferred from DRAM per Query
Positive Lookup Throughput
HIGHER IS BETTER
LOWER
IS BETTER
Load balancing insertion heuristic
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016171
RESULTSPOSITIVELOOKUPS
Bytes Transferred from DRAM per Query
Positive Lookup Throughput
HIGHER IS BETTER
LOWER
IS BETTER
Load balancing insertion heuristic
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016172
RESULTSPOSITIVELOOKUPS
Bytes Transferred from DRAM per Query
Positive Lookup Throughput
HIGHER IS BETTER
LOWER
IS BETTER
Load balancing insertion heuristic
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016173
RESULTSPOSITIVELOOKUPS
Bytes Transferred from DRAM per Query
Positive Lookup Throughput
HIGHER IS BETTER
LOWER
IS BETTER
Load balancing insertion heuristic
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016174
RESULTSPOSITIVELOOKUPS
Bytes Transferred from DRAM per Query
Positive Lookup Throughput
HIGHER IS BETTER
LOWER
IS BETTER
Load balancing insertion heuristic
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016175
RESULTSPOSITIVELOOKUPS
Bytes Transferred from DRAM per Query
Positive Lookup Throughput
HIGHER IS BETTER
LOWER
IS BETTER
Load balancing insertion heuristic
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016176
RESULTSNEGATIVELOOKUPS
Bytes Transferred from DRAM per Query
Negative Lookup Throughput
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016177
RESULTSNEGATIVELOOKUPS
Bytes Transferred from DRAM per Query
Negative Lookup Throughput
HIGHER IS BETTER
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016178
RESULTSNEGATIVELOOKUPS
Bytes Transferred from DRAM per Query
Negative Lookup Throughput
HIGHER IS BETTER
LOWER
IS BETTER
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016179
RESULTSNEGATIVELOOKUPS
Bytes Transferred from DRAM per Query
Negative Lookup Throughput
HIGHER IS BETTER
LOWER
IS BETTER
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016180
RESULTSNEGATIVELOOKUPS
Bytes Transferred from DRAM per Query
Negative Lookup Throughput
HIGHER IS BETTER
LOWER
IS BETTER
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016181
RESULTSNEGATIVELOOKUPS
Bytes Transferred from DRAM per Query
Negative Lookup Throughput
HIGHER IS BETTER
LOWER
IS BETTER
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016182
RESULTSNEGATIVELOOKUPS
Bytes Transferred from DRAM per Query
Negative Lookup Throughput
HIGHER IS BETTER
LOWER
IS BETTER
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016183
RESULTSNEGATIVELOOKUPS
Bytes Transferred from DRAM per Query
Negative Lookup Throughput
HIGHER IS BETTER
LOWER
IS BETTER
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016184
RESULTSNEGATIVELOOKUPS
Bytes Transferred from DRAM per Query
Negative Lookup Throughput
HIGHER IS BETTER
LOWER
IS BETTER
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016185
CONCLUSIONS FROM HORTON TABLES
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016186
CONCLUSIONS FROM HORTON TABLES
Achieves lookup throughput that meets or exceeds prior approaches
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016187
CONCLUSIONS FROM HORTON TABLES
Achieves lookup throughput that meets or exceeds prior approaches
The throughput improvement is achieved by reducing the number of cache lines that need to be accessed per lookup query to at most 1.18 for positive lookups and 1.06 for negative lookups.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016188
CONCLUSIONS FROM HORTON TABLES
Achieves lookup throughput that meets or exceeds prior approaches
The throughput improvement is achieved by reducing the number of cache lines that need to be accessed per lookup query to at most 1.18 for positive lookups and 1.06 for negative lookups.
Reducing cache accesses yields corresponding throughput improvements of 5% to 35% and 73% to 89%, for pos. and neg. lookups, respectively, on a very full table.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016189
CONCLUSIONS FROM HORTON TABLES
Achieves lookup throughput that meets or exceeds prior approaches
The throughput improvement is achieved by reducing the number of cache lines that need to be accessed per lookup query to at most 1.18 for positive lookups and 1.06 for negative lookups.
Reducing cache accesses yields corresponding throughput improvements of 5% to 35% and 73% to 89%, for pos. and neg. lookups, respectively, on a very full table.
Optimizing hash table algorithms is important because of their wide use throughout all segments of computing (e.g., scientific computing and databases, data compression, computer graphics and data visualization).
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016190
FUTURE WORK
Evaluation of insertions and deletions and their optimization
‒ Write- and update-heavy workloads should also benefit from Horton tables approach.
Application of Horton tables to data warehousing and analysis applications
‒ Database operators’ implementations (e.g., hash joins and grouping hash tables)
‒ Key-value stores
Additional indices for speeding up lookups, insertions, and deletions
Evaluation of Horton tables on new and emerging memory subsystems as well as tailoring the technique for persistent storage technologies such as SSDs
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016191
QUESTIONS?
Thanks for your attention.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016192
DISCLAIMER & ATTRIBUTION
The information presented in this document is for informational purposes only and may contain technical inaccuracies, omissions and typographical errors.
The information contained herein is subject to change and may be rendered inaccurate for many reasons, including but not limited to product and roadmap changes, component and motherboard version changes, new model and/or product releases, product differences between differing manufacturers, software changes, BIOS flashes, firmware upgrades, or the like. AMD assumes no obligation to update or otherwise correct or revise this information. However, AMD reserves the right to revise this information and to make changes from time to time to the content hereof without obligation of AMD to notify any person of such revisions or changes.
AMD MAKES NO REPRESENTATIONS OR WARRANTIES WITH RESPECT TO THE CONTENTS HEREOF AND ASSUMES NO RESPONSIBILITY FOR ANY INACCURACIES, ERRORS OR OMISSIONS THAT MAY APPEAR IN THIS INFORMATION.
AMD SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE. IN NO EVENT WILL AMD BE LIABLE TO ANY PERSON FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES ARISING FROM THE USE OF ANY INFORMATION CONTAINED HEREIN, EVEN IF AMD IS EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
ATTRIBUTION
© 2016 Advanced Micro Devices, Inc. All rights reserved. AMD, the AMD Arrow logo, AMD Radeon, and combinations thereof are trademarks of Advanced Micro Devices, Inc. in the United States and/or other jurisdictions. Other names are for informational purposes only and may be trademarks of their respective owners.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016193
BACKUPSLIDES
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016194
HORTON TABLES
We permit a single remap entry to reference multiple remapped elements.
Deleting remap entries is possible by having elements that share remap entries map to the same secondary bucket (see our paper for details).
SHARING OF REMAP ENTRIES
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016195
HORTON TABLES
We permit a single remap entry to reference multiple remapped elements.
Deleting remap entries is possible by having elements that share remap entries map to the same secondary bucket (see our paper for details).
SHARING OF REMAP ENTRIES
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
INSERT 27
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016196
HORTON TABLES
We permit a single remap entry to reference multiple remapped elements.
Deleting remap entries is possible by having elements that share remap entries map to the same secondary bucket (see our paper for details).
SHARING OF REMAP ENTRIES
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
INSERT 27Hprimary
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016197
HORTON TABLES
We permit a single remap entry to reference multiple remapped elements.
Deleting remap entries is possible by having elements that share remap entries map to the same secondary bucket (see our paper for details).
SHARING OF REMAP ENTRIES
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
INSERT 27Hprimary
We conclude that bucket 2 has no free slots, so we need to remap it.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016198
HORTON TABLES
We permit a single remap entry to reference multiple remapped elements.
Deleting remap entries is possible by having elements that share remap entries map to the same secondary bucket (see our paper for details).
SHARING OF REMAP ENTRIES
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
0 20
23
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016199
HORTON TABLES
We permit a single remap entry to reference multiple remapped elements.
Deleting remap entries is possible by having elements that share remap entries map to the same secondary bucket (see our paper for details).
SHARING OF REMAP ENTRIES
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
0 20
23
Compute the Htag on the key
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016200
HORTON TABLES
We permit a single remap entry to reference multiple remapped elements.
Deleting remap entries is possible by having elements that share remap entries map to the same secondary bucket (see our paper for details).
SHARING OF REMAP ENTRIES
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Htag(27) = 1 0 20
23
Compute the Htag on the key
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016201
HORTON TABLES
We permit a single remap entry to reference multiple remapped elements.
Deleting remap entries is possible by having elements that share remap entries map to the same secondary bucket (see our paper for details).
SHARING OF REMAP ENTRIES
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Htag(27) = 1 0 20
23
Compute the Htag on the key
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016202
HORTON TABLES
We permit a single remap entry to reference multiple remapped elements.
Deleting remap entries is possible by having elements that share remap entries map to the same secondary bucket (see our paper for details).
SHARING OF REMAP ENTRIES
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Htag(27) = 1 0 20
23
Compute the Htag on the keyWe see that the remap entry is set,
so we try to use R3 to insert 27.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016203
HORTON TABLES
We permit a single remap entry to reference multiple remapped elements.
Deleting remap entries is possible by having elements that share remap entries map to the same secondary bucket (see our paper for details).
SHARING OF REMAP ENTRIES
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Htag(27) = 1 0 20
23
Compute the Htag on the keyWe see that the remap entry is set,
so we try to use R3 to insert 27.
INSERT 27
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016204
HORTON TABLES
We permit a single remap entry to reference multiple remapped elements.
Deleting remap entries is possible by having elements that share remap entries map to the same secondary bucket (see our paper for details).
SHARING OF REMAP ENTRIES
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Htag(27) = 1 0 20
23
Compute the Htag on the keyWe see that the remap entry is set,
so we try to use R3 to insert 27.
INSERT 27R3
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016205
HORTON TABLES
We permit a single remap entry to reference multiple remapped elements.
Deleting remap entries is possible by having elements that share remap entries map to the same secondary bucket (see our paper for details).
SHARING OF REMAP ENTRIES
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Htag(27) = 1 0 20
23
Compute the Htag on the keyWe see that the remap entry is set,
so we try to use R3 to insert 27.
INSERT 27R327
The insertion succeeds because the secondary bucket (3) has a free slot.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016206
HORTON TABLES
We permit a single remap entry to reference multiple remapped elements.
Deleting remap entries is possible by having elements that share remap entries map to the same secondary bucket (see our paper for details).
SHARING OF REMAP ENTRIES
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Htag(27) = 1 0 20
23
Compute the Htag on the keyWe see that the remap entry is set,
so we try to use R3 to insert 27.
INSERT 27R327
The insertion succeeds because the secondary bucket (3) has a free slot.
If bucket 3 had been full, we could have swapped 27 with another item from 27’s primary bucket (e.g., 35 in bucket 2) and remapped that item instead.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016207
HORTON TABLES
We permit a single remap entry to reference multiple remapped elements.
Deleting remap entries is possible by having elements that share remap entries map to the same secondary bucket (see our paper for details).
SHARING OF REMAP ENTRIES
8 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
Htag(27) = 1 0 20
23
Compute the Htag on the keyWe see that the remap entry is set,
so we try to use R3 to insert 27.
INSERT 27R327
The insertion succeeds because the secondary bucket (3) has a free slot.
If bucket 3 had been full, we could have swapped 27 with another item from 27’s primary bucket (e.g., 35 in bucket 2) and remapped that item instead.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016208
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
1627
8
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016209
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
DELETE 8
27
8
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016210
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
DELETE 8Hprimary
27
8
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016211
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
DELETE 8Hprimary
27
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016212
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
1627
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016213
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
1627
DELETE 27
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016214
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
1627
DELETE 27Hprimary
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016215
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
1627
DELETE 27Hprimary
27 is not found in its primary bucket; we need to access the remap entry array.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016216
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
1627
0 20
23
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016217
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
1627
27 is not found in its primary bucket; we need to access the remap entry array.
0 20
23
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016218
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
1627
27 is not found in its primary bucket; we need to access the remap entry array.
Htag(27) = 1 0 20
23
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016219
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
1627
27 is not found in its primary bucket; we need to access the remap entry array.
Htag(27) = 1 0 20
23
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016220
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
1627
27 is not found in its primary bucket; we need to access the remap entry array.
Htag(27) = 1 0 20
23
DELETE 27
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016221
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
1627
27 is not found in its primary bucket; we need to access the remap entry array.
Htag(27) = 1 0 20
23
DELETE 27R3
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016222
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
1627
27 is not found in its primary bucket; we need to access the remap entry array.
Htag(27) = 1 0 20
23
DELETE 27R3
Search R3(27) = 3 and delete it upon discovery.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016223
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
27 is not found in its primary bucket; we need to access the remap entry array.
Htag(27) = 1 0 20
23
DELETE 27R3
Search R3(27) = 3 and delete it upon discovery.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016224
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
27 is not found in its primary bucket; we need to access the remap entry array.
Htag(27) = 1 0 20
23
DELETE 27R3
Search R3(27) = 3 and delete it upon discovery.Compute Hprimary on 16 and 37 and find that the remap entry is still active.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016225
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
16
27 is not found in its primary bucket; we need to access the remap entry array.
Htag(27) = 1 0 20
23
DELETE 27R3
Search R3(27) = 3 and delete it upon discovery.Compute Hprimary on 16 and 37 and find that the remap entry is still active.A subsequent deletion of 16 would cause the remap entry to be deleted.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016226
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
27 is not found in its primary bucket; we need to access the remap entry array.
Htag(27) = 1 0 20
23
DELETE 27R3
Search R3(27) = 3 and delete it upon discovery.Compute Hprimary on 16 and 37 and find that the remap entry is still active.A subsequent deletion of 16 would cause the remap entry to be deleted.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016227
HORTON TABLES
Deleting elements that are found in their primary bucket only requires accessing a single bucket
A remapped element can be deleted by performing a secondary lookup followed by a deletion
DELETING ELEMENTS
EMPTY 5 EMPTY EMPTY
33 EMPTY 15 2
35 18 22 REAEMPTY EMPTY EMPTY 37
17 6 21 EMPTY
9 24 EMPTY EMPTY
13
23
3
4
5
2
1
0
27 is not found in its primary bucket; we need to access the remap entry array.
Htag(27) = 1 0 20
2
DELETE 27R3
Search R3(27) = 3 and delete it upon discovery.Compute Hprimary on 16 and 37 and find that the remap entry is still active.A subsequent deletion of 16 would cause the remap entry to be deleted.
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016228
HORTON TABLESINSERTION WHERE ALL CANDIDATE SECONDARY BUCKETS ARE FULL
8 5 EMPTY 31
33 EMPTY 15 2
35 18 22 REA
EMPTY EMPTY EMPTY 37
17 6 21 42
9 24 EMPTY 19
13
23
0 20
3
4
5
2
1
0
2
16
3
Swap item with another from its primary bucket that can be remapped to a secondary bucket that is not full
If this fails, then use cuckoo hashing
‒ Preferably enforcing as we do that secondary items cannot displace primary items
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016229
HORTON TABLESINSERTION WHERE ALL CANDIDATE SECONDARY BUCKETS ARE FULL
8 5 EMPTY 31
33 EMPTY 15 2
35 18 22 REA
EMPTY EMPTY EMPTY 37
17 6 21 42
9 24 EMPTY 19
13
23
Htag(37) = 14 0 20
3
4
5
2
1
0
2
16
3
Swap item with another from its primary bucket that can be remapped to a secondary bucket that is not full
If this fails, then use cuckoo hashing
‒ Preferably enforcing as we do that secondary items cannot displace primary items
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016230
HORTON TABLESINSERTION WHERE ALL CANDIDATE SECONDARY BUCKETS ARE FULL
8 5 EMPTY 31
33 EMPTY 15 2
35 18 22 REA
EMPTY EMPTY EMPTY 37
17 6 21 42
9 24 EMPTY 19
13
23
Htag(37) = 14 0 20
3
4
5
2
1
0
2
16
3
Swap item with another from its primary bucket that can be remapped to a secondary bucket that is not full
If this fails, then use cuckoo hashing
‒ Preferably enforcing as we do that secondary items cannot displace primary items
INSERT 37
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016231
HORTON TABLESINSERTION WHERE ALL CANDIDATE SECONDARY BUCKETS ARE FULL
8 5 EMPTY 31
33 EMPTY 15 2
35 18 22 REA
EMPTY EMPTY EMPTY 37
17 6 21 42
9 24 EMPTY 19
13
23
Htag(37) = 14 0 20
3
4
5
2
1
0
2
16
3
Swap item with another from its primary bucket that can be remapped to a secondary bucket that is not full
If this fails, then use cuckoo hashing
‒ Preferably enforcing as we do that secondary items cannot displace primary items
INSERT 37R3
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016232
HORTON TABLESINSERTION WHERE ALL CANDIDATE SECONDARY BUCKETS ARE FULL
8 5 EMPTY 31
33 EMPTY 15 2
35 18 22 REA
EMPTY EMPTY EMPTY 37
17 6 21 42
9 24 EMPTY 19
13
23
Htag(37) = 14 0 20
3
4
5
2
1
0
2
16
3
Swap item with another from its primary bucket that can be remapped to a secondary bucket that is not full
If this fails, then use cuckoo hashing
‒ Preferably enforcing as we do that secondary items cannot displace primary items
INSERT 37R3
INSERT 37
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016233
HORTON TABLESINSERTION WHERE ALL CANDIDATE SECONDARY BUCKETS ARE FULL
8 5 EMPTY 31
33 EMPTY 15 2
35 18 22 REA
EMPTY EMPTY EMPTY 37
17 6 21 42
9 24 EMPTY 19
13
23
Htag(37) = 14 0 20
3
4
5
2
1
0
2
16
3
Swap item with another from its primary bucket that can be remapped to a secondary bucket that is not full
If this fails, then use cuckoo hashing
‒ Preferably enforcing as we do that secondary items cannot displace primary items
INSERT 37R3
INSERT 37R1
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016234
HORTON TABLESINSERTION WHERE ALL CANDIDATE SECONDARY BUCKETS ARE FULL
8 5 EMPTY 31
33 EMPTY 15 2
35 18 22 REA
EMPTY EMPTY EMPTY 37
17 6 21 42
9 24 EMPTY 19
13
23
Htag(37) = 14 0 20
3
4
5
2
1
0
2
16
3
Swap item with another from its primary bucket that can be remapped to a secondary bucket that is not full
If this fails, then use cuckoo hashing
‒ Preferably enforcing as we do that secondary items cannot displace primary items
INSERT 37R3
INSERT 37R1
INSERT 37
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016235
HORTON TABLESINSERTION WHERE ALL CANDIDATE SECONDARY BUCKETS ARE FULL
8 5 EMPTY 31
33 EMPTY 15 2
35 18 22 REA
EMPTY EMPTY EMPTY 37
17 6 21 42
9 24 EMPTY 19
13
23
Htag(37) = 14 0 20
3
4
5
2
1
0
2
16
3
Swap item with another from its primary bucket that can be remapped to a secondary bucket that is not full
If this fails, then use cuckoo hashing
‒ Preferably enforcing as we do that secondary items cannot displace primary items
INSERT 37R3
INSERT 37R1
INSERT 37R2
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016236
HORTON TABLESINSERTION WHERE ALL CANDIDATE SECONDARY BUCKETS ARE FULL
8 5 EMPTY 31
33 EMPTY 15 2
35 18 22 REA
EMPTY EMPTY EMPTY 37
17 6 21 42
9 24 EMPTY 19
13
23
Htag(37) = 14 0 20
3
4
5
2
1
0
2
16
3
Swap item with another from its primary bucket that can be remapped to a secondary bucket that is not full
If this fails, then use cuckoo hashing
‒ Preferably enforcing as we do that secondary items cannot displace primary items
INSERT 37R3
INSERT 37R1
INSERT 37R2
REHASH 35
37
| HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA-INTENSIVE COMPUTING | JUNE 23, 2016237
END OF BACKUPSLIDES