You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rust-rayon-core/0001-Update-to-crossbeam-de...

70 lines
2.3 KiB

From aaf3296c9470a094f740d004444b45065d00a730 Mon Sep 17 00:00:00 2001
From: Josh Stone <cuviper@gmail.com>
Date: Wed, 12 Jun 2019 20:45:51 -0700
Subject: [PATCH] Update to crossbeam-deque 0.7
---
src/registry.rs | 28 ++++++++++------------------
1 file changed, 10 insertions(+), 18 deletions(-)
diff --git a/src/registry.rs b/src/registry.rs
index 76567c3703e6..3171d0041d34 100644
--- a/src/registry.rs
+++ b/src/registry.rs
@@ -1,4 +1,4 @@
-use crossbeam_deque::{self as deque, Pop, Steal, Stealer, Worker};
+use crossbeam_deque::{Steal, Stealer, Worker};
use crossbeam_queue::SegQueue;
#[cfg(rayon_unstable)]
use internal::task::Task;
@@ -222,15 +222,13 @@ impl Registry {
let n_threads = builder.get_num_threads();
let breadth_first = builder.get_breadth_first();
- let (workers, stealers): (Vec<_>, Vec<_>) = (0..n_threads)
- .map(|_| {
- if breadth_first {
- deque::fifo()
- } else {
- deque::lifo()
- }
- })
- .unzip();
+ let new = if breadth_first {
+ Worker::new_fifo
+ } else {
+ Worker::new_lifo
+ };
+ let workers: Vec<_> = (0..n_threads).map(|_| new()).collect();
+ let stealers: Vec<_> = workers.iter().map(Worker::stealer).collect();
let registry = Arc::new(Registry {
thread_infos: stealers.into_iter().map(ThreadInfo::new).collect(),
@@ -674,13 +672,7 @@ impl WorkerThread {
/// bottom.
#[inline]
pub(super) unsafe fn take_local_job(&self) -> Option<JobRef> {
- loop {
- match self.worker.pop() {
- Pop::Empty => return None,
- Pop::Data(d) => return Some(d),
- Pop::Retry => {}
- }
- }
+ self.worker.pop()
}
/// Wait until the latch is set. Try to keep busy by popping and
@@ -763,7 +755,7 @@ impl WorkerThread {
loop {
match victim.stealer.steal() {
Steal::Empty => return None,
- Steal::Data(d) => {
+ Steal::Success(d) => {
log!(StoleWork {
worker: self.index,
victim: victim_index
--
2.21.0