Информация об изменениях

Сообщение Re: .NET Native Performance and Internals от 28.03.2017 7:32

Изменено 28.03.2017 10:41 Serginio1

Re: .NET Native Performance and Internals
Здравствуйте, 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 пока сырой
Re: .NET Native Performance and Internals
Здравствуйте, 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


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

AddVectors — 0,82411ms
AddScalarToVector — 0,62899ms
InterfaceDevirtualization — 2,15113ms
Memcpy — 0,73468ms
MulDivShifts — 4,61217ms
RectangularMatrixMultiplication — 35,39933ms
JaggedMatrixMultiplication — 40,37876ms
Mandelbrot — 9,98355ms



То есть ускорение в 1.5-2 раза