Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add IS_NULL operator to AST #13145

Merged
merged 17 commits into from
May 16, 2023

Conversation

karthikeyann
Copy link
Contributor

@karthikeyann karthikeyann commented Apr 16, 2023

Description

Add IS_NULL operator in AST.
Adds Python and Java bindings, unit tests.

Checklist

  • I am familiar with the Contributing Guidelines.
  • New or existing tests cover these changes.
  • The documentation is up to date with these changes.

@karthikeyann karthikeyann added feature request New feature or request 2 - In Progress Currently a work in progress libcudf Affects libcudf (C++/CUDA) code. non-breaking Non-breaking change labels Apr 16, 2023
@karthikeyann
Copy link
Contributor Author

Join benchmarks comparison (nvbench 23.06 vs this branch)

./_deps/nvbench-src/scripts/nvbench_compare.py ../../branch-23.06/release/before.JOIN_NVBENCH.json ./after.JOIN_NVBENCH.json ['../../branch-23.06/release/before.JOIN_NVBENCH.json', './after.JOIN_NVBENCH.json'] # inner_join_32bit

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I32 I32 0 100000 100000 302.983 us 84.06% 363.415 us 140.51% 60.431 us 19.95% PASS
I32 I32 0 100000 400000 784.559 us 19.07% 783.919 us 18.65% -0.640 us -0.08% PASS
I32 I32 0 10000000 10000000 19.328 ms 8.08% 19.226 ms 10.51% -102.610 us -0.53% PASS
I32 I32 0 10000000 40000000 47.694 ms 5.84% 47.378 ms 4.80% -315.495 us -0.66% PASS
I32 I32 0 10000000 100000000 101.277 ms 1.86% 100.429 ms 0.09% -847.715 us -0.84% FAIL
I32 I32 0 80000000 100000000 144.381 ms 1.54% 145.030 ms 1.81% 648.954 us 0.45% PASS
I32 I32 0 100000000 100000000 157.895 ms 0.77% 158.058 ms 0.80% 163.635 us 0.10% PASS
I32 I32 0 10000000 240000000 240.600 ms 0.09% 239.225 ms 0.92% -1374.312 us -0.57% FAIL
I32 I32 0 80000000 240000000 269.928 ms 0.72% 270.511 ms 0.62% 582.987 us 0.22% PASS
I32 I32 0 100000000 240000000 282.258 ms 0.50% 280.994 ms 0.42% -1264.039 us -0.45% FAIL

inner_join_64bit

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I64 I64 0 40000000 50000000 76.707 ms 2.49% 78.197 ms 2.91% 1.490 ms 1.94% PASS
I64 I64 0 50000000 50000000 82.601 ms 2.39% 82.614 ms 2.20% 13.001 us 0.02% PASS
I64 I64 0 40000000 120000000 140.014 ms 0.62% 140.267 ms 0.39% 253.234 us 0.18% PASS
I64 I64 0 50000000 120000000 147.419 ms 1.34% 145.953 ms 1.48% -1465.913 us -0.99% PASS

inner_join_32bit_nulls

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I32 I32 1 100000 100000 165.745 us 1.25% 161.682 us 1.55% -4.063 us -2.45% FAIL
I32 I32 1 100000 400000 519.571 us 41.42% 523.427 us 39.55% 3.856 us 0.74% PASS
I32 I32 1 10000000 10000000 8.723 ms 16.91% 9.042 ms 17.90% 319.758 us 3.67% PASS
I32 I32 1 10000000 40000000 20.675 ms 4.70% 20.532 ms 3.28% -143.015 us -0.69% PASS
I32 I32 1 10000000 100000000 38.481 ms 4.27% 41.048 ms 10.70% 2.567 ms 6.67% FAIL
I32 I32 1 80000000 100000000 60.111 ms 1.46% 60.083 ms 1.04% -27.875 us -0.05% PASS
I32 I32 1 100000000 100000000 64.522 ms 3.55% 64.739 ms 4.08% 216.660 us 0.34% PASS
I32 I32 1 10000000 240000000 99.506 ms 10.90% 99.524 ms 11.08% 18.305 us 0.02% PASS
I32 I32 1 80000000 240000000 102.978 ms 5.99% 102.832 ms 9.60% -145.497 us -0.14% PASS
I32 I32 1 100000000 240000000 107.504 ms 1.75% 107.720 ms 2.08% 216.040 us 0.20% PASS

inner_join_64bit_nulls

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I64 I64 1 40000000 50000000 32.771 ms 8.12% 32.554 ms 7.70% -217.430 us -0.66% PASS
I64 I64 1 50000000 50000000 37.905 ms 6.47% 36.038 ms 5.43% -1866.728 us -4.92% PASS
I64 I64 1 40000000 120000000 55.879 ms 3.41% 56.267 ms 3.56% 388.161 us 0.69% PASS
I64 I64 1 50000000 120000000 58.111 ms 3.06% 59.421 ms 2.66% 1.310 ms 2.25% PASS

left_join_32bit

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I32 I32 0 100000 100000 330.501 us 103.18% 329.508 us 99.32% -0.992 us -0.30% PASS
I32 I32 0 100000 400000 798.850 us 18.66% 798.420 us 18.26% -0.430 us -0.05% PASS
I32 I32 0 10000000 10000000 20.029 ms 5.16% 20.027 ms 4.42% -2.632 us -0.01% PASS
I32 I32 0 10000000 40000000 47.279 ms 3.56% 46.772 ms 2.79% -506.380 us -1.07% PASS
I32 I32 0 10000000 100000000 100.618 ms 0.64% 100.113 ms 0.11% -505.528 us -0.50% FAIL
I32 I32 0 80000000 100000000 145.410 ms 1.52% 147.075 ms 1.70% 1.665 ms 1.14% PASS
I32 I32 0 100000000 100000000 160.582 ms 0.36% 159.985 ms 0.71% -597.131 us -0.37% FAIL
I32 I32 0 10000000 240000000 240.534 ms 0.09% 240.110 ms 0.64% -423.992 us -0.18% FAIL
I32 I32 0 80000000 240000000 270.467 ms 0.27% 270.362 ms 0.65% -105.021 us -0.04% PASS
I32 I32 0 100000000 240000000 281.125 ms 0.28% 281.831 ms 0.50% 705.969 us 0.25% PASS

left_join_64bit

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I64 I64 0 40000000 50000000 80.082 ms 1.20% 80.392 ms 1.28% 310.288 us 0.39% PASS
I64 I64 0 50000000 50000000 84.015 ms 2.15% 82.448 ms 2.01% -1567.233 us -1.87% PASS
I64 I64 0 40000000 120000000 140.321 ms 0.50% 139.913 ms 0.50% -407.659 us -0.29% PASS
I64 I64 0 50000000 120000000 145.555 ms 1.10% 147.057 ms 1.08% 1.502 ms 1.03% PASS

left_join_32bit_nulls

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I32 I32 1 100000 100000 353.472 us 111.65% 357.520 us 105.90% 4.048 us 1.15% PASS
I32 I32 1 100000 400000 756.069 us 28.56% 755.021 us 27.08% -1.049 us -0.14% PASS
I32 I32 1 10000000 10000000 12.006 ms 17.00% 11.887 ms 15.10% -119.003 us -0.99% PASS
I32 I32 1 10000000 40000000 22.367 ms 6.22% 22.052 ms 6.49% -315.653 us -1.41% PASS
I32 I32 1 10000000 100000000 42.928 ms 14.63% 42.991 ms 14.98% 62.920 us 0.15% PASS
I32 I32 1 80000000 100000000 62.767 ms 5.03% 65.320 ms 6.20% 2.552 ms 4.07% PASS
I32 I32 1 100000000 100000000 70.835 ms 2.97% 69.369 ms 4.70% -1466.029 us -2.07% PASS
I32 I32 1 10000000 240000000 101.038 ms 12.62% 101.040 ms 11.98% 2.322 us 0.00% PASS
I32 I32 1 80000000 240000000 119.217 ms 16.80% 119.830 ms 18.06% 613.600 us 0.51% PASS
I32 I32 1 100000000 240000000 123.622 ms 17.45% 121.080 ms 14.81% -2541.531 us -2.06% PASS

left_join_64bit_nulls

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I64 I64 1 40000000 50000000 37.544 ms 5.89% 38.398 ms 6.29% 853.979 us 2.27% PASS
I64 I64 1 50000000 50000000 40.286 ms 2.02% 40.038 ms 2.51% -247.949 us -0.62% PASS
I64 I64 1 40000000 120000000 59.936 ms 1.98% 60.099 ms 1.46% 162.947 us 0.27% PASS
I64 I64 1 50000000 120000000 60.203 ms 1.95% 60.131 ms 2.05% -72.285 us -0.12% PASS

full_join_32bit

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I32 I32 0 100000 100000 1.034 ms 121.83% 1.040 ms 122.36% 5.296 us 0.51% PASS
I32 I32 0 100000 400000 1.638 ms 13.80% 1.635 ms 12.82% -3.398 us -0.21% PASS
I32 I32 0 10000000 10000000 30.028 ms 0.50% 29.446 ms 5.15% -581.371 us -1.94% FAIL
I32 I32 0 10000000 40000000 64.883 ms 3.46% 65.072 ms 3.41% 189.242 us 0.29% PASS
I32 I32 0 10000000 100000000 136.492 ms 1.56% 137.612 ms 2.11% 1.120 ms 0.82% PASS
I32 I32 0 80000000 100000000 189.754 ms 2.16% 190.079 ms 2.42% 325.337 us 0.17% PASS
I32 I32 0 100000000 100000000 203.519 ms 1.15% 205.309 ms 1.13% 1.789 ms 0.88% PASS
I32 I32 0 10000000 240000000 302.481 ms 1.01% 303.523 ms 0.73% 1.043 ms 0.34% PASS
I32 I32 0 80000000 240000000 340.585 ms 0.32% 340.706 ms 0.15% 120.467 us 0.04% PASS
I32 I32 0 100000000 240000000 358.221 ms 0.76% 360.437 ms 0.50% 2.216 ms 0.62% FAIL

full_join_64bit

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I64 I64 0 40000000 50000000 100.540 ms 2.17% 100.544 ms 1.86% 3.309 us 0.00% PASS
I64 I64 0 50000000 50000000 109.886 ms 1.10% 110.227 ms 0.81% 340.448 us 0.31% PASS
I64 I64 0 40000000 120000000 180.642 ms 0.49% 180.296 ms 0.34% -346.343 us -0.19% PASS
I64 I64 0 50000000 120000000 189.294 ms 2.23% 188.660 ms 2.42% -633.893 us -0.33% PASS

full_join_32bit_nulls

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I32 I32 1 100000 100000 819.962 us 124.66% 822.403 us 124.96% 2.441 us 0.30% PASS
I32 I32 1 100000 400000 1.581 ms 12.39% 1.585 ms 11.64% 3.617 us 0.23% PASS
I32 I32 1 10000000 10000000 18.385 ms 1.68% 18.389 ms 1.24% 3.374 us 0.02% PASS
I32 I32 1 10000000 40000000 38.953 ms 8.53% 40.539 ms 15.87% 1.587 ms 4.07% PASS
I32 I32 1 10000000 100000000 96.452 ms 14.07% 98.660 ms 16.70% 2.208 ms 2.29% PASS
I32 I32 1 80000000 100000000 128.829 ms 25.69% 128.776 ms 22.07% -53.085 us -0.04% PASS
I32 I32 1 100000000 100000000 137.361 ms 28.68% 136.779 ms 29.48% -582.329 us -0.42% PASS
I32 I32 1 10000000 240000000 231.574 ms 28.33% 233.914 ms 24.31% 2.340 ms 1.01% PASS
I32 I32 1 80000000 240000000 263.507 ms 58.93% 265.732 ms 57.02% 2.225 ms 0.84% PASS
I32 I32 1 100000000 240000000 273.193 ms 56.33% 270.896 ms 51.13% -2297.511 us -0.84% PASS

full_join_64bit_nulls

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I64 I64 1 40000000 50000000 63.308 ms 12.91% 63.504 ms 15.28% 195.821 us 0.31% PASS
I64 I64 1 50000000 50000000 68.697 ms 21.99% 68.703 ms 15.43% 5.376 us 0.01% PASS
I64 I64 1 40000000 120000000 129.889 ms 35.55% 130.336 ms 30.54% 446.620 us 0.34% PASS
I64 I64 1 50000000 120000000 134.558 ms 15.44% 134.902 ms 19.18% 343.880 us 0.26% PASS

mixed_inner_join_32bit

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I32 I32 0 100000 100000 950.933 us 72.51% 946.105 us 73.40% -4.828 us -0.51% PASS
I32 I32 0 100000 400000 1.516 ms 10.05% 1.520 ms 9.82% 3.455 us 0.23% PASS
I32 I32 0 10000000 10000000 40.085 ms 2.49% 40.366 ms 3.13% 280.771 us 0.70% PASS
I32 I32 0 10000000 40000000 119.286 ms 1.83% 119.138 ms 1.38% -147.744 us -0.12% PASS
I32 I32 0 10000000 100000000 279.523 ms 1.58% 277.964 ms 0.92% -1558.944 us -0.56% PASS
I32 I32 0 80000000 100000000 335.116 ms 1.33% 333.172 ms 0.21% -1944.450 us -0.58% FAIL
I32 I32 0 100000000 100000000 353.111 ms 1.48% 353.437 ms 0.99% 326.478 us 0.09% PASS
I32 I32 0 10000000 240000000 635.594 ms 0.26% 647.434 ms 1.39% 11.841 ms 1.86% FAIL
I32 I32 0 80000000 240000000 701.841 ms 1.42% 696.428 ms 0.27% -5413.183 us -0.77% FAIL
I32 I32 0 100000000 240000000 713.189 ms 1.19% 715.954 ms 0.29% 2.765 ms 0.39% FAIL

mixed_inner_join_64bit

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I64 I64 0 40000000 50000000 170.794 ms 1.44% 173.885 ms 1.22% 3.091 ms 1.81% FAIL
I64 I64 0 50000000 50000000 180.006 ms 0.50% 180.143 ms 0.36% 137.276 us 0.08% PASS
I64 I64 0 40000000 120000000 352.568 ms 0.63% 355.460 ms 0.64% 2.893 ms 0.82% FAIL
I64 I64 0 50000000 120000000 359.640 ms 0.39% 361.669 ms 0.50% 2.029 ms 0.56% FAIL

mixed_inner_join_32bit_nulls

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I32 I32 1 100000 100000 608.477 us 47.72% 616.900 us 47.99% 8.423 us 1.38% PASS
I32 I32 1 100000 400000 1.519 ms 13.13% 1.531 ms 12.53% 12.778 us 0.84% PASS
I32 I32 1 10000000 10000000 29.245 ms 0.50% 29.842 ms 1.00% 596.608 us 2.04% FAIL
I32 I32 1 10000000 40000000 100.696 ms 0.13% 101.730 ms 1.62% 1.034 ms 1.03% FAIL
I32 I32 1 10000000 100000000 235.003 ms 0.74% 240.897 ms 0.36% 5.893 ms 2.51% FAIL
I32 I32 1 80000000 100000000 255.934 ms 1.43% 261.092 ms 0.36% 5.158 ms 2.02% FAIL
I32 I32 1 100000000 100000000 259.861 ms 1.45% 264.831 ms 1.05% 4.970 ms 1.91% FAIL
I32 I32 1 10000000 240000000 549.106 ms 0.48% 563.743 ms 0.13% 14.637 ms 2.67% FAIL
I32 I32 1 80000000 240000000 574.169 ms 1.10% 582.337 ms 0.40% 8.167 ms 1.42% FAIL
I32 I32 1 100000000 240000000 573.054 ms 0.29% 586.501 ms 1.74% 13.447 ms 2.35% FAIL

mixed_inner_join_64bit_nulls

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I64 I64 1 40000000 50000000 135.699 ms 2.54% 140.149 ms 0.23% 4.450 ms 3.28% FAIL
I64 I64 1 50000000 50000000 139.768 ms 1.33% 140.309 ms 0.45% 540.630 us 0.39% PASS
I64 I64 1 40000000 120000000 293.776 ms 1.79% 300.687 ms 0.05% 6.911 ms 2.35% FAIL
I64 I64 1 50000000 120000000 294.833 ms 0.50% 300.780 ms 0.03% 5.947 ms 2.02% FAIL

