Gandalf2210
Commodore
- Registriert
- Mai 2010
- Beiträge
- 4.182
Hallo
kurz vorweg: Ich packe die details in einen spoiler, damit es nicht zu unübersichtlich wird.
Deswegen jetzt ein paar allgemeine Fragen zur multi thread programmierung:
Wie viele threads sollte man gleichzeitig laufen lassen?
so viele wie möglich, oder so viele wie (virtuelle) Kerne vorhanden sind?
versuchen jeden Thread so lange "am leben zu halten" wie möglich, oder möglichst kurze funktionen in einem thread laufen lassen?(also oft neue threads starten und beenden)
können verschiedene threads gleichzeitig auf einem array lese und schreiboperationen durchführen?
Es geht im allgemeinen also um design fragen, wie man threads "behandelt", nicht wie die programmierung im konkreten aussieht.
Ich hoffe ihr versteht, was ich meine
mfg Gandalf2210
kurz vorweg: Ich packe die details in einen spoiler, damit es nicht zu unübersichtlich wird.
ich habe mich mit dem Thema multi threading mal befasst und es mittels der Klasse "boost" auch geschafft ein einfaches Programm zu machen, was in vier threads gleichzeitig eine Variable hochzählt.
Hier skaliert die Leistung fast linear mit den Kernen.
Allerdings sah das ganze bei meinem "richtigen" Programm dann nicht mehr so rosig aus.
Ich habe eine thread Gruppe erzeugt
und dieser Gruppe dann in einer schleife acht threads zuordnen lassen.
Jeder Thread hat eine funktion ausgeführt, die aus ~ 50 schleifen Durchläufen und if abfragen besteht und ein paar array lese und schreib Operationen durchführt.
Alle 8 threads führen die gleiche Funktion aus, in einem anderen Bereich des arrays.
Dann wird mittels
gewartet bis alle fertig sind, und das Spiel geht wieder von vorne los.
Die erbrachte mir aber nicht den erhofften Effekt der Leistungssteigerung, der Prozessor (i5 3570k) war mit multi core "optimierung" weniger ausgelastet, als bei der reinen single thread anwendung.
Ich könnte mir jetzt vorstellen, dass durch das häufige erstellen und schließen von threads ein so großer overhead entsteht, dass es sich nicht lohnt.
Hier skaliert die Leistung fast linear mit den Kernen.
Allerdings sah das ganze bei meinem "richtigen" Programm dann nicht mehr so rosig aus.
Ich habe eine thread Gruppe erzeugt
Code:
boost::thread_group tgroup;
Code:
tgroup.create_thread(boost::bind(up,i));
Alle 8 threads führen die gleiche Funktion aus, in einem anderen Bereich des arrays.
Dann wird mittels
Code:
tgroup.join_all();
Die erbrachte mir aber nicht den erhofften Effekt der Leistungssteigerung, der Prozessor (i5 3570k) war mit multi core "optimierung" weniger ausgelastet, als bei der reinen single thread anwendung.
Ich könnte mir jetzt vorstellen, dass durch das häufige erstellen und schließen von threads ein so großer overhead entsteht, dass es sich nicht lohnt.
Deswegen jetzt ein paar allgemeine Fragen zur multi thread programmierung:
Wie viele threads sollte man gleichzeitig laufen lassen?
so viele wie möglich, oder so viele wie (virtuelle) Kerne vorhanden sind?
versuchen jeden Thread so lange "am leben zu halten" wie möglich, oder möglichst kurze funktionen in einem thread laufen lassen?(also oft neue threads starten und beenden)
können verschiedene threads gleichzeitig auf einem array lese und schreiboperationen durchführen?
Es geht im allgemeinen also um design fragen, wie man threads "behandelt", nicht wie die programmierung im konkreten aussieht.
Ich hoffe ihr versteht, was ich meine
mfg Gandalf2210