Évolutions matérielles et modèles de programmation

Des architectures innovantes

Devant la complexité du développement de nouveaux processeurs causée par les barrières physiques, les fabricants innovent en concevant de nouvelles architectures moins performantes mais plus efficaces, et les constructeurs associent plusieurs architectures pour en tirer les bénéfices. Aujourd’hui, trois paradigmes d’architectures matérielles prédominent :

les architectures à mémoire partagée disposent plusieurs unités de calcul autour d’une mémoire unique et accessible par tous ;
les architectures à mémoire distribuée proposent des unités de calcul qui possèdent une mémoire propre et où accéder à la mémoire des autres unités dépend de la topologie du réseau ;
les architectures hétérogènes associent des types d’unités de calcul différents, par exemple un processeur central couplé à un accélérateur graphique disposant d’une mémoire propre.

Ces différents paradigmes peuvent être employés dans la même machine : un nœud de calcul dans un superordinateur (mémoire distribuée) peut se composer d’un processeur principal à plusieurs cœurs (mémoire partagée) pouvant délocaliser ses calculs à un accélérateur dédié (architecture hétérogène). L’utilisation de ces paradigmes est liée à l’évolution des architectures matérielles.

Les processeurs multicœurs et l’évolution vers la mobilité

Le processeur central a longtemps fait figure de principale unité de calcul des ordinateurs. Il a, au cours des années, été l’objet de différentes innovations et évolutions qui ont optimisé son fonctionnement : exécution dans le désordre, unités de calcul vectorielles ou prédiction de branches. À la suite des progrès technologiques, la fréquence des calculs des processeurs a régulièrement augmenté, jusqu’au moment où la dissipation thermique par effet Joule est devenue trop importante et le refroidissement, trop coûteux. Dans l’impossibilité d’augmenter davantage cette fréquence, les concepteurs de processeurs ont dupliqué leurs unités de calcul, introduisant de fait les processeurs multicœurs. Cette multiplication des cœurs a été rendue possible par l’évolution continue des techniques de gravure, qui augmentent le nombre de transistors sur une même surface. Cependant, les programmes et applications qui s’exécutaient sur un processeur à un seul cœur doivent être adaptés à ce nouveau paradigme, et cette tâche nécessite parfois de réécrire de larges portions des applications. Seconde évolution notable, l’augmentation de l’efficacité énergétique a permis le développement des ordinateurs portables, puis des smartphones et, désormais, des tablettes tactiles. Les innovations récentes consistent à associer deux unités de calcul de différentes performance et consommation énergétique. Ainsi, l’architecture big.LITTLE du fabricant de processeur ARM [6] associe un cœur à faible consommation énergétique et un second cœur dédié aux applications calculatoires, à destination des smartphones. Par défaut, c’est le cœur LITTLE qui exécute les applications de base ; le cœur big n’est démarré qu’à la demande, de sorte à minimiser les dépenses énergétiques.

Les processeurs graphiques : toujours plus de complexité

Les processeurs graphiques, introduits dans les années 1990, sont composés de centaines, voire de milliers, d’unités de calcul très basiques. Ils sont donc très efficaces pour des calculs répétitifs, par exemple des traitements graphiques. De nouvelles interfaces de programmation et de nouvelles capacités, comme des unités de calcul à virgule flottante double précision, en ont fait des accélérateurs matériels de choix pour les calculs scientifiques. Cependant, les processeurs graphiques souffrent de leur grande consommation énergétique par rapport à des processeurs standards et de la complexité de leur programmation. Ceux-ci ne peuvent s’utiliser, en effet, que dans le cadre d’une architecture hétérogène dans laquelle un processeur central déporte les données et délègue les calculs à l’accélérateur.

L’avènement des processeurs manycore

Créés afin de concurrencer les processeurs graphiques, les processeurs manycore sont l’évolution naturelle des processeurs multicœurs. Ils comportent de plusieurs dizaines à plusieurs centaines de cœurs de calcul reliés par des réseaux sur puce à faible latence. Ces cœurs sont cependant plus performants que ceux d’un processeur graphique, ce qui leur permet d’exécuter des calculs plus complexes. Nous décrivons plus bas deux exemples de tels processeurs : le Xeon Phi d’Intel et le MPPA Manycore de Kalray, qui joue un rôle majeur dans cette thèse.

L’Intel Xeon Phi 

La gamme Xeon Phi [74] du fondeur américain Intel se compose de processeurs manycore comptant entre 60 et 70 cœurs par puce. Ces processeurs sont généralement utilisés en tant qu’accélérateur au côté d’un processeur central classique. Ainsi, le superordinateur chinois Tianhe-2, qui a tenu la tête du TOP500 [117] de 2013 à 2015, utilise des coprocesseurs Xeon Phi. Ces processeurs consomment en général moins qu’un processeur graphique, mais comportent en contrepartie moins de cœurs. Développer des applications sur ces processeurs est aussi moins complexe, puisqu’Intel fournit une suite logicielle complète et supporte les modèles de programmation standards pour architectures à mémoire partagée et architectures à mémoire distribuée. Par conséquent toute application s’exécutant sur un processeur central Intel peut également s’exécuter sur un Xeon Phi sans modification de code. Un travail d’optimisation des performances reste toutefois nécessaire. La soixantaine de cœurs que comporte un Xeon Phi peuvent exécuter simultanément jusqu’à quatre threads et disposent d’une unité de calcul vectorielle de 512 bits.

