在什么条件下.NET JIT编译器执行自动矢量化?

时间:2016-02-20 16:00:04

标签: .net vectorization simd auto-vectorization ryujit

新的RyuJIT编译器是否曾生成向量(SIMD)CPU指令,何时生成?

附注:System.Numerics命名空间包含允许显式使用Vector操作的类型,这些操作可能会也可能不会生成SIMD指令,具体取决于CPU,CLR版本,JITer版本,是否直接编译为本机代码。这个问题具体是关于非向量代码(例如C#或F#)何时会生成SIMD指令。

1 个答案:

答案 0 :(得分:11)

RuyJIT中的SIMD代码生成严格限于System.Numerics.Vectors命名空间中的类型。通用SIMD支持需要对CLR进行非常重要的修订,这样的代码只有在SIMD变量正确对齐时才有效。 SSE2至少为16,能够使用AVX2为32,即将推出的AVX-512为64。

现在还很遥远,32位CLR只能对应4位,64位版本为8.对于32位和64位代码,“自然”对齐。所需的更改将影响CLR的每个部分,垃圾收集器和类加载器。关于这样一个重大变化的问题没有得到考虑。并且没有迹象表明它在CoreCLR项目中被考虑过,它将是最明显的目标版本。

如果您希望利用SIMD超出System.Numerics.Vectors中的当前支持,那么可以使用C ++编译器,使用C ++ / CLI或C ++ / CX语言扩展来互操作。