Systèmes Hautes Performances

Portail informatique

Le but de cet exercice est de manipuler des communications collectives avec MPI.

Le programme min_max crée un tableau d'entiers initialisés à des valeurs aléatoires, puis cherche les valeurs minimum et maximum.

Pour cet exercice, on souhaite paralléliser le programme avec MPI en n'utilisant que des communications collectives. Une fois le programme parallélisé, le rang 0 diffusera le tableau à traiter, puis chaque rang MPI cherchera les minimum et maximum d'une partie du tableau, et les resultats seront enfin transférés au rang 0.

Modifiez le programme min_max.c afin d'initialiser MPI, et de calculer, en fonction du rang MPI, les bornes inférieure et supérieure que le processus traitera.

Dans un premier temps, affichez le rang du processus MPI et les bornes traitées. Assurez vous que toutes les cases du tableau seront traitées.

Modifiez maintenant le programme pour que seul le processus de rang 0 initialise le tableau avant de le diffuser aux autres processus. La dernière étape consiste à collecter les résultats de chaque processus et d'afficher les minimum et maximum de l'ensemble du tableau. Pour cela, effectuez une réduction avec les opérateurs MPI_MIN et MPI_MAX. min_max_corrige.tgz

Le but de cet exercice est de travailler à la parallélisation de votre projet avec MPI. Pour cela, analysez les sources de parallélisme de l'application et identifiez les synchronisations nécessaires.

En fonction du programme à paralléliser, plusieurs approches peuvent être possibles. Estimez la fréquence des communications et la quantité de données à échanger. Est-il possible de "cacher" le coût des communications avec des communications non-bloquantes ? Vaut-il mieux utiliser des communications point à point ou des communication collectives ?