Skip to content

Conversation

@Dandandan
Copy link
Contributor

Which issue does this PR close?

  • Closes #NNN.

Rationale for this change

What changes are included in this PR?

Are these changes tested?

Are there any user-facing changes?

@github-actions github-actions bot added parquet Changes to the parquet crate arrow Changes to the arrow crate labels Jan 27, 2026
@Dandandan
Copy link
Contributor Author

Dandandan commented Jan 27, 2026

run benchmark filter_kernels boolean_kernels arrow_reader arrow_reader_clickbench

@alamb-ghbot
Copy link

🤖 Hi @Dandandan, thanks for the request (#9284 (comment)).

scrape_comments.py only supports whitelisted benchmarks.

  • Standard: (none)
  • Criterion: array_iter, arrow_reader, arrow_reader_clickbench, arrow_reader_row_filter, arrow_statistics, arrow_writer, bitwise_kernel, boolean_kernels, buffer_bit_ops, cast_kernels, coalesce_kernels, comparison_kernels, concatenate_kernel, csv_writer, encoding, filter_kernels, interleave_kernels, json-reader, metadata, row_format, take_kernels, union_array, variant_builder, variant_kernels, variant_validation, view_types, zip_kernels

Please choose one or more of these with run benchmark <name> or run benchmark <name1> <name2>...

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing optimize_unaligned_bitchunk_iterator (b4b71aa) to bd76edd diff
BENCH_NAME=filter_kernels
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench filter_kernels
BENCH_FILTER=
BENCH_BRANCH_NAME=optimize_unaligned_bitchunk_iterator
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                         main                                   optimize_unaligned_bitchunk_iterator
-----                                                                         ----                                   ------------------------------------
filter context decimal128 (kept 1/2)                                          1.08     45.0±6.00µs        ? ?/sec    1.00     41.7±1.63µs        ? ?/sec
filter context decimal128 high selectivity (kept 1023/1024)                   1.00     50.6±1.10µs        ? ?/sec    1.02     51.8±0.92µs        ? ?/sec
filter context decimal128 low selectivity (kept 1/1024)                       1.02    232.1±2.99ns        ? ?/sec    1.00    226.4±2.00ns        ? ?/sec
filter context f32 (kept 1/2)                                                 1.00     77.5±0.62µs        ? ?/sec    1.13     87.9±0.61µs        ? ?/sec
filter context f32 high selectivity (kept 1023/1024)                          1.02     10.1±0.41µs        ? ?/sec    1.00      9.9±0.56µs        ? ?/sec
filter context f32 low selectivity (kept 1/1024)                              1.02    427.5±4.68ns        ? ?/sec    1.00    420.7±1.93ns        ? ?/sec
filter context fsb with value length 20 (kept 1/2)                            1.00     60.6±0.23µs        ? ?/sec    1.16     70.5±0.24µs        ? ?/sec
filter context fsb with value length 20 high selectivity (kept 1023/1024)     1.00     60.6±0.41µs        ? ?/sec    1.17     70.6±0.48µs        ? ?/sec
filter context fsb with value length 20 low selectivity (kept 1/1024)         1.00     60.6±0.26µs        ? ?/sec    1.17     70.6±0.25µs        ? ?/sec
filter context fsb with value length 5 (kept 1/2)                             1.00     60.6±0.54µs        ? ?/sec    1.16     70.5±0.22µs        ? ?/sec
filter context fsb with value length 5 high selectivity (kept 1023/1024)      1.00     60.6±0.48µs        ? ?/sec    1.17     70.6±0.87µs        ? ?/sec
filter context fsb with value length 5 low selectivity (kept 1/1024)          1.00     60.6±0.49µs        ? ?/sec    1.17     70.7±0.43µs        ? ?/sec
filter context fsb with value length 50 (kept 1/2)                            1.00     60.6±0.32µs        ? ?/sec    1.17     70.7±0.52µs        ? ?/sec
filter context fsb with value length 50 high selectivity (kept 1023/1024)     1.00     60.6±0.33µs        ? ?/sec    1.17     70.7±0.57µs        ? ?/sec
filter context fsb with value length 50 low selectivity (kept 1/1024)         1.00     60.7±0.74µs        ? ?/sec    1.17     70.7±0.88µs        ? ?/sec
filter context i32 (kept 1/2)                                                 1.01     16.7±0.10µs        ? ?/sec    1.00     16.5±0.14µs        ? ?/sec
filter context i32 high selectivity (kept 1023/1024)                          1.09      6.8±0.41µs        ? ?/sec    1.00      6.2±0.34µs        ? ?/sec
filter context i32 low selectivity (kept 1/1024)                              1.00    219.3±1.72ns        ? ?/sec    1.01    221.9±1.43ns        ? ?/sec
filter context i32 w NULLs (kept 1/2)                                         1.00     77.7±0.87µs        ? ?/sec    1.13     87.7±1.03µs        ? ?/sec
filter context i32 w NULLs high selectivity (kept 1023/1024)                  1.01     10.3±0.41µs        ? ?/sec    1.00     10.2±0.48µs        ? ?/sec
filter context i32 w NULLs low selectivity (kept 1/1024)                      1.01   423.6±10.73ns        ? ?/sec    1.00    418.9±4.40ns        ? ?/sec
filter context mixed string view (kept 1/2)                                   1.00    104.1±4.37µs        ? ?/sec    1.11    115.2±5.03µs        ? ?/sec
filter context mixed string view high selectivity (kept 1023/1024)            1.00     55.2±1.16µs        ? ?/sec    1.01     55.4±1.38µs        ? ?/sec
filter context mixed string view low selectivity (kept 1/1024)                1.00    605.9±4.53ns        ? ?/sec    1.02    616.7±9.10ns        ? ?/sec
filter context short string view (kept 1/2)                                   1.00    106.7±6.58µs        ? ?/sec    1.14    122.0±6.87µs        ? ?/sec
filter context short string view high selectivity (kept 1023/1024)            1.00     53.8±1.46µs        ? ?/sec    1.03     55.3±1.01µs        ? ?/sec
filter context short string view low selectivity (kept 1/1024)                1.01   475.7±18.16ns        ? ?/sec    1.00    472.6±2.53ns        ? ?/sec
filter context string (kept 1/2)                                              1.00    578.8±7.31µs        ? ?/sec    1.04   603.4±15.56µs        ? ?/sec
filter context string dictionary (kept 1/2)                                   1.00     16.9±0.31µs        ? ?/sec    1.04     17.5±0.71µs        ? ?/sec
filter context string dictionary high selectivity (kept 1023/1024)            1.03      7.2±0.51µs        ? ?/sec    1.00      7.0±0.48µs        ? ?/sec
filter context string dictionary low selectivity (kept 1/1024)                1.00    637.7±4.22ns        ? ?/sec    1.00    637.0±3.36ns        ? ?/sec
filter context string dictionary w NULLs (kept 1/2)                           1.00     78.5±1.31µs        ? ?/sec    1.13     88.5±0.71µs        ? ?/sec
filter context string dictionary w NULLs high selectivity (kept 1023/1024)    1.00     10.5±0.40µs        ? ?/sec    1.03     10.8±0.58µs        ? ?/sec
filter context string dictionary w NULLs low selectivity (kept 1/1024)        1.01    865.4±5.85ns        ? ?/sec    1.00   856.5±53.29ns        ? ?/sec
filter context string high selectivity (kept 1023/1024)                       1.00   634.1±22.32µs        ? ?/sec    1.02   646.8±20.49µs        ? ?/sec
filter context string low selectivity (kept 1/1024)                           1.00    909.3±3.51ns        ? ?/sec    1.08   985.7±12.71ns        ? ?/sec
filter context u8 (kept 1/2)                                                  1.00     15.0±0.10µs        ? ?/sec    1.00     15.0±0.15µs        ? ?/sec
filter context u8 high selectivity (kept 1023/1024)                           1.09  1997.8±17.80ns        ? ?/sec    1.00  1836.2±11.64ns        ? ?/sec
filter context u8 low selectivity (kept 1/1024)                               1.01    215.2±4.55ns        ? ?/sec    1.00    213.9±0.83ns        ? ?/sec
filter context u8 w NULLs (kept 1/2)                                          1.00     76.0±0.63µs        ? ?/sec    1.13     85.9±0.39µs        ? ?/sec
filter context u8 w NULLs high selectivity (kept 1023/1024)                   1.01      5.1±0.04µs        ? ?/sec    1.00      5.0±0.06µs        ? ?/sec
filter context u8 w NULLs low selectivity (kept 1/1024)                       1.00    418.1±4.15ns        ? ?/sec    1.00    417.6±6.57ns        ? ?/sec
filter decimal128 (kept 1/2)                                                  1.11     51.1±5.46µs        ? ?/sec    1.00     45.8±4.29µs        ? ?/sec
filter decimal128 high selectivity (kept 1023/1024)                           1.04     55.2±0.82µs        ? ?/sec    1.00     53.3±1.33µs        ? ?/sec
filter decimal128 low selectivity (kept 1/1024)                               1.91      3.2±0.03µs        ? ?/sec    1.00   1658.8±9.53ns        ? ?/sec
filter f32 (kept 1/2)                                                         1.12    141.2±1.65µs        ? ?/sec    1.00    126.2±0.75µs        ? ?/sec
filter fsb with value length 20 (kept 1/2)                                    1.09    137.4±2.22µs        ? ?/sec    1.00    126.4±0.89µs        ? ?/sec
filter fsb with value length 20 high selectivity (kept 1023/1024)             1.00     71.2±1.94µs        ? ?/sec    1.01     72.0±1.75µs        ? ?/sec
filter fsb with value length 20 low selectivity (kept 1/1024)                 1.80      3.5±0.22µs        ? ?/sec    1.00  1944.9±29.22ns        ? ?/sec
filter fsb with value length 5 (kept 1/2)                                     1.08    142.1±0.76µs        ? ?/sec    1.00    132.1±1.80µs        ? ?/sec
filter fsb with value length 5 high selectivity (kept 1023/1024)              1.12     11.7±0.61µs        ? ?/sec    1.00     10.5±0.56µs        ? ?/sec
filter fsb with value length 5 low selectivity (kept 1/1024)                  1.89      3.4±0.03µs        ? ?/sec    1.00  1809.3±13.79ns        ? ?/sec
filter fsb with value length 50 (kept 1/2)                                    1.13   170.2±17.54µs        ? ?/sec    1.00   150.5±10.19µs        ? ?/sec
filter fsb with value length 50 high selectivity (kept 1023/1024)             1.00    208.9±9.23µs        ? ?/sec    1.00    209.3±6.50µs        ? ?/sec
filter fsb with value length 50 low selectivity (kept 1/1024)                 1.81      3.4±0.04µs        ? ?/sec    1.00  1906.0±17.68ns        ? ?/sec
filter i32 (kept 1/2)                                                         1.24     53.8±1.00µs        ? ?/sec    1.00     43.5±0.36µs        ? ?/sec
filter i32 high selectivity (kept 1023/1024)                                  1.03      9.1±0.55µs        ? ?/sec    1.00      8.7±0.51µs        ? ?/sec
filter i32 low selectivity (kept 1/1024)                                      1.98      3.0±0.02µs        ? ?/sec    1.00  1499.1±11.19ns        ? ?/sec
filter optimize (kept 1/2)                                                    1.01     35.9±0.21µs        ? ?/sec    1.00     35.6±0.24µs        ? ?/sec
filter optimize high selectivity (kept 1023/1024)                             1.19      2.7±0.02µs        ? ?/sec    1.00      2.3±0.02µs        ? ?/sec
filter optimize low selectivity (kept 1/1024)                                 1.33  1793.3±24.31ns        ? ?/sec    1.00  1349.2±14.95ns        ? ?/sec
filter run array (kept 1/2)                                                   1.00    381.6±5.29µs        ? ?/sec    1.21    460.2±4.38µs        ? ?/sec
filter run array high selectivity (kept 1023/1024)                            1.00    395.8±3.91µs        ? ?/sec    1.25    496.0±1.61µs        ? ?/sec
filter run array low selectivity (kept 1/1024)                                1.00    284.4±4.80µs        ? ?/sec    1.34    380.3±3.07µs        ? ?/sec
filter single record batch                                                    1.19     38.5±0.50µs        ? ?/sec    1.00     32.2±0.24µs        ? ?/sec
filter u8 (kept 1/2)                                                          1.12     36.1±0.31µs        ? ?/sec    1.00     32.2±0.12µs        ? ?/sec
filter u8 high selectivity (kept 1023/1024)                                   1.08      3.8±0.03µs        ? ?/sec    1.00      3.5±0.02µs        ? ?/sec
filter u8 low selectivity (kept 1/1024)                                       1.97      3.0±0.03µs        ? ?/sec    1.00  1501.2±11.78ns        ? ?/sec

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing optimize_unaligned_bitchunk_iterator (b4b71aa) to bd76edd diff
BENCH_NAME=boolean_kernels
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench boolean_kernels
BENCH_FILTER=
BENCH_BRANCH_NAME=optimize_unaligned_bitchunk_iterator
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group            main                                   optimize_unaligned_bitchunk_iterator
-----            ----                                   ------------------------------------
and              1.00    208.4±2.17ns        ? ?/sec    1.00    208.1±3.03ns        ? ?/sec
and_sliced_1     1.00   1097.7±9.34ns        ? ?/sec    1.19  1305.8±16.47ns        ? ?/sec
and_sliced_24    1.00    246.5±0.46ns        ? ?/sec    1.30    319.7±1.06ns        ? ?/sec
not              1.00    145.9±2.30ns        ? ?/sec    1.34    195.2±1.31ns        ? ?/sec
not_slice_24     1.00    194.5±1.26ns        ? ?/sec    1.28    249.8±1.61ns        ? ?/sec
not_sliced_1     2.48   620.6±10.46ns        ? ?/sec    1.00    250.1±4.67ns        ? ?/sec
or               1.00    197.4±1.76ns        ? ?/sec    1.18    232.5±2.72ns        ? ?/sec
or_sliced_1      1.00  1099.7±10.23ns        ? ?/sec    1.25  1377.8±28.46ns        ? ?/sec
or_sliced_24     1.00    248.3±1.25ns        ? ?/sec    1.30    321.8±2.49ns        ? ?/sec

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing optimize_unaligned_bitchunk_iterator (b4b71aa) to bd76edd diff
BENCH_NAME=arrow_reader
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader
BENCH_FILTER=
BENCH_BRANCH_NAME=optimize_unaligned_bitchunk_iterator
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                                                      main                                   optimize_unaligned_bitchunk_iterator
-----                                                                                                      ----                                   ------------------------------------
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                           1.00  1230.6±17.46µs        ? ?/sec    1.04  1278.1±15.28µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                          1.00  1271.7±23.06µs        ? ?/sec    1.02  1293.6±17.22µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                            1.00  1235.7±13.40µs        ? ?/sec    1.04   1279.3±4.27µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                                     1.00   499.5±16.75µs        ? ?/sec    1.11    555.8±4.91µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                                    1.00   665.8±11.43µs        ? ?/sec    1.03    688.9±4.83µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                                      1.00    514.1±5.45µs        ? ?/sec    1.10    567.1±5.84µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                                          1.00    562.6±4.17µs        ? ?/sec    1.02   574.3±16.05µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                                         1.00    717.9±8.51µs        ? ?/sec    1.01   725.1±10.37µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                                           1.00    572.3±9.64µs        ? ?/sec    1.02    585.5±7.92µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.00    162.5±2.13µs        ? ?/sec    1.00    162.4±2.91µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.00    218.7±6.35µs        ? ?/sec    1.05    228.7±3.76µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.03    158.5±1.62µs        ? ?/sec    1.00    154.0±3.24µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.09    224.5±4.71µs        ? ?/sec    1.00    206.3±8.26µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.00    194.3±3.16µs        ? ?/sec    1.09    211.8±2.64µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.00    261.8±5.25µs        ? ?/sec    1.01    264.7±5.49µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.06    230.1±2.94µs        ? ?/sec    1.00    217.6±5.59µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs     1.00   1026.3±8.45µs        ? ?/sec    1.09  1115.0±18.62µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, half NULLs    1.00    921.3±5.12µs        ? ?/sec    1.06    978.5±9.59µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, no NULLs      1.00   1035.6±6.20µs        ? ?/sec    1.09  1126.1±23.96µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                 1.00    398.4±3.86µs        ? ?/sec    1.10    437.0±3.40µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                1.00   616.5±10.65µs        ? ?/sec    1.03   637.0±15.58µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                  1.00   407.0±11.42µs        ? ?/sec    1.10    449.3±5.44µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, mandatory, no NULLs        1.22    194.7±1.84µs        ? ?/sec    1.00    160.0±0.71µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, half NULLs       1.13    338.3±6.82µs        ? ?/sec    1.00    299.7±1.29µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, no NULLs         1.20    199.2±0.57µs        ? ?/sec    1.00    165.7±1.86µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.55    118.6±1.02µs        ? ?/sec    1.00     76.5±0.93µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.17    300.0±2.51µs        ? ?/sec    1.00    256.7±2.63µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.53    123.9±1.80µs        ? ?/sec    1.00     80.8±0.63µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, mandatory, no NULLs                    1.00    688.0±3.77µs        ? ?/sec    1.07    735.9±4.95µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, half NULLs                   1.00   586.9±21.25µs        ? ?/sec    1.00    589.8±8.33µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, no NULLs                     1.00    693.8±4.17µs        ? ?/sec    1.07    744.5±4.45µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, mandatory, no NULLs                                1.00     61.8±5.98µs        ? ?/sec    1.08     66.9±7.19µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, half NULLs                               1.06    270.6±3.56µs        ? ?/sec    1.00    255.7±5.12µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, no NULLs                                 1.00     69.0±7.90µs        ? ?/sec    1.04     71.8±5.75µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, mandatory, no NULLs                     1.00     85.9±0.64µs        ? ?/sec    1.09     94.0±0.38µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, half NULLs                    1.00    228.5±1.12µs        ? ?/sec    1.02    233.2±4.02µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, no NULLs                      1.00     90.4±0.44µs        ? ?/sec    1.10     99.2±0.54µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, mandatory, no NULLs                                 1.00      9.1±0.25µs        ? ?/sec    1.01      9.2±0.29µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, half NULLs                                1.00    189.0±2.40µs        ? ?/sec    1.00    189.4±2.21µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, no NULLs                                  1.00     13.7±0.36µs        ? ?/sec    1.05     14.3±0.17µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, mandatory, no NULLs                     1.00    170.7±3.61µs        ? ?/sec    1.08    184.9±3.39µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, half NULLs                    1.05    369.7±3.60µs        ? ?/sec    1.00    351.8±2.83µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, no NULLs                      1.00    175.5±1.01µs        ? ?/sec    1.08    189.7±4.51µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, mandatory, no NULLs                                 1.00     13.6±0.37µs        ? ?/sec    1.03     14.1±0.33µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, half NULLs                                1.09    293.4±4.39µs        ? ?/sec    1.00    268.5±3.12µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, no NULLs                                  1.00     19.9±0.79µs        ? ?/sec    1.00     19.9±0.55µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, mandatory, no NULLs                     1.00    341.4±5.17µs        ? ?/sec    1.07    366.7±4.83µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, half NULLs                    1.02   401.3±19.84µs        ? ?/sec    1.00    394.8±2.27µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, no NULLs                      1.00    347.3±3.32µs        ? ?/sec    1.07    371.7±2.95µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, mandatory, no NULLs                                 1.00     26.2±0.30µs        ? ?/sec    1.01     26.5±0.59µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, half NULLs                                1.07    242.4±6.43µs        ? ?/sec    1.00    225.9±3.55µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, no NULLs                                  1.00     32.0±0.31µs        ? ?/sec    1.02     32.5±0.71µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.01    108.8±0.47µs        ? ?/sec    1.00    108.1±0.61µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, half NULLs                          1.00    130.3±0.93µs        ? ?/sec    1.03    134.0±1.93µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, no NULLs                            1.00    111.7±0.55µs        ? ?/sec    1.00    111.8±2.26µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, mandatory, no NULLs                                1.01    159.0±2.66µs        ? ?/sec    1.00    157.7±1.64µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, half NULLs                               1.00    222.0±4.75µs        ? ?/sec    1.04    229.9±1.34µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, no NULLs                                 1.01    164.1±0.76µs        ? ?/sec    1.00    162.6±0.92µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00     75.9±1.38µs        ? ?/sec    1.02     77.6±0.81µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    178.7±2.47µs        ? ?/sec    1.05    188.4±1.42µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00     81.0±1.81µs        ? ?/sec    1.00     81.1±0.42µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.07    144.6±2.30µs        ? ?/sec    1.00    134.5±2.01µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    216.6±1.95µs        ? ?/sec    1.02    220.9±6.44µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, no NULLs                            1.06    149.0±1.12µs        ? ?/sec    1.00    139.9±0.58µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, mandatory, no NULLs                                1.00     71.8±0.54µs        ? ?/sec    1.02     73.4±0.88µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, half NULLs                               1.00    175.7±6.88µs        ? ?/sec    1.06    186.6±5.93µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, no NULLs                                 1.00     75.5±0.80µs        ? ?/sec    1.03     78.0±1.12µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.00    106.9±1.45µs        ? ?/sec    1.02    108.7±1.19µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, half NULLs                          1.00    121.2±1.59µs        ? ?/sec    1.15    139.3±3.96µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, no NULLs                            1.00    111.0±0.46µs        ? ?/sec    1.01    112.3±1.76µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, mandatory, no NULLs                                1.00    162.7±0.53µs        ? ?/sec    1.00    162.6±2.79µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, half NULLs                               1.00    208.8±8.34µs        ? ?/sec    1.16    242.4±5.92µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, no NULLs                                 1.00    167.1±1.30µs        ? ?/sec    1.00    167.5±1.43µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.01    202.5±2.28µs        ? ?/sec    1.00    201.0±2.14µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    225.0±2.98µs        ? ?/sec    1.15    258.0±3.56µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00    207.8±1.63µs        ? ?/sec    1.00    207.1±1.12µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00    141.2±1.26µs        ? ?/sec    1.09    153.6±3.21µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    198.9±5.49µs        ? ?/sec    1.16    230.7±2.61µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00    147.3±1.42µs        ? ?/sec    1.06    155.6±3.09µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, mandatory, no NULLs                                1.00    107.1±1.66µs        ? ?/sec    1.00    107.0±1.37µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, half NULLs                               1.00    174.8±2.00µs        ? ?/sec    1.19    208.6±1.34µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, no NULLs                                 1.01    117.0±2.28µs        ? ?/sec    1.00    116.1±1.81µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, mandatory, no NULLs                                      1.00     77.0±3.33µs        ? ?/sec    1.00     76.8±0.47µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, half NULLs                                     1.00    103.3±1.64µs        ? ?/sec    1.04    107.3±0.86µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, no NULLs                                       1.00     79.4±1.40µs        ? ?/sec    1.00     79.1±0.74µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, mandatory, no NULLs                                           1.00    106.3±0.75µs        ? ?/sec    1.00    105.8±0.53µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, half NULLs                                          1.00    174.4±0.60µs        ? ?/sec    1.05    182.7±1.32µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, no NULLs                                            1.01    110.8±0.49µs        ? ?/sec    1.00    110.1±0.73µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     40.8±0.44µs        ? ?/sec    1.05     42.9±0.17µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, half NULLs                              1.00    143.8±1.86µs        ? ?/sec    1.05    150.4±1.25µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, no NULLs                                1.00     45.4±0.23µs        ? ?/sec    1.04     47.3±1.29µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, mandatory, no NULLs                                      1.09    109.8±0.48µs        ? ?/sec    1.00    101.0±0.64µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, half NULLs                                     1.00    180.4±2.71µs        ? ?/sec    1.02    183.4±0.86µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, no NULLs                                       1.09    115.1±4.00µs        ? ?/sec    1.00    105.6±0.52µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, mandatory, no NULLs                                           1.00     36.9±0.28µs        ? ?/sec    1.02     37.5±0.49µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, half NULLs                                          1.00    140.3±1.80µs        ? ?/sec    1.05    147.4±2.56µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, no NULLs                                            1.01     41.4±0.55µs        ? ?/sec    1.00     41.1±0.22µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, mandatory, no NULLs                                      1.00     82.3±0.79µs        ? ?/sec    1.00     82.2±0.95µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, half NULLs                                     1.00    101.1±0.63µs        ? ?/sec    1.05    106.2±1.41µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, no NULLs                                       1.00     84.7±1.31µs        ? ?/sec    1.00     84.5±0.34µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, mandatory, no NULLs                                           1.00    106.4±0.43µs        ? ?/sec    1.00    106.0±3.09µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, half NULLs                                          1.00    166.1±2.35µs        ? ?/sec    1.05    174.5±1.14µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, no NULLs                                            1.01    111.4±2.91µs        ? ?/sec    1.00    109.9±1.47µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     23.1±0.32µs        ? ?/sec    1.00     23.2±0.25µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, half NULLs                              1.00    122.6±1.13µs        ? ?/sec    1.06    130.2±0.97µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, no NULLs                                1.00     27.6±0.31µs        ? ?/sec    1.00     27.7±0.41µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, mandatory, no NULLs                                      1.11     91.5±1.84µs        ? ?/sec    1.00     82.7±1.23µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, half NULLs                                     1.00    161.6±3.75µs        ? ?/sec    1.01    164.0±0.67µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, no NULLs                                       1.09     94.6±0.87µs        ? ?/sec    1.00     87.1±0.72µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, mandatory, no NULLs                                           1.01     15.4±0.67µs        ? ?/sec    1.00     15.4±0.55µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, half NULLs                                          1.00    121.3±1.68µs        ? ?/sec    1.05    127.8±2.50µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, no NULLs                                            1.03     21.6±0.61µs        ? ?/sec    1.00     21.0±0.40µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, mandatory, no NULLs                                      1.00     79.4±0.46µs        ? ?/sec    1.00     79.7±0.71µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, half NULLs                                     1.00     89.9±1.34µs        ? ?/sec    1.18    106.5±2.02µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, no NULLs                                       1.01     82.5±0.49µs        ? ?/sec    1.00     82.0±0.63µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, mandatory, no NULLs                                           1.01    107.0±1.16µs        ? ?/sec    1.00    105.9±0.59µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, half NULLs                                          1.00    143.1±1.95µs        ? ?/sec    1.27   181.7±10.16µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, no NULLs                                            1.02    111.5±3.08µs        ? ?/sec    1.00    109.7±2.90µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, mandatory, no NULLs                               1.00    146.3±0.55µs        ? ?/sec    1.00    146.0±0.76µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, half NULLs                              1.00    167.1±0.82µs        ? ?/sec    1.21    201.9±6.35µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, no NULLs                                1.00    151.1±1.38µs        ? ?/sec    1.00    150.9±0.53µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, mandatory, no NULLs                                      1.00     88.0±3.19µs        ? ?/sec    1.10     96.6±0.78µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, half NULLs                                     1.00    134.3±0.86µs        ? ?/sec    1.28    171.3±1.05µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, no NULLs                                       1.00     92.3±0.71µs        ? ?/sec    1.09    100.4±1.19µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, mandatory, no NULLs                                           1.00     38.7±0.96µs        ? ?/sec    1.04     40.4±2.85µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, half NULLs                                          1.00    111.9±1.81µs        ? ?/sec    1.29    144.6±3.85µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, no NULLs                                            1.00     45.3±0.79µs        ? ?/sec    1.07     48.4±3.29µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, mandatory, no NULLs                                       1.00     81.1±0.70µs        ? ?/sec    1.00     80.8±1.38µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, half NULLs                                      1.00    103.4±0.70µs        ? ?/sec    1.04    108.0±0.88µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, no NULLs                                        1.00     83.5±1.22µs        ? ?/sec    1.00     83.4±0.91µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, mandatory, no NULLs                                            1.01    108.7±1.13µs        ? ?/sec    1.00    107.5±0.48µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, half NULLs                                           1.00    172.6±1.43µs        ? ?/sec    1.05    180.4±1.16µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, no NULLs                                             1.01    113.4±1.54µs        ? ?/sec    1.00    111.9±0.39µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, mandatory, no NULLs                                1.00     34.5±0.14µs        ? ?/sec    1.01     35.0±0.92µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, half NULLs                               1.00    134.7±2.68µs        ? ?/sec    1.05    141.9±3.65µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, no NULLs                                 1.00     39.0±0.48µs        ? ?/sec    1.00     39.0±0.56µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, mandatory, no NULLs                                       1.09    101.7±1.24µs        ? ?/sec    1.00     93.5±1.40µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, half NULLs                                      1.00    173.7±6.07µs        ? ?/sec    1.02    176.3±6.43µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, no NULLs                                        1.09    107.2±2.03µs        ? ?/sec    1.00     98.3±3.20µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, mandatory, no NULLs                                            1.00     28.7±0.11µs        ? ?/sec    1.01     28.9±0.37µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, half NULLs                                           1.00    132.7±1.29µs        ? ?/sec    1.05    139.1±2.54µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, no NULLs                                             1.00     33.3±0.16µs        ? ?/sec    1.01     33.5±0.31µs        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings half NULLs                                     1.00      6.0±0.13ms        ? ?/sec    1.00      6.0±0.07ms        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings no NULLs                                       1.00     11.9±0.16ms        ? ?/sec    1.02     12.2±0.42ms        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, mandatory, no NULLs                                     1.00    502.7±9.65µs        ? ?/sec    1.13   568.0±14.89µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, half NULLs                                    1.00    653.6±2.42µs        ? ?/sec    1.09   709.6±83.95µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, no NULLs                                      1.00   503.0±18.75µs        ? ?/sec    1.15   579.1±39.16µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, mandatory, no NULLs                                          1.00    688.4±3.99µs        ? ?/sec    1.07   735.4±34.54µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, half NULLs                                         1.00    791.4±9.95µs        ? ?/sec    1.00   792.1±12.56µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, no NULLs                                           1.00    700.0±7.73µs        ? ?/sec    1.06   741.7±22.24µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, mandatory, no NULLs                                1.04    335.2±6.63µs        ? ?/sec    1.00    321.7±9.40µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, half NULLs                               1.00    379.7±8.86µs        ? ?/sec    1.13   428.1±60.95µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, no NULLs                                 1.05    341.3±9.40µs        ? ?/sec    1.00    326.0±2.13µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.02    153.3±2.41µs        ? ?/sec    1.00    149.6±2.41µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.00    200.7±3.33µs        ? ?/sec    1.06    212.6±5.98µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.00    137.6±2.10µs        ? ?/sec    1.03    142.3±2.42µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.00   364.7±15.49µs        ? ?/sec    1.08    393.0±2.82µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.00    324.8±4.73µs        ? ?/sec    1.08    349.7±2.64µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.00    372.9±5.71µs        ? ?/sec    1.08    401.1±5.50µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.00     92.1±1.11µs        ? ?/sec    1.00     92.5±0.77µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, half NULLs                                    1.00    111.8±0.98µs        ? ?/sec    1.04    116.0±0.59µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, no NULLs                                      1.00     95.2±0.67µs        ? ?/sec    1.00     94.9±0.33µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, mandatory, no NULLs                                          1.00    126.8±4.54µs        ? ?/sec    1.00    126.3±1.63µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, half NULLs                                         1.00    186.2±0.74µs        ? ?/sec    1.04    194.4±2.44µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, no NULLs                                           1.01    130.7±0.84µs        ? ?/sec    1.00    130.0±0.72µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     40.8±0.21µs        ? ?/sec    1.04     42.6±0.25µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, half NULLs                             1.00    142.0±3.46µs        ? ?/sec    1.05    149.7±4.00µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, no NULLs                               1.00     45.3±0.34µs        ? ?/sec    1.03     46.6±0.28µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, mandatory, no NULLs                                     1.08    109.4±0.53µs        ? ?/sec    1.00    101.3±0.50µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, half NULLs                                    1.00    179.9±2.45µs        ? ?/sec    1.02    183.3±2.79µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, no NULLs                                      1.09    114.4±1.09µs        ? ?/sec    1.00    105.3±0.79µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, mandatory, no NULLs                                          1.00     36.8±0.20µs        ? ?/sec    1.00     36.7±0.13µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, half NULLs                                         1.00    140.4±0.84µs        ? ?/sec    1.05    147.0±2.24µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, no NULLs                                           1.00     41.2±0.29µs        ? ?/sec    1.00     41.1±0.18µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, mandatory, no NULLs                                     1.00     82.1±0.56µs        ? ?/sec    1.00     81.9±0.54µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, half NULLs                                    1.00    101.9±0.83µs        ? ?/sec    1.04    106.3±0.81µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, no NULLs                                      1.00     84.8±0.94µs        ? ?/sec    1.00     84.8±1.14µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, mandatory, no NULLs                                          1.00    106.7±1.34µs        ? ?/sec    1.00    106.9±5.81µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, half NULLs                                         1.00    167.6±1.12µs        ? ?/sec    1.04    174.4±0.79µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, no NULLs                                           1.01    111.2±1.62µs        ? ?/sec    1.00    110.5±2.35µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     21.9±0.42µs        ? ?/sec    1.02     22.3±0.40µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, half NULLs                             1.00    123.9±5.81µs        ? ?/sec    1.06    131.7±3.97µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, no NULLs                               1.00     26.2±0.51µs        ? ?/sec    1.02     26.6±0.35µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, mandatory, no NULLs                                     1.11     91.5±0.47µs        ? ?/sec    1.00     82.4±1.09µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, half NULLs                                    1.00    162.3±2.09µs        ? ?/sec    1.01    164.4±1.25µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, no NULLs                                      1.11     96.4±2.07µs        ? ?/sec    1.00     87.0±0.89µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.03     19.3±1.13µs        ? ?/sec    1.00     18.7±0.73µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.00    122.5±4.56µs        ? ?/sec    1.04    127.9±1.23µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.05     23.9±1.32µs        ? ?/sec    1.00     22.7±0.56µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, mandatory, no NULLs                                     1.00     79.8±0.32µs        ? ?/sec    1.01     80.4±1.03µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, half NULLs                                    1.00     90.3±0.75µs        ? ?/sec    1.18    106.7±0.66µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, no NULLs                                      1.00     82.5±1.44µs        ? ?/sec    1.00     82.6±0.67µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, mandatory, no NULLs                                          1.00    107.3±0.99µs        ? ?/sec    1.00    107.3±0.70µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, half NULLs                                         1.00    149.0±1.45µs        ? ?/sec    1.18    175.8±1.20µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, no NULLs                                           1.01    111.6±1.87µs        ? ?/sec    1.00    110.5±0.63µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, mandatory, no NULLs                              1.00    146.2±0.76µs        ? ?/sec    1.00    146.0±0.56µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, half NULLs                             1.00    168.7±1.66µs        ? ?/sec    1.19    201.1±3.74µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, no NULLs                               1.01    152.2±2.70µs        ? ?/sec    1.00    150.6±0.95µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, mandatory, no NULLs                                     1.00     87.0±1.77µs        ? ?/sec    1.11     96.9±0.91µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, half NULLs                                    1.00    134.6±1.40µs        ? ?/sec    1.28    172.0±2.28µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, no NULLs                                      1.00     92.4±3.10µs        ? ?/sec    1.10    101.3±0.73µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, mandatory, no NULLs                                          1.00     38.8±0.92µs        ? ?/sec    1.08     41.7±3.24µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, half NULLs                                         1.00    112.3±1.67µs        ? ?/sec    1.28    143.3±0.71µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, no NULLs                                           1.00     46.5±0.89µs        ? ?/sec    1.09     50.8±3.42µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, mandatory, no NULLs                                      1.00     87.9±2.14µs        ? ?/sec    1.00     87.4±0.27µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, half NULLs                                     1.00    107.0±4.69µs        ? ?/sec    1.04    111.1±0.44µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, no NULLs                                       1.00     90.1±1.03µs        ? ?/sec    1.00     90.1±0.41µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, mandatory, no NULLs                                           1.01    117.6±1.57µs        ? ?/sec    1.00    117.0±1.13µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, half NULLs                                          1.00    176.9±2.52µs        ? ?/sec    1.05    185.2±2.84µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, no NULLs                                            1.00    121.8±2.05µs        ? ?/sec    1.00    121.6±1.50µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     34.5±0.16µs        ? ?/sec    1.01     34.7±0.13µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, half NULLs                              1.00    133.5±0.63µs        ? ?/sec    1.06    141.8±1.51µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, no NULLs                                1.00     38.9±0.60µs        ? ?/sec    1.00     39.0±2.01µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, mandatory, no NULLs                                      1.09    101.9±1.61µs        ? ?/sec    1.00     93.4±0.74µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, half NULLs                                     1.00    172.1±1.02µs        ? ?/sec    1.02    176.2±1.77µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, no NULLs                                       1.09    106.9±1.16µs        ? ?/sec    1.00     97.8±0.76µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.00     28.8±0.25µs        ? ?/sec    1.00     28.7±0.09µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.00    133.4±2.31µs        ? ?/sec    1.04    138.8±0.79µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.00     33.4±0.13µs        ? ?/sec    1.00     33.4±0.20µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, half NULLs            1.00    123.7±3.29µs        ? ?/sec    1.04    128.6±1.74µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, no NULLs              1.02     23.5±1.02µs        ? ?/sec    1.00     23.1±0.64µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, half NULLs             1.00    242.1±1.11µs        ? ?/sec    1.06    256.2±3.23µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, no NULLs               1.00    120.0±3.00µs        ? ?/sec    1.02    122.8±2.14µs        ? ?/sec

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing optimize_unaligned_bitchunk_iterator (b4b71aa) to bd76edd diff
BENCH_NAME=arrow_reader_clickbench
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader_clickbench
BENCH_FILTER=
BENCH_BRANCH_NAME=optimize_unaligned_bitchunk_iterator
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                             main                                   optimize_unaligned_bitchunk_iterator
-----                                             ----                                   ------------------------------------
arrow_reader_clickbench/async/Q1                  1.02      2.4±0.05ms        ? ?/sec    1.00      2.3±0.04ms        ? ?/sec
arrow_reader_clickbench/async/Q10                 1.14     12.4±0.16ms        ? ?/sec    1.00     10.9±0.22ms        ? ?/sec
arrow_reader_clickbench/async/Q11                 1.15     14.5±0.40ms        ? ?/sec    1.00     12.6±0.32ms        ? ?/sec
arrow_reader_clickbench/async/Q12                 1.06     23.6±0.50ms        ? ?/sec    1.00     22.3±0.25ms        ? ?/sec
arrow_reader_clickbench/async/Q13                 1.07     29.6±0.30ms        ? ?/sec    1.00     27.7±0.36ms        ? ?/sec
arrow_reader_clickbench/async/Q14                 1.04     26.1±0.16ms        ? ?/sec    1.00     25.0±0.35ms        ? ?/sec
arrow_reader_clickbench/async/Q19                 1.10      6.0±0.09ms        ? ?/sec    1.00      5.4±0.25ms        ? ?/sec
arrow_reader_clickbench/async/Q20                 1.02    125.4±1.81ms        ? ?/sec    1.00    122.8±1.31ms        ? ?/sec
arrow_reader_clickbench/async/Q21                 1.03    159.3±2.26ms        ? ?/sec    1.00    155.1±2.41ms        ? ?/sec
arrow_reader_clickbench/async/Q22                 1.00    257.9±5.39ms        ? ?/sec    1.13   291.0±28.48ms        ? ?/sec
arrow_reader_clickbench/async/Q23                 1.03    426.9±5.97ms        ? ?/sec    1.00    414.1±5.11ms        ? ?/sec
arrow_reader_clickbench/async/Q24                 1.03     33.0±0.65ms        ? ?/sec    1.00     32.0±0.48ms        ? ?/sec
arrow_reader_clickbench/async/Q27                 1.01    101.6±0.57ms        ? ?/sec    1.00    100.8±0.78ms        ? ?/sec
arrow_reader_clickbench/async/Q28                 1.01     99.3±0.46ms        ? ?/sec    1.00     98.4±0.55ms        ? ?/sec
arrow_reader_clickbench/async/Q30                 1.01     29.2±0.21ms        ? ?/sec    1.00     29.0±0.27ms        ? ?/sec
arrow_reader_clickbench/async/Q36                 1.01    110.3±1.08ms        ? ?/sec    1.00    109.7±0.65ms        ? ?/sec
arrow_reader_clickbench/async/Q37                 1.01     85.9±0.88ms        ? ?/sec    1.00     85.4±1.14ms        ? ?/sec
arrow_reader_clickbench/async/Q38                 1.01     34.7±0.30ms        ? ?/sec    1.00     34.4±0.41ms        ? ?/sec
arrow_reader_clickbench/async/Q39                 1.00     48.2±0.57ms        ? ?/sec    1.01     48.5±0.89ms        ? ?/sec
arrow_reader_clickbench/async/Q40                 1.00     30.0±0.21ms        ? ?/sec    1.01     30.4±0.82ms        ? ?/sec
arrow_reader_clickbench/async/Q41                 1.01     24.3±0.24ms        ? ?/sec    1.00     24.2±0.16ms        ? ?/sec
arrow_reader_clickbench/async/Q42                 1.00     11.6±0.18ms        ? ?/sec    1.00     11.5±0.11ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q1     1.01      2.3±0.06ms        ? ?/sec    1.00      2.3±0.03ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q10    1.00     12.0±0.23ms        ? ?/sec    1.02     12.3±0.38ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q11    1.00     13.8±0.22ms        ? ?/sec    1.00     13.9±0.25ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q12    1.00     21.8±0.25ms        ? ?/sec    1.07     23.2±0.24ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q13    1.00     26.8±0.50ms        ? ?/sec    1.06     28.3±0.26ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q14    1.00     24.4±0.33ms        ? ?/sec    1.05     25.6±0.28ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q19    1.00      5.1±0.05ms        ? ?/sec    1.05      5.4±0.10ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q20    1.00    110.4±0.97ms        ? ?/sec    1.02    112.4±1.21ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q21    1.00    125.8±1.29ms        ? ?/sec    1.02    128.2±0.82ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q22    1.00    231.2±2.57ms        ? ?/sec    1.02    235.7±1.99ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q23    1.00    368.8±2.14ms        ? ?/sec    1.02    374.9±1.95ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q24    1.00     29.5±0.38ms        ? ?/sec    1.07     31.6±0.36ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q27    1.00     95.1±0.59ms        ? ?/sec    1.01     96.0±0.59ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q28    1.00     92.7±0.57ms        ? ?/sec    1.02     94.4±0.81ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q30    1.00     26.2±0.34ms        ? ?/sec    1.06     27.7±0.32ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q36    1.00    103.5±1.13ms        ? ?/sec    1.01    104.3±1.21ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q37    1.00     80.9±0.69ms        ? ?/sec    1.00     81.3±1.17ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q38    1.00     29.7±0.30ms        ? ?/sec    1.02     30.3±0.92ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q39    1.00     40.7±0.48ms        ? ?/sec    1.02     41.6±0.32ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q40    1.00     25.5±0.42ms        ? ?/sec    1.07     27.2±0.41ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q41    1.00     20.6±0.35ms        ? ?/sec    1.07     21.9±0.24ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q42    1.00     10.2±0.23ms        ? ?/sec    1.02     10.4±0.12ms        ? ?/sec
arrow_reader_clickbench/sync/Q1                   1.01      2.1±0.01ms        ? ?/sec    1.00      2.0±0.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q10                  1.03      8.0±0.14ms        ? ?/sec    1.00      7.8±0.13ms        ? ?/sec
arrow_reader_clickbench/sync/Q11                  1.06      9.9±0.29ms        ? ?/sec    1.00      9.3±0.07ms        ? ?/sec
arrow_reader_clickbench/sync/Q12                  1.00     29.7±0.37ms        ? ?/sec    1.17     34.7±1.06ms        ? ?/sec
arrow_reader_clickbench/sync/Q13                  1.05     45.2±1.10ms        ? ?/sec    1.00     43.0±0.49ms        ? ?/sec
arrow_reader_clickbench/sync/Q14                  1.04     32.2±0.57ms        ? ?/sec    1.00     31.0±0.58ms        ? ?/sec
arrow_reader_clickbench/sync/Q19                  1.08      4.5±0.15ms        ? ?/sec    1.00      4.2±0.06ms        ? ?/sec
arrow_reader_clickbench/sync/Q20                  1.03    181.7±1.47ms        ? ?/sec    1.00    177.0±1.59ms        ? ?/sec
arrow_reader_clickbench/sync/Q21                  1.02    240.8±2.20ms        ? ?/sec    1.00    235.7±1.32ms        ? ?/sec
arrow_reader_clickbench/sync/Q22                  1.04    492.0±4.86ms        ? ?/sec    1.00    475.3±2.90ms        ? ?/sec
arrow_reader_clickbench/sync/Q23                  1.01   451.4±21.84ms        ? ?/sec    1.00   445.6±14.99ms        ? ?/sec
arrow_reader_clickbench/sync/Q24                  1.07     43.2±1.15ms        ? ?/sec    1.00     40.4±0.43ms        ? ?/sec
arrow_reader_clickbench/sync/Q27                  1.04    159.4±1.52ms        ? ?/sec    1.00    153.2±1.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q28                  1.03    152.9±1.98ms        ? ?/sec    1.00    147.9±1.77ms        ? ?/sec
arrow_reader_clickbench/sync/Q30                  1.06     29.5±0.39ms        ? ?/sec    1.00     27.9±0.37ms        ? ?/sec
arrow_reader_clickbench/sync/Q36                  1.06    162.6±1.88ms        ? ?/sec    1.00    153.2±2.01ms        ? ?/sec
arrow_reader_clickbench/sync/Q37                  1.04     90.1±1.24ms        ? ?/sec    1.00     86.5±1.34ms        ? ?/sec
arrow_reader_clickbench/sync/Q38                  1.03     30.1±0.15ms        ? ?/sec    1.00     29.2±0.38ms        ? ?/sec
arrow_reader_clickbench/sync/Q39                  1.08     36.2±0.33ms        ? ?/sec    1.00     33.5±0.80ms        ? ?/sec
arrow_reader_clickbench/sync/Q40                  1.08     28.1±0.22ms        ? ?/sec    1.00     26.1±0.39ms        ? ?/sec
arrow_reader_clickbench/sync/Q41                  1.08     30.8±0.74ms        ? ?/sec    1.00     28.6±0.39ms        ? ?/sec
arrow_reader_clickbench/sync/Q42                  1.05     13.0±0.27ms        ? ?/sec    1.00     12.4±0.19ms        ? ?/sec

@Dandandan
Copy link
Contributor Author

run benchmark boolean_kernels filter_kernels

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing optimize_unaligned_bitchunk_iterator (af1cdf2) to bd76edd diff
BENCH_NAME=boolean_kernels
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench boolean_kernels
BENCH_FILTER=
BENCH_BRANCH_NAME=optimize_unaligned_bitchunk_iterator
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group            main                                   optimize_unaligned_bitchunk_iterator
-----            ----                                   ------------------------------------
and              1.00    208.1±2.44ns        ? ?/sec    1.00    208.9±0.97ns        ? ?/sec
and_sliced_1     1.00   1097.6±9.44ns        ? ?/sec    1.25  1373.7±15.78ns        ? ?/sec
and_sliced_24    1.00    247.4±6.83ns        ? ?/sec    1.29    320.2±5.97ns        ? ?/sec
not              1.00    145.2±2.91ns        ? ?/sec    1.35    195.5±0.98ns        ? ?/sec
not_slice_24     1.00    193.2±3.45ns        ? ?/sec    1.29    248.5±1.36ns        ? ?/sec
not_sliced_1     2.49   619.8±12.16ns        ? ?/sec    1.00    248.6±3.73ns        ? ?/sec
or               1.01    197.2±1.35ns        ? ?/sec    1.00    196.1±0.69ns        ? ?/sec
or_sliced_1      1.00   1095.3±5.53ns        ? ?/sec    1.19  1305.7±15.79ns        ? ?/sec
or_sliced_24     1.00    247.9±1.86ns        ? ?/sec    1.55    384.5±1.52ns        ? ?/sec

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing optimize_unaligned_bitchunk_iterator (af1cdf2) to bd76edd diff
BENCH_NAME=filter_kernels
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench filter_kernels
BENCH_FILTER=
BENCH_BRANCH_NAME=optimize_unaligned_bitchunk_iterator
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                         main                                   optimize_unaligned_bitchunk_iterator
-----                                                                         ----                                   ------------------------------------
filter context decimal128 (kept 1/2)                                          1.11     49.4±8.65µs        ? ?/sec    1.00     44.5±4.73µs        ? ?/sec
filter context decimal128 high selectivity (kept 1023/1024)                   1.00     50.4±1.05µs        ? ?/sec    1.00     50.5±1.09µs        ? ?/sec
filter context decimal128 low selectivity (kept 1/1024)                       1.00    230.5±2.32ns        ? ?/sec    1.01    232.6±2.95ns        ? ?/sec
filter context f32 (kept 1/2)                                                 1.13     87.8±1.02µs        ? ?/sec    1.00     77.9±0.45µs        ? ?/sec
filter context f32 high selectivity (kept 1023/1024)                          1.00     10.4±0.48µs        ? ?/sec    1.04     10.8±0.58µs        ? ?/sec
filter context f32 low selectivity (kept 1/1024)                              1.01    441.6±6.87ns        ? ?/sec    1.00    437.0±2.24ns        ? ?/sec
filter context fsb with value length 20 (kept 1/2)                            1.17     70.7±0.70µs        ? ?/sec    1.00     60.6±0.49µs        ? ?/sec
filter context fsb with value length 20 high selectivity (kept 1023/1024)     1.17     70.8±0.46µs        ? ?/sec    1.00     60.7±0.46µs        ? ?/sec
filter context fsb with value length 20 low selectivity (kept 1/1024)         1.17     70.8±1.36µs        ? ?/sec    1.00     60.7±0.60µs        ? ?/sec
filter context fsb with value length 5 (kept 1/2)                             1.16     70.7±0.42µs        ? ?/sec    1.00     60.7±0.26µs        ? ?/sec
filter context fsb with value length 5 high selectivity (kept 1023/1024)      1.17     70.8±1.24µs        ? ?/sec    1.00     60.6±0.26µs        ? ?/sec
filter context fsb with value length 5 low selectivity (kept 1/1024)          1.17     70.6±0.23µs        ? ?/sec    1.00     60.6±0.30µs        ? ?/sec
filter context fsb with value length 50 (kept 1/2)                            1.16     70.7±0.80µs        ? ?/sec    1.00     60.8±0.51µs        ? ?/sec
filter context fsb with value length 50 high selectivity (kept 1023/1024)     1.16     70.7±0.63µs        ? ?/sec    1.00     60.7±1.05µs        ? ?/sec
filter context fsb with value length 50 low selectivity (kept 1/1024)         1.16     70.6±0.47µs        ? ?/sec    1.00     60.6±0.35µs        ? ?/sec
filter context i32 (kept 1/2)                                                 1.00     16.4±0.10µs        ? ?/sec    1.00     16.4±0.13µs        ? ?/sec
filter context i32 high selectivity (kept 1023/1024)                          1.01      6.8±0.42µs        ? ?/sec    1.00      6.7±0.53µs        ? ?/sec
filter context i32 low selectivity (kept 1/1024)                              1.00    221.7±3.27ns        ? ?/sec    1.00    221.6±2.90ns        ? ?/sec
filter context i32 w NULLs (kept 1/2)                                         1.13     87.7±0.48µs        ? ?/sec    1.00     77.4±0.26µs        ? ?/sec
filter context i32 w NULLs high selectivity (kept 1023/1024)                  1.04     10.9±0.43µs        ? ?/sec    1.00     10.4±0.56µs        ? ?/sec
filter context i32 w NULLs low selectivity (kept 1/1024)                      1.00    439.1±4.38ns        ? ?/sec    1.00    437.1±3.30ns        ? ?/sec
filter context mixed string view (kept 1/2)                                   1.05    112.6±2.79µs        ? ?/sec    1.00    107.0±5.97µs        ? ?/sec
filter context mixed string view high selectivity (kept 1023/1024)            1.01     54.9±1.44µs        ? ?/sec    1.00     54.5±0.95µs        ? ?/sec
filter context mixed string view low selectivity (kept 1/1024)                1.04   650.8±23.08ns        ? ?/sec    1.00   626.6±27.40ns        ? ?/sec
filter context short string view (kept 1/2)                                   1.06    113.4±2.71µs        ? ?/sec    1.00    107.3±6.52µs        ? ?/sec
filter context short string view high selectivity (kept 1023/1024)            1.05     56.4±1.58µs        ? ?/sec    1.00     53.6±1.10µs        ? ?/sec
filter context short string view low selectivity (kept 1/1024)                1.03    503.2±7.50ns        ? ?/sec    1.00    487.5±7.58ns        ? ?/sec
filter context string (kept 1/2)                                              1.02   583.6±18.28µs        ? ?/sec    1.00   574.7±12.77µs        ? ?/sec
filter context string dictionary (kept 1/2)                                   1.00     17.1±0.07µs        ? ?/sec    1.01     17.3±0.06µs        ? ?/sec
filter context string dictionary high selectivity (kept 1023/1024)            1.00      7.1±0.59µs        ? ?/sec    1.02      7.2±0.37µs        ? ?/sec
filter context string dictionary low selectivity (kept 1/1024)                1.00   641.0±14.66ns        ? ?/sec    1.02   652.6±20.05ns        ? ?/sec
filter context string dictionary w NULLs (kept 1/2)                           1.12     88.4±0.67µs        ? ?/sec    1.00     78.6±1.20µs        ? ?/sec
filter context string dictionary w NULLs high selectivity (kept 1023/1024)    1.03     11.0±0.61µs        ? ?/sec    1.00     10.8±0.46µs        ? ?/sec
filter context string dictionary w NULLs low selectivity (kept 1/1024)        1.00   868.4±11.96ns        ? ?/sec    1.01   876.3±11.34ns        ? ?/sec
filter context string high selectivity (kept 1023/1024)                       1.01   639.8±14.48µs        ? ?/sec    1.00   631.4±21.80µs        ? ?/sec
filter context string low selectivity (kept 1/1024)                           1.00   879.1±14.34ns        ? ?/sec    1.09    957.8±9.40ns        ? ?/sec
filter context u8 (kept 1/2)                                                  1.00     15.0±0.28µs        ? ?/sec    1.01     15.1±0.81µs        ? ?/sec
filter context u8 high selectivity (kept 1023/1024)                           1.09      2.0±0.01µs        ? ?/sec    1.00  1830.5±20.10ns        ? ?/sec
filter context u8 low selectivity (kept 1/1024)                               1.00    214.9±9.12ns        ? ?/sec    1.00    214.6±2.01ns        ? ?/sec
filter context u8 w NULLs (kept 1/2)                                          1.15     87.2±5.56µs        ? ?/sec    1.00     75.9±0.37µs        ? ?/sec
filter context u8 w NULLs high selectivity (kept 1023/1024)                   1.01      5.4±0.03µs        ? ?/sec    1.00      5.3±0.04µs        ? ?/sec
filter context u8 w NULLs low selectivity (kept 1/1024)                       1.00    433.9±2.96ns        ? ?/sec    1.01   436.8±16.96ns        ? ?/sec
filter decimal128 (kept 1/2)                                                  1.00     49.4±4.87µs        ? ?/sec    1.15     56.9±5.85µs        ? ?/sec
filter decimal128 high selectivity (kept 1023/1024)                           1.02     54.8±1.06µs        ? ?/sec    1.00     53.8±1.22µs        ? ?/sec
filter decimal128 low selectivity (kept 1/1024)                               1.87      3.2±0.03µs        ? ?/sec    1.00  1708.1±16.85ns        ? ?/sec
filter f32 (kept 1/2)                                                         1.02    157.3±0.53µs        ? ?/sec    1.00    154.2±4.84µs        ? ?/sec
filter fsb with value length 20 (kept 1/2)                                    1.08    136.4±1.69µs        ? ?/sec    1.00    126.5±1.50µs        ? ?/sec
filter fsb with value length 20 high selectivity (kept 1023/1024)             1.01     73.0±2.12µs        ? ?/sec    1.00     72.0±2.15µs        ? ?/sec
filter fsb with value length 20 low selectivity (kept 1/1024)                 1.55      2.6±0.02µs        ? ?/sec    1.00  1713.3±36.83ns        ? ?/sec
filter fsb with value length 5 (kept 1/2)                                     1.16    141.4±1.73µs        ? ?/sec    1.00    121.5±2.48µs        ? ?/sec
filter fsb with value length 5 high selectivity (kept 1023/1024)              1.08     11.4±0.68µs        ? ?/sec    1.00     10.5±0.48µs        ? ?/sec
filter fsb with value length 5 low selectivity (kept 1/1024)                  1.53      2.6±0.03µs        ? ?/sec    1.00  1679.0±12.86ns        ? ?/sec
filter fsb with value length 50 (kept 1/2)                                    1.11   167.6±12.64µs        ? ?/sec    1.00   150.7±14.26µs        ? ?/sec
filter fsb with value length 50 high selectivity (kept 1023/1024)             1.00    210.0±6.22µs        ? ?/sec    1.03    215.4±8.76µs        ? ?/sec
filter fsb with value length 50 low selectivity (kept 1/1024)                 1.51      2.7±0.08µs        ? ?/sec    1.00  1785.0±57.36ns        ? ?/sec
filter i32 (kept 1/2)                                                         1.14     36.5±0.29µs        ? ?/sec    1.00     32.0±1.25µs        ? ?/sec
filter i32 high selectivity (kept 1023/1024)                                  1.11      9.5±0.51µs        ? ?/sec    1.00      8.5±0.51µs        ? ?/sec
filter i32 low selectivity (kept 1/1024)                                      1.37      2.4±0.01µs        ? ?/sec    1.00  1742.3±17.01ns        ? ?/sec
filter optimize (kept 1/2)                                                    1.02     35.8±0.75µs        ? ?/sec    1.00     35.2±0.23µs        ? ?/sec
filter optimize high selectivity (kept 1023/1024)                             1.32      3.0±0.04µs        ? ?/sec    1.00      2.3±0.03µs        ? ?/sec
filter optimize low selectivity (kept 1/1024)                                 1.51      2.5±0.01µs        ? ?/sec    1.00  1667.8±10.36ns        ? ?/sec
filter run array (kept 1/2)                                                   1.01    464.2±1.82µs        ? ?/sec    1.00    459.8±3.98µs        ? ?/sec
filter run array high selectivity (kept 1023/1024)                            1.00    497.1±6.75µs        ? ?/sec    1.00    496.4±7.66µs        ? ?/sec
filter run array low selectivity (kept 1/1024)                                1.00    382.6±4.88µs        ? ?/sec    1.00    381.9±3.74µs        ? ?/sec
filter single record batch                                                    1.00     38.5±1.11µs        ? ?/sec    1.12     43.3±0.24µs        ? ?/sec
filter u8 (kept 1/2)                                                          1.11     36.1±0.32µs        ? ?/sec    1.00     32.5±0.45µs        ? ?/sec
filter u8 high selectivity (kept 1023/1024)                                   1.14      4.0±0.07µs        ? ?/sec    1.00      3.5±0.09µs        ? ?/sec
filter u8 low selectivity (kept 1/1024)                                       1.98      3.0±0.01µs        ? ?/sec    1.00   1505.6±5.97ns        ? ?/sec

@Dandandan
Copy link
Contributor Author

run benchmark boolean_kernels

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing optimize_unaligned_bitchunk_iterator (15ad389) to bd76edd diff
BENCH_NAME=boolean_kernels
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench boolean_kernels
BENCH_FILTER=
BENCH_BRANCH_NAME=optimize_unaligned_bitchunk_iterator
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group            main                                   optimize_unaligned_bitchunk_iterator
-----            ----                                   ------------------------------------
and              1.02    209.4±6.44ns        ? ?/sec    1.00    206.0±1.39ns        ? ?/sec
and_sliced_1     1.00   1098.9±6.72ns        ? ?/sec    1.24   1366.2±7.13ns        ? ?/sec
and_sliced_24    1.00    247.3±1.06ns        ? ?/sec    1.28    316.9±3.89ns        ? ?/sec
not              1.00    146.4±2.53ns        ? ?/sec    1.29    189.5±4.04ns        ? ?/sec
not_slice_24     1.00    193.5±1.46ns        ? ?/sec    1.27    246.6±1.92ns        ? ?/sec
not_sliced_1     2.49    621.2±6.22ns        ? ?/sec    1.00   249.2±32.36ns        ? ?/sec
or               1.00    197.2±1.36ns        ? ?/sec    1.00    196.8±1.72ns        ? ?/sec
or_sliced_1      1.00  1102.3±30.29ns        ? ?/sec    1.18  1304.2±13.07ns        ? ?/sec
or_sliced_24     1.00    248.8±3.12ns        ? ?/sec    1.54    383.0±3.72ns        ? ?/sec

@Dandandan
Copy link
Contributor Author

run benchmark boolean_kernels

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing optimize_unaligned_bitchunk_iterator (72a9632) to bd76edd diff
BENCH_NAME=boolean_kernels
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench boolean_kernels
BENCH_FILTER=
BENCH_BRANCH_NAME=optimize_unaligned_bitchunk_iterator
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group            main                                   optimize_unaligned_bitchunk_iterator
-----            ----                                   ------------------------------------
and              1.00    210.6±5.55ns        ? ?/sec    1.32    278.7±2.24ns        ? ?/sec
and_sliced_1     1.95  1101.7±18.85ns        ? ?/sec    1.00    564.1±3.51ns        ? ?/sec
and_sliced_24    1.00    248.6±2.07ns        ? ?/sec    1.17    289.8±3.47ns        ? ?/sec
not              1.00    148.4±2.89ns        ? ?/sec    1.26    187.1±3.70ns        ? ?/sec
not_slice_24     1.00    197.9±9.43ns        ? ?/sec    1.18    232.6±3.45ns        ? ?/sec
not_sliced_1     1.30    621.0±7.59ns        ? ?/sec    1.00    478.4±5.67ns        ? ?/sec
or               1.00   200.4±11.38ns        ? ?/sec    1.28    256.4±4.39ns        ? ?/sec
or_sliced_1      1.97   1099.8±9.53ns        ? ?/sec    1.00    558.9±1.48ns        ? ?/sec
or_sliced_24     1.00    249.3±2.19ns        ? ?/sec    1.16    290.0±1.67ns        ? ?/sec

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing optimize_unaligned_bitchunk_iterator (00d36c0) to bd76edd diff
BENCH_NAME=filter_kernels
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench filter_kernels
BENCH_FILTER=
BENCH_BRANCH_NAME=optimize_unaligned_bitchunk_iterator
Results will be posted here when complete

@Dandandan Dandandan changed the title Optimize UnalignedBitChunk Optimize boolean operations Jan 28, 2026
@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                         main                                   optimize_unaligned_bitchunk_iterator
-----                                                                         ----                                   ------------------------------------
filter context decimal128 (kept 1/2)                                          1.00     45.2±5.62µs        ? ?/sec    1.07     48.6±7.24µs        ? ?/sec
filter context decimal128 high selectivity (kept 1023/1024)                   1.00     50.3±1.16µs        ? ?/sec    1.03     51.6±1.67µs        ? ?/sec
filter context decimal128 low selectivity (kept 1/1024)                       1.02    232.2±2.27ns        ? ?/sec    1.00    227.5±2.16ns        ? ?/sec
filter context f32 (kept 1/2)                                                 1.00     88.0±0.93µs        ? ?/sec    1.00     88.2±0.50µs        ? ?/sec
filter context f32 high selectivity (kept 1023/1024)                          1.00     10.4±0.51µs        ? ?/sec    1.01     10.5±0.45µs        ? ?/sec
filter context f32 low selectivity (kept 1/1024)                              1.00    428.7±3.76ns        ? ?/sec    1.04    443.8±6.21ns        ? ?/sec
filter context fsb with value length 20 (kept 1/2)                            1.00     70.8±1.04µs        ? ?/sec    1.00     71.0±1.69µs        ? ?/sec
filter context fsb with value length 20 high selectivity (kept 1023/1024)     1.00     70.8±0.68µs        ? ?/sec    1.00     70.8±0.45µs        ? ?/sec
filter context fsb with value length 20 low selectivity (kept 1/1024)         1.00     70.7±0.70µs        ? ?/sec    1.00     71.0±1.48µs        ? ?/sec
filter context fsb with value length 5 (kept 1/2)                             1.00     70.7±0.29µs        ? ?/sec    1.00     70.8±1.24µs        ? ?/sec
filter context fsb with value length 5 high selectivity (kept 1023/1024)      1.00     71.0±2.16µs        ? ?/sec    1.00     70.8±1.02µs        ? ?/sec
filter context fsb with value length 5 low selectivity (kept 1/1024)          1.00     70.7±0.35µs        ? ?/sec    1.00     70.7±0.52µs        ? ?/sec
filter context fsb with value length 50 (kept 1/2)                            1.00     70.6±0.21µs        ? ?/sec    1.00     70.8±0.73µs        ? ?/sec
filter context fsb with value length 50 high selectivity (kept 1023/1024)     1.00     70.7±0.39µs        ? ?/sec    1.00     70.7±0.38µs        ? ?/sec
filter context fsb with value length 50 low selectivity (kept 1/1024)         1.00     70.9±1.45µs        ? ?/sec    1.00     70.7±0.37µs        ? ?/sec
filter context i32 (kept 1/2)                                                 1.01     16.5±0.09µs        ? ?/sec    1.00     16.4±0.10µs        ? ?/sec
filter context i32 high selectivity (kept 1023/1024)                          1.00      6.3±0.37µs        ? ?/sec    1.02      6.4±0.26µs        ? ?/sec
filter context i32 low selectivity (kept 1/1024)                              1.01    223.8±5.99ns        ? ?/sec    1.00    221.3±2.68ns        ? ?/sec
filter context i32 w NULLs (kept 1/2)                                         1.00     87.9±0.97µs        ? ?/sec    1.00     87.6±1.11µs        ? ?/sec
filter context i32 w NULLs high selectivity (kept 1023/1024)                  1.03     10.6±0.52µs        ? ?/sec    1.00     10.3±0.32µs        ? ?/sec
filter context i32 w NULLs low selectivity (kept 1/1024)                      1.00   426.3±10.15ns        ? ?/sec    1.04    444.7±4.24ns        ? ?/sec
filter context mixed string view (kept 1/2)                                   1.06    121.9±6.83µs        ? ?/sec    1.00    114.6±5.06µs        ? ?/sec
filter context mixed string view high selectivity (kept 1023/1024)            1.00     54.3±1.82µs        ? ?/sec    1.00     54.5±1.02µs        ? ?/sec
filter context mixed string view low selectivity (kept 1/1024)                1.00   629.6±18.13ns        ? ?/sec    1.02    640.3±8.29ns        ? ?/sec
filter context short string view (kept 1/2)                                   1.00    114.3±3.04µs        ? ?/sec    1.01    115.3±6.22µs        ? ?/sec
filter context short string view high selectivity (kept 1023/1024)            1.00     53.7±1.35µs        ? ?/sec    1.00     53.7±1.38µs        ? ?/sec
filter context short string view low selectivity (kept 1/1024)                1.00    481.8±7.92ns        ? ?/sec    1.04   500.8±20.49ns        ? ?/sec
filter context string (kept 1/2)                                              1.00   589.5±14.27µs        ? ?/sec    1.03   607.6±20.92µs        ? ?/sec
filter context string dictionary (kept 1/2)                                   1.00     17.3±0.09µs        ? ?/sec    1.02     17.6±0.16µs        ? ?/sec
filter context string dictionary high selectivity (kept 1023/1024)            1.00      7.0±0.38µs        ? ?/sec    1.01      7.1±0.38µs        ? ?/sec
filter context string dictionary low selectivity (kept 1/1024)                1.00    641.0±8.40ns        ? ?/sec    1.00    642.6±9.49ns        ? ?/sec
filter context string dictionary w NULLs (kept 1/2)                           1.00     88.4±0.67µs        ? ?/sec    1.00     88.7±1.12µs        ? ?/sec
filter context string dictionary w NULLs high selectivity (kept 1023/1024)    1.00     10.8±0.47µs        ? ?/sec    1.00     10.8±0.42µs        ? ?/sec
filter context string dictionary w NULLs low selectivity (kept 1/1024)        1.00   865.5±16.35ns        ? ?/sec    1.02   880.2±18.21ns        ? ?/sec
filter context string high selectivity (kept 1023/1024)                       1.00   628.6±13.12µs        ? ?/sec    1.22   769.8±30.41µs        ? ?/sec
filter context string low selectivity (kept 1/1024)                           1.00   986.3±18.17ns        ? ?/sec    1.00    988.6±7.58ns        ? ?/sec
filter context u8 (kept 1/2)                                                  1.00     15.0±0.10µs        ? ?/sec    1.00     15.0±0.21µs        ? ?/sec
filter context u8 high selectivity (kept 1023/1024)                           1.09      2.0±0.02µs        ? ?/sec    1.00  1838.9±11.06ns        ? ?/sec
filter context u8 low selectivity (kept 1/1024)                               1.01    215.8±4.71ns        ? ?/sec    1.00    214.2±4.20ns        ? ?/sec
filter context u8 w NULLs (kept 1/2)                                          1.00     85.9±0.35µs        ? ?/sec    1.00     85.9±0.40µs        ? ?/sec
filter context u8 w NULLs high selectivity (kept 1023/1024)                   1.00      5.1±0.02µs        ? ?/sec    1.05      5.3±0.34µs        ? ?/sec
filter context u8 w NULLs low selectivity (kept 1/1024)                       1.00    422.6±6.69ns        ? ?/sec    1.04    439.5±3.95ns        ? ?/sec
filter decimal128 (kept 1/2)                                                  1.06     49.1±4.61µs        ? ?/sec    1.00     46.3±4.13µs        ? ?/sec
filter decimal128 high selectivity (kept 1023/1024)                           1.00     53.7±1.31µs        ? ?/sec    1.00     53.7±1.21µs        ? ?/sec
filter decimal128 low selectivity (kept 1/1024)                               1.64      3.2±0.03µs        ? ?/sec    1.00  1930.5±12.51ns        ? ?/sec
filter f32 (kept 1/2)                                                         1.18    155.3±2.01µs        ? ?/sec    1.00    132.1±0.73µs        ? ?/sec
filter fsb with value length 20 (kept 1/2)                                    1.06    137.0±0.76µs        ? ?/sec    1.00    129.8±2.34µs        ? ?/sec
filter fsb with value length 20 high selectivity (kept 1023/1024)             1.02     72.0±1.59µs        ? ?/sec    1.00     70.2±1.52µs        ? ?/sec
filter fsb with value length 20 low selectivity (kept 1/1024)                 1.80      3.5±0.03µs        ? ?/sec    1.00  1928.0±12.91ns        ? ?/sec
filter fsb with value length 5 (kept 1/2)                                     1.04    142.2±1.24µs        ? ?/sec    1.00    136.3±1.94µs        ? ?/sec
filter fsb with value length 5 high selectivity (kept 1023/1024)              1.03     11.6±0.50µs        ? ?/sec    1.00     11.2±0.49µs        ? ?/sec
filter fsb with value length 5 low selectivity (kept 1/1024)                  1.85      3.4±0.02µs        ? ?/sec    1.00  1833.9±42.42ns        ? ?/sec
filter fsb with value length 50 (kept 1/2)                                    1.09   165.2±13.42µs        ? ?/sec    1.00   151.0±12.52µs        ? ?/sec
filter fsb with value length 50 high selectivity (kept 1023/1024)             1.00    218.9±4.77µs        ? ?/sec    1.01    220.4±9.74µs        ? ?/sec
filter fsb with value length 50 low selectivity (kept 1/1024)                 1.68      3.4±0.02µs        ? ?/sec    1.00      2.0±0.03µs        ? ?/sec
filter i32 (kept 1/2)                                                         1.64     54.2±0.90µs        ? ?/sec    1.00     33.1±0.14µs        ? ?/sec
filter i32 high selectivity (kept 1023/1024)                                  1.01      9.0±0.55µs        ? ?/sec    1.00      8.9±0.38µs        ? ?/sec
filter i32 low selectivity (kept 1/1024)                                      1.74      3.0±0.02µs        ? ?/sec    1.00  1699.0±26.09ns        ? ?/sec
filter optimize (kept 1/2)                                                    1.00     36.0±0.37µs        ? ?/sec    1.01     36.5±0.22µs        ? ?/sec
filter optimize high selectivity (kept 1023/1024)                             1.06      2.7±0.01µs        ? ?/sec    1.00      2.6±0.03µs        ? ?/sec
filter optimize low selectivity (kept 1/1024)                                 1.23  1802.2±54.38ns        ? ?/sec    1.00  1460.3±12.84ns        ? ?/sec
filter run array (kept 1/2)                                                   1.03    380.2±6.73µs        ? ?/sec    1.00    370.2±5.94µs        ? ?/sec
filter run array high selectivity (kept 1023/1024)                            1.00    397.3±3.49µs        ? ?/sec    1.03    409.1±7.72µs        ? ?/sec
filter run array low selectivity (kept 1/1024)                                1.00    283.8±4.16µs        ? ?/sec    1.04    294.0±3.47µs        ? ?/sec
filter single record batch                                                    1.22     52.8±0.66µs        ? ?/sec    1.00     43.2±0.22µs        ? ?/sec
filter u8 (kept 1/2)                                                          1.23     53.6±0.62µs        ? ?/sec    1.00     43.4±0.63µs        ? ?/sec
filter u8 high selectivity (kept 1023/1024)                                   1.01      3.8±0.08µs        ? ?/sec    1.00      3.8±0.04µs        ? ?/sec
filter u8 low selectivity (kept 1/1024)                                       1.67      3.3±0.04µs        ? ?/sec    1.00  1974.5±11.18ns        ? ?/sec

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing optimize_unaligned_bitchunk_iterator (0d425e4) to bd76edd diff
BENCH_NAME=boolean_kernels
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench boolean_kernels
BENCH_FILTER=
BENCH_BRANCH_NAME=optimize_unaligned_bitchunk_iterator
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group            main                                   optimize_unaligned_bitchunk_iterator
-----            ----                                   ------------------------------------
and              1.00    209.5±2.43ns        ? ?/sec    1.12    235.3±2.74ns        ? ?/sec
and_sliced_1     4.27  1102.0±16.28ns        ? ?/sec    1.00    258.3±0.80ns        ? ?/sec
and_sliced_24    1.07    247.6±1.57ns        ? ?/sec    1.00    230.9±0.91ns        ? ?/sec
not              1.00    146.4±0.89ns        ? ?/sec    1.04    151.7±1.66ns        ? ?/sec
not_slice_24     1.03    194.6±2.11ns        ? ?/sec    1.00    188.3±1.39ns        ? ?/sec
not_sliced_1     2.58   622.6±15.57ns        ? ?/sec    1.00    241.1±2.83ns        ? ?/sec
or               1.00    199.3±2.13ns        ? ?/sec    1.17    232.8±0.92ns        ? ?/sec
or_sliced_1      3.93   1097.9±2.51ns        ? ?/sec    1.00    279.3±2.24ns        ? ?/sec
or_sliced_24     1.06    248.7±2.98ns        ? ?/sec    1.00    234.2±1.28ns        ? ?/sec

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing optimize_unaligned_bitchunk_iterator (0d425e4) to bd76edd diff
BENCH_NAME=arrow_reader
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader
BENCH_FILTER=
BENCH_BRANCH_NAME=optimize_unaligned_bitchunk_iterator
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                                                      main                                   optimize_unaligned_bitchunk_iterator
-----                                                                                                      ----                                   ------------------------------------
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                           1.00  1180.3±11.63µs        ? ?/sec    1.01  1194.1±23.49µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                          1.00   1249.6±9.93µs        ? ?/sec    1.03  1288.4±11.98µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                            1.00  1188.9±15.84µs        ? ?/sec    1.00  1191.6±16.35µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                                     1.00    481.3±4.12µs        ? ?/sec    1.29    623.1±8.25µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                                    1.00    658.5±3.93µs        ? ?/sec    1.15    757.9±4.17µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                                      1.00    486.4±6.39µs        ? ?/sec    1.26    614.9±5.04µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                                          1.03    557.5±4.56µs        ? ?/sec    1.00    543.7±3.71µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                                         1.00    727.4±8.72µs        ? ?/sec    1.03    749.6±7.81µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                                           1.02    572.3±8.45µs        ? ?/sec    1.00   562.4±25.21µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.00    154.1±3.06µs        ? ?/sec    1.04    159.7±2.24µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.18    225.4±1.87µs        ? ?/sec    1.00    191.3±1.53µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.08    163.5±2.46µs        ? ?/sec    1.00    150.9±1.92µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.09    224.2±3.55µs        ? ?/sec    1.00    204.8±5.19µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.00   195.8±10.48µs        ? ?/sec    1.19    232.0±1.34µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.13    258.7±2.61µs        ? ?/sec    1.00    228.0±6.63µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.09    232.6±3.37µs        ? ?/sec    1.00    213.7±5.13µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs     1.01  1091.8±11.29µs        ? ?/sec    1.00  1085.9±12.99µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, half NULLs    1.03   982.2±17.60µs        ? ?/sec    1.00   955.9±14.56µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, no NULLs      1.01   1097.8±6.39µs        ? ?/sec    1.00  1090.4±10.33µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                 1.18    467.7±8.08µs        ? ?/sec    1.00    397.6±3.18µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                1.14   672.6±22.86µs        ? ?/sec    1.00    590.8±8.40µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                  1.15    467.1±4.47µs        ? ?/sec    1.00    405.8±6.69µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, mandatory, no NULLs        1.21    195.0±1.05µs        ? ?/sec    1.00    161.5±3.32µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, half NULLs       1.14    340.5±6.02µs        ? ?/sec    1.00    298.9±3.37µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, no NULLs         1.21    200.7±3.88µs        ? ?/sec    1.00    166.2±3.76µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.54    118.1±2.87µs        ? ?/sec    1.00     76.4±0.94µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.18    301.3±6.66µs        ? ?/sec    1.00    254.8±2.38µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.51    123.0±1.11µs        ? ?/sec    1.00     81.2±0.99µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, mandatory, no NULLs                    1.00    690.0±4.04µs        ? ?/sec    1.07    738.0±4.56µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, half NULLs                   1.00   587.9±12.97µs        ? ?/sec    1.00    588.9±6.59µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, no NULLs                     1.00    698.6±7.79µs        ? ?/sec    1.08   752.0±59.02µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, mandatory, no NULLs                                1.02     63.8±1.64µs        ? ?/sec    1.00     62.7±1.55µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, half NULLs                               1.07    273.0±2.60µs        ? ?/sec    1.00    255.9±3.61µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, no NULLs                                 1.02     71.3±2.25µs        ? ?/sec    1.00     70.2±2.52µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, mandatory, no NULLs                     1.00     86.2±0.88µs        ? ?/sec    1.09     94.3±1.36µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, half NULLs                    1.01    231.7±4.74µs        ? ?/sec    1.00    229.0±1.12µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, no NULLs                      1.00     91.0±0.38µs        ? ?/sec    1.09     99.5±3.03µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, mandatory, no NULLs                                 1.00      9.1±0.20µs        ? ?/sec    1.03      9.4±0.19µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, half NULLs                                1.03    191.7±0.79µs        ? ?/sec    1.00    186.9±4.44µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, no NULLs                                  1.00     14.2±0.24µs        ? ?/sec    1.01     14.4±0.30µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, mandatory, no NULLs                     1.00    170.7±3.78µs        ? ?/sec    1.08    184.3±2.85µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, half NULLs                    1.06    372.3±2.41µs        ? ?/sec    1.00    349.9±2.97µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, no NULLs                      1.00    175.7±0.79µs        ? ?/sec    1.08    189.2±1.71µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, mandatory, no NULLs                                 1.00     14.5±0.56µs        ? ?/sec    1.00     14.5±0.32µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, half NULLs                                1.12    298.5±7.32µs        ? ?/sec    1.00    266.4±2.38µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, no NULLs                                  1.02     20.3±0.51µs        ? ?/sec    1.00     20.0±0.49µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, mandatory, no NULLs                     1.00    342.2±2.13µs        ? ?/sec    1.07    366.7±5.13µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, half NULLs                    1.02    400.8±2.33µs        ? ?/sec    1.00    393.0±3.18µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, no NULLs                      1.00    349.4±4.10µs        ? ?/sec    1.07    373.6±7.69µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, mandatory, no NULLs                                 1.00     26.8±0.38µs        ? ?/sec    1.06     28.5±1.10µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, half NULLs                                1.10    246.5±3.77µs        ? ?/sec    1.00    224.0±1.13µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, no NULLs                                  1.00     33.8±0.78µs        ? ?/sec    1.06     35.8±1.16µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.00    108.9±2.21µs        ? ?/sec    1.00    108.4±1.31µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, half NULLs                          1.00    129.7±0.61µs        ? ?/sec    1.06    137.8±0.68µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, no NULLs                            1.00    111.9±0.57µs        ? ?/sec    1.00    111.9±2.79µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, mandatory, no NULLs                                1.00    159.2±1.49µs        ? ?/sec    1.00    158.5±3.33µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, half NULLs                               1.00    222.7±2.10µs        ? ?/sec    1.07    237.4±2.07µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, no NULLs                                 1.01    164.5±2.55µs        ? ?/sec    1.00    163.0±1.82µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00     75.4±0.54µs        ? ?/sec    1.00     75.7±1.18µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    179.4±3.63µs        ? ?/sec    1.09    194.8±3.29µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.01     80.8±0.65µs        ? ?/sec    1.00     80.4±0.40µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.01    145.4±1.28µs        ? ?/sec    1.00    143.5±5.76µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    217.7±3.14µs        ? ?/sec    1.06    230.9±1.59µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, no NULLs                            1.01    150.0±0.89µs        ? ?/sec    1.00    148.2±2.12µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, mandatory, no NULLs                                1.02     73.5±1.29µs        ? ?/sec    1.00     71.7±0.46µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, half NULLs                               1.00    179.5±1.57µs        ? ?/sec    1.07    192.7±1.70µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, no NULLs                                 1.01     78.4±1.33µs        ? ?/sec    1.00     77.6±1.76µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.02    109.2±1.12µs        ? ?/sec    1.00    106.8±2.42µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, half NULLs                          1.01    118.5±1.34µs        ? ?/sec    1.00    116.8±1.44µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, no NULLs                            1.01    110.3±0.35µs        ? ?/sec    1.00    109.2±0.80µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, mandatory, no NULLs                                1.01    161.5±0.93µs        ? ?/sec    1.00    160.1±1.45µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, half NULLs                               1.02    208.4±1.22µs        ? ?/sec    1.00    205.1±1.09µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, no NULLs                                 1.02    167.3±3.33µs        ? ?/sec    1.00    164.7±0.58µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.01    201.9±1.48µs        ? ?/sec    1.00    199.3±1.03µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.01    226.2±1.28µs        ? ?/sec    1.00    223.6±8.08µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.02    207.7±0.73µs        ? ?/sec    1.00    204.5±1.29µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.01    143.0±1.00µs        ? ?/sec    1.00    141.0±2.26µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, half NULLs                          1.03   196.4±10.31µs        ? ?/sec    1.00    190.9±2.51µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, no NULLs                            1.01    148.7±0.83µs        ? ?/sec    1.00    147.0±3.07µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, mandatory, no NULLs                                1.01    100.6±1.20µs        ? ?/sec    1.00    100.1±0.94µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, half NULLs                               1.02    172.4±1.13µs        ? ?/sec    1.00    168.8±5.50µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, no NULLs                                 1.04    113.5±1.30µs        ? ?/sec    1.00    108.8±2.59µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, mandatory, no NULLs                                      1.00     76.8±1.31µs        ? ?/sec    1.00     76.8±0.38µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, half NULLs                                     1.00    102.9±0.68µs        ? ?/sec    1.09    111.9±1.20µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, no NULLs                                       1.00     79.2±0.52µs        ? ?/sec    1.01     79.9±1.73µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, mandatory, no NULLs                                           1.00    106.1±0.45µs        ? ?/sec    1.00    106.2±1.75µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, half NULLs                                          1.00   176.8±15.56µs        ? ?/sec    1.08    191.7±3.23µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, no NULLs                                            1.02   112.6±10.32µs        ? ?/sec    1.00    110.2±0.69µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     40.8±0.40µs        ? ?/sec    1.05     42.8±0.13µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, half NULLs                              1.00    141.8±1.62µs        ? ?/sec    1.11    157.9±0.96µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, no NULLs                                1.00     45.4±0.34µs        ? ?/sec    1.03     46.7±0.27µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, mandatory, no NULLs                                      1.01    111.7±0.92µs        ? ?/sec    1.00    110.3±1.19µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, half NULLs                                     1.00    180.1±1.38µs        ? ?/sec    1.09    196.6±4.10µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, no NULLs                                       1.01    115.8±0.48µs        ? ?/sec    1.00    114.9±2.66µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, mandatory, no NULLs                                           1.00     36.7±0.12µs        ? ?/sec    1.00     36.8±0.21µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, half NULLs                                          1.00    138.8±1.95µs        ? ?/sec    1.12    155.5±1.14µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, no NULLs                                            1.02     42.1±0.18µs        ? ?/sec    1.00     41.2±0.21µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, mandatory, no NULLs                                      1.00     82.2±0.45µs        ? ?/sec    1.01     83.0±2.24µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, half NULLs                                     1.00    101.1±0.97µs        ? ?/sec    1.10    111.0±1.82µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, no NULLs                                       1.00     85.4±4.48µs        ? ?/sec    1.00     85.1±0.53µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, mandatory, no NULLs                                           1.01    107.0±1.72µs        ? ?/sec    1.00    105.9±2.46µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, half NULLs                                          1.00    165.4±1.02µs        ? ?/sec    1.11    183.4±1.12µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, no NULLs                                            1.01    111.1±0.97µs        ? ?/sec    1.00    110.4±0.84µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     23.0±0.24µs        ? ?/sec    1.01     23.2±0.24µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, half NULLs                              1.00    121.8±1.07µs        ? ?/sec    1.14    138.6±1.78µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, no NULLs                                1.00     27.7±0.62µs        ? ?/sec    1.00     27.7±0.38µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, mandatory, no NULLs                                      1.02     93.1±1.71µs        ? ?/sec    1.00     91.0±0.74µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, half NULLs                                     1.00    160.8±1.37µs        ? ?/sec    1.10    177.4±3.73µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, no NULLs                                       1.01     96.5±1.55µs        ? ?/sec    1.00     96.0±1.59µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, mandatory, no NULLs                                           1.01     15.5±0.67µs        ? ?/sec    1.00     15.3±0.25µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, half NULLs                                          1.00    120.0±1.11µs        ? ?/sec    1.13    135.9±0.74µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, no NULLs                                            1.01     21.2±0.40µs        ? ?/sec    1.00     21.1±0.45µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, mandatory, no NULLs                                      1.00     79.8±0.60µs        ? ?/sec    1.00     79.8±2.90µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, half NULLs                                     1.00     89.4±0.65µs        ? ?/sec    1.00     89.5±0.94µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, no NULLs                                       1.00     82.0±0.87µs        ? ?/sec    1.00     82.0±1.69µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, mandatory, no NULLs                                           1.01    108.0±1.70µs        ? ?/sec    1.00    106.5±0.96µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, half NULLs                                          1.00    141.9±1.23µs        ? ?/sec    1.00    141.4±1.02µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, no NULLs                                            1.01    110.1±1.22µs        ? ?/sec    1.00    108.6±2.68µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, mandatory, no NULLs                               1.00    146.2±0.84µs        ? ?/sec    1.00    146.3±0.57µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, half NULLs                              1.01    168.2±4.88µs        ? ?/sec    1.00    166.7±1.16µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, no NULLs                                1.00    151.4±1.35µs        ? ?/sec    1.00    150.9±1.42µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, mandatory, no NULLs                                      1.01     88.4±1.23µs        ? ?/sec    1.00     87.6±0.69µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, half NULLs                                     1.01    135.6±1.26µs        ? ?/sec    1.00    134.4±0.59µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, no NULLs                                       1.01     93.2±0.69µs        ? ?/sec    1.00     92.6±2.06µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, mandatory, no NULLs                                           1.00     39.4±0.76µs        ? ?/sec    1.05     41.6±1.47µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, half NULLs                                          1.02    112.3±3.75µs        ? ?/sec    1.00    110.1±1.08µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, no NULLs                                            1.00     43.1±0.86µs        ? ?/sec    1.10     47.4±0.85µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, mandatory, no NULLs                                       1.00     80.6±1.51µs        ? ?/sec    1.02     81.8±0.52µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, half NULLs                                      1.00    102.9±0.63µs        ? ?/sec    1.10    112.8±0.89µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, no NULLs                                        1.00     82.9±0.37µs        ? ?/sec    1.03     85.3±1.52µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, mandatory, no NULLs                                            1.00    108.1±2.27µs        ? ?/sec    1.00    108.6±1.80µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, half NULLs                                           1.00   173.3±15.71µs        ? ?/sec    1.09    189.3±1.59µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, no NULLs                                             1.00    112.2±0.46µs        ? ?/sec    1.01    113.0±0.54µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, mandatory, no NULLs                                1.02     34.7±0.32µs        ? ?/sec    1.00     34.1±0.12µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, half NULLs                               1.00    133.6±1.66µs        ? ?/sec    1.12    149.9±1.89µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, no NULLs                                 1.05     39.1±0.15µs        ? ?/sec    1.00     37.3±0.21µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, mandatory, no NULLs                                       1.02    104.0±0.42µs        ? ?/sec    1.00    102.4±1.50µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, half NULLs                                      1.00   175.3±12.52µs        ? ?/sec    1.08    189.1±7.11µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, no NULLs                                        1.02    108.5±0.98µs        ? ?/sec    1.00    106.6±0.74µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, mandatory, no NULLs                                            1.00     28.9±0.21µs        ? ?/sec    1.00     29.0±0.18µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, half NULLs                                           1.00    131.9±2.40µs        ? ?/sec    1.13    148.3±2.36µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, no NULLs                                             1.03     34.1±0.53µs        ? ?/sec    1.00     33.3±0.19µs        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings half NULLs                                     1.00      6.2±0.09ms        ? ?/sec    1.02      6.3±0.05ms        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings no NULLs                                       1.00     12.3±0.17ms        ? ?/sec    1.03     12.7±0.34ms        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, mandatory, no NULLs                                     1.00    491.7±5.07µs        ? ?/sec    1.27    622.7±7.51µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, half NULLs                                    1.00   659.4±11.23µs        ? ?/sec    1.15   761.1±14.06µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, no NULLs                                      1.00    487.9±5.70µs        ? ?/sec    1.28    624.8±5.70µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, mandatory, no NULLs                                          1.01   659.7±12.91µs        ? ?/sec    1.00    655.4±6.38µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, half NULLs                                         1.00    775.2±4.43µs        ? ?/sec    1.03    800.8±8.44µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, no NULLs                                           1.01    671.5±7.74µs        ? ?/sec    1.00   666.8±16.58µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, mandatory, no NULLs                                1.02   335.6±15.45µs        ? ?/sec    1.00   330.2±20.28µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, half NULLs                               1.08    417.3±3.69µs        ? ?/sec    1.00    385.8±4.08µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, no NULLs                                 1.02    337.5±4.74µs        ? ?/sec    1.00    331.4±3.02µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.00    140.4±4.08µs        ? ?/sec    1.08    151.7±2.37µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.11    201.5±2.21µs        ? ?/sec    1.00    182.1±4.74µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.03    143.8±2.40µs        ? ?/sec    1.00    140.2±1.84µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.03    368.3±8.24µs        ? ?/sec    1.00    357.2±4.16µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.09    326.4±2.58µs        ? ?/sec    1.00    300.4±3.67µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.03    376.7±4.85µs        ? ?/sec    1.00    366.5±4.60µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.00     92.1±0.31µs        ? ?/sec    1.00     92.5±1.71µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, half NULLs                                    1.00    111.5±1.73µs        ? ?/sec    1.08    120.4±0.94µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, no NULLs                                      1.00     95.3±2.06µs        ? ?/sec    1.00     95.1±1.17µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, mandatory, no NULLs                                          1.00    126.2±1.13µs        ? ?/sec    1.00    125.7±0.98µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, half NULLs                                         1.00    185.4±1.07µs        ? ?/sec    1.10    204.2±9.90µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, no NULLs                                           1.00    130.7±1.62µs        ? ?/sec    1.00    130.7±1.56µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     40.9±0.22µs        ? ?/sec    1.05     42.9±0.23µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, half NULLs                             1.00    141.2±1.09µs        ? ?/sec    1.12    157.9±1.01µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, no NULLs                               1.00     45.4±0.52µs        ? ?/sec    1.03     47.0±0.58µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, mandatory, no NULLs                                     1.02    111.9±1.71µs        ? ?/sec    1.00    110.2±0.48µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, half NULLs                                    1.00    180.2±3.41µs        ? ?/sec    1.09    197.1±2.97µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, no NULLs                                      1.01    116.2±1.35µs        ? ?/sec    1.00    115.0±3.00µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, mandatory, no NULLs                                          1.00     36.9±0.14µs        ? ?/sec    1.00     36.8±0.22µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, half NULLs                                         1.00    138.7±3.07µs        ? ?/sec    1.12    155.2±0.95µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, no NULLs                                           1.02     42.2±0.55µs        ? ?/sec    1.00     41.2±1.02µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, mandatory, no NULLs                                     1.00     82.4±0.56µs        ? ?/sec    1.00     82.1±1.11µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, half NULLs                                    1.00    101.5±1.71µs        ? ?/sec    1.09    110.1±2.03µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, no NULLs                                      1.01     85.1±0.70µs        ? ?/sec    1.00     84.5±0.79µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, mandatory, no NULLs                                          1.01    106.9±1.40µs        ? ?/sec    1.00    105.6±0.64µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, half NULLs                                         1.00    167.3±2.81µs        ? ?/sec    1.09    183.1±3.67µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, no NULLs                                           1.02    111.6±3.30µs        ? ?/sec    1.00    109.9±0.67µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     22.3±0.37µs        ? ?/sec    1.00     22.4±0.41µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, half NULLs                             1.00    122.2±1.73µs        ? ?/sec    1.14    138.8±0.77µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, no NULLs                               1.00     26.8±0.48µs        ? ?/sec    1.00     26.8±0.34µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, mandatory, no NULLs                                     1.02     93.3±3.05µs        ? ?/sec    1.00     91.3±0.86µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, half NULLs                                    1.00    161.2±0.93µs        ? ?/sec    1.10    177.4±1.20µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, no NULLs                                      1.02     97.6±1.44µs        ? ?/sec    1.00     95.9±1.57µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.00     17.9±0.37µs        ? ?/sec    1.04     18.7±0.68µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.00    121.1±3.36µs        ? ?/sec    1.13    136.7±4.31µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.02     23.5±0.66µs        ? ?/sec    1.00     23.1±0.76µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, mandatory, no NULLs                                     1.01     80.5±2.30µs        ? ?/sec    1.00     80.0±1.83µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, half NULLs                                    1.00     90.3±0.84µs        ? ?/sec    1.00     90.3±2.40µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, no NULLs                                      1.01     82.6±0.80µs        ? ?/sec    1.00     82.2±0.40µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, mandatory, no NULLs                                          1.00    107.0±2.26µs        ? ?/sec    1.00    106.6±0.68µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, half NULLs                                         1.00    144.4±2.30µs        ? ?/sec    1.05    151.8±2.13µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, no NULLs                                           1.00    110.3±2.58µs        ? ?/sec    1.00    110.0±0.81µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, mandatory, no NULLs                              1.01    147.1±0.62µs        ? ?/sec    1.00    146.1±0.50µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, half NULLs                             1.01    167.5±1.01µs        ? ?/sec    1.00    166.0±1.56µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, no NULLs                               1.01    151.9±0.91µs        ? ?/sec    1.00    150.8±0.73µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, mandatory, no NULLs                                     1.02     89.2±1.02µs        ? ?/sec    1.00     87.5±0.49µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, half NULLs                                    1.02    137.9±3.47µs        ? ?/sec    1.00    134.7±1.71µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, no NULLs                                      1.01     93.8±0.85µs        ? ?/sec    1.00     92.6±0.50µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, mandatory, no NULLs                                          1.00     39.3±0.47µs        ? ?/sec    1.09     42.8±1.48µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, half NULLs                                         1.01    112.1±1.82µs        ? ?/sec    1.00    110.7±0.96µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, no NULLs                                           1.00     46.6±0.61µs        ? ?/sec    1.06     49.4±3.33µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, mandatory, no NULLs                                      1.00     87.9±0.62µs        ? ?/sec    1.00     87.6±0.63µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, half NULLs                                     1.00    106.9±2.79µs        ? ?/sec    1.08    115.4±1.45µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, no NULLs                                       1.00     90.3±1.14µs        ? ?/sec    1.00     90.1±0.93µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, mandatory, no NULLs                                           1.00    118.1±2.63µs        ? ?/sec    1.01    118.8±3.90µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, half NULLs                                          1.00    177.0±3.57µs        ? ?/sec    1.10    194.2±3.59µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, no NULLs                                            1.00    121.7±0.39µs        ? ?/sec    1.01    122.8±1.82µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     34.7±0.22µs        ? ?/sec    1.00     34.6±0.18µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, half NULLs                              1.00    133.0±0.76µs        ? ?/sec    1.13    150.1±1.59µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, no NULLs                                1.01     38.9±0.33µs        ? ?/sec    1.00     38.7±0.29µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, mandatory, no NULLs                                      1.02    104.2±2.51µs        ? ?/sec    1.00    102.0±0.31µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, half NULLs                                     1.00    173.2±2.97µs        ? ?/sec    1.09    188.2±0.74µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, no NULLs                                       1.02    108.5±1.81µs        ? ?/sec    1.00    106.4±0.72µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.00     29.0±0.17µs        ? ?/sec    1.00     28.9±0.28µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.00    131.1±0.93µs        ? ?/sec    1.13    147.6±4.59µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.00     33.4±0.21µs        ? ?/sec    1.00     33.4±0.18µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, half NULLs            1.00    121.2±1.70µs        ? ?/sec    1.12    136.2±2.56µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, no NULLs              1.01     22.8±0.70µs        ? ?/sec    1.00     22.6±0.56µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, half NULLs             1.00    242.9±4.69µs        ? ?/sec    1.07    260.4±3.51µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, no NULLs               1.02    120.0±2.52µs        ? ?/sec    1.00    118.1±1.65µs        ? ?/sec

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing optimize_unaligned_bitchunk_iterator (060afb8) to bd76edd diff
BENCH_NAME=arrow_reader_clickbench
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader_clickbench
BENCH_FILTER=
BENCH_BRANCH_NAME=optimize_unaligned_bitchunk_iterator
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                             main                                   optimize_unaligned_bitchunk_iterator
-----                                             ----                                   ------------------------------------
arrow_reader_clickbench/async/Q1                  1.01      2.3±0.01ms        ? ?/sec    1.00      2.3±0.04ms        ? ?/sec
arrow_reader_clickbench/async/Q10                 1.02     12.6±0.31ms        ? ?/sec    1.00     12.3±0.31ms        ? ?/sec
arrow_reader_clickbench/async/Q11                 1.02     14.5±0.26ms        ? ?/sec    1.00     14.2±0.36ms        ? ?/sec
arrow_reader_clickbench/async/Q12                 1.03     23.8±0.32ms        ? ?/sec    1.00     23.2±0.24ms        ? ?/sec
arrow_reader_clickbench/async/Q13                 1.01     29.2±0.46ms        ? ?/sec    1.00     28.9±0.53ms        ? ?/sec
arrow_reader_clickbench/async/Q14                 1.03     26.5±0.82ms        ? ?/sec    1.00     25.8±0.36ms        ? ?/sec
arrow_reader_clickbench/async/Q19                 1.01      6.0±0.13ms        ? ?/sec    1.00      5.9±0.13ms        ? ?/sec
arrow_reader_clickbench/async/Q20                 1.08    132.2±1.07ms        ? ?/sec    1.00    122.2±0.97ms        ? ?/sec
arrow_reader_clickbench/async/Q21                 1.07    166.5±1.33ms        ? ?/sec    1.00    155.2±1.92ms        ? ?/sec
arrow_reader_clickbench/async/Q22                 1.00   248.2±25.40ms        ? ?/sec    1.13   281.0±33.44ms        ? ?/sec
arrow_reader_clickbench/async/Q23                 1.00    409.0±3.34ms        ? ?/sec    1.00    409.0±5.62ms        ? ?/sec
arrow_reader_clickbench/async/Q24                 1.01     32.2±0.31ms        ? ?/sec    1.00     31.9±0.32ms        ? ?/sec
arrow_reader_clickbench/async/Q27                 1.01     99.9±0.84ms        ? ?/sec    1.00     98.8±0.60ms        ? ?/sec
arrow_reader_clickbench/async/Q28                 1.01     97.6±1.38ms        ? ?/sec    1.00     96.8±1.12ms        ? ?/sec
arrow_reader_clickbench/async/Q30                 1.02     28.9±0.34ms        ? ?/sec    1.00     28.4±0.34ms        ? ?/sec
arrow_reader_clickbench/async/Q36                 1.01    108.5±1.11ms        ? ?/sec    1.00    107.7±0.95ms        ? ?/sec
arrow_reader_clickbench/async/Q37                 1.01     84.6±0.67ms        ? ?/sec    1.00     83.6±0.49ms        ? ?/sec
arrow_reader_clickbench/async/Q38                 1.01     33.9±0.29ms        ? ?/sec    1.00     33.7±0.51ms        ? ?/sec
arrow_reader_clickbench/async/Q39                 1.01     46.8±0.56ms        ? ?/sec    1.00     46.5±0.55ms        ? ?/sec
arrow_reader_clickbench/async/Q40                 1.00     29.3±0.83ms        ? ?/sec    1.01     29.5±0.39ms        ? ?/sec
arrow_reader_clickbench/async/Q41                 1.00     23.8±0.36ms        ? ?/sec    1.00     23.8±0.36ms        ? ?/sec
arrow_reader_clickbench/async/Q42                 1.00     11.2±0.17ms        ? ?/sec    1.00     11.2±0.25ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q1     1.00      2.3±0.05ms        ? ?/sec    1.00      2.3±0.06ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q10    1.01     11.8±0.25ms        ? ?/sec    1.00     11.7±0.43ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q11    1.00     13.3±0.34ms        ? ?/sec    1.01     13.5±0.30ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q12    1.02     22.7±0.20ms        ? ?/sec    1.00     22.2±0.27ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q13    1.00     27.6±0.40ms        ? ?/sec    1.00     27.5±0.26ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q14    1.02     25.2±0.28ms        ? ?/sec    1.00     24.8±0.21ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q19    1.01      5.4±0.14ms        ? ?/sec    1.00      5.4±0.09ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q20    1.01    110.3±1.21ms        ? ?/sec    1.00    109.4±1.27ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q21    1.01    125.8±1.87ms        ? ?/sec    1.00    124.6±0.93ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q22    1.01    231.8±1.69ms        ? ?/sec    1.00    229.4±1.91ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q23    1.07    375.5±8.91ms        ? ?/sec    1.00    352.2±1.52ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q24    1.00     30.5±0.45ms        ? ?/sec    1.00     30.6±0.31ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q27    1.01     95.4±0.49ms        ? ?/sec    1.00     94.1±0.58ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q28    1.01     93.0±0.74ms        ? ?/sec    1.00     92.1±0.81ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q30    1.01     27.2±0.33ms        ? ?/sec    1.00     27.0±0.24ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q36    1.01    104.0±1.20ms        ? ?/sec    1.00    102.8±1.20ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q37    1.01     81.4±0.60ms        ? ?/sec    1.00     80.4±0.90ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q38    1.01     30.7±0.42ms        ? ?/sec    1.00     30.4±0.39ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q39    1.01     41.9±0.38ms        ? ?/sec    1.00     41.5±0.42ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q40    1.00     27.1±0.42ms        ? ?/sec    1.01     27.4±0.43ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q41    1.00     21.6±0.30ms        ? ?/sec    1.01     21.9±0.28ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q42    1.01     10.6±0.27ms        ? ?/sec    1.00     10.5±0.12ms        ? ?/sec
arrow_reader_clickbench/sync/Q1                   1.01      2.1±0.04ms        ? ?/sec    1.00      2.0±0.01ms        ? ?/sec
arrow_reader_clickbench/sync/Q10                  1.00      8.0±0.09ms        ? ?/sec    1.00      8.0±0.12ms        ? ?/sec
arrow_reader_clickbench/sync/Q11                  1.01      9.7±0.29ms        ? ?/sec    1.00      9.6±0.16ms        ? ?/sec
arrow_reader_clickbench/sync/Q12                  1.00     29.7±0.51ms        ? ?/sec    1.21     35.8±0.58ms        ? ?/sec
arrow_reader_clickbench/sync/Q13                  1.01     44.9±1.27ms        ? ?/sec    1.00     44.4±0.62ms        ? ?/sec
arrow_reader_clickbench/sync/Q14                  1.01     31.8±0.27ms        ? ?/sec    1.00     31.5±0.66ms        ? ?/sec
arrow_reader_clickbench/sync/Q19                  1.00      4.3±0.04ms        ? ?/sec    1.03      4.4±0.09ms        ? ?/sec
arrow_reader_clickbench/sync/Q20                  1.01    177.9±1.47ms        ? ?/sec    1.00    175.7±1.08ms        ? ?/sec
arrow_reader_clickbench/sync/Q21                  1.00    236.1±2.33ms        ? ?/sec    1.00    234.9±2.08ms        ? ?/sec
arrow_reader_clickbench/sync/Q22                  1.02    486.5±3.97ms        ? ?/sec    1.00    474.7±2.88ms        ? ?/sec
arrow_reader_clickbench/sync/Q23                  1.00   442.5±20.96ms        ? ?/sec    1.01   445.0±15.54ms        ? ?/sec
arrow_reader_clickbench/sync/Q24                  1.00     40.6±0.53ms        ? ?/sec    1.03     41.9±0.38ms        ? ?/sec
arrow_reader_clickbench/sync/Q27                  1.03    155.9±1.36ms        ? ?/sec    1.00    152.0±0.95ms        ? ?/sec
arrow_reader_clickbench/sync/Q28                  1.02    150.3±1.24ms        ? ?/sec    1.00    146.9±1.40ms        ? ?/sec
arrow_reader_clickbench/sync/Q30                  1.00     29.3±0.46ms        ? ?/sec    1.01     29.5±0.43ms        ? ?/sec
arrow_reader_clickbench/sync/Q36                  1.01    156.1±1.01ms        ? ?/sec    1.00    155.1±1.36ms        ? ?/sec
arrow_reader_clickbench/sync/Q37                  1.01     88.3±0.89ms        ? ?/sec    1.00     87.3±1.11ms        ? ?/sec
arrow_reader_clickbench/sync/Q38                  1.01     30.0±0.29ms        ? ?/sec    1.00     29.7±0.21ms        ? ?/sec
arrow_reader_clickbench/sync/Q39                  1.03     35.5±0.59ms        ? ?/sec    1.00     34.6±0.46ms        ? ?/sec
arrow_reader_clickbench/sync/Q40                  1.04     28.3±0.68ms        ? ?/sec    1.00     27.2±0.43ms        ? ?/sec
arrow_reader_clickbench/sync/Q41                  1.05     31.0±0.54ms        ? ?/sec    1.00     29.6±0.70ms        ? ?/sec
arrow_reader_clickbench/sync/Q42                  1.03     12.8±0.11ms        ? ?/sec    1.00     12.5±0.10ms        ? ?/sec

@Dandandan
Copy link
Contributor Author

run benchmark filter_kernels boolean_kernels arrow_reader_clickbench

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing optimize_unaligned_bitchunk_iterator (060afb8) to bd76edd diff
BENCH_NAME=filter_kernels
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench filter_kernels
BENCH_FILTER=
BENCH_BRANCH_NAME=optimize_unaligned_bitchunk_iterator
Results will be posted here when complete

@Dandandan
Copy link
Contributor Author

FYI @alamb this is starting to look good perf wise

}

