HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA ... · 4 | HORTON TABLES: FAST HASH TABLES FOR...

Post on 03-Jun-2020

23 views 0 download

Transcript of HORTON TABLES: FAST HASH TABLES FOR IN-MEMORY DATA ... · 4 | HORTON TABLES: FAST HASH TABLES FOR...

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