This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/main by this push:
new c77f08dc81 bench: Make `bench_built_filter` argument order consistent
with `filter` kernel (#11204)
c77f08dc81 is described below
commit c77f08dc81149d797d8b1bb7941f149ae07d2dcc
Author: Andrew Lamb <[email protected]>
AuthorDate: Fri Sep 25 05:29:35 2026 -0400
bench: Make `bench_built_filter` argument order consistent with `filter`
kernel (#11204)
# Which issue does this PR close?
Follow on to
https://github.com/apache/arrow-rs/pull/11203#discussion_r4098250273
# Rationale for this change
`bench_built_filter` took `(filter, data)` while `bench_filter` and the
underlying [`filter`
](https://docs.rs/arrow/latest/arrow/compute/kernels/filter/fn.filter.html)kernel
take `(data, filter)`. The inconsistent order made bugs like #11203 easy
to introduce.
# What changes are included in this PR?
Change `bench_built_filter` to take `(array, filter)`, matching
`filter(values, predicate)`, and update all call sites.
# Are these changes tested?
Bench compiles. No behavior change.
# Are there any user-facing changes?
No
Co-authored-by: Claude Fable 5.1 <[email protected]>
---
arrow/benches/filter_kernels.rs | 80 ++++++++++++++++++++---------------------
1 file changed, 40 insertions(+), 40 deletions(-)
diff --git a/arrow/benches/filter_kernels.rs b/arrow/benches/filter_kernels.rs
index 06cf10ee6a..8d960ca8f9 100644
--- a/arrow/benches/filter_kernels.rs
+++ b/arrow/benches/filter_kernels.rs
@@ -32,7 +32,7 @@ fn bench_filter(data_array: &dyn Array, filter_array:
&BooleanArray) {
hint::black_box(filter(data_array, filter_array).unwrap());
}
-fn bench_built_filter(filter: &FilterPredicate, array: &dyn Array) {
+fn bench_built_filter(array: &dyn Array, filter: &FilterPredicate) {
hint::black_box(filter.filter(array).unwrap());
}
@@ -71,13 +71,13 @@ fn add_benchmark(c: &mut Criterion) {
});
c.bench_function("filter context u8 (kept 1/2)", |b| {
- b.iter(|| bench_built_filter(&filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &filter))
});
c.bench_function("filter context u8 high selectivity (kept 1023/1024)",
|b| {
- b.iter(|| bench_built_filter(&dense_filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &dense_filter))
});
c.bench_function("filter context u8 low selectivity (kept 1/1024)", |b| {
- b.iter(|| bench_built_filter(&sparse_filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &sparse_filter))
});
let data_array = create_primitive_array::<Int32Type>(size, 0.0);
@@ -92,40 +92,40 @@ fn add_benchmark(c: &mut Criterion) {
});
c.bench_function("filter context i32 (kept 1/2)", |b| {
- b.iter(|| bench_built_filter(&filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &filter))
});
c.bench_function(
"filter context i32 high selectivity (kept 1023/1024)",
- |b| b.iter(|| bench_built_filter(&dense_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &dense_filter)),
);
c.bench_function("filter context i32 low selectivity (kept 1/1024)", |b| {
- b.iter(|| bench_built_filter(&sparse_filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &sparse_filter))
});
let data_array = create_primitive_array::<Int32Type>(size, 0.5);
c.bench_function("filter context i32 w NULLs (kept 1/2)", |b| {
- b.iter(|| bench_built_filter(&filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &filter))
});
c.bench_function(
"filter context i32 w NULLs high selectivity (kept 1023/1024)",
- |b| b.iter(|| bench_built_filter(&dense_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &dense_filter)),
);
c.bench_function(
"filter context i32 w NULLs low selectivity (kept 1/1024)",
- |b| b.iter(|| bench_built_filter(&sparse_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &sparse_filter)),
);
let data_array = create_primitive_array::<UInt8Type>(size, 0.5);
c.bench_function("filter context u8 w NULLs (kept 1/2)", |b| {
- b.iter(|| bench_built_filter(&filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &filter))
});
c.bench_function(
"filter context u8 w NULLs high selectivity (kept 1023/1024)",
- |b| b.iter(|| bench_built_filter(&dense_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &dense_filter)),
);
c.bench_function(
"filter context u8 w NULLs low selectivity (kept 1/1024)",
- |b| b.iter(|| bench_built_filter(&sparse_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &sparse_filter)),
);
let data_array = create_primitive_array::<Float32Type>(size, 0.5);
@@ -133,14 +133,14 @@ fn add_benchmark(c: &mut Criterion) {
b.iter(|| bench_filter(&data_array, &filter_array))
});
c.bench_function("filter context f32 (kept 1/2)", |b| {
- b.iter(|| bench_built_filter(&filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &filter))
});
c.bench_function(
"filter context f32 high selectivity (kept 1023/1024)",
- |b| b.iter(|| bench_built_filter(&dense_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &dense_filter)),
);
c.bench_function("filter context f32 low selectivity (kept 1/1024)", |b| {
- b.iter(|| bench_built_filter(&sparse_filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &sparse_filter))
});
let data_array = create_primitive_array::<Decimal128Type>(size, 0.0);
@@ -155,53 +155,53 @@ fn add_benchmark(c: &mut Criterion) {
});
c.bench_function("filter context decimal128 (kept 1/2)", |b| {
- b.iter(|| bench_built_filter(&filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &filter))
});
c.bench_function(
"filter context decimal128 high selectivity (kept 1023/1024)",
- |b| b.iter(|| bench_built_filter(&dense_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &dense_filter)),
);
c.bench_function(
"filter context decimal128 low selectivity (kept 1/1024)",
- |b| b.iter(|| bench_built_filter(&sparse_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &sparse_filter)),
);
let data_array = create_string_array::<i32>(size, 0.5);
c.bench_function("filter context string (kept 1/2)", |b| {
- b.iter(|| bench_built_filter(&filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &filter))
});
c.bench_function(
"filter context string high selectivity (kept 1023/1024)",
- |b| b.iter(|| bench_built_filter(&dense_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &dense_filter)),
);
c.bench_function("filter context string low selectivity (kept 1/1024)",
|b| {
- b.iter(|| bench_built_filter(&sparse_filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &sparse_filter))
});
let data_array = create_string_dict_array::<Int32Type>(size, 0.0, 4);
c.bench_function("filter context string dictionary (kept 1/2)", |b| {
- b.iter(|| bench_built_filter(&filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &filter))
});
c.bench_function(
"filter context string dictionary high selectivity (kept 1023/1024)",
- |b| b.iter(|| bench_built_filter(&dense_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &dense_filter)),
);
c.bench_function(
"filter context string dictionary low selectivity (kept 1/1024)",
- |b| b.iter(|| bench_built_filter(&sparse_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &sparse_filter)),
);
let data_array = create_string_dict_array::<Int32Type>(size, 0.5, 4);
c.bench_function("filter context string dictionary w NULLs (kept 1/2)",
|b| {
- b.iter(|| bench_built_filter(&filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &filter))
});
c.bench_function(
"filter context string dictionary w NULLs high selectivity (kept
1023/1024)",
- |b| b.iter(|| bench_built_filter(&dense_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &dense_filter)),
);
c.bench_function(
"filter context string dictionary w NULLs low selectivity (kept
1/1024)",
- |b| b.iter(|| bench_built_filter(&sparse_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &sparse_filter)),
);
let mut add_benchmark_for_fsb_with_length = |value_length: usize| {
@@ -225,21 +225,21 @@ fn add_benchmark(c: &mut Criterion) {
c.bench_function(
format!("filter context fsb with value length {value_length} (kept
1/2)").as_str(),
- |b| b.iter(|| bench_built_filter(&filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &filter)),
);
c.bench_function(
format!(
"filter context fsb with value length {value_length} high
selectivity (kept 1023/1024)"
)
.as_str(),
- |b| b.iter(|| bench_built_filter(&dense_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &dense_filter)),
);
c.bench_function(
format!(
"filter context fsb with value length {value_length} low
selectivity (kept 1/1024)"
)
.as_str(),
- |b| b.iter(|| bench_built_filter(&sparse_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &sparse_filter)),
);
};
@@ -260,39 +260,39 @@ fn add_benchmark(c: &mut Criterion) {
let data_array = create_string_view_array_with_len(size, 0.5, 4, false);
c.bench_function("filter context short string view (kept 1/2)", |b| {
- b.iter(|| bench_built_filter(&filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &filter))
});
c.bench_function(
"filter context short string view high selectivity (kept 1023/1024)",
- |b| b.iter(|| bench_built_filter(&dense_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &dense_filter)),
);
c.bench_function(
"filter context short string view low selectivity (kept 1/1024)",
- |b| b.iter(|| bench_built_filter(&sparse_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &sparse_filter)),
);
let data_array = create_string_view_array_with_len(size, 0.5, 4, true);
c.bench_function("filter context mixed string view (kept 1/2)", |b| {
- b.iter(|| bench_built_filter(&filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &filter))
});
c.bench_function(
"filter context mixed string view high selectivity (kept 1023/1024)",
- |b| b.iter(|| bench_built_filter(&dense_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &dense_filter)),
);
c.bench_function(
"filter context mixed string view low selectivity (kept 1/1024)",
- |b| b.iter(|| bench_built_filter(&sparse_filter, &data_array)),
+ |b| b.iter(|| bench_built_filter(&data_array, &sparse_filter)),
);
let data_array = create_primitive_run_array::<Int32Type, Int64Type>(size,
size);
c.bench_function("filter run array (kept 1/2)", |b| {
- b.iter(|| bench_built_filter(&filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &filter))
});
c.bench_function("filter run array high selectivity (kept 1023/1024)", |b|
{
- b.iter(|| bench_built_filter(&dense_filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &dense_filter))
});
c.bench_function("filter run array low selectivity (kept 1/1024)", |b| {
- b.iter(|| bench_built_filter(&sparse_filter, &data_array))
+ b.iter(|| bench_built_filter(&data_array, &sparse_filter))
});
}