Spéculation temporelle pour accélérateurs matériels

L’histoire a été marquée par des inventions technologiques majeures sans lesquelles l’informatique ne serait pas la même aujourd’hui. Ainsi, certains citent le XIXe siècle comme date de naissance de l’ordinateur avec la machine analytique de Babbage, tandis que d’autres remontent à l’invention du métier Jacquard au XVIIIe siècle ou encore la pascaline de Blaise Pascal au XVIIe . Quoi qu’il en soit, l’invention du transistor en 1947 puis du circuit intégré dix ans plus tard a révolutionné le développement du matériel informatique moderne.

Alors que le transistor de 1947 mesurait plusieurs centimètres de haut, les transistors des circuits intégrés sont aujourd’hui produits avec une finesse de gravure de quelques nanomètres (soit l’équivalent de seulement quelques dizaines d’atomes de silicium !). La réduction progressive de leur taille a permis d’en intégrer de plus en plus au sein d’un même circuit électronique. Moore quantifiait cette augmentation dans sa loi empirique : le nombre de transistors d’un microprocesseur, l’élément au cœur des ordinateurs, doublait tous les deux ans, suivant donc une loi exponentielle.

La réduction de la taille des transistors leur permet également d’être plus rapides et de consommer moins d’énergie. Les progrès en microélectronique offraient donc aux concepteurs d’ordinateurs un triple gain : un plus grand nombre de transistors, des transistors moins gourmands en énergie et une fréquence de fonctionnement plus élevée. Dennard observa en 1974 que l’évolution de la taille des transistors et de leur consommation se compensaient de telle sorte que la puissance électrique nécessaire pour faire fonctionner un processeur n’évoluait pas au cours des différentes générations. La densité de puissance, la puissance dissipée par surface, restait constante. Chaque nouvelle génération de processeurs pouvait donc réaliser des calculs plus rapidement tout en consommant moins d’énergie par calcul. Les performances et l’efficacité énergétique des processeurs s’amélioraient génération après génération.

Compromis performance/puissance

En électronique numérique, les transistors sont utilisés en « tout ou rien » : un transistor peut avoir deux états stables distincts (représentant une information binaire) ou être en train de commuter, c’est-à-dire de changer d’état. Quelle que soit leur technologie, les transistors ont besoin de puissance électrique pour fonctionner, même lorsqu’ils ne changent pas d’état (la puissance statique) et de puissance supplémentaire pour commuter (la puissance dynamique). Ainsi, plus les transistors commutent, plus ils nécessitent de puissance dynamique. Le temps nécessaire pour qu’un transistor commute varie selon plusieurs paramètres, dont sa tension d’alimentation. Augmenter la tension d’alimentation des transistors leur permet d’être plus rapides, donc d’augmenter la fréquence du circuit, ce qui revient à accroître le nombre de cycles par seconde. Il y a cependant une limite : notamment, cette puissance doit être dissipée par le boitier du circuit sous forme de chaleur. Augmenter la tension d’alimentation et la fréquence accroît les performances aux prix de puissances statique et dynamique plus élevées. Via leur fonctionnement, les technologies de transistors offrent donc un compromis entre les performances de calculs et la puissance électrique nécessaire, quel que soit le type de plateforme.

Puissance et performance d’un transistor

La puissance dissipée par un circuit CMOS peut être modélisée comme suit (Chandrakasan, Sheng et Brodersen 1992). Elle est la somme de sa puissance statique Pstat et de sa puissance dynamique Pdyna. La puissance statique est le produit du courant de fuite des transistors du circuit Ifuite par leur tension d’alimentation VDD. Elle ne varie donc pas selon l’activité du circuit. En revanche, la puissance dynamique est liée à la commutation des transistors et est proportionnelle au carré de la tension d’alimentation, à la fréquence de commutation des transistors (qui est la fréquence de fonctionnement f multipliée par le facteur d’activité α) et la capacité de charge C.

Pstat = VDDIfuite (1.1)

Pdyna = αCfV²DD (1.2)

Les paramètres C et Ifuite sont liés au circuit (technologie de transistors utilisée, nombre de transistors, chemin critique, etc.) et ne peuvent pas être changés. Le paramètre α correspond à la probabilité qu’un transistor commute : il dépend donc directement de l’activité du circuit. Par conséquent, seules la tension d’alimentation et la fréquence peuvent être changées pour modifier la puissance dissipée par le circuit . Augmenter la tension d’alimentation du circuit rend la commutation des transistors plus rapide et donc réduit donc le temps de propagation des signaux. Le circuit peut alors être utilisé à une fréquence plus élevée.

Gestion dynamique de la fréquence et de la tension

Une même technologie de transistors peut donc être utilisée à différents niveaux de puissance et de performance. Ces niveaux sont choisis selon l’objectif à atteindre et différentes contraintes. Pour un circuit destiné au calcul intensif, on cherche à maximiser les performances du circuit tout en respectant une puissance maximale et des contraintes thermiques (la puissance devant être dissipée sous forme de chaleur). Pour un circuit embarqué, il est préférable de minimiser l’énergie utilisée sous contrainte de performance minimale.

Dans certains cas, lorsque les contraintes varient au cours du temps, il peut être intéressant de pouvoir sélectionner dynamiquement le niveau de performance et de puissance : c’est la gestion dynamique de la fréquence et de la tension (Dynamic Voltage and Frequency Scaling, DVFS). Le DVFS permet d’adapter le point de fonctionnement selon les contraintes à chaque instant : la fréquence peut être ajustée en fonction de la charge de travail et la tension réduite pour limiter la puissance nécessaire. Ce mécanisme est notamment utilisé dans les processeurs grand public, car la quantité de travail dépend de l’utilisation et varie, le système peut être alimenté par batterie ou non, etc.

Cependant, la tension et la fréquence ne peuvent pas être accrues indéfiniment. La tension et la fréquence ne sont donc qu’un aspect du compromis entre performance et puissance.

Impact de la microarchitecture des processeurs sur les performances et l’énergie

L’amélioration de la technologie des transistors permettait de rendre les circuits électroniques plus performants et plus efficaces en énergie. À chaque nouvelle génération de transistor, leur miniaturisation permettait d’en implanter de plus en plus sur une même surface de silicium. Notamment, le nombre de transistors dans un processeur doublait à peu près tous les deux ans (loi de Moore). La tension d’alimentation baissait et la fréquence maximale des circuits augmentait proportionnellement à la réduction de la taille, mais la densité de puissance restait constante (Dennard scaling). Les nouveaux processeurs pouvaient donc réaliser des calculs plus rapidement (performance) en consommant moins d’énergie par calcul (efficacité énergétique). En parallèle à l’amélioration de la technologie des transistors, les concepteurs de processeurs et autres circuits cherchent des solutions architecturales pour améliorer les performances et l’efficacité énergétique. Ces améliorations s’appliquent à l’organisation des données et des calculs. Elles sont devenues d’autant plus importantes avec la fin du Dennard scaling dans les années 2000 puis avec la fin de la loi empirique de Moore.

Parallélisme d’instruction

Augmenter le nombre d’instructions exécutées par unité de temps permet d’améliorer les performances d’un processeur. Augmenter la fréquence augmente le nombre de cycles par unité de temps, mais il y a une limite à cette approche. Pour améliorer davantage les performances, il faut donc augmenter le nombre d’instructions exécutées par cycle (Instructions per cycle, IPC) en exploitant le parallélisme au niveau instruction (InstructionLevel Parallelism, ILP). L’exécution d’une instruction requiert plusieurs étapes comme la récupération de l’instruction, son décodage, l’accès à la mémoire, l’exécution arithmétique ou l’écriture du résultat dans les registres. Ces étapes n’utilisent pas forcément les mêmes structures du processeur. Cela signifie que lorsqu’une étape est en cours, les structures du processeur pour les autres étapes sont inutilisées. En divisant le circuit d’exécution d’une instruction en plusieurs étages indépendants et en recouvrant l’exécution de plusieurs instructions successives, plusieurs étages peuvent être utilisés parallèlement. Chaque instruction est alors étalée sur plusieurs cycles d’horloge. L’IPC augmente parce que plus d’instructions sont exécutées chaque seconde. C’est une microarchitecture en pipeline.

Avec un pipeline, la fréquence d’horloge doit être suffisamment basse pour que l’étage le plus lent puisse être exécuté. Il est donc opportun d’équilibrer les étages du pipeline afin d’obtenir la fréquence la plus élevée possible et que chaque étage utilise efficacement ses ressources. Tous les processeurs modernes, hormis quelques exceptions parmi les plus simples, utilisent un pipeline. Par exemple, les processeurs Intel grand public récents utilisent un pipeline à 14 étages. Il est aussi possible d’utiliser plusieurs unités d’exécution (en pipeline ou non) parallèles et de dispatcher le flux d’instructions du programme sur ces unités d’exécution : c’est une microarchitecture superscalaire. Cependant, une microarchitecture en pipeline ou superscalaire nécessite que le processeur vérifie que l’exécution superposée des instructions ne viole pas la sémantique des instructions (aléa ou hazard). En effet, l’architecture du jeu d’instructions (Instruction Set Architecture, ISA) spécifie la sémantique des instructions telles qu’exécutées dans un modèle séquentiel et la microarchitecture doit s’y conformer. Ainsi, si une instruction nécessite une donnée calculée par une instruction précédente proche, il faut arrêter le pipeline  (stall), c’est-à-dire arrêter l’exécution des instructions ultérieures, jusqu’à ce que la donnée soit disponible (data hazard). De manière similaire, si une instruction est un saut conditionnel, le processeur ne connaît pas l’instruction suivante immédiatement (selon si le saut est pris ou non) et doit donc arrêter le pipeline (control hazard). Enfin, si une instruction provoque un défaut de cache, la pénalité due au stall s’ensuivant peut-être de plusieurs centaines de cycles. Ces aléas réduisent donc l’IPC effectif.

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 chatpfe.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

