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")

Stéphane Vialle


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 :
Date limite de remise de vos rapports : mardi 19 janvier à 18h. Remise par e-mail à S. Vialle.

Travail à effectuer :

Remarques préliminaires :
Exercices :
  1. Optimisations sérielles progressives d'un produit de matrices en C sous Linux/gcc : Enoncé.
  2. Reprendre les analyses du points 1 dans un autre environnement (ne pas refaire les tests avec Valgrind) :
    1. 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).
    2. Sous Windows/VisualC (sans l'outil Valgrind). Source du squelette en VisualC: BE-src-windows.zip
    3. Sous Linux/gcc utilisez la bibliothèque Atlas pour implanter votre produit de matrices : Enoncé.
  3. 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. 
    1. Combien de W.h consommez-vous pour réaliser le calcul ?
    2. Quels ratio MegaFlops / Watt obtenez-vous ?
  4. Comparer les évolutions de performances et les performances maximales obtenues dans les deux environnements testés.