-
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 NI_Vector256_Create on AVX1 #72522
Conversation
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch |
@tannergooding PTAL |
An alternative and likely better fix would to just remove or update the recursive path from the |
@tannergooding I am not sure I understand how it's better - if we remove the recursive pass we won't be able to optimize you probably meant that we can drop the recursive path and keep my JIT change? Because if I revert my change and remove the recursive path it will be slow |
AVX only hardware is pretty rare (only We also continue hitting various edge cases and hard to find bugs due to the complex relationship between what's available on AVX vs what requires AVX2. If we want to provide Keeping this so that |
Taking this change "as is" requires running the outerloop ISA tests and validating that no AVX2 instructions are generated by any path that |
@tannergooding I think it's better to do both drop the recursive calls (I've just done it) and still accelerate Vector256.Create for AVX1 (also done). |
This is still going to require running the outerloop ISA stress jobs and confirming that other phases aren't expecting to only be hit when |
Because it's possible to work with AVX-only in .NET 6.0 via Vector256.Create + Avx.X APIs - I don't see why we want to break it |
/azp list |
do you mean |
It's semi-possible and you run into some poor experiences and bad codegen because the JIT can't optimize everything as it needs. We also hit and had to patch several bugs related to mismatches. Generating AVX only code (when AVX2 isn't supported) has been one of the biggest issues we've faced because the |
/azp run runtime-coreclr jitstress-isas-x86 ^ this one (edit: thought this would work since the run command was on a single line, apparently it doesn't >.>) |
No pipelines are associated with this pull request. |
/azp run runtime-coreclr jitstress-isas-x86 |
Azure Pipelines successfully started running 1 pipeline(s). |
No pipelines are associated with this pull request. |
@tannergooding sure, I understand your point, but as we now have stronger AOT-only story (NativeAOT) we should be ready for cases when developers limit capabilities to some lower common denominator e.g. |
Sure, the main concern here is destabilizing .NET 7 and the work that might be required to ensure that everything end to end works as expected particularly with all the changes and issues that had already cropped up and caused the limitation to be put in for .NET 7 |
@tannergooding CI looks good, pri1 isas x86 pipelines are broken #71928 |
This may not impact Azure or AWS, but some of the smaller hosts definitely have these older machines in the mix. I have a client running .NET apps on a large number of Rackspace Cloud VMs, and all the ones I saw in a recent spot check were Sandy Bridge (Xeon E5-2680 to be precise).
|
@tannergooding ping |
More generally speaking, I'm raising a concern around the number of bugs we've had and continue hitting on trying to split AVX/AVX2 functionality. There is complexity in ensuring that support exists, that it works well, and that some code path doesn't accidentally pessimize it because it really needs some functionality that was only in AVX2 instead (not to mention that there isn't a bug, of which we've had a few, where AVX2 is generated when only AVX is supported). This is why when AMD, Intel, LLVM, and others got together to define the
In order to keep things "simple" and avoid explosions around support matrices. Supporting just "SSSE3" or just "AVX" doesn't necessarily make sense and so Some examples of where this gets complex, even for |
@tannergooding I agree but It still reports I do think we need to fix #72506 for 7.0 - there are no good reasons to break what worked in 3.1-6.0 |
Yes, 100% agree
Provided we have sufficient coverage and validation that it is fixed and isn't regressing other key scenarios, and isn't going to be something we're likely to decide to regress in the future due to the complexity required in the JIT, etc. |
@tannergooding so can you approve it? |
Fixes #72506