PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eine andere Betrachtungsweise des winkelabhängien AF bei ATI.


Demirug
2003-06-12, 19:49:49
Eine Frage die mich schon länge beschäftigt ist warum die AF Implemntierung von ATI Winkelabhängig ist?

Die spontane Anwort dafür ist natürlich "Performancegründen". Aber irgendwie hat mich diese Antwort nie richtig zufrieden gestellt. Denn wenn es nur darum ginge hätte man ja wie nvidia auch eben mehr als 2 Modies anbieten können. Wenn man so etwas nicht tut muss es also IMHO eine Limitierung in der Hardware sein.

Das wirft dann natürlich die nächste Frage auf. Warum limitiert man sich selbst die Hardware? Hier gibt es IMO nur zwei Antworten

- Unfähigkeit die wir ATI hier nicht unterstellen wollen
- Einsparen von Transitoren.

Da ich zur zweiten Alternative tendiere habe ich mich gefragt welche Einsparungen zu einem Winkelabhängigen AF führen können.

Dabei kamm ich zu folgendem Ergbeniss.

Zur Wahl des richtigen AF-Levels muss von einem Vektor die Länge ermittelt werden.

Die übliche Vorgehensweise dazu ist es die Deltas zwischen dem Start und Endpunkt zu ermitteln und dann durch eine Wurzel aus a²+b² die Länge zu berechnen. Nun weiss jeder der sich etwas mit der Materie auseinader gesetzt hat das eine Wurzelberechnung nicht gerade zu den einfachen Dingen gehört. Läst sich die Rechnung also zu lasten der Genauigkeit vereinfachen?

Ja das geht. Benutzt man nicht Wurzel aus a²+b² sondern immer den Maximalwert von a und b so entsteht als Graph der Funktion eine Kurve welche bei 0, 90, 180 und 270 Grad die richtige länge ermittelt und bei 45, 135, 225 und 315 Grad die grösste Abweichung hat. Das sollte bekannt vorkommen.

Aber wie besetigt man nun die 45 Grad Schwäche dieses Verfahrens? Auch dafür habe ich dann letzen Endes eine Lösung gefunden.

Man benutzt Max (a, b, (a+b)*0,707). Damit bekommt man auch die 45, 135, 225 und 315 Grad Winkel annähernd richtig. Nun hat man 8 Winkel für die man relative genau die Länge bestimmen kann. Dazwischen aber nach wie vor eine Abweichung.

Wer sich nun Fragt wie das (a+b)*0,707 zustanden gekommen ist:

Bei 45 Grad ist die Summe aus a+b um das 1.41 fache grösser als die Wurzel aus a²+b². Um also auf die richtige länge zu kommen müsste man durch 1,41 teilen. Eine Divsion durch 1,41 ist aber identisch mit einer Multiplikation mit 0,707 und da Multiplikationen einerfacher zu realisieren sind nimmt man eben diese.

Als Konsequenz könnte sich auch noch ergeben das ATI dann auch in den Texturen nur entlang dieser 3 Linien (0, 45, 90 Grad) sampelt was den AF-Rechner nocheinmal vereinfachen würde.

Das alles ist natürlich nur meinen Meinung und ich kann auch nichts davon wirklich beweisen (ausser ein paar der Mathematischen gegeben heiten).

EDIT: Klammern hinzugefügt

aths
2003-06-12, 22:11:40
Ich hoffe, diesen Ansatz in einem möglichen zukünftigem Artikel benutzen zu dürfen :D

Meine Idee war bisher immer, dass man "längs" und "quer" (0°, 90°) einfacher aus der Textur samplen könnte.

Demirug
2003-06-12, 22:26:39
Original geschrieben von aths
Ich hoffe, diesen Ansatz in einem möglichen zukünftigem Artikel benutzen zu dürfen :D

Meine Idee war bisher immer, dass man "längs" und "quer" (0°, 90°) einfacher aus der Textur samplen könnte.

Mach damit was du möchtest.

Das mit dem einfacher samplen sehe ich nicht unbedingt weil wenn man ja kein AF benutzt muss man ja auch ständig von einer anderen stelle samplen muss. Was aber einfacher sein sollte ist das Berechnen der Samplelinie wenn diese nun genau auf 0° oder 90° (beim R300 kommt dann ja noch 45° hinzu) liegt. Die Cachehits könnte auch besser werden. Ob das aber wirklich der Fall ist konnte ich bisher nicht ohne restzweifel nachweisen.

micki
2003-06-13, 09:50:04
vielleicht liegt es daran, dass ATI RipMaps anstatt MipMaps nutzt (hab ich irgendwo in nem paper (von ATI?)gelesen, vorher wuste ich nicht, dass es sowat gibt,also hoffe ich das stimmt :D )


