parameterise tree size in join example
This commit is contained in:
parent
a1e1c90f90
commit
8b4eba5a19
|
@ -11,7 +11,6 @@ work-stealing = []
|
||||||
prefer-local = []
|
prefer-local = []
|
||||||
never-local = []
|
never-local = []
|
||||||
|
|
||||||
|
|
||||||
[profile.bench]
|
[profile.bench]
|
||||||
debug = true
|
debug = true
|
||||||
|
|
||||||
|
@ -48,4 +47,5 @@ cfg-if = "1.0.0"
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
async-std = "1.13.0"
|
async-std = "1.13.0"
|
||||||
tracing-test = "0.2.5"
|
tracing-test = "0.2.5"
|
||||||
|
tracing-tracy = "0.11.4"
|
||||||
distaff = {path = "distaff"}
|
distaff = {path = "distaff"}
|
||||||
|
|
|
@ -74,10 +74,6 @@ impl HeartbeatListInner {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn iter(&self) -> std::collections::btree_map::Values<'_, u64, HeartbeatSender> {
|
|
||||||
self.heartbeats.values()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn notify_nth(&mut self, n: usize) {
|
fn notify_nth(&mut self, n: usize) {
|
||||||
if let Some((_, heartbeat)) = self.heartbeats.iter_mut().nth(n) {
|
if let Some((_, heartbeat)) = self.heartbeats.iter_mut().nth(n) {
|
||||||
heartbeat.set();
|
heartbeat.set();
|
||||||
|
|
|
@ -67,18 +67,20 @@ impl WorkerThread {
|
||||||
fn run_inner(&self) {
|
fn run_inner(&self) {
|
||||||
let mut job = None;
|
let mut job = None;
|
||||||
'outer: loop {
|
'outer: loop {
|
||||||
if let Some(job) = job {
|
if let Some(job) = job.take() {
|
||||||
self.execute(job);
|
self.execute(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.context.should_exit() {
|
|
||||||
// if the context is stopped, break out of the outer loop which
|
|
||||||
// will exit the thread.
|
|
||||||
break 'outer;
|
|
||||||
}
|
|
||||||
|
|
||||||
// no more jobs, wait to be notified of a new job or a heartbeat.
|
// no more jobs, wait to be notified of a new job or a heartbeat.
|
||||||
job = self.find_work_or_wait();
|
while job.is_none() {
|
||||||
|
if self.context.should_exit() {
|
||||||
|
// if the context is stopped, break out of the outer loop which
|
||||||
|
// will exit the thread.
|
||||||
|
break 'outer;
|
||||||
|
}
|
||||||
|
|
||||||
|
job = self.find_work_or_wait();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,10 +4,10 @@ use executor::util::tree::Tree;
|
||||||
|
|
||||||
const TREE_SIZE: usize = 16;
|
const TREE_SIZE: usize = 16;
|
||||||
|
|
||||||
fn join_scope() {
|
fn join_scope(tree_size: usize) {
|
||||||
let pool = ThreadPool::new();
|
let pool = ThreadPool::new();
|
||||||
|
|
||||||
let tree = Tree::new(TREE_SIZE, 1);
|
let tree = Tree::new(tree_size, 1);
|
||||||
|
|
||||||
fn sum(tree: &Tree<u32>, node: usize, scope: &Scope) -> u32 {
|
fn sum(tree: &Tree<u32>, node: usize, scope: &Scope) -> u32 {
|
||||||
let node = tree.get(node);
|
let node = tree.get(node);
|
||||||
|
@ -31,10 +31,10 @@ fn join_scope() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn join_pool() {
|
fn join_pool(tree_size: usize) {
|
||||||
let pool = ThreadPool::new();
|
let pool = ThreadPool::new();
|
||||||
|
|
||||||
let tree = Tree::new(TREE_SIZE, 1);
|
let tree = Tree::new(tree_size, 1);
|
||||||
|
|
||||||
fn sum(tree: &Tree<u32>, node: usize, pool: &ThreadPool) -> u32 {
|
fn sum(tree: &Tree<u32>, node: usize, pool: &ThreadPool) -> u32 {
|
||||||
let node = tree.get(node);
|
let node = tree.get(node);
|
||||||
|
@ -60,10 +60,10 @@ fn join_pool() {
|
||||||
eprintln!("sum: {sum}");
|
eprintln!("sum: {sum}");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn join_distaff() {
|
fn join_distaff(tree_size: usize) {
|
||||||
use distaff::*;
|
use distaff::*;
|
||||||
let pool = ThreadPool::new();
|
let pool = ThreadPool::new();
|
||||||
let tree = Tree::new(TREE_SIZE, 1);
|
let tree = Tree::new(tree_size, 1);
|
||||||
|
|
||||||
fn sum<'scope, 'env>(tree: &Tree<u32>, node: usize, scope: &'scope Scope<'scope, 'env>) -> u32 {
|
fn sum<'scope, 'env>(tree: &Tree<u32>, node: usize, scope: &'scope Scope<'scope, 'env>) -> u32 {
|
||||||
let node = tree.get(node);
|
let node = tree.get(node);
|
||||||
|
@ -81,17 +81,15 @@ fn join_distaff() {
|
||||||
node.leaf + l + r
|
node.leaf + l + r
|
||||||
}
|
}
|
||||||
|
|
||||||
for _ in 0..1000 {
|
let sum = pool.scope(|s| {
|
||||||
let sum = pool.scope(|s| {
|
let sum = sum(&tree, tree.root().unwrap(), s);
|
||||||
let sum = sum(&tree, tree.root().unwrap(), s);
|
sum
|
||||||
sum
|
});
|
||||||
});
|
std::hint::black_box(sum);
|
||||||
std::hint::black_box(sum);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn join_chili() {
|
fn join_chili(tree_size: usize) {
|
||||||
let tree = Tree::new(TREE_SIZE, 1u32);
|
let tree = Tree::new(tree_size, 1u32);
|
||||||
|
|
||||||
fn sum(tree: &Tree<u32>, node: usize, scope: &mut chili::Scope<'_>) -> u32 {
|
fn sum(tree: &Tree<u32>, node: usize, scope: &mut chili::Scope<'_>) -> u32 {
|
||||||
let node = tree.get(node);
|
let node = tree.get(node);
|
||||||
|
@ -113,8 +111,8 @@ fn join_chili() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn join_rayon() {
|
fn join_rayon(tree_size: usize) {
|
||||||
let tree = Tree::new(TREE_SIZE, 1u32);
|
let tree = Tree::new(tree_size, 1u32);
|
||||||
|
|
||||||
fn sum(tree: &Tree<u32>, node: usize) -> u32 {
|
fn sum(tree: &Tree<u32>, node: usize) -> u32 {
|
||||||
let node = tree.get(node);
|
let node = tree.get(node);
|
||||||
|
@ -133,19 +131,34 @@ fn join_rayon() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
tracing_subscriber::fmt::init();
|
// use tracing_subscriber::layer::SubscriberExt;
|
||||||
|
// tracing::subscriber::set_global_default(
|
||||||
|
// tracing_subscriber::registry().with(tracing_tracy::TracyLayer::default()),
|
||||||
|
// )
|
||||||
|
// .expect("Failed to set global default subscriber");
|
||||||
|
|
||||||
|
let size = std::env::args()
|
||||||
|
.nth(2)
|
||||||
|
.and_then(|s| s.parse::<usize>().ok())
|
||||||
|
.unwrap_or(TREE_SIZE);
|
||||||
|
|
||||||
match std::env::args().nth(1).as_deref() {
|
match std::env::args().nth(1).as_deref() {
|
||||||
Some("scope") => join_scope(),
|
Some("scope") => join_scope(size),
|
||||||
Some("pool") => join_pool(),
|
Some("pool") => join_pool(size),
|
||||||
Some("chili") => join_chili(),
|
Some("chili") => join_chili(size),
|
||||||
Some("distaff") => join_distaff(),
|
Some("distaff") => join_distaff(size),
|
||||||
Some("rayon") => join_rayon(),
|
Some("rayon") => join_rayon(size),
|
||||||
_ => {
|
_ => {
|
||||||
eprintln!(
|
eprintln!(
|
||||||
"Usage: {} [scope|pool|chili|distaff|rayon]",
|
"Usage: {} [scope|pool|chili|distaff|rayon] <tree_size={}>",
|
||||||
std::env::args().next().unwrap()
|
std::env::args().next().unwrap(),
|
||||||
|
TREE_SIZE
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eprintln!("Done!");
|
||||||
|
// wait for user input before exiting
|
||||||
|
// std::io::stdin().read_line(&mut String::new()).unwrap();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue