Предоставя ли .NET Framework 4.5 поддръжка за SSE4/AVX?

Мисля, че съм чувал за това, но не знам къде.

upd: Казах за JiT


person Arman Hayots    schedule 27.05.2012    source източник


Отговори (3)


благодаря за помощта ... моделът преминава перфектно и вашият отговор е маркиран като приемлив. Сега трябва да разбера синтаксиса, за да актуализирам изгледа с подробности ... ха-ха
person Fredou    schedule 14.05.2014

Не, в .NET няма сценарий, при който можете сами да пишете машинен код. Генерирането на код зависи изцяло от компилатора точно навреме. Със сигурност е в състояние да персонализира генерирането на код въз основа на възможностите на процесора на машината. Една от големите причини, поради които ngen.exe трябва винаги да се изпълнява на целевата машина. Дали трептенията в .NET 4.5 са били променени, за да се възползват от sse4 или avx, е отворен въпрос, не съм чул нищо за това. По-скоро се съмнявам, Microsoft не се занимава много с нервите, освен да коригира грешки. Много дестабилизиращо и 4.5 не е паралелна версия.

VS-11 обаче има актуализиран генератор на код за C++. Той е в състояние автоматично да векторизира цикли и използва SIMD/AVX инструкции за това. Това публикация в блог го споменава, кратко видео е наличен тук.


Актуализация: нов x64 трептене, понастоящем в CTP и с кодово име RyuJIT, включва някаква елементарна поддръжка за SIMD инструкции. Видът SSE2, осигуряващ автоматично векторизиране. Той обаче е заключен доста плътно в пакета Microsoft.Bcl.Simd и класовете Vector‹>, няма универсално решение за изискването за подравняване на 16-байтовата памет, от което SIMD трябва да работи бързо.

По-вероятно да бъде плодотворен пътят напред е .NET Native, обявен на последната конференция Build. Той използва задния край на C++ компилатора, за да генерира код преди време, като автоматично се възползва от вградената си поддръжка за автоматично векторизиране и автоматично паралелизиране. В противен случай все още без ясно обяснение как е решен проблемът с подравняването на паметта. Той има свои собствени проблеми, Reflection е труден и в момента се поддържа само за пакетирани приложения, видовете, чиито зависимости по време на изпълнение могат да бъдат определени предварително. Windows Store и приложения за телефон.


Актуализация: това се доставя в .NET 4.6, сборка System.Numerics.Vectors.dll. Имайте предвид, че този, който е включен в рамката, е „безопасен“ и не отговаря на документацията на MSDN, Vector<T> липсва. Пакетът Nuget (версия 4.1.0) съвпада.

person Hans Passant    schedule 27.05.2012
comment
Със сигурност можете сами да напишете машинен код; запишете байтове в паметта и след това извикайте Marshal.GetDelegateForFunctionPointer в нея, за да получите делегат, който можете да извикате. Цената на обаждането ще означава, че вероятно няма да се сравни с Mono.Simd, но със сигурност е възможно. - person Jon Hanna; 21.12.2013
comment
@HansPassant msdn.microsoft.com /en-us/library/windows/desktop/ - person poizan42; 24.01.2017

Да, можете да използвате някои типове вектори, за да гарантирате, че хардуерното ускорение се използва, когато е налично.

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

person Uğur Gümüşhan    schedule 19.03.2018