-
Notifications
You must be signed in to change notification settings - Fork 4.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Regressions in System.Tests.Perf_Type #59704
Comments
Type equality is related to #59499 |
area of improvement: Align methods that are recursion - Ackermann benchmark? Double check if we set |
I couldn't figure out the best area label to add to this issue. If you have write-permissions please help me learn by adding exactly one area label. |
Caused by #59499 |
I guess the native implementation could potentially benefit from Native PGO? since it's a question of nanoseconds (or maybe it's Managed PGO that made C# impl worse). As a quick fix we can mark operator== as AggressiveInlining if it worth it cc @jkotas operator == should exit at |
The regression is caused by several factors:
This can be just:
@EgorBo How hard would be to fix this in the JIT?
I think it would break late recognition of the |
Tagging subscribers to this area: @JulieLeeMSFT Issue DetailsRun Information
Regressions in System.Tests.Perf_Type
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Tests.Perf_Type*' PayloadsHistogramSystem.Tests.Perf_Type.op_Equality
DocsProfiling workflow for dotnet/runtime repository Run Information
|
The remaining actionable problem here is the unnecessary register shuffling from |
@jkotas from a quick look I guess it's because of the way we inline cast/isinst -
so in theory in this specific case there should not be any COMMA/ASG, just JTRUE(EQ(IND... there was an issue for it already somewhere. Simple repro: using System;
using System.Runtime.CompilerServices;
class Program
{
static void Main()
{
Test("hello");
}
[MethodImpl(MethodImplOptions.NoInlining |
MethodImplOptions.AggressiveOptimization)]
public static int Test(object left)
{
if (left is null || left is string)
return 0;
return left.GetHashCode();
}
} |
Setting this to .NET 7. Please update it if you think it needs to be addressed in .NET 6. |
Run Information
Regressions in System.Tests.Perf_Type
Test Report
Repro
Payloads
Baseline
Compare
Histogram
System.Tests.Perf_Type.op_Equality
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
The text was updated successfully, but these errors were encountered: