The Awkward Array library provides a NumPy-like interface to the nested and unequal-length datasets that are often required by particle physicists. Since its release in September 2018, it has been used in a variety of particle physics analyses. In late 2019/early 2020, it was rewritten in C++ as Awkward 1.x, and the transition from Awkward 0.x to Awkward 1.x is ongoing.
Since Awkward Array encourages array-at-a-time programming, analysis scripts that use it are already in a good position to take advantage of GPUs. Algorithms designed for GPUs also operate array-at-a-time because this permits threads to run independently and thus achieve better performance. Awkward 1.x’s C++ implementation provides a good starting point for adding GPU kernels in CUDA and/or OpenCL.
The goal of this project is to add a GPU backend to Awkward Array 1.x. With such a backend, the library would have a unique capability of processing complex, JSON-like data that is wholly resident on GPUs, in an efficient way, without specialized compilation or even leaving the Python prompt.
By the end of the summer, we would like to see a complete implementation of Awkward Array GPU kernels. It should be reasonably performant, though it need not have the best possible performance.
Contact the mentors for a task that we’ll use to evaluate candidates.