Skip to content

[Perf] Windows/x64: 6 Improvements on 2/1/2023 10:12:25 AM #12470

Closed
@performanceautofiler

Description

@performanceautofiler

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 9e05d3347be231ae1bfcc7037ddecfb5c4ca51a1
Compare 120b7215c9d029fccee94f46864494d79074a0eb
Diff Diff

Improvements in System.Hashing

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
GetStringHashCode - Duration of single invocation 5.12 μs 4.26 μs 0.83 0.01 False 31745.111037454426 34131.52333700845 1.075174167661232 Trace Trace
GetStringHashCode - Duration of single invocation 514.99 ns 428.98 ns 0.83 0.01 False 3175.6621522449796 3422.664731656945 1.0777798668656713 Trace Trace
GetStringHashCode - Duration of single invocation 49.90 ns 41.99 ns 0.84 0.01 False 348.72924267701086 371.19905279971624 1.0644333981005334 Trace Trace

graph
graph
graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Hashing*'

Payloads

Baseline
Compare

Histogram

System.Hashing.GetStringHashCode(BytesCount: 10000)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 4.259457129225736 < 4.861916816841414.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/1/2023 8:39:12 AM, 2/7/2023 2:48:42 AM falls between 1/29/2023 12:56:15 AM and 2/7/2023 2:48:42 AM.
IsImprovementStdDev: Marked as improvement because 15.707760337442279 (T) = (0 -4263.181749355853) / Math.Sqrt((161829.14493258545 / (299)) + (49.53276489203591 / (31))) is greater than 1.9672228266464409 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (31) - 2, .975) and 0.07905796095664383 = (4629.153159067756 - 4263.181749355853) / 4629.153159067756 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Hashing.GetStringHashCode()
       mov       rcx,[rcx+8]
       mov       edx,[rcx+8]
       add       edx,edx
       add       rcx,0C
       mov       r8d,498B3E8A
       mov       r9d,0EE34D32B
       jmp       qword ptr [7FFE37DD77E0]; System.Marvin.ComputeHash32(Byte ByRef, UInt32, UInt32, UInt32)
; Total bytes of code 31
; System.Marvin.ComputeHash32(Byte ByRef, UInt32, UInt32, UInt32)
       cmp       edx,8
       jb        near ptr M01_L04
       mov       eax,edx
       shr       eax,3
       xchg      ax,ax
M01_L00:
       add       r8d,[rcx]
       mov       r10d,[rcx+4]
       xor       r9d,r8d
       rol       r8d,14
       add       r8d,r9d
       rol       r9d,9
       xor       r9d,r8d
       rol       r8d,1B
       add       r8d,r9d
       rol       r9d,13
       add       r10d,r8d
       mov       r8d,r9d
       xor       r8d,r10d
       rol       r10d,14
       add       r10d,r8d
       rol       r8d,9
       xor       r8d,r10d
       rol       r10d,1B
       add       r10d,r8d
       rol       r8d,13
       mov       r9d,r10d
       add       rcx,8
       dec       eax
       xchg      r8,r9
       jne       short M01_L00
       test      dl,4
       jne       short M01_L03
M01_L01:
       mov       eax,edx
       and       rax,7
       mov       eax,[rcx+rax-4]
       shr       eax,8
       or        eax,80000000
       not       edx
       shl       edx,3
       shrx      eax,eax,edx
M01_L02:
       add       eax,r8d
       mov       ecx,r9d
       xor       ecx,eax
       rol       eax,14
       add       eax,ecx
       rol       ecx,9
       xor       ecx,eax
       rol       eax,1B
       add       eax,ecx
       rol       ecx,13
       mov       edx,ecx
       xor       edx,eax
       rol       eax,14
       add       eax,edx
       rol       edx,9
       xor       edx,eax
       rol       eax,1B
       add       eax,edx
       mov       r8d,edx
       rol       r8d,13
       xor       eax,r8d
       ret
M01_L03:
       add       r8d,[rcx]
       xor       r9d,r8d
       rol       r8d,14
       add       r8d,r9d
       rol       r9d,9
       xor       r9d,r8d
       rol       r8d,1B
       add       r8d,r9d
       rol       r9d,13
       jmp       short M01_L01
M01_L04:
       cmp       edx,4
       jae       short M01_L03
       mov       eax,80
       test      dl,1
       jne       short M01_L06
M01_L05:
       test      dl,2
       je        short M01_L02
       shl       eax,10
       movzx     ecx,word ptr [rcx]
       or        eax,ecx
       jmp       short M01_L02
M01_L06:
       mov       eax,edx
       and       rax,2
       movzx     eax,byte ptr [rcx+rax]
       or        eax,8000
       jmp       short M01_L05
; Total bytes of code 268

Compare Jit Disasm

; System.Hashing.GetStringHashCode()
       mov       rcx,[rcx+8]
       mov       edx,[rcx+8]
       add       edx,edx
       add       rcx,0C
       mov       r8d,8F11EC8C
       mov       r9d,0AC2DCF33
       jmp       qword ptr [7FFD15EF77E0]; System.Marvin.ComputeHash32(Byte ByRef, UInt32, UInt32, UInt32)
; Total bytes of code 31
; System.Marvin.ComputeHash32(Byte ByRef, UInt32, UInt32, UInt32)
       cmp       edx,8
       jb        near ptr M01_L04
       mov       eax,edx
       shr       eax,3
       xchg      ax,ax
M01_L00:
       add       r8d,[rcx]
       mov       r10d,[rcx+4]
       xor       r9d,r8d
       rol       r8d,14
       add       r8d,r9d
       rol       r9d,9
       xor       r9d,r8d
       rol       r8d,1B
       add       r8d,r9d
       rol       r9d,13
       add       r10d,r8d
       mov       r8d,r9d
       xor       r8d,r10d
       rol       r10d,14
       add       r10d,r8d
       rol       r8d,9
       xor       r8d,r10d
       rol       r10d,1B
       add       r10d,r8d
       rol       r8d,13
       mov       r9d,r10d
       add       rcx,8
       dec       eax
       mov       r10d,r8d
       mov       r8d,r9d
       mov       r9d,r10d
       jne       short M01_L00
       test      dl,4
       jne       short M01_L03
M01_L01:
       mov       eax,edx
       and       rax,7
       mov       eax,[rcx+rax-4]
       shr       eax,8
       or        eax,80000000
       not       edx
       shl       edx,3
       shrx      eax,eax,edx
M01_L02:
       add       eax,r8d
       mov       ecx,r9d
       xor       ecx,eax
       rol       eax,14
       add       eax,ecx
       rol       ecx,9
       xor       ecx,eax
       rol       eax,1B
       add       eax,ecx
       rol       ecx,13
       mov       edx,ecx
       xor       edx,eax
       rol       eax,14
       add       eax,edx
       rol       edx,9
       xor       edx,eax
       rol       eax,1B
       add       eax,edx
       mov       r8d,edx
       rol       r8d,13
       xor       eax,r8d
       ret
M01_L03:
       add       r8d,[rcx]
       xor       r9d,r8d
       rol       r8d,14
       add       r8d,r9d
       rol       r9d,9
       xor       r9d,r8d
       rol       r8d,1B
       add       r8d,r9d
       rol       r9d,13
       jmp       short M01_L01
M01_L04:
       cmp       edx,4
       jae       short M01_L03
       mov       eax,80
       test      dl,1
       jne       short M01_L06
M01_L05:
       test      dl,2
       je        short M01_L02
       shl       eax,10
       movzx     ecx,word ptr [rcx]
       or        eax,ecx
       jmp       short M01_L02
M01_L06:
       mov       eax,edx
       and       rax,2
       movzx     eax,byte ptr [rcx+rax]
       or        eax,8000
       jmp       short M01_L05
; Total bytes of code 274

System.Hashing.GetStringHashCode(BytesCount: 1000)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 428.9754413334806 < 488.01522508966644.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/1/2023 8:39:12 AM, 2/7/2023 2:48:42 AM falls between 1/29/2023 12:56:15 AM and 2/7/2023 2:48:42 AM.
IsImprovementStdDev: Marked as improvement because 14.934018603798679 (T) = (0 -429.3133211633172) / Math.Sqrt((1635.753798625906 / (299)) + (0.5051821819107114 / (31))) is greater than 1.9672228266464409 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (31) - 2, .975) and 0.07534449588915947 = (464.29542597721286 - 429.3133211633172) / 464.29542597721286 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Hashing.GetStringHashCode()
       mov       rcx,[rcx+8]
       mov       edx,[rcx+8]
       add       edx,edx
       add       rcx,0C
       mov       r8d,2097B732
       mov       r9d,0FC5889B6
       jmp       qword ptr [7FFE37DE77E0]; System.Marvin.ComputeHash32(Byte ByRef, UInt32, UInt32, UInt32)
; Total bytes of code 31
; System.Marvin.ComputeHash32(Byte ByRef, UInt32, UInt32, UInt32)
       cmp       edx,8
       jb        near ptr M01_L04
       mov       eax,edx
       shr       eax,3
       xchg      ax,ax
M01_L00:
       add       r8d,[rcx]
       mov       r10d,[rcx+4]
       xor       r9d,r8d
       rol       r8d,14
       add       r8d,r9d
       rol       r9d,9
       xor       r9d,r8d
       rol       r8d,1B
       add       r8d,r9d
       rol       r9d,13
       add       r10d,r8d
       mov       r8d,r9d
       xor       r8d,r10d
       rol       r10d,14
       add       r10d,r8d
       rol       r8d,9
       xor       r8d,r10d
       rol       r10d,1B
       add       r10d,r8d
       rol       r8d,13
       mov       r9d,r10d
       add       rcx,8
       dec       eax
       xchg      r8,r9
       jne       short M01_L00
       test      dl,4
       jne       short M01_L03
M01_L01:
       mov       eax,edx
       and       rax,7
       mov       eax,[rcx+rax-4]
       shr       eax,8
       or        eax,80000000
       not       edx
       shl       edx,3
       shrx      eax,eax,edx
M01_L02:
       add       eax,r8d
       mov       ecx,r9d
       xor       ecx,eax
       rol       eax,14
       add       eax,ecx
       rol       ecx,9
       xor       ecx,eax
       rol       eax,1B
       add       eax,ecx
       rol       ecx,13
       mov       edx,ecx
       xor       edx,eax
       rol       eax,14
       add       eax,edx
       rol       edx,9
       xor       edx,eax
       rol       eax,1B
       add       eax,edx
       mov       r8d,edx
       rol       r8d,13
       xor       eax,r8d
       ret
M01_L03:
       add       r8d,[rcx]
       xor       r9d,r8d
       rol       r8d,14
       add       r8d,r9d
       rol       r9d,9
       xor       r9d,r8d
       rol       r8d,1B
       add       r8d,r9d
       rol       r9d,13
       jmp       short M01_L01
M01_L04:
       cmp       edx,4
       jae       short M01_L03
       mov       eax,80
       test      dl,1
       jne       short M01_L06
M01_L05:
       test      dl,2
       je        short M01_L02
       shl       eax,10
       movzx     ecx,word ptr [rcx]
       or        eax,ecx
       jmp       short M01_L02
M01_L06:
       mov       eax,edx
       and       rax,2
       movzx     eax,byte ptr [rcx+rax]
       or        eax,8000
       jmp       short M01_L05
; Total bytes of code 268

Compare Jit Disasm

; System.Hashing.GetStringHashCode()
       mov       rcx,[rcx+8]
       mov       edx,[rcx+8]
       add       edx,edx
       add       rcx,0C
       mov       r8d,21E0CB1B
       mov       r9d,4ED24D25
       jmp       qword ptr [7FFD15EF77E0]; System.Marvin.ComputeHash32(Byte ByRef, UInt32, UInt32, UInt32)
; Total bytes of code 31
; System.Marvin.ComputeHash32(Byte ByRef, UInt32, UInt32, UInt32)
       cmp       edx,8
       jb        near ptr M01_L04
       mov       eax,edx
       shr       eax,3
       xchg      ax,ax
M01_L00:
       add       r8d,[rcx]
       mov       r10d,[rcx+4]
       xor       r9d,r8d
       rol       r8d,14
       add       r8d,r9d
       rol       r9d,9
       xor       r9d,r8d
       rol       r8d,1B
       add       r8d,r9d
       rol       r9d,13
       add       r10d,r8d
       mov       r8d,r9d
       xor       r8d,r10d
       rol       r10d,14
       add       r10d,r8d
       rol       r8d,9
       xor       r8d,r10d
       rol       r10d,1B
       add       r10d,r8d
       rol       r8d,13
       mov       r9d,r10d
       add       rcx,8
       dec       eax
       mov       r10d,r8d
       mov       r8d,r9d
       mov       r9d,r10d
       jne       short M01_L00
       test      dl,4
       jne       short M01_L03
M01_L01:
       mov       eax,edx
       and       rax,7
       mov       eax,[rcx+rax-4]
       shr       eax,8
       or        eax,80000000
       not       edx
       shl       edx,3
       shrx      eax,eax,edx
M01_L02:
       add       eax,r8d
       mov       ecx,r9d
       xor       ecx,eax
       rol       eax,14
       add       eax,ecx
       rol       ecx,9
       xor       ecx,eax
       rol       eax,1B
       add       eax,ecx
       rol       ecx,13
       mov       edx,ecx
       xor       edx,eax
       rol       eax,14
       add       eax,edx
       rol       edx,9
       xor       edx,eax
       rol       eax,1B
       add       eax,edx
       mov       r8d,edx
       rol       r8d,13
       xor       eax,r8d
       ret
M01_L03:
       add       r8d,[rcx]
       xor       r9d,r8d
       rol       r8d,14
       add       r8d,r9d
       rol       r9d,9
       xor       r9d,r8d
       rol       r8d,1B
       add       r8d,r9d
       rol       r9d,13
       jmp       short M01_L01
M01_L04:
       cmp       edx,4
       jae       short M01_L03
       mov       eax,80
       test      dl,1
       jne       short M01_L06
M01_L05:
       test      dl,2
       je        short M01_L02
       shl       eax,10
       movzx     ecx,word ptr [rcx]
       or        eax,ecx
       jmp       short M01_L02
M01_L06:
       mov       eax,edx
       and       rax,2
       movzx     eax,byte ptr [rcx+rax]
       or        eax,8000
       jmp       short M01_L05
; Total bytes of code 274

System.Hashing.GetStringHashCode(BytesCount: 100)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 41.9909952795244 < 47.30019401229703.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/1/2023 8:39:12 AM, 2/7/2023 2:48:42 AM falls between 1/29/2023 12:56:15 AM and 2/7/2023 2:48:42 AM.
IsImprovementStdDev: Marked as improvement because 14.04233906413725 (T) = (0 -42.02601635038894) / Math.Sqrt((14.24359323533544 / (299)) + (0.004230834964311884 / (31))) is greater than 1.9672228266464409 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (31) - 2, .975) and 0.06806184755264275 = (45.09528474612255 - 42.02601635038894) / 45.09528474612255 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Hashing.GetStringHashCode()
       mov       rcx,[rcx+8]
       mov       edx,[rcx+8]
       add       edx,edx
       add       rcx,0C
       mov       r8d,8863D732
       mov       r9d,0A10E1BC4
       jmp       qword ptr [7FFE37DE77E0]; System.Marvin.ComputeHash32(Byte ByRef, UInt32, UInt32, UInt32)
; Total bytes of code 31
; System.Marvin.ComputeHash32(Byte ByRef, UInt32, UInt32, UInt32)
       cmp       edx,8
       jb        near ptr M01_L04
       mov       eax,edx
       shr       eax,3
       xchg      ax,ax
M01_L00:
       add       r8d,[rcx]
       mov       r10d,[rcx+4]
       xor       r9d,r8d
       rol       r8d,14
       add       r8d,r9d
       rol       r9d,9
       xor       r9d,r8d
       rol       r8d,1B
       add       r8d,r9d
       rol       r9d,13
       add       r10d,r8d
       mov       r8d,r9d
       xor       r8d,r10d
       rol       r10d,14
       add       r10d,r8d
       rol       r8d,9
       xor       r8d,r10d
       rol       r10d,1B
       add       r10d,r8d
       rol       r8d,13
       mov       r9d,r10d
       add       rcx,8
       dec       eax
       xchg      r8,r9
       jne       short M01_L00
       test      dl,4
       jne       short M01_L03
M01_L01:
       mov       eax,edx
       and       rax,7
       mov       eax,[rcx+rax-4]
       shr       eax,8
       or        eax,80000000
       not       edx
       shl       edx,3
       shrx      eax,eax,edx
M01_L02:
       add       eax,r8d
       mov       ecx,r9d
       xor       ecx,eax
       rol       eax,14
       add       eax,ecx
       rol       ecx,9
       xor       ecx,eax
       rol       eax,1B
       add       eax,ecx
       rol       ecx,13
       mov       edx,ecx
       xor       edx,eax
       rol       eax,14
       add       eax,edx
       rol       edx,9
       xor       edx,eax
       rol       eax,1B
       add       eax,edx
       mov       r8d,edx
       rol       r8d,13
       xor       eax,r8d
       ret
M01_L03:
       add       r8d,[rcx]
       xor       r9d,r8d
       rol       r8d,14
       add       r8d,r9d
       rol       r9d,9
       xor       r9d,r8d
       rol       r8d,1B
       add       r8d,r9d
       rol       r9d,13
       jmp       short M01_L01
M01_L04:
       cmp       edx,4
       jae       short M01_L03
       mov       eax,80
       test      dl,1
       jne       short M01_L06
M01_L05:
       test      dl,2
       je        short M01_L02
       shl       eax,10
       movzx     ecx,word ptr [rcx]
       or        eax,ecx
       jmp       short M01_L02
M01_L06:
       mov       eax,edx
       and       rax,2
       movzx     eax,byte ptr [rcx+rax]
       or        eax,8000
       jmp       short M01_L05
; Total bytes of code 268

Compare Jit Disasm

; System.Hashing.GetStringHashCode()
       mov       rcx,[rcx+8]
       mov       edx,[rcx+8]
       add       edx,edx
       add       rcx,0C
       mov       r8d,0C1355F7B
       mov       r9d,9B82D83A
       jmp       qword ptr [7FFD15EF77E0]; System.Marvin.ComputeHash32(Byte ByRef, UInt32, UInt32, UInt32)
; Total bytes of code 31
; System.Marvin.ComputeHash32(Byte ByRef, UInt32, UInt32, UInt32)
       cmp       edx,8
       jb        near ptr M01_L04
       mov       eax,edx
       shr       eax,3
       xchg      ax,ax
M01_L00:
       add       r8d,[rcx]
       mov       r10d,[rcx+4]
       xor       r9d,r8d
       rol       r8d,14
       add       r8d,r9d
       rol       r9d,9
       xor       r9d,r8d
       rol       r8d,1B
       add       r8d,r9d
       rol       r9d,13
       add       r10d,r8d
       mov       r8d,r9d
       xor       r8d,r10d
       rol       r10d,14
       add       r10d,r8d
       rol       r8d,9
       xor       r8d,r10d
       rol       r10d,1B
       add       r10d,r8d
       rol       r8d,13
       mov       r9d,r10d
       add       rcx,8
       dec       eax
       mov       r10d,r8d
       mov       r8d,r9d
       mov       r9d,r10d
       jne       short M01_L00
       test      dl,4
       jne       short M01_L03
M01_L01:
       mov       eax,edx
       and       rax,7
       mov       eax,[rcx+rax-4]
       shr       eax,8
       or        eax,80000000
       not       edx
       shl       edx,3
       shrx      eax,eax,edx
M01_L02:
       add       eax,r8d
       mov       ecx,r9d
       xor       ecx,eax
       rol       eax,14
       add       eax,ecx
       rol       ecx,9
       xor       ecx,eax
       rol       eax,1B
       add       eax,ecx
       rol       ecx,13
       mov       edx,ecx
       xor       edx,eax
       rol       eax,14
       add       eax,edx
       rol       edx,9
       xor       edx,eax
       rol       eax,1B
       add       eax,edx
       mov       r8d,edx
       rol       r8d,13
       xor       eax,r8d
       ret
