Skip to content

Implement numerically stable M2 aggregation in hash-groupby - #24492

Merged
rapids-bot[bot] merged 22 commits into
NVIDIA:mainfrom
wence-:wence/fea/stable-m2
Nov 9, 2026
Merged

rapids-bot[bot] merged 22 commits into
NVIDIA:mainfrom
wence-:wence/fea/stable-m2

Conversation

@wence-

@wence- wence- commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Description

Previously, the hash-groupby aggregation computed the M2 aggregation in two passes as

$$ \sum x^2 - \frac{\left(\sum x\right)^2}{n}. $$

This is numerically very unstable and easily suffers from catastrophic cancellation such that although this is supposed to be a non-negative value (since it is $(x - \bar{x})^2$), we can easily end up with a negative M2.

For full column reductions for M2 we already use a numerically stable one-pass approach. Previously we did not do that for the hash-groupby since it requires 128bit CAS loops with some extra state. Now that hash-groupby has moved to HashCSR we can compute in one pass using the same one-pass approach. Note that the old approach is still used in the streaming-groupby code.

This is, unfortunately not a complete slam-dunk in terms of performance. Throughput degrades somewhat on B200 (see nvbench comparisons below). However, I argue that the performance drop is small enough that this is worthwhile so that it is numerically safe to use hash-groupby in more cases.

H100 Benchmark comparisons

groupby_m2_var_std

[0] NVIDIA H100 80GB HBM3

T U value_key_ratio num_rows null_probability num_aggs Ref Cmp Change Status
I32 11 20 100000 0 1 199.936 [-3.456, +1.088] us 195.360 [-3.936, +1.120] us AMBG
I32 11 100 100000 0 1 206.656 [-4.864, +1.408] us 203.040 [-5.088, +1.440] us AMBG
I32 11 20 10000000 0 1 931.680 [-4.800, +1.696] us 941.696 [-5.504, +1.792] us AMBG
I32 11 100 10000000 0 1 798.336 [-6.464, +1.696] us 801.824 [-4.960, +1.568] us AMBG
I32 11 20 50000000 0 1 4.851 ms [-217, +44] us 4.634 ms [-9, +2] us AMBG
I32 11 100 50000000 0 1 3.575 ms [-7, +2] us 3.605 ms [-7, +4] us >= +0.6% SLOW
I32 11 20 100000 0.03 1 204.096 [-2.752, +1.088] us 201.568 [-3.712, +1.184] us AMBG
I32 11 100 100000 0.03 1 217.504 [-6.112, +1.536] us 215.232 [-5.824, +1.504] us AMBG
I32 11 20 10000000 0.03 1 975.072 [-6.560, +2.304] us 982.528 [-7.488, +1.760] us AMBG
I32 11 100 10000000 0.03 1 818.336 [-6.304, +1.696] us 822.976 [-4.928, +1.568] us AMBG
I32 11 20 50000000 0.03 1 5.231 ms [-52, +14] us 4.858 ms [-10, +4] us <= -6.5% FAST
I32 11 100 50000000 0.03 1 3.666 ms [-6, +2] us 3.704 ms [-6, +2] us >= +0.8% SLOW
I32 11 20 100000 0.3 1 206.432 [-4.640, +4.096] us 202.272 [-4.000, +1.312] us AMBG
I32 11 100 100000 0.3 1 218.496 [-6.528, +7.840] us 215.392 [-6.112, +1.568] us AMBG
I32 11 20 10000000 0.3 1 966.560 [-14.688, +4.416] us 972.672 [-6.272, +1.664] us AMBG
I32 11 100 10000000 0.3 1 814.656 [-8.512, +11.328] us 818.944 [-5.920, +1.568] us AMBG
I32 11 20 50000000 0.3 1 4.830 ms [-42, +15] us 4.759 ms [-13, +2] us <= -0.6% FAST
I32 11 100 50000000 0.3 1 3.589 ms [-12, +8] us 3.637 ms [-7, +2] us >= +0.9% SLOW
I32 11 20 100000 0 5 314.400 [-5.984, +6.016] us 302.816 [-5.184, +1.856] us <= -1.2% FAST
I32 11 100 100000 0 5 360.960 [-12.032, +3.360] us 359.488 [-11.808, +3.072] us SAME
I32 11 20 10000000 0 5 1.522 ms [-6, +2] us 1.563 ms [-7, +1] us >= +2.1% SLOW
I32 11 100 10000000 0 5 1.264 ms [-18, +11] us 1.275 ms [-9, +2] us AMBG
I32 11 20 50000000 0 5 9.068 ms [-955, +228] us 7.770 ms [-17, +21] us <= -4.1% FAST
I32 11 100 50000000 0 5 5.668 ms [-10, +3] us 5.807 ms [-6, +3] us >= +2.3% SLOW
I32 11 20 100000 0.03 5 340.672 [-5.888, +2.016] us 334.880 [-7.776, +1.952] us AMBG
I32 11 100 100000 0.03 5 418.048 [-13.760, +4.480] us 421.216 [-16.768, +3.680] us AMBG
I32 11 20 10000000 0.03 5 1.736 ms [-14, +4] us 1.781 ms [-9, +3] us >= +1.9% SLOW
I32 11 100 10000000 0.03 5 1.353 ms [-8, +2] us 1.384 ms [-9, +3] us AMBG
I32 11 20 50000000 0.03 5 10.871 ms [-322, +48] us 8.712 ms [-37, +14] us <= -20.9% FAST
I32 11 100 50000000 0.03 5 6.127 ms [-8, +3] us 6.331 ms [-10, +3] us >= +3.1% SLOW
I32 11 20 100000 0.3 5 343.456 [-6.432, +2.112] us 339.392 [-8.832, +2.016] us AMBG
I32 11 100 100000 0.3 5 416.192 [-19.008, +3.840] us 422.912 [-15.456, +4.576] us AMBG
I32 11 20 10000000 0.3 5 1.638 ms [-12, +3] us 1.728 ms [-11, +2] us >= +4.6% SLOW
I32 11 100 10000000 0.3 5 1.322 ms [-9, +2] us 1.367 ms [-10, +3] us >= +2.5% SLOW
I32 11 20 50000000 0.3 5 8.981 ms [-172, +47] us 8.219 ms [-24, +12] us <= -7.0% FAST
I32 11 100 50000000 0.3 5 5.717 ms [-9, +3] us 6.017 ms [-12, +3] us >= +5.0% SLOW
I32 11 20 100000 0 10 453.056 [-9.824, +2.688] us 440.192 [-8.800, +2.944] us AMBG
I32 11 100 100000 0 10 549.632 [-22.272, +4.512] us 555.680 [-19.392, +5.920] us AMBG
I32 11 20 10000000 0 10 2.262 ms [-7, +2] us 2.353 ms [-10, +3] us >= +3.5% SLOW
I32 11 100 10000000 0 10 1.825 ms [-10, +3] us 1.868 ms [-12, +3] us >= +1.6% SLOW
I32 11 20 50000000 0 10 13.283 [-1.171, +0.287] ms 11.446 ms [-22, +27] us <= -5.6% FAST
I32 11 100 50000000 0 10 8.286 ms [-8, +5] us 8.573 ms [-10, +5] us >= +3.3% SLOW
I32 11 20 100000 0.03 10 509.120 [-8.768, +2.912] us 502.016 [-13.536, +2.944] us AMBG
I32 11 100 100000 0.03 10 668.448 [-30.912, +6.720] us 675.232 [-27.136, +6.400] us AMBG
I32 11 20 10000000 0.03 10 2.684 ms [-19, +5] us 2.773 ms [-12, +3] us >= +2.7% SLOW
I32 11 100 10000000 0.03 10 2.026 ms [-12, +4] us 2.084 ms [-13, +4] us >= +2.0% SLOW
I32 11 20 50000000 0.03 10 18.224 ms [-363, +103] us 13.775 ms [-27, +13] us <= -29.5% FAST
I32 11 100 50000000 0.03 10 9.202 ms [-11, +3] us 9.598 ms [-9, +6] us >= +4.2% SLOW
I32 11 20 100000 0.3 10 514.656 [-10.720, +3.232] us 509.088 [-10.848, +3.104] us AMBG
I32 11 100 100000 0.3 10 664.000 [-32.064, +8.128] us 676.768 [-26.048, +7.584] us AMBG
I32 11 20 10000000 0.3 10 2.494 ms [-12, +4] us 2.665 ms [-16, +2] us >= +6.1% SLOW
I32 11 100 10000000 0.3 10 1.954 ms [-13, +4] us 2.041 ms [-12, +3] us >= +3.6% SLOW
I32 11 20 50000000 0.3 10 14.130 ms [-336, +89] us 12.941 ms [-37, +45] us <= -6.2% FAST
I32 11 100 50000000 0.3 10 8.368 ms [-13, +2] us 8.950 ms [-10, +5] us >= +6.8% SLOW
I32 12 20 100000 0 1 233.152 [-4.448, +5.888] us 230.112 [-4.864, +5.888] us AMBG
I32 12 100 100000 0 1 240.032 [-7.232, +5.056] us 240.608 [-10.144, +3.072] us AMBG
I32 12 20 10000000 0 1 975.520 [-5.984, +1.760] us 984.544 [-10.272, +1.920] us AMBG
I32 12 100 10000000 0 1 831.072 [-6.528, +2.464] us 835.008 [-6.592, +2.496] us SAME
I32 12 20 50000000 0 1 4.983 ms [-285, +11] us 4.701 ms [-6, +3] us AMBG
I32 12 100 50000000 0 1 3.617 ms [-15, +2] us 3.648 ms [-12, +3] us AMBG
I32 12 20 100000 0.03 1 239.040 [-4.544, +2.112] us 236.992 [-5.696, +5.600] us AMBG
I32 12 100 100000 0.03 1 250.080 [-6.240, +2.784] us 248.992 [-5.952, +4.128] us AMBG
I32 12 20 10000000 0.03 1 1.013 ms [-12, +3] us 1.026 ms [-12, +2] us AMBG
I32 12 100 10000000 0.03 1 850.880 [-5.696, +2.496] us 857.600 [-6.976, +1.696] us AMBG
I32 12 20 50000000 0.03 1 5.336 ms [-21, +4] us 4.924 ms [-10, +5] us <= -7.8% FAST
I32 12 100 50000000 0.03 1 3.707 ms [-14, +2] us 3.749 ms [-11, +3] us >= +0.8% SLOW
I32 12 20 100000 0.3 1 240.224 [-4.640, +2.272] us 240.480 [-6.816, +4.192] us AMBG
I32 12 100 100000 0.3 1 249.504 [-6.528, +2.688] us 248.864 [-6.432, +3.488] us AMBG
I32 12 20 10000000 0.3 1 997.952 [-6.208, +2.240] us 1.016 ms [-11, +2] us AMBG
I32 12 100 10000000 0.3 1 842.912 [-6.464, +2.944] us 853.248 [-6.816, +2.176] us AMBG
I32 12 20 50000000 0.3 1 4.929 ms [-79, +13] us 4.826 ms [-11, +3] us AMBG
I32 12 100 50000000 0.3 1 3.622 ms [-12, +2] us 3.683 ms [-8, +3] us >= +1.4% SLOW
I32 12 20 100000 0 5 485.728 [-9.600, +4.928] us 470.560 [-8.928, +5.376] us AMBG
I32 12 100 100000 0 5 524.352 [-14.496, +4.800] us 522.304 [-15.168, +4.992] us SAME
I32 12 20 10000000 0 5 1.741 ms [-17, +3] us 1.782 ms [-19, +3] us >= +1.0% SLOW
I32 12 100 10000000 0 5 1.428 ms [-16, +6] us 1.462 ms [-22, +6] us AMBG
I32 12 20 50000000 0 5 8.607 ms [-773, +178] us 7.790 ms [-11, +4] us <= -0.5% FAST
I32 12 100 50000000 0 5 5.891 ms [-15, +5] us 6.036 ms [-13, +3] us >= +2.2% SLOW
I32 12 20 100000 0.03 5 513.632 [-9.632, +4.896] us 506.304 [-8.256, +4.064] us AMBG
I32 12 100 100000 0.03 5 583.936 [-17.024, +5.504] us 583.328 [-19.200, +4.896] us SAME
I32 12 20 10000000 0.03 5 1.952 ms [-25, +4] us 1.992 ms [-16, +4] us >= +1.1% SLOW
I32 12 100 10000000 0.03 5 1.525 ms [-13, +6] us 1.568 ms [-19, +7] us >= +1.2% SLOW
I32 12 20 50000000 0.03 5 10.856 ms [-163, +31] us 8.922 ms [-25, +6] us <= -19.8% FAST
I32 12 100 50000000 0.03 5 6.350 ms [-23, +4] us 6.548 ms [-13, +5] us >= +2.8% SLOW
I32 12 20 100000 0.3 5 519.584 [-11.040, +4.128] us 513.888 [-10.560, +5.024] us AMBG
I32 12 100 100000 0.3 5 582.656 [-19.328, +6.048] us 584.064 [-20.224, +6.144] us SAME
I32 12 20 10000000 0.3 5 1.860 ms [-24, +5] us 1.945 ms [-17, +3] us >= +3.4% SLOW
I32 12 100 10000000 0.3 5 1.493 ms [-14, +6] us 1.550 ms [-19, +6] us >= +2.1% SLOW
I32 12 20 50000000 0.3 5 8.842 ms [-152, +39] us 8.435 ms [-14, +4] us <= -3.0% FAST
I32 12 100 50000000 0.3 5 5.936 ms [-11, +4] us 6.217 ms [-16, +7] us >= +4.4% SLOW
I32 12 20 100000 0 10 801.408 [-14.752, +5.152] us 783.392 [-19.008, +6.656] us AMBG
I32 12 100 100000 0 10 875.936 [-20.288, +6.624] us 877.920 [-23.904, +5.952] us SAME
I32 12 20 10000000 0 10 2.717 ms [-32, +5] us 2.806 ms [-15, +4] us >= +2.5% SLOW
I32 12 100 10000000 0 10 2.174 ms [-22, +8] us 2.247 ms [-32, +9] us >= +1.5% SLOW
I32 12 20 50000000 0 10 13.360 [-1.306, +0.275] ms 11.673 ms [-9, +5] us <= -3.2% FAST
I32 12 100 50000000 0 10 8.738 ms [-23, +5] us 9.021 ms [-14, +4] us >= +3.0% SLOW
I32 12 20 100000 0.03 10 857.632 [-14.816, +4.576] us 851.328 [-18.496, +6.816] us AMBG
I32 12 100 100000 0.03 10 995.360 [-25.952, +7.648] us 1.005 ms [-28, +9] us AMBG
I32 12 20 10000000 0.03 10 3.116 ms [-38, +9] us 3.222 ms [-16, +5] us >= +2.6% SLOW
I32 12 100 10000000 0.03 10 2.369 ms [-21, +7] us 2.461 ms [-30, +9] us >= +2.3% SLOW
I32 12 20 50000000 0.03 10 19.200 ms [-462, +148] us 15.090 ms [-99, +984] us <= -16.6% FAST
I32 12 100 50000000 0.03 10 9.644 ms [-20, +8] us 10.040 ms [-16, +6] us >= +3.9% SLOW
I32 12 20 100000 0.3 10 867.616 [-14.848, +4.800] us 864.032 [-20.320, +7.488] us SAME
I32 12 100 100000 0.3 10 996.640 [-28.288, +9.696] us 1.006 ms [-38, +8] us AMBG
I32 12 20 10000000 0.3 10 2.946 ms [-33, +8] us 3.122 ms [-20, +5] us >= +5.1% SLOW
I32 12 100 10000000 0.3 10 2.301 ms [-21, +7] us 2.421 ms [-34, +9] us >= +3.4% SLOW
I32 12 20 50000000 0.3 10 15.211 ms [-270, +155] us 14.115 ms [-102, +131] us <= -4.9% FAST
I32 12 100 50000000 0.3 10 8.815 ms [-29, +6] us 9.394 ms [-11, +5] us >= +6.4% SLOW
F64 11 20 100000 0 1 202.304 [-3.296, +1.024] us 197.312 [-3.936, +0.992] us AMBG
F64 11 100 100000 0 1 207.264 [-5.216, +1.472] us 203.584 [-4.608, +1.440] us AMBG
F64 11 20 10000000 0 1 956.032 [-6.368, +2.496] us 959.712 [-4.896, +1.440] us SAME
F64 11 100 10000000 0 1 816.256 [-5.696, +1.696] us 814.848 [-5.280, +1.856] us SAME
F64 11 20 50000000 0 1 5.024 ms [-303, +17] us 4.690 ms [-6, +3] us <= -0.6% FAST
F64 11 100 50000000 0 1 3.633 ms [-5, +3] us 3.643 ms [-5, +2] us AMBG
F64 11 20 100000 0.03 1 208.256 [-3.552, +1.120] us 202.944 [-3.616, +1.152] us AMBG
F64 11 100 100000 0.03 1 219.392 [-5.280, +1.664] us 215.744 [-5.952, +1.568] us AMBG
F64 11 20 10000000 0.03 1 988.256 [-6.848, +1.792] us 991.360 [-6.176, +2.016] us SAME
F64 11 100 10000000 0.03 1 835.040 [-6.368, +1.664] us 833.856 [-4.704, +1.792] us SAME
F64 11 20 50000000 0.03 1 5.360 ms [-112, +4] us 4.896 ms [-8, +2] us <= -7.2% FAST
F64 11 100 50000000 0.03 1 3.717 ms [-5, +2] us 3.740 ms [-4, +2] us AMBG
F64 11 20 100000 0.3 1 209.152 [-3.392, +1.248] us 203.680 [-3.456, +1.216] us AMBG
F64 11 100 100000 0.3 1 220.288 [-6.368, +1.696] us 216.672 [-5.952, +1.568] us AMBG
F64 11 20 10000000 0.3 1 962.560 [-5.184, +1.568] us 975.968 [-6.400, +1.440] us >= +0.6% SLOW
F64 11 100 10000000 0.3 1 820.448 [-5.728, +1.824] us 823.104 [-6.336, +1.696] us SAME
F64 11 20 50000000 0.3 1 4.927 ms [-98, +15] us 4.777 ms [-12, +3] us <= -1.0% FAST
F64 11 100 50000000 0.3 1 3.617 ms [-5, +2] us 3.652 ms [-5, +2] us >= +0.8% SLOW
F64 11 20 100000 0 5 335.232 [-5.696, +1.600] us 315.712 [-5.856, +1.792] us <= -3.8% FAST
F64 11 100 100000 0 5 373.376 [-9.984, +3.296] us 361.856 [-12.640, +3.168] us AMBG
F64 11 20 10000000 0 5 1.640 ms [-8, +3] us 1.649 ms [-8, +2] us AMBG
F64 11 100 10000000 0 5 1.361 ms [-12, +3] us 1.342 ms [-8, +2] us AMBG
F64 11 20 50000000 0 5 9.429 ms [-532, +50] us 7.763 ms [-8, +2] us <= -14.6% FAST
F64 11 100 50000000 0 5 5.939 ms [-9, +3] us 6.008 ms [-11, +2] us >= +0.9% SLOW
F64 11 20 100000 0.03 5 363.648 [-6.752, +1.888] us 345.184 [-6.464, +2.048] us <= -2.8% FAST
F64 11 100 100000 0.03 5 433.696 [-18.112, +4.032] us 421.600 [-14.720, +3.552] us AMBG
F64 11 20 10000000 0.03 5 1.818 ms [-12, +4] us 1.819 ms [-10, +2] us SAME
F64 11 100 10000000 0.03 5 1.454 ms [-8, +3] us 1.438 ms [-10, +2] us AMBG
F64 11 20 50000000 0.03 5 10.976 ms [-362, +37] us 8.779 ms [-20, +9] us <= -20.8% FAST
F64 11 100 50000000 0.03 5 6.371 ms [-11, +2] us 6.507 ms [-10, +3] us >= +1.9% SLOW
F64 11 20 100000 0.3 5 367.392 [-8.256, +2.176] us 347.584 [-7.840, +2.112] us <= -2.7% FAST
F64 11 100 100000 0.3 5 437.760 [-15.104, +3.936] us 425.312 [-16.544, +4.160] us AMBG
F64 11 20 10000000 0.3 5 1.695 ms [-10, +4] us 1.745 ms [-9, +3] us >= +2.2% SLOW
F64 11 100 10000000 0.3 5 1.384 ms [-11, +3] us 1.384 ms [-9, +3] us SAME
F64 11 20 50000000 0.3 5 8.805 ms [-206, +47] us 8.201 ms [-14, +6] us <= -4.8% FAST
F64 11 100 50000000 0.3 5 5.879 ms [-12, +2] us 6.070 ms [-10, +3] us >= +3.0% SLOW
F64 11 20 100000 0 10 502.720 [-9.600, +3.136] us 466.656 [-10.144, +3.104] us <= -5.0% FAST
F64 11 100 100000 0 10 584.448 [-22.272, +5.280] us 562.240 [-18.432, +4.608] us AMBG
F64 11 20 10000000 0 10 2.493 ms [-10, +3] us 2.513 ms [-8, +2] us AMBG
F64 11 100 10000000 0 10 2.042 ms [-13, +4] us 2.003 ms [-14, +3] us <= -1.1% FAST
F64 11 20 50000000 0 10 14.869 ms [-489, +77] us 11.606 ms [-9, +3] us <= -23.9% FAST
F64 11 100 50000000 0 10 8.811 ms [-9, +3] us 8.966 ms [-7, +2] us >= +1.6% SLOW
F64 11 20 100000 0.03 10 559.904 [-10.720, +3.232] us 523.808 [-11.360, +3.328] us <= -4.2% FAST
F64 11 100 100000 0.03 10 701.792 [-24.256, +6.432] us 679.552 [-25.728, +6.784] us AMBG
F64 11 20 10000000 0.03 10 2.848 ms [-16, +4] us 2.856 ms [-13, +3] us SAME
F64 11 100 10000000 0.03 10 2.229 ms [-13, +4] us 2.200 ms [-17, +4] us <= -0.5% FAST
F64 11 20 50000000 0.03 10 18.086 ms [-260, +66] us 13.664 ms [-25, +5] us <= -30.4% FAST
F64 11 100 50000000 0.03 10 9.720 ms [-15, +4] us 9.952 ms [-9, +5] us >= +2.3% SLOW
F64 11 20 100000 0.3 10 567.520 [-11.936, +3.616] us 529.088 [-10.688, +3.296] us <= -4.4% FAST
F64 11 100 100000 0.3 10 709.408 [-26.944, +7.872] us 688.992 [-37.472, +8.800] us AMBG
F64 11 20 10000000 0.3 10 2.605 ms [-13, +4] us 2.708 ms [-14, +3] us >= +3.3% SLOW
F64 11 100 10000000 0.3 10 2.088 ms [-16, +4] us 2.088 ms [-14, +3] us SAME
F64 11 20 50000000 0.3 10 13.899 ms [-272, +55] us 12.497 ms [-26, +8] us <= -9.0% FAST
F64 11 100 50000000 0.3 10 8.727 ms [-9, +4] us 9.076 ms [-7, +4] us >= +3.9% SLOW
F64 12 20 100000 0 1 237.792 [-4.384, +5.952] us 232.256 [-4.224, +2.304] us AMBG
F64 12 100 100000 0 1 240.608 [-5.504, +2.304] us 235.904 [-5.440, +1.600] us AMBG
F64 12 20 10000000 0 1 999.840 [-6.912, +2.048] us 1.002 ms [-10, +2] us SAME
F64 12 100 10000000 0 1 851.968 [-5.344, +2.144] us 850.112 [-8.224, +3.072] us SAME
F64 12 20 50000000 0 1 5.108 ms [-118, +17] us 4.753 ms [-5, +2] us <= -4.9% FAST
F64 12 100 50000000 0 1 3.677 ms [-9, +2] us 3.686 ms [-6, +2] us AMBG
F64 12 20 100000 0.03 1 243.744 [-5.280, +5.536] us 238.016 [-4.672, +1.728] us AMBG
F64 12 100 100000 0.03 1 252.640 [-5.984, +1.856] us 248.736 [-5.344, +1.632] us AMBG
F64 12 20 10000000 0.03 1 1.034 ms [-7, +2] us 1.033 ms [-13, +2] us SAME
F64 12 100 10000000 0.03 1 869.792 [-6.592, +2.688] us 867.360 [-7.616, +2.016] us SAME
F64 12 20 50000000 0.03 1 5.405 ms [-62, +15] us 4.968 ms [-13, +3] us <= -7.5% FAST
F64 12 100 50000000 0.03 1 3.765 ms [-11, +3] us 3.787 ms [-7, +2] us AMBG
F64 12 20 100000 0.3 1 244.896 [-5.344, +5.024] us 239.136 [-5.504, +1.888] us AMBG
F64 12 100 100000 0.3 1 253.632 [-6.848, +2.144] us 250.528 [-6.016, +2.016] us AMBG
F64 12 20 10000000 0.3 1 1.007 ms [-11, +3] us 1.019 ms [-11, +2] us AMBG
F64 12 100 10000000 0.3 1 855.648 [-6.272, +2.048] us 856.512 [-7.232, +3.360] us SAME
F64 12 20 50000000 0.3 1 5.002 ms [-74, +17] us 4.848 ms [-9, +3] us <= -1.6% FAST
F64 12 100 50000000 0.3 1 3.665 ms [-13, +3] us 3.698 ms [-7, +2] us >= +0.6% SLOW
F64 12 20 100000 0 5 509.888 [-8.512, +3.584] us 487.584 [-13.024, +4.672] us <= -1.9% FAST
F64 12 100 100000 0 5 540.960 [-12.128, +3.648] us 522.336 [-14.112, +4.384] us AMBG
F64 12 20 10000000 0 5 1.862 ms [-24, +5] us 1.866 ms [-14, +3] us SAME
F64 12 100 10000000 0 5 1.541 ms [-14, +5] us 1.531 ms [-22, +6] us AMBG
F64 12 20 50000000 0 5 9.750 ms [-475, +51] us 8.066 ms [-10, +4] us <= -14.9% FAST
F64 12 100 50000000 0 5 6.154 ms [-16, +7] us 6.224 ms [-12, +3] us >= +0.8% SLOW
F64 12 20 100000 0.03 5 538.400 [-8.640, +3.872] us 514.784 [-9.600, +4.256] us <= -2.1% FAST
F64 12 100 100000 0.03 5 600.672 [-16.864, +4.928] us 582.720 [-15.328, +5.408] us AMBG
F64 12 20 10000000 0.03 5 2.038 ms [-22, +5] us 2.039 ms [-18, +4] us SAME
F64 12 100 10000000 0.03 5 1.634 ms [-14, +4] us 1.628 ms [-21, +6] us AMBG
F64 12 20 50000000 0.03 5 11.326 ms [-169, +45] us 9.093 ms [-23, +4] us <= -22.7% FAST
F64 12 100 50000000 0.03 5 6.613 ms [-14, +4] us 6.718 ms [-17, +3] us >= +1.3% SLOW
F64 12 20 100000 0.3 5 542.592 [-8.192, +4.192] us 518.944 [-9.792, +3.872] us <= -2.2% FAST
F64 12 100 100000 0.3 5 604.320 [-20.032, +4.864] us 588.160 [-18.944, +5.952] us AMBG
F64 12 20 10000000 0.3 5 1.907 ms [-22, +6] us 1.972 ms [-17, +3] us >= +2.2% SLOW
F64 12 100 10000000 0.3 5 1.561 ms [-14, +6] us 1.573 ms [-21, +6] us AMBG
F64 12 20 50000000 0.3 5 9.291 ms [-120, +19] us 8.510 ms [-17, +7] us <= -7.7% FAST
F64 12 100 50000000 0.3 5 6.112 ms [-18, +7] us 6.280 ms [-11, +3] us >= +2.5% SLOW
F64 12 20 100000 0 10 853.440 [-15.584, +5.696] us 806.528 [-13.312, +6.272] us <= -3.1% FAST
F64 12 100 100000 0 10 918.848 [-27.296, +6.112] us 885.728 [-24.448, +5.984] us AMBG
F64 12 20 10000000 0 10 2.944 ms [-33, +6] us 2.960 ms [-16, +4] us AMBG
F64 12 100 10000000 0 10 2.400 ms [-23, +7] us 2.382 ms [-31, +9] us AMBG
F64 12 20 50000000 0 10 15.576 ms [-403, +88] us 12.237 ms [-12, +3] us <= -24.0% FAST
F64 12 100 50000000 0 10 9.270 ms [-20, +5] us 9.400 ms [-18, +6] us >= +1.2% SLOW
F64 12 20 100000 0.03 10 911.808 [-16.064, +5.760] us 868.544 [-18.112, +6.912] us <= -2.3% FAST
F64 12 100 100000 0.03 10 1.033 ms [-29, +8] us 1.007 ms [-24, +8] us AMBG
F64 12 20 10000000 0.03 10 3.303 ms [-32, +9] us 3.307 ms [-21, +4] us SAME
F64 12 100 10000000 0.03 10 2.585 ms [-19, +5] us 2.575 ms [-32, +10] us AMBG
F64 12 20 50000000 0.03 10 18.746 ms [-201, +55] us 14.289 ms [-28, +3] us <= -29.8% FAST
F64 12 100 50000000 0.03 10 10.171 ms [-19, +5] us 10.391 ms [-13, +5] us >= +2.0% SLOW
F64 12 20 100000 0.3 10 922.336 [-16.416, +4.928] us 883.104 [-20.928, +6.656] us <= -1.8% FAST
F64 12 100 100000 0.3 10 1.044 ms [-26, +8] us 1.015 ms [-29, +8] us AMBG
F64 12 20 10000000 0.3 10 3.061 ms [-39, +9] us 3.166 ms [-18, +5] us >= +2.5% SLOW
F64 12 100 10000000 0.3 10 2.443 ms [-18, +6] us 2.469 ms [-35, +9] us AMBG
F64 12 20 50000000 0.3 10 14.461 ms [-322, +72] us 13.127 ms [-19, +7] us <= -7.7% FAST
F64 12 100 50000000 0.3 10 9.179 ms [-27, +7] us 9.518 ms [-16, +7] us >= +3.4% SLOW
B200 Benchmark comparisons

groupby_m2_var_std

[0] NVIDIA B200

T U value_key_ratio num_rows null_probability num_aggs Ref Cmp Change Status
I32 11 20 100000 0 1 234.880 [-20.576, +6.144] us 224.608 [-13.344, +2.048] us AMBG
I32 11 100 100000 0 1 238.208 [-16.672, +3.872] us 234.816 [-15.360, +2.048] us AMBG
I32 11 20 10000000 0 1 730.496 [-12.320, +2.720] us 746.752 [-15.360, +2.208] us AMBG
I32 11 100 10000000 0 1 639.296 [-22.368, +20.544] us 682.464 [-13.408, +2.912] us >= +1.4% SLOW
I32 11 20 50000000 0 1 3.022 ms [-10, +3] us 3.244 ms [-10, +2] us >= +6.9% SLOW
I32 11 100 50000000 0 1 2.322 ms [-10, +3] us 2.585 ms [-17, +2] us >= +10.4% SLOW
I32 11 20 100000 0.03 1 226.624 [-14.368, +2.048] us 229.728 [-12.288, +2.048] us AMBG
I32 11 100 100000 0.03 1 230.720 [-14.336, +2.048] us 247.104 [-12.288, +2.080] us >= +0.9% SLOW
I32 11 20 10000000 0.03 1 732.448 [-14.144, +2.080] us 772.384 [-14.368, +2.048] us >= +3.2% SLOW
I32 11 100 10000000 0.03 1 661.824 [-14.336, +4.096] us 710.144 [-14.432, +2.880] us >= +4.5% SLOW
I32 11 20 50000000 0.03 1 3.125 ms [-11, +3] us 3.361 ms [-10, +3] us >= +7.1% SLOW
I32 11 100 50000000 0.03 1 2.414 ms [-11, +2] us 2.675 ms [-11, +2] us >= +10.3% SLOW
I32 11 20 100000 0.3 1 227.456 [-14.144, +2.112] us 229.888 [-12.480, +1.952] us AMBG
I32 11 100 100000 0.3 1 229.696 [-14.432, +2.048] us 247.104 [-14.336, +2.144] us AMBG
I32 11 20 10000000 0.3 1 725.152 [-16.256, +2.176] us 770.336 [-15.328, +3.008] us >= +3.8% SLOW
I32 11 100 10000000 0.3 1 658.752 [-15.360, +3.072] us 710.016 [-15.424, +2.976] us >= +5.0% SLOW
I32 11 20 50000000 0.3 1 3.084 ms [-13, +3] us 3.339 ms [-13, +3] us >= +7.7% SLOW
I32 11 100 50000000 0.3 1 2.389 ms [-15, +3] us 2.662 ms [-9, +2] us >= +10.9% SLOW
I32 11 20 100000 0 5 305.472 [-14.336, +2.080] us 336.192 [-16.384, +3.072] us >= +4.0% SLOW
I32 11 100 100000 0 5 314.688 [-13.312, +2.048] us 406.912 [-19.520, +4.128] us >= +22.3% SLOW
I32 11 20 10000000 0 5 1.035 ms [-15, +3] us 1.228 ms [-15, +2] us >= +16.9% SLOW
I32 11 100 10000000 0 5 911.648 [-17.408, +3.072] us 1.156 ms [-16, +3] us >= +24.6% SLOW
I32 11 20 50000000 0 5 5.088 ms [-23, +9] us 5.998 ms [-26, +4] us >= +17.2% SLOW
I32 11 100 50000000 0 5 3.513 ms [-12, +3] us 4.840 ms [-14, +4] us >= +37.3% SLOW
I32 11 20 100000 0.03 5 339.264 [-15.360, +2.240] us 370.016 [-20.544, +3.040] us >= +2.3% SLOW
I32 11 100 100000 0.03 5 373.088 [-18.560, +3.072] us 464.192 [-21.600, +4.096] us >= +17.7% SLOW
I32 11 20 10000000 0.03 5 1.138 ms [-15, +3] us 1.351 ms [-17, +3] us >= +16.9% SLOW
I32 11 100 10000000 0.03 5 1.031 ms [-17, +4] us 1.284 ms [-14, +3] us >= +22.7% SLOW
I32 11 20 50000000 0.03 5 5.751 ms [-36, +14] us 6.688 ms [-13, +5] us >= +15.8% SLOW
I32 11 100 50000000 0.03 5 3.963 ms [-15, +3] us 5.283 ms [-11, +4] us >= +32.9% SLOW
I32 11 20 100000 0.3 5 351.520 [-12.160, +3.168] us 373.056 [-14.368, +2.048] us >= +1.1% SLOW
I32 11 100 100000 0.3 5 380.256 [-17.408, +3.936] us 467.264 [-24.576, +7.168] us >= +15.2% SLOW
I32 11 20 10000000 0.3 5 1.123 ms [-16, +3] us 1.348 ms [-17, +4] us >= +18.2% SLOW
I32 11 100 10000000 0.3 5 1.026 ms [-20, +3] us 1.288 ms [-19, +3] us >= +23.3% SLOW
I32 11 20 50000000 0.3 5 5.480 ms [-26, +5] us 6.573 ms [-19, +6] us >= +19.5% SLOW
I32 11 100 50000000 0.3 5 3.857 ms [-12, +2] us 5.226 ms [-9, +4] us >= +35.2% SLOW
I32 11 20 100000 0 10 412.064 [-18.528, +2.944] us 473.536 [-15.488, +3.968] us >= +10.4% SLOW
I32 11 100 100000 0 10 432.448 [-14.336, +3.040] us 621.952 [-36.992, +6.080] us >= +34.3% SLOW
I32 11 20 10000000 0 10 1.448 ms [-17, +4] us 1.832 ms [-14, +3] us >= +25.2% SLOW
I32 11 100 10000000 0 10 1.260 ms [-21, +4] us 1.751 ms [-18, +4] us >= +37.2% SLOW
I32 11 20 50000000 0 10 6.974 ms [-33, +11] us 9.254 ms [-15, +6] us >= +32.3% SLOW
I32 11 100 50000000 0 10 5.024 ms [-18, +3] us 7.676 ms [-14, +4] us >= +52.4% SLOW
I32 11 20 100000 0.03 10 489.824 [-22.464, +7.200] us 547.072 [-24.384, +3.168] us >= +5.2% SLOW
I32 11 100 100000 0.03 10 551.264 [-26.816, +5.088] us 745.824 [-27.680, +8.352] us >= +29.1% SLOW
I32 11 20 10000000 0.03 10 1.646 ms [-17, +3] us 2.082 ms [-18, +4] us >= +25.2% SLOW
I32 11 100 10000000 0.03 10 1.496 ms [-17, +5] us 2.020 ms [-22, +4] us >= +33.0% SLOW
I32 11 20 50000000 0.03 10 8.773 ms [-35, +9] us 10.752 ms [-27, +61] us >= +22.1% SLOW
I32 11 100 50000000 0.03 10 5.885 ms [-15, +4] us 8.542 ms [-12, +3] us >= +44.8% SLOW
I32 11 20 100000 0.3 10 486.752 [-18.592, +4.096] us 551.232 [-15.328, +2.048] us >= +9.2% SLOW
I32 11 100 100000 0.3 10 553.248 [-27.744, +3.008] us 729.408 [-31.712, +8.288] us >= +25.4% SLOW
I32 11 20 10000000 0.3 10 1.621 ms [-16, +3] us 2.071 ms [-12, +3] us >= +26.7% SLOW
I32 11 100 10000000 0.3 10 1.497 ms [-22, +6] us 2.015 ms [-24, +5] us >= +32.4% SLOW
I32 11 20 50000000 0.3 10 8.281 ms [-33, +10] us 10.520 ms [-20, +7] us >= +26.7% SLOW
I32 11 100 50000000 0.3 10 5.708 ms [-26, +7] us 8.433 ms [-13, +3] us >= +47.3% SLOW
I32 12 20 100000 0 1 256.768 [-15.488, +2.304] us 260.672 [-13.920, +2.112] us AMBG
I32 12 100 100000 0 1 253.920 [-14.592, +2.432] us 270.272 [-16.288, +2.464] us AMBG
I32 12 20 10000000 0 1 746.816 [-16.512, +3.168] us 784.704 [-14.304, +2.144] us >= +2.7% SLOW
I32 12 100 10000000 0 1 673.216 [-17.920, +2.912] us 720.160 [-15.232, +2.432] us >= +4.3% SLOW
I32 12 20 50000000 0 1 3.088 ms [-15, +2] us 3.311 ms [-11, +3] us >= +6.8% SLOW
I32 12 100 50000000 0 1 2.368 ms [-12, +3] us 2.627 ms [-17, +2] us >= +10.1% SLOW
I32 12 20 100000 0.03 1 268.416 [-14.560, +2.496] us 267.424 [-13.856, +1.856] us SAME
I32 12 100 100000 0.03 1 273.184 [-14.688, +3.392] us 282.176 [-16.256, +2.720] us AMBG
I32 12 20 10000000 0.03 1 771.552 [-18.432, +3.904] us 813.568 [-14.432, +2.848] us >= +3.1% SLOW
I32 12 100 10000000 0.03 1 699.040 [-18.464, +3.936] us 747.264 [-17.248, +2.720] us >= +3.8% SLOW
I32 12 20 50000000 0.03 1 3.183 ms [-15, +3] us 3.424 ms [-9, +2] us >= +7.2% SLOW
I32 12 100 50000000 0.03 1 2.454 ms [-16, +3] us 2.715 ms [-10, +2] us >= +10.1% SLOW
I32 12 20 100000 0.3 1 272.224 [-15.872, +3.648] us 269.952 [-15.008, +1.856] us AMBG
I32 12 100 100000 0.3 1 276.544 [-12.448, +2.368] us 281.984 [-17.024, +3.008] us AMBG
I32 12 20 10000000 0.3 1 777.824 [-17.536, +3.776] us 812.736 [-12.608, +2.720] us >= +2.4% SLOW
I32 12 100 10000000 0.3 1 700.544 [-23.168, +11.456] us 746.752 [-13.344, +2.368] us >= +3.0% SLOW
I32 12 20 50000000 0.3 1 3.144 ms [-13, +3] us 3.402 ms [-11, +3] us >= +7.7% SLOW
I32 12 100 50000000 0.3 1 2.430 ms [-11, +3] us 2.704 ms [-10, +3] us >= +10.7% SLOW
I32 12 20 100000 0 5 491.392 [-20.864, +4.224] us 520.896 [-20.192, +3.712] us >= +1.0% SLOW
I32 12 100 100000 0 5 491.584 [-20.928, +3.232] us 585.344 [-21.952, +3.904] us >= +13.9% SLOW
I32 12 20 10000000 0 5 1.240 ms [-23, +4] us 1.438 ms [-18, +3] us >= +14.2% SLOW
I32 12 100 10000000 0 5 1.109 ms [-21, +4] us 1.362 ms [-27, +4] us >= +19.9% SLOW
I32 12 20 50000000 0 5 4.929 ms [-13, +7] us 6.059 ms [-12, +5] us >= +22.5% SLOW
I32 12 100 50000000 0 5 3.736 ms [-17, +4] us 5.046 ms [-15, +5] us >= +34.5% SLOW
I32 12 20 100000 0.03 5 539.392 [-30.592, +6.464] us 556.896 [-21.696, +4.256] us AMBG
I32 12 100 100000 0.03 5 551.072 [-25.984, +5.440] us 644.480 [-21.952, +4.576] us >= +11.9% SLOW
I32 12 20 10000000 0.03 5 1.348 ms [-21, +5] us 1.566 ms [-28, +3] us >= +13.7% SLOW
I32 12 100 10000000 0.03 5 1.226 ms [-23, +5] us 1.491 ms [-24, +4] us >= +19.2% SLOW
I32 12 20 50000000 0.03 5 5.403 ms [-13, +3] us 6.647 ms [-16, +3] us >= +22.7% SLOW
I32 12 100 50000000 0.03 5 4.155 ms [-17, +3] us 5.486 ms [-12, +4] us >= +31.6% SLOW
I32 12 20 100000 0.3 5 533.600 [-24.800, +4.256] us 565.984 [-22.432, +3.680] us >= +1.1% SLOW
I32 12 100 100000 0.3 5 549.728 [-21.696, +3.744] us 642.944 [-23.968, +5.632] us >= +11.8% SLOW
I32 12 20 10000000 0.3 5 1.333 ms [-20, +3] us 1.560 ms [-17, +4] us >= +15.4% SLOW
I32 12 100 10000000 0.3 5 1.220 ms [-26, +4] us 1.495 ms [-22, +4] us >= +20.4% SLOW
I32 12 20 50000000 0.3 5 5.222 ms [-16, +3] us 6.535 ms [-18, +3] us >= +24.7% SLOW
I32 12 100 50000000 0.3 5 4.060 ms [-13, +2] us 5.428 ms [-21, +5] us >= +33.1% SLOW
I32 12 20 100000 0 10 787.040 [-29.600, +5.216] us 852.768 [-23.808, +5.472] us >= +4.6% SLOW
I32 12 100 100000 0 10 787.552 [-25.600, +4.672] us 985.280 [-36.448, +6.112] us >= +19.8% SLOW
I32 12 20 10000000 0 10 1.860 ms [-26, +5] us 2.259 ms [-28, +4] us >= +19.6% SLOW
I32 12 100 10000000 0 10 1.646 ms [-33, +6] us 2.165 ms [-22, +7] us >= +29.7% SLOW
I32 12 20 50000000 0 10 7.196 ms [-17, +7] us 9.655 ms [-12, +8] us >= +33.9% SLOW
I32 12 100 50000000 0 10 5.411 ms [-25, +4] us 8.084 ms [-30, +6] us >= +48.7% SLOW
I32 12 20 100000 0.03 10 862.624 [-29.952, +6.272] us 920.736 [-36.352, +6.592] us >= +1.8% SLOW
I32 12 100 100000 0.03 10 905.440 [-29.536, +6.144] us 1.100 ms [-33, +9] us >= +17.0% SLOW
I32 12 20 10000000 0.03 10 2.074 ms [-24, +5] us 2.516 ms [-19, +4] us >= +20.1% SLOW
I32 12 100 10000000 0.03 10 1.878 ms [-27, +5] us 2.430 ms [-26, +6] us >= +27.6% SLOW
I32 12 20 50000000 0.03 10 9.446 ms [-40, +8] us 11.972 ms [-34, +7] us >= +26.3% SLOW
I32 12 100 50000000 0.03 10 6.294 ms [-18, +5] us 9.324 ms [-21, +5] us >= +47.7% SLOW
I32 12 20 100000 0.3 10 870.848 [-40.576, +7.200] us 937.600 [-20.640, +5.024] us >= +4.4% SLOW
I32 12 100 100000 0.3 10 904.800 [-37.248, +4.512] us 1.103 ms [-50, +9] us >= +15.8% SLOW
I32 12 20 10000000 0.3 10 2.043 ms [-21, +5] us 2.502 ms [-29, +6] us >= +20.8% SLOW
I32 12 100 10000000 0.3 10 1.875 ms [-36, +6] us 2.437 ms [-29, +6] us >= +28.0% SLOW
I32 12 20 50000000 0.3 10 9.181 ms [-130, +29] us 11.743 ms [-34, +4] us >= +27.1% SLOW
I32 12 100 50000000 0.3 10 6.106 ms [-22, +3] us 9.217 ms [-31, +7] us >= +50.4% SLOW
F64 11 20 100000 0 1 219.488 [-14.464, +2.016] us 227.648 [-13.312, +2.048] us AMBG
F64 11 100 100000 0 1 220.448 [-15.360, +2.048] us 235.840 [-14.336, +2.080] us AMBG
F64 11 20 10000000 0 1 726.336 [-13.376, +3.008] us 766.240 [-12.288, +2.080] us >= +3.4% SLOW
F64 11 100 10000000 0 1 654.848 [-16.672, +2.880] us 701.856 [-17.536, +2.976] us >= +4.0% SLOW
F64 11 20 50000000 0 1 3.077 ms [-8, +3] us 3.296 ms [-7, +2] us >= +6.8% SLOW
F64 11 100 50000000 0 1 2.373 ms [-11, +3] us 2.604 ms [-10, +2] us >= +9.2% SLOW
F64 11 20 100000 0.03 1 226.560 [-15.136, +1.184] us 232.800 [-12.352, +2.048] us AMBG
F64 11 100 100000 0.03 1 227.680 [-13.376, +2.016] us 247.104 [-15.328, +3.040] us >= +0.9% SLOW
F64 11 20 10000000 0.03 1 744.544 [-15.168, +2.112] us 790.784 [-16.224, +2.016] us >= +3.7% SLOW
F64 11 100 10000000 0.03 1 673.056 [-17.344, +2.080] us 728.384 [-17.408, +2.976] us >= +5.3% SLOW
F64 11 20 50000000 0.03 1 3.216 ms [-11, +3] us 3.496 ms [-11, +3] us >= +8.3% SLOW
F64 11 100 50000000 0.03 1 2.430 ms [-10, +3] us 2.699 ms [-9, +3] us >= +10.5% SLOW
F64 11 20 100000 0.3 1 227.776 [-15.328, +1.952] us 233.792 [-13.248, +2.048] us AMBG
F64 11 100 100000 0.3 1 228.640 [-13.280, +2.048] us 246.112 [-12.384, +3.040] us >= +1.3% SLOW
F64 11 20 10000000 0.3 1 738.592 [-13.312, +3.072] us 786.880 [-12.448, +2.880] us >= +4.4% SLOW
F64 11 100 10000000 0.3 1 670.048 [-15.456, +2.944] us 726.304 [-18.400, +2.112] us >= +5.2% SLOW
F64 11 20 50000000 0.3 1 3.132 ms [-8, +2] us 3.397 ms [-12, +3] us >= +8.0% SLOW
F64 11 100 50000000 0.3 1 2.400 ms [-12, +2] us 2.679 ms [-8, +4] us >= +11.2% SLOW
F64 11 20 100000 0 5 315.712 [-13.376, +2.048] us 353.632 [-18.464, +3.072] us >= +5.5% SLOW
F64 11 100 100000 0 5 335.168 [-18.432, +4.128] us 411.104 [-21.664, +3.936] us >= +14.8% SLOW
F64 11 20 10000000 0 5 1.113 ms [-16, +4] us 1.326 ms [-13, +2] us >= +17.6% SLOW
F64 11 100 10000000 0 5 997.760 [-21.600, +2.976] us 1.237 ms [-23, +4] us >= +21.4% SLOW
F64 11 20 50000000 0 5 4.875 ms [-9, +4] us 5.996 ms [-10, +4] us >= +22.7% SLOW
F64 11 100 50000000 0 5 3.778 ms [-12, +3] us 4.954 ms [-14, +3] us >= +30.7% SLOW
F64 11 20 100000 0.03 5 342.336 [-17.472, +3.072] us 382.304 [-14.368, +2.080] us >= +6.5% SLOW
F64 11 100 100000 0.03 5 374.080 [-14.336, +2.976] us 471.360 [-22.688, +5.120] us >= +19.0% SLOW
F64 11 20 10000000 0.03 5 1.203 ms [-15, +4] us 1.445 ms [-14, +3] us >= +18.6% SLOW
F64 11 100 10000000 0.03 5 1.089 ms [-17, +3] us 1.380 ms [-19, +2] us >= +24.6% SLOW
F64 11 20 50000000 0.03 5 5.548 ms [-12, +3] us 6.994 ms [-11, +3] us >= +25.8% SLOW
F64 11 100 50000000 0.03 5 4.067 ms [-14, +3] us 5.427 ms [-14, +3] us >= +33.0% SLOW
F64 11 20 100000 0.3 5 349.472 [-18.336, +3.104] us 384.320 [-13.312, +2.048] us >= +5.2% SLOW
F64 11 100 100000 0.3 5 373.056 [-20.480, +4.096] us 468.320 [-20.480, +4.160] us >= +18.7% SLOW
F64 11 20 10000000 0.3 5 1.175 ms [-16, +3] us 1.429 ms [-15, +3] us >= +20.0% SLOW
F64 11 100 10000000 0.3 5 1.079 ms [-17, +3] us 1.366 ms [-16, +3] us >= +24.8% SLOW
F64 11 20 50000000 0.3 5 5.141 ms [-14, +4] us 6.503 ms [-9, +3] us >= +26.2% SLOW
F64 11 100 50000000 0.3 5 3.918 ms [-9, +2] us 5.333 ms [-14, +4] us >= +35.7% SLOW
F64 11 20 100000 0 10 432.448 [-15.360, +2.048] us 508.256 [-23.584, +6.112] us >= +11.5% SLOW
F64 11 100 100000 0 10 471.456 [-14.624, +8.160] us 631.104 [-24.544, +4.160] us >= +26.5% SLOW
F64 11 20 10000000 0 10 1.599 ms [-16, +3] us 2.027 ms [-14, +3] us >= +25.6% SLOW
F64 11 100 10000000 0 10 1.426 ms [-14, +4] us 1.908 ms [-26, +6] us >= +31.7% SLOW
F64 11 20 50000000 0 10 7.122 ms [-14, +6] us 9.378 ms [-10, +4] us >= +31.4% SLOW
F64 11 100 50000000 0 10 5.539 ms [-13, +5] us 7.891 ms [-13, +5] us >= +42.1% SLOW
F64 11 20 100000 0.03 10 483.616 [-17.280, +6.176] us 568.640 [-18.464, +2.144] us >= +12.3% SLOW
F64 11 100 100000 0.03 10 553.312 [-17.248, +4.064] us 753.920 [-40.864, +7.200] us >= +27.9% SLOW
F64 11 20 10000000 0.03 10 1.789 ms [-22, +6] us 2.260 ms [-17, +3] us >= +24.9% SLOW
F64 11 100 10000000 0.03 10 1.600 ms [-17, +4] us 2.178 ms [-22, +6] us >= +34.5% SLOW
F64 11 20 50000000 0.03 10 8.411 ms [-10, +4] us 11.293 ms [-13, +5] us >= +34.1% SLOW
F64 11 100 50000000 0.03 10 6.111 ms [-13, +2] us 8.837 ms [-14, +4] us >= +44.3% SLOW
F64 11 20 100000 0.3 10 495.968 [-27.616, +5.280] us 572.064 [-15.712, +2.720] us >= +11.0% SLOW
F64 11 100 100000 0.3 10 554.304 [-24.576, +7.232] us 747.744 [-36.768, +8.256] us >= +26.6% SLOW
F64 11 20 10000000 0.3 10 1.724 ms [-18, +3] us 2.227 ms [-20, +4] us >= +27.8% SLOW
F64 11 100 10000000 0.3 10 1.576 ms [-19, +4] us 2.157 ms [-22, +4] us >= +35.1% SLOW
F64 11 20 50000000 0.3 10 7.622 ms [-17, +5] us 10.329 ms [-13, +5] us >= +35.2% SLOW
F64 11 100 50000000 0.3 10 5.820 ms [-11, +2] us 8.650 ms [-24, +3] us >= +48.2% SLOW
F64 12 20 100000 0 1 265.216 [-15.296, +2.912] us 264.928 [-15.456, +2.112] us AMBG
F64 12 100 100000 0 1 263.360 [-13.344, +2.656] us 271.232 [-16.448, +2.432] us AMBG
F64 12 20 10000000 0 1 775.232 [-17.088, +3.424] us 807.360 [-18.560, +2.816] us >= +1.3% SLOW
F64 12 100 10000000 0 1 694.688 [-18.592, +4.096] us 739.808 [-13.824, +2.592] us >= +3.9% SLOW
F64 12 20 50000000 0 1 3.142 ms [-22, +4] us 3.361 ms [-13, +2] us >= +6.4% SLOW
F64 12 100 50000000 0 1 2.418 ms [-13, +3] us 2.647 ms [-12, +2] us >= +8.8% SLOW
F64 12 20 100000 0.03 1 266.272 [-15.616, +2.656] us 270.368 [-14.464, +2.144] us AMBG
F64 12 100 100000 0.03 1 265.920 [-14.784, +2.688] us 285.216 [-15.648, +2.528] us AMBG
F64 12 20 10000000 0.03 1 784.832 [-15.392, +2.976] us 831.808 [-13.312, +3.072] us >= +3.9% SLOW
F64 12 100 10000000 0.03 1 711.488 [-17.088, +2.336] us 769.408 [-17.632, +3.040] us >= +5.3% SLOW
F64 12 20 50000000 0.03 1 3.278 ms [-11, +2] us 3.571 ms [-16, +4] us >= +8.4% SLOW
F64 12 100 50000000 0.03 1 2.471 ms [-12, +3] us 2.750 ms [-12, +3] us >= +10.6% SLOW
F64 12 20 100000 0.3 1 266.624 [-15.648, +2.656] us 284.096 [-12.864, +2.336] us >= +0.7% SLOW
F64 12 100 100000 0.3 1 265.504 [-15.200, +2.464] us 289.408 [-16.704, +5.504] us >= +1.8% SLOW
F64 12 20 10000000 0.3 1 780.640 [-16.288, +3.040] us 828.800 [-14.592, +2.976] us >= +3.9% SLOW
F64 12 100 10000000 0.3 1 712.992 [-14.624, +3.584] us 764.256 [-15.520, +2.432] us >= +4.5% SLOW
F64 12 20 50000000 0.3 1 3.200 ms [-14, +3] us 3.465 ms [-11, +3] us >= +7.8% SLOW
F64 12 100 50000000 0.3 1 2.447 ms [-14, +4] us 2.722 ms [-10, +3] us >= +10.7% SLOW
F64 12 20 100000 0 5 521.984 [-19.424, +4.160] us 540.896 [-25.600, +5.120] us AMBG
F64 12 100 100000 0 5 524.544 [-26.912, +5.536] us 594.752 [-18.688, +4.064] us >= +8.7% SLOW
F64 12 20 10000000 0 5 1.327 ms [-20, +4] us 1.540 ms [-22, +3] us >= +14.1% SLOW
F64 12 100 10000000 0 5 1.198 ms [-21, +5] us 1.447 ms [-19, +4] us >= +18.7% SLOW
F64 12 20 50000000 0 5 5.173 ms [-14, +3] us 6.305 ms [-15, +4] us >= +21.5% SLOW
F64 12 100 50000000 0 5 3.993 ms [-23, +3] us 5.166 ms [-17, +5] us >= +28.9% SLOW
F64 12 20 100000 0.03 5 539.296 [-21.152, +4.192] us 573.088 [-20.128, +3.840] us >= +1.7% SLOW
F64 12 100 100000 0.03 5 558.304 [-20.224, +3.840] us 660.672 [-28.032, +4.800] us >= +12.5% SLOW
F64 12 20 10000000 0.03 5 1.420 ms [-18, +4] us 1.660 ms [-22, +6] us >= +15.1% SLOW
F64 12 100 10000000 0.03 5 1.291 ms [-24, +5] us 1.594 ms [-22, +4] us >= +21.3% SLOW
F64 12 20 50000000 0.03 5 5.845 ms [-17, +4] us 7.310 ms [-14, +4] us >= +24.7% SLOW
F64 12 100 50000000 0.03 5 4.285 ms [-14, +4] us 5.641 ms [-12, +5] us >= +31.2% SLOW
F64 12 20 100000 0.3 5 548.224 [-22.656, +5.120] us 575.072 [-18.656, +3.328] us >= +0.6% SLOW
F64 12 100 100000 0.3 5 560.992 [-23.488, +5.056] us 652.960 [-25.440, +4.928] us >= +10.9% SLOW
F64 12 20 10000000 0.3 5 1.396 ms [-22, +5] us 1.641 ms [-19, +4] us >= +15.7% SLOW
F64 12 100 10000000 0.3 5 1.280 ms [-27, +4] us 1.580 ms [-20, +4] us >= +21.5% SLOW
F64 12 20 50000000 0.3 5 5.438 ms [-14, +4] us 6.819 ms [-14, +4] us >= +25.1% SLOW
F64 12 100 50000000 0.3 5 4.128 ms [-17, +4] us 5.549 ms [-11, +5] us >= +34.0% SLOW
F64 12 20 100000 0 10 823.744 [-32.128, +6.144] us 889.280 [-30.304, +7.616] us >= +3.5% SLOW
F64 12 100 100000 0 10 844.896 [-28.128, +7.360] us 997.056 [-34.048, +5.504] us >= +13.0% SLOW
F64 12 20 10000000 0 10 2.029 ms [-23, +5] us 2.458 ms [-16, +5] us >= +20.0% SLOW
F64 12 100 10000000 0 10 1.828 ms [-26, +6] us 2.331 ms [-29, +6] us >= +25.5% SLOW
F64 12 20 50000000 0 10 7.709 ms [-19, +8] us 9.993 ms [-19, +5] us >= +29.2% SLOW
F64 12 100 50000000 0 10 5.967 ms [-26, +4] us 8.316 ms [-15, +5] us >= +39.0% SLOW
F64 12 20 100000 0.03 10 879.008 [-25.792, +8.672] us 951.360 [-32.800, +6.688] us >= +3.5% SLOW
F64 12 100 100000 0.03 10 929.280 [-26.240, +5.792] us 1.117 ms [-42, +8] us >= +15.0% SLOW
F64 12 20 10000000 0.03 10 2.216 ms [-38, +8] us 2.693 ms [-30, +6] us >= +19.8% SLOW
F64 12 100 10000000 0.03 10 2.004 ms [-31, +8] us 2.608 ms [-28, +6] us >= +28.3% SLOW
F64 12 20 50000000 0.03 10 9.011 ms [-17, +8] us 11.918 ms [-22, +4] us >= +31.9% SLOW
F64 12 100 50000000 0.03 10 6.549 ms [-20, +6] us 9.269 ms [-21, +6] us >= +41.1% SLOW
F64 12 20 100000 0.3 10 895.104 [-33.760, +9.888] us 956.608 [-26.880, +6.976] us >= +2.7% SLOW
F64 12 100 100000 0.3 10 927.520 [-35.360, +8.032] us 1.112 ms [-46, +9] us >= +13.9% SLOW
F64 12 20 10000000 0.3 10 2.159 ms [-33, +8] us 2.661 ms [-20, +5] us >= +21.9% SLOW
F64 12 100 10000000 0.3 10 1.983 ms [-29, +7] us 2.586 ms [-22, +4] us >= +28.8% SLOW
F64 12 20 50000000 0.3 10 8.216 ms [-18, +5] us 10.954 ms [-27, +5] us >= +32.9% SLOW
F64 12 100 50000000 0.3 10 6.244 ms [-21, +6] us 9.079 ms [-19, +6] us >= +45.0% SLOW

Checklist

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

@wence-
wence- requested review from a team as code owners October 7, 2026 15:28
@github-actions github-actions Bot added libcudf Affects libcudf (C++/CUDA) code. CMake CMake build issue labels Oct 7, 2026
@wence- wence- added improvement Improvement / enhancement to an existing function non-breaking Non-breaking change and removed libcudf Affects libcudf (C++/CUDA) code. CMake CMake build issue labels Oct 7, 2026
@coderabbitai

coderabbitai Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
Summary

Summary by CodeRabbit

  • New Features
    • Added M2 aggregation support for hash and streaming groupby on supported numeric inputs.
  • Improvements
    • M2 results handle null and empty groups, non-finite values, and large reductions.
    • Aggregation outputs remain correctly aligned regardless of request order.
    • Improved consistency of M2, variance, and standard deviation results across null-key policies and compound aggregation requests.
  • Tests
    • Expanded coverage across input sizes, sliced and dictionary-encoded values, null handling, and numerical edge cases.

Hash groupby now computes M2 and valid counts in a paired reduction. Streaming groupby uses streaming-specific aggregation dependencies and computes raw M2 during finalization. The changes also add M2 tests and controlled groupby benchmarks.

Changes: Groupby M2 aggregation

Layer / File(s) Summary
Hash M2-and-count reduction
cpp/src/groupby/hash/single_pass_m2.cu, single_pass_reductions.hpp, compute_single_pass_aggs.hpp, grouped_reductions.cuh, cpp/CMakeLists.txt
A grouped reduction computes M2 and valid count together for supported inputs. Block reductions use an operator-selected algorithm when available, and the CMake target includes the implementation.
Hash aggregation request integration
cpp/src/groupby/hash/compute_single_pass_aggs.cpp, compute_groupby.cu, hash_compound_agg_finalizer.{hpp,cu}, cpp/src/groupby/common/m2_var_std.{hpp,cu}
Hash aggregation pairs each M2 request with a matching valid-count request and stores results by request index. Compound finalization uses cached M2 and count. The prior shared M2 computation and M2 finalizer are removed.
Aggregation modes and streaming M2
cpp/src/groupby/hash/extract_single_pass_aggs.{hpp,cpp}, cpp/src/groupby/streaming_groupby/impl.cu
Aggregation extraction accepts grouped-reduction or streaming-atomic mode. Streaming groupby selects streaming dependencies and computes raw M2 from cached sum-of-squares, sum, and count.
M2 tests and benchmarks
cpp/tests/groupby/m2_tests.cpp, cpp/benchmarks/groupby/group_m2_var_std.cpp, python/cudf_polars/tests/streaming/test_groupby.py
Tests cover reduction boundaries, sliced and dictionary-encoded values, null handling, non-finite values, and request ordering. Benchmarks add controlled group sizes, balanced cardinalities, and hot-key distributions. The streaming variance and standard-deviation test uses a relative tolerance.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Bug fix

Merge Risk: Low · previous review 31e4b

Some streaming groups can return invalid variance or standard deviation results. Clamp cancellation-induced negative M2 before merging, or explicitly accept this bounded numerical risk.

Pre-merge checks: Passed 4

Check name Status Explanation
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Title check Passed The title clearly and concisely describes the main change: adding numerically stable M2 aggregation to hash-groupby.
Description check Passed The description matches the changes. It explains the stable one-pass M2 calculation for hash-groupby and notes that streaming-groupby retains the previous approach.
Finishing Touches

🧪 Generate unit tests (beta)

  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Tip

🎯 Customize your risk assessments

Guide how CodeRabbit assesses merge risk and security architecture risk. Highlight sensitive changes and explain your security boundaries using Merge Risk Instructions and Security Risk Instructions in your review settings. Security architecture risk assessments require the Advanced plan or above.

✅ Automatic approvals, with your rules

Let CodeRabbit approve pull requests once required threads are resolved, pre-merge checks pass, and your risk limits are met. Enable Automatic approvals in review settings, with overrides for teams or file paths.

@bdice bdice left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I'm okay with the slight performance regressions in exchange for the numerical stability. I think this is a worthwhile change.

Comment thread cpp/CMakeLists.txt Resolved
wence- added 3 commits October 9, 2026 09:59
Add exact group-size boundary cases, fixed low cardinalities, and a
deterministic hot-group distribution for M2, variance, and standard
deviation. Reuse the existing timed aggregation harness and preserve the
original random workloads.
Replace ordinary hash groupby's raw-moment M2 with a Welford/Chan
state reduction over the existing CSR group and chunk schedule. Produce
M2 and valid counts together and reuse them for variance/std finalization.
Preserve independent SUM/MEAN/SUM_OF_SQUARES requests, result resource
placement, and streaming groupby's existing raw-moment contract.

Add numerical regression coverage for large offsets, reduction boundaries,
sliced dictionaries, null keys/values, ddof, non-finite inputs, extreme
constants, and repeated or reordered requests.
@wence-
wence- force-pushed the wence/fea/stable-m2 branch from 8acb9ae to 56375d8 Compare October 9, 2026 09:14
@github-actions github-actions Bot added libcudf Affects libcudf (C++/CUDA) code. CMake CMake build issue labels Oct 9, 2026
@wence-
wence- force-pushed the wence/fea/stable-m2 branch from 56375d8 to 6e79722 Compare October 9, 2026 09:38
@wence-
wence- requested a review from a team as a code owner October 9, 2026 10:41
@wence-
wence- requested a review from nirandaperera October 9, 2026 10:41
@github-actions github-actions Bot added Python Affects Python cuDF API. cudf-polars Issues specific to cudf-polars labels Oct 9, 2026
Comment thread cpp/src/groupby/common/m2_var_std.cu Resolved
@wence-

wence- commented Oct 12, 2026

Copy link
Copy Markdown
Contributor Author

/merge

Comment thread cpp/src/groupby/hash/single_pass_m2.cu Resolved
@wence- wence- added the DO NOT MERGE Hold off on merging; see PR for details label Oct 12, 2026
Comment thread cpp/src/groupby/hash/single_pass_m2.cu Resolved
@wence-

