Mineure HPC & Support au Big Data
Cours de 3ème année à Supélec

BE de programmation MPI-1 et de déploiement sur clusters de PC multi-coeurs

(parallélisation en mémoire distribuée)

Stéphane Vialle

Objectifs du Bureau d'Etude :

Les clusters de PC sont aujourd'hui des plates-formes de calculs opérationnelles et industrielles. La distribution de tâches indépendantes se fait automatiquement dans certains environnements de développement, mais la distribution d'une application nécessitant des échanges de résultats intermédiaires ou une circulation des données (trop volumineuses pour être stockées en totalité sur chaque PC) reste à la charge du développeur. Elle demande des connaissances en algorithmique parallèle et un savoir-faire en programmation distribuée.

Ce BE a trois objectifs
  1. Pratiquer la programmation des clusters de PC par envois de messages à l'aide MPI. Il consiste à implanter l'algorithme du produit de matrices denses sur un anneau de processeurs (algorithme vu en cours). Les noyaux de calculs seront des noyaux multithreadés et optimisés (fournis).
  2. Etudier différents "déploiements" du programme MPI+OpenMP sur un cluster de PC multi-coeurs.
  3. Etudier et comparer les performances des différents déploiements.

Plate-forme de développement : 

Vous travaillerez sur un des clusters du campus de Metz de Supélec :
  • le cluster Kyle (66 PC bi-socket Intel Skylake octo-coeurs hyperthreadés, 10 Gigabit ethernet)
  • le cluster Sarah (32 PC bi-socket Intel Sandy-bridge quadri-coeurs hyperthreadés, 10 Gigabit ethernet) .
  • Vous utiliserez vos comptes de TP (ex : "cpucs1_#") pour toute la durée du TP, et vous allouerez 4 noeuds par OAR en mode interactif.
  • sur le cluster Kyle : oarsub -p "cluster='Kyle'" -l nodes=4,walltime=5:00:00 -I
  • sur le cluster Sarah : oarsub -p "cluster='Sarah'" -l nodes=4,walltime=5:00:00 -I

Documents à rendre : 

Vous rendrez un SEUL document par binôme : un fichier Word (.doc) ou PDF :
  • Taille maximale de vos rapports : <voir taille maximale annoncée en cours>.
  • Date limite de remise de vos rapports : <voir date annoncée en cours>.
  • Remise par e-mail à Stephane Vialle (Stephane.Vialle@centralesupelec.fr)

Remarques préliminaires

Fichiers à télécharger :

Travail à effectuer :

  1. Implantez un produit de matrices distribué sur un anneau en utilisant MPI (+ OpenMP) et les routines MPI_Bsend et MPI_Recv, en complétant le code source fourni. 
Utilisez des matrices globales de 1024x1024, et testez votre code en utilisant le kernel 1, et en lançant 1, 2 et 4 processus MPI (sans threads) sur le noeud auquel vous êtes connectés :
  1. Quand votre code MPI+OpenMP produit les bons résultats numériques pour 1, 2 et 4 processus, faites une campagne de mesures de performances :
sort -u $OAR_NODEFILE > machines.txt
mpirun -np X -machinefile machines.txt -map-by ppr:... -rank-by ... -bind-to ... ./MatrixProduct -klc 8 -k 1 -nt Y
  1. Tracez des courbes de performances absolues (Gflops) et relatives (Speedup) en fonction du nombre de noeuds (nombre de machines utilisées) :
  1. Autres développements si le temps le permet :