Crate coral_aarch64

Crate coral_aarch64 

Source
Expand description

coral-aarch64 is a BLAS implementation in pure rust for AArch64.

  • no dependencies.
  • column-major only.
  • level1 and level2 routines fully implemented.
  • level3 only has GEMM.

This crate is very unsafe and only for AArch64. Although it is fast, a fully-safe and portable-simd modern implementation exists and is not far off in speed. I highly suggest using that instead.

benchmarks: https://dev-undergrad.dev/posts/benchmarks/

§example

sgemm \[ C \ \leftarrow \ \alpha A B + \beta C \]

use coral_aarch64::level3::sgemm;
use coral_aarch64::enums::CoralTranspose;

fn main() {
    // A = [[1, 3],
    //      [2, 4]]
    let a = vec![
        1.0, 2.0,   // column 0
        3.0, 4.0,   // column 1
    ];

    // B = [[5, 7],
    //      [6, 8]]
    let b = vec![
        5.0, 6.0,   // column 0
        7.0, 8.0,   // column 1
    ];

    // C = identity
    let mut c = vec![
        1.0, 0.0,
        0.0, 1.0,
    ];

    let m = 2;
    let n = 2;
    let k = 2;

    let alpha = 2.0;
    let beta  = 1.0;

    sgemm(
        CoralTranspose::NoTranspose,
        CoralTranspose::NoTranspose,
        m, n, k,
        alpha,
        a.as_ptr(), m,
        b.as_ptr(), k,
        beta,
        c.as_mut_ptr(), m,
    );

    // C = [[47, 62],
    //      [68, 93]]
    assert!((c[0] - 47.0).abs() < 1e-6);
    assert!((c[1] - 68.0).abs() < 1e-6);
    assert!((c[2] - 62.0).abs() < 1e-6);
    assert!((c[3] - 93.0).abs() < 1e-6);
}

Modules§

enums
level1
level2
level3