dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
15.38k stars 4.75k forks source link

Regressions in System.Numerics.Tests #81766

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 2ba2396495c22429035d165e478672c442f81e22
Compare 6aa9f8b5a5d7ea4d79715f0b16f2a5b0ab6ac48d
Diff Diff

Regressions in System.Numerics.Tests.Perf_Quaternion

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[LengthSquaredBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Numerics.Tests.Perf_Quaternion.LengthSquaredBenchmark.html>) 0.00 ns 1.04 ns 0.06 False Trace Trace
[LengthBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Numerics.Tests.Perf_Quaternion.LengthBenchmark.html>) 0.00 ns 1.04 ns 0.06 False -0.11767803968260403 1.852401797777939 -15.741270017533898 Trace Trace
[SlerpBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Numerics.Tests.Perf_Quaternion.SlerpBenchmark.html>) 8.71 ns 11.58 ns 1.33 0.07 False 87.35053552639945 96.94180164487575 1.1098020299552438 Trace Trace
[LerpBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Numerics.Tests.Perf_Quaternion.LerpBenchmark.html>) 8.71 ns 11.46 ns 1.32 0.04 False 87.36235521544053 96.45028072538463 1.1040256468307517 Trace Trace

graph 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.Numerics.Tests.Perf_Quaternion*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Numerics.Tests.Perf_Quaternion.LengthSquaredBenchmark ```log ``` ### Description of detection logic ```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. 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.0363166035472344 > 0. IsChangePoint: Marked as a change because one of 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -731.5907363494977 (T) = (0 -1.0367084157573616) / Math.Sqrt((5.187377291605866E-05 / (38)) + (1.577644041218473E-05 / (25))) is less than -1.9996235849941724 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (25) - 2, .025) and -335.8787115919655 = (0.0030773936734032766 - 1.0367084157573616) / 0.0030773936734032766 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.Numerics.Tests.Perf_Quaternion.LengthSquaredBenchmark() vzeroupper vmovss xmm0,dword ptr [7FFE7D934E80] ret ; Total bytes of code 12 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Quaternion.LengthSquaredBenchmark() vzeroupper vmovups xmm0,[7FFB80444EB0] vdpps xmm0,xmm0,[7FFB80444EB0],0FF ret ; Total bytes of code 22 ``` #### System.Numerics.Tests.Perf_Quaternion.LengthBenchmark ```log ``` ### Description of detection logic ```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. 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.0356956434939693 > 0. IsChangePoint: Marked as a change because one of 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -840.0216859863431 (T) = (0 -1.0368072513018893) / Math.Sqrt((5.1986637393728984E-05 / (38)) + (3.65736932597433E-06 / (25))) is less than -1.9996235849941724 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (25) - 2, .025) and -335.5468090566671 = (0.003080722275180787 - 1.0368072513018893) / 0.003080722275180787 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.Numerics.Tests.Perf_Quaternion.LengthBenchmark() vzeroupper vmovss xmm0,dword ptr [7FFAA7AC4E80] ret ; Total bytes of code 12 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Quaternion.LengthBenchmark() vzeroupper vmovups xmm0,[7FF8FF1E4EB0] vdpps xmm0,xmm0,[7FF8FF1E4EB0],0FF vsqrtss xmm0,xmm0,xmm0 ret ; Total bytes of code 26 ``` #### System.Numerics.Tests.Perf_Quaternion.SlerpBenchmark ```log ``` ### Description of detection logic ```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. 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 11.584437906324805 > 9.160248058426017. IsChangePoint: Marked as a change because one of 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -288.22962816383796 (T) = (0 -11.474283585002874) / Math.Sqrt((0.0006529603262924105 / (38)) + (0.0018408209869257982 / (25))) is less than -1.9996235849941724 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (25) - 2, .025) and -0.31472301857383916 = (8.727529238401663 - 11.474283585002874) / 8.727529238401663 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.Numerics.Tests.Perf_Quaternion.SlerpBenchmark() push rsi sub rsp,40 vzeroupper mov rsi,rdx vxorps xmm3,xmm3,xmm3 vmovups [rsp+30],xmm3 xor ecx,ecx mov [rsp+20],ecx mov [rsp+24],ecx mov [rsp+28],ecx mov dword ptr [rsp+2C],3F800000 mov rcx,rsi lea r8,[rsp+20] lea rdx,[rsp+30] vmovss xmm3,dword ptr [7FFC1D725030] call qword ptr [7FFC1DAE1CF0]; System.Numerics.Quaternion.Lerp(System.Numerics.Quaternion, System.Numerics.Quaternion, Single) mov rax,rsi add rsp,40 pop rsi ret ; Total bytes of code 79 ``` ```assembly ; System.Numerics.Quaternion.Lerp(System.Numerics.Quaternion, System.Numerics.Quaternion, Single) sub rsp,78 vzeroupper vmovaps [rsp+60],xmm6 vmovaps [rsp+50],xmm7 vmovaps [rsp+40],xmm8 vmovaps [rsp+30],xmm9 vmovaps [rsp+20],xmm10 vmovaps [rsp+10],xmm11 vmovaps [rsp],xmm12 vmovss xmm0,dword ptr [r8] vmovss xmm1,dword ptr [r8+4] vmovss xmm2,dword ptr [r8+8] vmovss xmm4,dword ptr [r8+0C] vmovss xmm5,dword ptr [rdx] vmovss xmm6,dword ptr [rdx+4] vmovss xmm7,dword ptr [rdx+8] vmovss xmm8,dword ptr [rdx+0C] vmovss xmm9,dword ptr [7FFC1D7251F0] vsubss xmm10,xmm9,xmm3 vmulss xmm11,xmm5,xmm0 vmulss xmm12,xmm6,xmm1 vaddss xmm11,xmm11,xmm12 vmulss xmm12,xmm7,xmm2 vaddss xmm11,xmm11,xmm12 vmulss xmm12,xmm8,xmm4 vaddss xmm11,xmm11,xmm12 vxorps xmm12,xmm12,xmm12 vucomiss xmm11,xmm12 jb short M01_L00 vmulss xmm5,xmm10,xmm5 vmulss xmm0,xmm3,xmm0 vaddss xmm0,xmm5,xmm0 vmulss xmm5,xmm10,xmm6 vmulss xmm1,xmm3,xmm1 vaddss xmm1,xmm5,xmm1 vmulss xmm5,xmm10,xmm7 vmulss xmm2,xmm3,xmm2 vaddss xmm2,xmm5,xmm2 vmulss xmm5,xmm10,xmm8 vmulss xmm3,xmm3,xmm4 vaddss xmm3,xmm5,xmm3 jmp short M01_L01 M01_L00: vmulss xmm5,xmm10,xmm5 vmulss xmm0,xmm3,xmm0 vsubss xmm0,xmm5,xmm0 vmulss xmm5,xmm10,xmm6 vmulss xmm1,xmm3,xmm1 vsubss xmm1,xmm5,xmm1 vmulss xmm5,xmm10,xmm7 vmulss xmm2,xmm3,xmm2 vsubss xmm2,xmm5,xmm2 vmulss xmm5,xmm10,xmm8 vmulss xmm3,xmm3,xmm4 vsubss xmm3,xmm5,xmm3 M01_L01: vmulss xmm4,xmm0,xmm0 vmulss xmm5,xmm1,xmm1 vaddss xmm4,xmm4,xmm5 vmulss xmm5,xmm2,xmm2 vaddss xmm4,xmm4,xmm5 vmulss xmm5,xmm3,xmm3 vaddss xmm4,xmm4,xmm5 vsqrtss xmm4,xmm4,xmm4 vdivss xmm4,xmm9,xmm4 vmulss xmm0,xmm0,xmm4 vmulss xmm1,xmm1,xmm4 vmulss xmm2,xmm2,xmm4 vmulss xmm3,xmm3,xmm4 vmovss dword ptr [rcx],xmm0 vmovss dword ptr [rcx+4],xmm1 vmovss dword ptr [rcx+8],xmm2 vmovss dword ptr [rcx+0C],xmm3 mov rax,rcx vmovaps xmm6,[rsp+60] vmovaps xmm7,[rsp+50] vmovaps xmm8,[rsp+40] vmovaps xmm9,[rsp+30] vmovaps xmm10,[rsp+20] vmovaps xmm11,[rsp+10] vmovaps xmm12,[rsp] add rsp,78 ret ; Total bytes of code 365 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Quaternion.SlerpBenchmark() push rsi sub rsp,40 vzeroupper mov rsi,rdx vxorps xmm3,xmm3,xmm3 vmovaps [rsp+30],xmm3 vmovups xmm3,[7FF8FF1E5030] vmovaps [rsp+20],xmm3 mov rcx,rsi lea r8,[rsp+20] lea rdx,[rsp+30] vmovss xmm3,dword ptr [7FF8FF1E5040] call qword ptr [7FF8FF5A1CA8]; System.Numerics.Quaternion.Lerp(System.Numerics.Quaternion, System.Numerics.Quaternion, Single) mov rax,rsi add rsp,40 pop rsi ret ; Total bytes of code 71 ``` ```assembly ; System.Numerics.Quaternion.Lerp(System.Numerics.Quaternion, System.Numerics.Quaternion, Single) sub rsp,78 vzeroupper vmovaps [rsp+60],xmm6 vmovaps [rsp+50],xmm7 vmovaps [rsp+40],xmm8 vmovaps [rsp+30],xmm9 vmovaps [rsp+20],xmm10 vmovaps [rsp+10],xmm11 vmovaps [rsp],xmm12 vmovss xmm0,dword ptr [r8] vmovss xmm1,dword ptr [r8+4] vmovss xmm2,dword ptr [r8+8] vmovss xmm4,dword ptr [r8+0C] vmovss xmm5,dword ptr [rdx] vmovss xmm6,dword ptr [rdx+4] vmovss xmm7,dword ptr [rdx+8] vmovss xmm8,dword ptr [rdx+0C] vmovss xmm9,dword ptr [7FF8FF1E5228] vsubss xmm10,xmm9,xmm3 vmulss xmm11,xmm5,xmm0 vmulss xmm12,xmm6,xmm1 vaddss xmm11,xmm11,xmm12 vmulss xmm12,xmm7,xmm2 vaddss xmm11,xmm11,xmm12 vmulss xmm12,xmm8,xmm4 vaddss xmm11,xmm11,xmm12 vxorps xmm12,xmm12,xmm12 vucomiss xmm11,xmm12 jb short M01_L00 vmulss xmm5,xmm10,xmm5 vmulss xmm0,xmm3,xmm0 vaddss xmm0,xmm5,xmm0 vinsertps xmm0,xmm0,xmm0,0E vmulss xmm5,xmm10,xmm6 vmulss xmm1,xmm3,xmm1 vaddss xmm1,xmm5,xmm1 vinsertps xmm0,xmm0,xmm1,10 vmulss xmm1,xmm10,xmm7 vmulss xmm2,xmm3,xmm2 vaddss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vmulss xmm1,xmm10,xmm8 vmulss xmm3,xmm3,xmm4 vaddss xmm4,xmm1,xmm3 vinsertps xmm0,xmm0,xmm4,30 jmp short M01_L01 M01_L00: vmulss xmm5,xmm10,xmm5 vmulss xmm0,xmm3,xmm0 vsubss xmm0,xmm5,xmm0 vinsertps xmm0,xmm0,xmm0,0E vmulss xmm5,xmm10,xmm6 vmulss xmm1,xmm3,xmm1 vsubss xmm1,xmm5,xmm1 vinsertps xmm0,xmm0,xmm1,10 vmulss xmm1,xmm10,xmm7 vmulss xmm2,xmm3,xmm2 vsubss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vmulss xmm1,xmm10,xmm8 vmulss xmm2,xmm3,xmm4 vsubss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,30 M01_L01: vmovaps xmm1,xmm0 vmulss xmm2,xmm1,xmm1 vmovshdup xmm3,xmm0 vmulss xmm3,xmm3,xmm3 vaddss xmm2,xmm2,xmm3 vunpckhps xmm3,xmm0,xmm0 vmulss xmm3,xmm3,xmm3 vaddss xmm2,xmm2,xmm3 vshufps xmm3,xmm0,xmm0,0FF vmulss xmm3,xmm3,xmm3 vaddss xmm2,xmm2,xmm3 vsqrtss xmm2,xmm2,xmm2 vdivss xmm2,xmm9,xmm2 vmulss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,0 vmovshdup xmm1,xmm0 vmulss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,10 vunpckhps xmm1,xmm0,xmm0 vmulss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vshufps xmm1,xmm0,xmm0,0FF vmulss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,30 vmovups [rcx],xmm0 mov rax,rcx vmovaps xmm6,[rsp+60] vmovaps xmm7,[rsp+50] vmovaps xmm8,[rsp+40] vmovaps xmm9,[rsp+30] vmovaps xmm10,[rsp+20] vmovaps xmm11,[rsp+10] vmovaps xmm12,[rsp] add rsp,78 ret ; Total bytes of code 452 ``` #### System.Numerics.Tests.Perf_Quaternion.LerpBenchmark ```log ``` ### Description of detection logic ```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. 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 11.46262173778344 > 9.185412534754093. IsChangePoint: Marked as a change because one of 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -334.0209415723982 (T) = (0 -11.474521821264013) / Math.Sqrt((0.00044598270122739417 / (38)) + (0.0013920109515264938 / (25))) is less than -1.9996235849941724 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (25) - 2, .025) and -0.31408453364314826 = (8.731951048424731 - 11.474521821264013) / 8.731951048424731 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.Numerics.Tests.Perf_Quaternion.LerpBenchmark() push rsi sub rsp,40 vzeroupper mov rsi,rdx vxorps xmm3,xmm3,xmm3 vmovups [rsp+30],xmm3 xor ecx,ecx mov [rsp+20],ecx mov [rsp+24],ecx mov [rsp+28],ecx mov dword ptr [rsp+2C],3F800000 mov rcx,rsi lea r8,[rsp+20] lea rdx,[rsp+30] vmovss xmm3,dword ptr [7FFBA68B5030] call qword ptr [7FFBA6C71CF0]; System.Numerics.Quaternion.Lerp(System.Numerics.Quaternion, System.Numerics.Quaternion, Single) mov rax,rsi add rsp,40 pop rsi ret ; Total bytes of code 79 ``` ```assembly ; System.Numerics.Quaternion.Lerp(System.Numerics.Quaternion, System.Numerics.Quaternion, Single) sub rsp,78 vzeroupper vmovaps [rsp+60],xmm6 vmovaps [rsp+50],xmm7 vmovaps [rsp+40],xmm8 vmovaps [rsp+30],xmm9 vmovaps [rsp+20],xmm10 vmovaps [rsp+10],xmm11 vmovaps [rsp],xmm12 vmovss xmm0,dword ptr [r8] vmovss xmm1,dword ptr [r8+4] vmovss xmm2,dword ptr [r8+8] vmovss xmm4,dword ptr [r8+0C] vmovss xmm5,dword ptr [rdx] vmovss xmm6,dword ptr [rdx+4] vmovss xmm7,dword ptr [rdx+8] vmovss xmm8,dword ptr [rdx+0C] vmovss xmm9,dword ptr [7FFBA68B51F0] vsubss xmm10,xmm9,xmm3 vmulss xmm11,xmm5,xmm0 vmulss xmm12,xmm6,xmm1 vaddss xmm11,xmm11,xmm12 vmulss xmm12,xmm7,xmm2 vaddss xmm11,xmm11,xmm12 vmulss xmm12,xmm8,xmm4 vaddss xmm11,xmm11,xmm12 vxorps xmm12,xmm12,xmm12 vucomiss xmm11,xmm12 jb short M01_L00 vmulss xmm5,xmm10,xmm5 vmulss xmm0,xmm3,xmm0 vaddss xmm0,xmm5,xmm0 vmulss xmm5,xmm10,xmm6 vmulss xmm1,xmm3,xmm1 vaddss xmm1,xmm5,xmm1 vmulss xmm5,xmm10,xmm7 vmulss xmm2,xmm3,xmm2 vaddss xmm2,xmm5,xmm2 vmulss xmm5,xmm10,xmm8 vmulss xmm3,xmm3,xmm4 vaddss xmm3,xmm5,xmm3 jmp short M01_L01 M01_L00: vmulss xmm5,xmm10,xmm5 vmulss xmm0,xmm3,xmm0 vsubss xmm0,xmm5,xmm0 vmulss xmm5,xmm10,xmm6 vmulss xmm1,xmm3,xmm1 vsubss xmm1,xmm5,xmm1 vmulss xmm5,xmm10,xmm7 vmulss xmm2,xmm3,xmm2 vsubss xmm2,xmm5,xmm2 vmulss xmm5,xmm10,xmm8 vmulss xmm3,xmm3,xmm4 vsubss xmm3,xmm5,xmm3 M01_L01: vmulss xmm4,xmm0,xmm0 vmulss xmm5,xmm1,xmm1 vaddss xmm4,xmm4,xmm5 vmulss xmm5,xmm2,xmm2 vaddss xmm4,xmm4,xmm5 vmulss xmm5,xmm3,xmm3 vaddss xmm4,xmm4,xmm5 vsqrtss xmm4,xmm4,xmm4 vdivss xmm4,xmm9,xmm4 vmulss xmm0,xmm0,xmm4 vmulss xmm1,xmm1,xmm4 vmulss xmm2,xmm2,xmm4 vmulss xmm3,xmm3,xmm4 vmovss dword ptr [rcx],xmm0 vmovss dword ptr [rcx+4],xmm1 vmovss dword ptr [rcx+8],xmm2 vmovss dword ptr [rcx+0C],xmm3 mov rax,rcx vmovaps xmm6,[rsp+60] vmovaps xmm7,[rsp+50] vmovaps xmm8,[rsp+40] vmovaps xmm9,[rsp+30] vmovaps xmm10,[rsp+20] vmovaps xmm11,[rsp+10] vmovaps xmm12,[rsp] add rsp,78 ret ; Total bytes of code 365 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Quaternion.LerpBenchmark() push rsi sub rsp,40 vzeroupper mov rsi,rdx vxorps xmm3,xmm3,xmm3 vmovaps [rsp+30],xmm3 vmovups xmm3,[7FFDA9A45030] vmovaps [rsp+20],xmm3 mov rcx,rsi lea r8,[rsp+20] lea rdx,[rsp+30] vmovss xmm3,dword ptr [7FFDA9A45040] call qword ptr [7FFDA9E01CA8]; System.Numerics.Quaternion.Lerp(System.Numerics.Quaternion, System.Numerics.Quaternion, Single) mov rax,rsi add rsp,40 pop rsi ret ; Total bytes of code 71 ``` ```assembly ; System.Numerics.Quaternion.Lerp(System.Numerics.Quaternion, System.Numerics.Quaternion, Single) sub rsp,78 vzeroupper vmovaps [rsp+60],xmm6 vmovaps [rsp+50],xmm7 vmovaps [rsp+40],xmm8 vmovaps [rsp+30],xmm9 vmovaps [rsp+20],xmm10 vmovaps [rsp+10],xmm11 vmovaps [rsp],xmm12 vmovss xmm0,dword ptr [r8] vmovss xmm1,dword ptr [r8+4] vmovss xmm2,dword ptr [r8+8] vmovss xmm4,dword ptr [r8+0C] vmovss xmm5,dword ptr [rdx] vmovss xmm6,dword ptr [rdx+4] vmovss xmm7,dword ptr [rdx+8] vmovss xmm8,dword ptr [rdx+0C] vmovss xmm9,dword ptr [7FFDA9A45228] vsubss xmm10,xmm9,xmm3 vmulss xmm11,xmm5,xmm0 vmulss xmm12,xmm6,xmm1 vaddss xmm11,xmm11,xmm12 vmulss xmm12,xmm7,xmm2 vaddss xmm11,xmm11,xmm12 vmulss xmm12,xmm8,xmm4 vaddss xmm11,xmm11,xmm12 vxorps xmm12,xmm12,xmm12 vucomiss xmm11,xmm12 jb short M01_L00 vmulss xmm5,xmm10,xmm5 vmulss xmm0,xmm3,xmm0 vaddss xmm0,xmm5,xmm0 vinsertps xmm0,xmm0,xmm0,0E vmulss xmm5,xmm10,xmm6 vmulss xmm1,xmm3,xmm1 vaddss xmm1,xmm5,xmm1 vinsertps xmm0,xmm0,xmm1,10 vmulss xmm1,xmm10,xmm7 vmulss xmm2,xmm3,xmm2 vaddss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vmulss xmm1,xmm10,xmm8 vmulss xmm3,xmm3,xmm4 vaddss xmm4,xmm1,xmm3 vinsertps xmm0,xmm0,xmm4,30 jmp short M01_L01 M01_L00: vmulss xmm5,xmm10,xmm5 vmulss xmm0,xmm3,xmm0 vsubss xmm0,xmm5,xmm0 vinsertps xmm0,xmm0,xmm0,0E vmulss xmm5,xmm10,xmm6 vmulss xmm1,xmm3,xmm1 vsubss xmm1,xmm5,xmm1 vinsertps xmm0,xmm0,xmm1,10 vmulss xmm1,xmm10,xmm7 vmulss xmm2,xmm3,xmm2 vsubss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vmulss xmm1,xmm10,xmm8 vmulss xmm2,xmm3,xmm4 vsubss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,30 M01_L01: vmovaps xmm1,xmm0 vmulss xmm2,xmm1,xmm1 vmovshdup xmm3,xmm0 vmulss xmm3,xmm3,xmm3 vaddss xmm2,xmm2,xmm3 vunpckhps xmm3,xmm0,xmm0 vmulss xmm3,xmm3,xmm3 vaddss xmm2,xmm2,xmm3 vshufps xmm3,xmm0,xmm0,0FF vmulss xmm3,xmm3,xmm3 vaddss xmm2,xmm2,xmm3 vsqrtss xmm2,xmm2,xmm2 vdivss xmm2,xmm9,xmm2 vmulss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,0 vmovshdup xmm1,xmm0 vmulss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,10 vunpckhps xmm1,xmm0,xmm0 vmulss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vshufps xmm1,xmm0,xmm0,0FF vmulss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,30 vmovups [rcx],xmm0 mov rax,rcx vmovaps xmm6,[rsp+60] vmovaps xmm7,[rsp+50] vmovaps xmm8,[rsp+40] vmovaps xmm9,[rsp+30] vmovaps xmm10,[rsp+20] vmovaps xmm11,[rsp+10] vmovaps xmm12,[rsp] add rsp,78 ret ; Total bytes of code 452 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 2ba2396495c22429035d165e478672c442f81e22
Compare 6aa9f8b5a5d7ea4d79715f0b16f2a5b0ab6ac48d
Diff Diff

