Weiß jemand wie die Thread-Verteilung bei Multicore-Prozessoren funktioniert?
Kann ein laufender Thread mal auf dem einen, mal auf dem anderen Kern laufen, je nachdem wie ausgelastet die Kerne
gerade sind?
der scheduler verteilt die threads mehrmals pro sekunde auf die prozessorkerne, so entsteht eine gleichmäßige auslastung (und temperatur).
durch den gemeinsamen L2-Cache der Core 2s funktioniert das bei denen am besten, weil sie die verwendeten daten nicht über den FSB schieben müssen, sondern nur der jeweils nächste prozikern die anweisung kriegt, diesen thread zu übernehmen. (*freu* c`t-lesen hilft )
Aha, vielen Dank. Dann bringt es also nichts die Threads explizit den Prozessorkernen zuzuordnen. Ich als Programmierer könnte sowas in meine Multithread-Anwendungen einbauen, habe das aber bisher nicht gemacht, weil ich nicht wusste, ob das was bringt.
Ich habe die betreffenden Programme aus Performacegründen mit mehreren Threads programmiert, also diejenigen Programmteile die auf nichts anderes warten müssen in Threads ausgelagert. Bei einem Programm kann man die Anzahl der paralellen Threads in einer Config-Datei bestimmen, bei anderen Programmen werden eben so viel Threads erzeugt wie paralelle Aufgaben anliegen. Schneller ist das Multithreading sogar auf einem Einkern-Athlon (getestet mit demselben Programm ohne paralelle Threads). Bis jetzt habe ich darauf vertraut, dass die Threads automatisch optimal verteilt werden.
wenn du die einzelnen progteile schon so angelegt hast, dann lass das OS entscheiden. einzelkerne gibts eh nicht mehr lange. hast du es schon auf einem quad getestet?
Nein, hab noch keinen Kann der Athlon XP (Einzelkern) eigentlich sowas wie Hyperthreading? Läuft deswegen das Multithread-Programm schneller als ohne Multithreading?
Schneller wird es dadurch auf deinem Singlecore sicher nicht. Multithreading ist sowieso immer so ein Ding für sich, da es immer aufs genaue Timing ankommt. Sehr viele Threads werden schnell kontraproduktiv und Du verlierst noch schneller die Übersicht. Es ist wie mit kleinen Kindern - je mehr Du hast, umso aufwendiger ist es, die Rasselbande zusammenzuhalten
Nachricht bearbeitet von FormatC am 17.01.2008 um 17:44:39
------------------------------Wenn das einzige Werkzeug, das du hast, ein Hammer ist, dann neigst du dazu, jedes Problem für einen Nagel zu halten.
Konfiguration • Homepage
Antworten FormatC
Das kann man so nicht sagen. Wenn man's richtig macht, wird es auch auf einem Singlecore deutlich schneller. Beispiel:
Thread 1 muss auf etwas warten und gibt solange die Zeitscheibe ab. Jetzt kann Thread2, Thread3 usw. erstmal weiter machen. Das Schwierige an der Threadprogrammierung ist aber die Synchronisation. Manche Dinge dürfen nicht paralell passieren sondern nur seriell. Threads sollte man nur einsetzen, wenn's wirklich was bringt. Sonst lohnt sich ganze Aufwand nicht. Aber das ist jetzt wirklich Off-Topic.
Dieses Thema ist länger als 6 Monate inaktiv. Bitte überprüfen Sie, ob Ihr beabsichtigter Kommentar noch einen Mehrwert bringt oder das Anlegen eines neuen Themas nicht besser wäre.