In this repository there is all the necessary code for two HPC project:
- PROJECT 1 : Comparison between OpenMPI algorithms for collective operation
- PROJECT 2 : Mandelbrot set implementation with a hybrid MPI+OpenMP code.
In each project folder there is a specific report.
These projects have been run in Orfeo cluster. So, the first the user needs to do once logged in into Orfeo is to:
-
Download the GitHub repository
-
Remove all output, photo and slurm-output folders
-
Define the folder structure and download the requirements (maybe could be needed to give right permission to the file using
chmod +x file.sh): -
For Project 1 move into Project 1 directory and the into source code folder:
cd Project\ 1/source_code/
bash get_osu.sh # this will download the osu benchmarks library and create the folder structure- For Project 2 move into Project 2 directory and the into source code folder:
cd Project\ 2/source_code/
bash get_structured_folder.sh # this will create the folder structureFor Project 2 the user should create a folder photo and move the pmg inside it, since they are created in source_code folder. Photo, as well as osu benchmark folder are added in the gitingore. Here I provided the pmg on zip fodler.
To run a job and let it be scheduled by slurm, the user needs to run the following command:
sbatch file.shFor this task it has been compared Broadcast and Reduce algorithms and specifically for each of one of these algorithms there is a version with fixed and variable size. For each of these algorithms, both for kind of size, three types of algorithm implementation have been tested
- Broadcast:
- Algo 1: Basic Linear (type 1 in osu library)
- Algo 2: Pipeline (type 3 in osu library) --> here the user will find two bash files, since for time constraint it was not possible to complete the job.
- Algo 3: Binary Tree (type 5 in osu library)
- Reduce:
- Algo 1: Binary (type 4 in osu library)
- Algo 2: Binomial (type 5 in osu library)
- Algo 3: Rabenseifner (type 7 in osu library)
For developing a strategy for Mandelbrot Set Parallelization, an Hybrid MPI + OpenMP strategy has been defined and two versions have been tried: the first startegy is to partition the image by row, while the second one is by column. On supplementary method it is presented a strategy for dividing the image in 2D blocks.
For all the projects there is an analysis done in Python and a report. In the presentation will be highlighted a problem found during the development.