Skip to main content

tenferro_runtime/
lib.rs

1//! Traced graph runtime and extension dispatch infrastructure for tenferro.
2//!
3//! This crate owns graph construction, lowering to execution IR, graph
4//! execution, and backend-parametric extension runtime dispatch. Standard
5//! operations are lowered through the runtime's internal operation vocabulary;
6//! tensor storage and backend kernels live in `tenferro-tensor`.
7//!
8//! Use this crate directly when you want concrete tensor helpers or reusable
9//! traced graph execution without depending on `tenferro-ad`. Start with
10//! [`TypedTensor`] when the scalar type is fixed in Rust, [`Tensor`] when dtype
11//! is selected at runtime, and [`TracedTensor`] plus [`GraphCompiler`] and
12//! [`Runtime`] when the same expression should be compiled once and run
13//! repeatedly. Operation-family crates such as `tenferro-einsum`,
14//! `tenferro-linalg`, and `tenferro-fft` register extension runtimes through
15//! runtime engine registrations when compiled execution reaches those
16//! operations.
17//!
18//! User-facing guides live at
19//! <https://tensor4all.org/tenferro-rs/guides/choosing-an-api.html> and
20//! <https://tensor4all.org/tenferro-rs/guides/execution-models.html>.
21//!
22//! # Examples
23//!
24//! ```rust
25//! use tenferro_cpu::CpuEngine;
26//! use tenferro_runtime::{TraceContext, ExecutionEngine, GraphCompiler, Runtime, TracedTensor};
27//!
28//! let trace = TraceContext::new();
29//! let x = trace.from_vec_col_major(vec![2], vec![1.0_f64, 2.0]).unwrap();
30//! let y = (&x + &x).unwrap();
31//! let mut compiler = GraphCompiler::new();
32//! let program = compiler.compile(&y).unwrap();
33//! // One caller-held engine runs every slot of the prepared program.
34//! let mut engine = CpuEngine::serial();
35//! let mut builder = Runtime::builder();
36//! builder
37//!     .register_engine(tenferro_cpu::runtime_engine_registration(&engine).unwrap())
38//!     .unwrap();
39//! let runtime = builder.build().unwrap();
40//! let prepared = runtime.prepare(&program, &[], &[engine.target()]).unwrap();
41//! let out = runtime
42//!     .run(&mut [&mut engine], &prepared, &[])
43//!     .unwrap()
44//!     .pop()
45//!     .unwrap()
46//!     .into_tensor(&mut engine)
47//!     .unwrap();
48//! assert_eq!(out.as_slice::<f64>().unwrap(), &[2.0, 4.0]);
49//! ```
50
51#[doc(hidden)]
52pub mod ad_support;
53mod checkpoint;
54mod compiler;
55#[doc(hidden)]
56pub mod composite;
57pub mod error;
58mod exec;
59pub mod extension;
60pub mod extension_cache;
61mod extension_execution_context;
62pub mod graph;
63mod metadata;
64pub mod prelude;
65pub mod program;
66pub mod runtime;
67#[doc(hidden)]
68pub mod scalar_semantics;
69#[doc(hidden)]
70pub mod scale;
71mod segment;
72mod session_ext;
73mod shape_constraint;
74mod shape_infer;
75mod shape_packing;
76pub mod sym_dim;
77mod tensor;
78mod trace;
79mod trace_ops;
80pub mod traced;
81mod typed_session_ext;
82mod typed_tensor;
83
84pub use compiler::{CompilerOptions, OptimizerConfig};
85pub use error::{
86    ContextId, Error, ErrorPhase, Result, RuntimeFailureReasonRef, ShapeConstraintEvalError,
87};
88pub use extension_cache::{
89    ExtensionCacheKey, ExtensionCacheLimits, ExtensionCacheSelector, ExtensionCacheStore,
90};
91pub use extension_execution_context::ExtensionExecutionContext;
92pub use graph::{CompiledGraph, GraphCompiler};
93pub use runtime::{
94    assemble_executable_engine_registration, assemble_preparation_only_engine_registration,
95    CacheInFlightBehavior, CacheOwnerError, CacheOwnerFailure, CacheOwnerId, CoreCapabilityBundle,
96    CoreCapabilityBundleBuilder, CoreCapabilityKind, CorePrepareContext, Determinism,
97    DotGeneralPreparation, DotGeneralPrepareRequest, ElementwisePrepareRequest, ElementwiseRuntime,
98    EngineExecutionContractError, EngineId, EngineRegistration, EngineRegistrationMetadata,
99    EngineSnapshotView, EngineTarget, ErasedExecutionContext, EventDomainDriver, EventDomainError,
100    EventDomainId, EventDomainOperation, EventDomainRun, EventToken,
101    ExecutableEngineRegistrationConfig, ExecutionContextIdentity, ExecutionContextMismatch,
102    ExecutionEngine, ExecutionPolicy, ExecutionPolicyError, ExtensionEngine, ExtensionModule,
103    ExtensionModuleError, ExtensionModuleId, ExtensionModuleRegistrar, ExtensionPlanningConfig,
104    ExtensionPrepareRequest, HardwareClassId, IdentityError, IdentityKind,
105    ImmediateEventDomainDriver, IndexingPrepareRequest, IndexingRuntime, InputIngressContract,
106    InputIngressContractError, InputPlacementContract, InputSignature, InputSignatureContract,
107    InputSignatureEntry, InputSignatureError, InputSpecializationProjection,
108    InputSpecializationRequirements, InputSpecializationRequirementsBuilder,
109    InputSpecializationRequirementsError, LayoutClass, LayoutPrepareRequest, LayoutProjection,
110    LayoutRuntime, LayoutSpecialization, Output, PlacementConstraintError, PlacementProjection,
111    PlacementSpecialization, PreparationKeySummary, PreparationOnlyEngineRegistrationConfig,
112    PrepareCapability, PrepareError, PrepareOptions, PrepareOptionsKey, Prepared,
113    PreparedOperation, PreparedOperationBinding, PreparedOperationExecutor,
114    PreparedOperationExecutorHandle, PreparedOperationHandle, PreparedOperationPlan,
115    PreparedPlanCacheLimits, PreparedPlanCacheStats, ProgramPlacementConstraint,
116    ProviderContractError, ProviderDeviceIdentity, ProviderId, RankRequirement,
117    ReductionPrepareRequest, ReductionRuntime, RegistrationIdentity, RegistrationKey,
118    ResidentOutputContract, ResolvedPlanningConfig, ResolvedPlanningKey, ResolvedProgramPlacement,
119    Runtime, RuntimeCacheError, RuntimeCacheOwner, RuntimeCacheStats, RuntimeConfigBuilder,
120    RuntimeConfigError, RuntimeConfigSnapshot, RuntimeEpoch, RuntimeId, RuntimeInputContract,
121    RuntimeReconfiguration, RuntimeReconfigureError, RuntimeStateError, SpecializationError,
122    SpecializationProjection, SpecializationRequirements, StorageClass, TransferEndpoint,
123    TransferError, TransferProvider, TransferProviderContractError, TransferRequest,
124    UnsupportedReason,
125};
126pub use session_ext::TensorSessionOpsExt;
127#[doc(hidden)]
128pub use shape_constraint::ShapeGuard;
129pub use shape_packing::TracedSliceBuilder;
130pub use sym_dim::SymDim;
131pub use tenferro_ops::ShapeRelation;
132pub use tenferro_tensor::{
133    CacheStats, CompareDir, DType, DotGeneralConfig, Engine, GatherConfig, MemoryKind, PadConfig,
134    ScatterConfig, SliceConfig, Tensor, TensorRead, TensorScalar, TensorValue, TensorView,
135    TypedTensor, TypedTensorView,
136};
137pub use trace::{TraceContext, TraceValue, TracedGraph};
138#[doc(hidden)]
139pub use trace_ops::dim_expr_to_sym_dim_public;
140pub use typed_session_ext::{TypedTensorMaskSessionOpsExt, TypedTensorSessionOpsExt};
141
142pub use traced::TracedTensor;