Mehrkernprozessoren und Spiele



  • Benutzt Du denn Threads und wenn ja wofuer?



  • Wenn das Programm nicht mehrere Threats benutzt (und somit parallel arbeitet) wird nur ein Kern des Prozessors benutzt. Und wenn es nicht eine sehr teure 4-CPU ist, sind die einzelnen Kerne langsammer als bei einem billigen einzel oder doppelkern.

    Ich würde sagen 4 fach kerne sind heutzutage für Spiele nahezu unbrauchbar. Weil sie im Verhältnis gesehen sehr teuer sind, die einzelnen kerne oft langsammer arbeiten (außer bei den extrem teuren modellen) und nahezu kein Spiel mehr als 2 kerne benutze.
    (Sie werden trotzdem verkauft weil es sich auf der Verpackung eben besser ließt, dass ein 4 fach anstatt ein 2 fach Prozessor drin ist, egal ob es sinvoll ist oder nicht)

    Es kann aber auch andere Gründe haben:
    1. anderes Windows als bei früheren Tests?
    2. andere Grafikkarte deren Treiber nicht mehr so gut auf Direkt X 7 optimiert sind?
    3. Hardwarekonflikte ?
    4. Stromsparmodus ?
    5. Bundestrojaner 😉 ?
    6. Laut auf Microsoft geschimpft mit angelassenem Mikrofon 😉 ?


  • Mod

    wieviele particle sind es?
    wieviel fps hast du auf den jeweiligen systemen?
    welche graka und welche aufloesung hast du?
    wie nimmst du die zeit?



  • Die Anzahl der Partikel pro Treffer sind etwa so 15 Stück. Doch im Spiel kann es schon mal heftig zugehen. Dann müssen für jeden Treffer Partikel aktiviert werden. Das können schon mal ein paar Hundert sein. Die Auflösung ist festgelegt auf 800x600x32Bit. Das Problem liegt nicht an der Grafikkarte. Ich vermute schon das es am Prozessor liegt. Das Spiel selber verwendet drei Threads. Eine für Windows die andere das Spiel/Engine und das Spiel selber noch einen für das Laden des nächsten Levels. Aber wie gesagt das Problem kommt nur wenn die Partikel aktiv sind. Schalte ich die Partikel ab läuft das Spiel ohne Probleme und ruckeln. Die FPS habe ich jetzt nicht gemessen, aber man sieht ja das es ruckelt.

    Gibt es allgemeine Regeln was man beim Spieleprogrammieren für Mehrkernprozessoren beachten sollte. Kennt ihr sowas?



  • Na ja, deine ganzen Berechnungen laufen also alle im gleichen Thread. Damit auch alle auf dem gleichen Kern. Und wenn ein einzelner Kern im 4-Kern-Prozessor langsamer ist als ein einzelner im 2-Kern-System und der wiederum langsamer als die Singlecore-CPU, dann laueft das Spiel nunmal auf dem 4-core-System am langsamsten. Wenn du die Last nicht auf mehrere CPUs aufteilst, wirst du immer nur einen Kern benutzen.
    Du koenntest die Berechnungen auf mehrere Cores aufteilen, wenn du Mehrkernsysteme ausnutzen willst. Das ist aber im Allgemeinen nicht ganz trivial.


  • Mod

    naja, oder da geht etwas komplett schief. ein paar hundert particle duerften ein system nicht zum rueckeln bringen, jedenfalls nicht wegen der cpu.



  • rapso schrieb:

    naja, oder da geht etwas komplett schief. ein paar hundert particle duerften ein system nicht zum rueckeln bringen, jedenfalls nicht wegen der cpu.

    Eigentlich nicht. Könnte es sein, dass du Probleme mit dem Prozessor-Cache bekommst? Wie groß ist der auf dem Prozessor? Teilen sich alle Kerne einen Cache? Es könnte sein, dass auf dem 4-Kern, die einzelnen Threads, sich gegenseitig den Cache kaputt hauen... Aber das ist nur eine Vermutung.



  • Blue-Tiger schrieb:

    Und wenn ein einzelner Kern im 4-Kern-Prozessor langsamer ist als ein einzelner im 2-Kern-System und der wiederum langsamer als die Singlecore-CPU, dann laueft das Spiel nunmal auf dem 4-core-System am langsamsten.

    Auf einem Laptop mit einem 1.7GHz Pentium läuft es flüssiger als auf einem 2*2.4GHz Pentium.

    Blue-Tiger schrieb:

    Du koenntest die Berechnungen auf mehrere Cores aufteilen, wenn du Mehrkernsysteme ausnutzen willst. Das ist aber im Allgemeinen nicht ganz trivial.

    Wenn man in einem Spiel zwei Threads oder mehr hat. Werden diese nicht automatisch auf die Keren aufgeteilt, wenn man mehrere Kerne zu verfügung hat?



  • rapso schrieb:

    naja, oder da geht etwas komplett schief. ein paar hundert particle duerften ein system nicht zum rueckeln bringen, jedenfalls nicht wegen der cpu.

    🙂 Vor allem weil ja noch mehr los ist. Die Explosionen stören nicht und auch nicht die Gegner, aber diese Partikel. Ich bin gerade dabei mich durch den Code zu arbeiten. Seltsam das es erst auf einem Vierkernprozessor aufällt.



  • Netzwerk-Latenz schrieb:

    Blue-Tiger schrieb:

    Und wenn ein einzelner Kern im 4-Kern-Prozessor langsamer ist als ein einzelner im 2-Kern-System und der wiederum langsamer als die Singlecore-CPU, dann laueft das Spiel nunmal auf dem 4-core-System am langsamsten.

    Auf einem Laptop mit einem 1.7GHz Pentium läuft es flüssiger als auf einem 2*2.4GHz Pentium.

    hast du am Anfang nicht von einem 3 GHz Singlecore gesprochen?

    Blue-Tiger schrieb:

    Du koenntest die Berechnungen auf mehrere Cores aufteilen, wenn du Mehrkernsysteme ausnutzen willst. Das ist aber im Allgemeinen nicht ganz trivial.

    Wenn man in einem Spiel zwei Threads oder mehr hat. Werden diese nicht automatisch auf die Keren aufgeteilt, wenn man mehrere Kerne zu verfügung hat?

    Doch, normalerweise schon. Aber so wie ich deine Erklaerung verstanden hab sind die eigentlichen Berechnungen alle im gleichen Thread, oder?



  • Was sagt denn die Auslastung während dem Erzeugen dieser Partikeleffekte? Interessant wäre auch, für deinen Prozess einfach nur einen Kern freizugeben ( ➡ SetProcessAffinityMask). Durchaus möglich, dass hier die Kommunikation und Synchronisation diversen Kerne einiges ausbremst. Intels Pseudo Quadcores sind diesbezüglich eher suboptimal, da das teilweise über den lahmen FSB erfolgt und nicht komplett über den Cache. Mit welchen Prozessoren hast du denn getestet?



  • Getestet mit

    Einkern
    1.7 GHz Grafik: OnBoard
    3.06 GHz Grafik: Radeon 9600

    Zweikern
    Pentium E6750 Grafik: Geforce ????

    Vierkern
    4*2.4 GHz Grafik: Geforce 8800

    Wie gesagt Probleme gibt es nur mit dem Vierkern. Ich habe jetzt den Prozess auch mal nur auf einen Prozessor beschrängt. Das Problem bleibt. 🙄

    Ich hasse solche Probleme 😡 😃

    Trotzdem danke ich euch fürs durchlesen. Sollte einem noch was einfallen raus damit. cu


  • Mod

    alles auf einen core zu binden bringt nicht viel, der cache wird trotzdem zerschossen und alle synchronisationsprobleme koennen auch auftreten. besser ist es das ganze mal als ein thread laufen zu lassen und zu schauen.

    zudem kannst du ja auch mal versuchen eine testumgebung nur mit dem particlesystem aufzusetzen und das verhalten zu reproduzieren und mit z.b. AMD Codeanalyst zu profilen.

    desweiteren kann das ganze auch komplett andere gruende haben als die cpu. wenn nicht das rendering, dann z.b. den sound. manche sind so heldenhaft und spiele pro explosion nen sound ab, das kann der tod sein. 😉

    ich hoffe du sagst uns bescheid wenn du den fehler findest, gerade multicore programme gut zu machen scheint vielen probleme zu bereiten.



  • rapso schrieb:

    desweiteren kann das ganze auch komplett andere gruende haben als die cpu. wenn nicht das rendering, dann z.b. den sound. manche sind so heldenhaft und spiele pro explosion nen sound ab, das kann der tod sein. 😉

    Was ist die Alternative? Nur dann ein Explosionssound abspielen wenn nicht bereits ein Explosionssound abgespielt wird?



  • z. B. eine bestimmte Anzahl an Soundkanälen für Explosionen zu sichern und wenn die alle gefüllt sind, wird der Explosionssound nicht abgespielt.



  • rapso schrieb:

    manche sind so heldenhaft und spiele pro explosion nen sound ab, das kann der tod sein. 😉

    ich hoffe du sagst uns bescheid wenn du den fehler findest, gerade multicore programme gut zu machen scheint vielen probleme zu bereiten.

    😃 Helden ??? War da nicht wer ???

    Das mit noch einem neuen Thread war mein nächster Gedanke. Wenn sich was ergeben sollte werde ich mich melden. cu



  • Was sagt eigentlich ein Profiler zu der ganzen Geschichte? Damit müsste man ja wenigstens feststellen können, ob er wirklich im Partikel-System so lange rechnet.


  • Mod

    Netzwerk-Latenz schrieb:

    Das mit noch einem neuen Thread war mein nächster Gedanke. Wenn sich was ergeben sollte werde ich mich melden. cu

    kein neuer thread
    du sollst mal alles in einem thread laufen lassen, quasi sequenziell.



  • Hallo,

    war doch nicht der Prozessor. Der hat genug Power. Das Problem lag an der Grafikkarte.

    Das Spiel (es ist ein 2D Spiel) verwendet für die Darstellung der Partikel Texturen, wegen transparenz und anderen Zeugs. Jetzt habe ich das umgestellt auf DirectDraw-Oberflächen. Und das Problem war weg.

    Was wieder die Frage aufwirft warum eine Geforce der 8er Reihe von ein paar hunder Vertices in die Knie gezwungen wird (schlampig programmiert? NÖÖÖ). Naja jetzt weiß ich woran es liegt. Also der Prozessor war es nicht 😉


  • Mod

    was hattest du denn vorher benutzt?


Anmelden zum Antworten