我正在運行一些使用System.Numerics.Vector<T>
的C#代碼,但據我所知我沒有得到SIMD內在函數的全部好處。我在Update 1中使用Visual Studio Community 2015,而我的clrjit.dll是v4.6.1063.1。RyuJIT沒有充分利用SIMD內在函數
我在實現AVX指令集擴展的Intel Core i5-3337U Processor上運行。因此,我認爲,我應該能夠在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上的開源代碼,因此您可以檢查其代碼並直接與開發人員討論。 –