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 thesis directions · Autumn 2026
How much memory traffic and launch overhead can we eliminate with fused GPU kernels?
Implement fused vector operations in CG or GMRES and compare them with separate kernels. Measure kernel launches, GPU memory traffic, bandwidth utilisation, true residuals and time-to-solution across problem sizes.
Python or C/C++, numerical linear algebra and GPU programming. Start with vector updates and compatible reductions; respect data dependencies and global synchronisation requirements.
Discuss this directionCompatible operations can share a memory pass. Whole solver iterations may still require separate kernels and global reductions.
Can lower-precision subdomain solves accelerate the solver while preserving robustness?
Compare FP64 local solves against FP32 and adaptive-precision restricted additive Schwarz (RAS) preconditioners inside flexible GMRES (FGMRES). Track convergence, a true residual evaluated in FP64, memory traffic and time-to-solution.
Floating-point arithmetic, iterative methods and Python or C/C++. Begin with fixed precision choices, then adapt local accuracy or precision as the outer iteration progresses.
Discuss this directionCan subdomains make progress independently instead of waiting for global synchronisation?
Implement synchronous and asynchronous Schwarz/RAS variants for a model elliptic PDE. Compare convergence and time-to-solution under controlled communication delays and workload imbalance, then investigate a multi-GPU implementation.
Numerical linear algebra, MPI and GPU programming. Define how stale boundary data and termination are handled; move to Helmholtz problems after establishing reliable baseline behaviour.
Discuss this directionCan several related linear systems be solved more efficiently together than separately?
Compare independent CG solves, Block CG and a GPU block implementation with fused operations. Vary the number of right-hand sides and measure memory traffic, arithmetic intensity, convergence and scalability.
Iterative methods and GPU programming. Start with Hermitian positive-definite systems suitable for standard Block CG. Extensions to complex symmetric Helmholtz systems require an appropriate Krylov variant and checks for breakdown and loss of rank.
Discuss this directionCan machine learning choose an efficient solver configuration for a particular GPU?
Benchmark alternative fusion strategies, work-group sizes and solver configurations. Compare a learned autotuner with simple heuristics and search baselines, including tuning costs and performance on unseen problems.
Python, GPU benchmarking and basic machine learning. Use problem and hardware characteristics as inputs, separate training and evaluation workloads, and verify numerical correctness for every configuration.
Discuss this directionWhen does extra local computation cost less than communicating more often?
Compare a conventional solver with a communication-reducing variant. Vary subdomain size, overlap and communication latency; measure reductions, exchanged data, iteration counts, true residuals and total runtime.
Numerical linear algebra and MPI. Begin with one method, such as pipelined CG on positive-definite problems, and examine the trade-off between communication savings, stability and extra work.
Discuss this directionOther interests for discussion include Processing-in-Memory for iterative solvers; energy-to-solution optimisation; performance portability across GPU architectures; dynamic CPU–GPU execution; LLM-assisted HPC optimisation; numerical stability of invertible neural networks; and reproducible HPC experiments with Jupyter.
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.