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 a35bdf0298 bench: add more {boolean, string, int} benchmarks for
concat kernel (#7376)
a35bdf0298 is described below
commit a35bdf0298acc5b4e06db166d44cbcdf7789edb0
Author: Raz Luvaton <[email protected]>
AuthorDate: Wed Apr 2 17:41:53 2025 +0300
bench: add more {boolean, string, int} benchmarks for concat kernel (#7376)
* bench: add benchmarks for concat boolean and update string bench
* move updated benchmark from #7309 to here
---
arrow/benches/concatenate_kernel.rs | 88 ++++++++++++++++++++++++++++++++++---
1 file changed, 82 insertions(+), 6 deletions(-)
diff --git a/arrow/benches/concatenate_kernel.rs
b/arrow/benches/concatenate_kernel.rs
index 034f5f2a30..2304c40ab7 100644
--- a/arrow/benches/concatenate_kernel.rs
+++ b/arrow/benches/concatenate_kernel.rs
@@ -53,6 +53,62 @@ fn add_benchmark(c: &mut Criterion) {
b.iter(|| bench_concat_arrays(&arrays))
});
+ {
+ let input = (0..100)
+ .map(|_| create_primitive_array::<Int32Type>(8192, 0.0))
+ .collect::<Vec<_>>();
+ let arrays: Vec<_> = input.iter().map(|arr| arr as &dyn
Array).collect();
+ c.bench_function("concat i32 8192 over 100 arrays", |b| {
+ b.iter(|| bench_concat_arrays(&arrays))
+ });
+ }
+
+ {
+ let input = (0..100)
+ .map(|_| create_primitive_array::<Int32Type>(8192, 0.5))
+ .collect::<Vec<_>>();
+ let arrays: Vec<_> = input.iter().map(|arr| arr as &dyn
Array).collect();
+ c.bench_function("concat i32 nulls 8192 over 100 arrays", |b| {
+ b.iter(|| bench_concat_arrays(&arrays))
+ });
+ }
+
+ let v1 = create_boolean_array(1024, 0.0, 0.5);
+ let v2 = create_boolean_array(1024, 0.0, 0.5);
+ c.bench_function("concat boolean 1024", |b| b.iter(|| bench_concat(&v1,
&v2)));
+
+ let v1 = create_boolean_array(1024, 0.5, 0.5);
+ let v2 = create_boolean_array(1024, 0.5, 0.5);
+ c.bench_function("concat boolean nulls 1024", |b| {
+ b.iter(|| bench_concat(&v1, &v2))
+ });
+
+ let small_array = create_boolean_array(4, 0.0, 0.5);
+ let arrays: Vec<_> = (0..1024).map(|_| &small_array as &dyn
Array).collect();
+ c.bench_function("concat 1024 arrays boolean 4", |b| {
+ b.iter(|| bench_concat_arrays(&arrays))
+ });
+
+ {
+ let input = (0..100)
+ .map(|_| create_boolean_array(8192, 0.0, 0.5))
+ .collect::<Vec<_>>();
+ let arrays: Vec<_> = input.iter().map(|arr| arr as &dyn
Array).collect();
+ c.bench_function("concat boolean 8192 over 100 arrays", |b| {
+ b.iter(|| bench_concat_arrays(&arrays))
+ });
+ }
+
+ {
+ let input = (0..100)
+ .map(|_| create_boolean_array(8192, 0.5, 0.5))
+ .collect::<Vec<_>>();
+ let arrays: Vec<_> = input.iter().map(|arr| arr as &dyn
Array).collect();
+ c.bench_function("concat boolean nulls 8192 over 100 arrays", |b| {
+ b.iter(|| bench_concat_arrays(&arrays))
+ });
+ }
+
let v1 = create_string_array::<i32>(1024, 0.0);
let v2 = create_string_array::<i32>(1024, 0.0);
c.bench_function("concat str 1024", |b| b.iter(|| bench_concat(&v1, &v2)));
@@ -63,6 +119,32 @@ fn add_benchmark(c: &mut Criterion) {
b.iter(|| bench_concat(&v1, &v2))
});
+ let small_array = create_string_array::<i32>(4, 0.0);
+ let arrays: Vec<_> = (0..1024).map(|_| &small_array as &dyn
Array).collect();
+ c.bench_function("concat 1024 arrays str 4", |b| {
+ b.iter(|| bench_concat_arrays(&arrays))
+ });
+
+ {
+ let input = (0..100)
+ .map(|_| create_string_array::<i32>(8192, 0.0))
+ .collect::<Vec<_>>();
+ let arrays: Vec<_> = input.iter().map(|arr| arr as &dyn
Array).collect();
+ c.bench_function("concat str 8192 over 100 arrays", |b| {
+ b.iter(|| bench_concat_arrays(&arrays))
+ });
+ }
+
+ {
+ let input = (0..100)
+ .map(|_| create_string_array::<i32>(8192, 0.5))
+ .collect::<Vec<_>>();
+ let arrays: Vec<_> = input.iter().map(|arr| arr as &dyn
Array).collect();
+ c.bench_function("concat str nulls 8192 over 100 arrays", |b| {
+ b.iter(|| bench_concat_arrays(&arrays))
+ });
+ }
+
let v1 = create_string_array_with_len::<i32>(10, 0.0, 20);
let v1 = create_dict_from_values::<Int32Type>(1024, 0.0, &v1);
let v2 = create_string_array_with_len::<i32>(10, 0.0, 20);
@@ -79,12 +161,6 @@ fn add_benchmark(c: &mut Criterion) {
b.iter(|| bench_concat(&v1, &v2))
});
- let v1 = create_string_array::<i32>(1024, 0.5);
- let v2 = create_string_array::<i32>(1024, 0.5);
- c.bench_function("concat str nulls 1024", |b| {
- b.iter(|| bench_concat(&v1, &v2))
- });
-
let v1 = FixedSizeListArray::try_new(
Arc::new(Field::new_list_field(DataType::Int32, true)),
1024,