5

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

upd:我讲过JiT

4

3 回答 3

10

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

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


更新:新的 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)确实匹配。

于 2012-05-27T17:15:18.490 回答
3

似乎它来了。(我一个小时前才知道)

这里有几个链接

JIT终于提出来了。JIT 和 SIMD 要结婚了。

SIMD 支持更新

你需要最新版本的RyuJIT

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

于 2014-05-14T15:41:05.987 回答
0

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

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

于 2018-03-19T20:27:04.547 回答