pub struct CacheHierarchyInfo {
pub l1_size_kb: usize,
pub l2_size_kb: usize,
pub l3_size_kb: usize,
pub cache_line_size: usize,
pub l1_latency: usize,
pub l2_latency: usize,
pub l3_latency: usize,
pub memory_latency: usize,
pub prefetch_distance: usize,
}Expand description
Cache hierarchy information
Fields§
§l1_size_kb: usizeL1 cache size per core (KB)
l2_size_kb: usizeL2 cache size per core (KB)
l3_size_kb: usizeL3 cache size shared (KB)
cache_line_size: usizeCache line size (bytes)
l1_latency: usizeL1 latency (cycles)
l2_latency: usizeL2 latency (cycles)
l3_latency: usizeL3 latency (cycles)
memory_latency: usizeMemory latency (cycles)
prefetch_distance: usizePrefetch distance
Implementations§
Source§impl CacheHierarchyInfo
impl CacheHierarchyInfo
Sourcepub fn detect() -> Self
pub fn detect() -> Self
Detect the CPU cache hierarchy.
On Linux the cache sizes and line size are read from
/sys/devices/system/cpu/cpu0/cache/index*/. Access latencies (in
cycles) are not exposed by the kernel, so they are populated with
conservative, clearly-documented typical values rather than fabricated
per-machine measurements.
If sysfs cannot be read the returned values fall back to the same
documented typical defaults.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for CacheHierarchyInfo
impl RefUnwindSafe for CacheHierarchyInfo
impl Send for CacheHierarchyInfo
impl Sync for CacheHierarchyInfo
impl Unpin for CacheHierarchyInfo
impl UnsafeUnpin for CacheHierarchyInfo
impl UnwindSafe for CacheHierarchyInfo
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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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>
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 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>
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.