Jetson/Installing ArrayFire

From eLinux.org
Jump to: navigation, search
ArrayFire. Faster Code!"

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.

This page contains build instructions pertaining to the Jetson TK1 Board. The full build instructions can be found on the ArrayFire GitHub Wiki.

Getting ArrayFire

There are 2 ways to get ArrayFire:

Install Pre-built Libraries

Install the dependencies for ArrayFire

apt-get install build-essential cmake cmake-curses-gui
apt-get install libfreeimage3
sudo apt-get install libatlas3gf-base libatlas-dev libfftw3-dev liblapacke-dev

You will also need to install GLFW 3. Follow these instructions to build it from source.

Download the Tegra K1 build of ArrayFire from http://arrayfire.com/download/.

This is a self extracting file that is very easy to install.

Once installed, follow the instructions on the Using on Linux page to see how to run the examples and incorporate ArrayFire into your projects.

Building ArrayFire from Source

Prerequisites for installing ArrayFire

Download & install the CUDA Toolkit by following the Installing CUDA instructions, since it is needed by ArrayFire.

The following packages are required to build ArrayFire from source code:

  • build-essential (includes installing gcc, g++)
  • git (>= 1.8)
  • cmake
  • cmake-curses-gui (Recommended)
  • libfreeimage-dev (Optional. Required for image IO functionality)
sudo apt-get install build-essential git cmake cmake-curses-gui libfreeimage-dev

The following packages are required for the CPU backend of ArrayFire

  • libatlas3gf-base
  • libatlas-dev
  • libfftw3-dev
  • liblapacke-dev
sudo apt-get install libatlas3gf-base libatlas-dev libfftw3-dev liblapacke-dev

For graphics enabled builds, install GLEW and GLFW.

sudo apt-get install libglew-dev libglewmx-dev

GLFW 3

For GLFW, use the instructions below

sudo apt-get install build-essential cmake cmake-curses-gui xorg-dev libglu1-mesa-dev
wget https://github.com/glfw/glfw/archive/3.0.4.zip -O glfw-3.0.4.zip
unzip glfw-3.0.4.zip
cd glfw-3.0.4
mkdir build
cd build
cmake .. -DBUILD_SHARED_LIBS=ON
make -j8
sudo make install

After you are done installing, please make sure you add the following to the end of your bash config file.

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH


The following packages are required for the CUDA backend of ArrayFire

  • Boost (We recommend installing all boost components, but you may choose to install selectively as listed in the GitHub Wiki page of ArrayFire)
sudo apt-get install libboost-all-dev

Download ArrayFire Source Code

Get ArrayFire from our GitHub repository.

git clone --recursive https://github.com/arrayfire/arrayfire.git

If you miss the --recursive option, run the following commands.

git submodule init
git submodule update

Build and Install ArrayFire

cd /path/to/dir/arrayfire # where ArrayFire was cloned
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CPU=ON -DBUILD_CUDA=ON -DBUILD_OPENCL=OFF # Enables CPU and CUDA. Jetson TK1 does not support OpenCL.
make -j4 # or number of threads of your choosing

You can also use the following CMake options

  • -DBUILD_GRAPHICS=OFF to disable graphics functionality and requirements
  • -DUSE_GLEWmx_STATIC=ON to enable static linking with GLEWmx

To install ArrayFire, select the install location (default = /usr/local)

cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/your/install/dir
make install # sudo may be required if installing to a system path

Running Tests and Examples

Run tests:

cd /path/to/dir/arrayfire/build
# Choose you preferred command
make test                      # runs all test
ctest                          # runs all test
ctest -R substring             # runs all tests that match the substring
CTEST_OUTPUT_ON_FAILURE ctest  # runs tests while printing output only if a test fails
./test/testname_backend        # runs single test with output

Run examples (the output of the hello world example is shown below):

cd /path/to/dir/arrayfire/build
./examples/example_backend

Get In Touch

Let us know if you have any issues via the ArrayFire GitHub Page or the ArrayFire Users Google Group.

The ArrayFire Forums are also available.

If you wish to email us, technical@arrayfire.com would the the way to contact us.

Verify Installation with Hello World

To run the Hello World example, do the following:

cd /path/to/dir/arrayfire/build/examples/
./helloworld_cuda

Successful output is shown below.

ArrayFire v3.1.0 (CUDA, 32-bit Linux, build eb821c6) Platform: CUDA Toolkit 6.5, Driver: CUDA Driver Version: 6050 [0] GK20A, 1743 MB, CUDA Compute 3.2 Create a 5-by-3 matrix of random floats on the GPU

A [5 3 1 1]
   Offsets: [0 0 0 0]
   Strides: [1 5 15 15]
    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

Element-wise arithmetic
B [5 3 1 1]
   Offsets: [0 0 0 0]
   Strides: [1 5 15 15]
    2.1744    -1.9317     2.2006
    2.2962    -2.1189     1.7905
    1.5390    -1.6097     2.1549
    2.3243     1.9531     1.8509
    2.2987     1.9910     2.1299

Fourier transform the result
C [5 3 1 1]
   Offsets: [0 0 0 0]
   Strides: [1 5 15 15]
         (10.6327,0.0000)          (-1.7162,0.0000)          (10.1267,0.0000)
         (0.4689,0.4640)          (-2.2490,6.0028)          (0.1713,0.1441)
         (-0.3491,-0.7454)          (-1.7221,-0.9727)          (0.2667,0.4886)
         (-0.3491,0.7454)          (-1.7221,0.9727)          (0.2667,-0.4886)
         (0.4689,-0.4640)          (-2.2490,-6.0028)          (0.1713,-0.1441)

Grab last row
c [1 3 1 1]
   Offsets: [4 0 0 0]
   Strides: [1 5 15 15]
         (0.4689,-0.4640)          (-2.2490,-6.0028)          (0.1713,-0.1441)
Create 2-by-3 matrix from host data
D [2 3 1 1]
   Offsets: [0 0 0 0]
   Strides: [1 2 6 6]
    1.0000     3.0000     5.0000
    2.0000     4.0000     6.0000

Copy last column onto first
D [2 3 1 1]
   Offsets: [0 0 0 0]
   Strides: [1 2 6 6]
    5.0000     3.0000     5.0000
    6.0000     4.0000     6.0000

Sort A and print sorted array and corresponding indices
vals [5 3 1 1]
   Offsets: [0 0 0 0]
   Strides: [1 5 15 15]
    0.0390     0.1099     0.2948
    0.7402     0.4464     0.3585
    0.9210     0.4702     0.6814
    0.9251     0.5132     0.7140
    0.9690     0.6673     0.7762

inds [5 3 1 1]
   Offsets: [0 0 0 0]
   Strides: [1 5 15 15]
         2          2          1
         0          0          3
         1          3          4
         4          4          2
         3          1          0

Congratulations! You are now ready to use ArrayFire!

Do More with ArrayFire

Our documentation page page contains a vast amount of information about the API and examples provided by ArrayFire.

Our blog contains the latest developments with ArrayFire and tips and tricks to get the most out of your code.

If you are doing something really cool with ArrayFire, give us a shout out at technical@arrayfire.com, and we will be more than happy to lend our support.

Uninstalling ArrayFire

Simply delete the contents of the installed folder. You will need to delete the following:

/install/prefix/lib/libaf*
/install/prefix/include/arrayfire.h
/install/prefix/include/af/*.h