Question

Quelqu'un pourrait-il recommander des documents pour moi d'illustrer les différences entre les multi-CPU multi-core, et hyper-fil? 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 l'apprentissage des commentaires des autres; quelqu'un pourrait-il un commentaire de révision s'il vous plaît?

  1. Je pense que l'hyper-fil est la technologie la plus inférieure parmi eux, mais pas cher. Son idée principale est des registres en double pour gagner du temps de changement de contexte;
  2. processeur multi est meilleure que l'hyper-fil, mais étant donné que différents processeurs sont sur différentes puces, la communication entre les différents processeurs est de latence plus longue que plusieurs noyaux, et en utilisant des puces multiples, il n'y a plus frais et plus la consommation d'énergie qu'avec multi-coeur;
  3. multi-core intègre toutes les CPU sur une seule puce, de sorte que le temps de latence de communication entre les différents processeurs sont considérablement réduits par rapport à multi-processeur. Comme il utilise une puce unique pour contenir toutes les unités centrales, il moins de puissance de consommation et est moins cher qu'un système multi-processeurs.

Merci d'avance, George

Était-ce utile?

La solution

est la première version multi-CPU: Vous auriez une ou plusieurs cartes mère avec un ou plusieurs puces CPU sur eux. Le principal problème ici est que les CPU devrait exposer certaines de leurs données internes à l'autre CPU afin de ne pas obtenir à leur manière.

L'étape suivante a été hyper-threading. Une puce sur la carte mère, mais il y avait quelques pièces deux fois en interne afin qu'il puisse exécuter deux instructions en même temps.

Le développement actuel est multi-core. Il est fondamentalement l'idée originale (plusieurs CPU complète), mais dans une seule puce. L'avantage:. Concepteurs puce peuvent facilement mettre les fils supplémentaires pour les signaux de synchronisation dans la puce (au lieu de les acheminer sur un axe, puis sur la carte mère de monde et en une seconde puce)

ordinateurs super aujourd'hui sont multi-cpu, multi-core. Ils ont beaucoup de cartes mère avec généralement 2-4 processeurs sur eux, chaque CPU est multi-core et chacun a sa propre RAM

[EDIT] Vous avez à peu près ce droit. Juste quelques petits points:

  • Hyper-threading conserve la trace de deux contextes à la fois dans un noyau unique, ce qui expose plus de parallélisme à l'extérieur de la commande du processeur central. Cela permet de maintenir les unités d'exécution alimentés avec le travail, même si un thread est bloqué sur un défaut de cache, branche mispredict, ou attendre les résultats d'instructions à latence élevée. Il est un moyen d'obtenir plus de débit total, sans répliquer beaucoup de matériel, mais si tout ce qu'il ralentit chaque fil individuellement. Voir ce Q & A pour plus de détails et une explication de ce qui était mal avec le libellé précédent du présent paragraphe.

  • Le principal problème avec multi-CPU est que le code en cours d'exécution sur eux finira par accéder à la RAM. Il y a N unités centrales, mais un seul bus pour accéder à la RAM. Donc, vous devez avoir un peu de matériel qui veille à ce que a) chaque CPU obtient une bonne quantité d'accès RAM, b) que les accès à la même partie de la RAM ne causent pas de problèmes et c) le plus important, que CPU 2 sera informé lorsque le processeur 1 écrit à une adresse mémoire qui CPU 2 a dans son cache interne. Si cela ne se produit pas, CPU 2 se fera un plaisir d'utiliser la valeur en cache, sans se soucier 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 CPU 1 va chercher le premier élément de la liste et mettre à jour les pointeurs. CPU 2 fera la même chose. Pour des raisons d'efficacité, les deux unités centrales copieront non seulement les quelques octets dans le cache, mais une « ligne de cache » l'ensemble (quel qu'il soit). L'hypothèse est que, lorsque vous lisez octet X, vous allez bientôt lire X + 1, aussi.

    Maintenant, les deux unités centrales ont une copie de la mémoire dans leur cache. CPU 1 alors chercher l'élément suivant de la liste. Sans synchronisation du cache, il ne sera pas remarqué que CPU 2 a changé la liste aussi, et il va commencer à travailler sur le même point que CPU 2.

    est ce qui rend efficace multi-CPU si compliqué. Les effets secondaires de ce qui peut conduire à une performance qui est pire que ce que vous obtiendriez si le code tout a couru que sur un seul processeur. La solution est multi-core: Vous pouvez facilement ajouter autant de fils que vous devez synchroniser les caches; vous pouvez même copier des données d'un cache à l'autre (la mise à jour pièces d'une ligne de cache sans avoir à vider et recharger), etc. Ou la logique de cache peut faire en sorte que toutes les unités centrales obtiennent la même ligne de cache quand ils accèdent à la même partie de la vraie RAM, bloquant simplement CPU 2 pour quelques nanosecondes jusqu'à ce que CPU 1 a ses modifications.

[EDIT2] La principale raison pour laquelle multicœur est plus simple que multi-cpu est que sur une carte mère, vous ne pouvez pas tous les fils entre les deux puces que vous auriez besoin pour rendre la synchronisation efficace. De plus un signal se déplace uniquement sommets 30cm / ns (vitesse de la lumière dans un fil, vous avez généralement beaucoup moins). Et ne pas oublier que, sur une carte mère à plusieurs couches, les signaux commencent à influencer chaque otelle (crosstalk). Nous aimons à penser que 0 est 0V et 1 est 5V, mais en réalité, « 0 » est quelque chose entre -0,5 (overdrive lors de la suppression d'une ligne de 1-> 0) et .5V et « 1 » est tout ce qui précède 0.8V.

Si vous avez tout à l'intérieur d'une seule puce, des signaux beaucoup plus vite et vous pouvez en avoir autant que vous le souhaitez (ou presque :). En outre, le signal est beaucoup plus facile crosstalk à contrôler.

Autres conseils

Vous pouvez trouver des articles intéressants sur deux processeurs multi-core et Hyper-Threading sur site d'Intel ou dans un court article Université Yale .

J'espère que vous trouverez ici toutes les informations dont vous avez besoin.

En un mot: système multi-CPU ou multi-processeurs a plusieurs processeurs. Un système à noyaux multiples est un système multi-processeur à plusieurs processeurs sur la même matrice. Dans hyperthreading, plusieurs threads peuvent fonctionner sur le même processeur (qui est le temps changement de contexte entre ces multiples fils est très faible).

Multi-processeurs sont là depuis 30 ans, mais la plupart du temps dans les laboratoires. Multi-core est le nouveau multi-processeur populaire. processeurs Server mettent en œuvre aujourd'hui hyperthreading avec multi-processeurs.

Les articles de wikipedia sur ces sujets sont tout à fait d'illustration.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top