#并行处理 #科学计算 #ArrayFire #OpenCL #CUDA #计算

arrayfire_fork

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

1 个稳定版本

3.8.1 2023 年 8 月 12 日

#491并发

Download history 26/week @ 2024-04-22 22/week @ 2024-04-29 18/week @ 2024-05-06 23/week @ 2024-05-13 20/week @ 2024-05-20 3/week @ 2024-05-27 31/week @ 2024-06-03 23/week @ 2024-06-10 20/week @ 2024-06-17 28/week @ 2024-06-24 23/week @ 2024-07-08 25/week @ 2024-07-15 22/week @ 2024-07-22 15/week @ 2024-07-29 20/week @ 2024-08-05

82 每月下载量
9 包 中使用

BSD-3-Clause

635KB
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. 确保将库文件路径添加到您的路径环境变量中。
    • 在Linux上:执行以下命令 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$AF_PATH/lib64
    • 在OSX上:执行以下命令 export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$AF_PATH/lib
    • 在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.4–2.4MB
~52K SLoC