TL, To paraphrase: There are lies, damned lies, and benchmarks [statistics].
Let's use another machine. The results of your benchmarks. $ go version go version devel +96414ca Wed Dec 14 19:36:20 2016 +0000 linux/amd64 $ go test -bench=. -cpu=4 BenchmarkMemclr_100-4 100000000 13.0 ns/op BenchmarkLoop_100-4 50000000 34.2 ns/op BenchmarkMemclr_1000-4 20000000 110 ns/op BenchmarkLoop_1000-4 5000000 262 ns/op BenchmarkMemclr_10000-4 1000000 1080 ns/op BenchmarkLoop_10000-4 500000 2861 ns/op BenchmarkMemclr_100000-4 100000 16137 ns/op BenchmarkLoop_100000-4 50000 31763 ns/op BenchmarkMemclr_200000-4 50000 31774 ns/op BenchmarkLoop_200000-4 20000 63448 ns/op BenchmarkMemclr_300000-4 30000 47662 ns/op BenchmarkLoop_300000-4 20000 95335 ns/op BenchmarkMemclr_400000-4 20000 63424 ns/op BenchmarkLoop_400000-4 10000 127160 ns/op BenchmarkMemclr_500000-4 20000 81460 ns/op BenchmarkLoop_500000-4 10000 159163 ns/op BenchmarkMemclr_1000000-4 10000 204890 ns/op BenchmarkLoop_1000000-4 5000 327647 ns/op BenchmarkMemclr_2000000-4 2000 733899 ns/op BenchmarkLoop_2000000-4 2000 885830 ns/op PASS ok tl 36.282s $ Memclr is 17.15% faster than Loop for a very large slice. Peter On Wednesday, December 14, 2016 at 10:38:43 AM UTC-5, peterGo wrote: > > TL, > > For your results, it's a small increase of 1.9%. > > For my results, it's a small decrease of −2.03%. > > $ go version > go version devel +232991e Wed Dec 14 05:51:01 2016 +0000 linux/amd64 > $ go test -bench=. > BenchmarkMemclr_100-4 20000000 115 ns/op > BenchmarkLoop_100-4 5000000 244 ns/op > BenchmarkMemclr_1000-4 1000000 1026 ns/op > BenchmarkLoop_1000-4 1000000 1387 ns/op > BenchmarkMemclr_10000-4 200000 10521 ns/op > BenchmarkLoop_10000-4 100000 14285 ns/op > BenchmarkMemclr_100000-4 10000 146268 ns/op > BenchmarkLoop_100000-4 10000 168871 ns/op > BenchmarkMemclr_200000-4 5000 291458 ns/op > BenchmarkLoop_200000-4 5000 344252 ns/op > BenchmarkMemclr_300000-4 3000 494498 ns/op > BenchmarkLoop_300000-4 2000 602575 ns/op > BenchmarkMemclr_400000-4 2000 734921 ns/op > BenchmarkLoop_400000-4 2000 779482 ns/op > BenchmarkMemclr_500000-4 2000 981884 ns/op > BenchmarkLoop_500000-4 2000 1008058 ns/op > BenchmarkMemclr_1000000-4 1000 2073439 ns/op > BenchmarkLoop_1000000-4 1000 2093744 ns/op > BenchmarkMemclr_2000000-4 300 3932547 ns/op > BenchmarkLoop_2000000-4 300 4132627 ns/op > PASS > ok tl 34.872s > $ > > Peter > > > On Wednesday, December 14, 2016 at 9:12:08 AM UTC-5, T L wrote: >> >> I just read this issue thread: https://github.com/golang/go/issues/5373 >> and this https://codereview.appspot.com/137880043 >> which says: >> >> for i := range a { >> a[i] = [zero val] >> } >> >> will be replaced with memclr. >> I made some benchmarks, but the results are disappointing. >> When the length of slice/array is very large, memclr is slower. >> >> Result >> >> BenchmarkMemclr_100-4 100000000 37.2 ns/op >> BenchmarkLoop_100-4 100000000 70.7 ns/op >> BenchmarkMemclr_1000-4 20000000 351 ns/op >> BenchmarkLoop_1000-4 10000000 464 ns/op >> BenchmarkMemclr_10000-4 1000000 3623 ns/op >> BenchmarkLoop_10000-4 1000000 4940 ns/op >> BenchmarkMemclr_100000-4 100000 49230 ns/op >> BenchmarkLoop_100000-4 100000 58761 ns/op >> BenchmarkMemclr_200000-4 50000 98165 ns/op >> BenchmarkLoop_200000-4 50000 115833 ns/op >> BenchmarkMemclr_300000-4 30000 170617 ns/op >> BenchmarkLoop_300000-4 20000 190193 ns/op >> BenchmarkMemclr_400000-4 20000 275676 ns/op >> BenchmarkLoop_400000-4 20000 288729 ns/op >> BenchmarkMemclr_500000-4 10000 410280 ns/op >> BenchmarkLoop_500000-4 10000 416195 ns/op >> BenchmarkMemclr_1000000-4 5000 1025504 ns/op >> BenchmarkLoop_1000000-4 5000 1012198 ns/op >> BenchmarkMemclr_2000000-4 2000 2071861 ns/op >> BenchmarkLoop_2000000-4 2000 2032703 ns/op >> >> test code: >> >> package main >> >> import "testing" >> >> func memclr(a []int) { >> for i := range a { >> a[i] = 0 >> } >> } >> >> func memsetLoop(a []int, v int) { >> for i := range a { >> a[i] = v >> } >> } >> >> var i = 0 >> >> func BenchmarkMemclr_100(b *testing.B) { >> var a = make([]int, 100) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memclr(a) >> } >> } >> >> func BenchmarkLoop_100(b *testing.B) { >> var a = make([]int, 100) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memsetLoop(a, i) >> } >> } >> >> func BenchmarkMemclr_1000(b *testing.B) { >> var a = make([]int, 1000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memclr(a) >> } >> } >> >> func BenchmarkLoop_1000(b *testing.B) { >> var a = make([]int, 1000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memsetLoop(a, i) >> } >> } >> >> func BenchmarkMemclr_10000(b *testing.B) { >> var a = make([]int, 10000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memclr(a) >> } >> } >> >> func BenchmarkLoop_10000(b *testing.B) { >> var a = make([]int, 10000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memsetLoop(a, i) >> } >> } >> >> func BenchmarkMemclr_100000(b *testing.B) { >> var a = make([]int, 100000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memclr(a) >> } >> } >> >> func BenchmarkLoop_100000(b *testing.B) { >> var a = make([]int, 100000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memsetLoop(a, i) >> } >> } >> >> func BenchmarkMemclr_200000(b *testing.B) { >> var a = make([]int, 200000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memclr(a) >> } >> } >> >> func BenchmarkLoop_200000(b *testing.B) { >> var a = make([]int, 200000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memsetLoop(a, i) >> } >> } >> >> func BenchmarkMemclr_300000(b *testing.B) { >> var a = make([]int, 300000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memclr(a) >> } >> } >> >> func BenchmarkLoop_300000(b *testing.B) { >> var a = make([]int, 300000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memsetLoop(a, i) >> } >> } >> >> func BenchmarkMemclr_400000(b *testing.B) { >> var a = make([]int, 400000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memclr(a) >> } >> } >> >> func BenchmarkLoop_400000(b *testing.B) { >> var a = make([]int, 400000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memsetLoop(a, i) >> } >> } >> >> func BenchmarkMemclr_500000(b *testing.B) { >> var a = make([]int, 500000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memclr(a) >> } >> } >> >> func BenchmarkLoop_500000(b *testing.B) { >> var a = make([]int, 500000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memsetLoop(a, i) >> } >> } >> >> func BenchmarkMemclr_1000000(b *testing.B) { >> var a = make([]int, 1000000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memclr(a) >> } >> } >> >> func BenchmarkLoop_1000000(b *testing.B) { >> var a = make([]int, 1000000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memsetLoop(a, i) >> } >> } >> >> func BenchmarkMemclr_2000000(b *testing.B) { >> var a = make([]int, 2000000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memclr(a) >> } >> } >> >> func BenchmarkLoop_2000000(b *testing.B) { >> var a = make([]int, 2000000) >> b.ResetTimer() >> for i := 0; i < b.N; i++ { >> memsetLoop(a, i) >> } >> } >> >> >> >> >> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.