Paralèlisme : cours

Liste des travaux pratiques / dirigés

4. Tri

4.1. Exercice 1

Implanter un algorithme de tri (ordre croissant) pour les entiers de type merge sort en utilisant OpenMP (cf cours 2).

Le programme prendra en paramètres :

Tester le temps d'exécution avec différentes tailles de tableaux.

4.2. Exercice 2

Ecrire un programme mpi_tri_merge_sort.cpp qui utilise MPI pour trier un tableau de $N$ entiers grâce à l'algorithme merge-sort.

Utiliser $2^k$ instances du même programme pour trier ce tableau qui peut être représenté sous forme d'un vector de la STL.

4.2.1. Phase 1 : séparation des données et tri

La première instance, de rang 0, est le maître : il crée le tableau initial de $N$ éléments (valeurs aléatoires) et le divise en $2^k$ parties. Il envoie une partie des données à trier aux $2^k - 1$ esclaves.

Par exemple si $k = 3$ et $N = 64$, chaque processeur/processus traitera initialement $64 / 2^3$ = 8 éléments.

4.2.2. Phase 2 : fusion

On passe ensuite par une phase de fusion des tableaux ainsi triés.

Par exemple, si on a $2^3$ processeurs et $N=64$:

puis

et enfin

On a donc un fonctionnement en $log_2(2^k) = k$ étapes de fusion.