#array-fire #array #tensor #gpu #multidimensional-array #ndarray

afarray

在 Rust 中处理 ArrayFire 数组的便捷方法

39 个版本

0.15.1 2023年1月24日
0.14.3 2022年9月3日
0.14.2 2022年5月6日
0.13.5 2022年3月11日
0.1.1 2021年1月18日

#1789 in 算法


用于 2 个包 (通过 tc-tensor)

Apache-2.0

185KB
4.5K SLoC

afarray

在 Rust 中处理 ArrayFire 数组的便捷方法,兼容 number-general.

使用示例

use std::iter::FromIterator;
use afarray::Array;
use number_general::Number;

let a = [1, 2, 3];
let b = [5];

let product = &Array::from(&a[..]) * &Array::from(&b[..]);
assert_eq!(product, Array::from_iter(vec![5, 10, 15]));
assert_eq!(product.sum(), Number::from(30))

请注意,您必须安装 ArrayFire 才能构建此包。安装说明请参阅 http://arrayfire.org/docs/installing.htm.

您可以在 https://crates.io/crates/arrayfire 上找到从 crates.io 构建 Rust arrayfire 包的详细说明。


lib.rs:

提供了一种泛型的一维 Array,它包装了 arrayfire::Array 并支持所有 number_general::NumberType 变体。`Array` 和 `ArrayExt` 支持 AddSubMulDivRem 等基本数学运算,在支持 CUDA 或 OpenCL 的系统上提供硬件加速。`ArrayExt<bool>` 支持常见的逻辑运算 andnotorxor

可以使用 `Coords` 和 `Offsets` 实现多维数组功能,它们提供了一维 `Array` 或 `ArrayExt` 作为 n 维张量的索引方法。

`Array` 支持无类型提示的序列化和反序列化。`ArrayExt<T>` 支持 `T: Serialize` 的序列化和 `T: Deserialize` 的反序列化。

示例用法

let a = [1, 2, 3];
let b = [5];

let product = &Array::from(&a[..]) * &Array::from(&b[..]);
assert_eq!(product, Array::from_iter(vec![5, 10, 15]));
assert_eq!(product.sum(), Number::from(30))

该包依赖于ArrayFire版本3.8。您需要按照https://arrayfire.org/docs/installing.htm中的说明单独安装ArrayFire,才能构建此包。

您可以在https://crates.io/crates/arrayfire找到构建Rust arrayfire包的详细说明。

依赖项

约4.5MB
约92K SLoC