Mémoires notifiantes pour applications flux-de-données dynamiques – Nooman
Mémoires notifiantes pour applications flux-de-données dynamiques
Dans l’architecture actuelle des ordinateurs, la mémoire est un composant assujetti aux requêtes du processeur qui impose des transferts incessants, extrêmement énergivores. Or,<br />de nombreuses requêtes sont inutiles. Mon objectif est de doter la mémoire d’une intelligence qui lui permette de supprimer ces requêtes inutiles, et ainsi de diviser par deux l’énergie consommée, afin de concilier nombre accru et croissant de dispositifs numériques et objectif sociétal de neutralité carbone.
Pas d’interruption, pas de scrutation, la synchronisation en toute décontraction
Dans les systèmes sur puce, la mémoire endosse depuis longtemps un rôle pour lequel elle n’est pas conçue : assurer la synchronisation entre différentes tâches, que ce soit dans un contexte mono-processeur les années passées, ou multi-processeurs aujourd’hui, en stockant les variables nécessaires à la mise en œuvre des primitives de synchronisation. Il existe deux grandes familles pour la synchronisation : 1) l’interruption, 2) la scrutation. Une interruption vers un processeur provoque un changement de contexte, ce qui est très coûteux d’un point de vue mémoire. La scrutation consiste à continuellement vérifier l’état d’une variable jusqu’à une valeur attendue, ce qui occupe inutilement le processeur, et conduit tout aussi inutilement à des accès mémoire inutiles. Le projet Nooman propose une nouvelle famille de synchronisation, appelée la notification, qui est déclenchée par la mémoire, comme une interruption, mais qui n’interrompt pas le processeur. Celui-ci scrute sa table de notifications, lorsqu’il est disponible pour une autre tâche, sans solliciter directement la mémoire comme dans le cas de la scrutation classique. Cette technique permet de synchroniser les tâches en toute souplesse.
La nouvelle technique de synchronisation s’appuie sur un nouveau matériel qu’il n’est pas concevable dans le cadre du projet de disposer dans une vraie puce. Il convient donc de prototyper de façon virtuelle une telle approche à travers des outils de simulation fonctionnelle au niveau système. L’objectif étant d’évaluer l’intérêt pour un système basé sur plusieurs processeurs, l’outil Sniper présente les bonnes propriétés pour mener les expérimentations. Un modèle des « mémoires notifiantes » a été mise en œuvre dans l’outil de simulation. Côté applicatif, la spécification d’entrée est une application qui suit le modèle de calcul dit « flot-de-données », qui présente l’avantage d’exprimer explicitement le parallélisme de l’application, mais aussi les points de synchronisation entre les différentes tâches (appelées « acteurs » dans cette approche). Il est possible de générer du code pour différentes cibles matérielles à partir d’une seule et même application flot-de-données. Dans notre cas, l’application générée exploite les nouveaux mécanismes de synchronisation ajoutés dans la plateforme modélisée dans Sniper.
Les résultats montrent que même dans le cas d’une application dite « statique », c’est-à-dire que les points de synchronisation peuvent être anticipés à la compilation de façon à réduire leur influence, notre technique permet d’améliorer de 25% les temps d’exécution, et de réduire de 15% la consommation énergétique, pour un surcoût matériel négligeable (moins de 1%). Pour des applications dites reconfigurables, les résultats sont pour l’instant limitée à une seule application, mais montrent tout de même des améliorations similaires, et surtout que notre approche aide au passage à l’échelle, lorsque le nombre de processeurs augmente.
La technique marche aussi bien pour des architectures dites hautes performances pour des serveurs de calcul, que pour des architectures dites embarquées.
Le placement des données en mémoire reste à étudier. Les résultats obtenus pour des cas d’applications dites « statiques » confirment le caractère fonctionnel de l’approche qui est en rupture par rapport aux solutions actuelles, et laissent espérer des gains intéressants pour les applications dynamiques, qui devaient initialement être également étudiées dans le cadre du projet.
Les études sur le comportement mémoire des applications flot-de-données ont fait l’objet de deux publications aujourd’hui publiées, une en conférence, une autre sous forme d’article de revue internationale. La technique originale de synchronisation est en cours de révision (major revision) pour un article de revue internationale.
L’ère des many-cores, ces architectures comprenant plusieurs cœurs de calcul, est en plein essor. Que ce soit dans le domaine des systèmes embarqués ou des systèmes haute performance, les architectures many-cores, en fournissant plus de cœurs en parallèle, doivent permettre de proposer plus de puissance de calcul pour perpétrer le passage à l’échelle continuelle de l’amélioration des performances. Cependant, ce passage à l’échelle ne sera rendu possible que par des avancées significatives dans trois domaines clés : l’efficacité énergétique, la programmabilité, et la granularité d’exécution. Les progrès technologiques ne seront pas suffisants, ils doivent être accompagnés par des innovations architecturales et système. En particulier, l'héritage des architectures dites de Von Neumann atteint aujourd'hui ses limites. L'augmentation du nombre de cœurs et du nombre de mémoires creuse encore un peu plus le fossé. L'utilisation de réseaux sur puce, ou NoC (Network on Chip), permet d'augmenter la bande passante entre les processeurs et les mémoires, au prix d'une plus forte consommation énergétique et d'une grande latence d'accès aux données, augmentant ainsi les temps d'exécution des applications. L’idéal serait que la mémoire connaisse les besoins du processeur pour envoyer directement les bonnes données. C’est que nous allons faire dans ce projet. L’objectif de ce projet est de proposer une solution architecturale en rupture avec les organisations classiques, qui consiste à donner la possibilité aux mémoires d’être maître sur le réseau et d’initier des transactions en direction des processeurs. Il s’agit donc d’ajouter un composant proche de la mémoire, programmable de façon à connaître les besoins du processeur, et capable d’envoyer directement les données à travers des notifications. Ce concept est appelé notifying memories, ou mémoires notifiantes. Cette capacité des mémoires d’initier des transactions avec le processeur permet d’optimiser les échanges, ce qui conduit à une baisse de la consommation d’énergie, et donc une meilleure efficacité énergétique, en réponse au premier domaine clé identifié. Par ailleurs, plus de 80% des systèmes embarqués sont programmés avec des langages impératifs naturellement séquentiels (type C/C++) inadaptés à la programmation parallèle. Le modèle de programmation data-flow est un paradigme de programmation qui permet au développeur de spécifier explicitement et intuitivement le parallélisme à la fois spatial et temporel d’une application, en faisant totalement abstraction de l’architecture ciblée. Ce modèle possède toutes les caractéristiques requises pour répondre au défi de la programmabilité et de la granularité d’exécution. Une application data-flow est un réseau d’acteurs, chaque acteur étant en charge d’une partie du calcul, communiquant par des files de type premier-arrivé, premier-sorti (FIFO) assurant les transferts de données entres les acteurs. Ce projet s'appuie sur des applications dites dynamiques car leur expressivité permet de spécifier des applications qui dépendent des données (comme le codec HEVC par exemple qu'il est presque inconcevable de spécifier avec des modèles statiques). L'inconvénient est que les conditions d'exécutions d'un acteur nécessite de nombreuses requêtes mémoire, qui sont parfois inutiles. Le concept de notifying memories permet de supprimer tous les accès inutiles à la mémoire, ce qui conduit à une baisse de la consommation énergétique et libère la bande passante pour les accès utiles. Ce concept de notification est unique et nous avons déjà une première publication sur le sujet en guise de preuve du concept. Les excellents résultats obtenus méritent d'autres investigations. L'objectif est de maintenir l'avance sur cette thématique et conforter les résultats à travers la mise au point de cette architecture ainsi que la chaîne d'outils de compilation associée.
Coordination du projet
Kevin Martin (Laboratoire des Sciences et Techniques de l'Information, de la Communication et de la Connaissance)
L'auteur de ce résumé est le coordinateur du projet, qui est responsable du contenu de ce résumé. L'ANR décline par conséquent toute responsabilité quant à son contenu.
Partenaire
Lab-STICC - U-Bretagne Sud Laboratoire des Sciences et Techniques de l'Information, de la Communication et de la Connaissance
Aide de l'ANR 272 480 euros
Début et durée du projet scientifique :
- 42 Mois