<p>Welcome to ArrayFire's home page for GSOC 2015. Please read this document and <a href="http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on">GSOC's FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href="https://groups.google.com/forum/#!forum/arrayfire-users">mailing list</a> for more information.</p>

<h2>Information for students</h2>

<h4>About ArrayFire</h4>

<p>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.</p>

<p>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.</p>

<h4>Requirements</h4>

<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>

<ul>
<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>
<li>Image processing and Computer Vision</li>
<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>
<li>Version Control systems (git)</li>
<li>Or a general interest in scientific computing.</li>
</ul>

<h4>Guidelines</h4>

<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href="https://groups.google.com/forum/#!forum/arrayfire-users">mailing list</a> with your project proposal.</p>

<h2>ArrayFire Projects and Ideas</h2>

<h4>GPU accelerated Machine Learning library</h4>

<h4>The ArrayFire Graphics Library - High performance visualizations</h4>

<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>

<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of visualization options. Primarily using OpenGL, the library is targeted towards cross-platform as well as backend-independent.</p>

<p>The core ideas behind this library are as follows:</p>

<ul>
<li>Provide a robust, yet flexible, API that allows users to display their data.</li>
<li>Visualization options include, but are not limited to: 

<ul>
<li>Display 2D images</li>
<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>
<li>Display 3D voxel and voxel-like visualizations</li>
<li>Display 3D geometry</li>
</ul></li>
<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>
<li>The library will not process any data (except what is required to display). The processing is to be done by ArrayFire (or other user code) and passed to the ArrayFire Graphics library for diplaying.</li>
<li>The library must be backend independent. That is, it must not be dependent on whether the user code is written using x86, CUDA or OpenCL backends.</li>
<li>Allow the user to create multiple windows with a variety of display options.</li>
<li>Provide a set of useful keyboard and mouse interaction options.</li>
</ul>

<p>The library will create, manage and destroy windowing and OpenGL data structures. A standard code flow would be:</p>

<ul>
<li>Create Window and display options.</li>
<li>Process data and pass it to ArrayFire Graphics (takes place outside the purview of the library)</li>
<li>Display the data given to the library.</li>
</ul>

<h5>Suggested ideas for GSOC15 for this project include:</h5>

<ul>
<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>
<li>Performance improvements to existing API. This includes 

<ul>
<li>improvements to OpenGL code.</li>
<li>data copy performance in ArrayFire.</li>
</ul></li>
<li>Using multi-threading to run OpenGL on an independent thread.</li>
<li>Porting the library to OpenGL ES and/or WebGL.</li>
</ul>

<h5>Requirements for these project are as follows:</h5>

<ul>
<li>Extremely good knowledge of OpenGL, GLFW.</li>
<li>Experience with 3D Rendering using OpenGL.</li>
<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>
<li>Knowledge of game and/or rendering engines is a bonus.</li>
</ul>

<h4>Language Bindings for ArrayFire</h4>

<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>
