Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JITIntrinsicatAttribute如何影响代码生成?_C#_.net_Mono_Clr_Intrinsics - Fatal编程技术网

C# JITIntrinsicatAttribute如何影响代码生成?

C# JITIntrinsicatAttribute如何影响代码生成?,c#,.net,mono,clr,intrinsics,C#,.net,Mono,Clr,Intrinsics,我在浏览.NET源代码时看到了。上面说, 可以附加到JIT内在方法/属性的属性 根据: 指示修改后的方法是 即时(JIT)编译器可以执行特殊的代码生成。这 类不能被继承 但我很难找到方法。它在什么类型的代码上执行特殊的代码生成 我的主要猜测是,它主要使用SIMD之类的处理器指令。这是。我对它的加速性能很好奇,我想知道Mono是否也能做到这一点。这是针对微软目前正在开发的下一代64位抖动的。仍然是alpha(又名CTP),下一个版本的.NET和visualstudio将包括它。当前可在.NET 4

我在浏览.NET源代码时看到了。上面说,

可以附加到JIT内在方法/属性的属性

根据:

指示修改后的方法是 即时(JIT)编译器可以执行特殊的代码生成。这 类不能被继承

但我很难找到方法。它在什么类型的代码上执行特殊的代码生成

我的主要猜测是,它主要使用SIMD之类的处理器指令。这是。我对它的加速性能很好奇,我想知道Mono是否也能做到这一点。

这是针对微软目前正在开发的下一代64位抖动的。仍然是alpha(又名CTP),下一个版本的.NET和visualstudio将包括它。当前可在.NET 4.6预览版中获得

RyuJIT的一个新特性是它能够利用Intel/AMD处理器中的矢量化指令生成SIMD机器代码。使阵列上的浮点运算速度提高8倍。[JitIntrisic]属性是RyuJIT具有特殊内置知识的C#代码的标记,它将生成机器代码的SIMD版本,而不是正常的非矢量化版本

请记住,这与当前C和C++编译器可以生成的代码类型相差一百万英里。RyuJIT只能对它所知道的受膏类型执行此操作。比如System.Numerics.Vector2。SIMD代码具有非常强的高效对齐要求,SSE2指令的对齐要求为16,AVX指令的对齐要求为32。在.NET程序中实现这种对齐需要对CLR进行彻底的检修,目前它在32位模式下只能对齐到4,在64位模式下只能对齐到8

长话短说:你问的是抖动。Mono一直在修补自己的SIMD支持,它似乎得到了。NetCore最近刚刚宣布将使用非常开放的MIT许可证进行开源,我想(但目前还不知道)这将包括RyuJIT的源代码。github项目目前正在进行中,而且非常不完整



更新:这使它成为.NET4.6RTM。Vector.IsHardwareAccelerated现在是内部的。只有System.Numerics.Vector2、Vector3和Vector4类型获得SIMD love。您可以获得System.Numerics.Vectors版本4.1.0.0。它公开了更多信息,包括
Vector

2018年更新:显然,
[jitinentral]
并未用于其预期目的,而是被
System.Runtime.CompilerServices.IntrinsicAttribute
取代

有关移动的讨论中提到了该属性:

@jkotas:我们不应该需要jitintrinsication属性。据我所知,这个属性是未来的证明,从未用于任何真实的东西。我们应该删除它,并改用CoreLib中的intrinsicatAttribute

然后替换为
固有的


有关
[固有]
属性的类似讨论,请参见,该属性实际上用于实现低级优化。

2015更新:SIMD在2015 Visual Studio候选发行版的x64中工作(带有测试版错误)。据推测,它将在完整版本的x86上工作,尽管我不知道它是否也能在任何CPU上工作。希望他们将来能够改进这一点,以允许对用户代码进行优化。向量类在数值计算中并不完全。