Multi-CPU était la première version: Vous souhaitez avoir un ou plusieurs des cartes mères avec un ou plusieurs processeurs. Le principal problème ici est que le Cpu aurait pour exposer certaines de leurs données internes à l'autre CPU de sorte qu'ils ne serait pas à leur façon.
L'étape suivante a été l'hyper-threading. Une puce sur la carte mère mais il y avait quelques pièces deux fois en interne afin de pouvoir exécuter deux instructions en même temps.
Le développement actuel est multi-core. En gros, c'est l'idée originale (plusieurs Processeurs), mais dans une seule puce. L'avantage: les concepteurs de puces peuvent facilement mettre le fil supplémentaire pour les signaux de synchronisation dans la puce (au lieu d'avoir à les acheminer sur une épingle, puis sur l'encombrement de la carte mère et dans une deuxième puce).
Super ordinateurs d'aujourd'hui sont multi-processeur multi-core: Ils ont beaucoup de cartes mères avec généralement de 2 à 4 Processeurs, chaque PROCESSEUR multi-core et chacun a sa propre RAM.
[EDIT] Tu as assez juste. Juste quelques petits points:
La technologie Hyper-threading doublons interne des ressources afin de réduire les temps de changement de contexte. Les ressources peuvent être: les Registres, une unité arithmétique (de sorte que vous pouvez le faire de plusieurs entier ou même les calculs en virgule flottante simultanément; ou vous pouvez faire un complément et une multiplication en même temps, mais ne pas ajouter et soustraire), de la mémoire cache.
-
Le principal problème avec le multi-PROCESSEUR est que le code s'exécutant sur eux finira par accéder à la RAM. Il y a des N Processeurs, mais un seul bus pour accéder à la RAM. Donc, vous devez disposer d'un matériel qui permet de s'assurer que: a) chaque PROCESSEUR obtient une quantité raisonnable de l'accès à la RAM, b) qui permet d'accéder à la même partie de la RAM n'a pas de problème et c) le plus important, que le PROCESSEUR 2 sera notifié lors de l'UC 1 écrit à la mémoire de l'adresse de PROCESSEUR dont 2 a dans son cache interne. Si cela n'arrive pas, UC 2 fera une joie de l'utilisation de la valeur mise en cache, inconscient du fait qu'il est obsolète
Imaginez que vous avez des tâches dans une liste et que vous souhaitez les diffuser à tous les Processeurs disponibles. Donc UC 1 récupère le premier élément de la liste et mettre à jour les pointeurs. UC 2 va faire la même chose. Pour des raisons d'efficacité, les deux Processeurs ne sera pas seulement copier les quelques octets dans le cache, mais un ensemble de "ligne de cache" (quoi que cela puisse être). L'hypothèse est que, quand vous lisez octet X, vous allez bientôt lire X+1, trop.
Maintenant, les deux Processeurs ont une copie de la mémoire dans leur cache. UC 1 va alors récupérer l'élément suivant de la liste. Sans cache de synchronisation, de ne pas avoir remarqué que le PROCESSEUR 2 a modifié la liste, trop, et il va commencer à travailler sur le même élément que le PROCESSEUR 2.
C'est ce qui rend effectivement multi-CPU si compliqué. Les effets secondaires de ce qui peut conduire à une performance qui est pire que ce que vous obtiendrez si tout le code ne fonctionnait que sur un seul PROCESSEUR. La solution a été multi-core: Vous pouvez facilement ajouter autant de fils que vous devez synchroniser les caches; vous pouvez même copier des données à partir d'une cache à l'autre (mise à jour des pièces d'une ligne de cache, sans avoir à rincer et de le recharger), etc. Ou le cache logique pourrait faire en sorte que tous les Processeurs obtenir la même ligne de cache lors de l'accès à la même partie de la mémoire vive, il suffit de blocage de l'UC 2 pour quelques nanosecondes jusqu'à ce que l'UC 1 a fait ses changements.
[EDIT2] La raison principale pourquoi les multi-core est plus simple que le multi-cpu, c'est que sur une carte mère, vous ne pouvez pas exécuter tous les fils entre les deux puces qui vous auriez besoin de faire de la synchronisation efficace. Plus un seul signal voyages 30cm/ns tops (vitesse de la lumière, dans un fil, vous avez généralement beaucoup moins). Et n'oubliez pas que, sur un multi-couche de la carte mère, les signaux de commencer à s'influencent les uns les autres (diaphonie). Nous aimons à penser que 0 est à 0V et 1 est de 5V mais en réalité, le "0" est quelque chose entre -0.5 V (overdrive lors de la suppression d'une ligne de 1->0) et .5V et "1" est une chose au-dessus de 0,8 V.
Si vous avez tout à l'intérieur d'une seule puce, les signaux d'exécution beaucoup plus rapide et vous pouvez en avoir autant que vous voulez (enfin, presque :). Aussi, le signal de diaphonie est beaucoup plus facile à contrôler.