Introduction
Contributions
Plan du document
1 Contexte
1.1 Compromis performance/puissance
1.1.1 Puissance et performance d’un transistor
1.1.2 Gestion dynamique de la fréquence et de la tension
1.2 Impact de la microarchitecture des processeurs sur les performances et l’énergie
1.2.1 Parallélisme d’instruction
1.2.2 Ordonnancement dynamique
1.2.3 Exécution spéculative
1.2.4 Jeu d’instructions vectoriel
1.2.5 Hiérarchie mémoire
1.2.6 Limites
1.3 Architectures explicitement parallèles
1.3.1 Processeur à jeu d’instruction explicitement parallèle
1.3.2 Processeur graphique
1.3.3 Processeur spécialisé pour l’intelligence artificielle
1.3.4 Discussion
1.4 Architectures dédiées
1.4.1 Architecture des FPGA
1.4.2 Modèle de programmation
1.4.3 Exploration de l’espace de conception
1.4.4 Intégration
1.5 Conclusion
2 Spéculation temporelle pour FPGA
2.1 Spéculation temporelle
2.1.1 Fréquence maximale d’un circuit
2.1.2 Overclocking et Undervolting
2.1.3 Variabilité
2.2 Tolérance aux fautes
2.2.1 Fautes, erreurs, pannes
2.2.2 Phénomènes physiques pouvant provoquer une faute
2.2.3 Erreurs temporelles
2.2.4 Comparaison des mécanismes de tolérance aux fautes existants
2.2.4.1 Redondance : duplication et triplication
2.2.4.2 Codes correcteurs d’erreur
2.2.4.3 Redondance basée sur l’arithmétique modulaire
2.2.4.4 Détection basée sur le double échantillonnage
2.2.4.5 Tolérance aux fautes logicielle
2.2.4.6 Tolérance aux fautes au niveau algorithmique
2.2.4.7 Synthèse
2.3 Conclusion
3 Réseaux de neurones convolutifs et FPGA
3.1 Réseaux de neurones convolutifs
3.1.1 Architecture
3.1.2 Types de couches
3.1.3 Optimisations algorithmiques
3.1.4 Représentation des données
3.1.5 Mises en œuvre sur FPGA
3.2 Spéculation temporelle pour accélérateurs de convolution
3.3 Impact des erreurs sur la précision
3.4 Détection d’erreur pour CNN
3.5 Conclusion
4 Spéculation temporelle sûre pour réseaux de neurones convolutifs
4.1 ABFT pour les CNN
4.1.1 Vue d’ensemble
4.1.2 ABFT pour convolution 1D
4.1.3 ABFT pour convolution 2D
4.1.4 ABFT pour sommes de convolution 2D (CNN)
4.1.5 ABFT pour convolution avec pas non unitaire
4.1.6 Autres couches de CNN
4.2 Accélérateur de convolution tolérant aux fautes
4.2.1 Accélérateur de référence
4.2.2 Détection d’erreur pour un accélérateur de convolution
4.2.3 Mise en œuvre des calculs de sommes de contrôle
4.2.3.1 Somme de contrôle de sortie
4.2.3.2 Somme de contrôle d’entrée
4.2.4 Intégration complète
4.2.4.1 Gestion de la fréquence
4.2.4.2 Architectures en streaming et moteur de calcul unique
4.3 Évaluation
4.3.1 Gains en performance et pénalités dues aux erreurs
4.3.2 Correction de la détection d’erreur
4.3.3 Convolution convertie en multiplication de matrice
4.3.4 Plateforme expérimentale
4.3.5 Amélioration des performances
4.3.6 Amélioration de l’efficacité énergétique
4.3.7 Gains en performance, en efficacité énergétique et surcoût dû à la détection d’erreur
4.3.8 Erreurs observées
4.3.9 Faux négatifs
4.4 Discussion
Conclusion

Lire 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 *