Myślę, że słyszałem o tym, ale nie wiem gdzie..NET Framework 4.5 zapewnia obsługę SSE4/AVX?
UPD: Mówiłem o JIT
Myślę, że słyszałem o tym, ale nie wiem gdzie..NET Framework 4.5 zapewnia obsługę SSE4/AVX?
UPD: Mówiłem o JIT
wydaje się, że nadchodzi. (Właśnie się dowiedziałem godzinę temu)
tutaj kilka linków
The JIT finally proposed. JIT and SIMD are getting married.
musisz mieć najnowszą wersję RyuJIT
i Microsoft SIMD-enabled Vector Types (Nuget)
Nie, nie ma scenariusza w .NET gdzie można napisać kod maszynowy samodzielnie. Generowanie kodu zależy wyłącznie od kompilatora just-in-time. Z pewnością jest w stanie dostosować generowanie kodu w oparciu o możliwości procesora komputera. Jednym z głównych powodów, dla których ngen.exe zawsze musi być uruchamiany na maszynie docelowej. Niezależnie od tego, czy wahania w .NET 4.5 zostały zmodyfikowane, aby skorzystać z sse4 lub avx, to pytanie otwarte, nic o tym nie słyszałem. Wątpię w to, że Microsoft nie majstruje z wieloma problemami, poza naprawianiem błędów. Bardzo destabilizujący i 4,5 nie jest wersją side-by-side.
VS-11 ma jednak zaktualizowany generator kodu dla C++. Jest zdolny do automatycznej pętli do wektoryzacji i używa do tego instrukcji SIMD/AVX. Wspomina o tym blog post, krótkie wideo to available here.
Aktualizacja: new x64 jitter, obecnie w CTP i kryptonimie RyuJIT, zawiera pewne szczątkowe wsparcie dla instrukcji SIMD. Typ SSE2, zapewniający automatyczną wektoryzację. Jest jednak mocno zamknięty w pakiecie Microsoft.Bcl.Simd i klasach Vector <>, nie ma uniwersalnego rozwiązania dla 16-bajtowego wymogu wyrównania pamięci, że SIMD musi działać szybko.
Najprawdopodobniej owocna ścieżka naprzód to .NET Native, ogłoszona na ostatniej konferencji Build. Wykorzystuje back-end kompilatora C++ do generowania kodu z wyprzedzeniem, automatycznie korzystając z wbudowanej obsługi automatycznej wektoryzacji i automatycznej równoległości. W przeciwnym razie bez jasnego wyjaśnienia, jak rozwiązano problem wyrównania pamięci. Ma własne problemy, Refleksja jest trudna i jest obecnie obsługiwana tylko w aplikacjach pakowanych, takich, z których zależności czasu wykonywania można określić z wyprzedzeniem. Aplikacje Windows Store i Phone.
Aktualizacja: ten dostarczany w .NET 4.6, montaż System.Numerics.Vectors.dll. Pamiętaj, że ta dołączona do frameworka jest "bezpieczna" i nie pasuje do dokumentacji MSDN, brakuje jej Vector<T>
. Pakiet Nuget (wersja 4.1.0) jest zgodny.
Dzięki za odpowiedź –
Z pewnością możesz sam napisać kod maszynowy; zapisz bajty do pamięci, a następnie zadzwoń do 'Marshal.GetDelegateForFunctionPointer', aby uzyskać delegata, do którego możesz zadzwonić. Koszt wywołania tego będzie oznaczać, że prawdopodobnie nie będzie porównywać się z Mono.Simd, ale jest to z pewnością możliwe. –
https://en.wikipedia.org/wiki/NX_bit –