Re: Java vs C# vs C++
От: MTD https://github.com/mtrempoltsev
Дата: 09.09.15 20:05
Оценка: +1
Здравствуйте, xRAZORx, Вы писали:

RAZ>Тут читал на хабре


Это все бессмысленные пиписько-замеры. По моему опыту производительности, что шарпа, что явы в большинстве случаев за глаза. Памяти они по сравнению с С++ все же кушают больше раза в 3, но как правило и это не проблема. С++ требует очень высокой квалификации — на нем можно написать реально быстрый код, а можно по невнимательности сделать тормозной.
Re[2]: Java vs C# vs C++
От: Evgeny.Panasyuk Россия  
Дата: 09.09.15 22:55
Оценка: +3
Здравствуйте, Nuzhny, Вы писали:

N>Ну и забавные пассажи про оверхед умных указателей — беее.


Ещё в комментариях, от автора:

>Нет, ну есть конечно всякие умные указатели, однако без них кресты не прям таки сразу превращаются в C_с_чем бы то ни было.

Именно сразу и превращаются. По большому счету в чем разница между new\delete и malloc\free, если каждый руками выписывать?
...

unique_ptr нельзя передать просто в метод.
...

Интересно, как вы собрались RAII делать без умных указателей?

Отредактировано 09.09.2015 23:08 Evgeny.Panasyuk . Предыдущая версия .
Re[2]: Java vs C# vs C++
От: Yoriсk  
Дата: 21.09.15 10:20
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>P.S. Я уже молчу про центральный пассаж, что bubble sort — это типичный код. Скажите мне пожалуйста, кто из плюсовиков или шарпистов вообще писал хоть какую-нибудь сортировку? А buble sort?


Почему "писал"? Использовал. Сортировка — довольно типичный исполняемый код.
А мерять пузырёк или quicksort, идущий по умолчание в Linq2Object(т.е. в подавлящем большинстве случаев в .net) — действительно разница невелика.
Отредактировано 21.09.2015 11:34 Yoriсk . Предыдущая версия .
Re: Java vs C# vs C++
От: yatagarasu Беларусь  
Дата: 23.09.15 06:39
Оценка:
Здравствуйте, xRAZORx, Вы писали:

RAZ>Тут читал на хабре статью по сравнению производительности C# и C++. Сам джаву знаю плохо, но, может быть, кто-то производил замеры сам? Было бы интересно посмотреть сравнение, тем более везде говорят, что шарп и джава одинаковые по скорости.

Как обычно в таких тестах — по всем измерениям видно что с# медленнее чем с++. Но вывод автор делает "Получается в .NET Native быстродействие такое же, как у C++."
Re: Java vs C# vs C++
От: PM  
Дата: 23.09.15 20:43
Оценка:
Здравствуйте, xRAZORx, Вы писали:

RAZ>Тут читал на хабре статью по сравнению производительности C# и C++. Сам джаву знаю плохо, но, может быть, кто-то производил замеры сам? Было бы интересно посмотреть сравнение, тем более везде говорят, что шарп и джава одинаковые по скорости.


Новость из реальной жизни — переписывание проекта с Java на C++ дало ускорение в 10 раз: http://m.slashdot.org/story/300257

At Cassandra Summit opening today, Avi Kivity and Dor Laor (who had previously written KVM and OSv) announced ScyllaDB — an open-source C++ rewrite of Cassandra, the popular NoSQL database. ScyllaDB claims to achieve a whopping 10 times more throughput per node than the original Java code, with sub-millisecond 99%ile latency. They even measured 1 million transactions per second on a single node. The performance of the new code is attributed to writing it in Seastar — a C++ framework for writing complex asynchronous applications with optimal performance on modern hardware.

Re[2]: Java vs C# vs C++
От: alexzz  
Дата: 23.09.15 21:27
Оценка:
Здравствуйте, PM, Вы писали:

PM>Новость из реальной жизни — переписывание проекта с Java на C++ дало ускорение в 10 раз: http://m.slashdot.org/story/300257