Le MPPA Manycore de Kalray 

Le processeur MPPA Manycore, conçu par la société française Kalray, expose un fort parallélisme grâce à ses 256 cœurs. Ce processeur, dont la première version a été mise sur le marché en 2013, se différencie par sa relativement faible consommation énergétique, qui s’élève à environ 10 W. De par ses caractéristiques, ce processeur est principalement destiné à des usages hautes performances et/ou embarqués. Les 256 cœurs de calcul du MPPA sont répartis dans seize clusters de calcul, qui communiquent les uns aux autres à travers deux réseaux sur puce toriques, le premier étant dédié aux transferts de données avec une forte bande passante, le second, aux communications avec une faible latence. Quatre clusters supplémentaires, situés en périphérie de la puce, gèrent deux à deux les interfaces d’entrées/sorties. Deux de ces clusters sont ainsi consacrés aux interfaces PCI Express, par exemple pour communiquer avec un processeur hôte, et DDR, afin d’accéder à une mémoire globale attachée, tandis que les deux autres sont dédiés aux interfaces réseau Ethernet et Interlaken [113], cette dernière permettant de connecter efficacement plusieurs processeurs MPPA entre eux. La figure 2.3 schématise ainsi l’agencement spatial global de cette puce. Chaque cluster de calcul comporte seize cœurs, plus un dix-septième, nommé System Core ou Resource Manager selon les cas. Celui-ci exécute un système d’exploitation basique fournissant une interface pour les communications avec le réseau sur puce, ainsi que pour la gestion des processus sur les différents cœurs. Ces cœurs sont caractérisés par leur architecture VLIW (« Very Long Instruction Word »), qui leur permet d’exécuter plusieurs instructions simultanément.

Le rapport de stage ou le pfe est un document d’analyse, de synthèse et d’évaluation de votre apprentissage, c’est pour cela rapport-gratuit.com propose le téléchargement des modèles complet de projet de fin d’étude, rapport de stage, mémoire, pfe, thèse, pour connaître la méthodologie à avoir et savoir comment construire les parties d’un projet de fin d’étude.

Table des matières

1 Introduction
1.1 Microprocesseurs : vers la fin de l’évolution exponentielle ?
1.2 Des applications et des usages toujours plus gourmands en performance
1.3 Le traitement d’images, un domaine applicatif en plein essor
1.4 La compilation, entre applications, bibliothèques et matériel
1.5 Sujet
1.6 Contributions
1.7 Structure de la thèse
2 Évolutions matérielles et modèles de programmation
2.1 Des architectures innovantes
2.1.1 Les processeurs multicœurs et l’évolution vers la mobilité
2.1.2 Les processeurs graphiques : toujours plus de complexité
2.1.3 L’avènement des processeurs manycore
2.2 Modèles de programmation et architectures matérielles
2.2.1 Processeurs multicœurs et programmation parallèle explicite
2.2.2 Passage de messages et mémoire unifiée dans les architectures distribuées
2.2.3 Le flot de données : le parallélisme de tâches explicite
2.2.4 La délocalisation des calculs dans les architectures hétérogènes
2.2.5 Les interfaces de haut niveau : le confort au détriment de la flexibilité ?
2.3 Conclusion
3 Traitement d’images et bibliothèques logicielles
3.1 Le traitement d’images aujourd’hui
3.2 La morphologie mathématique, une branche du traitement d’images
3.3 Des bibliothèques pour le traitement d’images
3.3.1 FREIA, un framework pour l’analyse d’images
3.3.2 SMIL, une bibliothèque moderne d’analyse d’images
3.3.3 Des ponts entre SMIL et FREIA
3.4 Conclusion
4 Compilation d’un langage dynamique vers un langage statique
4.1 Concilier programmabilité et portabilité : le cas du traitement d’images
4.2 Application à SMIL et FREIA
4.2.1 SMIL, une bibliothèque avec une interface Python
4.2.2 FREIA, un framework pour les accélérateurs matériels
4.2.3 Comment combler le fossé ?
4.3 Manipulation et accélération de code Python
4.3.1 RedBaron, un outil pour le refactoring de code Python
4.3.2 Cython, un compilateur de Python vers C
4.4 De SMIL à FREIA
4.4.1 Génération de code C avec Cython
4.4.2 D’une API à l’autre
4.5 Évaluation de l’approche
4.6 Conclusion
5 Parallélisme multiprocesseur à mémoire partagée
5.1 Programmation parallèle sur architecture à mémoire partagée
5.1.1 Les threads, briques de base du parallélisme de bas niveau
5.1.2 Le parallélisme dans les unités de calcul
5.2 SMIL, des traitements d’images nativement parallèles
5.2.1 Le parallélisme dans le traitement d’images
5.2.2 SMIL, un parallélisme natif
5.3 Des applications SMIL parallèles sur un cluster de calcul du MPPA
5.3.1 MPPA et OpenMP
5.3.2 Compilation croisée de SMIL vers un cluster de calcul
5.3.3 Gestion des transferts d’images
5.3.4 Tests de performance
5.4 Conclusion
6 Conclusion

Rapport PFE, mémoire et thèse PDFTélécharger le rapport complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *