Guten Tag! Ich beschäftige mich zur Zeit dem generellen Aufbau von CPU´s und habe mir auch schon einige Core-Designs angeschaut und auch kräftig Google angestrengt, aber mir bleiben trotzdem noch ein paar Fragen offen: Die modernen CPU´s sind ja meist mit Pipelines aufgebaut, wozu manchmal noch Superskalarität hinzukommt, was ich mir so vorstelle, dass einfach mehrere Einheiten der CPU wie ALU mehrfach vorhanden sind und somit parallel arbeiten können. Jetzt gibt es ja von Intel mehrere Befehlssatzerweiterungen wie MMX oder SIMD usw. die ja darauf ausgelegt sind, Daten parallel zu verarbeiten. Bedeutet das, dass eine CPU die diese Befehle unterstützt automatisch eine Superskalare CPU ist? Weiter gibt es ja noch ISA´s wie VLIW, welche zum Beispiel der Intel Itanium verwendet, bei der ja vom Kompiler schon direkt die Befehle so gepackt werden, dass sie parallel abgearbeitet werden können. Laut Google verfolgt VLIW aber einen anderen Ansatz als die Superskalarität. Ist der Unterschied nur, dass bei VLIW nicht die CPU über die parallelisierung entscheidet? Zum Schluss wäre da noch Multithreading, wo ja ein Prozess in mehrere Teilaufgaben unterteilt wird, die parallel abgearbeitet werden können, wenn ich das richtig verstanden habe. Bei einem normalem Prozess kann die Pipeline auch durch sorgfältiges parallelisieren meist nicht komplett ausgelastet werden. Wird bei Multi-/Hyperthreading jetzt versucht, die Pipeline so aufzufüllen, dass immer alles ausgelastet ist? Wenn ja, dann ist dafür doch aber auch eine Superskalare Architektur von nöten, die man sonst ja kaum passende Programmstücke finden wird, die zum auffüllen passend sind, oder steht mir da grad gehörig einer auf dem Schlauch?*g* Sorry für die vielen Fragen, aber wäre nett, wenn mir da jemand weiter helfen könnte! Gruß Michael
Hi Vorneweg: Moderne Prozessoren sind äußerst komplex. Nicht alles was ich von mir gebe wird zu 100% richtig sein. >Bedeutet das, dass eine CPU die diese Befehle unterstützt automatisch >eine Superskalare CPU ist? Nein. MMX und SSE sind Einheiten für SIMD was soviel heißt wie Single Instruction, Multiple Data. Das heißt das der Prozessor mit einem Befehl mehrere Datenwörter (z.B. einen Vektor) bearbeitet. Superskalare Prozessoren hingegen arbeiten zwei Befehle parallel ab. Also z.B. zweimal ADD im gleichen Takt (insofern diese unabhängig sind). >Ist der Unterschied nur, dass bei VLIW nicht die CPU über die >parallelisierung entscheidet? So würde ich das ausdrücken. Bei VLIW übernimmt es der Compiler den Code zu parallelisieren. Der kann das auch deutlich besser da er den Kontext einzelener Instruktionen besser überblicken kann und es auch nichts macht wenn er mal an einer einzigen Instruktion ein paar ms lang rumbastelt. Multithreading ist ein Programmierkonzept. Das hat für den Prozessor erstmal keine Auswirkungen. Intel hat nun, aufgrund der extrem langen Pipeline der P4 Architektur und der damit verbundenen Probleme, ein paar Millinonen Transistoren spendiert um eine zweite CPU zu "simulieren". Einige Einheiten in der CPU sind doppelt vorhanden so das es für ein OS so aussieht als ob es sich bei dem System um eine Maschine mit zwei CPUs handelt. Komplexe Logik in der CPU sorgt dann dafür das die zwei Befehlsströme möglichst ideal in die Pipeline gefüttert werden das der Prozessor so wenig Warteschleifen dreht wie möglich. Lastet ein Thread die CPU aber schon sehr gut aus (muss also nicht lange auf Daten aus dem Hauptspeicher warten usw.) bringt Hyperthreading exakt garnichts. Matthias
Also, Multithreading hat grundsätzlich nix mit der Hardware zu tun. Gut, bestimmte Hardware ist für Multithreading besser (Multi-Core, Mult-Prozessor), aber grundsätzlich ist Multithreading "nur" eine Technik um "grobe" Parallelität in Software zu gießen. Wenn z.B. in einem Programm zwei Datenströmer aus dem Internet geladen werden sollen, kann man das mit Multithreading ungefähr so machen: function lese_und_verarbeite(quelle) while quelle != EOF warte_auf_nächste_daten(quelle) daten = lese(daten) verarbeite(daten) end end function hauptprogramm() thread_a = starte_thread(lese_und_verarbeite, quelle_a) thread_b = starte_thread(lese_und_verarbeite, quelle_b) warte_bis_thread_fertig(thread_a) warte_bis_thread_fertig(thread_b) end Wenn Du kein Multithreading hast, sieht das gleiche Programm ungefähr so aus: lese_und_verabeite(quelle_a, quelle_b) aktive_quellen = 2 while aktive_quellen > 0 if daten_verfügbar(quelle_a) daten = lese(quelle_a) verarbeite(daten) if quelle_a == EOF aktive_quellen = aktive_quellen -1 end end if daten_verfügbar(quelle_b) daten = lese(quelle_b) verarbeite(daten) if quelle_b == EOF aktive_quellen = aktive_quellen -1 end end warte_einige_millisekunden() end end function hauptprogramm() lese_und_verarbeite(quelle_a, quelle_b) end So in etwa ist der Unterschied.
Hi! Ok, dann hatte ich das wenigstens halbwegs richtig verstanden (-; Ich dachte halt, das SIMD, MMX usw. auch eine Superskalare CPU voraussetzen, da wie du ja gesagt hast mehrere Daten parallel verarbeitet werden. Dann könnten diese MMX oder SIMD Einheiten also auch mehrfach vorhanden sein, um noch mehr parallel zu verarbeiten. Auf jeden Fall mal danke!! Gruß Michael
Ok, dann macht Multithreading aber nur Sinn, wenn es auch Aufgaben sind, die wirklich parallel zu verarbeiten sind. Bei Aufgaben, die nur Teilweise parallel laufen sollte Multithreading dann wieder langsamer sein, als alles sequentiell zu verarbeiten, oder? Gruß Michael
Hi Bei SIMD (MMX ist SIMD)verarbeitest du Daten parallel mit einem Befehl. Bei superskalarität verarbeitest du Daten parallel mit mehreren Befehlen. Matthias
Stimmt, hätte statt SIMD SSE oder ähnlches schreiben sollen! Aber angenommen in einer CPU wären mehrere MMX EIheiten vorhanden, dann wäre sie auf diesem Gebiet auch Superskalar, oder? Wie sieht dass bei den neuen P4´s usw. aus? Ist dass eh nicht alles paar mal vorhanden?*g* Gruß Michael
Wenn dich sowas interessiert hier ein paar "Empfehlungen": (Teilweise in Englisch aber leicht verständlichem Englisch) Genereller Aufbau eines Prozessors vom Logik gatter zur ALU: ------------------------------------------------------------ Skript (sehr umfangreich und informativ, Piplines werden auch angesprochen) [ https://www.informatik.uni-kiel.de/inf/Schimmler/lehre-vorl-ds1.shtml ] Pipelines: ---------- Class 10 - Computer Architecture I: Instruction Set Architecture Class 11 - Computer Architecture II: Logic design Class 12 - Computer Architecture III: Sequential implementation Class 13 - Computer Architecture IV: Pipelining and initial pipelined implementation [ http://www.informatik.uni-kiel.de/~rt-teach/ss05/v-arch/skript.html ] Threads (und deren Probleme): ----------------------------- Threads and Processes IPC - Motivation [ https://www.comsys.informatik.uni-kiel.de/comsys/lehre/21_1.xhtml ] =============== Damit solltest du erstmal genug Lesestoff haben :)
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.