Комментарии 5
Спасибо за пример использования FFI! Можно было бы еще подмешать в сравнение Flutter и сравнить оверхеды FFI и Platform Channels (думая на единичном вызове log_loop разницы бы не было)…
Так или иначе, любопытно, почему вычисление логарифма настолько медленно реализанво в Dart и что дизассемблированном коде.
Так или иначе, любопытно, почему вычисление логарифма настолько медленно реализанво в Dart и что дизассемблированном коде.
0
Можно ли лучше? В принципе да. Выполняем dart compile exe и получаем ускорение на 10% или 9.00 секунд.
А есть ли разница с aot-snapshot?
0
Заинтересовало меня, почему Dart споткнулся на таком простом куске кода. Сделал свой микробенчмарк, добавил к миксу C#/.NET 5 и вычисление синуса. Похоже, что есть некая проблема конкретно в реализации логарифма в Дарте, синус например оказался быстрее, чем у других.
github.com/dart-lang/sdk/issues/45414
В оригинальном варианте хорошо бы выводить результат, который возвращается из log_loop, иначе складывается впечатление, что gcc вовсе вырезает этот вызов (на 02 — O3).
github.com/dart-lang/sdk/issues/45414
В оригинальном варианте хорошо бы выводить результат, который возвращается из log_loop, иначе складывается впечатление, что gcc вовсе вырезает этот вызов (на 02 — O3).
+1
В оригинальном варианте хорошо бы выводить результат, который возвращается из log_loop, иначе складывается впечатление, что gcc вовсе вырезает этот вызов (на 02 — O3).
Я думаю, что в таком случае была бы видна разница между "C с линковкой" и "C без линковки", потому что без LTO вырезать вызов функции из внешней библиотеки проблематично, а GCC 9.1 не включает LTO по-умолчанию. Можете посмотреть на godbolt ассемблерный вывод, call log
в цикле (который инлайнится в .main
) остаются и при O3
.
0
Не будет существенной разницы, потому что exe — это фактически aot-snapshot + dart runtime
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Ускоряем Dart. Нативно, недорого