crazy_tomcat
Lt. Commander
- Registriert
- März 2004
- Beiträge
- 1.046
Schwanzlängenvergleiche?
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Autor: Ext3h 11.09.15 - 13:38
Die Async Shader sind dummerweise auf AMD-Karten absolut essentiell, ohne bekommt man die Shader nicht ausgelastet. Kann sich also effektiv kein Entwicklerstudio leisten auf die zu verzichten, zumal sind die Teile sehr angenehm zu verwenden da man damit auch "problemlos" Shader mit "relativ" kleinen Dimensionen (nur ein paar hundert bis tausend Threads pro Kernel) verwenden kann ohne dass damit die Leistung einbricht.
Der "fehlende Treibersupport" für die Async Queues bei Nvidia ist auch nur die halbe Wahrheit:
Ja, man kann Worstcases konstruieren in denen der Treiber bei Nvidia im Vergleich zur AMD-Hardware(!) komplett versagt. Und ja, Nvidia kann da noch per Treiber einige der Worstcases abfangen.
Aber:
AMD ist da nicht nur "ein bisschen" stärker was die Hardware angeht. Nvidia unterstützt mit Maxwell V2 in Hardware genau 32 parallel abgearbeitete Shader-Aufrufe. Nicht mehr und nicht weniger. Nur primitives Interleaving, keine Dependency-Managment oder ähnliches, das geht dann alles nur über Umweg über die CPU, oder Umweg über den VRAM.
AMD spielt da in einer komplett anderen Größenordnung. Pro ACE 64 Calls, wobei Dependency-Graphen in Hardware pro ACE aufgelöst werden. Und das sind gleich 8 ACEs pro Karte. Macht mit GCN 1.1 und 1.2 jeweils 512 Jobs die parallel abgearbeitet werden können. Bei GCN 1.0 aufgrund von nur 2 ACEs nur 128 Jobs.
Selbst wenn man jetzt berücksichtigt, dass die AMD-Karten insgesamt ca. 4x so viele Threads benötigen um "ausgelastet" zu sein (aufgrund der Shader-Architektur die nur jeweils alle 4 Takte eine Instruktion aus einem bestimmten Thread abarbeiten kann), macht das immer noch eine 4x (512/32/4) so hohe Auslastung der Shader, und das obendrein aufgrund des Dependency-Managments in Hardware noch mal mit wesentlich weniger Randfällen wo ein CPU-Roundtrip notwendig würde.
(Die Anzahl der Hardware-Queues ist übrigens zwischen Nvidia und AMD absolut nicht vergleichbar. AMD mapt jede Software-Queue auf eine Hardware-Queue, kann dafür aber problemlos auch einfach alle 64 Jobs für jeweils eine ACE sowohl aus einer einzelnen(!!!) Queue als auch als allen der ACE zugeordneten Queues ziehen. Nvidia verteilt die Jobs aus den Software-Queues gleichmäßig auf die 32 Hardware-Queues, kann dafür aber pro Queue nur jeweils den aller vordersten Job aktivieren.
GCN 1.2 mit den HWS (2x HWS + 4 ACE anstelle von 8 ACE) ist übrigens noch mal perverser, eine HWS kann sich jeweils wie 2 einzelne ACE verhalten wenn Dependencies berücksichtigt werden müssen, ohne Dependencie-Managment hingegen schafft die dann sogar bis zu 128 Jobs aus einer einzigen Queue parallel abzuarbeiten.)
Ok, und nun um das Thema abzuschließen:
Was aktuell weder AMD noch Nvidia machen, ist Jobs bereits CPU-seitig zu gruppieren. Sprich wenn zwei Jobs den gleichen Kernel verwenden, aber eine zu niedrige Dimension haben, diese automatisch zu einem größeren Job mit einer höheren Dimension (Threadanzahl) zu verbinden.
AMD hat das aktuell (noch) nicht nötig, da jede Arbeitslast die Nvidia überhaupt noch bewältigen kann problemlos durch die Hardware abgefangen wird.
Bei Nvidia hingegen ist das unumgänglich, anders lassen sich die doch relativ niedrigen Hardware-Limits nicht umgehen. Das wird dann allerdings wieder merkbar zu Ungunsten der CPU-Laste gehen, und es gibt auch da wieder Sonderfälle (e.g. wenn Abhängigkeiten zwischen Jobs bestehen) in denen diese Optimierung schlichtweg nicht anwendbar ist.
Man merkt leider doch recht deutlich, dass die gesamten letzten GPU-Generationen von Nvidia bis einschließlich Maxwell V2 auf DX11 zugeschnitten sind. Ja, man hat ein paar Spezialeinheiten verbaut die einem die von Microsoft vorgegebenen Feature-Level garantieren. Allerdings ist die Hardware überhaupt nicht auf die effektiv von AMD diktierte nebenläufige Ausführung zugeschnitten. Das kommt frühestens mit der nächsten Generation.
Autor: Ext3h 11.09.15 - 17:17
Größtenteils Erkenntnisse aus dem Thread hier:
https://forum.beyond3d.com/threads/dx12-async-compute.57188/
Zu mindestens das mit den 32 Jobs bei Nvidia / 64 Jobs pro ACE / (bis zu) 128 Jobs pro HWS ist dort als Ergebnis raus gekommen.
Das 1:1-Mapping von HW- und Software-Queues bei AMD ist ein undokumentiertes Verhalten, erscheint allerdings plausibel da maximal 64 Queues auf GCN 1.1 und 1.2 reserviert werden können, danach steigt der Treiber aus. Bei GCN 1.0 nur 2. Das Verhalten ist experimentell bestätigt, möglicherweise wird diese Koppelung später noch im Treiber gelockert. Ergebnisse entsprechen genau der Anzahl der in Hardware vorhandenen Queues.
Verhalten von GCN bezüglich optimaler, bzw. minimaler Last für vollständige Auslastung, siehe Whitepapers von AMD zu den GCN 1.0, 1.1 und 1.2. Fiji (GCN 1.2, Fury X) z.B. braucht min 16k Threads für vollständige Auslastung - bei optimierten Kerneln. Skaliert bis zu 40k Threads.
Parallele Ausführung von 64 Jobs pro ACE experimentell für GCN 1.0, 1.1 und 1.2 bestätigt. Bei GCN 1.2 konnte in Sonderfällen 128 Jobs pro Queue bearbeitet werden, Whitepaper legen nahe dass HWS-Einheit aus 2 zusammen geschalteten ACE-Einheiten besteht welche unter bestimmten Umständen Arbeitslast umverteilen können.
Das exakte Verhalten von Maxwell V2 ist ebenfalls undokumentiert und deutlich schwieriger zu testen. Auf jeden Fall scheinbar kein Limit in Software-Queues, außer Speicher-Limit auf der CPU-Seite. Jede Art von Abhängigkeiten zwischen Jobs hat die Performance bei Nvidia zusammen brechen lassen, daher die Annahme dass die Hardware das nicht direkt kann. Möglicherweise doch in Hardware vorhanden, aber bislang nicht vom Treiber unterstützt (unwahrscheinlich, Funktion wäre ansonsten in CUDA verfügbar, dort aber auch nur Synchronisation per Semaphore, sprich zur Laufzeit möglich).
Es war nicht möglich mehr als 32 Jobs parallel auszuführen, weder im Compute- (CUDA) noch im Grafik-Kontext.
Es ist nicht ganz sicher ob Nvidia-GPUs aktuell tatsächlich bereits komplett ausgelastet sind, scheinen aber nahe am theoretischen Limit zu operieren was den Instruktions-Durchsatz angeht. Ob Nvidia zu mindestens noch im Fall von Pipeline-Stalls eventuell von Async-Shadern profitieren kann wurde nicht getestet. Ist allerdings unwahrscheinlich wenn Nvidia tatsächlich alle 32 Queues gleichmäßig befüllt, da damit im schlimmsten Fall nur gleichartige Jobs zur Verfügung stehen die sich alle gegenseitig ausbremsen.
Eigentlich könnten die Architekturen kaum unterschiedlicher sein....
Den 16-40k Threads (4-10 Threads pro Shader) bei der Fury X, stehen bei Maxwell V2 2048 Threads (nur 1 Thread pro Shader, mehr sind möglich bringen aber keine messbaren Vorteile) als Optimum gegenüber. Das Verhältnis von 512 Jobs zu 32 Jobs bewegt sich eigentlich in einer ähnlichen Größenordnung.
Das sind auch zwei komplett unterschiedliche Entwurfsprinzipien. Maxwell wurde darauf getrimmt, mit DX11 optimal zu funktionieren. Unter Aufgebot aller Mittel:
- Architektur auf minimalen Parallelismus und Latenz optimiert
- Massive Optimierung durch den Treiber
- Support für Entwickler um Optimierung der Anwendung auf die Hardware zu gewährleisten
AMD:
- Maximaler Paralellismus für kompromisslose Rohleistung
- Hardware an Anforderungen der Entwickler angepasst
- Neuentwicklung einer API die zur Hardware passt - anstelle den existierenden Treiber an die Hardware an zu passen
Tjoa, und jetzt steht da AMD nun mal mit einem stimmigen Gesamtkonzept aus API und Hardware da. Ein Konzept dass komplett anders ausschaut als man es bei Nvidia gewohnt ist.
RayKrebs schrieb:Ich habe auch keine Not. Meine grüne GTX770 behalte ich noch bis Mitte/Ende 2016. Dann entscheide ich wieder neu. Vielleicht kommt dann wieder mal Rot in den PC. Glücklicherweise befinde ich mich nicht in der Zwickmühle und kann entspannt aus der 2.ten Reihe anschauen wie sich das entwickelt.
ampre schrieb:Der Test sagt sehr viel aus. Er sagt schon mal aus das der Rasterizer und der Polygonendurchsatz schon mal kein Problem für die AMD Karten darstellen. Das sah unter DX11 noch anderster aus.
Der Test würde mich mal mit einer Nvdia Karte der 900 Generation interessieren. Bei Suddendeath sieht man ja das die Karte ganz schön einbricht bei steigender Auflösung.
Eigentlich könnten die Architekturen kaum unterschiedlicher sein....
Den 16-40k Threads (4-10 Threads pro Shader) bei der Fury X, stehen bei Maxwell V2 2048 Threads (nur 1 Thread pro Shader, mehr sind möglich bringen aber keine messbaren Vorteile) als Optimum gegenüber. Das Verhältnis von 512 Jobs zu 32 Jobs bewegt sich eigentlich in einer ähnlichen Größenordnung.
Das sind auch zwei komplett unterschiedliche Entwurfsprinzipien. Maxwell wurde darauf getrimmt, mit DX11 optimal zu funktionieren. Unter Aufgebot aller Mittel:
- Architektur auf minimalen Parallelismus und Latenz optimiert
Der Teil kommt mir persönlich komisch vor. Die Reihenfolge in einer Schlange muss für die Korrektheit zwingend erhalten bleiben, es sei denn die Abhängigkeiten sind bekannt (bei einer Bindless API wie DX 12 problematisch) oder die Anwendung fügt selbstständig Dependency-Bars ein (afaik weder in Mantel noch in DX vorhanden). Ähnlich wie die weiteren ACE beschreibungen. Hat jemand eine Quelle dafür? In den AMD-Dokumentationen finde ich nichts dazu.GCN 1.2 mit den HWS (2x HWS + 4 ACE anstelle von 8 ACE) ist übrigens noch mal perverser, eine HWS kann sich jeweils wie 2 einzelne ACE verhalten wenn Dependencies berücksichtigt werden müssen, ohne Dependencie-Managment hingegen schafft die dann sogar bis zu 128 Jobs aus einer einzigen Queue parallel abzuarbeiten.
Naja sowohl für AMD-GPUs ist das Benchmark eher eine Worst-Case situation trotz neuen APIs. Wenn man sich mal ausrechnet wie viele Polygone die GPU pro Sekunde als peak schaffen sollte (Beispiel Geforce 980 GTX mit 6 Mil Polygone/s) und wie viele sie tatsächlich in dem Benchmark schafft (10 Mil Polygone/s), dann merkt man dass die Auslastung der GPU mit extrem schlecht ist. Bei AMD-GPUs sieht es nicht viel besser aus.Der Test sagt sehr viel aus. Er sagt schon mal aus das der Rasterizer und der Polygonendurchsatz schon mal kein Problem für die AMD Karten darstellen. Das sah unter DX11 noch anderster aus.
strempe schrieb:Es grenzt schon an Hohn und Spott bei Grafikkarten - egal ob rot oder grün - von Zukunftssicherheit zu sprechen.
OiOlli schrieb:Da sich die Entwicklung verlangsamt hat, kann man schon darüber sprechen.
Ich meine, ich hab eine Karte drin, die 3 Jahre alt ist und sie reicht oft noch für hohe oder gar höchste Details. Und umgekehrt sind die neuen mittelklassekarten kaum schneller als 3 Jahre alte Highendkarten. Wenn man überlegt, eine 8600 gt nur so schnell, wie eine 6800 gt.