Mineure CalHau1
Cours de 3ème année à CentraleSupélec
BE d'optimisations sérielles et de vectorisation
(Utilisation optimale d'un coeur de calcul)
Objectifs du TP :
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 codes
exécutés sur chaque coeur du système ne sont pas
optimisés. On gâcherait alors beaucoup de ressources de
calcul.
Ce TP 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!), puis de vectorisation au sein d'un coeur. On mesurera les performances
de chaque version, et on chiffrera l'impact de chaque optimisation. Ce travail sera réalisé sur des PC classiques sous linux
(mais une mise en oeuvre similaire est possible sous Windows), et en langage C.
Documents à rendre :
Vous rendrez un SEUL document : un fichier Word ou PDF :
- il sera nommé avec vos noms précédés
de "TP1-OptimVectoBlas". Ex : "TP1-OptimVectoBlas-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 ("TP1 : Optimisations sérielles, Vectorisation et BLAS").
- il comportera ensuite :
- une description des optimisations
réalisées (pourquoi ? comment ?), y compris de celles permettant d'engager les unités vectorielles
- 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 les optimisations importantes).
- Taille maximale de vos rapports : 2 pages.
- 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 TP 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 (onglet "Mono-core")
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 problème de taille 2048x2048.