M01_L03:
       add       r8d,[rcx]
       xor       r9d,r8d
       rol       r8d,14
       add       r8d,r9d
       rol       r9d,9
       xor       r9d,r8d
       rol       r8d,1B
       add       r8d,r9d
       rol       r9d,13
       jmp       short M01_L01
M01_L04:
       cmp       edx,4
       jae       short M01_L03
       mov       eax,80
       test      dl,1
       jne       short M01_L06
M01_L05:
       test      dl,2
       je        short M01_L02
       shl       eax,10
       movzx     ecx,word ptr [rcx]
       or        eax,ecx
       jmp       short M01_L02
M01_L06:
       mov       eax,edx
       and       rax,2
       movzx     eax,byte ptr [rcx+rax]
       or        eax,8000
       jmp       short M01_L05
; Total bytes of code 274

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

### Run Information
Architecture x64
OS Windows 10.0.18362
Baseline 9e05d3347be231ae1bfcc7037ddecfb5c4ca51a1
Compare 120b7215c9d029fccee94f46864494d79074a0eb
Diff Diff

Improvements in System.Globalization.Tests.StringHash

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
GetHashCode - Duration of single invocation 135.98 ns 114.95 ns 0.85 0.01 False 895.0379371844866 954.3366896308072 1.0662527810082063 Trace Trace
GetHashCode - Duration of single invocation 134.44 μs 111.63 μs 0.83 0.01 False 831594.2028985507 895108.695652174 1.0763767863367029 Trace Trace

graph
graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Globalization.Tests.StringHash*'

Payloads

Baseline
Compare

Histogram

