Propositions d’emploi, de stages et de thèses

Sid Touati,
Professeur à l’université Nice Sophia Antipolis, UFR des sciences

2017-2018

Les étudiants intéressés peuvent me contacter en m’envoyant un CV + relevés de notes à Sid POINT Touati AT inria POINT fr.

Table des matières

1  Stage de master 2 informatique : Codes stencils et calculs hautes performances

Laboratoire d’accueil:
INRIA Sophia Antipolis, équipe-projet AOSTE, en collaboration avec l’équipe PARKAS (INRIA-Paris, ENS-Ulm).
Encadrants
Sid Touati (professeur UNS), Albert Cohen (DR INRIA et ENS-Paris)
Gratification de stage:
Fonction de la situation administrative du stagiaire.
Possibilité de poursuite en thèse:
Une prolongation en thèse est possible, sur bourse de l’École Doctorale ou financement CIFRE.

1.1  Description du stage

Les codes de type stencil intègrent des codes noyaux de calcul utilisés dans des applications de simulation et d’algèbre linéraire en calcul scientifique (simulation de phénomènes physiques par exemple), ainsi que dans les réseaux de neuronnes convolutionnels utilisés en apprentissage et en classification (reconnaissance d’images par exemple). Un stencil est typiquement un nid de boucles impliquées qui traverse un tableau à plusieurs dimensions, représentant par exemple l’espace physique en trois dimensions. Le calcul de chaque élément du tableau nécessite l’accès à des cases adjacentes selon les trois dimensions (x,y,z). Une boucle extérieure, dite boucle de répétition ou boucle temporelle, sert à simuler le pas de simulation, i.e. répéter plusieurs fois le noyau de calculs stencil par unité de temps simulé. Un pseudo-code de stencil est donné ci dessous:

FOR t=0, NT /* boucle de répétition */
  FOR z=0, NZ 
    FOR y=0, NY
      FOR x =0, NX
        B[x][y][z] = A[x-1][y][z] + A[x][y+1][z] + A[x+1][y][z] ; 
      ENDFOR
    ENDFOR
  ENDFOR
  FOR z=0, NZ 
    FOR y=0, NY
      FOR x =0, NX
        A[x][y][z] = B[x-1][y][z] + B[x][y+1][z] + B[x+1][y][z] ; 
      ENDFOR
    ENDFOR
  ENDFOR
ENDFOR

Les stencils occupent souvent la majeure partie du temps d’exécution dans les applications de calcul numérique. Heureusement, ces codes ont un très grand potentiel d’optimisation, que ce soit en terme d’accès mémoire (meilleure utilisation des caches, des registres) ou de calcul parallèle (vectorisation, threads).

En effet, les codes stencils ont des accès mémoire réguliers: les éléments de tableau sont accédés à travers un adressage affine selon les indices de boucles. Ces codes réguliers sont analysables avec des méthodes automatiques dites polyédriques. En revanche, l’ordre et l’organisation des accès mémoire tel qu’exprimés au niveau du code source sont malheureusement mal adaptés à la hiérarchie mémoire des processeurs: la localité temporelle de ces accès est mal exploitée, et les éléments adjacents sur des tableaux multidimensionnels sont en fait éloignés en mémoire. La conséquence est que les noyaux de stencils ne profitent pas pleinement des capacités des caches.

Sur un autre aspect, la régularité des noyaux de stencils facilite les analyses des dépendances de données. Cela permet d’exploiter le parallélisme intrinsèque, en utilisant des threads ou un langage tel qu’OpenMP, ainsi que des instructions vectorielles du processeur.

Classiquement, un code scientifique comme un noyau stencil peut être optimisé selon divers aspects comme suit:

Le problème est qu’aucune de ces optimisations prises séparément ne peut faire aboutir à des performances maximales (arriver le plus proche possible des performances crêtes de la machine cible). Il est donc nécessaire de combiner plusieurs transformations et optimisations de code pour espérer s’approcher des performances crêtes. Les méthodes complètement automatiques d’optimisation de code échouent à trouver la bonne combinaison des transformations à appliquer. Par conséquent, dans le cadre de ce stage de recherche, nous construirons une combinaison d’optimisations avancées et spécialisées pour le domaine des noyaux de calcul de type stencil.

1.2  Plan du stage de recherche

Les différentes composantes du stage, sans ordre particulier, sont les suivantes:

  1. Étude bibliographique.
  2. Modélisation de différentes formes d’optimisation sur l’utilisation des caches et des registres d’une part, et sur la vectorisation et le parallélisme d’autre part.
  3. Extraction de noyaux de calcul de stencil d’applications réelles (e.g., benchmark HPGMG de résolution de problèmes multi-grille).
  4. Décomposition de ces noyaux en briques élémentaires, optimisables selon les techniques en cours modélisation.
  5. Analyse des performances sur architecture Intel récente.

1.3  Prérequis

1.4  Plan du stage de recherche

Le plan du stage est le suivant :

  1. Ecrire le code source transformé en appliquant les optimisations indiquées dans la section précédente.
  2. Faire des expériences d’évaluation et d’analyse des performances sur une machine cible (un processeur Intel récent).
  3. Le code source transformé devra ensuite être écrit de façon paramétrée pour l’adapter à d’autres machines cible.
  4. Définir les contraintes sur les paramètres du code source selon les caractéristiques de la machine cible.

2  Projet d’étude de master 1 informatique ou élèves ingénieurs en 4e année : Analyse et amélioration des performances d’une librairie de réseaux de neurones

ENAS est une librairie C++ implémentée à l’INRIA-Sophia. Elle sert à simuler la communication entre des groupes de neurones du cerveau humain. C’est une application qui fait usage de parallélisme OpenMP (threads C++) pour être exécutée sur de grands calculateurs. Malgré l’usage de parallélisme OpenMP, les performances de l’application ne sont pas suffisantes pour simuler un grand nombre de neurones.
L’objectif de ce projet master informatique est d’analyser les performances de l’application. Cela servira à un travail ultérieur destiné à améliorer les performances.

2.1  Plan de travail

Le travail à effectuer par l’étudiant est le suivant :

  1. Profilage et analyse des performances de l’application ENAS pour détecter les goulots d’étranglement.
  2. Refaire les expériences selon le nombre de threads OpenMP afin d’étudier la scalabilité de l’application.
  3. Analyse statistique de variabilité des performances.
  4. Etudier et appliquer des méthodes d’optimisation de code avec g++. Le compilateur choisi est de préférence un logiciel libre.
Encadrants
Sid Touati (UNS), Bruno Cessac (DR INRIA).
Connaissances souhaitées (mais non obligatoires):
Langage C++, OpenMP.

Ce document a été traduit de LATEX par HEVEA