coral/lib.rs
1//! `coral` is a fully-safe, portable BLAS implementation in pure rust.
2//!
3//! - no dependencies.
4//! - is nightly.
5//! - column-major only.
6//! - single precision only.
7//! - level3 only has `sgemm`.
8//!
9//! benchmarks: <https://dev-undergrad.dev/posts/benchmarks/>
10//!
11//! ## example
12//!
13//! `sgemm`
14//! \\[
15//! C \ \leftarrow \ \alpha A B + \beta C
16//! \\]
17//!
18//! ```
19//! use coral::level3::sgemm;
20//! use coral::types::{MatrixRef, MatrixMut, CoralTranspose};
21//!
22//! fn main() {
23//! // A = [[1, 3],
24//! // [2, 4]]
25//! let a = vec![
26//! 1.0, 2.0, // column 0
27//! 3.0, 4.0, // column 1
28//! ];
29//!
30//! // B = [[5, 7],
31//! // [6, 8]]
32//! let b = vec![
33//! 5.0, 6.0, // column 0
34//! 7.0, 8.0, // column 1
35//! ];
36//!
37//! // C = identity
38//! let mut c = vec![
39//! 1.0, 0.0, // column 0
40//! 0.0, 1.0, // column 1
41//! ];
42//!
43//! let m = 2;
44//! let n = 2;
45//! let k = 2;
46//!
47//! let lda = m;
48//! let ldb = n;
49//! let ldc = m;
50//!
51//! let aview = MatrixRef::new(&a, m, k, lda, 0)
52//! .expect("matrix ref build failed");
53//! let bview = MatrixRef::new(&b, k, n, ldb, 0)
54//! .expect("matrix ref build failed");
55//! let cview = MatrixMut::new(&mut c, m, n, ldc, 0)
56//! .expect("matrix mut build failed");
57//!
58//! let alpha = 2.0;
59//! let beta = 1.0;
60//!
61//! sgemm(
62//! CoralTranspose::NoTrans,
63//! CoralTranspose::NoTrans,
64//! alpha,
65//! beta,
66//! aview,
67//! bview,
68//! cview,
69//! );
70//!
71//! let cdata = c.as_slice();
72//!
73//! // C = [[47, 62],
74//! // [68, 93]]
75//! assert!((cdata[0] - 47.0).abs() < 1e-6);
76//! assert!((cdata[1] - 68.0).abs() < 1e-6);
77//! assert!((cdata[2] - 62.0).abs() < 1e-6);
78//! assert!((cdata[3] - 93.0).abs() < 1e-6);
79//! }
80//! ```
81
82#![feature(portable_simd)]
83pub mod level1;
84pub mod fused;
85pub mod level2;
86pub mod level3;
87pub mod fortran;
88
89pub mod errors;
90pub mod types;
91
92
93