Frage Geschwindigkeitsentwicklung von CUDA Cores über die GPU Generationen

carrera

Mitglied
Mitglied seit
Dez 21, 2023
Beiträge
78
Bewertungspunkte
44
Punkte
17
Hallo zusammen, hoffe, ihr habt alle einen guten Start in 2024 erwischt 😉.

Mich beschäftigt die Frage, wie (und ob) sich CUDA Cores über die Zeit performanceseitig verbessert haben.
Konkret: rechnet ein CUDA Core der Generation „alt“ langsamer als ein CUDA Core der Generation „neu“ unter der Annahme, der GPU-Speicher ist gleichbreit (Datenbus bspw. 256-Bit) und gleichschnell (GDDR6 mit bsp. 1800 MHz) und auch die GPU Chips „alt“ und „neu“ takten gleich (bspw. 1300 MHz)?

vielen Dank für Eure Gedanken dazu.
 
Ich kenne mich mit den CUDA-Cores nicht so aus. Gerade bei neueren Prozessorstrukturen sind die Verbesserungen von Generation zu Generation meist recht gross. Da wird auf allen möglichen Ebenen verbessert was und weiter entwickelt. Meist werden die Prozessorstrukturen kleiner, dichter und dadurch schneller. Dann wird auch der strukturelle Aufbau und die Ausführungsmethoden des Befehlssatzes verbessert und erweitert. Dadurch führt ein neuerer Prozessor Befehle in weniger Taktschritten aus und kann Befehle neue Befehle ausführen die Arbeiten schneller erledigen können. Die Verknüpfungen der Prozessoren untereinander ist bei Grafikkarten auch verbessert worden, so dass Kerne Daten an andere Kerne weitergeben können ohne dabei den Umweg über den RAM zu machen.

Ich denke da gäbe es noch viel interessantes. Leider erfährt man aber nicht viel mehr darüber als was die Hersteller über ihre Werbeabteilungen bekannt geben.
 
Unter der Annahme das "alt" vs "neu" gleich taktet, und gleichen core-count hätte, könnten neue Cores nur dann schneller sein, wenn eine Instruction weniger Clock Cycles braucht. Da gibt es Verbesserung über die Generationen.
VRAM und Bus-Geschwindigkeit sind bei der Fragestellung gar nicht mal so interessant. Eher der/die Instruction-Cache, Data-Cache, Decoder, usw...

Leider gibts zu Cuda keine offiziellen Dokumente zu Opcodes und den benötigen Clock-Cycles.
Es gibt ein paar Leute die z.B. per Microbenchmarking genau das Analysiert haben.
Wenn man sich wirklich damit auseinander setzen will, hier ein guter Anfang Pascal vs Volta:
 
Guten Morgen,

vielen Dank @Martin Gut und @Yve für Euren Input hier. Die verlinkten Dokumente schaue ich mir im Laufe des Tages einmal an.

Hintergrund meiner Fragestellung. Ich bearbeite derzeit einen wiederkehrenden WorkFlow mit 2 GPU "alt" mit insgesamt knapp 6.000 CUDA-Cores. Mit viel Konfigurationstuning der Anwendung habe ich einen für mich geschwindigkeitsseitig zufriedenstellenden Arbeitsmodus gefunden, der allerdings eine gewisse und auch zeit in Anspruch nehmende Vorbereitung darf.

Konkret: für die Erstellung / Produktion von Videos (4K Material input - output 1080p) mit Davinci Resolve Studio ist mnur dann ein flüssiges Arbeiten möglich, wenn alle zu verarbeitenden Filmdaten zuvor über den anwendungsinternen Proxy (Umwandlung der Fildaten und Bereitstellung in Einzelbildern, falls ich das richtig verstanden habe) zugespielt werden. Wenn ich die Filmdaten ohne den Umweg über den Proxy direkt verarbeiten will, geht das zwar auch irgendwie, aber von flüssigem Arbeiten kann auch mit viel good-will nicht gesprochen werden.

Die Bereitstellung der Proxydaten erfolgt sowohl über eine NVME-M2 SSD als auch - für weniger komplexe Daten - über klassische Platten im internen RAID5 - Verbund (6 mal WD Black) des PC. Die Performance der Platten / der NVME-M2 SSD ist nicht zu beanstanden und sollte bei der weiteren Betrachtung aussen vorgelassen werden.

