Computing on GPUs
Efficient Krylov solvers, kernel fusion, mixed precision and multiple right-hand sides. Much of modern GPU performance depends on how often data moves—and whether algorithms can be reorganised to move it less.
I’m Eero Vainikko, Professor of Distributed Systems at the University of Tartu. I study how parallel algorithms and modern hardware can work together to solve demanding scientific problems.
My work connects numerical methods, parallel programming, and the practical challenges of scientific computing.
Efficient Krylov solvers, kernel fusion, mixed precision and multiple right-hand sides. Much of modern GPU performance depends on how often data moves—and whether algorithms can be reorganised to move it less.
Breaking large PDE problems into smaller, interacting subproblems. Overlapping Schwarz methods and preconditioning for challenging Helmholtz systems.
Connecting algorithms with their execution on real machines. Performance, communication, and reproducible experiments across CPUs, GPUs, and HPC systems.
Combining an outer flexible Krylov solver with overlapping Schwarz preconditioning and GPU subdomain solvers. The work explores simultaneous local solves and the role of multiple right-hand sides in efficient computation.
Read the paper · PDF GPU-Accelerated FGMRES with Overlapping Schwarz Preconditioner for Efficient Solution of Helmholtz EquationsInterested in parallel computing? Explore a possible thesis direction, then get in touch to shape a question around your interests and experience.
Featured MSc thesis directions · Updated November 2026
Can keeping local iterations and working data on the GPU reduce the cost of Schwarz preconditioning?
Research continuation · implementation and numerical methods
Compare CPU local solves, batched OpenCL solves and a kernel that performs several local iterations before returning. Vary subdomain size, overlap and precision; measure total solution time, true residual and kernel launches.
Python or C/C++, GPU programming and iterative methods. Begin with small subdomains and a model elliptic problem; extend to Helmholtz once the baseline is reliable. Investigate register and local-memory limits.
Discuss this directionCan solving several related systems together reduce memory traffic and kernel-launch overhead?
Implementation-focused · a clear starting project
Compare independent CG solves, Block-CG and a fused GPU Block-CG implementation. Vary the number of right-hand sides; measure memory traffic, launch count, runtime and true residuals.
Linear algebra and GPU programming. Start with Hermitian positive-definite systems. Check loss of rank and numerical stability; general Helmholtz systems require a suitable alternative to standard Block-CG.
Discuss this directionCompatible operations can share a memory pass. Whole solver iterations may still require separate kernels and global reductions.
Can local precision and stopping tolerances adapt as the outer solver converges?
Numerical-methods-focused · accuracy and performance
Compare an FP64 baseline with FP32 local solves and adaptive precision or local stopping tolerances inside flexible GMRES with restricted additive Schwarz. Measure outer iterations, true residuals evaluated in FP64 and total runtime.
Floating-point arithmetic, iterative methods and Python or C/C++. Change one policy at a time and test robustness across problem sizes and conditioning.
Discuss this directionHow much communication can be hidden behind useful GPU computation?
Advanced project · multi-GPU or distributed experiments
Start with conventional and pipelined CG on positive-definite problems. Measure reductions, halo exchanges and GPU work with multiple MPI processes or GPUs; compare overlap efficiency, true residuals and total solution time.
MPI, GPU programming and Krylov methods. Map dependencies before changing scheduling. Extending overlap to FGMRES–RAS is an advanced step; overlap does not imply asynchronous Schwarz iterations.
Discuss this directionCan greater parallelism compensate for a weaker, cheaper preconditioner?
Implementation and numerical methods · local solver performance
Compare conventional sparse triangular solves with a fine-grained decomposed or block-local alternative. Measure setup and application costs, outer convergence and complete solution time.
Sparse linear algebra and GPU programming. Begin with one preconditioner and a small benchmark family. Use IC with suitable positive-definite systems and ILU with an appropriate outer solver.
Discuss this directionCan inexpensive problem features help select overlap, local tolerance or coarse correction?
Experimental project · a focused AI-for-HPC question
Build a benchmark dataset for a small set of Schwarz configurations. Compare a lightweight learned selector with fixed defaults and simple heuristics, including feature extraction, training and tuning costs.
Python, basic machine learning and iterative solvers. Start by selecting one parameter. Separate training and test problem families and evaluate the selected configuration by total solver time and reliability.
Discuss this directionOther interests for discussion include asynchronous and fault-tolerant Schwarz methods; energy-to-solution optimisation; performance portability across GPU architectures; Processing-in-Memory modelling for Krylov solvers; automatic kernel-fusion selection; LLM-assisted HPC optimisation; reproducible HPC workflows with Jupyter; and numerical stability of invertible neural networks.
Have a related idea? Get in touch to discuss a suitable research question and scope.
Possible research directions, with the final scope and supervision arrangements agreed in discussion.
Send a short introduction, the direction that interests you, and a little about your programming and mathematics background. An initial idea is enough to start a conversation.