DirectX-12-Support: Aktuelle Grafiktreiber mit neuen DX12-Features

Weil "concurrent execution" eben nur das i-Tüpfelchen bei AS darstellt, der eigentliche Vorteil besteht, bei AS fähiger Hardware(!), ja wohl daraus "kostenlos" zwischen den 3D, compute und copy queues zu wechseln.
AMD hat hier zusätzliche den vorteil, bei freier Ressourcen, dies auch Parallel zu tun.

Genau. Denn das ist concurrent execution. Alles andere ist time-sliced oder pre-allocated.

edit: Aber – ja: AMD hat hier Vorteile und zieht i.d.R. deutlich höheren Nutzen daraus, wenn ein Spiel oder eine Anwendung die Compute-Queue als „asynchron“ markiert. Das hat ja auch keiner – zumindest nicht ich – bestritten. Es besteht also kein Grund für unkontrollierte Beißreflexe. :)
 
Zuletzt bearbeitet:
Ob das „immer“ so ist, kann ich nicht sagen. Es gibt durchaus auch Beispiele, wo bei Maxwell oder gar Kepler eine Compute Queue zum Einsatz kommt (aber auch welche, wo entgegen anderer Hardware alles in die Graphics queue gestopft wird). Allgemeinplätze sind gerade in Bezug auf asynchronous compute und die eigentlich gemeinte, weil performancerelevante concurrent execution, fehl am Platze. Aber dank der PR-Gläubigkeit vieler und der „Tatsache“, dass PCGH ja sowieso „gekauft“ ist, wenn man was anderes behaupetet als die PR, ist das ein Kampf gegen Windmühlen.
Das Thema ist komplex und ich finde den Punkt "Async Compute" in dem Bezug auch schwammig.
Ich meine wie definiert ihr das? Ein Shader-Cluster der simultan mit GFX und Compute-Shadern gefüttert werden kann, ohne Kosten dafür zu bezahlen?

Nee, diesmal kein Typo, das gibt der Treiber so her. Wahrscheinlich dieselbe „Konsequenz“ wie beim FP16-Support für 11.3 aber nicht für 12.
Uh, dass scheint wenig Sinn zu ergeben.
Irgendwann sollte aber das ganze mal nachkommen.

Weil "concurrent execution" eben nur das i-Tüpfelchen bei AS darstellt, der eigentliche Vorteil besteht, bei AS fähiger Hardware(!), ja wohl daraus "kostenlos" zwischen den 3D, compute und copy queues zu wechseln.
AMD hat hier zusätzliche den vorteil, bei freier Ressourcen, dies auch Parallel zu tun.

Die Fähigkeit NICHT "kostenlos" zwischen den 3D, compute und copy queues zu wechseln bricht idR Nvidia das Genick, es ist erst einmal vollkommen unabhängig von "concurrent execution".

Also eher kein Kampf gegen Windmühlen, sondern ein Kampf gegen Nvidias Präsentationsfolien --scheinbar wieder ein Nvidia typisches Kommunikationsproblem.
Nvidia besitzt ebenso dedizierte DMA-Engines, die Copy-Queue sollte ebenso simultan ausgeführt werden können.
Und eig. geht es bei Multiengine hauptsächlich um die simultane Ausführung, um eine höhere Performance zu erreichen.
Die Hardware arbeitet ansonsten immer in der Art und Weise, wie sie es beim restlichen Workload tut.

Ist zwar halb OT (weil nicht DX12 bezogen), aber Intel hat sein(e) Vertrauen/Verlässlichkeit in Sachen GPUs/Treiber mMn verspielt, z.B. durch Späße wie fehlenden Vulkan- und OpenGL 4.5-Support unter Windows.
Der OpenGL-Treiber von Intel war für Windows aber lange Zeit vor dem Linux-Treiber und ist es immer noch was jedenfalls die Performance angeht.
Die Mühlen drehen sich da leider nur nicht besonders schnell, auch AMD hat sich immer gerne Zeit gelassen bis die neuste OGL-Version unterstützt wurde.
Fehlende Pläne bezüglich Vulkan-Support sind aber wirklich harte Brocken, ich hoffe Intel besteht nicht zu lange darauf.
 
...
Nvidia besitzt ebenso dedizierte DMA-Engines, die Copy-Queue sollte ebenso simultan ausgeführt werden können.
Und eig. geht es bei Multiengine hauptsächlich um die simultane Ausführung, um eine höhere Performance zu erreichen.
Die Hardware arbeitet ansonsten immer in der Art und Weise, wie sie es beim restlichen Workload tut.
...
Du kannst nicht während der Verarbeitung der 3d queue die copy queue parametrieren und ausführen lassen, du kannst nur die copy queue parametrieren dann ausführen lassen und während der Ausführung die 3d queue ausführen lassen.
Aber ja, die eigentliche "copy" Ausführung ist simultan, nur leider die Parametrierung dieser nicht. --Leider wieder typisch AC Nvidia, nur zu nutzen mit Haken & Ösen.