Новость из реальной жизни — переписывание проекта с C++ на C# дало ускорение в 10 раз: http://blogs.msdn.com/b/jonathanh/archive/2005/05/20/optimizing-managed-c-vs-native-c-code.aspx


Не, потом C++ разогнали с пятой попытки до скорости C#, но посмотрите, какой ценой!
Re[3]: Java vs C# vs C++
От: PM  
Дата: 24.09.15 01:07
Оценка:
Здравствуйте, alexzz, Вы писали:

PM>>Новость из реальной жизни — переписывание проекта с Java на C++ дало ускорение в 10 раз: http://m.slashdot.org/story/300257


A>Новость из реальной жизни — переписывание проекта с C++ на C# дало ускорение в 10 раз: http://blogs.msdn.com/b/jonathanh/archive/2005/05/20/optimizing-managed-c-vs-native-c-code.aspx

A>

A>Не, потом C++ разогнали с пятой попытки до скорости C#, но посмотрите, какой ценой!


О, еще один синтетический тест 10-летней давности, когда MS активно продвигала .Net и C# был светлым будущим для всех без исключения. "Память больше не ресурс" ага, помню такое на этом сайте.

По вашей же ссылке первый комментатор справедливо указал, что хоть Реймонд Чен и голова, но как-то быстро он скатился в древний C, заново изобретая велосипеды. Скорее всего потому, что C++ он не знал, как не знал и то, что умные указатели, пулы объектов и регулярные выражения уже существовали в Boost в 2005 году.

Думаю современный C++11 компилятор использовал бы перемещение строк вместо копирования при добавлении новых элементов в словарь. Так что даже первая версия с минимальными изменениями показала бы сопоставимые с C# результаты.

Впрочем, это довольно распространённая практика — взять малознакомый инструмент; попытаться сделать что-то игрушечное; получить результаты хуже, чем со своим любимым молотком; сделать и опубликовать далеко идущие выводы. Вот недавний пример: http://eax.me/cpp-regex/
Re[4]: Java vs C# vs C++
От: alexzz  
Дата: 24.09.15 21:37
Оценка:
Здравствуйте, PM, Вы писали:

PM>По вашей же ссылке первый комментатор справедливо указал, что хоть Реймонд Чен и голова, но как-то быстро он скатился в древний C, заново изобретая велосипеды. Скорее всего потому, что C++ он не знал, как не знал и то, что умные указатели, пулы объектов и регулярные выражения уже существовали в Boost в 2005 году.


PM>Думаю современный C++11 компилятор использовал бы перемещение строк вместо копирования при добавлении новых элементов в словарь. Так что даже первая версия с минимальными изменениями показала бы сопоставимые с C# результаты.


PM>Впрочем, это довольно распространённая практика — взять малознакомый инструмент; попытаться сделать что-то игрушечное; получить результаты хуже, чем со своим любимым молотком; сделать и опубликовать далеко идущие выводы. Вот недавний пример: http://eax.me/cpp-regex/


А, ну понятно. Дословный перевод программы с C++ на C# сходу заработал в 10 раз быстрее, потому что исходная программа была написана на C++ неправильно. Вполне такое может быть. Мне искренне любопытно, как должна быть написана программа на C#, чтобы её дословный перевод на C++ заработал в 10 раз быстрее.
Re[5]: Java vs C# vs C++
От: alex_public  
Дата: 24.09.15 23:20
Оценка: +1
Здравствуйте, alexzz, Вы писали:

A>А, ну понятно. Дословный перевод программы с C++ на C# сходу заработал в 10 раз быстрее, потому что исходная программа была написана на C++ неправильно. Вполне такое может быть. Мне искренне любопытно, как должна быть написана программа на C#, чтобы её дословный перевод на C++ заработал в 10 раз быстрее.


Ну это то как раз очень просто, в отличие от вышеприведённого случая, который явно надо было очень долго специально придумывать. Достаточно взять любой цикл, занятый например преобразованием массива чисел. В случае нормального современного компилятора C++ сработает автовекторизация, что скоре всего даст ускорение раз 6 на современных процессорах. Ну и плюс общая слабость оптимизатора C# ещё в пару раз ускорение даёт. В итоге раз в 12 как раз выйдет. )))
Re[6]: Java vs C# vs C++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 25.09.15 05:06
Оценка:
Здравствуйте, alex_public, Вы писали:


