From f7353487627e9ef1592b3415325add6bc37a5ea8 Mon Sep 17 00:00:00 2001 From: Janis Date: Thu, 20 Feb 2025 21:51:48 +0100 Subject: [PATCH] cold errors, benchmark updated, unstable features added --- benches/join.rs | 20 +++++++++++--------- src/lib.rs | 2 ++ src/praetor/mod.rs | 2 ++ 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/benches/join.rs b/benches/join.rs index ccdaa7d..b12080c 100644 --- a/benches/join.rs +++ b/benches/join.rs @@ -98,20 +98,22 @@ fn join_praetor(b: &mut Bencher) { let tree = tree::Tree::new(TREE_SIZE, 1u32); - fn sum(tree: &tree::Tree, node: usize) -> u32 { + fn sum(tree: &tree::Tree, 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 - }) + 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); }); diff --git a/src/lib.rs b/src/lib.rs index 9f7a42d..1250cd7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,6 +2,8 @@ vec_deque_pop_if, unsafe_cell_access, debug_closure_helpers, + cell_update, + cold_path, let_chains )] diff --git a/src/praetor/mod.rs b/src/praetor/mod.rs index 2ec47a6..183eb75 100644 --- a/src/praetor/mod.rs +++ b/src/praetor/mod.rs @@ -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 = if let Some(err) = err { + cold_path(); Err(err) } else { let val = unsafe {