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

Сообщение Re[4]: [performance] чего-то я не понимаю в этой жизни от 04.07.2022 20:42

Изменено 04.07.2022 20:44 rg45

Re[4]: [performance] чего-то я не понимаю в этой жизни
Здравствуйте, Videoman, Вы писали:

V>А если убрать throw из метода Parse и сделать метод inline, скорость у С++ вырастает ?


Такой вариант уже был: http://rsdn.org/forum/cpp/8306833.1
Автор: rg45
Дата: 02.07.22
. Ускорение, конечно, есть, но в C# аналогичная мера приводит к еще большему ускорению. В итоге разрыв увеличивается и получается 600 мс (C#) против 750 мс (C++). Использование inline и __forceinline никакого эффекта не дает, потому что функция инлайнися и без этого. Если встроить цикл парсинка в основной цикл прохода по входной последовательности, результат остается таким же.

V>Я c C# дела не имел. Я не пойму, нельзя сравнить assembler С# на выходе с выхлопом С++ ?


У C# выхлоп не непосредственно в машинные коды, а в промежуточный платформенно-независимый код intermediate language (IL). Во время запуска выполняется докомпиляция IL в машинные коды той платформы, на которой запускается приложение — так называемая процедура just-in-time compilation (JIT) или джиттинг. Джиттинг обеспечивается дотнетовой средой Common Language Runtime (CLR). Таким образом, получается двухфазная оптимизация. Не знаю даже, имеет ли смысл сравнивать IL с ассемблером.
Re[4]: [performance] чего-то я не понимаю в этой жизни
Здравствуйте, Videoman, Вы писали:

V>А если убрать throw из метода Parse и сделать метод inline, скорость у С++ вырастает ?


Такой вариант уже был: http://rsdn.org/forum/cpp/8306833.1
Автор: rg45
Дата: 02.07.22
. Ускорение, конечно, есть, но в C# аналогичная мера приводит к еще большему ускорению. В итоге разрыв увеличивается и получается 600 мс (C#) против 750 мс (C++). Использование inline и __forceinline никакого эффекта не дает, потому что функция инлайнится и без этого. Если встроить цикл парсинга в основной цикл прохода по входной последовательности, результат остается таким же.

V>Я c C# дела не имел. Я не пойму, нельзя сравнить assembler С# на выходе с выхлопом С++ ?


У C# выхлоп не непосредственно в машинные коды, а в промежуточный платформенно-независимый код intermediate language (IL). Во время запуска выполняется докомпиляция IL в машинные коды той платформы, на которой запускается приложение — так называемая процедура just-in-time compilation (JIT) или джиттинг. Джиттинг обеспечивается дотнетовой средой Common Language Runtime (CLR). Таким образом, достигается двухфазная оптимизация. Не знаю даже, имеет ли смысл сравнивать IL с ассемблером.