News DirectX 12: Nvidia-Treiber soll Async Compute nachreichen

@ Pipip
Sprich "Rasterizer Order Views". Zugegeben, ich weiß nicht wie das jetzt per Hardware umgesetzt ist. Aber wenn das jetzt per Software simuliert werden kann, dann dürfte laut Logik, was AS per Software angeht, ja AMD auch behaupten können, sie unterstützen Rasterizer Order Views.
Verstehst du was ich meine ?
Ja, da für den API Support nur das Ergebnis eine Rolle spielt; nicht wie die GPU letztendlich zum Ergebnis kommt. Interessanterweise sind ROV meines Wissensstands auch sehr leicht durch SW-Emulation zu emulieren (Mutex pro Pixel), aber auch sehr langsam dann (Busy-Wait auf Mutex), so dass die klassische Implementierung für Verfahren, die sich mit ROV beschleunigen lassen, deutlich schneller wäre. Dementsprechend finde ich auch die Betrugsvorwürfe in dieser Hinsicht etwas deplatziert. Eine gute Analogie hierfür wäre, wenn Intel für einen Xeon-PHI einen DX 12 Treiber schreiben würde und sie als DX 12 fähige GPU verkaufen würde. Mangels Hardware-Beschleunigung wäre die Karte vermutlich nicht schnell; sie würde jedoch dennoch jedes DX 12 Programm ausführen können. Hier würde sicher auch kaum jemand sagen "Beschiss, ist ja gar nicht DX 12 fähig; alles nur Software", sondern die meisten würden meinen "Scheiss Architektur; viel zu langsam für aktuelle Spiele".


@ max_1234
Die Erklärung aus Post #266 ist leider falsch; auch der Wiki-Text liest sich komisch. Da hier oft falsche Vorstellungen zwischen den API-Unterschieden herrschen erkläre ich das mal im Folgenden etwas genauer.

Die Befehle werden im Falle von DirectX 11 und OpenGL einzeln an die API übergeben. Dabei müssen die Befehle von der API ersteinmal genau in der Reihenfolge ausgeführt werden, in der sie an die API übergeben wurden. Aus dem Grund ist auch das Übergeben an die API ein rein sequentieller Vorgang, wo ein Programm hier auch effektiv nur einen Thread verwenden kann. Innerlich reiht die API bzw. der Treiber die Befehle dann in die Schlangen für die der unterschiedlichen Engines (Copy, Compute, Graphik) ein, wie man sie aus DirectX 12 kennt. Sind die Schlangen voll so werden sie mit sämtlichen darinnen enthaltenen Befehlen zur GPU an die entsprechenden Engines geschickt. Beim Einreihen der Befehle in die Schlangen muss der Treiber zunächst wieder darauf achten, dass die Reihenfolge der Befehle durch Synchronisation der unterschiedlichen Schlangen erhalten bleibt. Dadurch müssen die Engines der GPU die Befehle auch weitestgehend sequentiell ausführen.

Aber: DirectX11 und OpenGL sind APIs die auf Resource-Binding basieren. Deshalb kann ein Shader auch nur aus denjenigen Resourcen lesen und in diejenigen Resourcen schreiben, die zuvor an ihm gebunden wurden. Da Lese- und Schreibzugriffe im voraus bekannt sind, kann der Treiber prinzipiell eine Abhängigkeitsanalyse (https://de.wikipedia.org/wiki/Abhängigkeitsanalyse) verwenden, um die Befehle zu parallelisieren. Dadurch könnten die verschiedenen Engines der GPU die Befehle sofern es die Abhängigkeiten erlauben auch gleichzeitig bzw. parallel ausführen, wodurch der Treiber wiederum die Async-Compute-Fähigkeit der GPU selbst unter DirectX 11 und OpenGL verwenden könnte. Ich weiß nicht 100 prozentig ob die aktuellen Treiber diese Optimierung verwenden, nehme es aber stark an. Zumindest von OpenCL weiß ich es sicher.

Im Gegensatz dazu versteckt DirectX 12 die unterschiedlichen Schlangen für die verschiedenen Engines nicht innerhalb des Treibers, sondern macht sie für die Anwendung direkt zugänglich. Dadurch kann die Anwendung die einzelnen Schlangen selbst manuell befüllen. Da die Schlangen asynchron zueinander abgearbeitet werden ist die Anwendung dafür verantwortlich die Befehlsabhängigkeiten zwischen unterschiedlichen Schlangen zu modellieren. Über das Modellieren der Abhängigkeiten kann die Anwendung erreichen, dass die GPU die Befehle parallel abarbeiten kann. Zudem kann die Anwendung das Einfügen in die Schlangen prinzipiell mit mehreren Threads vornehmen. Um die Parallelität in der Anwendung weiter zu erhöhen und um den Overhead des Einfügens zu veringern werden zusätzlich Befehle nicht einzeln sondern in die Schlangen eingereiht, sondern zunächst zu Gruppen (Command Buffer) zusammengefasst und danach als komplette Gruppe in die Schlange eingereiht.

@Ampre
Hast du eine Quelle was da genau Vorsich geht? Irgendwas ist da ja im Argen!
Wie genau meinen?
 
Zuletzt bearbeitet:
@ crazy_tomcat

Wurde jetzt schon mehrfach verlikt.
Es wird direkt darauf hingewiesen und sogar im Wortlaut erwähnt.

nvidia-geforce-gtx-980-ti-directx-12-advanced-api-support.png
 
Und damit eigentlich ne Sache fürs Gericht wegen unlauteren Wettbewerb durch Werbelügen .... Anwalt anyone?
 
@Sebbi:
Und wie soll der Anwalt das vor Gericht beweisen?
Nvidia sagt ja umsonst momentan nicht und anders als bei der 3,5GB Geschichte ist das Problem hier im Notfall per Software-Emulation scheinbar "lösbar" (im rechtlichen Sinne).
Sie werden erst dann was sagen, wenn sie "irgendwie" Async Compute hinbekommen...

wahnhahn schrieb:
Ich versteh grad überhaupt nicht wo bei alles das Problem liegt :freak:.
meckswell schrieb:
Sehr interessanter Artikel. Es ist also nur noch nicht richtig im Treiber implementiert, aber die Karten können das schon. Alles locker und kein Problem, wieder mal viel Rauch um nichts.
Das Problem ist, dass man beim lesen des Textes nicht die PR vergessen darf.
Das sind keine "einfach so" Aussagen. Nvidia gibt zu, überspitzt gesagt, dass ihr DX12 Treiber zusammengefrickelt ist und eigentlich noch gar nicht fertig sind.
Wenn man dann überlegt was für ein Killerfeature die Nvidia Treiber angeblich doch für viele in der Vergangenheit immer waren, dann weiß man was für Probleme Nvidia vermutlich gerade zu haben scheint.
Noch dazu wurde bei der 970 genau so vorgegangen...
 
Viele müssen hier mal lernen zwischen Hardware und Software zu unterscheiden.

Auf fast jeder Grafikkarte kann fast jedes Feature emuliert werden. Die frage ist nur wie effektive dann diese Feature per Softwaresimulation läuft!

Wenn das Feature in Hardware gegossen wird ist es zumeist sehr viele schneller.

Jetzt ist natürlich die Frage wie gut Nvidia Implementierung von Async Compute in der Hardware ist. Aber da wurde ja schon einige mal gesagt das hier einige Schwachstellen zu finden sind. Man erkennt es ja auch am DX12 3dmark Benchmark wo Nvidia trotz 50% mehr Rasterleistung (Hardware) gut 10-20% hinter dem Polygonenoutput von AMD hängt da AMD in der Hardware besser aufgestellt ist da Nvidia eher seriell Verarbeitet und AMD eher parallel.
 
RayKrebs schrieb:
Außerdem sind Benchmark eh recht uninteressant, weil wer spielt schon Benchmarks? Selbst wenn das auch für Nvidia's Architektur ein Nachteil ist, dass bei dem Context Switch zwischen Draw und Compute ein Delay entsteht, muss man erst mal abwarten wie es sich in echten DX12 Spielen dann bemerkbar macht. Dann kann man immer noch auf Nvidia einschlagen.

Interessant ist die Frage wie man das sinnvoll messen kann und wie man das in einen griffigen Wert kriegt.

Ein Histogramm über die FPS bzw. die benötige Zeit für jeden Frame ist nicht griffig genug.
Würde eine Standartabweichung das ausreichend abbilden?
Das Ergebnis einer Summenfunktion der Abweichungen vom einem gleitenden Mittelwert der Renderfrequenz bzw. FPS?
Gibt es andere Verfahren die einen sinnvollen "Smoothfactor" abbilden können?

Ist hier jemand fit in Statistik?
 
ampre schrieb:
Man erkennt es ja auch am DX12 3dmark Benchmark wo Nvidia trotz 50% mehr Rasterleistung (Hardware) gut 10-20% hinter dem Polygonenoutput von AMD hängt da AMD in der Hardware besser aufgestellt ist da Nvidia eher seriell Verarbeitet und AMD eher parallel.

Also zunächst einmal misst der 3Dmark nicht den Polygon-Durchsatz, sondern den Draw-Call Durchsatz und zweitens hat das mit Async compute nichts zu tun, weil es gar nicht benutzt wird.
 
Imho ist vieles gar nicht so spannend. AMD kämpft ja damit ihre Shader auszulasten, so dass ASC ihnen sehr dient, NV hat bereits sehr hohe Auslastungen, so dass ihnen es nicht hilft. Es zeigt sich halt, dass die hohe Rechenleistung der Radeons nun ein echter Vorteil wird und dass das AMD Design wie immer wieder zukunftsorientierter ist.
 
Und... Steht doch nix falsches auf dem Werbeblatt. Können tun die das, Details stehen halt nicht auf der Folie. Wie die Performance aussieht wird sich zeigen.
 
Was mich mal interessiert ist:

Welche Karten wurden bei denn Benchmarks verwendet.
Welche Einstellungen.
usw.


Was mir zu bedenke gibt ist das ,das Verendete Game ja mehr oder Weniger auf AMD Karten ausgelegt ist .
Na Egal ich hab ja noch eine XFX DD 280X rumliegen vielleicht ist die ja dann schneller als meine Gigabyte 980 Ti G1 :) :) :)

