-
Notifications
You must be signed in to change notification settings - Fork 4
Closed
Description
Run Information
| Architecture | x64 |
|---|---|
| OS | Windows 10.0.18362 |
| Baseline | ac03fbd184b182a6632a50bbe70bc733e487264c |
| Compare | 4832236b4820ca83bbc9ce96003c2029b85c6ce2 |
| Diff | Diff |
Improvements in System.Tests.Perf_String
| Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio | Baseline ETL | Compare ETL |
|---|---|---|---|---|---|---|---|---|---|---|
| ToLowerInvariant - Duration of single invocation | 57.84 ns | 31.15 ns | 0.54 | 0.08 | False | 671.5961104115448 | 334.8087028476301 | 0.4985268640738017 | Trace | Trace |
| ToUpperInvariant - Duration of single invocation | 56.83 ns | 31.46 ns | 0.55 | 0.08 | False | 670.0444597263647 | 336.51851760579285 | 0.5022331171027391 | Trace | Trace |
| ToUpper - Duration of single invocation | 68.68 ns | 43.67 ns | 0.64 | 0.23 | False | 742.9409157342405 | 407.8843008172567 | 0.5490131074745682 | Trace | Trace |
| ToLower - Duration of single invocation | 68.56 ns | 46.90 ns | 0.68 | 0.26 | 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.ToLowerInvariant(s: "This is a much longer piece of text that might benefit more from vectorization.")
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 31.145270445281216 < 54.28757540842618.
IsChangePoint: Marked as a change because one of 11/24/2022 8:21:24 PM, 11/29/2022 1:43:29 AM falls between 11/20/2022 12:28:28 PM and 11/29/2022 1:43:29 AM.
IsImprovementStdDev: Marked as improvement because 145.93693040162847 (T) = (0 -31.741749461142206) / Math.Sqrt((1.4139568914801037 / (299)) + (0.33466492342849113 / (15))) is greater than 1.9675964973877862 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (15) - 2, .975) and 0.4305326546950886 = (55.73936718732597 - 31.741749461142206) / 55.73936718732597 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.
```### Baseline Jit Disasm
```assembly
; System.Tests.Perf_String.ToLowerInvariant(System.String)
cmp [rdx],dl
mov rcx,29AED800718
mov rcx,[rcx]
jmp qword ptr [7FFE2B817A80]; System.Globalization.TextInfo.ToLower(System.String)
; Total bytes of code 21
; System.Globalization.TextInfo.ToLower(System.String)
sub rsp,28
test rdx,rdx
je short M01_L00
add rsp,28
jmp qword ptr [7FFE2BB75FD8]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToLowerConversion, System.Private.CoreLib]](System.String)
M01_L00:
mov ecx,15FB
mov rdx,7FFE2B494000
call CORINFO_HELP_STRCNS
mov rcx,rax
call qword ptr [7FFE2B7853F0]
int 3
; Total bytes of code 49Compare Jit Disasm
; System.Tests.Perf_String.ToLowerInvariant(System.String)
cmp [rdx],dl
mov rcx,242DB800720
mov rcx,[rcx]
jmp qword ptr [7FF9C37A7A80]; System.Globalization.TextInfo.ToLower(System.String)
; Total bytes of code 21; System.Globalization.TextInfo.ToLower(System.String)
sub rsp,28
test rdx,rdx
je short M01_L00
add rsp,28
jmp qword ptr [7FF9C3B05FD8]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToLowerConversion, System.Private.CoreLib]](System.String)
M01_L00:
mov ecx,15FB
mov rdx,7FF9C3424000
call CORINFO_HELP_STRCNS
mov rcx,rax
call qword ptr [7FF9C3715408]
int 3
; Total bytes of code 49System.Tests.Perf_String.ToUpperInvariant(s: "This is a much longer piece of text that might benefit more from vectorization.")
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 31.461620725919477 < 52.60331462044485.
IsChangePoint: Marked as a change because one of 11/24/2022 8:21:24 PM, 11/29/2022 1:43:29 AM falls between 11/20/2022 12:28:28 PM and 11/29/2022 1:43:29 AM.
IsImprovementStdDev: Marked as improvement because 133.30990123610707 (T) = (0 -31.995081802416028) / Math.Sqrt((1.51116257814792 / (299)) + (0.39309208294129305 / (15))) is greater than 1.9675964973877862 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (15) - 2, .975) and 0.4241865103598834 = (55.565009118513274 - 31.995081802416028) / 55.565009118513274 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.
```### Baseline Jit Disasm
```assembly
; System.Tests.Perf_String.ToUpperInvariant(System.String)
cmp [rdx],dl
mov rcx,22684800718
mov rcx,[rcx]
jmp qword ptr [7FF946497B88]; System.Globalization.TextInfo.ToUpper(System.String)
; Total bytes of code 21
; System.Globalization.TextInfo.ToUpper(System.String)
sub rsp,28
test rdx,rdx
je short M01_L00
add rsp,28
jmp qword ptr [7FF9467BD9C0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToUpperConversion, System.Private.CoreLib]](System.String)
M01_L00:
mov ecx,15FB
mov rdx,7FF946114000
call CORINFO_HELP_STRCNS
mov rcx,rax
call qword ptr [7FF9464053F0]
int 3
; Total bytes of code 49Compare Jit Disasm
; System.Tests.Perf_String.ToUpperInvariant(System.String)
cmp [rdx],dl
mov rcx,260BCC00720
mov rcx,[rcx]
jmp qword ptr [7FFC6CF67BB8]; System.Globalization.TextInfo.ToUpper(System.String)
; Total bytes of code 21; System.Globalization.TextInfo.ToUpper(System.String)
sub rsp,28
test rdx,rdx
je short M01_L00
add rsp,28
jmp qword ptr [7FFC6D28D9C0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToUpperConversion, System.Private.CoreLib]](System.String)
M01_L00:
mov ecx,15FB
mov rdx,7FFC6CBE4000
call CORINFO_HELP_STRCNS
mov rcx,rax
call qword ptr [7FFC6CED5408]
int 3
; Total bytes of code 49System.Tests.Perf_String.ToUpper(s: "This is a much longer piece of text that might benefit more from vectorization.")
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 43.6718757082977 < 65.15926227787355.
IsChangePoint: Marked as a change because one of 11/24/2022 8:21:24 PM, 11/29/2022 1:43:29 AM falls between 11/20/2022 12:28:28 PM and 11/29/2022 1:43:29 AM.
IsImprovementStdDev: Marked as improvement because 39.696695689018114 (T) = (0 -43.519346125741855) / Math.Sqrt((6.184091964407545 / (299)) + (4.820991092231217 / (15))) is greater than 1.9675964973877862 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (15) - 2, .975) and 0.3478983658509452 = (66.73706037024648 - 43.519346125741855) / 66.73706037024648 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.
```### Baseline Jit Disasm
```assembly
; System.Tests.Perf_String.ToUpper(System.String)
push rsi
sub rsp,20
mov rsi,rdx
cmp [rsi],sil
call qword ptr [7FF8A1295A08]; System.Globalization.CultureInfo.get_CurrentCulture()
mov rcx,rax
mov rax,[rax]
mov rax,[rax+48]
call qword ptr [rax+38]
mov rcx,rax
mov rdx,rsi
cmp [rcx],ecx
add rsp,20
pop rsi
jmp qword ptr [7FF8A1347B88]; System.Globalization.TextInfo.ToUpper(System.String)
; Total bytes of code 49
; System.Globalization.CultureInfo.get_CurrentCulture()
sub rsp,28
mov rcx,7FF8A10E4CD0
mov edx,254
call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE
mov rax,[rax+8]
test rax,rax
jne short M01_L00
mov rax,158A5800548
mov rax,[rax]
test rax,rax
jne short M01_L00
mov rax,158A5800528
mov rax,[rax]
test rax,rax
je short M01_L01
M01_L00:
add rsp,28
ret
M01_L01:
add rsp,28
jmp qword ptr [7FF8A12958B8]
; Total bytes of code 84; System.Globalization.TextInfo.ToUpper(System.String)
sub rsp,28
test rdx,rdx
je short M02_L00
add rsp,28
jmp qword ptr [7FF8A166D9C0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToUpperConversion, System.Private.CoreLib]](System.String)
M02_L00:
mov ecx,15FB
mov rdx,7FF8A0FC4000
call CORINFO_HELP_STRCNS
mov rcx,rax
call qword ptr [7FF8A12B53F0]
int 3
; Total bytes of code 49Compare Jit Disasm
; System.Tests.Perf_String.ToUpper(System.String)
push rsi
sub rsp,20
mov rsi,rdx
cmp [rsi],sil
call qword ptr [7FFC11885A08]; System.Globalization.CultureInfo.get_CurrentCulture()
mov rcx,rax
mov rax,[rax]
mov rax,[rax+48]
call qword ptr [rax+38]
mov rcx,rax
mov rdx,rsi
cmp [rcx],ecx
add rsp,20
pop rsi
jmp qword ptr [7FFC11937BB8]; System.Globalization.TextInfo.ToUpper(System.String)
; Total bytes of code 49; System.Globalization.CultureInfo.get_CurrentCulture()
sub rsp,28
mov rcx,7FFC116D4D58
mov edx,24D
call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE
mov rax,[rax+8]
test rax,rax
jne short M01_L00
mov rax,2154FC00550
mov rax,[rax]
test rax,rax
jne short M01_L00
mov rax,2154FC00530
mov rax,[rax]
test rax,rax
je short M01_L01
M01_L00:
add rsp,28
ret
M01_L01:
add rsp,28
jmp qword ptr [7FFC118858B8]
; Total bytes of code 84; System.Globalization.TextInfo.ToUpper(System.String)
sub rsp,28
test rdx,rdx
je short M02_L00
add rsp,28
jmp qword ptr [7FFC11C5D9C0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToUpperConversion, System.Private.CoreLib]](System.String)
M02_L00:
mov ecx,15FB
mov rdx,7FFC115B4000
call CORINFO_HELP_STRCNS
mov rcx,rax
call qword ptr [7FFC118A5408]
int 3
; Total bytes of code 49System.Tests.Perf_String.ToLower(s: "This is a much longer piece of text that might benefit more from vectorization.")
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 46.89561687707146 < 65.36819866319416.
IsChangePoint: Marked as a change because one of 11/24/2022 8:21:24 PM, 11/29/2022 1:43:29 AM falls between 11/20/2022 12:28:28 PM and 11/29/2022 1:43:29 AM.
IsImprovementStdDev: Marked as improvement because 30.609923400575422 (T) = (0 -43.48979750250063) / Math.Sqrt((6.105007857571039 / (299)) + (8.541176375317116 / (15))) is greater than 1.9675964973877862 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (15) - 2, .975) and 0.3508824151519219 = (66.99833515168002 - 43.48979750250063) / 66.99833515168002 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.
```### Baseline Jit Disasm
```assembly
; System.Tests.Perf_String.ToLower(System.String)
push rdi
push rsi
sub rsp,28
mov rsi,rdx
cmp [rsi],sil
call qword ptr [7FFE8A775A08]; System.Globalization.CultureInfo.get_CurrentCulture()
mov rdi,[rax]
mov rcx,offset MT_System.Globalization.CultureInfo
cmp rdi,rcx
jne short M00_L01
mov rcx,rax
call qword ptr [7FFE8A785738]; System.Globalization.CultureInfo.get_TextInfo()
M00_L00:
mov rcx,rax
mov rdx,rsi
cmp [rcx],ecx
add rsp,28
pop rsi
pop rdi
jmp qword ptr [7FFE8A827A80]; System.Globalization.TextInfo.ToLower(System.String)
M00_L01:
mov rcx,rax
mov rax,[rdi+48]
call qword ptr [rax+38]
jmp short M00_L00
; Total bytes of code 77
; System.Globalization.CultureInfo.get_CurrentCulture()
sub rsp,28
mov rcx,7FFE8A5C4CD0
mov edx,254
call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE
mov rax,[rax+8]
test rax,rax
jne short M01_L00
mov rax,28509800548
mov rax,[rax]
test rax,rax
jne short M01_L00
mov rax,28509800528
mov rax,[rax]
test rax,rax
je short M01_L01
M01_L00:
add rsp,28
ret
M01_L01:
add rsp,28
jmp qword ptr [7FFE8A7758B8]
; Total bytes of code 84; System.Globalization.CultureInfo.get_TextInfo()
push rdi
push rsi
sub rsp,28
mov rsi,rcx
cmp qword ptr [rsi+10],0
je short M02_L01
M02_L00:
mov rax,[rsi+10]
add rsp,28
pop rsi
pop rdi
ret
M02_L01:
mov rcx,offset MT_System.Globalization.TextInfo
call CORINFO_HELP_NEWSFAST
mov rdi,rax
mov rdx,[rsi+30]
mov rcx,rdi
call qword ptr [7FFE8A8278D0]
movzx edx,byte ptr [rsi+60]
mov [rdi+30],dl
lea rcx,[rsi+10]
mov rdx,rdi
call CORINFO_HELP_ASSIGN_REF
jmp short M02_L00
; Total bytes of code 79; System.Globalization.TextInfo.ToLower(System.String)
sub rsp,28
test rdx,rdx
je short M03_L00
add rsp,28
jmp qword ptr [7FFE8AB85FD8]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToLowerConversion, System.Private.CoreLib]](System.String)
M03_L00:
mov ecx,15FB
mov rdx,7FFE8A4A4000
call CORINFO_HELP_STRCNS
mov rcx,rax
call qword ptr [7FFE8A7953F0]
int 3
; Total bytes of code 49Compare Jit Disasm
; System.Tests.Perf_String.ToLower(System.String)
push rdi
push rsi
sub rsp,28
mov rsi,rdx
cmp [rsi],sil
call qword ptr [7FFD473C5A08]; System.Globalization.CultureInfo.get_CurrentCulture()
mov rdi,[rax]
mov rcx,offset MT_System.Globalization.CultureInfo
cmp rdi,rcx
jne short M00_L01
mov rcx,rax
call qword ptr [7FFD473D5910]; System.Globalization.CultureInfo.get_TextInfo()
M00_L00:
mov rcx,rax
mov rdx,rsi
cmp [rcx],ecx
add rsp,28
pop rsi
pop rdi
jmp qword ptr [7FFD47477A80]; System.Globalization.TextInfo.ToLower(System.String)
M00_L01:
mov rcx,rax
mov rax,[rdi+48]
call qword ptr [rax+38]
jmp short M00_L00
; Total bytes of code 77; System.Globalization.CultureInfo.get_CurrentCulture()
sub rsp,28
mov rcx,7FFD47214D58
mov edx,24D
call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE
mov rax,[rax+8]
test rax,rax
jne short M01_L00
mov rax,23990400550
mov rax,[rax]
test rax,rax
jne short M01_L00
mov rax,23990400530
mov rax,[rax]
test rax,rax
je short M01_L01
M01_L00:
add rsp,28
ret
M01_L01:
add rsp,28
jmp qword ptr [7FFD473C58B8]
; Total bytes of code 84; System.Globalization.CultureInfo.get_TextInfo()
push rdi
push rsi
sub rsp,28
mov rsi,rcx
cmp qword ptr [rsi+10],0
je short M02_L01
M02_L00:
mov rax,[rsi+10]
add rsp,28
pop rsi
pop rdi
ret
M02_L01:
mov rcx,offset MT_System.Globalization.TextInfo
call CORINFO_HELP_NEWSFAST
mov rdi,rax
mov rdx,[rsi+30]
mov rcx,rdi
call qword ptr [7FFD474778D0]
movzx edx,byte ptr [rsi+60]
mov [rdi+30],dl
lea rcx,[rsi+10]
mov rdx,rdi
call CORINFO_HELP_ASSIGN_REF
jmp short M02_L00
; Total bytes of code 79; System.Globalization.TextInfo.ToLower(System.String)
sub rsp,28
test rdx,rdx
je short M03_L00
add rsp,28
jmp qword ptr [7FFD477D5FD8]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToLowerConversion, System.Private.CoreLib]](System.String)
M03_L00:
mov ecx,15FB
mov rdx,7FFD470F4000
call CORINFO_HELP_STRCNS
mov rcx,rax
call qword ptr [7FFD473E5408]
int 3
; Total bytes of code 49Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository



