diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/javaCode.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/javaCode.scala index 17fff64a1b7df..2b73b96e9f259 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/javaCode.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/javaCode.scala @@ -224,7 +224,7 @@ object Block { } else { args.foreach { case _: ExprValue | _: Inline | _: Block => - case _: Int | _: Long | _: Float | _: Double | _: String => + case _: Boolean | _: Int | _: Long | _: Float | _: Double | _: String => case other => throw new IllegalArgumentException( s"Can not interpolate ${other.getClass.getName} into code block.") } diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala index 37fe22f4556e1..06985ac85b70e 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala @@ -25,6 +25,7 @@ import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, CodeGe import org.apache.spark.sql.catalyst.expressions.codegen.Block._ import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.catalyst.util.TypeUtils +import org.apache.spark.sql.internal.SQLConf import org.apache.spark.sql.types._ @@ -375,6 +376,19 @@ case class InSet(child: Expression, hset: Set[Any]) extends UnaryExpression with } override def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode = { + if (canBeComputedUsingSwitch && hset.size <= SQLConf.get.optimizerInSetSwitchThreshold) { + genCodeWithSwitch(ctx, ev) + } else { + genCodeWithSet(ctx, ev) + } + } + + private def canBeComputedUsingSwitch: Boolean = child.dataType match { + case ByteType | ShortType | IntegerType | DateType => true + case _ => false + } + + private def genCodeWithSet(ctx: CodegenContext, ev: ExprCode): ExprCode = { nullSafeCodeGen(ctx, ev, c => { val setTerm = ctx.addReferenceObj("set", set) val setIsNull = if (hasNull) { @@ -389,6 +403,34 @@ case class InSet(child: Expression, hset: Set[Any]) extends UnaryExpression with }) } + // spark.sql.optimizer.inSetSwitchThreshold has an appropriate upper limit, + // so the code size should not exceed 64KB + private def genCodeWithSwitch(ctx: CodegenContext, ev: ExprCode): ExprCode = { + val caseValuesGen = hset.filter(_ != null).map(Literal(_).genCode(ctx)) + val valueGen = child.genCode(ctx) + + val caseBranches = caseValuesGen.map(literal => + code""" + case ${literal.value}: + ${ev.value} = true; + break; + """) + + ev.copy(code = + code""" + ${valueGen.code} + ${CodeGenerator.JAVA_BOOLEAN} ${ev.isNull} = ${valueGen.isNull}; + ${CodeGenerator.JAVA_BOOLEAN} ${ev.value} = false; + if (!${valueGen.isNull}) { + switch (${valueGen.value}) { + ${caseBranches.mkString("\n")} + default: + ${ev.isNull} = $hasNull; + } + } + """) + } + override def sql: String = { val valueSQL = child.sql val listSQL = hset.toSeq.map(Literal(_).sql).mkString(", ") diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala index bbb79cdccc4da..9468f8070b1e3 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala @@ -171,6 +171,16 @@ object SQLConf { .intConf .createWithDefault(10) + val OPTIMIZER_INSET_SWITCH_THRESHOLD = + buildConf("spark.sql.optimizer.inSetSwitchThreshold") + .internal() + .doc("Configures the max set size in InSet for which Spark will generate code with " + + "switch statements. This is applicable only to bytes, shorts, ints, dates.") + .intConf + .checkValue(threshold => threshold >= 0 && threshold <= 600, "The max set size " + + "for using switch statements in InSet must be non-negative and less than or equal to 600") + .createWithDefault(400) + val OPTIMIZER_PLAN_CHANGE_LOG_LEVEL = buildConf("spark.sql.optimizer.planChangeLog.level") .internal() .doc("Configures the log level for logging the change from the original plan to the new " + @@ -1701,6 +1711,8 @@ class SQLConf extends Serializable with Logging { def optimizerInSetConversionThreshold: Int = getConf(OPTIMIZER_INSET_CONVERSION_THRESHOLD) + def optimizerInSetSwitchThreshold: Int = getConf(OPTIMIZER_INSET_SWITCH_THRESHOLD) + def optimizerPlanChangeLogLevel: String = getConf(OPTIMIZER_PLAN_CHANGE_LOG_LEVEL) def optimizerPlanChangeRules: Option[String] = getConf(OPTIMIZER_PLAN_CHANGE_LOG_RULES) diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/PredicateSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/PredicateSuite.scala index 3541afcd2144d..e38bdeb6153d9 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/PredicateSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/PredicateSuite.scala @@ -23,11 +23,12 @@ import scala.collection.immutable.HashSet import org.apache.spark.SparkFunSuite import org.apache.spark.sql.RandomDataGenerator -import org.apache.spark.sql.catalyst.InternalRow +import org.apache.spark.sql.catalyst.{CatalystTypeConverters, InternalRow} import org.apache.spark.sql.catalyst.analysis.TypeCheckResult import org.apache.spark.sql.catalyst.encoders.ExamplePointUDT import org.apache.spark.sql.catalyst.expressions.codegen.CodegenContext import org.apache.spark.sql.catalyst.util.{ArrayData, GenericArrayData} +import org.apache.spark.sql.internal.SQLConf import org.apache.spark.sql.types._ @@ -241,6 +242,52 @@ class PredicateSuite extends SparkFunSuite with ExpressionEvalHelper { } } + test("switch statements in InSet for bytes, shorts, ints, dates") { + val byteValues = Set[Any](1.toByte, 2.toByte, Byte.MinValue, Byte.MaxValue) + val shortValues = Set[Any](-10.toShort, 20.toShort, Short.MinValue, Short.MaxValue) + val intValues = Set[Any](20, -100, 30, Int.MinValue, Int.MaxValue) + val dateValues = Set[Any]( + CatalystTypeConverters.convertToCatalyst(Date.valueOf("2017-01-01")), + CatalystTypeConverters.convertToCatalyst(Date.valueOf("1950-01-02"))) + + def check(presentValue: Expression, absentValue: Expression, values: Set[Any]): Unit = { + require(presentValue.dataType == absentValue.dataType) + + val nullLiteral = Literal(null, presentValue.dataType) + + checkEvaluation(InSet(nullLiteral, values), expected = null) + checkEvaluation(InSet(nullLiteral, values + null), expected = null) + checkEvaluation(InSet(presentValue, values), expected = true) + checkEvaluation(InSet(presentValue, values + null), expected = true) + checkEvaluation(InSet(absentValue, values), expected = false) + checkEvaluation(InSet(absentValue, values + null), expected = null) + } + + def checkAllTypes(): Unit = { + check(presentValue = Literal(2.toByte), absentValue = Literal(3.toByte), byteValues) + check(presentValue = Literal(Byte.MinValue), absentValue = Literal(5.toByte), byteValues) + check(presentValue = Literal(20.toShort), absentValue = Literal(-14.toShort), shortValues) + check(presentValue = Literal(Short.MaxValue), absentValue = Literal(30.toShort), shortValues) + check(presentValue = Literal(20), absentValue = Literal(-14), intValues) + check(presentValue = Literal(Int.MinValue), absentValue = Literal(2), intValues) + check( + presentValue = Literal(Date.valueOf("2017-01-01")), + absentValue = Literal(Date.valueOf("2017-01-02")), + dateValues) + check( + presentValue = Literal(Date.valueOf("1950-01-02")), + absentValue = Literal(Date.valueOf("2017-10-02")), + dateValues) + } + + withSQLConf(SQLConf.OPTIMIZER_INSET_SWITCH_THRESHOLD.key -> "0") { + checkAllTypes() + } + withSQLConf(SQLConf.OPTIMIZER_INSET_SWITCH_THRESHOLD.key -> "20") { + checkAllTypes() + } + } + test("SPARK-22501: In should not generate codes beyond 64KB") { val N = 3000 val sets = (1 to N).map(i => Literal(i.toDouble)) diff --git a/sql/core/benchmarks/InExpressionBenchmark-results.txt b/sql/core/benchmarks/InExpressionBenchmark-results.txt index d2adbded66149..f6685bfc45089 100644 --- a/sql/core/benchmarks/InExpressionBenchmark-results.txt +++ b/sql/core/benchmarks/InExpressionBenchmark-results.txt @@ -4,548 +4,737 @@ In Expression Benchmark OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -5 bytes: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 101 / 138 98.7 10.1 1.0X -InSet expression 125 / 136 79.7 12.5 0.8X +5 bytes: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 105 148 42 94.8 10.5 1.0X +InSet expression 79 98 19 126.9 7.9 1.3X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -10 bytes: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 101 / 111 99.3 10.1 1.0X -InSet expression 126 / 133 79.6 12.6 0.8X +10 bytes: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 101 115 20 99.3 10.1 1.0X +InSet expression 76 84 8 131.4 7.6 1.3X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -25 bytes: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 176 / 183 56.9 17.6 1.0X -InSet expression 174 / 184 57.4 17.4 1.0X +25 bytes: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 172 176 3 58.0 17.2 1.0X +InSet expression 100 107 9 99.6 10.0 1.7X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -50 bytes: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 299 / 312 33.5 29.9 1.0X -InSet expression 243 / 246 41.2 24.3 1.2X +50 bytes: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 299 302 4 33.5 29.9 1.0X +InSet expression 145 149 5 69.0 14.5 2.1X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -100 bytes: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 512 / 518 19.5 51.2 1.0X -InSet expression 388 / 400 25.8 38.8 1.3X +100 bytes: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 518 524 11 19.3 51.8 1.0X +InSet expression 240 250 12 41.6 24.0 2.2X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -200 bytes: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 854 / 866 11.7 85.4 1.0X -InSet expression 686 / 694 14.6 68.6 1.2X +200 bytes: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 831 844 14 12.0 83.1 1.0X +InSet expression 425 432 4 23.5 42.5 2.0X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -5 shorts: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 59 / 62 169.6 5.9 1.0X -InSet expression 163 / 168 61.3 16.3 0.4X +5 shorts: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 58 62 5 171.9 5.8 1.0X +InSet expression 56 58 5 178.0 5.6 1.0X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -10 shorts: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 76 / 78 132.0 7.6 1.0X -InSet expression 182 / 186 54.9 18.2 0.4X +10 shorts: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 76 79 5 131.9 7.6 1.0X +InSet expression 50 55 7 198.2 5.0 1.5X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -25 shorts: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 126 / 128 79.4 12.6 1.0X -InSet expression 190 / 193 52.7 19.0 0.7X +25 shorts: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 129 139 23 77.3 12.9 1.0X +InSet expression 48 50 5 210.5 4.8 2.7X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -50 shorts: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 227 / 227 44.1 22.7 1.0X -InSet expression 232 / 235 43.1 23.2 1.0X +50 shorts: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 225 226 0 44.4 22.5 1.0X +InSet expression 52 56 7 191.2 5.2 4.3X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -100 shorts: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 408 / 414 24.5 40.8 1.0X -InSet expression 203 / 209 49.3 20.3 2.0X +100 shorts: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 400 406 11 25.0 40.0 1.0X +InSet expression 54 58 7 185.0 5.4 7.4X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -200 shorts: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 762 / 765 13.1 76.2 1.0X -InSet expression 192 / 196 52.1 19.2 4.0X +200 shorts: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 761 762 1 13.1 76.1 1.0X +InSet expression 60 61 2 167.1 6.0 12.7X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -5 ints: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 53 / 57 187.3 5.3 1.0X -InSet expression 156 / 160 63.9 15.6 0.3X +300 shorts: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1118 1119 1 8.9 111.8 1.0X +InSet expression 66 67 2 152.2 6.6 17.0X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -10 ints: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 70 / 74 142.4 7.0 1.0X -InSet expression 170 / 176 58.9 17.0 0.4X +400 shorts: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1478 1487 19 6.8 147.8 1.0X +InSet expression 71 75 11 141.7 7.1 20.9X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -25 ints: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 125 / 126 80.2 12.5 1.0X -InSet expression 174 / 179 57.4 17.4 0.7X +500 shorts: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1836 1854 27 5.4 183.6 1.0X +InSet expression 248 253 3 40.2 24.8 7.4X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -50 ints: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 220 / 222 45.5 22.0 1.0X -InSet expression 215 / 221 46.6 21.5 1.0X +5 shorts (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 55 68 19 180.3 5.5 1.0X +InSet expression 60 63 7 167.0 6.0 0.9X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -100 ints: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 404 / 407 24.8 40.4 1.0X -InSet expression 189 / 192 53.0 18.9 2.1X +10 shorts (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 72 76 5 138.0 7.2 1.0X +InSet expression 63 68 11 157.7 6.3 1.1X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -200 ints: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 760 / 764 13.2 76.0 1.0X -InSet expression 176 / 179 56.8 17.6 4.3X +25 shorts (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 133 136 5 75.0 13.3 1.0X +InSet expression 73 78 10 137.2 7.3 1.8X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -5 longs: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 50 / 52 200.3 5.0 1.0X -InSet expression 147 / 151 68.1 14.7 0.3X +50 shorts (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 223 225 2 44.8 22.3 1.0X +InSet expression 81 84 14 124.1 8.1 2.8X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -10 longs: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 65 / 66 154.8 6.5 1.0X -InSet expression 162 / 166 61.6 16.2 0.4X +100 shorts (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 402 404 1 24.9 40.2 1.0X +InSet expression 90 91 2 111.6 9.0 4.5X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -25 longs: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 117 / 119 85.1 11.7 1.0X -InSet expression 170 / 175 58.8 17.0 0.7X +200 shorts (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 758 759 0 13.2 75.8 1.0X +InSet expression 110 119 20 91.0 11.0 6.9X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -50 longs: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 207 / 208 48.3 20.7 1.0X -InSet expression 211 / 214 47.4 21.1 1.0X +300 shorts (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1121 1123 3 8.9 112.1 1.0X +InSet expression 121 122 2 82.6 12.1 9.3X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -100 longs: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 387 / 389 25.9 38.7 1.0X -InSet expression 185 / 187 54.2 18.5 2.1X +400 shorts (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1482 1484 2 6.7 148.2 1.0X +InSet expression 134 135 2 74.6 13.4 11.1X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -200 longs: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 742 / 744 13.5 74.2 1.0X -InSet expression 172 / 173 58.3 17.2 4.3X +500 shorts (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1838 1882 92 5.4 183.8 1.0X +InSet expression 251 254 3 39.8 25.1 7.3X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -5 floats: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 88 / 91 113.0 8.8 1.0X -InSet expression 170 / 171 58.9 17.0 0.5X +5 ints: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 51 52 2 197.1 5.1 1.0X +InSet expression 61 63 3 162.8 6.1 0.8X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -10 floats: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 129 / 132 77.5 12.9 1.0X -InSet expression 188 / 189 53.2 18.8 0.7X +10 ints: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 69 73 10 145.0 6.9 1.0X +InSet expression 43 46 7 231.2 4.3 1.6X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -25 floats: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 243 / 244 41.2 24.3 1.0X -InSet expression 192 / 194 52.2 19.2 1.3X +25 ints: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 123 129 19 81.4 12.3 1.0X +InSet expression 43 46 8 230.0 4.3 2.8X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -50 floats: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 421 / 424 23.7 42.1 1.0X -InSet expression 237 / 240 42.2 23.7 1.8X +50 ints: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 222 223 1 45.1 22.2 1.0X +InSet expression 49 50 2 206.2 4.9 4.6X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -100 floats: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 775 / 777 12.9 77.5 1.0X -InSet expression 205 / 209 48.8 20.5 3.8X +100 ints: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 401 402 0 24.9 40.1 1.0X +InSet expression 51 56 11 196.6 5.1 7.9X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -200 floats: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 3052 / 3151 3.3 305.2 1.0X -InSet expression 197 / 199 50.8 19.7 15.5X +200 ints: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 755 756 1 13.2 75.5 1.0X +InSet expression 56 57 2 179.5 5.6 13.5X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -5 doubles: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 82 / 84 121.6 8.2 1.0X -InSet expression 167 / 169 60.0 16.7 0.5X +300 ints: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1115 1116 1 9.0 111.5 1.0X +InSet expression 61 62 4 165.2 6.1 18.4X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -10 doubles: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 124 / 131 80.3 12.4 1.0X -InSet expression 186 / 187 53.9 18.6 0.7X +400 ints: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1476 1478 1 6.8 147.6 1.0X +InSet expression 66 67 2 152.2 6.6 22.5X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -25 doubles: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 237 / 239 42.1 23.7 1.0X -InSet expression 193 / 194 51.8 19.3 1.2X +500 ints: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1834 1873 85 5.5 183.4 1.0X +InSet expression 230 233 3 43.5 23.0 8.0X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -50 doubles: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 416 / 418 24.0 41.6 1.0X -InSet expression 239 / 241 41.8 23.9 1.7X +5 ints (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 40 42 2 247.6 4.0 1.0X +InSet expression 37 39 3 271.6 3.7 1.1X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -100 doubles: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 771 / 774 13.0 77.1 1.0X -InSet expression 204 / 207 49.1 20.4 3.8X +10 ints (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 59 60 3 170.0 5.9 1.0X +InSet expression 42 44 3 237.6 4.2 1.4X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -200 doubles: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 3755 / 3801 2.7 375.5 1.0X -InSet expression 194 / 197 51.5 19.4 19.3X +25 ints (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 114 116 6 87.5 11.4 1.0X +InSet expression 53 58 10 188.0 5.3 2.1X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -5 small decimals: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 46 / 49 21.6 46.4 1.0X -InSet expression 136 / 141 7.4 135.7 0.3X +50 ints (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 207 214 14 48.3 20.7 1.0X +InSet expression 62 63 2 162.1 6.2 3.4X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -10 small decimals: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 57 / 61 17.5 57.1 1.0X -InSet expression 137 / 140 7.3 137.2 0.4X +100 ints (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 385 391 6 26.0 38.5 1.0X +InSet expression 71 73 2 140.4 7.1 5.4X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -25 small decimals: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 89 / 92 11.2 89.4 1.0X -InSet expression 139 / 141 7.2 138.7 0.6X +200 ints (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 746 750 2 13.4 74.6 1.0X +InSet expression 101 105 8 98.5 10.1 7.4X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -50 small decimals: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 170 / 171 5.9 169.5 1.0X -InSet expression 146 / 148 6.9 145.8 1.2X +300 ints (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1100 1106 4 9.1 110.0 1.0X +InSet expression 109 111 2 91.6 10.9 10.1X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -100 small decimals: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 429 / 431 2.3 429.2 1.0X -InSet expression 145 / 148 6.9 144.9 3.0X +400 ints (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1470 1480 7 6.8 147.0 1.0X +InSet expression 115 116 2 87.1 11.5 12.8X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -200 small decimals: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 995 / 1207 1.0 995.0 1.0X -InSet expression 154 / 158 6.5 154.1 6.5X +500 ints (non-compact): Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1838 1907 152 5.4 183.8 1.0X +InSet expression 231 233 2 43.3 23.1 8.0X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -5 large decimals: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 268 / 307 3.7 268.3 1.0X -InSet expression 171 / 176 5.8 171.1 1.6X +5 longs: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 48 52 6 206.5 4.8 1.0X +InSet expression 150 152 4 66.8 15.0 0.3X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -10 large decimals: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 455 / 458 2.2 455.2 1.0X -InSet expression 173 / 176 5.8 173.1 2.6X +10 longs: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 62 63 1 161.3 6.2 1.0X +InSet expression 165 168 5 60.7 16.5 0.4X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -25 large decimals: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 1095 / 1099 0.9 1095.2 1.0X -InSet expression 179 / 183 5.6 178.7 6.1X +25 longs: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 116 116 0 86.1 11.6 1.0X +InSet expression 173 175 3 57.9 17.3 0.7X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -50 large decimals: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 2099 / 2110 0.5 2098.6 1.0X -InSet expression 183 / 187 5.5 183.2 11.5X +50 longs: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 206 208 6 48.6 20.6 1.0X +InSet expression 212 214 2 47.1 21.2 1.0X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -100 large decimals: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 3885 / 3911 0.3 3885.4 1.0X -InSet expression 207 / 223 4.8 206.6 18.8X +100 longs: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 384 386 2 26.0 38.4 1.0X +InSet expression 183 185 2 54.6 18.3 2.1X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -200 large decimals: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 7759 / 7867 0.1 7759.2 1.0X -InSet expression 214 / 217 4.7 214.4 36.2X +200 longs: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 742 748 13 13.5 74.2 1.0X +InSet expression 175 177 2 57.1 17.5 4.2X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -5 strings: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 126 / 127 7.9 126.0 1.0X -InSet expression 139 / 142 7.2 139.0 0.9X +5 floats: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 88 89 1 114.2 8.8 1.0X +InSet expression 168 170 2 59.5 16.8 0.5X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -10 strings: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 128 / 132 7.8 128.2 1.0X -InSet expression 142 / 144 7.0 142.0 0.9X +10 floats: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 128 129 3 78.0 12.8 1.0X +InSet expression 187 188 2 53.6 18.7 0.7X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -25 strings: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 151 / 153 6.6 150.9 1.0X -InSet expression 150 / 152 6.7 150.1 1.0X +25 floats: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 242 242 0 41.3 24.2 1.0X +InSet expression 192 194 2 52.0 19.2 1.3X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -50 strings: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 238 / 240 4.2 238.5 1.0X -InSet expression 152 / 154 6.6 152.4 1.6X +50 floats: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 419 420 0 23.8 41.9 1.0X +InSet expression 235 236 1 42.5 23.5 1.8X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -100 strings: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 431 / 432 2.3 431.2 1.0X -InSet expression 149 / 151 6.7 148.8 2.9X +100 floats: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 774 775 1 12.9 77.4 1.0X +InSet expression 205 206 3 48.9 20.5 3.8X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -200 strings: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 822 / 1060 1.2 821.7 1.0X -InSet expression 153 / 162 6.5 152.9 5.4X +200 floats: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 3036 3123 191 3.3 303.6 1.0X +InSet expression 197 198 1 50.8 19.7 15.4X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -5 timestamps: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 42 / 44 240.5 4.2 1.0X -InSet expression 158 / 161 63.5 15.8 0.3X +5 doubles: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 83 84 2 120.9 8.3 1.0X +InSet expression 167 168 2 60.0 16.7 0.5X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -10 timestamps: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 57 / 59 174.5 5.7 1.0X -InSet expression 173 / 176 57.8 17.3 0.3X +10 doubles: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 125 126 3 80.3 12.5 1.0X +InSet expression 186 188 2 53.7 18.6 0.7X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -25 timestamps: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 110 / 113 91.1 11.0 1.0X -InSet expression 223 / 226 44.9 22.3 0.5X +25 doubles: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 237 238 1 42.1 23.7 1.0X +InSet expression 192 195 3 52.0 19.2 1.2X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -50 timestamps: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 190 / 193 52.6 19.0 1.0X -InSet expression 238 / 240 42.1 23.8 0.8X +50 doubles: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 414 415 0 24.1 41.4 1.0X +InSet expression 239 242 3 41.9 23.9 1.7X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -100 timestamps: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 355 / 367 28.2 35.5 1.0X -InSet expression 221 / 222 45.2 22.1 1.6X +100 doubles: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 769 771 3 13.0 76.9 1.0X +InSet expression 203 213 22 49.3 20.3 3.8X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -200 timestamps: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 692 / 694 14.5 69.2 1.0X -InSet expression 220 / 222 45.4 22.0 3.1X +200 doubles: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 3757 3796 85 2.7 375.7 1.0X +InSet expression 193 194 2 51.9 19.3 19.5X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -5 dates: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 143 / 145 70.0 14.3 1.0X -InSet expression 264 / 269 37.9 26.4 0.5X +5 small decimals: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 47 48 3 21.3 47.0 1.0X +InSet expression 155 168 29 6.4 155.3 0.3X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -10 dates: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 141 / 142 71.1 14.1 1.0X -InSet expression 268 / 269 37.3 26.8 0.5X +10 small decimals: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 58 59 2 17.4 57.6 1.0X +InSet expression 157 160 2 6.4 157.4 0.4X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -25 dates: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 196 / 196 51.1 19.6 1.0X -InSet expression 277 / 282 36.1 27.7 0.7X +25 small decimals: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 92 92 2 10.9 91.5 1.0X +InSet expression 160 162 2 6.3 159.6 0.6X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -50 dates: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 338 / 351 29.5 33.8 1.0X -InSet expression 287 / 290 34.9 28.7 1.2X +50 small decimals: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 171 171 0 5.9 170.8 1.0X +InSet expression 169 172 3 5.9 169.3 1.0X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -100 dates: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 541 / 542 18.5 54.1 1.0X -InSet expression 299 / 300 33.5 29.9 1.8X +100 small decimals: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 429 429 0 2.3 428.6 1.0X +InSet expression 170 172 2 5.9 170.4 2.5X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -200 dates: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 883 / 900 11.3 88.3 1.0X -InSet expression 296 / 298 33.8 29.6 3.0X +200 small decimals: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 996 1144 328 1.0 996.3 1.0X +InSet expression 177 179 3 5.7 176.8 5.6X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -5 arrays: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 51 / 53 19.6 51.0 1.0X -InSet expression 96 / 97 10.5 95.7 0.5X +5 large decimals: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 248 251 2 4.0 248.0 1.0X +InSet expression 175 177 2 5.7 174.9 1.4X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -10 arrays: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 77 / 79 13.1 76.6 1.0X -InSet expression 96 / 98 10.4 96.0 0.8X +10 large decimals: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 420 426 11 2.4 420.0 1.0X +InSet expression 177 180 3 5.7 176.9 2.4X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -25 arrays: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 275 / 276 3.6 274.6 1.0X -InSet expression 119 / 121 8.4 119.1 2.3X +25 large decimals: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1005 1008 4 1.0 1004.9 1.0X +InSet expression 184 187 3 5.4 183.7 5.5X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -50 arrays: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 592 / 663 1.7 592.1 1.0X -InSet expression 164 / 172 6.1 164.3 3.6X +50 large decimals: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1922 1933 13 0.5 1922.2 1.0X +InSet expression 189 193 7 5.3 188.9 10.2X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -100 arrays: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 2555 / 2733 0.4 2554.7 1.0X -InSet expression 194 / 198 5.2 193.9 13.2X +100 large decimals: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 3861 3871 12 0.3 3860.5 1.0X +InSet expression 213 225 30 4.7 213.5 18.1X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -200 arrays: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 9215 / 9778 0.1 9214.8 1.0X -InSet expression 253 / 256 3.9 253.2 36.4X +200 large decimals: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 7731 7774 25 0.1 7731.5 1.0X +InSet expression 222 225 3 4.5 222.4 34.8X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -5 structs: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 46 / 47 22.0 45.5 1.0X -InSet expression 157 / 162 6.4 156.5 0.3X +5 strings: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 127 133 9 7.9 126.8 1.0X +InSet expression 142 143 2 7.0 141.9 0.9X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -10 structs: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 61 / 63 16.5 60.7 1.0X -InSet expression 158 / 161 6.3 158.2 0.4X +10 strings: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 132 133 2 7.6 131.7 1.0X +InSet expression 144 146 2 6.9 144.1 0.9X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -25 structs: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 133 / 140 7.5 132.8 1.0X -InSet expression 199 / 202 5.0 198.8 0.7X +25 strings: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 153 154 2 6.5 152.9 1.0X +InSet expression 151 153 2 6.6 151.2 1.0X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -50 structs: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 369 / 372 2.7 369.1 1.0X -InSet expression 283 / 294 3.5 282.7 1.3X +50 strings: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 186 187 2 5.4 185.8 1.0X +InSet expression 154 156 3 6.5 153.7 1.2X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -100 structs: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 1570 / 1731 0.6 1569.8 1.0X -InSet expression 332 / 334 3.0 332.0 4.7X +100 strings: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 260 263 3 3.8 260.3 1.0X +InSet expression 151 153 2 6.6 151.3 1.7X OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz -200 structs: Best/Avg Time(ms) Rate(M/s) Per Row(ns) Relative ------------------------------------------------------------------------------------------------- -In expression 6332 / 6794 0.2 6331.8 1.0X -InSet expression 441 / 444 2.3 440.9 14.4X +200 strings: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 731 891 352 1.4 731.4 1.0X +InSet expression 155 157 3 6.4 155.4 4.7X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +5 timestamps: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 42 43 2 240.1 4.2 1.0X +InSet expression 159 160 2 63.0 15.9 0.3X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +10 timestamps: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 58 59 2 171.4 5.8 1.0X +InSet expression 174 183 21 57.5 17.4 0.3X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +25 timestamps: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 111 113 3 90.0 11.1 1.0X +InSet expression 228 229 2 43.9 22.8 0.5X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +50 timestamps: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 192 193 1 52.1 19.2 1.0X +InSet expression 250 250 1 40.1 25.0 0.8X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +100 timestamps: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 373 384 12 26.8 37.3 1.0X +InSet expression 229 236 7 43.7 22.9 1.6X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +200 timestamps: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 694 707 25 14.4 69.4 1.0X +InSet expression 221 226 7 45.2 22.1 3.1X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +5 dates: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 196 198 2 50.9 19.6 1.0X +InSet expression 169 170 0 59.2 16.9 1.2X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +10 dates: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 212 212 0 47.3 21.2 1.0X +InSet expression 197 197 0 50.8 19.7 1.1X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +25 dates: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 266 266 1 37.7 26.6 1.0X +InSet expression 203 217 23 49.4 20.3 1.3X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +50 dates: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 356 367 12 28.1 35.6 1.0X +InSet expression 212 213 1 47.1 21.2 1.7X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +100 dates: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 559 573 26 17.9 55.9 1.0X +InSet expression 221 223 2 45.2 22.1 2.5X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +200 dates: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 901 916 9 11.1 90.1 1.0X +InSet expression 238 241 9 42.1 23.8 3.8X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +300 dates: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1264 1282 10 7.9 126.4 1.0X +InSet expression 253 262 15 39.5 25.3 5.0X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +400 dates: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1628 1646 11 6.1 162.8 1.0X +InSet expression 264 265 1 37.8 26.4 6.2X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +500 dates: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1993 2015 15 5.0 199.3 1.0X +InSet expression 355 368 10 28.2 35.5 5.6X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +5 arrays: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 52 63 14 19.3 51.8 1.0X +InSet expression 96 98 2 10.4 95.9 0.5X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +10 arrays: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 78 80 3 12.8 77.9 1.0X +InSet expression 97 154 48 10.3 97.1 0.8X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +25 arrays: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 269 279 27 3.7 268.7 1.0X +InSet expression 120 124 13 8.3 119.9 2.2X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +50 arrays: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 579 626 96 1.7 579.2 1.0X +InSet expression 165 167 3 6.1 165.1 3.5X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +100 arrays: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 2582 2775 415 0.4 2582.1 1.0X +InSet expression 196 201 10 5.1 196.0 13.2X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +200 arrays: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 9438 9939 763 0.1 9437.9 1.0X +InSet expression 256 258 3 3.9 255.8 36.9X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +5 structs: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 47 48 2 21.4 46.8 1.0X +InSet expression 158 160 2 6.3 157.6 0.3X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +10 structs: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 62 63 4 16.2 61.9 1.0X +InSet expression 158 161 4 6.3 158.4 0.4X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +25 structs: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 138 140 3 7.3 137.9 1.0X +InSet expression 202 219 43 5.0 201.7 0.7X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +50 structs: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 366 367 1 2.7 365.7 1.0X +InSet expression 286 289 4 3.5 285.6 1.3X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +100 structs: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 1055 1212 346 0.9 1054.7 1.0X +InSet expression 348 354 6 2.9 347.9 3.0X + +OpenJDK 64-Bit Server VM 1.8.0_191-b12 on Linux 3.10.0-862.3.2.el7.x86_64 +Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz +200 structs: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative +------------------------------------------------------------------------------------------------------------------------ +In expression 6463 6772 650 0.2 6463.3 1.0X +InSet expression 450 455 4 2.2 449.6 14.4X diff --git a/sql/core/src/test/scala/org/apache/spark/sql/ColumnExpressionSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/ColumnExpressionSuite.scala index f984a1b722e36..ee258f8ac3661 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/ColumnExpressionSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/ColumnExpressionSuite.scala @@ -17,6 +17,7 @@ package org.apache.spark.sql +import java.sql.Date import java.util.Locale import scala.collection.JavaConverters._ @@ -28,6 +29,7 @@ import org.scalatest.Matchers._ import org.apache.spark.sql.catalyst.expressions.NamedExpression import org.apache.spark.sql.execution.ProjectExec import org.apache.spark.sql.functions._ +import org.apache.spark.sql.internal.SQLConf import org.apache.spark.sql.test.SharedSQLContext import org.apache.spark.sql.types._ @@ -413,6 +415,43 @@ class ColumnExpressionSuite extends QueryTest with SharedSQLContext { } } + test("IN/INSET with bytes, shorts, ints, dates") { + def check(): Unit = { + val values = Seq( + (Byte.MinValue, Some(Short.MinValue), Int.MinValue, Date.valueOf("2017-01-01")), + (Byte.MaxValue, None, Int.MaxValue, null)) + val df = values.toDF("b", "s", "i", "d") + checkAnswer(df.select($"b".isin(Byte.MinValue, Byte.MaxValue)), Seq(Row(true), Row(true))) + checkAnswer(df.select($"b".isin(-1.toByte, 2.toByte)), Seq(Row(false), Row(false))) + checkAnswer(df.select($"s".isin(Short.MinValue, 1.toShort)), Seq(Row(true), Row(null))) + checkAnswer(df.select($"s".isin(0.toShort, null)), Seq(Row(null), Row(null))) + checkAnswer(df.select($"i".isin(0, Int.MinValue)), Seq(Row(true), Row(false))) + checkAnswer(df.select($"i".isin(null, Int.MinValue)), Seq(Row(true), Row(null))) + checkAnswer( + df.select($"d".isin(Date.valueOf("1950-01-01"), Date.valueOf("2017-01-01"))), + Seq(Row(true), Row(null))) + checkAnswer( + df.select($"d".isin(Date.valueOf("1950-01-01"), null)), + Seq(Row(null), Row(null))) + } + + withSQLConf(SQLConf.OPTIMIZER_INSET_CONVERSION_THRESHOLD.key -> "10") { + check() + } + + withSQLConf( + SQLConf.OPTIMIZER_INSET_CONVERSION_THRESHOLD.key -> "0", + SQLConf.OPTIMIZER_INSET_SWITCH_THRESHOLD.key -> "0") { + check() + } + + withSQLConf( + SQLConf.OPTIMIZER_INSET_CONVERSION_THRESHOLD.key -> "0", + SQLConf.OPTIMIZER_INSET_SWITCH_THRESHOLD.key -> "20") { + check() + } + } + test("isInCollection: Scala Collection") { val df = Seq((1, "x"), (2, "y"), (3, "z")).toDF("a", "b") // Test with different types of collections diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/benchmark/InExpressionBenchmark.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/benchmark/InExpressionBenchmark.scala index cf4a34b20627a..611f582b66605 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/benchmark/InExpressionBenchmark.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/benchmark/InExpressionBenchmark.scala @@ -55,6 +55,17 @@ object InExpressionBenchmark extends SqlBasedBenchmark { runBenchmark(name, df, values, numRows, minNumIters) } + private def runNonCompactShortBenchmark(numItems: Int, numRows: Long, minNumIters: Int): Unit = { + val step = (Short.MaxValue.toInt - Short.MinValue.toInt) / numItems + val maxValue = Short.MinValue + numItems * step + val rangeSize = maxValue - Short.MinValue + require(isLookupSwitch(rangeSize, numItems)) + val name = s"$numItems shorts (non-compact)" + val values = (Short.MinValue until maxValue by step).map(v => s"${v}S") + val df = spark.range(0, numRows).select($"id".cast(ShortType)) + runBenchmark(name, df, values, numRows, minNumIters) + } + private def runIntBenchmark(numItems: Int, numRows: Long, minNumIters: Int): Unit = { val name = s"$numItems ints" val values = 1 to numItems @@ -62,6 +73,17 @@ object InExpressionBenchmark extends SqlBasedBenchmark { runBenchmark(name, df, values, numRows, minNumIters) } + private def runNonCompactIntBenchmark(numItems: Int, numRows: Long, minNumIters: Int): Unit = { + val step = (Int.MaxValue.toLong - Int.MinValue.toLong) / numItems + val maxValue = Int.MinValue + numItems * step + val rangeSize = maxValue - Int.MinValue + require(isLookupSwitch(rangeSize, numItems)) + val name = s"$numItems ints (non-compact)" + val values = Int.MinValue until maxValue.toInt by step.toInt + val df = spark.range(0, numRows).select($"id".cast(IntegerType)) + runBenchmark(name, df, values, numRows, minNumIters) + } + private def runLongBenchmark(numItems: Int, numRows: Long, minNumIters: Int): Unit = { val name = s"$numItems longs" val values = (1 to numItems).map(v => s"${v}L") @@ -163,50 +185,66 @@ object InExpressionBenchmark extends SqlBasedBenchmark { benchmark.run() } + // this logic is derived from visitSwitch in com.sun.tools.javac.jvm.Gen + private def isLookupSwitch(rangeSize: Long, numLabels: Int): Boolean = { + val tableSpaceCost = 4 + rangeSize + val tableTimeCost = 3 + val lookupSpaceCost = 3 + 2 * numLabels + val lookupTimeCost = numLabels + lookupSpaceCost + 3 * lookupTimeCost < tableSpaceCost + 3 * tableTimeCost + } + override def runBenchmarkSuite(mainArgs: Array[String]): Unit = { - val numItemsSeq = Seq(5, 10, 25, 50, 100, 200) + val smallNumItemsSeq = Seq(5, 10, 25, 50, 100, 200) + val largeNumItemsSeq = Seq(300, 400, 500) val largeNumRows = 10000000 val smallNumRows = 1000000 val minNumIters = 5 runBenchmark("In Expression Benchmark") { - numItemsSeq.foreach { numItems => + smallNumItemsSeq.foreach { numItems => runByteBenchmark(numItems, largeNumRows, minNumIters) } - numItemsSeq.foreach { numItems => + (smallNumItemsSeq ++ largeNumItemsSeq).foreach { numItems => runShortBenchmark(numItems, largeNumRows, minNumIters) } - numItemsSeq.foreach { numItems => + (smallNumItemsSeq ++ largeNumItemsSeq).foreach { numItems => + runNonCompactShortBenchmark(numItems, largeNumRows, minNumIters) + } + (smallNumItemsSeq ++ largeNumItemsSeq).foreach { numItems => runIntBenchmark(numItems, largeNumRows, minNumIters) } - numItemsSeq.foreach { numItems => + (smallNumItemsSeq ++ largeNumItemsSeq).foreach { numItems => + runNonCompactIntBenchmark(numItems, largeNumRows, minNumIters) + } + smallNumItemsSeq.foreach { numItems => runLongBenchmark(numItems, largeNumRows, minNumIters) } - numItemsSeq.foreach { numItems => + smallNumItemsSeq.foreach { numItems => runFloatBenchmark(numItems, largeNumRows, minNumIters) } - numItemsSeq.foreach { numItems => + smallNumItemsSeq.foreach { numItems => runDoubleBenchmark(numItems, largeNumRows, minNumIters) } - numItemsSeq.foreach { numItems => + smallNumItemsSeq.foreach { numItems => runSmallDecimalBenchmark(numItems, smallNumRows, minNumIters) } - numItemsSeq.foreach { numItems => + smallNumItemsSeq.foreach { numItems => runLargeDecimalBenchmark(numItems, smallNumRows, minNumIters) } - numItemsSeq.foreach { numItems => + smallNumItemsSeq.foreach { numItems => runStringBenchmark(numItems, smallNumRows, minNumIters) } - numItemsSeq.foreach { numItems => + smallNumItemsSeq.foreach { numItems => runTimestampBenchmark(numItems, largeNumRows, minNumIters) } - numItemsSeq.foreach { numItems => + (smallNumItemsSeq ++ largeNumItemsSeq).foreach { numItems => runDateBenchmark(numItems, largeNumRows, minNumIters) } - numItemsSeq.foreach { numItems => + smallNumItemsSeq.foreach { numItems => runArrayBenchmark(numItems, smallNumRows, minNumIters) } - numItemsSeq.foreach { numItems => + smallNumItemsSeq.foreach { numItems => runStructBenchmark(numItems, smallNumRows, minNumIters) } }