pub(crate) mod memory_pool;
mod base;
pub use base::*;
mod memory_manage;
use cubecl_common::CubeDim;
pub use memory_manage::*;
#[cfg(not(feature = "std"))]
use alloc::vec::Vec;
use crate::server::CubeCount;
#[derive(Debug, Clone)]
pub enum PoolType {
ExclusivePages {
max_alloc_size: u64,
},
SlicedPages {
page_size: u64,
max_slice_size: u64,
},
}
#[derive(Debug, Clone)]
pub struct MemoryPoolOptions {
pub pool_type: PoolType,
pub dealloc_period: Option<u64>,
}
#[derive(Clone, Debug)]
pub enum MemoryConfiguration {
#[cfg(not(exclusive_memory_only))]
SubSlices,
ExclusivePages,
Custom {
pool_options: Vec<MemoryPoolOptions>,
},
}
#[allow(clippy::derivable_impls)]
impl Default for MemoryConfiguration {
fn default() -> Self {
#[cfg(exclusive_memory_only)]
{
MemoryConfiguration::ExclusivePages
}
#[cfg(not(exclusive_memory_only))]
{
MemoryConfiguration::SubSlices
}
}
}
#[derive(Debug, Clone)]
pub struct MemoryDeviceProperties {
pub max_page_size: u64,
pub alignment: u64,
}
#[derive(Debug, Clone)]
pub struct HardwareProperties {
pub plane_size_min: u32,
pub plane_size_max: u32,
pub max_bindings: u32,
pub max_shared_memory_size: usize,
pub max_cube_count: CubeCount,
pub max_units_per_cube: u32,
pub max_cube_dim: CubeDim,
pub num_streaming_multiprocessors: Option<u32>,
pub num_tensor_cores: Option<u32>,
pub min_tensor_cores_dim: Option<u32>,
}