Pourquoi plus de transistors = plus de puissance de calcul?

43

Selon Wikipedia, la puissance de traitement est étroitement liée à la loi de Moore:

http://en.wikipedia.org/wiki/Moore's_law

Le nombre de transistors pouvant être placés à moindre coût sur un circuit intégré a doublé environ tous les deux ans. La tendance se poursuit depuis plus d'un demi-siècle et ne devrait pas s'arrêter avant 2015 ou plus tard. Les capacités de nombreux appareils électroniques numériques sont étroitement liées à la loi de Moore: vitesse de traitement, capacité de la mémoire, capteurs et même nombre et taille des pixels des appareils photo numériques. Tous ces facteurs s'améliorent également à des taux (à peu près) exponentiels.

En tant que spécialiste de l'architecture informatique, je ne comprends pas pourquoi le fait d'introduire plus de transistors dans un processeur augmenterait sa puissance, car au final, les instructions sont lues / exécutées de manière séquentielle. Quelqu'un pourrait-il expliquer quelle partie me manque?

Oli
la source
10
Plus de transistors = plus de parallélisme
Toby Jaffey
2
C'est vrai, peu importe le nombre de cœurs du processeur.
Thomas O
1
Oui. Plus de transistors signifie que vous pouvez mettre plus d'unités d'exécution parallèles. Cache plus grande. Pipelines plus profonds.
Kaz
1
Le cache est le grand. Je pense que la proportion de l'immobilier en silicium dédié au cache a augmenté. La plupart des performances des processeurs modernes sont imputables à la mise en cache, et celle-ci ne fonctionne que lorsqu'il y a une localité, mais plus les caches sont volumineux, plus l'exigence de localisation est détendue (des applications plus volumineuses avec des modèles d'accès mémoire plus farfelus sont encore accélérées).
Kaz
2
Pensez juste à un multiplicateur. Avec suffisamment de transistors, vous pouvez utiliser une table de recherche complète et effectuer la multiplication complète en une seule étape. Avec moins de transistors, vous devez faire des choses comme une addition répétée.
David Schwartz

Réponses:

29

Beaucoup de choses qui vous donnent plus de puissance nécessitent juste plus de transistors pour les construire. Des bus plus larges adaptent le nombre de transistors dans presque tous les composants du processeur. Les caches haute vitesse ajoutent des transistors en fonction de la taille du cache. Si vous allongez un pipeline, vous devez ajouter des étapes et des unités de contrôle plus complexes. Si vous ajoutez des unités d'exécution pour aider à réduire les goulets d'étranglement dans le pipeline, chacune de ces unités nécessite davantage de transistors, puis les commandes permettant de conserver les unités d'exécution allouées ajoutent encore d'autres transistors.

Le problème est que, dans un circuit électronique, tout se passe en parallèle. Dans le monde du logiciel, les valeurs par défaut sont séquentielles, et les concepteurs de logiciels s’efforcent d’intégrer le parallélisme au logiciel afin qu’il puisse tirer parti de la nature parallèle du matériel. Le parallélisme signifie simplement que plus de choses se passent en même temps, donc équivaut à peu près à la vitesse; plus on peut faire de choses en parallèle, plus vite on peut faire avancer les choses. Le seul véritable parallélisme est ce que vous obtenez lorsque vous avez plus de transistors au travail.

JustJeff
la source
19

Les premières instructions ne sont pas nécessairement "exécutées séquentiellement", même sur un ISA non-VLIW; l'exécution doit seulement apparaître séquentiellement. Une implémentation superscalaire en ordre peut exécuter plus d'une instruction en parallèle avec une autre. Pour que cela soit efficace, il faut augmenter (élargir) le matériel nécessaire au décodage des instructions, ajouter du matériel pour garantir l'indépendance des données des instructions à exécuter en parallèle, augmenter les ressources d'exécution et augmenter généralement le nombre de ports de fichier de registre. Tous ces ajoutent des transistors.

Une implémentation désordonnée, qui permet d’exécuter des instructions ultérieures avant les précédentes, tant qu’il n’ya pas de dépendance de données, utilise du matériel supplémentaire pour gérer la planification des instructions dès que les données deviennent disponibles et ajoute des registres de renommage et du matériel de mappage, en les allouant et en les libérant (davantage de transistors) pour éviter les dangers d'écriture après lecture et d'écriture après écriture. Une exécution dans le désordre permet au processeur d’éviter le blocage.

La réorganisation des charges et des magasins dans un processeur en panne nécessite de s'assurer que les magasins antérieurs à l'ordre du programme transmettent les résultats aux charges ultérieures de la même adresse. Cela implique une logique de comparaison d'adresses ainsi que le stockage des adresses (et de la taille) des magasins (et du stockage des données) jusqu'à ce que le magasin ait été validé en mémoire (le cache). (Pour un ISA avec un modèle de cohérence de mémoire moins faible, il est également nécessaire de vérifier que les charges sont bien ordonnées par rapport aux magasins d'autres processeurs - plus de transistors.)

Le traitement en pipeline ajoute un contrôle supplémentaire et une surcharge de mémoire tampon et empêche la réutilisation de la logique pour différentes parties du traitement des instructions, mais permet aux différentes parties du traitement d'une instruction de se chevaucher dans le temps pour différentes instructions.

L'exécution en pipeline et superscalaire augmente l'impact des dangers liés au contrôle (c.-à-d. Branches et sauts conditionnels). Le pipelining (ainsi que l'exécution dans le désordre) peut retarder la disponibilité de la cible, même pour des sauts inconditionnels. L'ajout de matériel pour prédire les cibles (et la direction des branches conditionnelles) permet de poursuivre l'extraction des instructions sans attendre la partie d'exécution du fichier. processeur pour mettre à disposition les données nécessaires. Les prédicteurs plus précis ont tendance à nécessiter davantage de transistors.

Pour un processeur en panne, il peut être souhaitable de permettre à une charge de la mémoire de s'exécuter avant que les adresses de tous les magasins précédents aient été calculées. Par conséquent, un matériel informatique est nécessaire pour gérer une telle spéculation, incluant potentiellement un prédicteur.

Les caches peuvent réduire la latence et augmenter la bande passante des accès mémoire, mais ajouter des transistors pour stocker les données et stocker les étiquettes (et comparer les étiquettes à l'adresse demandée). Du matériel supplémentaire est également nécessaire pour mettre en œuvre la stratégie de remplacement. La pré-extraction matérielle ajoutera plus de transistors.

L'implémentation de la fonctionnalité dans le matériel plutôt que dans le logiciel peut augmenter les performances (tout en nécessitant plus de transistors). Par exemple, la gestion TLB, des opérations complexes telles que la multiplication ou des opérations en virgule flottante, des opérations spécialisées telles que le décompte des zéros. (L'ajout d'instructions augmente également la complexité du décodage des instructions et généralement celle de l'exécution - par exemple, pour contrôler les parties du matériel d'exécution qui seront utilisées.)

Les opérations SIMD / vectorielles augmentent la quantité de travail effectué par instruction, mais nécessitent davantage de stockage de données (registres plus larges) et utilisent généralement davantage de ressources d'exécution.

(Le multithreading spéculatif pourrait également permettre à plusieurs processeurs d'exécuter plus rapidement un programme à thread unique. Évidemment, l'ajout de processeurs à une puce augmentera le nombre de transistors.)

Avoir plus de transistors disponibles peut également permettre aux architectes d’ordinateur de fournir à un ISA plus de registres visibles par les logiciels, ce qui réduirait potentiellement la fréquence des accès mémoire, qui ont tendance à être plus lente que les accès aux registres et impliquent un certain degré d’indirection (par exemple, l’ajout d’un décalage à la pile). pointeur) qui augmente la latence.

L'intégration - qui augmente le nombre de transistors sur une puce mais pas dans le système - réduit la latence de communication et augmente la bande passante, permettant évidemment une augmentation des performances. (Il y a aussi une réduction de la consommation d'énergie qui peut se traduire par une performance accrue.)

Même au niveau de l'exécution des instructions, l'ajout de transistors peut augmenter les performances. Par exemple, un additionneur de retenue ajoute deux fois les bits supérieurs en parallèle avec différentes hypothèses de retenue des bits inférieurs, en sélectionnant la somme correcte des bits supérieurs lorsque l'exécution des bits inférieurs est disponible, ce qui nécessite évidemment plus de transistors qu'un simple ondulation porter additionneur, mais réduire le retard dans la production de la somme complète. De même, un multiplicateur avec une seule rangée d’addition de retenue-sauvegarde utilise moins de transistors (mais est plus lent) qu’un multiplicateur d’arbre Dadda (ou Wallace) et ne peut pas être mis en pipeline (il devrait donc être répliqué pour permettre à un autre multiplier de commencer son exécution multiplier était en cours).

Ce qui précède peut être épuisant mais n’est pas exhaustif!

Paul A. Clayton
la source
2
Excellente réponse d'un nouveau gars!
Connor Wolf
12

Le nombre de transistors ne correspond pas nécessairement à plus de puissance de traitement. Cependant, avec plus de transistors, le processeur peut exécuter des instructions de plus en plus compliquées qu'auparavant. Par exemple, un processeur avec SSE utilisera des transistors supplémentaires pour implémenter ces instructions complexes (en ajoutant plusieurs nombres en un cycle, par exemple).

Thomas O
la source
2
Alan Kay a calculé que depuis qu'il travaillait sur Smalltalk dans Xerox PARC, nous avons perdu 18 ans de doublage de transistors en raison d'architectures incorrectes et d'inefficacité logicielle, car les ordinateurs ne sont certainement pas aussi rapides que le suggéreraient des doubleurs de transistors.
JPC
5

Autre facteur: à mesure que vous emballez plus de transistors dans une zone donnée, ils deviennent plus petits, ce qui les rend plus rapides.

Leon Heller
la source
À mesure que les transistors se rapprochent, vous obtenez d'autres effets indésirables, tels que l'augmentation du courant de fuite, donc un compromis entre performance et faible consommation d'énergie - la plupart des fabricants semblent avoir opté pour la performance.
Thomas O
4

Les microprocesseurs ont considérablement progressé ces dernières années. Des choses telles que les pipelines plus longs, les branches prédicatives et le cache sur puce ont tous ajouté à la complexité associée à un processeur.

Bien sûr, les bases du traitement de la CPU, extraction, décodage, ALU, écriture sont toujours les mêmes, mais pour accélérer les choses, des pipelines plus longs sont utilisés. Des pipelnes plus longs augmentent les performances pour une exécution continue du code, mais entraînent également des temps de réponse plus importants lorsque les performances du code sont dégradées. Remède, branchement prédictif. Le branchement prédictif est un secret commercial, qui ne divulgue normalement pas le fonctionnement complet de Intel, mais l’utilise simplement pour maintenir les performances aussi élevées que possible sur ses processeurs.

La mémoire cache est beaucoup plus rapide que la RAM, mais que faut-il déplacer de RAM en cache et de cache en RAM ??? Il s’agit là encore de choses exclusives, mais il faut encore une fois des transistors pour les implémenter.

Ainsi, les transistors supplémentaires entrent dans des domaines tels que le pipeline plus long, les algorithmes de branche prédictifs, la mémoire cache et les algorithmes de mémoire.

Sans parler des processeurs multicœurs et des contrôleurs d'accès à la mémoire partagée / aux ressources.

smashtastic
la source