Forum: Mikrocontroller und Digitale Elektronik Superskalarität


von Michael (Gast)


Lesenswert?

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

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

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

von Unbekannter (Gast)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

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

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

Bei SIMD (MMX ist SIMD)verarbeitest du Daten parallel mit einem
Befehl. Bei superskalarität verarbeitest du Daten parallel mit
mehreren Befehlen.

Matthias

von Michael (Gast)


Lesenswert?

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

von Läubi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.