-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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
Enable FEATURE_SIMD and FEATURE_AVX_SUPPORT for System V #4243
Comments
Is there any particular reason that SIMD isn't enabled on Linux yet? AFAIK it shouldn't affect the CC-related code unless we want to project Vector to |
I don't know if Lubo has done any more detailed analysis on this, but even apart from projecting these types, we may run into unexpected issues where we have inadvertently made assumptions about how these are passed. I don't think it would be too hard to try enabling it, and then we would have a better idea about whether there are any issues, and can then estimate the cost of addressing them. |
(For reference, it'd be great to get this fixed by RC2 so that code using the corefx System.Numerics.Vectors.dll library isn't negatively affected. Thanks!) |
This will directly effect the performance of the AspNet Kestrel server on Linux when using coreclr which heavily makes use of System.Numerics.Vectors e.g. MemoryPoolIterator for request parsing. /cc @davidfowl |
Most of the changes involve checking varTypeIsStruct instead of TYP_STRUCT in cases where the SIMD types are treated like other structs, and then adding a few special cases for SIMD types. This fixes half of issue #983. A previous version of this PR exposed issues with JIT/SIMD tests being inconsistently compiled wrt optimization. This change modifies those tests to always compile both with and without optimization.
Most of the changes involve checking varTypeIsStruct instead of TYP_STRUCT in cases where the SIMD types are treated like other structs, and then adding a few special cases for SIMD types. This fixes half of issue #983. A previous version of this PR exposed issues with JIT/SIMD tests being inconsistently compiled wrt optimization. This change modifies those tests to always compile both with and without optimization.
Most of the changes involve checking varTypeIsStruct instead of TYP_STRUCT in cases where the SIMD types are treated like other structs, and then adding a few special cases for SIMD types. The UNIX ABI implementation currently requires that struct handles be preserved through code generation, so this required some additional changes. Finally, the code that "homes" incoming arguments required changes to handle incoming SIMD register args that need to be reassembled into their assigned registers. That method was slightly refactored, primarily because it had cases that should have been ifdef'd out for 64 bits. It needs further refactoring, but that is left for future work. This fixes half of issue #983. A previous version of this PR exposed issues with JIT/SIMD tests being inconsistently compiled wrt optimization. This change modifies those tests to always compile both with and without optimization.
Most of the changes involve checking varTypeIsStruct instead of TYP_STRUCT in cases where the SIMD types are treated like other structs, and then adding a few special cases for SIMD types. The UNIX ABI implementation currently requires that struct handles be preserved through code generation, so this required some additional changes. Finally, the code that "homes" incoming arguments required changes to handle incoming SIMD register args that need to be reassembled into their assigned registers. That method was slightly refactored, primarily because it had cases that should have been ifdef'd out for 64 bits. It needs further refactoring, but that is left for future work. This fixes half of issue #983. A previous version of this PR exposed issues with JIT/SIMD tests being inconsistently compiled wrt optimization. This change modifies those tests to always compile both with and without optimization.
FEATURE_SIMD is now enabled. I am currently working on enabling AVX2 support, which is the other half of dotnet/coreclr#983 |
Excellent! Thank you very much 😄 |
The existing code was assuming that there would be callee-save registers for SIMD, but with the Unix ABI there are none. Fix #983
The existing code was assuming that there would be callee-save registers for SIMD, but with the Unix ABI there are none. Fix #983
The existing code was assuming that there would be callee-save registers for SIMD, but with the Unix ABI there are none. Fix #983
@LLITCHEV See PR # 981, which enables it for amd64 windows.
The text was updated successfully, but these errors were encountered: