Skip to main content

cubecl_runtime/config/
compilation.rs

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