Multithraeding -> Mehrere Kerne verwendet?



  • Hallo,

    Wenn ich auf Windows 7 Professional 64 Bit mit i7 Quad Core als Prozessor eine Applikation entwickle, die 3 Threads öffnet und im "main" auch arbeitet, werden alle meine 4 Kerne automatisch verwendet? (In der Theorie, dass heisst angenommen, dass keine weiteren Programme meine Kerne "besetzen")

    Danke für die Antwort.


  • Mod

    Das ist eine Sache des Schedulers des Betriebssystems. Wenn der meint, dass das eine gute Idee ist, dann wird der das auch so machen. Sofern deine Threads auch alle ordentlich was machen und die verschiedenen Kerne noch nichts zu tun haben, ist die Wahrscheinlichkeit sehr groß, dass genau dies passiert.



  • SeppJ schrieb:

    Das ist eine Sache des Schedulers des Betriebssystems. Wenn der meint, dass das eine gute Idee ist, dann wird der das auch so machen. Sofern deine Threads auch alle ordentlich was machen und die verschiedenen Kerne noch nichts zu tun haben, ist die Wahrscheinlichkeit sehr groß, dass genau dies passiert.

    Hallo

    Das bedeutet meine Applikation muss das direkt nicht unterstützen? Es kommt bloss drauf an was der Scheduler meint?



  • dsds schrieb:

    SeppJ schrieb:

    Das ist eine Sache des Schedulers des Betriebssystems. Wenn der meint, dass das eine gute Idee ist, dann wird der das auch so machen. Sofern deine Threads auch alle ordentlich was machen und die verschiedenen Kerne noch nichts zu tun haben, ist die Wahrscheinlichkeit sehr groß, dass genau dies passiert.

    Hallo

    Das bedeutet meine Applikation muss das direkt nicht unterstützen? Es kommt bloss drauf an was der Scheduler meint?

    Deine Anwendung muss das unterstützen, indem sie eine genügend große Anzahl an Threads bereitstellt und diese beschäftigt. Der Rest liegt dann nicht mehr in deiner Hand (aber irgendwie ja doch, weil du mit diesen Maßnahmen im Großen und Ganzen sicher sein kannst, dein Ziel zu erreichen).



  • _matze schrieb:

    dsds schrieb:

    SeppJ schrieb:

    Das ist eine Sache des Schedulers des Betriebssystems. Wenn der meint, dass das eine gute Idee ist, dann wird der das auch so machen. Sofern deine Threads auch alle ordentlich was machen und die verschiedenen Kerne noch nichts zu tun haben, ist die Wahrscheinlichkeit sehr groß, dass genau dies passiert.

    Hallo

    Das bedeutet meine Applikation muss das direkt nicht unterstützen? Es kommt bloss drauf an was der Scheduler meint?

    Deine Anwendung muss das unterstützen, indem sie eine genügend große Anzahl an Threads bereitstellt und diese beschäftigt. Der Rest liegt dann nicht mehr in deiner Hand (aber irgendwie ja doch, weil du mit diesen Maßnahmen im Großen und Ganzen sicher sein kannst, dein Ziel zu erreichen).

    Hallo

    Wie kann es dann aber sein, dass Games bloss "2 Kerne unterstützen". Habe ich oftmals gehört. Oder ist das bloss Fiction?



  • Wenn Spiele so programmiert sind, dass die rechenlastigen Aufgaben nur auf 2 Threads verteilt werden, dann lasten diese 2 Threads halt auch nur 2 Kerne so richtig aus.



  • dsds schrieb:

    _matze schrieb:

    dsds schrieb:

    SeppJ schrieb:

    Das ist eine Sache des Schedulers des Betriebssystems. Wenn der meint, dass das eine gute Idee ist, dann wird der das auch so machen. Sofern deine Threads auch alle ordentlich was machen und die verschiedenen Kerne noch nichts zu tun haben, ist die Wahrscheinlichkeit sehr groß, dass genau dies passiert.

    Hallo

    Das bedeutet meine Applikation muss das direkt nicht unterstützen? Es kommt bloss drauf an was der Scheduler meint?

    Deine Anwendung muss das unterstützen, indem sie eine genügend große Anzahl an Threads bereitstellt und diese beschäftigt. Der Rest liegt dann nicht mehr in deiner Hand (aber irgendwie ja doch, weil du mit diesen Maßnahmen im Großen und Ganzen sicher sein kannst, dein Ziel zu erreichen).

    Hallo

    Wie kann es dann aber sein, dass Games bloss "2 Kerne unterstützen". Habe ich oftmals gehört. Oder ist das bloss Fiction?

    Die unterstützen dann nur 2 Kerne damit auch nur nen Dual-Core Voraussetzung ist, und man nicht zum Spielen nen QuadCore benötigt!



  • beselbube schrieb:

    Die unterstützen dann nur 2 Kerne damit auch nur nen Dual-Core Voraussetzung ist, und man nicht zum Spielen nen QuadCore benötigt!

    Äh, nein. Du kannst natürlich auch 8 Threads arbeiten lassen und die auf zwei Kerne verteilen, ohne dass Dir das performancemäßig furchtbar wehtut.

    Dass nur 2 Kerne unterstützt werden, liegt eher daran, dass Multithreading schwer ist und man sich teilweise sehr genau überlegen muss, wie man Arbeit so aufteilt, dass man vernünftig multithreaden kann.



  • das kommt dadurch dass viel software nicht designed wird, sondern waechst. das ist fuer den anfaenglichen fortschritt gut und wichtig, aber es lassen sich danach nur beschwerlich design konzepte im nachinein anwenden.

    schwer ist multithreading nicht, wenn man ein paar dinge beobachtet, aber die meisten wissen nichtmal das und so kommt eines zum anderen.

    irgendwann merken die leute "es laeuft langsam" und natuerlich sagt spaetestens ein weiser consultant "ihr benutzt nur einen kern, benutzt alle und ihr seit 4mal schneller" und tja, entweder packen die leute dann openMP ueber ein paar schleifen die kritisch sind, dann werden diese "optimiert" und lasten kurzzeitig alle kerne aus, jedoch zeigt dein taskmanager insgesammt nur eine kleine auslastung. oder es gibt ein paar grosse dinge die separierbar sind weil eh unterschiedliche leute dran gearbeitet haben z.b. sound, network, physics, rendering. und diese werden dann einigermassen in threads gesteckt. jedoch gibt es natuerlich abhaengigkeiten und am sichersten loest man die indem man wild ueberall locks/mutex einbaut und entsprechend, obwohl manche spiele "quadcore optimiert" sind, skaliert die sache nur unterirdisch schlecht.

    manchmal wird sowas sogar langsammer und diese optimierungen werden abgeschaltet weil nicht fixbar vor dem release.

    dabei ist die sache recht einfach zu machen, wenn man sie von anfang an macht, man kann lustigerweise sogar mehr praktische leistung erhalten als 'theoretisch' durch die cores moeglich ist.
    gute engines sind z.B. die capcoms engine die recht linear skaliert und auch die von Metro2033 scheint gut gemacht zu sein, Killzone wohl auch, was aber PC spieler wohl weniger interesiert.


Anmelden zum Antworten