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

Сообщение Re[12]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом от 08.08.2016 7:58

Изменено 08.08.2016 8:30 Evgeny.Panasyuk

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

EP>>Sinix, а что смешного? Ты же сам намерял >8x
Автор: Sinix
Дата: 16.07.16
abstraction penalty на C#.

S>Ну как сказать... вот первоначальная цитата:
S>

S>Вот тут C++ код скомпированный в JavaScript и запущенный в Firefox показывает скорость близкую к native'у — 75ms, на native C++ было 60ms, на C# — 69ms.
S>Если на C# использовать не низкоуровневый цикл, а transform и лямбду (как было на C++) — то получается 141ms.

S>Она у тебя магией превращается в
S>

S>C++ скомпилированный в ненативный JavaScript (в веб-браузере, Карл!) оказался практически в два раза быстрее кода на C#?

S>Ну да блин, _внезапно_ шарп не инлайнит делегаты, не использует автоматом simd, не выполняет автовекторизацию и не делает ещё кучу плюшек (что, в принципе, может быть поправлено в .net native, но явно не в ближайшем будущем). Ну так про это и надо писать, а не передёргивать.

Я не передёргиваю, это же как раз отличная иллюстрация тому что я написал в том же сообщении:

EP>C++ быстрый не от того что нативный, а от того что даёт бесплатные, либо крайне дешёвые абстракции.
EP>Если на C#/Java писать код без абстракций, то по скорости он будет близок к аналогу на C++ — но такого кода будет намного больше

Или ты не дочитал до этого места?
То есть код на одинаковом уровне абстракций оказался медленнее почти в два раза (даже в веб-браузере, Карл!)
А вот код на C# написанный на более низком уровне, уже приблизился к высокоуровнему коду C++ по скорости. О чём и речь — на C# можно написать быстрый код, но это будет низкоуровневая лапша, на Java ситуация ещё хуже из-за отсутствия структур

S>не использует автоматом simd, не выполняет автовекторизацию и не делает ещё кучу плюшек (что, в принципе, может быть поправлено в .net native, но явно не в ближайшем будущем).


Думаешь JavaScript там сделал автовекторизацию и заиспользовал SIMD? :-
S>UPD
EP>>Ты же сам намерял >8x
Автор: Sinix
Дата: 16.07.16
abstraction penalty на C#.

S>Ну так снова то же самое — сравниваем вариант с вызовом делегата и без делегата внутри tight loop при очень дешёвом делегате.

Так это abstraction penalty и есть, которой нет на C++. И чем больше уровней абстрации — тем больше penalty, это были всё примеры с примитивнейшими абстракциями.

S>для критичных мест можно не полениться и расписать вручную


Так а я о чём — на C# для быстрого кода "нельзя лениться" и приходится раскорячиваться

EP>Если на C#/Java писать код без абстракций, то по скорости он будет близок к аналогу на C++ — но такого кода будет намного больше

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

EP>>Sinix, а что смешного? Ты же сам намерял >8x
Автор: Sinix
Дата: 16.07.16
abstraction penalty на C#.

S>Ну как сказать... вот первоначальная цитата:
S>

S>Вот тут C++ код скомпированный в JavaScript и запущенный в Firefox показывает скорость близкую к native'у — 75ms, на native C++ было 60ms, на C# — 69ms.
S>Если на C# использовать не низкоуровневый цикл, а transform и лямбду (как было на C++) — то получается 141ms.

S>Она у тебя магией превращается в
S>

S>C++ скомпилированный в ненативный JavaScript (в веб-браузере, Карл!) оказался практически в два раза быстрее кода на C#?

S>Ну да блин, _внезапно_ шарп не инлайнит делегаты, не использует автоматом simd, не выполняет автовекторизацию и не делает ещё кучу плюшек (что, в принципе, может быть поправлено в .net native, но явно не в ближайшем будущем). Ну так про это и надо писать, а не передёргивать.

Я не передёргиваю, это же как раз отличная иллюстрация тому что я написал в том же сообщении:

EP>C++ быстрый не от того что нативный, а от того что даёт бесплатные, либо крайне дешёвые абстракции.
EP>Если на C#/Java писать код без абстракций, то по скорости он будет близок к аналогу на C++ — но такого кода будет намного больше

Или ты не дочитал до этого места?
То есть код на одинаковом уровне абстракций оказался медленнее почти в два раза (даже медленнее чем в веб-браузере, Карл!)
А вот код на C# написанный на более низком уровне, уже приблизился к высокоуровнему коду C++ по скорости. О чём и речь — на C# можно написать быстрый код, но это будет низкоуровневая лапша, на Java ситуация ещё хуже из-за отсутствия структур

S>не использует автоматом simd, не выполняет автовекторизацию и не делает ещё кучу плюшек (что, в принципе, может быть поправлено в .net native, но явно не в ближайшем будущем).


Думаешь JavaScript там сделал автовекторизацию и заиспользовал SIMD? :-
S>UPD
EP>>Ты же сам намерял >8x
Автор: Sinix
Дата: 16.07.16
abstraction penalty на C#.

S>Ну так снова то же самое — сравниваем вариант с вызовом делегата и без делегата внутри tight loop при очень дешёвом делегате.

Так это abstraction penalty и есть, которой нет на C++. И чем больше уровней абстрации — тем больше penalty, это были всё примеры с примитивнейшими абстракциями.

S>для критичных мест можно не полениться и расписать вручную


Так а я о чём — на C# для быстрого кода "нельзя лениться" и приходится раскорячиваться

EP>Если на C#/Java писать код без абстракций, то по скорости он будет близок к аналогу на C++ — но такого кода будет намного больше