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