Our organization Computational Science and Engineering at TU Wien was selected for the Google Summer of Code 2014. Within our organization, a couple of great open source software projects hosted at TU Wien are reaching out to students all over the world for work on free scientific software over the summer. Application deadline for students is on March 21, 2014. The funding provided by Google for the students is again highly appreciated 🙂
This year I'm again mentoring project ideas for ViennaCL, which I'll describe briefly in the following:
ViennaCL: Benchmark GUI: ViennaCL has a bunch of highly optimized linear algebra routines implemented. However, to squeeze out the last percent of performance, we maintain a device database internally, selecting the fastest kernel at runtime. Since we are unable to buy all hardware available on the market to populate the device database, this project will build a nice GUI for users to analyze the performance of their hardware just like graphics benchmarks such as Luxmark. The GUI will also include a built-in mechanism through which the user can submit his or her results to us, allowing us to improve our database. One may also see it as another crowd-effort (crowdtuning) just like crowdfunding.
ViennaCL: GPU-Accelerated STL Functionality: While the focus of ViennaCL is on linear algebra functionality, algorithms on sparse matrices require certain other standard functionality such as sorting. Thrust has shown that such functionality can be made available on GPUs using CUDA, while Boost.Compute provides similar functionality on top of OpenCL. Consequently, we would like to unify these efforts within ViennaCL and offer fast standard algorithms such as transform() or sort() for GPU containers for the CUDA, OpenCL, and OpenMP backends.
ViennaCL: Improving the PyViennaCL Python Wrapper: Within the Google Summer of Code 2013, our student Toby accomplished great things with PyViennaCL. On the other hand, additional functionality has been added to ViennaCL since then, which also needs to be wrapped with PyViennaCL. Moreover, there's still quite some work on the installation process necessary, for example a convenient installer for Windows.
ViennaCL: Sparse Matrix-Matrix Multiplication: The multiplication of two sparse matrices is one of the crucial operations for algebraic multigrid preconditioners for the solution of (non)linear systems of equations such as those encountered for semiconductor device simulations. In contrast to dense matrix-matrix multiplications, it is much harder to parallelize and thus to run on massively parallel hardware. Still, cuSPARSE provides a GPU-accelerated implementation, confirming that it is in principle possible to get reasonable performance.
ViennaCL: Tuning the OpenMP Backend: The CUDA and OpenCL compute backends of ViennaCL are pretty efficient, while the existing OpenMP backend acts more as a fallback layer rather than a competitive third compute backend for multi-core CPUs. This, however, is not overly satisfactory, hence the aim of this project idea is to improve the respective OpenMP kernels such that they get as close as possible to the theoretical peak performance.
I'm looking forward to working again with highly motivated students for GSoC 2014. If you're one such highly motivated student and interested in one of the topics above, don't hesitate and apply now! 🙂