Da allerdings die Umwandlung der Filmdaten merklich Zeit kostet, frage ich mich, ob mehr CUDA-Cores (und auch wieviele) einen so großen Geschwindigkeitsvorteil bringen könnten, die Proxy-Bereitstellung zu vermeiden. Daher versuche ich ein Verständnis dafür zu entwickeln,
* ob bspw. eine Verdoppelung der CUDA-Cores auch eine Verdoppelung der CUDA-Verarbeitungsgeschwindigkeit bringen würde
* ob bspw. bei gleicher Anzahl CUDA-Cores (und gleicher GPU) die CUDA-Verarbeitungsgeschwindigkeit durch Erhöhung der GPU-Taktfrequenz linear oder exponentiell erhöht wird
* ob bspw. ein CUDA-Core von Ampere langsamer rechnet (und wieviel) als ein CUDA-Core von ADA (bei gleichem Takt von Ampere / Ada)
um ggf. in andere GPU-Hardware zu investieren.

Mir ist dabei wohlbewusst, dass es auch für Benchmarks und Reviews gibt, jedoch erschließt sich mir nicht, welche Werte ich da zwischen den einzelnen Karten / Generationen vergleichen soll, um die CUDA-Performance zu bewerten, gehe aber nach @Martin Gut Ausführungen davon aus, dass unter den von mir getroffenden Annahmen CUDA-Core "neu" grundsätzlich schneller rechnet als CUDA Core "alt" und - @Yve - eventuell Aussagen zur FP32 Berechnungsgeschwindigkeit eine Vergleichsmöglichkeit der CUDA-Leistung einzelner Karten verschiedener Generationen darstellt. Habe ich das so richtig verstanden?

Wenn ich nun festhalten darf, dass CUDA-Core der GPU "neu" aus verschiedenen Optimierungen heraus schneller ist als CUDA-Core "alt" und zudem noch die Erhöhung der Taktgeschwindigkeit der GPU zur Verbesserung der CUDA-Core Leistung beiträgt, sind 6.000 CUDA Core "neu" in jedem Fall schneller als 6.000 CUDA-Core "alt".
Nur das wieviel schneller, das treibt mich um, denn um auf die Proxies verzichten zu können, müsste ich vermutlich das 10-fache an CUDA-Core Rechenleistung einsetzen um die für flüssige Bearbeitung ohne Proxies notwendige Darstellungsgeschwindigkeit (24 fps konstant - auch bei Einsatz von Effekten - heute ohne Proxy teilweise unter 3 fps) zu erhalten. Und das würde ich gerne vor einem Kauf in der Theorie zumindest mal durchspielen, um zu wissen, was es bringen könnte. Und um das dazu passende "Modell" aufzustellen, müsste ich besser verstehen, wie sich die CUDA-Cores über die Zeit entwickelt haben und wie man sie vergleichen kann.

Vielleicht mache ich mir das Leben hier aber auch zu schwer, und es genügt einfach, die Werte X und/oder Y in den jeweiligen technischen Spezifikationen zu vergleichen, um eine Annäherung zu erzielen. (vielleicht die FP32 Rechenleistung?) Dann würde es mich freuen, wenn jemand die zu vergleichenden Werte hier einstellt.

Diese Gedanken mache ich mir hier ganz bewußt und schließe - derzeit noch - einen praktischen Test mit einer oder zwei neuen Karten aus, denn der Umbau meines PCs, bis dann im Endeffekt alles wieder läuft, dauert schon seine Zeit, ich müsste zudem nicht unerheblich viel Geld in die Hand nehmen, um Karten zu erwerben und dan ggf. auch teure Karten an einen Händler zurücksenden. Das würde ich gerne vermeiden. Und versuche die Materie vorher zu verstehen ...

In jedem Fall - vielen Dank für Eure Gedanken.
 
Ich denke schon, dass du das ungefähr richtig einschätzt. Wie viel es dann aber genau ist, ist nicht so einfach zu sagen.

Man muss eine Grafikkarte auch immer im Zusammenhang mit dem Grafikkartentreiber und der verwendeten Software sehen. Die Software definiert was zu tun ist. Der Grafikkartentreiber schaut, welche Recheneinheiten der Grafikkarte die Aufgabe erledigen kann. Wenn etwas von keiner der verschiedenen rechenkerne der Grafikkarte erledigt werden kann, ist immer noch die CPU da, die jede Aufgabe erledigen kann (langsam da weniger Kerne).

Dann generiert der Grafikkartentreiber Programmcode für die Recheneinheiten der Grafikkarte oder der CPU. Diesen gibt er dann der Grafikkarte mit den nötigen Daten zur Ausführung oder führt die Aufgabe eben selber aus.

Der Grafikkartentreiber ist somit auch immer mit entscheidend für die Geschwindigkeit mit der das Programm auf einer Grafikkarte läuft. Wenn er für eine Grafikkarte oder ein Programm gut optimiert ist, kann es bedeutend besser laufen als wenn der Treiber Mühe hat die Aufgabe sinnvoll umzusetzen. Da liegt beispielsweise auch ein grosser Unterschied zwischen den professionellen Grafikkarten und anderen. Gewisse Software läuft erst durch die professionellen Treiber überhaupt fehlerfrei. In anderen Fällen läuft eine professionelle Software mit den normalen Treibern wohl, aber mit dem richtigen Treiber kann es 10 oder 20 mal schneller gehen. Im allgemeinen sind die Grafikkartentreiber für neuere Grafikkarten effizienter. Die neuen Karten bieten mehr Möglichkeiten und darum kann der Treiber besser programmiert sein. Das kommt zu den rein technischen Verbesserungen dazu, ist aber natürlich sehr schwer abzuschätzen wie viel das ausmacht.

Was soll man da sagen. Man diskutiert oft nur über die technischen Daten, die man so bekommt. Was soll man auch sonst, denn man weiss von der restlichen Technik dahinter ja nichts.

Ich überlege mir gerade, wie du testen kannst ob mehr CUDA-Cores in deiner Situation viel bringen (ich vermute ja). Du kannst mit dem Taskmanager, GPU-z oder HWinfo verfolgen, wie stark deine Grafikkarte und die CPU je nach Situation ausgelastet ist. Falls die CPU sehr stark ausgelastet ist, bringt eine bessere Grafikkarte wenig. Wenn die Grafikkarte voll ausgelastet ist, kannst du den Takt der GPU senken und schauen wie stark sich das auswirkt. Wenn deine Software durch absenken des Takts spürbar langsamer wird, dürften Aufrüsten etwas bringen. Als Benchmark ist es am besten ein eigenes Projekt laufen zu lassen. Es ist ja entscheidend, ob es bei deiner Anwendung und deiner Software etwas ausmacht und nicht welche Testwerte in irgend einer konstruierten Situation heraus kommen.
 
(Martin war schneller, aber ich lass mein Text trotzdem so. XD)
In dem Fall spielen echt soooo viele Faktoren mit rein, das der reine Leistungsvergleich was SM (Cuda Core) alt gegen neu bei einer einzelnen Instruction an Clock Cycles einspart, vermutlich nicht sonderlich ins Gewicht fällt. Wenn da eine Instruction nur noch 4 statt 8 Cycles braucht, ist das dann auch nur in dem Fall doppelt so schnell bei gleichem Takt, wo alle anderen Variablen keine Rolle spielen.

Bei Video Encoding und Decoding gehts schon mit der Frage los, wer das wirklich übernimmt. Macht das die CPU, die iGPU, machen das die SM Einheiten oder ein extra dafür ausgelegter ASIC/GPU Teil? (Die Free Version von Davinci unterstützt meines Wissens nach z.B. kein Hardware De-/En-Coder).
Welchen Weg nimmt dann das encodierte Frame? Gehts von der CPU in den RAM, vom RAM wieder durch die CPU zum BUS in den VRAM, dann in den GPU Cache wo dann die SM's aus 4x 4 Bytes oder so 1x 4 Bytes machen?

Hier solltest du (wenn nicht bereits erledigt) erstmal in deinem Setup eine Analyse machen, um wirklich die Flaschenhälse zu finden.
Bei Nvidia bleibt dir eigentlich nur das Tool nvidia-smi um herauszufinden was deine GPU grade macht. Windows 10/11 Taskmanager zeigt dir da nicht unbedingt was hilfreiches an.

Im Worst-Case wird bereits der Hardware Decoder benutzt, und das ist der Part der die meiste Zeit in Anspruch nimmt, dann kaufst du dir z.B. Ne RTX A6000 (Keine Ahnung was du jetzt hast), und die hat dann vielleicht den selben Decoder aber 10mal mehr SM's und du hast am Ende Vorteil von fast Null.

Anderes Szenario, der Speicher Durchsatz ist das Problem und deine "alte" Karte kann daher jetzt schon nur 20% ihrer Cores sinnvoll nutzen. Da nützen einem dann die doppelte Anzahl oder doppelt so schnelle Cores auch wenig.

Hier könnte man einfach mal mit MSI-Afterburner rumspielen. Memoryclock mal 25% langsamer machen und schauen welche Auswirkung das hat. Core-Clock 25% runter setzen, wieder schauen was für eine Auswirkung das hat.

Ob es ein gescheites Tool gibt, mit den man den aktuellen thru-put vom PCIe Bus sehen kann (nicht Benchmark, sondern was das wirklich durch die Lanes grade gejagt wird) bin ich überfragt. Hier könnte man nur mal schauen ob man das im UEFI/Bios downgraden kann, und dann wiederum schauen was für ein Einfluss das auf die Decodier-Zeit hat.


Ansonsten hilft nur, sich von jemanden eine GPU ausborgen, die eine neuere CUDA Generation hat.
 
Vielen lieben Dank @Martin Gut und @Yve

Eure Ausführungen nähren so ein bisschen mein Bauchgefühl des Risikos der Sinnlosigkeit meines Unterfangens.
Obgleich meine Hardware auf dem Papier bereits "Steinzeit" ist, rennt sie für meinen Zweck (mit dem Umweg über Proxies und "Batchverarbeitung der Effekte im Hintergrund") ausreichend schnell.

Zum Einsatz kommt Davinci Resolve Studio (kostenpflichtig - aktuellste Version) und Fusion Studio (auch kostenpflichtig und aktuell) unter Windows 11.
Die Hardware besteht aus X99 mit 128GB RAM (3200MHz DDR4) und i7-6950x (hatte vorher einen 6850k - mit dem bin ich immer wieder ins CPU Limit gelaufen (100% TaskManager - auch bei Proxy-Einsatz; der 6950x wird nicht annähernd ausgelastet) sowie 2 GTX 980 TI mit bis zu 1493 Chiptakt (die werden wegen des Proxy-Einsatz gar nicht mehr ausgelastet - aus, vorher sind die gerne mal auf 100% gehüpft und das war dann echt zäh). Das H.264 encoding und decoding wird von Davinci Resolve Studio und der 980ti unterstützt, die Videoquellen sind allerdings im Format BRAW von der Blackmagic Kamera. Das ist - glaube ich - nicht H.264 und wie hier decodiert wird, weiss ich nicht. Vor dem Einsatz von Proxies war es ja, wie gesagt, recht mau mit der "gefühlten Performance" - durch die Proxies passt das alles).

Mit dieser Hardware sind Freistellen (green screen keying) und anspruchsvollere Effekte in realtime so gut wie nicht möglich. Daher wird Fusion Studio eingesetzt, welches dann sequentiell - und ohne mein Zutun - im Hintergrund einzelne Filmsequenzen auf der NVME-M2 SSD bearbeitet und rendert. Die so gerenderten Sequenzen kann ich dann in Davinci Resolve verzögerungsfrei zusammenschneiden. Mit diesem Workflow lässt sich also arbeiten.
Fusion Studio arbeitet so dezent im Hintergrund, dass mein Rechner parallel dazu das Schneiden in Davinci Resolve Studio erlaubt. Der RAM wird von Fusion allerdings unerbittlich ausgenutzt weshalb ich auf 128 GB aufgerüstet habe (wird auch voll). Die GPUs kommen dann eigentlich nur beim Rendern des finalen Films ans Limit - beide takten dann mit 1493 konstant bis der Film fertig ist - die GPU-Last ist aber selten bei mehr als 50% im Taskmanager). Die Zeit, die hierfür benötigt wird, stört mich nicht, da ich während dessen noch parallele Office Tätigkeiten erledigen kann.

Mit dem Einsatz von höherwertigen GPUs kann ich sicher beim Rendern am Ende etwas gewinnen - was mich aber gar nicht interessiert. Die mehr GPU-Power würde für mich Sinn machen, wenn dadurch die Proxies obsolet werden und ich die Timeline in RealTime bearbeiten könnte.
Wenn ich versuche, ohne Proxies zu schneiden, ist ein schnelles Arbeiten mit meiner Hardware nicht mehr möglich. Die GPUs gehen immer wieder kurzzeitig in 100% Auslastung - und dann steht das Davinci Resolve gefühlt.

Wahrscheinlich komme ich zur Klärung der Nützlichkeit eines GPU-Upgrades nicht um einen Praxisversuch herum ... da ist der Leidensdruck allerdings noch nicht hoch genug. (bin froh, dass alles so gut und stabil arbeitet - selbst wenn ich immer wieder Rüstzeiten (Vorbereitung der Proxies) habe).
Meine Idee war, am Ende abzuschätzen . 1 Cuda-Core 980 GTX ti = 100% vs. 1 CUDA-Core 2080 ti = 150% (oder was auch immer) vs. ... etc. um mir dann "auszurechnen" wieviel und welche neuen CUDA-Cores ich für Faktor 10 benötigen würde ...

Vermute, ihr habt verstanden, worauf ich raus wollte, um daraus den ungefähren Nutzen abschätzen zu können, da - soweit ich weiß - für Timeline, Effekte und Keying in Davinci Resolve hauptsächlich die CUDA-Cores eingesetzt werden.
In Fusion Studio wird jedoch auch (noch) viel mit der CPU gearbeitet - deshalb recht langsame Verarbeitung, aber das läuft ja zum Glück ohne negativen Impact im Hintergrund), was mich aber nicht einschränkt ...

Ich danke Euch für Eure Unterstützung und lasse Euch wissen, wenn ich etwas im Setup verändere / teste.
 
Dual GPU ist nach Bauchgefühl auch nicht ideal. Je nach dem was die Software macht, kopiert die ständig dummerweise Daten von der einen GPU zur anderen, und/oder die eine wartet auf die andere.

Auch der begrenzte PCIe 3.0 Bus durch die CPU könnte eine Rolle spielen, auch wenn die von den Cores und Taktrate für deine Sachen reicht.

GPU-Last im Taskmanager würde ich nicht all zu genau nehmen. Guter Indiz, aber manchmal zeigts einem was anderes an, als grade Sache ist. hier kenne ich wie geschrieben nur das Nvidia eigene Tool nvidia-smi mit dem man sich anzeigen lassen kann, was die GPU's grade wirklich machen.

Wenn ich mir so Blender Benchmarks anschaue, die immer gutes Indiz für CUDA Performanz ist, dann ist z.B. ne RTX3050 grob 3mal schneller als ne 980 GTX TI. Und ne RTX4090 23mal schneller. 🙃

 
Danke Dir @Yve

ich suche mal nvidia-SMI1704714021566.png
aber leider nicht gefunden ...

hast Du zufällig eine Quelle?

Danke Dir
 
Hier mal die Ergebnisse der Blender Benchmarks (https://www.blender.org/news/introducing-blender-benchmark/) einer RTX 4090. Du könntest die Benchmarks ebenfalls laufen lassen und rein rechnerisch die Anzahl der Cuda-Cores (16.384) zu der deiner GPUs gegenüberstellen, um die Rechenleistung eines einzelnen Cores ganz grob zu ermitteln. Bei Blender spielt aber auch der OPTIX Support eine Rolle, den Karten ohne RT-Cores nicht haben. Deshalb ist das schwierig zu vergleichen.

1704914346271.png
 
Zuletzt bearbeitet :
Danke @Tronado

mache ich immediately - Version 4.0.0. stelle die Ergebnisse dann hier ein
 
1704992272908.png

So - das ist für eine der beiden Grafikkarten. Zwei (im SLI Verbund) werden wohl nicht erkannt ...

das sind mal schlanke 4-5 % :ROFLMAO: - selbst wenn im optimalen Fall bei mir die zwei GPUs in DaVinci Resolve optimal linear skalieren wäre die CUDA Performance immer noch über 10 mal schneller - und mit einer GPU die 10 mal schneller ist, hätte ich ja dann den "wow" Effekt der "Real-Time-Bearbeitung" ...

ich fange schon mal an zu sparen :cool:
 
Ja, da brauchen wir jetzt nicht die jeweilige Anzahl der Cuda Cores gegenzurechnen, ist einfach ein kleines bisschen schneller. :)
 
Ich denke, wenn Ende des Jahres die 5000er fast vor der Tür stehen werden sie günstiger werden.
Ist auch wirklich unverschämt, ich habe im Oktober 2022 fast den Scalper Preis bezahlt, weil ich sie dringend brauchte (hüstel), dann kostete sie zwischenzeitlich "nur" 1799€, jetzt teilweise wieder 2100€ und mehr. Von wegen AD102 Knappheit, die Lager sind doch noch voll.
 
Zuletzt bearbeitet :
Oben Unten