Die Bezeichnung Async compute ist älter als DX12 und älter als AMDs GCN. Insofern definiert MS mit "Multi-Engine" nicht Async compute sondern beschreibt nur ihre DX12 Implementation von Async compute.

PCGH_Carsten schrieb:
edit: Aber – ja: AMD hat hier Vorteile und zieht i.d.R. deutlich höheren Nutzen daraus, wenn ein Spiel oder eine Anwendung die Compute-Queue als „asynchron“ markiert. Das hat ja auch keiner – zumindest nicht ich – bestritten. Es besteht also kein Grund für unkontrollierte Beißreflexe.
Nvidia konzeptionell schlechtes Abschneiden bei Nutzung von AC liegt nicht an der stärke von AMD sondern einfach nur daran, dass Nvidias AC Implementation schlicht nicht vorhanden ist. Und dies können sie offensichtlich auch nicht hinter ihrem Treiber verstecken.
Wenn bei jeder Queue Nutzung grundsätzlich erst einmal ein Kontextwechsel nötig ist braucht man über deren parallele Verarbeitung (wenn sie es denn könnten) noch nicht einmal nachdenken, egal wie viel Hardware Ressourcen ungenutzt vorhanden sind oder nicht.
 
Zuletzt bearbeitet:
Wow das ist ja echt ein Clusterfuck :what: War das bei DX11 auch so schlimm? Wie sieht es bei Vulkan im Vergleich dazu aus?
 
Das brauchen wir nicht definieren. Das tut Microsoft, Stichwort DirectX Synchronisation and Multi-Engine – wir haben der besseren Wiedererkennbarkeit zuliebe nur die allseits plattgetrene „AC“ Kurzform gewählt. Im Heftartikel vor ein paar Ausgaben haben wir es bereits etwas ausführlicher erklärt.
Die API muss aber unter jedem Hersteller funktionieren.
Die Erklärung das es auch von Treiber-Seite aus aktiviert werden muss ist halt intransparent und wirkt noch undurchsichtiger wenn z.B. Kepler und Maxwell für eigene Spiele sogar eine Compute-Queue verwenden.
Welche sind das by the way?

Du kannst nicht während der Verarbeitung der 3d queue die copy queue parametrieren und ausführen lassen, du kannst nur die copy queue parametrieren dann ausführen lassen und während der Ausführung die 3d queue ausführen lassen.
Aber ja, die eigentliche "copy" Ausführung ist simultan, nur leider die Parametrierung dieser nicht. --Leider wieder typisch AC Nvidia, nur zu nutzen mit Haken & Ösen.
Gibt es dafür handfeste Anhaltspunkte? Weil Nvidia besitzt ebenso zwei dedizierte DMA-Engines, die unter CUDA auch mindestens einige Copy-Operationen simultan zum Computing ausführen.

Nvidia konzeptionell schlechtes Abschneiden bei Nutzung von AC liegt nicht an der stärke von AMD sondern einfach nur daran, dass Nvidias AC Implementation schlicht nicht vorhanden ist. Und dies können sie offensichtlich auch nicht hinter ihrem Treiber verstecken.
Und wie sieht es bei Intel, Imagination, ARM und Qualcomm aus?
Mir wird zu häufig so getan, als ob nur AMD und Nvidia existiert.
 
Und wie sieht es bei Intel, Imagination, ARM und Qualcomm aus?
Mir wird zu häufig so getan, als ob nur AMD und Nvidia existiert.

Dabei ist halt das Problem, dass es im PC-Markt eben eigentlich nur noch nVidia und AMD gibt. Intel hat zwar stark dazugewonnen aber ist für ernsthafte Spiele eben immer noch nicht ausreichend (bzw. die stärkeren, für Spiele knapp ausreichenden Lösungen nur in Verbindung mit den teuersten CPUs zu haben... wer sich so ein Ding kauft, leistet sich auch spielend eine Highendgrafikkarte. Von Intels Grafiktreibern ganz zu schweigen) und Imagination (PowerVR) sind für uns hier auch komplett uninteressant. Das ist der "Nachteil" wenn man in einem Spielehardwareforum diskutiert, man kann gute Argumente bringen aber die meisten sehen das eben nur aus der Sicht der reinen Spieler ^^
ARM und Qualcom bieten ganz nebenbei nicht einmal PC-Hardware an...
 
Hmm, habe ich in Bezug auf die DMA Grenze für Preemption diese Analyse bei Anandtech falsch verstanden:

