PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anteil von PS vs. Fixed Function


egdusp
2003-05-01, 17:54:55
Hallo,

meine Frage ergab sich aus einem Posting bei GPW:Rumorwatch (www.notforidiots.com):
Mon Apr 28, 2003 5:08:22 pm - I'm gonna post this here too, since I already seen a lot of people asking it. The NV35 can output 8 pixels with color, but it only got 4 shader pipelines. It does have higher per-clock shading performance anyway, though. This info might be wrong, though - Reliability: Kinda High, not sure - No Link

Ich interpretiere das einfach mal so, dass der NV35 4 PS Pipelines und 4 Fixed Function Pipelins hat.
Sind auch bei DX8/9 only Spielen viele Fixd Function Pixel zu erwarten.

mfg
egdusp

Demirug
2003-05-01, 18:50:43
Originally posted by egdusp
Hallo,

meine Frage ergab sich aus einem Posting bei GPW:Rumorwatch (www.notforidiots.com):
Mon Apr 28, 2003 5:08:22 pm - I'm gonna post this here too, since I already seen a lot of people asking it. The NV35 can output 8 pixels with color, but it only got 4 shader pipelines. It does have higher per-clock shading performance anyway, though. This info might be wrong, though - Reliability: Kinda High, not sure - No Link

Ich interpretiere das einfach mal so, dass der NV35 4 PS Pipelines und 4 Fixed Function Pipelins hat.
Sind auch bei DX8/9 only Spielen viele Fixd Function Pixel zu erwarten.

mfg
egdusp

Man kann bei den Pixeln nicht so streng zwischen Fixed Funktion und PS trennen. Auch die "Fixed Functions" sind schon sehr flexibele. Aus diesem Grund wurden bisher auch immer alle "Fixed Funktion" und PS Funktionen auf den gleichen physikalischen Einheitem im Chip ausgeführt. Und da für diese Dinge nicht gerade wenig Transitoren benötigt werden wird das auch so bleiben.

Das "Gerücht" bezieht sich auf den "8 Pixel Turbomode" im NV35. Dieser soll wenn man die weiteren Informationen im Umfeld dieses Gerüchts betrachtet aber nur beim Singletexturing zum Einsatz kommen.

Ich habe nun zwei mögliche Interpretationen der ganzen Sache:

1. Der Chip besitzt 8 TMUs und 8 ALUs diese können nun entweder als 8*1 Pipeline benutzt werden oder als 4*2 Pipeline. Da die für einen Pixelshader wichtigen Loopback einheiten sowie die Registerspeicher aber nur 4 mal vorhanden sind. kann der Chip in der 8*1 Konfiguration nur einfache Singeltextur + 1 ALU-Operation Funktionen ausführen. Werden mehr Texturen oder Anweisungen gebraucht funktioniert nur noch die 4*2 Konfiguration

2. Der Chip hat nur 4 Pipelines. Aus jeder Pipeline können aber 2 Farbwerte pro Takt abgeriefen werden. Beim Signeltexturing schiebt das Trisetup nicht die Daten von einem Pixel in den Shader sondern die Daten von 2 Pixel. Da jeder Sacher ja 2 TMUs und 2 ALUs hat kann für jeden der beiden Pixel eine Texture gesampelt werden und eine Instruktion ausgeführt werden. Am ende hat man dann zwei Farbwerte die man an 2 Pixelpositionen speichern kann.

Die 2 Variante gefällt mir besser weil sie weitere Technische möglichkeiten bietet.

egdusp
2003-05-02, 08:32:51
Originally posted by Demirug

2. Der Chip hat nur 4 Pipelines. Aus jeder Pipeline können aber 2 Farbwerte pro Takt abgeriefen werden. Beim Signeltexturing schiebt das Trisetup nicht die Daten von einem Pixel in den Shader sondern die Daten von 2 Pixel. Da jeder Sacher ja 2 TMUs und 2 ALUs hat kann für jeden der beiden Pixel eine Texture gesampelt werden und eine Instruktion ausgeführt werden. Am ende hat man dann zwei Farbwerte die man an 2 Pixelpositionen speichern kann.

Die 2 Variante gefällt mir besser weil sie weitere Technische möglichkeiten bietet.

Wo wäre dann der Unterschied zu 2 getrennten Pipelines, wenn 2 Pixel gelesen, unabhängig (das meinst du doch, oder?) bearbeitet und dann auch noch getrennt ausgegeben werden können?


mfg
egdusp

Demirug
2003-05-02, 13:19:13
Der Unterschied liegt in der Anzahl der Transitoren die man dafür braucht.

Jede Pipeline erfordert eine bestimmte Anzahl von Transitoren zur steuerung der Pipeline sowie Speicherzellen für die Register.

Baut man nun 4 Pipeline mit 2 TMUs/ALUs und 2 Outputs spart man sich im Gegensatz zu 8 Pipelines mit 1 TMU/ALU un einem Output 4 mal die Transitoren für die Steuerung und den Registerspeicher.

Mit dem unabhängig ist das so eine Sache. Es ist durchaus möglich eine solche Sache zu bauen ohne das die Pipeline überhaupt weiss das sie eigentlich 2 Pixel bearbeitet.

Schauen wir uns mal einen einfachen Pixelshader an.


ps_1_1 // Pixelshader version
tex t0 // benutzte die Texturekoordinate 0 um aus der Texture 0 einen Wert zu holen und in t0 zu speichern
mov r0, t0 // Kopiere t0 nach r0. Der Wert der bei einem Pixelshader am ende in r0 steht wird in den Framebuffer geschrieben


nun duplizieren wir einfach mal den Code

ps_1_1
tex t0
tex t1
mov r0, t0
mov r1, t1


Die Pipeline wird auch diesen Code ausführen. Wenn nun aber das TriSetup folgendes tut:

1.Pixel Texturcoordinate 0 -> Pixelshader Texturcoordinate 0
2.Pixel Texturcoordinate 0 -> Pixelshader Texturcoordinate 1

und am ende des Shaders folgendes geschiet

r0 -> Speicherposition(en) Farbe Pixel 1
r1 -> Speicherposition(en) Farbe Pixel 2

Hat der Shader 2 Pixel berechnet ohne es überhaupt zu wissen.