GSoC 17 Ideas Page

Here are some suggestions for this year's Google Summer of Code. This list is not definitive and students may propose their own projects by creating a new topic on the ArrayFire-User Google Group with "[GSOC]" in the subject line.

Improvements to the ArrayFire Library

ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:

  • Improving the performance of existing functions
  • Adding support for more hardware and backends
  • Adding a new domain of functions

With these in mind, we suggest the follow ideas for prospective GSOC17 students.

IMPLEMENT PARALLEL VERSION OF ARRAYFIRE'S CPU BACKEND

This project focuses on performance improvements to ArrayFire's CPU backend. This is done by adding both vectorization and multi-threading support.

A successful project will implement the following tasks.

  • Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.
  • Use SSE instructions to vectorize key algorithms
  • Use OpenMP to enable multi-threading support.
MACHINE LEARNING ALGORITHMS FOR ARRAYFIRE

These algorithms will be written using existing functionality. While no knowledge of CUDA or OpenCL is necessary, familiarity with vectorization concepts is important. A successful project will implement any three of the following tasks using ArrayFire.

  • Logistic and Linear regression
  • Expectation Maximization
  • Principal Component Analysis
  • Support Vector Machines
  • Hidden Markov Models
  • Self Organizing Maps
  • Performance improvements to existing Machine Learning algorithms
COMPUTER VISION ALGORITHMS FOR ARRAYFIRE

These algorithms will be written in CUDA or OpenCL, along with a CPU implementation (serial), using ArrayFire existing functionality when available. A successful project will implement any one of the following tasks in CUDA or OpenCL plus a CPU implementation in C++:

Language Bindings for ArrayFire

There are a lot of Scientists and Engineers using higher level languages for scientific computing. ArrayFire's C API allows us to write wrappers for high level languages fairly easily. GSOC students can pick a language of their choice and wrap ArrayFire in that language. Our suggestions include the following.

JAVA WRAPPER FOR ARRAYFIRE

A Java wrapper already exists for ArrayFire. However it does not have feature parity with the C/C++ version. A successful project will implement the following.

  • Get feature parity with ArrayFire C/C++
  • Test the wrapper on Linux, Windows and OSX
  • Write two new examples demonstrating the wrapper
R WRAPPER FOR ARRAYFIRE

As with the Java wrapper, the R wrapper does not have feature parity. A successful project will implement the following.

  • Get feature parity with ArrayFire C/C++
  • Test the wrapper on Linux and OSX
  • Benchmark ArrayFire's algorithms with standard implementations in R
OTHER LANGUAGE WRAPPERS

Suggested languages include: C#, lua and rust. If you prefer a different language, contact us. A successful project will implement the following.

  • implement functions from arith.h, algorithm.h and blas.h
  • Test the wrapper on Linux
  • Write at least one example demonstrating the wrapper