
Calcul parallèle et distribué, et Grilles de calculs
Cours de 3ème année IIC à Supélec
BE d'optimisations sérielles
("course aux MegaFlops")
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 mais dans
plusieurs environnements : en C et en Java, sous Linux et sous Windows.
On comparera à la fin les comportements de chaque environnement.
Documents à rendre :
Vous rendrez un SEUL document par binôme : un fichier Word (.doc) ou PDF :
- il sera nommé avec vos noms précédés
de "BE-OptimSerielles". Ex : "BE-OptimSerielle-Martin-Dupont.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 ("BE d'optimisation sérielle").
- il comportera ensuite :
- pour chaque étape : une description des optimisations
réalisées (pourquoi ? comment ?) et vos mesures de
performances,
- des graphiques de synthèse représentant l'ensemble des gains de performances,
- votre analyse/synthèse de la démarche,
- en annexe : les codes sources des parties importantes du code
à chaque étape (ex : les routines de calculs après
chaque optimisation).
Date limite de remise de vos rapports : mardi 19 janvier à 18h. Remise par e-mail à S. Vialle.
Travail à effectuer :
Remarques préliminaires :
- 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 MegaFlops (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.
Exercices :
- Optimisations sérielles progressives d'un produit de matrices en C sous Linux/gcc : Enoncé.
- Reprendre les analyses du points 1 dans un autre environnement (ne pas refaire les tests avec Valgrind) :
- Sous
Linux avec le compilateur Intel : "icc", installé dans
"/opt/intel/cce/10.1.018/" (si besoin précisez les bons chemins de
bibliothèque dans le makefile).
- Sous Windows/VisualC (sans l'outil Valgrind). Source du squelette en VisualC: BE-src-windows.zip
- Sous Linux/gcc utilisez la bibliothèque Atlas pour implanter votre produit de matrices : Enoncé.
- Mesurez
les performances énergétiques de la version de référence et de la
version la plus efficace de votre code dans les deux environnements
testés.
- Combien de W.h consommez-vous pour réaliser le calcul ?
- Quels ratio MegaFlops / Watt obtenez-vous ?
- Comparer les évolutions de performances et les performances maximales obtenues dans les deux environnements testés.