Can you please succinctly explain the problem? 

> On Mar 24, 2020, at 11:24 AM, Orson Cart <objectivedynam...@gmail.com> wrote:
> 
> 
> I posted this earlier but I realised that the code had a fundamental error in 
> it. I've corrected here it but the underlying problem still exists.
> 
> I've recently started using go test's benchmarks support and I'm particularly 
> interested in understanding the benchmark timer functions. I've been getting 
> results that I found surprising and I was wondering if anyone could explain 
> what's going on here.
> 
> The code below has three benchmarks that each invoke a single function (foo). 
> The implementation of foo isn't important, it's just there to consume some 
> time:
> - foo is called once per iteration in Benchmark1.
> - It's called twice per iteration in Benchmark2 so I'd expect Benchmark2's 
> duration to be nominally twice that of Benchmark1.
> - It's also called twice per iteration in Benchmark3 but the first call is 
> wrapped in b.StopTimer and b.startTimer calls. Because of this I'd have 
> expected Benchmark3 to be about the same duration as Benchmark1
> 
> Apologies for the length of the example but I didn't think it fair to ask the 
> question and leave anything out.
> 
>       package demo_test
> 
>       import (
>               "strconv"
>               "testing"
>       )
> 
>       var Foo1 []string
>       var Foo2 []string
>       var Count int = 32767
> 
>       func Benchmark1(b *testing.B) {
>               for i := 0; i < b.N; i++{
>                       Foo1 = foo(Count)
>               }
>       }
> 
>       func Benchmark2(b *testing.B) {
>               for i := 0; i < b.N; i++{
>               Foo1 = foo(Count)
>                       Foo2 = foo(Count)
>               }
>       }
> 
>       func Benchmark3(b *testing.B) {
>               for i := 0; i < b.N; i++{
>                       b.StopTimer()
>                       Foo1 = foo(Count)
>                       b.StartTimer()
>                       Foo2 = foo(Count)
>               }
>       }
> 
>       func foo(count int) []string{
>               testData := []string{}
>               for i:= 0; i < count; i++ {
>                       testData = append(testData, strconv.Itoa(i))
>               }
> 
>               return testData
>       }
> 
> 
> When the benchmarks are run the results are as follows:
> 
>       Benchmark1-4         351           3345215 ns/op
>       Benchmark2-4         166           7206582 ns/op
>       Benchmark3-4         334           3457907 ns/op
>       PASS
>       ok      bar.com/benchmarks      6.881s
> 
> OK benchmark3 is a little slower than Benchmark1 but that's not what's 
> bothering me. It's this: if I now change Count to something much smaller the 
> results are a surprise, at least to me. Here are the results when Count = 8:
> 
>       Benchmark1-4     2706196               442 ns/op
>       Benchmark2-4     1357482               873 ns/op
>       Benchmark3-4      840729              1387 ns/op
>       PASS
>       ok      bar.com/benchmarks      23.547s
> 
> The ratio of timings for Benchmark1 and Benchmark2 are roughly in line with 
> expectations but I was surprised to see that the timings for Benchmark3 are 
> now larger than those for Benchmark2.
> 
> Can anyone explain this?
> 
> TIA
> Orson
> -- 
> 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/38f10940-a770-4fc5-86a9-19cc1371152a%40googlegroups.com.

-- 
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/B3D08334-348B-4A0E-919D-3260E37D0345%40ix.netcom.com.

Reply via email to