Skip to main content

cubecl_runtime/config/
compilation.rs

1use super::logger::{LogLevel, LoggerConfig};
2
3/// Configuration for compilation settings in `CubeCL`.
4#[derive(Default, Clone, Debug, serde::Serialize, serde::Deserialize)]
5pub struct CompilationConfig {
6    /// Logger configuration for compilation logs, using binary log levels.
7    #[serde(default)]
8    pub logger: LoggerConfig<CompilationLogLevel>,
9    /// Whether compiled kernels are cached in the active environment.
10    #[serde(default)]
11    #[cfg(std_io)]
12    pub cache: bool,
13    /// Controls whether kernel launches enforce bounds checks.
14    #[serde(default)]
15    pub check_mode: BoundsCheckMode,
16}
17
18/// Bounds checks options.
19#[derive(Default, Clone, Copy, Debug, serde::Serialize, serde::Deserialize)]
20pub enum BoundsCheckMode {
21    #[serde(rename = "enforce")]
22    /// Always enforce bounds checks on every kernel launch.
23    Enforce,
24    #[serde(rename = "validate")]
25    /// Always enforce bounds checks on every kernel launch, and validate unchecked kernels for OOB.
26    Validate,
27    /// Enforce bounds checking on standard launches, but skip checks on
28    /// explicitly unchecked launches for better performance.
29    #[default]
30    #[serde(rename = "auto")]
31    Auto,
32}
33
34/// Log levels for compilation in `CubeCL`.
35#[derive(Default, Clone, Copy, Debug, serde::Serialize, serde::Deserialize)]
36pub enum CompilationLogLevel {
37    /// Compilation logging is disabled.
38    #[default]
39    #[serde(rename = "disabled")]
40    Disabled,
41
42    /// Basic compilation information is logged such as when kernels are compiled.
43    #[serde(rename = "basic")]
44    Basic,
45
46    /// Full compilation details are logged including source code.
47    #[serde(rename = "full")]
48    Full,
49}
50
51impl LogLevel for CompilationLogLevel {}