Skip to main content

Crate threadteam

Crate threadteam 

Source
Expand description

Splittable CPU placement token for the tensor4all CPU stack.

threadteam is the single place that starts tasks. Kernels never see a scheduler type: they take an Exec, a token for budget slots of a Pool, and split it with Exec::fork, Exec::for_ranges, Exec::broadcast or Exec::external.

  • A Pool is built once by its owner with Pool::builder.
  • Exec::new mints a token from a pool; Exec::serial needs none.
  • A token is not Clone/Copy; entries consume it; splits conserve slots.
  • Serial, budget-one and one-task entries run inline and never reach any scheduler, so the process-global Rayon pool is never started implicitly.

§Features

  • parallel (default): run on a private pool. Without it the same types exist, every pool has width 1 and every entry runs inline.
  • ledger: test support, see the ledger module (compiled only with this feature).

§Examples

use std::sync::atomic::{AtomicUsize, Ordering};
use threadteam::{Exec, Pool};

let pool = Pool::builder().threads(4).build()?;
let mut exec = Exec::new(&pool, 4)?;

// Phase 1: data-parallel loop.
let total = AtomicUsize::new(0);
exec.reborrow().for_ranges(1000, 64.try_into().unwrap(), |r| {
    total.fetch_add(r.len(), Ordering::Relaxed);
});
assert_eq!(total.into_inner(), 1000);

// Phase 2: two independent parts, each with its share of the slots.
exec.fork(2, |_i, child| {
    assert!(child.budget().get() <= 2);
});

Re-exports§

pub use pool::Pool;
pub use pool::PoolBuilder;

Structs§

Cancelled
A peer of a team section panicked: barriers return this so that the other participants can leave the section instead of waiting forever.
DispatchCosts
Dispatch costs of a pool’s three kinds of token.
Exec
budget slots of a Pool, or the calling thread alone.
IntoTeamError
Pool::into_team could not reserve the members: the pool is handed back.
Participant
The view one participant has of the section it runs.
Pool
A fixed set of worker threads that Exec tokens place work on.
PoolBuilder
Configuration of a Pool.
Team
Pool members reserved for as long as this value lives.
TeamExec
Exclusive authority over a set of reserved pool members, for one scope.
WaitOverride
A partial WaitPolicy for one operation: unset fields are inherited.
WaitPolicy
How an idle member behaves after its reservation ended.
WidthCosts
Dispatch cost of one kind of token, stored as the measured anchors.

Enums§

DispatchKind
Which kind of token a dispatch cost belongs to.
Error
Failure to build a Pool or an Exec.
HostClass
The class of the machine, keyed by the kernel dispatch it will take, not by the CPU model. Detected once per process by HostClass::detect.
Qos
Scheduling class of the pool’s worker threads (macOS quality of service).
Refused
A broadcast that cannot guarantee co-scheduling.

Constants§

PAYS
The one multiple of the stack: a region runs in parallel when its serial estimate is at least PAYS * sections * dispatch_cost.

Functions§

pays_at
The one rule: parallel exactly when estimate >= PAYS * sections * dispatch_cost, compared in integer nanoseconds.
raise_current_thread_qos
Raises the calling thread’s Qos to at least qos; never lowers it.
width_for_by
The width in 1..=budget that minimises sections * D(k) + estimate / k, where D is cost and a width only counts when the region pays_at it; 1 when no width does. Ties go to the smaller width. Allocation-free.