Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
e1f82da
Operator model
gatesn Sep 16, 2025
fcb9d05
Operator model
gatesn Sep 16, 2025
425039c
Operator model
gatesn Sep 16, 2025
1e70215
Remove local path optimization for object store
gatesn Sep 17, 2025
d6533d5
Remove local path optimization for object store
gatesn Sep 17, 2025
c93dd1c
Remove local path optimization for object store
gatesn Sep 17, 2025
482d18f
Remove local path optimization for object store
gatesn Sep 17, 2025
abe9bae
Remove local path optimization for object store
gatesn Sep 17, 2025
1692c35
Remove local path optimization for object store
gatesn Sep 18, 2025
1c26340
Remove local path optimization for object store
gatesn Sep 18, 2025
0690384
Remove local path optimization for object store
gatesn Sep 18, 2025
786aecb
Remove local path optimization for object store
gatesn Sep 18, 2025
ed76077
Remove local path optimization for object store
gatesn Sep 18, 2025
94d96a6
Remove local path optimization for object store
gatesn Sep 19, 2025
1e03f0d
Remove local path optimization for object store
gatesn Sep 19, 2025
91ee7f1
Remove local path optimization for object store
gatesn Sep 19, 2025
7ae8b3f
Remove local path optimization for object store
gatesn Sep 19, 2025
000dce7
Remove local path optimization for object store
gatesn Sep 19, 2025
63308de
Remove local path optimization for object store
gatesn Sep 19, 2025
b705548
Remove local path optimization for object store
gatesn Sep 19, 2025
a6ab288
Remove local path optimization for object store
gatesn Sep 19, 2025
904028d
Remove local path optimization for object store
gatesn Sep 19, 2025
7ee102f
Remove local path optimization for object store
gatesn Sep 19, 2025
4e54185
WebGPU + Vulkan
gatesn Sep 22, 2025
5f8b50e
WebGPU + Vulkan
gatesn Sep 22, 2025
551589a
WebGPU + Vulkan
gatesn Sep 22, 2025
690fe8f
WebGPU + Vulkan
gatesn Sep 22, 2025
40a3481
WebGPU + Vulkan
gatesn Sep 22, 2025
1b53338
WebGPU + Vulkan
gatesn Sep 22, 2025
167f9f7
WebGPU + Vulkan
gatesn Sep 22, 2025
195a4fc
WebGPU + Vulkan
gatesn Sep 22, 2025
ffb9cdc
WebGPU + Vulkan
gatesn Sep 22, 2025
2dd6092
WebGPU + Vulkan
gatesn Sep 22, 2025
e586777
WebGPU + Vulkan
gatesn Sep 22, 2025
2776c96
Add operators RFC
gatesn Sep 23, 2025
271aabb
Add operators RFC
gatesn Sep 23, 2025
ef6b806
Add operators RFC
gatesn Sep 23, 2025
45c6e6a
Add operators RFC
gatesn Sep 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,6 @@ jiff = "0.2.0"
kanal = "0.1.1"
lending-iterator = "0.1.7"
libfuzzer-sys = "0.4"
linked_hash_set = "0.1.5"
log = { version = "0.4.21" }
loom = { version = "0.7", features = ["checkpoint"] }
memmap2 = "0.9.5"
Expand Down
60 changes: 30 additions & 30 deletions encodings/fastlanes/benches/pipeline_bitpacking.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ use mimalloc::MiMalloc;
use rand::prelude::StdRng;
use rand::{Rng, SeedableRng};
use vortex_array::compute::{filter, warm_up_vtables};
use vortex_array::pipeline::{Element, export_canonical_pipeline_expr};
use vortex_array::{IntoArray, ToCanonical};
use vortex_buffer::BufferMut;
use vortex_dtype::NativePType;
Expand Down Expand Up @@ -68,32 +67,33 @@ pub fn decompress_bitpacking_late_filter<T: NativePType>(bencher: Bencher, fract
.bench_values(|mask| filter(array.to_canonical().as_ref(), &mask).unwrap());
}

#[divan::bench(types = [i8, i16, i32, i64], args = TRUE_COUNT)]
pub fn decompress_bitpacking_pipeline_filter<T: Element + NativePType>(
bencher: Bencher,
fraction_kept: f64,
) {
let mut rng = StdRng::seed_from_u64(0);
let values = (0..LENGTH)
.map(|_| T::from(rng.random_range(0..100)).unwrap())
.collect::<BufferMut<T>>()
.into_array()
.to_primitive();
let array = bitpack_to_best_bit_width(&values).unwrap();

let mask = (0..LENGTH)
.map(|_| rng.random_bool(fraction_kept))
.collect::<BooleanBuffer>();

bencher
.with_inputs(|| Mask::from_buffer(mask.clone()))
.bench_local_values(|mask| {
export_canonical_pipeline_expr(
array.dtype(),
array.len(),
array.to_operator().unwrap().unwrap().as_ref(),
&mask,
)
.unwrap()
});
}
// TODO(ngates): bring back benchmarks once operator API is stable.
// #[divan::bench(types = [i8, i16, i32, i64], args = TRUE_COUNT)]
// pub fn decompress_bitpacking_pipeline_filter<T: Element + NativePType>(
// bencher: Bencher,
// fraction_kept: f64,
// ) {
// let mut rng = StdRng::seed_from_u64(0);
// let values = (0..LENGTH)
// .map(|_| T::from(rng.random_range(0..100)).unwrap())
// .collect::<BufferMut<T>>()
// .into_array()
// .to_primitive();
// let array = bitpack_to_best_bit_width(&values).unwrap();
//
// let mask = (0..LENGTH)
// .map(|_| rng.random_bool(fraction_kept))
// .collect::<BooleanBuffer>();
//
// bencher
// .with_inputs(|| Mask::from_buffer(mask.clone()))
// .bench_local_values(|mask| {
// export_canonical_pipeline_expr(
// array.dtype(),
// array.len(),
// array.to_operator().unwrap().unwrap().as_ref(),
// &mask,
// )
// .unwrap()
// });
// }
117 changes: 58 additions & 59 deletions encodings/fastlanes/benches/pipeline_bitpacking_compare_scalar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,11 @@ use mimalloc::MiMalloc;
use rand::prelude::StdRng;
use rand::{Rng, SeedableRng};
use vortex_array::compute::{filter, warm_up_vtables};
use vortex_array::pipeline::{Element, export_canonical_pipeline_expr};
use vortex_array::{Array, ArrayRef, IntoArray, ToCanonical};
use vortex_buffer::BufferMut;
use vortex_dtype::Nullability::NonNullable;
use vortex_dtype::{DType, NativePType};
use vortex_dtype::NativePType;
use vortex_error::VortexResult;
use vortex_expr::{Scope, VortexExprExt, lit, lt, root};
use vortex_expr::{Scope, lit, lt, root};
use vortex_fastlanes::{FoRArray, bitpack_to_best_bit_width};
use vortex_mask::Mask;
use vortex_scalar::Scalar;
Expand Down Expand Up @@ -74,58 +72,59 @@ pub fn eval<T: NativePType + Into<Scalar>>(bencher: Bencher, fraction_kept: f64)
});
}

