Werbung
Auf der diesjährigen CES waren zahlreiche Tablets und sonstige Unterhaltungselektronik auf Basis von Tegra 2 zu sehen. Bereits Ende letzten Jahres gaben wir einen Ausblick auf die Performance von Tegra 2 im Hinblick auf die Dual-Core-ARM-Architektur. Auch damals schnitten wir schon das Thema der Grafik-Performance, die natürlich mit einer guten CPU-Performance einhergeht, an. Genaue Datails lagen zum damaligen Zeitpunkt allerdings noch nicht vor. Auf der CES kündigte NVIDIA an bald weitere Details bekannt zu geben - nun ist es soweit.
OpenGL ES 2.0 Graphics Processing PipelineOpenGL ES 2.0 ist die Standard-API für Entwickler auf mobilen Plattformen, die sich mit dem Thema 3D-Grafik beschäftigen. Die OpenGL ES API ist dabei nur ein Subset von OpenGL auf dem Desktop und stellt sich deutlich flexibler bei der Verwendung der jeweiligen Hardware dar. OpenGL ES 2.0 definiert dabei sehr flexible Pipeline-Strukturen, die ohne Fixed-Function-Hardware auskommt.
Wir wollen an dieser Stelle noch einmal auf die Grundsätze des 3D-Renderings eingehen, um später verstehen zu können, wo NVIDIA die Hebel für die Ultra Low Power (ULP) GeForce GPU ansetzt. Um eine 3D-Szene zu erstellen sind Polygone oder andere 3D-Modelle nötig, die in X-, Y- und Z-Positionen abgebildet werden. Eine 3D-Engine setzt diese Informationen zu einer 3D-Szene zusammen. Zu diesen Daten des Polygons kommen noch weitere hinzu. Dies sind die Position im 3D-Raum, die RGB-Farbwerte, das Alpha-Transparanz-Level, Textur-Koordinaten, Normal-Vektoren und vieles mehr. Komplette Gruppen dieser Informationen werden zusammengefasst. Kleine Objekte beispielsweise können direkt in einem Stück in den Vertex-Buffer geführt werden. Komplexere Objekte werden in kleinere Unterobjekte aufgeteilt und ebenfalls im Vertex-Buffer abgelegt.
Die 3D-Engine ruft über OpenGL ES den GPU-Treiber auf und gibt die Position der Daten im Vertex-Buffer weiter. Die GPU greift also direkt auf den Vertex-Buffer im shared Memory des Systems zu. Über die OpenGL-Pipeline gelangen die Daten in den Vertex-Shader, der weitere Berechnungen auf den Daten ausführt. Beispielsweise werden an dieser Stelle Informationen zur Berücksichtigung von Lichtquellen hinzugefügt. Die 3D-Szene wird nun in simple geometrische Objekte wie Dreiecke, Linien oder Punkte überführt. Der Rasterizer zerlegt diese wiederum in einzelne Pixel, wie sie später auch auf dem Display dargestellt werden. Der Pixel-Shader führt aber ebenfalls noch Berechnungen auf jedem Pixel aus - darunter sind neue Licht- und Farbwerte - und legt die Texturen darauf.
Der Z-Buffer überprüft im Anschluss, welche Pixel überhaupt sichtbar sind. Liegen zwei Pixel auf der gleichen Position, bestimmt der Z-Buffer welcher dieser Pixel näher zum Betrachter positioniert ist. Somit wird der endgültig sichtbare Pixel bestimmt. Sollte der vordere Pixel einen Transparenz-Wert besitzen, müssen natürlich beide im Z-Buffer gespeichert werden. Bei aktiviertem Antialiasing werden auch noch weitere Prozesse ausgeführt, welche die Kanten durch Neubestimmung der Farbwerte eines Pixels weicher aussehen lassen. Erst danach wird die Szene in den Frame Buffer geschrieben.
Sowohl der Vertex- wie auch der Pixel-Shader sind in OpenGL ES 2.0 voll programmierbar. So können Entwickler ihre eigenen Vertex- und Shading-Effekte nutzen. NVIDIA verwendet allerdings auch einige proprietäre Optimierungen, um eine gewisse Performance der Pipeline liefern zu können, ohne dabei den Stromverbrauch nach oben zu treiben.
Ultra Low Power GeForce GPU Architektur
Die Ultra Low Power GeForce GPU-Architektur kombiniert die erwähnte effizienten Vertex- und Pixel-Shader mit einem anisotropischen Filter. Zum Einsatz kommen dabei vier Pixel- und acht Vertex-Shader. Der anisotropische Filter ist ebenfalls proprietär und kommt so nur in der Ultra Low Power GeForce GPU zum Einsatz. Möglich sind aber auch Effekte, wie High Dynamic Range (HDR) Lighting und Multiple Render Targets (MRTs). Um die Effektivität der Berechnungen nun zu steigern, führt NVIDIA zahlreiche neue Technologien ein, die besonders darauf abzielen, so wenig GPU-Rechenleistung wie nur nötig in Beschlag zu nehmen.
Eine dieser Technologien ist Early-Z. Wie im ersten Abschnitt beschrieben werden erst ganz zum Schluss die darzustellenden Pixel im Z-Buffer bestimmt. Oftmals liegen mehrere Pixel auf der gleichen Position und werden auch komplett bis zu diesem Punkt berechnet. Letztendlich sichtbar ist aber nur ein Pixel von mehreren. Early-Z bestimmt schon vor dem Pixel-Shader die eigentlich sichtbaren Pixel und erspart der Architektur die Berechnung aller Pixel bis zum Z-Buffer. Unnötige Operationen werden so vermieden.
Eine weitere Maßnahme sind eigenständige Pixel- und Texture-Caches. Im Normalfall werden dort enthaltene Daten im Systemspeicher abgelegt. Nötige Zugriffe erfolgen während des Pixel-Processings und benötigen neben Rechenzeit auch Leistung auf Kosten des Stromverbrauchs. Die ULP GeForce Architektur besitzt diskrete Textur- und Vertex- sowie Attribut-Caches, so dass nicht mehr auf den Systemspeicher zugegriffen werden muss.
Coverage Sampled Antialiasing
Um die nötige Rechenleistung weiter zu steigern, ohne dabei auf ein Antialiasing zu verzichten, implementiert NVIDIA das Coverage Samples Antialiasing (CSAA). Anders als beim Super-Sample Antialiasing (SSAA) oder dem Multi-Sample Antialiasing (MSAA) werden die Pixel beim CSAA nicht mehrfach berechnet, um rundere Ecken darzustellen oder die Treppchenbildung zu verhindern. Über ein "Coverage Sample" wird bestimmt welche Farbinformationen in den jeweiligen Pixel einfließen und daraus ein Wert bestimmt. Die ULP GeForce GPU unterstützt 5x CSAA, es gibt also ein "Real Sample" und vier "Coverage Samples".
Anisotropischer Filter
Einen anisotropischen Filter müssen wir sicher nicht mehr ausgiebig besprechen, zumal NVIDIA hier keinen Unterschied zur Implementierung auf dem Desktop macht. Dennoch wollen wir in einem Beispiel den Effekt noch einmal darstellen, denn laut NVIDIA soll gerade das Zusammenspiel des anisotropischen Filters mit dem Antialiasing für eine bisher ungesehene Bildqualität im mobilen Bereich sorgen.
Power Management
Doch nicht nur die Berechnung innerhalb der Architektur wurde überarbeitet. Auch ein Power-Management in GPU und Speicher soll weiteres Einsparpotenzial zutage fördern.
Wie moderne GPUs auf dem Desktop, ist auch die ULP GeForce GPU in der Lage zu erkennen, in welchem Zustand sie sich befindet. Der Takt wird abhängig vom Zustand (Load, Idle und Standby) angepasst und reduziert so natürlich den Stromverbrauch. Über eine sogenannte "Dynamic Voltage and Frequency Scaling" (DVFS) Technologie werden die bis zu sechs System-Clocks und die Spannung von zwei Spannungsleveln gesteuert. Diese dynamische Anpassung von Takt und Spannung wird in CPUs schon seit längerer Zeit angewandt - wie in GPUs, kommt hier nur in feineren Leveln zum Einsatz.
NVIDIA geht aber auch noch einen Schritt weiter und unterteilt die GPU in verschiedene Blöcke. Nur die derzeit verwendeten Bereiche werden auch versorgt, die übrigen Bereiche stillgelegt. Wird nur der Pixel-Shader benötigt, wird der Vertex-Shader stillgelegt und umgekehrt.
Benchmarks
All diese Optimierungen sollen natürlich Auswirkung auf die Performance im Vergleich zu anderen Chips bzw. GPUs haben. NVIDIA stellt dazu einige Benchmarks zur Verfügung, die wir an dieser Stelle einfach kommentarlos so weitergeben wollen, da wir bislang noch keine eigenen Messungen vorweisen können.
Weiterführende Links