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)

Stéphane Vialle


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 :

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 problème de taille 2048x2048.