This is an automated email from the ASF dual-hosted git repository. emkornfield pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push: new 3cc12ab ARROW-6172 [Java] Provide benchmarks to set IntVector with different methods 3cc12ab is described below commit 3cc12abdbac324cb2e6a93fd2da0ff41929b6cac Author: liyafan82 <fan_li...@foxmail.com> AuthorDate: Wed Aug 14 22:51:05 2019 -0700 ARROW-6172 [Java] Provide benchmarks to set IntVector with different methods We provide benchmarks to evaluate the performance of setting IntVector in 3 different ways: through a value holder through a writer directly set the value through a set method Closes #5042 from liyafan82/fly_0808_jdbc1 and squashes the following commits: b19693bbc <liyafan82> ARROW-6172 Provide benchmarks to set IntVector with different methods Authored-by: liyafan82 <fan_li...@foxmail.com> Signed-off-by: Micah Kornfield <emkornfi...@gmail.com> --- .../org/apache/arrow/vector/IntBenchmarks.java | 111 +++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/java/performance/src/test/java/org/apache/arrow/vector/IntBenchmarks.java b/java/performance/src/test/java/org/apache/arrow/vector/IntBenchmarks.java new file mode 100644 index 0000000..64d5819 --- /dev/null +++ b/java/performance/src/test/java/org/apache/arrow/vector/IntBenchmarks.java @@ -0,0 +1,111 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.arrow.vector; + +import java.util.concurrent.TimeUnit; + +import org.apache.arrow.memory.BufferAllocator; +import org.apache.arrow.memory.RootAllocator; +import org.apache.arrow.vector.complex.impl.IntWriterImpl; +import org.apache.arrow.vector.holders.NullableIntHolder; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.TearDown; +import org.openjdk.jmh.runner.Runner; +import org.openjdk.jmh.runner.RunnerException; +import org.openjdk.jmh.runner.options.Options; +import org.openjdk.jmh.runner.options.OptionsBuilder; + +/** + * Benchmarks for {@link IntVector}. + */ +@State(Scope.Benchmark) +public class IntBenchmarks { + + private static final int VECTOR_LENGTH = 1024; + + private static final int ALLOCATOR_CAPACITY = 1024 * 1024; + + private BufferAllocator allocator; + + private IntVector vector; + + @Setup + public void prepare() { + allocator = new RootAllocator(ALLOCATOR_CAPACITY); + vector = new IntVector("vector", allocator); + vector.allocateNew(VECTOR_LENGTH); + vector.setValueCount(VECTOR_LENGTH); + } + + @TearDown + public void tearDown() { + vector.close(); + allocator.close(); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.MICROSECONDS) + public void setWithValueHolder() { + for (int i = 0; i < VECTOR_LENGTH; i++) { + NullableIntHolder holder = new NullableIntHolder(); + holder.isSet = i % 3 == 0 ? 0 : 1; + if (holder.isSet == 1) { + holder.value = i; + } + vector.setSafe(i, holder); + } + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.MICROSECONDS) + public void setIntDirectly() { + for (int i = 0; i < VECTOR_LENGTH; i++) { + vector.setSafe(i, i % 3 == 0 ? 0 : 1, i); + } + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.MICROSECONDS) + public void setWithWriter() { + IntWriterImpl writer = new IntWriterImpl(vector); + for (int i = 0; i < VECTOR_LENGTH; i++) { + if (i % 3 != 0) { + writer.writeInt(i); + } + } + } + + public static void main(String [] args) throws RunnerException { + Options opt = new OptionsBuilder() + .include(IntBenchmarks.class.getSimpleName()) + .forks(1) + .build(); + + new Runner(opt).run(); + } +}