Preemption Improved: Fine-Grained Preemption for Time-Critical Tasks - The NVIDIA GeForce GTX 1080 & GTX 1070 Founders Editions Review: Kicking Off the FinFET Generation

Ist Pascal damit nicht auch in der Lage, unterhalb der DMA Buffer-Ebene Preemption zu betreiben? Oder ist das einfach noch nicht im Treiber freigeschaltet und deshalb in der Tabelle entsprechend aufgeführt? Nur für mein Verständnis, da sich ja nun viele Diskussionen um die Qualität der Preemption und die Effektivität von Async Compute drehen ...
 
Nvidia konzeptionell schlechtes Abschneiden bei Nutzung von AC liegt nicht an der stärke von AMD sondern einfach nur daran, dass Nvidias AC Implementation schlicht nicht vorhanden ist. Und dies können sie offensichtlich auch nicht hinter ihrem Treiber verstecken.
Wenn bei jeder Queue Nutzung grundsätzlich erst einmal ein Kontextwechsel nötig ist braucht man über deren parallele Verarbeitung (wenn sie es denn könnten) noch nicht einmal nachdenken, egal wie viel Hardware Ressourcen ungenutzt vorhanden sind oder nicht.

Die AC-Implementierung ist schon vorhanden - sonst dürften die Treiber keinen DX12-Support melden und das würde selbst Microsoft bestimmt bemerkt haben. Und wenn die nicht, dann AMD, die M$ was gesteckt hätten. :)
Da die Diskussion aufgrund sich ständig wiederholender und daher im Kreise drehender Argumente eh nichts bringt, mal zwei grundlegende, eher rhetorisch gemeinte Aspekte:
- Warum kann concurrent execution und in Folge AC überhaupt zusätzliche Leistung bringen? Und die Folgefrage daraus: Wieviel davon ist auf AMDs überlegene Implementierung und wieviel auf in erster Linie überhaupt vorhandenes Potential zurückzuführen.
- Wie parallel ist die parallele Verarbeitung? Spätestens bei den einzelnen ALUs hört's ja auf. Also beschränkt sich AC am Ende auf (per Software signalisiertes) OOO und (in Hardware mögliches) Zero-Overhead-Context-Switch?
- Das ganze Trara um eine sinnvolle Option in DX12 kommt mir in etwa so aufgeblasen vor, wie Nvidias glorfiziertes Vertex-Handling +1 Attribut, was dann auf etlichen Slides als „Multi Projection Acceleration“ betrommelt wurde.

Hmm, habe ich in Bezug auf die DMA Grenze für Preemption diese Analyse bei Anandtech falsch verstanden:

Preemption Improved: Fine-Grained Preemption for Time-Critical Tasks - The NVIDIA GeForce GTX 1080 & GTX 1070 Founders Editions Review: Kicking Off the FinFET Generation

Ist Pascal damit nicht auch in der Lage, unterhalb der DMA Buffer-Ebene Preemption zu betreiben? Oder ist das einfach noch nicht im Treiber freigeschaltet und deshalb in der Tabelle entsprechend aufgeführt? Nur für mein Verständnis, da sich ja nun viele Diskussionen um die Qualität der Preemption und die Effektivität von Async Compute drehen ...

Laut Nvidia (das haben Ingenieure auch uns gegenüber im Gespräch bestätigt) soll das zumindest unter Cuda (irgendwann) bis zur Instruktionsebene herunter möglich sein. Hier geht es darum, was von all den schönen Versprechungen der Treiber aktuell unter DirectX (12) implementiert wird.


Die API muss aber unter jedem Hersteller funktionieren.
Die Erklärung das es auch von Treiber-Seite aus aktiviert werden muss ist halt intransparent und wirkt noch undurchsichtiger wenn z.B. Kepler und Maxwell für eigene Spiele sogar eine Compute-Queue verwenden.
Welche sind das by the way?
Ja, muss sie und tut sie idR auch. Und ja, es ist intransparent und das vermutlich auch mit voller Absicht.
Welches Programme genau, dafür müsste ich jetzt mal tief in den Archiven wühlen - und dafür fehlt in der Abgabewoche mit mehreren offenen Tests leider die Zeit.


--
Und damit/deswegen hänge ich mich vorerst mal hier wieder aus. Sorry.
 
Zuletzt bearbeitet:
Sehr guter Thread - war bis hierher gut zu lesen & wieder was gelernt :daumen:
Zum Thema: ich bin mir sicher, das DX12 nächstes und übernächstes Jahr noch wachsen wird, vielleicht aufgrund der Hardware, vielleicht aber auch aufgrund der Software, sei es nun M$/DX12 oder Vulkan/Mantle @MultiOS
Hasta luego, amigo
 
