-
Notifications
You must be signed in to change notification settings - Fork 373
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* benchmarks for common vector ops * handle N=1
- Loading branch information
Showing
3 changed files
with
337 additions
and
0 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,329 @@ | ||
//! Keeping track of performance issues/regressions for common vector operations. | ||
#[global_allocator] | ||
static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; | ||
|
||
use criterion::{criterion_group, criterion_main, Criterion}; | ||
|
||
use smallvec::SmallVec; | ||
use tinyvec::TinyVec; | ||
|
||
criterion_group!(benches, sort, split, swap, swap_opt); | ||
criterion_main!(benches); | ||
|
||
// --- | ||
|
||
#[cfg(not(debug_assertions))] | ||
const NUM_INSTANCES: usize = 10_000; | ||
#[cfg(not(debug_assertions))] | ||
const SMALLVEC_SIZE: usize = 4; | ||
|
||
// `cargo test` also runs the benchmark setup code, so make sure they run quickly: | ||
#[cfg(debug_assertions)] | ||
const NUM_INSTANCES: usize = 1; | ||
#[cfg(debug_assertions)] | ||
const SMALLVEC_SIZE: usize = 1; | ||
|
||
// --- Benchmarks --- | ||
|
||
fn split(c: &mut Criterion) { | ||
let mut group = c.benchmark_group(format!("vector_ops/split_off/instances={NUM_INSTANCES}")); | ||
group.throughput(criterion::Throughput::Elements(NUM_INSTANCES as _)); | ||
|
||
{ | ||
fn split_off<T: Copy, const N: usize>( | ||
data: &mut SmallVec<[T; N]>, | ||
split_idx: usize, | ||
) -> SmallVec<[T; N]> { | ||
if split_idx >= data.len() { | ||
return SmallVec::default(); | ||
} | ||
|
||
let second_half = SmallVec::from_slice(&data[split_idx..]); | ||
data.truncate(split_idx); | ||
second_half | ||
} | ||
|
||
let data: SmallVec<[i64; SMALLVEC_SIZE]> = (0..NUM_INSTANCES as i64).collect(); | ||
|
||
group.bench_function(format!("smallvec/n={SMALLVEC_SIZE}/manual"), |b| { | ||
b.iter(|| { | ||
let mut data = data.clone(); | ||
let second_half = split_off(&mut data, NUM_INSTANCES / 2); | ||
assert_eq!(NUM_INSTANCES, data.len() + second_half.len()); | ||
assert_eq!(NUM_INSTANCES as i64 / 2, second_half[0]); | ||
(data, second_half) | ||
}); | ||
}); | ||
} | ||
|
||
{ | ||
let data: TinyVec<[i64; SMALLVEC_SIZE]> = (0..NUM_INSTANCES as i64).collect(); | ||
|
||
group.bench_function(format!("tinyvec/n={SMALLVEC_SIZE}"), |b| { | ||
b.iter(|| { | ||
let mut data = data.clone(); | ||
let second_half = data.split_off(NUM_INSTANCES / 2); | ||
assert_eq!(NUM_INSTANCES, data.len() + second_half.len()); | ||
assert_eq!(NUM_INSTANCES as i64 / 2, second_half[0]); | ||
(data, second_half) | ||
}); | ||
}); | ||
} | ||
|
||
{ | ||
fn split_off<T: Default + Copy, const N: usize>( | ||
data: &mut TinyVec<[T; N]>, | ||
split_idx: usize, | ||
) -> TinyVec<[T; N]> { | ||
if split_idx >= data.len() { | ||
return TinyVec::default(); | ||
} | ||
|
||
let second_half = TinyVec::from(&data[split_idx..]); | ||
data.truncate(split_idx); | ||
second_half | ||
} | ||
|
||
let data: TinyVec<[i64; SMALLVEC_SIZE]> = (0..NUM_INSTANCES as i64).collect(); | ||
|
||
group.bench_function(format!("tinyvec/n={SMALLVEC_SIZE}/manual"), |b| { | ||
b.iter(|| { | ||
let mut data = data.clone(); | ||
let second_half = split_off(&mut data, NUM_INSTANCES / 2); | ||
assert_eq!(NUM_INSTANCES, data.len() + second_half.len()); | ||
assert_eq!(NUM_INSTANCES as i64 / 2, second_half[0]); | ||
(data, second_half) | ||
}); | ||
}); | ||
} | ||
|
||
{ | ||
let data: Vec<i64> = (0..NUM_INSTANCES as i64).collect(); | ||
|
||
group.bench_function("vec", |b| { | ||
b.iter(|| { | ||
let mut data = data.clone(); | ||
let second_half = data.split_off(NUM_INSTANCES / 2); | ||
assert_eq!(NUM_INSTANCES, data.len() + second_half.len()); | ||
assert_eq!(NUM_INSTANCES as i64 / 2, second_half[0]); | ||
(data, second_half) | ||
}); | ||
}); | ||
} | ||
|
||
{ | ||
fn split_off<T: Copy>(data: &mut Vec<T>, split_idx: usize) -> Vec<T> { | ||
if split_idx >= data.len() { | ||
return Vec::default(); | ||
} | ||
|
||
let second_half = Vec::from(&data[split_idx..]); | ||
data.truncate(split_idx); | ||
second_half | ||
} | ||
|
||
let data: Vec<i64> = (0..NUM_INSTANCES as i64).collect(); | ||
|
||
group.bench_function("vec/manual", |b| { | ||
b.iter(|| { | ||
let mut data = data.clone(); | ||
let second_half = split_off(&mut data, NUM_INSTANCES / 2); | ||
assert_eq!(NUM_INSTANCES, data.len() + second_half.len()); | ||
assert_eq!(NUM_INSTANCES as i64 / 2, second_half[0]); | ||
(data, second_half) | ||
}); | ||
}); | ||
} | ||
} | ||
|
||
fn sort(c: &mut Criterion) { | ||
let mut group = c.benchmark_group(format!("vector_ops/sort/instances={NUM_INSTANCES}")); | ||
group.throughput(criterion::Throughput::Elements(NUM_INSTANCES as _)); | ||
|
||
{ | ||
let data: SmallVec<[i64; SMALLVEC_SIZE]> = (0..NUM_INSTANCES as i64).rev().collect(); | ||
|
||
group.bench_function(format!("smallvec/n={SMALLVEC_SIZE}"), |b| { | ||
b.iter(|| { | ||
let mut data = data.clone(); | ||
data.sort_unstable(); | ||
assert_eq!(NUM_INSTANCES, data.len()); | ||
assert_eq!(NUM_INSTANCES as i64 / 2, data[NUM_INSTANCES / 2]); | ||
data | ||
}); | ||
}); | ||
} | ||
|
||
{ | ||
let data: TinyVec<[i64; SMALLVEC_SIZE]> = (0..NUM_INSTANCES as i64).rev().collect(); | ||
|
||
group.bench_function(format!("tinyvec/n={SMALLVEC_SIZE}"), |b| { | ||
b.iter(|| { | ||
let mut data = data.clone(); | ||
data.sort_unstable(); | ||
assert_eq!(NUM_INSTANCES, data.len()); | ||
assert_eq!(NUM_INSTANCES as i64 / 2, data[NUM_INSTANCES / 2]); | ||
data | ||
}); | ||
}); | ||
} | ||
|
||
{ | ||
let data: Vec<i64> = (0..NUM_INSTANCES as i64).rev().collect(); | ||
|
||
group.bench_function("vec", |b| { | ||
b.iter(|| { | ||
let mut data = data.clone(); | ||
data.sort_unstable(); | ||
assert_eq!(NUM_INSTANCES, data.len()); | ||
assert_eq!(NUM_INSTANCES as i64 / 2, data[NUM_INSTANCES / 2]); | ||
data | ||
}); | ||
}); | ||
} | ||
} | ||
|
||
fn swap(c: &mut Criterion) { | ||
let mut group = c.benchmark_group(format!("vector_ops/swap/instances={NUM_INSTANCES}")); | ||
group.throughput(criterion::Throughput::Elements(NUM_INSTANCES as _)); | ||
|
||
{ | ||
let data: SmallVec<[i64; SMALLVEC_SIZE]> = (0..NUM_INSTANCES as i64).collect(); | ||
let swaps: SmallVec<[usize; SMALLVEC_SIZE]> = (0..NUM_INSTANCES).rev().collect(); | ||
|
||
group.bench_function(format!("smallvec/n={SMALLVEC_SIZE}"), |b| { | ||
b.iter(|| { | ||
let mut data1 = data.clone(); | ||
let data2 = data.clone(); | ||
for &swap in &swaps { | ||
data1[NUM_INSTANCES - swap - 1] = data2[swap]; | ||
} | ||
assert_eq!(NUM_INSTANCES, data1.len()); | ||
assert_eq!(NUM_INSTANCES, data2.len()); | ||
assert_eq!( | ||
(NUM_INSTANCES as i64 / 2).max(1) - 1, | ||
data1[NUM_INSTANCES / 2] | ||
); | ||
(data1, data2) | ||
}); | ||
}); | ||
} | ||
|
||
{ | ||
let data: TinyVec<[i64; SMALLVEC_SIZE]> = (0..NUM_INSTANCES as i64).collect(); | ||
let swaps: TinyVec<[usize; SMALLVEC_SIZE]> = (0..NUM_INSTANCES).rev().collect(); | ||
|
||
group.bench_function(format!("tinyvec/n={SMALLVEC_SIZE}"), |b| { | ||
b.iter(|| { | ||
let mut data1 = data.clone(); | ||
let data2 = data.clone(); | ||
for &swap in &swaps { | ||
data1[NUM_INSTANCES - swap - 1] = data2[swap]; | ||
} | ||
assert_eq!(NUM_INSTANCES, data1.len()); | ||
assert_eq!(NUM_INSTANCES, data2.len()); | ||
assert_eq!( | ||
(NUM_INSTANCES as i64 / 2).max(1) - 1, | ||
data1[NUM_INSTANCES / 2] | ||
); | ||
(data1, data2) | ||
}); | ||
}); | ||
} | ||
|
||
{ | ||
let data: Vec<i64> = (0..NUM_INSTANCES as i64).collect(); | ||
let swaps: Vec<usize> = (0..NUM_INSTANCES).rev().collect(); | ||
|
||
group.bench_function("vec", |b| { | ||
b.iter(|| { | ||
let mut data1 = data.clone(); | ||
let data2 = data.clone(); | ||
for &swap in &swaps { | ||
data1[NUM_INSTANCES - swap - 1] = data2[swap]; | ||
} | ||
assert_eq!(NUM_INSTANCES, data1.len()); | ||
assert_eq!(NUM_INSTANCES, data2.len()); | ||
assert_eq!( | ||
(NUM_INSTANCES as i64 / 2).max(1) - 1, | ||
data1[NUM_INSTANCES / 2] | ||
); | ||
(data1, data2) | ||
}); | ||
}); | ||
} | ||
} | ||
|
||
fn swap_opt(c: &mut Criterion) { | ||
let mut group = c.benchmark_group(format!("vector_ops/swap_opt/instances={NUM_INSTANCES}")); | ||
group.throughput(criterion::Throughput::Elements(NUM_INSTANCES as _)); | ||
|
||
{ | ||
let data: SmallVec<[Option<i64>; SMALLVEC_SIZE]> = | ||
(0..NUM_INSTANCES as i64).map(Some).collect(); | ||
let swaps: SmallVec<[usize; SMALLVEC_SIZE]> = (0..NUM_INSTANCES).rev().collect(); | ||
|
||
group.bench_function(format!("smallvec/n={SMALLVEC_SIZE}"), |b| { | ||
b.iter(|| { | ||
let mut data1 = data.clone(); | ||
let mut data2 = data.clone(); | ||
for &swap in &swaps { | ||
data1[NUM_INSTANCES - swap - 1] = data2[swap].take(); | ||
} | ||
assert_eq!(NUM_INSTANCES, data1.len()); | ||
assert_eq!(NUM_INSTANCES, data2.len()); | ||
assert_eq!( | ||
Some((NUM_INSTANCES as i64 / 2).max(1) - 1), | ||
data1[NUM_INSTANCES / 2] | ||
); | ||
(data1, data2) | ||
}); | ||
}); | ||
} | ||
|
||
{ | ||
let data: TinyVec<[Option<i64>; SMALLVEC_SIZE]> = | ||
(0..NUM_INSTANCES as i64).map(Some).collect(); | ||
let swaps: TinyVec<[usize; SMALLVEC_SIZE]> = (0..NUM_INSTANCES).rev().collect(); | ||
|
||
group.bench_function(format!("tinyvec/n={SMALLVEC_SIZE}"), |b| { | ||
b.iter(|| { | ||
let mut data1 = data.clone(); | ||
let mut data2 = data.clone(); | ||
for &swap in &swaps { | ||
data1[NUM_INSTANCES - swap - 1] = data2[swap].take(); | ||
} | ||
assert_eq!(NUM_INSTANCES, data1.len()); | ||
assert_eq!(NUM_INSTANCES, data2.len()); | ||
assert_eq!( | ||
Some((NUM_INSTANCES as i64 / 2).max(1) - 1), | ||
data1[NUM_INSTANCES / 2] | ||
); | ||
(data1, data2) | ||
}); | ||
}); | ||
} | ||
|
||
{ | ||
let data: Vec<Option<i64>> = (0..NUM_INSTANCES as i64).map(Some).collect(); | ||
let swaps: Vec<usize> = (0..NUM_INSTANCES).rev().collect(); | ||
|
||
group.bench_function("vec", |b| { | ||
b.iter(|| { | ||
let mut data1 = data.clone(); | ||
let mut data2 = data.clone(); | ||
for &swap in &swaps { | ||
data1[NUM_INSTANCES - swap - 1] = data2[swap].take(); | ||
} | ||
assert_eq!(NUM_INSTANCES, data1.len()); | ||
assert_eq!(NUM_INSTANCES, data2.len()); | ||
assert_eq!( | ||
Some((NUM_INSTANCES as i64 / 2).max(1) - 1), | ||
data1[NUM_INSTANCES / 2] | ||
); | ||
(data1, data2) | ||
}); | ||
}); | ||
} | ||
} |
ef2b5dc
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rust Benchmark
arrow2_convert/serialize/primitive/instances=100000/arrow2_convert
415775
ns/iter (± 659
)410308
ns/iter (± 6427
)1.01
arrow2_convert/serialize/primitive/instances=100000/arrow2/from_values
19569
ns/iter (± 411
)19189
ns/iter (± 264
)1.02
arrow2_convert/serialize/primitive/instances=100000/arrow2/from_vec
19240
ns/iter (± 46
)18837
ns/iter (± 275
)1.02
arrow2_convert/deserialize/primitive/instances=100000/arrow2_convert
99437
ns/iter (± 464
)96526
ns/iter (± 1150
)1.03
arrow2_convert/deserialize/primitive/instances=100000/arrow2/validity_checks
155169
ns/iter (± 578
)203994
ns/iter (± 2029
)0.76
arrow2_convert/deserialize/primitive/instances=100000/arrow2/validity_bypass
57908
ns/iter (± 512
)57785
ns/iter (± 170
)1.00
datastore/num_rows=1000/num_instances=1000/packed=false/insert/default
11329811
ns/iter (± 428484
)10343064
ns/iter (± 246058
)1.10
datastore/num_rows=1000/num_instances=1000/packed=false/insert/bucketsz=0
13693294
ns/iter (± 524358
)12249490
ns/iter (± 415991
)1.12
datastore/num_rows=1000/num_instances=1000/packed=false/insert/bucketsz=2
12771463
ns/iter (± 513341
)11958824
ns/iter (± 723321
)1.07
datastore/num_rows=1000/num_instances=1000/packed=false/insert/bucketsz=32
11417114
ns/iter (± 399697
)10442893
ns/iter (± 378615
)1.09
datastore/num_rows=1000/num_instances=1000/packed=false/insert/bucketsz=2048
11248422
ns/iter (± 442970
)10158891
ns/iter (± 433143
)1.11
datastore/num_rows=1000/num_instances=1000/packed=true/insert/default
10933829
ns/iter (± 465879
)10323251
ns/iter (± 380701
)1.06
datastore/num_rows=1000/num_instances=1000/packed=true/insert/bucketsz=0
13603036
ns/iter (± 510392
)12217243
ns/iter (± 520057
)1.11
datastore/num_rows=1000/num_instances=1000/packed=true/insert/bucketsz=2
12737791
ns/iter (± 614309
)11962435
ns/iter (± 558956
)1.06
datastore/num_rows=1000/num_instances=1000/packed=true/insert/bucketsz=32
11038686
ns/iter (± 398934
)11138464
ns/iter (± 396722
)0.99
datastore/num_rows=1000/num_instances=1000/packed=true/insert/bucketsz=2048
10895292
ns/iter (± 500243
)10181662
ns/iter (± 389992
)1.07
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at/default
1820
ns/iter (± 19
)1793
ns/iter (± 25
)1.02
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at/bucketsz=0
1835
ns/iter (± 9
)1830
ns/iter (± 27
)1.00
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at/bucketsz=2
1809
ns/iter (± 2
)1832
ns/iter (± 23
)0.99
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at/bucketsz=32
1796
ns/iter (± 1
)1820
ns/iter (± 26
)0.99
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at/bucketsz=2048
1801
ns/iter (± 4
)1821
ns/iter (± 27
)0.99
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at/default
1831
ns/iter (± 17
)1831
ns/iter (± 33
)1
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at/bucketsz=0
1821
ns/iter (± 4
)1841
ns/iter (± 25
)0.99
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at/bucketsz=2
1815
ns/iter (± 1
)1850
ns/iter (± 27
)0.98
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at/bucketsz=32
1838
ns/iter (± 3
)1843
ns/iter (± 24
)1.00
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at/bucketsz=2048
1806
ns/iter (± 1
)1828
ns/iter (± 24
)0.99
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/primary/default
279
ns/iter (± 0
)276
ns/iter (± 3
)1.01
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/secondaries/default
434
ns/iter (± 0
)422
ns/iter (± 5
)1.03
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/primary/bucketsz=0
279
ns/iter (± 0
)273
ns/iter (± 3
)1.02
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/secondaries/bucketsz=0
443
ns/iter (± 2
)428
ns/iter (± 5
)1.04
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/primary/bucketsz=2
279
ns/iter (± 0
)275
ns/iter (± 3
)1.01
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/secondaries/bucketsz=2
443
ns/iter (± 0
)437
ns/iter (± 5
)1.01
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/primary/bucketsz=32
279
ns/iter (± 0
)275
ns/iter (± 3
)1.01
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/secondaries/bucketsz=32
440
ns/iter (± 1
)430
ns/iter (± 6
)1.02
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/primary/bucketsz=2048
279
ns/iter (± 0
)274
ns/iter (± 4
)1.02
datastore/num_rows=1000/num_instances=1000/packed=false/latest_at_missing/secondaries/bucketsz=2048
435
ns/iter (± 0
)423
ns/iter (± 5
)1.03
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/primary/default
279
ns/iter (± 0
)274
ns/iter (± 3
)1.02
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/secondaries/default
435
ns/iter (± 9
)424
ns/iter (± 5
)1.03
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/primary/bucketsz=0
278
ns/iter (± 0
)274
ns/iter (± 3
)1.01
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/secondaries/bucketsz=0
443
ns/iter (± 0
)435
ns/iter (± 5
)1.02
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/primary/bucketsz=2
278
ns/iter (± 0
)278
ns/iter (± 4
)1
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/secondaries/bucketsz=2
443
ns/iter (± 0
)432
ns/iter (± 6
)1.03
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/primary/bucketsz=32
280
ns/iter (± 0
)273
ns/iter (± 3
)1.03
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/secondaries/bucketsz=32
440
ns/iter (± 0
)427
ns/iter (± 6
)1.03
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/primary/bucketsz=2048
279
ns/iter (± 0
)275
ns/iter (± 4
)1.01
datastore/num_rows=1000/num_instances=1000/packed=true/latest_at_missing/secondaries/bucketsz=2048
435
ns/iter (± 0
)425
ns/iter (± 6
)1.02
datastore/num_rows=1000/num_instances=1000/packed=false/range/default
11807336
ns/iter (± 560492
)10752330
ns/iter (± 411952
)1.10
datastore/num_rows=1000/num_instances=1000/packed=false/range/bucketsz=0
2173789
ns/iter (± 15425
)2182961
ns/iter (± 21243
)1.00
datastore/num_rows=1000/num_instances=1000/packed=false/range/bucketsz=2
2162677
ns/iter (± 18540
)2130683
ns/iter (± 22110
)1.02
datastore/num_rows=1000/num_instances=1000/packed=false/range/bucketsz=32
1931980
ns/iter (± 28027
)1860838
ns/iter (± 21077
)1.04
datastore/num_rows=1000/num_instances=1000/packed=false/range/bucketsz=2048
1849934
ns/iter (± 17411
)1845662
ns/iter (± 15458
)1.00
datastore/num_rows=1000/num_instances=1000/packed=true/range/default
11261033
ns/iter (± 537235
)10462736
ns/iter (± 577240
)1.08
datastore/num_rows=1000/num_instances=1000/packed=true/range/bucketsz=0
2161285
ns/iter (± 8396
)2103385
ns/iter (± 19106
)1.03
datastore/num_rows=1000/num_instances=1000/packed=true/range/bucketsz=2
2176439
ns/iter (± 8160
)2075487
ns/iter (± 20604
)1.05
datastore/num_rows=1000/num_instances=1000/packed=true/range/bucketsz=32
1867103
ns/iter (± 11327
)1804672
ns/iter (± 20187
)1.03
datastore/num_rows=1000/num_instances=1000/packed=true/range/bucketsz=2048
1851533
ns/iter (± 8203
)1823620
ns/iter (± 18059
)1.02
vector_ops/sort/instances=10000/smallvec/n=4
12486
ns/iter (± 20
)vector_ops/sort/instances=10000/tinyvec/n=4
9659
ns/iter (± 35
)vector_ops/sort/instances=10000/vec
9642
ns/iter (± 25
)vector_ops/split_off/instances=10000/smallvec/n=4/manual
5558
ns/iter (± 124
)vector_ops/split_off/instances=10000/tinyvec/n=4
2737
ns/iter (± 27
)vector_ops/split_off/instances=10000/tinyvec/n=4/manual
2747
ns/iter (± 12
)vector_ops/split_off/instances=10000/vec
2731
ns/iter (± 13
)vector_ops/split_off/instances=10000/vec/manual
2729
ns/iter (± 25
)vector_ops/swap/instances=10000/smallvec/n=4
32770
ns/iter (± 22
)vector_ops/swap/instances=10000/tinyvec/n=4
18281
ns/iter (± 28
)vector_ops/swap/instances=10000/vec
12303
ns/iter (± 15
)vector_ops/swap_opt/instances=10000/smallvec/n=4
42722
ns/iter (± 19
)vector_ops/swap_opt/instances=10000/tinyvec/n=4
28853
ns/iter (± 36
)vector_ops/swap_opt/instances=10000/vec
20491
ns/iter (± 34
)mono_points_arrow/generate_message_bundles
42610459
ns/iter (± 446806
)43260194
ns/iter (± 1005004
)0.98
mono_points_arrow/generate_messages
164984628
ns/iter (± 1176101
)179520051
ns/iter (± 2470426
)0.92
mono_points_arrow/encode_log_msg
207721489
ns/iter (± 616974
)219339638
ns/iter (± 1476377
)0.95
mono_points_arrow/encode_total
414635430
ns/iter (± 1420892
)440252153
ns/iter (± 2760339
)0.94
mono_points_arrow/decode_log_msg
253209953
ns/iter (± 750410
)263740553
ns/iter (± 2072629
)0.96
mono_points_arrow/decode_message_bundles
86431144
ns/iter (± 597833
)94875201
ns/iter (± 1292781
)0.91
mono_points_arrow/decode_total
339966947
ns/iter (± 1496559
)358081485
ns/iter (± 2638856
)0.95
mono_points_arrow_batched/generate_message_bundles
35656570
ns/iter (± 1378597
)31338943
ns/iter (± 1429791
)1.14
mono_points_arrow_batched/generate_messages
9887865
ns/iter (± 1041928
)8170055
ns/iter (± 690173
)1.21
mono_points_arrow_batched/encode_log_msg
1824556
ns/iter (± 8506
)1756504
ns/iter (± 17284
)1.04
mono_points_arrow_batched/encode_total
48036858
ns/iter (± 1475531
)44816011
ns/iter (± 1746379
)1.07
mono_points_arrow_batched/decode_log_msg
977943
ns/iter (± 3480
)976277
ns/iter (± 5357
)1.00
mono_points_arrow_batched/decode_message_bundles
19092287
ns/iter (± 978872
)16445757
ns/iter (± 983011
)1.16
mono_points_arrow_batched/decode_total
20090836
ns/iter (± 700021
)18159103
ns/iter (± 1113770
)1.11
batch_points_arrow/generate_message_bundles
287474
ns/iter (± 744
)280199
ns/iter (± 3113
)1.03
batch_points_arrow/generate_messages
7686
ns/iter (± 20
)7497
ns/iter (± 89
)1.03
batch_points_arrow/encode_log_msg
384987
ns/iter (± 1634
)384888
ns/iter (± 3635
)1.00
batch_points_arrow/encode_total
701297
ns/iter (± 3261
)681864
ns/iter (± 8286
)1.03
batch_points_arrow/decode_log_msg
341321
ns/iter (± 1794
)339360
ns/iter (± 2724
)1.01
batch_points_arrow/decode_message_bundles
2942
ns/iter (± 12
)2855
ns/iter (± 30
)1.03
batch_points_arrow/decode_total
347381
ns/iter (± 900
)346776
ns/iter (± 1945
)1.00
arrow_mono_points/insert
6111644425
ns/iter (± 16788224
)6802765507
ns/iter (± 28220893
)0.90
arrow_mono_points/query
1792954
ns/iter (± 10995
)1716591
ns/iter (± 22023
)1.04
arrow_batch_points/insert
3053739
ns/iter (± 12222
)2973626
ns/iter (± 33957
)1.03
arrow_batch_points/query
16429
ns/iter (± 36
)16562
ns/iter (± 201
)0.99
arrow_batch_vecs/insert
43026
ns/iter (± 111
)42046
ns/iter (± 613
)1.02
arrow_batch_vecs/query
506430
ns/iter (± 471
)523611
ns/iter (± 7056
)0.97
tuid/Tuid::random
34
ns/iter (± 0
)34
ns/iter (± 0
)1
This comment was automatically generated by workflow using github-action-benchmark.