This branch contains the codebase used for a malleable Conjugate Gradient (CG) experiments and results presented for the paper in section "Paper Information" in the system Nasp. The code represents the state of the project at the time of submission and is tagged accordingly.
## Paper Information
-**Title:** Proteo: A Framework for the Generation and Evaluation of Malleable MPI Applications
-**Authors:** Iker Martín-Álvarez, José I. Aliaga, Maribel Castillo, Sergio Iserte
-**Journal:** Journal of Supercomputing
-**Submission Date:** 30/11/2023
## Branch Structure
This branch is divided into the following 4 directories:
-**BashScripts**: Contains utility scripts for scripts that execute the code.
-**Exec**: Contains the scripts to execute the CG and perform a post-mortem analysis.
-**Main**: Contains code related to CG only.
-**malleability**: Contains all code needed to perform resizes over the CG.
Also, it contains the test sparse matrix "bcsstk01.rsa" and a Makefile.
## Installation
### Prerequisites
Before installing, ensure you have the following prerequisites:
- MPI (MPICH) installed on your system. This code has been tested with MPICH versions 3.4.1 and 4.0.3 with the OFI netmod.
- Slurm is installed on your system. This code has been tested with slurm-wlm 19.05.5.
The following requisites are optional and only needed to process and analyse the data:
- Python 3(Optional). Only if you want to perform the post-mortem processing or analyse the data.
- Numpy 1.24.3(Optional). Only if you want to perform the post-mortem processing or analyse the data.
- Pandas 1.5.3(Optional). Only if you want to perform the post-mortem processing or analyse the data.
- Seaborn 0.12.2(Optional). Only if you want to analyse the data.
- Matplotlib 3.7.1(Optional). Only if you want to analyse the data.
- Scipy 1.10.1(Optional). Only if you want to analyse the data.
- scikit-posthocs 0.7.0(Optional). Only if you want to analyse the data.
This command compiles the code using the MPI (MPICH) library.
3. Test the installation:
```bash
$ cd Results
$ bash ../Exec/runTest.sh
```
This test launches an Slurm Job with the provided sparse matrix bcsstk01.rsa.
As soon as it ends, it will provide in the job output file the results. Example of a successful run with expected output:
```bash
$ cat job_output.txt
Test numP=2 numC=4 Meths=0 0 1 -- Is_synch=0 qty=1
Working with general format
Start CG
T_spawn: X
T_SR: X
T_AR: X
T_Malleability: X
T_total: X
End(Y) --> (Y, Y)
shrink cleaning on node 0 (rank 0 in comm 0): shrink cleaning 0
```
The "X" values represent values in seconds, while the Y represent CG values.
### Clean Up
To clean the installation and remove compiled binaries, use:
```bash
$ make clean
```
## Reproducing Experiments
To reproduce the experiments performed with the malleable CG the following steps have to be performed:
1. Download the Queen_4147 sparse matrix with a Rutherford Boeing(rb) format: https://sparse.tamu.edu/Janna/Queen_4147
2. Move the matrix to the main directory of this branch.
3. From the main directory of this branch execute:
```bash
$ cd Results
$ bash ../Exec/runOFI.sh 5 > runOfi.txt
```
4. (Optional) When the experiments end, you can process the data. To perform this task the optional installation requisites must be meet. To process the data: