#array #gpu #ndarray #tensor #arrayfire

afarray

Convenience methods for working with ArrayFire arrays in Rust

36 releases (13 breaking)

0.14.2 May 6, 2022
0.14.0 Apr 24, 2022
0.13.5 Mar 11, 2022
0.11.1 Dec 22, 2021
0.1.1 Jan 18, 2021

#248 in Algorithms

Download history 34/week @ 2022-02-05 83/week @ 2022-02-12 68/week @ 2022-02-19 32/week @ 2022-02-26 42/week @ 2022-03-05 141/week @ 2022-03-12 212/week @ 2022-03-19 4/week @ 2022-03-26 18/week @ 2022-04-02 54/week @ 2022-04-09 18/week @ 2022-04-16 96/week @ 2022-04-23 103/week @ 2022-04-30 320/week @ 2022-05-07 631/week @ 2022-05-14 130/week @ 2022-05-21

1,236 downloads per month
Used in 4 crates (2 directly)

Apache-2.0

185KB
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

~2.7–3.5MB
~73K SLoC