pub struct CpuContext { /* private fields */ }Expand description
Reusable CPU execution context carrying CPU parallelism policy.
CpuContext stores the requested thread count as a kernel-level
parallelism hint and owns the Rayon pool used by multi-threaded CPU work.
§Examples
use tenferro_cpu::CpuContext;
let ctx = CpuContext::with_threads(1).unwrap();
let value = ctx.install(|| 1 + 1);
assert_eq!(value, 2);
assert_eq!(ctx.num_threads(), 1);Implementations§
Source§impl CpuContext
impl CpuContext
Sourcepub fn from_env() -> Self
pub fn from_env() -> Self
Create a CPU context from RAYON_NUM_THREADS, or fall back to a
single-threaded context with a stderr warning when validation fails.
§Examples
use tenferro_cpu::CpuContext;
let ctx = CpuContext::from_env();
assert!(ctx.num_threads() >= 1);Sourcepub fn try_from_env() -> Result<Self>
pub fn try_from_env() -> Result<Self>
Try to create a CPU context from RAYON_NUM_THREADS.
§Examples
use tenferro_cpu::CpuContext;
let ctx = CpuContext::try_from_env()
.unwrap_or_else(|_| CpuContext::with_threads(1).unwrap());
assert!(ctx.num_threads() >= 1);§Errors
Returns CpuContextError when RAYON_NUM_THREADS is malformed or
requests an invalid worker count.
Sourcepub fn with_threads(num_threads: usize) -> Result<Self>
pub fn with_threads(num_threads: usize) -> Result<Self>
Create a CPU context with a fixed parallelism hint.
§Examples
use tenferro_cpu::CpuContext;
let ctx = CpuContext::with_threads(2).unwrap();
assert_eq!(ctx.num_threads(), 2);§Errors
Returns CpuContextError::InvalidThreadCount through
Error::Validation when num_threads is zero, or
Error::BackendSource when Rayon rejects the thread pool.
Sourcepub fn with_pinned_cpus(
cpus: CpuSet,
num_threads: usize,
) -> Result<Self, CpuContextError>
pub fn with_pinned_cpus( cpus: CpuSet, num_threads: usize, ) -> Result<Self, CpuContextError>
Create a Rayon context whose workers are pinned to assigned logical CPUs.
A real Rayon pool is constructed even when num_threads is one. The
worker count cannot exceed the assigned CPU count.
§Examples
use tenferro_cpu::{process_cpu_affinity, CpuContext};
if let Some(allowed) = process_cpu_affinity() {
let one_cpu = tenferro_cpu::CpuSet::new([allowed.as_slice()[0]])?;
let context = CpuContext::with_pinned_cpus(one_cpu.clone(), 1)?;
assert_eq!(context.pinned_cpus(), Some(&one_cpu));
}§Errors
Returns CpuContextError::InvalidThreadCount for zero workers,
CpuContextError::TooManyWorkers when the request exceeds the CPU
set, or an affinity error when workers cannot be pinned.
Sourcepub fn num_threads(&self) -> usize
pub fn num_threads(&self) -> usize
Return this context’s CPU parallelism hint.
§Examples
use tenferro_cpu::CpuContext;
let ctx = CpuContext::with_threads(2).unwrap();
assert_eq!(ctx.num_threads(), 2);Sourcepub fn pinned_cpus(&self) -> Option<&CpuSet>
pub fn pinned_cpus(&self) -> Option<&CpuSet>
Return the worker CPU domain for a pinned context.
Legacy thread-count-only contexts return None because they do not own
worker affinity.
§Examples
use tenferro_cpu::CpuContext;
assert_eq!(CpuContext::with_threads(1)?.pinned_cpus(), None);Trait Implementations§
Source§impl Clone for CpuContext
impl Clone for CpuContext
Source§fn clone(&self) -> CpuContext
fn clone(&self) -> CpuContext
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl CpuDomainExecutor for CpuContext
impl CpuDomainExecutor for CpuContext
Source§fn capabilities(&self) -> CpuDomainExecutorCapabilities
fn capabilities(&self) -> CpuDomainExecutorCapabilities
Source§fn submit(&self, jobs: &dyn ScopedCpuJobs) -> Result<(), CpuDomainExecutorError>
fn submit(&self, jobs: &dyn ScopedCpuJobs) -> Result<(), CpuDomainExecutorError>
Source§fn install(
&self,
job: &mut dyn ScopedCpuJob,
) -> Result<(), CpuDomainExecutorError>
fn install( &self, job: &mut dyn ScopedCpuJob, ) -> Result<(), CpuDomainExecutorError>
Auto Trait Implementations§
impl Freeze for CpuContext
impl !RefUnwindSafe for CpuContext
impl Send for CpuContext
impl Sync for CpuContext
impl Unpin for CpuContext
impl UnsafeUnpin for CpuContext
impl !UnwindSafe for CpuContext
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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