Presentation is loading. Please wait.

Presentation is loading. Please wait.

Hopscotch Hashing Nir Shavit Tel Aviv U. & Sun Labs Joint work with Maurice Herlihy and Moran Tzafrir.

Similar presentations


Presentation on theme: "Hopscotch Hashing Nir Shavit Tel Aviv U. & Sun Labs Joint work with Maurice Herlihy and Moran Tzafrir."— Presentation transcript:

1 Hopscotch Hashing Nir Shavit Tel Aviv U. & Sun Labs Joint work with Maurice Herlihy and Moran Tzafrir

2  A new family of highly effective hash-map algorithms for Multicore Machines  Great performance also on Uniprocessors Our Results

3 Hash Tables  Add(), Remove(), and Contains() with expected O(1) complexity  Extensible/Resizable  Typical hash table usage pattern: high fraction of Contains(), small fraction of Add() and Remove().  Assume universal hash function h(k) for key k.

4 Concurrent Hash Tables  Linearizable implementation of a Set.  In theory, two adversaries, the scheduler and the distributer of keys. Lets look at the state-of-the-art Ignore resizing for now…

5 Chained Hashing [Luhn] Add(x)  if !Contains(x) then Malloc( ) and link in bucket h(x)

6 Chained Hashing  N buckets, M items, Uniform h  O(1) items expected in bucket (expected ~2.1 items) [Knuth]  Add(), Remove(), Contains() in Expected O(1)

7 Chained Hashing  Advantages:  retains good performance as table density (M/N) increases  less resizing  Disadvantages:  dynamic memory allocation  extra full size word for pointer  bad cache behavior (no locality)

8 Subliminal Cut

9 Linear Probing [Amdahl] Contains(x) – search linearly from h(x) until last location H noted in bucket. x x h(x) =7 z z

10 Linear Probing Add(x) - add in first empty bucket and update its H. z z h(x) =3 z z z z z z z z z z z z z z z z z z z z z z z z x x =6

11 Linear Probing  Open address means M <= N  Expected items in bucket same as Chaining  Expected distance till open slot [Knuth]: ½(1+(1/(1-M/N)) 2 M/N = 0.5  search 2.5 buckets M/N = 0.9  search 50 buckets 

12 Linear Probing  Advantages:  Good locality  less cache misses  Disadvantages:  As M/N increases more cache misses  searching 10’s of unrelated buckets  “Clustering” of keys into neighboring buckets  As computation proceeds “Contamination” by deleted items  more cache misses * *

13 Cuckoo Hashing Add(x) – if h 1 (x) and h 2 (x) full evict y and move it to h 2 (y) != h 2 (x). Then place x in its place. z z h 1 (x) z z z z z z z z z z z z z z z z z z z z z z z z h 2 (x) z z z z z z w w z z z z z z z z z z z z z z z z h 2 (y) y y x x [Pagh&Rodler]

14 Cuckoo Hashing  Advantages:  Contains() : deterministic 2 buckets  No clustering or contamination  Disadvantages:  2 tables  h i (x) are complex  As M/N increases  relocation cycles  Above M/N = 0.5 Add() does not work!

15 Can we do better?  Highly efficient Contains()  Using simple hash functions  In a table that will continue to work well when it is more than 50% full (M/N>0.5)

16 Hopscotch Approach  Single Array, Simple hash function  Idea: define neighborhood of original bucket  In neighborhood items found quickly  Use sequences of displacements to move items into their neighborhood

17 Simple Hopscotch Hashing Contains(x) – search in at most H buckets (the hop-range) based on hop-info bitmap. H is a constant. z z h(x) H=4 x x

18 Simple Hopscotch Hashing Add(x) – probe linearly to find open slot. Move the empty slot via sequence of displacements into the hop-range of h(x). z z h(x) x x r r s s v v u u w w

19 Add(x)  Starting at h(x) =i, use linear probing to find an empty slot j.  If j is within H-1 of i, place x and return.  Otherwise,  Find y with h(y) = k within H-1 left of j. Displacing y to j creates a new empty slot k closer to i. Repeat.  If no such item exists, or if the bucket i already contains H items, Resize().

20 Simple Hopscotch Hashing  Contains():  Max number of items H is a constant  Theoretically expected num items in bucket ~2.1 same as Chaining [Kunth], but they have a better chance of sitting in the same cache line!

21 Simple Hopscotch Hashing  Add(): Expected distance till open slot same as in linear probing  What are the chances of a Resize() because more than H items are hashed to a bucket? Lemma [following Knuth] : same as num items in chained bucket being greater than H, which is 1/H! If H=32 1/H! = 1/32! < 10 -35

22 Simple Hopscotch Hashing  Advantages:  Good locality and cache behavior  Good performance as table density (M/N) increases  less resizing  Withstands clustering and contamination  Pay price in Add() not in frequent Contains()

23 Simple Hopscotch Hashing  Disadvantages:  As in Linear probing Add() may have to search 10s of buckets  Later: we can do better than the simple algorithm…

24 Concurrent Hash Tables  State-of-the-art is Lea’s ConcurrentHashMap from Java.util.concur: lock-based chaining  Also lock-free split-ordered incremental chaining algorithm [Shalev&Shavit]  Non-resizable lock-free linear probing [Purcell&Harris]  Resizable Lock-based Cuckoo [Herlihy,Shavit, Zafrir]

25 Concurrent Chained Hashing [Lea] 12345 Lock for Add() and unsuccessful Contains() Stripped Locks

26 Concurrent Simple Hopscotch Stripped locking same as Lea Contains() is wait-free h(x) 1 1 2 2 3 3 4 4 5 5

27 Concurrent Simple Hopscotch Add(x) – lock bucket, mark empty slot using CAS, add x erasing mark z z r r v v u u ts x x

28 Concurrent Simple Hopscotch Add(x) – lock bucket, mark empty slot using CAS, lock bucket and update timestamp of bucket being displaced before erasing old value z z v v u u ts r r s s s s

29 Concurrent Simple Hopscotch Wait-free Contains(x) – read ts, hop- info, goto marked buckets, if no x compare ts, if diff repeat, after k attempts search all H buckets z z r r v v u u ts s s X not found

30 Simple Hopscotch Limitations Minimizing cache misses key to hash table performance:  On SPARC line holds ~4 buckets (on Intel ~8 buckets)  If hopscotch neighborhood is num of buckets in a cache line  With H=4 or 8, long sequences of displacements during Add() are expensive

31 Cache Aware Hopscotch Hop-info consists of two pointers of distance hop range. z z c-line x x y y

32 Cache Aware Hopscotch Add(x) - if no place in cache line probe in hop-range and point to new location else perform hopscotch displacements z z x x c-line z z z z

33 Cache Aware Hopscotch Add(x) - if no place in cache line probe in hop-range and point to new location else perform hopscotch displacements z z x x c-line z z z z z z x x hop-range y y w w

34 Cache Aware Hopscotch Remove(x) - erase x, redirect pointer or move last item in x’s list into x’s empty slot. Move some item hashed to this cache line into new empty slot z z x x c-line z z z z y y x x (1) Redirect pointer (2) If pointer outside hop range move last list item

35 Cache Aware Hopscotch Remove(x) - …Move some item hashed to this cache line into new empty slot z z c-line z z z z Scan all items in cache line Moving some item into its hashed cache line z z …repeat recursively for new empty slot Anti-Contamination

36 Performance  We ran a series of benchmarks on state of the art multicores and uniprocessors:  Sun 64 way Niagara II, and  Intel 3GHz Xeon  Grain of Salt: we used standard microbenchmarks, not real application data

37 Benchmarking  We used the same locking structure for concurrent algs  We show graphs with pre-allocated memory to eliminate effects of memory management

38

39

40

41

42

43

44

45

46 Cuckoo stops here

47

48

49

50

51 Conclusions & Future  New Hopscotch family of hash table algorithms: great cache behavior – good fit with modern architectures  Superior to all known algorithms in performance and memory utilization?  Especially impressive at high table densities  Will be interesting to formally analyze performance


Download ppt "Hopscotch Hashing Nir Shavit Tel Aviv U. & Sun Labs Joint work with Maurice Herlihy and Moran Tzafrir."

Similar presentations


Ads by Google