<commit_before>Rapport BE Systèmes distribués
Le Cam - Lemarquand

Partie 1 - Traitement non-distribué de l'image
Fichier  be-np.c
gcc -Wall be-np.c -o be-np

Étapes du programme :

Lecture de l'image par les méthodes fournies

Traitement :
Partie copie, pour les bords

Partie traitement à proprement parler, où l'on effectue le produit de 
convolution de chaque pixel par ses voisins pondérés par le filtre choisi

Partie "élagage", ou l'on ramène respectivement les valeurs négatives à 0 et
les valeurs au-dessus de 256 à 255, afin de respecter le format de l'image

Écriture de l'image finale à l'aide de la méthode fournie


Partie 2 - Traitement distribué de l'image
Fichier be-p.c
mpicc be-p.c -o be-p
mpiexec --np [n] be-p avec n >= 2

On distingue deux comportements dans ce système, celui du maître (master) et 
celui des esclaves (workers)

Étapes du programme :

Initalisation du MPI, dont sa taille et assignation du rang à chaque processus

Processus master : (rang 0)
Lecture de l'image
Calcul du nombre de ligne à envoyer à chaque worker
Envoi des paramètres (nombre de lignes et largeur) à chaque worker
Envoi des bouts d'image (chunk) à chaque worker
Attente passive grâce aux MPI_Recv
Réception des chunks traités par les workers
Écriture de l'image finale

Processus esclaves : (rang != 0)
Réception des paramètres (nombre de ligne et largeur)
Réception des lignes à traiter
Traitement à proprement parler - même méthodologie que dans la partie
non-distribuée (bords - filtrage - élagage)
Envoi des lignes traitées au processus maître

Fin de la partie distribuée avec MPI_Finalize

Considérations de performances :<commit_msg>Final report<commit_after>Rapport BE Systèmes distribués
Le Cam - Lemarquand

Partie 1 - Traitement non-distribué de l'image
Fichier  be-np.c
gcc -Wall be-np.c -o be-np

Étapes du programme :

Lecture de l'image par les méthodes fournies

Traitement :
Partie copie, pour les bords

Partie traitement à proprement parler, où l'on effectue le produit de 
convolution de chaque pixel par ses voisins pondérés par le filtre choisi

Partie "élagage", ou l'on ramène respectivement les valeurs négatives à 0 et
les valeurs au-dessus de 256 à 255, afin de respecter le format de l'image

Écriture de l'image finale à l'aide de la méthode fournie


Partie 2 - Traitement distribué de l'image
Fichier be-p.c
mpicc be-p.c -o be-p
mpiexec --np [n] be-p avec n >= 2

On distingue deux comportements dans ce système, celui du maître (master) et 
celui des esclaves (workers)

Étapes du programme :

Initalisation du MPI, dont sa taille et assignation du rang à chaque processus

Processus master : (rang 0)
Lecture de l'image
Calcul du nombre de ligne à envoyer à chaque worker
Envoi des paramètres (nombre de lignes et largeur) à chaque worker
Envoi des bouts d'image (chunk) à chaque worker
Attente passive grâce aux MPI_Recv
Réception des chunks traités par les workers
Écriture de l'image finale

Processus esclaves : (rang != 0)
Réception des paramètres (nombre de ligne et largeur)
Réception des lignes à traiter
Traitement à proprement parler - même méthodologie que dans la partie
non-distribuée (bords - filtrage - élagage)
Envoi des lignes traitées au processus maître

Fin de la partie distribuée avec MPI_Finalize

Considérations de performances :
Test en local (appels entre processus sur une même machine, pas d'I/O réseau)
Ubuntu 17.10 Artful Aardvark - VMWare Player
i7-4710HQ - 4GB RAM

Non-parallèle : temps moyen de traitement 29ms
Parallèle :
2 workers - 17ms
3 workers - 12ms
4 workers - 9 ms

On remarque un gain de performance considérable entre la version parallèle et
la version non-parallèle. Les rendements sont cependant assez rapidement 
diminué avec l'ajout de workers. Il est important de noter que les appels I/O
en réseau sont aussi bien plus coûteux que des accès mémoire (9 fois environ).
{'fraction_non_alphanumeric': 0.04485351309307752, 'fraction_numerical': 0.011667098781436349, 'mean_word_length': 4.358333333333333, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3474212', 'n_tokens_mistral': 1356, 'n_tokens_neox': 1345, 'n_words': 581}