You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by sr...@apache.org on 2022/01/15 15:00:35 UTC
[spark] branch master updated: [SPARK-37862][SQL] RecordBinaryComparator should fast skip the check of aligning with unaligned platform
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 <ul...@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 <ul...@gmail.com>
Signed-off-by: Sean Owen <sr...@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-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org