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

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

31

19.03.2014, 14:42

Man nehme OpenMP oder die PPL, dann geht das wie von selbst.
Entsprechende Frameworks wie Boost sollten da auch etwas parat haben, da kenne ich mich aber nicht aus.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

32

19.03.2014, 18:07

@BlueCobold:
Eine dynamische Lastverteilung lässt sich ganz einfach über eine atomare Variable realisieren (Stichwort: std::atomic_int).
In dieser Variable steht immer drin, welches Pixel (oder welche Kachel, wenn man mehrere Pixel zusammenfasst) als nächstes zu rendern ist.
Immer wenn ein Thread neue Arbeit braucht, liest und erhöht er atomar diese Variable und weiß dann, was er zu tun hat.
Vom Programmieraufwand her ist das nicht schwieriger als das, was du vorschlägst, aber die Last wird besser verteilt.

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

33

19.03.2014, 18:16

Theoretisch würde ich eigentlich vorschlagen lieber 16x16 Blöcke o.ä. einzuteilen, aber mal gucken wie sich das vom Aufwand her verhält. ;)
Einmal beim Start das zu renderende Bild in 4 (oder mehr, je nach Threads auf der CPU) einzuteilen und damit loszurechnen würde ich eigentlich nicht empfehlen. Es ist zwar etwas etwas einfacher umzusetzen als eine dynamischere Verteilung, kann aber nahezu beliebig schief gehen.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

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

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

34

19.03.2014, 18:29

@BlueCobold:
Eine dynamische Lastverteilung lässt sich ganz einfach über eine atomare Variable realisieren
Das ginge natürlich auch. Aber auch hier brauche ich keinen Thread Pool. Einfach eine Menge von Threads einmal starten reicht da auch.
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]

35

19.03.2014, 18:53

Threads starten verursacht einiges an Overhead.
Wenn man Multithreading für bessere Performance verwendet dann will man das vermutlich vermeiden.

Hat meine eine "Menge von Threads" holt man sich eine Menge an Schreibarbeit das zu verwalten und die Chance auf Deadlocks.
Ist man mit Multithreading nicht vertraut ist das ne harte Nuss.

Ein sehr eleganter Lösungsansatz wurde ja bereits genannt.
Was spricht gegen OpenMP oder die PPL? Doch überhaupt nichts oder?

MFG
Bilder zu meinem Projekt: ParSim

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

36

19.03.2014, 18:58

Nein, da spricht sicher nichts dagegen. Aber bei unabhängigen Pixeln in einem Raytracer sehe ich keine Probleme mit Schreibarbeit oder Deadlocks. Ich bin halt der Meinung eine einfache und der Situation angemessene Lösung zu verwenden.
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]

37

19.03.2014, 19:09

Es würde eine Synchonisation notwenid sein.

Nachdem alles fertig ist müssten die Threads warten.
Dann müssen sie gezielt geweckt werden, für das nächste Frame.
usw.

Ob das schwer ist ist subjektiv, es ist aber vermeidbare Schreibarbeit.
Bilder zu meinem Projekt: ParSim

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

38

19.03.2014, 19:16

Ist überhaupt nicht notwendig. Siehe meine früheren Antworten oder die von David. Genau das will ich ja vermeiden.
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]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

39

20.03.2014, 08:17

Korrekt. Meine Kritik bezog sich darauf, dass da exakt der gleiche Code zweimal hintereinander stand, was genau 1 Reflexion ergab.

40

01.07.2014, 21:39

Hallo Forum,

habe mich zwar schon länger nicht mehr zu dem Thema gemeldet, aber im Hintergrund immer ein bisschen dran rumgebastelt.

Nichts aufregendes, aber ich wollte einfach mal ein aktuelles Bild präsentieren.


(Link)


Würde mich über Kritik und Tipps freuen.

Besonders von Leuten, die sich mit Raytracing beschäftigt haben und eventuell schon selber Erfahrungen gemacht haben, was wichtig ist und mir auch sagen können was ich als Nächstes einbauen könnte. :)
Zwei Richtungen hätte ich im Kopf:
Einerseits in Richtung Echtzeit, jedoch natürlich nur "schlechte" Grafik, mir persönlich würde es schon reichen mit 10 FPS eine Kugel im Raum bewegen zu können und zu wissen, dass das ohne eine 3D-Grafikbibkiothek funktioniert.
Anderseits die Renderqualität verbessern, vielleicht noch Refracting, andere Beleuchtungsarten und mehr mit Texturen. Hier ist die Renderzeit nicht so wichtig.


PS:
Wenn ihr euch über fortgeschrittene (bzw unpassende) Themen unterhalten wollt, dann bitte wo anders.
Ihr seht an meinem Code, was ich kann und dass es relativ unwahrscheinlich ist, dass ich ein super ausgeklügeltes Multithreadingsystem einbaue.
Ich weiß ihr meint es nett und wollt weiter helfen, aber so bringt mir das leider nichts.

Werbeanzeige