Skip to main content

matmul

Function matmul 

Source
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]);