ArrayFire is a High Performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.
ArrayFire's multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable.
A few lines of code in ArrayFire can replace dozens of lines of parallel computing code, saving you valuable time and lowering development costs.
Build | Tests | |
---|---|---|
Linux x86 | ||
Linux Tegra | ||
Windows | ||
OSX |
#include <arrayfire.h>
#include <cstdio>
using namespace af;
int main(int argc, char *argv[])
{
try {
// Select a device and display arrayfire info
int device = argc > 1 ? atoi(argv[1]) : 0;
af::setDevice(device);
af::info();
printf("Create a 5-by-3 matrix of random floats on the GPU\n");
array A = randu(5,3, f32);
af_print(A);
printf("Element-wise arithmetic\n");
array B = sin(A) + 1.5;
af_print(B);
printf("Negate the first three elements of second column\n");
B(seq(0, 2), 1) = B(seq(0, 2), 1) * -1;
af_print(B);
printf("Fourier transform the result\n");
array C = fft(B);
af_print(C);
printf("Grab last row\n");
array c = C.row(end);
af_print(c);
printf("Create 2-by-3 matrix from host data\n");
float d[] = { 1, 2, 3, 4, 5, 6 };
array D(2, 3, d, af::afHost);
af_print(D);
printf("Copy last column onto first\n");
D.col(0) = D.col(end);
af_print(D);
// Sort A
printf("Sort A and print sorted array and corresponding indices\n");
array vals, inds;
sort(vals, inds, A);
af_print(vals);
af_print(inds);
} catch (af::exception& e) {
fprintf(stderr, "%s\n", e.what());
throw;
}
}
You can find our complete documentation over here.
Quick links:
To build ArrayFire from source, please follow the instructions on our wiki.
Installers for the stable versions of ArrayFire can be freely downloaded from here
Contributions of any kind are welcome! Please refer to this document to learn more about how you can get involved with ArrayFire.
email: [email protected]