Do you have the test code for that specific test?

That would allow others to have a look at it and also confirm if the test
is somehow optimising the function call away.

On Sat, 27 Apr 2024 at 05:12, robert engels <reng...@ix.netcom.com> wrote:

> Apologies. The assembly files were reversed. But the timings remain the
> same.
>
> I will get the assembly of the test compiles tomorrow  - but if these
> differ - that suggests that the test harness between versions has changed
> as well - meaning can’t compare benchmark performances across versions ?
>
> Under the assumption that the register passing should be more efficient
> than the stack passing.
>
> On Apr 26, 2024, at 10:32 PM, Robert Engels <reng...@ix.netcom.com> wrote:
>
> Why would it be optimized away in 1.12 and not optimized away in 1.21?
>
> I could have made a mistake in my recording so I’ll test it again
> tomorrow.
>
> On Apr 26, 2024, at 10:03 PM, 'Keith Randall' via golang-nuts <
> golang-nuts@googlegroups.com> wrote:
>
> Isn't that assembly exactly the opposite? The code that is passing in
> registers should be 1.21, the one passing on the stack would be 1.12. At
> least, that's what should be the case with the register ABI that launched
> in 1.17 (for amd64).
> Please post a full program and a full command line you're using, so it is
> immediately obvious how one would reproduce.
>
> Also, the assembly of Fixed.Add isn't the thing I'm curious about. It is
> the assembly of BenchmarkAddFixed. Fixed.Add will probably be inlined into
> that function, and possibly optimized away.
>
> On Friday, April 26, 2024 at 5:44:01 AM UTC-7 robert engels wrote:
>
>> There seems to be a material difference in the generated code.
>>
>> The function is:
>>
>> func (f Fixed) Add(f0 Fixed) Fixed {
>>     if f.IsNaN() || f0.IsNaN() {
>>         return NaN
>>     }
>>     return Fixed{fp: f.fp + f0.fp}
>> }
>>
>> In 1.12 it appears to place the receiver and the argument in the AX and
>> BX registers as a calling convention, but in 1.21 these are passed on the
>> stack.
>>
>> 1.12 assembly:
>>
>> github.com/robaho/fixed.Fixed.Add STEXT nosplit size=33 args=0x10
>> locals=0x0 funcid=0x0 align=0x0
>> 0x0000 00000 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:172) TEXT
>> github.com/robaho/fixed.Fixed.Add(SB), NOSPLIT|NOFRAME|ABIInternal, $0-16
>> 0x0000 00000 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:172) FUNCDATA $0,
>> gclocals·g2BeySu+wFnoycgXfElmcg==(SB)
>> 0x0000 00000 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:172) FUNCDATA $1,
>> gclocals·g2BeySu+wFnoycgXfElmcg==(SB)
>> 0x0000 00000 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:172) FUNCDATA $5,
>> github.com/robaho/fixed.Fixed.Add.arginfo1(SB)
>> 0x0000 00000 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:172) FUNCDATA $6,
>> github.com/robaho/fixed.Fixed.Add.argliveinfo(SB)
>> 0x0000 00000 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:172) PCDATA $3, $1
>> 0x0000 00000 (<unknown line number>) NOP
>> 0x0000 00000 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:172) XCHGL AX, AX
>> 0x0001 00001 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:144) MOVQ $9223372036854775807, CX
>> 0x000b 00011 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:144) CMPQ AX, CX
>> 0x000e 00014 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:173) JEQ 21
>> 0x0010 00016 (<unknown line number>) NOP
>> 0x0010 00016 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:144) CMPQ BX, CX
>> 0x0013 00019 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:173) JNE 29
>> 0x0015 00021 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:174) MOVQ github.com/robaho/fixed.NaN(SB),
>> AX
>> 0x001c 00028 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:174) RET
>> 0x001d 00029 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:176) ADDQ BX, AX
>> 0x0020 00032 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:176) RET
>> 0x0000 90 48 b9 ff ff ff ff ff ff ff 7f 48 39 c8 74 05  .H.........H9.t.
>> 0x0010 48 39 cb 75 08 48 8b 05 00 00 00 00 c3 48 01 d8  H9.u.H.......H..
>> 0x0020 c3                                               .
>> rel 24+4 t=14 github.com/robaho/fixed.NaN+0
>>
>> 1.21.5 assembly:
>>
>> "".Fixed.Add STEXT nosplit size=54 args=0x18 locals=0x0
>> 0x0000 00000 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:172) TEXT "".Fixed.Add(SB),
>> NOSPLIT|ABIInternal, $0-24
>> 0x0000 00000 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:172) FUNCDATA $0,
>> gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
>> 0x0000 00000 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:172) FUNCDATA $1,
>> gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
>> 0x0000 00000 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:172) FUNCDATA $3,
>> gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
>> 0x0000 00000 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:173) PCDATA $2, $0
>> 0x0000 00000 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:173) PCDATA $0, $0
>> 0x0000 00000 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:173) XCHGL AX, AX
>> 0x0001 00001 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:173) MOVQ "".f+8(SP), AX
>> 0x0006 00006 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:144) MOVQ $9223372036854775807, CX
>> 0x0010 00016 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:144) CMPQ AX, CX
>> 0x0013 00019 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:173) JNE 34
>> 0x0015 00021 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:174) MOVQ "".NaN(SB), AX
>> 0x001c 00028 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:174) MOVQ AX, "".~r1+24(SP)
>> 0x0021 00033 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:174) RET
>> 0x0022 00034 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:173) XCHGL AX, AX
>> 0x0023 00035 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:144) MOVQ "".f0+16(SP), DX
>> 0x0028 00040 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:144) CMPQ DX, CX
>> 0x002b 00043 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:173) JEQ 21
>> 0x002d 00045 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:176) ADDQ DX, AX
>> 0x0030 00048 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:176) MOVQ AX, "".~r1+24(SP)
>> 0x0035 00053 (/Users/robertengels/go/src/
>> github.com/robaho/fixed/fixed.go:176) RET
>> 0x0000 90 48 8b 44 24 08 48 b9 ff ff ff ff ff ff ff 7f  .H.D$.H.........
>> 0x0010 48 39 c8 75 0d 48 8b 05 00 00 00 00 48 89 44 24  H9.u.H......H.D$
>> 0x0020 18 c3 90 48 8b 54 24 10 48 39 ca 74 e8 48 01 d0  ...H.T$.H9.t.H..
>> 0x0030 48 89 44 24 18 c3                                H.D$..
>> rel 24+4 t=15 "".NaN+0
>>
>>
>>
>> On Apr 26, 2024, at 6:20 AM, Robert Engels <ren...@ix.netcom.com> wrote:
>>
>> I agree but in this case it is very consistent. Even if that were the
>> case, wouldn’t that mean that 1.12 had better optimization in this case?
>>
>> I will dig in today and report back with the generated code.
>>
>> On Apr 26, 2024, at 12:17 AM, 'Keith Randall' via golang-nuts <
>> golan...@googlegroups.com> wrote:
>>
>> > There is a pretty significant degradation in AddFixed() which may be
>> concerning to the Go team
>>
>> What is the benchmark for this?
>> I am usually suspicious of sub-nanosecond benchmark times. Generally that
>> indicates that the benchmark completely optimized away and all you are
>> measuring is an empty loop.
>> Hard to know for sure without looking at the generated code for
>> BenchmarkAddFixed.
>>
>> On Thursday, April 25, 2024 at 10:54:42 AM UTC-7 Robert Engels wrote:
>>
>>> There is a pretty significant degradation in AddFixed() which may be
>>> concerning to the Go team, because the code
>>> <https://github.com/robaho/fixed/blob/158d835fa7fc6facd3194b8de6ba7efa2580579d/fixed.go#L172>
>>>  of
>>> AddFixed is simply:
>>>
>>> // Add adds f0 to f producing a Fixed. If either operand is NaN, NaN is
>>> returned
>>> func (f Fixed) Add(f0 Fixed) Fixed {
>>>     if f.IsNaN() || f0.IsNaN() {
>>>         return NaN
>>>     }
>>>     return Fixed{fp: f.fp + f0.fp}
>>> }
>>>
>>> Here is the combined output:
>>>
>>>                  │ go1.12.17.txt │             go1.21.5.txt             │   
>>>           go1.22.2.txt             │
>>>                  │    sec/op     │    sec/op      vs base               │   
>>>  sec/op      vs base               │
>>> AddFixed-8         0.6000n ±  2%   0.9593n ±  1%  +59.89% (p=0.002 n=6)   
>>> 0.8012n ± 12%  +33.53% (p=0.002 n=6)
>>> AddDecimal-8       246.00n ±  1%    66.47n ± 14%  -72.98% (p=0.002 n=6)    
>>> 66.23n ±  1%  -73.08% (p=0.002 n=6)
>>> AddBigInt-8        14.400n ±  1%    9.560n ±  2%  -33.61% (p=0.002 n=6)    
>>> 9.525n ±  7%  -33.85% (p=0.002 n=6)
>>> AddBigFloat-8       79.90n ±  3%    63.09n ±  0%  -21.03% (p=0.002 n=6)    
>>> 66.20n ±  1%  -17.15% (p=0.002 n=6)
>>> MulFixed-8          4.950n ±  3%    3.512n ±  0%  -29.04% (p=0.002 n=6)    
>>> 3.809n ±  2%  -23.06% (p=0.002 n=6)
>>> MulDecimal-8        73.45n ±  3%    65.90n ±  0%  -10.29% (p=0.002 n=6)    
>>> 67.20n ±  1%   -8.52% (p=0.002 n=6)
>>> MulBigInt-8         17.45n ±  1%    10.38n ±  2%  -40.52% (p=0.002 n=6)    
>>> 10.43n ±  1%  -40.23% (p=0.002 n=6)
>>> MulBigFloat-8       36.00n ±  2%    23.85n ±  1%  -33.75% (p=0.002 n=6)    
>>> 24.00n ±  1%  -33.35% (p=0.002 n=6)
>>> DivFixed-8          4.700n ±  1%    3.689n ±  1%  -21.51% (p=0.002 n=6)    
>>> 3.695n ±  2%  -21.39% (p=0.002 n=6)
>>> DivDecimal-8        767.0n ± 11%    462.9n ±  0%  -39.65% (p=0.002 n=6)    
>>> 470.4n ±  4%  -38.68% (p=0.002 n=6)
>>> DivBigInt-8         45.25n ±  1%    34.68n ± 10%  -23.36% (p=0.002 n=6)    
>>> 34.98n ±  1%  -22.70% (p=0.002 n=6)
>>> DivBigFloat-8       108.0n ±  1%    110.8n ±  0%   +2.64% (p=0.002 n=6)    
>>> 113.6n ±  0%   +5.19% (p=0.002 n=6)
>>> CmpFixed-8         0.3800n ±  3%   0.2500n ±  1%  -34.22% (p=0.002 n=6)   
>>> 0.2511n ±  1%  -33.92% (p=0.002 n=6)
>>> CmpDecimal-8        7.925n ±  1%    6.942n ±  1%  -12.40% (p=0.002 n=6)    
>>> 6.503n ±  1%  -17.94% (p=0.002 n=6)
>>> CmpBigInt-8         5.800n ±  0%    4.795n ±  2%  -17.32% (p=0.002 n=6)    
>>> 4.807n ±  1%  -17.12% (p=0.002 n=6)
>>> CmpBigFloat-8       5.310n ±  2%    4.417n ±  1%  -16.83% (p=0.002 n=6)    
>>> 4.475n ±  9%  -15.73% (p=0.002 n=6)
>>> StringFixed-8       57.10n ±  9%    50.40n ±  1%  -11.73% (p=0.002 n=6)    
>>> 50.70n ±  1%  -11.22% (p=0.002 n=6)
>>> StringNFixed-8      55.60n ±  0%    51.41n ± 15%        ~ (p=0.061 n=6)    
>>> 49.78n ±  1%  -10.48% (p=0.002 n=6)
>>> StringDecimal-8     216.0n ±  2%    215.2n ± 21%        ~ (p=1.000 n=6)    
>>> 197.2n ±  0%   -8.68% (p=0.002 n=6)
>>> StringBigInt-8     121.00n ±  1%    98.81n ±  1%  -18.33% (p=0.002 n=6)    
>>> 98.61n ±  4%  -18.50% (p=0.002 n=6)
>>> StringBigFloat-8    413.0n ±  3%    387.6n ±  1%   -6.15% (p=0.002 n=6)    
>>> 408.4n ±  2%   -1.10% (p=0.026 n=6)
>>> WriteTo-8           37.15n ± 15%    26.14n ± 45%  -29.65% (p=0.041 n=6)    
>>> 26.40n ± 40%  -28.94% (p=0.015 n=6)
>>> geomean             28.20n          21.86n        -22.49%                  
>>> 21.79n        -22.76%
>>>                                                                             
>>>                                                                             
>>>                                                                             
>>>                                           │ go1.12.17.txt  │             
>>> go1.21.5.txt             │             go1.22.2.txt             │
>>>                  │      B/op      │    B/op      vs base                 │  
>>>   B/op      vs base                 │
>>> AddFixed-8          0.000 ±  0%     0.000 ±  0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ±  0%        ~ (p=1.000 n=6) ¹
>>> AddDecimal-8       176.00 ±  0%     80.00 ±  0%  -54.55% (p=0.002 n=6)     
>>> 80.00 ±  0%  -54.55% (p=0.002 n=6)
>>> AddBigInt-8         0.000 ±  0%     0.000 ±  0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ±  0%        ~ (p=1.000 n=6) ¹
>>> AddBigFloat-8       48.00 ±  0%     48.00 ±  0%        ~ (p=1.000 n=6) ¹   
>>> 48.00 ±  0%        ~ (p=1.000 n=6) ¹
>>> MulFixed-8          0.000 ±  0%     0.000 ±  0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ±  0%        ~ (p=1.000 n=6) ¹
>>> MulDecimal-8        80.00 ±  0%     80.00 ±  0%        ~ (p=1.000 n=6) ¹   
>>> 80.00 ±  0%        ~ (p=1.000 n=6) ¹
>>> MulBigInt-8         0.000 ±  0%     0.000 ±  0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ±  0%        ~ (p=1.000 n=6) ¹
>>> MulBigFloat-8       0.000 ±  0%     0.000 ±  0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ±  0%        ~ (p=1.000 n=6) ¹
>>> DivFixed-8          0.000 ±  0%     0.000 ±  0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ±  0%        ~ (p=1.000 n=6) ¹
>>> DivDecimal-8        568.0 ±  0%     384.0 ±  0%  -32.39% (p=0.002 n=6)     
>>> 384.0 ±  0%  -32.39% (p=0.002 n=6)
>>> DivBigInt-8         8.000 ±  0%     8.000 ±  0%        ~ (p=1.000 n=6) ¹   
>>> 8.000 ±  0%        ~ (p=1.000 n=6) ¹
>>> DivBigFloat-8       24.00 ±  0%     24.00 ±  0%        ~ (p=1.000 n=6) ¹   
>>> 24.00 ±  0%        ~ (p=1.000 n=6) ¹
>>> CmpFixed-8          0.000 ±  0%     0.000 ±  0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ±  0%        ~ (p=1.000 n=6) ¹
>>> CmpDecimal-8        0.000 ±  0%     0.000 ±  0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ±  0%        ~ (p=1.000 n=6) ¹
>>> CmpBigInt-8         0.000 ±  0%     0.000 ±  0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ±  0%        ~ (p=1.000 n=6) ¹
>>> CmpBigFloat-8       0.000 ±  0%     0.000 ±  0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ±  0%        ~ (p=1.000 n=6) ¹
>>> StringFixed-8       32.00 ±  0%     24.00 ±  0%  -25.00% (p=0.002 n=6)     
>>> 24.00 ±  0%  -25.00% (p=0.002 n=6)
>>> StringNFixed-8      32.00 ±  0%     24.00 ±  0%  -25.00% (p=0.002 n=6)     
>>> 24.00 ±  0%  -25.00% (p=0.002 n=6)
>>> StringDecimal-8     64.00 ±  0%     56.00 ±  0%  -12.50% (p=0.002 n=6)     
>>> 56.00 ±  0%  -12.50% (p=0.002 n=6)
>>> StringBigInt-8      24.00 ±  0%     16.00 ±  0%  -33.33% (p=0.002 n=6)     
>>> 16.00 ±  0%  -33.33% (p=0.002 n=6)
>>> StringBigFloat-8    192.0 ±  0%     176.0 ±  0%   -8.33% (p=0.002 n=6)     
>>> 176.0 ±  0%   -8.33% (p=0.002 n=6)
>>> WriteTo-8           21.00 ± 14%     23.00 ± 13%   +9.52% (p=0.002 n=6)     
>>> 23.00 ± 13%   +9.52% (p=0.002 n=6)
>>> geomean                         ²                 -9.89%               ²    
>>>              -9.89%               ²
>>> ¹ all samples are equal
>>> ² summaries must be >0 to compute geomean
>>>                                                                             
>>>                                                                             
>>>                                                                             
>>>                                           │ go1.12.17.txt │            
>>> go1.21.5.txt             │            go1.22.2.txt             │
>>>                  │   allocs/op   │ allocs/op   vs base                 │ 
>>> allocs/op   vs base                 │
>>> AddFixed-8          0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> AddDecimal-8        8.000 ± 0%     2.000 ± 0%  -75.00% (p=0.002 n=6)     
>>> 2.000 ± 0%  -75.00% (p=0.002 n=6)
>>> AddBigInt-8         0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> AddBigFloat-8       1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 1.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> MulFixed-8          0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> MulDecimal-8        2.000 ± 0%     2.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 2.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> MulBigInt-8         0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> MulBigFloat-8       0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> DivFixed-8          0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> DivDecimal-8        21.00 ± 0%     12.00 ± 0%  -42.86% (p=0.002 n=6)     
>>> 12.00 ± 0%  -42.86% (p=0.002 n=6)
>>> DivBigInt-8         1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 1.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> DivBigFloat-8       2.000 ± 0%     2.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 2.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> CmpFixed-8          0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> CmpDecimal-8        0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> CmpBigInt-8         0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> CmpBigFloat-8       0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> StringFixed-8       1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 1.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> StringNFixed-8      1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 1.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> StringDecimal-8     5.000 ± 0%     4.000 ± 0%  -20.00% (p=0.002 n=6)     
>>> 4.000 ± 0%  -20.00% (p=0.002 n=6)
>>> StringBigInt-8      2.000 ± 0%     1.000 ± 0%  -50.00% (p=0.002 n=6)     
>>> 1.000 ± 0%  -50.00% (p=0.002 n=6)
>>> StringBigFloat-8    8.000 ± 0%     7.000 ± 0%  -12.50% (p=0.002 n=6)     
>>> 7.000 ± 0%  -12.50% (p=0.002 n=6)
>>> WriteTo-8           0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹   
>>> 0.000 ± 0%        ~ (p=1.000 n=6) ¹
>>> geomean                        ²               -12.73%               ²      
>>>          -12.73%               ²
>>> ¹ all samples are equal
>>> ² summaries must be >0 to compute geomean
>>>
>>>
>>> On Apr 25, 2024, at 12:25 PM, Robert Engels <rob...@me.com> wrote:
>>>
>>> Thanks. I noticed those but didn’t look into how to address. Appreciate
>>> it. I will rerun.
>>>
>>> On Apr 25, 2024, at 12:23 PM, Steven Hartland <stevenm...@gmail.com>
>>> wrote:
>>>
>>> Thanks for these, not sure if you noticed the notes from each run e.g. need
>>> >= 4 samples to detect a difference at alpha level 0.05.
>>>
>>> Basically run the benchmark with a -count=6 or more and then run the
>>> tool, and you get a the comparison values which are typically the
>>> interesting bit
>>>
>>> On Thu, 25 Apr 2024 at 00:29, Robert Engels <rob...@me.com> wrote:
>>>
>>>>                  │ /Users/robertengels/go1.21.5.txt │   
>>>> /Users/robertengels/go1.22.2.txt    │
>>>>                  │              sec/op              │    sec/op      vs 
>>>> base                │
>>>> AddFixed-8                            0.9603n ± ∞ ¹   0.7931n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> AddDecimal-8                           66.41n ± ∞ ¹    66.27n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> AddBigInt-8                            9.452n ± ∞ ¹   10.650n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> AddBigFloat-8                          63.26n ± ∞ ¹    66.33n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> MulFixed-8                             3.519n ± ∞ ¹    3.939n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> MulDecimal-8                           65.98n ± ∞ ¹    67.07n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> MulBigInt-8                            10.69n ± ∞ ¹    10.49n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> MulBigFloat-8                          23.72n ± ∞ ¹    24.12n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> DivFixed-8                             3.675n ± ∞ ¹    3.661n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> DivDecimal-8                           460.8n ± ∞ ¹    469.6n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> DivBigInt-8                            34.82n ± ∞ ¹    34.90n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> DivBigFloat-8                          110.4n ± ∞ ¹    113.6n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> CmpFixed-8                            0.2529n ± ∞ ¹   0.2784n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> CmpDecimal-8                           6.883n ± ∞ ¹    6.475n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> CmpBigInt-8                            4.779n ± ∞ ¹    4.805n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> CmpBigFloat-8                          4.411n ± ∞ ¹    5.081n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> StringFixed-8                          50.36n ± ∞ ¹    50.64n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> StringNFixed-8                         53.41n ± ∞ ¹    49.66n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> StringDecimal-8                        197.6n ± ∞ ¹    197.0n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> StringBigInt-8                         98.17n ± ∞ ¹    98.00n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> StringBigFloat-8                       386.2n ± ∞ ¹    395.2n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> WriteTo-8                              31.82n ± ∞ ¹    31.71n ± ∞ ¹       
>>>> ~ (p=1.000 n=1) ²
>>>> geomean                                22.01n          22.28n        +1.26%
>>>> ¹ need >= 6 samples for confidence interval at level 0.95
>>>> ² need >= 4 samples to detect a difference at alpha level 0.05
>>>>                                                                            
>>>>                                                                            
>>>>                                                                            
>>>>                                                                │ 
>>>> /Users/robertengels/go1.21.5.txt │  /Users/robertengels/go1.22.2.txt   │
>>>>                  │               B/op               │    B/op      vs base 
>>>>                │
>>>> AddFixed-8                              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> AddDecimal-8                            80.00 ± ∞ ¹   80.00 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> AddBigInt-8                             0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> AddBigFloat-8                           48.00 ± ∞ ¹   48.00 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> MulFixed-8                              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> MulDecimal-8                            80.00 ± ∞ ¹   80.00 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> MulBigInt-8                             0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> MulBigFloat-8                           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> DivFixed-8                              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> DivDecimal-8                            384.0 ± ∞ ¹   384.0 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> DivBigInt-8                             8.000 ± ∞ ¹   8.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> DivBigFloat-8                           24.00 ± ∞ ¹   24.00 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> CmpFixed-8                              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> CmpDecimal-8                            0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> CmpBigInt-8                             0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> CmpBigFloat-8                           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> StringFixed-8                           24.00 ± ∞ ¹   24.00 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> StringNFixed-8                          24.00 ± ∞ ¹   24.00 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> StringDecimal-8                         56.00 ± ∞ ¹   56.00 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> StringBigInt-8                          16.00 ± ∞ ¹   16.00 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> StringBigFloat-8                        176.0 ± ∞ ¹   176.0 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> WriteTo-8                               29.00 ± ∞ ¹   28.00 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ³
>>>> geomean                                           ⁴                -0.16%  
>>>>              ⁴
>>>> ¹ need >= 6 samples for confidence interval at level 0.95
>>>> ² all samples are equal
>>>> ³ need >= 4 samples to detect a difference at alpha level 0.05
>>>> ⁴ summaries must be >0 to compute geomean
>>>>                                                                            
>>>>                                                                            
>>>>                                                                            
>>>>                                                                │ 
>>>> /Users/robertengels/go1.21.5.txt │  /Users/robertengels/go1.22.2.txt   │
>>>>                  │            allocs/op             │  allocs/op   vs base 
>>>>                │
>>>> AddFixed-8                              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> AddDecimal-8                            2.000 ± ∞ ¹   2.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> AddBigInt-8                             0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> AddBigFloat-8                           1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> MulFixed-8                              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> MulDecimal-8                            2.000 ± ∞ ¹   2.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> MulBigInt-8                             0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> MulBigFloat-8                           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> DivFixed-8                              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> DivDecimal-8                            12.00 ± ∞ ¹   12.00 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> DivBigInt-8                             1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> DivBigFloat-8                           2.000 ± ∞ ¹   2.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> CmpFixed-8                              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> CmpDecimal-8                            0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> CmpBigInt-8                             0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> CmpBigFloat-8                           0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> StringFixed-8                           1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> StringNFixed-8                          1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> StringDecimal-8                         4.000 ± ∞ ¹   4.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> StringBigInt-8                          1.000 ± ∞ ¹   1.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> StringBigFloat-8                        7.000 ± ∞ ¹   7.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> WriteTo-8                               0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ 
>>>> (p=1.000 n=1) ²
>>>> geomean                                           ³                +0.00%  
>>>>              ³
>>>>
>>>>
>>>> On Apr 24, 2024, at 6:20 PM, Steven Hartland <stevenm...@gmail.com>
>>>> wrote:
>>>>
>>>> What’s it look like when your run it through
>>>> https://pkg.go.dev/golang.org/x/perf/cmd/benchstat which will provide
>>>> a nice side by side comparison?
>>>>
>>>> On Wed, 24 Apr 2024 at 19:26, 'Robert Engels' via golang-nuts <
>>>> golan...@googlegroups.com> wrote:
>>>>
>>>>> I have a fairly stable project github.com/robaho/fixed which is
>>>>> almost 100% cpu bound. It doesn’t change so it makes a great way to 
>>>>> compare
>>>>> the performance of different Go versions using the same hardware. I took
>>>>> the time to re-run the tests today.
>>>>>
>>>>> Using 1.21.17:
>>>>>
>>>>> BenchmarkAddFixed-8             2000000000               0.59 ns/op       
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkAddDecimal-8            5000000               243 ns/op          
>>>>>    176 B/op          8 allocs/op
>>>>> BenchmarkAddBigInt-8            100000000               14.3 ns/op        
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkAddBigFloat-8          20000000                78.8 ns/op        
>>>>>     48 B/op          1 allocs/op
>>>>> BenchmarkMulFixed-8             300000000                4.88 ns/op       
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkMulDecimal-8           20000000                72.0 ns/op        
>>>>>     80 B/op          2 allocs/op
>>>>> BenchmarkMulBigInt-8            100000000               17.1 ns/op        
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkMulBigFloat-8          30000000                35.5 ns/op        
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkDivFixed-8             300000000                4.71 ns/op       
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkDivDecimal-8            2000000               779 ns/op          
>>>>>    568 B/op         21 allocs/op
>>>>> BenchmarkDivBigInt-8            30000000                46.1 ns/op        
>>>>>      8 B/op          1 allocs/op
>>>>> BenchmarkDivBigFloat-8          20000000               108 ns/op          
>>>>>     24 B/op          2 allocs/op
>>>>> BenchmarkCmpFixed-8             2000000000               0.38 ns/op       
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkCmpDecimal-8           200000000                8.05 ns/op       
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkCmpBigInt-8            300000000                5.87 ns/op       
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkCmpBigFloat-8          300000000                5.46 ns/op       
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkStringFixed-8          20000000                57.4 ns/op        
>>>>>     32 B/op          1 allocs/op
>>>>> BenchmarkStringNFixed-8         20000000                55.6 ns/op        
>>>>>     32 B/op          1 allocs/op
>>>>> BenchmarkStringDecimal-8        10000000               218 ns/op          
>>>>>     64 B/op          5 allocs/op
>>>>> BenchmarkStringBigInt-8         10000000               122 ns/op          
>>>>>     24 B/op          2 allocs/op
>>>>> BenchmarkStringBigFloat-8        3000000               416 ns/op          
>>>>>    192 B/op          8 allocs/op
>>>>> BenchmarkWriteTo-8              30000000                45.8 ns/op        
>>>>>     18 B/op          0 allocs/op
>>>>>
>>>>>
>>>>> and version 1.21.5:
>>>>>
>>>>> BenchmarkAddFixed-8             1000000000               0.9735 ns/op     
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkAddDecimal-8           14311995                69.99 ns/op       
>>>>>     80 B/op          2 allocs/op
>>>>> BenchmarkAddBigInt-8            100000000               13.42 ns/op       
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkAddBigFloat-8          17506702                63.84 ns/op       
>>>>>     48 B/op          1 allocs/op
>>>>> BenchmarkMulFixed-8             313983104                3.732 ns/op      
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkMulDecimal-8           18046520                66.59 ns/op       
>>>>>     80 B/op          2 allocs/op
>>>>> BenchmarkMulBigInt-8            100000000               10.79 ns/op       
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkMulBigFloat-8          49186024                24.30 ns/op       
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkDivFixed-8             306888069                3.721 ns/op      
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkDivDecimal-8            2510688               462.4 ns/op        
>>>>>    384 B/op         12 allocs/op
>>>>> BenchmarkDivBigInt-8            33993822                37.02 ns/op       
>>>>>      8 B/op          1 allocs/op
>>>>> BenchmarkDivBigFloat-8           9415330               111.5 ns/op        
>>>>>     24 B/op          2 allocs/op
>>>>> BenchmarkCmpFixed-8             1000000000               0.2548 ns/op     
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkCmpDecimal-8           168714549                7.086 ns/op      
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkCmpBigInt-8            234895634                4.952 ns/op      
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkCmpBigFloat-8          260814464                4.503 ns/op      
>>>>>      0 B/op          0 allocs/op
>>>>> BenchmarkStringFixed-8          23725470                50.57 ns/op       
>>>>>     24 B/op          1 allocs/op
>>>>> BenchmarkStringNFixed-8         23666628                50.67 ns/op       
>>>>>     24 B/op          1 allocs/op
>>>>> BenchmarkStringDecimal-8         5665790               200.1 ns/op        
>>>>>     56 B/op          4 allocs/op
>>>>> BenchmarkStringBigInt-8         10596398               100.2 ns/op        
>>>>>     16 B/op          1 allocs/op
>>>>> BenchmarkStringBigFloat-8        2922332               391.2 ns/op        
>>>>>    176 B/op          7 allocs/op
>>>>> BenchmarkWriteTo-8              45734523                31.53 ns/op       
>>>>>     23 B/op          0 allocs/op
>>>>>
>>>>> which is pretty impressive across the board.
>>>>>
>>>>> Only 2 tests show any degradation and most show significant
>>>>> improvement.
>>>>>
>>>>> On the two that degrade, AddFixed is a fairly trivial add of 2 longs,
>>>>> so that is surprising. Strangely, WriteTo shows a different number of B/op
>>>>> on different runs (all of the other tests are stable).
>>>>>
>>>>> --
>>>>> 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...@googlegroups.com.
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/golang-nuts/A6412E4C-03BD-477B-A725-06510DDD618A%40me.com
>>>>> <https://groups.google.com/d/msgid/golang-nuts/A6412E4C-03BD-477B-A725-06510DDD618A%40me.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>>
>>>>
>>>
>>>
>> --
>> 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...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/golang-nuts/834a058c-83de-4fef-8d40-adb4e709d03cn%40googlegroups.com
>> <https://groups.google.com/d/msgid/golang-nuts/834a058c-83de-4fef-8d40-adb4e709d03cn%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>>
>> --
>> 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...@googlegroups.com.
>>
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/golang-nuts/E488D2A7-780E-487A-9FCC-51844AB9BED2%40ix.netcom.com
>> <https://groups.google.com/d/msgid/golang-nuts/E488D2A7-780E-487A-9FCC-51844AB9BED2%40ix.netcom.com?utm_medium=email&utm_source=footer>
>> .
>>
>>
>>
> --
> 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/7287234a-8bf7-4a36-944c-314090fbd57cn%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/7287234a-8bf7-4a36-944c-314090fbd57cn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>
> --
> 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/7AC00FD1-4403-4636-B805-D72707AC15AD%40ix.netcom.com
> <https://groups.google.com/d/msgid/golang-nuts/7AC00FD1-4403-4636-B805-D72707AC15AD%40ix.netcom.com?utm_medium=email&utm_source=footer>
> .
>
>
> --
> 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/36A95EB4-F84E-42BE-A1B7-D091467F9483%40ix.netcom.com
> <https://groups.google.com/d/msgid/golang-nuts/36A95EB4-F84E-42BE-A1B7-D091467F9483%40ix.netcom.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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/CAA38peZNpYXHDgPJhWGU%2BgSq5xbc68Pmos4v80-auqOGxvviGA%40mail.gmail.com.

Reply via email to