Pull to refresh

Comments 5

Спасибо за пример использования FFI! Можно было бы еще подмешать в сравнение Flutter и сравнить оверхеды FFI и Platform Channels (думая на единичном вызове log_loop разницы бы не было)…
Так или иначе, любопытно, почему вычисление логарифма настолько медленно реализанво в Dart и что дизассемблированном коде.
Можно ли лучше? В принципе да. Выполняем dart compile exe и получаем ускорение на 10% или 9.00 секунд.


А есть ли разница с aot-snapshot?
Заинтересовало меня, почему Dart споткнулся на таком простом куске кода. Сделал свой микробенчмарк, добавил к миксу C#/.NET 5 и вычисление синуса. Похоже, что есть некая проблема конкретно в реализации логарифма в Дарте, синус например оказался быстрее, чем у других.
github.com/dart-lang/sdk/issues/45414

В оригинальном варианте хорошо бы выводить результат, который возвращается из log_loop, иначе складывается впечатление, что gcc вовсе вырезает этот вызов (на 02 — O3).
В оригинальном варианте хорошо бы выводить результат, который возвращается из log_loop, иначе складывается впечатление, что gcc вовсе вырезает этот вызов (на 02 — O3).

Я думаю, что в таком случае была бы видна разница между "C с линковкой" и "C без линковки", потому что без LTO вырезать вызов функции из внешней библиотеки проблематично, а GCC 9.1 не включает LTO по-умолчанию. Можете посмотреть на godbolt ассемблерный вывод, call log в цикле (который инлайнится в .main) остаются и при O3.

Не будет существенной разницы, потому что exe — это фактически aot-snapshot + dart runtime

Sign up to leave a comment.

Articles