Skip to main content

ParShape

Enum ParShape 

Source
pub enum ParShape {
    Seq,
    Rayon(NonZeroUsize),
}
Expand description

the shape of a Par: which kind of parallelism and how many threads, without the right to run anything. Copy, so workspace queries and thresholds can use it freely; it cannot be passed to any function that executes work.

Variants§

§

Seq

sequential

§

Rayon(NonZeroUsize)

the global rayon threadpool with this many threads

Implementations§

Source§

impl ParShape

Source

pub fn dispatch_cost(self, width: NonZeroUsize) -> Duration

The cost of one parallel section of width participants on this shape, in the steady state (sections back to back); Duration::MAX for a sequential shape or width < 2. width is clamped to the degree of the shape.

  • Team: the cost of the team token the shape was taken from (threadteam’s DispatchKind::Team, with the costs of that token’s pool).
  • Rayon: the cost of the Rayon route at the place the calling thread is: InPool when it is a worker of the pool (a caller inside spindle::with_lock is one), Outside otherwise (the rows of the host table of threadteam, or the same numbers without the threadteam feature). The shape is read on the thread that decides, so the answer follows the caller, not the token.
Source

pub fn min_dispatch_cost(self) -> Duration

The cheapest cost of one section over all widths of this shape (a lower bound of dispatch_cost at every width), Duration::MAX for a shape of degree below 2.

Source

pub fn pays( self, estimate: Duration, sections: u32, width: NonZeroUsize, ) -> bool

Whether a region of serial time estimate that opens sections sections of width participants pays on this shape: estimate >= PAYS * sections * dispatch_cost(width). sections is the number of dispatches the region really performs.

Source

pub fn pays_full(self, estimate: Duration, sections: u32) -> bool

pays at the full degree of the shape.

Source§

impl ParShape

Source

pub const fn seq() -> Self

sequential

Source

pub fn rayon(nthreads: usize) -> Self

Rayon(nthreads), or Rayon(rayon::current_num_threads()) when nthreads is zero

Source

pub fn degree(self) -> usize

the number of threads that should ideally execute an operation of this shape

Trait Implementations§

Source§

impl Clone for ParShape

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for ParShape

Source§

impl Debug for ParShape

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for ParShape

Source§

impl PartialEq for ParShape

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for ParShape

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Boilerplate for T
where T: Copy + Send + Sync + Debug + PartialEq + 'static,

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> ByRef<T> for T

Source§

fn by_ref(&self) -> &T

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DistributionExt for T
where T: ?Sized,

Source§

fn rand<T>(&self, rng: &mut (impl ?Sized + Rng)) -> T
where Self: Distribution<T>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V