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

RyuJIT is the x86 JIT in .NET Core 2.0 – Replacing JIT32 #10

Open
richlander opened this Issue Apr 21, 2017 · 1 comment

Comments

Projects
None yet
2 participants
@richlander
Member

richlander commented Apr 21, 2017

RyuJIT is the x86 JIT in .NET Core 2.0 – Replacing JIT32

Summary

The RyuJIT JIT compiler will be used for all platform combinations for .NET Core 2.0 and beyond. JIT32 will be removed from the product. For .NET Core 1.x, RyuJIT is used for x64 and JIT32 is used for x86 chip support.

We intend for RyuJIT to be a 100% functionally compatible replacement for JIT32. RyuJIT has gone through extensive stress testing. This brings the .NET Core 32-bit product behavior much closer to the 64-bit product behavior.

We will publish more information on this change later. For now, this is just the announcement.

Note: Windows is the only supported 32-bit platform for .NET Core 1.x and 2.x.

Details:

Impact

Open Source - RyuJIT is open source. JIT32 is not open source.

Single JIT Codebase - There is now a single codebase for the CoreCLR JIT. This helps everyone who is working on platform expansion and who is investing in JIT improvements. An example is Samsung, who is investing in Linux x86 with RyuJIT x86.

Performance - RyuJIT generally takes longer to compile than JIT32, but its optimizer can generate faster code. The performance difference may not be significant, depending on the application. In initial testing with ASP.NET, we found that the difference didn't matter. Please help us make RyuJIT faster! We will continue investing in RyuJIT performance (which often helps all architectures). If you notice performance regressions, we’re very interested to hear your results. Please contact us.

Features! - RyuJIT has more features than JIT32. The feature gap with JIT32 will grow over time. The following features are now available to x86 workloads (due to this change):

  • SIMD
  • Fast Span<T> support
  • Inlining improvements
  • Devirtualization
  • Significantly better floating point performance
  • Better performance with value types (structs)

Possible compatibility concerns:

  • floating-point precision
  • undefined behaviors (programs that happened to work that had bugs in them) especially around interop, inlining differences (GetCallerAssembly intrinsic).

Please test! If an x86 program was working in 1.x, and failing in 2.x, please report it on GitHub or at ryujit@microsoft.com.

Please see some of our past blog posts on RyuJIT to learn more about it.

Rationale

RyuJIT is the current and future platform of JIT compilation for .NET. We will use it for all platform combinations going forward. We're more efficient as a developer community if we have a single codebase to learn, work on and improve.

@dotnet dotnet locked and limited conversation to collaborators Apr 21, 2017

@richlander richlander assigned richlander and unassigned richlander Jul 18, 2017

@richlander richlander changed the title from RyuJIT to be the x86 JIT in .NET Core 2.0 – Replacing JIT32 to RyuJIT is the x86 JIT in .NET Core 2.0 – Replacing JIT32 Aug 14, 2017

@richlander richlander closed this Nov 7, 2017

@terrajobst

This comment has been minimized.

Show comment
Hide comment
@terrajobst

terrajobst Nov 10, 2017

Member

Reopening according to process.

Member

terrajobst commented Nov 10, 2017

Reopening according to process.

@terrajobst terrajobst reopened this Nov 10, 2017

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.