Open NobodyXu opened 3 years ago
Hi
I don't think you can do a trait like that, you can't have impl FnMut() -> GeneratorResult
as a function return value :(
I agree it would be nice to seperate the pipeline creation, and pipeline execution into seperate steps. However I am not sure it can be truly done. In Dedup
for instance, if it fails to get the first element at build-time, it will still have to try to get it at run-time.
Say the upstream Generator
is trying to fetch data from a channel
, if it fails (no element to read at this time) it reports stop, if the channel
is closed it reports complete, otherwise it sends each available value through the pipeline. With such a source-generator you can't rely on the first value being available when you build the pipeline. And so you must be able to do the initialization step even when you do later runs on the pipeline.
If we had a marker trait trait NeverStoppingGenerator: Generator
we could move the initialization into Dedup::new
for any source that is a NeverStoppingGenerator
and remove that code entirely from Dedup::run
when Src
implements NeverStoppingGenerator
, but that requires specialization I think?
I don't think you can do a trait like that, you can't have
impl FnMut() -> GeneratorResult
as a function return value :(
IMHO it should be possible, as I recalled from my memory rust's async function is just a sugar for fn f(...) -> impl Future
Say the upstream Generator is trying to fetch data from a channel, if it fails (no element to read at this time) it reports stop, if the channel is closed it reports complete, otherwise it sends each available value through the pipeline. With such a source-generator you can't rely on the first value being available when you build the pipeline. And so you must be able to do the initialization step even when you do later runs on the pipeline.
If so, then I guess the terminating for_each
will just simply return I guess?
And IMO the initialization process can be restarted by calling for_each
again,
It is an interesting problem though: I don't think pushgen
will work well with channel
, which is async
by nature.
While pushgen
employs callback to avoid branching, it isn't async
, which I think program which uses channel
would expect.
IMHO it should be possible, as I recalled from my memory rust's async function is just a sugar for
fn f(...) -> impl Future
An async fn some_async()
is just sugar for fn some_async() -> impl Future
yes, but the Future
trait itself, is alot more basic. And a quick test on the playground confirms that you can't have impl Trait
as return-type in traits.
If so, then I guess the terminating for_each will just simply return I guess?
for_each
will stop and return GeneratorResult::Stopped
yes.
And IMO the initialization process can be restarted by calling for_each again,
True
It is an interesting problem though: I don't think pushgen will work well with channel, which is async by nature.
While pushgen employs callback to avoid branching, it isn't async, which I think program which uses channel would expect.
I was more thinking if you have a generator that uses try_recv
to generate data. It might not be a common use-case but I think it can prove valuable
An async fn some_async() is just sugar for fn some_async() -> impl Future yes, but the Future trait itself, is alot more basic. And a quick test on the playground confirms that you can't have impl Trait as return-type in traits.
Yep, turns out only way to do this is to add an item to the Test
, which implements another trait Callback
since we cannot infer the type of closure.
I was more thinking if you have a generator that uses try_recv to generate data. It might not be a common use-case but I think it can prove valuable
Yep, though I think my proposal will not forbid this API.
Yah I definitely think it's an interesting idea to split the cold and hot paths. Some experimentation and testing is necessary before committing to it though
What kind of experiments do you think is necessary for this?
I was just trying to define a clear example for the new trait, however I immediately discover that without impl FnMut() -> GeneratorResult
as the return value, the code failed apart because the output
is a generic parameter and it is necessary for run
to return different types based on the generic parameter.
Ah ok. I will try and think of something to try as well, but right now I don't have any clear idea.
I just realized that all pipelines either takes &mut
to itself (like Dedup
) or takes nothing (Cloned
).
So what I now proposed instead is to use an erased interface:
use core::ffi::c_void;
use core::mem::transmute;
use core::ptr::null_mut;
use core::marker::PhantomData;
/// ErasedFnPointer can either points to a free function or associated one that
/// `&mut self`
struct ErasedFnPointer<'a, T, Ret> {
struct_pointer: *mut c_void,
wrapper: fn(&ErasedFnPointer<'a, T, Ret>, T) -> Ret,
fp: *const (),
phantom: PhantomData<&'a ()>
}
impl<'a, T, Ret> ErasedFnPointer<'a, T, Ret> {
fn associated_wrapper<S>(&self, param: T) -> Ret {
let sp = self.struct_pointer as *mut S;
let s = unsafe { &mut (*sp) };
let fp = unsafe { transmute::<_, fn(&mut S, T) -> Ret>(self.fp) };
fp(s, param)
}
pub fn from_associated<S>(struct_pointer: &'a mut S, fp: fn(&mut S, T) -> Ret)
-> ErasedFnPointer<'a, T, Ret>
{
ErasedFnPointer {
struct_pointer: struct_pointer as *mut _ as *mut c_void,
fp: fp as *const (),
wrapper: ErasedFnPointer::associated_wrapper::<S>,
phantom: PhantomData
}
}
fn free_wrapper(&self, param: T) -> Ret {
let fp = unsafe { transmute::<_, fn(T) -> Ret>(self.fp) };
fp(param)
}
pub fn from_free(fp: fn(T) -> Ret) -> ErasedFnPointer<'static, T, Ret> {
ErasedFnPointer {
struct_pointer: null_mut(),
fp: fp as *const(),
wrapper: ErasedFnPointer::free_wrapper,
phantom: PhantomData
}
}
pub fn call(&self, param: T) -> Ret {
(self.wrapper)(self, param)
}
}
trait Callback {
fn call(&mut self) -> GeneratorResult;
}
trait Generator {
type Output: Callback;
fn run(&mut self, output: ErasedFnPointer<Self::Output, crate::ValueResult>) -> Self::Output;
}
The compiler can easily inline the *_wrapper
and the underlying function pointer, while Generator
can have a stable interface without any generic parameter, so that it can return a single type only.
This makes the separation I described before possible without losing performance, but it also might help with compilation time a bit since there is no need for monomorphization and no duplicate code is generated when one pipeline uses the other more than once (e.x. Dedup
).
Edit:
One problem with ErasedFnPointer
is that it doesn’t have PhantomData<&S>
field, so it might actually caused a problem for enforcing the mutability rule.
I think I got it fixed now with lifetime annotation and PhantomData
.
Hi
I'm not sold at the moment to be honest. This is IMO starting to get more complicated than the system already in place. Have you implemented any of the more involved adaptors (like Dedup
or Flatten
) using this pattern? I think before any change is decided on the basic benchmarks must be ported to this kind of system and checked against current system.
It is also quite easy to run into UB with the pointer solution; playground
Hi
I'm not sold at the moment to be honest. This is IMO starting to get more complicated than the system already in place. Have you implemented any of the more involved adaptors (like
Dedup
orFlatten
) using this pattern? I think before any change is decided on the basic benchmarks must be ported to this kind of system and checked against current system.It is also quite easy to run into UB with the pointer solution; playground
About the UB part, I have actually updated my code yesterday and introduces lifetime annotation inside ErasedFnPointer
along with PhantomData
to fix the lifetime issues.
With the updated code, it will actually fail to compile.
Edit:
Looks like I forgot to update the link yesterday and now I have updated the link in my original comment.
It’s actually possible to implement take one easily with closure, since in rust, associated functions are just regular functions:
fn main() {
let mut x = None;
ErasedFnPointer::from_associated(&mut x, |x, param| {
*x = Some(param);
println!("{:#?}", x);
}).call(1);
}
For the part where deduped values is pushed, I guess the parameter output
(the callback) in Generator::run
has to be saved inside Dedup
so that it can be accessed.
However, it does raise issues with lifetime, unless GeneratorExt::for_each
and GeneratorExt::try_for_each
takes self
instead of &mut self
.
Personally, I don’t think of this as a major downside, as users can always wraps the pipelines in a closure to use it multiple times, but it does impact existing uses of pushgen
.
Thanks for the writeup! At the moment I won't pursue this split. I don't really see the benefit right now and I don't really have the time to do any benchmarking and testing.
Thanks for the writeup! At the moment I won't pursue this split. I don't really see the benefit right now and I don't really have the time to do any benchmarking and testing.
I can definitely understand your decision.
So instead of requesting for implement this in the main repo, I will try to implement this in my own fork and provides update to it in this issue.
Sounds like a good plan! I'm definitely interested in the approach.
I have created a new branch GeneratorImprovement for this in my own fork.
I am still in the progress of replacing the generic param inn Generator::run
with ErasedFnPointer
.
I have replaced the generic version of Generator::run
with the ErasedFnPointer
version of it in here.
I will pause for a while and perform benchmark to see how this alone would affect the performance.
Benchmark result of 6e3af98000d680f023428a5e390c573f218c8e4f using taskset 0x01 cargo bench
:
Finished bench [optimized] target(s) in 0.02s
Running unittests (target/release/deps/pushgen-9dbcdc1345ab781d)
running 16 tests
test generator_ext::tests::for_each_stopped ... ignored
test structs::chain::tests::basic_chain ... ignored
test structs::dedup::tests::dedup_all_duplicate ... ignored
test structs::dedup::tests::dedup_nonduplicate ... ignored
test structs::dedup::tests::dedup_some_duplicate ... ignored
test structs::dedup::tests::dedup_stopping_source ... ignored
test structs::flatten::tests::slice_flatten ... ignored
test structs::flatten::tests::stopping_generator ... ignored
test structs::flatten::tests::vector_flatten ... ignored
test structs::iterator::tests::fold ... ignored
test structs::iterator::tests::iter_over_slice ... ignored
test structs::take::tests::take ... ignored
test structs::take::tests::take_restart ... ignored
test structs::zip::tests::same_length ... ignored
test structs::zip::tests::shorter_left_side ... ignored
test structs::zip::tests::shorter_right_side ... ignored
test result: ok. 0 passed; 0 failed; 16 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests (target/release/deps/for_each_chain_take_filter_map-c2f1d7bc7957186f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_chain_take_filter_map
Benchmarking iterator_for_each_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_chain_take_filter_map: Collecting 100 samples in estimated 5.1368 s (2400 iterations)
Benchmarking iterator_for_each_chain_take_filter_map: Analyzing
iterator_for_each_chain_take_filter_map
time: [2.1270 ms 2.1460 ms 2.1693 ms]
change: [-1.2152% -0.0224% +1.1434%] (p = 0.97 > 0.05)
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
1 (1.00%) high mild
5 (5.00%) high severe
Running unittests (target/release/deps/for_each_dedup_filter-0792b8997f8ad6ba)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_dedup_filter
Benchmarking iterator_for_each_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_for_each_dedup_filter: Collecting 100 samples in estimated 5.3478 s (71k iterations)
Benchmarking iterator_for_each_dedup_filter: Analyzing
iterator_for_each_dedup_filter
time: [74.325 us 74.800 us 75.396 us]
change: [-8.2384% -7.1125% -5.9268%] (p = 0.00 < 0.05)
Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
1 (1.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/for_each_dedup_flatten_filter_map-02530f85fb28b946)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_dedup_flatten_filter_map
Benchmarking iterator_for_each_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_dedup_flatten_filter_map: Collecting 100 samples in estimated 6.5590 s (15k iterations)
Benchmarking iterator_for_each_dedup_flatten_filter_map: Analyzing
iterator_for_each_dedup_flatten_filter_map
time: [436.31 us 439.38 us 442.92 us]
change: [-0.4690% +0.4396% +1.3767%] (p = 0.35 > 0.05)
No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
1 (1.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/for_each_filter_map-23889c5657b80085)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_filter_map
Benchmarking iterator_for_each_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_filter_map: Collecting 100 samples in estimated 5.6040 s (35k iterations)
Benchmarking iterator_for_each_filter_map: Analyzing
iterator_for_each_filter_map
time: [158.13 us 159.36 us 160.81 us]
change: [-0.9971% +0.1623% +1.3754%] (p = 0.80 > 0.05)
No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
4 (4.00%) high mild
7 (7.00%) high severe
Running unittests (target/release/deps/for_each_flatten_dedup_filter_map-982b60bd65247325)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_flatten_dedup_filter_map
Benchmarking iterator_for_each_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_flatten_dedup_filter_map: Collecting 100 samples in estimated 6.0028 s (10k iterations)
Benchmarking iterator_for_each_flatten_dedup_filter_map: Analyzing
iterator_for_each_flatten_dedup_filter_map
time: [591.43 us 595.06 us 599.53 us]
change: [-0.9254% +0.6120% +2.8122%] (p = 0.56 > 0.05)
No change in performance detected.
Found 15 outliers among 100 measurements (15.00%)
6 (6.00%) high mild
9 (9.00%) high severe
Running unittests (target/release/deps/for_each_transrangers_test6-ebafe03edf02d334)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_transrangers_test6
Benchmarking iterator_for_each_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_for_each_transrangers_test6: Collecting 100 samples in estimated 5.7450 s (20k iterations)
Benchmarking iterator_for_each_transrangers_test6: Analyzing
iterator_for_each_transrangers_test6
time: [282.04 us 283.94 us 286.32 us]
change: [-2.7423% -1.3120% +0.0465%] (p = 0.06 > 0.05)
No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
2 (2.00%) high mild
5 (5.00%) high severe
Running unittests (target/release/deps/iter_next_basic_loop-37d9035efa073309)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_basic_loop
Benchmarking iterator_next_basic_loop: Warming up for 3.0000 s
Benchmarking iterator_next_basic_loop: Collecting 100 samples in estimated 5.0034 s (56k iterations)
Benchmarking iterator_next_basic_loop: Analyzing
iterator_next_basic_loop
time: [89.551 us 90.250 us 91.122 us]
change: [-1.5815% -0.5493% +0.5786%] (p = 0.33 > 0.05)
No change in performance detected.
Found 21 outliers among 100 measurements (21.00%)
12 (12.00%) low mild
3 (3.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/iter_next_chain_take_filter_map-f319c0ad5d149fc6)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_chain_take_filter_map
Benchmarking iterator_next_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_chain_take_filter_map: Collecting 100 samples in estimated 5.0800 s (2200 iterations)
Benchmarking iterator_next_chain_take_filter_map: Analyzing
iterator_next_chain_take_filter_map
time: [2.2886 ms 2.3026 ms 2.3198 ms]
change: [-1.4603% -0.4064% +0.6751%] (p = 0.47 > 0.05)
No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
5 (5.00%) high severe
Running unittests (target/release/deps/iter_next_dedup_filter-d972ca417e800e75)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_dedup_filter
Benchmarking iterator_next_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_next_dedup_filter: Collecting 100 samples in estimated 5.1261 s (106k iterations)
Benchmarking iterator_next_dedup_filter: Analyzing
iterator_next_dedup_filter
time: [47.918 us 48.296 us 48.747 us]
change: [-0.2984% +0.7532% +1.8544%] (p = 0.19 > 0.05)
No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
5 (5.00%) high severe
Running unittests (target/release/deps/iter_next_dedup_flatten_filter_map-b66194b56c578199)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_dedup_flatten_filter_map
Benchmarking iterator_next_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_dedup_flatten_filter_map: Collecting 100 samples in estimated 8.4989 s (10k iterations)
Benchmarking iterator_next_dedup_flatten_filter_map: Analyzing
iterator_next_dedup_flatten_filter_map
time: [833.15 us 837.99 us 843.64 us]
change: [-0.3999% +0.8304% +2.2878%] (p = 0.23 > 0.05)
No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
2 (2.00%) low mild
9 (9.00%) high severe
Running unittests (target/release/deps/iter_next_filter_map-d184a6e09748526e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_filter_map
Benchmarking iterator_next_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_filter_map: Collecting 100 samples in estimated 5.6615 s (15k iterations)
Benchmarking iterator_next_filter_map: Analyzing
iterator_next_filter_map
time: [371.28 us 374.01 us 377.30 us]
change: [-1.1823% -0.1644% +0.7638%] (p = 0.75 > 0.05)
No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
1 (1.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/iter_next_flatten_dedup_filter_map-3b82355d0e7308f8)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_flatten_dedup_filter_map
Benchmarking iterator_next_flatten_dedup_filter_map: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 5.1s, enable flat sampling, or reduce sample count to 70.
Benchmarking iterator_next_flatten_dedup_filter_map: Collecting 100 samples in estimated 5.0660 s (5050 iterations)
Benchmarking iterator_next_flatten_dedup_filter_map: Analyzing
iterator_next_flatten_dedup_filter_map
time: [1.0013 ms 1.0090 ms 1.0183 ms]
change: [-4.0667% -0.9408% +1.1043%] (p = 0.61 > 0.05)
No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
3 (3.00%) high mild
5 (5.00%) high severe
Running unittests (target/release/deps/iter_next_transrangers_test6-aa5b656484c1d22f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_transrangers_test6
Benchmarking iterator_next_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_next_transrangers_test6: Collecting 100 samples in estimated 6.7045 s (10k iterations)
Benchmarking iterator_next_transrangers_test6: Analyzing
iterator_next_transrangers_test6
time: [660.66 us 665.06 us 670.30 us]
change: [-0.6146% +0.3795% +1.4175%] (p = 0.51 > 0.05)
No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
1 (1.00%) high mild
8 (8.00%) high severe
Running unittests (target/release/deps/pushgen_chain_take_filter_map-d0156bcf4d3bfeef)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking generator_chain_take_filter_map
Benchmarking generator_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking generator_chain_take_filter_map: Collecting 100 samples in estimated 7.5320 s (10k iterations)
Benchmarking generator_chain_take_filter_map: Analyzing
generator_chain_take_filter_map
time: [741.44 us 746.07 us 751.54 us]
change: [-0.7264% +0.1440% +0.9947%] (p = 0.77 > 0.05)
No change in performance detected.
Found 12 outliers among 100 measurements (12.00%)
1 (1.00%) low mild
4 (4.00%) high mild
7 (7.00%) high severe
Running unittests (target/release/deps/pushgen_dedup_filter-91859256e6e92e85)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_dedup_filter
Benchmarking pushgen_dedup_filter: Warming up for 3.0000 s
Benchmarking pushgen_dedup_filter: Collecting 100 samples in estimated 5.0323 s (242k iterations)
Benchmarking pushgen_dedup_filter: Analyzing
pushgen_dedup_filter time: [20.762 us 20.907 us 21.089 us]
change: [-0.3892% +0.7025% +1.8623%] (p = 0.27 > 0.05)
No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
3 (3.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/pushgen_dedup_flatten_filter_map-d78681cad649eb0f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_dedup_flatten_filter_map
Benchmarking pushgen_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_dedup_flatten_filter_map: Collecting 100 samples in estimated 5.0888 s (20k iterations)
Benchmarking pushgen_dedup_flatten_filter_map: Analyzing
pushgen_dedup_flatten_filter_map
time: [250.01 us 251.90 us 254.27 us]
change: [-10.144% -3.6279% +0.9031%] (p = 0.30 > 0.05)
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
1 (1.00%) high mild
5 (5.00%) high severe
Running unittests (target/release/deps/pushgen_filter_map-9ac271e2acbf21cd)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_filter_map
Benchmarking pushgen_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_filter_map: Collecting 100 samples in estimated 5.6505 s (35k iterations)
Benchmarking pushgen_filter_map: Analyzing
pushgen_filter_map time: [158.86 us 160.08 us 161.54 us]
change: [-2.1761% -0.2834% +1.2589%] (p = 0.78 > 0.05)
No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
1 (1.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/pushgen_flatten_dedup_filter_map-64ff7169b0b1e6da)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_flatten_dedup_filter_map
Benchmarking pushgen_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_flatten_dedup_filter_map: Collecting 100 samples in estimated 6.0091 s (25k iterations)
Benchmarking pushgen_flatten_dedup_filter_map: Analyzing
pushgen_flatten_dedup_filter_map
time: [236.26 us 237.76 us 239.60 us]
change: [-0.8371% -0.0583% +0.7147%] (p = 0.89 > 0.05)
No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
5 (5.00%) high severe
Running unittests (target/release/deps/pushgen_iter_basic_loop-ba604406bd167963)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_iter_basic_loop
Benchmarking pushgen_iter_basic_loop: Warming up for 3.0000 s
Benchmarking pushgen_iter_basic_loop: Collecting 100 samples in estimated 5.0472 s (56k iterations)
Benchmarking pushgen_iter_basic_loop: Analyzing
pushgen_iter_basic_loop time: [90.251 us 90.951 us 91.823 us]
change: [-0.1168% +1.1477% +2.4304%] (p = 0.08 > 0.05)
No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
5 (5.00%) high severe
Running unittests (target/release/deps/pushgen_iter_chain_take_filter_map-2c85753845747283)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_iter_chain_take_filter_map
Benchmarking pushgen_iter_chain_take_filter_map: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 7.8s, enable flat sampling, or reduce sample count to 50.
Benchmarking pushgen_iter_chain_take_filter_map: Collecting 100 samples in estimated 7.7878 s (5050 iterations)
Benchmarking pushgen_iter_chain_take_filter_map: Analyzing
pushgen_iter_chain_take_filter_map
time: [1.4744 ms 1.4850 ms 1.4973 ms]
change: [-0.7726% +0.6280% +1.9490%] (p = 0.38 > 0.05)
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
4 (4.00%) high mild
2 (2.00%) high severe
Running unittests (target/release/deps/pushgen_transrangers_test6-beceb9a7f7f3aa7e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_transrangers_test6
Benchmarking pushgen_transrangers_test6: Warming up for 3.0000 s
Benchmarking pushgen_transrangers_test6: Collecting 100 samples in estimated 5.7536 s (20k iterations)
Benchmarking pushgen_transrangers_test6: Analyzing
pushgen_transrangers_test6
time: [283.25 us 285.00 us 287.21 us]
change: [-0.9785% +0.0567% +1.1057%] (p = 0.92 > 0.05)
No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
1 (1.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/try_for_each_chain_take_filter_map-dd6018e8ec5d4a7e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_chain_take_filter_map
Benchmarking iterator_try_for_each_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_chain_take_filter_map: Collecting 100 samples in estimated 5.0208 s (2300 iterations)
Benchmarking iterator_try_for_each_chain_take_filter_map: Analyzing
iterator_try_for_each_chain_take_filter_map
time: [2.1682 ms 2.1847 ms 2.2045 ms]
change: [-0.9323% +0.1446% +1.2684%] (p = 0.80 > 0.05)
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
1 (1.00%) high mild
5 (5.00%) high severe
Running unittests (target/release/deps/try_for_each_dedup_filter-e3981107a8d0b5c7)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_dedup_filter
Benchmarking iterator_try_for_each_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_dedup_filter: Collecting 100 samples in estimated 5.1125 s (121k iterations)
Benchmarking iterator_try_for_each_dedup_filter: Analyzing
iterator_try_for_each_dedup_filter
time: [41.759 us 42.030 us 42.379 us]
change: [-1.5309% -0.4606% +0.5479%] (p = 0.41 > 0.05)
No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
2 (2.00%) high mild
5 (5.00%) high severe
Running unittests (target/release/deps/try_for_each_dedup_flatten_filter_map-98eef37b8662f178)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_dedup_flatten_filter_map
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Collecting 100 samples in estimated 6.2948 s (10k iterations)
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Analyzing
iterator_try_for_each_dedup_flatten_filter_map
time: [619.25 us 623.73 us 629.01 us]
change: [-1.0925% -0.0937% +0.8407%] (p = 0.86 > 0.05)
No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
1 (1.00%) high mild
7 (7.00%) high severe
Running unittests (target/release/deps/try_for_each_filter_map-9dead610a7585c29)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_filter_map
Benchmarking iterator_try_for_each_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_filter_map: Collecting 100 samples in estimated 6.1342 s (10k iterations)
Benchmarking iterator_try_for_each_filter_map: Analyzing
iterator_try_for_each_filter_map
time: [601.05 us 604.95 us 609.77 us]
change: [-1.4356% -0.4445% +0.5049%] (p = 0.39 > 0.05)
No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
5 (5.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/try_for_each_flatten_dedup_filter_map-092f2984d109ffc4)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_flatten_dedup_filter_map
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Collecting 100 samples in estimated 9.4996 s (10k iterations)
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Analyzing
iterator_try_for_each_flatten_dedup_filter_map
time: [937.58 us 942.78 us 948.65 us]
change: [-5.5575% -1.8861% +0.5081%] (p = 0.33 > 0.05)
No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
2 (2.00%) high mild
9 (9.00%) high severe
Running unittests (target/release/deps/try_for_each_transrangers_test6-33f87431201c709c)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_transrangers_test6
Benchmarking iterator_try_for_each_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_transrangers_test6: Collecting 100 samples in estimated 7.0154 s (10k iterations)
Benchmarking iterator_try_for_each_transrangers_test6: Analyzing
iterator_try_for_each_transrangers_test6
time: [690.28 us 695.47 us 701.61 us]
change: [-18.268% -12.381% -7.8956%] (p = 0.00 < 0.05)
Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
2 (2.00%) high mild
10 (10.00%) high severe
Benchmark of 6090ec39757f7cc85eb6c1583482c40f41d6223f:
Compiling pushgen v0.0.1 (/home/nobodyxu/Dev/pushgen)
Finished bench [optimized] target(s) in 3m 03s
Running unittests (target/release/deps/pushgen-9dbcdc1345ab781d)
running 19 tests
test callback::tests::from_associated ... ignored
test callback::tests::from_associated_for_closure ... ignored
test callback::tests::from_free ... ignored
test generator_ext::tests::for_each_stopped ... ignored
test structs::chain::tests::basic_chain ... ignored
test structs::dedup::tests::dedup_all_duplicate ... ignored
test structs::dedup::tests::dedup_nonduplicate ... ignored
test structs::dedup::tests::dedup_some_duplicate ... ignored
test structs::dedup::tests::dedup_stopping_source ... ignored
test structs::flatten::tests::slice_flatten ... ignored
test structs::flatten::tests::stopping_generator ... ignored
test structs::flatten::tests::vector_flatten ... ignored
test structs::iterator::tests::fold ... ignored
test structs::iterator::tests::iter_over_slice ... ignored
test structs::take::tests::take ... ignored
test structs::take::tests::take_restart ... ignored
test structs::zip::tests::same_length ... ignored
test structs::zip::tests::shorter_left_side ... ignored
test structs::zip::tests::shorter_right_side ... ignored
test result: ok. 0 passed; 0 failed; 19 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests (target/release/deps/for_each_chain_take_filter_map-c2f1d7bc7957186f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_chain_take_filter_map
Benchmarking iterator_for_each_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_chain_take_filter_map: Collecting 100 samples in estimated 5.1416 s (2400 iterations)
Benchmarking iterator_for_each_chain_take_filter_map: Analyzing
iterator_for_each_chain_take_filter_map
time: [2.1307 ms 2.1469 ms 2.1664 ms]
change: [-1.2470% +0.0425% +1.3581%] (p = 0.94 > 0.05)
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
1 (1.00%) high mild
5 (5.00%) high severe
Running unittests (target/release/deps/for_each_dedup_filter-0792b8997f8ad6ba)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_dedup_filter
Benchmarking iterator_for_each_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_for_each_dedup_filter: Collecting 100 samples in estimated 5.0360 s (66k iterations)
Benchmarking iterator_for_each_dedup_filter: Analyzing
iterator_for_each_dedup_filter
time: [76.366 us 77.038 us 77.825 us]
change: [+1.7262% +3.4645% +5.2383%] (p = 0.00 < 0.05)
Performance has regressed.
Found 6 outliers among 100 measurements (6.00%)
3 (3.00%) high mild
3 (3.00%) high severe
Running unittests (target/release/deps/for_each_dedup_flatten_filter_map-02530f85fb28b946)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_dedup_flatten_filter_map
Benchmarking iterator_for_each_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_dedup_flatten_filter_map: Collecting 100 samples in estimated 6.5673 s (15k iterations)
Benchmarking iterator_for_each_dedup_flatten_filter_map: Analyzing
iterator_for_each_dedup_flatten_filter_map
time: [427.84 us 430.80 us 434.27 us]
change: [-2.5552% -1.6524% -0.6604%] (p = 0.00 < 0.05)
Change within noise threshold.
Found 7 outliers among 100 measurements (7.00%)
1 (1.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/for_each_filter_map-23889c5657b80085)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_filter_map
Benchmarking iterator_for_each_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_filter_map: Collecting 100 samples in estimated 5.6767 s (35k iterations)
Benchmarking iterator_for_each_filter_map: Analyzing
iterator_for_each_filter_map
time: [159.62 us 160.85 us 162.31 us]
change: [-0.2898% +0.9400% +2.0048%] (p = 0.14 > 0.05)
No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
2 (2.00%) high mild
7 (7.00%) high severe
Running unittests (target/release/deps/for_each_flatten_dedup_filter_map-982b60bd65247325)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_flatten_dedup_filter_map
Benchmarking iterator_for_each_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_flatten_dedup_filter_map: Collecting 100 samples in estimated 6.0153 s (10k iterations)
Benchmarking iterator_for_each_flatten_dedup_filter_map: Analyzing
iterator_for_each_flatten_dedup_filter_map
time: [591.23 us 595.11 us 599.90 us]
change: [-2.7574% -0.8490% +0.5473%] (p = 0.39 > 0.05)
No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
1 (1.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/for_each_transrangers_test6-ebafe03edf02d334)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_transrangers_test6
Benchmarking iterator_for_each_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_for_each_transrangers_test6: Collecting 100 samples in estimated 5.7753 s (20k iterations)
Benchmarking iterator_for_each_transrangers_test6: Analyzing
iterator_for_each_transrangers_test6
time: [283.04 us 284.92 us 287.28 us]
change: [-0.5860% +0.3632% +1.3297%] (p = 0.47 > 0.05)
No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
5 (5.00%) high severe
Running unittests (target/release/deps/iter_next_basic_loop-37d9035efa073309)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_basic_loop
Benchmarking iterator_next_basic_loop: Warming up for 3.0000 s
Benchmarking iterator_next_basic_loop: Collecting 100 samples in estimated 5.3813 s (61k iterations)
Benchmarking iterator_next_basic_loop: Analyzing
iterator_next_basic_loop
time: [88.227 us 88.830 us 89.586 us]
change: [-2.3394% -1.1818% -0.0575%] (p = 0.05 < 0.05)
Change within noise threshold.
Found 12 outliers among 100 measurements (12.00%)
7 (7.00%) high mild
5 (5.00%) high severe
Running unittests (target/release/deps/iter_next_chain_take_filter_map-f319c0ad5d149fc6)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_chain_take_filter_map
Benchmarking iterator_next_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_chain_take_filter_map: Collecting 100 samples in estimated 5.0784 s (2200 iterations)
Benchmarking iterator_next_chain_take_filter_map: Analyzing
iterator_next_chain_take_filter_map
time: [2.2954 ms 2.3124 ms 2.3330 ms]
change: [-0.5810% +0.4244% +1.5850%] (p = 0.45 > 0.05)
No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
2 (2.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/iter_next_dedup_filter-d972ca417e800e75)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_dedup_filter
Benchmarking iterator_next_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_next_dedup_filter: Collecting 100 samples in estimated 5.0968 s (106k iterations)
Benchmarking iterator_next_dedup_filter: Analyzing
iterator_next_dedup_filter
time: [47.792 us 48.176 us 48.636 us]
change: [-1.4840% -0.3737% +0.6225%] (p = 0.51 > 0.05)
No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
1 (1.00%) high mild
4 (4.00%) high severe
Running unittests (target/release/deps/iter_next_dedup_flatten_filter_map-b66194b56c578199)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_dedup_flatten_filter_map
Benchmarking iterator_next_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_dedup_flatten_filter_map: Collecting 100 samples in estimated 8.5047 s (10k iterations)
Benchmarking iterator_next_dedup_flatten_filter_map: Analyzing
iterator_next_dedup_flatten_filter_map
time: [840.23 us 845.14 us 850.85 us]
change: [-1.0482% +0.2435% +1.2954%] (p = 0.71 > 0.05)
No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
2 (2.00%) high mild
9 (9.00%) high severe
Running unittests (target/release/deps/iter_next_filter_map-d184a6e09748526e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_filter_map
Benchmarking iterator_next_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_filter_map: Collecting 100 samples in estimated 5.6721 s (15k iterations)
Benchmarking iterator_next_filter_map: Analyzing
iterator_next_filter_map
time: [371.88 us 374.77 us 378.24 us]
change: [-0.5513% +0.3788% +1.5762%] (p = 0.49 > 0.05)
No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
3 (3.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/iter_next_flatten_dedup_filter_map-3b82355d0e7308f8)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_flatten_dedup_filter_map
Benchmarking iterator_next_flatten_dedup_filter_map: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 5.1s, enable flat sampling, or reduce sample count to 60.
Benchmarking iterator_next_flatten_dedup_filter_map: Collecting 100 samples in estimated 5.0808 s (5050 iterations)
Benchmarking iterator_next_flatten_dedup_filter_map: Analyzing
iterator_next_flatten_dedup_filter_map
time: [994.51 us 1.0027 ms 1.0125 ms]
change: [-2.0237% -0.9274% +0.0606%] (p = 0.09 > 0.05)
No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
3 (3.00%) high mild
5 (5.00%) high severe
Running unittests (target/release/deps/iter_next_transrangers_test6-aa5b656484c1d22f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_transrangers_test6
Benchmarking iterator_next_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_next_transrangers_test6: Collecting 100 samples in estimated 6.7035 s (10k iterations)
Benchmarking iterator_next_transrangers_test6: Analyzing
iterator_next_transrangers_test6
time: [660.18 us 664.37 us 669.43 us]
change: [-1.4956% -0.3559% +0.7084%] (p = 0.55 > 0.05)
No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
4 (4.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/pushgen_chain_take_filter_map-d0156bcf4d3bfeef)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking generator_chain_take_filter_map
Benchmarking generator_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking generator_chain_take_filter_map: Collecting 100 samples in estimated 6.4890 s (10k iterations)
Benchmarking generator_chain_take_filter_map: Analyzing
generator_chain_take_filter_map
time: [638.75 us 643.78 us 649.60 us]
change: [-14.694% -13.955% -13.188%] (p = 0.00 < 0.05)
Performance has improved.
Found 10 outliers among 100 measurements (10.00%)
3 (3.00%) high mild
7 (7.00%) high severe
Running unittests (target/release/deps/pushgen_dedup_filter-91859256e6e92e85)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_dedup_filter
Benchmarking pushgen_dedup_filter: Warming up for 3.0000 s
Benchmarking pushgen_dedup_filter: Collecting 100 samples in estimated 5.0207 s (242k iterations)
Benchmarking pushgen_dedup_filter: Analyzing
pushgen_dedup_filter time: [20.577 us 20.747 us 20.954 us]
change: [-2.3968% -1.0662% +0.1615%] (p = 0.10 > 0.05)
No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
4 (4.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/pushgen_dedup_flatten_filter_map-d78681cad649eb0f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_dedup_flatten_filter_map
Benchmarking pushgen_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_dedup_flatten_filter_map: Collecting 100 samples in estimated 5.1514 s (10k iterations)
Benchmarking pushgen_dedup_flatten_filter_map: Analyzing
pushgen_dedup_flatten_filter_map
time: [506.45 us 510.29 us 514.96 us]
change: [+99.196% +101.67% +103.99%] (p = 0.00 < 0.05)
Performance has regressed.
Found 8 outliers among 100 measurements (8.00%)
3 (3.00%) low mild
5 (5.00%) high severe
Running unittests (target/release/deps/pushgen_filter_map-9ac271e2acbf21cd)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_filter_map
Benchmarking pushgen_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_filter_map: Collecting 100 samples in estimated 5.6642 s (35k iterations)
Benchmarking pushgen_filter_map: Analyzing
pushgen_filter_map time: [159.16 us 160.20 us 161.49 us]
change: [-1.1014% +0.1143% +1.2986%] (p = 0.86 > 0.05)
No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
1 (1.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/pushgen_flatten_dedup_filter_map-64ff7169b0b1e6da)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_flatten_dedup_filter_map
Benchmarking pushgen_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_flatten_dedup_filter_map: Collecting 100 samples in estimated 8.9666 s (10k iterations)
Benchmarking pushgen_flatten_dedup_filter_map: Analyzing
pushgen_flatten_dedup_filter_map
time: [885.01 us 890.09 us 895.92 us]
change: [+271.62% +274.84% +278.06%] (p = 0.00 < 0.05)
Performance has regressed.
Found 10 outliers among 100 measurements (10.00%)
1 (1.00%) high mild
9 (9.00%) high severe
Running unittests (target/release/deps/pushgen_iter_basic_loop-ba604406bd167963)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_iter_basic_loop
Benchmarking pushgen_iter_basic_loop: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 7.5s, enable flat sampling, or reduce sample count to 50.
Benchmarking pushgen_iter_basic_loop: Collecting 100 samples in estimated 7.5461 s (5050 iterations)
Benchmarking pushgen_iter_basic_loop: Analyzing
pushgen_iter_basic_loop time: [1.4848 ms 1.4939 ms 1.5045 ms]
change: [+1525.7% +1544.2% +1561.7%] (p = 0.00 < 0.05)
Performance has regressed.
Found 12 outliers among 100 measurements (12.00%)
3 (3.00%) high mild
9 (9.00%) high severe
Running unittests (target/release/deps/pushgen_iter_chain_take_filter_map-2c85753845747283)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_iter_chain_take_filter_map
Benchmarking pushgen_iter_chain_take_filter_map: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 6.7s, enable flat sampling, or reduce sample count to 60.
Benchmarking pushgen_iter_chain_take_filter_map: Collecting 100 samples in estimated 6.7268 s (5050 iterations)
Benchmarking pushgen_iter_chain_take_filter_map: Analyzing
pushgen_iter_chain_take_filter_map
time: [1.3233 ms 1.3336 ms 1.3458 ms]
change: [-11.833% -10.562% -9.1405%] (p = 0.00 < 0.05)
Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
4 (4.00%) high mild
3 (3.00%) high severe
Running unittests (target/release/deps/pushgen_transrangers_test6-beceb9a7f7f3aa7e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_transrangers_test6
Benchmarking pushgen_transrangers_test6: Warming up for 3.0000 s
Benchmarking pushgen_transrangers_test6: Collecting 100 samples in estimated 7.5459 s (10k iterations)
Benchmarking pushgen_transrangers_test6: Analyzing
pushgen_transrangers_test6
time: [743.61 us 748.33 us 753.88 us]
change: [+159.79% +162.52% +165.39%] (p = 0.00 < 0.05)
Performance has regressed.
Found 10 outliers among 100 measurements (10.00%)
1 (1.00%) high mild
9 (9.00%) high severe
Running unittests (target/release/deps/try_for_each_chain_take_filter_map-dd6018e8ec5d4a7e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_chain_take_filter_map
Benchmarking iterator_try_for_each_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_chain_take_filter_map: Collecting 100 samples in estimated 5.0196 s (2300 iterations)
Benchmarking iterator_try_for_each_chain_take_filter_map: Analyzing
iterator_try_for_each_chain_take_filter_map
time: [2.1683 ms 2.1860 ms 2.2080 ms]
change: [-1.1223% +0.0580% +1.3757%] (p = 0.93 > 0.05)
No change in performance detected.
Found 16 outliers among 100 measurements (16.00%)
6 (6.00%) low mild
4 (4.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/try_for_each_dedup_filter-e3981107a8d0b5c7)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_dedup_filter
Benchmarking iterator_try_for_each_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_dedup_filter: Collecting 100 samples in estimated 5.0968 s (121k iterations)
Benchmarking iterator_try_for_each_dedup_filter: Analyzing
iterator_try_for_each_dedup_filter
time: [41.793 us 42.111 us 42.503 us]
change: [-0.8095% +0.1412% +1.1413%] (p = 0.78 > 0.05)
No change in performance detected.
Found 12 outliers among 100 measurements (12.00%)
6 (6.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/try_for_each_dedup_flatten_filter_map-98eef37b8662f178)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_dedup_flatten_filter_map
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Collecting 100 samples in estimated 6.2973 s (10k iterations)
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Analyzing
iterator_try_for_each_dedup_flatten_filter_map
time: [619.80 us 623.83 us 628.69 us]
change: [-0.8105% +0.0665% +0.9953%] (p = 0.88 > 0.05)
No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
1 (1.00%) high mild
6 (6.00%) high severe
Running unittests (target/release/deps/try_for_each_filter_map-9dead610a7585c29)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_filter_map
Benchmarking iterator_try_for_each_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_filter_map: Collecting 100 samples in estimated 6.1253 s (10k iterations)
Benchmarking iterator_try_for_each_filter_map: Analyzing
iterator_try_for_each_filter_map
time: [602.46 us 606.62 us 611.60 us]
change: [-0.7174% +0.1216% +1.0620%] (p = 0.79 > 0.05)
No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
2 (2.00%) high mild
8 (8.00%) high severe
Running unittests (target/release/deps/try_for_each_flatten_dedup_filter_map-092f2984d109ffc4)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_flatten_dedup_filter_map
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Collecting 100 samples in estimated 9.5406 s (10k iterations)
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Analyzing
iterator_try_for_each_flatten_dedup_filter_map
time: [937.79 us 943.25 us 949.28 us]
change: [-1.2269% -0.2153% +0.6648%] (p = 0.67 > 0.05)
No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
1 (1.00%) high mild
10 (10.00%) high severe
Running unittests (target/release/deps/try_for_each_transrangers_test6-33f87431201c709c)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_transrangers_test6
Benchmarking iterator_try_for_each_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_transrangers_test6: Collecting 100 samples in estimated 7.0399 s (10k iterations)
Benchmarking iterator_try_for_each_transrangers_test6: Analyzing
iterator_try_for_each_transrangers_test6
time: [692.75 us 697.97 us 704.16 us]
change: [-0.4898% +0.8592% +2.2790%] (p = 0.25 > 0.05)
No change in performance detected.
Found 13 outliers among 100 measurements (13.00%)
1 (1.00%) high mild
12 (12.00%) high severe
Interesting!
Looks like there were performance-regression for pretty much all benchmarks except for chain_take_filter_map
? I wonder why that managed to improve while the others regressed by such hefty amounts?
It seems benchmark test
iterator_for_each_dedup_flatten_filter_map
iterator_next_basic_loop
generator_chain_take_filter_map
pushgen_iter_chain_take_filter_map
are showing improvements, not just chain_take_filter_map
.
@AndWass How about also running the benchmark on your computer to confirm these benchmark tests are indeed showing improvements?
It seems benchmark test iterator_for_each_dedup_flatten_filter_map, iterator_next_basic_loop, generator_chain_take_filter_map and pushgen_iter_chain_take_filter_map are showing improvements, not just chain_take_filter_map.
The first two are not using pushgen
at all so shouldn't be impacted by the changes. The improvement percentage is also small, so more likely that there was some jitter during those benchmarks.
The other two benchmark the same operations using pushgen
and the iterator adaptor of pushgen
. So they are closely related.
@AndWass How about also running the benchmark on your computer to confirm these benchmark tests are indeed showing improvements?
I'll try and run them tonight.
It seems benchmark test iterator_for_each_dedup_flatten_filter_map, iterator_next_basic_loop, generator_chain_take_filter_map and pushgen_iter_chain_take_filter_map are showing improvements, not just chain_take_filter_map.
The first two are not using
pushgen
at all so shouldn't be impacted by the changes. The improvement percentage is also small, so more likely that there was some jitter during those benchmarks.The other two benchmark the same operations using
pushgen
and the iterator adaptor ofpushgen
. So they are closely related.
Ah, sorry that I got them wrong.
Ah, sorry that I got them wrong.
Nothing to be sorry about!
BTW, I also did another benchmark for b949ebaace966a5f3417ccca3edc0e80a5a2bf32 which adds #[inline(always)]
to associated functions of ErasedFnPointer
:
NOTE that the I ran this benchmark after the previous one on GeneratorImprovement
branch, so the result here isn't relative to main
.
Compiling pushgen v0.0.1 (/home/nobodyxu/Dev/pushgen)
Finished bench [optimized] target(s) in 3m 04s
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen-9dbcdc1345ab781d)
running 19 tests
test callback::tests::from_associated ... ignored
test callback::tests::from_associated_for_closure ... ignored
test callback::tests::from_free ... ignored
test generator_ext::tests::for_each_stopped ... ignored
test structs::chain::tests::basic_chain ... ignored
test structs::dedup::tests::dedup_all_duplicate ... ignored
test structs::dedup::tests::dedup_nonduplicate ... ignored
test structs::dedup::tests::dedup_some_duplicate ... ignored
test structs::dedup::tests::dedup_stopping_source ... ignored
test structs::flatten::tests::slice_flatten ... ignored
test structs::flatten::tests::stopping_generator ... ignored
test structs::flatten::tests::vector_flatten ... ignored
test structs::iterator::tests::fold ... ignored
test structs::iterator::tests::iter_over_slice ... ignored
test structs::take::tests::take ... ignored
test structs::take::tests::take_restart ... ignored
test structs::zip::tests::same_length ... ignored
test structs::zip::tests::shorter_left_side ... ignored
test structs::zip::tests::shorter_right_side ... ignored
test result: ok. 0 passed; 0 failed; 19 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/for_each_chain_take_filter_map-c2f1d7bc7957186f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_chain_take_filter_map
Benchmarking iterator_for_each_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_chain_take_filter_map: Collecting 100 samples in estimated 5.1524 s (2400 iterations)
Benchmarking iterator_for_each_chain_take_filter_map: Analyzing
iterator_for_each_chain_take_filter_map
time: [2.1299 ms 2.1443 ms 2.1619 ms]
change: [-1.1988% -0.1180% +1.0000%] (p = 0.84 > 0.05)
No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
2 (2.00%) high mild
6 (6.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/for_each_dedup_filter-0792b8997f8ad6ba)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_dedup_filter
Benchmarking iterator_for_each_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_for_each_dedup_filter: Collecting 100 samples in estimated 5.1628 s (66k iterations)
Benchmarking iterator_for_each_dedup_filter: Analyzing
iterator_for_each_dedup_filter
time: [74.275 us 74.873 us 75.595 us]
change: [-5.6235% -3.8748% -2.4623%] (p = 0.00 < 0.05)
Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
2 (2.00%) high mild
6 (6.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/for_each_dedup_flatten_filter_map-02530f85fb28b946)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_dedup_flatten_filter_map
Benchmarking iterator_for_each_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_dedup_flatten_filter_map: Collecting 100 samples in estimated 6.5704 s (15k iterations)
Benchmarking iterator_for_each_dedup_flatten_filter_map: Analyzing
iterator_for_each_dedup_flatten_filter_map
time: [432.76 us 435.92 us 439.57 us]
change: [+0.0471% +1.0949% +2.1850%] (p = 0.04 < 0.05)
Change within noise threshold.
Found 7 outliers among 100 measurements (7.00%)
7 (7.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/for_each_filter_map-23889c5657b80085)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_filter_map
Benchmarking iterator_for_each_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_filter_map: Collecting 100 samples in estimated 5.6405 s (35k iterations)
Benchmarking iterator_for_each_filter_map: Analyzing
iterator_for_each_filter_map
time: [158.40 us 159.49 us 160.81 us]
change: [-2.0810% -1.0343% -0.0990%] (p = 0.04 < 0.05)
Change within noise threshold.
Found 6 outliers among 100 measurements (6.00%)
6 (6.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/for_each_flatten_dedup_filter_map-982b60bd65247325)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_flatten_dedup_filter_map
Benchmarking iterator_for_each_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking iterator_for_each_flatten_dedup_filter_map: Collecting 100 samples in estimated 6.0156 s (10k iterations)
Benchmarking iterator_for_each_flatten_dedup_filter_map: Analyzing
iterator_for_each_flatten_dedup_filter_map
time: [591.22 us 595.44 us 600.52 us]
change: [-0.8741% +0.0444% +0.9715%] (p = 0.93 > 0.05)
No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
2 (2.00%) high mild
6 (6.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/for_each_transrangers_test6-ebafe03edf02d334)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_for_each_transrangers_test6
Benchmarking iterator_for_each_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_for_each_transrangers_test6: Collecting 100 samples in estimated 5.7434 s (20k iterations)
Benchmarking iterator_for_each_transrangers_test6: Analyzing
iterator_for_each_transrangers_test6
time: [283.30 us 285.40 us 287.92 us]
change: [-0.8300% +0.3013% +1.5750%] (p = 0.65 > 0.05)
No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
7 (7.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/iter_next_basic_loop-37d9035efa073309)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_basic_loop
Benchmarking iterator_next_basic_loop: Warming up for 3.0000 s
Benchmarking iterator_next_basic_loop: Collecting 100 samples in estimated 5.0658 s (56k iterations)
Benchmarking iterator_next_basic_loop: Analyzing
iterator_next_basic_loop
time: [90.813 us 91.433 us 92.212 us]
change: [+0.9357% +2.0819% +3.2069%] (p = 0.00 < 0.05)
Change within noise threshold.
Found 4 outliers among 100 measurements (4.00%)
4 (4.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/iter_next_chain_take_filter_map-f319c0ad5d149fc6)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_chain_take_filter_map
Benchmarking iterator_next_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_chain_take_filter_map: Collecting 100 samples in estimated 5.0712 s (2200 iterations)
Benchmarking iterator_next_chain_take_filter_map: Analyzing
iterator_next_chain_take_filter_map
time: [2.2794 ms 2.2967 ms 2.3175 ms]
change: [-1.8310% -0.6786% +0.4489%] (p = 0.26 > 0.05)
No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
5 (5.00%) high mild
5 (5.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/iter_next_dedup_filter-d972ca417e800e75)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_dedup_filter
Benchmarking iterator_next_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_next_dedup_filter: Collecting 100 samples in estimated 5.0780 s (106k iterations)
Benchmarking iterator_next_dedup_filter: Analyzing
iterator_next_dedup_filter
time: [47.163 us 47.527 us 47.966 us]
change: [-1.6487% +0.2363% +2.6709%] (p = 0.87 > 0.05)
No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
6 (6.00%) high mild
5 (5.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/iter_next_dedup_flatten_filter_map-b66194b56c578199)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_dedup_flatten_filter_map
Benchmarking iterator_next_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_dedup_flatten_filter_map: Collecting 100 samples in estimated 8.2807 s (10k iterations)
Benchmarking iterator_next_dedup_flatten_filter_map: Analyzing
iterator_next_dedup_flatten_filter_map
time: [824.25 us 829.92 us 836.17 us]
change: [-3.1964% -2.3549% -1.5474%] (p = 0.00 < 0.05)
Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
6 (6.00%) high mild
2 (2.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/iter_next_filter_map-d184a6e09748526e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_filter_map
Benchmarking iterator_next_filter_map: Warming up for 3.0000 s
Benchmarking iterator_next_filter_map: Collecting 100 samples in estimated 5.6743 s (15k iterations)
Benchmarking iterator_next_filter_map: Analyzing
iterator_next_filter_map
time: [371.77 us 374.19 us 377.11 us]
change: [-1.3948% -0.2976% +0.7256%] (p = 0.59 > 0.05)
No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
5 (5.00%) high mild
6 (6.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/iter_next_flatten_dedup_filter_map-3b82355d0e7308f8)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_flatten_dedup_filter_map
Benchmarking iterator_next_flatten_dedup_filter_map: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 5.1s, enable flat sampling, or reduce sample count to 70.
Benchmarking iterator_next_flatten_dedup_filter_map: Collecting 100 samples in estimated 5.0779 s (5050 iterations)
Benchmarking iterator_next_flatten_dedup_filter_map: Analyzing
iterator_next_flatten_dedup_filter_map
time: [999.23 us 1.0070 ms 1.0166 ms]
change: [-0.5148% +0.4892% +1.4748%] (p = 0.35 > 0.05)
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
6 (6.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/iter_next_transrangers_test6-aa5b656484c1d22f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_next_transrangers_test6
Benchmarking iterator_next_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_next_transrangers_test6: Collecting 100 samples in estimated 6.6861 s (10k iterations)
Benchmarking iterator_next_transrangers_test6: Analyzing
iterator_next_transrangers_test6
time: [659.96 us 664.28 us 669.30 us]
change: [-1.0315% +0.0658% +1.3197%] (p = 0.92 > 0.05)
No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
3 (3.00%) high mild
7 (7.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen_chain_take_filter_map-d0156bcf4d3bfeef)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking generator_chain_take_filter_map
Benchmarking generator_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking generator_chain_take_filter_map: Collecting 100 samples in estimated 7.5446 s (10k iterations)
Benchmarking generator_chain_take_filter_map: Analyzing
generator_chain_take_filter_map
time: [742.68 us 747.65 us 753.43 us]
change: [+15.287% +16.276% +17.305%] (p = 0.00 < 0.05)
Performance has regressed.
Found 8 outliers among 100 measurements (8.00%)
1 (1.00%) high mild
7 (7.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen_dedup_filter-91859256e6e92e85)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_dedup_filter
Benchmarking pushgen_dedup_filter: Warming up for 3.0000 s
Benchmarking pushgen_dedup_filter: Collecting 100 samples in estimated 5.0660 s (247k iterations)
Benchmarking pushgen_dedup_filter: Analyzing
pushgen_dedup_filter time: [20.463 us 20.620 us 20.816 us]
change: [-1.7907% -0.6087% +0.6338%] (p = 0.34 > 0.05)
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
1 (1.00%) high mild
5 (5.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen_dedup_flatten_filter_map-d78681cad649eb0f)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_dedup_flatten_filter_map
Benchmarking pushgen_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_dedup_flatten_filter_map: Collecting 100 samples in estimated 5.1006 s (20k iterations)
Benchmarking pushgen_dedup_flatten_filter_map: Analyzing
pushgen_dedup_flatten_filter_map
time: [250.08 us 251.93 us 254.27 us]
change: [-50.976% -50.378% -49.703%] (p = 0.00 < 0.05)
Performance has improved.
Found 6 outliers among 100 measurements (6.00%)
6 (6.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen_filter_map-9ac271e2acbf21cd)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_filter_map
Benchmarking pushgen_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_filter_map: Collecting 100 samples in estimated 5.6106 s (35k iterations)
Benchmarking pushgen_filter_map: Analyzing
pushgen_filter_map time: [157.58 us 158.76 us 160.16 us]
change: [-2.2154% -1.1452% -0.0369%] (p = 0.05 < 0.05)
Change within noise threshold.
Found 8 outliers among 100 measurements (8.00%)
8 (8.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen_flatten_dedup_filter_map-64ff7169b0b1e6da)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_flatten_dedup_filter_map
Benchmarking pushgen_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking pushgen_flatten_dedup_filter_map: Collecting 100 samples in estimated 6.0200 s (25k iterations)
Benchmarking pushgen_flatten_dedup_filter_map: Analyzing
pushgen_flatten_dedup_filter_map
time: [237.16 us 238.80 us 240.80 us]
change: [-73.441% -73.118% -72.731%] (p = 0.00 < 0.05)
Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
1 (1.00%) high mild
7 (7.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen_iter_basic_loop-ba604406bd167963)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_iter_basic_loop
Benchmarking pushgen_iter_basic_loop: Warming up for 3.0000 s
Benchmarking pushgen_iter_basic_loop: Collecting 100 samples in estimated 5.4069 s (61k iterations)
Benchmarking pushgen_iter_basic_loop: Analyzing
pushgen_iter_basic_loop time: [88.381 us 89.033 us 89.833 us]
change: [-94.090% -94.038% -93.987%] (p = 0.00 < 0.05)
Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
2 (2.00%) high mild
6 (6.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen_iter_chain_take_filter_map-2c85753845747283)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_iter_chain_take_filter_map
Benchmarking pushgen_iter_chain_take_filter_map: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 7.8s, enable flat sampling, or reduce sample count to 50.
Benchmarking pushgen_iter_chain_take_filter_map: Collecting 100 samples in estimated 7.7925 s (5050 iterations)
Benchmarking pushgen_iter_chain_take_filter_map: Analyzing
pushgen_iter_chain_take_filter_map
time: [1.5369 ms 1.5456 ms 1.5559 ms]
change: [+13.369% +14.945% +16.368%] (p = 0.00 < 0.05)
Performance has regressed.
Found 8 outliers among 100 measurements (8.00%)
1 (1.00%) low mild
7 (7.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/pushgen_transrangers_test6-beceb9a7f7f3aa7e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking pushgen_transrangers_test6
Benchmarking pushgen_transrangers_test6: Warming up for 3.0000 s
Benchmarking pushgen_transrangers_test6: Collecting 100 samples in estimated 5.7539 s (20k iterations)
Benchmarking pushgen_transrangers_test6: Analyzing
pushgen_transrangers_test6
time: [283.17 us 285.38 us 288.03 us]
change: [-62.310% -61.886% -61.430%] (p = 0.00 < 0.05)
Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
1 (1.00%) high mild
6 (6.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/try_for_each_chain_take_filter_map-dd6018e8ec5d4a7e)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_chain_take_filter_map
Benchmarking iterator_try_for_each_chain_take_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_chain_take_filter_map: Collecting 100 samples in estimated 5.0112 s (2300 iterations)
Benchmarking iterator_try_for_each_chain_take_filter_map: Analyzing
iterator_try_for_each_chain_take_filter_map
time: [2.1670 ms 2.1834 ms 2.2033 ms]
change: [-1.3590% -0.1154% +1.1142%] (p = 0.86 > 0.05)
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
6 (6.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/try_for_each_dedup_filter-e3981107a8d0b5c7)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_dedup_filter
Benchmarking iterator_try_for_each_dedup_filter: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_dedup_filter: Collecting 100 samples in estimated 5.1109 s (121k iterations)
Benchmarking iterator_try_for_each_dedup_filter: Analyzing
iterator_try_for_each_dedup_filter
time: [41.814 us 42.134 us 42.522 us]
change: [-0.9225% +0.0574% +1.0324%] (p = 0.91 > 0.05)
No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
2 (2.00%) high mild
7 (7.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/try_for_each_dedup_flatten_filter_map-98eef37b8662f178)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_dedup_flatten_filter_map
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Collecting 100 samples in estimated 6.2983 s (10k iterations)
Benchmarking iterator_try_for_each_dedup_flatten_filter_map: Analyzing
iterator_try_for_each_dedup_flatten_filter_map
time: [619.76 us 624.02 us 629.05 us]
change: [-0.7038% +0.1630% +0.9587%] (p = 0.71 > 0.05)
No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
1 (1.00%) high mild
8 (8.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/try_for_each_filter_map-9dead610a7585c29)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_filter_map
Benchmarking iterator_try_for_each_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_filter_map: Collecting 100 samples in estimated 6.1309 s (10k iterations)
Benchmarking iterator_try_for_each_filter_map: Analyzing
iterator_try_for_each_filter_map
time: [601.42 us 605.28 us 610.06 us]
change: [-0.9470% -0.0525% +0.8285%] (p = 0.91 > 0.05)
No change in performance detected.
Found 12 outliers among 100 measurements (12.00%)
6 (6.00%) high mild
6 (6.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/try_for_each_flatten_dedup_filter_map-092f2984d109ffc4)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_flatten_dedup_filter_map
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Collecting 100 samples in estimated 9.4908 s (10k iterations)
Benchmarking iterator_try_for_each_flatten_dedup_filter_map: Analyzing
iterator_try_for_each_flatten_dedup_filter_map
time: [935.91 us 940.68 us 946.20 us]
change: [-0.5845% +0.2973% +1.4541%] (p = 0.57 > 0.05)
No change in performance detected.
Found 13 outliers among 100 measurements (13.00%)
2 (2.00%) low mild
2 (2.00%) high mild
9 (9.00%) high severe
Running unittests (/home/nobodyxu/Dev/pushgen/target/release/deps/try_for_each_transrangers_test6-33f87431201c709c)
WARNING: HTML report generation will become a non-default optional feature in Criterion.rs 0.4.0.
This feature is being moved to cargo-criterion (https://github.com/bheisler/cargo-criterion) and will be optional in a future version of Criterion.rs. To silence this warning, either switch to cargo-criterion or enable the 'html_reports' feature in your Cargo.toml.
Gnuplot not found, using plotters backend
Benchmarking iterator_try_for_each_transrangers_test6
Benchmarking iterator_try_for_each_transrangers_test6: Warming up for 3.0000 s
Benchmarking iterator_try_for_each_transrangers_test6: Collecting 100 samples in estimated 7.1084 s (10k iterations)
Benchmarking iterator_try_for_each_transrangers_test6: Analyzing
iterator_try_for_each_transrangers_test6
time: [699.31 us 704.44 us 710.48 us]
change: [-0.7978% +0.7563% +2.2267%] (p = 0.34 > 0.05)
No change in performance detected.
Found 12 outliers among 100 measurements (12.00%)
2 (2.00%) high mild
10 (10.00%) high severe
Seems like adding #[inline(always)]
does dramatically affect
pushgen_dedup_flatten_filter_map
,pushgen_filter_map
,pushgen_flatten_dedup_filter_map
,pushgen_iter_basic_loop
,pushgen_transrangers_test6
Seems like adding
#[inline(always)]
does dramatically affect
pushgen_dedup_flatten_filter_map
,pushgen_filter_map
,pushgen_flatten_dedup_filter_map
,pushgen_iter_basic_loop
,pushgen_transrangers_test6
Just did a quick check on my cell phone but looks like it's pretty much the same as baseline pushgen
I think?
Yeah, the different is so small that it can be considered as jitter
So if that is true, then the ErasedFnPointer
with #[inline(always)]
doesn't have regression in performance.
And one of the advantage of this approach is that DynGenerator
is removed and have less generic instantiation, so maybe faster compilation time.
And one of the advantage of this approach is that
DynGenerator
is removed and have less generic instantiation, so maybe faster compilation time.
Yah that's clearly a benefit. It does make the API a bit more convoluted though.
And one of the advantage of this approach is that
DynGenerator
is removed and have less generic instantiation, so maybe faster compilation time.Yah that's clearly a benefit. It does make the API a bit more convoluted though.
Unfortunately, I didn't find a better way.
Though we can write a macro for it to makes it much easier.
I was able to use a #[inline(always)]
generic function run_gen
to simplify the process instead of a macro.
I ran the benchmarks on my machine, I ran them for both stable, beta and nightly
main stable | main beta | main nightly | erasefn stable | erasedfn beta | erasedfn nightly | |
---|---|---|---|---|---|---|
filter_map | 185 | 182 | 182 | 177 | 181 | 180 |
chain_take_filter_map | 963 | 843 | 836 | 931 | 1145 | 1138 |
dedup_filter | 25 | 25 | 25 | 24 | 25 | 24 |
flatten_dedup_filter_map | 300 | 302 | 296 | 293 | 312 | 309 |
dedup_flatten_filter_map | 315 | 314 | 312 | 307 | 310 | 310 |
transrangers_test6 | 365 | 362 | 362 | 356 | 369 | 370 |
Overall I would say they are pretty much the same, some minor differences but it could be jitter when running the benchmarks etc. Beta and nightly does regress noticably when running with the erased function though. Why that is I have no idea really but I guess it fails to optimize for some reason?
IDK, feels like that could be a regression on the rustc
side, or maybe the underlying llvm
that rustc
is using since it is the one doing all the optimization?
BTW, Branch GeneratorImprovement in my fork is now frozen and any new development I make later will be in a separate branch.
Sadly, I don’t have enough time for doing the continuation part, so I decided to instead, submit a PR on ErasedFnPointer
first, which will help pushgen to have a stable trait API without the use of generics.
@AndWass What’s your thought on this?
Only doing ErasedFnPointer
doesn't really have a good risk-reward ratio at the moment IMO. The code isn't as straight-forward and the only reward ATM is that we get an object-safe trait. Since we also saw that there were regressions in beta (probably llvm/rustc regressions, but still) it skews the ratio even further.
I searched github for usages of dyn Iterator
and it appears to not be used very often, which IMO is an indicator that it's not that much of a deal to have object safety.
Right.
Maybe I shall have another attempt at continuation style Generator tomorrow, I might get it working with some explicit lifetime annotations.
@AndWass It looks like it is really hard to get this done with existing language specification.
Even with lifetime satisfied, the presence of associated type Ret
means that if to store a Generator
, you would need to also specify the type of Ret
had you specified Output
.
I think this means that it would be extremely difficult to implement and would make the code too fragile, so I want to give up on this idea for now (unless there is support for impl Trait
inside trait).
Ok, nice of you to try! Let's close the issue for now then?
Yep
@AndWass Reopening this issue for GAT is closed to stabilisation.
It's likely to be stablised in 1.62, once it is there, we can restart the work to separate initialisation stage and the actual looping passes.
GAT is now stablised, so I will retry this soon when I'm free.
Currently, the callback chain building and the actual invocation is done at the same time.
This means that invocation of
Generator::run
needs to check for initialization and that under debug mode, there might be2n
stack frames wheren
is the number of pipelines.Here, I propose a new API for
Generator
:Call to
Generator::run
will initialize the pipeline (e.g. forDedup
, it would be getting the first element) and then return a callback to a closure that have the entire pipelines already built.As a result, even under the debug build where no inline is performed, the stack frames used is guaranteed to be equal to the number of pipelines.
The function returned will be called inside
for_each
,try_for_each
andIteratorAdaptor
.This would also make it clear to new contributors on which part is responsible for initialization and which part is accounted for the "loop body" and possibly remove some uses of
Option
.