Zum 3DCenter Forum
Inhalt




NV40-Technik im Detail
Teil 1: Geheimnisse der Pixelshader-Einheit

23. August 2004 / von aths / Seite 3 von 5


   Mehr zur Shadereinheit 2

Wir wissen nicht, ob Einheit 2 alles als Input nehmen kann wie Einheit 1. Vermutlich ist das möglich, jedoch nur, in dem für diesen Takt einige Funktionalität aus Einheit 1 blockiert wird. Solche feinen Zusammenhänge wären mit intensiven Tests sicher zu ermitteln, allerdings werden neue GPU-Generationen dann wieder mit anderen Eigenschaften aufwarten. Betrachten wir grob einige Eigenarten:


Shadereinheit 2

Die Crossbar kann bis zu vier Werte auf bis zu fünf Kanäle verteilen, womit immer mindestens ein Kanal frei bleibt. Verfügbar sind vier Multiplikations- und vier Additionskanäle, sowie eine weitere Einheit, die bestimmte mathematische Spezialfunktionen ausführen kann. Die ADD-Einheiten sind kaskadiert und mit zusätzlicher "Verdrahtung" versehen, die wir im Bild nur angedeutet haben. Dies steigert die Flexibilität und ermöglicht das Skalarprodukt in einem Takt.

Einheit 2 kann ebenfalls mit zwei unabhängigen Befehlen pro Takt klarkommen. Wie üblich, kann jede Recheneinheit auch einfach nur Daten weiterleiten. Sofern keine SFU gebraucht wird, kann die MAD-Logik bis zu zwei Befehle aus dieser Liste abarbeiten: MUL, ADD, MAD, DP, oder jede andere Instruktion, die auf diesen Operationen basiert.

Pro Takt können maximal vier Komponenten berechnet werden (R, G, B, A), so dass SFU und MUL4 nicht im selben Takt ausgeführt werden können. Man sehe unsere "Drähte" bitte als Datenpfade und nicht als einzelne Verbindungen: MUL und ADD-Einheiten haben jeweils zwei Inputs, wir zeigen nur einen "Datenpfad".

Die Branching-Einheit, um den Befehlszeiger zu ändern, sitzt zwischen Einheit 1 und 2, eine Hilfs-Einheit für Skalierung (und wohl auch "Biasing") folgt der Einheit 2. Außerdem gibt es neben den Shadereinheiten eine Extra-Unit, welche pro Takt (offenbar aber mit einer Latenz von zwei Takten) ein NRM_PP beisteuern kann. Ob diese Einheit in einem gegebenen Taktzyklus tatsächlich genutzt werden kann, hängt von der Input-Quelle ab (z. B. Temp, Color, Textur, ...), da es für jeden Typ ein Readport-Limit gibt.

Spezialfunktionen, von denen wir wissen, dass NV40 für sie dedizierte Hardware anbietet:

Name genutzte Einheit Takte Bemerkungen
RCP #1 1 1/x
RSQ* #1 2 1/sqrt(x). In diesen beiden Takten gibt es auf Wunsch noch ein RCP kostenlos, so dass SQRT ebenfalls nur zwei Takte benötigt.
LOG #2 1 log2(x)
EXP #2 1 2x
SINCOS #2 2 (3) Sinus (x) and Cosinus (x), für eine Komponente (bzw. zwei Komponenten)
* Es sieht so aus, dass RSQ auch die Einheit 2 blockiert. Vielleicht blockieren auch andere SFUs weitere Einheiten. Vielleicht werden (oder sind bereits) derartige Probleme in neueren Treiberversionen gelöst.


Spezialfunktionen, die als Makro ausgeführt werden:

Name genutzte Einheit Takte Bemerkungen
LRP #2 2 Lineare Interpolation (LRP ist ein Makro für w*a + (1-w) *b)
POW #2 3 xy (POW ist ein Makro für exp(y* log(x))
NRM #2, #1 2 x*1/|x|. Dabei ist |x| der Betrag (=Länge) eines Vektors: Zunächst wird ein Faktor berechnet, in dem vom Skalarprodukt mit sich selbst die Quadratwurzel, und davon dann der Kehrwert berechnet wird. Dann wird jede einzelne Komponente des originalen Vektors mit diesem Faktor multipliziert.
NRM_PP - 1 Das Ergebnis liegt in Partial Precision (FP16) vor.


In der nächsten Folge sehen wir uns an wie man für diese Pipeline optimiert, und welche Hardware für den NV40 Pate stand.






Kommentare, Meinungen, Kritiken können ins Forum geschrieben werden - Registrierung ist nicht notwendig Zurück / Back Weiter / Next

Shortcuts
nach oben