2013-05-28 10 views
6

Ich habe viel über Multi-Thread-Rendering gelesen. Die Leute haben alle Arten von seltsamen und wundervollen Schemas vorgeschlagen, um Arbeit an die GPU mit Threads zu übermitteln, um ihre Frameraten zu beschleunigen und mehr Zeug zu machen, aber ich habe ein kleines konzeptuelles Problem mit der ganzen Sache und ich Ich dachte, ich würde es hier von den Gurus laufen lassen, um zu sehen, was du denkst.Multi-Thread-Rendering D3D/OpenGL/Was auch immer

Soweit ich weiß, ist die Grundeinheit der Gleichzeitigkeit auf einer GPU die Warp. Das heißt, dass es auf der Pixelebene niedriger ist als auf der Ebene der Geometrieübergabe. Da die Einheit der Parallelität auf der GPU der Warp ist, muss der Treiber ziemlich fest mit Mutexen gesperrt werden, um zu verhindern, dass mehrere Threads die Beiträge der anderen vermasseln. Wenn dies der Fall ist, sehe ich nicht, wo der Vorteil der Codierung zu D3D oder OpenGL Multithreading-Primitiven ist.

Sicherlich ist die effizienteste Methode, Ihre GPU in einem Multithreading-Szenario zu verwenden, auf der höheren, abstrakten Ebene, auf der Sie mehrere Arbeitsaufträge sammeln, bevor Sie sie einreichen? Ich meine eher als zufällig Befehle von mehreren Threads zu verschachteln, ich hätte gedacht, dass ein einzelner Block Arbeit von mehreren Threads akzeptiert, aber mit ein wenig Intelligenz darin, um sicherzustellen, dass die Dinge für eine bessere Leistung vor an den Renderer gesendet werden, wäre ein viel größerer Gewinn, wenn Sie mit mehreren Threads arbeiten möchten.

Also, wo D3D/OpenGL Multi-Thread-Rendering in der tatsächlichen API unterstützen?

Hilf mir mit meiner Verwirrung!

+1

Was meinen Sie mit "Multithread-Rendering"?Weil keine der APIs wirklich Multi-Thread * -Rendering * erlaubt. –

+0

D3D11 Befehlslisten auf verschiedenen Threads und "gleichzeitige Objekte auf verschiedenen Threads", in OpenGL unzählige Blogs und Beiträge mit Menschen, die versuchen, "ihre Renderer Multi-Threaded" - zu viele, um zu zählen :). – Robinson

Antwort

8

Ihre Frage kommt von einem Missverständnis des Unterschieds zwischen "machen ihre Renderer Multithreading" und "Multithread-Rendering".

Ein "Renderer", genauer gesagt ein "Rendering-System", gibt mehr als nur Rendering-Befehle an die API aus. Es muss die Erinnerung herum mischen. Es muss möglicherweise Texturen dynamisch in und aus dem Grafikspeicher laden. Möglicherweise müssen Daten nach einem Rendervorgang gelesen werden. Und so weiter.

Um einen renderer Multithread bedeutet genau das: um das Rendering-System machen mehrere Threads zu machen. Dies könnte zum Beispiel die Verwaltung von Szenengraphenaufgaben wie das Erstellen der Liste von Objekten, die gerendert werden sollen (Frustum Culling, BSPs, Portale usw.), sein. Dies könnte einen Thread haben, der für die Texturspeicherverwaltung vorgesehen ist, der Texturen nach Bedarf ein- und ausblendet, von der Festplatte lädt und so weiter. Dies könnte wie im D3D11-Fall von Befehlslisten sein, wo Sie eine Reihe von Rendering-Befehlen parallel zu anderen Tasks erstellen.

Der Prozess des Rendering die Vorlage der tatsächlichen Rendering an die API-Befehle, ist nicht fädelt. Sie haben in der Regel einen Thread, der für die grundlegenden glDraw* oder ::DrawIndexedPrimitive Arbeit verantwortlich ist. Mit D3D11-Befehlslisten können Sie Sequenzen dieser Befehle erstellen, sie werden jedoch nicht parallel mit anderen Renderbefehlen ausgeführt. Es ist der Rendering-Thread und der Hauptkontext, der für die Ausgabe der Befehlsliste verantwortlich ist. Die Befehlsliste ist nur dazu da, diese Liste thread-freundlicher zu machen.

+0

Herzlichen Glückwunsch zu 100K;) –

1

In Direct3D 11 erstellen Sie im Allgemeinen verzögerte Kontexte, zu denen Sie Zeichnungsaufrufe von Ihren Worker-Threads ausführen. Sobald die Arbeit abgeschlossen ist und Sie zum Rendern bereit sind, generieren Sie eine Befehlsliste aus jedem zurückgestellten Kontext und führen sie im unmittelbaren (Front-Thread-) Kontext aus. Dadurch können die Zeichenaufrufe in mehreren Threads erstellt werden, während die korrekte Reihenfolge der Zeichenaufrufe etc. beibehalten wird.

+0

Aha. Aha. Also wirklich, alles was es ist, ist eine ausgefallene Hose-Befehlsliste. – Robinson

Verwandte Themen