multi-PROCESSEUR multi-core et hyper-thread
Quelqu'un pourrait-il me recommander des documents pour illustrer les différences entre multi-CPU, multi-core et hyper-thread? Je suis toujours confus au sujet de ces différences, et sur les avantages/inconvénients de chaque architecture dans différents scénarios.
EDIT: voici ma compréhension actuelle après avoir appris en ligne et apprendre des commentaires des autres; quelqu'un peut-il lire les commentaires s'il vous plaît?
- je pense que le fil hyper-est le plus inférieur la technologie parmi eux, mais pas cher. Son idée principale est la duplication des registres pour gagner du temps de commutation de contexte;
- multi processeur est mieux que hyper-thread, mais puisque les différents CPU sont sur des puces différentes, la communication entre les différentes CPU est de latence plus longue que multi-core, et en utilisant plusieurs puces, il ya plus de dépenses et plus de consommation d'énergie qu'avec multi-core;
- multi-core intègre tous les CPU sur une seule puce, de sorte que la latence de la communication entre les différents CPU est considérablement réduite par rapport au multi-processeur. Comme il utilise une seule puce POUR CONTENIR TOUS les CPU, il consomme moins d'énergie et est moins cher qu'un système multi-processeur.
merci d'avance, George
3 réponses
Multi-CPU était la première version: vous auriez un ou plusieurs tableaux principaux avec un ou plusieurs puces CPU sur eux. Le principal problème ici était que les CPU devaient exposer certaines de leurs données internes aux autres CPU pour qu'ils ne se mettent pas en travers de leur chemin.
l'étape suivante a été hyper-threading. Une puce sur la carte principale, mais il avait quelques pièces deux fois à l'interne afin qu'il puisse exécuter deux instructions en même temps.
Le développement actuel est multicœur. Il s'agit essentiellement de l'idée originale (plusieurs CPU complets) mais en une seule puce. L'avantage: les concepteurs de puces peuvent facilement placer les fils supplémentaires pour les signaux de synchronisation dans la puce (au lieu d'avoir à les acheminer sur une broche, puis sur la carte principale bondée et dans une deuxième puce).
Super ordinateurs aujourd'hui sont multi-cpu, multi-core: ils ont beaucoup de mainboards avec généralement 2-4 CPUs sur eux, chaque CPU est multi-core et chacun a sa propre RAM.
[EDIT] Tu as assez juste. Juste quelques points mineurs:
-
Hyper-threading conserve la trace de deux contextes à la fois dans un seul noyau, exposant plus de parallélisme avec le noyau CPU hors de l'ordre. Cela maintient les unités d'exécution alimentées avec du travail, même si un thread est bloqué sur une erreur de cache, une fausse branche, ou en attente des résultats des instructions de haute latence. C'est un moyen d'obtenir plus de débit total sans trop répliquer. le matériel, mais si quelque chose, il ralentit chaque fil individuellement. voir cette Q&R pour plus de détails , et une explication de ce qui était erroné avec le libellé précédent de ce paragraphe.
-
le principal problème avec le multi-CPU est que le code qui tourne sur eux va éventuellement accéder à la RAM. Il n'y a Qu'un seul bus pour accéder à la RAM. Donc vous devez avoir du matériel qui s'assure que a) chaque CPU a une bonne quantité de RAM accès, b) que les accès à la même partie de la RAM ne causent pas de problèmes et c) surtout, que CPU 2 sera averti lorsque CPU 1 écrira à une adresse mémoire que CPU 2 a dans son cache interne. Si cela ne se produit pas, CPU 2 utilisera volontiers la valeur cache, ignorant le fait qu'elle est périmée
imaginez que vous avez des tâches dans une liste et que vous voulez les étendre à tous les CPU disponibles. Ainsi CPU 1 va récupérer le premier élément de la liste et mettre à jour le pointeur. CPU 2 fera de même. Pour des raisons d'efficacité, les deux CPU ne copient pas seulement les quelques octets dans le cache, mais une "ligne de cache" complète (quelle que soit sa forme). L'hypothèse est que, lorsque vous lirez byte X, vous lirez bientôt X+1, aussi.
maintenant les deux CPU ont une copie de la mémoire dans leur cache. CPU 1 récupérera alors l'article suivant de la liste. Sans synchronisation de cache, il n'aura pas remarqué que CPU 2 a changé la liste, aussi, et il commencera à travailler sur le même élément que CPU 2.
c'est ce qui rend le multi-CPU si compliqué. Les effets secondaires de ceci peuvent conduire à une performance qui est pire que ce que vous obtiendriez si le code entier courait seulement sur un CPU simple. La solution était multi-core: vous pouvez facilement ajouter autant de fils que vous avez besoin pour synchroniser les caches; vous pouvez même copier des données d'un cache à un autre (mise à jour pièces d'une ligne de cache sans avoir à le vider et le recharger), etc. Ou la logique de cache pourrait assurez-vous que tous les CPU reçoivent la même ligne de cache lorsqu'ils accèdent à la même partie de la RAM réelle, bloquant simplement CPU 2 pendant quelques nanosecondes jusqu'à ce que CPU 1 ait fait ses modifications.
[EDIT2] la raison principale pour laquelle multi-core est plus simple que multi-cpu est que sur une carte principale, vous ne pouvez tout simplement pas exécuter tous les fils entre les deux puces dont vous avez besoin pour rendre la synchronisation efficace. Plus un signal ne parcourt que 30cm/ns Maximum (vitesse de la lumière; dans un fil, vous avez généralement beaucoup de peu.) Et n'oubliez pas que, sur une carte principale multicouche, les signaux commencent à s'influencer mutuellement (diaphonie). Nous aimons à penser que 0 est 0V et 1 est 5V mais en réalité, " 0 " est quelque chose entre -0,5 V (overdrive en laissant tomber une ligne de 1->0) et .5V et "1" est tout 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 :). En outre, signal crosstalk est beaucoup plus facile à contrôler.
vous pouvez trouver des articles intéressants sur le Dual CPU, multi-core et hyper-threading sur Intel's website ou dans un court article de Yale University .
j'espère que vous trouverez ici toutes les informations dont vous avez besoin.
en un mot: multi-processeur ou multi-processeur système a plusieurs processeurs. Un système multi-core est un système multi-processeur avec plusieurs processeurs sur le même die. En hyperthreading, plusieurs threads peuvent s'exécuter sur le même processeur (c'est-à-dire que le temps de changement de contexte entre ces threads multiples est très petit).
Multi-processeurs sont là depuis 30 ans maintenant, mais surtout dans les laboratoires. Multi-core est le nouveau multi-processeur populaire. Processeurs pour serveurs de nos jours mettre en œuvre hyperthreading avec multi-processeurs.
les articles de wikipedia sur ces sujets sont assez illustratifs.