pub struct DotGeneralConfig {
pub lhs_contracting_dims: SmallVec<[usize; 4]>,
pub rhs_contracting_dims: SmallVec<[usize; 4]>,
pub lhs_batch_dims: SmallVec<[usize; 4]>,
pub rhs_batch_dims: SmallVec<[usize; 4]>,
}Expand description
DotGeneral dimension configuration.
Each axis list stores up to four axes inline and spills to the heap for
larger contractions; this is not a tensor-rank limit.
Records only the dim-numbering roles (contracting / batch; free is derived).
Rank info travels with the enclosing StdTensorOp::DotGeneral variant at
the trace/StdTensorOp layer, and with ExecInstruction::output_shapes at
the exec layer. This separation makes it structurally impossible for
stored ranks to drift from actual tensor ranks (issue #664).
§Output layout
The output shape is [lhs_free..., rhs_free..., batch...] (col-major
batch-trailing convention): batch axes come last, unlike PyTorch’s
batch-leading bmm. Batch dims have the largest stride so that each batch
slice occupies a contiguous block of memory. Free axes keep their input
order. For attention scores, q[d, lq, b] against k[d, lk, b] with
d contracted and b batched gives [lq, lk, b]; see the
“Contraction Output Layout” section of the tensor-operations guide for a
worked example. Transpose afterwards only where a consumer needs batch
first.
§Examples
use tenferro_tensor::DotGeneralConfig;
let config = DotGeneralConfig {
lhs_contracting_dims: [1].as_slice().into(),
rhs_contracting_dims: [0].as_slice().into(),
lhs_batch_dims: [].as_slice().into(),
rhs_batch_dims: [].as_slice().into(),
};Fields§
§lhs_contracting_dims: SmallVec<[usize; 4]>§rhs_contracting_dims: SmallVec<[usize; 4]>§lhs_batch_dims: SmallVec<[usize; 4]>§rhs_batch_dims: SmallVec<[usize; 4]>Implementations§
Source§impl DotGeneralConfig
impl DotGeneralConfig
Sourcepub fn validate_dims_with_ranks(
&self,
lhs_rank: usize,
rhs_rank: usize,
) -> Result<(), Error>
pub fn validate_dims_with_ranks( &self, lhs_rank: usize, rhs_rank: usize, ) -> Result<(), Error>
Validate that all dimension indices are within range for the given explicit ranks and that no axis appears in multiple roles.
Call sites supply the actual operand ranks (from the tensor shapes they have in hand). The config itself carries only the dim-numbering roles.
§Examples
use tenferro_tensor::DotGeneralConfig;
let config = DotGeneralConfig {
lhs_contracting_dims: [1].as_slice().into(),
rhs_contracting_dims: [0].as_slice().into(),
lhs_batch_dims: [].as_slice().into(),
rhs_batch_dims: [].as_slice().into(),
};
config.validate_dims_with_ranks(2, 2).unwrap();§Errors
Returns crate::Error::Validation with an axis, duplicate-axis,
or configuration source when the dimension roles are invalid.
Trait Implementations§
Source§impl Clone for DotGeneralConfig
impl Clone for DotGeneralConfig
Source§fn clone(&self) -> DotGeneralConfig
fn clone(&self) -> DotGeneralConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more