Lolliedieb
Cadet 4th Year
- Registriert
- Jan. 2014
- Beiträge
- 66
Um da technisch mal etwas Licht rein zu bringen:
Die meisten "KI" Modelle nutzen eine Matrix-Matrix Multiplikation mit reduzierter Genauigkeit in der Ausführung. Das kann wenn man floating points hat dann fp16 oder auch fp8 sein oder bei Integern halt sowas wie 4 und 8 bit Integer. Da kann man dann jeweils 2 / 4 / 8 Werte in einen standard Integer packen.
Was Nvidia mit den Tensors los getreten hat war, dass man die Matrizen schön über die ganze Wave (32 Threads) verteilt hat in einer bestimmten Form. Dann haben die Tensor Cores die Berechnung durchgeführt und am Ende hatte man die Ergebnismatrix wieder auf die Register verteilt. Was entfallen ist war ein aufwendiges zuführen der Daten in jeden Thread, man hatte einen kleineren Register-Count und - ganz wichtig: man konnte parallel auf den Normalen Cuda-Cores noch andere Rechnungen ausführen. Ein Tensor-Call auf Ampere stalled die Tensor Einheit für 8 oder 16 Zyklen - in der Zeit kann die normale Alu aber weiter Arbeit machen.
Bei AMD musste man sich nun etwas ran tasten. RDNA2 hat mit den v_dot - Befehlen auch schon Befehle eingebaut, die dazu geeignet sind so etwas wie eine Matrix-Matrix Multiplikation mit geringerer Genauigkeit recht schnell durchzuführen. Nur, dass hier jeder Thread die Daten, die er bearbeiten soll komplett zugeführt bekommen muss. Vergleicht man das mit den Turing und Ampere Tensoren, ist das nicht wirklich langsamer - die RDNA2s können sehr fix sein, aaaaber: es läuft halt auf den normalen Einheiten, erlaubt also nicht noch wirklich andere Berechnungen nebenbei.
RDNA3 baute nun darauf auf und hat aber Matrix Befehle eingeführt, die zwar etwas ekeliger zu programmieren sind (Ich mag das Register-Placement nicht so), aber grundsätzlich vom Look & Feel dem was Nvidia macht recht nahe kamen. Einziger Unterschied: es wird nach wie vor die normale Alu benutzt im Hintergrund, aber das Daten-Sharing ist nun ähnlich wie im grünen Team und viel schneller als RDNA2 ist es auch nicht - wenn man die Daten bei RDNA2 in den richtigen Registern vorher hatte.
Wie RDNA4 das nun löst ... gute Frage. Bekannt aus dem was bisher veröffentlicht ist, weiß man nur, dass es potenter sein soll und das es neue Matrix-Formate gibt. Möglich, dass man den Durchsatz angehoben hat oder die Taktzyklen reduziert hat, die eine Berechnung dauert. Ob man nun aber separate Chipfläche dafür abgestellt hat und nun erlaubt parallel noch was zu rechnen? Ich weiß es nicht, aber die Tatsache, dass man bei RDNA4 die Leistung für FSR4 wohl über hat, aber bei RDNA3 sich noch nicht sicher ist, ob das klappt - das ist schon ein Hinweis, dass in dem Bereich mehr gemacht wurde. Denn die reine Leistung der Compute Units is bei der 9070XT nun nicht wirklich gröber als bei 7800XT und 6800XT. Das lässt vermuten, dass hier mehr passiert ist.
Die meisten "KI" Modelle nutzen eine Matrix-Matrix Multiplikation mit reduzierter Genauigkeit in der Ausführung. Das kann wenn man floating points hat dann fp16 oder auch fp8 sein oder bei Integern halt sowas wie 4 und 8 bit Integer. Da kann man dann jeweils 2 / 4 / 8 Werte in einen standard Integer packen.
Was Nvidia mit den Tensors los getreten hat war, dass man die Matrizen schön über die ganze Wave (32 Threads) verteilt hat in einer bestimmten Form. Dann haben die Tensor Cores die Berechnung durchgeführt und am Ende hatte man die Ergebnismatrix wieder auf die Register verteilt. Was entfallen ist war ein aufwendiges zuführen der Daten in jeden Thread, man hatte einen kleineren Register-Count und - ganz wichtig: man konnte parallel auf den Normalen Cuda-Cores noch andere Rechnungen ausführen. Ein Tensor-Call auf Ampere stalled die Tensor Einheit für 8 oder 16 Zyklen - in der Zeit kann die normale Alu aber weiter Arbeit machen.
Bei AMD musste man sich nun etwas ran tasten. RDNA2 hat mit den v_dot - Befehlen auch schon Befehle eingebaut, die dazu geeignet sind so etwas wie eine Matrix-Matrix Multiplikation mit geringerer Genauigkeit recht schnell durchzuführen. Nur, dass hier jeder Thread die Daten, die er bearbeiten soll komplett zugeführt bekommen muss. Vergleicht man das mit den Turing und Ampere Tensoren, ist das nicht wirklich langsamer - die RDNA2s können sehr fix sein, aaaaber: es läuft halt auf den normalen Einheiten, erlaubt also nicht noch wirklich andere Berechnungen nebenbei.
RDNA3 baute nun darauf auf und hat aber Matrix Befehle eingeführt, die zwar etwas ekeliger zu programmieren sind (Ich mag das Register-Placement nicht so), aber grundsätzlich vom Look & Feel dem was Nvidia macht recht nahe kamen. Einziger Unterschied: es wird nach wie vor die normale Alu benutzt im Hintergrund, aber das Daten-Sharing ist nun ähnlich wie im grünen Team und viel schneller als RDNA2 ist es auch nicht - wenn man die Daten bei RDNA2 in den richtigen Registern vorher hatte.
Wie RDNA4 das nun löst ... gute Frage. Bekannt aus dem was bisher veröffentlicht ist, weiß man nur, dass es potenter sein soll und das es neue Matrix-Formate gibt. Möglich, dass man den Durchsatz angehoben hat oder die Taktzyklen reduziert hat, die eine Berechnung dauert. Ob man nun aber separate Chipfläche dafür abgestellt hat und nun erlaubt parallel noch was zu rechnen? Ich weiß es nicht, aber die Tatsache, dass man bei RDNA4 die Leistung für FSR4 wohl über hat, aber bei RDNA3 sich noch nicht sicher ist, ob das klappt - das ist schon ein Hinweis, dass in dem Bereich mehr gemacht wurde. Denn die reine Leistung der Compute Units is bei der 9070XT nun nicht wirklich gröber als bei 7800XT und 6800XT. Das lässt vermuten, dass hier mehr passiert ist.
Zuletzt bearbeitet: