# Projects¶

I have worked on various programming projects over the years, this page is an overview over the projects. The portfolio showcases the most important ones, further below is a simple list of the other projects.

## Portfolio¶

### QPhiX¶

Year: 2017 C++11, MPI, OpenMP, Intel AVX512 Intrinsics, CMake, Jinja, Travis CI qphix

As part of my master thesis, I have worked on QPhiX, a solver for sparse systems of equations as they appear in lattice quantum chromodynamics (Lattice QCD). It is tailored for the Intel Xeon Phi platform which runs 64-Bit x86 code but has a large number of threads. The various SIMD length of the Xeon and Xeon Phi architectures requires a data structure that is flexible enough.

A code generator generates intrinsics code for the various targets (none, SSE, AVX, AVX2, AVX512) which by construction unrolls all loops and can interleave software prefetches (needed for Knights Corner). The sparse matrix multiplication is memory bandwidth bound, QPhiX achieves some 75% of the theoretical performance on a single node.

My contributions to the project:

• Extension to support two-flavor operators, which is effectively the addition of another dimension to all the array structures. A lot of C++ templates have been used to offer both one-flavor and two-flavor operators without changing existing interfaces and prevent performance regressions.
• Introduction of continuous integration on Travis CI. All code is build for general architecture, AVX, AVX2 and AVX512 for each commit in git. Unit tests are run with MPI for AVX.
• The build system was ported from GNU Autotools to CMake. The code generator was included in the main repository and code is now generated during the compilation.

### Fast Multipole Method¶

Year: 2015 C++11, MPI

Within the scope of the Guest Student Program (GSP) at the Jülich Supercomputing Center (JSC), I got to work with the Fast Multipole Method (FMM) group for a little over two months. The FMM is a scalable algorithm to compute the long ranged forces between particles with computational complexity linear in the number of particles.

The previous Fortran implementation had been rewritten in C++11 to use costless abstraction features like templates and make specialization for different architectures manageable. During my stay I parallelized one step of the whole algorithm using a communication optimal algorithm by Driscoll et al. Scaling tests have been performed on the BlueGene/Q installation JUQUEEN.

### MEGraMa Data Analysis¶

Year: 2015 C++11, OpenCV, Boost, Qt 4, Eigen, OpenMP, CMake

The DLR Institute of Materials Physics in Space conducts a series of experiments of granular matter in weightlessness. Particles, in my case about 100 steel spheres of a few millimeter diameter, are excited using magnetic fields and then let to cool down; all while the experiment drops in Bremen’s drop tower. Three high speed cameras observe the weightless particles from perpendicular directions. In less than 10 seconds, five gigabyte of footage has been recorded.

My task has been to extract the 3D trajectories of the particles. In a four month project I have used the OpenCV library to extract 2D information from the images and a 3D model for the cameras (focal length, position, orientation). Correlating the data obtained from the three cameras allowed me to reconstruct the 3D path that the particles took. Using those 3D trajectories, the group has been able to compute interesting physical quantities.

The process of extracting data needs a lot of parameters. Thresholds have to be tuned for optimal image processing, path reconstruction, and 3D correlation of data. In order to make this task productive, I have added a Qt GUI that presents the parameters to the user. Leveraging the performance of C++ with OpenMP allows to see the results in real time on a standard desktop computer.

Years: 2012 – 2016 Python 3 thinkpad-scripts

My ThinkPad X220 Tablet has a rotatable screen which includes a Wacom digitizer pen. On desktop Linux, neither the special bezel buttons nor the correct digital rotation when physically turning the screen works out of the box. In order to conveniently use the laptop, I have started with a small XRandR script in Bash and expanded it to correctly map everything when external screens are present, disabling the TrackPoint, and adding support for the docking station.

A couple years ago I rewrote the collection of Bash scripts in Python. This allowed contributors and me to supply configuration file support, more features for edge cases, and also write unit test. The project is mature now and has attracted a few forks and pull requests.

### jscribble¶

Years: 2011 – 2012 Java jscribble

At first I did not find a note taking program that I could use with my netbook and Wacom digitizer tablet. Taking handwritten notes in a normal photo editing program is cumbersome as one has to create new images for pages manually. My need was to create a new page with one button and quickly switch between the pages.

Combining a MouseMotionListener with the JPanel.paintComponent led to a very basic drawing program that allowed me to take as many notes as I wanted. Today I use Xournal which is a much more sophisticated program for taking handwritten notes.

### SU(2) Hybrid Monte Carlo¶

Year: 2016 C++11, Boost, Eigen, gtest, OpenMP, CMake su2-hmc

As part of my master thesis, I have written a Hybrid Monte Carlo (HMC) simulation for SU(2) Yang-Mills theory (just gluons, no fermions with two colors). It was an exercise to get to know the HMC algorithm by Duane et al and was compared to data by Creutz.

It uses Eigen for the matrices, Boost for its INI parser, gtest for unit tests, and OpenMP for parallelization of loop.

## The Whole List¶

### Games¶

Some utilities for Urban Terror:

### LaTeX¶

• csv2latex: Yet another CSV to LaTeX table converter
• fedora-texlive-doc: Installs TeXLive documentation packages for installed packages on Fedora
• latex-edit: Open text editor and compile in the background on changes
• pdflatex-multifont: Typesets the same document with various fonts
• simplewick-generator: Convenient program to generate complicated Wick contractions
• tex-keywordprg: Opens documentation for a LaTeX package, use texdoc instead

### Science¶

Fractals:

Group Theory:

Data Analysis:

• fastplot: Quickly generate X-Y plots from TSV data
• format-value-error: Pretty printer for value and error, implemented in Octave, Python, and R
• test-fit-error: Test error scaling of different curve fit implementations

Lattice QCD: