88 votes

multi-CPU, multi-core et hyper-thread

Quelqu'un peut-il recommander certains documents à moi pour illustrer les différences entre les multi-PROCESSEUR 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 l'apprentissage en ligne et d'apprendre des autres commentaires; quelqu'un pourrait-il revoir commentaire s'il vous plaît?

  1. Je pense que l'hyper-thread est la plus inférieure de la technologie parmi eux, mais à bas prix. Son idée principale est double des registres pour enregistrer les temps de changement de contexte;
  2. Multi processeur est mieux que l'hyper-thread, mais depuis les différents Processeurs sont sur des puces différentes, la communication entre les différents Processeurs est de plus de latence que le multi-core, et à l'aide de plusieurs puces, il n'y a plus de dépenses et plus de consommation que avec multi-core;
  3. multi-core intègre tous les Processeurs sur une même puce, de sorte que le temps de latence de communication entre les différents Processeurs sont considérablement réduits par rapport aux multi-processeur. Depuis, il utilise une seule puce pour contenir tous les Cpu, la consommation de puissance en moins et est moins cher qu'un multi-processeur.

merci d'avance, George

88voto

Aaron Digulla Points 143830

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.

4voto

Vous pouvez trouver des articles intéressants sur le double processeur, le multicœur et l'hyper-threading sur le site Web d'Intel ou dans un court article de l'Université de Yale .

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

2voto

phaedrus Points 8060

En un mot: multi-PROCESSEUR ou système multi-processeur dispose de plusieurs processeurs. Un système multi-core est un système multi-processeur avec plusieurs processeurs sur le même die. Dans l'hyperthreading, plusieurs threads peuvent s'exécuter sur le même processeur (qui est le contexte de commutateur de temps entre ces threads est très petit).

Multi-processeurs ont été là depuis 30 ans maintenant, mais principalement dans les laboratoires. Multi-core est le nouveau populaire multi-processeur. Processeurs pour serveurs aujourd'hui de mettre en œuvre l'hyperthreading avec multi-processeurs.

Les articles de wikipédia sur ces sujets sont très illustratifs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X