#array #arrayfire #gpu #ndarray #tensor

afarray

Convenience methods for working with ArrayFire arrays in Rust

39 releases

0.15.1 Jan 24, 2023
0.14.3 Sep 3, 2022
0.14.2 May 6, 2022
0.13.5 Mar 11, 2022
0.1.1 Jan 18, 2021

#192 in Math

Download history 13/week @ 2022-10-10 6/week @ 2022-10-17 18/week @ 2022-10-24 182/week @ 2022-10-31 25/week @ 2022-11-07 22/week @ 2022-11-14 10/week @ 2022-11-21 10/week @ 2022-11-28 15/week @ 2022-12-05 60/week @ 2022-12-12 33/week @ 2022-12-19 13/week @ 2022-12-26 15/week @ 2023-01-02 84/week @ 2023-01-09 13/week @ 2023-01-16 70/week @ 2023-01-23

182 downloads per month
Used in 4 crates (2 directly)

Apache-2.0

180KB
4.5K SLoC

afarray

Convenience methods for working with ArrayFire arrays in Rust, compatible with number-general.

Usage example:

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))

Note that you must have ArrayFire installed in order to build this crate. The installation instructions are at http://arrayfire.org/docs/installing.htm.

You can find detailed instructions for building the Rust arrayfire crate from crates.io at: https://crates.io/crates/arrayfire.


lib.rs:

Provides a generic one-dimensional [Array] which wraps [arrayfire::Array] and supports all [number_general::NumberType] variants. Array and ArrayExt support basic math like Add, Sub, Mul, Div, and Rem, with hardware acceleration on systems which support CUDA or OpenCL. ArrayExt<bool> supports common logical operations and, not, or, and xor.

N-dimensional array functionality can be implemented using Coords and Offsets, which provide methods for indexing a one-dimensional Array or ArrayExt as an n-dimensional tensor.

Array supports (de)serialization without type hinting. ArrayExt<T> supports serialization for T: Serialize and deserialization for T: Deserialize.

Example usage:

# 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))

This crate depends on ArrayFire version 3.8. You will have to install ArrayFire separately by following the instructions at https://arrayfire.org/docs/installing.htm in order to build this crate.

You can find detailed instructions for building the Rust arrayfire crate from crates.io at https://crates.io/crates/arrayfire.

Dependencies

~4MB
~80K SLoC