cold errors, benchmark updated, unstable features added
This commit is contained in:
parent
4f9c5c00bb
commit
f735348762
|
@ -98,20 +98,22 @@ fn join_praetor(b: &mut Bencher) {
|
||||||
|
|
||||||
let tree = tree::Tree::new(TREE_SIZE, 1u32);
|
let tree = tree::Tree::new(TREE_SIZE, 1u32);
|
||||||
|
|
||||||
fn sum(tree: &tree::Tree<u32>, node: usize) -> u32 {
|
fn sum(tree: &tree::Tree<u32>, node: usize, scope: &Scope) -> u32 {
|
||||||
let node = tree.get(node);
|
let node = tree.get(node);
|
||||||
Scope::with(|s| {
|
let (l, r) = scope.join(
|
||||||
let (l, r) = s.join(
|
|s| node.left.map(|node| sum(tree, node, s)).unwrap_or_default(),
|
||||||
|| node.left.map(|node| sum(tree, node)).unwrap_or_default(),
|
|s| {
|
||||||
|| node.right.map(|node| sum(tree, node)).unwrap_or_default(),
|
node.right
|
||||||
);
|
.map(|node| sum(tree, node, s))
|
||||||
|
.unwrap_or_default()
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
node.leaf + l + r
|
node.leaf + l + r
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
b.iter(move || {
|
b.iter(move || {
|
||||||
let sum = pool.scope(|_| sum(&tree, tree.root().unwrap()));
|
let sum = pool.scope(|s| sum(&tree, tree.root().unwrap(), s));
|
||||||
// eprintln!("{sum}");
|
// eprintln!("{sum}");
|
||||||
assert_ne!(sum, 0);
|
assert_ne!(sum, 0);
|
||||||
});
|
});
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
vec_deque_pop_if,
|
vec_deque_pop_if,
|
||||||
unsafe_cell_access,
|
unsafe_cell_access,
|
||||||
debug_closure_helpers,
|
debug_closure_helpers,
|
||||||
|
cell_update,
|
||||||
|
cold_path,
|
||||||
let_chains
|
let_chains
|
||||||
)]
|
)]
|
||||||
|
|
||||||
|
|
|
@ -166,6 +166,7 @@ mod job {
|
||||||
any::Any,
|
any::Any,
|
||||||
cell::UnsafeCell,
|
cell::UnsafeCell,
|
||||||
fmt::Debug,
|
fmt::Debug,
|
||||||
|
hint::cold_path,
|
||||||
marker::PhantomPinned,
|
marker::PhantomPinned,
|
||||||
mem::{self, ManuallyDrop, MaybeUninit},
|
mem::{self, ManuallyDrop, MaybeUninit},
|
||||||
pin::Pin,
|
pin::Pin,
|
||||||
|
@ -554,6 +555,7 @@ mod job {
|
||||||
let err = unsafe { (&mut *self.err_or_link.get()).error.take() };
|
let err = unsafe { (&mut *self.err_or_link.get()).error.take() };
|
||||||
|
|
||||||
let result: std::thread::Result<T> = if let Some(err) = err {
|
let result: std::thread::Result<T> = if let Some(err) = err {
|
||||||
|
cold_path();
|
||||||
Err(err)
|
Err(err)
|
||||||
} else {
|
} else {
|
||||||
let val = unsafe {
|
let val = unsafe {
|
||||||
|
|
Loading…
Reference in a new issue