Building a Parallel Poisson Solver with OpenMP, MPI, and CUDA

What Are We Asked to Build?
The SM25 coursework follows one numerical problem through several stages of parallelization. We begin with a two-dimensional Poisson equation with Dirichlet boundary conditions, construct a finite-difference approximation, and solve the resulting linear system with a preconditioned conjugate-gradient method. From that common numerical core, the two assignments together gradually introduce shared-memory parallelism with OpenMP, distributed-memory execution with MPI, a hybrid MPI+OpenMP implementation, and finally GPU acceleration with MPI+CUDA.
The important part is to keep these stages connected. The OpenMP version should grow from a verified sequential solver; the MPI version needs a two-dimensional decomposition of the same computational grid; and the CUDA stage continues from the distributed implementation by moving suitable local operations to the GPU. Along the way, the two assignments also require correctness checks, timing breakdowns, speedup and efficiency measurements, cluster job configuration, and a final report that explains the observed performance.
This walkthrough follows that development path from beginning to end. Each stage focuses on the new responsibility introduced by the next execution model: first getting the numerical method right, then parallelizing local loops, distributing the grid across processes, coordinating MPI and OpenMP, moving computational kernels to CUDA, and finally running and evaluating the program on IBM Polus. The accompanying SM25 repository provides a working reference implementation covering this development path, including the solver code, build scripts, cluster configuration, numerical outputs, plots, and the course report.
Steps to Follow
Sources
This walkthrough follows the SM25 coursework of the course Supercomputer Modeling and Technologies (MSU, 2025) and summarizes its requirements in its own words. The official course materials, including the assignment statements, submission deadlines, and the final-report format, are available in the course’s shared folder:
