Używam kodu C#, który używa System.Numerics.Vector<T>
, ale o ile mogę powiedzieć, nie dostaję pełnych korzyści z wewnętrznych właściwości SIMD. Korzystam z programu Visual Studio Community 2015 z aktualizacją 1, a mój plik clrjit.dll to v4.6.1063.1.RyuJIT nie w pełni wykorzystuję wewnętrzną charakterystykę SIMD
Używam wersji Intel Core i5-3337U Processor, która implementuje rozszerzenia zestawu instrukcji AVX. Dlatego uważam, że powinienem móc wykonać większość instrukcji SIMD w rejestrze 256-bitowym. Na przykład demontaż powinien zawierać instrukcje, takie jak vmovups
, vmovupd
, , itp., A Vector<float>.Count
powinien powrócić 8, Vector<double>.Count
powinien być 4, itd ... Ale to nie jest to, co widzę.
Zamiast mój demontaż zawiera instrukcje jak movups
, movupd
, addups
, itp ... i następującego kodu:
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");
produkuje:
16 bytes per operation
4 floats per operation
4 ints per operation
2 doubles per operation
Gdzie jestem będzie niewłaściwy? Aby zobaczyć wszystkie ustawienia projektu itp. Projekt jest dostępny here.
RyuJIT jest open source na GitHub, więc możesz sprawdzić jego kod i porozmawiać bezpośrednio z programistami. –