diff options
| author | Uttam C Pawar <uttam.c.pawar@intel.com> | 2015-07-02 11:43:46 -0700 |
|---|---|---|
| committer | Keith Randall <khr@golang.org> | 2015-08-26 03:52:20 +0000 |
| commit | 32add8d7c8433d87aca782ddcd79898922ac96b7 (patch) | |
| tree | b6761e5bcdf4f60ddb3668946877dc0be4928138 /src/bytes/bytes_test.go | |
| parent | abab21b1d1e9a33851b8b04e605f154d4198c2ee (diff) | |
| download | go-32add8d7c8433d87aca782ddcd79898922ac96b7.tar.xz | |
bytes: improve Compare function on amd64 for large byte arrays
This patch contains only loop unrolling change for size > 63B
Following are the performance numbers for various sizes on
On Haswell based system: Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz.
benchcmp go.head.8.25.15.txt go.head.8.25.15.opt.txt
benchmark old ns/op new ns/op delta
BenchmarkBytesCompare1-4 5.37 5.37 +0.00%
BenchmarkBytesCompare2-4 5.37 5.38 +0.19%
BenchmarkBytesCompare4-4 5.37 5.37 +0.00%
BenchmarkBytesCompare8-4 4.42 4.38 -0.90%
BenchmarkBytesCompare16-4 4.27 4.45 +4.22%
BenchmarkBytesCompare32-4 5.30 5.36 +1.13%
BenchmarkBytesCompare64-4 6.93 6.78 -2.16%
BenchmarkBytesCompare128-4 10.3 9.50 -7.77%
BenchmarkBytesCompare256-4 17.1 13.8 -19.30%
BenchmarkBytesCompare512-4 31.3 22.1 -29.39%
BenchmarkBytesCompare1024-4 62.5 39.0 -37.60%
BenchmarkBytesCompare2048-4 112 73.2 -34.64%
Change-Id: I4eeb1c22732fd62cbac97ba757b0d29f648d4ef1
Reviewed-on: https://go-review.googlesource.com/11871
Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/bytes/bytes_test.go')
| -rw-r--r-- | src/bytes/bytes_test.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/bytes/bytes_test.go b/src/bytes/bytes_test.go index 6245e48180..8df62fcc6a 100644 --- a/src/bytes/bytes_test.go +++ b/src/bytes/bytes_test.go @@ -1255,3 +1255,34 @@ func BenchmarkRepeat(b *testing.B) { Repeat([]byte("-"), 80) } } + +func benchmarkBytesCompare(b *testing.B, n int) { + var x = make([]byte, n) + var y = make([]byte, n) + + for i := 0; i < n; i++ { + x[i] = 'a' + } + + for i := 0; i < n; i++ { + y[i] = 'a' + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + Compare(x, y) + } +} + +func BenchmarkBytesCompare1(b *testing.B) { benchmarkBytesCompare(b, 1) } +func BenchmarkBytesCompare2(b *testing.B) { benchmarkBytesCompare(b, 2) } +func BenchmarkBytesCompare4(b *testing.B) { benchmarkBytesCompare(b, 4) } +func BenchmarkBytesCompare8(b *testing.B) { benchmarkBytesCompare(b, 8) } +func BenchmarkBytesCompare16(b *testing.B) { benchmarkBytesCompare(b, 16) } +func BenchmarkBytesCompare32(b *testing.B) { benchmarkBytesCompare(b, 32) } +func BenchmarkBytesCompare64(b *testing.B) { benchmarkBytesCompare(b, 64) } +func BenchmarkBytesCompare128(b *testing.B) { benchmarkBytesCompare(b, 128) } +func BenchmarkBytesCompare256(b *testing.B) { benchmarkBytesCompare(b, 256) } +func BenchmarkBytesCompare512(b *testing.B) { benchmarkBytesCompare(b, 512) } +func BenchmarkBytesCompare1024(b *testing.B) { benchmarkBytesCompare(b, 1024) } +func BenchmarkBytesCompare2048(b *testing.B) { benchmarkBytesCompare(b, 2048) } |
