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

Кажется, я слышал об этом, но не знаю, где.

upd: я рассказал о JiT


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


Ответы (3)


кажется, что это идет. (только час назад узнал)

вот несколько ссылок

JIT наконец предложил. JIT и SIMD женятся.

Обновление поддержки SIMD

вам нужна последняя версия RyuJIT

и типы векторов Microsoft с поддержкой SIMD (Nuget).

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 и приложения для телефона.


Обновление: поставляется в сборке System.Numerics.Vectors.dll .NET 4.6. Помните, что тот, который включен в структуру, является «безопасным» и не соответствует документации 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