Skip to content

Commit 1ee5878

Browse files
authored
Avoid creating null mask in groupby aggregation M2 (#20726)
This stops creating a null mask during the computation of groupby aggregation `M2`, similar to #20716. Such null mask is unnecessary as `M2` values are used together with valid count which already contains enough information for further computation (for `std`/`variance`). Authors: - Nghia Truong (https://github.com/ttnghia) Approvers: - David Wendt (https://github.com/davidwendt) - Bradley Dice (https://github.com/bdice) - Gera Shegalov (https://github.com/gerashegalov) - Alfred Xu (https://github.com/sperlingxx) URL: #20726
1 parent cf32713 commit 1ee5878

4 files changed

Lines changed: 5 additions & 12 deletions

File tree

cpp/src/groupby/common/m2_var_std.cu

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,7 @@ std::unique_ptr<column> compute_m2(data_type source_type,
9191
{
9292
auto output = make_numeric_column(cudf::detail::target_type(source_type, aggregation::M2),
9393
sum.size(),
94-
cudf::detail::copy_bitmask(sum, stream, mr),
95-
sum.null_count(),
94+
mask_state::UNALLOCATED,
9695
stream,
9796
mr);
9897
type_dispatcher(source_type, m2_functor{}, output->mutable_view(), sum_sqr, sum, count, stream);

cpp/src/groupby/sort/group_m2.cu

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,6 @@ struct m2_functor {
101101
compute_m2_fn(d_values, values_iter, group_labels, d_means, d_result, stream);
102102
}
103103

104-
// M2 column values should have the same bitmask as means's.
105-
if (group_means.nullable()) {
106-
result->set_null_mask(cudf::detail::copy_bitmask(group_means, stream, mr),
107-
group_means.null_count());
108-
}
109-
110104
return result;
111105
}
112106

cpp/tests/groupby/m2_tests.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ TYPED_TEST(GroupbyM2TypedTest, AllNullValuesInput)
114114
auto const vals = vals_col<T>{{3, 4, 5}, all_nulls()};
115115

116116
auto const [out_keys, out_M2s] = compute_M2(keys, vals);
117-
auto const expected_M2s = M2s_col<R>{{null, null, null}, all_nulls()};
117+
auto const expected_M2s = M2s_col<R>{0, 0, 0};
118118

119119
CUDF_TEST_EXPECT_COLUMNS_EQUIVALENT(keys, *out_keys, verbosity);
120120
CUDF_TEST_EXPECT_COLUMNS_EQUIVALENT(expected_M2s, *out_M2s, verbosity);
@@ -168,7 +168,7 @@ TYPED_TEST(GroupbyM2TypedTest, ValuesHaveNulls)
168168

169169
auto const [out_keys, out_M2s] = compute_M2(keys, vals);
170170
auto const expected_keys = keys_col<T>{1, 2, 3, 4, 5};
171-
auto const expected_M2s = M2s_col<R>{{0.0, 2.0, 8.0, 0.0, 0.0 /*NULL*/}, null_at(4)};
171+
auto const expected_M2s = M2s_col<R>{0.0, 2.0, 8.0, 0.0, 0.0};
172172

173173
CUDF_TEST_EXPECT_COLUMNS_EQUIVALENT(expected_keys, *out_keys, verbosity);
174174
CUDF_TEST_EXPECT_COLUMNS_EQUIVALENT(expected_M2s, *out_M2s, verbosity);
@@ -188,7 +188,7 @@ TYPED_TEST(GroupbyM2TypedTest, KeysAndValuesHaveNulls)
188188

189189
auto const [out_keys, out_M2s] = compute_M2(keys, vals);
190190
auto const expected_keys = keys_col<T>{1, 2, 3, 4};
191-
auto const expected_M2s = M2s_col<R>{{4.5, 32.0 + 2.0 / 3.0, 18.0, 0.0 /*NULL*/}, null_at(3)};
191+
auto const expected_M2s = M2s_col<R>{4.5, 32.0 + 2.0 / 3.0, 18.0, 0.0};
192192

193193
CUDF_TEST_EXPECT_COLUMNS_EQUIVALENT(expected_keys, *out_keys, verbosity);
194194
CUDF_TEST_EXPECT_COLUMNS_EQUIVALENT(expected_M2s, *out_M2s, verbosity);

java/src/test/java/ai/rapids/cudf/TableTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7804,7 +7804,7 @@ void testGroupByM2() {
78047804
.onColumn(1));
78057805
Table resultsSorted = results.orderBy(OrderByArg.asc(0));
78067806
Table expected = new Table.TestBuilder().column(1, 2, 3, 4, 5)
7807-
.column(0.0, 2.0, 8.0, 0.0, null)
7807+
.column(0.0, 2.0, 8.0, 0.0, 0.0)
78087808
.build()) {
78097809
assertTablesAreEqual(expected, resultsSorted);
78107810
}

0 commit comments

Comments
 (0)