Regressions in System.Numerics.Tests.Perf_Vector2

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[TransformByQuaternionBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Numerics.Tests.Perf_Vector2.TransformByQuaternionBenchmark.html>) 0.48 ns 2.35 ns 4.90 0.05 False 11.868376639215034 38.79794674413647 3.2690188324443445 Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Numerics.Tests.Perf_Vector2*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Numerics.Tests.Perf_Vector2.TransformByQuaternionBenchmark ```log ``` ### Description of detection logic ```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. 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 2.348510100717621 > 0.5011597860031543. IsChangePoint: Marked as a change because one of 12/28/2022 5:13:50 PM, 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -549.5060160365665 (T) = (0 -2.3426211298263793) / Math.Sqrt((0.00037146637253266084 / (38)) + (4.617113394953245E-05 / (25))) is less than -1.9996235849941724 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (25) - 2, .025) and -3.9920016364506417 = (0.4692749122358069 - 2.3426211298263793) / 0.4692749122358069 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.Numerics.Tests.Perf_Vector2.TransformByQuaternionBenchmark() vzeroupper vmovsd xmm0,qword ptr [7FFBC9A45220] vmovaps xmm1,xmm0 vmulss xmm2,xmm1,dword ptr [7FFBC9A45228] vmovshdup xmm0,xmm0 vxorps xmm3,xmm3,xmm3 vmulss xmm3,xmm0,xmm3 vaddss xmm2,xmm2,xmm3 vxorps xmm3,xmm3,xmm3 vmulss xmm1,xmm1,xmm3 vaddss xmm0,xmm1,xmm0 vinsertps xmm0,xmm2,xmm0,1C vmovq rax,xmm0 ret ; Total bytes of code 63 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Vector2.TransformByQuaternionBenchmark() sub rsp,38 vzeroupper vmovaps [rsp+20],xmm6 vmovaps [rsp+10],xmm7 vmovaps [rsp],xmm8 vmovups xmm0,[7FF99F7F5280] vmovaps xmm1,xmm0 vaddss xmm2,xmm1,xmm1 vmovshdup xmm3,xmm0 vaddss xmm4,xmm3,xmm3 vunpckhps xmm5,xmm0,xmm0 vaddss xmm6,xmm5,xmm5 vshufps xmm0,xmm0,xmm0,0FF vmulss xmm0,xmm6,xmm0 vmulss xmm2,xmm2,xmm1 vmulss xmm1,xmm4,xmm1 vmulss xmm3,xmm4,xmm3 vmulss xmm4,xmm6,xmm5 vmovss xmm5,dword ptr [7FF99F7F5290] vsubss xmm3,xmm5,xmm3 vsubss xmm3,xmm3,xmm4 vmovsd xmm6,qword ptr [7FF99F7F5298] vmovaps xmm7,xmm6 vmulss xmm3,xmm3,xmm7 vsubss xmm8,xmm1,xmm0 vmovshdup xmm6,xmm6 vmulss xmm8,xmm8,xmm6 vaddss xmm3,xmm3,xmm8 vaddss xmm0,xmm1,xmm0 vmulss xmm0,xmm0,xmm7 vsubss xmm1,xmm5,xmm2 vsubss xmm1,xmm1,xmm4 vmulss xmm1,xmm1,xmm6 vaddss xmm0,xmm0,xmm1 vinsertps xmm0,xmm3,xmm0,1C vmovq rax,xmm0 vmovaps xmm6,[rsp+20] vmovaps xmm7,[rsp+10] vmovaps xmm8,[rsp] add rsp,38 ret ; Total bytes of code 187 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 2ba2396495c22429035d165e478672c442f81e22
Compare 6aa9f8b5a5d7ea4d79715f0b16f2a5b0ab6ac48d
Diff Diff

