Une partie des fichiers présents dans le dossier Appli-iso3dfd sont les fichiers nécessaires à l'exécution et la compilation de iso3dfd, une application fournie par Intel simulant la propagation d'ondes sismiques dans un milieu 3D et isotrope. Ce dossier contient aussi les fichiers python qui servent à optimiser les arguments passés à iso3dfd.
## Table of Contents
-[Structure du répertoire](#structure-du-répertoire)
-[Compilation de iso3dfd](#compilation-de-iso3dfd)
-[Exécution de iso3dfd](#exécution-de-iso3dfd)
-[Utilisation de ACO.py](#utilisation-de-ACO.py)
-[Licence](#licence)
## Structure du répertoire
```
.
├── bin -> dossier contenant les fichiers binaires
│ └── iso3dfd_... -> exécutable iso3dfd compilé
├── config -> dossier contenant les config pour la compilation de iso3dfd
│ ├── context_values.cfd
│ ├── make.config
│ └── state.cfg
├── src -> dossier contenant les fichiers sources de iso3dfd
│ ├── ...
| ...
├── ACO.py -> le script python permettant d'optimiser les paramètres de iso3dfd
├── compute_path.py -> script python contenant des fonctions appelées par ACO.py
├── launch.sh -> script bash permettant de lancer ACO.py en parllèle via MPI
├── launcher_SUBP.py -> script python contenant des fonctions appelées par ACO.py
└── tools.py -> script python contenant des fonctions appelées par ACO.py
```
## Compilation de iso3dfd
Pour compiler iso3dfd il suffit d'éxcuter dans le terminal:
```bash
$ make -eOPTIMIZATION=<opt-flag> -esimd=<simd-flag> last
```
Il faut alors remplacer opt-flag par "-O2" ou "-O3" et correspond au niveau d'optimisation désiré pour la compilation de l'exécutable. Il faut aussi remplacer le tag de vectorisation simd-flag par "sse", "avx", "avx2" ou "avx512".
## Exécution de iso3dfd
Une fois compilé, l'exécutable iso3dfd devrait se trouver dans le dossier bin et peut être lancé avec la commande:
Les paramètres n1, n2 et n3 correspondent aux dimensions du domaine modélisé, nb_threads au nombre de threads sur lesquels il est lancé, nb_iter le nombre d'itérations réalisées dans le programme et cbx, cby et cbz sont les paramètres de cache blocking.
L'exécutable retourne alors dans le terminal la durée totale d'exécution, le throughput (MPoints/s) et les GFlops.
## Utilisation de ACO.py
Comme cela vient d'être expliqué, iso3dfd prend de nombreux paramètres en arguemtents. L'objectif d'ACO.py est d'otpimiser les paramètres n1, n2, n3, cbx, cby et cbz. L'algorithme ACO.py est basé sur un algorithme de colonie de fourmis et tous les paramètres (taille des colonies, initilisation des phéromones, nb_threads, etc.) peuvent être directement renseignés dans la section __name__ == "__main__" de ACO.py.
Pour lancer ACO.py en parallèle sur plusieurs processus, il faut lancer un batch avec la commande sbatch :
Il faut alors choisir N et n ainsi que la commande mpirun du launch.sh. Les paramètres de batch par défaut sont N=1, n=2 et np = 2. Avec ces paramètres et sur le Cluster de Metz, ACO est lancé sur un seul noeud, et parallélisé en deux processus. Chaque processus est déployé sur un socket et iso3dfd est exécuté sur huit threads.
## Licence
Please refer to [the LICENSE file](./Makefile) for any information about license on the iso3dfd code.