cold errors, benchmark updated, unstable features added

This commit is contained in:
Janis 2025-02-20 21:51:48 +01:00
parent 4f9c5c00bb
commit f735348762
3 changed files with 15 additions and 9 deletions

View file

@ -98,20 +98,22 @@ fn join_praetor(b: &mut Bencher) {
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);
Scope::with(|s| {
let (l, r) = s.join(
|| node.left.map(|node| sum(tree, node)).unwrap_or_default(),
|| node.right.map(|node| sum(tree, node)).unwrap_or_default(),
let (l, r) = scope.join(
|s| node.left.map(|node| sum(tree, node, s)).unwrap_or_default(),
|s| {
node.right
.map(|node| sum(tree, node, s))
.unwrap_or_default()
},
);
node.leaf + l + r
})
}
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}");
assert_ne!(sum, 0);
});

View file

@ -2,6 +2,8 @@
vec_deque_pop_if,
unsafe_cell_access,
debug_closure_helpers,
cell_update,
cold_path,
let_chains
)]

View file

@ -166,6 +166,7 @@ mod job {
any::Any,
cell::UnsafeCell,
fmt::Debug,
hint::cold_path,
marker::PhantomPinned,
mem::{self, ManuallyDrop, MaybeUninit},
pin::Pin,
@ -554,6 +555,7 @@ mod job {
let err = unsafe { (&mut *self.err_or_link.get()).error.take() };
let result: std::thread::Result<T> = if let Some(err) = err {
cold_path();
Err(err)
} else {
let val = unsafe {