Closed
Description
Run Information
Architecture | x64 |
---|---|
OS | Windows 10.0.18362 |
Baseline | 8c58fc2347820ce48e09605d8adddb993df9ebb5 |
Compare | 1d15f2140f7eb30a976c66290491ec89cd628da0 |
Diff | Diff |
Regressions in PerfLabTests.CastingPerf2.CastingPerf
Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio | Baseline ETL | Compare ETL |
---|---|---|---|---|---|---|---|---|---|---|
IFooObjIsDescendantOfIFoo - Duration of single invocation | 665.24 μs | 741.00 μs | 1.11 | 0.02 | False | Trace | Trace | |||
FooObjIsFoo - Duration of single invocation | 761.79 μs | 873.13 μs | 1.15 | 0.06 | False | Trace | Trace | |||
ObjrefValueTypeObj - Duration of single invocation | 879.82 μs | 1.15 ms | 1.31 | 0.53 | False | Trace | Trace | |||
ObjInt - Duration of single invocation | 628.50 μs | 666.08 μs | 1.06 | 0.06 | False | Trace | Trace |
Repro
git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.CastingPerf2.CastingPerf*'
Payloads
Histogram
PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsDescendantOfIFoo
Description of detection logic
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 741.0049242424243 > 699.6042819511217.
IsChangePoint: Marked as a change because one of 12/3/2022 7:24:45 AM, 12/14/2022 5:20:21 PM, 12/17/2022 10:44:50 PM, 12/21/2022 9:23:17 AM, 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -18.835112412174812 (T) = (0 -742375.389641199) / Math.Sqrt((403025505.1714025 / (29)) + (4058203.7152673295 / (14))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (29) + (14) - 2, .025) and -0.10566149637884203 = (671430.9868549793 - 742375.389641199) / 671430.9868549793 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.
```### Baseline Jit Disasm
```assembly
; PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsDescendantOfIFoo()
push rdi
push rsi
push rbp
push rbx
sub rsp,28
xor esi,esi
mov edi,[7FFCE1FD4CF4]
test edi,edi
jle short M00_L01
mov rdx,1D46F0064E0
mov rbx,[rdx]
mov rdx,rbx
mov rcx,offset MT_PerfLabTests.CastingPerf2.IFoo
call qword ptr [7FFCE180D888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
mov rbp,1D46F006580
M00_L00:
mov rdx,rbx
mov rcx,offset MT_PerfLabTests.CastingPerf2.IFoo
call qword ptr [7FFCE180D888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
mov rdx,rax
mov rcx,rbp
call CORINFO_HELP_ASSIGN_REF
inc esi
cmp esi,edi
jl short M00_L00
M00_L01:
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
ret
; Total bytes of code 107
; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
test rdx,rdx
je short M01_L01
mov rax,[rdx]
movzx r8d,word ptr [rax+0E]
test r8,r8
je short M01_L04
mov rax,[rax+38]
cmp r8,4
jl short M01_L03
M01_L00:
cmp [rax],rcx
je short M01_L01
cmp [rax+8],rcx
je short M01_L01
cmp [rax+10],rcx
je short M01_L01
cmp [rax+18],rcx
jne short M01_L02
M01_L01:
mov rax,rdx
ret
M01_L02:
add rax,20
add r8,0FFFFFFFFFFFFFFFC
cmp r8,4
jge short M01_L00
test r8,r8
je short M01_L04
M01_L03:
cmp [rax],rcx
je short M01_L01
add rax,8
dec r8
test r8,r8
jg short M01_L03
M01_L04:
jmp qword ptr [7FFCE180D870]
; Total bytes of code 97
Compare Jit Disasm
; PerfLabTests.CastingPerf2.CastingPerf.IFooObjIsDescendantOfIFoo()
push rdi
push rsi
push rbp
push rbx
sub rsp,28
xor esi,esi
mov edi,[7FFEEE384CF4]
test edi,edi
jle short M00_L01
mov rdx,206DCC064E0
mov rbx,[rdx]
mov rdx,rbx
mov rcx,offset MT_PerfLabTests.CastingPerf2.IFoo
call qword ptr [7FFEEDBBD888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
mov rbp,206DCC06580
M00_L00:
mov rdx,rbx
mov rcx,offset MT_PerfLabTests.CastingPerf2.IFoo
call qword ptr [7FFEEDBBD888]; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
mov rdx,rax
mov rcx,rbp
call CORINFO_HELP_ASSIGN_REF
inc esi
cmp esi,edi
jl short M00_L00
M00_L01:
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
ret
; Total bytes of code 107
; System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(Void*, System.Object)
test rdx,rdx
je short M01_L01
mov rax,[rdx]
movzx r8d,word ptr [rax+0E]
test r8,r8
je short M01_L04
mov rax,[rax+38]
cmp r8,4
jl short M01_L03
M01_L00:
cmp [rax],rcx
je short M01_L01
cmp [rax+8],rcx
je short M01_L01
cmp [rax+10],rcx
je short M01_L01
cmp [rax+18],rcx
jne short M01_L02
M01_L01:
mov rax,rdx
ret
M01_L02:
add rax,20
add r8,0FFFFFFFFFFFFFFFC
cmp r8,4
jge short M01_L00
test r8,r8
je short M01_L04
M01_L03:
cmp [rax],rcx
je short M01_L01
add rax,8
dec r8
test r8,r8
jg short M01_L03
M01_L04:
jmp qword ptr [7FFEEDBBD870]
; Total bytes of code 97
PerfLabTests.CastingPerf2.CastingPerf.FooObjIsFoo
Description of detection logic
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 873.1283234126984 > 796.3618046875.
IsChangePoint: Marked as a change because one of 11/7/2022 4:10:19 PM, 11/18/2022 7:31:41 AM, 12/3/2022 7:24:45 AM, 12/14/2022 5:20:21 PM, 12/17/2022 10:44:50 PM, 12/21/2022 9:23:17 AM, 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -19.08931422726733 (T) = (0 -873815.4000323422) / Math.Sqrt((894532543.5694818 / (29)) + (3084025.479794204 / (14))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (29) + (14) - 2, .025) and -0.13864466977537454 = (767417.1084511585 - 873815.4000323422) / 767417.1084511585 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.
```### Baseline Jit Disasm
```assembly
; PerfLabTests.CastingPerf2.CastingPerf.FooObjIsFoo()
push rdi
push rsi
push rbp
push rbx
sub rsp,28
xor esi,esi
mov edi,[7FFA51174CF0]
test edi,edi
jle short M00_L02
mov rcx,1FEA00064E0
mov rbx,[rcx]
mov rbp,1FEA0006530
M00_L00:
mov rdx,rbx
mov rax,rdx
test rax,rax
je short M00_L01
mov rcx,offset MT_PerfLabTests.CastingPerf2.Foo
cmp [rax],rcx
je short M00_L01
call qword ptr [7FFA509AD8B8]
M00_L01:
mov rcx,rbp
mov rdx,rax
call CORINFO_HELP_ASSIGN_REF
inc esi
cmp esi,edi
jl short M00_L00
M00_L02:
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
ret
; Total bytes of code 101
Compare Jit Disasm
; PerfLabTests.CastingPerf2.CastingPerf.FooObjIsFoo()
push rdi
push rsi
push rbp
push rbx
sub rsp,28
xor esi,esi
mov edi,[7FFACBA18160]
test edi,edi
jle short M00_L02
mov rcx,1754B4064E0
mov rbx,[rcx]
mov rbp,1754B406530
M00_L00:
mov rdx,rbx
mov rax,rdx
test rax,rax
je short M00_L01
mov rcx,offset MT_PerfLabTests.CastingPerf2.Foo
cmp [rax],rcx
je short M00_L01
call qword ptr [7FFACB26D8B8]
M00_L01:
mov rcx,rbp
mov rdx,rax
call CORINFO_HELP_ASSIGN_REF
inc esi
cmp esi,edi
jl short M00_L00
M00_L02:
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
ret
; Total bytes of code 101
PerfLabTests.CastingPerf2.CastingPerf.ObjrefValueTypeObj
Description of detection logic
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 1.1519236011904763 > 983.2722473958332.
IsChangePoint: Marked as a change because one of 12/10/2022 11:25:25 PM, 12/27/2022 8:25:45 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -9.869181517128785 (T) = (0 -1195405.6082334316) / Math.Sqrt((4705812038.151249 / (26)) + (5521922099.631794 / (17))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (26) + (17) - 2, .025) and -0.22801535098494036 = (973445.1668496213 - 1195405.6082334316) / 973445.1668496213 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.
```### Baseline Jit Disasm
```assembly
; PerfLabTests.CastingPerf2.CastingPerf.ObjrefValueTypeObj()
push r15
push r14
push r12
push rdi
push rsi
push rbp
push rbx
sub rsp,20
xor ebx,ebx
mov rbp,7FFE0A904CF0
cmp dword ptr [rbp],0
jle short M00_L02
mov r14,27786C064E0
mov r15,offset MT_PerfLabTests.CastingPerf2.FooORVT
mov rdx,27786C064B8
mov r12,[rdx]
add r12,8
M00_L00:
mov rsi,[r14]
cmp [rsi],r15
je short M00_L01
mov rdx,rsi
mov rcx,r15
call qword ptr [7FFE0A13D8D0]; System.Runtime.CompilerServices.CastHelpers.Unbox(Void*, System.Object)
M00_L01:
add rsi,8
mov rdi,r12
call CORINFO_HELP_ASSIGN_BYREF
call CORINFO_HELP_ASSIGN_BYREF
inc ebx
cmp ebx,[rbp]
jl short M00_L00
M00_L02:
add rsp,20
pop rbx
pop rbp
pop rsi
pop rdi
pop r12
pop r14
pop r15
ret
; Total bytes of code 128
; System.Runtime.CompilerServices.CastHelpers.Unbox(Void*, System.Object)
cmp [rdx],rcx
jne short M01_L00
lea rax,[rdx+8]
ret
M01_L00:
jmp near ptr System.Runtime.CompilerServices.CastHelpers.Unbox_Helper(Void*, System.Object)
; Total bytes of code 15
Compare Jit Disasm
; PerfLabTests.CastingPerf2.CastingPerf.ObjrefValueTypeObj()
push r15
push r14
push r12
push rdi
push rsi
push rbp
push rbx
sub rsp,20
xor ebx,ebx
mov rbp,7FF7A7844CF0
cmp dword ptr [rbp],0
jle short M00_L02
mov r14,206834064E0
mov r15,offset MT_PerfLabTests.CastingPerf2.FooORVT
mov rdx,206834064B8
mov r12,[rdx]
add r12,8
M00_L00:
mov rsi,[r14]
cmp [rsi],r15
je short M00_L01
mov rdx,rsi
mov rcx,r15
call qword ptr [7FF7A707D8D0]; System.Runtime.CompilerServices.CastHelpers.Unbox(Void*, System.Object)
M00_L01:
add rsi,8
mov rdi,r12
call CORINFO_HELP_ASSIGN_BYREF
call CORINFO_HELP_ASSIGN_BYREF
inc ebx
cmp ebx,[rbp]
jl short M00_L00
M00_L02:
add rsp,20
pop rbx
pop rbp
pop rsi
pop rdi
pop r12
pop r14
pop r15
ret
; Total bytes of code 128
; System.Runtime.CompilerServices.CastHelpers.Unbox(Void*, System.Object)
cmp [rdx],rcx
jne short M01_L00
lea rax,[rdx+8]
ret
M01_L00:
jmp near ptr System.Runtime.CompilerServices.CastHelpers.Unbox_Helper(Void*, System.Object)
; Total bytes of code 15
PerfLabTests.CastingPerf2.CastingPerf.ObjInt
Description of detection logic
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 666.0825694444444 > 658.398496875.
IsChangePoint: Marked as a change because one of 10/11/2022 8:42:28 PM, 10/17/2022 3:19:47 PM, 11/19/2022 1:29:52 AM, 12/2/2022 5:21:30 AM, 12/23/2022 9:40:21 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -16.06702433364496 (T) = (0 -664842.5214414858) / Math.Sqrt((41203214.56325535 / (17)) + (109274040.16720593 / (26))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (17) + (26) - 2, .025) and -0.06633693249416585 = (623482.5984001294 - 664842.5214414858) / 623482.5984001294 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.
```### Baseline Jit Disasm
```assembly
; PerfLabTests.CastingPerf2.CastingPerf.ObjInt()
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,20
xor esi,esi
mov rdi,7FF96CD94CF4
cmp dword ptr [rdi],0
jle short M00_L01
mov rbx,offset MT_System.Int32
mov rbp,7FF96CD94CFC
mov r14,15F62C064E0
M00_L00:
mov rcx,rbx
call CORINFO_HELP_NEWSFAST
mov edx,[rbp]
mov [rax+8],edx
mov rcx,r14
mov rdx,rax
call CORINFO_HELP_ASSIGN_REF
inc esi
cmp esi,[rdi]
jl short M00_L00
M00_L01:
add rsp,20
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
ret
; Total bytes of code 99
Compare Jit Disasm
; PerfLabTests.CastingPerf2.CastingPerf.ObjInt()
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,20
xor esi,esi
mov rdi,7FFAA9BC4CF4
cmp dword ptr [rdi],0
jle short M00_L01
mov rbx,offset MT_System.Int32
mov rbp,7FFAA9BC4CFC
mov r14,22B7B0064E0
M00_L00:
mov rcx,rbx
call CORINFO_HELP_NEWSFAST
mov edx,[rbp]
mov [rax+8],edx
mov rcx,r14
mov rdx,rax
call CORINFO_HELP_ASSIGN_REF
inc esi
cmp esi,[rdi]
jl short M00_L00
M00_L01:
add rsp,20
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
ret
; Total bytes of code 99
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Architecture | x64 |
---|---|
OS | Windows 10.0.18362 |
Baseline | 8c58fc2347820ce48e09605d8adddb993df9ebb5 |
Compare | 1d15f2140f7eb30a976c66290491ec89cd628da0 |
Diff | Diff |
Regressions in System.Linq.Tests.Perf_Enumerable
Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio | Baseline ETL | Compare ETL |
---|---|---|---|---|---|---|---|---|---|---|
Max - Duration of single invocation | 464.56 ns | 520.08 ns | 1.12 | 0.03 | False | Trace | Trace |
Repro
git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Linq.Tests.Perf_Enumerable*'
Payloads
Histogram
System.Linq.Tests.Perf_Enumerable.Max(input: IEnumerable)
Description of detection logic
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 520.0811702527701 > 487.36929424915627.
IsChangePoint: Marked as a change because one of 12/3/2022 7:24:45 AM, 12/6/2022 2:12:43 AM, 12/17/2022 10:44:50 PM, 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -17.767567409196065 (T) = (0 -520.5557851414749) / Math.Sqrt((249.18729266585365 / (29)) + (1.1123896247220408 / (14))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (29) + (14) - 2, .025) and -0.11174513177046155 = (468.2330241576919 - 520.5557851414749) / 468.2330241576919 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.
```### Baseline Jit Disasm
```assembly
; System.Linq.Tests.Perf_Enumerable.Max(System.Linq.Tests.LinqTestData)
mov rcx,[rdx+8]
jmp qword ptr [7FF95D39B660]; System.Linq.Enumerable.MinMaxInteger[[System.Int32, System.Private.CoreLib],[System.Linq.Enumerable+MaxCalc`1[[System.Int32, System.Private.CoreLib]], System.Linq]](System.Collections.Generic.IEnumerable`1<Int32>)
; Total bytes of code 10
; System.Linq.Enumerable.MinMaxInteger[[System.Int32, System.Private.CoreLib],[System.Linq.Enumerable+MaxCalc`1[[System.Int32, System.Private.CoreLib]], System.Linq]](System.Collections.Generic.IEnumerable`1<Int32>)
push rbp
push rdi
push rsi
sub rsp,40
vzeroupper
lea rbp,[rsp+50]
xor eax,eax
mov [rbp-20],rax
mov [rbp-30],rsp
test rcx,rcx
je near ptr M01_L24
mov rdx,offset MT_System.Int32[]
cmp [rcx],rdx
jne short M01_L00
lea rax,[rcx+10]
mov r8d,[rcx+8]
jmp short M01_L01
M01_L00:
mov rdx,offset MT_System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]]
mov [rbp+10],rcx
cmp [rcx],rdx
jne near ptr M01_L18
lea rcx,[rbp-20]
mov rdx,[rbp+10]
call qword ptr [7FF95D39F378]
mov rax,[rbp-20]
mov r8d,[rbp-18]
M01_L01:
test r8d,r8d
je near ptr M01_L25
cmp r8d,4
jge short M01_L04
mov esi,[rax]
mov ecx,1
cmp r8d,1
jle near ptr M01_L23
M01_L02:
mov r11d,ecx
mov r11d,[rax+r11*4]
cmp r11d,esi
jle short M01_L03
mov esi,r11d
M01_L03:
inc ecx
cmp ecx,r8d
jl short M01_L02
jmp near ptr M01_L23
M01_L04:
cmp r8d,8
jge short M01_L09
add r8d,0FFFFFFFC
movsxd rcx,r8d
lea rcx,[rax+rcx*4]
vmovdqu xmm0,xmmword ptr [rax]
add rax,10
cmp rax,rcx
jae short M01_L06
M01_L05:
vpmaxsd xmm0,xmm0,[rax]
add rax,10
cmp rax,rcx
jb short M01_L05
M01_L06:
vpmaxsd xmm0,xmm0,[rcx]
vmovd esi,xmm0
vpextrd ecx,xmm0,1
cmp ecx,esi
jle short M01_L07
mov esi,ecx
M01_L07:
vpextrd ecx,xmm0,2
cmp ecx,esi
jle short M01_L08
mov esi,ecx
M01_L08:
vpextrd ecx,xmm0,3
cmp ecx,esi
jle near ptr M01_L23
mov esi,ecx
jmp near ptr M01_L23
M01_L09:
mov rcx,rax
lea r11d,[r8-8]
movsxd r11,r11d
lea r11,[rcx+r11*4]
vmovdqu ymm0,ymmword ptr [rcx]
add rcx,20
cmp rcx,r11
jae short M01_L11
M01_L10:
vpmaxsd ymm0,ymm0,[rcx]
add rcx,20
cmp rcx,r11
jb short M01_L10
M01_L11:
vpmaxsd ymm0,ymm0,[r11]
vmovaps ymm1,ymm0
vmovd esi,xmm1
vmovaps ymm1,ymm0
vpextrd ecx,xmm1,1
cmp ecx,esi
jle short M01_L12
mov esi,ecx
M01_L12:
vmovaps ymm1,ymm0
vpextrd ecx,xmm1,2
cmp ecx,esi
jle short M01_L13
mov esi,ecx
M01_L13:
vmovaps ymm1,ymm0
vpextrd ecx,xmm1,3
cmp ecx,esi
jle short M01_L14
mov esi,ecx
M01_L14:
vextractf128 xmm1,ymm0,1
vmovd ecx,xmm1
cmp ecx,esi
jle short M01_L15
mov esi,ecx
M01_L15:
vextractf128 xmm1,ymm0,1
vpextrd ecx,xmm1,1
cmp ecx,esi
jle short M01_L16
mov esi,ecx
M01_L16:
vextractf128 xmm1,ymm0,1
vpextrd ecx,xmm1,2
cmp ecx,esi
jle short M01_L17
mov esi,ecx
M01_L17:
vextractf128 xmm0,ymm0,1
vpextrd ecx,xmm0,3
cmp ecx,esi
jle near ptr M01_L23
mov esi,ecx
jmp near ptr M01_L23
M01_L18:
mov rcx,[rbp+10]
mov r11,7FF95C8705D8
call qword ptr [r11]
mov rsi,rax
mov [rbp-28],rsi
mov rcx,rsi
mov r11,7FF95C8705E0
call qword ptr [r11]
test eax,eax
je short M01_L19
mov rcx,rsi
mov r11,7FF95C8705E8
call qword ptr [r11]
mov edi,eax
mov rcx,rsi
mov r11,7FF95C8705F0
call qword ptr [r11]
test eax,eax
je short M01_L22
jmp short M01_L20
M01_L19:
call qword ptr [7FF95D1777F8]
int 3
M01_L20:
mov rcx,rsi
mov r11,7FF95C8705F8
call qword ptr [r11]
cmp eax,edi
jle short M01_L21
mov edi,eax
M01_L21:
mov rcx,rsi
mov r11,7FF95C8705F0
call qword ptr [r11]
test eax,eax
jne short M01_L20
M01_L22:
mov rcx,rsi
mov r11,7FF95C870600
call qword ptr [r11]
mov esi,edi
M01_L23:
mov eax,esi
vzeroupper
add rsp,40
pop rsi
pop rdi
pop rbp
ret
M01_L24:
mov ecx,10
call qword ptr [7FF95D177798]
int 3
M01_L25:
call qword ptr [7FF95D1777F8]
int 3
push rbp
push rdi
push rsi
sub rsp,30
vzeroupper
mov rbp,[rcx+20]
mov [rsp+20],rbp
lea rbp,[rbp+50]
cmp qword ptr [rbp-28],0
je short M01_L26
mov rcx,[rbp-28]
mov r11,7FF95C870600
call qword ptr [r11]
M01_L26:
nop
vzeroupper
add rsp,30
pop rsi
pop rdi
pop rbp
ret
; Total bytes of code 684
Compare Jit Disasm
; System.Linq.Tests.Perf_Enumerable.Max(System.Linq.Tests.LinqTestData)
mov rcx,[rdx+8]
jmp qword ptr [7FFD3060B660]; System.Linq.Enumerable.MinMaxInteger[[System.Int32, System.Private.CoreLib],[System.Linq.Enumerable+MaxCalc`1[[System.Int32, System.Private.CoreLib]], System.Linq]](System.Collections.Generic.IEnumerable`1<Int32>)
; Total bytes of code 10
; System.Linq.Enumerable.MinMaxInteger[[System.Int32, System.Private.CoreLib],[System.Linq.Enumerable+MaxCalc`1[[System.Int32, System.Private.CoreLib]], System.Linq]](System.Collections.Generic.IEnumerable`1<Int32>)
push rbp
push rdi
push rsi
sub rsp,40
vzeroupper
lea rbp,[rsp+50]
xor eax,eax
mov [rbp-20],rax
mov [rbp-30],rsp
test rcx,rcx
je near ptr M01_L24
mov rdx,offset MT_System.Int32[]
cmp [rcx],rdx
jne short M01_L00
lea rax,[rcx+10]
mov r8d,[rcx+8]
jmp short M01_L01
M01_L00:
mov rdx,offset MT_System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]]
mov [rbp+10],rcx
cmp [rcx],rdx
jne near ptr M01_L18
lea rcx,[rbp-20]
mov rdx,[rbp+10]
call qword ptr [7FFD3060F378]
mov rax,[rbp-20]
mov r8d,[rbp-18]
M01_L01:
test r8d,r8d
je near ptr M01_L25
cmp r8d,4
jge short M01_L04
mov esi,[rax]
mov ecx,1
cmp r8d,1
jle near ptr M01_L23
M01_L02:
mov r11d,ecx
mov r11d,[rax+r11*4]
cmp r11d,esi
jle short M01_L03
mov esi,r11d
M01_L03:
inc ecx
cmp ecx,r8d
jl short M01_L02
jmp near ptr M01_L23
M01_L04:
cmp r8d,8
jge short M01_L09
add r8d,0FFFFFFFC
movsxd rcx,r8d
lea rcx,[rax+rcx*4]
vmovdqu xmm0,xmmword ptr [rax]
add rax,10
cmp rax,rcx
jae short M01_L06
M01_L05:
vpmaxsd xmm0,xmm0,[rax]
add rax,10
cmp rax,rcx
jb short M01_L05
M01_L06:
vpmaxsd xmm0,xmm0,[rcx]
vmovd esi,xmm0
vpextrd ecx,xmm0,1
cmp ecx,esi
jle short M01_L07
mov esi,ecx
M01_L07:
vpextrd ecx,xmm0,2
cmp ecx,esi
jle short M01_L08
mov esi,ecx
M01_L08:
vpextrd ecx,xmm0,3
cmp ecx,esi
jle near ptr M01_L23
mov esi,ecx
jmp near ptr M01_L23
M01_L09:
mov rcx,rax
lea r11d,[r8-8]
movsxd r11,r11d
lea r11,[rcx+r11*4]
vmovdqu ymm0,ymmword ptr [rcx]
add rcx,20
cmp rcx,r11
jae short M01_L11
M01_L10:
vpmaxsd ymm0,ymm0,[rcx]
add rcx,20
cmp rcx,r11
jb short M01_L10
M01_L11:
vpmaxsd ymm0,ymm0,[r11]
vmovaps ymm1,ymm0
vmovd esi,xmm1
vmovaps ymm1,ymm0
vpextrd ecx,xmm1,1
cmp ecx,esi
jle short M01_L12
mov esi,ecx
M01_L12:
vmovaps ymm1,ymm0
vpextrd ecx,xmm1,2
cmp ecx,esi
jle short M01_L13
mov esi,ecx
M01_L13:
vmovaps ymm1,ymm0
vpextrd ecx,xmm1,3
cmp ecx,esi
jle short M01_L14
mov esi,ecx
M01_L14:
vextractf128 xmm1,ymm0,1
vmovd ecx,xmm1
cmp ecx,esi
jle short M01_L15
mov esi,ecx
M01_L15:
vextractf128 xmm1,ymm0,1
vpextrd ecx,xmm1,1
cmp ecx,esi
jle short M01_L16
mov esi,ecx
M01_L16:
vextractf128 xmm1,ymm0,1
vpextrd ecx,xmm1,2
cmp ecx,esi
jle short M01_L17
mov esi,ecx
M01_L17:
vextractf128 xmm0,ymm0,1
vpextrd ecx,xmm0,3
cmp ecx,esi
jle near ptr M01_L23
mov esi,ecx
jmp near ptr M01_L23
M01_L18:
mov rcx,[rbp+10]
mov r11,7FFD2FAE05D8
call qword ptr [r11]
mov rsi,rax
mov [rbp-28],rsi
mov rcx,rsi
mov r11,7FFD2FAE05E0
call qword ptr [r11]
test eax,eax
je short M01_L19
mov rcx,rsi
mov r11,7FFD2FAE05E8
call qword ptr [r11]
mov edi,eax
mov rcx,rsi
mov r11,7FFD2FAE05F0
call qword ptr [r11]
test eax,eax
je short M01_L22
jmp short M01_L20
M01_L19:
call qword ptr [7FFD303E77F8]
int 3
M01_L20:
mov rcx,rsi
mov r11,7FFD2FAE05F8
call qword ptr [r11]
cmp eax,edi
jle short M01_L21
mov edi,eax
M01_L21:
mov rcx,rsi
mov r11,7FFD2FAE05F0
call qword ptr [r11]
test eax,eax
jne short M01_L20
M01_L22:
mov rcx,rsi
mov r11,7FFD2FAE0600
call qword ptr [r11]
mov esi,edi
M01_L23:
mov eax,esi
vzeroupper
add rsp,40
pop rsi
pop rdi
pop rbp
ret
M01_L24:
mov ecx,10
call qword ptr [7FFD303E7798]
int 3
M01_L25:
call qword ptr [7FFD303E77F8]
int 3
push rbp
push rdi
push rsi
sub rsp,30
vzeroupper
mov rbp,[rcx+20]
mov [rsp+20],rbp
lea rbp,[rbp+50]
cmp qword ptr [rbp-28],0
je short M01_L26
mov rcx,[rbp-28]
mov r11,7FFD2FAE0600
call qword ptr [r11]
M01_L26:
nop
vzeroupper
add rsp,30
pop rsi
pop rdi
pop rbp
ret
; Total bytes of code 684
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
Architecture | x64 |
---|---|
OS | Windows 10.0.18362 |
Baseline | 8c58fc2347820ce48e09605d8adddb993df9ebb5 |
Compare | 1d15f2140f7eb30a976c66290491ec89cd628da0 |
Diff | Diff |
Regressions in Burgers
Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio | Baseline ETL | Compare ETL |
---|---|---|---|---|---|---|---|---|---|---|
Test3 - Duration of single invocation | 119.12 ms | 172.18 ms | 1.45 | 0.04 | False | Trace | Trace |
Repro
git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Burgers*'
Payloads
Histogram
Burgers.Test3
Description of detection logic
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 172.18077333333335 > 125.2032478846154.
IsChangePoint: Marked as a change because one of 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -128.7669311945409 (T) = (0 -171372910.23809525) / Math.Sqrt((3312379617640.8545 / (29)) + (615383043005.9226 / (14))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (29) + (14) - 2, .025) and -0.4261990802366147 = (120160581.09479603 - 171372910.23809525) / 120160581.09479603 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.
```### Baseline Jit Disasm
```assembly
; Burgers.Test3()
sub rsp,38
vzeroupper
vmovsd xmm2,qword ptr [7FFC36B7F490]
vmovsd qword ptr [rsp+20],xmm2
mov rdx,[rcx+10]
mov [rsp+28],rdx
vmovsd xmm2,qword ptr [rcx+18]
vmovsd xmm3,qword ptr [rcx+20]
mov ecx,4E20
mov edx,2711
call qword ptr [7FFC372B36F0]; Burgers.GetCalculated3(Int32, Int32, Double, Double, Double, Double[])
nop
add rsp,38
ret
; Total bytes of code 62
; Burgers.GetCalculated3(Int32, Int32, Double, Double, Double, Double[])
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,88
vzeroupper
vmovaps [rsp+70],xmm6
vmovaps [rsp+60],xmm7
vmovaps [rsp+50],xmm8
vmovaps [rsp+40],xmm9
vmovaps [rsp+30],xmm10
vmovaps [rsp+20],xmm11
mov edi,ecx
mov esi,edx
vmovaps xmm6,xmm2
vmovaps xmm7,xmm3
mov rbx,[rsp+0E8]
mov edx,esi
sar edx,1F
and edx,3
add edx,esi
and edx,0FFFFFFFC
mov ecx,esi
sub ecx,edx
mov edx,ecx
neg edx
lea ebp,[rdx+rsi+4]
movsxd rdx,ebp
mov rcx,offset MT_System.Double[]
call CORINFO_HELP_NEWARR_1_VC
mov r14,rax
movsxd rdx,ebp
mov rcx,offset MT_System.Double[]
call CORINFO_HELP_NEWARR_1_VC
mov r15,rax
mov r8d,[rbx+8]
mov rcx,rbx
mov rdx,r15
call qword ptr [7FFC36AA96A8]; System.Array.Copy(System.Array, System.Array, Int32)
vmulsd xmm0,xmm7,qword ptr [rsp+0E0]
vdivsd xmm0,xmm0,xmm6
vmovsd xmm8,qword ptr [7FFC36B7F7A0]
vmovaps xmm1,xmm8
call System.Math.Pow(Double, Double)
xor edx,edx
test edi,edi
jle near ptr M01_L03
add ebp,0FFFFFFFD
vdivsd xmm1,xmm7,xmm6
vbroadcastsd ymm1,xmm1
vmovupd ymm2,[7FFC36B7F7C0]
vbroadcastsd ymm3,xmm0
lea eax,[rsi-1]
mov ecx,eax
M01_L00:
mov r8d,1
cmp ebp,1
jle near ptr M01_L02
mov r9d,[r15+8]
M01_L01:
cmp r8d,r9d
jae near ptr M01_L05
lea r11d,[r8+3]
cmp r11d,r9d
jae near ptr M01_L05
vmovupd ymm4,[r15+r8*8+10]
lea r10d,[r8-1]
cmp r10d,r9d
jae near ptr M01_L05
lea ebx,[r8+2]
cmp ebx,r9d
jae near ptr M01_L05
vmovupd ymm5,[r15+r10*8+10]
lea r10d,[r8+1]
cmp r10d,r9d
jae near ptr M01_L05
lea ebx,[r8+4]
cmp ebx,r9d
jae near ptr M01_L05
vmovupd ymm9,[r15+r10*8+10]
vmulpd ymm10,ymm4,ymm1
vsubpd ymm11,ymm4,ymm5
vmulpd ymm10,ymm10,ymm11
vsubpd ymm10,ymm4,ymm10
vmulpd ymm4,ymm4,ymm2
vsubpd ymm4,ymm9,ymm4
vaddpd ymm4,ymm4,ymm5
vmulpd ymm4,ymm3,ymm4
vaddpd ymm4,ymm10,ymm4
mov r10d,[r14+8]
cmp r8d,r10d
jae near ptr M01_L05
cmp r11d,r10d
jae near ptr M01_L06
mov r8d,r8d
vmovupd [r14+r8*8+10],ymm4
mov r8d,ebx
cmp r8d,ebp
jl near ptr M01_L01
M01_L02:
mov r9d,[r15+8]
test r9d,r9d
je near ptr M01_L07
vmovsd xmm4,qword ptr [r15+10]
vmulsd xmm5,xmm4,xmm7
vdivsd xmm5,xmm5,xmm6
cmp eax,r9d
jae near ptr M01_L07
vmovsd xmm9,qword ptr [r15+rcx*8+10]
vsubsd xmm10,xmm4,xmm9
vmulsd xmm5,xmm5,xmm10
vsubsd xmm5,xmm4,xmm5
cmp r9d,1
jbe near ptr M01_L07
vmovsd xmm10,qword ptr [r15+18]
vmulsd xmm4,xmm4,xmm8
vsubsd xmm4,xmm10,xmm4
vaddsd xmm4,xmm4,xmm9
vmulsd xmm4,xmm4,xmm0
vaddsd xmm4,xmm5,xmm4
mov r10d,[r14+8]
test r10d,r10d
je near ptr M01_L07
vmovsd qword ptr [r14+10],xmm4
vmovsd xmm4,qword ptr [r15+rcx*8+10]
vmulsd xmm5,xmm4,xmm7
vdivsd xmm5,xmm5,xmm6
lea r8d,[rsi-2]
cmp r8d,r9d
jae near ptr M01_L07
mov r9d,r8d
vmovsd xmm9,qword ptr [r15+r9*8+10]
vsubsd xmm10,xmm4,xmm9
vmulsd xmm5,xmm5,xmm10
vsubsd xmm5,xmm4,xmm5
vmovsd xmm10,qword ptr [r15+10]
vmulsd xmm4,xmm4,xmm8
vsubsd xmm4,xmm10,xmm4
vaddsd xmm4,xmm4,xmm9
vmulsd xmm4,xmm4,xmm0
vaddsd xmm4,xmm5,xmm4
cmp eax,r10d
jae short M01_L07
vmovsd qword ptr [r14+rcx*8+10],xmm4
inc edx
cmp edx,edi
jl short M01_L04
mov r15,r14
M01_L03:
mov rax,r15
vmovaps xmm6,[rsp+70]
vmovaps xmm7,[rsp+60]
vmovaps xmm8,[rsp+50]
vmovaps xmm9,[rsp+40]
vmovaps xmm10,[rsp+30]
vmovaps xmm11,[rsp+20]
vzeroupper
add rsp,88
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L04:
xchg r14,r15
jmp near ptr M01_L00
M01_L05:
call CORINFO_HELP_THROW_ARGUMENTOUTOFRANGEEXCEPTION
int 3
M01_L06:
call CORINFO_HELP_THROW_ARGUMENTEXCEPTION
int 3
M01_L07:
call CORINFO_HELP_RNGCHKFAIL
int 3
; Total bytes of code 723
Compare Jit Disasm
; BenchmarkDotNet.Autogenerated.Runnable_0.__ForDisassemblyDiagnoser__()
push rbp
sub rsp,20
lea rbp,[rsp+20]
mov [rbp+10],rcx
mov rcx,[rbp+10]
cmp dword ptr [rcx+60],0B
jne short M00_L00
mov rcx,[rbp+10]
call qword ptr [7FFB62E33768]
nop
add rsp,20
pop rbp
ret
M00_L00:
xor eax,eax
add rsp,20
pop rbp
ret
; Total bytes of code 49
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
Architecture | x64 |
---|---|
OS | Windows 10.0.18362 |
Baseline | 8c58fc2347820ce48e09605d8adddb993df9ebb5 |
Compare | 1d15f2140f7eb30a976c66290491ec89cd628da0 |
Diff | Diff |
Regressions in System.Tests.Perf_String
Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio | Baseline ETL | Compare ETL |
---|---|---|---|---|---|---|---|---|---|---|
TrimEnd_CharArr - Duration of single invocation | 4.51 ns | 5.73 ns | 1.27 | 0.04 | False | Trace | Trace |
Repro
git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_String*'
Payloads
Histogram
System.Tests.Perf_String.TrimEnd_CharArr(s: "Test", c: [' ', ' '])
Description of detection logic
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 5.732226949094784 > 4.735492709714653.
IsChangePoint: Marked as a change because one of 11/2/2022 9:35:40 AM, 11/7/2022 4:10:19 PM, 11/18/2022 8:48:12 PM, 12/10/2022 11:25:25 PM, 12/17/2022 10:44:50 PM, 12/28/2022 5:13:50 PM, 1/3/2023 6:29:42 AM falls between 12/23/2022 9:40:21 PM and 1/3/2023 6:29:42 AM.
IsRegressionStdDev: Marked as regression because -55.25365950219365 (T) = (0 -5.660159358774324) / Math.Sqrt((0.0001401500415806516 / (29)) + (0.006026706263614678 / (14))) is less than -2.019540970439573 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (29) + (14) - 2, .025) and -0.2557648955079805 = (4.507340011670483 - 5.660159358774324) / 4.507340011670483 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.
```### Baseline Jit Disasm
```assembly
; System.Tests.Perf_String.TrimEnd_CharArr(System.String, Char[])
mov rcx,rdx
mov rdx,r8
cmp [rcx],ecx
jmp qword ptr [7FFF3F2054F8]; System.String.TrimEnd(Char[])
; Total bytes of code 14
; System.String.TrimEnd(Char[])
sub rsp,28
xor eax,eax
mov [rsp+20],rax
test rdx,rdx
je short M01_L00
mov r8d,[rdx+8]
test r8d,r8d
je short M01_L00
add rdx,10
mov [rsp+20],rdx
mov rdx,[rsp+20]
mov r9d,2
call qword ptr [7FFF3F205528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)
nop
add rsp,28
ret
M01_L00:
mov edx,2
call qword ptr [7FFF3F205510]
nop
add rsp,28
ret
; Total bytes of code 74
Compare Jit Disasm
; System.Tests.Perf_String.TrimEnd_CharArr(System.String, Char[])
mov rcx,rdx
mov rdx,r8
cmp [rcx],ecx
jmp qword ptr [7FFCEC8E54F8]; System.String.TrimEnd(Char[])
; Total bytes of code 14
; System.String.TrimEnd(Char[])
sub rsp,28
xor eax,eax
mov [rsp+20],rax
test rdx,rdx
je short M01_L00
mov r8d,[rdx+8]
test r8d,r8d
je short M01_L00
add rdx,10
mov [rsp+20],rdx
mov rdx,[rsp+20]
mov r9d,2
call qword ptr [7FFCEC8E5528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)
nop
add rsp,28
ret
M01_L00:
mov edx,2
call qword ptr [7FFCEC8E5510]
nop
add rsp,28
ret
; Total bytes of code 74
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment