tenferro/runtime/mod.rs
1mod context;
2#[cfg(test)]
3pub(crate) mod contracts;
4#[cfg(test)]
5pub(crate) mod dispatch;
6
7use crate::Result;
8
9/// Guard returned by [`set_default_runtime`].
10///
11/// When dropped, the previous runtime context is restored.
12pub use tenferro_internal_runtime::DefaultRuntimeGuard;
13
14/// Runtime execution context used by builder `.run()` entry points.
15///
16/// Current status:
17///
18/// - `Cpu`: supported by builder `.run()` paths.
19/// - `Cuda`/`Rocm`: accepted as context values, but current builder execution
20/// paths return [`crate::Error::UnsupportedRuntimeOp`].
21///
22/// # Examples
23///
24/// ```rust
25/// use tenferro::{set_default_runtime, RuntimeContext};
26/// use tenferro_prims::CpuContext;
27///
28/// let _guard = set_default_runtime(RuntimeContext::Cpu(CpuContext::new(1)));
29/// ```
30pub use tenferro_internal_runtime::RuntimeContext;
31
32/// Sets the default runtime context for builder `.run()`.
33///
34/// # Examples
35///
36/// ```rust
37/// use tenferro::{set_default_runtime, RuntimeContext};
38/// use tenferro_prims::CpuContext;
39///
40/// let _guard = set_default_runtime(RuntimeContext::Cpu(CpuContext::new(1)));
41/// ```
42pub fn set_default_runtime(ctx: RuntimeContext) -> DefaultRuntimeGuard {
43 tenferro_internal_runtime::set_default_runtime(ctx)
44}
45
46/// Runs `f` with an explicitly supplied runtime installed for the duration of
47/// the closure.
48///
49/// Any previously configured default runtime is restored afterwards, even when
50/// `f` returns an error.
51///
52/// # Examples
53///
54/// ```rust
55/// use tenferro::{runtime, RuntimeContext, Tensor};
56/// use tenferro_prims::CpuContext;
57///
58/// let out = runtime::with_runtime(RuntimeContext::Cpu(CpuContext::new(1)), || {
59/// let x = Tensor::from_slice(&[1.0_f64, 2.0], &[2])?;
60/// x.sum()
61/// });
62/// assert!(out.is_ok());
63/// ```
64pub fn with_runtime<R>(ctx: RuntimeContext, f: impl FnOnce() -> Result<R>) -> Result<R> {
65 tenferro_internal_runtime::with_runtime(ctx, f)
66}
67
68/// Runs `f` with the default runtime context.
69///
70/// Returns [`crate::Error::RuntimeNotConfigured`] when runtime is not
71/// configured.
72///
73/// # Examples
74///
75/// ```rust
76/// use tenferro::{set_default_runtime, with_default_runtime, RuntimeContext};
77/// use tenferro_prims::CpuContext;
78///
79/// let _guard = set_default_runtime(RuntimeContext::Cpu(CpuContext::new(1)));
80/// let name = with_default_runtime(|rt| Ok(rt.name())).unwrap();
81/// assert_eq!(name, "cpu");
82/// ```
83pub fn with_default_runtime<R>(f: impl FnOnce(&mut RuntimeContext) -> Result<R>) -> Result<R> {
84 tenferro_internal_runtime::with_default_runtime(f)
85}