Skip to content

Commit 865acaf

Browse files
author
Jerome Froelich
committed
[non-crypto hash] Add MetroHash to non-cryptographic hash function benchmarks
1 parent ffd7cea commit 865acaf

File tree

4 files changed

+54
-58
lines changed

4 files changed

+54
-58
lines changed

README.md

Lines changed: 25 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -280,54 +280,31 @@ we acquire a write lock on a `RWMutex`. And in the last benchmark we acquire a r
280280

281281
Benchmark Name|Iterations|Per-Iteration|Bytes Allocated per Operation|Allocations per Operation
282282
----|----|----|----|----
283-
BenchmarkHash32Fnv | 20000000 | 72.1 ns/op | 0 B/op | 0 allocs/op
284-
BenchmarkHash32Fnva | 20000000 | 70.4 ns/op | 0 B/op | 0 allocs/op
285-
BenchmarkHash64Fnv | 20000000 | 77.8 ns/op | 0 B/op | 0 allocs/op
286-
BenchmarkHash64Fnva | 20000000 | 68.9 ns/op | 0 B/op | 0 allocs/op
287-
BenchmarkHash32Crc | 30000000 | 69.4 ns/op | 0 B/op | 0 allocs/op
288-
BenchmarkHash64Crc | 10000000 | 163 ns/op | 0 B/op | 0 allocs/op
289-
BenchmarkHash32Adler | 30000000 | 39.0 ns/op | 0 B/op | 0 allocs/op
290-
BenchmarkHash32Xxhash | 30000000 | 62.8 ns/op | 0 B/op | 0 allocs/op
291-
BenchmarkHash64Xxhash | 50000000 | 31.4 ns/op | 0 B/op | 0 allocs/op
292-
BenchmarkHash32Murmur3 | 30000000 | 53.6 ns/op | 0 B/op | 0 allocs/op
293-
BenchmarkHash128Murmur3 | 30000000 | 49.5 ns/op | 0 B/op | 0 allocs/op
294-
BenchmarkHash64CityHash | 50000000 | 28.9 ns/op | 0 B/op | 0 allocs/op
295-
BenchmarkHash128CityHash | 20000000 | 109 ns/op | 0 B/op | 0 allocs/op
296-
BenchmarkHash32FarmHash | 30000000 | 46.2 ns/op | 0 B/op | 0 allocs/op
297-
BenchmarkHash64FarmHash | 50000000 | 25.3 ns/op | 0 B/op | 0 allocs/op
298-
BenchmarkHash128FarmHash | 50000000 | 37.3 ns/op | 0 B/op | 0 allocs/op
299-
BenchmarkHash64SipHash | 50000000 | 37.1 ns/op | 0 B/op | 0 allocs/op
300-
BenchmarkHash128SipHash | 30000000 | 44.9 ns/op | 0 B/op | 0 allocs/op
301-
BenchmarkHash64HighwayHash | 50000000 | 38.8 ns/op | 0 B/op | 0 allocs/op
302-
BenchmarkHash32SpookyHash | 30000000 | 54.6 ns/op | 0 B/op | 0 allocs/op
303-
BenchmarkHash64SpookyHash | 30000000 | 53.4 ns/op | 0 B/op | 0 allocs/op
304-
BenchmarkHash128SpookyHash | 30000000 | 47.4 ns/op | 0 B/op | 0 allocs/op
305-
BenchmarkHashMD5 | 10000000 | 168 ns/op | 0 B/op | 0 allocs/op
306-
BenchmarkHash32Fnv | 20000000 | 71.9 ns/op | 0 B/op | 0 allocs/op
307-
BenchmarkHash32Fnva | 20000000 | 70.1 ns/op | 0 B/op | 0 allocs/op
308-
BenchmarkHash64Fnv | 20000000 | 71.8 ns/op | 0 B/op | 0 allocs/op
309-
BenchmarkHash64Fnva | 20000000 | 70.4 ns/op | 0 B/op | 0 allocs/op
310-
BenchmarkHash32Crc | 30000000 | 50.9 ns/op | 0 B/op | 0 allocs/op
311-
BenchmarkHash64Crc | 10000000 | 139 ns/op | 0 B/op | 0 allocs/op
312-
BenchmarkHash32Adler | 30000000 | 38.2 ns/op | 0 B/op | 0 allocs/op
313-
BenchmarkHash32Xxhash | 30000000 | 43.5 ns/op | 0 B/op | 0 allocs/op
314-
BenchmarkHash64Xxhash | 30000000 | 36.5 ns/op | 0 B/op | 0 allocs/op
315-
BenchmarkHash32Murmur3 | 30000000 | 50.3 ns/op | 0 B/op | 0 allocs/op
316-
BenchmarkHash128Murmur3 | 30000000 | 47.0 ns/op | 0 B/op | 0 allocs/op
317-
BenchmarkHash64CityHash | 50000000 | 29.4 ns/op | 0 B/op | 0 allocs/op
318-
BenchmarkHash128CityHash | 20000000 | 109 ns/op | 0 B/op | 0 allocs/op
319-
BenchmarkHash32FarmHash | 30000000 | 39.8 ns/op | 0 B/op | 0 allocs/op
320-
BenchmarkHash64FarmHash | 50000000 | 24.2 ns/op | 0 B/op | 0 allocs/op
321-
BenchmarkHash128FarmHash | 50000000 | 36.1 ns/op | 0 B/op | 0 allocs/op
322-
BenchmarkHash64SipHash | 50000000 | 35.6 ns/op | 0 B/op | 0 allocs/op
323-
BenchmarkHash128SipHash | 30000000 | 43.7 ns/op | 0 B/op | 0 allocs/op
324-
BenchmarkHash64HighwayHash | 30000000 | 36.9 ns/op | 0 B/op | 0 allocs/op
325-
BenchmarkHash32SpookyHash | 30000000 | 53.7 ns/op | 0 B/op | 0 allocs/op
326-
BenchmarkHash64SpookyHash | 20000000 | 62.3 ns/op | 0 B/op | 0 allocs/op
327-
BenchmarkHash128SpookyHash | 20000000 | 66.5 ns/op | 0 B/op | 0 allocs/op
328-
BenchmarkHashMD5 | 10000000 | 182 ns/op | 0 B/op | 0 allocs/op
329-
330-
283+
BenchmarkHash32Fnv | 20000000 | 70.3 ns/op | 0 B/op | 0 allocs/op
284+
BenchmarkHash32Fnva | 20000000 | 70.4 ns/op | 0 B/op | 0 allocs/op
285+
BenchmarkHash64Fnv | 20000000 | 71.1 ns/op | 0 B/op | 0 allocs/op
286+
BenchmarkHash64Fnva | 20000000 | 77.1 ns/op | 0 B/op | 0 allocs/op
287+
BenchmarkHash32Crc | 30000000 | 87.5 ns/op | 0 B/op | 0 allocs/op
288+
BenchmarkHash64Crc | 10000000 | 175 ns/op | 0 B/op | 0 allocs/op
289+
BenchmarkHash32Adler | 30000000 | 40.3 ns/op | 0 B/op | 0 allocs/op
290+
BenchmarkHash32Xxhash | 30000000 | 46.1 ns/op | 0 B/op | 0 allocs/op
291+
BenchmarkHash64Xxhash | 30000000 | 47.4 ns/op | 0 B/op | 0 allocs/op
292+
BenchmarkHash32Murmur3 | 20000000 | 59.4 ns/op | 0 B/op | 0 allocs/op
293+
BenchmarkHash128Murmur3 | 20000000 | 63.4 ns/op | 0 B/op | 0 allocs/op
294+
BenchmarkHash64CityHash | 30000000 | 57.4 ns/op | 0 B/op | 0 allocs/op
295+
BenchmarkHash128CityHash | 20000000 | 113 ns/op | 0 B/op | 0 allocs/op
296+
BenchmarkHash32FarmHash | 30000000 | 44.4 ns/op | 0 B/op | 0 allocs/op
297+
BenchmarkHash64FarmHash | 50000000 | 26.4 ns/op | 0 B/op | 0 allocs/op
298+
BenchmarkHash128FarmHash | 30000000 | 40.3 ns/op | 0 B/op | 0 allocs/op
299+
BenchmarkHash64SipHash | 30000000 | 39.3 ns/op | 0 B/op | 0 allocs/op
300+
BenchmarkHash128SipHash | 30000000 | 44.9 ns/op | 0 B/op | 0 allocs/op
301+
BenchmarkHash64HighwayHash | 50000000 | 36.9 ns/op | 0 B/op | 0 allocs/op
302+
BenchmarkHash32SpookyHash | 30000000 | 58.1 ns/op | 0 B/op | 0 allocs/op
303+
BenchmarkHash64SpookyHash | 20000000 | 62.7 ns/op | 0 B/op | 0 allocs/op
304+
BenchmarkHash128SpookyHash | 30000000 | 68.2 ns/op | 0 B/op | 0 allocs/op
305+
BenchmarkHashMD5 | 10000000 | 169 ns/op | 0 B/op | 0 allocs/op
306+
BenchmarkHash64MetroHash | 100000000 | 18.6 ns/op | 0 B/op | 0 allocs/op
307+
BenchmarkHash128MetroHash | 30000000 | 48.8 ns/op | 0 B/op | 0 allocs/op
331308

332309
Generated using go version go1.8.3 darwin/amd64
333310

glide.lock

Lines changed: 6 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

glide.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ testImport:
1414
version: e2d0fe22b456fa0a35cd883ba355ecfcf1881490
1515
- package: github.com/dgryski/go-highway
1616
version: 17171d698d9c22164cb429962abc409ef514d3b2
17+
- package: github.com/dgryski/go-metro
18+
version: 0f6473574cdfd7be3962c41fb23dc4768b1f7deb
1719
- package: github.com/dgryski/go-spooky
1820
version: ed3d087f40e29d80bfe4d9c1c1f2d4885eb1b82a
1921
- package: github.com/m3db/m3x

non_cryptogrphic_hash_function_test.go

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/dchest/siphash"
1414
"github.com/dgryski/go-farm"
1515
"github.com/dgryski/go-highway"
16+
metro "github.com/dgryski/go-metro"
1617
"github.com/dgryski/go-spooky"
1718
"github.com/spaolacci/murmur3"
1819
"github.com/zhenjl/cityhash"
@@ -152,16 +153,16 @@ func BenchmarkHash128FarmHash(b *testing.B) {
152153
}
153154

154155
func BenchmarkHash64SipHash(b *testing.B) {
155-
k0 := uint64(rand.Int63())
156-
k1 := uint64(rand.Int63())
156+
k0 := rand.Uint64()
157+
k1 := rand.Uint64()
157158
for i := 0; i < b.N; i++ {
158159
siphash.Hash(k0, k1, testBytes)
159160
}
160161
}
161162

