Skip to main content

ComputeBackend

Trait ComputeBackend 

Source
pub trait ComputeBackend: Send + Sync {
Show 20 methods // Required methods fn name(&self) -> &'static str; fn device_type(&self) -> DeviceType; fn preferred_order(&self) -> MemoryOrder; fn gemm<T: Scalar>( &self, desc: GemmDescriptor<'_, T>, ) -> Result<(), BackendError>; fn transpose<T: Scalar>( &self, desc: TransposeDescriptor<'_, T>, ) -> Result<(), BackendError>; // Provided methods fn is_available(&self) -> bool { ... } fn svd<T: Scalar>( &self, _desc: SvdDescriptor<'_, T>, ) -> Result<(), BackendError> { ... } fn qr<T: Scalar>( &self, _desc: QrDescriptor<'_, T>, ) -> Result<(), BackendError> { ... } fn lq<T: Scalar>( &self, _desc: LqDescriptor<'_, T>, ) -> Result<(), BackendError> { ... } fn eigh<T: Scalar>( &self, _desc: EighDescriptor<'_, T>, ) -> Result<(), BackendError> { ... } fn eig<T: Scalar>( &self, _desc: EigDescriptor<'_, T>, ) -> Result<(), BackendError> { ... } fn solve<T: Scalar>( &self, _desc: SolveDescriptor<'_, T>, ) -> Result<(), BackendError> { ... } fn par_for_svd(&self, _m: usize, _n: usize) -> ExecPolicy { ... } fn par_for_qr(&self, _m: usize, _n: usize) -> ExecPolicy { ... } fn par_for_lq(&self, _m: usize, _n: usize) -> ExecPolicy { ... } fn par_for_eigh(&self, _n: usize) -> ExecPolicy { ... } fn par_for_eig(&self, _n: usize) -> ExecPolicy { ... } fn par_for_gemm(&self, _m: usize, _n: usize, _k: usize) -> ExecPolicy { ... } fn par_for_solve(&self, _n: usize, _nrhs: usize) -> ExecPolicy { ... } fn par_for_transpose(&self, _shape: &[usize]) -> ExecPolicy { ... }
}
Expand description

Pluggable compute backend trait

Required Methods§

Source

fn name(&self) -> &'static str

Backend name

Source

fn device_type(&self) -> DeviceType

Device type

Source

fn preferred_order(&self) -> MemoryOrder

Preferred memory order for this backend’s data layout.

Descriptor data (input/output slices) is expected in this order. The linalg layer converts tensors to this order before constructing descriptors.

This is an implementor-facing contract, not a user entry point: backend implementors must report the layout their kernels assume so the linalg / algorithm layers can normalize to it. End users never call it — the public Tensor surface hides memory layout entirely.

Source

fn gemm<T: Scalar>( &self, desc: GemmDescriptor<'_, T>, ) -> Result<(), BackendError>

GEMM: C = alpha * A * B + beta * C

Source

fn transpose<T: Scalar>( &self, desc: TransposeDescriptor<'_, T>, ) -> Result<(), BackendError>

Transpose tensor

Provided Methods§

Source

fn is_available(&self) -> bool

Check if backend is available

Source

fn svd<T: Scalar>( &self, _desc: SvdDescriptor<'_, T>, ) -> Result<(), BackendError>

Thin SVD: A = U * diag(S) * Vt

Source

fn qr<T: Scalar>(&self, _desc: QrDescriptor<'_, T>) -> Result<(), BackendError>

Thin QR: A = Q * R

Source

fn lq<T: Scalar>(&self, _desc: LqDescriptor<'_, T>) -> Result<(), BackendError>

Thin LQ: A = L * Q

Source

fn eigh<T: Scalar>( &self, _desc: EighDescriptor<'_, T>, ) -> Result<(), BackendError>

Self-adjoint eigenvalue decomposition: A = V * diag(W) * V^H

Source

fn eig<T: Scalar>( &self, _desc: EigDescriptor<'_, T>, ) -> Result<(), BackendError>

General eigenvalue decomposition

Source

fn solve<T: Scalar>( &self, _desc: SolveDescriptor<'_, T>, ) -> Result<(), BackendError>

Linear solve: AX = B via LU decomposition

Source

fn par_for_svd(&self, _m: usize, _n: usize) -> ExecPolicy

Recommended execution policy for SVD at the given problem size.

Default returns Sequential; performance-oriented backends (e.g. NativeBackend) override this with a hardware-aware threshold table.

Source

fn par_for_qr(&self, _m: usize, _n: usize) -> ExecPolicy

Recommended execution policy for QR at the given problem size.

Source

fn par_for_lq(&self, _m: usize, _n: usize) -> ExecPolicy

Recommended execution policy for LQ at the given problem size.

Source

fn par_for_eigh(&self, _n: usize) -> ExecPolicy

Recommended execution policy for self-adjoint eigendecomposition.

Source

fn par_for_eig(&self, _n: usize) -> ExecPolicy

Recommended execution policy for general eigendecomposition.

Source

fn par_for_gemm(&self, _m: usize, _n: usize, _k: usize) -> ExecPolicy

Recommended execution policy for GEMM at the given problem size.

Source

fn par_for_solve(&self, _n: usize, _nrhs: usize) -> ExecPolicy

Recommended execution policy for linear solve.

Source

fn par_for_transpose(&self, _shape: &[usize]) -> ExecPolicy

Recommended execution policy for tensor transpose.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§