OK, I got it.  You were trying to change the code I was benchmarking, and I 
did not realize you were trying to say a benchmark must have the ability to 
run b.N times.

Yes, that was the problem.  This fixed it:

func BenchmarkMarshalSample(b *testing.B) {
    var sum int64
    for i:= 0; i < b.N; i++ {
        start := time.Now()
        for x := 0; x < 10_000_000; x++ {
            sum += rand.Int63n(0xFFFFFFFF)
        }
        b.Logf("Sum %e Duration %v", float64(sum), time.Now().Sub(start))
    }
}


On Tuesday, May 19, 2020 at 1:53:19 PM UTC-4, Warren Bare wrote:
>
> OK, I added a sum of the rand to the demo code and the results are the 
> same.  Since it is displaying the sum, it seems clear that the code is not 
> optimized away.
>
> Again, I am NOT trying to time each iteration of the loop.  This is a 
> minimal demonstration of a weirdness I was seeing in my own benchmarks.  
> Just pretend the loop is one chunk of code that takes time and is not 
> optimized away.
>
> Any other ideas?
>
> func BenchmarkMarshalSample(b *testing.B) {
>     var sum int64
>     start := time.Now()
>     for i := 0; i < 10_000_000; i++ {
>         sum += rand.Int63n(0xFFFFFFFF)
>     }
>     b.Logf("Sum %e Duration %v", float64(sum), time.Now().Sub(start))
> }
>
>
>
> On Tuesday, May 19, 2020 at 12:20:43 PM UTC-4, Warren Bare wrote:
>>
>> Hi Folks,
>>
>> I'm getting weird results from Benchmark.  Maybe someone can help me 
>> understand this.  I'm running on amd-64 (Threadripper 16 core 32 thread) 
>> Windows 10.  Go 1.14.3
>>
>> I have the benchmark below (main_test.go) on a minimum "hello world" 
>> main.go (just like playground).
>>
>> When I run the benchmark as it is below, I get the results included just 
>> below here.  Notice it reports 0.135 ns/op but the time is actually 135 
>> *ms* so it is off by a factor of 1 billion.  It is like it trying to 
>> report in seconds but did not change the label from ns to s.
>>
>> Further, if I increase the loop 10x from 10_000_000 to 100_000_000, then 
>> it prints Duration 1.349 seconds (good) and now the Benchmark time has 
>> increased by a factor of 10 *billion *and is now correctly reported as 
>> 1349224200 ns/op
>>
>> What am I missing here?
>>
>>
>> BenchmarkMarshalSample-32       1000000000           0.135 ns/op           0 
>> B/op          0 allocs/op
>> --- BENCH: BenchmarkMarshalSample-32
>>     main_test.go:14: Duration 136.1221ms
>>     main_test.go:14: Duration 135.1214ms
>>     main_test.go:14: Duration 134.1763ms
>>     main_test.go:14: Duration 135.1217ms
>>     main_test.go:14: Duration 135.1298ms
>>     main_test.go:14: Duration 135.1217ms
>>     main_test.go:14: Duration 135.1218ms
>>     main_test.go:14: Duration 135.1213ms
>>     main_test.go:14: Duration 135.1298ms
>>     main_test.go:14: Duration 135.1216ms
>>     ... [output truncated]
>> PASS
>>
>>
>>
>> package main
>>
>> import (
>>     "math/rand"
>>     "testing"
>>     "time"
>> )
>>
>> func BenchmarkMarshalSample(b *testing.B) {
>>     start := time.Now()
>>     for i := 0; i < 10_000_000; i++ {
>>         rand.Int63()
>>     }
>>     b.Log("Duration", time.Now().Sub(start))
>> }
>>
>>

-- 
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/1f6e43a6-3c62-4c0f-99af-f277ba8cba55%40googlegroups.com.

Reply via email to