cubecl_runtime/config/
memory.rs

1use super::logger::{LogLevel, LoggerConfig};
2
3/// Configuration for memory settings in CubeCL.
4#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, Default)]
5pub struct MemoryConfig {
6    /// Logger configuration for memory-related logs, using specific log levels.
7    #[serde(default)]
8    pub logger: LoggerConfig<MemoryLogLevel>,
9    /// Configuration for persistent memory pools.
10    #[serde(default)]
11    pub persistent_memory: PersistentMemory,
12}
13
14/// Configuration options for persistent memory pools in CubeCL runtimes.
15#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, Default)]
16pub enum PersistentMemory {
17    /// Persistent memory is enabled but used only when explicitly specified.
18    #[default]
19    #[serde(rename = "enabled")]
20    Enabled,
21    /// Persistent memory is disabled, allowing dynamic allocations.
22    #[serde(rename = "disabled")]
23    Disabled,
24    /// Persistent memory is enforced, preventing dynamic allocations.
25    ///
26    /// # Warning
27    ///
28    /// Enforcing persistent memory may cause out-of-memory errors if tensors of varying sizes are used.
29    #[serde(rename = "enforced")]
30    Enforced,
31}
32
33/// Log levels for memory-related events in CubeCL.
34#[derive(Default, Clone, Copy, Debug, serde::Serialize, serde::Deserialize)]
35pub enum MemoryLogLevel {
36    /// No memory-related logging.
37    #[default]
38    #[serde(rename = "disabled")]
39    Disabled,
40    /// Logs basic memory events, such as creating memory pages and manually cleaning memory.
41    #[serde(rename = "basic")]
42    Basic,
43    /// Logs detailed memory information.
44    #[serde(rename = "full")]
45    Full,
46}
47
48impl LogLevel for MemoryLogLevel {}