Regressions in System.Numerics.Tests.Perf_Vector4

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[TransformVector3ByQuaternionBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Numerics.Tests.Perf_Vector4.TransformVector3ByQuaternionBenchmark.html>) 1.72 ns 5.77 ns 3.35 0.03 False 29.838415371780584 74.33215468594643 2.491156241368146 Trace Trace
[TransformByQuaternionBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Numerics.Tests.Perf_Vector4.TransformByQuaternionBenchmark.html>) 1.71 ns 5.67 ns 3.30 0.04 False Trace Trace
[TransformVector2ByQuaternionBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Numerics.Tests.Perf_Vector4.TransformVector2ByQuaternionBenchmark.html>) 0.76 ns 4.10 ns 5.36 0.02 False 17.856500875766532 59.73140213643394 3.345078778423874 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.Numerics.Tests.Perf_Vector4*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Numerics.Tests.Perf_Vector4.TransformVector3ByQuaternionBenchmark ```log ``` ### Description of detection logic ```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. 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.76689777048781 > 1.8014469428774322. IsChangePoint: Marked as a change because one of 12/28/2022 5:13:50 PM, 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -202.71081880573607 (T) = (0 -5.643370412680244) / Math.Sqrt((5.149061247893137E-05 / (38)) + (0.009334782051756746 / (25))) is less than -1.9996235849941724 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (25) - 2, .025) and -2.28251717057742 = (1.7192203785753637 - 5.643370412680244) / 1.7192203785753637 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.Numerics.Tests.Perf_Vector4.TransformVector3ByQuaternionBenchmark() sub rsp,28 vzeroupper vmovaps [rsp+10],xmm6 vmovaps [rsp],xmm7 vmovss xmm0,dword ptr [7FFBB5D15330] vmovups xmm1,[7FFBB5D15340] vmovaps xmm2,xmm1 vmulss xmm3,xmm2,dword ptr [7FFBB5D15330] vmovshdup xmm4,xmm1 vxorps xmm5,xmm5,xmm5 vmulss xmm5,xmm4,xmm5 vaddss xmm3,xmm3,xmm5 vunpckhps xmm1,xmm1,xmm1 vxorps xmm6,xmm6,xmm6 vmulss xmm6,xmm1,xmm6 vaddss xmm3,xmm3,xmm6 vxorps xmm7,xmm7,xmm7 vmulss xmm2,xmm2,xmm7 vaddss xmm4,xmm2,xmm4 vaddss xmm4,xmm4,xmm6 vinsertps xmm3,xmm3,xmm4,10 vaddss xmm2,xmm5,xmm2 vaddss xmm1,xmm2,xmm1 vinsertps xmm1,xmm3,xmm1,20 vinsertps xmm0,xmm1,xmm0,30 vmovups [rdx],xmm0 mov rax,rdx vmovaps xmm6,[rsp+10] vmovaps xmm7,[rsp] add rsp,28 ret ; Total bytes of code 143 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Vector4.TransformVector3ByQuaternionBenchmark() sub rsp,98 vzeroupper vmovaps [rsp+80],xmm6 vmovaps [rsp+70],xmm7 vmovaps [rsp+60],xmm8 vmovaps [rsp+50],xmm9 vmovaps [rsp+40],xmm10 vmovaps [rsp+30],xmm11 vmovaps [rsp+20],xmm12 vmovaps [rsp+10],xmm13 vmovaps [rsp],xmm14 vmovups xmm0,[7FF7D5035400] vmovaps xmm1,xmm0 vaddss xmm2,xmm1,xmm1 vmovshdup xmm3,xmm0 vaddss xmm4,xmm3,xmm3 vunpckhps xmm5,xmm0,xmm0 vaddss xmm6,xmm5,xmm5 vshufps xmm0,xmm0,xmm0,0FF vmulss xmm7,xmm2,xmm0 vmulss xmm8,xmm4,xmm0 vmulss xmm0,xmm6,xmm0 vmulss xmm2,xmm2,xmm1 vmulss xmm9,xmm4,xmm1 vmulss xmm1,xmm6,xmm1 vmulss xmm4,xmm4,xmm3 vmulss xmm3,xmm6,xmm3 vmulss xmm5,xmm6,xmm5 vmovss xmm6,dword ptr [7FF7D5035410] vsubss xmm10,xmm6,xmm4 vsubss xmm10,xmm10,xmm5 vmovups xmm11,[7FF7D5035420] vmovaps xmm12,xmm11 vmulss xmm10,xmm10,xmm12 vsubss xmm13,xmm9,xmm0 vmovshdup xmm14,xmm11 vmulss xmm13,xmm13,xmm14 vaddss xmm10,xmm10,xmm13 vaddss xmm13,xmm1,xmm8 vunpckhps xmm11,xmm11,xmm11 vmulss xmm13,xmm13,xmm11 vaddss xmm10,xmm10,xmm13 vaddss xmm0,xmm9,xmm0 vmulss xmm0,xmm0,xmm12 vsubss xmm2,xmm6,xmm2 vsubss xmm5,xmm2,xmm5 vmulss xmm5,xmm5,xmm14 vaddss xmm0,xmm0,xmm5 vsubss xmm5,xmm3,xmm7 vmulss xmm5,xmm5,xmm11 vaddss xmm0,xmm0,xmm5 vinsertps xmm0,xmm10,xmm0,10 vsubss xmm1,xmm1,xmm8 vmulss xmm1,xmm1,xmm12 vaddss xmm3,xmm3,xmm7 vmulss xmm3,xmm3,xmm14 vaddss xmm1,xmm1,xmm3 vsubss xmm2,xmm2,xmm4 vmulss xmm2,xmm2,xmm11 vaddss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vinsertps xmm0,xmm0,xmm6,30 vmovups [rdx],xmm0 mov rax,rdx vmovaps xmm6,[rsp+80] vmovaps xmm7,[rsp+70] vmovaps xmm8,[rsp+60] vmovaps xmm9,[rsp+50] vmovaps xmm10,[rsp+40] vmovaps xmm11,[rsp+30] vmovaps xmm12,[rsp+20] vmovaps xmm13,[rsp+10] vmovaps xmm14,[rsp] add rsp,98 ret ; Total bytes of code 376 ``` #### System.Numerics.Tests.Perf_Vector4.TransformByQuaternionBenchmark ```log ``` ### Description of detection logic ```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. 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.667508672725275 > 1.8007705628396937. IsChangePoint: Marked as a change because one of 12/28/2022 5:13:50 PM, 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -272.4541331568984 (T) = (0 -5.577559804268514) / Math.Sqrt((5.4883813116301784E-05 / (37)) + (0.004977484602390882 / (25))) is less than -2.0002978220134566 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (25) - 2, .025) and -2.2449042241690633 = (1.7188673128547527 - 5.577559804268514) / 1.7188673128547527 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.Numerics.Tests.Perf_Vector4.TransformByQuaternionBenchmark() sub rsp,28 vzeroupper vmovaps [rsp+10],xmm6 vmovaps [rsp],xmm7 vmovss xmm0,dword ptr [7FFB80435330] vmovups xmm1,[7FFB80435340] vmovaps xmm2,xmm1 vmulss xmm3,xmm2,dword ptr [7FFB80435330] vmovshdup xmm4,xmm1 vxorps xmm5,xmm5,xmm5 vmulss xmm5,xmm4,xmm5 vaddss xmm3,xmm3,xmm5 vunpckhps xmm1,xmm1,xmm1 vxorps xmm6,xmm6,xmm6 vmulss xmm6,xmm1,xmm6 vaddss xmm3,xmm3,xmm6 vxorps xmm7,xmm7,xmm7 vmulss xmm2,xmm2,xmm7 vaddss xmm4,xmm2,xmm4 vaddss xmm4,xmm4,xmm6 vinsertps xmm3,xmm3,xmm4,10 vaddss xmm2,xmm5,xmm2 vaddss xmm1,xmm2,xmm1 vinsertps xmm1,xmm3,xmm1,20 vinsertps xmm0,xmm1,xmm0,30 vmovups [rdx],xmm0 mov rax,rdx vmovaps xmm6,[rsp+10] vmovaps xmm7,[rsp] add rsp,28 ret ; Total bytes of code 143 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Vector4.TransformByQuaternionBenchmark() sub rsp,98 vzeroupper vmovaps [rsp+80],xmm6 vmovaps [rsp+70],xmm7 vmovaps [rsp+60],xmm8 vmovaps [rsp+50],xmm9 vmovaps [rsp+40],xmm10 vmovaps [rsp+30],xmm11 vmovaps [rsp+20],xmm12 vmovaps [rsp+10],xmm13 vmovaps [rsp],xmm14 vmovups xmm0,[7FFE7D935400] vmovaps xmm1,xmm0 vaddss xmm2,xmm1,xmm1 vmovshdup xmm3,xmm0 vaddss xmm4,xmm3,xmm3 vunpckhps xmm5,xmm0,xmm0 vaddss xmm6,xmm5,xmm5 vshufps xmm0,xmm0,xmm0,0FF vmulss xmm7,xmm2,xmm0 vmulss xmm8,xmm4,xmm0 vmulss xmm0,xmm6,xmm0 vmulss xmm2,xmm2,xmm1 vmulss xmm9,xmm4,xmm1 vmulss xmm1,xmm6,xmm1 vmulss xmm4,xmm4,xmm3 vmulss xmm3,xmm6,xmm3 vmulss xmm5,xmm6,xmm5 vmovss xmm6,dword ptr [7FFE7D935410] vsubss xmm10,xmm6,xmm4 vsubss xmm10,xmm10,xmm5 vmovups xmm11,[7FFE7D935420] vmovaps xmm12,xmm11 vmulss xmm10,xmm10,xmm12 vsubss xmm13,xmm9,xmm0 vmovshdup xmm14,xmm11 vmulss xmm13,xmm13,xmm14 vaddss xmm10,xmm10,xmm13 vaddss xmm13,xmm1,xmm8 vunpckhps xmm11,xmm11,xmm11 vmulss xmm13,xmm13,xmm11 vaddss xmm10,xmm10,xmm13 vaddss xmm0,xmm9,xmm0 vmulss xmm0,xmm0,xmm12 vsubss xmm2,xmm6,xmm2 vsubss xmm5,xmm2,xmm5 vmulss xmm5,xmm5,xmm14 vaddss xmm0,xmm0,xmm5 vsubss xmm5,xmm3,xmm7 vmulss xmm5,xmm5,xmm11 vaddss xmm0,xmm0,xmm5 vinsertps xmm0,xmm10,xmm0,10 vsubss xmm1,xmm1,xmm8 vmulss xmm1,xmm1,xmm12 vaddss xmm3,xmm3,xmm7 vmulss xmm3,xmm3,xmm14 vaddss xmm1,xmm1,xmm3 vsubss xmm2,xmm2,xmm4 vmulss xmm2,xmm2,xmm11 vaddss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vinsertps xmm0,xmm0,xmm6,30 vmovups [rdx],xmm0 mov rax,rdx vmovaps xmm6,[rsp+80] vmovaps xmm7,[rsp+70] vmovaps xmm8,[rsp+60] vmovaps xmm9,[rsp+50] vmovaps xmm10,[rsp+40] vmovaps xmm11,[rsp+30] vmovaps xmm12,[rsp+20] vmovaps xmm13,[rsp+10] vmovaps xmm14,[rsp] add rsp,98 ret ; Total bytes of code 376 ``` #### System.Numerics.Tests.Perf_Vector4.TransformVector2ByQuaternionBenchmark ```log ``` ### Description of detection logic ```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. 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 4.100956090738956 > 0.802830786398839. IsChangePoint: Marked as a change because one of 12/28/2022 5:13:50 PM, 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -507.1357585803219 (T) = (0 -4.090488857232078) / Math.Sqrt((3.958503924877104E-05 / (38)) + (0.0010506206069021665 / (25))) is less than -1.9996235849941724 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (25) - 2, .025) and -4.365240949280058 = (0.7624054345184563 - 4.090488857232078) / 0.7624054345184563 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.Numerics.Tests.Perf_Vector4.TransformVector2ByQuaternionBenchmark() vzeroupper vmovss xmm0,dword ptr [7FF7DE105300] vmovsd xmm1,qword ptr [7FF7DE105308] vmovaps xmm2,xmm1 vmulss xmm3,xmm2,dword ptr [7FF7DE105300] vmovshdup xmm1,xmm1 vxorps xmm4,xmm4,xmm4 vmulss xmm4,xmm1,xmm4 vaddss xmm3,xmm3,xmm4 vxorps xmm5,xmm5,xmm5 vmulss xmm2,xmm2,xmm5 vaddss xmm1,xmm2,xmm1 vinsertps xmm1,xmm3,xmm1,10 vaddss xmm2,xmm4,xmm2 vinsertps xmm1,xmm1,xmm2,20 vinsertps xmm0,xmm1,xmm0,30 vmovups [rdx],xmm0 mov rax,rdx ret ; Total bytes of code 89 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Vector4.TransformVector2ByQuaternionBenchmark() sub rsp,78 vzeroupper vmovaps [rsp+60],xmm6 vmovaps [rsp+50],xmm7 vmovaps [rsp+40],xmm8 vmovaps [rsp+30],xmm9 vmovaps [rsp+20],xmm10 vmovaps [rsp+10],xmm11 vmovaps [rsp],xmm12 vmovups xmm0,[7FFBC9A453B0] vmovaps xmm1,xmm0 vaddss xmm2,xmm1,xmm1 vmovshdup xmm3,xmm0 vaddss xmm4,xmm3,xmm3 vunpckhps xmm5,xmm0,xmm0 vaddss xmm6,xmm5,xmm5 vshufps xmm0,xmm0,xmm0,0FF vmulss xmm7,xmm2,xmm0 vmulss xmm8,xmm4,xmm0 vmulss xmm0,xmm6,xmm0 vmulss xmm2,xmm2,xmm1 vmulss xmm9,xmm4,xmm1 vmulss xmm1,xmm6,xmm1 vmulss xmm4,xmm4,xmm3 vmulss xmm3,xmm6,xmm3 vmulss xmm5,xmm6,xmm5 vmovss xmm6,dword ptr [7FFBC9A453C0] vsubss xmm4,xmm6,xmm4 vsubss xmm4,xmm4,xmm5 vmovsd xmm10,qword ptr [7FFBC9A453C8] vmovaps xmm11,xmm10 vmulss xmm4,xmm4,xmm11 vsubss xmm12,xmm9,xmm0 vmovshdup xmm10,xmm10 vmulss xmm12,xmm12,xmm10 vaddss xmm4,xmm4,xmm12 vaddss xmm0,xmm9,xmm0 vmulss xmm0,xmm0,xmm11 vsubss xmm2,xmm6,xmm2 vsubss xmm2,xmm2,xmm5 vmulss xmm2,xmm2,xmm10 vaddss xmm0,xmm0,xmm2 vinsertps xmm0,xmm4,xmm0,10 vsubss xmm1,xmm1,xmm8 vmulss xmm1,xmm1,xmm11 vaddss xmm2,xmm3,xmm7 vmulss xmm2,xmm2,xmm10 vaddss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vinsertps xmm0,xmm0,xmm6,30 vmovups [rdx],xmm0 mov rax,rdx vmovaps xmm6,[rsp+60] vmovaps xmm7,[rsp+50] vmovaps xmm8,[rsp+40] vmovaps xmm9,[rsp+30] vmovaps xmm10,[rsp+20] vmovaps xmm11,[rsp+10] vmovaps xmm12,[rsp] add rsp,78 ret ; Total bytes of code 294 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 2ba2396495c22429035d165e478672c442f81e22
Compare 6aa9f8b5a5d7ea4d79715f0b16f2a5b0ab6ac48d
Diff Diff

