2D Heat Conduction Simulation with Jacobi equation utilizing Parallel Processing through MPI, OpenMP and CUDA.
In this project, we implement a conduction heat transfer simulation on a 2D plate, utilizing parallel processing with the use of MPI, OpenMP and CUDA.
Some initial reference software that performs the required simulation can be found here.
However, this software underperforms and our goal was to make it better. So, we wrote our own version, from scratch.
As a simplification, we assume every subplate is constantly heated in its central area, instead of only the center of the whole plate.
We split the computations accross multiple compute nodes, so each node is assigned a part of the computations. If fact, we split the 2D plate in subplates and each node computes conduction heat transfer on its own plate. Then, every node exchanges temperature information in their plate’s boundaries with is neighbors, which are other nodes whose plates are adjacent to the node’s.
To execute the software:
make
sh exeg_prog.sh [number of processes] [number of cells] [number of epochs]
This part is an extension to the MPI part, as it combines MPI with OpenMP.
In every computation node we utilize OpenMP to split the computations within the node accross 4 threads, each one communicating with a single neighbor node (North, South, East, West)
make
sh exeg_prog.sh [number of processes] [number of cells] [number of epochs]
This part is independent from the 2 previous parts, as it does not utilize MPI at all.
In a single compute node with a modern Nvidia GPU, we follow the GPGPU paradigm and utilize CUDA to perform the computations within the GPU.
On the same node, we also utilize OpenMP as a reference for comparisons.
make
sh exeg_prog.sh [number of cells] [number of epochs]
The measurements are in as well as the plots that visualize the performance improvement are located in the results directory.
In these measurements we compare our software with the underperforming initial software in order to show the performance improvements we achieved.
We also compare the 3 different versions of our own software against each other to show the improvements we can achieve while utilizing different technologies.