Hash Array Mapped Trie

Hash Array Mapped Trie

HAMT Hash Array Mapped Trie Ideal Hash Trees (Bagwell, 2001) hash hash+ key3 0x3b obj3 key3 0x3b obj3 key1 0x3b obj1 key1 0x3b obj1 key0 0x0e obj0 key0 0x0e obj0 key2 0x1a obj2 key2 0x1a obj2 key4 0x22 obj4 … … … … … … (hash-set hash key4 obj4) hash+ Persistent hashes • Instead, we want a immutable linked structure that can be partially updated while portions of the old hash persist. • Hash Array Mapped Trie (HAMT); From “Ideal hash trees” (Bagwell, 2001) • Traditional balanced trees (AVL, RB, B-trees, etc) use mutability to dynamically re-balance when necessary. • HAMT first hashes its keys to obtain good dispersion characteristics, as a Hash Table would, but then uses a linked trie (prefix tree) structure. 0 NODE . NODE 1 0 NODE . NODE 0 NODE . 1 NODE 1 NODE . 0 NODE . NODE 1 0 NODE . NODE 0 PAIR Key* Value* . 1 (If this subtree has no other key/value pair) NODE 1 NODE . Increase the branching factor. Use the value 1 (can’t be an aligned pointer) to tag non-terminal nodes. 0 0 Key* Value* 0 0 0 0 0 0 0 0 … … 1 0 0 0 0 1 0 0 … … 1 0 0 Key* Value* Key* Value* … … 0 0 0 0 0 0 Key* Value* … … 0 0 These 1s indicate the 2nd and 3rd indices were non-null and either contain a Key/Value or a pointer to an inner node. 0000000000001100 1 1 Then, we can compress these nodes using a bitmap. __builtin_popcount(u32) __builtin_popcountll(u64) u32 popcount(u32 x) { x = x - ((x >> 1) & 0x55555555); x = (x & 0x33333333) + ((x >> 2) & 0x33333333); x = (x + (x >> 4)) & 0x0F0F0F0F; x = x + (x >> 8); x = x + (x >> 16); return x & 0x0000003F; } Technique is called SIMD within a register (SWAR). Faster population counts using AVX2 Instructions (Mula, et al. 2017) length of the bitmap __builtin_popcountll(bm << (max - hindex)) Returns the number of 1s preceding the hash-index we want, which is the same as the compressed index. So this trie would now compress to…. 0 0 Key* Value* 0 0 0 0 0 0 0 0 … … 1 0 0 0 0 1 0 0 … … 1 0 0 Key* Value* Key* Value* … … 0 0 0 0 1 1 Key* Value* … … This trie, with 31 or 63bit bitmaps in the parent node. Key* Value* …0000101 0 0 0 0 …0111011 …0011001 Key* Value* … … Key* Value* 0 0 BM | 1 BM | 1 Key* Value*.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    11 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us