Faster 64-Bit Universal Hashing Using Carry-Less Multiplications

Faster 64-Bit Universal Hashing Using Carry-Less Multiplications

Faster 64-bit universal hashing using carry-less multiplications Daniel Lemire · Owen Kaser Abstract Intel and AMD support the Carry-less Multipli- Random hashing is standard in Ruby, Python and Perl. cation (CLMUL) instruction set in their x64 processors. We It is allowed explicitly in Java and C++11. There are many use CLMUL to implement an almost universal 64-bit hash fast random hash families — e.g., MurmurHash, Google’s family (CLHASH). We compare this new family with what CityHash [35], SipHash [3] and VHASH [12]. Cryptogra- might be the fastest almost universal family on x64 proces- phers have also designed fast hash families with strong the- sors (VHASH). We find that CLHASH is at least 60 % oretical guarantees [6,18,24]. However, much of this work faster. We also compare CLHASH with a popular hash func- predates the introduction of the CLMUL instruction set in tion designed for speed (Google’s CityHash). We find that commodity x86 processors. Intel and AMD added CLMUL CLHASH is 40 % faster than CityHash on inputs larger than and its pclmulqdq instruction to their processors to accel- 64 bytes and just as fast otherwise. erate some common cryptographic operations. Although the pclmulqdq instruction first became available in 2010, its Keywords Universal hashing, Carry-less multiplication, high cost in terms of CPU cycles — specifically an 8-cycle Finite field arithmetic throughput on pre-Haswell Intel microarchitectures and a 7- cycle throughput on pre-Jaguar AMD microarchitectures — limited its usefulness outside of cryptography. However, the 1 Introduction throughput of the instruction on the newer Haswell archi- tecture is down to 2 cycles, even though it remains a high Hashing is the fundamental operation of mapping data ob- latency operation (7 cycles) [16,21].1 See Table 1. Our main jects to fixed-size hash values. For example, all objects in contribution is to show that the pclmulqdq instruction can the Java programming language can be hashed to 32-bit in- be used to produce a 64-bit string hash family that is faster tegers. Many algorithms and data structures rely on hashing: than known approaches while offering stronger theoretical e.g., authentication codes, Bloom filters and hash tables. We guarantees. typically assume that given two data objects, the probabil- ity that they have the same hash value (called a collision) is 2 Random Hashing arXiv:1503.03465v8 [cs.DS] 4 Nov 2015 low. When this assumption fails, adversaries can negatively impact the performance of these data structures or even cre- ate denial-of-service attacks. To mitigate such problems, we In random hashing, we pick a hash function at random from can pick hash functions at random (henceforth called ran- some family, whereas an adversary might pick the data in- dom hashing). puts. We want distinct objects to be unlikely to hash to the same value. That is, we want a low collision probability. D. Lemire We consider hash functions from X to [0; 2L). An L-bit LICEF Research Center, TELUQ, Universite´ du Quebec´ family is universal [10,11] if the probability of a collision is Montreal, QC Canada no more than 2−L. That is, it is universal if E-mail: [email protected] O. Kaser P (h(x) = h(x0)) ≤ 2−L Dept. of CSAS, University of New Brunswick, Saint John Saint John, NB Canada 1 The low-power AMD Jaguar microarchitecture does even better E-mail: [email protected] with a throughput of 1 cycle and a latency of 3 cycles. 2 Daniel Lemire, Owen Kaser Table 1: Relevant SIMD intrinsics and instructions on Haswell Intel processors, with latency and reciprocal throughput in CPU cycles per instruction [16,21]. intrinsic instruction description latency rec. thr. mm clmulepi64 si128 pclmulqdq 64-bit carry-less multiplication 7 2 mm or si128 por bitwise OR 1 0.33 mm xor si128 pxor bitwise XOR 1 0.33 mm slli epi64 psllq shift left two 64-bit integers 1 1 mm srli si128 psrldq shift right by x bytes 1 0.5 mm shuffle epi8 pshufb shuffle 16 bytes 1 0.5 mm cvtsi64 si128 movq 64-bit integer as 128-bit reg. 1 – mm cvtsi128 si64 movq 64-bit integer from 128-bit reg. 2 – mm load si128 movdqa load a 128-bit reg. from memory 1 0.5 (aligned) mm lddqu si128 lddqu load a 128-bit reg. from memory 1 0.5 (unaligned) mm setr epi8 – construct 128-bit reg. from –– 16 bytes mm set epi64x – construct 128-bit reg. from two –– 64-bit integers Table 2: Notation and basic definitions new family collide with probability 1 on the first 32 bits, even though the collision probability on the full hash values h : X ! f0; 1;:::; 2L − 1g L-bit hash function is low (1=232). Using the first bits of these hash functions universal P (h(x) = h(x0)) ≤ 1=2L for could have disastrous consequences in the implementation x =6 x0 of a hash table. -almost universal P (h(x) = h(x0)) ≤ for x =6 Therefore, we consider stronger forms of universality. x0 – A family is ∆-universal [37,14] if XOR-universal P (h(x) = h(x0) ⊕ c) ≤ 1=2L L for any c 2 [0; 2 ) and distinct P (h(x) = h(x0) + c mod 2L) ≤ 2−L x; x0 2 X -almost XOR-universal P (h(x) = h(x0) ⊕ c) ≤ for for any constant c and any x; x0 2 X such that x 6= x0. L any integer c 2 [0; 2 ) and dis- It is -almost ∆-universal if P (h(x) = h(x0) + c mod tinct x; x0 2 X 2L ≤ for any constant c and any x; x0 2 X such that x 6= x0. for any fixed x; x0 2 X such that x 6= x0, given that we – A family is -almost XOR-universal if pick h at random from the family. It is -almost univer- P (h(x) = h(x0) ⊕ c) ≤ sal [36] (also written -AU) if the probability of a collision is bounded by . I.e., P (h(x) = h(x0)) ≤ , for any x; x0 2 X for any integer constant c 2 [0; 2L) and any x; x0 2 X such that x 6= x0. (See Table 2.) such that x 6= x0 (where ⊕ is the bitwise XOR). A family that is 1=2L-almost XOR-universal is said to be XOR- universal [37]. 2.1 Safely Reducing Hash Values Given an -almost ∆-universal family H of hash func- tions h : X ! [0; 2L), the family of hash functions Almost universality can be insufficient to prevent frequent 0 collisions since a given algorithm might only use the first fh(x) mod 2L j h 2 Hg few bits of the hash values. Consider hash tables. A hash 0 0 table might use as a key only the first b bits of the hash values from X to [0; 2L ) is 2L−L × -almost ∆-universal [12]. when its capacity is 2b. Yet even if a hash family is -almost The next lemma shows that a similar result applies to almost universal, it could still have a high collision probability on XOR-almost universal families. the first few bits. For example, take any 32-bit universal family H, and Lemma 1 Given an -almost XOR-universal family H of L derive the new 64-bit 1=232-almost universal 64-bit family hash functions h : X ! [0; 2 ) and any positive integer 0 L0 by taking the functions from H and multiplying them by L < L, the family of hash functions fh(x) mod 2 j h 2 L0 L−L0 232: h0(x) = h(x) × 232. Clearly, all functions from this Hg from X to [0; 2 ) is 2 × -almost XOR-universal. Faster 64-bit universal hashing using carry-less multiplications 3 Proof For any integer constant c 2 [0; 2L), consider the from Xm to [0; 2L)m, where h is in H. Family H0 is -almost 0 equation h(x) = (h(x0) ⊕ c) mod 2L for x 6= x0 with h universal. 0 picked from H. Pick any positive integer L < L. We have The proof is not difficult. Consider two distinct values from 0 m 0 0 0 P (h(x) = (h(x0) ⊕ c mod 2L )) X , x1; x2; : : : ; xm and x1; x2; : : : ; xm. Because the tuples are distinct, they must differ in at least one component: xi 6= X 0 = P (h(x) = h(x ) ⊕ c ⊕ z) 0 0 0 0 0 0 xi. It follows that h (x1; x2; : : : ; xm) and h (x1; x2; : : : ; xm) z j z mod 2L0 =0 0 collide with probability at most P (h(xi) = h(xi)) ≤ , 0 showing the result. where the sum is over 2L−L distinct z values. Because H is -almost XOR-universal, we have that P (h(x) = h(x0) ⊕ c⊕z) ≤ for any c and any z. Thus, we have that P (h(x) = 2.4 Variable-Length Hashing From Fixed-Length Hashing 0 0 h(x0) ⊕ c mod 2L ) ≤ 2L−L , showing the result. Suppose that we are given a family H of hash functions that It follows from Lemma 1 that if a family is XOR-universal, is XOR universal over fixed-length strings. That is, we have then its modular reductions are XOR-universal as well. that P (h(s) = h(s0) ⊕ c) ≤ 1=2L if the length of s is the As a straightforward extension of this lemma, we could same as the length of s0 (jsj = js0j). We can create a new 0 show that when picking any L bits (not only the least sig- family that is XOR universal over variable-length strings L−L0 nificant), the result is 2 × -almost XOR-universal.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    15 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