kostenloser Webspace werbefrei: lima-city


[DX11] Multithreaded-Rendering

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    primenic

    primenic hat kostenlosen Webspace.

    Hallo,
    ich programmiere mit einigen Freunden schon eine ganze Wile an einem DirectX 11 Spiel. Wir stehen jetzt vor der Entscheidung, ob wir, wie viele andere, nur einen oder ob wir zwei oder mehr Threads rendern lassen. (Dank DX11 ist das ja jetzt fast Problemlos möglich.)

    Bevor wir uns "falsch" entscheiden, wollte ich erstmal hier in der Runde fragen, was ihr von Multithreaded-Rendering haltet und welche Vor- und Nachteile ihr darin seht.



    Beitrag zuletzt geändert: 24.7.2010 16:45:11 von primenic
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Was heißt Multithreaded rendering für dich? Das mehrere Threads gleichzeitig etwas rendern lassen oder das einer rendert und die anderen was anderes machen? Ich persönlich würde es abhängig machen von der Anzahl der CPUs. Indem du jeder CPU einen Thread überlässt nutzt du das System optimal aus. Es gibt wenig was gegen das Multithreading spricht aber eine Sache ist das komplexere Programm, da du mit den anderen Threads arbeiten musst und einen Dead Lock verhindern solltest.
  4. Autor dieses Themas

    primenic

    primenic hat kostenlosen Webspace.


    Was heißt Multithreaded rendering für dich?


    Sorry, hätt ich vielleicht vorher klären sollen :rolleyes:

    Mit Multithreaded rendering meine ich, dass (unter DirectX z.B.) zwei oder mehr Threads in einen Backbuffer rendern. Ich habe mich noch nicht viel damit auseinandergesetzt, da ich grad noch ein paar andere Sachen zu tun habe, aber ich habe mir das vom Ablauf her etwa so vorgestellt:

    ------
    Physikupdate
    (andere Updates)
    ...
    Hauptthread erstellt Liste der Objekte, die gerendert werden müssen
    2. Thread wird Signal zum rendern gegeben
    Haupt + 2. Thread arbeiten Renderliste ab
    ------

    Ich hatte vor die Renderliste als eine Stack zu implementieren.



    Ich persönlich würde es abhängig machen von der Anzahl der CPUs.

    An diesen Ansatz habe ich auch schon gedacht, allerdings wird das Programm dann wirklich sehr komplex.

    In der MSDN steht, dass GetSystemInfo eine SYSTEM_INFO Struktur ausspuckt und ich dann die Anzahlt der logischen Prozessoren abfragen kann.
    Allerdings ist mir jetzt nich ganz klar was mit den logischen Prozessoren gemeint ist. Sind damit die phys. Prozessoren + evtl. Hyperthred(oder wie auch immer der Müll von Intel heißt, der 2 Kerne in einem vortäuscht) oder sind mit logischen "nur" die Kerne gemeint die auch wirklich vorhanden sind? - Und sind dann mit den phys. Prozessoren die Prozessoren "echter" (also 2 CPUs und nicht 1 CPU und 2 Kernen) Mehr-Prozessorsysteme gemeint? :confused:


    Ich denke, dass wir die 2 bereits vorhandenen Threads (Main und Sound) unabhänig von den Prozessorkernen ausführen werden und einen zweiten Renderthread nur starten, wenn es die Systemresource noch zulassen.
    Man kann doch voraussetzten, dass ein Großteil der PC Nutzer heute min. einen Dualcore Prozessor hat?

    Beitrag zuletzt geändert: 12.8.2010 19:12:32 von primenic
  5. Mit dem Thread starten bei Bedarf ist das so eine Sache.
    Die Erzeugung eines Threads bringt einen gewissen overhead mit sich.
    Eventuell solltest du dann auf einen Threadpool zurückgreifen, der diesen Overhead minimiert.
    Dazu legt dann dein Programm schon ein paar Threads an, die bei Bedarf ablaufen können und nach
    dem Abschluss wieder zur Verfügung stehen.
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!