162163
func BenchmarkHash128SipHash(b *testing.B) {
163-
k0 := uint64(rand.Int63())
164-
k1 := uint64(rand.Int63())
164+
k0 := rand.Uint64()
165+
k1 := rand.Uint64()
165166
for i := 0; i < b.N; i++ {
166167
siphash.Hash128(k0, k1, testBytes)
167168
}
@@ -187,8 +188,8 @@ func BenchmarkHash64SpookyHash(b *testing.B) {
187188
}
188189

189190
func BenchmarkHash128SpookyHash(b *testing.B) {
190-
k0 := uint64(rand.Int63())
191-
k1 := uint64(rand.Int63())
191+
k0 := rand.Uint64()
192+
k1 := rand.Uint64()
192193
for i := 0; i < b.N; i++ {
193194
spooky.Hash128(testBytes, &k0, &k1)
194195
}
@@ -199,3 +200,17 @@ func BenchmarkHashMD5(b *testing.B) {
199200
md5.Sum(testBytes)
200201
}
201202
}
203+
204+
func BenchmarkHash64MetroHash(b *testing.B) {
205+
seed := rand.Uint64()
206+
for i := 0; i < b.N; i++ {
207+
metro.Hash64(testBytes, seed)
208+
}
209+
}
210+
211+
func BenchmarkHash128MetroHash(b *testing.B) {
212+
seed := rand.Uint64()
213+
for i := 0; i < b.N; i++ {
214+
metro.Hash128(testBytes, seed)
215+
}
216+
}

0 commit comments

Comments
 (0)