Multicore vs Multithreading

Qimple

Enthusiast
Thread Starter
Mitglied seit
12.09.2009
Beiträge
709
Hier mal ein paar Dinge die man über Multicore und Multithreading wissen sollte.

Multithreading gibt es erst seit Multicores (Dual/Tri/Quad/HEX/ usw)

Dual Core haben stärker profitiert als Quad und mehr Cores wieso?

Dann ist ganz einfach, weil man mit DualCoreTechnologie endlich mal die Threads in CPUs integriert hat. Das hatten die SingleCores nicht. Weshalb es auch kein wirkliches Multitasking gab. Sondern ein vorgegaukeltes.

Nun haben wir ja die Threads, und alles ist schön. Aber so einfach ist es dann doch nicht. Jetzt könnt man meinen, wir packen einfach schön 1 Thread pro Kern und man nutzt die Maximale Power seines Quad/Hex aus. Nur, was wenn Thread 1 jetzt nichts mehr zu tun hat? Dann verpufft die ganze Performance. Pech gehabt.

Dennoch ist es eh etwas Falsch ausgesagt. Es fängt nämlich anders an. Man hat eine CPU mit 4 Kernen, logisch wären 4 Threads aka 1 Thread pro Kern. Aber dem ist nicht so. Vielmehr ist es so, das die CPU 4 Tasks haben kann, die in Threads unterteilt werden. So kann man fleißig 20 Threads laufen lassen, und die werden vom OS dann selbst verwaltet. Das klingt doch schön. Das ist aber nur die Theorie. Und die Realität sieht anders aus.

Nun muss man erst mal alles mögliche parallelisieren. Um zwischen den Threads umher zu schalten gibt es alle x ms einen Switch, der selber natürlich Zeit kostet. Umso mehr Threads man also öffnet, desto mehr Zwischenzeit verplempert man mit dem schauen ob Thread 12 und 3, denn nun wirklich etwas machen können. Also umso größer die Anzahl der Threads, desto mehr Overhead durchs zappen durch die Threads. Damit könnte man ja evtl. leben. Aber es gibt Programmcode, der lässt es nicht zu, das man ihn parallelisiert, weil er z.B. einfach ein Komando des Users erforderlich ist. Kein Kommando vom User, also braucht die CPU nichts zu berechnen. Alle Dinge die man in Reichweite Vorberechnen kann, wurden schon berechnet. Was nun, mit der Rechenleistung? Weitere Dinge Vorberechnen? Aber, dann bewegt man sich in einen Event (öffnet eine Tür) und die CPU müsste dann abrupt umswitchen. Nur war es mit so vielen Threads beschäftigt, das die Scheibe der Threads schon auf 100 angewachsen ist. Um, wieder beim Thread mit der Benutzerschnittstelle anzukommen, dauert es jetzt schon nicht mehr nur 1ms, sondern dann schon locker 2-3 Sekunden. Das wäre eine Katastrophe. Maus wackeln, und so 2-3 Sekunden später bewegt sich die Figur. Da wären aber alle glücklich.

Um es mal klar zu sagen. Multithreading ist für Statische Berechnungen ideal. Für Dynamische, wie man sie in Spielen vorfindet, weitestgehend ungeeignet.

Zumal noch eine Sache hinzukommt. Die Daten, die man parallelisiert hat, müssen anschließend wieder synchron gemacht werden. Wie erfolgreich das ist, sieht man unter anderem bei SLI/CF. Das kostet natürlich auch wieder Zeit, die Daten müssen aus willkürlichen Threads gezogen werden und bis man die richtig zusammengefügt hat, vergeht wieder zusätzliche Zeit, durchs wechseln der Threads.

Und die Threads werden aus einen Threadpool gezogen, da hat der Programmierer kaum eine Entscheidungsmöglichkeit. Der Pool wird dann kalkuliert, und daraufhin, wird der dem entsprechenden Task übergeben. Interessant ist nur, wieso es eigentlich nicht Hyper Tasking heißt. Aber dieses verwirrspiel hat Microsoft geschaffen.

