From c555de637ed3e95eca15befb03399ce912814870 Mon Sep 17 00:00:00 2001 From: Raz Luvaton <16746759+rluvaton@users.noreply.github.com> Date: Wed, 2 Apr 2025 11:44:05 +0300 Subject: [PATCH 1/2] bench: add benchmarks for concat boolean and update string bench --- arrow/benches/concatenate_kernel.rs | 68 ++++++++++++++++++++++++++--- 1 file changed, 62 insertions(+), 6 deletions(-) diff --git a/arrow/benches/concatenate_kernel.rs b/arrow/benches/concatenate_kernel.rs index 034f5f2a305c..ffa367753da6 100644 --- a/arrow/benches/concatenate_kernel.rs +++ b/arrow/benches/concatenate_kernel.rs @@ -53,6 +53,42 @@ fn add_benchmark(c: &mut Criterion) { 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::>(); + 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::>(); + 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::(1024, 0.0); let v2 = create_string_array::(1024, 0.0); c.bench_function("concat str 1024", |b| b.iter(|| bench_concat(&v1, &v2))); @@ -63,6 +99,32 @@ fn add_benchmark(c: &mut Criterion) { b.iter(|| bench_concat(&v1, &v2)) }); + let small_array = create_string_array::(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::(8192, 0.0)) + .collect::>(); + 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::(8192, 0.5)) + .collect::>(); + 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::(10, 0.0, 20); let v1 = create_dict_from_values::(1024, 0.0, &v1); let v2 = create_string_array_with_len::(10, 0.0, 20); @@ -79,12 +141,6 @@ fn add_benchmark(c: &mut Criterion) { b.iter(|| bench_concat(&v1, &v2)) }); - let v1 = create_string_array::(1024, 0.5); - let v2 = create_string_array::(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, From 992afb1d6f86682843f3fc2ed949dfabf2f769ed Mon Sep 17 00:00:00 2001 From: Raz Luvaton <16746759+rluvaton@users.noreply.github.com> Date: Wed, 2 Apr 2025 11:47:04 +0300 Subject: [PATCH 2/2] move updated benchmark from #7309 to here --- arrow/benches/concatenate_kernel.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/arrow/benches/concatenate_kernel.rs b/arrow/benches/concatenate_kernel.rs index ffa367753da6..2304c40ab7fb 100644 --- a/arrow/benches/concatenate_kernel.rs +++ b/arrow/benches/concatenate_kernel.rs @@ -53,6 +53,26 @@ fn add_benchmark(c: &mut Criterion) { b.iter(|| bench_concat_arrays(&arrays)) }); + { + let input = (0..100) + .map(|_| create_primitive_array::(8192, 0.0)) + .collect::>(); + 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::(8192, 0.5)) + .collect::>(); + 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)));