Size: a a a

2018 June 27

ПФ

Паша Финкельштейн in graalvm_ru
есть куда оптимизировать его )))
источник

ПФ

Паша Финкельштейн in graalvm_ru
@Warmup(iterations = 1)
@Measurement(iterations = 3)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Fork(1)
@State(Scope.Benchmark)
public class JavaSimpleStreamBenchmark {

   @Param({"10", "100", "1000", "10000"})
   public int arrSz;

   int[] values;
   private final Random random = new Random();

   @Setup(Level.Invocation)
   public void setup() {
       values = new int[arrSz];
       for (int i = 0; i < arrSz; i++) {
           values[i] = random.nextInt();
       }
   }

   @Benchmark
   public void testMethod(Blackhole b) {
       b.consume(Arrays.stream(values)
               .map(x -> x + 1)
               .map(x -> x * 2)
               .map(x -> x + 2)
               .reduce(0, Integer::sum));
   }

   @Benchmark
   public void baseline(Blackhole b) {
       int result = 0;
       for (int i = 0; i < arrSz; i++) {
           int x = values[i] * 2 + 2  + 2;
           result += x;
       }
       b.consume(result);
   }
       
}
источник

ПФ

Паша Финкельштейн in graalvm_ru
Benchmark                             (arrSz)  Mode  Cnt      Score      Error  Units
JavaSimpleStreamBenchmark.baseline         10  avgt    3     26.944 ±    4.251  ns/op
JavaSimpleStreamBenchmark.baseline        100  avgt    3     34.266 ±    9.123  ns/op
JavaSimpleStreamBenchmark.baseline       1000  avgt    3    154.049 ±   31.702  ns/op
JavaSimpleStreamBenchmark.baseline      10000  avgt    3    963.724 ±  362.114  ns/op
JavaSimpleStreamBenchmark.testMethod       10  avgt    3     27.755 ±   11.820  ns/op
JavaSimpleStreamBenchmark.testMethod      100  avgt    3    629.005 ±   61.492  ns/op
JavaSimpleStreamBenchmark.testMethod     1000  avgt    3   6369.043 ± 5394.312  ns/op
JavaSimpleStreamBenchmark.testMethod    10000  avgt    3  62350.669 ± 7573.276  ns/op
источник

ПФ

Паша Финкельштейн in graalvm_ru
С гралем ↑
источник

ПФ

Паша Финкельштейн in graalvm_ru
Без него:
Benchmark                             (arrSz)  Mode  Cnt       Score       Error  Units
JavaSimpleStreamBenchmark.baseline         10  avgt    3      26.727 ±     6.653  ns/op
JavaSimpleStreamBenchmark.baseline        100  avgt    3      57.084 ±    38.360  ns/op
JavaSimpleStreamBenchmark.baseline       1000  avgt    3     367.417 ±    24.354  ns/op
JavaSimpleStreamBenchmark.baseline      10000  avgt    3    3442.745 ±  1873.309  ns/op
JavaSimpleStreamBenchmark.testMethod       10  avgt    3     212.559 ±    79.546  ns/op
JavaSimpleStreamBenchmark.testMethod      100  avgt    3    1258.077 ±   320.338  ns/op
JavaSimpleStreamBenchmark.testMethod     1000  avgt    3   11999.778 ± 12045.574  ns/op
JavaSimpleStreamBenchmark.testMethod    10000  avgt    3  117829.041 ± 85594.170  ns/op
источник

ПФ

Паша Финкельштейн in graalvm_ru
Интересно как даже бейзлайн проседает без граля.
источник

ПФ

Паша Финкельштейн in graalvm_ru
Invocation, кажется, неправильну у нас мерять. Надо Iteration…
источник

ВВ

Виктор Вербицкий in graalvm_ru
Можно нормироват на количество итераций
источник

ПФ

Паша Финкельштейн in graalvm_ru
не, прочто Invocation нельзя использовать для суб-миллисекундных тестов
источник

ВВ

Виктор Вербицкий in graalvm_ru
Т.е. на размер массиуа
источник

ПФ

Паша Финкельштейн in graalvm_ru
слишком дорого само измерение и портит результаты
источник

ПФ

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

ПФ

Паша Финкельштейн in graalvm_ru
Сорри за спам, народ
источник

ПФ

Паша Финкельштейн in graalvm_ru
но сейчас все результаты опять поменяются )))
источник

ВВ

Виктор Вербицкий in graalvm_ru
Паша Финкельштейн
Сорри за спам, народ
Зато даже интереснее футбола :-)
источник

ПФ

Паша Финкельштейн in graalvm_ru
Граль:
Benchmark                             (arrSz)  Mode  Cnt      Score       Error  Units
JavaSimpleStreamBenchmark.baseline         10  avgt    3      8.440 ±     8.761  ns/op
JavaSimpleStreamBenchmark.baseline        100  avgt    3     16.169 ±    14.450  ns/op
JavaSimpleStreamBenchmark.baseline       1000  avgt    3     94.041 ±    13.297  ns/op
JavaSimpleStreamBenchmark.baseline      10000  avgt    3    939.374 ±   512.982  ns/op
JavaSimpleStreamBenchmark.testMethod       10  avgt    3     11.141 ±     9.547  ns/op
JavaSimpleStreamBenchmark.testMethod      100  avgt    3    632.958 ±   395.795  ns/op
JavaSimpleStreamBenchmark.testMethod     1000  avgt    3   6183.166 ±  1122.487  ns/op
JavaSimpleStreamBenchmark.testMethod    10000  avgt    3  58363.432 ± 22114.588  ns/op
источник

ПФ

Паша Финкельштейн in graalvm_ru
граль за каждый нолик в размере массива добавляет порядок )))
источник

ПФ

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

ПФ

Паша Финкельштейн in graalvm_ru
бейзлайн так не делает. и бейзлайн всё ещё уделывает насмерть стримы
источник

ПФ

Паша Финкельштейн in graalvm_ru
пошёл гнать без граля )
источник