【发布时间】:2016-04-26 03:06:56
【问题描述】:
我正在运行一些使用 System.Numerics.Vector<T> 的 C# 代码,但据我所知,我没有获得 SIMD 内在函数的全部好处。我正在使用带有 Update 1 的 Visual Studio Community 2015,我的 clrjit.dll 是 v4.6.1063.1。
我在 Intel Core i5-3337U Processor 上运行,它实现了 AVX 指令集扩展。因此,我认为,我应该能够在 256 位寄存器上执行大多数 SIMD 指令。例如,反汇编应该包含类似vmovups、vmovupd、vaddups 等的指令,而Vector<float>.Count 应该返回 8,Vector<double>.Count 应该是 4,等等......但这不是我的看到了。
相反,我的反汇编包含movups、movupd、addups 等指令以及以下代码:
WriteLine($"{Vector<byte>.Count} bytes per operation");
WriteLine($"{Vector<float>.Count} floats per operation");
WriteLine($"{Vector<int>.Count} ints per operation");
WriteLine($"{Vector<double>.Count} doubles per operation");
生产:
16 bytes per operation
4 floats per operation
4 ints per operation
2 doubles per operation
我哪里出错了?要查看所有项目设置等。项目可用here。
【问题讨论】:
-
RyuJIT 在 GitHub 上是开源的,因此您可以查看它的代码并直接与开发人员讨论。