mixed_left_join_32bit

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I32 I32 0 100000 100000 588.217 us 46.06% 586.027 us 47.07% -2.190 us -0.37% PASS
I32 I32 0 100000 400000 1.819 ms 10.41% 1.837 ms 9.02% 17.572 us 0.97% PASS
I32 I32 0 10000000 10000000 40.039 ms 3.17% 40.202 ms 0.18% 163.790 us 0.41% FAIL
I32 I32 0 10000000 40000000 120.353 ms 0.50% 120.472 ms 0.48% 118.701 us 0.10% PASS
I32 I32 0 10000000 100000000 280.290 ms 0.50% 280.278 ms 0.52% -12.448 us -0.00% PASS
I32 I32 0 80000000 100000000 339.715 ms 0.36% 338.891 ms 0.64% -824.110 us -0.24% PASS
I32 I32 0 100000000 100000000 360.902 ms 0.22% 354.352 ms 0.57% -6549.768 us -1.81% FAIL
I32 I32 0 10000000 240000000 641.186 ms 0.31% 641.236 ms 0.20% 49.705 us 0.01% PASS
I32 I32 0 80000000 240000000 704.598 ms 0.19% 702.034 ms 0.19% -2563.543 us -0.36% FAIL
I32 I32 0 100000000 240000000 719.743 ms 0.38% 721.073 ms 0.32% 1.330 ms 0.18% PASS

mixed_left_join_64bit

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I64 I64 0 40000000 50000000 179.905 ms 1.15% 179.239 ms 1.74% -666.162 us -0.37% PASS
I64 I64 0 50000000 50000000 183.621 ms 1.59% 181.912 ms 0.69% -1709.497 us -0.93% FAIL
I64 I64 0 40000000 120000000 360.120 ms 0.50% 363.705 ms 0.64% 3.586 ms 1.00% FAIL
I64 I64 0 50000000 120000000 371.557 ms 0.62% 369.405 ms 0.67% -2151.977 us -0.58% PASS

mixed_left_join_32bit_nulls

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I32 I32 1 100000 100000 630.009 us 47.96% 632.883 us 51.97% 2.874 us 0.46% PASS
I32 I32 1 100000 400000 1.912 ms 10.13% 1.912 ms 10.18% 0.155 us 0.01% PASS
I32 I32 1 10000000 10000000 33.366 ms 0.84% 34.911 ms 0.77% 1.544 ms 4.63% FAIL
I32 I32 1 10000000 40000000 112.440 ms 1.75% 113.530 ms 1.52% 1.090 ms 0.97% PASS
I32 I32 1 10000000 100000000 260.761 ms 0.49% 269.567 ms 1.48% 8.806 ms 3.38% FAIL
I32 I32 1 80000000 100000000 280.421 ms 1.30% 286.406 ms 1.55% 5.985 ms 2.13% FAIL
I32 I32 1 100000000 100000000 283.457 ms 1.45% 289.997 ms 1.13% 6.540 ms 2.31% FAIL
I32 I32 1 10000000 240000000 602.899 ms 0.23% 628.002 ms 0.38% 25.102 ms 4.16% FAIL
I32 I32 1 80000000 240000000 617.039 ms 0.50% 644.322 ms 0.40% 27.282 ms 4.42% FAIL
I32 I32 1 100000000 240000000 621.492 ms 0.26% 649.677 ms 0.34% 28.185 ms 4.54% FAIL

mixed_left_join_64bit_nulls

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I64 I64 1 40000000 50000000 146.509 ms 1.57% 147.013 ms 0.92% 503.841 us 0.34% PASS
I64 I64 1 50000000 50000000 147.101 ms 1.64% 154.489 ms 1.44% 7.388 ms 5.02% FAIL
I64 I64 1 40000000 120000000 319.838 ms 1.20% 331.127 ms 1.39% 11.289 ms 3.53% FAIL
I64 I64 1 50000000 120000000 326.907 ms 1.49% 332.409 ms 1.00% 5.503 ms 1.68% FAIL

mixed_full_join_32bit

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I32 I32 0 100000 100000 931.114 us 51.80% 929.059 us 52.66% -2.055 us -0.22% PASS
I32 I32 0 100000 400000 2.265 ms 9.39% 2.271 ms 6.73% 5.739 us 0.25% PASS
I32 I32 0 10000000 10000000 48.050 ms 1.14% 50.102 ms 4.00% 2.051 ms 4.27% FAIL
I32 I32 0 10000000 40000000 133.752 ms 0.49% 131.758 ms 1.87% -1993.805 us -1.49% FAIL
I32 I32 0 10000000 100000000 297.012 ms 0.19% 300.587 ms 0.45% 3.575 ms 1.20% FAIL
I32 I32 0 80000000 100000000 371.474 ms 0.31% 371.122 ms 0.46% -352.248 us -0.09% PASS
I32 I32 0 100000000 100000000 391.960 ms 0.21% 395.206 ms 0.50% 3.246 ms 0.83% FAIL
I32 I32 0 10000000 240000000 674.394 ms 0.14% 683.798 ms 0.28% 9.404 ms 1.39% FAIL
I32 I32 0 80000000 240000000 757.798 ms 0.33% 761.845 ms 0.49% 4.047 ms 0.53% FAIL
I32 I32 0 100000000 240000000 780.236 ms 0.36% 781.692 ms 0.05% 1.456 ms 0.19% FAIL

mixed_full_join_64bit

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I64 I64 0 40000000 50000000 200.389 ms 0.65% 199.378 ms 1.34% -1011.002 us -0.50% PASS
I64 I64 0 50000000 50000000 206.481 ms 1.52% 208.006 ms 1.49% 1.525 ms 0.74% PASS
I64 I64 0 40000000 120000000 396.016 ms 0.35% 391.992 ms 0.55% -4023.730 us -1.02% FAIL
I64 I64 0 50000000 120000000 405.551 ms 0.41% 401.033 ms 0.49% -4517.666 us -1.11% FAIL

mixed_full_join_32bit_nulls

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I32 I32 1 100000 100000 972.058 us 53.21% 986.519 us 54.90% 14.461 us 1.49% PASS
I32 I32 1 100000 400000 2.365 ms 8.29% 2.395 ms 8.24% 29.915 us 1.26% PASS
I32 I32 1 10000000 10000000 41.451 ms 0.86% 42.039 ms 0.89% 588.282 us 1.42% FAIL
I32 I32 1 10000000 40000000 120.663 ms 0.50% 121.068 ms 1.18% 404.417 us 0.34% PASS
I32 I32 1 10000000 100000000 277.396 ms 1.41% 287.138 ms 1.05% 9.742 ms 3.51% FAIL
I32 I32 1 80000000 100000000 301.412 ms 0.77% 316.789 ms 1.46% 15.377 ms 5.10% FAIL
I32 I32 1 100000000 100000000 307.278 ms 0.38% 322.468 ms 0.85% 15.190 ms 4.94% FAIL
I32 I32 1 10000000 240000000 633.810 ms 1.33% 657.297 ms 0.66% 23.486 ms 3.71% FAIL
I32 I32 1 80000000 240000000 660.704 ms 0.69% 682.843 ms 0.47% 22.139 ms 3.35% FAIL
I32 I32 1 100000000 240000000 669.419 ms 0.48% 697.796 ms 0.36% 28.377 ms 4.24% FAIL

mixed_full_join_64bit_nulls

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I64 I64 1 40000000 50000000 160.362 ms 0.62% 168.650 ms 1.63% 8.287 ms 5.17% FAIL
I64 I64 1 50000000 50000000 166.956 ms 2.30% 173.714 ms 2.43% 6.759 ms 4.05% FAIL
I64 I64 1 40000000 120000000 345.534 ms 0.76% 360.703 ms 0.38% 15.169 ms 4.39% FAIL
I64 I64 1 50000000 120000000 350.514 ms 1.02% 358.405 ms 0.60% 7.892 ms 2.25% FAIL

mixed_left_semi_join_32bit

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I32 I32 0 100000 100000 703.987 us 37.01% 702.536 us 40.35% -1.452 us -0.21% PASS
I32 I32 0 100000 400000 1.874 ms 8.49% 1.853 ms 7.82% -21.406 us -1.14% PASS
I32 I32 0 10000000 10000000 50.546 ms 1.08% 53.413 ms 3.43% 2.867 ms 5.67% FAIL
I32 I32 0 10000000 40000000 165.817 ms 1.21% 164.615 ms 1.39% -1201.828 us -0.72% PASS
I32 I32 0 10000000 100000000 390.938 ms 0.96% 391.374 ms 0.43% 436.485 us 0.11% PASS
I32 I32 0 80000000 100000000 457.679 ms 0.42% 457.122 ms 0.50% -557.656 us -0.12% PASS
I32 I32 0 100000000 100000000 473.465 ms 0.93% 473.576 ms 0.37% 110.679 us 0.02% PASS
I32 I32 0 10000000 240000000 917.382 ms 0.14% 914.865 ms 0.18% -2517.001 us -0.27% FAIL
I32 I32 0 80000000 240000000 988.893 ms 0.23% 990.577 ms 0.41% 1.684 ms 0.17% PASS
I32 I32 0 100000000 240000000 1.000 s 0.94% 998.865 ms 0.14% -1413.764 us -0.14% FAIL

