Re[7]: Java vs C# vs C++
От: alex_public  
Дата: 26.09.15 00:33
Оценка: +1
Здравствуйте, alexzz, Вы писали:

A>Там дальше по теме Sinix привёл unsafe вариант на C#, который работает в 1,8 раза быстрее оригинала на C#.


Угу. Сделав дико страшный код (в сравнение и с C# оригиналом и с C++ оригиналом) он сумел ускориться в пару раз, но при этом отставание в разы от C++ всё равно сохранилось. )))

A>Я написал свой вариант на C#, работает ещё быстрее оригинала, в 2,3 раза: http://pastebin.com/v2ZMRu86

A>original: 9881
A>optimized: 4342

ОК, я протестировал этот код на той же машине, что и в тех сообщения. Так что могу поздравить: в данных результатах http://rsdn.ru/forum/philosophy/6117201.1
Автор: alex_public
Дата: 18.07.15
мы смело можем заменить значение для C# unsafe с 5,0 секунд на 4,6 секунды. Что впрочем вообще никак не меняет общую картину.

Кстати, возник ещё один интересный нюанс. Оригинальный C# из данного исходника исполнялся у меня 8,1 секунды, а не 8,7 секунды, как в изначальном коде. Хотя всё выглядит практически одинаково. Я немного поигрался с кодом и выяснил, что это происходит при передаче данных в Test в виде параметров (у меня это были статические члены класса приложения). Это конечно же характеризует оптимизатор .net с интересной стороны. )))

A>У меня давно сложилось и продолжает укрепляться подозрение, что C++ ощутимо (хотя бы раза в два) быстрее C# только там, где повезёт и задачу можно векторизовать, и компилятор C++ сумеет при этом применить свою векторизовальную магию. А если не повезёт, то быстрее может и вообще не получиться.


Это неверное подозрение. Что очевидно и из практики (см. ссылку выше, там есть цифры для C++ без simd) и из общетеоретических соображений. Кроме отсутствия автовекторизации, C# (а точнее .net) обладает ещё целым букетом замедляющих факторов, происходящих из самого устройства платформы. Это не говоря уже о просто слабом оптимизаторе.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.