Its hard to believe, but our ArrayFire GPU computing library was <a href="http://sandbox.arrayfire.com/arrayfire-is-now-open-source/">open-sourced a year ago</a>! While we were packing up our booth to head to <a href="http://sandbox.arrayfire.com/arrayfire-at-sc15/">SuperComputing 2015</a> my colleagues started reminiscing on how much our company and library have changed.
<h3>ArrayFire the library</h3>
In terms of raw statistics, the ArrayFire library is a really active project given that GPU computing is still seen as a niche field. Since its inception, ArrayFire has received 3285 commits from 31 developers (11 of which are our employees) and  produced nine (public) releases. At present we have 84 watchers, 1141 stars, and 160 forks of our code. In the last year we have had a total of 1105 opened issues. Of these, 427 are closed, 577 are closed pull requests, and 90 remain open.

Using the popular <a href="http://www.dwheeler.com/sloccount/">SLOCCount</a> program, we can get a lot of interesting statistical information about the ArrayFire library including the number of lines of code per source type and approximate cost of development:
<table>
<thead>
<tr>
<th>Metric</th>
<th>3.0 beta</th>
<th>3.2</th>
</tr>
</thead>
<tbody>
<tr>
<td>cpp</td>
<td>59140</td>
<td>99287</td>
</tr>
<tr>
<td>opencl*</td>
<td>4522</td>
<td>7658</td>
</tr>
<tr>
<td>ansi-c</td>
<td>547</td>
<td>676</td>
</tr>
<tr>
<td>xml</td>
<td>165</td>
<td>171</td>
</tr>
<tr>
<td>sh</td>
<td>0</td>
<td>49</td>
</tr>
<tr>
<td>lines</td>
<td>64,374</td>
<td>107,841</td>
</tr>
<tr>
<td>commits</td>
<td>1,467</td>
<td>3,286</td>
</tr>
<tr>
<td>contributors</td>
<td>21</td>
<td>31</td>
</tr>
<tr>
<td>Estimated Cost</td>
<td>$2,891,353</td>
<td>$3,168,838</td>
</tr>
</tbody>
</table>
* Note: SLOCCount thinks our OpenCL kernels (.cl) are closure (lisp) files.

So in the last year contributions from <a href="https://github.com/arrayfire/arrayfire/graphs/contributors">ourselves and others</a> have added approximately $300,000 in functionality to the library. By our own internal estimates, these numbers are not too far off depending if you track development back to the earliest days of our company.

In the last year we have added a ton of new functionality including:
<ul>
	<li>Computer vision: FAST, ORB, Nearest Neighbor, Harris, SUSAN,  SIFT, Difference of Gaussians, Homography, and GLOH</li>
	<li>Image processing: Convolution, DFT, template matching, SOBEL, colorspace conversion, erosion, wrapping, unwrapping, summed area of tables, and load/save raw images.</li>
	<li>Signal processing: in-place FFTs</li>
	<li>Linear algebra: Matrix multiplcication, in-place factorization, solving routines, single value decomposition.</li>
	<li>Installers: new packaging for Windows, Linux, and OSX installers.</li>
	<li>Language wrappers (discussed below)</li>
</ul>
And a wealth of other functionality including support for 16-bit integers, graphics, a unified backend, and convenience debugging/printing functions.
<h3>Third-party contributions</h3>
I have previously written about <a href="http://sandbox.arrayfire.com/open-source-benefits-contributors/">several large contributions to ArrayFire</a>, but a one-year review is always a prime opportunity to reiterate our appreciation for these developers.
<h4>Installers</h4>
Although we now recommend <a href="http://sandbox.arrayfire.com/download/">using our installers for Windows, Linux and OSX</a> due to their integration of Intel Math Kernel Library to accelerate linear algebra functions, we are still grateful for early packaging and distribution work provided by a few key developers.

<a href="https://github.com/ghisvail">Ghislain Antony Vaillant</a> created Debian packages for <a href="https://github.com/clMathLibraries/clFFT">clFFT</a>,<a href="https://github.com/clMathLibraries/clBLAS">clBLAS</a>, and <a href="https://ftp-master.debian.org/new/arrayfire_3.0.1-1.html">recently added</a> ArrayFire's CPU backend and submitted these to Debian upstream.

<a href="https://github.com/hmalphettes">Hugues Malphettes</a> created a Homebrew Formula for installing ArrayFire on OSX from source which was accepted into the official <a href="https://github.com/Homebrew/homebrew-science">homebrew-science</a> repository.
<h4>Language wrappers</h4>
Although ArrayFire is principally a C/C++ library, we ensured the C API was sufficiently complete to create wrappers for other languages. To highlight the most active repositories:
<ul>
	<li><a href="https://github.com/arrayfire/arrayfire-js">Javascript</a>: <a href="https://github.com/unbornchikken">Gábor Mező</a></li>
	<li><a href="https://github.com/arrayfire/arrayfire-rust">Rust</a>: ArrayFire developers Pradeep and Pavan with substantial contributions from <a class="aname" href="https://github.com/jramapuram">jramapuram</a></li>
	<li><a href="https://github.com/arrayfire/arrayfire-dotnet">.NET</a>: Was recently created by <a href="https://github.com/royalstream">royalstream</a></li>
	<li><a href="https://github.com/arrayfire/arrayfire-go">GO</a>: <a href="https://github.com/rabarar">Rob Baruch</a> (this project just started, its a great place to get started)</li>
	<li><a href="https://github.com/arrayfire/arrayfire-java">Java</a>: ArrayFire develpoer Pavan</li>
	<li><a href="https://github.com/arrayfire/arrayfire-r">R</a>: ArrayFire developers Pradeep and Pavan</li>
	<li><a href="https://github.com/arrayfire/arrayfire-fortran">Fortran</a>: Is maintained by Pavan</li>
</ul>
Check out ArrayFire's <a href="https://github.com/arrayfire/">full list of repositories</a> for other wrappers.
<h4>Code improvement</h4>
<a href="https://github.com/glehmann">Gaëtan Lehmann</a> added <a href="http://www.cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file">CMake project configuration files</a> which automatically create the equivilant of CMake find scripts. This let us remove our (manually maintained) <code>FindArrayFire.cmake</code> script. Gaëtan also <a href="https://github.com/arrayfire/arrayfire/commit/7084517cf72d9271076d17547e50fa7ae8b55370">added two lines of code</a> which squelched over 1000+ unused function warnings from the clang compiler.

<a href="https://github.com/nathanjackson">Nathan Jackson</a> discovered and fixed a race condition in a reduction kernel.

<a href="https://github.com/FilipeMaia">Filipe Maia</a> added support for <code>s64</code> and <code>u64 </code>datatypes by contributing six lines of code and fixed missing definitions for some proxy operators

&nbsp;