13个版本

0.2.5 2024年3月30日
0.2.4 2024年3月27日
0.1.6 2024年3月15日
0.1.5 2024年2月14日
0.1.4 2023年12月5日

#411 in 算法

MIT许可证

2MB
31K SLoC

C++ 24K SLoC // 0.2% comments • Rust 包仓库 Python 3.5K SLoC // 0.1% comments • Rust 包仓库 Cython 2K SLoC // 0.2% comments • Rust 包仓库 Rust 1K SLoC // 0.0% comments • Rust 包仓库 C 546 SLoC // 0.3% comments • Rust 包仓库
Hasty Logo

Crates.io Documentation License Continuous Integration

Hasty

Hasty 提供了一个 Rust 原生的接口,用于访问高性能的 BLAS 库,例如 OpenBLASIntel MKLApple Accelerate 等。

与现有的 BLAS 绑定不同,Hasty 会自动检测并链接到您系统上可用的最佳 BLAS 库,无需任何配置。如果您愿意,也可以通过 HASTY_BLAS_PATH 环境变量指定特定 BLAS 库的路径。

请注意,如果您更改 Hasty 链接到的 BLAS 库,您可能需要重新构建项目。

有关更多信息,请参阅文档

示例

fn main() {
    let lib = hasty::get_blas_library();
    println!("Using BLAS Library: {lib}");
    
    type Scalar = f32;

    let m: u64 = 2;
    let n: u64 = 1;
    let k: u64 = 3;
    let mut a: Vec<Scalar> = vec![0.0; (m * k) as usize];
    let mut b: Vec<Scalar> = vec![0.0; (k * n) as usize];
    let mut c: Vec<Scalar> = vec![0.0; (m * n) as usize];

    for i in 0..(m * k) {
        a[i as usize] = i as Scalar + 1.0;
    }

    for i in 0..(k * n) {
        b[i as usize] = i as Scalar + 1.0;
    }

    hasty::level3::gemm(
        hasty::StorageOrder::RowMajor,
        hasty::Transpose::NoTrans,
        hasty::Transpose::NoTrans,
        m,
        n,
        k,
        1.0,
        &a,
        k,
        &b,
        n,
        0.0,
        &mut c,
        n,
    );

    println!("Result: {:?}", c);
}

开发计划

更多BLAS库

Hasty 目前支持一系列 BLAS 库,但测试它们很困难。我们希望支持尽可能多的 BLAS 库,因此如果您发现某个配置不起作用,请打开一个问题。

备用BLAS库

我们旨在在您的系统上找不到合适的 BLAS 库时,为所有 BLAS 函数提供备用实现,但它们的速度将远慢于 BLAS 库提供的优化实现。理想情况下,我们希望尽可能优化这些实现,但这是一个棘手的问题,需要社区的贡献。

缺少的函数

Hasty 仍在开发中,还有许多 BLAS 函数需要实现。如果您需要一个尚未实现的函数,请打开一个问题或提交一个拉取请求,我会尽快将其添加!

依赖项

~0–2.2MB
~42K SLoC