.NET Framework 4.5 是否提供 SSE4/AVX 支持?



我想,我听说过,但不知道在哪里。

upd:我讲过JiT

不,在 .NET 中没有可以自己编写机器代码的方案。 代码生成完全取决于实时编译器。 它当然能够根据机器处理器的功能自定义其代码生成。 ngen.exe 必须始终在目标计算机上运行的一个重要原因。 .NET 4.5 中的抖动是否经过调整以利用 sse4 或 avx 是一个悬而未决的问题,我还没有听说过任何关于它的消息。 我宁愿怀疑它,Microsoft除了修复错误之外,并没有对抖动进行太多修补。 非常不稳定,4.5 不是并排版本。

但是,VS-11确实具有用于C++的更新代码生成器。 它能够自动矢量化循环,并使用 SIMD/AVX 指令来执行此操作。 这篇博文提到了它,这里有一个简短的视频。


更新:新的 x64 抖动,目前采用 CTP 格式,代号 RyuJIT,包括对 SIMD 指令的一些基本支持。 SSE2 类型,提供自动矢量化。 然而,它被紧紧地锁定在 Microsoft.Bcl.Simd 包和 Vector<> 类中,对于 SIMD 需要快速运行的 16 字节内存对齐要求,没有通用的解决方案。

更有可能取得丰硕成果的前进道路是.NET Native,它在上次Build大会上宣布。 它使用 C++ 编译器的后端提前生成代码,自动受益于其对自动矢量化和自动并行化的内置支持。 否则,还没有明确的解释如何解决内存对齐问题。 它有自己的问题,反射很困难,目前仅支持打包的应用程序,其运行时依赖关系可以提前确定。 Windows 应用商店和手机应用。


更新:这在.NET 4.6,System.Numerics.Vectors.dll汇编中提供。 请注意,框架中包含的框架是"安全"的,与 MSDN 文档不匹配,Vector<T>缺少。 Nuget 包(版本 4.1.0)确实匹配。

似乎要来了。(我一个小时前才发现)

这里有几个链接

JIT终于提议了。JIT 和 SIMD 要结婚了。

SIMD 支持更新

您需要最新版本的 RyuJIT

以及Microsoft 个支持 SIMD 的矢量类型 (Nuget)

是的,您可以使用某些矢量类型来确保在可用时使用硬件加速。

https://learn.microsoft.com/en-us/dotnet/standard/numerics#simd-enabled-vector-types

最新更新