pub enum MemoryAccess {
Copy,
Read,
Write,
}Expand description
Which directions of traffic a memory probe issues.
Variants§
Copy
Reads every byte and writes it back out. The ceiling for a kernel that both loads and stores.
Read
Reads only, storing nothing. The ceiling for a kernel that streams data
it does not write back — a weight stream, a reduction, a gather. Such a
kernel legitimately exceeds Copy, because half of the
copy’s traffic is a direction it never uses.
Write
Writes only, reading nothing at the software level. The ceiling for a kernel that streams stores it never reads back: an RNG fill, a memset, a broadcast. Ordinary stores still carry read-for-ownership traffic on cache-coherent hardware, and this probe’s stores do too, which is what makes it the honest ceiling for a kernel that uses ordinary stores rather than a non-temporal one.
Implementations§
Source§impl MemoryAccess
impl MemoryAccess
Sourcepub const fn buffers(&self) -> u64
pub const fn buffers(&self) -> u64
How many buffers of equal size one pass touches: two for a copy (one in, one out), one for a read or a write.
Sourcepub const fn default_working_set(&self) -> u64
pub const fn default_working_set(&self) -> u64
The working set of the single-size probe for this access, in bytes moved
per pass: DEFAULT_BUFFER_BYTES per buffer touched.
Trait Implementations§
Source§impl Clone for MemoryAccess
impl Clone for MemoryAccess
Source§fn clone(&self) -> MemoryAccess
fn clone(&self) -> MemoryAccess
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for MemoryAccess
Source§impl Debug for MemoryAccess
impl Debug for MemoryAccess
Source§impl<'de> Deserialize<'de> for MemoryAccess
impl<'de> Deserialize<'de> for MemoryAccess
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for MemoryAccess
Source§impl Hash for MemoryAccess
impl Hash for MemoryAccess
Source§impl PartialEq for MemoryAccess
impl PartialEq for MemoryAccess
Source§impl Serialize for MemoryAccess
impl Serialize for MemoryAccess
impl StructuralPartialEq for MemoryAccess
Auto Trait Implementations§
impl Freeze for MemoryAccess
impl RefUnwindSafe for MemoryAccess
impl Send for MemoryAccess
impl Sync for MemoryAccess
impl Unpin for MemoryAccess
impl UnsafeUnpin for MemoryAccess
impl UnwindSafe for MemoryAccess
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.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