Clinton Ingram @saucecontrol.us · 25/11/2024The NAOT thing makes things difficult for library authors because we don't choose what gets IsSupported compiled to a constant -- it's up to the consuming project. By default SSE2 is all you get as constant, everything above is runtime check. Consumer can pick a higher baseline and make more free. 100
Clinton Ingram @saucecontrol.us · 25/11/2024There's a secondary issue with NAOT where the IsSupported checks are actual runtime lookups instead of being folded to constant as JIT does, so those things that have platform checks actually become more expensive. 110
Clinton Ingram @saucecontrol.us · 25/11/2024It's tricky. Intrinsics are treated differently by JIT (e.g. higher inlining preference), so implementing the xplat surface in C# would result in poorer perf. 110
Clinton Ingram @saucecontrol.us · 25/11/2024Glad you enjoyed it! There are really two separate shuffle issues. The first is that if the mask register isn't constant, you always get slow code. The fix for that is a new API: github.com/dotnet/runti.... Second issue is that even constants aren't always recognized. Both are still in net9.0. 100
Clinton Ingram @saucecontrol.us · 24/11/2024Oof, I hear that's one of the most painful things one can experience. Hope you're ok. 100
Clinton Ingram @saucecontrol.us · 22/11/2024The C# Community Discord is putting on another virtual conference, and I'll be talking performance. SIMD content guaranteed. Nov 24 @ 17:30 UTC www.youtube.com/watch?v=T4Ao...youtube.comSolution2: C# Is Faster Than C++!!!!!1!!! with Clinton IngramYouTube video by .NET Foundation 194