dabei gibt es nicht nur texturgrößen von sizex|sizey, sizex/2|sizey/2, sizex/4|sizey/4... sondern auch sizex/2|sizey,sizex/4|sizey... und äquivalent für sizey.

damit hat man quasi die texturen optimiert vorliegen für jeweils 45% unterschied.

MfG
micki

ps. damit ihr net denk ik denk mir dat nur aus

http://www.cs.tut.fi/~tgraf/2003/luennot/T296-311.pdf
http://www.ugrad.cs.ubc.ca/~cs535/notes/535b03.pdf

StefanV
2003-06-13, 10:57:24
Original geschrieben von micki
vielleicht liegt es daran, dass ATI RipMaps anstatt MipMaps nutzt (hab ich irgendwo in nem paper (von ATI?)gelesen, vorher wuste ich nicht, dass es sowat gibt,also hoffe ich das stimmt :D )
Wohl eher in einem von aths Artikeln, oder? ;)

Die Radeons nutzen eigentlich kein RIP Mapping, das war ein Irrtum von aths, da Ripmapping diverse Macken hat, die eine Radeon eigentlich nicht hat...

micki
2003-06-13, 12:34:42
*sichvor aths verneig*
könnte glad sein.. das ist zumindestens ein beweis dafür, dass seine werke nützlich sind :D (sofern fehlerfrei)

MfG
micki

seahawk
2003-06-13, 12:55:14
Aber wenn die Theorie richtig ist, dann müßte es doch auch erhebliche Performacevorteile bringen.

Die angepaßte Berechnung ist ja einfacher als die quadratische Formel.

Demirug
2003-06-13, 13:17:46
Original geschrieben von seahawk
Aber wenn die Theorie richtig ist, dann müßte es doch auch erhebliche Performacevorteile bringen.

Die angepaßte Berechnung ist ja einfacher als die quadratische Formel.

Ein Performancevorteil ergibt sich daraus ja erst mal nicht. Da ja in beiden Fällen die gleiche Anzahl von Berechnungen pro Takt ausgeführt werden muss. Eine Ausnahme könnet hier der NV25 sein der ja scheinbar nicht für 2 Texturen gleichzeitig die AF-Berechung durchführen kann.

Gehen wir nun aber davon aus das die NV3X Rheie und die R3XX Rheie in Abhängigkeit der TMU Anzahl die gleiche AF-Berechnungsleistung (Berechnen nicht samplen) bringen bringt das vereinfache Verfahren (meine Theorie) keine zusätzliche Performance. Das vereinfachte Verfahren sollte aber mit wesentlich weniger Transitoren als das "korrekte" Verfahren auskommen und jeder gesparte Transitor kann Gold wert sein.

PS: Beim Max (a,b) Verfahren beträgt der maximale Fehler (bei 45°) 29,3%. Bei Max (a,b,(a+b)*0,707) sind es 7,6% (bei 67,5°).

Endorphine
2003-06-14, 16:23:34
Demirug,

interessante Überlegung, aber ob ATI auf diese Weise Transistoren/Waferfläche sparen möchte? Kann ich mir nicht vorstellen. Da wäre sicher an anderen Stellen mehr möglich und was IMHO viel wichtiger ist: dieses Verfahren senkt ja letzten Endes die Qualität zu Gunsten der Leistung. Wenn man aber wirklich mal den Punkt höhere Leistung aussen vor lässt verbleibt ja nur eine geminderte Qualität, die sich ja auch von Testredakteuren nachweisen lässt. Warum sollte ATI also für minimal weniger Transistoren und eine vielleicht 2 nm² geringere Waferfläche Qualität opfern, oder anders gedacht: warum sollte ATI für so wenig Ersparnis der Konkurrenz einen Vorteil zuschieben?

Der Rechenweg macht sicher Sinn, aber die Begründung dafür (um Waferfläche zu sparen) sicher nicht.

Edit: Ausserdem ist noch fraglich, ob solche Logiksparmassnahmen wirklich zu einem kleineren Die führen, wenn es sich um solche Kleinigkeiten handelt. Es könnte auch sein, dass einfach nur der Verschnitt von nicht genutzter Fläche auf dem Die grösser wird. Die Einheiten sind ja nicht alle eine Die-Kantenlänge breit und nur unterschiedlich lang, sondern sitzen verschachtelt auf dem Die. Wenn man irgendwo Logik einsparen kann entsteht also zuerst einmal nur eins: ein leerer Zwischenraum. Dann muss man diesen mit geeigneter Umstrukturierung erst wieder wegoptimieren. Ob sich dieser Aufwand für solche Kleinigkeiten lohnt, wo doch sicher an anderen Stellen mit dem gleichen Aufwand mehr gespart werden kann? :grübel:

Edit #2: Ist natürlich Quark, wenn man die Optimierung schon in die ersten Entwürfe als bewusste Designentscheidung mit einfliessen lässt. Die Frage ob ATI aber für so wenig Gewinn gleich einen so deutlichen Qualitätsnachteil gegenüber der Konkurrenz in Kauf nimmt bleibt aber bestehen (wir wollen die Leistungsfrage ja mal aussen vor lassen).

Demirug
2003-06-14, 17:14:04
Endorphine, ein guter Chipcompiler presst den Verschnitt aus dem DIE schon heraus da mache ich mir keine Sorgen. Zudem wäre der von dir befürchtet Fall (Einheit wird kleiner) ja gar nicht eingetreten da der R300 AF-Rechner ja komplexer (Keine 45° Grad schwäche und tri-AF möglich) ist als der des R200.

Wenn der Transitorcount nicht die Begründung ist was dann? ATI hätte sonst ja auch einen AF-Rechner ohne Winkelabhängkeit einbauen können.

Und wenn man bedenke das ein sqrt zu den aufwendigsten Operationen in einer FPU gehört ergibt sich da durchaus potenial. Bei einer GPU hat man ja nicht den Luxus wie bei einer CPU aufwendinge operationen einfach mehr Takte benötigen zu lassen. Bei 2xbi AF muss man spätetens nach 2 Takten die wirklich benötigte AF Stufe habe.

Endorphine
2003-06-14, 17:33:30
Original geschrieben von Demirug
Wenn der Transitorcount nicht die Begründung ist was dann? ATI hätte sonst ja auch einen AF-Rechner ohne Winkelabhängkeit einbauen können. Ich wage mal zu behaupten, dass es sich tatsächlich um eine reine Designentscheidung handeln könnte, dass ATI minimal BQ opfert und dafür viel Leistung bei im Normalfall kaum wahrnehmbarem BQ-Verlust gewinnt und zudem noch ein paar Transistoren bzw. Waferfläche spart. Klingt für mich irgendwie sehr logisch. Der einzige Verlierer dabei ist derjenige, der gern ein nicht-winkelabhängiges AF haben möchte und den Kompromiss von Qualität vs. Leistung lieber über den Grad der full-scene Anisotropie regeln würde.

Ich geh schon mal in Deckung vor der Flamewelle der AA-Fetischismusfraktion ;)

Xmas
2003-06-14, 17:54:05
Original geschrieben von Endorphine
Ich wage mal zu behaupten, dass es sich tatsächlich um eine reine Designentscheidung handeln könnte, dass ATI minimal BQ opfert und dafür viel Leistung bei im Normalfall kaum wahrnehmbarem BQ-Verlust gewinnt und zudem noch ein paar Transistoren bzw. Waferfläche spart. Klingt für mich irgendwie sehr logisch. Der einzige Verlierer dabei ist derjenige, der gern ein nicht-winkelabhängiges AF haben möchte und den Kompromiss von Qualität vs. Leistung lieber über den Grad der full-scene Anisotropie regeln würde.
Von einer bewussten Designentscheidung gehe ich ebenso aus.

Demirug
2003-06-14, 18:21:36
Der AF-Rechner des R300 und der Vorgängermodele macht sicherlich genau das was geplannt war.

Zur Komplexität einer sqrt Einheit habe ich hier zwei schöne Bilder.

Eine parallel 8 Bit Integer sqrt Einheit:

http://www.csee.umbc.edu/help/VHDL/samples/sqrt8m.gif

Die Sm Einheiten (subtractor-multiplexor) in diesem Diagram sind im Detail folgendermassen aufgebaut:

http://www.csee.umbc.edu/help/VHDL/samples/sqrtsm.gif

EDIT: Wer VHDL lesen kann findet hier das Programm dazu: http://www.csee.umbc.edu/help/VHDL/samples/sqrt8m.vhdl

Ikon
2003-06-14, 22:27:41
Original geschrieben von Endorphine
Ich wage mal zu behaupten, dass es sich tatsächlich um eine reine Designentscheidung handeln könnte, dass ATI minimal BQ opfert und dafür viel Leistung bei im Normalfall kaum wahrnehmbarem BQ-Verlust gewinnt und zudem noch ein paar Transistoren bzw. Waferfläche spart. Klingt für mich irgendwie sehr logisch.

Dem kann ich nur zustimmen, schließlich nutzt ATi diese Art der AF-Optimierung schon seit der (ersten) Radeon (R100). Daraus schließe ich, dass es sich um eine bewusste und vorallem auch längerfristige (Design-)Entscheidung handelt. ATi wäre doof, wenn sie die Chance nebenbei auch noch den Transistorcount zu verringern, nicht nutzen würden.

Original geschrieben von Endorphine
Ich geh schon mal in Deckung vor der Flamewelle der AA-Fetischismusfraktion ;)

Der Zorn des aths wird dich mit voller Härte treffen :grhargh: