cblas
Bindings to a reference CBLAS implementation — OpenBLAS, Netlib, or MKL —
the cross-platform CPU numerics path. Where accelerate
is the Apple-only BLAS that ships in every macOS binary, cblas is the portable
sibling: link it against whatever CBLAS your platform provides. For the full
backend picture, see GPU & numerics.
The surface is standard CBLAS, with typed Order (RowMajor / ColMajor) and
Transpose (NoTrans / Trans / ConjTrans) enums instead of char flags:
- Level 1 —
sdot,saxpy,sscal,snrm2,sasum(vector dot, scaled add, scale, 2-norm, sum of magnitudes). - Level 2 —
sgemv(matrix-vector). - Level 3 —
sgemm(matrix-matrix). - Each has its
d-variant forf64.
import "cblas/cblas" as cblas;
let x: [f32; 3] = [1.0f32, 2.0f32, 3.0f32];
let y: [f32; 3] = [4.0f32, 5.0f32, 6.0f32];
let dot: f32 = cblas::sdot(
3 as i32,
unsafe { #addr_of(x) as *f32 }, 1 as i32,
unsafe { #addr_of(y) as *f32 }, 1 as i32,
); // 32.0
Linking
Point the manifest at your CBLAS install if it lives outside the default search path (a custom OpenBLAS prefix, an MKL directory):
[link]
search-paths = ["/opt/openblas/lib"]
The entry becomes both -L<dir> and -Wl,-rpath,<dir>, so the library resolves
at link and run time without LD_LIBRARY_PATH.
For NVIDIA GPU acceleration of the same routines, see cuda.