Un microprocesseur multi-cœur (multi-core en anglais) est un processeur possédant plusieurs cœurs physiques. Depuis l’arrivée des premiers microprocesseurs double cœurs en 2005, le nombre de cœurs ne cesse d’augmenter dans l’objectif d’améliorer toujours plus la puissance des ordinateurs. On observe cependant un certain nombre de problèmes dus à l’augmentation du nombre de cœurs, et cette simple amélioration technique ne suffit parfois pas à améliorer de façon significative les performances d’un ordinateur.
D’un point de vue technologique, les constructeurs semblent être arrivés devant un mur de fréquence. L’amélioration des performances passe donc aujourd’hui par d’autres évolutions technologiques et, parmi elles, l’augmentation du nombre de cœurs. Cela amène à de nouveaux défis technologiques tels que la gestion des ressources pour alimenter tous les cœurs ou comment réussir à augmenter le nombre de cœurs sur une même puce avec des contraintes telles que la gestion de la place, de la chaleur...
Ces défis techniques ne suffisent pourtant pas à augmenter de façon significative les performances. Pour pouvoir en tirer profit, ce matériel doit pouvoir être pris en compte par les différents systèmes d’exploitation. Or, à l’heure actuelle, ces derniers n’arrivent pas à exploiter 100 % des possibilités.
Les contraintes dues à l’augmentation du nombre de cœurs
Au niveau du matériel (hardware)
Le bruit thermique
D'une partKadin, 2008, page 463, l'évolution technologique permet de doubler le nombre de transistors par unité de surface à chaque incrémentation technologique. Aussi, dans l'idéal, les tensions d'alimentation sont réduites de manière appropriée afin de réduire le bruit thermique. Cependant, les contraintes sont tellement fortes qu'il est maintenant difficile d'apporter de réelles améliorations à chaque incrémentation technologique. En effet, n'ayant pas les moyens de maîtriser parfaitement les tensions idéales, l'augmentation de la puissance de calcul et la miniaturisation des puces conduit à des températures plus élevées sur ces dernières. Ces températures élevées pourraient être dissipées à condition d'améliorer les systèmes de refroidissement. Cependant, des améliorations dans ces techniques de dissipation thermique sont complexes et encombrantes, les rendant économiquement et ergonomiquement inintéressantes.
La miniaturisation des puces a atteint un seuil tel que les fuites de courant électrique produisent un important bruit thermique. Aussi, ces fuites de courant électrique doivent être compensées afin d'acheminer toute l'énergie nécessaire au bon fonctionnement du processeur, entraînant une surconsommation globale du processeur. En outre, l'augmentation des températures peut d'une part causer des dommages physiques permanents à la puce et peut d'autre part dilater les matériaux et donc augmenter les délais de communication au sein du circuit. En général, l'augmentation des températures sur la puce est préjudiciable aux performances du processeur, à sa puissance et à sa fiabilité.
Ainsi, de nouvelles solutions pour outrepasser ces limites thermiques sont nécessaires. Même si les transistors plus petits ont le potentiel d'être utilisés à des fréquences élevées, les contraintes thermiques continuent de restreindre leurs fréquences de fonctionnement. Les concepteurs de puces ont atténué les complications thermiques par l'utilisation des architectures multi-cœurs, qui continuent d'augmenter le débit du système. Plutôt que de se concentrer sur l'amélioration des performances sur un seul threadvon Behren, 2003, page 1, les architectures multi-cœurs permettent d'avoir plusieurs cœurs indépendants qui effectuent simultanément des calculs différents. Toutefois, étant donné qu'il existe plusieurs unités de traitement indépendantes, les faire travailler à des fréquences modérées ne permet pas encore d'obtenir des gains de performance importants. Avec une quantité idéale de parallélisme au niveau thread (TLP), les performances peuvent presque doubler à chaque nouvelle génération technologique. Cependant, une charge de travail donnée a une limite fondamentale à la concurrenceOusterhout, 1996, page 1. Ainsi, cette situation peut se produire lorsque tous les cœurs dans un processeur multi-cœurs ne peuvent pas être utilisés. En fait, le codage et la compilation de TLP est l'un des défis les plus difficiles pour les processeurs multi-cœurs.
Ces dernières années, la gestion dynamique thermique (DTM) est apparue dans les états de l'art comme une méthode pour faire face à des contraintes thermiques liées aux processeurs. Les méthodes DTM permettent de consulter l'état thermique actuel d'un processeur. Pour ce faire, ces informations sont récoltées soit directement au moyen de capteurs de température, soit indirectement à l'aide des analyseurs de performance. Ensuite, des modifications sont apportées aux paramètres de configuration du processeur de façon à régler sa température de manière appropriée. La plupart des techniques DTM entrainent une certaine forme de perte de performances. Par exemple, en diminuant la largeur du pipeline (i.e.: en diminuant le nombre de transistors), la quantité d'énergie dissipée sera diminuée également, mais, en contrepartie, les cycles par instruction seront augmentés. La recherche sur les techniques de DTM tente de maitriser les contraintes thermiques, tout en minimisant la dégradation des performances. L'une des techniques importantes en DTM est la capacité de contrôler dynamiquement l'exploitation physique des paramètres, à savoir, la fréquence et la tension de chaque cœur.
Un espace restreint
D'autre partPark, 2010, page 69, au fur et à mesure que les microprocesseurs se sont miniaturisées, les réseaux de connexions entre les différents éléments constitutifs de ces puces se sont densifiés. Ainsi, les interconnexions au sein des microprocesseurs récents imposent des contraintes majeures au niveau de leurs performances. En effet, aujourd'hui, avec l'augmentation régulière du nombre de cœurs au sein des processeurs multi-cœurs, la densification des interconnexions au sein de ces puces ne cesse d'augmenter également (jusqu'au jour où nous n'aurons plus suffisamment de place sur les puces pour tisser ces réseaux de communication). Pour cette raison, l'augmentation du nombre de cœurs sur les puces afin d'améliorer les performances amène inévitablement à la situation où les interconnexions deviennent le goulot d'étranglement de cette quête de performances.
Ainsi, l'utilisation de circuits intégrés en 3D est une solution permettant de contourner le manque d'espace sur les puces.
Les solutions matérielles étudiées dans ce document
Dans la suite de notre document, afin de répondre à nos deux problématiques d'ordre matériel (hardware) évoquées ci-dessus, une première section proposera une solution permettant de trouver la fréquence optimale et le réglage de la tension idéal de chaque noyau dans un système multi-cœur de telle sorte que l'impact de la contrainte thermique soit le plus petit possible lors de l'exécution et que la performance physique totale soit maximisée, et une deuxième section nous présentera en quoi l'utilisation de circuits intégrés en 3D est une solution permettant de contourner le manque d'espace sur les puces malgré les contraintes que cette nouvelle technologie impose (car il y en a !).
Gestion des ressources
L'augmentation du nombre de cœurs dans les microprocesseurs est une conséquence de l’évolution du matériel. On note cependant de nombreuses répercussions sur les systèmes d’exploitations et plus précisément sur la gestion des ressources par ces derniers. Dans le cas des processeurs mono-cœur, le modèle de Von-neumann a su s’imposer comme un modèle de référence tant au niveau des logiciels qu’au niveau des systèmes d’exploitations grâce à sa simplicité.
Depuis l'apparition des premiers processeurs doubles-cœurs en 2005, aucun modèle n’arrive à s’imposer comme celui de Von-Neumann pour les microprocesseurs mono-cœur. Cela ne va sans poser de problème. Depuis maintenant 5 ans, le nombre de cœurs dans nos machines ne cesse de croitre en passant d’abord de 2 à 3 puis 4, 6 et maintenant 8 cœurs sur la même puce dans les machines grand public et jusque 80 cœurs par puce dans les stations de recherche. Bien qu’en théorie chaque cœur permette de doubler la puissance de calcul de la puce et par conséquent de l’ordinateur, cela ne s’avère pas exact dans la pratique.
Le gain de performance peut se calculer avec la loi d'Amdahl et on observe des résultats inférieurs à 1 même pour les applications qui se prêtent bien au parallélisme. Cela s’explique de deux façons différentes :
Des applications ou algorithmes qui ne sont ou ne peuvent pas ou peu être parallélisés. La gestion des ressources par les systèmes d’exploitation.
Ce second point peut s’expliquer avec la gestion de l’ordonnancement, la gestion des caches ou encore la communication inter-cœurs et/ou processeurs. On verra dans la seconde partie, qu’il existe plusieurs pistes afin d’améliorer les performances pour les systèmes multi-cœurs.
Améliorations apportées au niveau du matériel
Le rapport performance / consommation
Le principe
Le travail réalisé par Michael Kadin et Sherief Reda (Division of Engineering - Brown University)Kadin, 2008, page 464 vise à trouver la fréquence optimale et le réglage de la tension idéal de chaque noyau dans un système multi-cœur de telle sorte que l'impact de la contrainte thermique soit le plus petit possible lors de l'exécution et que la performance physique totale soit maximisée. Pour ce travail, la performance physique totale est définie comme la somme des fréquences d'horloge de tous les conducteurs. Bien que n'étant pas tout à fait exact, la somme des fréquences est un choix raisonnable, et il est généralement corrélé avec le débit total du système, surtout si la charge de travail est bien répartie entre les différents cœurs.
Dans de nombreux systèmes multi-cœurs, trouver les réglages optimaux des paramètres de fonctionnement par énumération exhaustive est impossible à calculer à la volée (au cours de l'exécution des processus) en raison de la complexité combinatoire de l'espace de recherche. Ainsi, pour trouver les fréquences et les tensions optimales au cours de l'exécution, il est nécessaire de faire abstraction de la complexité de la conception d'un processeur dans une formulation mathématique qui peut être rapidement résolue durant le fonctionnement de ce processeur au titre des objectifs d'optimisation et contraintes.
Pour formuler un tel modèle mathématique, Michael Kadin et Sherief Reda se sont heurtés à quelques complications dont voici les raisons: Tout d'abord, au sein de la puce, la chaleur se propage dans les trois dimensions. Ainsi, la puissance thermique libérée par une unité (ici, un transistor) au sein du processeur peut voyager via la matière constituante du processeur et être transmise latéralement à d'autres unités à proximité. De ce fait, la température d'une unité ne dépend pas seulement de la puissance dissipée par cette unité, mais également de celle dissipée par les unités voisines. Une deuxième complication survient avec l'augmentation de la température. En effet, comme nous venons de le voir, ce sont les fuites de courant qui augmentent la température, mais cette augmentation de la température dilate les matériaux et entraîne à son tour une amplification du phénomène de fuites de courant et avec lui une augmentation de la consommation électrique. Par conséquent, la température et la consommation électrique sont étroitement liées par les dépendances due aux fuites de courant (LDT). Troisièmement, le pouvoir de dissipation de la chaleur n'est pas le même partout dans la puce. En effet, une unité au centre de la puce aura plus de mal à dissiper sa chaleur qu'une unité en périphérie qui a moins de voisines et qui, donc, subit moins le rayonnement thermique de ses voisines.