wence- commented Oct 15, 2026

Copy link
Copy Markdown
Contributor Author

Note, since a lot of the decisions here are the same as in #24489, let's get happy with that and merge it before finishing this.

@wence-

wence- commented Oct 20, 2026

Copy link
Copy Markdown
Contributor Author

Updated based on the comments on #24489

@wence-
wence- force-pushed the wence/fea/stable-m2 branch from 474242a to ca7d4a6 Compare November 5, 2026 12:11
PointKernel and others added 2 commits November 5, 2026 14:52
Build the value profile once so every column uses it instead of a moved-from
builder, and pass bounds of the distribution's own type for values and keys.
@wence- wence- removed the DO NOT MERGE Hold off on merging; see PR for details label Nov 9, 2026
@rapids-bot
rapids-bot Bot merged commit c44d1de into NVIDIA:main Nov 9, 2026
112 checks passed
@github-project-automation github-project-automation Bot moved this from Todo to Done in cuDF Python Nov 9, 2026
@wence-
wence- deleted the wence/fea/stable-m2 branch November 10, 2026 15:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CMake CMake build issue cudf-polars Issues specific to cudf-polars improvement Improvement / enhancement to an existing function libcudf Affects libcudf (C++/CUDA) code. non-breaking Non-breaking change Python Affects Python cuDF API.

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

7 participants