...
Da die Diskussion aufgrund sich ständig wiederholender und daher im Kreise drehender Argumente eh nichts bringt, ...
Weil es immer wieder falsch/verzerrt dargestellt wird. ZB
PCGH schrieb:
...
Genauer gesagt schaffte es die Primitive-Level Graphics-Preemption bei AMD bereits beim Update vom 16.7.2 auf den 16.7.3.
...
Eine feinere Preemption-Granularität kann aber auch die Auslastung der Einheiten verbessern, ...
Wobei dies eben nicht auf AMD zutrift, die Firma die bei DX12 nur mit "Preemption" arbeitet ist Nvidia. Hier wird suggeriert dass beide (AMD und Nvidia) in etwa die gleichen Probleme haben, dies ist aber nicht so. AMD ist Nvidia in Bezug auf AC/AS meilenweit enteilt.
AMD (Asynchronous Shaders Evolved) schrieb:
This is where the quick response queue comes into play. Putting the ATW shader on this queue gives it priority access to the GPU’s compute units, making it far more likely to complete before the next refresh even when it is submitted late in each frame interval. And since it doesn’t need to pre-empt other graphics tasks already in flight, it allows the GPU to start working on the next frame quickly.
Und dies war/ist auch ohne AMDs "quick response queue" update so, nur jetzt kann man sie _einfacher_ Priorisieren.
 
Eine flexiblere, sprich schneller einsetzende Preemption bringt auch ohne die parallele Beschickung über DX12-Multi-Engine Vorteile. Es dreht sich nicht alles um Async Compute. Insofern teile ich deine Auffassung nicht, dass hier etwas verzerrt dargestellt oder gar – wie due es nennst – sugerriert wird.
 
Eine flexiblere, sprich schneller einsetzende Preemption bringt auch ohne die parallele Beschickung über DX12-Multi-Engine Vorteile. Es dreht sich nicht alles um Async Compute. Insofern teile ich deine Auffassung nicht, dass hier etwas verzerrt dargestellt oder gar – wie due es nennst – sugerriert wird.

Ok, wo hat den bitte AMDs Lösung irgendetwas mit Preemption zu tun, außer um genau dies (Preemption) zu vermeiden?
 
Ich weiß nicht, was ich noch dazu schreiben könnte, um es stärker zu vereinfachen. Es geht bei fine-grained preemption nicht zwangsläufig um AC - da braucht AMDs keine Preemption edit:, da wie du richtig sagst, ein AMD-Vorteil eben darin besteht, Aufgaben aus der Compute- und der Graphics-Queue on-the-fly ohne gegenseitige Unterbrechung auszuführen..
 
Zuletzt bearbeitet:
Ich weiß nicht, was ich noch dazu schreiben könnte, um es stärker zu vereinfachen. Es geht bei fine-grained preemption nicht zwangsläufig um AC - da braucht AMDs keine Preemption.

Hast Du den bitte für
PCGH schrieb:
... Genauer gesagt schaffte es die Primitive-Level Graphics-Preemption bei AMD bereits beim Update vom 16.7.2 auf den 16.7.3. ..
einen link?
 
OpenSUSE,
Sorry falls das jetzt nervig kommt, aber ist dir aufgefallen dass Carsten deine poste nicht in einer Tour zitiert? Wenn du auf genau den Post vor dir antwortest, bitte kein Zitat dieses posts. Ich lese hier die ganze Zeit mit, Genau wieviel andere und gerade mit tapatalk ist das echt anstrengend zu lesen.

Ansonsten finde ich eure Diskussion echt anregend und hoffe ihr findet einen gemeinsamen Nenner.
 
Hast Du den bitte für

einen link?
Du meinst die Preemption Granularity? Das ist originärer content sozusagen - also keine externen Links wie bei anderen News. AMD hat sich auf Anfrage dazu seit über einer Woche ebenfalls nicht geäußert, in den Release-Notes der RSCE wird es ebenfalls nicht erwähnt.

Relevante Links sind die beiden Treiber-Downloads für die RSCE-Versionen sowie der DX Caps Viewer aus dem Microsoft Windows SDK (früher war er mal im DX-SDK, aber ich glaube, das ist mittlerweile in das W-SDK integriert):

Previous
Where is the DirectX SDK? (Windows)

Der Caps Viewer liest die entsprechenden Erklärungen des Treibers aus und zeigt sie an. Wenn du programmierst, kannst du das auch direkt mit den entsprechenden DX-Aufrufen machen - die kenne ich aber nicht aus dem Kopf, da müsstest du googeln.
 
Zuletzt bearbeitet:
Kleiner, aber lustiger Schreibfehler in der Tabelle:
Max. Feature-Level in Direct X 11.x

Demnach dürfte bei keiner einzigen GPU etwas höheres als 11.4 stehen
 
Zurück