_>Ну это то как раз очень просто, в отличие от вышеприведённого случая, который явно надо было очень долго специально придумывать. Достаточно взять любой цикл, занятый например преобразованием массива чисел. В случае нормального современного компилятора C++ сработает автовекторизация, что скоре всего даст ускорение раз 6 на современных процессорах. Ну и плюс общая слабость оптимизатора C# ещё в пару раз ускорение даёт. В итоге раз в 12 как раз выйдет. )))

https://msdn.microsoft.com/ru-ru/library/system.numerics(v=vs.110).aspx
и солнце б утром не вставало, когда бы не было меня
Re[6]: Java vs C# vs C++
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.09.15 08:01
Оценка: +1
Здравствуйте, alex_public, Вы писали:


_>Достаточно взять любой цикл, занятый например преобразованием массива чисел. В случае нормального современного компилятора C++ сработает автовекторизация, что скоре всего даст ускорение раз 6 на современных процессорах. Ну и плюс общая слабость оптимизатора C# ещё в пару раз ускорение даёт. В итоге раз в 12 как раз выйдет. )))


Если бы программы состояли исключительно из автовекторизуемых циклов, то вообще не нужен был бы никакой язык, кроме C++ .
Re[7]: Java vs C# vs C++
От: alex_public  
Дата: 25.09.15 14:18
Оценка:
Здравствуйте, Serginio1, Вы писали:

_>>Ну это то как раз очень просто, в отличие от вышеприведённого случая, который явно надо было очень долго специально придумывать. Достаточно взять любой цикл, занятый например преобразованием массива чисел. В случае нормального современного компилятора C++ сработает автовекторизация, что скоре всего даст ускорение раз 6 на современных процессорах. Ну и плюс общая слабость оптимизатора C# ещё в пару раз ускорение даёт. В итоге раз в 12 как раз выйдет. )))

S> https://msdn.microsoft.com/ru-ru/library/system.numerics(v=vs.110).aspx

И какое это имеет отношение к автовекторизации? )
Re[8]: Java vs C# vs C++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 25.09.15 14:27
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, Serginio1, Вы писали:


_>>>Ну это то как раз очень просто, в отличие от вышеприведённого случая, который явно надо было очень долго специально придумывать. Достаточно взять любой цикл, занятый например преобразованием массива чисел. В случае нормального современного компилятора C++ сработает автовекторизация, что скоре всего даст ускорение раз 6 на современных процессорах. Ну и плюс общая слабость оптимизатора C# ещё в пару раз ускорение даёт. В итоге раз в 12 как раз выйдет. )))

S>> https://msdn.microsoft.com/ru-ru/library/system.numerics(v=vs.110).aspx

_>И какое это имеет отношение к автовекторизации? )

К авто не имеет, а к векторизации полное.

Вектор поддержкой SIMD типы, такие как Vector4, Matrix3x2, Plane, и Quaternion.

Если тебе нужно решать задачу работы с матрицами выбирай нужные типы
http://www.cyberforum.ru/post7461490.html

http://habrahabr.ru/post/219841/
и солнце б утром не вставало, когда бы не было меня
Отредактировано 25.09.2015 14:34 Serginio1 . Предыдущая версия .
Re[5]: Java vs C# vs C++
От: PM  
Дата: 25.09.15 16:54
Оценка: +1
Здравствуйте, alexzz, Вы писали:

PM>>Впрочем, это довольно распространённая практика — взять малознакомый инструмент; попытаться сделать что-то игрушечное; получить результаты хуже, чем со своим любимым молотком; сделать и опубликовать далеко идущие выводы. Вот недавний пример: http://eax.me/cpp-regex/


A>А, ну понятно. Дословный перевод программы с C++ на C# сходу заработал в 10 раз быстрее, потому что исходная программа была написана на C++ неправильно. Вполне такое может быть. Мне искренне любопытно, как должна быть написана программа на C#, чтобы её дословный перевод на C++ заработал в 10 раз


Я думаю в вычислительных задачах типа такой: C# — from indians by indians в настоящее время сложно обогнать С++, может быть разница будет не в 10 раз, но ощутима.

По ссылкам в новости о ScyllaDB написано, как получился такой результат. Разработчики решали конкретные проблемы, а не сравнивали результаты синтетических тестов.
Re[6]: Java vs C# vs C++
От: alexzz  
Дата: 25.09.15 21:42
Оценка: 66 (2)
Здравствуйте, PM, Вы писали:

PM>Я думаю в вычислительных задачах типа такой: C# — from indians by indians в настоящее время сложно обогнать С++, может быть разница будет не в 10 раз, но ощутима.


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

Глянул сейчас. В общем на старой машинке (C2D, WinXP 32) C# unsafe вариант кода исполняется почти с той же производительностью, что и C++ вариант с SIMD


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

original: 9881
optimized: 4342

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

PM>По ссылкам в новости о ScyllaDB написано, как получился такой результат. Разработчики решали конкретные проблемы, а не сравнивали результаты синтетических тестов.


Про то, что ускорение в 10 раз вызвал именно переход с Java на C++, упоминается лишь в желтушном заголовке новости.
Re[9]: Java vs C# vs C++
От: alex_public  
Дата: 25.09.15 23:18
Оценка:
Здравствуйте, Serginio1, Вы писали:

_>>И какое это имеет отношение к автовекторизации? )

S>К авто не имеет, а к векторизации полное.

Ну так тогда и код не будет одинаковым, даже близко. ))) В C++ останется изначальный простенький цикл, а в C# надо будет нагородить всяких ужасов. А в вопросе речь шла об одинаковом коде.

S>

S> Вектор поддержкой SIMD типы, такие как Vector4, Matrix3x2, Plane, и Quaternion.

S>Если тебе нужно решать задачу работы с матрицами выбирай нужные типы
S>http://www.cyberforum.ru/post7461490.html
S>http://habrahabr.ru/post/219841/

Это всё было в C++ (в виде библиотек) лет 15 назад и от этого уже давно уходят к совсем другим решениям. А в C# только сейчас к этому пришли. Поздравляю. )))
Re[5]: Java vs C# vs C++
От: Nikе Россия  
Дата: 25.09.15 23:42
Оценка:
Здравствуйте, Don Reba, Вы писали:

DR>Встречал в сортировке по прозрачности, когда предметов в неправильном порядке мало и они идут друг за другом.


Сортировка вставками?
Нужно разобрать угил.
Re: Java vs C# vs C++
От: Nikе Россия  
Дата: 25.09.15 23:50
Оценка: 18 (1)
Здравствуйте, xRAZORx, Вы писали:

RAZ>Тут читал на хабре статью по сравнению производительности C# и C++. Сам джаву знаю плохо, но, может быть, кто-то производил замеры сам? Было бы интересно посмотреть сравнение, тем более везде говорят, что шарп и джава одинаковые по скорости.


Приходится писать на всех языках в зависимости от потребностей. У меня получается так, что:
— ядро рабочего приложения на работе пишется на С++, т.к. он кроссплатформенный.
— кодогенераторы — питон.
— интерфейс — самописный специализированный езыг.
— графика — glsl
— домашние исследования по алгоритмам — C#
— домашний сервак — Ruby
— сейчас вот прожку на андроиде пишу на яве, на ней же писал некоторые серваки пару лет назад.
Если не считать Ruby (который был выбран из любопытства) то остальные языки были практически безальтернативны.
Нужно разобрать угил.
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) обладает ещё целым букетом замедляющих факторов, происходящих из самого устройства платформы. Это не говоря уже о просто слабом оптимизаторе.
Re[8]: Java vs C# vs C++
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 26.09.15 00:54
Оценка: :)))
Здравствуйте, alex_public, Вы писали

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


Это уже твои фантазии. Таких "замедляющих факторов" в любом языке полно, даже в c++. Более того, почти любые гарантии со стороны языка небесплатны. Супер оптимальный код будет супер небезопасным. А достаточно надежный код будет иметь "букет замедляющих факторов".
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.