LakshSingla commented on code in PR #15661:
URL: https://github.com/apache/druid/pull/15661#discussion_r1452325990
##########
processing/src/main/java/org/apache/druid/frame/read/FrameReaderUtils.java:
##########
@@ -117,24 +117,51 @@ public MemoryRange<Memory> get()
public static int compareMemoryUnsigned(
final Memory memory1,
final long position1,
- final long length1,
+ final int length1,
final Memory memory2,
final long position2,
- final long length2
+ final int length2
)
{
- final long commonLength = Math.min(length1, length2);
+ final int commonLength = Math.min(length1, length2);
- for (long i = 0; i < commonLength; i++) {
- final byte byte1 = memory1.getByte(position1 + i);
- final byte byte2 = memory2.getByte(position2 + i);
- final int cmp = (byte1 & 0xFF) - (byte2 & 0xFF); // Unsigned comparison
+ for (int i = 0; i < commonLength; i += Long.BYTES) {
+ final int remaining = commonLength - i;
+ final long r1 = readComparableLong(memory1, position1 + i, remaining);
+ final long r2 = readComparableLong(memory2, position2 + i, remaining);
+ final int cmp = Long.compare(r1, r2);
if (cmp != 0) {
return cmp;
}
}
- return Long.compare(length1, length2);
+ return Integer.compare(length1, length2);
+ }
+
+ public static long readComparableLong(final Memory memory, final long
position, final int length)
+ {
+ long retVal = 0;
+ switch (length) {
+ case 7:
+ retVal |= (memory.getByte(position + 6) & 0xFFL) << 8;
+ case 6:
+ retVal |= (memory.getByte(position + 5) & 0xFFL) << 16;
+ case 5:
+ retVal |= (memory.getByte(position + 4) & 0xFFL) << 24;
+ case 4:
+ retVal |= (memory.getByte(position + 3) & 0xFFL) << 32;
+ case 3:
+ retVal |= (memory.getByte(position + 2) & 0xFFL) << 40;
+ case 2:
+ retVal |= (memory.getByte(position + 1) & 0xFFL) << 48;
+ case 1:
+ retVal |= (memory.getByte(position) & 0xFFL) << 56;
+ break;
+ default:
Review Comment:
```
19 Benchmark (channelDistributionString)
(keyGeneratorString) (keyLength) (numChannels) (numRows) (rowLength) Mode
Cnt Score Error Units
18 FrameChannelMergerBenchmark.mergeChannels round_robin
random 20 2 5000000 100 avgt
5 903.315 ± 270.867 ms/op
17 FrameChannelMergerBenchmark.mergeChannels round_robin
random 20 16 5000000 100 avgt
5 1389.013 ± 114.254 ms/op
16 FrameChannelMergerBenchmark.mergeChannels round_robin
sequential 20 2 5000000 100 avgt
5 994.316 ± 33.826 ms/op
15 FrameChannelMergerBenchmark.mergeChannels round_robin
sequential 20 16 5000000 100 avgt
5 1747.674 ± 76.268 ms/op
14 FrameChannelMergerBenchmark.mergeChannels clustered
random 20 2 5000000 100 avgt
5 923.851 ± 49.539 ms/op
13 FrameChannelMergerBenchmark.mergeChannels clustered
random 20 16 5000000 100 avgt
5 1399.766 ± 86.683 ms/op
12 FrameChannelMergerBenchmark.mergeChannels clustered
sequential 20 2 5000000 100 avgt
5 892.064 ± 32.372 ms/op
11 FrameChannelMergerBenchmark.mergeChannels clustered
sequential 20 16 5000000 100 avgt
5 1067.007 ± 85.710 ms/op
10
9 Process finished with exit code 0
8
7 Benchmark (channelDistributionString)
(keyGeneratorString) (keyLength) (numChannels) (numRows) (rowLength) Mode
Cnt Score Error Units
6 FrameChannelMergerBenchmark.mergeChannels round_robin
random 20 2 5000000 100 avgt
5 917.232 ± 51.771 ms/op
5 FrameChannelMergerBenchmark.mergeChannels round_robin
random 20 16 5000000 100 avgt
5 1358.481 ± 19.272 ms/op
4 FrameChannelMergerBenchmark.mergeChannels round_robin
sequential 20 2 5000000 100 avgt
5 969.108 ± 9.430 ms/op
3 FrameChannelMergerBenchmark.mergeChannels round_robin
sequential 20 16 5000000 100 avgt
5 1720.682 ± 3.741 ms/op
2 FrameChannelMergerBenchmark.mergeChannels clustered
random 20 2 5000000 100 avgt
5 925.407 ± 24.367 ms/op
1 FrameChannelMergerBenchmark.mergeChannels clustered
random 20 16 5000000 100 avgt
5 1332.455 ± 15.006 ms/op
20 FrameChannelMergerBenchmark.mergeChannels clustered
sequential 20 2 5000000 100 avgt
5 856.387 ± 421.044 ms/op
1 FrameChannelMergerBenchmark.mergeChannels clustered
sequential 20 16 5000000 100 avgt
5 1089.628 ± 74.390 ms/op
```
I didn't get any noticeable difference in performance
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]