ArrayFire

Installation

$ sudo pacman -S arrayfire

Python Binding :

$ pip install arrayfire

Prepare

要執行需要 OpenCL 的程式:

# Intel

$ sudo yaourt -S intel-opencl-runtime   # official
$ sudo yaourt -S beignet                # for integrated graphics hardware

# NVIDIA

$ sudo pacman -S opencl-nvidia      # official

# AMD

$ sudo yaourt -S opencl-catalyst    # official
$ sudo pacman -S opencl-mesa        # mesa driver

OpenCL 開發:

$ sudo pacman -S ocl-icd opencl-headers

Check :

# Intel

$ cat /etc/OpenCL/vendors/intel.icd
/opt/intel/opencl-sdk/lib64/libintelocl.so

$ cat /etc/OpenCL/vendors/intel-beignet.icd
/usr/lib/beignet/libcl.so

# NVIDIA

$ cat /etc/OpenCL/vendors/nvidia.icd
/usr/lib/libnvidia-opencl.so

# AMD

Usage

$ cat hello.py
#!/usr/bin/python

import arrayfire as af

# Display backend information

print("="*20)

af.info()

print("="*20)

af.backend.set_unsafe("cpu")
af.info()

print("="*20)

af.backend.set_unsafe("opencl")
af.info()

print("="*20)

af.backend.set_unsafe("cuda")
af.info()

print("="*20)

# Generate a uniform random array with a size of 5 elements
a = af.randu(5, 1)

# Print a and its minimum value
print(a)

# Print min and max values of a
print("Minimum, Maximum: ", af.min(a), af.max(a))

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/cuda/lib64:/opt/cuda/nvvm/lib64
$ python hello.py   # https://github.com/arrayfire/arrayfire-python/wiki#setting-the-environment-variables
====================
ArrayFire v3.2.0 (CUDA, 64-bit Linux, build )
Platform: CUDA Toolkit 7.5, Driver: 358.16
[0] GeForce GT 630M, 2048 MB, CUDA Compute 2.1
====================
ArrayFire v3.2.0 (CPU, 64-bit Linux, build )
[0] Intel:        Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz Max threads(4)
====================
Failed to release test userptr object! (9) i915 kernel driver may not be sane!
Failed to release test userptr object! (9) i915 kernel driver may not be sane!
Failed to release test userptr object! (9) i915 kernel driver may not be sane!
Failed to release test userptr object! (9) i915 kernel driver may not be sane!
Device[0] has no support for OpenGL Interoperation
Device[2] has no support for OpenGL Interoperation
ArrayFire v3.2.0 (OpenCL, 64-bit Linux, build )
[0] BEIGNET : Intel(R) HD Graphics IvyBridge M GT2
-1- NVIDIA  : GeForce GT 630M
-2- INTEL   : Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
====================
ArrayFire v3.2.0 (CUDA, 64-bit Linux, build )
Platform: CUDA Toolkit 7.5, Driver: 358.16
[0] GeForce GT 630M, 2048 MB, CUDA Compute 2.1
====================
arrayfire.Array()
Type: float
[5 1 1 1]
    0.7402
    0.9210
    0.0390
    0.9690
    0.9251


Minimum, Maximum:  0.039020489901304245 0.9689629077911377