latiose88 schrieb:
Danke für die Info,darum ist der 5950x so gut bei Ganzzahlen.Aber ich habe gelesen das diese vielen ALUS nur bei sehr komplexen Aufgaben benutzt werden. Ich bin einer der nur die reine Integer Leistung braucht.Habe aber gesehen das diese CPU in wahrheit mehr für Floingpoint also AVX Einheiten verwendet.
Du musst da unterscheiden. ALUs sind erst mal nur "Rechenwerke".
Im Integer-Teil hat Zen und auch Intel 4 ALUs, man spricht in dem Fall von 4-facher Skalarität. Es können also 4 Befehle unabhängig voneinander ausgeführt werden. Wenn keine Abhängigkeit der Befehle voneinander gegeben ist, können diese 4 zur gleichen Zeit abgearbeitet werden.
Vereinfacht:
add r1, r2; add r3, r4, add r5, r6
und
add r7, r8
. Diese 4 Befehle haben keine Abhängigkeit voneinander und können bei 4 ALUs zur gleichen Zeit ausgeführt werden, statt in 4 Takten bei nur einer ALU oder in 2 Takten bei nur 2 ALUs.
Anders würde es aussehen, wenn wir jetzt sowas hätten:
add r1, r2, add r1, r3, add r2, r4
und
add r6, r7
. Hier besteht mindestens eine Abhängigkeit: r1 + r2 und r1 + r3, r2 + r4 und r6 + r7 sind - bis auf das r2-Register voneinander unabhängig. Hier braucht man mit 4 ALUs 2 Takte, weil man erst
add r1, r2
sowie
add r6, r7
ausführt und erst im nächsten Schritt
add r1, r3
und
add r2, r4
. *hier setzte ich gleich an, geh aber ertst mal zur FPU
Bei einer FPU reden wir in der Regel - bei Zen und SandyBridge+ von 2 ALUs, das sind aber Vektor-ALUs die 64 Bit (MMX) bis hin heute zu 512 Bit fassen und verarbeiten. Viele rechnen diese Breite in ALUs um, bei 512 Bit kann man zum Beispiel 16 Werten mit 32 Bit verarbeiten. Nur Vektor-ALUs/SIMD-ALUs haben ein paar andere Probleme bei der Auslastung, nur sind hioer die 16 "ALU"s pro FPU-ALU nicht unabhängig, sondern es wird der gleiche Befehl ausgeführt.
So zurück zum Text und hier auch danke an dich
@mae danke dass du ein Teil der Sachen zusammen fasst, richtig aus der Ferne sieht das alles so einfach aus und das Halbwissen, was so mancher mit einem Informatikstudium, wo man diese Themen ja im zweiten Semester angeblich behandelt hat, ist leider auch weit verbreitet und ich bin diesem Halbwissen selbst vor Jahren auch auferlegen, bis ich mich mal intensiver - also über das Studium hinaus mit ISAs beschäftigt habe, die Geschichte hinter der Halbleiterfertigung der 60er, 70er und 80er, welchen Einfluss Compiler haben, wie wichtig alleine die ISA für den Compiler ist, damit er entsprechenden Code erzeugt, was Kontextswitches bedeuten, warum Lade- und Speicher-Operationen eigentlich Gift für die Rechenleistung ist, was OoO bedeutet usw.
Natürlich stell ich das hier oben zum Beispiel stark vereinfacht dar, denn wenn ich da mit einer genauen Erklärung anfange, sitze ich mehrere Tage, muss Diagramme anfertigen und auch Beispielcode, den man dann durch eine fiktive "CPU" in den Diagrammen durchlaufen lässt.
Eine ISA die nur 16 Register hat für den Compiler, führt unweigerlich dazu, dass früher oder später der Compiler unweigerlich Load- und Store-Anweisungen einfügen muss um Ergebnisse Zwischenzuspeichern, denn der Compiler erzeugt den Programmcode und dieser muss sich an der ISA orientieren, NICHT an dem, was die CPU am Ende hat. Und genau hier kommen zwei Knackpunkte zu tragen und auch die besagten Schattenregister - und es hat schon ein andere hier versucht der Person zu erklären - die Schattenregister dienen heute - bei x86-CPUs dazu, dass man (1.) einen zweiten Thread überhaupt verarbeiten kann - ohne diese Schattenregister würden sich die Threads immer in den Weg kommen - und ebenso sind diese Schattenregister vorhanden, damit die Load- und Store-Einheiten Daten jederzeit in diese "Schattenregister" schieben können oder von dort heraus speichern können, ohne dass die ALUs blockiert werden und weitgehend frei sind für den weiteren Programmablauf. Das Register-Renaming wiederum ist mit an Board, damit man sich unnötige Kopieraktionen im "Registerfile" spart.
Damit sich ALUs sowie Load- und Store sowie eben die 2 Threads nicht ins Gehege kommen, kann man vereinfacht sagen, dass man pro ALU einen vollen Satz der ISA-Register ins Registerfile aufnimmt und das eben auch auf die Anzahl der Threads auslegt + ein kleiner Überhang für die Load- und Store-Einheiten: 4 * 2 * 16 = 128, mit den 160 hat Zen3 - oh, seh gerade, dass ich oben nen Fehler habe war es dann SunnyCove, der auf 192 Einträge kommt - hat dieser noch mal 32 Register-Einträge, die diese nutzen können.
Auch die spekulative Ausführung benötigt ein paar Register zusätzlich im Registerfile, damit man die Daten in der CPU hält, solange es möglich ist.
Nur - und deswegen breche ich das an der Stelle auch ab, weil es viel Zeit frisst: Hier werden immer wieder die eigentliche "Kerne" als Architektur mit der ISA verwechselt, dann wird die ISA plötzlich ausgeblendet und deren Auswirkung auf gewisse Eigenheit der Architektur der Hardware.
Und es frist auch Zeit alles immer zu erklären oder dann auch zu widerlegen, wenn mal wieder die üblichen pauschalen Aussagen kommen.