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

Arm*_*ots 5 .net simd avx .net-4.5 sse4

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

upd:我讲过JiT

Han*_*ant 10

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

然而,VS-11确实有一个用于C++的更新代码生成器.它能够自动矢量化循环,并使用SIMD/AVX指令.这篇博文提到它,这里有一个简短的视频.


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

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


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

  • 你当然可以自己编写机器代码; 将字节写入内存,然后在其上调用`Marshal.GetDelegateForFunctionPointer`以获取可以调用的委托.调用它的成本意味着它可能无法与Mono.Simd相比,但它肯定是可能的. (2认同)

Fre*_*dou 3

看来它要来了。(我一小时前才知道)

这里有一些链接

JIT最终提出了。JIT 和 SIMD 正在联姻。

SIMD 支持更新

您需要最新版本的RyuJIT

Microsoft 支持 SIMD 的向量类型(Nuget)