Re: .NET Native Performance and Internals
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.03.17 07:32
Оценка: 31 (2)
Здравствуйте, Serginio1, Вы писали:

Кстати интересная статья .NET Native Performance and Internals

Там по сути там любимые сишниками тесты

MatrixMultiplication — Выполняет наивное O (n ^ 3) умножение двух целых матриц. Есть две версии этого кода — для прямоугольных (многомерных) и неровных массивов. Хороший оптимизирующий компилятор может выполнять здесь несколько оптимизаций, таких как замена циклов, векторизация, FMA и т. Д.
Рабочий стол JIT RectangularMatrixMultiplication — 50.30814ms
.NET Native RectangularMatrix Multiplication — 187.3474ms
Рабочий стол JIT JaggedMatrixMultiplication — 33.11678ms
.NET Native JaggedMatrixMultiplication — 33.08566ms
C ++ Matrix Multiplication — 21.11234ms



Мандельброт — вычисляет множество Мандельброта в заданных измерениях. Это контрольный показатель, который не имеет доступа к большому количеству памяти, но работает с узким циклом с умножениями и дополнениями, которые могут извлечь выгоду из векторизации, интеллектуального распределения регистров, переопределения команд и других соображений, которые использует оптимизирующий компилятор. Из всех приведенных выше показателей это, пожалуй, самый реалистичный с точки зрения количества и качества кода.
Обои для рабочего JIT Mandelbrot — 32.18214ms
.NET Native Mandelbrot — 46.48744ms
C ++ Mandelbrot — 15.26277ms
Полученные результаты довольно убедительны. На данный момент .NET Native не использует никаких оптимизаций супер-умного компилятора, которые приводят его производительность в соответствие с кодом на C ++. В некоторых случаях он даже генерирует код, который не подпадает под JIT рабочего стола (в частности, прямоугольные массивы и тесты Mandelbrot). Важно помнить, что это все еще предварительный просмотр, и я буду очень рад повторить эти измерения, когда будет выпущена обновленная версия .NET Native. Я знаю, что команда .NET Native активно работает над оптимизацией компилятора.



Пока C++ в сложных для .Net Jita алгоритмах проигрывает C++ в 2 раза. .Net Native пока сырой

Это данные от 14 года.
Скомпилировал на 2017 студии.

Вот данные в VS 2015


AddVectors — 1.35302ms
NativeAddVectors — 0.93864ms
AddScalarToVector — 1.18009ms
NativeAddScalarToVector — 0.7964ms
InterfaceDevirtualization — 3.06194ms
AbstractClassDevirtualization — 2.22129ms
Memcpy — 1.07673ms
NativeMemcpy — 0.45323ms
MulDivShifts — 5.24405ms
NativeMulDivShifts — 4.65341ms
RectangularMatrixMultiplication — 83.31062ms
JaggedMatrixMultiplication — 44.85074ms
NativeMatrixMultiplication — 18.64064ms
Mandelbrot — 11.69964ms
NativeMandelbrot — 15.41565ms
Discrepancies on Mandelbrot: 0


Вот тот же код для VS 2017 только для манагед. С++ пока ошибка. Нужно скомпилировать под win 10

AddVectors — 0,83342ms
AddScalarToVector — 0,50806ms
InterfaceDevirtualization — 2,14707ms
AbstractClassDevirtualization — 2,16749ms
Memcpy — 0,68196ms
MulDivShifts — 4,61984ms
RectangularMatrixMultiplication — 37,0944ms
JaggedMatrixMultiplication — 36,38963ms
Mandelbrot — 9,40842ms



То есть ускорение в 1.5-2 раза
И очень близко к реальному нативу

Cltkfk

Сделал отчет для .Net Core

AddVectors — 1,2154ms
AddScalarToVector — 0,99208ms
InterfaceDevirtualization — 2,79406ms
AbstractClassDevirtualization — 2,14465ms
Memcpy — 0,6675ms
MulDivShifts — 4,8818ms
RectangularMatrixMultiplication — 85,2632ms
JaggedMatrixMultiplication — 40,28376ms
Mandelbrot — 10,1158ms


Для .Net Core 2

AddVectors — 1,14375ms
AddScalarToVector — 0,79344ms
InterfaceDevirtualization — 0,308ms
AbstractClassDevirtualization — 0,30543ms
Memcpy — 0,666 ms
MulDivShifts — 4,97312ms
RectangularMatrixMultiplication — 125,5858ms
JaggedMatrixMultiplication — 67,31645ms
Mandelbrot — 10,0221ms


Интересно, что

InterfaceDevirtualization,AbstractClassDevirtualization ускорился раз в 10, а скорость
RectangularMatrixMultiplication,JaggedMatrixMultiplication наоборот увеличилась в 1,5 раза

Для .Net Native
Просто выбросила
InterfaceDevirtualization — 9E-05ms
AbstractClassDevirtualization — 3E-05ms
и солнце б утром не вставало, когда бы не было меня
Отредактировано 15.10.2017 20:13 Serginio1 . Предыдущая версия . Еще …
Отредактировано 15.10.2017 18:30 Serginio1 . Предыдущая версия .
Отредактировано 15.10.2017 18:08 Serginio1 . Предыдущая версия .
Отредактировано 15.10.2017 18:04 Serginio1 . Предыдущая версия .
Отредактировано 01.04.2017 6:18 Serginio1 . Предыдущая версия .
Отредактировано 31.03.2017 7:13 Serginio1 . Предыдущая версия .
Отредактировано 28.03.2017 10:45 Serginio1 . Предыдущая версия .
Отредактировано 28.03.2017 10:41 Serginio1 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.