diff options
author | Martin Möhrmann <moehrmann@google.com> | 2017-08-27 14:05:11 +0200 |
---|---|---|
committer | Martin Möhrmann <moehrmann@google.com> | 2017-08-28 19:55:27 +0000 |
commit | 2a56b023af36d8cbe3f4d096cb46f1009f206157 (patch) | |
tree | 9a9e6438c7963b4f5d1cbde0c7217175fcb269ee /src/runtime/hash_test.go | |
parent | 75d7a02e86353272e40eb31c923f15d5e5ccdb6b (diff) | |
download | go-2a56b023af36d8cbe3f4d096cb46f1009f206157.tar.gz go-2a56b023af36d8cbe3f4d096cb46f1009f206157.zip |
runtime: specialize memhash32 and memhash64
AMD64 with AES support disabled:
name old time/op new time/op delta
MapPopulate/1 78.0ns ± 1% 75.5ns ± 1% -3.17% (p=0.000 n=10+9)
MapPopulate/10 764ns ± 2% 673ns ± 2% -11.91% (p=0.000 n=10+10)
MapPopulate/100 9.52µs ± 1% 8.54µs ± 1% -10.37% (p=0.000 n=8+10)
MapPopulate/1000 116µs ± 2% 103µs ± 1% -10.40% (p=0.000 n=10+8)
MapPopulate/10000 1.01ms ± 1% 0.90ms ± 1% -10.70% (p=0.000 n=10+10)
MapPopulate/100000 9.81ms ± 1% 8.67ms ± 2% -11.54% (p=0.000 n=10+10)
386 with AES support disabled:
name old time/op new time/op delta
MapPopulate/1 95.3ns ± 1% 90.6ns ± 1% -4.95% (p=0.000 n=10+9)
MapPopulate/10 983ns ± 2% 912ns ± 1% -7.18% (p=0.000 n=10+10)
MapPopulate/100 11.9µs ± 2% 11.2µs ± 1% -6.01% (p=0.000 n=10+10)
MapPopulate/1000 140µs ± 1% 131µs ± 1% -6.19% (p=0.000 n=10+10)
MapPopulate/10000 1.26ms ± 2% 1.18ms ± 1% -5.93% (p=0.000 n=9+10)
MapPopulate/100000 12.1ms ± 2% 11.4ms ± 1% -5.48% (p=0.000 n=10+10)
Fixes #21539
Change-Id: Ice128c947c9a6a294800d6a5250d82045eb70b55
Reviewed-on: https://go-review.googlesource.com/59352
Run-TryBot: Martin Möhrmann <moehrmann@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/runtime/hash_test.go')
-rw-r--r-- | src/runtime/hash_test.go | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/runtime/hash_test.go b/src/runtime/hash_test.go index a6f3cdbdbe..1400579cda 100644 --- a/src/runtime/hash_test.go +++ b/src/runtime/hash_test.go @@ -14,6 +14,40 @@ import ( "unsafe" ) +func TestMemHash32Equality(t *testing.T) { + if *UseAeshash { + t.Skip("skipping since AES hash implementation is used") + } + var b [4]byte + r := rand.New(rand.NewSource(1234)) + seed := uintptr(r.Uint64()) + for i := 0; i < 100; i++ { + randBytes(r, b[:]) + got := MemHash32(unsafe.Pointer(&b), seed) + want := MemHash(unsafe.Pointer(&b), seed, 4) + if got != want { + t.Errorf("MemHash32(%x, %v) = %v; want %v", b, seed, got, want) + } + } +} + +func TestMemHash64Equality(t *testing.T) { + if *UseAeshash { + t.Skip("skipping since AES hash implementation is used") + } + var b [8]byte + r := rand.New(rand.NewSource(1234)) + seed := uintptr(r.Uint64()) + for i := 0; i < 100; i++ { + randBytes(r, b[:]) + got := MemHash64(unsafe.Pointer(&b), seed) + want := MemHash(unsafe.Pointer(&b), seed, 8) + if got != want { + t.Errorf("MemHash64(%x, %v) = %v; want %v", b, seed, got, want) + } + } +} + // Smhasher is a torture test for hash functions. // https://code.google.com/p/smhasher/ // This code is a port of some of the Smhasher tests to Go. |