HIVE-12358: Categorize vectorization benchmarks into arithmetic, comparison, logic(Teddy Choi, reviewed by Ashutosh Chauhan, Ferdinand Xu)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/9234712b Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/9234712b Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/9234712b Branch: refs/heads/spark Commit: 9234712b40d1cc5bb08159f0fa899346dd9ab73f Parents: 1efb92a Author: Teddy Choi <tc...@hortonworks.com> Authored: Sun Nov 8 20:08:07 2015 -0500 Committer: Ferdinand Xu <cheng.a...@intel.com> Committed: Sun Nov 8 20:09:31 2015 -0500 ---------------------------------------------------------------------- .../vectorization/AbstractExpression.java | 150 ++++++ .../vectorization/VectorizationBench.java | 506 ------------------- .../VectorizedArithmeticBench.java | 112 ++++ .../VectorizedComparisonBench.java | 215 ++++++++ .../vectorization/VectorizedLogicBench.java | 147 ++++++ 5 files changed, 624 insertions(+), 506 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/9234712b/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/AbstractExpression.java ---------------------------------------------------------------------- diff --git a/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/AbstractExpression.java b/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/AbstractExpression.java new file mode 100644 index 0000000..94af3e0 --- /dev/null +++ b/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/AbstractExpression.java @@ -0,0 +1,150 @@ +/** + * Licensed 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.hive.benchmark.vectorization; + +import org.apache.hadoop.hive.ql.exec.vector.ColumnVector; +import org.apache.hadoop.hive.ql.exec.vector.DoubleColumnVector; +import org.apache.hadoop.hive.ql.exec.vector.LongColumnVector; +import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch; +import org.apache.hadoop.hive.ql.exec.vector.expressions.VectorExpression; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +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.Warmup; + +import java.util.Random; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@Fork(1) +@State(Scope.Thread) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +public abstract class AbstractExpression { + private static final int DEFAULT_ITER_TIME = 1000000; + protected VectorExpression expression; + protected VectorizedRowBatch rowBatch; + + protected VectorizedRowBatch buildRowBatch(ColumnVector output, int colNum, ColumnVector... + cols) { + VectorizedRowBatch rowBatch = new VectorizedRowBatch(colNum + 1); + for (int i = 0; i < cols.length; i++) { + rowBatch.cols[i] = cols[i]; + } + rowBatch.cols[colNum] = output; + return rowBatch; + } + + @Setup + public abstract void setup(); + + @Benchmark + @Warmup(iterations = 2, time = 2, timeUnit = TimeUnit.MILLISECONDS) + @Measurement(iterations = 2, time = 2, timeUnit = TimeUnit.MILLISECONDS) + public void bench() { + for (int i = 0; i < DEFAULT_ITER_TIME; i++) { + expression.evaluate(rowBatch); + } + } + + protected LongColumnVector getLongColumnVector() { + LongColumnVector columnVector = new LongColumnVector(VectorizedRowBatch.DEFAULT_SIZE); + Random random = new Random(); + for (int i = 0; i != VectorizedRowBatch.DEFAULT_SIZE; i++) { + columnVector.vector[i] = random.nextLong(); + } + return columnVector; + } + + protected LongColumnVector getRepeatingLongColumnVector() { + LongColumnVector columnVector = new LongColumnVector(VectorizedRowBatch.DEFAULT_SIZE); + columnVector.fill(2); + return columnVector; + } + + protected LongColumnVector getLongColumnVectorWithNull() { + LongColumnVector columnVector = new LongColumnVector(VectorizedRowBatch.DEFAULT_SIZE); + columnVector.noNulls = false; + Random random = new Random(); + for (int i = 0; i != VectorizedRowBatch.DEFAULT_SIZE; i++) { + if (i % 100 == 0) { + columnVector.isNull[i] = true; + } + columnVector.vector[i] = random.nextLong(); + } + return columnVector; + } + + protected LongColumnVector getBooleanLongColumnVector() { + LongColumnVector columnVector = new LongColumnVector(VectorizedRowBatch.DEFAULT_SIZE); + Random random = new Random(); + for (int i = 0; i != VectorizedRowBatch.DEFAULT_SIZE; i++) { + columnVector.vector[i] = random.nextInt(2); + } + return columnVector; + } + + protected LongColumnVector getBooleanRepeatingLongColumnVector() { + LongColumnVector columnVector = new LongColumnVector(VectorizedRowBatch.DEFAULT_SIZE); + columnVector.fill(1); + return columnVector; + } + + protected LongColumnVector getBooleanLongColumnVectorWithNull() { + LongColumnVector columnVector = new LongColumnVector(VectorizedRowBatch.DEFAULT_SIZE); + columnVector.noNulls = false; + Random random = new Random(); + for (int i = 0; i != VectorizedRowBatch.DEFAULT_SIZE; i++) { + if (i % 100 == 0) { + columnVector.isNull[i] = true; + } + columnVector.vector[i] = random.nextInt(2); + } + return columnVector; + } + + protected DoubleColumnVector getDoubleColumnVector() { + DoubleColumnVector columnVector = new DoubleColumnVector(VectorizedRowBatch.DEFAULT_SIZE); + Random random = new Random(); + for (int i = 0; i != VectorizedRowBatch.DEFAULT_SIZE; i++) { + columnVector.vector[i] = random.nextDouble(); + } + return columnVector; + } + + protected DoubleColumnVector getRepeatingDoubleColumnVector() { + DoubleColumnVector columnVector = new DoubleColumnVector(VectorizedRowBatch.DEFAULT_SIZE); + columnVector.fill(2.0d); + return columnVector; + } + + protected DoubleColumnVector getDoubleColumnVectorWithNull() { + DoubleColumnVector columnVector = new DoubleColumnVector(VectorizedRowBatch.DEFAULT_SIZE); + columnVector.noNulls = false; + Random random = new Random(); + for (int i = 0; i != VectorizedRowBatch.DEFAULT_SIZE; i++) { + if (i % 100 == 0) { + columnVector.isNull[i] = true; + } + columnVector.vector[i] = random.nextDouble(); + } + return columnVector; + } + +} http://git-wip-us.apache.org/repos/asf/hive/blob/9234712b/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/VectorizationBench.java ---------------------------------------------------------------------- diff --git a/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/VectorizationBench.java b/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/VectorizationBench.java deleted file mode 100644 index 642c5e1..0000000 --- a/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/VectorizationBench.java +++ /dev/null @@ -1,506 +0,0 @@ -/** - * Licensed 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.hive.benchmark.vectorization; - -import org.apache.hadoop.hive.ql.exec.vector.ColumnVector; -import org.apache.hadoop.hive.ql.exec.vector.DoubleColumnVector; -import org.apache.hadoop.hive.ql.exec.vector.LongColumnVector; -import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch; -import org.apache.hadoop.hive.ql.exec.vector.expressions.IfExprLongColumnLongColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.IfExprDoubleColumnDoubleColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.ColAndCol; -import org.apache.hadoop.hive.ql.exec.vector.expressions.ColOrCol; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColDivideLongColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.NotCol; -import org.apache.hadoop.hive.ql.exec.vector.expressions.VectorExpression; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColEqualLongColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColGreaterEqualLongColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColGreaterLongColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColLessEqualLongColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColLessLongColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColNotEqualLongColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColEqualLongScalar; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColGreaterEqualLongScalar; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColGreaterLongScalar; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColLessEqualLongScalar; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColLessLongScalar; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColNotEqualLongScalar; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongScalarEqualLongColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongScalarGreaterEqualLongColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongScalarGreaterLongColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongScalarLessEqualLongColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongScalarLessLongColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongScalarNotEqualLongColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColDivideLongColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.gen.DoubleColAddDoubleColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.gen.DoubleColDivideDoubleColumn; -import org.apache.hadoop.hive.ql.exec.vector.expressions.gen.LongColAddLongColumn; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Measurement; -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.Warmup; -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; - -import java.util.Arrays; -import java.lang.Override; -import java.util.Random; -import java.util.concurrent.TimeUnit; - -@State(Scope.Benchmark) -public class VectorizationBench { - /** - * This test measures the performance for vectorization. - * <p/> - * This test uses JMH framework for benchmarking. - * You may execute this benchmark tool using JMH command line in different ways: - * <p/> - * To use the settings shown in the main() function, use: - * $ java -cp target/benchmarks.jar org.apache.hive.benchmark.vectorization.VectorizationBench - * <p/> - * To use the default settings used by JMH, use: - * $ java -jar target/benchmarks.jar org.apache.hive.benchmark.vectorization VectorizationBench - * <p/> - * To specify different parameters, use: - * - This command will use 10 warm-up iterations, 5 test iterations, and 2 forks. And it will - * display the Average Time (avgt) in Microseconds (us) - * - Benchmark mode. Available modes are: - * [Throughput/thrpt, AverageTime/avgt, SampleTime/sample, SingleShotTime/ss, All/all] - * - Output time unit. Available time units are: [m, s, ms, us, ns]. - * <p/> - * $ java -jar target/benchmarks.jar org.apache.hive.benchmark.vectorization VectorizationBench - * -wi 10 -i 5 -f 2 -bm avgt -tu us - */ - - @BenchmarkMode(Mode.AverageTime) - @Fork(1) - @State(Scope.Thread) - @OutputTimeUnit(TimeUnit.NANOSECONDS) - public static abstract class AbstractExpression { - private static final int DEFAULT_ITER_TIME = 1000000; - protected VectorExpression expression; - protected VectorizedRowBatch rowBatch; - - protected VectorizedRowBatch buildRowBatch(ColumnVector output, int colNum, ColumnVector... - cols) { - VectorizedRowBatch rowBatch = new VectorizedRowBatch(colNum + 1); - for (int i = 0; i < cols.length; i++) { - rowBatch.cols[i] = cols[i]; - } - rowBatch.cols[colNum] = output; -// rowBatch.selectedInUse = true; - return rowBatch; - } - - @Setup - public abstract void setup(); - - @Benchmark - @Warmup(iterations = 2, time = 2, timeUnit = TimeUnit.MILLISECONDS) - @Measurement(iterations = 2, time = 2, timeUnit = TimeUnit.MILLISECONDS) - public void bench() { - for (int i = 0; i < DEFAULT_ITER_TIME; i++) { - expression.evaluate(rowBatch); - } - } - - protected LongColumnVector getLongColumnVector() { - LongColumnVector columnVector = new LongColumnVector(VectorizedRowBatch.DEFAULT_SIZE); - Random random = new Random(); - for (int i = 0; i != VectorizedRowBatch.DEFAULT_SIZE; i++) { - columnVector.vector[i] = random.nextLong(); - } - return columnVector; - } - - protected LongColumnVector getRepeatingLongColumnVector() { - LongColumnVector columnVector = new LongColumnVector(VectorizedRowBatch.DEFAULT_SIZE); - columnVector.fill(2); - return columnVector; - } - - protected LongColumnVector getLongColumnVectorWithNull() { - LongColumnVector columnVector = new LongColumnVector(VectorizedRowBatch.DEFAULT_SIZE); - columnVector.noNulls = false; - Random random = new Random(); - for (int i = 0; i != VectorizedRowBatch.DEFAULT_SIZE; i++) { - if (i % 100 == 0) { - columnVector.isNull[i] = true; - } - columnVector.vector[i] = random.nextLong(); - } - return columnVector; - } - - protected LongColumnVector getBooleanLongColumnVector() { - LongColumnVector columnVector = new LongColumnVector(VectorizedRowBatch.DEFAULT_SIZE); - Random random = new Random(); - for (int i = 0; i != VectorizedRowBatch.DEFAULT_SIZE; i++) { - columnVector.vector[i] = random.nextInt(2); - } - return columnVector; - } - - protected LongColumnVector getBooleanRepeatingLongColumnVector() { - LongColumnVector columnVector = new LongColumnVector(VectorizedRowBatch.DEFAULT_SIZE); - columnVector.fill(1); - return columnVector; - } - - protected LongColumnVector getBooleanLongColumnVectorWithNull() { - LongColumnVector columnVector = new LongColumnVector(VectorizedRowBatch.DEFAULT_SIZE); - columnVector.noNulls = false; - Random random = new Random(); - for (int i = 0; i != VectorizedRowBatch.DEFAULT_SIZE; i++) { - if (i % 100 == 0) { - columnVector.isNull[i] = true; - } - columnVector.vector[i] = random.nextInt(2); - } - return columnVector; - } - - protected DoubleColumnVector getDoubleColumnVector() { - DoubleColumnVector columnVector = new DoubleColumnVector(VectorizedRowBatch.DEFAULT_SIZE); - Random random = new Random(); - for (int i = 0; i != VectorizedRowBatch.DEFAULT_SIZE; i++) { - columnVector.vector[i] = random.nextDouble(); - } - return columnVector; - } - - protected DoubleColumnVector getRepeatingDoubleColumnVector() { - DoubleColumnVector columnVector = new DoubleColumnVector(VectorizedRowBatch.DEFAULT_SIZE); - columnVector.fill(2.0d); - return columnVector; - } - - protected DoubleColumnVector getDoubleColumnVectorWithNull() { - DoubleColumnVector columnVector = new DoubleColumnVector(VectorizedRowBatch.DEFAULT_SIZE); - columnVector.noNulls = false; - Random random = new Random(); - for (int i = 0; i != VectorizedRowBatch.DEFAULT_SIZE; i++) { - if (i % 100 == 0) { - columnVector.isNull[i] = true; - } - columnVector.vector[i] = random.nextDouble(); - } - return columnVector; - } - - } - - public static class DoubleColAddRepeatingDoubleColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new DoubleColumnVector(), 2, getDoubleColumnVector(), - getRepeatingDoubleColumnVector()); - expression = new DoubleColAddDoubleColumn(0, 1, 2); - } - } - - public static class LongColAddRepeatingLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 2, getLongColumnVector(), - getRepeatingLongColumnVector()); - expression = new LongColAddLongColumn(0, 1, 2); - } - } - - - public static class DoubleColDivideDoubleColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new DoubleColumnVector(), 2, getDoubleColumnVector(), - getDoubleColumnVector()); - expression = new DoubleColDivideDoubleColumn(0, 1, 2); - } - } - - public static class DoubleColDivideRepeatingDoubleColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new DoubleColumnVector(), 2, getDoubleColumnVector(), - getRepeatingDoubleColumnVector()); - expression = new DoubleColDivideDoubleColumn(0, 1, 2); - } - } - - public static class LongColDivideLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new DoubleColumnVector(), 2, getLongColumnVector(), - getLongColumnVector()); - expression = new LongColDivideLongColumn(0, 1, 2); - } - } - - public static class LongColDivideRepeatingLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new DoubleColumnVector(), 2, getLongColumnVector(), - getRepeatingLongColumnVector()); - expression = new LongColDivideLongColumn(0, 1, 2); - } - } - - public static class ColAndColBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 2, getBooleanLongColumnVector(), - getBooleanLongColumnVector()); - expression = new ColAndCol(0, 1, 2); - } - } - - public static class ColAndRepeatingColBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 2, getBooleanLongColumnVector(), - getBooleanRepeatingLongColumnVector()); - expression = new ColAndCol(0, 1, 2); - } - } - - public static class RepeatingColAndColBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 2, getBooleanRepeatingLongColumnVector(), - getBooleanLongColumnVector()); - expression = new ColAndCol(0, 1, 2); - } - } - - public static class ColOrColBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 2, getBooleanLongColumnVector(), - getBooleanLongColumnVector()); - expression = new ColOrCol(0, 1, 2); - } - } - - public static class ColOrRepeatingColBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 2, getBooleanLongColumnVector(), - getBooleanRepeatingLongColumnVector()); - expression = new ColOrCol(0, 1, 2); - } - } - - public static class RepeatingColOrColBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 2, getBooleanRepeatingLongColumnVector(), - getBooleanLongColumnVector()); - expression = new ColOrCol(0, 1, 2); - } - } - - public static class NotColBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 1, getBooleanLongColumnVector()); - expression = new NotCol(0, 1); - } - } - - public static class IfExprLongColumnLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 3, getBooleanLongColumnVector(), - getLongColumnVector(), getLongColumnVector()); - expression = new IfExprLongColumnLongColumn(0, 1, 2, 3); - } - } - - public static class IfExprRepeatingLongColumnLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 3, getBooleanLongColumnVector(), - getRepeatingLongColumnVector(), getLongColumnVector()); - expression = new IfExprLongColumnLongColumn(0, 1, 2, 3); - } - } - - public static class IfExprLongColumnRepeatingLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 3, getBooleanLongColumnVector(), - getLongColumnVector(), getRepeatingLongColumnVector()); - expression = new IfExprLongColumnLongColumn(0, 1, 2, 3); - } - } - - public static class LongColEqualLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 2, getLongColumnVector(), getLongColumnVector()); - expression = new LongColEqualLongColumn(0, 1, 2); - } - } - - public static class LongColGreaterEqualLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 2, getLongColumnVector(), getLongColumnVector()); - expression = new LongColGreaterEqualLongColumn(0, 1, 2); - } - } - - public static class LongColGreaterLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 2, getLongColumnVector(), getLongColumnVector()); - expression = new LongColGreaterLongColumn(0, 1, 2); - } - } - - public static class LongColLessEqualLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 2, getLongColumnVector(), getLongColumnVector()); - expression = new LongColLessEqualLongColumn(0, 1, 2); - } - } - - public static class LongColLessLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 2, getLongColumnVector(), getLongColumnVector()); - expression = new LongColLessLongColumn(0, 1, 2); - } - } - - public static class LongColNotEqualLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 2, getLongColumnVector(), getLongColumnVector()); - expression = new LongColNotEqualLongColumn(0, 1, 2); - } - } - - public static class LongColEqualLongScalarBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); - expression = new LongColEqualLongScalar(0, 0, 1); - } - } - - public static class LongColGreaterEqualLongScalarBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); - expression = new LongColGreaterEqualLongScalar(0, 0, 1); - } - } - - public static class LongColGreaterLongScalarBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); - expression = new LongColGreaterLongScalar(0, 0, 1); - } - } - - public static class LongColLessEqualLongScalarBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); - expression = new LongColLessEqualLongScalar(0, 0, 1); - } - } - - public static class LongColLessLongScalarBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); - expression = new LongColLessLongScalar(0, 0, 1); - } - } - - public static class LongColNotEqualLongScalarBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); - expression = new LongColNotEqualLongScalar(0, 0, 1); - } - } - - - public static class LongScalarEqualLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); - expression = new LongScalarEqualLongColumn(0, 0, 1); - } - } - - public static class LongScalarGreaterEqualLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); - expression = new LongScalarGreaterEqualLongColumn(0, 0, 1); - } - } - - public static class LongScalarGreaterLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); - expression = new LongScalarGreaterLongColumn(0, 0, 1); - } - } - - public static class LongScalarLessEqualLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); - expression = new LongScalarLessEqualLongColumn(0, 0, 1); - } - } - - public static class LongScalarLessLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); - expression = new LongScalarLessLongColumn(0, 0, 1); - } - } - - public static class LongScalarNotEqualLongColumnBench extends AbstractExpression { - @Override - public void setup() { - rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); - expression = new LongScalarNotEqualLongColumn(0, 0, 1); - } - } - - public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder().include(".*" + VectorizationBench.class.getSimpleName() + - ".*").build(); - new Runner(opt).run(); - } -} http://git-wip-us.apache.org/repos/asf/hive/blob/9234712b/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/VectorizedArithmeticBench.java ---------------------------------------------------------------------- diff --git a/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/VectorizedArithmeticBench.java b/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/VectorizedArithmeticBench.java new file mode 100644 index 0000000..b6e2fec --- /dev/null +++ b/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/VectorizedArithmeticBench.java @@ -0,0 +1,112 @@ +/** + * Licensed 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.hive.benchmark.vectorization; + +import org.apache.hadoop.hive.ql.exec.vector.DoubleColumnVector; +import org.apache.hadoop.hive.ql.exec.vector.LongColumnVector; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColDivideLongColumn; +import org.apache.hadoop.hive.ql.exec.vector.expressions.gen.DoubleColAddDoubleColumn; +import org.apache.hadoop.hive.ql.exec.vector.expressions.gen.DoubleColDivideDoubleColumn; +import org.apache.hadoop.hive.ql.exec.vector.expressions.gen.LongColAddLongColumn; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; +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; + +/** + * This test measures the performance for vectorization. + * <p/> + * This test uses JMH framework for benchmarking. + * You may execute this benchmark tool using JMH command line in different ways: + * <p/> + * To use the settings shown in the main() function, use: + * $ java -cp target/benchmarks.jar org.apache.hive.benchmark.vectorization.VectorizedArithmeticBench + * <p/> + * To use the default settings used by JMH, use: + * $ java -jar target/benchmarks.jar org.apache.hive.benchmark.vectorization.VectorizedArithmeticBench + * <p/> + * To specify different parameters, use: + * - This command will use 10 warm-up iterations, 5 test iterations, and 2 forks. And it will + * display the Average Time (avgt) in Microseconds (us) + * - Benchmark mode. Available modes are: + * [Throughput/thrpt, AverageTime/avgt, SampleTime/sample, SingleShotTime/ss, All/all] + * - Output time unit. Available time units are: [m, s, ms, us, ns]. + * <p/> + * $ java -jar target/benchmarks.jar org.apache.hive.benchmark.vectorization.VectorizedArithmeticBench + * -wi 10 -i 5 -f 2 -bm avgt -tu us + */ +@State(Scope.Benchmark) +public class VectorizedArithmeticBench { + public static class DoubleColAddRepeatingDoubleColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new DoubleColumnVector(), 2, getDoubleColumnVector(), + getRepeatingDoubleColumnVector()); + expression = new DoubleColAddDoubleColumn(0, 1, 2); + } + } + + public static class LongColAddRepeatingLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 2, getLongColumnVector(), + getRepeatingLongColumnVector()); + expression = new LongColAddLongColumn(0, 1, 2); + } + } + + public static class DoubleColDivideDoubleColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new DoubleColumnVector(), 2, getDoubleColumnVector(), + getDoubleColumnVector()); + expression = new DoubleColDivideDoubleColumn(0, 1, 2); + } + } + + public static class DoubleColDivideRepeatingDoubleColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new DoubleColumnVector(), 2, getDoubleColumnVector(), + getRepeatingDoubleColumnVector()); + expression = new DoubleColDivideDoubleColumn(0, 1, 2); + } + } + + public static class LongColDivideLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new DoubleColumnVector(), 2, getLongColumnVector(), + getLongColumnVector()); + expression = new LongColDivideLongColumn(0, 1, 2); + } + } + + public static class LongColDivideRepeatingLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new DoubleColumnVector(), 2, getLongColumnVector(), + getRepeatingLongColumnVector()); + expression = new LongColDivideLongColumn(0, 1, 2); + } + } + + public static void main(String[] args) throws RunnerException { + Options opt = new OptionsBuilder().include(".*" + VectorizedArithmeticBench.class.getSimpleName() + + ".*").build(); + new Runner(opt).run(); + } +} http://git-wip-us.apache.org/repos/asf/hive/blob/9234712b/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/VectorizedComparisonBench.java ---------------------------------------------------------------------- diff --git a/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/VectorizedComparisonBench.java b/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/VectorizedComparisonBench.java new file mode 100644 index 0000000..536ef76 --- /dev/null +++ b/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/VectorizedComparisonBench.java @@ -0,0 +1,215 @@ +/** + * Licensed 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.hive.benchmark.vectorization; + +import org.apache.hadoop.hive.ql.exec.vector.LongColumnVector; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColEqualLongColumn; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColEqualLongScalar; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColGreaterEqualLongColumn; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColGreaterEqualLongScalar; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColGreaterLongColumn; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColGreaterLongScalar; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColLessEqualLongColumn; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColLessEqualLongScalar; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColLessLongColumn; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColLessLongScalar; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColNotEqualLongColumn; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongColNotEqualLongScalar; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongScalarEqualLongColumn; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongScalarGreaterEqualLongColumn; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongScalarGreaterLongColumn; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongScalarLessEqualLongColumn; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongScalarLessLongColumn; +import org.apache.hadoop.hive.ql.exec.vector.expressions.LongScalarNotEqualLongColumn; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; +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; + +/** + * This test measures the performance for vectorization. + * <p/> + * This test uses JMH framework for benchmarking. + * You may execute this benchmark tool using JMH command line in different ways: + * <p/> + * To use the settings shown in the main() function, use: + * $ java -cp target/benchmarks.jar org.apache.hive.benchmark.vectorization.VectorizedComparisonBench + * <p/> + * To use the default settings used by JMH, use: + * $ java -jar target/benchmarks.jar org.apache.hive.benchmark.vectorization.VectorizedComparisonBench + * <p/> + * To specify different parameters, use: + * - This command will use 10 warm-up iterations, 5 test iterations, and 2 forks. And it will + * display the Average Time (avgt) in Microseconds (us) + * - Benchmark mode. Available modes are: + * [Throughput/thrpt, AverageTime/avgt, SampleTime/sample, SingleShotTime/ss, All/all] + * - Output time unit. Available time units are: [m, s, ms, us, ns]. + * <p/> + * $ java -jar target/benchmarks.jar org.apache.hive.benchmark.vectorization.VectorizedComparisonBench + * -wi 10 -i 5 -f 2 -bm avgt -tu us + */ +@State(Scope.Benchmark) +public class VectorizedComparisonBench { + public static class LongColEqualLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 2, getLongColumnVector(), getLongColumnVector()); + expression = new LongColEqualLongColumn(0, 1, 2); + } + } + + public static class LongColGreaterEqualLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 2, getLongColumnVector(), getLongColumnVector()); + expression = new LongColGreaterEqualLongColumn(0, 1, 2); + } + } + + public static class LongColGreaterLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 2, getLongColumnVector(), getLongColumnVector()); + expression = new LongColGreaterLongColumn(0, 1, 2); + } + } + + public static class LongColLessEqualLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 2, getLongColumnVector(), getLongColumnVector()); + expression = new LongColLessEqualLongColumn(0, 1, 2); + } + } + + public static class LongColLessLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 2, getLongColumnVector(), getLongColumnVector()); + expression = new LongColLessLongColumn(0, 1, 2); + } + } + + public static class LongColNotEqualLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 2, getLongColumnVector(), getLongColumnVector()); + expression = new LongColNotEqualLongColumn(0, 1, 2); + } + } + + public static class LongColEqualLongScalarBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); + expression = new LongColEqualLongScalar(0, 0, 1); + } + } + + public static class LongColGreaterEqualLongScalarBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); + expression = new LongColGreaterEqualLongScalar(0, 0, 1); + } + } + + public static class LongColGreaterLongScalarBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); + expression = new LongColGreaterLongScalar(0, 0, 1); + } + } + + public static class LongColLessEqualLongScalarBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); + expression = new LongColLessEqualLongScalar(0, 0, 1); + } + } + + public static class LongColLessLongScalarBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); + expression = new LongColLessLongScalar(0, 0, 1); + } + } + + public static class LongColNotEqualLongScalarBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); + expression = new LongColNotEqualLongScalar(0, 0, 1); + } + } + + public static class LongScalarEqualLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); + expression = new LongScalarEqualLongColumn(0, 0, 1); + } + } + + public static class LongScalarGreaterEqualLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); + expression = new LongScalarGreaterEqualLongColumn(0, 0, 1); + } + } + + public static class LongScalarGreaterLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); + expression = new LongScalarGreaterLongColumn(0, 0, 1); + } + } + + public static class LongScalarLessEqualLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); + expression = new LongScalarLessEqualLongColumn(0, 0, 1); + } + } + + public static class LongScalarLessLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); + expression = new LongScalarLessLongColumn(0, 0, 1); + } + } + + public static class LongScalarNotEqualLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 1, getLongColumnVector()); + expression = new LongScalarNotEqualLongColumn(0, 0, 1); + } + } + + public static void main(String[] args) throws RunnerException { + Options opt = new OptionsBuilder().include(".*" + VectorizedComparisonBench.class.getSimpleName() + + ".*").build(); + new Runner(opt).run(); + } +} http://git-wip-us.apache.org/repos/asf/hive/blob/9234712b/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/VectorizedLogicBench.java ---------------------------------------------------------------------- diff --git a/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/VectorizedLogicBench.java b/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/VectorizedLogicBench.java new file mode 100644 index 0000000..50dadb2 --- /dev/null +++ b/itests/hive-jmh/src/main/java/org/apache/hive/benchmark/vectorization/VectorizedLogicBench.java @@ -0,0 +1,147 @@ +/** + * Licensed 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.hive.benchmark.vectorization; + +import org.apache.hadoop.hive.ql.exec.vector.LongColumnVector; +import org.apache.hadoop.hive.ql.exec.vector.expressions.ColAndCol; +import org.apache.hadoop.hive.ql.exec.vector.expressions.ColOrCol; +import org.apache.hadoop.hive.ql.exec.vector.expressions.IfExprLongColumnLongColumn; +import org.apache.hadoop.hive.ql.exec.vector.expressions.NotCol; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; +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; + +/** + * This test measures the performance for vectorization. + * <p/> + * This test uses JMH framework for benchmarking. + * You may execute this benchmark tool using JMH command line in different ways: + * <p/> + * To use the settings shown in the main() function, use: + * $ java -cp target/benchmarks.jar org.apache.hive.benchmark.vectorization.VectorizedLogicBench + * <p/> + * To use the default settings used by JMH, use: + * $ java -jar target/benchmarks.jar org.apache.hive.benchmark.vectorization.VectorizedLogicBench + * <p/> + * To specify different parameters, use: + * - This command will use 10 warm-up iterations, 5 test iterations, and 2 forks. And it will + * display the Average Time (avgt) in Microseconds (us) + * - Benchmark mode. Available modes are: + * [Throughput/thrpt, AverageTime/avgt, SampleTime/sample, SingleShotTime/ss, All/all] + * - Output time unit. Available time units are: [m, s, ms, us, ns]. + * <p/> + * $ java -jar target/benchmarks.jar org.apache.hive.benchmark.vectorization.VectorizedLogicBench + * -wi 10 -i 5 -f 2 -bm avgt -tu us + */ +@State(Scope.Benchmark) +public class VectorizedLogicBench { + + public static class ColAndColBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 2, getBooleanLongColumnVector(), + getBooleanLongColumnVector()); + expression = new ColAndCol(0, 1, 2); + } + } + + public static class ColAndRepeatingColBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 2, getBooleanLongColumnVector(), + getBooleanRepeatingLongColumnVector()); + expression = new ColAndCol(0, 1, 2); + } + } + + public static class RepeatingColAndColBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 2, getBooleanRepeatingLongColumnVector(), + getBooleanLongColumnVector()); + expression = new ColAndCol(0, 1, 2); + } + } + + public static class ColOrColBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 2, getBooleanLongColumnVector(), + getBooleanLongColumnVector()); + expression = new ColOrCol(0, 1, 2); + } + } + + public static class ColOrRepeatingColBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 2, getBooleanLongColumnVector(), + getBooleanRepeatingLongColumnVector()); + expression = new ColOrCol(0, 1, 2); + } + } + + public static class RepeatingColOrColBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 2, getBooleanRepeatingLongColumnVector(), + getBooleanLongColumnVector()); + expression = new ColOrCol(0, 1, 2); + } + } + + public static class NotColBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 1, getBooleanLongColumnVector()); + expression = new NotCol(0, 1); + } + } + + public static class IfExprLongColumnLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 3, getBooleanLongColumnVector(), + getLongColumnVector(), getLongColumnVector()); + expression = new IfExprLongColumnLongColumn(0, 1, 2, 3); + } + } + + public static class IfExprRepeatingLongColumnLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 3, getBooleanLongColumnVector(), + getRepeatingLongColumnVector(), getLongColumnVector()); + expression = new IfExprLongColumnLongColumn(0, 1, 2, 3); + } + } + + public static class IfExprLongColumnRepeatingLongColumnBench extends AbstractExpression { + @Override + public void setup() { + rowBatch = buildRowBatch(new LongColumnVector(), 3, getBooleanLongColumnVector(), + getLongColumnVector(), getRepeatingLongColumnVector()); + expression = new IfExprLongColumnLongColumn(0, 1, 2, 3); + } + } + + public static void main(String[] args) throws RunnerException { + Options opt = new OptionsBuilder().include(".*" + VectorizedLogicBench.class.getSimpleName() + + ".*").build(); + new Runner(opt).run(); + } +} \ No newline at end of file