#[divan::bench(types = [u8, u16, u32, u64], args = TRUE_COUNT)]
pub fn pipeline<T: Element + NativePType + Into<Scalar>>(bencher: Bencher, fraction_kept: f64) {
let mut rng = StdRng::seed_from_u64(0);
let values = (0..100_000)
.map(|_| T::from(rng.random_range(10..100)).unwrap())
.collect::<BufferMut<T>>();
let array = create_for_bitpacked_array(values).unwrap();

let mask = (0..100_000)
.map(|_| rng.random_bool(fraction_kept))
.collect::<BooleanBuffer>();

let expr = lt(root(), lit(T::from_i32(2).unwrap()));
let operator = expr.to_operator_unoptimized(&array).unwrap().unwrap();

bencher
.with_inputs(|| Mask::from_buffer(mask.clone()))
.bench_local_values(|mask| {
export_canonical_pipeline_expr(
&DType::Bool(NonNullable),
array.len(),
operator.as_ref(),
&mask,
)
.unwrap()
});
}

#[divan::bench(types = [u8, u16, u32, u64], args = TRUE_COUNT)]
pub fn pipeline_opt<T: Element + NativePType + Into<Scalar>>(bencher: Bencher, fraction_kept: f64) {
let mut rng = StdRng::seed_from_u64(0);
let values = (0..100_000)
.map(|_| T::from(rng.random_range(10..100)).unwrap())
.collect::<BufferMut<T>>();
let array = create_for_bitpacked_array(values).unwrap();

let mask = (0..100_000)
.map(|_| rng.random_bool(fraction_kept))
.collect::<BooleanBuffer>();

let expr = lt(root(), lit(T::from_i32(2).unwrap()));
let operator = expr.to_operator(&array).unwrap().unwrap();

bencher
.with_inputs(|| (Mask::from_buffer(mask.clone()), operator.clone()))
.bench_local_values(|(mask, operator)| {
export_canonical_pipeline_expr(
&DType::Bool(NonNullable),
array.len(),
operator.as_ref(),
&mask,
)
.unwrap()
});
}
// TODO(ngates): bring back benchmarks once operator API is stable.
// #[divan::bench(types = [u8, u16, u32, u64], args = TRUE_COUNT)]
// pub fn operator<T: Element + NativePType + Into<Scalar>>(bencher: Bencher, fraction_kept: f64) {
// let mut rng = StdRng::seed_from_u64(0);
// let values = (0..100_000)
// .map(|_| T::from(rng.random_range(10..100)).unwrap())
// .collect::<BufferMut<T>>();
// let array = create_for_bitpacked_array(values).unwrap();
//
// let mask = (0..100_000)
// .map(|_| rng.random_bool(fraction_kept))
// .collect::<BooleanBuffer>();
//
// let expr = lt(root(), lit(T::from_i32(2).unwrap()));
// let operator = expr.to_operator_unoptimized(&array).unwrap().unwrap();
//
// bencher
// .with_inputs(|| Mask::from_buffer(mask.clone()))
// .bench_local_values(|mask| {
// export_canonical_pipeline_expr(
// &DType::Bool(NonNullable),
// array.len(),
// operator.as_ref(),
// &mask,
// )
// .unwrap()
// });
// }
//
// #[divan::bench(types = [u8, u16, u32, u64], args = TRUE_COUNT)]
// pub fn pipeline_opt<T: Element + NativePType + Into<Scalar>>(bencher: Bencher, fraction_kept: f64) {
// let mut rng = StdRng::seed_from_u64(0);
// let values = (0..100_000)
// .map(|_| T::from(rng.random_range(10..100)).unwrap())
// .collect::<BufferMut<T>>();
// let array = create_for_bitpacked_array(values).unwrap();
//
// let mask = (0..100_000)
// .map(|_| rng.random_bool(fraction_kept))
// .collect::<BooleanBuffer>();
//
// let expr = lt(root(), lit(T::from_i32(2).unwrap()));
// let operator = expr.to_operator(&array).unwrap().unwrap();
//
// bencher
// .with_inputs(|| (Mask::from_buffer(mask.clone()), operator.clone()))
// .bench_local_values(|(mask, operator)| {
// export_canonical_pipeline_expr(
// &DType::Bool(NonNullable),
// array.len(),
// operator.as_ref(),
// &mask,
// )
// .unwrap()
// });
// }
Loading
Loading