Regressions in System.Numerics.Tests.Perf_Vector3

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[TransformByQuaternionBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Numerics.Tests.Perf_Vector3.TransformByQuaternionBenchmark.html>) 1.56 ns 5.84 ns 3.75 0.10 False 26.822726022539733 74.35922798789504 2.7722472326418024 Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Numerics.Tests.Perf_Vector3*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Numerics.Tests.Perf_Vector3.TransformByQuaternionBenchmark ```log ``` ### Description of detection logic ```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. 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.844514006980181 > 1.63706632739755. IsChangePoint: Marked as a change because one of 12/28/2022 5:13:50 PM, 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -305.4018472080218 (T) = (0 -5.70248256631275) / Math.Sqrt((5.9585790443678345E-05 / (38)) + (0.004553061603072814 / (25))) is less than -1.9996235849941724 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (25) - 2, .025) and -2.647730967229928 = (1.5632958180145595 - 5.70248256631275) / 1.5632958180145595 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.Numerics.Tests.Perf_Vector3.TransformByQuaternionBenchmark() sub rsp,18 vzeroupper vmovaps [rsp],xmm6 vmovups xmm0,[7FF99F815320] vmovaps xmm1,xmm0 vmulss xmm2,xmm1,dword ptr [7FF99F815330] vmovshdup xmm3,xmm0 vxorps xmm4,xmm4,xmm4 vmulss xmm4,xmm3,xmm4 vaddss xmm2,xmm2,xmm4 vunpckhps xmm0,xmm0,xmm0 vxorps xmm5,xmm5,xmm5 vmulss xmm5,xmm0,xmm5 vaddss xmm2,xmm2,xmm5 vxorps xmm6,xmm6,xmm6 vmulss xmm1,xmm1,xmm6 vaddss xmm3,xmm1,xmm3 vaddss xmm3,xmm3,xmm5 vinsertps xmm2,xmm2,xmm3,10 vaddss xmm1,xmm4,xmm1 vaddss xmm0,xmm1,xmm0 vinsertps xmm0,xmm2,xmm0,28 vmovsd qword ptr [rdx],xmm0 vextractps dword ptr [rdx+8],xmm0,2 mov rax,rdx vmovaps xmm6,[rsp] add rsp,18 ret ; Total bytes of code 124 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Vector3.TransformByQuaternionBenchmark() sub rsp,98 vzeroupper vmovaps [rsp+80],xmm6 vmovaps [rsp+70],xmm7 vmovaps [rsp+60],xmm8 vmovaps [rsp+50],xmm9 vmovaps [rsp+40],xmm10 vmovaps [rsp+30],xmm11 vmovaps [rsp+20],xmm12 vmovaps [rsp+10],xmm13 vmovaps [rsp],xmm14 vmovups xmm0,[7FF9AB2D5400] vmovaps xmm1,xmm0 vaddss xmm2,xmm1,xmm1 vmovshdup xmm3,xmm0 vaddss xmm4,xmm3,xmm3 vunpckhps xmm5,xmm0,xmm0 vaddss xmm6,xmm5,xmm5 vshufps xmm0,xmm0,xmm0,0FF vmulss xmm7,xmm2,xmm0 vmulss xmm8,xmm4,xmm0 vmulss xmm0,xmm6,xmm0 vmulss xmm2,xmm2,xmm1 vmulss xmm9,xmm4,xmm1 vmulss xmm1,xmm6,xmm1 vmulss xmm4,xmm4,xmm3 vmulss xmm3,xmm6,xmm3 vmulss xmm5,xmm6,xmm5 vmovss xmm6,dword ptr [7FF9AB2D5410] vsubss xmm10,xmm6,xmm4 vsubss xmm10,xmm10,xmm5 vmovups xmm11,[7FF9AB2D5420] vmovaps xmm12,xmm11 vmulss xmm10,xmm10,xmm12 vsubss xmm13,xmm9,xmm0 vmovshdup xmm14,xmm11 vmulss xmm13,xmm13,xmm14 vaddss xmm10,xmm10,xmm13 vaddss xmm13,xmm1,xmm8 vunpckhps xmm11,xmm11,xmm11 vmulss xmm13,xmm13,xmm11 vaddss xmm10,xmm10,xmm13 vaddss xmm0,xmm9,xmm0 vmulss xmm0,xmm0,xmm12 vsubss xmm2,xmm6,xmm2 vsubss xmm5,xmm2,xmm5 vmulss xmm5,xmm5,xmm14 vaddss xmm0,xmm0,xmm5 vsubss xmm5,xmm3,xmm7 vmulss xmm5,xmm5,xmm11 vaddss xmm0,xmm0,xmm5 vinsertps xmm0,xmm10,xmm0,10 vsubss xmm1,xmm1,xmm8 vmulss xmm1,xmm1,xmm12 vaddss xmm3,xmm3,xmm7 vmulss xmm3,xmm3,xmm14 vaddss xmm1,xmm1,xmm3 vsubss xmm2,xmm2,xmm4 vmulss xmm2,xmm2,xmm11 vaddss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,28 vmovsd qword ptr [rdx],xmm0 vextractps dword ptr [rdx+8],xmm0,2 mov rax,rdx vmovaps xmm6,[rsp+80] vmovaps xmm7,[rsp+70] vmovaps xmm8,[rsp+60] vmovaps xmm9,[rsp+50] vmovaps xmm10,[rsp+40] vmovaps xmm11,[rsp+30] vmovaps xmm12,[rsp+20] vmovaps xmm13,[rsp+10] vmovaps xmm14,[rsp] add rsp,98 ret ; Total bytes of code 377 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 2ba2396495c22429035d165e478672c442f81e22
Compare 6aa9f8b5a5d7ea4d79715f0b16f2a5b0ab6ac48d
Diff Diff

Regressions in System.Numerics.Tests.Perf_Plane

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[TransformByQuaternionBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows 10.0.18362/System.Numerics.Tests.Perf_Plane.TransformByQuaternionBenchmark.html>) 2.18 ns 5.12 ns 2.34 0.12 False 33.80725905186875 70.5680541873443 2.0873639616591024 Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Numerics.Tests.Perf_Plane*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Numerics.Tests.Perf_Plane.TransformByQuaternionBenchmark ```log ``` ### Description of detection logic ```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. 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.1163400022657095 > 2.296761345559043. IsChangePoint: Marked as a change because one of 12/28/2022 5:13:50 PM, 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -104.26129292419427 (T) = (0 -5.156024010271373) / Math.Sqrt((0.025449562617220162 / (38)) + (0.0030903719971422643 / (25))) is less than -1.9996235849941724 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (25) - 2, .025) and -1.3231930342000449 = (2.2193696065582293 - 5.156024010271373) / 2.2193696065582293 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.Numerics.Tests.Perf_Plane.TransformByQuaternionBenchmark() sub rsp,28 vzeroupper vmovaps [rsp+10],xmm6 vmovaps [rsp],xmm7 mov rax,1264C406A68 mov rax,[rax] add rax,8 vmovsd xmm0,qword ptr [rax] vinsertps xmm0,xmm0,dword ptr [rax+8],28 vmovss xmm1,dword ptr [rax+0C] vmovaps xmm2,xmm0 vmovshdup xmm3,xmm0 vunpckhps xmm0,xmm0,xmm0 vxorps xmm4,xmm4,xmm4 vmulss xmm4,xmm3,xmm4 vaddss xmm5,xmm2,xmm4 vxorps xmm6,xmm6,xmm6 vmulss xmm6,xmm0,xmm6 vaddss xmm5,xmm5,xmm6 vxorps xmm7,xmm7,xmm7 vmulss xmm2,xmm2,xmm7 vaddss xmm3,xmm2,xmm3 vaddss xmm3,xmm3,xmm6 vinsertps xmm3,xmm5,xmm3,10 vaddss xmm2,xmm4,xmm2 vaddss xmm0,xmm2,xmm0 vinsertps xmm0,xmm3,xmm0,28 vmovsd qword ptr [rdx],xmm0 vextractps dword ptr [rdx+8],xmm0,2 vmovss dword ptr [rdx+0C],xmm1 mov rax,rdx vmovaps xmm6,[rsp+10] vmovaps xmm7,[rsp] add rsp,28 ret ; Total bytes of code 158 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Plane.TransformByQuaternionBenchmark() sub rsp,78 vzeroupper vmovaps [rsp+60],xmm6 vmovaps [rsp+50],xmm7 vmovaps [rsp+40],xmm8 vmovaps [rsp+30],xmm9 vmovaps [rsp+20],xmm10 vmovaps [rsp+10],xmm11 vmovaps [rsp],xmm12 vmovups xmm0,[7FF9B8F753D0] vmovaps xmm1,xmm0 vaddss xmm2,xmm1,xmm1 vmovshdup xmm3,xmm0 vaddss xmm4,xmm3,xmm3 vunpckhps xmm5,xmm0,xmm0 vaddss xmm6,xmm5,xmm5 vshufps xmm0,xmm0,xmm0,0FF vmulss xmm7,xmm2,xmm0 vmulss xmm8,xmm4,xmm0 vmulss xmm0,xmm6,xmm0 vmulss xmm2,xmm2,xmm1 vmulss xmm9,xmm4,xmm1 vmulss xmm1,xmm6,xmm1 vmulss xmm4,xmm4,xmm3 vmulss xmm3,xmm6,xmm3 vmulss xmm5,xmm6,xmm5 vmovss xmm6,dword ptr [7FF9B8F753E0] vsubss xmm10,xmm6,xmm4 vsubss xmm10,xmm10,xmm5 vsubss xmm11,xmm9,xmm0 vaddss xmm12,xmm1,xmm8 vaddss xmm0,xmm9,xmm0 vsubss xmm2,xmm6,xmm2 vsubss xmm5,xmm2,xmm5 vsubss xmm6,xmm3,xmm7 vsubss xmm1,xmm1,xmm8 vaddss xmm3,xmm3,xmm7 vsubss xmm2,xmm2,xmm4 vmovups xmm4,[7FF9B8F753F0] vmovaps xmm7,xmm4 vmovshdup xmm8,xmm4 vunpckhps xmm9,xmm4,xmm4 vmulss xmm10,xmm7,xmm10 vmulss xmm11,xmm8,xmm11 vaddss xmm10,xmm10,xmm11 vmulss xmm11,xmm9,xmm12 vaddss xmm10,xmm10,xmm11 vmulss xmm0,xmm7,xmm0 vmulss xmm5,xmm8,xmm5 vaddss xmm0,xmm0,xmm5 vmulss xmm5,xmm9,xmm6 vaddss xmm0,xmm0,xmm5 vinsertps xmm0,xmm10,xmm0,10 vmulss xmm1,xmm7,xmm1 vmulss xmm3,xmm8,xmm3 vaddss xmm1,xmm1,xmm3 vmulss xmm2,xmm9,xmm2 vaddss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vshufps xmm1,xmm4,xmm4,0FF vinsertps xmm0,xmm0,xmm1,30 vmovups [rdx],xmm0 mov rax,rdx vmovaps xmm6,[rsp+60] vmovaps xmm7,[rsp+50] vmovaps xmm8,[rsp+40] vmovaps xmm9,[rsp+30] vmovaps xmm10,[rsp+20] vmovaps xmm11,[rsp+10] vmovaps xmm12,[rsp] add rsp,78 ret ; Total bytes of code 336 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
ghost commented 1 year ago

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch, @kunalspathak See info in area-owners.md if you want to be subscribed.

Issue Details
### Run Information Architecture | x64 -- | -- OS | Windows 10.0.18362 Baseline | [2ba2396495c22429035d165e478672c442f81e22](https://github.com/dotnet/runtime/commit/2ba2396495c22429035d165e478672c442f81e22) Compare | [6aa9f8b5a5d7ea4d79715f0b16f2a5b0ab6ac48d](https://github.com/dotnet/runtime/commit/6aa9f8b5a5d7ea4d79715f0b16f2a5b0ab6ac48d) Diff | [Diff](https://github.com/dotnet/runtime/compare/2ba2396495c22429035d165e478672c442f81e22...6aa9f8b5a5d7ea4d79715f0b16f2a5b0ab6ac48d) ### Regressions in System.Numerics.Tests.Perf_Quaternion Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio | Baseline ETL | Compare ETL -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- [LengthSquaredBenchmark - Duration of single invocation]() | 0.00 ns | 1.04 ns | ∞ | 0.06 | False | | | | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-188ffe82b5614d95a1/Collect%20System.Numerics.Tests.Perf_Quaternion.LengthSquaredBenchmark/1/artifacts/BenchmarkDotNet.Artifacts/System.Numerics.Tests.Perf_Quaternion.LengthSquaredBenchmark-20230207-024530.etl?sv=2021-08-06&se=2023-05-08T10%3A35%3A31Z&sr=c&sp=rl&sig=sRx42ZNQ%2BG14VPuvVNWIvmuInWeLn12a4QQKtmIpI%2Bg%3D) | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-da90a3bf48f64438a6/Collect%20System.Numerics.Tests.Perf_Quaternion.LengthSquaredBenchmark/1/artifacts/BenchmarkDotNet.Artifacts/System.Numerics.Tests.Perf_Quaternion.LengthSquaredBenchmark-20230207-024527.etl?sv=2021-08-06&se=2023-05-08T10%3A35%3A31Z&sr=c&sp=rl&sig=%2FZu2a85jDUbtbXxqroiVXhkk1f%2BA3b8RPfOgmoI8m38%3D) [LengthBenchmark - Duration of single invocation]() | 0.00 ns | 1.04 ns | ∞ | 0.06 | False | -0.11767803968260403 | 1.852401797777939 | -15.741270017533898 | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-8d9e8fba87f44dc29d/Collect%20System.Numerics.Tests.Perf_Quaternion.LengthBenchmark/1/artifacts/BenchmarkDotNet.Artifacts/System.Numerics.Tests.Perf_Quaternion.LengthBenchmark-20230207-024540.etl?sv=2021-08-06&se=2023-05-08T10%3A35%3A34Z&sr=c&sp=rl&sig=G8z6EetfCR3WN71ZJ19XLhYvxsQKBQPGTTdM60Ik1PU%3D) | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-ba13785d467a48d19e/Collect%20System.Numerics.Tests.Perf_Quaternion.LengthBenchmark/1/artifacts/BenchmarkDotNet.Artifacts/System.Numerics.Tests.Perf_Quaternion.LengthBenchmark-20230207-024548.etl?sv=2021-08-06&se=2023-05-08T10%3A35%3A34Z&sr=c&sp=rl&sig=g%2BW2nNJf8QM6pFUihMXzDdNU13o575Hwi1GcefX1E9E%3D) [SlerpBenchmark - Duration of single invocation]() | 8.71 ns | 11.58 ns | 1.33 | 0.07 | False | 87.35053552639945 | 96.94180164487575 | 1.1098020299552438 | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-1b1201173103470ab5/Collect%20System.Numerics.Tests.Perf_Quaternion.SlerpBenchmark/1/artifacts/BenchmarkDotNet.Artifacts/System.Numerics.Tests.Perf_Quaternion.SlerpBenchmark-20230207-024827.etl?sv=2021-08-06&se=2023-05-08T10%3A35%3A37Z&sr=c&sp=rl&sig=raGCmZIZyDe6KCDKG2oH9b1paunmJhz7PKr2V3vzOvc%3D) | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-f0829749ac9148e793/Collect%20System.Numerics.Tests.Perf_Quaternion.SlerpBenchmark/1/artifacts/BenchmarkDotNet.Artifacts/System.Numerics.Tests.Perf_Quaternion.SlerpBenchmark-20230207-024839.etl?sv=2021-08-06&se=2023-05-08T10%3A35%3A37Z&sr=c&sp=rl&sig=PsTzS94yy12%2Fr3Qzp%2BBYbhWOXtmOaN85V11oDm2yMI4%3D) [LerpBenchmark - Duration of single invocation]() | 8.71 ns | 11.46 ns | 1.32 | 0.04 | False | 87.36235521544053 | 96.45028072538463 | 1.1040256468307517 | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-ecd9f6cf892e410f8e/Collect%20System.Numerics.Tests.Perf_Quaternion.LerpBenchmark/1/artifacts/BenchmarkDotNet.Artifacts/System.Numerics.Tests.Perf_Quaternion.LerpBenchmark-20230207-024843.etl?sv=2021-08-06&se=2023-05-08T10%3A35%3A38Z&sr=c&sp=rl&sig=9S4ZQlyOKmML7aAq%2BIOssiQjOD4iJfXO%2FPY8OmFYHlc%3D) | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-03cae8ce73364730bb/Collect%20System.Numerics.Tests.Perf_Quaternion.LerpBenchmark/1/artifacts/BenchmarkDotNet.Artifacts/System.Numerics.Tests.Perf_Quaternion.LerpBenchmark-20230207-024843.etl?sv=2021-08-06&se=2023-05-08T10%3A35%3A38Z&sr=c&sp=rl&sig=mbt1Ue72unBt6tvmi7ouakJxWMvowC7VJ771xobqgI0%3D) ![graph]() ![graph]() ![graph]() ![graph]() [Test Report]() ### Repro ```cmd git clone https://github.com/dotnet/performance.git py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Numerics.Tests.Perf_Quaternion*' ```
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Numerics.Tests.Perf_Quaternion.LengthSquaredBenchmark ```log ``` ### Description of detection logic ```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. 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.0363166035472344 > 0. IsChangePoint: Marked as a change because one of 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -731.5907363494977 (T) = (0 -1.0367084157573616) / Math.Sqrt((5.187377291605866E-05 / (38)) + (1.577644041218473E-05 / (25))) is less than -1.9996235849941724 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (25) - 2, .025) and -335.8787115919655 = (0.0030773936734032766 - 1.0367084157573616) / 0.0030773936734032766 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.Numerics.Tests.Perf_Quaternion.LengthSquaredBenchmark() vzeroupper vmovss xmm0,dword ptr [7FFE7D934E80] ret ; Total bytes of code 12 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Quaternion.LengthSquaredBenchmark() vzeroupper vmovups xmm0,[7FFB80444EB0] vdpps xmm0,xmm0,[7FFB80444EB0],0FF ret ; Total bytes of code 22 ``` #### System.Numerics.Tests.Perf_Quaternion.LengthBenchmark ```log ``` ### Description of detection logic ```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. 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.0356956434939693 > 0. IsChangePoint: Marked as a change because one of 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -840.0216859863431 (T) = (0 -1.0368072513018893) / Math.Sqrt((5.1986637393728984E-05 / (38)) + (3.65736932597433E-06 / (25))) is less than -1.9996235849941724 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (25) - 2, .025) and -335.5468090566671 = (0.003080722275180787 - 1.0368072513018893) / 0.003080722275180787 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.Numerics.Tests.Perf_Quaternion.LengthBenchmark() vzeroupper vmovss xmm0,dword ptr [7FFAA7AC4E80] ret ; Total bytes of code 12 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Quaternion.LengthBenchmark() vzeroupper vmovups xmm0,[7FF8FF1E4EB0] vdpps xmm0,xmm0,[7FF8FF1E4EB0],0FF vsqrtss xmm0,xmm0,xmm0 ret ; Total bytes of code 26 ``` #### System.Numerics.Tests.Perf_Quaternion.SlerpBenchmark ```log ``` ### Description of detection logic ```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. 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 11.584437906324805 > 9.160248058426017. IsChangePoint: Marked as a change because one of 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -288.22962816383796 (T) = (0 -11.474283585002874) / Math.Sqrt((0.0006529603262924105 / (38)) + (0.0018408209869257982 / (25))) is less than -1.9996235849941724 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (25) - 2, .025) and -0.31472301857383916 = (8.727529238401663 - 11.474283585002874) / 8.727529238401663 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.Numerics.Tests.Perf_Quaternion.SlerpBenchmark() push rsi sub rsp,40 vzeroupper mov rsi,rdx vxorps xmm3,xmm3,xmm3 vmovups [rsp+30],xmm3 xor ecx,ecx mov [rsp+20],ecx mov [rsp+24],ecx mov [rsp+28],ecx mov dword ptr [rsp+2C],3F800000 mov rcx,rsi lea r8,[rsp+20] lea rdx,[rsp+30] vmovss xmm3,dword ptr [7FFC1D725030] call qword ptr [7FFC1DAE1CF0]; System.Numerics.Quaternion.Lerp(System.Numerics.Quaternion, System.Numerics.Quaternion, Single) mov rax,rsi add rsp,40 pop rsi ret ; Total bytes of code 79 ``` ```assembly ; System.Numerics.Quaternion.Lerp(System.Numerics.Quaternion, System.Numerics.Quaternion, Single) sub rsp,78 vzeroupper vmovaps [rsp+60],xmm6 vmovaps [rsp+50],xmm7 vmovaps [rsp+40],xmm8 vmovaps [rsp+30],xmm9 vmovaps [rsp+20],xmm10 vmovaps [rsp+10],xmm11 vmovaps [rsp],xmm12 vmovss xmm0,dword ptr [r8] vmovss xmm1,dword ptr [r8+4] vmovss xmm2,dword ptr [r8+8] vmovss xmm4,dword ptr [r8+0C] vmovss xmm5,dword ptr [rdx] vmovss xmm6,dword ptr [rdx+4] vmovss xmm7,dword ptr [rdx+8] vmovss xmm8,dword ptr [rdx+0C] vmovss xmm9,dword ptr [7FFC1D7251F0] vsubss xmm10,xmm9,xmm3 vmulss xmm11,xmm5,xmm0 vmulss xmm12,xmm6,xmm1 vaddss xmm11,xmm11,xmm12 vmulss xmm12,xmm7,xmm2 vaddss xmm11,xmm11,xmm12 vmulss xmm12,xmm8,xmm4 vaddss xmm11,xmm11,xmm12 vxorps xmm12,xmm12,xmm12 vucomiss xmm11,xmm12 jb short M01_L00 vmulss xmm5,xmm10,xmm5 vmulss xmm0,xmm3,xmm0 vaddss xmm0,xmm5,xmm0 vmulss xmm5,xmm10,xmm6 vmulss xmm1,xmm3,xmm1 vaddss xmm1,xmm5,xmm1 vmulss xmm5,xmm10,xmm7 vmulss xmm2,xmm3,xmm2 vaddss xmm2,xmm5,xmm2 vmulss xmm5,xmm10,xmm8 vmulss xmm3,xmm3,xmm4 vaddss xmm3,xmm5,xmm3 jmp short M01_L01 M01_L00: vmulss xmm5,xmm10,xmm5 vmulss xmm0,xmm3,xmm0 vsubss xmm0,xmm5,xmm0 vmulss xmm5,xmm10,xmm6 vmulss xmm1,xmm3,xmm1 vsubss xmm1,xmm5,xmm1 vmulss xmm5,xmm10,xmm7 vmulss xmm2,xmm3,xmm2 vsubss xmm2,xmm5,xmm2 vmulss xmm5,xmm10,xmm8 vmulss xmm3,xmm3,xmm4 vsubss xmm3,xmm5,xmm3 M01_L01: vmulss xmm4,xmm0,xmm0 vmulss xmm5,xmm1,xmm1 vaddss xmm4,xmm4,xmm5 vmulss xmm5,xmm2,xmm2 vaddss xmm4,xmm4,xmm5 vmulss xmm5,xmm3,xmm3 vaddss xmm4,xmm4,xmm5 vsqrtss xmm4,xmm4,xmm4 vdivss xmm4,xmm9,xmm4 vmulss xmm0,xmm0,xmm4 vmulss xmm1,xmm1,xmm4 vmulss xmm2,xmm2,xmm4 vmulss xmm3,xmm3,xmm4 vmovss dword ptr [rcx],xmm0 vmovss dword ptr [rcx+4],xmm1 vmovss dword ptr [rcx+8],xmm2 vmovss dword ptr [rcx+0C],xmm3 mov rax,rcx vmovaps xmm6,[rsp+60] vmovaps xmm7,[rsp+50] vmovaps xmm8,[rsp+40] vmovaps xmm9,[rsp+30] vmovaps xmm10,[rsp+20] vmovaps xmm11,[rsp+10] vmovaps xmm12,[rsp] add rsp,78 ret ; Total bytes of code 365 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Quaternion.SlerpBenchmark() push rsi sub rsp,40 vzeroupper mov rsi,rdx vxorps xmm3,xmm3,xmm3 vmovaps [rsp+30],xmm3 vmovups xmm3,[7FF8FF1E5030] vmovaps [rsp+20],xmm3 mov rcx,rsi lea r8,[rsp+20] lea rdx,[rsp+30] vmovss xmm3,dword ptr [7FF8FF1E5040] call qword ptr [7FF8FF5A1CA8]; System.Numerics.Quaternion.Lerp(System.Numerics.Quaternion, System.Numerics.Quaternion, Single) mov rax,rsi add rsp,40 pop rsi ret ; Total bytes of code 71 ``` ```assembly ; System.Numerics.Quaternion.Lerp(System.Numerics.Quaternion, System.Numerics.Quaternion, Single) sub rsp,78 vzeroupper vmovaps [rsp+60],xmm6 vmovaps [rsp+50],xmm7 vmovaps [rsp+40],xmm8 vmovaps [rsp+30],xmm9 vmovaps [rsp+20],xmm10 vmovaps [rsp+10],xmm11 vmovaps [rsp],xmm12 vmovss xmm0,dword ptr [r8] vmovss xmm1,dword ptr [r8+4] vmovss xmm2,dword ptr [r8+8] vmovss xmm4,dword ptr [r8+0C] vmovss xmm5,dword ptr [rdx] vmovss xmm6,dword ptr [rdx+4] vmovss xmm7,dword ptr [rdx+8] vmovss xmm8,dword ptr [rdx+0C] vmovss xmm9,dword ptr [7FF8FF1E5228] vsubss xmm10,xmm9,xmm3 vmulss xmm11,xmm5,xmm0 vmulss xmm12,xmm6,xmm1 vaddss xmm11,xmm11,xmm12 vmulss xmm12,xmm7,xmm2 vaddss xmm11,xmm11,xmm12 vmulss xmm12,xmm8,xmm4 vaddss xmm11,xmm11,xmm12 vxorps xmm12,xmm12,xmm12 vucomiss xmm11,xmm12 jb short M01_L00 vmulss xmm5,xmm10,xmm5 vmulss xmm0,xmm3,xmm0 vaddss xmm0,xmm5,xmm0 vinsertps xmm0,xmm0,xmm0,0E vmulss xmm5,xmm10,xmm6 vmulss xmm1,xmm3,xmm1 vaddss xmm1,xmm5,xmm1 vinsertps xmm0,xmm0,xmm1,10 vmulss xmm1,xmm10,xmm7 vmulss xmm2,xmm3,xmm2 vaddss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vmulss xmm1,xmm10,xmm8 vmulss xmm3,xmm3,xmm4 vaddss xmm4,xmm1,xmm3 vinsertps xmm0,xmm0,xmm4,30 jmp short M01_L01 M01_L00: vmulss xmm5,xmm10,xmm5 vmulss xmm0,xmm3,xmm0 vsubss xmm0,xmm5,xmm0 vinsertps xmm0,xmm0,xmm0,0E vmulss xmm5,xmm10,xmm6 vmulss xmm1,xmm3,xmm1 vsubss xmm1,xmm5,xmm1 vinsertps xmm0,xmm0,xmm1,10 vmulss xmm1,xmm10,xmm7 vmulss xmm2,xmm3,xmm2 vsubss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vmulss xmm1,xmm10,xmm8 vmulss xmm2,xmm3,xmm4 vsubss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,30 M01_L01: vmovaps xmm1,xmm0 vmulss xmm2,xmm1,xmm1 vmovshdup xmm3,xmm0 vmulss xmm3,xmm3,xmm3 vaddss xmm2,xmm2,xmm3 vunpckhps xmm3,xmm0,xmm0 vmulss xmm3,xmm3,xmm3 vaddss xmm2,xmm2,xmm3 vshufps xmm3,xmm0,xmm0,0FF vmulss xmm3,xmm3,xmm3 vaddss xmm2,xmm2,xmm3 vsqrtss xmm2,xmm2,xmm2 vdivss xmm2,xmm9,xmm2 vmulss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,0 vmovshdup xmm1,xmm0 vmulss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,10 vunpckhps xmm1,xmm0,xmm0 vmulss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vshufps xmm1,xmm0,xmm0,0FF vmulss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,30 vmovups [rcx],xmm0 mov rax,rcx vmovaps xmm6,[rsp+60] vmovaps xmm7,[rsp+50] vmovaps xmm8,[rsp+40] vmovaps xmm9,[rsp+30] vmovaps xmm10,[rsp+20] vmovaps xmm11,[rsp+10] vmovaps xmm12,[rsp] add rsp,78 ret ; Total bytes of code 452 ``` #### System.Numerics.Tests.Perf_Quaternion.LerpBenchmark ```log ``` ### Description of detection logic ```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. 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 11.46262173778344 > 9.185412534754093. IsChangePoint: Marked as a change because one of 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -334.0209415723982 (T) = (0 -11.474521821264013) / Math.Sqrt((0.00044598270122739417 / (38)) + (0.0013920109515264938 / (25))) is less than -1.9996235849941724 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (25) - 2, .025) and -0.31408453364314826 = (8.731951048424731 - 11.474521821264013) / 8.731951048424731 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.Numerics.Tests.Perf_Quaternion.LerpBenchmark() push rsi sub rsp,40 vzeroupper mov rsi,rdx vxorps xmm3,xmm3,xmm3 vmovups [rsp+30],xmm3 xor ecx,ecx mov [rsp+20],ecx mov [rsp+24],ecx mov [rsp+28],ecx mov dword ptr [rsp+2C],3F800000 mov rcx,rsi lea r8,[rsp+20] lea rdx,[rsp+30] vmovss xmm3,dword ptr [7FFBA68B5030] call qword ptr [7FFBA6C71CF0]; System.Numerics.Quaternion.Lerp(System.Numerics.Quaternion, System.Numerics.Quaternion, Single) mov rax,rsi add rsp,40 pop rsi ret ; Total bytes of code 79 ``` ```assembly ; System.Numerics.Quaternion.Lerp(System.Numerics.Quaternion, System.Numerics.Quaternion, Single) sub rsp,78 vzeroupper vmovaps [rsp+60],xmm6 vmovaps [rsp+50],xmm7 vmovaps [rsp+40],xmm8 vmovaps [rsp+30],xmm9 vmovaps [rsp+20],xmm10 vmovaps [rsp+10],xmm11 vmovaps [rsp],xmm12 vmovss xmm0,dword ptr [r8] vmovss xmm1,dword ptr [r8+4] vmovss xmm2,dword ptr [r8+8] vmovss xmm4,dword ptr [r8+0C] vmovss xmm5,dword ptr [rdx] vmovss xmm6,dword ptr [rdx+4] vmovss xmm7,dword ptr [rdx+8] vmovss xmm8,dword ptr [rdx+0C] vmovss xmm9,dword ptr [7FFBA68B51F0] vsubss xmm10,xmm9,xmm3 vmulss xmm11,xmm5,xmm0 vmulss xmm12,xmm6,xmm1 vaddss xmm11,xmm11,xmm12 vmulss xmm12,xmm7,xmm2 vaddss xmm11,xmm11,xmm12 vmulss xmm12,xmm8,xmm4 vaddss xmm11,xmm11,xmm12 vxorps xmm12,xmm12,xmm12 vucomiss xmm11,xmm12 jb short M01_L00 vmulss xmm5,xmm10,xmm5 vmulss xmm0,xmm3,xmm0 vaddss xmm0,xmm5,xmm0 vmulss xmm5,xmm10,xmm6 vmulss xmm1,xmm3,xmm1 vaddss xmm1,xmm5,xmm1 vmulss xmm5,xmm10,xmm7 vmulss xmm2,xmm3,xmm2 vaddss xmm2,xmm5,xmm2 vmulss xmm5,xmm10,xmm8 vmulss xmm3,xmm3,xmm4 vaddss xmm3,xmm5,xmm3 jmp short M01_L01 M01_L00: vmulss xmm5,xmm10,xmm5 vmulss xmm0,xmm3,xmm0 vsubss xmm0,xmm5,xmm0 vmulss xmm5,xmm10,xmm6 vmulss xmm1,xmm3,xmm1 vsubss xmm1,xmm5,xmm1 vmulss xmm5,xmm10,xmm7 vmulss xmm2,xmm3,xmm2 vsubss xmm2,xmm5,xmm2 vmulss xmm5,xmm10,xmm8 vmulss xmm3,xmm3,xmm4 vsubss xmm3,xmm5,xmm3 M01_L01: vmulss xmm4,xmm0,xmm0 vmulss xmm5,xmm1,xmm1 vaddss xmm4,xmm4,xmm5 vmulss xmm5,xmm2,xmm2 vaddss xmm4,xmm4,xmm5 vmulss xmm5,xmm3,xmm3 vaddss xmm4,xmm4,xmm5 vsqrtss xmm4,xmm4,xmm4 vdivss xmm4,xmm9,xmm4 vmulss xmm0,xmm0,xmm4 vmulss xmm1,xmm1,xmm4 vmulss xmm2,xmm2,xmm4 vmulss xmm3,xmm3,xmm4 vmovss dword ptr [rcx],xmm0 vmovss dword ptr [rcx+4],xmm1 vmovss dword ptr [rcx+8],xmm2 vmovss dword ptr [rcx+0C],xmm3 mov rax,rcx vmovaps xmm6,[rsp+60] vmovaps xmm7,[rsp+50] vmovaps xmm8,[rsp+40] vmovaps xmm9,[rsp+30] vmovaps xmm10,[rsp+20] vmovaps xmm11,[rsp+10] vmovaps xmm12,[rsp] add rsp,78 ret ; Total bytes of code 365 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Quaternion.LerpBenchmark() push rsi sub rsp,40 vzeroupper mov rsi,rdx vxorps xmm3,xmm3,xmm3 vmovaps [rsp+30],xmm3 vmovups xmm3,[7FFDA9A45030] vmovaps [rsp+20],xmm3 mov rcx,rsi lea r8,[rsp+20] lea rdx,[rsp+30] vmovss xmm3,dword ptr [7FFDA9A45040] call qword ptr [7FFDA9E01CA8]; System.Numerics.Quaternion.Lerp(System.Numerics.Quaternion, System.Numerics.Quaternion, Single) mov rax,rsi add rsp,40 pop rsi ret ; Total bytes of code 71 ``` ```assembly ; System.Numerics.Quaternion.Lerp(System.Numerics.Quaternion, System.Numerics.Quaternion, Single) sub rsp,78 vzeroupper vmovaps [rsp+60],xmm6 vmovaps [rsp+50],xmm7 vmovaps [rsp+40],xmm8 vmovaps [rsp+30],xmm9 vmovaps [rsp+20],xmm10 vmovaps [rsp+10],xmm11 vmovaps [rsp],xmm12 vmovss xmm0,dword ptr [r8] vmovss xmm1,dword ptr [r8+4] vmovss xmm2,dword ptr [r8+8] vmovss xmm4,dword ptr [r8+0C] vmovss xmm5,dword ptr [rdx] vmovss xmm6,dword ptr [rdx+4] vmovss xmm7,dword ptr [rdx+8] vmovss xmm8,dword ptr [rdx+0C] vmovss xmm9,dword ptr [7FFDA9A45228] vsubss xmm10,xmm9,xmm3 vmulss xmm11,xmm5,xmm0 vmulss xmm12,xmm6,xmm1 vaddss xmm11,xmm11,xmm12 vmulss xmm12,xmm7,xmm2 vaddss xmm11,xmm11,xmm12 vmulss xmm12,xmm8,xmm4 vaddss xmm11,xmm11,xmm12 vxorps xmm12,xmm12,xmm12 vucomiss xmm11,xmm12 jb short M01_L00 vmulss xmm5,xmm10,xmm5 vmulss xmm0,xmm3,xmm0 vaddss xmm0,xmm5,xmm0 vinsertps xmm0,xmm0,xmm0,0E vmulss xmm5,xmm10,xmm6 vmulss xmm1,xmm3,xmm1 vaddss xmm1,xmm5,xmm1 vinsertps xmm0,xmm0,xmm1,10 vmulss xmm1,xmm10,xmm7 vmulss xmm2,xmm3,xmm2 vaddss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vmulss xmm1,xmm10,xmm8 vmulss xmm3,xmm3,xmm4 vaddss xmm4,xmm1,xmm3 vinsertps xmm0,xmm0,xmm4,30 jmp short M01_L01 M01_L00: vmulss xmm5,xmm10,xmm5 vmulss xmm0,xmm3,xmm0 vsubss xmm0,xmm5,xmm0 vinsertps xmm0,xmm0,xmm0,0E vmulss xmm5,xmm10,xmm6 vmulss xmm1,xmm3,xmm1 vsubss xmm1,xmm5,xmm1 vinsertps xmm0,xmm0,xmm1,10 vmulss xmm1,xmm10,xmm7 vmulss xmm2,xmm3,xmm2 vsubss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vmulss xmm1,xmm10,xmm8 vmulss xmm2,xmm3,xmm4 vsubss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,30 M01_L01: vmovaps xmm1,xmm0 vmulss xmm2,xmm1,xmm1 vmovshdup xmm3,xmm0 vmulss xmm3,xmm3,xmm3 vaddss xmm2,xmm2,xmm3 vunpckhps xmm3,xmm0,xmm0 vmulss xmm3,xmm3,xmm3 vaddss xmm2,xmm2,xmm3 vshufps xmm3,xmm0,xmm0,0FF vmulss xmm3,xmm3,xmm3 vaddss xmm2,xmm2,xmm3 vsqrtss xmm2,xmm2,xmm2 vdivss xmm2,xmm9,xmm2 vmulss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,0 vmovshdup xmm1,xmm0 vmulss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,10 vunpckhps xmm1,xmm0,xmm0 vmulss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vshufps xmm1,xmm0,xmm0,0FF vmulss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,30 vmovups [rcx],xmm0 mov rax,rcx vmovaps xmm6,[rsp+60] vmovaps xmm7,[rsp+50] vmovaps xmm8,[rsp+40] vmovaps xmm9,[rsp+30] vmovaps xmm10,[rsp+20] vmovaps xmm11,[rsp+10] vmovaps xmm12,[rsp] add rsp,78 ret ; Total bytes of code 452 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
### Run Information Architecture | x64 -- | -- OS | Windows 10.0.18362 Baseline | [2ba2396495c22429035d165e478672c442f81e22](https://github.com/dotnet/runtime/commit/2ba2396495c22429035d165e478672c442f81e22) Compare | [6aa9f8b5a5d7ea4d79715f0b16f2a5b0ab6ac48d](https://github.com/dotnet/runtime/commit/6aa9f8b5a5d7ea4d79715f0b16f2a5b0ab6ac48d) Diff | [Diff](https://github.com/dotnet/runtime/compare/2ba2396495c22429035d165e478672c442f81e22...6aa9f8b5a5d7ea4d79715f0b16f2a5b0ab6ac48d) ### Regressions in System.Numerics.Tests.Perf_Vector2 Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio | Baseline ETL | Compare ETL -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- [TransformByQuaternionBenchmark - Duration of single invocation]() | 0.48 ns | 2.35 ns | 4.90 | 0.05 | False | 11.868376639215034 | 38.79794674413647 | 3.2690188324443445 | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-2b0adbf31c1b4aefa0/Collect%20System.Numerics.Tests.Perf_Vector2.TransformByQuaternionBenchmark/1/artifacts/BenchmarkDotNet.Artifacts/System.Numerics.Tests.Perf_Vector2.TransformByQuaternionBenchmark-20230207-024516.etl?sv=2021-08-06&se=2023-05-08T10%3A35%3A31Z&sr=c&sp=rl&sig=5y1V%2FFAQQ5Se2vGqkY%2BiZHmhQkvPIhgZ99318N7bCBU%3D) | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-449b194dce904508a5/Collect%20System.Numerics.Tests.Perf_Vector2.TransformByQuaternionBenchmark/1/artifacts/BenchmarkDotNet.Artifacts/System.Numerics.Tests.Perf_Vector2.TransformByQuaternionBenchmark-20230207-024527.etl?sv=2021-08-06&se=2023-05-08T10%3A35%3A32Z&sr=c&sp=rl&sig=uOdguBrYa1olO2C9WOCLu4k5u0puKAIKVUkTnHrwhrY%3D) ![graph]() [Test Report]() ### Repro ```cmd git clone https://github.com/dotnet/performance.git py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Numerics.Tests.Perf_Vector2*' ```
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Numerics.Tests.Perf_Vector2.TransformByQuaternionBenchmark ```log ``` ### Description of detection logic ```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. 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 2.348510100717621 > 0.5011597860031543. IsChangePoint: Marked as a change because one of 12/28/2022 5:13:50 PM, 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -549.5060160365665 (T) = (0 -2.3426211298263793) / Math.Sqrt((0.00037146637253266084 / (38)) + (4.617113394953245E-05 / (25))) is less than -1.9996235849941724 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (25) - 2, .025) and -3.9920016364506417 = (0.4692749122358069 - 2.3426211298263793) / 0.4692749122358069 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.Numerics.Tests.Perf_Vector2.TransformByQuaternionBenchmark() vzeroupper vmovsd xmm0,qword ptr [7FFBC9A45220] vmovaps xmm1,xmm0 vmulss xmm2,xmm1,dword ptr [7FFBC9A45228] vmovshdup xmm0,xmm0 vxorps xmm3,xmm3,xmm3 vmulss xmm3,xmm0,xmm3 vaddss xmm2,xmm2,xmm3 vxorps xmm3,xmm3,xmm3 vmulss xmm1,xmm1,xmm3 vaddss xmm0,xmm1,xmm0 vinsertps xmm0,xmm2,xmm0,1C vmovq rax,xmm0 ret ; Total bytes of code 63 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Vector2.TransformByQuaternionBenchmark() sub rsp,38 vzeroupper vmovaps [rsp+20],xmm6 vmovaps [rsp+10],xmm7 vmovaps [rsp],xmm8 vmovups xmm0,[7FF99F7F5280] vmovaps xmm1,xmm0 vaddss xmm2,xmm1,xmm1 vmovshdup xmm3,xmm0 vaddss xmm4,xmm3,xmm3 vunpckhps xmm5,xmm0,xmm0 vaddss xmm6,xmm5,xmm5 vshufps xmm0,xmm0,xmm0,0FF vmulss xmm0,xmm6,xmm0 vmulss xmm2,xmm2,xmm1 vmulss xmm1,xmm4,xmm1 vmulss xmm3,xmm4,xmm3 vmulss xmm4,xmm6,xmm5 vmovss xmm5,dword ptr [7FF99F7F5290] vsubss xmm3,xmm5,xmm3 vsubss xmm3,xmm3,xmm4 vmovsd xmm6,qword ptr [7FF99F7F5298] vmovaps xmm7,xmm6 vmulss xmm3,xmm3,xmm7 vsubss xmm8,xmm1,xmm0 vmovshdup xmm6,xmm6 vmulss xmm8,xmm8,xmm6 vaddss xmm3,xmm3,xmm8 vaddss xmm0,xmm1,xmm0 vmulss xmm0,xmm0,xmm7 vsubss xmm1,xmm5,xmm2 vsubss xmm1,xmm1,xmm4 vmulss xmm1,xmm1,xmm6 vaddss xmm0,xmm0,xmm1 vinsertps xmm0,xmm3,xmm0,1C vmovq rax,xmm0 vmovaps xmm6,[rsp+20] vmovaps xmm7,[rsp+10] vmovaps xmm8,[rsp] add rsp,38 ret ; Total bytes of code 187 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
### Run Information Architecture | x64 -- | -- OS | Windows 10.0.18362 Baseline | [2ba2396495c22429035d165e478672c442f81e22](https://github.com/dotnet/runtime/commit/2ba2396495c22429035d165e478672c442f81e22) Compare | [6aa9f8b5a5d7ea4d79715f0b16f2a5b0ab6ac48d](https://github.com/dotnet/runtime/commit/6aa9f8b5a5d7ea4d79715f0b16f2a5b0ab6ac48d) Diff | [Diff](https://github.com/dotnet/runtime/compare/2ba2396495c22429035d165e478672c442f81e22...6aa9f8b5a5d7ea4d79715f0b16f2a5b0ab6ac48d) ### Regressions in System.Numerics.Tests.Perf_Vector4 Benchmark | Baseline | Test | Test/Base | Test Quality | Edge Detector | Baseline IR | Compare IR | IR Ratio | Baseline ETL | Compare ETL -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- [TransformVector3ByQuaternionBenchmark - Duration of single invocation]() | 1.72 ns | 5.77 ns | 3.35 | 0.03 | False | 29.838415371780584 | 74.33215468594643 | 2.491156241368146 | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-8f986ac5432543938b/Collect%20System.Numerics.Tests.Perf_Vector4.TransformVector3ByQuaternionBenchmark/1/artifacts/BenchmarkDotNet.Artifacts/System.Numerics.Tests.Perf_Vector4.TransformVector3ByQuaternionBenchmark-20230207-024624.etl?sv=2021-08-06&se=2023-05-08T10%3A35%3A35Z&sr=c&sp=rl&sig=cM%2FNZA2%2FTqIfcVABtn4YEv4Si5LMhr234HhvjJAZPc4%3D) | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-2703950e475043268c/Collect%20System.Numerics.Tests.Perf_Vector4.TransformVector3ByQuaternionBenchmark/1/artifacts/BenchmarkDotNet.Artifacts/System.Numerics.Tests.Perf_Vector4.TransformVector3ByQuaternionBenchmark-20230207-024647.etl?sv=2021-08-06&se=2023-05-08T10%3A35%3A35Z&sr=c&sp=rl&sig=4hv2ZqqHqxbB6bvjeLgw50oOvqPUQ229FVYupUg%2BouY%3D) [TransformByQuaternionBenchmark - Duration of single invocation]() | 1.71 ns | 5.67 ns | 3.30 | 0.04 | False | | | | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-63f359be5a1a494288/Collect%20System.Numerics.Tests.Perf_Vector4.TransformByQuaternionBenchmark/1/artifacts/BenchmarkDotNet.Artifacts/System.Numerics.Tests.Perf_Vector4.TransformByQuaternionBenchmark-20230207-024816.etl?sv=2021-08-06&se=2023-05-08T10%3A35%3A36Z&sr=c&sp=rl&sig=ZYQaQg%2FjUodhuNXY2M8u8JfFVpOM3nhh4FQQvaVqQas%3D) | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-3c5448ce5f5c46498e/Collect%20System.Numerics.Tests.Perf_Vector4.TransformByQuaternionBenchmark/1/artifacts/BenchmarkDotNet.Artifacts/System.Numerics.Tests.Perf_Vector4.TransformByQuaternionBenchmark-20230207-024824.etl?sv=2021-08-06&se=2023-05-08T10%3A35%3A36Z&sr=c&sp=rl&sig=qfsg7GGBb5%2BQH2CtERZb5DvrXAsYwpHcvWLR3%2Ft1Ahw%3D) [TransformVector2ByQuaternionBenchmark - Duration of single invocation]() | 0.76 ns | 4.10 ns | 5.36 | 0.02 | False | 17.856500875766532 | 59.73140213643394 | 3.345078778423874 | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-8e30d80e1e074920a3/Collect%20System.Numerics.Tests.Perf_Vector4.TransformVector2ByQuaternionBenchmark/1/artifacts/BenchmarkDotNet.Artifacts/System.Numerics.Tests.Perf_Vector4.TransformVector2ByQuaternionBenchmark-20230207-024813.etl?sv=2021-08-06&se=2023-05-08T10%3A35%3A36Z&sr=c&sp=rl&sig=7nXsS8D5u3%2BYA8ZnH7MXVlzoThhmIoZq4LqOzg9woxU%3D) | [Trace](https://helixri107v0xdeko0k025g8.blob.core.windows.net/results-2e50bad754754bbeab/Collect%20System.Numerics.Tests.Perf_Vector4.TransformVector2ByQuaternionBenchmark/1/artifacts/BenchmarkDotNet.Artifacts/System.Numerics.Tests.Perf_Vector4.TransformVector2ByQuaternionBenchmark-20230207-024823.etl?sv=2021-08-06&se=2023-05-08T10%3A35%3A37Z&sr=c&sp=rl&sig=7gD3g1fafcY8RWdamF9A5fq0KI7iQgzOYRM55kk%2Bgfc%3D) ![graph]() ![graph]() ![graph]() [Test Report]() ### Repro ```cmd git clone https://github.com/dotnet/performance.git py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Numerics.Tests.Perf_Vector4*' ```
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Numerics.Tests.Perf_Vector4.TransformVector3ByQuaternionBenchmark ```log ``` ### Description of detection logic ```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. 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.76689777048781 > 1.8014469428774322. IsChangePoint: Marked as a change because one of 12/28/2022 5:13:50 PM, 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -202.71081880573607 (T) = (0 -5.643370412680244) / Math.Sqrt((5.149061247893137E-05 / (38)) + (0.009334782051756746 / (25))) is less than -1.9996235849941724 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (25) - 2, .025) and -2.28251717057742 = (1.7192203785753637 - 5.643370412680244) / 1.7192203785753637 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.Numerics.Tests.Perf_Vector4.TransformVector3ByQuaternionBenchmark() sub rsp,28 vzeroupper vmovaps [rsp+10],xmm6 vmovaps [rsp],xmm7 vmovss xmm0,dword ptr [7FFBB5D15330] vmovups xmm1,[7FFBB5D15340] vmovaps xmm2,xmm1 vmulss xmm3,xmm2,dword ptr [7FFBB5D15330] vmovshdup xmm4,xmm1 vxorps xmm5,xmm5,xmm5 vmulss xmm5,xmm4,xmm5 vaddss xmm3,xmm3,xmm5 vunpckhps xmm1,xmm1,xmm1 vxorps xmm6,xmm6,xmm6 vmulss xmm6,xmm1,xmm6 vaddss xmm3,xmm3,xmm6 vxorps xmm7,xmm7,xmm7 vmulss xmm2,xmm2,xmm7 vaddss xmm4,xmm2,xmm4 vaddss xmm4,xmm4,xmm6 vinsertps xmm3,xmm3,xmm4,10 vaddss xmm2,xmm5,xmm2 vaddss xmm1,xmm2,xmm1 vinsertps xmm1,xmm3,xmm1,20 vinsertps xmm0,xmm1,xmm0,30 vmovups [rdx],xmm0 mov rax,rdx vmovaps xmm6,[rsp+10] vmovaps xmm7,[rsp] add rsp,28 ret ; Total bytes of code 143 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Vector4.TransformVector3ByQuaternionBenchmark() sub rsp,98 vzeroupper vmovaps [rsp+80],xmm6 vmovaps [rsp+70],xmm7 vmovaps [rsp+60],xmm8 vmovaps [rsp+50],xmm9 vmovaps [rsp+40],xmm10 vmovaps [rsp+30],xmm11 vmovaps [rsp+20],xmm12 vmovaps [rsp+10],xmm13 vmovaps [rsp],xmm14 vmovups xmm0,[7FF7D5035400] vmovaps xmm1,xmm0 vaddss xmm2,xmm1,xmm1 vmovshdup xmm3,xmm0 vaddss xmm4,xmm3,xmm3 vunpckhps xmm5,xmm0,xmm0 vaddss xmm6,xmm5,xmm5 vshufps xmm0,xmm0,xmm0,0FF vmulss xmm7,xmm2,xmm0 vmulss xmm8,xmm4,xmm0 vmulss xmm0,xmm6,xmm0 vmulss xmm2,xmm2,xmm1 vmulss xmm9,xmm4,xmm1 vmulss xmm1,xmm6,xmm1 vmulss xmm4,xmm4,xmm3 vmulss xmm3,xmm6,xmm3 vmulss xmm5,xmm6,xmm5 vmovss xmm6,dword ptr [7FF7D5035410] vsubss xmm10,xmm6,xmm4 vsubss xmm10,xmm10,xmm5 vmovups xmm11,[7FF7D5035420] vmovaps xmm12,xmm11 vmulss xmm10,xmm10,xmm12 vsubss xmm13,xmm9,xmm0 vmovshdup xmm14,xmm11 vmulss xmm13,xmm13,xmm14 vaddss xmm10,xmm10,xmm13 vaddss xmm13,xmm1,xmm8 vunpckhps xmm11,xmm11,xmm11 vmulss xmm13,xmm13,xmm11 vaddss xmm10,xmm10,xmm13 vaddss xmm0,xmm9,xmm0 vmulss xmm0,xmm0,xmm12 vsubss xmm2,xmm6,xmm2 vsubss xmm5,xmm2,xmm5 vmulss xmm5,xmm5,xmm14 vaddss xmm0,xmm0,xmm5 vsubss xmm5,xmm3,xmm7 vmulss xmm5,xmm5,xmm11 vaddss xmm0,xmm0,xmm5 vinsertps xmm0,xmm10,xmm0,10 vsubss xmm1,xmm1,xmm8 vmulss xmm1,xmm1,xmm12 vaddss xmm3,xmm3,xmm7 vmulss xmm3,xmm3,xmm14 vaddss xmm1,xmm1,xmm3 vsubss xmm2,xmm2,xmm4 vmulss xmm2,xmm2,xmm11 vaddss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vinsertps xmm0,xmm0,xmm6,30 vmovups [rdx],xmm0 mov rax,rdx vmovaps xmm6,[rsp+80] vmovaps xmm7,[rsp+70] vmovaps xmm8,[rsp+60] vmovaps xmm9,[rsp+50] vmovaps xmm10,[rsp+40] vmovaps xmm11,[rsp+30] vmovaps xmm12,[rsp+20] vmovaps xmm13,[rsp+10] vmovaps xmm14,[rsp] add rsp,98 ret ; Total bytes of code 376 ``` #### System.Numerics.Tests.Perf_Vector4.TransformByQuaternionBenchmark ```log ``` ### Description of detection logic ```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. 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.667508672725275 > 1.8007705628396937. IsChangePoint: Marked as a change because one of 12/28/2022 5:13:50 PM, 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -272.4541331568984 (T) = (0 -5.577559804268514) / Math.Sqrt((5.4883813116301784E-05 / (37)) + (0.004977484602390882 / (25))) is less than -2.0002978220134566 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (37) + (25) - 2, .025) and -2.2449042241690633 = (1.7188673128547527 - 5.577559804268514) / 1.7188673128547527 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.Numerics.Tests.Perf_Vector4.TransformByQuaternionBenchmark() sub rsp,28 vzeroupper vmovaps [rsp+10],xmm6 vmovaps [rsp],xmm7 vmovss xmm0,dword ptr [7FFB80435330] vmovups xmm1,[7FFB80435340] vmovaps xmm2,xmm1 vmulss xmm3,xmm2,dword ptr [7FFB80435330] vmovshdup xmm4,xmm1 vxorps xmm5,xmm5,xmm5 vmulss xmm5,xmm4,xmm5 vaddss xmm3,xmm3,xmm5 vunpckhps xmm1,xmm1,xmm1 vxorps xmm6,xmm6,xmm6 vmulss xmm6,xmm1,xmm6 vaddss xmm3,xmm3,xmm6 vxorps xmm7,xmm7,xmm7 vmulss xmm2,xmm2,xmm7 vaddss xmm4,xmm2,xmm4 vaddss xmm4,xmm4,xmm6 vinsertps xmm3,xmm3,xmm4,10 vaddss xmm2,xmm5,xmm2 vaddss xmm1,xmm2,xmm1 vinsertps xmm1,xmm3,xmm1,20 vinsertps xmm0,xmm1,xmm0,30 vmovups [rdx],xmm0 mov rax,rdx vmovaps xmm6,[rsp+10] vmovaps xmm7,[rsp] add rsp,28 ret ; Total bytes of code 143 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Vector4.TransformByQuaternionBenchmark() sub rsp,98 vzeroupper vmovaps [rsp+80],xmm6 vmovaps [rsp+70],xmm7 vmovaps [rsp+60],xmm8 vmovaps [rsp+50],xmm9 vmovaps [rsp+40],xmm10 vmovaps [rsp+30],xmm11 vmovaps [rsp+20],xmm12 vmovaps [rsp+10],xmm13 vmovaps [rsp],xmm14 vmovups xmm0,[7FFE7D935400] vmovaps xmm1,xmm0 vaddss xmm2,xmm1,xmm1 vmovshdup xmm3,xmm0 vaddss xmm4,xmm3,xmm3 vunpckhps xmm5,xmm0,xmm0 vaddss xmm6,xmm5,xmm5 vshufps xmm0,xmm0,xmm0,0FF vmulss xmm7,xmm2,xmm0 vmulss xmm8,xmm4,xmm0 vmulss xmm0,xmm6,xmm0 vmulss xmm2,xmm2,xmm1 vmulss xmm9,xmm4,xmm1 vmulss xmm1,xmm6,xmm1 vmulss xmm4,xmm4,xmm3 vmulss xmm3,xmm6,xmm3 vmulss xmm5,xmm6,xmm5 vmovss xmm6,dword ptr [7FFE7D935410] vsubss xmm10,xmm6,xmm4 vsubss xmm10,xmm10,xmm5 vmovups xmm11,[7FFE7D935420] vmovaps xmm12,xmm11 vmulss xmm10,xmm10,xmm12 vsubss xmm13,xmm9,xmm0 vmovshdup xmm14,xmm11 vmulss xmm13,xmm13,xmm14 vaddss xmm10,xmm10,xmm13 vaddss xmm13,xmm1,xmm8 vunpckhps xmm11,xmm11,xmm11 vmulss xmm13,xmm13,xmm11 vaddss xmm10,xmm10,xmm13 vaddss xmm0,xmm9,xmm0 vmulss xmm0,xmm0,xmm12 vsubss xmm2,xmm6,xmm2 vsubss xmm5,xmm2,xmm5 vmulss xmm5,xmm5,xmm14 vaddss xmm0,xmm0,xmm5 vsubss xmm5,xmm3,xmm7 vmulss xmm5,xmm5,xmm11 vaddss xmm0,xmm0,xmm5 vinsertps xmm0,xmm10,xmm0,10 vsubss xmm1,xmm1,xmm8 vmulss xmm1,xmm1,xmm12 vaddss xmm3,xmm3,xmm7 vmulss xmm3,xmm3,xmm14 vaddss xmm1,xmm1,xmm3 vsubss xmm2,xmm2,xmm4 vmulss xmm2,xmm2,xmm11 vaddss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vinsertps xmm0,xmm0,xmm6,30 vmovups [rdx],xmm0 mov rax,rdx vmovaps xmm6,[rsp+80] vmovaps xmm7,[rsp+70] vmovaps xmm8,[rsp+60] vmovaps xmm9,[rsp+50] vmovaps xmm10,[rsp+40] vmovaps xmm11,[rsp+30] vmovaps xmm12,[rsp+20] vmovaps xmm13,[rsp+10] vmovaps xmm14,[rsp] add rsp,98 ret ; Total bytes of code 376 ``` #### System.Numerics.Tests.Perf_Vector4.TransformVector2ByQuaternionBenchmark ```log ``` ### Description of detection logic ```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. 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 4.100956090738956 > 0.802830786398839. IsChangePoint: Marked as a change because one of 12/28/2022 5:13:50 PM, 2/2/2023 5:46:53 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. IsRegressionStdDev: Marked as regression because -507.1357585803219 (T) = (0 -4.090488857232078) / Math.Sqrt((3.958503924877104E-05 / (38)) + (0.0010506206069021665 / (25))) is less than -1.9996235849941724 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (38) + (25) - 2, .025) and -4.365240949280058 = (0.7624054345184563 - 4.090488857232078) / 0.7624054345184563 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.Numerics.Tests.Perf_Vector4.TransformVector2ByQuaternionBenchmark() vzeroupper vmovss xmm0,dword ptr [7FF7DE105300] vmovsd xmm1,qword ptr [7FF7DE105308] vmovaps xmm2,xmm1 vmulss xmm3,xmm2,dword ptr [7FF7DE105300] vmovshdup xmm1,xmm1 vxorps xmm4,xmm4,xmm4 vmulss xmm4,xmm1,xmm4 vaddss xmm3,xmm3,xmm4 vxorps xmm5,xmm5,xmm5 vmulss xmm2,xmm2,xmm5 vaddss xmm1,xmm2,xmm1 vinsertps xmm1,xmm3,xmm1,10 vaddss xmm2,xmm4,xmm2 vinsertps xmm1,xmm1,xmm2,20 vinsertps xmm0,xmm1,xmm0,30 vmovups [rdx],xmm0 mov rax,rdx ret ; Total bytes of code 89 ``` ### Compare Jit Disasm ```assembly ; System.Numerics.Tests.Perf_Vector4.TransformVector2ByQuaternionBenchmark() sub rsp,78 vzeroupper vmovaps [rsp+60],xmm6 vmovaps [rsp+50],xmm7 vmovaps [rsp+40],xmm8 vmovaps [rsp+30],xmm9 vmovaps [rsp+20],xmm10 vmovaps [rsp+10],xmm11 vmovaps [rsp],xmm12 vmovups xmm0,[7FFBC9A453B0] vmovaps xmm1,xmm0 vaddss xmm2,xmm1,xmm1 vmovshdup xmm3,xmm0 vaddss xmm4,xmm3,xmm3 vunpckhps xmm5,xmm0,xmm0 vaddss xmm6,xmm5,xmm5 vshufps xmm0,xmm0,xmm0,0FF vmulss xmm7,xmm2,xmm0 vmulss xmm8,xmm4,xmm0 vmulss xmm0,xmm6,xmm0 vmulss xmm2,xmm2,xmm1 vmulss xmm9,xmm4,xmm1 vmulss xmm1,xmm6,xmm1 vmulss xmm4,xmm4,xmm3 vmulss xmm3,xmm6,xmm3 vmulss xmm5,xmm6,xmm5 vmovss xmm6,dword ptr [7FFBC9A453C0] vsubss xmm4,xmm6,xmm4 vsubss xmm4,xmm4,xmm5 vmovsd xmm10,qword ptr [7FFBC9A453C8] vmovaps xmm11,xmm10 vmulss xmm4,xmm4,xmm11 vsubss xmm12,xmm9,xmm0 vmovshdup xmm10,xmm10 vmulss xmm12,xmm12,xmm10 vaddss xmm4,xmm4,xmm12 vaddss xmm0,xmm9,xmm0 vmulss xmm0,xmm0,xmm11 vsubss xmm2,xmm6,xmm2 vsubss xmm2,xmm2,xmm5 vmulss xmm2,xmm2,xmm10 vaddss xmm0,xmm0,xmm2 vinsertps xmm0,xmm4,xmm0,10 vsubss xmm1,xmm1,xmm8 vmulss xmm1,xmm1,xmm11 vaddss xmm2,xmm3,xmm7 vmulss xmm2,xmm2,xmm10 vaddss xmm1,xmm1,xmm2 vinsertps xmm0,xmm0,xmm1,20 vinsertps xmm0,xmm0,xmm6,30 vmovups [rdx],xmm0 mov rax,rdx vmovaps xmm6,[rsp+60] vmovaps xmm7,[rsp+50] vmovaps xmm8,[rsp+40] vmovaps xmm9,[rsp+30] vmovaps xmm10,[rsp+20] vmovaps xmm11,[rsp+10] vmovaps xmm12,[rsp] add rsp,78 ret ; Total bytes of code 294 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
Author: performanceautofiler[bot]
Assignees: DrewScoggins
Labels: `area-CodeGen-coreclr`, `untriaged`, `PGO`
Milestone: -
EgorBo commented 1 year ago

https://github.com/dotnet/runtime/pull/81335 cc @tannergooding

tannergooding commented 1 year ago

Thanks!

Many of these were known ahead of time and were due to them being "bad benchmarks". That is, they only involved constant inputs of promotable structs and so had large amounts of constant folding leading to non-representative results in the benchmarks.

Will leave this open until we finish the work to "fix" the tests.

tannergooding commented 1 year ago

Moving to future as this is a benchmark issue and not something critical to shipping .NET 8.

The actual code for the types in question has been significantly improved for real world scenarios.