use super::types::TpuDeviceProperties;
use crate::law::TopologyEpoch;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TpuTopology {
epoch: TopologyEpoch,
properties: TpuDeviceProperties,
}
impl TpuTopology {
#[must_use]
pub const fn from_provider(properties: TpuDeviceProperties) -> Self {
Self {
epoch: TopologyEpoch::INITIAL,
properties,
}
}
#[must_use]
#[inline]
pub const fn epoch(&self) -> TopologyEpoch {
self.epoch
}
#[must_use]
#[inline]
pub const fn core_count(&self) -> u32 {
self.properties.core_count
}
#[must_use]
#[inline]
pub const fn hbm_bytes_per_core(&self) -> u64 {
self.properties.hbm_bytes_per_core
}
#[must_use]
#[inline]
pub const fn total_hbm_bytes(&self) -> u64 {
self.properties
.hbm_bytes_per_core
.saturating_mul(self.properties.core_count as u64)
}
}