Die ersten CPUs wie 6502 und Z80 hatten keine Hardware Multiplizierer. Wie viel Aufwand war es, Hardwaremultiplizierer auf in den CPUs zu implementieren? Gibt es irgendwo Chipbilder, wo man den Flächenverbrauch des Multiplizierers sehen kann?
> Die ersten CPUs wie 6502 und Z80 hatten keine Hardware Multiplizierer. Auch die späteren CPU nicht, Hardware-Multiplizier erschienen mit DSP's auf dem Markt. > Wie viel Aufwand war es, Hardwaremultiplizierer auf in den CPUs zu > implementieren? Man braucht halt n X m Full-Adder, steht so in jeder Literatur zum Thema Computerarchitektur. Für nen Full-Adder kann man bis zu 28 Transistoren rechnen und so ne poplige 8 bit CPU kommt mit weniger als 10000 Transistoren aus. > Gibt es irgendwo Chipbilder, wo man den Flächenverbrauch des > Multiplizierers sehen kann? Es ist nicht nur die Fläche wichtig, sondern auch die Durchlaufzeit, die Datenverarbeitung soll ja beim Signal-processing in Echtzeit laufen.
:
Bearbeitet durch User
Bradward B. schrieb: >> Die ersten CPUs wie 6502 und Z80 hatten keine Hardware Multiplizierer. > > Auch die späteren CPU nicht, Hardware-Multiplizier erschienen mit DSP's > auf dem Markt. Nu ja, 6809 (1978, zwei Jahre "neuer" als der Z80) konnte schon 8x8=16Bit. Der 68000 (von 1979) hatten schon 16x16=32Bit. Der 68020 sogar 32x32=64Bit. "The 6809 included one of the earliest dedicated hardware multipliers. It takes 8-bit numbers in the A and B accumulators and produces a 16-bit result in A:B, known collectively as D" - https://en.wikipedia.org/wiki/Motorola_6809 Intel hat sich mit dem 8086 (1978) noch etwas schwerer damit getan: - https://www.righto.com/2023/03/8086-multiplication-microcode.html Mit den späteren DSP kam eher das Thema Floatpoint und Rechnen in einem Taktzyklus auf.
Irgend W. schrieb: > Nu ja, 6809 (1978, zwei Jahre "neuer" als der Z80) konnte schon > 8x8=16Bit. > Der 68000 (von 1979) hatten schon 16x16=32Bit. Der 68020 sogar > 32x32=64Bit. Jetzt geht es halt um die Frage, wie viel Resourcen dafür verbraucht wurden. Die Atmega Serie hat ja einen Single Cycle 8x8 Multiplizierer mit 16 Bit Ergebnis. Kann man den auf dem Chip-Foto erkennen? Die modernen Arm Prozessoren haben aber schon 32x32 Multiplizierer oder die STM32F4 Serie vermutlich schon Float Multiplierer. Wobei es auch ARM Prozessoren ohne Multiplizierer gibt. Der Transisotorcount für einen Float-Multiplizierer dürfte schon ziemlich groß sein. Mein Annahme ist, dass ein Multiplizierer viel Transistoren und viel Fläche verbraucht.
> Der Transisotorcount für einen > Float-Multiplizierer dürfte schon ziemlich groß sein. Es kommt auch noch drauf an ob der Hardware-Multiplizierer in einem Taktzyklus zum Ergebnis kommt oder ob der eine State Machine hat die mehrere Zyklen braucht bis das Ergebnis da ist.
Die Begründung heisst "Amdahl's Gesetz", Frei formuliert, um einen Algo zu beschleunigen, beschleunige die Teiloperationen die am häufigsten vorkommen/abgearbeitet werden. Im Signalprocessing wird viel multipliziert (Vektorprodukte bei der Filterung, FFT), also hat da ein Multiplizierer oft und viel zu tun. Also wird ein Hardwaremultiplizier hier die Gesamtausführung erheblich beschleunigen. Bei Algo's ohne Multiplikation wie GUI-Fensterschieben eher nicht, also wird man für GUI-Fensterschieb-CPU's eher einen Cache implmentieren, der allen Befehlen nützt als einen Hardwareblock der nur eine "Exoten-Operationen" beschleunigt. Man hat so eine Beschleunigung auch lange als Aufrüstoption angeboten, hiess dann FPU-Coprozessor und so eine FPU war nicht selten komplexer und verbriet mehr Strom als die CPU. >> Der Transisotorcount für einen >> Float-Multiplizierer dürfte schon ziemlich groß sein. >Es kommt auch noch drauf an ob der Hardware-Multiplizierer in einem >Taktzyklus zum Ergebnis kommt oder ob der eine State Machine hat die >mehrere Zyklen braucht bis das Ergebnis da ist. Eigentlich geht man immer davon aus, das ein "Hardware-Multiplizierer" in einem Takt durch ist. (So wie ein Barrel-shifter) Wobei dann eben das Problem ist, das der "kritische Pfad" im Multiplizierer" liegt und dieser ohnehin die maximale Taktfrequenz bestimmt. Bei Float kommen zusätzliche Operationen wie "Normalisierung vor Multiplikation" hinzu. Und viel wird in ROM-Tabellen gemacht, in die sich auch mal ein "Fehler" einschleichen kann (https://de.wikipedia.org/wiki/Pentium-FDIV-Bug).
Es ist scheinbar gar nicht so einfach, die Geschwindigkeit für eine float Multiplikation für einen STM32F4 heraus zu bekommen. Es kursieren Zahlen von 3us bis 6us. Wie lange braucht so ein Ding die Berechnung des Float-Skalarprodukts mit Vektorlänge 1000? Gibt es einen Prozessor mit 1000 Multiplizieren, der das in einem Zyklus kann?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
