Здравствуйте, 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++ — но такого кода будет намного больше