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 c5fed03500 Add benchmark for ListView interleave (#9738)
c5fed03500 is described below

commit c5fed03500bfd332a5cf2e6e2f1df66aafe996f5
Author: Vegard Stikbakke <[email protected]>
AuthorDate: Thu Apr 16 17:34:31 2026 +0200

    Add benchmark for ListView interleave (#9738)
    
    Ref https://github.com/apache/arrow-rs/pull/9558#discussion_r3092871713
    
    ---------
    
    Co-authored-by: Alfonso Subiotto Marques <[email protected]>
---
 arrow/benches/interleave_kernels.rs | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/arrow/benches/interleave_kernels.rs 
b/arrow/benches/interleave_kernels.rs
index 8daf42a144..0688bb79ad 100644
--- a/arrow/benches/interleave_kernels.rs
+++ b/arrow/benches/interleave_kernels.rs
@@ -28,6 +28,7 @@ extern crate arrow;
 use arrow::datatypes::*;
 use arrow::util::test_util::seedable_rng;
 use arrow::{array::*, util::bench_util::*};
+use arrow_buffer::ScalarBuffer;
 use arrow_select::interleave::interleave;
 use std::hint;
 use std::sync::Arc;
@@ -121,6 +122,34 @@ fn add_benchmark(c: &mut Criterion) {
     let list_i64_no_nulls =
         create_primitive_list_array_with_seed::<i32, Int64Type>(8192, 0.0, 
0.0, 20, 42);
 
+    let list_view_i64: ListViewArray =
+        create_primitive_list_array_with_seed::<i32, Int64Type>(8192, 0.1, 
0.1, 20, 42).into();
+    let list_view_i64_no_nulls: ListViewArray =
+        create_primitive_list_array_with_seed::<i32, Int64Type>(8192, 0.0, 
0.0, 20, 42).into();
+
+    // ListView with overlapping offset/size ranges: 100 unique element ranges 
of
+    // 20 elements each, with 80 rows sharing each range (8000 rows, 2000 
backing elements).
+    let list_view_overlapping = {
+        let num_unique = 100;
+        let rows_per_unique = 80;
+        let elems_per_row = 20;
+        let total_rows = num_unique * rows_per_unique;
+        let values = Arc::new(Int64Array::from_iter_values(
+            0..((num_unique * elems_per_row) as i64),
+        ));
+        let offsets: Vec<i32> = (0..total_rows)
+            .map(|i| ((i / rows_per_unique) * elems_per_row) as i32)
+            .collect();
+        let sizes = vec![elems_per_row as i32; total_rows];
+        ListViewArray::new(
+            Arc::new(Field::new_list_field(DataType::Int64, false)),
+            ScalarBuffer::from(offsets),
+            ScalarBuffer::from(sizes),
+            values,
+            None,
+        )
+    };
+
     let cases: &[(&str, &dyn Array)] = &[
         ("i32(0.0)", &i32),
         ("i32(0.5)", &i32_opt),
@@ -143,6 +172,9 @@ fn add_benchmark(c: &mut Criterion) {
         ),
         ("list<i64>(0.1,0.1,20)", &list_i64),
         ("list<i64>(0.0,0.0,20)", &list_i64_no_nulls),
+        ("list_view<i64>(0.1,0.1,20)", &list_view_i64),
+        ("list_view<i64>(0.0,0.0,20)", &list_view_i64_no_nulls),
+        ("list_view_overlapping<i64>(80x,20)", &list_view_overlapping),
     ];
 
     for (prefix, base) in cases {

Reply via email to