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 <a href="https://groups.google.com/forum/#!forum/arrayfire-users">ArrayFire-User Google Group</a> with "[GSOC]" in the subject line.
<h2>Improvements to the ArrayFire Library</h2>
ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:
<ul>
 	<li>Improving the performance of existing functions</li>
 	<li>Adding support for more hardware and backends</li>
 	<li>Adding a new domain of functions</li>
</ul>
With these in mind, we suggest the follow ideas for prospective GSOC17 students.
<h4>IMPLEMENT PARALLEL VERSION OF ARRAYFIRE'S CPU BACKEND</h4>
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.
<ul>
 	<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>
 	<li>Use SSE instructions to vectorize key algorithms</li>
 	<li>Use OpenMP to enable multi-threading support.</li>
</ul>
<h4>MACHINE LEARNING ALGORITHMS FOR ARRAYFIRE</h4>
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.
<ul>
 	<li>Logistic and Linear regression</li>
 	<li>Expectation Maximization</li>
 	<li>Principal Component Analysis</li>
 	<li>Support Vector Machines</li>
 	<li>Hidden Markov Models</li>
 	<li>Self Organizing Maps</li>
 	<li>Performance improvements to existing Machine Learning algorithms</li>
</ul>
<h3>COMPUTER VISION ALGORITHMS FOR ARRAYFIRE</h3>
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++:
<ul>
 	<li>SURF</li>
 	<li><a href="http://personal.ee.surrey.ac.uk/Personal/Z.Kalal/tld.html">Tracking-Learning-Detection</a> (TLD)</li>
 	<li><a href="http://www.robesafe.com/personal/pablo.alcantarilla/kaze.html">Accelerated-KAZE Features</a> (AKAZE)</li>
</ul>
<h2>Language Bindings for ArrayFire</h2>
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.
<h4>JAVA WRAPPER FOR ARRAYFIRE</h4>
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.
<ul>
 	<li>Get feature parity with ArrayFire C/C++</li>
 	<li>Test the wrapper on Linux, Windows and OSX</li>
 	<li>Write two new examples demonstrating the wrapper</li>
</ul>
<h4>R WRAPPER FOR ARRAYFIRE</h4>
As with the Java wrapper, the R wrapper does not have feature parity. A successful project will implement the following.
<ul>
 	<li>Get feature parity with ArrayFire C/C++</li>
 	<li>Test the wrapper on Linux and OSX</li>
 	<li>Benchmark ArrayFire's algorithms with standard implementations in R</li>
</ul>
<h4>OTHER LANGUAGE WRAPPERS</h4>
Suggested languages include: C#, lua and rust. If you prefer a different language, contact us. A successful project will implement the following.
<ul>
 	<li>implement functions from <a href="https://github.com/arrayfire/arrayfire/blob/devel/include/af/algorithm.h">arith.h</a>, <a href="https://github.com/arrayfire/arrayfire/blob/devel/include/af/arith.h">algorithm.h</a> and <a href="https://github.com/arrayfire/arrayfire/blob/devel/include/af/blas.h">blas.h</a></li>
 	<li>Test the wrapper on Linux</li>
 	<li>Write at least one example demonstrating the wrapper</li>
</ul>