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 算法
2MB
31K SLoC

Hasty
Hasty 提供了一个 Rust 原生的接口,用于访问高性能的 BLAS 库,例如 OpenBLAS,Intel MKL,Apple 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