Mineure HPC & Support au Big Data
Cours de 3ème année à Supélec
BE d'optimisations sérielles, de vectorisation et de multithreading par OpenMP
(Utilisation optimale d'un noeud de calcul)
Objectifs du Bureau d'Etude :
L'optimisation
des codes séquentiels est une partie critique des
développements en "calcul intensif". Il est en effet inutile de
développer et d'investir des ressources dans des systèmes
parallèles, si les parties séquentielles
exécutées sur chaque noeud du système ne sont pas
optimisées. On gâcherait alors beaucoup de ressources de
calcul.
Ce BE a pour objectif d'optimiser au maximum un algorithme simple de
produit de matrices carrées pleines. On commencera par implanter
une version "naïve", que l'on optimisera progressivement en
appliquant les règles d'optimisations sérielles standards
et portables (à peu près!). On mesurera les performances
de chaque version, et on chiffrera l'impact de chaque optimisation.
Ce travail sera réalisé sur des PC classiques en C, sous linux
(mais une mise en oeuvre similaire est possible sous Windows).
Documents à rendre :
Vous rendrez un SEUL document : un fichier Word ou PDF :
- il sera nommé avec vos noms précédés
de "BE1-Optim-OMP". Ex : "BE1-Optim-OMP-Pignon.pdf"
- il comportera sur la première page :
- vos nom et prénoms, et le nom de votre option de 3A,
- la date de remise du rapport,
- le titre ("BE1 : Optimisations sérielles et OpenMP").
- il comportera ensuite :
- une description des optimisations
réalisées (pourquoi ? comment ?),
- des tableaux ou graphiques de synthèse représentant vos mesures de performances,
- votre analyse/synthèse de la démarche,
- les extraits importants des codes sources (ex : les routines de calculs après
chaque optimisation).
- Taille maximale de vos rapports : 4 pages
- environ 1,5 page de résumé des performances des optimisations sur un coeur,
- environ 2,5 pages de CR de la démarche et des résultats obtenus sur un noeud en multithreads.
- Date limite de remise de vos rapports : <voir date annoncée en cours>.
- Remise par e-mail à Stephane Vialle (Stephane.Vialle@centralesupelec.fr)
Travail à effectuer :
Remarques préliminaires :
- L'accès
aux clusters de calculs du Data Center d'Enseignement de CentraleSupélec se fait à travers
l'environnement OAR, et en utilisant des comptes informatique locaux au
campus de Metz. La procédure d'utilisation de OAR pour ce TP est ici.
- Les codes de calcul de ce BE seront évalués par
leurs temps d'exécution des routines de calculs dont on
déduira les GigaFlops (performances absolues), puis par leurs
accélérations vis-à-vis de la version "naïve"
(performances relatives).
- Conservez chacun de vos codes (les codes de chacune des étapes), car il vous resserviront dans d'autres questions.
Fichiers à télécharger :
- Code source initial à compléter : ici
- Fichier Excel de relevé des performances : ici
Exercices :
- Optimisations sérielles manuelles et progressives d'un produit de matrices en C (kernel 0) : Enoncé.
- Mesurez les performances obtenues avec la bibliothèque OpenBLAS (kernel 1), sur un petit problème (1024x1024) et sur un moyen problème (2048x2048).
- Parallélisation sur les coeurs d'un noeud avec OpenMP : Enoncé