From: Bill Wendling <morbo@google.com>
To: dwarves@vger.kernel.org, bpf@vger.kernel.org
Cc: arnaldo.melo@gmail.com, Bill Wendling <morbo@google.com>
Subject: [PATCH] dwarf_loader: use a better hashing function
Date: Wed, 10 Feb 2021 15:23:27 -0800 [thread overview]
Message-ID: <20210210232327.1965876-1-morbo@google.com> (raw)
This hashing function[1] produces better hash table bucket
distributions. The original hashing function always produced zeros in
the three least significant bits.
The new hashing funciton gives a modest performance boost.
Original New
0:11.41 0:11.38
0:11.36 0:11.34
0:11.35 0:11.26
-----------------------
Avg: 0:11.373 0:11.327
for a performance improvement of 0.4%.
[1] From Numerical Recipes, 3rd Ed. 7.1.4 Random Hashes and Random Bytes
Signed-off-by: Bill Wendling <morbo@google.com>
---
hash.h | 25 ++++++++++---------------
1 file changed, 10 insertions(+), 15 deletions(-)
diff --git a/hash.h b/hash.h
index d3aa416..ea201ab 100644
--- a/hash.h
+++ b/hash.h
@@ -33,22 +33,17 @@
static inline uint64_t hash_64(const uint64_t val, const unsigned int bits)
{
- uint64_t hash = val;
+ uint64_t hash = val * 0x369DEA0F31A53F85UL + 0x255992D382208B61UL;
- /* Sigh, gcc can't optimise this alone like it does for 32 bits. */
- uint64_t n = hash;
- n <<= 18;
- hash -= n;
- n <<= 33;
- hash -= n;
- n <<= 3;
- hash += n;
- n <<= 3;
- hash -= n;
- n <<= 4;
- hash += n;
- n <<= 2;
- hash += n;
+ hash ^= hash >> 21;
+ hash ^= hash << 37;
+ hash ^= hash >> 4;
+
+ hash *= 0x422E19E1D95D2F0DUL;
+
+ hash ^= hash << 20;
+ hash ^= hash >> 41;
+ hash ^= hash << 5;
/* High bits are more random, so use them. */
return hash >> (64 - bits);
--
2.30.0.478.g8a0d178c01-goog
next reply other threads:[~2021-02-10 23:24 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-10 23:23 Bill Wendling [this message]
2021-02-10 23:59 ` [PATCH] dwarf_loader: use a better hashing function Andrii Nakryiko
2021-02-11 1:24 ` Bill Wendling
2021-02-11 1:31 ` Andrii Nakryiko
2021-02-11 13:01 ` Arnaldo Carvalho de Melo
2021-02-12 6:55 ` Bill Wendling
2021-02-12 12:35 ` Arnaldo Carvalho de Melo
2021-02-12 8:01 ` [PATCH v2] " Bill Wendling
2021-02-12 12:37 ` Arnaldo Carvalho de Melo
2021-02-12 12:39 ` Arnaldo Carvalho de Melo
2021-02-12 20:14 ` Bill Wendling
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210210232327.1965876-1-morbo@google.com \
--to=morbo@google.com \
--cc=arnaldo.melo@gmail.com \
--cc=bpf@vger.kernel.org \
--cc=dwarves@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.