pub trait Backend<T: ScalarBase> {
const MATERIALIZES_CONJ: bool;
const REQUIRES_UNIT_STRIDE: bool;
// Required method
fn bgemm_contiguous_into(
c: &mut ContiguousOperandMut<T>,
a: &ContiguousOperand<T>,
b: &ContiguousOperand<T>,
batch_dims: &[usize],
m: usize,
n: usize,
k: usize,
alpha: T,
beta: T,
) -> Result<()>;
}Expand description
Trait for backends that can execute batched GEMM on contiguous operands.
Each backend declares its configuration (conjugation materialization, stride requirements) and provides a GEMM implementation.
Implementations are provided by each backend module (faer, blas).
External crates can implement this trait for custom scalar types
(e.g., tropical semiring) and pass the backend to einsum2_with_backend_into.
Required Associated Constants§
Sourceconst MATERIALIZES_CONJ: bool
const MATERIALIZES_CONJ: bool
Whether the backend needs conjugation materialized into the data
before GEMM (e.g., CBLAS has no conjugation flag for ?gemm).
Sourceconst REQUIRES_UNIT_STRIDE: bool
const REQUIRES_UNIT_STRIDE: bool
Whether the backend requires at least one unit stride per matrix
dimension (row or column stride must be 1). CBLAS ?gemm requires
this; faer does not.
Required Methods§
Sourcefn bgemm_contiguous_into(
c: &mut ContiguousOperandMut<T>,
a: &ContiguousOperand<T>,
b: &ContiguousOperand<T>,
batch_dims: &[usize],
m: usize,
n: usize,
k: usize,
alpha: T,
beta: T,
) -> Result<()>
fn bgemm_contiguous_into( c: &mut ContiguousOperandMut<T>, a: &ContiguousOperand<T>, b: &ContiguousOperand<T>, batch_dims: &[usize], m: usize, n: usize, k: usize, alpha: T, beta: T, ) -> Result<()>
Execute batched GEMM: C = alpha * A * B + beta * C for each batch.
c: mutable output operand (batch x m x n)a: input operand (batch x m x k)b: input operand (batch x k x n)batch_dims: sizes of the batch dimensionsm,n,k: fused matrix dimensionsalpha,beta: scaling factors
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.