T L, For equivalency, why did you write,
func Benchmark_CloneWithCopy(b *testing.B) { for i := 0; i < b.N; i++ { t := make([]Element, N) copy(t, x) y = t } } instaed of func Benchmark_CloneWithCopy(b *testing.B) { for i := 0; i < b.N; i++ { y = make([]Element, N) copy(y, x) } } ? Peter On Tuesday, June 27, 2017 at 5:59:25 PM UTC-4, peterGo wrote: > > T L, > > Why didn't you show us the output from > > $ go tool compile -m -m clone_test.go > > ? > > Peter > > On Tuesday, June 27, 2017 at 11:33:30 AM UTC-4, T L wrote: >> >> Ok, I think there are two reasons why the copy version is slower: >> 1. the copy version initializes each element twice actutally. >> 2. alloc a new slice by using make is slow than by using append. But why >> this? >> >> package main >> >> import ( >> "testing" >> ) >> >> const N = 1024 * 1024 // number of elements >> type Element int64 >> var x = make([]Element, N) >> var y []Element >> >> func Benchmark_AllocWithMake(b *testing.B) { >> for i := 0; i < b.N; i++ { >> y = make([]Element, N) >> } >> } >> >> func Benchmark_AllocWithAppend(b *testing.B) { >> for i := 0; i < b.N; i++ { >> y = append([]Element(nil), x...) >> } >> } >> >> func Benchmark_CloneWithCopy(b *testing.B) { >> for i := 0; i < b.N; i++ { >> t := make([]Element, N) >> copy(t, x) >> y = t >> } >> } >> >> func Benchmark_CloneWithAppend(b *testing.B) { >> for i := 0; i < b.N; i++ { >> y = append([]Element(nil), x...) >> } >> } >> >> Benchmark_AllocWithMake-4 1000 1223666 ns/op >> Benchmark_AllocWithAppend-4 2000 725361 ns/op >> Benchmark_CloneWithCopy-4 1000 1813321 ns/op >> Benchmark_CloneWithAppend-4 2000 735011 ns/op >> >> On Tuesday, June 27, 2017 at 10:58:28 PM UTC+8, T L wrote: >>> >>> >>> package main >>> >>> import ( >>> "testing" >>> ) >>> >>> const N = 1024 * 1024 // number of elements >>> type Element int64 >>> var x = make([]Element, N) >>> var y []Element >>> >>> >>> func Benchmark_CloneWithAppend(b *testing.B) { >>> for i := 0; i < b.N; i++ { >>> y = append([]Element(nil), x...) >>> } >>> } >>> >>> func Benchmark_CloneWithCopy(b *testing.B) { >>> b.ResetTimer() >>> for i := 0; i < b.N; i++ { >>> t := make([]Element, N) >>> copy(t, x) >>> y = t >>> } >>> } >>> >>> /* >>> $ go test -bench=. >>> Benchmark_CloneWithAppend-4 2000 738281 ns/op >>> Benchmark_CloneWithCopy-4 1000 1822462 ns/op >>> */ >>> >> -- 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.