Skip to content

MPI-based parallel proper orthogonal decomposition (POD) in C++

License

Notifications You must be signed in to change notification settings

marrov/parallel-pod

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

parallel-pod

C++ MPI-based parallel re-implementation of a legacy python code for proper orthogonal decomposition (POD)

Introduction

The evolution of computational power, and the increasing availability of HPC resources to researchers, allows for pushing the envelope regarding scientific data generation and the subsequent data processing. In the area of fluid dynamics the Proper Orthogonal Decomposition (POD) method is increasingly being used to isolate constituting behaviors in fluid flows in the post-processing stage. The POD method is applicable to both numerically generated as well as experimentally generated datasets. Considering contemporary simulations and numerical experiments, the generated data set can be large. Due to the presence of large datasets of interest for post-processing effective and efficient algorithms and their implementations are of high interest.  

Project description

At present the POD method implementation in use in our close proximity is in Python and of sequential type. Typically, applying this implementation to commonly encountered datasets require around 24 wall-clock hours to complete. It is believed that a performance-improvement can be achieved by, first of all, porting the implementation to a compiled language (such as, C/C++ or Fortran). The current implementation consists of several nested for-loops which should allow themselves for efficient parallelization. Secondly, as the POD method is in practice a Singular Value Decomposition (SVD), it is believed that both an own implementation as well as exploration of available linear algebra packages can be included in the project.   Furthermore, the method used to generate input data to the POD algorithm is currently generating several small files on persistent storage. It is not expected to reduce the execution time to a significant extent, but the data loading (I/O) could also be considered for parallelization in this project. If time allows.  

Project members

Marc Rovira ([email protected]), Yazhou Shen ([email protected]), Kristian Rönnberg ([email protected])  

Intended outcome

We are currently all working on CFD at the Mechanics department at KTH. All of as either are or are intending to apply POD in our research. POD is applied to datasets generated with OpenFOAM. We currently have good datasets, and a reference implementation, which we can be used as starting points for the project. Kristian is not located at KTH more than once per week, so we intend to exercise version control and usage of GitHub to store and manage our progress. Furthermore, our intention is first to port the implementation from Python to C/C++, which will allow for a benchmarking of a compiled vs. interpreted language. The second step is to parallelize the code using MPI. The reason for choosing MPI is that we are currently working extensively with OpenFOAM, which is parallelized using MPI, and thus consider this to be a good chance to get a glimpse of how this works. Hence, SMP is not considered at the moment. As a third, and optional step, an OpenMP or CUDA-based implementation could be considered.   In addition to learning more about parallel programming and MPI, a working implementation that will facilitate our future research is the desired outcome. Experience using git and collaborating on a publicly shared and off-site hosted source code repository, such as GitHub, is also of relevance.

About

MPI-based parallel proper orthogonal decomposition (POD) in C++

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published