Différence entre superscalaire et multicœur?


11

Je n'arrive pas à comprendre cela, quelle est la différence entre superscalaire et un processeur multi-core?

Je continue à les mélanger, donc quelques points simples sur ce qu'ils font seraient formidables.


Cela m'embrouille aussi ... Selon wikipedia, les processeurs superscalaires pourraient être à cœur unique ou avoir une conception à plusieurs cœurs. en.wikipedia.org/wiki/Superscalar_processor 2nd phara
Avi Mehenwal

Réponses:


15

Les processeurs super-scalaires signifient que vous envoyez plusieurs instructions au cours d'un même cycle d'horloge. La raison pour laquelle cela est différent du multicœur est que vous n'obtenez qu'un seul compteur d'instructions. Ainsi, vous gardez une trace de plusieurs instructions en vol, mais toutes les instructions proviennent d'un seul programme. Ce n'est encore qu'un processus. Maintenant, j'ai dit "vous obtenez un compteur d'instructions", et techniquement, c'est vrai en ce qu'il n'y a aucun point dans lequel votre code connaîtra une disparité, sauf en utilisant certains schémas de prédiction de branche (exécution spéculative: vous exécutez simultanément les deux branches et jetez le "mauvais" "résultat de la prédiction).

Lorsque vous entrez dans le multicœur, plusieurs flux d'instructions s'exécutent simultanément. La partie importante est que chaque cœur (s'exécutant avec son propre compteur d'instructions) peut également être super-scalaire afin d'exécuter chaque processus plus rapidement!

Il est possible d'avoir un super-scalaire sans pipelining ni exécution dans le désordre en ayant ce qu'on appelle un mot d'instruction très long ou "VLIW". Ceci est également appelé super-scalaire "statique" (c'est-à-dire qu'il est dans le code lui-même). C'est là que vous disposez de suffisamment de composants pour exécuter plusieurs instructions en même temps, et que vous récupérez plusieurs instructions à la fois, puis les exécutez. Dans sa forme la plus simple, imaginez que vous avez dit "ce processeur va toujours chercher et exécuter deux instructions en même temps". Alors tant que le codeur pourrait trouver du travail à faire simultanément dans le même processus, vous doubleriez votre débit! Si vous ne pouviez pas trouver deux instructions à assembler, vous apparieriez simplement une instruction et un NOP. Cette idée n'est pas très bonne surtout parce que si vous faites une meilleure version du processeur qui peut exécuter 3, 4 ou plus d'instructions en même temps, tous vos anciens codes se cassent! Mais ils ont résolu cela d'une manière assez ingénieuse, vous devriez vérifier le calcul d'instructions explicitement parallèle ou des trucs "EPIC" si vous voulez en savoir plus.

Le super-scalaire dynamique avec pipelining peut tirer parti à la fois des instructions indépendantes des données et du parallélisme au niveau des instructions, ce qui en fait une combinaison si puissante. Il vous permet essentiellement, avec suffisamment de matériel, d'exécuter simultanément autant d'instructions indépendantes que possible.

Le super-scalaire dynamique avec pipelining et exécution dans le désordre était essentiellement la limite du parallélisme au niveau des instructions: vous essayiez d'exécuter plusieurs instructions simultanément dans la même étape, essayant de trouver des opérations qui fonctionnaient sans dépendances des données. Vous pourriez finir dans le désordre, vous commenceriez dans le désordre, il y a toutes sortes de choses que vous devez faire pour garder la tête droite tout en faisant des trucs super-scalaires. Multi-core dit "hey programmer! Donnez-moi plusieurs problèmes que je peux résoudre en même temps!" et puis puisque le programmeur est capable de voir des problèmes résolus indépendamment au-delà de quelques lignes d'intervalle dans l'assemblage compilé, ils peuvent programmer plus efficacement ces solutions pour le multicœur.

Le super-scalaire n'est même pas capable de résoudre des problèmes comme «comment exécuter ces deux programmes plus rapidement». Il ne pouvait exécuter chaque programme indépendant plus rapidement.

J'espère que ça aide, désolé si c'est un peu décousu.

--Éditer--

Modifié pour tenir compte du point d'ajs410 selon lequel j'avais confondu plusieurs idées.


Oui, cela a rendu les choses beaucoup plus claires, merci! Soit dit en passant, je pense que le mot que vous recherchez est "exécution spéculative". Quoi qu'il en soit, merci encore.
marsrover

1
Pour rendre les choses clarifiées par @KitScuzz un peu plus compliquées, lisez également HyperThreading
ppeterka

Je pense que cela brouille le super-scalaire, le désordre et le pipelining. Plus précisément, super-scalaire dit "J'ai quatre ALU, donc je peux saisir ces quatre instructions d'ajout (à partir d'un seul thread!) Et les émettre au cours du même cycle d'horloge." L'exécution dans le désordre réorganise le flux d'instructions autour des dépendances de données pour maximiser le parallélisme au niveau de l'instruction. Le pipelining émettra de nouvelles instructions pendant que les anciennes instructions seront en vol. L'exécution dans le désordre et le pipelining ont une forte synergie avec l'exécution superscalaire, mais ne sont pas strictement nécessaires pour satisfaire la définition.
ajs410

Fixé! Désolé pour le retard.
Kit Scuzz

1

Si vous regardez les processeurs précédents comme le 80486 ou le Pentium, un CPU était une seule unité logique de traitement. Il exécute un seul flux d'instructions à la fois. Un seul processeur était également une seule puce de silicium. Si vous vouliez plus de puissance de traitement, vous pourriez acheter une carte mère de serveur coûteuse qui avait des emplacements pour accueillir deux processeurs distincts. Ensuite, vous aviez une machine à deux CPU et donc deux cœurs de traitement.

À un moment donné, la loi de Moore signifiait que nous avions tellement de transistors disponibles dans le silicium que vous pouviez placer tous les circuits de deux processeurs dans une seule puce. Vous avez maintenant la possibilité de nommer la confusion. Dire que vous avez deux processeurs pourrait signifier que vous avez les deux anciens paquets de silicium de style ou le plus récent paquet de silicium unique, mais avec la configuration de traitement de deux processeurs. Pour résoudre ce problème, nous entendons maintenant que le CPU est un package de silicium unique et un Core est une seule unité de traitement logique à l'intérieur.

Super-scalaire fait référence à une technique utilisée dans un noyau pour essayer d'améliorer les performances et lui permettre de traiter plus d'instructions par cycle en moyenne. Un processeur scalaire exécute au plus une instruction par cycle, super-scalaire signifie qu'il peut potentiellement exécuter plus d'une instruction par cycle. Par exemple, si le processeur a une unité fonctionnelle pour l'arithmétique entière et une autre pour la virgule flottante, alors pourquoi ne pas utiliser les deux en même temps pour exécuter deux instructions simultanément. Et si vous avez trois unités entières et deux unités à virgule flottante? Vous disposez désormais d'un potentiel d'exécution parallèle encore plus important. Mais vous avez également besoin de plus de transistors pour la mise en œuvre et d'une logique beaucoup plus compliquée pour le faire fonctionner de manière fiable. Dans le monde réel, vous avez tendance à utiliser le super-scalaire en conjonction avec des conceptions désordonnées car elles se complètent mutuellement.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.