#并行处理 #OpenCL #科学计算 #CUDA #计算 #平台无关

arrayfire

ArrayFire 是一个高性能的并行计算软件库,具有易于使用的 API。其基于数组的函数集使得并行编程变得简单。ArrayFire 的多个后端(CUDA、OpenCL 和原生 CPU)使其具有平台无关性和高度可移植性。在 ArrayFire 中只需几行代码就可以替代数十行并行计算代码,为您节省宝贵的时间并降低开发成本。此 crate 为 ArrayFire 库提供 Rust 绑定。

16 个稳定版本

3.8.0 2021 年 1 月 10 日
3.7.2 2020 年 10 月 6 日
3.7.1 2020 年 9 月 9 日
3.7.0 2020 年 3 月 14 日
3.2.0-rc02015 年 11 月 14 日

并发 中排名第 79

Download history 95/week @ 2024-03-11 99/week @ 2024-03-18 126/week @ 2024-03-25 163/week @ 2024-04-01 72/week @ 2024-04-08 96/week @ 2024-04-15 96/week @ 2024-04-22 98/week @ 2024-04-29 107/week @ 2024-05-06 84/week @ 2024-05-13 137/week @ 2024-05-20 76/week @ 2024-05-27 128/week @ 2024-06-03 104/week @ 2024-06-10 74/week @ 2024-06-17 97/week @ 2024-06-24

每月下载量 410
用于 18 Crates(17 个直接使用)

BSD-3-Clause

630KB
11K SLoC

ci docs book slack github-discussions

Arrayfire Rust 绑定

ArrayFire 是一个高性能的并行计算库,具有易于使用的 API。它允许用户编写可在 CUDA、OpenCL 和 CPU 设备之间移植的科学计算代码。该项目为 ArrayFire 库提供 Rust 绑定。以下表格显示了 Rust 绑定与 ArrayFire 的兼容性。如果您发现任何错误,请在此 报告。

arrayfire-rust ArrayFire
M.m.p1 M.m.p2

只需确保主版本(M)和次要版本(m)号匹配。 p1p2 分别是 arrayfire-rustArrayFire 的补丁/修复更新,它们不需要匹配。

支持的平台

Linux、Windows 和 OSX。需要 Rust 1.31 或更高版本。

从 Crates.io 使用

要从 Crates.io 使用 ArrayFire 的 Rust 绑定,首先必须满足以下要求。

  1. 根据您的操作系统下载并安装 ArrayFire 二进制文件 。根据您在 Linux 上的安装方法,步骤 (2) 和 (3) 可能不是必需的。如果是这种情况,请直接跳到步骤 (4)。
  2. 设置环境变量 AF_PATH 指向 ArrayFire 安装根目录。
  3. 请确保将 lib 文件的路径添加到您的路径环境变量中。
    • 在Linux上:执行export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$AF_PATH/lib64
    • 在OSX上:执行export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$AF_PATH/lib64
    • 在Windows上:将%AF_PATH%\lib添加到您的PATH环境变量中。
  4. arrayfire = "3.8"添加到您项目Cargo.toml文件的依赖部分。请确保将版本更改为最新版本。

完成步骤(4)后,您应该能够在Rust项目中使用ArrayFire。如果您发现任何错误,请在此报告。

从源码构建

编辑build.conf以修改构建标志。结构是一个简单的JSON blob。目前Rust不允许从CLI传递键值对。要使用现有的ArrayFire安装,修改前三个JSON值。您可以使用以下两种方式之一安装ArrayFire。

要构建rust包装器仓库中可用的arrayfire子模块,您必须执行以下操作。

git submodule update --init --recursive
cargo build // use --all to build all crates in the workspace

这是构建Rust包装器的推荐方法,因为子模块指向Rust包装器已测试的最兼容的ArrayFire版本。您可以在下面找到ArrayFire依赖项。

示例

let num_rows: u64 = 5;
let num_cols: u64 = 3;
let dims = Dim4::new(&[num_rows, num_cols, 1, 1]);
let a = randu::<f32>(dims);
af_print!("Create a 5-by-3 matrix of random floats on the GPU", a);

示例输出

~/p/arrayfire_rust> cargo run --example helloworld
...
Create a 5-by-3 matrix of random floats on the GPU
[5 3 1 1]
    0.7402     0.4464     0.7762
    0.9210     0.6673     0.2948
    0.0390     0.1099     0.7140
    0.9690     0.4702     0.3585
    0.9251     0.5132     0.6814
...

故障排除

即使已经注意到了环境变量,构建命令在出现未定义引用错误的情况下失败,我们建议执行cargo clean并重新运行cargo buildcargo test

您还可以使用我们手册中提到的某些环境变量,例如AF_PRINT_ERRORS,以在控制台打印更详细的错误消息。

致谢

ArrayFire库是由ArrayFire LLC的开发者编写的,并得到了来自几个个人的贡献。ArrayFire LLC的开发者得到了几项资助和机构的部分财务支持。以下列出的是希望得到公开认可的人士:

资助

本材料是基于DARPA SBIR项目办公室资助的工作(合同编号W31P4Q-14-C-0012和W31P4Q-15-C-0008)而编写的。本材料中表达的意见、发现、结论或建议是作者的意见,并不一定反映DARPA SBIR项目办公室的观点。

依赖关系

~1–1.8MB
~40K SLoC