Comments (5)
You could do position
just fine for any ExactParallelIterator
, just like enumerate
does.
(edit: that's actually the tighter IndexedParallelIterator
)
from rayon.
Probably to be most useful position
would return any matching position, not necessarily the first one. (Same with find
.)
from rayon.
I made an off-hand comment elsewhere that should probably go here: https://github.com/nikomatsakis/rayon/issues/94#issuecomment-246458377
I've also been thinking about short-circuiting ops like find, any, etc., and these also don't fit well in the current Consumer model. Maybe there's a better push-pull balance we could find here.
@nikomatsakis replied:
I have assumed that short-circuiting ops would use a shared Arc to signal when they should stop (and it'd be somewhat undefined which one you get, of course).
I agree that it should be non-deterministic.
But my point about short-circuiting is that I don't see how to do that in a meaningful way. Yes, you could use AtomicBool
to skip to comparison of find
itself, but this is at the tail-end of the Consumer
chain. The rest of the parallel iterator is going to continue pushing items down to this consumer, skip, skip, skip, skip, skip...
What I'd like is some method of feedback for a consumer to say, "I'm done here, don't feed me anymore!" A normal Iterator
gets this naturally since it's a pull model -- they just don't call next()
anymore. It doesn't have to be perfect cessation here, so some extra items could still trickle down, but there should be a best effort mechanism.
Perhaps they could return an Option
from splits, and/or from the conversions into_folder
. That would allow a chance to return None
and completely avoid whole chunks of iteration.
from rayon.
Yes, you could use AtomicBool to skip to comparison of find itself, but this is at the tail-end of the Consumer chain. The rest of the parallel iterator is going to continue pushing items down to this consumer, skip, skip, skip, skip, skip...
Hmm. I see. It seems like we could add some sort of callback to the consumer traits for this readily enough.
I will add this issue to the 1.0 milestone -- I think we should address this before calling rayon's traits stable in any sense.
from rayon.
We do have find_any
and position_any
now, from #129.
from rayon.
Related Issues (20)
- Suggestion for stack size when calling par_sort_unstable HOT 5
- Tag missing for release 1.10.0 HOT 1
- Unable to parallelize properly using `par_iter` or `par_bridge` HOT 8
- Documentation for `ParallelIterator::fold` and/or `ParallelIterator::reduce` seam to be incorrect HOT 5
- Slowdown when using deeply nested vector HOT 6
- Potential `len` method ambiguity in `src/range.rs` HOT 5
- Potential to fix memory ordering for value HOT 2
- a broadcast that only gets executed on idle threads
- `in_place_scope` documentation is confusing/unclear HOT 14
- use_current_thread and the global thread pool HOT 2
- Why does ThreadPool block until a operation is finished? HOT 1
- A way to hook before/after job execution (and/or a way to see a number of tasks in the processing queue)
- Function dependencies with Rayon without blocking the thread / Rayon synchronization primitives?
- Add synchronization guarantees for `ParallelIterator::for_each*` HOT 1
- Par bridge with optional buffering IO handling HOT 1
- Thread pool without work stealing HOT 6
- Question about return types from .map() HOT 4
- Terribly inefficient design and possible solution HOT 5
- [Discussion] Is it possible to impl `IntoIterator` for `ParallelIterator`? HOT 3
- Yield locks HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rayon.