mixed_left_semi_join_64bit

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I64 I64 0 40000000 50000000 235.890 ms 1.26% 236.934 ms 0.96% 1.044 ms 0.44% PASS
I64 I64 0 50000000 50000000 244.323 ms 1.05% 242.619 ms 0.96% -1704.153 us -0.70% PASS
I64 I64 0 40000000 120000000 502.911 ms 0.38% 504.066 ms 0.48% 1.155 ms 0.23% PASS
I64 I64 0 50000000 120000000 512.549 ms 1.10% 511.366 ms 0.33% -1183.458 us -0.23% PASS

mixed_left_semi_join_32bit_nulls

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I32 I32 1 100000 100000 703.801 us 36.23% 694.560 us 34.98% -9.241 us -1.31% PASS
I32 I32 1 100000 400000 2.461 ms 7.97% 2.300 ms 8.85% -161.261 us -6.55% PASS
I32 I32 1 10000000 10000000 65.325 ms 0.61% 57.716 ms 0.50% -7608.748 us -11.65% FAIL
I32 I32 1 10000000 40000000 241.345 ms 0.99% 208.462 ms 0.99% -32882.907 us -13.62% FAIL
I32 I32 1 10000000 100000000 589.366 ms 1.38% 508.920 ms 0.57% -80445.555 us -13.65% FAIL
I32 I32 1 80000000 100000000 624.585 ms 1.48% 551.410 ms 0.32% -73175.625 us -11.72% FAIL
I32 I32 1 100000000 100000000 635.872 ms 1.33% 561.363 ms 0.30% -74508.684 us -11.72% FAIL
I32 I32 1 10000000 240000000 1.387 s 0.37% 1.204 s 0.20% -182213.090 us -13.14% FAIL
I32 I32 1 80000000 240000000 1.443 s 0.08% 1.261 s 0.16% -182114.935 us -12.62% FAIL
I32 I32 1 100000000 240000000 1.458 s 0.37% 1.272 s 0.28% -186376.543 us -12.78% FAIL

mixed_left_semi_join_64bit_nulls

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I64 I64 1 40000000 50000000 316.039 ms 1.07% 272.499 ms 0.83% -43539.625 us -13.78% FAIL
I64 I64 1 50000000 50000000 321.022 ms 0.69% 281.025 ms 0.41% -39996.528 us -12.46% FAIL
I64 I64 1 40000000 120000000 722.137 ms 0.18% 624.902 ms 0.40% -97234.508 us -13.46% FAIL
I64 I64 1 50000000 120000000 725.857 ms 0.34% 621.330 ms 0.27% -104526.467 us -14.40% FAIL

mixed_left_anti_join_32bit

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I32 I32 0 100000 100000 679.434 us 35.76% 681.565 us 37.62% 2.131 us 0.31% PASS
I32 I32 0 100000 400000 2.014 ms 9.50% 2.010 ms 7.87% -4.472 us -0.22% PASS
I32 I32 0 10000000 10000000 51.244 ms 3.32% 53.509 ms 4.23% 2.265 ms 4.42% FAIL
I32 I32 0 10000000 40000000 168.465 ms 1.28% 166.981 ms 1.51% -1484.338 us -0.88% PASS
I32 I32 0 10000000 100000000 394.113 ms 0.27% 395.534 ms 0.46% 1.421 ms 0.36% FAIL
I32 I32 0 80000000 100000000 460.770 ms 0.46% 458.171 ms 0.80% -2598.680 us -0.56% FAIL
I32 I32 0 100000000 100000000 475.714 ms 0.83% 474.432 ms 0.25% -1281.913 us -0.27% FAIL
I32 I32 0 10000000 240000000 925.055 ms 0.17% 923.133 ms 0.14% -1921.681 us -0.21% FAIL
I32 I32 0 80000000 240000000 993.263 ms 0.17% 994.317 ms 0.17% 1.054 ms 0.11% PASS
I32 I32 0 100000000 240000000 1.006 s 1.29% 1.005 s 1.35% -1324.438 us -0.13% PASS

mixed_left_anti_join_64bit

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I64 I64 0 40000000 50000000 239.936 ms 0.50% 240.210 ms 0.50% 273.788 us 0.11% PASS
I64 I64 0 50000000 50000000 246.643 ms 1.30% 246.436 ms 1.40% -206.997 us -0.08% PASS
I64 I64 0 40000000 120000000 510.122 ms 0.34% 509.289 ms 0.48% -832.711 us -0.16% PASS
I64 I64 0 50000000 120000000 517.582 ms 0.70% 515.539 ms 1.24% -2043.335 us -0.39% PASS

mixed_left_anti_join_32bit_nulls

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I32 I32 1 100000 100000 709.549 us 35.90% 697.281 us 41.18% -12.267 us -1.73% PASS
I32 I32 1 100000 400000 2.866 ms 4.40% 2.734 ms 6.91% -131.946 us -4.60% FAIL
I32 I32 1 10000000 10000000 76.012 ms 0.48% 70.104 ms 0.18% -5907.934 us -7.77% FAIL
I32 I32 1 10000000 40000000 281.565 ms 0.88% 250.705 ms 0.87% -30860.133 us -10.96% FAIL
I32 I32 1 10000000 100000000 685.517 ms 0.52% 609.519 ms 0.59% -75997.850 us -11.09% FAIL
I32 I32 1 80000000 100000000 723.608 ms 0.90% 658.356 ms 0.50% -65251.289 us -9.02% FAIL
I32 I32 1 100000000 100000000 734.378 ms 0.42% 664.123 ms 0.37% -70254.489 us -9.57% FAIL
I32 I32 1 10000000 240000000 1.620 s 0.42% 1.458 s 0.22% -161525.054 us -9.97% FAIL
I32 I32 1 80000000 240000000 1.669 s 0.52% 1.504 s 0.09% -165430.660 us -9.91% FAIL
I32 I32 1 100000000 240000000 1.675 s 0.51% 1.517 s 0.17% -158208.286 us -9.44% FAIL

mixed_left_anti_join_64bit_nulls

[0] Quadro GV100

Key Type Payload Type Nullable Build Table Size Probe Table Size Ref Time Ref Noise Cmp Time Cmp Noise Diff %Diff Status
I64 I64 1 40000000 50000000 363.186 ms 1.03% 327.644 ms 0.69% -35541.674 us -9.79% FAIL
I64 I64 1 50000000 50000000 370.277 ms 1.27% 336.306 ms 0.57% -33970.382 us -9.17% FAIL
I64 I64 1 40000000 120000000 837.753 ms 0.40% 761.648 ms 0.88% -76105.126 us -9.08% FAIL
I64 I64 1 50000000 120000000 844.276 ms 1.13% 755.001 ms 0.35% -89274.574 us -10.57% FAIL

Summary

  • Total Matches: 224
    • Pass (diff <= min_noise): 128
    • Unknown (infinite noise): 0
    • Failure (diff > min_noise): 96

@karthikeyann
Copy link
Contributor Author

Join google-benchmark comparison (23.06 vs this branch):

Details

./_deps/gbench-src/tools/compare.py benchmarks ../../branch-23.06/release/before.JOIN_BENCH.json ./after.JOIN_BENCH.json

