pub fn matmul<T: GemmScalar>(
backend: Option<&GemmBackendHandle>,
a: &Matrix<T>,
b: &Matrix<T>,
) -> Result<Matrix<T>>Expand description
Matrix product A * B of two contiguous column-major matrices.
§Errors
Returns crate::Error::ShapeMismatch when the inner dimensions differ,
crate::Error::Tensor when an operand is not host-resident compact
column-major storage, or a backend error.
§Example
use sparse_ir::Matrix;
use sparse_ir::gemm::{GemmBackendHandle, matmul};
// Column-major data: [[1, 2], [3, 4]] and [[5, 6], [7, 8]]
let a = Matrix::<f64>::from_vec_col_major([2, 2], vec![1.0, 3.0, 2.0, 4.0]).unwrap();
let b = Matrix::<f64>::from_vec_col_major([2, 2], vec![5.0, 7.0, 6.0, 8.0]).unwrap();
let backend = GemmBackendHandle::default();
let c = matmul(Some(&backend), &a, &b).unwrap();
assert_eq!(c.host_data().unwrap(), &[19.0, 43.0, 22.0, 50.0]); // [[19, 22], [43, 50]]
// A 2x3 times 3x1 product
let a = Matrix::<f64>::from_vec_col_major([2, 3], vec![1.0, 4.0, 2.0, 5.0, 3.0, 6.0]).unwrap();
let b = Matrix::<f64>::from_vec_col_major([3, 1], vec![7.0, 8.0, 9.0]).unwrap();
assert_eq!(matmul(None, &a, &b).unwrap().host_data().unwrap(), &[50.0, 122.0]);