The package provides an interface to the Basic Linear Algebra Subprograms.
The underlying implementation of BLAS to compile, if needed, and link to can be chosen among the following options:
An implementation can be chosen using the package’s features as follows:
```toml [dependencies]
blas = { version = "0.17", default-features = false, features = ["accelerate"] }
blas = { version = "0.17", default-features = false, features = ["netlib"] }
blas = { version = "0.17", default-features = false, features = ["openblas"] }
blas = { version = "0.17" } ```
```rust use blas::c::*;
let (m, n, k) = (2, 4, 3); let a = vec![1.0, 4.0, 2.0, 5.0, 3.0, 6.0]; let b = vec![1.0, 5.0, 9.0, 2.0, 6.0, 10.0, 3.0, 7.0, 11.0, 4.0, 8.0, 12.0]; let mut c = vec![2.0, 7.0, 6.0, 2.0, 0.0, 7.0, 4.0, 2.0];
unsafe { dgemm(Layout::ColumnMajor, Transpose::None, Transpose::None, m, n, k, 1.0, &a, m, &b, k, 1.0, &mut c, m); }
assert_eq!(&c, &vec![40.0, 90.0, 50.0, 100.0, 50.0, 120.0, 60.0, 130.0]); ```
```rust use blas::fortran::*;
let (m, n, k) = (2, 4, 3); let a = vec![1.0, 4.0, 2.0, 5.0, 3.0, 6.0]; let b = vec![1.0, 5.0, 9.0, 2.0, 6.0, 10.0, 3.0, 7.0, 11.0, 4.0, 8.0, 12.0]; let mut c = vec![2.0, 7.0, 6.0, 2.0, 0.0, 7.0, 4.0, 2.0];
unsafe { dgemm(b'N', b'N', m, n, k, 1.0, &a, m, &b, k, 1.0, &mut c, m); }
assert_eq!(&c, &vec![40.0, 90.0, 50.0, 100.0, 50.0, 120.0, 60.0, 130.0]); ```
Your contribution is highly appreciated. Do not hesitate to open an issue or a pull request. Note that any contribution submitted for inclusion in the project will be licensed according to the terms given in LICENSE.md.