Comparing ../../branch-23.06/release/before.JOIN_BENCH.json to ./after.JOIN_BENCH.json
Benchmark                                                                                                             Time             CPU      Time Old      Time New       CPU Old       CPU New
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Join<int32_t, int32_t>/left_anti_join_32bit/100000/100000/manual_time                                              -0.0105         -0.0106             0             0             0             0
Join<int32_t, int32_t>/left_anti_join_32bit/100000/400000/manual_time                                              +0.0200         +0.0184             0             0             0             0
Join<int32_t, int32_t>/left_anti_join_32bit/100000/1000000/manual_time                                             +0.0154         +0.0149             0             0             0             0
Join<int32_t, int32_t>/left_anti_join_32bit/10000000/10000000/manual_time                                          -0.0001         -0.0001            11            11            11            11
Join<int32_t, int32_t>/left_anti_join_32bit/10000000/40000000/manual_time                                          +0.0000         -0.0002            26            26            26            26
Join<int32_t, int32_t>/left_anti_join_32bit/10000000/100000000/manual_time                                         -0.0000         -0.0001            54            54            54            54
Join<int32_t, int32_t>/left_anti_join_32bit/100000000/100000000/manual_time                                        -0.0002         -0.0002           122           122           122           122
Join<int32_t, int32_t>/left_anti_join_32bit/80000000/240000000/manual_time                                         -0.0001         -0.0001           178           178           178           178
Join<int64_t, int64_t>/left_anti_join_64bit/50000000/50000000/manual_time                                          +0.0004         +0.0004            61            61            61            61
Join<int64_t, int64_t>/left_anti_join_64bit/40000000/120000000/manual_time                                         +0.0001         +0.0001            90            90            90            90
Join<int32_t, int32_t>/left_anti_join_32bit_nulls/100000/100000/manual_time                                        +0.0238         +0.0203             0             0             0             0
Join<int32_t, int32_t>/left_anti_join_32bit_nulls/100000/400000/manual_time                                        +0.0172         +0.0159             0             0             0             0
Join<int32_t, int32_t>/left_anti_join_32bit_nulls/100000/1000000/manual_time                                       +0.0070         +0.0060             0             0             0             0
Join<int32_t, int32_t>/left_anti_join_32bit_nulls/10000000/10000000/manual_time                                    +0.0001         +0.0001             5             5             5             5
Join<int32_t, int32_t>/left_anti_join_32bit_nulls/10000000/40000000/manual_time                                    -0.0000         -0.0000            11            11            11            11
Join<int32_t, int32_t>/left_anti_join_32bit_nulls/10000000/100000000/manual_time                                   +0.0000         +0.0000            22            22            22            22
Join<int32_t, int32_t>/left_anti_join_32bit_nulls/100000000/100000000/manual_time                                  +0.0006         +0.0006            51            51            51            51
Join<int32_t, int32_t>/left_anti_join_32bit_nulls/80000000/240000000/manual_time                                   +0.0000         +0.0000            72            72            72            72
Join<int64_t, int64_t>/left_anti_join_64bit_nulls/50000000/50000000/manual_time                                    +0.0000         +0.0000            27            27            27            27
Join<int64_t, int64_t>/left_anti_join_64bit_nulls/40000000/120000000/manual_time                                   -0.0003         -0.0003            37            37            37            37
Join<int32_t, int32_t>/left_semi_join_32bit/100000/100000/manual_time                                              +0.0331         +0.0297             0             0             0             0
Join<int32_t, int32_t>/left_semi_join_32bit/100000/400000/manual_time                                              +0.0232         +0.0213             0             0             0             0
Join<int32_t, int32_t>/left_semi_join_32bit/100000/1000000/manual_time                                             +0.0144         +0.0140             0             0             0             0
Join<int32_t, int32_t>/left_semi_join_32bit/10000000/10000000/manual_time                                          +0.0008         +0.0008            11            11            11            11
Join<int32_t, int32_t>/left_semi_join_32bit/10000000/40000000/manual_time                                          -0.0001         -0.0001            25            25            26            26
Join<int32_t, int32_t>/left_semi_join_32bit/10000000/100000000/manual_time                                         -0.0001         -0.0001            54            54            54            54
Join<int32_t, int32_t>/left_semi_join_32bit/100000000/100000000/manual_time                                        -0.0001         -0.0002           121           121           121           121
Join<int32_t, int32_t>/left_semi_join_32bit/80000000/240000000/manual_time                                         -0.0005         -0.0006           178           178           178           178
Join<int64_t, int64_t>/left_semi_join_64bit/50000000/50000000/manual_time                                          -0.0001         -0.0001            61            61            61            61
Join<int64_t, int64_t>/left_semi_join_64bit/40000000/120000000/manual_time                                         -0.0000         -0.0000            90            90            90            90
Join<int32_t, int32_t>/left_semi_join_32bit_nulls/100000/100000/manual_time                                        +0.0259         +0.0227             0             0             0             0
Join<int32_t, int32_t>/left_semi_join_32bit_nulls/100000/400000/manual_time                                        +0.0170         +0.0156             0             0             0             0
Join<int32_t, int32_t>/left_semi_join_32bit_nulls/100000/1000000/manual_time                                       +0.0114         +0.0109             0             0             0             0
Join<int32_t, int32_t>/left_semi_join_32bit_nulls/10000000/10000000/manual_time                                    +0.0004         +0.0005             5             5             5             5
Join<int32_t, int32_t>/left_semi_join_32bit_nulls/10000000/40000000/manual_time                                    +0.0002         +0.0002            11            11            11            11
Join<int32_t, int32_t>/left_semi_join_32bit_nulls/10000000/100000000/manual_time                                   -0.0005         -0.0005            22            22            22            22
Join<int32_t, int32_t>/left_semi_join_32bit_nulls/100000000/100000000/manual_time                                  +0.0002         +0.0002            51            51            51            51
Join<int32_t, int32_t>/left_semi_join_32bit_nulls/80000000/240000000/manual_time                                   +0.0002         +0.0001            71            71            71            71
Join<int64_t, int64_t>/left_semi_join_64bit_nulls/50000000/50000000/manual_time                                    +0.0003         +0.0003            26            26            26            26
Join<int64_t, int64_t>/left_semi_join_64bit_nulls/40000000/120000000/manual_time                                   +0.0003         +0.0003            37            37            37            37
ConditionalJoin<int32_t, int32_t>/conditional_inner_join_32bit/100000/100000/manual_time                           +0.0143         +0.0142           409           415           409           415
ConditionalJoin<int32_t, int32_t>/conditional_inner_join_32bit/100000/400000/manual_time                           +0.0088         +0.0087          1235          1246          1235          1246
ConditionalJoin<int32_t, int32_t>/conditional_inner_join_32bit/400000/100000/manual_time                           +0.0090         +0.0089          1235          1246          1235          1246
ConditionalJoin<int32_t, int32_t>/conditional_inner_join_32bit/100000/1000000/manual_time                          +0.0113         +0.0112          2881          2913          2881          2913
ConditionalJoin<int64_t, int64_t>/conditional_inner_join_64bit/100000/100000/manual_time                           +0.0069         +0.0069           411           414           411           414
ConditionalJoin<int64_t, int64_t>/conditional_inner_join_64bit/100000/400000/manual_time                           -0.0009         -0.0010          1244          1243          1244          1243
ConditionalJoin<int64_t, int64_t>/conditional_inner_join_64bit/400000/100000/manual_time                           -0.0014         -0.0014          1244          1243          1244          1243
ConditionalJoin<int64_t, int64_t>/conditional_inner_join_64bit/100000/1000000/manual_time                          -0.0007         -0.0008          2904          2902          2904          2902
ConditionalJoin<int32_t, int32_t>/conditional_inner_join_32bit_nulls/100000/100000/manual_time                     -0.0191         -0.0191           652           639           652           639
ConditionalJoin<int32_t, int32_t>/conditional_inner_join_32bit_nulls/100000/400000/manual_time                     -0.0049         -0.0049          1958          1949          1958          1949
ConditionalJoin<int32_t, int32_t>/conditional_inner_join_32bit_nulls/400000/100000/manual_time                     +0.0017         +0.0016          1997          2001          1997          2001
ConditionalJoin<int32_t, int32_t>/conditional_inner_join_32bit_nulls/100000/1000000/manual_time                    -0.0060         -0.0049          4720          4692          4714          4691
ConditionalJoin<int64_t, int64_t>/conditional_inner_join_64bit_nulls/100000/100000/manual_time                     -0.0132         -0.0134           661           652           661           652
ConditionalJoin<int64_t, int64_t>/conditional_inner_join_64bit_nulls/100000/400000/manual_time                     +0.0084         +0.0083          2010          2027          2010          2027
ConditionalJoin<int64_t, int64_t>/conditional_inner_join_64bit_nulls/400000/100000/manual_time                     +0.0041         +0.0054          2060          2068          2057          2068
ConditionalJoin<int64_t, int64_t>/conditional_inner_join_64bit_nulls/100000/1000000/manual_time                    +0.0057         +0.0023          4833          4861          4833          4845
ConditionalJoin<int32_t, int32_t>/conditional_left_join_32bit/100000/100000/manual_time                            +0.0078         +0.0077           412           415           412           415
ConditionalJoin<int32_t, int32_t>/conditional_left_join_32bit/100000/400000/manual_time                            +0.0090         +0.0090          1235          1246          1235          1246
ConditionalJoin<int32_t, int32_t>/conditional_left_join_32bit/100000/1000000/manual_time                           +0.0113         +0.0112          2881          2913          2881          2913
ConditionalJoin<int64_t, int64_t>/conditional_left_join_64bit/100000/100000/manual_time                            -0.0008         -0.0009           415           414           415           414
ConditionalJoin<int64_t, int64_t>/conditional_left_join_64bit/100000/400000/manual_time                            -0.0012         -0.0013          1244          1243          1244          1242
ConditionalJoin<int64_t, int64_t>/conditional_left_join_64bit/100000/1000000/manual_time                           -0.0009         -0.0009          2905          2902          2905          2902
ConditionalJoin<int32_t, int32_t>/conditional_left_join_32bit_nulls/100000/100000/manual_time                      -0.0292         -0.0293           659           640           659           640
ConditionalJoin<int32_t, int32_t>/conditional_left_join_32bit_nulls/100000/400000/manual_time                      +0.0021         +0.0016          1952          1957          1952          1956
ConditionalJoin<int32_t, int32_t>/conditional_left_join_32bit_nulls/100000/1000000/manual_time                     -0.0060         -0.0055          4725          4697          4722          4697
ConditionalJoin<int64_t, int64_t>/conditional_left_join_64bit_nulls/100000/100000/manual_time                      +0.0018         +0.0018           651           652           651           652
ConditionalJoin<int64_t, int64_t>/conditional_left_join_64bit_nulls/100000/400000/manual_time                      -0.0041         -0.0041          2020          2012          2020          2011
ConditionalJoin<int64_t, int64_t>/conditional_left_join_64bit_nulls/100000/1000000/manual_time                     +0.0081         +0.0075          4832          4872          4832          4869
ConditionalJoin<int32_t, int32_t>/conditional_full_join_32bit/100000/100000/manual_time                            +0.0221         +0.0219           406           415           406           415
ConditionalJoin<int32_t, int32_t>/conditional_full_join_32bit/100000/400000/manual_time                            +0.0090         +0.0090          1235          1246          1235          1246
ConditionalJoin<int32_t, int32_t>/conditional_full_join_32bit/100000/1000000/manual_time                           +0.0113         +0.0112          2881          2913          2881          2913
ConditionalJoin<int64_t, int64_t>/conditional_full_join_64bit/100000/100000/manual_time                            +0.0067         +0.0067           411           414           411           414
ConditionalJoin<int64_t, int64_t>/conditional_full_join_64bit/100000/400000/manual_time                            -0.0012         -0.0013          1244          1243          1244          1243
ConditionalJoin<int64_t, int64_t>/conditional_full_join_64bit/100000/1000000/manual_time                           -0.0008         -0.0008          2905          2903          2905          2903
ConditionalJoin<int32_t, int32_t>/conditional_full_join_32bit_nulls/100000/100000/manual_time                      -0.0369         -0.0371           657           633           657           633
ConditionalJoin<int32_t, int32_t>/conditional_full_join_32bit_nulls/100000/400000/manual_time                      +0.0054         +0.0054          1956          1966          1956          1966
ConditionalJoin<int32_t, int32_t>/conditional_full_join_32bit_nulls/100000/1000000/manual_time                     +0.0230         +0.0229          4717          4826          4717          4825
ConditionalJoin<int64_t, int64_t>/conditional_full_join_64bit_nulls/100000/100000/manual_time                      +0.0285         +0.0285           652           670           652           670
ConditionalJoin<int64_t, int64_t>/conditional_full_join_64bit_nulls/100000/400000/manual_time                      +0.0472         +0.0474          2016          2111          2016          2111
ConditionalJoin<int64_t, int64_t>/conditional_full_join_64bit_nulls/100000/1000000/manual_time                     +0.0666         +0.0661          4862          5186          4862          5184
ConditionalJoin<int32_t, int32_t>/conditional_left_anti_join_32bit/100000/100000/manual_time                       +0.0167         +0.0167           408           415           408           415
ConditionalJoin<int32_t, int32_t>/conditional_left_anti_join_32bit/100000/400000/manual_time                       +0.0091         +0.0091          1235          1246          1235          1246
ConditionalJoin<int32_t, int32_t>/conditional_left_anti_join_32bit/100000/1000000/manual_time                      +0.0229         +0.0228          2881          2947          2881          2947
ConditionalJoin<int64_t, int64_t>/conditional_left_anti_join_64bit/100000/100000/manual_time                       +0.0205         +0.0205           411           420           411           420
ConditionalJoin<int64_t, int64_t>/conditional_left_anti_join_64bit/100000/400000/manual_time                       +0.0097         +0.0096          1244          1256          1244          1256
ConditionalJoin<int64_t, int64_t>/conditional_left_anti_join_64bit/100000/1000000/manual_time                      +0.0203         +0.0203          2904          2963          2904          2963
ConditionalJoin<int32_t, int32_t>/conditional_left_anti_join_32bit_nulls/100000/100000/manual_time                 +0.0196         +0.0194           652           665           652           665
ConditionalJoin<int32_t, int32_t>/conditional_left_anti_join_32bit_nulls/100000/400000/manual_time                 +0.0149         +0.0148          1997          2027          1997          2027
ConditionalJoin<int32_t, int32_t>/conditional_left_anti_join_32bit_nulls/100000/1000000/manual_time                +0.0242         +0.0238          4860          4978          4859          4974
ConditionalJoin<int64_t, int64_t>/conditional_left_anti_join_64bit_nulls/100000/100000/manual_time                 +0.0398         +0.0397           679           706           679           706
ConditionalJoin<int64_t, int64_t>/conditional_left_anti_join_64bit_nulls/100000/400000/manual_time                 +0.0229         +0.0228          2094          2142          2094          2142
ConditionalJoin<int64_t, int64_t>/conditional_left_anti_join_64bit_nulls/100000/1000000/manual_time                +0.0411         +0.0415          5033          5240          5031          5240
ConditionalJoin<int32_t, int32_t>/conditional_left_semi_join_32bit/100000/100000/manual_time                       +0.0434         +0.0434           397           415           397           415
ConditionalJoin<int32_t, int32_t>/conditional_left_semi_join_32bit/100000/400000/manual_time                       +0.0159         +0.0158          1235          1254          1235          1254
ConditionalJoin<int32_t, int32_t>/conditional_left_semi_join_32bit/100000/1000000/manual_time                      +0.0335         +0.0335          2881          2977          2881          2977
ConditionalJoin<int64_t, int64_t>/conditional_left_semi_join_64bit/100000/100000/manual_time                       +0.0090         +0.0091           411           415           411           415
ConditionalJoin<int64_t, int64_t>/conditional_left_semi_join_64bit/100000/400000/manual_time                       +0.0018         +0.0018          1245          1247          1244          1247
ConditionalJoin<int64_t, int64_t>/conditional_left_semi_join_64bit/100000/1000000/manual_time                      +0.0216         +0.0216          2923          2986          2923          2986
ConditionalJoin<int32_t, int32_t>/conditional_left_semi_join_32bit_nulls/100000/100000/manual_time                 -0.0152         -0.0152           678           667           678           667
ConditionalJoin<int32_t, int32_t>/conditional_left_semi_join_32bit_nulls/100000/400000/manual_time                 +0.0123         +0.0123          2023          2048          2023          2048
ConditionalJoin<int32_t, int32_t>/conditional_left_semi_join_32bit_nulls/100000/1000000/manual_time                +0.0268         +0.0268          4941          5073          4941          5073
ConditionalJoin<int64_t, int64_t>/conditional_left_semi_join_64bit_nulls/100000/100000/manual_time                 +0.0024         +0.0024           693           695           693           695
ConditionalJoin<int64_t, int64_t>/conditional_left_semi_join_64bit_nulls/100000/400000/manual_time                 +0.0158         +0.0170          2119          2152          2116          2152
ConditionalJoin<int64_t, int64_t>/conditional_left_semi_join_64bit_nulls/100000/1000000/manual_time                +0.0136         +0.0150          5159          5229          5151          5229

@karthikeyann
Copy link
Contributor Author

AST google-benchmark comparison: (23.06 vs this branch)

Details

./_deps/gbench-src/tools/compare.py benchmarks ../../branch-23.06/release/before.AST_BENCH.json after.AST_BENCH.json

Comparing ../../branch-23.06/release/before.AST_BENCH.json to after.AST_BENCH.json
Benchmark                                                                                                                         Time             CPU      Time Old      Time New       CPU Old       CPU New
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AST<int32_t, TreeType::IMBALANCED_LEFT, false, false>/ast_int32_imbalanced_unique/100000/1/manual_time                         +0.0043         +0.0014             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, false, false>/ast_int32_imbalanced_unique/100000/5/manual_time                         +0.0007         -0.0004             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, false, false>/ast_int32_imbalanced_unique/100000/10/manual_time                        +0.0020         -0.0017             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, false, false>/ast_int32_imbalanced_unique/1000000/1/manual_time                        +0.0015         +0.0009             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, false, false>/ast_int32_imbalanced_unique/1000000/5/manual_time                        +0.0012         +0.0019             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, false, false>/ast_int32_imbalanced_unique/1000000/10/manual_time                       +0.0002         +0.0004             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, false, false>/ast_int32_imbalanced_unique/10000000/1/manual_time                       +0.0008         +0.0008             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, false, false>/ast_int32_imbalanced_unique/10000000/5/manual_time                       -0.0002         +0.0001             1             1             1             1
AST<int32_t, TreeType::IMBALANCED_LEFT, false, false>/ast_int32_imbalanced_unique/10000000/10/manual_time                      -0.0005         -0.0005             2             2             2             2
AST<int32_t, TreeType::IMBALANCED_LEFT, false, false>/ast_int32_imbalanced_unique/100000000/1/manual_time                      -0.0005         -0.0005             3             3             3             3
AST<int32_t, TreeType::IMBALANCED_LEFT, false, false>/ast_int32_imbalanced_unique/100000000/5/manual_time                      -0.0004         -0.0004             9             9             9             9
AST<int32_t, TreeType::IMBALANCED_LEFT, false, false>/ast_int32_imbalanced_unique/100000000/10/manual_time                     -0.0003         -0.0003            16            16            16            16
AST<int32_t, TreeType::IMBALANCED_LEFT, true, false>/ast_int32_imbalanced_reuse/100000/1/manual_time                           +0.0002         -0.0011             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, true, false>/ast_int32_imbalanced_reuse/100000/5/manual_time                           +0.0018         +0.0003             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, true, false>/ast_int32_imbalanced_reuse/100000/10/manual_time                          +0.0033         +0.0019             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, true, false>/ast_int32_imbalanced_reuse/1000000/1/manual_time                          +0.0028         +0.0021             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, true, false>/ast_int32_imbalanced_reuse/1000000/5/manual_time                          +0.0007         +0.0011             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, true, false>/ast_int32_imbalanced_reuse/1000000/10/manual_time                         -0.0006         -0.0000             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, true, false>/ast_int32_imbalanced_reuse/10000000/1/manual_time                         +0.0004         +0.0005             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, true, false>/ast_int32_imbalanced_reuse/10000000/5/manual_time                         -0.0006         -0.0002             1             1             1             1
AST<int32_t, TreeType::IMBALANCED_LEFT, true, false>/ast_int32_imbalanced_reuse/10000000/10/manual_time                        -0.0005         -0.0004             1             1             1             1
AST<int32_t, TreeType::IMBALANCED_LEFT, true, false>/ast_int32_imbalanced_reuse/100000000/1/manual_time                        -0.0001         -0.0000             2             2             2             2
AST<int32_t, TreeType::IMBALANCED_LEFT, true, false>/ast_int32_imbalanced_reuse/100000000/5/manual_time                        -0.0007         -0.0010             6             6             6             6
AST<int32_t, TreeType::IMBALANCED_LEFT, true, false>/ast_int32_imbalanced_reuse/100000000/10/manual_time                       -0.0007         -0.0007            11            11            11            11
AST<double, TreeType::IMBALANCED_LEFT, false, false>/ast_double_imbalanced_unique/100000/1/manual_time                         +0.0040         +0.0016             0             0             0             0
AST<double, TreeType::IMBALANCED_LEFT, false, false>/ast_double_imbalanced_unique/100000/5/manual_time                         +0.0036         +0.0047             0             0             0             0
AST<double, TreeType::IMBALANCED_LEFT, false, false>/ast_double_imbalanced_unique/100000/10/manual_time                        +0.0027         +0.0017             0             0             0             0
AST<double, TreeType::IMBALANCED_LEFT, false, false>/ast_double_imbalanced_unique/1000000/1/manual_time                        +0.0014         +0.0008             0             0             0             0
AST<double, TreeType::IMBALANCED_LEFT, false, false>/ast_double_imbalanced_unique/1000000/5/manual_time                        +0.0021         +0.0022             0             0             0             0
AST<double, TreeType::IMBALANCED_LEFT, false, false>/ast_double_imbalanced_unique/1000000/10/manual_time                       +0.0011         +0.0013             0             0             0             0
AST<double, TreeType::IMBALANCED_LEFT, false, false>/ast_double_imbalanced_unique/10000000/1/manual_time                       +0.0000         +0.0002             0             0             0             0
AST<double, TreeType::IMBALANCED_LEFT, false, false>/ast_double_imbalanced_unique/10000000/5/manual_time                       +0.0018         +0.0018             1             1             1             1
AST<double, TreeType::IMBALANCED_LEFT, false, false>/ast_double_imbalanced_unique/10000000/10/manual_time                      +0.0023         +0.0023             2             2             2             2
AST<double, TreeType::IMBALANCED_LEFT, false, false>/ast_double_imbalanced_unique/100000000/1/manual_time                      +0.0001         +0.0001             4             4             4             4
AST<double, TreeType::IMBALANCED_LEFT, false, false>/ast_double_imbalanced_unique/100000000/5/manual_time                      +0.0016         +0.0016            11            11            11            11
AST<double, TreeType::IMBALANCED_LEFT, false, false>/ast_double_imbalanced_unique/100000000/10/manual_time                     +0.0017         +0.0017            21            21            21            21
AST<int32_t, TreeType::IMBALANCED_LEFT, false, true>/ast_int32_imbalanced_unique_nulls/100000/1/manual_time                    -0.0200         -0.0164             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, false, true>/ast_int32_imbalanced_unique_nulls/100000/5/manual_time                    -0.0082         -0.0077             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, false, true>/ast_int32_imbalanced_unique_nulls/100000/10/manual_time                   -0.0158         -0.0139             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, false, true>/ast_int32_imbalanced_unique_nulls/1000000/1/manual_time                   +0.0052         -0.0021             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, false, true>/ast_int32_imbalanced_unique_nulls/1000000/5/manual_time                   +0.0787         +0.0698             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, false, true>/ast_int32_imbalanced_unique_nulls/1000000/10/manual_time                  +0.1007         +0.0947             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, false, true>/ast_int32_imbalanced_unique_nulls/10000000/1/manual_time                  +0.0120         +0.0116             1             1             1             1
AST<int32_t, TreeType::IMBALANCED_LEFT, false, true>/ast_int32_imbalanced_unique_nulls/10000000/5/manual_time                  +0.0916         +0.0905             2             2             2             2
AST<int32_t, TreeType::IMBALANCED_LEFT, false, true>/ast_int32_imbalanced_unique_nulls/10000000/10/manual_time                 +0.1008         +0.1001             3             3             3             3
AST<int32_t, TreeType::IMBALANCED_LEFT, false, true>/ast_int32_imbalanced_unique_nulls/100000000/1/manual_time                 +0.0130         +0.0130             9            10             9            10
AST<int32_t, TreeType::IMBALANCED_LEFT, false, true>/ast_int32_imbalanced_unique_nulls/100000000/5/manual_time                 +0.0948         +0.0947            17            18            17            18
AST<int32_t, TreeType::IMBALANCED_LEFT, false, true>/ast_int32_imbalanced_unique_nulls/100000000/10/manual_time                +0.1004         +0.1003            27            29            27            29
AST<int32_t, TreeType::IMBALANCED_LEFT, true, true>/ast_int32_imbalanced_reuse_nulls/100000/1/manual_time                      -0.0674         -0.0438             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, true, true>/ast_int32_imbalanced_reuse_nulls/100000/5/manual_time                      -0.0451         -0.0300             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, true, true>/ast_int32_imbalanced_reuse_nulls/100000/10/manual_time                     -0.0398         -0.0296             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, true, true>/ast_int32_imbalanced_reuse_nulls/1000000/1/manual_time                     +0.0151         +0.0062             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, true, true>/ast_int32_imbalanced_reuse_nulls/1000000/5/manual_time                     +0.0585         +0.0476             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, true, true>/ast_int32_imbalanced_reuse_nulls/1000000/10/manual_time                    +0.0836         +0.0741             0             0             0             0
AST<int32_t, TreeType::IMBALANCED_LEFT, true, true>/ast_int32_imbalanced_reuse_nulls/10000000/1/manual_time                    +0.0172         +0.0168             1             1             1             1
AST<int32_t, TreeType::IMBALANCED_LEFT, true, true>/ast_int32_imbalanced_reuse_nulls/10000000/5/manual_time                    +0.0742         +0.0731             1             1             1             1
AST<int32_t, TreeType::IMBALANCED_LEFT, true, true>/ast_int32_imbalanced_reuse_nulls/10000000/10/manual_time                   +0.0963         +0.0954             2             2             2             2
AST<int32_t, TreeType::IMBALANCED_LEFT, true, true>/ast_int32_imbalanced_reuse_nulls/100000000/1/manual_time                   +0.0212         +0.0211             9             9             9             9
AST<int32_t, TreeType::IMBALANCED_LEFT, true, true>/ast_int32_imbalanced_reuse_nulls/100000000/5/manual_time                   +0.0777         +0.0775            12            13            12            13
AST<int32_t, TreeType::IMBALANCED_LEFT, true, true>/ast_int32_imbalanced_reuse_nulls/100000000/10/manual_time                  +0.0981         +0.0980            18            20            18            20
AST<double, TreeType::IMBALANCED_LEFT, false, true>/ast_double_imbalanced_unique_nulls/100000/1/manual_time                    -0.0191         -0.0168             0             0             0             0
AST<double, TreeType::IMBALANCED_LEFT, false, true>/ast_double_imbalanced_unique_nulls/100000/5/manual_time                    -0.0329         -0.0272             0             0             0             0
AST<double, TreeType::IMBALANCED_LEFT, false, true>/ast_double_imbalanced_unique_nulls/100000/10/manual_time                   -0.0341         -0.0316             0             0             0             0
AST<double, TreeType::IMBALANCED_LEFT, false, true>/ast_double_imbalanced_unique_nulls/1000000/1/manual_time                   +0.0095         +0.0063             0             0             0             0
AST<double, TreeType::IMBALANCED_LEFT, false, true>/ast_double_imbalanced_unique_nulls/1000000/5/manual_time                   +0.0418         +0.0382             0             0             0             0
AST<double, TreeType::IMBALANCED_LEFT, false, true>/ast_double_imbalanced_unique_nulls/1000000/10/manual_time                  +0.0321         +0.0304             0             0             0             0
AST<double, TreeType::IMBALANCED_LEFT, false, true>/ast_double_imbalanced_unique_nulls/10000000/1/manual_time                  +0.0141         +0.0136             1             1             1             1
AST<double, TreeType::IMBALANCED_LEFT, false, true>/ast_double_imbalanced_unique_nulls/10000000/5/manual_time                  +0.0593         +0.0587             2             2             2             2
AST<double, TreeType::IMBALANCED_LEFT, false, true>/ast_double_imbalanced_unique_nulls/10000000/10/manual_time                 +0.0282         +0.0281             3             3             3             3
AST<double, TreeType::IMBALANCED_LEFT, false, true>/ast_double_imbalanced_unique_nulls/100000000/1/manual_time                 +0.0148         +0.0147            11            11            11            11
AST<double, TreeType::IMBALANCED_LEFT, false, true>/ast_double_imbalanced_unique_nulls/100000000/5/manual_time                 +0.0576         +0.0575            19            20            19            20
AST<double, TreeType::IMBALANCED_LEFT, false, true>/ast_double_imbalanced_unique_nulls/100000000/10/manual_time                +0.0272         +0.0271            32            33            32            33

