We are always looking forward to find new talented students. Therefore, we always offer student projects to get to know new people that might be a valuable addition to our team. If you are interested in one of the topics below, just drop me an email. If you share our passions and interests, but feel like none of the currently offered projects is for you, let me know – we’ll find something for.

Sparse Linear Algebra Mesh Processing
The sparse mesh matrix is a concise representation of surface meshes, eliminating the need for traditional linked list data structures, e.g., half-edge, which are inapt for parallel computations. Using the mesh matrix, mesh processing can be expressed as linear algebra operations, well suited for load-balanced computations on the GPU. We are currently building a CUDA library for parallel mesh matrix processing. Your task would be to support us by developing and implementing one or multiple mesh processing tasks using this novel formalism. The objectives below are suggestions, you can also propose your own additions and we can scale the tasks based on the project type and your motivation.

Sparse Linear Algebra Mesh Subdivision
Mesh subdivision is a ubiquitous tool in free-form surface modeling. It is used in feature film production and games to create smooth, eye-pleasing surfaces from rather coarse control meshes. Recently we developed a formalism to describe mesh subdivision as a series of sparse linear algebra operations. We now want to make it publicly accessible, by integrating our work into Blender. It is also possible to just do parts of the objectives below, depending on your knowledge, how far you are in your studies and the type project you want to do.

MHive: Design Space Exploration and Automatic Configuration
Task based execution is an important paradigm in parallel computing to increase concurrency of an application. Recently, we developed a task scheduling framework for the GPU that supports several different modes of execution, each individually configurable. Depending on the requirements of an application at hand we have to decide which execution mode to use and configure it manually. Your task would be to explore the space of possible pipeline configurations and find a way to classify them. You design an abstract pipeline description and based on that write an automatic configuration tool that takes such a description as input, decides which execution mode fits best and configures it accordingly.