System.Globalization.Tests.StringHash.GetHashCode(Count: 128, Options: (en-US, Ordinal))


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 114.95352696317407 < 129.23477808924525.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/1/2023 8:39:12 AM, 2/7/2023 2:48:42 AM falls between 1/29/2023 12:56:15 AM and 2/7/2023 2:48:42 AM.
IsImprovementStdDev: Marked as improvement because 14.136652569217915 (T) = (0 -115.14029851298271) / Math.Sqrt((105.9867351408481 / (299)) + (0.2704206597105524 / (31))) is greater than 1.9672228266464409 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (31) - 2, .975) and 0.06889492328261387 = (123.65983323698566 - 115.14029851298271) / 123.65983323698566 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Globalization.Tests.StringHash.GetHashCode()
       push      rsi
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       mov       rsi,rcx
       mov       rcx,[rsi+18]
       mov       rax,[rcx]
       mov       rax,[rax+48]
       call      qword ptr [rax+30]
       mov       rcx,rax
       mov       rdx,[rsi+8]
       mov       r8d,[rsi+20]
       cmp       [rcx],cl
       test      rdx,rdx
       je        short M00_L00
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
       mov       [rsp+20],rax
       mov       [rsp+28],edx
       lea       rdx,[rsp+20]
       call      qword ptr [7FF9B910B768]; System.Globalization.CompareInfo.GetHashCode(System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
       nop
       add       rsp,30
       pop       rsi
       ret
M00_L00:
       mov       ecx,27
       call      qword ptr [7FF9B926D7F8]
       int       3
; Total bytes of code 93
; System.Globalization.CompareInfo.GetHashCode(System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
       sub       rsp,38
       xor       eax,eax
       mov       [rsp+28],rax
       mov       rax,[rdx]
       mov       edx,[rdx+8]
       test      r8d,0DFFFFFE0
       jne       short M01_L01
       mov       [rsp+28],rax
       mov       [rsp+30],edx
       lea       rdx,[rsp+28]
       call      qword ptr [7FF9B910B948]
M01_L00:
       nop
       add       rsp,38
       ret
M01_L01:
       cmp       r8d,40000000
       jne       short M01_L02
       add       edx,edx
       mov       rcx,rax
       mov       r8d,0FCDFA37B
       mov       r9d,99F6C5BE
       call      qword ptr [7FF9B94357E0]; System.Marvin.ComputeHash32(Byte ByRef, UInt32, UInt32, UInt32)
       jmp       short M01_L00
M01_L02:
       cmp       r8d,10000000
       jne       short M01_L03
       mov       rcx,rax
       mov       r8d,0FCDFA37B
       mov       r9d,99F6C5BE
       call      qword ptr [7FF9B9435840]
       jmp       short M01_L00
M01_L03:
       mov       ecx,r8d
       call      qword ptr [7FF9B910B258]
       int       3
; Total bytes of code 128

Compare Jit Disasm

; System.Globalization.Tests.StringHash.GetHashCode()
       push      rsi
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       mov       rsi,rcx
       mov       rcx,[rsi+18]
       mov       rax,[rcx]
       mov       rax,[rax+48]
       call      qword ptr [rax+30]
       mov       rcx,rax
       mov       rdx,[rsi+8]
       mov       r8d,[rsi+20]
       cmp       [rcx],cl
       test      rdx,rdx
       je        short M00_L00
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
       mov       [rsp+20],rax
       mov       [rsp+28],edx
       lea       rdx,[rsp+20]
       call      qword ptr [7FFAA49CB768]; System.Globalization.CompareInfo.GetHashCode(System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
       nop
       add       rsp,30
       pop       rsi
       ret
M00_L00:
       mov       ecx,27
       call      qword ptr [7FFAA4B2D7F8]
       int       3
; Total bytes of code 93
; System.Globalization.CompareInfo.GetHashCode(System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
       sub       rsp,28
       test      r8d,0DFFFFFE0
       jne       short M01_L01
       call      qword ptr [7FFAA49CB948]
M01_L00:
       nop
       add       rsp,28
       ret
M01_L01:
       cmp       r8d,40000000
       jne       short M01_L02
       mov       rcx,[rdx]
       mov       edx,[rdx+8]
       add       edx,edx
       mov       r8d,0DC6F8DD1
       mov       r9d,0E81AA38
       call      qword ptr [7FFAA4CF57E0]; System.Marvin.ComputeHash32(Byte ByRef, UInt32, UInt32, UInt32)
       jmp       short M01_L00
M01_L02:
       cmp       r8d,10000000
       jne       short M01_L03
       mov       rcx,[rdx]
       mov       edx,[rdx+8]
       mov       r8d,0DC6F8DD1
       mov       r9d,0E81AA38
       call      qword ptr [7FFAA4CF5840]
       jmp       short M01_L00
M01_L03:
       mov       ecx,r8d
       call      qword ptr [7FFAA49CB258]
       int       3
; Total bytes of code 107

System.Globalization.Tests.StringHash.GetHashCode(Count: 131072, Options: (en-US, Ordinal))


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 111.63297023809523 < 127.55409260381504.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/1/2023 8:39:12 AM, 2/7/2023 2:48:42 AM falls between 1/29/2023 12:56:15 AM and 2/7/2023 2:48:42 AM.
IsImprovementStdDev: Marked as improvement because 15.88142444490362 (T) = (0 -111658.33275797736) / Math.Sqrt((110753488.26528594 / (299)) + (29134.202809146725 / (31))) is greater than 1.9672228266464409 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (31) - 2, .975) and 0.07976129069816927 = (121336.27028435982 - 111658.33275797736) / 121336.27028435982 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Globalization.Tests.StringHash.GetHashCode()
       push      rsi
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       mov       rsi,rcx
       mov       rcx,[rsi+18]
       mov       rax,[rcx]
       mov       rax,[rax+48]
       call      qword ptr [rax+30]
       mov       rcx,rax
       mov       rdx,[rsi+8]
       mov       r8d,[rsi+20]
       cmp       [rcx],cl
       test      rdx,rdx
       je        short M00_L00
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
       mov       [rsp+20],rax
       mov       [rsp+28],edx
       lea       rdx,[rsp+20]
       call      qword ptr [7FF9B90EB768]; System.Globalization.CompareInfo.GetHashCode(System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
       nop
       add       rsp,30
       pop       rsi
       ret
M00_L00:
       mov       ecx,27
       call      qword ptr [7FF9B924D7F8]
       int       3
; Total bytes of code 93
; System.Globalization.CompareInfo.GetHashCode(System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
       sub       rsp,38
       xor       eax,eax
       mov       [rsp+28],rax
       mov       rax,[rdx]
       mov       edx,[rdx+8]
       test      r8d,0DFFFFFE0
       jne       short M01_L01
       mov       [rsp+28],rax
       mov       [rsp+30],edx
       lea       rdx,[rsp+28]
       call      qword ptr [7FF9B90EB948]
M01_L00:
       nop
       add       rsp,38
       ret
M01_L01:
       cmp       r8d,40000000
       jne       short M01_L02
       add       edx,edx
       mov       rcx,rax
       mov       r8d,2E8400DF
       mov       r9d,5DD936CF
       call      qword ptr [7FF9B94157E0]; System.Marvin.ComputeHash32(Byte ByRef, UInt32, UInt32, UInt32)
       jmp       short M01_L00
M01_L02:
       cmp       r8d,10000000
       jne       short M01_L03
       mov       rcx,rax
       mov       r8d,2E8400DF
       mov       r9d,5DD936CF
       call      qword ptr [7FF9B9415840]
       jmp       short M01_L00
M01_L03:
       mov       ecx,r8d
       call      qword ptr [7FF9B90EB258]
       int       3
; Total bytes of code 128

Compare Jit Disasm

; System.Globalization.Tests.StringHash.GetHashCode()
       push      rsi
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       mov       rsi,rcx
       mov       rcx,[rsi+18]
       mov       rax,[rcx]
       mov       rax,[rax+48]
       call      qword ptr [rax+30]
       mov       rcx,rax
       mov       rdx,[rsi+8]
       mov       r8d,[rsi+20]
       cmp       [rcx],cl
       test      rdx,rdx
       je        short M00_L00
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
       mov       [rsp+20],rax
       mov       [rsp+28],edx
       lea       rdx,[rsp+20]
       call      qword ptr [7FFAA49AB768]; System.Globalization.CompareInfo.GetHashCode(System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
       nop
       add       rsp,30
       pop       rsi
       ret
M00_L00:
       mov       ecx,27
       call      qword ptr [7FFAA4B0D7F8]
       int       3
; Total bytes of code 93
; System.Globalization.CompareInfo.GetHashCode(System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
       sub       rsp,28
       test      r8d,0DFFFFFE0
       jne       short M01_L01
       call      qword ptr [7FFAA49AB948]
M01_L00:
       nop
       add       rsp,28
       ret
M01_L01:
       cmp       r8d,40000000
       jne       short M01_L02
       mov       rcx,[rdx]
       mov       edx,[rdx+8]
       add       edx,edx
       mov       r8d,3B8B5EA0
       mov       r9d,78C2656A
       call      qword ptr [7FFAA4CD57E0]; System.Marvin.ComputeHash32(Byte ByRef, UInt32, UInt32, UInt32)
       jmp       short M01_L00
M01_L02:
       cmp       r8d,10000000
       jne       short M01_L03
       mov       rcx,[rdx]
       mov       edx,[rdx+8]
       mov       r8d,3B8B5EA0
       mov       r9d,78C2656A
       call      qword ptr [7FFAA4CD5840]
       jmp       short M01_L00
M01_L03:
       mov       ecx,r8d
       call      qword ptr [7FFAA49AB258]
       int       3
; Total bytes of code 107

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 9e05d3347be231ae1bfcc7037ddecfb5c4ca51a1
Compare 120b7215c9d029fccee94f46864494d79074a0eb
Diff Diff

Improvements in System.Collections.TryGetValueFalse<String, String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ImmutableDictionary - Duration of single invocation 43.31 μs 35.69 μs 0.82 0.02 False

graph
Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.TryGetValueFalse&lt;String, String&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.TryGetValueFalse<String, String>.ImmutableDictionary(Size: 512)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 35.69157481060606 < 40.65009954213479.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/1/2023 8:39:12 AM, 2/7/2023 2:48:42 AM falls between 1/29/2023 12:56:15 AM and 2/7/2023 2:48:42 AM.
IsImprovementStdDev: Marked as improvement because 15.214504008752215 (T) = (0 -36234.78134613036) / Math.Sqrt((8489236.582768975 / (299)) + (206650.1158824713 / (31))) is greater than 1.9672228266464409 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (31) - 2, .975) and 0.07288851434001152 = (39083.52113698137 - 36234.78134613036) / 39083.52113698137 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions