News Radeon R9 390(X): AMD spricht über den HBM-Grafikspeicher von Fiji

Stimmt du hast Recht, für das Entpacken im VRAM ist natürlich die GPU zuständig, nicht die CPU. Ich würde mal behaupten, dass die GPU das direkt macht, nachdem die komprimierten Daten von der Platte in den VRAM kopiert wurden.

Ob da nun L1/L2-Cache so eine große Rolle als Puffer spielt weiß ich nicht, ich denke aber, das große Problem ist eben die Zugriffszeit, egal ob nun beim direkten Zugriff der GPU auf den VRAM, oder beim Kopieren vom VRAM in den L1/L2-Cache.
 
Zuletzt bearbeitet:
hm wie soll die GPU das auf dem VRam "entpacken" ohne dabei ein Xfaches der Bandbreite aufzuwenden ? Beim Entpacken müsste sie ja wieder den "unkomprimierten" Stand in den VRam schreiben.

Ich mein, der Speicher selbst ist ja "dumm". Sparen würde ich nur was wenn ich das komprimierte Material auch komprimiert speicher und bei Bedarf komprimiert lese und wieder entpacke. :)

Edit.

Eine einzelne Textur ist ja sicher klein... ich stell mir das so vor:

-> GPU benötigt Textur
-> GPU liest die komprimierte Textur vom Speicher in den internen GPU Cache.
-> GPU wendet diverse Entpackungs Algorythmen an, packt sie aus
-> GPU rechnet damit das eigentliche Bild aus, oder eben viele
-> GPU versucht wieder mit diversen Algos die Textur bestmöglich zu komprimieren
-> GPU überträgt diese komprimierte Textur vom internen Cache an den VRam um dort vorzuhalten


Der VRam bzw dessen ist hier der eigentliche Flaschenhals weshalb Nvidia ja offensichtlich diese Aussage gilt:
NVIDIA will actually spend multiple cycles trying different compression ratios, simply because the memory bandwidth is more important than the computational time.

Man muss sich aber fragen wieso man eine komprimierte Textur nun wieder auspacken sollte... also zum reinen speichern. Mach ich ja bei JPG auch nicht um dabei zu bleiben.

Ka, erschließt sich mir noch nicht ganz. Ich denke man muss sich darüber im klaren sein dass die GPU nur sehr wenig Speicher aktiv braucht um zu rechnen bzw das Hin und Herschieben zwischen GPU Cache und VRam dermaßen schnell geht (ich mein hallo 100 GB/s) dass die eigentliche Berechnung ja nur mit dem L1/L2 in der GPU erfolgt.
 
Zuletzt bearbeitet:
Ich merke gerade, dass ich da etwas durcheinander gebracht habe. Und zwar den Kopiervorgang von Platte (über das PCIe-Interface) in den VRAM, und dann vom VRAM über das SI zur GPU (L1/L2).
 
Die Texturen sind viel zu groß für den GPU-Cache... der VRAM ist das Gegenstück zum RAM und ja: die GPU arbeitet direkt damit. Du lädst ein Worddokument ja auch nicht in den CPU Cache um dort damit zu arbeiten... das Gegenstück zu HDD ist aus GPU Sicht der System-RAM (auf den das ausgelagert wird was nicht in den VRAM passt)

Wobei es wie gesagt schon verfahren gab die mit gepackten Texturen hantiert haben, die haben das dann on the fly dekomprimiert beim verwenden der Textur. Geht halt auf kosten der GPU-Last weil zusätzlich immer dekomprimiert werden muss, dafür spart man VRAM.
 
Erklär mir mal bitte kurz, wie der Zugriff auf eine Textur dann vonstatten geht...

Meine Vorstellung:
Ungepackte Textur im VRAM wird komprimiert und über das Speicherinterface an die GPU oder den L1\L2-Cache übertragen, dann wieder entpackt und verarbeitet. Ist das richtig?
 
Wenn man von Texturkompression spricht, um Bandbreite zu sparen, muss man damit auch zwangsläufig VRAM sparen.

Alles, was einmal in den VRAM geschrieben wurde, bleibt ja dort erstmal so und kann nicht noch nachträglich geändert werden, ohne erneut über Interface zur GPU zurück und dann wieder in den VRAM reingeschoben zu werden.

Wenn man also die Texturen vor dem "Verschieben" komprimiert hat um Bandbreite zu sparen, werden sie auch komprimiert im Speicher vorliegen.
 
Darum geht's ja, dann müsste theoretisch eine bessere Kompression (z.B. der Maxwells) auch für weniger Speicherbedarf sorgen, oder?
Ich glaube, ich drehe mich im Kreis... :freaky:
 
@Jesterfox

Was meinst du mit "Texturen" ? Klar, alle passen nicht rein, sonst hätte ich kein VRam. Aber vielleicht die wenigen die für die aktuelle GPU Berechnung nötig sind. Bei 100GB/s lädst du vom VRam ja schon in 1s 50x den ganzen VRam in die GPU. Die GPU arbeitet mit 1.000.000 hz. Im Prinzip rechnest du pro Takt oder auch locker mal 100 Takte vermutlich extrem wenig "Textur" zur selben Zeit. Ergo also vllt ca 3 Takte fürs Entpacken, 94 Takte für die Berechnung, 3 Takte für die Kompression um sie wieder zurück in den VRam zu schieben.

Man muss sich im klaren sein dass man mit der enormen Taktzahl prozentual nur extrem wenig "Bild" mit dem internen Cache berechnet.

Nai, wo bist du wenn man dich braucht ;)
Ergänzung ()

DrToxic schrieb:
Alles, was einmal in den VRAM geschrieben wurde, bleibt ja dort erstmal so und kann nicht noch nachträglich geändert werden, ohne erneut über Interface zur GPU zurück und dann wieder in den VRAM reingeschoben zu werden.

Wenn man also die Texturen vor dem "Verschieben" komprimiert hat um Bandbreite zu sparen, werden sie auch komprimiert im Speicher vorliegen.

schön ausgedrückt. Das war meine Intension. Man darf nicht denken, dass man nur jede Sekunde oder jedes volle Bild vom VRam liest und enstprechend viel Textur auf GPU Seite braucht. In Realität sind die Dimensionen an eigentlichem Bildmaterial mit welchem die GPU pro Takt rechnet wohl verschwindend klein. Die GTX 980 hat wohl 2MB L2.
 
Zuletzt bearbeitet:
Mit Texturen meine ich die Bitmapdaten für das was auf die Polygone drauf kommt... Texturen halt. Das macht nun mal den größten Anteil der VRAM Belegung aus. Und davon braucht man für einen Frame schon eine ganze Menge, man hat auf dem Bild ja Objekte mit unterschiedlichsten Oberflächen.


Und wieso wollte man gepackte Texturen nicht per Compute-Shader im VRAM entpacken können? Und ja: theoretisch sollte das auch bei jeglichem Zugriff möglich sein so das die Daten nur im GPU-Cahce entpackt vorliegen. Aber da pro Frame eine große menge an Textur-Daten benötigt werden liegen die da nicht besonders lange und es muss quasi für jeden Frame der gezeichnet wird neu entpackt werden. Da muss man abwägen zwischen VRAM Verbrauch und GPU Performance. War damals beider Texture-Compression schon so (wäre wie gesagt interessant wenn jemand da etwas genaueres wüsste ob das noch verwendet wird... war damals glaub ich ne Erfindung von S3)
 
Ja aber es heißt doch, dass Maxwell sein SI "effizienter" ausnutzt wegen der besseren Kompression. Das bedeutet doch aber, dass die Daten auf jeden Fall komprimiert über das SI laufen und danach dekomprimiert werden müssen. Dann können die ja auch gleich komprimiert im VRAM liegen, also dann sogar direkt von der CPU komprimiert werden und dann in den VRAM kopiert, dann wird auch noch das PCIe-Interface effizienter genutzt.
Oder wo ist da mein Denkfehler?
 
Zuletzt bearbeitet:
und wie speichert dieser "Compute Shader" ab ohne dass man den Inhalt unkomprimiert über das SI schiebt?
Der sitz ja nicht im Speicher/Ram und kommt auch nur über das Speicher Interface auf den VRam.

Pro Frame braucht man sicher viel Textur, sicher, vielleicht sogar Gigabyte bzw den ganzen VRam voll - deswegen sagte ich dass man sich darüber im Klaren sein mus dass die Taktrate und die Zeiten über die wir reden extrem klein sind (bzw die Bandbreite zum VRam extrem groß). Ich denke es wird >1000x Textur hin und hergeschoben während der Berechnung eines einzelnen Frames. 1000x2MB zB also 1x einen 2GB großen VRam abgegrast. Genau deswegen limitiert ja das Speicherinterface und deswegen versucht man diese Transferdaten zu komprimieren. Bei 100 FPS würde das dann 1000x2MB*100Frames machen also 200GB/s was ja in etwa das GDDR5 SI ab kann.

Wenn du also für einen Frame 1000x auf dem VRam 2MB lesen müsstest (einmal den L2 Cache füllen) hättest du bei 1 Ghz = 1.000.000hz immernoch 1000 GPU Takte bei denen du mit diesen 2 MB Textur rechnen kannst.

In Wirklichkeit wird vermutlich noch deutlich öfters auf den VRam zugegriffen. Einzelne Texturen teilweise geladen, zb eine 100MB Textur (wie groß sind Texturen? Doch eig auch sehr klein) auf 100x1MB gelesen und zB zu 100x1,5 MB im L2 entpackt. Dabei ist L2 ja nichtmal Ende der Fahnsenstange sondern Zwischenspeicher für den L1.
 
Zuletzt bearbeitet:
@Necareor: wenn sie es explizit auf das SI beziehen, dann muss es eigentlich "klassische" Texture-Compression sein bei der die Texturen gepackt im VRAM liegen und immer on the fly nur entpackt werden. Und ja: das PCIe Interface könnte man dadurch auch gleich mit entlasten.

@Kraitmaster: ich hab bisher den Part mit dem SI zu sehr ausgeblendet. Wenn das SI wirklich entlastet wird, dann muss es anders sein, korrekt. Das ganze kostet dann aber auch immer etwas an zusätzlicher Rohleistung der GPU (aber ich denk mal das fällt kaum ins Gewicht, gerade Bilddaten kann man mit recht einfachen Algorithmen schon gut komprimieren)
 
ja deswegen schreibt Anandtch auch dass die Komprimierung kaum isn Gewicht fällt bzw man zig GPU Zyklen damit verbrät die beste Komprimierung zu wählen, eigentlich schon etwas crazy.

Auch da könnte HBM mit dem extremen Plus an Bandbreite etwas GPU Leistung einsparen indem man eben diese Zyklen nicht aufwenden muss.

Edit:
Eh verrück wenn man bedenkt wie da mal eben 200 GB/ s fortlaufend hin und hergehen ;)
 
Vielleicht gibt's auch so was wie Deduplizierung bei den Texturen. Da sind ja sicherlich so einige Texturen im VRAM mehrfach vorhanden.
 
Die selbe mehrfach sollte eigentlich nicht sein... dann hat der Programmierer geschlampt. Die Frage ist eher ob man das MIP-Mapping einschränken könnte in dem man die Maps on the fly berechnet und nur noch die große Textur rüberläd (MIP-Mpas vergrößern eine Textur um 33%). Ist nur die frage ob sich der Aufwand lohnt oder ob man doch nicht zu viel Qualität einbüßt.
 
Ein bisschen Grundlagen dazu, ich hoffe das beantwortet eure Fragen; wenn nicht nochetwas sagen. Ich verwende für folgende Erklärung mein "Verständnis" der GPU-Hardware. Teilweise ist das aber etwas spekulativ, da NVIDIA nicht dokumentiert wie sie auf ihren GPUs den Rasterisierungsprozess implementieren:

Es gibt zwei Arten von Kompressionsalgorithmen: Verlustbehaftete und verlustfreie. Bei NVIDIAs-Delta-Color-Kompression handelt es sich um einen verlustfreien Ansatz. Er reduziert die Größe eines Pixelblockes von 8 x 8 Pixeln mit 256 Byte auf einen Wert zwischen 32 Byte und 256 Byte. Die Textur liegt dementsprechend auch im DRAM der GPU in Form von 32 Byte bis 256 Byte großen komprimierten Pixelblöcken vor. Dient die Textur als Framebuffer für einen Zeichenvorgang, so sind *wahrscheinlich* die ROPs dafür verantwortlich die Ergebnisse des Fragmentshaders on the fly zu komprimieren. Analog werden beim Auslesen durch die GPU die komprimierten Blöcke aus dem DRAM der GPU geladen und dann *wahrscheinlich* durch die Texture-Units on the fly entpackt. Da Entpacken und Verpacken durch Spezialhardware vollbracht wird, kostet das keine Rechenzeit der Shaderkerne, allerdings Fläche auf dem DIE und etwas zusätzliche Abwärme. Dadurch, dass nur die kleineren komprimierten Daten zwischen dem GPU DIE und dem DRAM ausgetauscht werden, wird allerdings DRAM-Bandbreite eingespart.

Nun zur Frage ob man durch die Kompression auch Speicherplatz spart. Das ist wiederum davon abhängig, wie
die komprimierten Pixelblöcke im Speicher der GPU angeordnet sind. Sind sie dicht an dicht gepackt oder befinden sich zwischen ihnen Lücken? Das folgt leider nicht aus den Spezifikationen, deswegen ist folgendes etwas spekulativ:

Zunächst zum lesenden Zugriff:
Der Texturzugriff ist immer zufällig. Das heißt die GPU muss extrem leicht für einen zufällig gegebenen Pixelblöck mit den Koordinaten U und V bestimmen können, an welcher Addresse er sich in komprimierter Form im DRAM der GPU befindet. Die GPU kann diese Addresse nur direkt aus U und V berechnen, wenn die Anfangsaddressen der komprimierten Pixelblöcke alle den selben Abstand im Speicher besitzen. Selber Abstand heißt, dass zum Beispiel der 1. Block an Addresse 0 startet, der 2. Block an Addresse 256, der 3. Block an Addresse 512 usw. Da die Blöcke allerdings unterschiedliche Größen von 32 Byte bis 256 Byte besitzen enstehen auf diese Art und Weise unweigerlich unbelegte Lücken in der Speicherbelegung, wodurch wiederum der Verbrauch an DRAM-Platz durch die Kompression nicht gesenkt wird. Alternativ zum Berechnen könnte die GPU auch ein Inhaltsverzeichnis verwenden, in welchem für jeden komprimierten Pixelblock die Startaddresse im DRAM steht. Auf diese Weise könnten die einzelnen komprimierten Pixelblöcke einen unterschiedlichen Abstand im DRAM besitzen und gemäß ihrer komprimierten Größe dicht an dicht gepackt sein. Im Inhaltsverzeichnis würde dann beispielhaft soetwas stehen wie Block 0 der Größe 32 Byte startet an Addresse 0, Block 1 der Größe 64 Byte startet an Addresse 32, Block 2 der Größe 32 Byte startet an Addresse 96. Dadurch benötigt die GPU zwar einen Overhead an Speicherplatz für das Inhaltsverzeichnis. Insgesamt ließe sich jedoch der Speicherplatzverbrauch der Textur reduzieren.

Als Nächstes zum schreibenden Zugriff, also zum Beispiel wenn die Textur als Framebuffer dient:
Hier hat man das Problem, dass die komprimierte Größe eines Pixelblocks sich durch den Schreibvorgang verändern kann, da er schlechter oder besser komprimierbar wird. Würden die komprimierten Pixelblöcke im DRAM lückenlos aufeinander folgen, so wäre dieses Wachsen und Schrumpfen extrem problematisch. Denn würde ein Pixelblock zu groß werden, so müsste die GPU eine freie Stelle finden, die ihn aufnehmen kann. Analog müsste die GPU eine freie Stellen vermerken, wenn ein Pixelblock schrumpft. Diese Art von Speichermanagement wäre algoritmisch gesehen extrem umständlich zu verwirklichen. Deshalb bleibt der NVIDIA bei der Delta-Color-Kompression nichts anderes übrig alle Pixelblöcke mit dem Abstand der Worst-Case-Größe von 256 Byte abzuspeichern und dementsprechend Lücken zwischen den Blöcken im Speicher zu lassen.


Fazit: Muss eine GPU in eine durch Delta-Color-Kompression verkleinerte Textur auch hineinschreiben, so ist es nur schwer machbar mit der Kompression Speicherplatz zu sparen. Sofern die GPU aus einer durch Delta-Color-Kompression verkleinerten Textur nur lesen möchte, so ist es leicht möglich sie platzsparend im DRAM abzuspeichern. Dies kostet allerdings die zusätzliche Optimierung eines Inhaltsverzeichnis. Ich weiß nicht ob NVIDIA diese Optimierung eingebaut hat. Da sich das Whitepaper so liest als ob NVIDIA die Delta-Color-Kompression primär für Framebuffer-Objekte vorgesehen hat, in welche oft geschrieben wird, bezweifle ich es.

So das wars ersteinmal. Eventuell Später noch mehr :)
 
Daedal schrieb:
Nun ist das fertig - Nvidia muss als erster in 16nm TSMC releasen und die Kinderkrankheiten völlig ohne Input von AMD oder Ati lösen. Das erste mal in der Firmengeschichte!

AMD hingegen wechselt auf 14nm, einen breit verfügbaren Prozess in vielen Produkten und mit reichlich Produktionserfahrung.

Hinzukommt, natürlich CB News nicht wert:
http://wccftech.com/amd-talks-16nm-14nm-10nm-processors-partners-synopsys-build/
Giving AMD access to a range of Synopsys design IP including interface, memory compiler, logic library and analog IP for advanced FinFET process nodes
Synopsys acquires rights to AMD’s interface and foundation IP, and hires a team of engineers from AMD with IP R&D expertise
These agreements enable AMD to realize ongoing engineering efficiencies and focus engineering efforts on product differentiation.

Synopsys übernimmt komplett die Arbeit der Anpassung des Chips an den 14nm Prozess, sodass es hier auch keine Schwierigkeiten geben dürfte, falls AMD den 14nm FinFet von GF anstrebt. Desweiteren wäre interessant, wenn AMD bei mehr Bedarf vllt auch paar Kapazitäten von Samsung bekommen könnte, falls der Bedarf da ist (wobei das ist nur best Case).

Nai
Interessant, wäre eine Methode, die einfach bei Lücken die Texturen/Datein nachrücken lassen und so dann auch die Map on the fly aktualisiert und neue Texturen eben am Ende des Speicher einschiebt.
Wäre aber auch sehr aufwändig und würde eventuell seine Zeit benötigen und so kommt dann ein GB VRAM mehr am PCB billiger, bzw, muss man bedenken, das sowohl AMD als auch NV sowieso eine neue Speichertechnologie nach GDDR5 anvisieren und HBM Gen 2 immerhin mit bis zu 16 GB kommt.
Somit ist es eben billiger, die Texturen in den "fixen" größen wieder am VRAM zu entpacken um die MU oder wie die auch heißt, simpler zu halten.
PS: ist nur eine Annahme, wirst dich da sicher besser auskennen.
 
Zuletzt bearbeitet:
Nur 8GB im High-End-Segment wird 2015 gar nicht verkäuflich sein, egal, wie viel effizienter die Speichernutzung mit HBM wird. Derzeit schreit Jeder dank des aktuellen Speicherbooms nach 8GB oder mehr, da kann AMD nicht mit 4GB in dem Segment kommen, wenn die 380(X) mit 8GB kommt. Und das wird sie, wenns eine relabel-290X ist. denn irgeneine Verbesserung muß man ja auch bei der 380 bieten, wenns nicht doch Grenada/Tonga Vollausbau wird.
Ich sehe nun nicht, warum AMD den Speicher nicht auf 8GB verdoppeln sollte. Bei den vermuteten 700€ Mindestpreis für die Fiji-Karten sollte das wohl drin sein...

Aber möglicherweise ist ja gerade der Umstand, das anfangs nur 4GB möglich waren, der Grund für die ewige Verzögerung des Release. Weil AMD gewartet haben, bis 8GB machbar sind (und DX 12 final ist).
 
Zurück
Oben