diff --git a/encodings/sequence/src/compute/compare.rs b/encodings/sequence/src/compute/compare.rs index 5895330ea81..612334d3441 100644 --- a/encodings/sequence/src/compute/compare.rs +++ b/encodings/sequence/src/compute/compare.rs @@ -14,7 +14,7 @@ use vortex_array::scalar::PValue; use vortex_array::scalar::Scalar; use vortex_array::scalar_fn::fns::binary::CompareKernel; use vortex_array::scalar_fn::fns::operators::CompareOperator; -use vortex_buffer::BitBuffer; +use vortex_buffer::BitBufferMut; use vortex_error::VortexExpect; use vortex_error::VortexResult; use vortex_error::vortex_bail; @@ -56,7 +56,9 @@ impl CompareKernel for Sequence { }; if let Ok(set_idx) = set_idx { - let buffer = BitBuffer::from_iter((0..lhs.len()).map(|idx| idx == set_idx)); + let mut buffer = BitBufferMut::new_unset(lhs.len()); + buffer.set(set_idx); + let buffer = buffer.freeze(); Ok(Some(BoolArray::new(buffer, validity).into_array())) } else { Ok(Some( diff --git a/vortex/benches/single_encoding_throughput.rs b/vortex/benches/single_encoding_throughput.rs index f2e201fb9b9..3e7ec5dbb9b 100644 --- a/vortex/benches/single_encoding_throughput.rs +++ b/vortex/benches/single_encoding_throughput.rs @@ -40,6 +40,8 @@ use vortex::encodings::zigzag::zigzag_encode; use vortex::encodings::zstd::Zstd; use vortex::encodings::zstd::ZstdData; use vortex_array::VortexSessionExecute; +use vortex_buffer::BitBuffer; +use vortex_buffer::BitBufferMut; use vortex_error::VortexResult; use vortex_sequence::Sequence; use vortex_session::VortexSession; @@ -272,6 +274,24 @@ fn bench_sequence_decompress_u32(bencher: Bencher) { .bench_refs(|(a, ctx)| canonicalize((**a).clone(), ctx)); } +#[divan::bench] +fn bench_sequence_compare_match_from_iter(bencher: Bencher) { + bencher + .with_inputs(|| (NUM_VALUES as usize, NUM_VALUES as usize / 2)) + .bench_values(|(len, set_idx)| BitBuffer::from_iter((0..len).map(|idx| idx == set_idx))); +} + +#[divan::bench] +fn bench_sequence_compare_match_single_set(bencher: Bencher) { + bencher + .with_inputs(|| (NUM_VALUES as usize, NUM_VALUES as usize / 2)) + .bench_values(|(len, set_idx)| { + let mut buffer = BitBufferMut::new_unset(len); + buffer.set(set_idx); + buffer.freeze() + }); +} + #[divan::bench(name = "alp_compress_f64")] fn bench_alp_compress_f64(bencher: Bencher) { let (_, _, float_array) = setup_primitive_arrays();