pub struct ProcessModeOverride { /* private fields */ }Expand description
Applies a process mode to the whole process while it lives, counting what it triggers into a collector, on every thread and every device.
A build that compiles everything and then tunes with it compiled opens two, one after the other, with one collector:
use cubecl_runtime::execution::{ProcessModeOverride, ProcessMode, StatisticsCollector};
let collector = StatisticsCollector::new();
// Gather every kernel the warm-up reaches, and compile them together...
let compile = ProcessModeOverride::new(ProcessMode::CompileOnly, &collector);
warm_up();
core::mem::drop(compile);
// ...then tune with them compiled.
let tune = ProcessModeOverride::new(ProcessMode::CompileAndAutotune, &collector);
warm_up();
core::mem::drop(tune);
let statistics = collector.statistics();
assert_eq!(statistics.compilation.settled(), statistics.compilation.registered);Overlapping overrides of one process mode and one collector compose, so one opened while another is still open leaves the process mode until the last of them drops. One process mode and one collector at a time: the process mode is process-wide, and the work under it counts to one collector.
The process mode is read where a launch is issued, with relaxed ordering, so a launch another thread had already begun issuing may still execute. What is guaranteed is the launches issued by the thread that opened it, and every launch issued after other threads observe it.
There is deliberately no configuration file or environment variable for it. An override left open by accident turns the rest of the process into launches that quietly do nothing and read back uninitialized memory, so its lifetime belongs to a scope in the code that wants it.
Implementations§
Source§impl ProcessModeOverride
impl ProcessModeOverride
Sourcepub fn new(mode: ProcessMode, collector: &StatisticsCollector) -> Self
pub fn new(mode: ProcessMode, collector: &StatisticsCollector) -> Self
§Panics
If an override of another process mode, or of another collector, is open.
Sourcepub fn mode(&self) -> ProcessMode
pub fn mode(&self) -> ProcessMode
The process mode it applies.
Trait Implementations§
Source§impl Debug for ProcessModeOverride
impl Debug for ProcessModeOverride
Source§impl Drop for ProcessModeOverride
impl Drop for ProcessModeOverride
Auto Trait Implementations§
impl Freeze for ProcessModeOverride
impl RefUnwindSafe for ProcessModeOverride
impl Send for ProcessModeOverride
impl Sync for ProcessModeOverride
impl Unpin for ProcessModeOverride
impl UnsafeUnpin for ProcessModeOverride
impl UnwindSafe for ProcessModeOverride
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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