This is an automated email from the ASF dual-hosted git repository. srowen pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/master by this push: new 8ae9707 [SPARK-37862][SQL] RecordBinaryComparator should fast skip the check of aligning with unaligned platform 8ae9707 is described below commit 8ae970790814a0080713857261a3b1c2e2b01dd7 Author: ulysses-you <ulyssesyo...@gmail.com> AuthorDate: Sat Jan 15 08:59:56 2022 -0600 [SPARK-37862][SQL] RecordBinaryComparator should fast skip the check of aligning with unaligned platform ### What changes were proposed in this pull request? `RecordBinaryComparator` compare the entire row, so it need to check if the platform is unaligned. #35078 had given the perf number to show the benefits. So this PR aims to do the same thing that fast skip the check of aligning with unaligned platform. ### Why are the changes needed? Improve the performance. ### Does this PR introduce _any_ user-facing change? no ### How was this patch tested? Pass CI. And the perf number should be same with #35078 Closes #35161 from ulysses-you/unaligned. Authored-by: ulysses-you <ulyssesyo...@gmail.com> Signed-off-by: Sean Owen <sro...@gmail.com> --- .../java/org/apache/spark/sql/execution/RecordBinaryComparator.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sql/core/src/main/java/org/apache/spark/sql/execution/RecordBinaryComparator.java b/sql/core/src/main/java/org/apache/spark/sql/execution/RecordBinaryComparator.java index 1f24340..e91873a 100644 --- a/sql/core/src/main/java/org/apache/spark/sql/execution/RecordBinaryComparator.java +++ b/sql/core/src/main/java/org/apache/spark/sql/execution/RecordBinaryComparator.java @@ -24,6 +24,7 @@ import java.nio.ByteOrder; public final class RecordBinaryComparator extends RecordComparator { + private static final boolean UNALIGNED = Platform.unaligned(); private static final boolean LITTLE_ENDIAN = ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN); @@ -41,7 +42,7 @@ public final class RecordBinaryComparator extends RecordComparator { // we have guaranteed `leftLen` == `rightLen`. // check if stars align and we can get both offsets to be aligned - if ((leftOff % 8) == (rightOff % 8)) { + if (!UNALIGNED && ((leftOff % 8) == (rightOff % 8))) { while ((leftOff + i) % 8 != 0 && i < leftLen) { final int v1 = Platform.getByte(leftObj, leftOff + i); final int v2 = Platform.getByte(rightObj, rightOff + i); @@ -52,7 +53,7 @@ public final class RecordBinaryComparator extends RecordComparator { } } // for architectures that support unaligned accesses, chew it up 8 bytes at a time - if (Platform.unaligned() || (((leftOff + i) % 8 == 0) && ((rightOff + i) % 8 == 0))) { + if (UNALIGNED || (((leftOff + i) % 8 == 0) && ((rightOff + i) % 8 == 0))) { while (i <= leftLen - 8) { long v1 = Platform.getLong(leftObj, leftOff + i); long v2 = Platform.getLong(rightObj, rightOff + i); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org For additional commands, e-mail: commits-h...@spark.apache.org