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

时间:2012-05-27 14:55:15

标签: .net simd .net-4.5 avx sse4

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

upd:我告诉过JiT

3 个答案:

答案 0 :(得分:10)

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

但是,VS-11确实有一个用于C ++的更新代码生成器。它能够自动矢量化循环,并使用SIMD / AVX指令。这个blog post提到了它,一个简短的视频是available here


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

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


更新:这是在.NET 4.6,System.Numerics.Vectors.dll程序集中提供的。请注意框架中包含的那个是“安全”的,并且与MSDN文档不匹配,Vector<T>缺失。 Nuget包(版本4.1.0)确实匹配。

答案 1 :(得分:2)

似乎它即将来临。 (我刚刚在一小时前发现)

这里有一些链接

The JIT finally proposed. JIT and SIMD are getting married.

Update to SIMD Support

您需要最新版本的RyuJIT

Microsoft SIMD-enabled Vector Types(Nuget)

答案 2 :(得分:0)

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

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