blas 0.16.1

The package provides an interface to the Basic Linear Algebra Subprograms.
Documentation

BLAS Package Documentation Build

The package provides an interface to the Basic Linear Algebra Subprograms.

Configuration

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:

[dependencies]
# Apple’s Accelerate framework
blas = { version = "0.16", default-features = false, features = ["accelerate"] }
# Netlib’s reference implementation
blas = { version = "0.16", default-features = false, features = ["netlib"] }
# OpenBLAS
blas = { version = "0.16", default-features = false, features = ["openblas"] }
# OpenBLAS
blas = { version = "0.16" }

Example (C)

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

Example (Fortran)

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

Contribution

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.