@karthikeyann
Copy link
Contributor Author

Mixed join nvbench has most increase upto 5%. Rest of join kernels are not impacted much.
similarly AST<int32_t, TreeType::IMBALANCED_LEFT, false, true>/ast_int32_imbalanced_unique_nulls/ are impacted upto 10%.

@GregoryKimball
Copy link
Contributor

GregoryKimball commented Apr 20, 2023

Based on our automated microbenchmarking, we see some large improvements to mixed semi and anti joins, and small degradation to mixed full, left and inner joins.

mixed semi and anti joins
image

mixed full, left, inner joins (with nulls)
image

also some AST regression (with nulls)
image

@abellina do you think this branch is worth testing with Spark-RAPIDS NDS?

@vyasr
Copy link
Contributor

vyasr commented Apr 24, 2023

Are we sure we trust those benchmark results? Aside from some very strange compiler quirk I don't see how adding a new operator would improve performance.

@GregoryKimball
Copy link
Contributor

Thanks @vyasr for your comment. I trust the results and find them surprising. Here is a breakdown by individual benchmark
image

@bdice
Copy link
Contributor

bdice commented Apr 24, 2023

@vyasr @GregoryKimball The AST performance is extremely hard to predict. I'm not surprised by this, but would be interested in knowing more about the kernel's register usage, shared memory usage, occupancy, etc.