Ich selber programmiere, und dort wird gerne über die falsche Namensgebung gelästert. Und MS selbst rät, nur 6 Threads pro Anwendung laufen zu lassen. Gui, Userinterface, Daten schreiben, Daten lesen, Sound, KI.

Also die Illusion, das man so stark von Multicores profitiert, ist dahingestellt bei Games.
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Was genau willst du uns jetzt mit dem ganzen Text sagen? (Von dem ich besonders den Teil bzgl. der Anzahl der maximalen Threads pro Task anzweifel, auch wenn die Aussage von Microsoft stammt. )

Sent from my HTC Desire using Tapatalk
 
Sowiet ich weiss kann eine Core I7 zur zeit Max. 8 Threads gleichzeitig verarbeiten.. wie kommst du also auf 20?
 
Ein Fallbeispiel: vor einigen Wochen hab' ich mal die MultiThreading-Performance des x264-Encoders angetestet, auf nem 860+HT (4Cores, 8Threads).
Quelle: HD 720p. x264: --preset slower

Für diesen Thread hier relevante Kerndaten:

8 Threads: 8.88 fps
16 Threads: 10.79 fps

10.79/8.88 => 21.5% Geschwindigkeitsgewinn

Über 20% mehr Performance sind kein Pappenstiel.
 
Damals Hyper Threading, heute SMT. SMT bitte nicht mit SMP verwechseln!

SMT = simultaneous multithreading

SMP = symmetric multiprocessing
 
Sowiet ich weiss kann eine Core I7 zur zeit Max. 8 Threads gleichzeitig verarbeiten.. wie kommst du also auf 20?

Es gibt in dem Fall auch noch eine andere "Gleichzeitigkeit", nämlich die Nebenläufigkeit. Wahrscheinlich ist das gemeint.

Ich fand den Text ziemlich schlecht. :kotz:
Wenn man schon einen so langen Text verfasst und extra hier einen Thread aufmacht, dann sollte der schon inhaltlich und von der Rechtschreibung her in Ordnung sein.
 
Zuletzt bearbeitet von einem Moderator:
das ist so nicht ganz korrekt. multithreading gab es natürlich schon mit den P4 die HT implementiert hatten.
Auch das ist nicht ganz korrekt. SMT hatte bereits der Alpha EV8 von DEC. Von dort hatte Intel die Technologie auch übernommen.

Man sollte aber konkreter von hardwareseitigem Multithreading spechen. Denn Multithreading ansich gab es schon weit vor der Implementierung in CPUs.


@Didee
Das sollte man allerdings nicht pauschalisieren. Bei sequentiellen Aufgaben mag das vielleicht hin und wieder funktionieren. Es gibt aber genauso Anwendungen, wo die Performance einbricht, sobald mehr Threads Last erzeugen als hardwareseitig unterstützt werden.
 
@ mr.dude - War ja auch gar nicht pauschalisierend gemeint, sondern als Gegenbeispiel zu dem (Spiele-)Szenario der Eröffnungspost. Manchmal könnte man meinen, Computerspiele wären das einzige, wofür aktuelle PC-Power gebraucht würde.:-[ - Und da hab' ich eben mal ein Beispiel einer produktiven Anwendung angeführt, die gut von Multithreading profitiert.
 
Schlechter Einstieg mit der Falschaussage.

Wie schon erwähnt wurde, gabs zuerst Single Core CPUs (P4) mit HT.

Das mit dem Synchronisierungsproblem kann ich als Laie nicht so nachvollziehen, klar kennt man Microruckler bei CF und SLI, aber es müssen ständig Dinge sychronisiert werden, wie Ton, Bild und sämtliche andere laufenden Prozesse.

Bei Shadern von Grafikkarten übernimmt ja auch jeder seinen Part und das wird am Ende zusammengefügt.
 
Zuletzt bearbeitet:
Multicore und Multithreading

als erstes sollte man die Begriffe voneinander trennen:

-Multicore
ist eine Architektur -> mehrere Rechenwerke auf einem Prozessor

-Multithreading
ist ein Paradigma was in der Softwareentwicklung eingesetzt wird um große/aufwendige/komplexe Aufgaben, wenn sie sich parallelisieren lassen, in mehrere kleine Aufgaben aufzuteilen und diese auf mehrere Softwarethreads zu verteilen
-> diese Softwarethreads werden vom OS in einem Priorityqueue verwaltet
-> sind alle Resourcen vorhanden um mit dem abarbeiten zu beginnen und ist ein Hardwarethread frei geworden und ist man der erste in der Warteschlange wird der Softwarethread dem freigewordenen Hardwarethread zugewiesen
 
Um es übersichtlicher zu machen werden ich das, mal in Hardwarethreads und Softwarethreads aufteilen.
Nebenbei, wenn diese Materie so einfach wäre, würden die Programmierer schon längst eine gute Lösung umgesetzt. Weshalb es nicht weiter tragisch ist, wenn man es nicht versteht.
Jeder der seinen Taskmanager schon mal genau angeschaut hat, sieht das man eine Menge Threads laufen hat. Ich habe momentan z.B. über 800 Threads. Die CPU kann allerdings nur 1-2 Threads pro Kern wirklich gleichzeitig bearbeiten. Wenn man davon ausgeht, das aber über 100te laufen im Windowsbetrieb, ohne dass man ein Programm gestartet hat, wäre die Hardware von Heute wohl ohne ein Pseudo Multitasking nicht fähig das zu handhaben.
Einige Threads schlafen, andere warten auf Interaktionen, egal, es wäre immer noch zu viele, für die CPU von heute. Deshalb gibt es die Softwarethreads. Die sind begrenzt durch die vorhandene Hardware. Damit also jeder Thread mal rankommt, wechselt man von einem Thread zum nächsten. Meiner Meinung nach dem einzigen Grund wieso die Dual Core so viel mehr Performanceschub gebracht haben. Jetzt war es möglich einen Hardwarethread nur für die Arbeit abzustellen, die im Vordergrund stand. Wie z.B. Spiele, Programme, etc. Und der zweite Kern, hat die anderen Softwarethreads schön verwaltet. Und das primäre Programm kann ungestört arbeiten.
Mehr Kerne und die damit verbundenen Hardwarethreads bedeuten nicht unbedingt mehr Performance. Es sind einfach zu viele Softwarethreads vorhanden, um einfach bei Spielen, immer 2-3 Hardwarethreads abzustellen. Wobei das auch nicht immer helfen würde.
Achtung *utopie*
Ich denke, damit wir die volle Leistung immer haben und ausschöpfen, brauchen wir etwas wie es bei Servern schon gibt. Eine dynamische Ressourcenverwaltung. So etwas wie beim ESX Server. Nur braucht man nicht eine VM die die vorhandenen Ressourcen von der CPU/RAM/HDD besser verteilt, sondern eher, eine Kombination aus CPU + GPU Performance.

Szenario : Eine schwächere CPU und einer viel zu starke GPU. Die GPU wirbt doch immer damit dass sie so viele Rechenoperationen erledigen könnte. Wenn jetzt also Programm X mehr CPU Power braucht, muss das halt zur Verfügung gestellt werden von der GPU. Sofern sie noch etwas übrig hat. Die Ressourcenverwaltung im PC ist momentan wirklich ungünstig. Ein Gerät von CPU und GPU langweilt sich immer. In den wenigstens fällen, hat man das Optimum. Wenn man also immer den Überschuss aus der einen Ressource besser bündeln könnte, wäre allen geholfen.
Wie gesagt, das ist Utopie. Und bekanntlich sind Menschen mit solchen Vorstellungen früher auf dem Scheiterhaufen gelandet. Also nichts für ungut.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh