c# – JitIntrinsicAttribute如何影响代码生成?

我浏览.NET源代码并看到了this attribute.它说,

An attribute that can be attached to JIT Intrinsic methods/properties

并根据MSDN

Indicates that a modified method is an intrinsic value for which the
just-in-time (JIT) compiler can perform special code generation. This
class cannot be inherited.

但我很难找到.在什么样的代码上执行特殊的代码生成?

我的主要猜测是它主要使用像SIMD这样的处理器指令,比如Java JIT does.这是an example.我对它的加速感到好奇,我想知道Mono是否也这样做.

解决方法:

这特定于RyuJIT,即微软目前正在开发的下一代64位抖动.仍然在alpha(又名CTP)中,下一版本的.NET和Visual Studio将被包含在内.目前可在.NET 4.6 Preview中使用.

RyuJIT的一个新功能是它能够生成SIMD机器代码,利用英特尔/ AMD处理器中的矢量化指令.在阵列上进行浮点运算的速度提高了x8倍. [JitIntrisic]属性是RyuJIT具有特殊内置知识的C#代码的标记,它将生成机器代码的SIMD版本而不是普通的非矢量化版本.

请记住,这距离当前C和C编译器可以生成的代码类型还有一百万英里. RyuJIT只能为它知道的受膏类型做到这一点.与System.Numerics.Vector2一样. SIMD代码具有非常强大的对齐要求,效率很高,SSE2指令与16对齐,AVX指令为32.在.NET程序中进行这样的对齐将需要对CLR进行彻底检查,它目前只能在32位模式下与4对齐,在64位模式下为8.

长话短说:你问的是抖动. Mono一直在修补自己的SIMD支持,它似乎已经获得了stuck 5 years ago. .NET Core刚刚宣布以非常*的MIT许可证开源,我假设(但不知道一个事实)这个将包括RyuJIT的源代码. github项目现在正在进行中并且非常不完整.

更新:这使它成为.NET 4.6 RTM. Vector.IsHardwareAccelerated现在是内部的.只有System.Numerics.Vector2,Vector3和Vector4类型才能获得SIMD的喜爱.您可以获得System.Numerics.Vectors版本4.1.0.0 from Nuget.它会公开更多内容,包括Vector< T>.

上一篇:c# – 如何从CLR线程池而不是ASP.NET池创建ASP.NET页面中的线程?


下一篇:C#Dispose() – 澄清