S
@hustbaer sagte in MultiThreading Abstraktion CPU:
Hm. Verstehe ich jetzt nicht. Mehrere Cores arbeiten natürlich parallel - ohne grosses Zutun des OS. (Also das OS muss sie einmal "anstarten", weil beim Boot halt nur ein Core arbeitet. Aber davon abgesehen laufen die dann selbständig sozusagen.) Nur jeder logische Core arbeitet für sich genommen nur einen Thread ab. D.h. wenn du z.B. 8 logische Cores hast, dann laufen halt 8 Threads parallel. Um eine unbegrenzte Anzahl an Threads abzuarbeiten, muss das OS eingreifen und umschalten.
Davon abgesehen machen die CPUs intern natürlich einiges um Dinge zu parallelisieren. Aber "logisch" betrachtet bleibt es dabei dass ein Thread pro Core abgearbeitet wird.
Zu den Dingen die CPUs intern machen gehören:
Pipelining und out-of-order execution. Dabei werden mehrere Befehle des selben Threads parallel bzw. auch mit veränderter Reihenfolge abgearbeitet. Das geht z.B. wenn die Befehle nicht voneinander abhängig sind. Wenn z.B. ein Befehl die Register 1 und 2 addiert und der nächster Befehl die Register 3 und 4 multipliziert, dann können diese parallel abgearbeitet werden - bzw. es kann auch die Multiplikation vor der Addition ausgeführt werden.
Davon abgesehen sind auch immer mehrere Befehle gleichzeitig "in Arbeit", in unterschiedlichen Stadien der Ausfürhung. Also z.B. ein Befehl wird gerade dekodiert, ein anderer wartet vielleicht gerade darauf dass einer seiner Inputs verfügbar wird (Speicheroperand, Output eines früheren Befehls etc.), noch ein anderer wartet darauf dass ein benötigtes Rechenwerk frei wird etc.
Aber logisch gesehen ist und bleibt es ein Thread pro Core.
Dann gibt es noch SMP aka. Hyper-Threading. Dabei bekommt ein physischer Core mehrere Sets an Registern, so dass sich zwei (oder mehr) unabhängige logische Cores pro physischem Core ergeben. Diese können logisch gesehen unabhängig voneinander arbeiten, als ob sie zwei komplett getrennte Cores wären. Intern teilen sie sich aber grosse Teile des Cores, üblicherweise die ganzen Recheneinheiten. Das ist aber "statisch" in dem Sinn dass es für das OS so aussieht als gäbe es z.B. 8 statt 4 Cores. Und jeder dieser logischen Cores arbeitet auch nur einen Thread ab, so lange das OS nicht eingreift.
Vielen Dank, wirklich interessantes Thema... Danke Dir fürs viele Texten;)