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)

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 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 :

Travail à effectuer :

Remarques préliminaires :
Fichiers à télécharger :
Exercices :
  1. Optimisations sérielles manuelles et progressives d'un produit de matrices en C (kernel 0) : Enoncé.
  2. Mesurez les performances obtenues avec la bibliothèque OpenBLAS (kernel 1), sur un petit problème (1024x1024) et sur un moyen problème (2048x2048).
  3. Parallélisation sur les coeurs d'un noeud avec OpenMP : Enoncé