FWIW, no difference on my MacBook. (base) michaels-mbp copybench % go test -bench=. goos: darwin goarch: amd64 pkg: localgo/copybench cpu: Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz BenchmarkCopy-8 6999800 169.4 ns/op BenchmarkCopyG-8 6967590 170.6 ns/op PASS ok localgo/copybench 2.810s
On Tuesday, April 19, 2022 at 11:06:39 AM UTC-4 peterGo wrote: > As Ian has pointed out, software and hardware optimizations may distort > the results of microbenchmarks. > > If I run the original benchmarks using go1.18 and go1.19 the Copy and > CopyG ns/op results are reversed. > > # Original: https://go.dev/play/p/m1ClnbdbdWi > > ~/x$ go1.18 version && go1.18 test x_0_test.go -bench=. > go version go1.18.1 linux/amd64 > BenchmarkCopy-8 3820009 310.7 ns/op > BenchmarkCopyG-8 7552230 158.3 ns/op > > ~/x$ go version && go test x_0_test.go -bench=. > go version devel go1.19-a11a885cb5 Mon Apr 18 23:57:00 2022 +0000 > linux/amd64 > BenchmarkCopy-8 7577499 158.2 ns/op > BenchmarkCopyG-8 3870822 309.7 ns/op > > If I run the benchmarks with a ResetTimer() using go1.18 and go1.19 the > Copy and CopyG ns/op results are effectively the same. > > # ResetTimer: https://go.dev/play/p/hansq5ARrSh > > ~/x$ go1.18 version && go1.18 test x_1_test.go -bench=. > go version go1.18.1 linux/amd64 > BenchmarkCopy-8 7581037 158.0 ns/op > BenchmarkCopyG-8 7590849 157.9 ns/op > > ~/x$ go version && go test x_1_test.go -bench=. > go version devel go1.19-a11a885cb5 Mon Apr 18 23:57:00 2022 +0000 > linux/amd64 > BenchmarkCopy-8 7525525 158.5 ns/op > BenchmarkCopyG-8 7521787 158.5 ns/op > > If I run the original benchmarks on a Celeron N3450 using go1.18 and > go1.19 the Copy and CopyG ns/op results are effectively the same. I run > benchmarks on a Celeron N3450 because Intel disables many hardware > optimizations on cheap hardware. > > # Original: https://go.dev/play/p/m1ClnbdbdWi > > $ go1.18 version && go1.18 test x_0_test.go -bench=. > go version go1.18.1 linux/amd64 > BenchmarkCopy-4 2773934 428.0 ns/op > BenchmarkCopyG-4 2783043 429.7 ns/op > > $ go version && go test x_0_test.go -bench=. > go version devel go1.19-a11a885cb5 Mon Apr 18 23:57:00 2022 +0000 > linux/amd64 > BenchmarkCopy-4 2781676 428.6 ns/op > BenchmarkCopyG-4 2765179 429.0 ns/op > > > Peter > > On Tuesday, April 19, 2022 at 12:37:48 AM UTC-4 Ian Lance Taylor wrote: > >> On Mon, Apr 18, 2022 at 1:14 PM Feng Tian <fen...@gmail.com> wrote: >> > >> > Hi, I have the following simple benchmark code, >> > >> > https://go.dev/play/p/m1ClnbdbdWi >> > >> > I run this on my laptop since Go playground does not run benchmark >> code. The strange thing is that Copy of float64 is slower than copy using >> generics. I can imagine generics may add no overhead, but how can it be >> faster? >> > >> > ftian@DESKTOP-16FCU43:~/tmp$ go test -bench=. >> > goos: linux >> > goarch: amd64 >> > pkg: a >> > cpu: 11th Gen Intel(R) Core(TM) i7-11370H @ 3.30GHz >> > BenchmarkCopy-8 5693944 221.7 ns/op >> > BenchmarkCopyG-8 8885454 137.1 ns/op >> > PASS >> > ok a 2.838s >> >> The numbers for this kind of micro-benchmark can be deceptive. For >> example, they can be highly affected by alignment of the instruction >> loop. I don't know exactly what is happening for you. I compiled the >> code with "go test -c" and disassembled it: both benchmark functions >> contained exactly the same instructions. >> >> Ian >> > -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/7b9ca17c-7c52-480d-9efd-ffec453ab12en%40googlegroups.com.