【问题标题】:Does .NET Framework 4.5 provide SSE4/AVX support?.NET Framework 4.5 是否提供 SSE4/AVX 支持?
【发布时间】:2012-06-02 05:50:40
【问题描述】:

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

更新:我讲过 JiT

【问题讨论】:

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


    【解决方案1】:

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

    这里有几个链接

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

    Update to SIMD Support

    您需要最新版本的RyuJIT

    Microsoft SIMD-enabled Vector Types (Nuget)

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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


        更新:new x64 jitter,目前在 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 相比,但它肯定是可能的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-04
        • 1970-01-01
        • 2018-06-04
        • 2020-06-21
        • 1970-01-01
        • 1970-01-01
        • 2018-08-15
        相关资源
        最近更新 更多