@karthikeyann
Copy link
Contributor Author

karthikeyann commented Apr 25, 2023

Resource usage of
template <cudf::size_type max_block_size, bool has_nulls> void compute_column_kernel(table_device_view const table, ast::detail::expression_device_view device_expression_data, mutable_column_device_view output_column)

Before: (branch-23.06)

Function void cudf::detail::compute_column_kernel<(int)128, (bool)0>(cudf::table_device_view, cudf::ast::detail::expression_device_view, cudf::mutable_column_device_view):
REG:71 STACK:72 SHARED:0 LOCAL:0 CONSTANT[0]:512 CONSTANT[2]:5120 TEXTURE:0 SURFACE:0 SAMPLER:0
Function void cudf::detail::compute_column_kernel<(int)128, (bool)1>(cudf::table_device_view, cudf::ast::detail::expression_device_view, cudf::mutable_column_device_view):
REG:72 STACK:96 SHARED:0 LOCAL:0 CONSTANT[0]:512 CONSTANT[2]:5120 TEXTURE:0 SURFACE:0 SAMPLER:0

After: (This branch)

Function void cudf::detail::compute_column_kernel<(int)128, (bool)0>(cudf::table_device_view, cudf::ast::detail::expression_device_view, cudf::mutable_column_device_view):
REG:71 STACK:72 SHARED:0 LOCAL:0 CONSTANT[0]:512 CONSTANT[2]:5232 TEXTURE:0 SURFACE:0 SAMPLER:0
Function void cudf::detail::compute_column_kernel<(int)128, (bool)1>(cudf::table_device_view, cudf::ast::detail::expression_device_view, cudf::mutable_column_device_view):
REG:78 STACK:96 SHARED:0 LOCAL:0 CONSTANT[0]:512 CONSTANT[2]:5232 TEXTURE:0 SURFACE:0 SAMPLER:0

Shared memory didn't change. Register usage and constant usage changed.

Mixed join semi kernel with nulls has register usage reduced from 83 to 72. (only kernel where reduction of register usage, similarly benchmarks runtime reduced too)
All other kernels register usage are same or 1 register increased.

@vyasr
Copy link
Contributor

vyasr commented Apr 25, 2023

OK yeah so basically the compiler did something slightly different due to some internal heuristic that we have no visibility into. Probably not worth any real further consideration here (if we really wanted to we could try tweaking some internal compiler flags to see how it affects the optimizer but I don't think we'd learn anything actionable anyway).

@bdice
Copy link
Contributor

bdice commented Apr 25, 2023

Yup. Agreed with @vyasr here. What a funny thing for registers to drop from 83 to 72 with the increased complexity. 😆 That explains the perf difference but it’s inscrutable as to why.

@karthikeyann
Copy link
Contributor Author

Resource usage difference for all kernels:
(bool)0 means has_nulls=false, (bool)1 means has_nulls=true.

image

@github-actions github-actions bot added Java Affects Java cuDF API. Python Affects Python cuDF API. labels May 2, 2023
@karthikeyann karthikeyann added 3 - Ready for Review Ready for review by team and removed 2 - In Progress Currently a work in progress labels May 2, 2023
@karthikeyann karthikeyann marked this pull request as ready for review May 2, 2023 20:52
@karthikeyann karthikeyann requested review from a team as code owners May 2, 2023 20:52
Copy link
Member

@jlowe jlowe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor nit but otherwise lgtm.

Copy link
Contributor

@vyasr vyasr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Couple of small suggestions and questions, overall this looks great though.

cpp/tests/ast/transform_tests.cpp Show resolved Hide resolved
@karthikeyann
Copy link
Contributor Author

/merge

@rapids-bot rapids-bot bot merged commit 0361c72 into rapidsai:branch-23.06 May 16, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3 - Ready for Review Ready for review by team feature request New feature or request Java Affects Java cuDF API. libcudf Affects libcudf (C++/CUDA) code. non-breaking Non-breaking change Python Affects Python cuDF API.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants