cpu transistoren
Warum hat eine CPU Millionen heutzutage Milliarden von Transistoren sie macht nichts anderes als Daten entgegennehmen. Decodieren Information weiterreichen an die Peripherie. Dafür braucht man Millionen von Transistoren. So viele Maschinenbefehle hat ein Prozessor ja gar nicht. Warum braucht man bei den relativ geringen Menge an Maschinen Befehl Milliarden Transistoren
0 Stimmen
5 Antworten
Ein Befehl kann einen Zugriff auf Daten auslösen. Wenn die Informationen aus 128 Teilen besteht, braucht es gleich mal 128 Transistoren. Erfolgt die Weiterverarbeitung parallel mit dem nächsten Befehl braucht es wieder andere Transistoren. Also, je mehr desto schneller desto besser.
Weil man gerne mehr als einen Befehl gleichzeitig ausführen möchte. Viele Strukturen innerhalb einer CPU sind mehrfach vorhanden. Das fängt direkt bei den CPU-Kernen an, die sind in der Regel identisch. Bei einer CPU mit 8 Kernen kann man also direkt schonmal davon ausgehen, dass jede Struktur innerhalb eines Kerns mindestens 8 mal in der CPU als ganzes vorkommt. Aber auch innerhalb eines Kernes sind Strukturen mehrfach bzw. parallel aufgebaut. Parallel ist hier das Stichwort, denn würde eine CPU alles der Reihe nach machen, wäre das unglaublich langsam. Das laden von Daten aus dem Cache oder RAM braucht beispielsweise eine bestimmte Zeit. Wäre ja Unsinn, wenn die CPU jedes Mal, wenn Daten geladen werden, komplett stillsteht. Stattdessen versucht man solche Vorgänge parallel und am besten schon vorzeitig auszuführen, sodass die CPU eben nie stillsteht. Das bedeutet aber auch, dass die CPU zusätzliche Schaltkreise braucht, die nicht nur rechnen, sondern auch die CPU steuern und entscheiden, wann welche Daten wohin geladen werden. Ein großes Thema ist hier auch die Branch-Prediction. Ein Programm hat in der Regel viele verschiedene Abzweigungen, und CPUs versuchen vorherzusagen, welche Abzweigungen das Programm nehmen wird, bevor es definitiv feststeht. So können sie schon vorzeitig Daten laden und Berechnungen durchführen, bevor diese wirklich gebraucht werden.
Neben der Tatsache, dass viele Module einer CPU einfach mehrfach vorhanden sind, um mehr Dinge gleichzeitig zu berechnen, dienen auch viele Module dazu, die CPU zu steuern und effizienter zu machen, ohne selbst dabei als Rechenwerk zu fungieren.
Ich sehe es als Problem, dass die Programmierer aus dem Vollen schöpfen und sich keine Gedanken mehr machen.
Ein Kollege von mir hat sich auf einem heutigen Rechner mal Windows 3.1 installiert. Der Geschwindigkeitsunterschied zu Windows 10 war wirklich beeindruckend.
Der Rechner, auf dem ich programmieren lernte, hatte eine Taktfrequenz von etwa 20 kHz und eine mittlere Speicherzugriffszeit von über 10 ms. Aber das ist lange her 😉.
Dass moderne Betriebssysteme mehr können als die alten, ist mir klar.
Aber warum für eine USB-gesteuerte serielle Schnittstellen-Büchse nach Durchlaufen einer viehischen Installations- und AGB-Wegklick-Prozedur dann ständig vier (!) Tasks laufen müssen, die sich nur mit dieser einen Büchse beschäftigen, sehe ich nicht ein. (Normalerweise hätte ein Treiber gereicht, der keinen extra Task aufmacht.)
Was ist deiner Ansicht nach ein Task? Ich rate Mal, Du meinst einen Prozess, ein Task ist - zumindest in meiner Berufswelt - etwas anderes.
Ich weiß nicht, was die Software tut, aber ich rate Mal, dass die Prozesse notwendig sind. Kein Entwickler erstellt und verwaltet freiwillig vier Prozesse, ohne dass es tatsächlich notwendig ist. Das kann ziemlich aufwändig und kompliziert sein, je nachdem, was das Programm so tut. Viel einfacher und vor allem performanter - und Du unterstellst ja Feilheit und/oder mangelnde Kompetenz - ist eine monolithische Systemarchitektur, d.h. ein Prozess.
Für mich war ein Task, was die Windows-Systemsteuerung als solchen anzeigt. Der Begriff Prozess ist richtiger, da hast Du Recht.
Weil die Original-Büchse keiner bezahlen will und kann, haben wir selbst eine entworfen und gebaut. Und da werden keine Prozesse gestartet, die funktioniert einfach so. Für Hardware-Treiber unter Windows braucht man auch keine extra Prozesse.
Kein Entwickler erstellt und verwaltet freiwillig vier Prozesse, ohne dass es tatsächlich notwendig ist.
Da mag wahr sein, aber in einer großen Firma gibt es dafür ein Software-Monster, an das sich keiner heranwagt. Da wird immer nur noch etwas angeflanscht.
Du darfst Befehle und Transistoren nicht in einen Topf werfen.
Viele der CPU-Einzelbefehle sind zeitlich auf mehrere Prozessortakte verteilt , sonst bräuchte man wesentlich mehr Transistoren/Logikgatter.
macht nichts anderes als Daten entgegennehmen.
...und allein um den Buchstaben "A" in einem Byte-Register bereitzustellen braucht es mindestens 8 Transistoren,netto. ( eigentlich nochviel mehr, denn zuvor muss der Speicher addressirt werde und in das Register kopiert werden...)
Ich lasse mal die Parallelisierung außen vor und beziehe mich nur auf die für eine Operation nötigen Transistoren bzw Logikgatter
Selbst für die Atomar-Operationen wie and/or benötigt man pro Bit mindestens 2 Transistoren:
Addierer:
Mindestens 5 Transistoren pro Bit
Das waren Primitivschaltungen. Aber schon wenn mehr als ein Bit ins Spiel kommt steigt der Aufwand für überläufe und Bitverschiebung enorm.
Für für uns Kopfrechnen nahezu unbegreiflich steigt die Komplexität einer digitalen Multiplikation im Quadrat der verwendeten Bitbreite.
Multiplizierer
(Für eine 64-Bit Integer Parallelmultiplizirer-Schaltung schätze ich mal grob: mindestens 50000 Transistoren)
Das alles bezieht sich auf die nackten Logikschaltungen.
Hinzu kommen auf jede Schaltung noch mehrere Addresseinheiten, Register, Caches , usw. Alles wird durch "Transistoren" dargestellt.
Die Mehrzahl der Transistoren einer modernen CPU wird für die L-Caches verwendet. Allein für jedes Speicherbit des L1-Cache in einer CPU sind mindestens 3 Transistoren im Spiel. Für einen Ryzen 9 mit 64kByte L1 wären wir dann schon bei rund 1,5Mio Transistoren/Core (ohne Adresslogik)
Die Verschaltung der Transistoren für komplexe Operationen entzieht sich sogar meiner Vorstellung...
In jedem Fall braucht es nicht besonders viel Fantasie sich vorzustellen dass man mit Addresslogiken , zig Registern , Verteilerschaltungen, Interupt/Exeption Verarbeitung usw. Ganz schnell die Milliardengrenze bei den Transistoren knackt.
Wie auch immer für moderne MehrkernProzessoren vervielfacht sich die Anzahl nochmal.
Nicht zu vergessen, bei modernen CPU sind viele Strukturen redundant. Im Herstellungsprozess kommt am Ende nicht jede Prozesseinheit völlig perfekt aus der Fertigung. Daher werden einige Einheiten mehrfach ausgeführt und defekte Einheiten im Nachhinein deaktiviert.
(Natürlich schreiben die Hersteller dann lieber die Brutto-Anzahl an Transistoren in die Specs. Wenn interessiert schon wenn ein Fünftel davon eigentlich Schrott ist, Hauptsache der Prozessor tut was er soll)
prima, danke, bist du informatiker. prima erklärt, dann ist das so das die meisten transistoren gar nicht für die mikrobefehle sind, sondern das drumherum, richtig so
Wär doch schön, wenn wir mit den Prozessoren von 1996 arbeiten würden, oder? Da würden die ganzen tollen Programme, wie wir sie heute haben, bestimmt ganz doll schnell drauf laufen. Und auch diese riesigen 1,6 Gigabytes großen Festplatten von damals, wo neben dem Betriebssystem jahrelang noch riesige Officeprogramme draufgepasst haben und auch alle Dokumente und Bilder.
Wir brauchen immer schnellere Prozessoren, um immer schnellere Berechnungen machen zu können.
Das könnte natürlich auch einfach daran liegen, dass moderne Betriebssysteme und Programme viel mehr tun, als früher ¯\_(ツ)_/¯