PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Füllrate bilinear vs. trilinear


aths
2003-03-05, 07:42:17
Ist folgender Text, der sich auf GeForce3/4 Ti bezieht, richtig?

"Ein typisches Beispiel wäre: Base Texture, Detail Texture und Lightmap. Bei trilinearer Filterung wird für jede Textur ein Takt gebraucht, so dass am Ende jede Pipeline alle drei Takte einen Pixel in den Framebuffer schreibt. Da für die Lightmaps keine MIP-Texturen erstellt werden, werden diese Texturen nur bilinear gefiltert, doch weil eine folgende bilineare Textur fehlt kann bei der Lightmap der Vorteil von 2 TMUs pro Pipe nicht ausgespielt werden.

Bei bilinearer Filterung kann zugleich Base und Detail Map appliziert werden, im nächsten Takt kommt die Lightmap zum Zuge, wo wieder mal eine TMU arbeitslos bleibt.

Obwohl sich die theoretische Texelfüllrate bei bilinearer Filterung verdoppelt, ergibt sich bei diesem Beispiel aus der Praxis kein Verhältnis von 2:1 Takten, sondern nur von 3:2 Takten. Da sich die tatsächlichen Bandbreiten-Anforderungen nicht groß unterscheiden (Texturen werden aus dem Cache gelesen) ist der Geschwindigkeitsunterschied in der Praxis noch weitaus geringer, als diese Rechnerei vermuten lässt."

Demirug
2003-03-05, 08:26:49
Die Berechung mit den Takten müsste stimmen (wenn NVIDIA da nicht noch irgendwas komisches macht) Allerdings wird es durch den Texturecache nicht noch schneller.

Bei anderen Zusammenstellungen aus Texturanzahl und filter ergeben sich auch andere verhältnisse. Die 2:1 beim umschalten von bi auf tri ist einfach der worstcase.

aths
2003-03-05, 10:53:19
Wer mich kennt, ahnt, dass ich immer drei mal um die Ecke denke :)

Hinter der Klärung dieses Zusammenhangs steht auch die Frage, warum Early Z Culling so wenig bringt. Da wollte ich damit einsteigen, dass die theoretische Verdopplung von tri auf bi bei weitem keine 100% bringt, und zusätzliche Füllraten-Einsparungen auch nicht gerade voll durchschlagen.

Ich meine, dass Early Z typischerweise ca. 25% wegcullt, dieser Effekt setzt sich aber nur ungefähr zur Hälfte in Framerate um. Bei tri auf bi gewinnt man allerdings nur rund 15% - maximal 30%. Wie könnte man diesen geringen Gewinn erklären?

Demirug
2003-03-05, 11:37:19
Der Grund warum man die meisten Theoretischen Gewinne nicht voll umsetzten kann liegt daran das es eigentlich nie gelingt die Pipelines ständig unter voller Last zu halten.

So ist dein Beispiel mit den 3 Texturen ja schon ein solcher Fall. Bei bi wird dabei ja bei jedem 2 Takt eine TMU nicht genutzt. Die Auslastung der TMUs beträgt also nur 75%. Bei tri braucht man 3 Takte was auch dem theoretischem Limit entspricht also 100% Auslastung. Bleibt beim runterschalten der Qualität die Auslastung nicht gleich kann der Theoretische Gewinn nicht voll umgesetzt werden weil ein Teil der gewonnen Leistung verpufft.

Das war jetzt nur die Betrachtung einer Einheit. Da die Einheiten aber ja in Form einer Pipelines verkoppelt sind muss man auch alles vor und dahinter betrachten. In diesem Fall (tri auf bi) muss das Memory interface mehr Pixel/t Wegschreiben sowie mehr Z-Werte pro Takt einladen. Kommt es dabei nicht nach haben wir wieder eine bremse. Der nächste Punkt sind die Vertexshader und das Trisetup wenn diese nicht in der Lage sind die nun höhere Anzahl von Pixel zu liefern hat man ebenfall wieder verloren.

Beim HSR kommt jetzt noch ein zusätzlicher Effekt dazu. Häufung. Die zu entfernenden Pixel treten gerne in Massen auf. Das hat zur Folge das die Pixelpiplines schnell lehrlaufen und Lehrzyklen produzieren. Diese Fillrate ist dann einfach verloren. Hinzu kommt noch das während dieser Phase die Vertexshader und der Anfang des trisetups (bis zum EarlyZ) viel mehr (das vierfache schätze ich) Pixel liefern müssen. Bei komplexen Shadern und kleinen Dreiecken ist das ganz schnell ende. Im worstcase fall (Die Vertexshader/Trisetup können genauso viele oder weniger Verticens/Dreiecke erzeugen wie die Pixelshader verarbeiten können) würde also das zuschalten von EarlyZ nichts bringen. In allen anderen Fällen kann EarlyZ lediglich die Leerlaufzeiten der Vertexshader und des Trisetups in Fillrate umsetzten diese muss aber nicht zwangsläufig der kompletten freiwerdenen Fillrate entsprechen.

Early-Z ist also wie viele andere Dinge auch nur ein Mittel um den Flaschenhals zu verschieben auf eine Stelle die hoffentlich etwas breiter ist.

aths
2003-03-05, 17:12:01
Danke für die Erklärungen!