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!
Was meinen Sie mit "Multithread-Rendering"?Weil keine der APIs wirklich Multi-Thread * -Rendering * erlaubt. –
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