Size: a a a

2018 July 01

NK

ID:414983998 in graalvm_ru
Решил протестить AssemblyScript + wasm на тех же задачах. Вот бенч (там только в миллисикунда общего времени и итераций/размер массива 1,000,000):
https://webassembly.studio/?f=su2fpmke27n

Результаты на моем MacBook Pro Late 2013 (Firefox 61) такие:

wasm baseline: 10мс
wasm stream: 274мс
js baseline (JS side): 59мс
js stream (JS side): 518мс

При чем, stream в JS и AS это не тот Array.stream, который ленивый конвеер и не создает промежуточных шагов, это обычный map/reduce при каждом map создается новый массив и передается последовательно дальше
источник

ПФ

Паша Финкельштейн in graalvm_ru
ID:414983998
Я что то не понимаю? Как можно мерять baseline и stream с map/reduce? Или вы имеено и меряете производительность этих методов (map/reduce) в сравнении с baseline?
да, меряю по сравнению с бейзлайн
источник

ПФ

Паша Финкельштейн in graalvm_ru
ID:414983998
И потом, разве не так должен выглядеть baseline?

   public void baseline(Blackhole b) {
       int result = 0;
       for (int i = 0; i < arrSz; i++) {
           int x = (values[i] + 1) * 2  + 2;
           result += x;
       }
       b.consume(result);
   }

Если вы сравниваете с этим:
Arrays.stream(values)
               .map(x -> x + 1)
               .map(x -> x * 2)
               .map(x -> x + 2)
               .reduce(0, Integer::sum));
нет, не обязан. Никточ не мешает компилятору быть таким умным чтобы в процессе эту математик посчитать
источник

NK

ID:414983998 in graalvm_ru
Arrays.stream я так понимаю в Java делает лямбда исчисления, аппликацию и каррирование в рамках стрима?
источник

ПФ

Паша Финкельштейн in graalvm_ru
ID:414983998
Arrays.stream я так понимаю в Java делает лямбда исчисления, аппликацию и каррирование в рамках стрима?
никакого каррирования, остальное — да
источник

NK

ID:414983998 in graalvm_ru
Ну да, без каррирования, обычная цепочка вызовов
источник

ПФ

Паша Финкельштейн in graalvm_ru
но это ничего не значит, потому что там летают очень простые данные — всё можно выкинуть гипотетически
источник

ПФ

Паша Финкельштейн in graalvm_ru
вероятно Kotlin.sequenceBenchmark именно поэтому настолько быстрый. Но я в это не верю и поэтому спрашиваю помощи у коллег
источник

NK

ID:414983998 in graalvm_ru
Кotlin может лучше это под капотом реализует на уровне рантайма.
источник

ПФ

Паша Финкельштейн in graalvm_ru
может быть, толькоу котлина нет своего рантайма
источник

NK

ID:414983998 in graalvm_ru
То есть это чисто синтаксический сахар над Java? Сорри не знаком с Kotlin вообще
источник

ПФ

Паша Финкельштейн in graalvm_ru
ID:414983998
То есть это чисто синтаксический сахар над Java? Сорри не знаком с Kotlin вообще
ближе к этому, да
источник

ПФ

Паша Финкельштейн in graalvm_ru
плюс хитрости компилятора,плюс совсем другой синтаксис
источник
2018 July 02

NK

ID:414983998 in graalvm_ru
Ну тогда котлин видимо делает какие то предвычисления
источник

ПФ

Паша Финкельштейн in graalvm_ru
просто всё так джаву можно синтаксическим сахаром к ассемблеру сделать
источник

ПФ

Паша Финкельштейн in graalvm_ru
ID:414983998
Ну тогда котлин видимо делает какие то предвычисления
нет, я сомтрел байткод
источник

ПФ

Паша Финкельштейн in graalvm_ru
ID:414983998
Ну тогда котлин видимо делает какие то предвычисления
а ещё если бы он так делал, то бенчмарк одинаково круто выглядел бы на всех вариантах запуска, а не только на грааль ЕЕ
источник

OS

Oleg Shelajev in graalvm_ru
не очень понятно почему так
источник

OS

Oleg Shelajev in graalvm_ru
по крайней мере мен
источник

NK

ID:414983998 in graalvm_ru
А Kotlin не может сделать подобную оптимизацию во время транспиляции?
https://gist.github.com/MaxGraey/e7486833ae3a7abe072ac35afce8a240#file-index-js-L68
источник