Need help with arrayfire-rust?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

589 Stars 43 Forks BSD 3-Clause "New" or "Revised" License 448 Commits 12 Opened issues


Rust wrapper for ArrayFire

Services available


Need anything else?

Contributors list

ci docs book slack github-discussions

Arrayfire Rust Bindings

ArrayFire is a high performance library for parallel computing with an easy-to-use API. It enables users to write scientific computing code that is portable across CUDA, OpenCL and CPU devices. This project provides Rust bindings for the ArrayFire library. Given below table shows the rust bindings compatability with ArrayFire. If you find any bugs, please report them here.

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

Only, Major(M) & Minor(m) version numbers need to match. p1 and p2 are patch/fix updates for

respectively, and they don't need to match.

Supported platforms

Linux, Windows and OSX. Rust 1.31 or newer is required.

Use from

To use the rust bindings for ArrayFire from, the following requirements are to be met first.

  1. Download and install ArrayFire binaries based on your operating system. Depending on the method of your installation for Linux, steps (2) & (3) may not be required. If that is the case, proceed to step (4) directly.
  2. Set the evironment variable
    to point to ArrayFire installation root folder.
  3. Make sure to add the path to lib files to your path environment variables.
    • On Linux: do
    • On OSX: do
    • On Windows: Add
      to your PATH environment variable.
  4. Add
    arrayfire = "3.8"
    to the dependencies section of your project's Cargo.toml file. Make sure to change the version to latest available.

Once step (4) is over, you should be able to use ArrayFire in your Rust project. If you find any bugs, please report them here.

Build from Source

Edit build.conf to modify the build flags. The structure is a simple JSON blob. Currently Rust does not allow key:value pairs to be passed from the CLI. To use an existing ArrayFire installation modify the first three JSON values. You can install ArrayFire using one of the following two ways.

To build arrayfire submodule available in the rust wrapper repository, you have to do the following.

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

This is recommended way to build Rust wrapper since the submodule points to the most compatible version of ArrayFire the Rust wrapper has been tested with. You can find the ArrayFire dependencies below.


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

Sample output

~/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


If the build command fails with undefined references errors even after taking care of environment variables, we recommend doing a

cargo clean
and re-running
cargo build
cargo test

You can also use some environment variables mentioned in our book, such as

to print more elaborate error messages to console.


The ArrayFire library is written by developers at ArrayFire LLC with contributions from several individuals. The developers at ArrayFire LLC have received partial financial support from several grants and institutions. Those that wish to receive public acknowledgement are listed below:


This material is based upon work supported by the DARPA SBIR Program Office under Contract Numbers W31P4Q-14-C-0012 and W31P4Q-15-C-0008. Any opinions, findings and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the DARPA SBIR Program Office.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.