// both buffers have the same offset, we can use UnalignedBitChunk for both
let left_chunks = UnalignedBitChunk::new(left, left_offset_in_bits, len_in_bits);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we actually don't have to use this part (use the byte aligned one above and set the correct offset).

result.truncate(chunks.num_bytes());
}
let src = src.as_ref();
let chunks = UnalignedBitChunk::new(src, offset_in_bits, len_in_bits);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably not needed now that we have a fast byte aligned version.

}

#[inline]
fn fold<B, F>(mut self, init: B, mut f: F) -> B
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The idea here is to implement an improved fold implementation so from_trusted_len_iter is fast (I used AI assistance to come up with the implementation, but it seems to look jormal)

let mut dst = buffer.data.as_ptr();
for item in iterator {
let mut dst = buffer.data.as_ptr() as *mut T;
iterator.for_each(|item| {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for_each uses fold so can use a more efficient implementation if it is available.

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                         main                                   optimize_unaligned_bitchunk_iterator
-----                                                                         ----                                   ------------------------------------
filter context decimal128 (kept 1/2)                                          1.00     42.9±1.20µs        ? ?/sec    1.04     44.6±3.83µs        ? ?/sec
filter context decimal128 high selectivity (kept 1023/1024)                   1.00     49.5±1.01µs        ? ?/sec    1.05     51.9±1.60µs        ? ?/sec
filter context decimal128 low selectivity (kept 1/1024)                       1.01    239.9±5.20ns        ? ?/sec    1.00    237.5±6.21ns        ? ?/sec
filter context f32 (kept 1/2)                                                 1.00     87.5±0.52µs        ? ?/sec    1.00     87.8±1.36µs        ? ?/sec
filter context f32 high selectivity (kept 1023/1024)                          1.02     10.5±0.52µs        ? ?/sec    1.00     10.3±0.48µs        ? ?/sec
filter context f32 low selectivity (kept 1/1024)                              1.00    432.8±7.96ns        ? ?/sec    1.03    447.7±3.75ns        ? ?/sec
filter context fsb with value length 20 (kept 1/2)                            1.00     70.7±1.06µs        ? ?/sec    1.00     71.0±1.66µs        ? ?/sec
filter context fsb with value length 20 high selectivity (kept 1023/1024)     1.00     70.8±0.82µs        ? ?/sec    1.00     70.8±0.91µs        ? ?/sec
filter context fsb with value length 20 low selectivity (kept 1/1024)         1.00     70.7±0.44µs        ? ?/sec    1.00     70.7±0.35µs        ? ?/sec
filter context fsb with value length 5 (kept 1/2)                             1.00     70.8±1.27µs        ? ?/sec    1.00     71.1±1.10µs        ? ?/sec
filter context fsb with value length 5 high selectivity (kept 1023/1024)      1.00     70.7±0.32µs        ? ?/sec    1.00     70.9±0.65µs        ? ?/sec
filter context fsb with value length 5 low selectivity (kept 1/1024)          1.00     70.7±0.51µs        ? ?/sec    1.01     71.3±3.79µs        ? ?/sec
filter context fsb with value length 50 (kept 1/2)                            1.00     70.6±0.30µs        ? ?/sec    1.01     71.0±1.45µs        ? ?/sec
filter context fsb with value length 50 high selectivity (kept 1023/1024)     1.00     70.7±0.32µs        ? ?/sec    1.01     71.1±2.48µs        ? ?/sec
filter context fsb with value length 50 low selectivity (kept 1/1024)         1.00     70.7±0.79µs        ? ?/sec    1.00     70.7±1.18µs        ? ?/sec
filter context i32 (kept 1/2)                                                 1.00     16.5±0.15µs        ? ?/sec    1.00     16.5±0.66µs        ? ?/sec
filter context i32 high selectivity (kept 1023/1024)                          1.00      6.7±0.37µs        ? ?/sec    1.00      6.7±0.35µs        ? ?/sec
filter context i32 low selectivity (kept 1/1024)                              1.00    228.7±4.14ns        ? ?/sec    1.00    229.1±2.95ns        ? ?/sec
filter context i32 w NULLs (kept 1/2)                                         1.00     88.5±3.49µs        ? ?/sec    1.00     88.6±4.38µs        ? ?/sec
filter context i32 w NULLs high selectivity (kept 1023/1024)                  1.00     10.3±0.39µs        ? ?/sec    1.00     10.4±0.51µs        ? ?/sec
filter context i32 w NULLs low selectivity (kept 1/1024)                      1.00    431.2±9.95ns        ? ?/sec    1.04    449.1±5.12ns        ? ?/sec
filter context mixed string view (kept 1/2)                                   1.00    116.8±5.98µs        ? ?/sec    1.07    125.0±5.35µs        ? ?/sec
filter context mixed string view high selectivity (kept 1023/1024)            1.00     55.1±1.34µs        ? ?/sec    1.03     56.5±2.33µs        ? ?/sec
filter context mixed string view low selectivity (kept 1/1024)                1.00   625.0±10.74ns        ? ?/sec    1.02    640.1±7.62ns        ? ?/sec
filter context short string view (kept 1/2)                                   1.00    113.5±4.30µs        ? ?/sec    1.08    122.5±6.16µs        ? ?/sec
filter context short string view high selectivity (kept 1023/1024)            1.00     53.8±1.02µs        ? ?/sec    1.02     55.0±1.02µs        ? ?/sec
filter context short string view low selectivity (kept 1/1024)                1.00    476.8±8.22ns        ? ?/sec    1.04    498.2±4.77ns        ? ?/sec
filter context string (kept 1/2)                                              1.00   613.7±17.44µs        ? ?/sec    1.04   636.9±18.63µs        ? ?/sec
filter context string dictionary (kept 1/2)                                   1.01     17.2±0.38µs        ? ?/sec    1.00     17.0±0.12µs        ? ?/sec
filter context string dictionary high selectivity (kept 1023/1024)            1.09      7.3±0.42µs        ? ?/sec    1.00      6.7±0.24µs        ? ?/sec
filter context string dictionary low selectivity (kept 1/1024)                1.00    641.4±8.49ns        ? ?/sec    1.03   660.4±10.10ns        ? ?/sec
filter context string dictionary w NULLs (kept 1/2)                           1.01     88.9±2.42µs        ? ?/sec    1.00     88.1±0.39µs        ? ?/sec
filter context string dictionary w NULLs high selectivity (kept 1023/1024)    1.00     10.4±0.38µs        ? ?/sec    1.01     10.5±0.27µs        ? ?/sec
filter context string dictionary w NULLs low selectivity (kept 1/1024)        1.00   865.4±26.97ns        ? ?/sec    1.03   889.5±11.77ns        ? ?/sec
filter context string high selectivity (kept 1023/1024)                       1.00   764.8±22.09µs        ? ?/sec    1.25  955.4±100.71µs        ? ?/sec
filter context string low selectivity (kept 1/1024)                           1.00   933.1±10.93ns        ? ?/sec    1.07   998.5±28.23ns        ? ?/sec
filter context u8 (kept 1/2)                                                  1.00     15.0±0.12µs        ? ?/sec    1.00     15.0±0.07µs        ? ?/sec
filter context u8 high selectivity (kept 1023/1024)                           1.09      2.0±0.02µs        ? ?/sec    1.00   1846.3±9.41ns        ? ?/sec
filter context u8 low selectivity (kept 1/1024)                               1.00    219.9±4.38ns        ? ?/sec    1.01    222.7±2.77ns        ? ?/sec
filter context u8 w NULLs (kept 1/2)                                          1.00     86.0±0.62µs        ? ?/sec    1.01     86.4±2.53µs        ? ?/sec
filter context u8 w NULLs high selectivity (kept 1023/1024)                   1.00      5.1±0.07µs        ? ?/sec    1.01      5.1±0.05µs        ? ?/sec
filter context u8 w NULLs low selectivity (kept 1/1024)                       1.00    427.1±9.17ns        ? ?/sec    1.04    442.7±4.46ns        ? ?/sec
filter decimal128 (kept 1/2)                                                  1.05     47.2±1.90µs        ? ?/sec    1.00     45.1±3.55µs        ? ?/sec
filter decimal128 high selectivity (kept 1023/1024)                           1.00     52.7±1.18µs        ? ?/sec    1.03     54.1±1.46µs        ? ?/sec
filter decimal128 low selectivity (kept 1/1024)                               1.62      3.2±0.01µs        ? ?/sec    1.00  1965.9±36.41ns        ? ?/sec
filter f32 (kept 1/2)                                                         1.17    155.0±0.86µs        ? ?/sec    1.00    132.6±1.53µs        ? ?/sec
filter fsb with value length 20 (kept 1/2)                                    1.06    137.7±3.45µs        ? ?/sec    1.00    129.6±0.87µs        ? ?/sec
filter fsb with value length 20 high selectivity (kept 1023/1024)             1.00     70.7±2.49µs        ? ?/sec    1.00     70.8±2.13µs        ? ?/sec
filter fsb with value length 20 low selectivity (kept 1/1024)                 1.78      3.4±0.03µs        ? ?/sec    1.00  1935.6±21.66ns        ? ?/sec
filter fsb with value length 5 (kept 1/2)                                     1.04    142.5±1.45µs        ? ?/sec    1.00    136.4±1.61µs        ? ?/sec
filter fsb with value length 5 high selectivity (kept 1023/1024)              1.00     11.3±0.60µs        ? ?/sec    1.04     11.8±0.54µs        ? ?/sec
filter fsb with value length 5 low selectivity (kept 1/1024)                  1.90      3.5±0.38µs        ? ?/sec    1.00  1832.9±14.44ns        ? ?/sec
filter fsb with value length 50 (kept 1/2)                                    1.11   171.4±15.65µs        ? ?/sec    1.00   154.5±13.21µs        ? ?/sec
filter fsb with value length 50 high selectivity (kept 1023/1024)             1.03    218.6±8.51µs        ? ?/sec    1.00    211.7±9.23µs        ? ?/sec
filter fsb with value length 50 low selectivity (kept 1/1024)                 1.80      3.4±0.12µs        ? ?/sec    1.00  1913.1±10.36ns        ? ?/sec
filter i32 (kept 1/2)                                                         1.67     54.2±1.58µs        ? ?/sec    1.00     32.5±0.40µs        ? ?/sec
filter i32 high selectivity (kept 1023/1024)                                  1.00      8.9±0.44µs        ? ?/sec    1.02      9.1±0.44µs        ? ?/sec
filter i32 low selectivity (kept 1/1024)                                      1.69      3.0±0.01µs        ? ?/sec    1.00  1753.7±10.40ns        ? ?/sec
filter optimize (kept 1/2)                                                    1.00     36.3±1.38µs        ? ?/sec    1.01     36.6±0.38µs        ? ?/sec
filter optimize high selectivity (kept 1023/1024)                             1.08      2.8±0.02µs        ? ?/sec    1.00      2.6±0.03µs        ? ?/sec
filter optimize low selectivity (kept 1/1024)                                 1.22  1797.4±17.72ns        ? ?/sec    1.00  1474.2±113.98ns        ? ?/sec
filter run array (kept 1/2)                                                   1.03    380.7±3.79µs        ? ?/sec    1.00    370.9±4.62µs        ? ?/sec
filter run array high selectivity (kept 1023/1024)                            1.00    401.3±7.90µs        ? ?/sec    1.02    408.6±4.60µs        ? ?/sec
filter run array low selectivity (kept 1/1024)                                1.00    285.6±2.25µs        ? ?/sec    1.03    294.3±6.44µs        ? ?/sec
filter single record batch                                                    1.22     52.7±0.40µs        ? ?/sec    1.00     43.2±0.16µs        ? ?/sec
filter u8 (kept 1/2)                                                          1.23     53.5±0.18µs        ? ?/sec    1.00     43.4±0.32µs        ? ?/sec
filter u8 high selectivity (kept 1023/1024)                                   1.00      3.8±0.02µs        ? ?/sec    1.00      3.8±0.02µs        ? ?/sec
filter u8 low selectivity (kept 1/1024)                                       1.68      3.3±0.07µs        ? ?/sec    1.00  1957.9±10.67ns        ? ?/sec

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing optimize_unaligned_bitchunk_iterator (060afb8) to bd76edd diff
BENCH_NAME=boolean_kernels
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench boolean_kernels
BENCH_FILTER=
BENCH_BRANCH_NAME=optimize_unaligned_bitchunk_iterator
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group            main                                   optimize_unaligned_bitchunk_iterator
-----            ----                                   ------------------------------------
and              1.00    209.2±1.88ns        ? ?/sec    1.13    237.2±1.43ns        ? ?/sec
and_sliced_1     4.21  1099.4±14.92ns        ? ?/sec    1.00    261.3±3.45ns        ? ?/sec
and_sliced_24    1.08    249.1±6.95ns        ? ?/sec    1.00    229.9±1.46ns        ? ?/sec
not              1.00    146.7±2.22ns        ? ?/sec    1.06    154.8±2.42ns        ? ?/sec
not_slice_24     1.09    194.5±1.03ns        ? ?/sec    1.00    178.0±0.80ns        ? ?/sec
not_sliced_1     2.57    619.5±2.63ns        ? ?/sec    1.00    241.5±2.66ns        ? ?/sec
or               1.00    198.5±0.77ns        ? ?/sec    1.17    231.6±4.39ns        ? ?/sec
or_sliced_1      4.22   1099.3±5.54ns        ? ?/sec    1.00    260.5±1.23ns        ? ?/sec
or_sliced_24     1.09    248.4±1.25ns        ? ?/sec    1.00    228.8±4.34ns        ? ?/sec

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing optimize_unaligned_bitchunk_iterator (060afb8) to bd76edd diff
BENCH_NAME=arrow_reader_clickbench
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader_clickbench
BENCH_FILTER=
BENCH_BRANCH_NAME=optimize_unaligned_bitchunk_iterator
Results will be posted here when complete

@Dandandan
Copy link
Contributor Author

run benchmark coalesce_kernels

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                             main                                   optimize_unaligned_bitchunk_iterator
-----                                             ----                                   ------------------------------------
arrow_reader_clickbench/async/Q1                  1.04      2.4±0.03ms        ? ?/sec    1.00      2.3±0.04ms        ? ?/sec
arrow_reader_clickbench/async/Q10                 1.17     14.2±0.26ms        ? ?/sec    1.00     12.2±0.34ms        ? ?/sec
arrow_reader_clickbench/async/Q11                 1.15     16.0±0.31ms        ? ?/sec    1.00     13.9±0.29ms        ? ?/sec
arrow_reader_clickbench/async/Q12                 1.43     32.9±0.35ms        ? ?/sec    1.00     23.0±0.35ms        ? ?/sec
arrow_reader_clickbench/async/Q13                 1.42     40.5±0.66ms        ? ?/sec    1.00     28.5±0.31ms        ? ?/sec
arrow_reader_clickbench/async/Q14                 1.40     36.2±0.48ms        ? ?/sec    1.00     25.8±0.43ms        ? ?/sec
arrow_reader_clickbench/async/Q19                 1.26      7.3±0.14ms        ? ?/sec    1.00      5.8±0.13ms        ? ?/sec
arrow_reader_clickbench/async/Q20                 1.45    176.6±1.89ms        ? ?/sec    1.00    121.8±1.47ms        ? ?/sec
arrow_reader_clickbench/async/Q21                 1.28    197.5±3.34ms        ? ?/sec    1.00    154.2±2.08ms        ? ?/sec
arrow_reader_clickbench/async/Q22                 1.44   341.2±36.98ms        ? ?/sec    1.00    236.9±2.37ms        ? ?/sec
arrow_reader_clickbench/async/Q23                 1.05    429.2±4.35ms        ? ?/sec    1.00    407.3±2.78ms        ? ?/sec
arrow_reader_clickbench/async/Q24                 1.13     35.8±1.20ms        ? ?/sec    1.00     31.7±0.57ms        ? ?/sec
arrow_reader_clickbench/async/Q27                 1.05    103.7±0.82ms        ? ?/sec    1.00     99.0±0.86ms        ? ?/sec
arrow_reader_clickbench/async/Q28                 1.04    100.6±1.10ms        ? ?/sec    1.00     96.7±0.71ms        ? ?/sec
arrow_reader_clickbench/async/Q30                 1.07     30.2±0.60ms        ? ?/sec    1.00     28.4±0.52ms        ? ?/sec
arrow_reader_clickbench/async/Q36                 1.05    113.1±0.96ms        ? ?/sec    1.00    107.7±1.00ms        ? ?/sec
arrow_reader_clickbench/async/Q37                 1.04     88.0±1.27ms        ? ?/sec    1.00     84.3±0.87ms        ? ?/sec
arrow_reader_clickbench/async/Q38                 1.06     35.3±0.28ms        ? ?/sec    1.00     33.3±0.40ms        ? ?/sec
arrow_reader_clickbench/async/Q39                 1.08     50.3±0.64ms        ? ?/sec    1.00     46.4±0.45ms        ? ?/sec
arrow_reader_clickbench/async/Q40                 1.10     31.5±0.71ms        ? ?/sec    1.00     28.6±0.48ms        ? ?/sec
arrow_reader_clickbench/async/Q41                 1.13     26.1±0.51ms        ? ?/sec    1.00     23.1±0.29ms        ? ?/sec
arrow_reader_clickbench/async/Q42                 1.08     12.0±0.16ms        ? ?/sec    1.00     11.1±0.27ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q1     1.04      2.3±0.04ms        ? ?/sec    1.00      2.3±0.05ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q10    1.16     13.4±0.30ms        ? ?/sec    1.00     11.6±0.29ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q11    1.16     15.3±0.39ms        ? ?/sec    1.00     13.2±0.27ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q12    1.08     24.2±0.38ms        ? ?/sec    1.00     22.4±0.46ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q13    1.05     29.5±0.33ms        ? ?/sec    1.00     28.0±0.46ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q14    1.06     26.9±0.27ms        ? ?/sec    1.00     25.3±0.21ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q19    1.15      6.5±0.22ms        ? ?/sec    1.00      5.6±0.14ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q20    1.04    114.2±1.22ms        ? ?/sec    1.00    110.3±1.15ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q21    1.04    131.0±1.51ms        ? ?/sec    1.00    125.6±0.73ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q22    1.05    242.8±2.71ms        ? ?/sec    1.00    231.8±1.78ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q23    1.04   373.6±10.75ms        ? ?/sec    1.00    359.7±6.89ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q24    1.06     32.9±0.47ms        ? ?/sec    1.00     31.0±0.57ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q27    1.04     98.9±1.17ms        ? ?/sec    1.00     94.9±1.01ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q28    1.05     97.5±1.27ms        ? ?/sec    1.00     92.9±0.63ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q30    1.05     29.0±0.84ms        ? ?/sec    1.00     27.6±0.61ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q36    1.04    107.6±1.50ms        ? ?/sec    1.00    103.0±1.10ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q37    1.05     84.7±1.10ms        ? ?/sec    1.00     80.4±0.68ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q38    1.07     32.4±0.37ms        ? ?/sec    1.00     30.2±0.35ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q39    1.07     44.8±0.76ms        ? ?/sec    1.00     41.7±0.39ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q40    1.06     28.5±0.51ms        ? ?/sec    1.00     27.0±0.34ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q41    1.03     22.3±0.36ms        ? ?/sec    1.00     21.6±0.25ms        ? ?/sec
arrow_reader_clickbench/async_object_store/Q42    1.03     10.8±0.22ms        ? ?/sec    1.00     10.5±0.14ms        ? ?/sec
arrow_reader_clickbench/sync/Q1                   1.01      2.1±0.01ms        ? ?/sec    1.00      2.0±0.01ms        ? ?/sec
arrow_reader_clickbench/sync/Q10                  1.03      8.4±0.14ms        ? ?/sec    1.00      8.2±0.19ms        ? ?/sec
arrow_reader_clickbench/sync/Q11                  1.03     10.0±0.27ms        ? ?/sec    1.00      9.6±0.15ms        ? ?/sec
arrow_reader_clickbench/sync/Q12                  1.00     29.8±0.38ms        ? ?/sec    1.22     36.2±1.06ms        ? ?/sec
arrow_reader_clickbench/sync/Q13                  1.01     45.3±1.61ms        ? ?/sec    1.00     44.8±0.52ms        ? ?/sec
arrow_reader_clickbench/sync/Q14                  1.28     40.8±1.18ms        ? ?/sec    1.00     31.7±0.33ms        ? ?/sec
arrow_reader_clickbench/sync/Q19                  1.03      4.6±0.13ms        ? ?/sec    1.00      4.5±0.07ms        ? ?/sec
arrow_reader_clickbench/sync/Q20                  1.07    187.6±3.02ms        ? ?/sec    1.00    176.1±1.63ms        ? ?/sec
arrow_reader_clickbench/sync/Q21                  1.05    247.2±4.30ms        ? ?/sec    1.00    234.7±1.72ms        ? ?/sec
arrow_reader_clickbench/sync/Q22                  1.09    515.9±4.75ms        ? ?/sec    1.00    473.8±3.78ms        ? ?/sec
arrow_reader_clickbench/sync/Q23                  1.05   467.2±20.23ms        ? ?/sec    1.00   446.2±15.69ms        ? ?/sec
arrow_reader_clickbench/sync/Q24                  1.07     44.9±0.79ms        ? ?/sec    1.00     41.9±0.77ms        ? ?/sec
arrow_reader_clickbench/sync/Q27                  1.11    168.6±3.06ms        ? ?/sec    1.00    152.0±1.14ms        ? ?/sec
arrow_reader_clickbench/sync/Q28                  1.07    157.7±2.21ms        ? ?/sec    1.00    147.1±1.98ms        ? ?/sec
arrow_reader_clickbench/sync/Q30                  1.08     31.3±0.37ms        ? ?/sec    1.00     28.9±0.35ms        ? ?/sec
arrow_reader_clickbench/sync/Q36                  1.09    166.7±1.99ms        ? ?/sec    1.00    152.8±1.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q37                  1.07     92.5±0.90ms        ? ?/sec    1.00     86.2±0.62ms        ? ?/sec
arrow_reader_clickbench/sync/Q38                  1.05     30.9±0.27ms        ? ?/sec    1.00     29.4±0.20ms        ? ?/sec
arrow_reader_clickbench/sync/Q39                  1.15     39.2±0.77ms        ? ?/sec    1.00     34.1±0.44ms        ? ?/sec
arrow_reader_clickbench/sync/Q40                  1.16     31.4±0.55ms        ? ?/sec    1.00     27.2±0.47ms        ? ?/sec
arrow_reader_clickbench/sync/Q41                  1.14     33.8±0.62ms        ? ?/sec    1.00     29.6±0.67ms        ? ?/sec
arrow_reader_clickbench/sync/Q42                  1.06     13.2±0.13ms        ? ?/sec    1.00     12.5±0.15ms        ? ?/sec

@alamb-ghbot
Copy link

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing optimize_unaligned_bitchunk_iterator (060afb8) to bd76edd diff
BENCH_NAME=coalesce_kernels
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench coalesce_kernels
BENCH_FILTER=
BENCH_BRANCH_NAME=optimize_unaligned_bitchunk_iterator
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

group                                                                                main                                   optimize_unaligned_bitchunk_iterator
-----                                                                                ----                                   ------------------------------------
filter: mixed_dict, 8192, nulls: 0, selectivity: 0.001                               1.01    263.4±1.78ms        ? ?/sec    1.00    261.9±2.41ms        ? ?/sec
filter: mixed_dict, 8192, nulls: 0, selectivity: 0.01                                1.02      8.3±0.12ms        ? ?/sec    1.00      8.1±0.13ms        ? ?/sec
filter: mixed_dict, 8192, nulls: 0, selectivity: 0.1                                 1.00      3.9±0.11ms        ? ?/sec    1.02      4.0±0.09ms        ? ?/sec
filter: mixed_dict, 8192, nulls: 0, selectivity: 0.8                                 1.00      3.4±0.05ms        ? ?/sec    1.01      3.5±0.03ms        ? ?/sec
filter: mixed_dict, 8192, nulls: 0.1, selectivity: 0.001                             1.02    248.3±2.63ms        ? ?/sec    1.00    244.1±2.45ms        ? ?/sec
filter: mixed_dict, 8192, nulls: 0.1, selectivity: 0.01                              1.03      9.0±0.10ms        ? ?/sec    1.00      8.8±0.10ms        ? ?/sec
filter: mixed_dict, 8192, nulls: 0.1, selectivity: 0.1                               1.02      4.4±0.10ms        ? ?/sec    1.00      4.3±0.10ms        ? ?/sec
filter: mixed_dict, 8192, nulls: 0.1, selectivity: 0.8                               1.01      4.6±0.04ms        ? ?/sec    1.00      4.5±0.04ms        ? ?/sec
filter: mixed_utf8, 8192, nulls: 0, selectivity: 0.001                               1.06     56.6±1.19ms        ? ?/sec    1.00     53.5±0.76ms        ? ?/sec
filter: mixed_utf8, 8192, nulls: 0, selectivity: 0.01                                1.00     11.1±0.11ms        ? ?/sec    1.00     11.1±0.19ms        ? ?/sec
filter: mixed_utf8, 8192, nulls: 0, selectivity: 0.1                                 1.01      9.3±0.36ms        ? ?/sec    1.00      9.1±0.14ms        ? ?/sec
filter: mixed_utf8, 8192, nulls: 0, selectivity: 0.8                                 1.25     11.4±0.25ms        ? ?/sec    1.00      9.1±0.31ms        ? ?/sec
filter: mixed_utf8, 8192, nulls: 0.1, selectivity: 0.001                             1.05     65.3±0.49ms        ? ?/sec    1.00     62.1±0.69ms        ? ?/sec
filter: mixed_utf8, 8192, nulls: 0.1, selectivity: 0.01                              1.01     12.3±0.13ms        ? ?/sec    1.00     12.1±0.23ms        ? ?/sec
filter: mixed_utf8, 8192, nulls: 0.1, selectivity: 0.1                               1.03      9.9±0.27ms        ? ?/sec    1.00      9.6±0.23ms        ? ?/sec
filter: mixed_utf8, 8192, nulls: 0.1, selectivity: 0.8                               1.00     10.6±0.20ms        ? ?/sec    1.00     10.6±0.14ms        ? ?/sec
filter: mixed_utf8view (max_string_len=128), 8192, nulls: 0, selectivity: 0.001      1.07     44.1±0.65ms        ? ?/sec    1.00     41.2±0.57ms        ? ?/sec
filter: mixed_utf8view (max_string_len=128), 8192, nulls: 0, selectivity: 0.01       1.05      5.5±0.08ms        ? ?/sec    1.00      5.2±0.09ms        ? ?/sec
filter: mixed_utf8view (max_string_len=128), 8192, nulls: 0, selectivity: 0.1        1.02      4.3±0.17ms        ? ?/sec    1.00      4.3±0.16ms        ? ?/sec
filter: mixed_utf8view (max_string_len=128), 8192, nulls: 0, selectivity: 0.8        1.00      3.0±0.06ms        ? ?/sec    1.02      3.1±0.10ms        ? ?/sec
filter: mixed_utf8view (max_string_len=128), 8192, nulls: 0.1, selectivity: 0.001    1.05     54.2±0.31ms        ? ?/sec    1.00     51.5±2.00ms        ? ?/sec
filter: mixed_utf8view (max_string_len=128), 8192, nulls: 0.1, selectivity: 0.01     1.01      7.5±0.07ms        ? ?/sec    1.00      7.4±0.08ms        ? ?/sec
filter: mixed_utf8view (max_string_len=128), 8192, nulls: 0.1, selectivity: 0.1      1.00      5.2±0.13ms        ? ?/sec    1.00      5.2±0.15ms        ? ?/sec
filter: mixed_utf8view (max_string_len=128), 8192, nulls: 0.1, selectivity: 0.8      1.00      3.7±0.03ms        ? ?/sec    1.00      3.7±0.02ms        ? ?/sec
filter: mixed_utf8view (max_string_len=20), 8192, nulls: 0, selectivity: 0.001       1.07     39.6±0.50ms        ? ?/sec    1.00     37.0±0.48ms        ? ?/sec
filter: mixed_utf8view (max_string_len=20), 8192, nulls: 0, selectivity: 0.01        1.03      4.3±0.05ms        ? ?/sec    1.00      4.2±0.10ms        ? ?/sec
filter: mixed_utf8view (max_string_len=20), 8192, nulls: 0, selectivity: 0.1         1.01      2.0±0.07ms        ? ?/sec    1.00      2.0±0.05ms        ? ?/sec
filter: mixed_utf8view (max_string_len=20), 8192, nulls: 0, selectivity: 0.8         1.00  1317.6±27.12µs        ? ?/sec    1.02  1342.0±19.16µs        ? ?/sec
filter: mixed_utf8view (max_string_len=20), 8192, nulls: 0.1, selectivity: 0.001     1.06     48.7±0.20ms        ? ?/sec    1.00     46.1±0.65ms        ? ?/sec
filter: mixed_utf8view (max_string_len=20), 8192, nulls: 0.1, selectivity: 0.01      1.02      6.5±0.11ms        ? ?/sec    1.00      6.3±0.11ms        ? ?/sec
filter: mixed_utf8view (max_string_len=20), 8192, nulls: 0.1, selectivity: 0.1       1.00      3.3±0.11ms        ? ?/sec    1.04      3.4±0.18ms        ? ?/sec
filter: mixed_utf8view (max_string_len=20), 8192, nulls: 0.1, selectivity: 0.8       1.01      3.7±0.05ms        ? ?/sec    1.00      3.7±0.02ms        ? ?/sec
filter: primitive, 8192, nulls: 0, selectivity: 0.001                                1.10     88.7±1.28ms        ? ?/sec    1.00     80.3±1.28ms        ? ?/sec
filter: primitive, 8192, nulls: 0, selectivity: 0.01                                 1.09      8.4±0.12ms        ? ?/sec    1.00      7.7±0.06ms        ? ?/sec
filter: primitive, 8192, nulls: 0, selectivity: 0.1                                  1.04      3.2±0.24ms        ? ?/sec    1.00      3.1±0.15ms        ? ?/sec
filter: primitive, 8192, nulls: 0, selectivity: 0.8                                  1.00      2.8±0.04ms        ? ?/sec    1.04      2.9±0.02ms        ? ?/sec
filter: primitive, 8192, nulls: 0.1, selectivity: 0.001                              1.07    116.5±1.72ms        ? ?/sec    1.00    108.9±1.39ms        ? ?/sec
filter: primitive, 8192, nulls: 0.1, selectivity: 0.01                               1.04     13.9±0.09ms        ? ?/sec    1.00     13.3±0.16ms        ? ?/sec
filter: primitive, 8192, nulls: 0.1, selectivity: 0.1                                1.00      6.3±0.22ms        ? ?/sec    1.06      6.7±0.40ms        ? ?/sec
filter: primitive, 8192, nulls: 0.1, selectivity: 0.8                                1.00      8.8±0.06ms        ? ?/sec    1.00      8.8±0.04ms        ? ?/sec
filter: single_utf8view, 8192, nulls: 0, selectivity: 0.001                          1.11     63.4±0.62ms        ? ?/sec    1.00     57.0±1.35ms        ? ?/sec
filter: single_utf8view, 8192, nulls: 0, selectivity: 0.01                           1.08      7.6±0.12ms        ? ?/sec    1.00      7.0±0.05ms        ? ?/sec
filter: single_utf8view, 8192, nulls: 0, selectivity: 0.1                            1.07      3.8±0.19ms        ? ?/sec    1.00      3.6±0.15ms        ? ?/sec
filter: single_utf8view, 8192, nulls: 0, selectivity: 0.8                            1.00  1282.4±11.51µs        ? ?/sec    1.02  1312.9±12.98µs        ? ?/sec
filter: single_utf8view, 8192, nulls: 0.1, selectivity: 0.001                        1.19     89.6±1.99ms        ? ?/sec    1.00     75.2±0.46ms        ? ?/sec
filter: single_utf8view, 8192, nulls: 0.1, selectivity: 0.01                         1.14     11.3±0.30ms        ? ?/sec    1.00      9.9±0.26ms        ? ?/sec
filter: single_utf8view, 8192, nulls: 0.1, selectivity: 0.1                          1.09      5.2±0.30ms        ? ?/sec    1.00      4.8±0.30ms        ? ?/sec
filter: single_utf8view, 8192, nulls: 0.1, selectivity: 0.8                          1.01      3.8±0.02ms        ? ?/sec    1.00      3.7±0.11ms        ? ?/sec

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

arrow Changes to the arrow crate parquet Changes to the parquet crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants