-
Notifications
You must be signed in to change notification settings - Fork 28.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[SPARK-35384][SQL] Improve performance for InvokeLike.invoke
### What changes were proposed in this pull request? Change `map` in `InvokeLike.invoke` to a while loop to improve performance, following Spark [style guide](https://github.com/databricks/scala-style-guide#traversal-and-zipwithindex). ### Why are the changes needed? `InvokeLike.invoke`, which is used in non-codegen path for `Invoke` and `StaticInvoke`, currently uses `map` to evaluate arguments: ```scala val args = arguments.map(e => e.eval(input).asInstanceOf[Object]) if (needNullCheck && args.exists(_ == null)) { // return null if one of arguments is null null } else { ... ``` which is pretty expensive if the method itself is trivial. We can change it to a plain while loop. <img width="871" alt="Screen Shot 2021-05-12 at 12 19 59 AM" src="https://user-images.githubusercontent.com/506679/118055719-7f985a00-b33d-11eb-943b-cf85eab35f44.png"> Benchmark results show this can improve as much as 3x from `V2FunctionBenchmark`: Before ``` OpenJDK 64-Bit Server VM 1.8.0_292-b10 on Linux 5.4.0-1046-azure Intel(R) Xeon(R) CPU E5-2673 v3 2.40GHz scalar function (long + long) -> long, result_nullable = false codegen = false: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative -------------------------------------------------------------------------------------------------------------------------------------------------------------- native_long_add 36506 36656 251 13.7 73.0 1.0X java_long_add_default 47151 47540 370 10.6 94.3 0.8X java_long_add_magic 178691 182457 1327 2.8 357.4 0.2X java_long_add_static_magic 177151 178258 1151 2.8 354.3 0.2X ``` After ``` OpenJDK 64-Bit Server VM 1.8.0_292-b10 on Linux 5.4.0-1046-azure Intel(R) Xeon(R) CPU E5-2673 v3 2.40GHz scalar function (long + long) -> long, result_nullable = false codegen = false: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative -------------------------------------------------------------------------------------------------------------------------------------------------------------- native_long_add 29897 30342 568 16.7 59.8 1.0X java_long_add_default 40628 41075 664 12.3 81.3 0.7X java_long_add_magic 54553 54755 182 9.2 109.1 0.5X java_long_add_static_magic 55410 55532 127 9.0 110.8 0.5X ``` ### Does this PR introduce _any_ user-facing change? No ### How was this patch tested? Existing tests. Closes #32527 from sunchao/SPARK-35384. Authored-by: Chao Sun <[email protected]> Signed-off-by: Dongjoon Hyun <[email protected]>
- Loading branch information
1 parent
c0b52da
commit 0ab9bd7
Showing
3 changed files
with
61 additions
and
55 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
56 changes: 28 additions & 28 deletions
56
sql/core/benchmarks/V2FunctionBenchmark-jdk11-results.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,44 +1,44 @@ | ||
OpenJDK 64-Bit Server VM 11.0.11+9-LTS on Linux 5.4.0-1046-azure | ||
Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz | ||
Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz | ||
scalar function (long + long) -> long, result_nullable = true codegen = true: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative | ||
------------------------------------------------------------------------------------------------------------------------------------------------------------ | ||
native_long_add 16015 16309 407 31.2 32.0 1.0X | ||
java_long_add_default 48899 49122 352 10.2 97.8 0.3X | ||
java_long_add_magic 19169 19302 117 26.1 38.3 0.8X | ||
java_long_add_static_magic 18308 18373 57 27.3 36.6 0.9X | ||
scala_long_add_default 48773 48922 136 10.3 97.5 0.3X | ||
scala_long_add_magic 18372 18422 44 27.2 36.7 0.9X | ||
native_long_add 17138 17431 486 29.2 34.3 1.0X | ||
java_long_add_default 47386 48316 1583 10.6 94.8 0.4X | ||
java_long_add_magic 19409 19532 152 25.8 38.8 0.9X | ||
java_long_add_static_magic 18257 18294 33 27.4 36.5 0.9X | ||
scala_long_add_default 49259 49512 235 10.2 98.5 0.3X | ||
scala_long_add_magic 18964 19025 53 26.4 37.9 0.9X | ||
|
||
OpenJDK 64-Bit Server VM 11.0.11+9-LTS on Linux 5.4.0-1046-azure | ||
Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz | ||
Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz | ||
scalar function (long + long) -> long, result_nullable = false codegen = true: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative | ||
------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
native_long_add 16414 16452 41 30.5 32.8 1.0X | ||
java_long_add_default 47640 47767 134 10.5 95.3 0.3X | ||
java_long_add_magic 18413 18554 139 27.2 36.8 0.9X | ||
java_long_add_static_magic 16659 16707 43 30.0 33.3 1.0X | ||
scala_long_add_default 47821 47857 48 10.5 95.6 0.3X | ||
scala_long_add_magic 18406 18502 99 27.2 36.8 0.9X | ||
native_long_add 16814 16916 99 29.7 33.6 1.0X | ||
java_long_add_default 43725 43909 216 11.4 87.4 0.4X | ||
java_long_add_magic 19015 19060 39 26.3 38.0 0.9X | ||
java_long_add_static_magic 18940 18993 52 26.4 37.9 0.9X | ||
scala_long_add_default 43804 43874 88 11.4 87.6 0.4X | ||
scala_long_add_magic 18753 18791 34 26.7 37.5 0.9X | ||
|
||
OpenJDK 64-Bit Server VM 11.0.11+9-LTS on Linux 5.4.0-1046-azure | ||
Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz | ||
Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz | ||
scalar function (long + long) -> long, result_nullable = true codegen = false: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative | ||
------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
native_long_add 36335 36366 27 13.8 72.7 1.0X | ||
java_long_add_default 53930 54056 155 9.3 107.9 0.7X | ||
java_long_add_magic 126621 127109 471 3.9 253.2 0.3X | ||
java_long_add_static_magic 126914 127193 251 3.9 253.8 0.3X | ||
scala_long_add_default 55812 55949 141 9.0 111.6 0.7X | ||
scala_long_add_magic 127629 127900 420 3.9 255.3 0.3X | ||
native_long_add 42493 42830 506 11.8 85.0 1.0X | ||
java_long_add_default 54557 54710 141 9.2 109.1 0.8X | ||
java_long_add_magic 74409 74564 227 6.7 148.8 0.6X | ||
java_long_add_static_magic 75081 75235 190 6.7 150.2 0.6X | ||
scala_long_add_default 54789 54862 77 9.1 109.6 0.8X | ||
scala_long_add_magic 73777 73886 96 6.8 147.6 0.6X | ||
|
||
OpenJDK 64-Bit Server VM 11.0.11+9-LTS on Linux 5.4.0-1046-azure | ||
Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz | ||
Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz | ||
scalar function (long + long) -> long, result_nullable = false codegen = false: Best Time(ms) Avg Time(ms) Stdev(ms) Rate(M/s) Per Row(ns) Relative | ||
-------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
native_long_add 37433 37794 312 13.4 74.9 1.0X | ||
java_long_add_default 53629 53946 416 9.3 107.3 0.7X | ||
java_long_add_magic 160091 160605 549 3.1 320.2 0.2X | ||
java_long_add_static_magic 157228 158430 1372 3.2 314.5 0.2X | ||
scala_long_add_default 54026 54197 187 9.3 108.1 0.7X | ||
scala_long_add_magic 160926 161351 526 3.1 321.9 0.2X | ||
native_long_add 37357 37490 116 13.4 74.7 1.0X | ||
java_long_add_default 53166 53192 23 9.4 106.3 0.7X | ||
java_long_add_magic 70501 71258 1121 7.1 141.0 0.5X | ||
java_long_add_static_magic 68934 69636 1115 7.3 137.9 0.5X | ||
scala_long_add_default 53075 53146 62 9.4 106.2 0.7X | ||
scala_long_add_magic 69838 70746 1442 7.2 139.7 0.5X | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters