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!