Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Techie

Alter Hase

  • »Techie« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

1

11.07.2013, 19:20

Theoretische Überlegungen zu Threaded Engine

Hallöchen.

Beim joggen letztens, ist mir eine Idee aufgekommen, ich werde diese zwar vorerst nicht implementieren, aber trotzdem Interessiert es mich:
Ist es möglich eine Engine so zu Coden das es verschieden Threads hat, z.B.: Render-, Update-, Input-, Postprocessthreads hat?
Bzw. worauf ich hin will, dass der die Threads nur so oft aufgerufen werden das am Ende genau 24 FPS ( / 60 FPS ) entstehen, also, dass man am Ende mehr Zeit für Postproccessing oder so hat?

Gibt's es ev. so etwas schon und/oder ist es überhaupt möglich?

Gruß Techie

P.S.: Ich weis es sind lange Sätze. Ich habe ziemliche Probleme wenn es darum geht logische Zusammenhänge für andere verständlich ( va. kurz ) zu formulieren.
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

11.07.2013, 19:43

Warum sollst du die Aufgaben denn nicht in Threads aufteilen können? Es gibt doch keinen technischen Unterschied zwischen den von dir genannten Funktionen und jeder anderen Funktion auch. Die Frage ist halt wie sinnvoll das ist. Wenn Daten und Informationen zwischen den Funktionen ausgetauscht werden müssen musst du das ganze möglicherweise zu oft synchronisieren und dann bringt es dir nichts mehr. Aber deine Beispiele sind genau so gut wie jedes andere auch und hängen genau so von den Anforderungen ab.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Sp3iky

Treue Seele

Beiträge: 232

Beruf: Entwicklungsingenieur

  • Private Nachricht senden

3

11.07.2013, 19:50

Kurz gesagt: Jede aktuelle Engine nutzt nach Möglichkeit mehrere Threads zum Beispiel für AI, Sound und Rendering. Die Schwierigkeit ist wie bereits gesagt wurde das ganze so zu trennen, dass der Synchronisierungsaufwand nicht zu hoch wird. Man kann eben nicht alles parallel berechnen.

Techie

Alter Hase

  • »Techie« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

4

11.07.2013, 20:06

Ok, also das Synchronisieren ist ein Problem. Nur noch eine Sache: Angenommen das Synchronisieren hängt von wenigen Werten ab ( + max. 60 Frames per Second vom Renderthread ), würde ich dann einen Performanzegewinn machen, also, dass ich am Ende mehr Zeit für Postprocessing, Server oder Softwaretesslation habe?
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

5

11.07.2013, 21:14

In dem Fall würde ich sagen, gerade den Server kannst du mit am besten in einen eigenen Thread packen.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

12.07.2013, 00:39

Threads erlauben es dir einfach, Code parallel auszuführen. Das bringt natürlich nur was, wenn du auch Code hast, den du parallel ausführen kannst. Nehmen wir als Beispiel Rendering und Input. Natürlich kannst du das in zwei Threads packen. Damit du allerdings weißt, was du rendern willst, musst du erstmal den Input verarbeiten. Die Kunst bei der Sache ist es, die Dinge so zu strukturieren, dass man tatsächlich Codepfade hat, die sinnvoll parallel laufen können... ;)

Also ja, natürlich ist es möglich, diese Dinge in verschiedene Threads zu packen. Aber was soll z.B. dieser Postprocess Thread genau tun? Hängt der nicht vom Output des Render Thread ab? Wie genau sollen Postprocessing und Rendering parallel laufen?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

12.07.2013, 09:33

Der Post-Processing-Thread verarbeitet das aktuelle Frame, während der Rendering-Thread schon das nächste Frame rendert.
Dadurch lässt sich die GPU etwas besser ausnutzen, aber man bekommt dadurch auch ein Delay von einem Frame.
Viele Spiele machen sowas, um flüssiger zu laufen, auf Kosten der Reaktionszeit auf die Eingaben des Spielers.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

12.07.2013, 09:51

Richtig, das ist eine mögliche Lösung für das konkrete Dilemma. Wobei die nächste Frage dann natürlich ist, wie genau das funktioniert, dass der Postprocessing Thread und der Rendering Thread gleichzeitig die GPU benutzen... ;)

9

12.07.2013, 11:47

Was bei der Parallelisierung hier interessant sein könnte ist die Nutzung von zwei Grafikkarten gleichzeitig. Viele Notebooks haben ja eine Onboard und eine zweite GraKa. Dass beide für ein Spiel gleichzeitig genutzt werden habe ich bisher (bis auf ein oder zwei Ausnahmen) noch nie mitbekommen. Das könnte sich aber lohnen...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

12.07.2013, 11:49

Die Daten von der einen auf die andere (und zurück) zu übertragen dürfte allerdings eine größere Einbuße an Performance bringen als Nutzen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige