Сообщение Re[12]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом от 08.08.2016 7:58
Изменено 08.08.2016 8:30 Evgeny.Panasyuk
EP>>Sinix, а что смешного? Ты же сам намерял >8x
Дата: 16.07.16
S>Ну как сказать... вот первоначальная цитата:
S>
S>Она у тебя магией превращается вS>Вот тут C++ код скомпированный в JavaScript и запущенный в Firefox показывает скорость близкую к native'у — 75ms, на native C++ было 60ms, на C# — 69ms.
S>Если на C# использовать не низкоуровневый цикл, а transform и лямбду (как было на C++) — то получается 141ms.
S>
S>Ну да блин, _внезапно_ шарп не инлайнит делегаты, не использует автоматом simd, не выполняет автовекторизацию и не делает ещё кучу плюшек (что, в принципе, может быть поправлено в .net native, но явно не в ближайшем будущем). Ну так про это и надо писать, а не передёргивать.S>C++ скомпилированный в ненативный JavaScript (в веб-браузере, Карл!) оказался практически в два раза быстрее кода на C#?
Я не передёргиваю, это же как раз отличная иллюстрация тому что я написал в том же сообщении:
Или ты не дочитал до этого места?EP>C++ быстрый не от того что нативный, а от того что даёт бесплатные, либо крайне дешёвые абстракции.
EP>Если на C#/Java писать код без абстракций, то по скорости он будет близок к аналогу на C++ — но такого кода будет намного больше
То есть код на одинаковом уровне абстракций оказался медленнее почти в два раза (даже в веб-браузере, Карл!)
А вот код на C# написанный на более низком уровне, уже приблизился к высокоуровнему коду C++ по скорости. О чём и речь — на C# можно написать быстрый код, но это будет низкоуровневая лапша, на Java ситуация ещё хуже из-за отсутствия структур
S>не использует автоматом simd, не выполняет автовекторизацию и не делает ещё кучу плюшек (что, в принципе, может быть поправлено в .net native, но явно не в ближайшем будущем).
Думаешь JavaScript там сделал автовекторизацию и заиспользовал SIMD? :-
S>UPD
EP>>Ты же сам намерял >8x
Дата: 16.07.16
S>Ну так снова то же самое — сравниваем вариант с вызовом делегата и без делегата внутри tight loop при очень дешёвом делегате.
Так это abstraction penalty и есть, которой нет на C++. И чем больше уровней абстрации — тем больше penalty, это были всё примеры с примитивнейшими абстракциями.
S>для критичных мест можно не полениться и расписать вручную
Так а я о чём — на C# для быстрого кода "нельзя лениться" и приходится раскорячиваться
EP>Если на C#/Java писать код без абстракций, то по скорости он будет близок к аналогу на C++ — но такого кода будет намного больше
EP>>Sinix, а что смешного? Ты же сам намерял >8x
Дата: 16.07.16
S>Ну как сказать... вот первоначальная цитата:
S>
S>Она у тебя магией превращается вS>Вот тут C++ код скомпированный в JavaScript и запущенный в Firefox показывает скорость близкую к native'у — 75ms, на native C++ было 60ms, на C# — 69ms.
S>Если на C# использовать не низкоуровневый цикл, а transform и лямбду (как было на C++) — то получается 141ms.
S>
S>Ну да блин, _внезапно_ шарп не инлайнит делегаты, не использует автоматом simd, не выполняет автовекторизацию и не делает ещё кучу плюшек (что, в принципе, может быть поправлено в .net native, но явно не в ближайшем будущем). Ну так про это и надо писать, а не передёргивать.S>C++ скомпилированный в ненативный JavaScript (в веб-браузере, Карл!) оказался практически в два раза быстрее кода на C#?
Я не передёргиваю, это же как раз отличная иллюстрация тому что я написал в том же сообщении:
Или ты не дочитал до этого места?EP>C++ быстрый не от того что нативный, а от того что даёт бесплатные, либо крайне дешёвые абстракции.
EP>Если на C#/Java писать код без абстракций, то по скорости он будет близок к аналогу на C++ — но такого кода будет намного больше
То есть код на одинаковом уровне абстракций оказался медленнее почти в два раза (даже медленнее чем в веб-браузере, Карл!)
А вот код на C# написанный на более низком уровне, уже приблизился к высокоуровнему коду C++ по скорости. О чём и речь — на C# можно написать быстрый код, но это будет низкоуровневая лапша, на Java ситуация ещё хуже из-за отсутствия структур
S>не использует автоматом simd, не выполняет автовекторизацию и не делает ещё кучу плюшек (что, в принципе, может быть поправлено в .net native, но явно не в ближайшем будущем).
Думаешь JavaScript там сделал автовекторизацию и заиспользовал SIMD? :-
S>UPD
EP>>Ты же сам намерял >8x
Дата: 16.07.16
S>Ну так снова то же самое — сравниваем вариант с вызовом делегата и без делегата внутри tight loop при очень дешёвом делегате.
Так это abstraction penalty и есть, которой нет на C++. И чем больше уровней абстрации — тем больше penalty, это были всё примеры с примитивнейшими абстракциями.
S>для критичных мест можно не полениться и расписать вручную
Так а я о чём — на C# для быстрого кода "нельзя лениться" и приходится раскорячиваться
EP>Если на C#/Java писать код без абстракций, то по скорости он будет близок к аналогу на C++ — но такого кода будет намного больше