Warum bedeuten mehr Transistoren mehr Rechenleistung?

43

Laut Wikipedia ist die Rechenleistung stark mit Moores Gesetz verbunden:

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

Die Anzahl der Transistoren, die kostengünstig auf einer integrierten Schaltung platziert werden können, hat sich ungefähr alle zwei Jahre verdoppelt. Der Trend hält seit mehr als einem halben Jahrhundert an und wird voraussichtlich nicht vor 2015 oder später aufhören. Die Fähigkeiten vieler digitaler elektronischer Geräte hängen stark vom Moore-Gesetz ab: Verarbeitungsgeschwindigkeit, Speicherkapazität, Sensoren und sogar die Anzahl und Größe der Pixel in Digitalkameras. All dies verbessert sich ebenfalls mit (ungefähr) exponentiellen Raten.

Als jemand mit Hintergrundwissen in Computerarchitektur verstehe ich nicht, warum das Einsetzen von mehr Transistoren in einer CPU die Leistung steigern würde, da Befehle letztendlich grob sequentiell gelesen / ausgeführt werden. Kann mir jemand erklären, welcher Teil mir fehlt?

Oli
quelle
10
Mehr Transistoren = mehr Parallelität
Toby Jaffey
2
Es ist wahr, egal wie viele Kerne der Prozessor hat.
Thomas O
1
Ja. Mehr Transistoren bedeuten, dass Sie mehr parallele Ausführungseinheiten einsetzen können. Größerer Cache. Tiefere Pipelines.
Kaz
1
Cache ist der große. Ich denke, dass der Anteil der für den Cache bestimmten Siliziumimmobilien gestiegen ist. Die meiste Leistung moderner Prozessoren ist auf das Caching zurückzuführen. Das Caching funktioniert nur, wenn die Lokalität vorhanden ist. Je größer die Caches, desto entspannter ist die Anforderung an die Lokalität (größere Anwendungen mit verrückteren Speicherzugriffsmustern werden immer noch beschleunigt).
Kaz
2
Denken Sie nur an einen Multiplikator. Mit genügend Transistoren können Sie eine vollständige Nachschlagetabelle verwenden und die gesamte Multiplikation in einem Schritt durchführen. Mit weniger Transistoren müssen Sie Dinge wie das wiederholte Hinzufügen tun.
David Schwartz

Antworten:

29

Viele Dinge, die Ihnen mehr Leistung bieten, erfordern nur mehr Transistoren, um sie zu bauen. Breitere Busse erhöhen die Anzahl der Transistoren in fast allen Prozessorkomponenten. Hochgeschwindigkeits-Caches fügen Transistoren entsprechend der Cachegröße hinzu. Wenn Sie eine Pipeline verlängern, müssen Sie Stufen und komplexere Steuereinheiten hinzufügen. Wenn Sie Ausführungseinheiten hinzufügen, um einen Engpass in der Pipeline abzumildern, sind für jede Ausführung mehr Transistoren erforderlich. Anschließend werden durch die Steuerelemente für die Zuordnung der Ausführungseinheiten noch mehr Transistoren hinzugefügt.

Die Sache ist, in einer elektronischen Schaltung geschieht alles parallel. In der Software-Welt ist die Vorgabe, dass die Dinge sequentiell ablaufen, und Software-Designer bemühen sich sehr, Parallelität in die Software zu integrieren, damit sie die Parallelität der Hardware nutzen kann. Parallelität bedeutet nur, dass mehr Dinge gleichzeitig passieren, was ungefähr der Geschwindigkeit entspricht. Je mehr Dinge gleichzeitig erledigt werden können, desto schneller können Sie Dinge erledigen. Die einzige echte Parallelität ergibt sich, wenn mehr Transistoren im Einsatz sind.

JustJeff
quelle
19

Erste Anweisungen werden nicht notwendigerweise "sequentiell ausgeführt", auch nicht auf einer Nicht-VLIW-ISA. Die Ausführung muss nur sequentiell erfolgen. Eine in Auftrag gegebene superskalare Implementierung kann mehr als einen Befehl parallel zu einem anderen ausführen. Um dies effektiv zu erreichen, muss die Hardware zum Decodieren von Befehlen erhöht (erweitert) werden, Hardware muss hinzugefügt werden, um die Datenunabhängigkeit von Befehlen sicherzustellen, die parallel ausgeführt werden sollen, die Ausführungsressourcen müssen erhöht werden, und die Anzahl der Registerdateiports wird im Allgemeinen erhöht. Alle diese fügen Transistoren hinzu.

Eine Out-of-Order-Implementierung, die die Ausführung späterer Anweisungen vor früheren zulässt, sofern keine Datenabhängigkeiten bestehen, verwendet zusätzliche Hardware, um die Planung von Anweisungen zu übernehmen, sobald Daten verfügbar sind, und fügt Umbenennungsregister und Hardware für die Zuordnung hinzu. Zuweisen und Freigeben von Transistoren (mehr Transistoren), um das Risiko des Schreibens nach dem Lesen und des Schreibens nach dem Schreiben zu vermeiden. Durch die Ausführung außerhalb der Reihenfolge kann der Prozessor ein Abwürgen vermeiden.

Das Umordnen von Ladevorgängen und Speichern in einem nicht in der Reihenfolge befindlichen Prozessor erfordert, dass sichergestellt wird, dass frühere Speicher in der Programmreihenfolge die Ergebnisse an spätere Ladevorgänge derselben Adresse weiterleiten. Dies impliziert eine Adressvergleichslogik sowie einen Speicher für die Adressen (und die Größe) von Speichern (und den Speicher für die Daten), bis der Speicher in den Speicher (den Cache) übernommen wurde. (Bei einem ISA mit einem weniger schwachen Speicherkonsistenzmodell muss außerdem überprüft werden, ob die Ladevorgänge in Bezug auf die Speicher anderer Prozessoren korrekt sind - mehr Transistoren.)

Pipelining fügt zusätzlichen Steuerungs- und Pufferaufwand hinzu und verhindert die Wiederverwendung von Logik für verschiedene Teile der Befehlsverarbeitung, ermöglicht jedoch, dass sich die verschiedenen Teile der Befehlsverarbeitung für verschiedene Befehle zeitlich überlappen.

Pipelining und superskalare Ausführung erhöhen die Auswirkung von Kontrollgefahren (dh bedingte Verzweigungen und Sprünge). Das Pipelining (und auch die Ausführung außerhalb der Reihenfolge) kann die Verfügbarkeit des Ziels von sogar bedingungslosen Sprüngen verzögern, sodass das Hinzufügen von Hardware zur Vorhersage von Zielen (und der Richtung für bedingte Verzweigungen) das Abrufen von Anweisungen fortsetzen kann, ohne auf den Ausführungsteil von zu warten Prozessor, um die erforderlichen Daten zur Verfügung zu stellen. Genauere Prädiktoren erfordern tendenziell mehr Transistoren.

Für einen Prozessor außerhalb der Reihenfolge kann es wünschenswert sein, die Ausführung eines Ladevorgangs aus dem Speicher zuzulassen, bevor die Adressen aller vorangehenden Speicher berechnet wurden. Daher ist eine gewisse Hardware erforderlich, um solche Spekulationen zu handhaben, möglicherweise mit einem Prädiktor.

Caches können die Latenz reduzieren und die Bandbreite der Speicherzugriffe erhöhen, fügen jedoch Transistoren hinzu, um die Daten und Tags zu speichern (und Tags mit der angeforderten Adresse zu vergleichen). Zusätzliche Hardware ist auch erforderlich, um die Ersetzungsrichtlinie zu implementieren. Beim Hardware-Prefetching werden mehr Transistoren hinzugefügt.

Das Implementieren von Funktionalität in Hardware anstelle von Software kann die Leistung erhöhen (wobei mehr Transistoren erforderlich sind). Zum Beispiel TLB-Verwaltung, komplexe Operationen wie Multiplikations- oder Gleitkommaoperationen, spezialisierte Operationen wie führende Nullen zählen. (Das Hinzufügen von Befehlen erhöht auch die Komplexität der Befehlsdecodierung und typischerweise auch die Komplexität der Ausführung - z. B. um zu steuern, welche Teile der Ausführungshardware verwendet werden.)

SIMD / Vektor-Operationen erhöhen den Arbeitsaufwand pro Befehl, erfordern jedoch mehr Datenspeicher (breitere Register) und verbrauchen in der Regel mehr Ausführungsressourcen.

(Durch spekulatives Multithreading können auch mehrere Prozessoren ein einziges Thread-Programm schneller ausführen. Offensichtlich erhöht das Hinzufügen von Prozessoren zu einem Chip die Transistoranzahl.)

Wenn mehr Transistoren zur Verfügung stehen, können Computerarchitekten einer ISA auch mehr Register zur Verfügung stellen, die für die Software sichtbar sind, wodurch möglicherweise die Häufigkeit von Speicherzugriffen verringert wird, die tendenziell langsamer sind als Registerzugriffe und einen gewissen Grad an Indirektion beinhalten (z. B. Hinzufügen eines Offsets zum Stapel) Zeiger), der die Latenz erhöht.

Die Integration - die die Anzahl der Transistoren auf einem Chip erhöht, jedoch nicht im System - verringert die Kommunikationslatenz und erhöht die Bandbreite, was offensichtlich eine Leistungssteigerung ermöglicht. (Es gibt auch eine Reduzierung des Stromverbrauchs, was zu einer Leistungssteigerung führen kann.)

Selbst auf der Ebene der Befehlsausführung kann das Hinzufügen von Transistoren die Leistung erhöhen. Beispielsweise addiert ein Übertragsauswahladdierer obere Bits zweimal parallel mit unterschiedlichen Annahmen des Übertrags von den unteren Bits, wobei die korrekte Summe der oberen Bits ausgewählt wird, wenn der Übertrags von den unteren Bits verfügbar ist, was offensichtlich mehr Transistoren als einen einfachen erfordert Ripple-Carry-Addierer, aber Verringerung der Verzögerung bei der Erzeugung der vollen Summe. In ähnlicher Weise verwendet ein Multiplizierer mit einer einzelnen Zeile von Carry-Save-Addierern weniger Transistoren (ist jedoch langsamer) als ein Dadda- (oder Wallace-) Baum-Multiplizierer und kann nicht per Pipeline übertragen werden (müsste also repliziert werden, damit ein anderer Multiplizierer mit der Ausführung eines früheren beginnt multiplizieren war in Bearbeitung).

Das oben Genannte mag anstrengend sein, ist aber nicht erschöpfend!

Paul A. Clayton
quelle
2
Hervorragende Antwort von einem neuen Mann!
Connor Wolf
12

Die Anzahl der Transistoren entspricht nicht notwendigerweise einer höheren Verarbeitungsleistung. Bei einer höheren Anzahl von Transistoren kann der Prozessor jedoch zunehmend kompliziertere Befehle ausführen als zuvor. Beispielsweise wird ein Prozessor mit SSE zusätzliche Transistoren verwenden, um diese komplexen Anweisungen zu implementieren (beispielsweise das Hinzufügen vieler Zahlen in einem Zyklus).

Thomas O.
quelle
2
Alan Kay errechnete, dass wir seit seiner Arbeit an Smalltalk in Xerox PARC aufgrund falscher Architekturen und ineffizienter Software 18 Jahre an Transistorverdopplung verloren haben, da Computer mit Sicherheit nicht so schnell sind, wie es die Transistorverdopplung vermuten lässt.
jpc
5

Ein weiterer Faktor: Wenn Sie mehr Transistoren in einen bestimmten Bereich stopfen, werden sie kleiner und damit schneller.

Leon Heller
quelle
Je näher die Transistoren zusammenrücken, desto mehr unerwünschte Effekte treten auf, wie z. B. ein erhöhter Leckstrom. Dies führt zu einem Kompromiss zwischen Leistung und geringer Leistung - die meisten Hersteller scheinen sich für Leistung entschieden zu haben.
Thomas O
4

Mikroprozessoren haben sich in den letzten Jahren erheblich weiterentwickelt. Dinge wie längere Pipelines, prädikative Verzweigung und On-Chip-Cache haben die Komplexität eines Prozessors noch erhöht.

Sicher, die Grundlagen der CPU-Verarbeitung, des Abrufens, Dekodierens, ALUs und Schreibens sind immer noch dieselben, aber um die Dinge zu beschleunigen, werden längere Pipelines verwendet. Längere Pipelnes erhöhen die Leistung für eine kontinuierliche Codeausführung, verursachen jedoch auch längere Trefferzeiten, wenn der Code verzweigt, wodurch die Leistung beeinträchtigt wird. Abhilfe, prädiktive Verzweigung. Predictive Branching ist ein Geschäftsgeheimnis, das Intel normalerweise nicht preisgibt. Verwenden Sie es einfach, um die Leistung auf den CPUs so hoch wie möglich zu halten.

Cache-Speicher ist viel schneller als RAM, aber was soll man vom RAM in den Cache und vom Cache zurück in den RAM verschieben? Das ist wieder proprietäres Material, aber es werden wieder Transistoren benötigt, um es zu implementieren.

Die zusätzlichen Transistoren werden beispielsweise für längere Pipelines, prädiktive Verzweigungsalgorithmen, Cache-Speicher und Speicheralgorithmen verwendet.

Dies gilt auch für Multi-Core-Prozessoren und gemeinsam genutzte Speicher- / Ressourcenzugriffscontroller.

smashtastic
quelle