LG
Andy
 
Dai6oro schrieb:
Nvidia ist ja so dreist und gibt das für Geforce Grafikkarten allgemein an:

http://www.geforce.com/sites/defaul...10-launch-directx-12-advanced-api-support.png

Ist das dann auch korrekt?

Na klar....wie wir mittlerweile aus anderen Diskussionen und auch hier weiter oben Erfahren haben ist auch eine Geforce 2 MX "DX-12" fähig....ist halt etwas langsam. Aber grundsätzlich solange eine beliebige Emulation die Kompatibilität herstellt ist alles möglich.
Die DX-12 API schreibt nicht vor dass irgendwelche Teile über definierte Hardware ablaufen müssen...Die hardware muss den "Befehl" nur fressen und ausgeben. Wie sie das macht (Stichwort Treiber) und wie schnell bzw. in welchem Ablauf spielt dabei keine Rolle.
 
Zuletzt bearbeitet:
Andy1978 schrieb:
Was mir zu bedenke gibt ist das ,das Verendete Game ja mehr oder Weniger auf AMD Karten ausgelegt ist .
Es ist nicht auf AMD ausgelegt, es ist ausgelegt auf DX12.
Dazu hat es Support für Vulkan und hat aufgrund der Leistungsfähigkeiten der Mantle API diese auch unterstützt, und daher auch Support von AMD erhalten.
Ansonsten orientiert sich das Spiel an der DX12 API und nutzt die darin entjaltene Asychronous Shader Funktion.
Das nvidia bisher nur mangelhaften, ja womöglich gar keinen Support für AS bietet bedeutet nicht das es auf AMD ausgelegt oder gar auf die GCN Architektur.

Aber gleich kommen vermutlich Rhetorikperlen mit Gameworks Vergleichen... Wo der Entwickler ganz offensichtlich nur auf einen Hersteller hin optimiert.

Ansonsten darf sich wohl nvidia eben alles erlauben. Es gibt immer wieder Leute die sowas rechtfertigten wollen, wie auch bei der Speicheranbindung@970...

Aber als der AMD TLB Bug bekannt wurde, da war hier die Hölle los, dabei war nicht mal einer der Kommentatoren von dem Problem betroffen :lol:
 
PiPaPa

Dabei muss man sagen, der AMD TLB Bug wurde offen von AMD kommuniziert worden. Und so tragisch war der auch nicht, da er vllt in zig Stunden ein Blue Screen verursachen konnte. Beim Desktop vllt egal, bei Server war das natürlich ein anderer Fall.
 
Hier wird das Thema auch beleuchtet und sehr vielseitig bis ins kleinste Detail untersucht: http://www.tomshardware.de/amd-radeon-r9-nano-grafikkarte-gpu,testberichte-241924-8.html
Wenn man sich die Seite 8 genauer durchliest und evtl. noch den NV Developer Guide anschaut, wird recht deutlich, dass NV da sehr schlecht aufgestellt ist. Um ehrlich zu sein, schaut es sehr düster aus.
Kein Wunder, dass NV dauernd neue Treiber bringen muß. Ist halt Pflicht, wenn man die Schwächen der Hardware nur noch mit Softwareanpassungen abfangen kann und muß.
 
Aber das sind alles nur Spekulationen . Genaues weiß keiner . Bitte wir dürfen nicht vergessen das Nvidia unter DX11 die schnellsten Pixel Beschleuniger hat. Wie es unter DX12 ausschaut werden die Benchmarks und Spiele zeigen .
Ich warte mal ab :)
 
kisser schrieb:
Also zunächst einmal misst der 3Dmark nicht den Polygon-Durchsatz, sondern den Draw-Call Durchsatz und zweitens hat das mit Async compute nichts zu tun, weil es gar nicht benutzt wird.

Und jeder Drawcall hat 120 Polygonen die durchgesetzt werden müssen. Deshal ist es auch ein guter Polygonenoutputtest. Es könnte auch sein das hier Nvidia limitiert.
 
ampre schrieb:
Man erkennt es ja auch am DX12 3dmark Benchmark wo Nvidia trotz 50% mehr Rasterleistung (Hardware) gut 10-20% hinter dem Polygonenoutput von AMD hängt da AMD in der Hardware besser aufgestellt ist da Nvidia eher seriell Verarbeitet und AMD eher parallel.
So so, also am 3DMark (API_Overhead) kann man das also schon erkennen. Du bist mir ja mal wieder ein Experte ... ;)
Wenn das so ist, dann sollte deine Hawaii meine kleine, verkrüppelte Maxwell ja spielend übertrumpfen können & lass mal was sehen ... :lol:
 

Anhänge

  • 3DMark_APIOverhead.PNG
    3DMark_APIOverhead.PNG
    359,6 KB · Aufrufe: 489
Zurück
Oben