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]

Reply via email to