-
ALLGEMEINER STAND DER TECHNIK
-
Die vorliegende Erfindung betrifft allgemein Grafikprozessoren und insbesondere eine Parallel-Array-Architektur für einen Grafikprozessor.
-
Parallelverarbeitungstechniken erhöhen den Durchsatz eines Prozessor- oder Mehrprozessorsystems, wenn mehrere unabhängige Berechnungen ausgeführt werden müssen. Eine Berechnung kann in Aufgaben unterteilt werden, die durch Programme definiert werden, wobei jede Aufgabe als eine separate Befehlsfolge (tread) ausgeführt wird. (Im Sinne des vorliegenden Textes meint eine ”Befehlsfolge” allgemein eine Instanz der Ausführung eines bestimmten Programms, das bestimmte Eingangsdaten verwendet, und ein ”Programm” meint eine Sequenz von ausführbaren Befehlen, die Ergebnisdaten aus Eingangsdaten erzeugt.) Parallele Befehlsfolgen (parallel threads) werden gleichzeitig unter Verwendung verschiedener Verarbeitungsmaschinen im Inneren des Prozessors ausgeführt.
-
Zahlreiche existierende Prozessorarchitekturen unterstützen eine Parallelverarbeitung. Die frühesten solcher Architekturen verwendeten mehrere diskrete Prozessoren, die miteinander vernetzt waren. In der jüngeren Vergangenheit hat man mehrere Verarbeitungskerne auf einem einzelnen Chip hergestellt. Diese Kerne werden auf unterschiedliche Weise gesteuert. In einigen Fällen, die als Multiple-Instruction, Multiple-Data(MIMD)-Maschinen bekannt sind, holt und versendet jeder Kern unabhängig seine eigenen Befehle an seine eigene Verarbeitungsmaschine (oder seine eigenen Verarbeitungsmaschinen). In anderen Fällen, die als Single-Instruction, Multiple-Data(SIMD)-Maschinen bekannt sind, hat ein Kern eine Einzelbefehlseinheit, die den gleichen Befehl parallel an mehrere Verarbeitungsmaschinen sendet, die den Befehl anhand verschiedener Eingabeoperanden ausführen. SIMD-Maschinen haben allgemein Vorteile in Bezug auf die Chipfläche (da nur eine einzige Befehlseinheit benötigt wird) und darum auch in Bezug auf die Kosten. Der Nachteil ist, dass Parallelität nur in dem Umfang zur Verfügung steht, wie mehrere Instanzen desselben Befehls gleichzeitig ausgeführt werden können.
-
Herkömmliche Grafikprozessoren verwenden sehr breite SIMD-Architekturen zum Erreichen eines hohen Durchsatzes in Bildwiedergabe (Bildrendering) Anwendungen. Solche Anwendungen beinhalten allgemein das Ausführen derselben Programme (Vertexshader oder Pixelshader) an großen Anzahlen von Objekten (Eckpunkten oder Pixeln). Da jedes Objekt unabhängig von allen anderen aber unter Verwendung derselben Sequenz von Operationen verarbeitet wird, ermöglicht eine SIMD-Architektur eine beträchtliche Leistungssteigerung zu vernünftigen Kosten. In der Regel enthält eine GPU einen einzelnen SIMD-Kern, der Vertexshader-Programme ausführt, und einen weiteren SIMD-Kern von vergleichbarer Größe, der Pixelshader-Programme ausführt. In High-End GPUs sind mitunter mehrere Sätze von SIMD-Kernen vorhanden, um einen noch höheren Parallelitätsgrad zu unterstützen.
-
Diese Designs haben verschiedene Nachteile. Erstens werden die separaten Verarbeitungskerne für Vertex- und Shader-Programme separat entworfen und getestet, was oft mindestens teilweise zu Doppelungen bei der Arbeit führt.
-
Zweitens variiert die Aufteilung der Grafikverarbeitungslast zwischen Vertex-Operationen und Pixel-Operationen stark von einer Anwendung zur nächsten. Wie dem Fachmann bekannt ist, können einem Bild Details hinzugefügt werden, indem man viele kleine geometrische Grundformen verwendet, was die Arbeitslast des Vertexshader-Kerns erhöht, und/oder indem man komplexe Texturmapping- und Pixelshading-Operationen verwendet, was die Arbeitslast des Pixelshader-Kerns erhöht. In den meisten Fällen sind die Arbeitslasten nicht perfekt ausbalanciert, und der eine oder der andere Kern ist unterbeansprucht. Zum Beispiel kann in einer Pixel-intensiven Anwendung der Pixelshader-Kern mit maximalem Durchsatz arbeiten, während der Vertex-Kern leer läuft und darauf wartet, dass bereits verarbeitete Eckpunkte sich in die Pixelshader-Stufe der Pipeline bewegen. Umgekehrt kann in einer Vertex-intensiven Anwendung der Vertexshader-Kern mit maximalem Durchsatz arbeiten, während der Pixel-Kern leer läuft und darauf wartet, dass neue Eckpunkte zugeführt werden. In jedem Fall wird ein Teil der verfügbaren Verarbeitungszyklen praktisch vergeudet.
-
Es wäre darum wünschenswert, einen Grafikprozessor bereitzustellen, der sich an verändernde Arbeitslasten in verschiedenen Schattierern (Shadern) anpassen kann, während ein hoher Parallelitätsgrad beibehalten wird.
-
Der Artikel mit dem Titel „Hybrid Sort-First and Sort-Last Parallel Rendering with a Cluster of PCs” von R. Samanta et al. (2000, ACM SIGGRAPH, ISBN: 1-58113-257-3, S. 97–108) offenbart einen hybriden Parallel-Rendering-Algorithmus, der Merkmale von „Sort-First”- und „Sort-Last”-Strategien für eine PC-Cluster-Architektur kombiniert.
-
Der Artikel mit dem Titel „A Sorting Classification of Parallel Rendering” von S. Molnar et al. (1994, ACM SIGGRAPH ASIA, IEEE Computer Graphics and Applications, Vol. 14(4), S. 23–32) offenbart ein Klassifizierungsschema, welches dazu vorgesehen ist, ein strukturiertes Framework für Parallel-Rendering bereitzustellen. Das Framework basiert darauf, wo die Sortierung von Objektkoordinaten in Bildschirmkoordinaten auftritt, wenn Geometrieverarbeitung und Rasterisierung parallel durchgeführt werden.
-
US 5,794,016 81 offenbart eine skalierbare Parallel-Prozessor-Verarbeitungsarchitektur, die einen oder mehrere Rendering-Prozessoren und einen Grafikspeicher aufweist, der in Blöcke unterteilt ist. Nicht zusammenhängende Gruppen von Blöcken werden dann unterschiedlichen Prozessoren zugewiesen. Die Parallel-Prozessor-Verarbeitungsarchitektur ist durch die Anzahl verwendeter Rendering-Prozessoren skalierbar und ist in Bezug auf die Zuweisung der Gruppen der Blöcke zu bestimmten Rendering-Prozessoren konfigurierbar.
-
KURZDARSTELLUNG DER ERFINDUNG
-
Ausführungsformen der vorliegenden Erfindung stellen Grafikprozessoren bereit, die ein skalierbares Array mit nebenläufigen Kernen zum Ausführen von Vertexshader-Programmen, Geometrieshader-Programmen und/oder Pixelshader-Programmen in jeder Kombination während Rendering-Operationen verwenden. Das Kern-Array enthält eine Anzahl nebenläufiger Verarbeitungskerne, die in einem oder mehreren Clustern angeordnet sind, wobei Kerne in demselben Cluster durch eine gemeinsam genutzte Kern-Schnittstelle gesteuert werden.
-
In Ausführungsformen, wo ein Pixelshader-Programm ausgeführt werden soll, wird das Cluster oder der Kern, in dem das Programm ausgeführt werden soll, vorteilhafterweise auf der Grundlage der Position des Pixels innerhalb des Bildbereichs ausgewählt. In einer Ausführungsform ist der Schirm ”gekachelt”, wobei jede Kachel dem einen oder anderen der Verarbeitungscluster (oder einem bestimmten Kern innerhalb eines Verarbeitungsclusters) zugeordnet ist. Die Kacheln, die einem bestimmten Verarbeitungscluster oder -kern zugeordnet sind, sind vorteilhafterweise über den Schirm hinweg gestreut, um einen ungefähren Arbeitslastausgleich zu erreichen.
-
In einigen Ausführungsformen enthält der Verarbeitungskern oder das Verarbeitungscluster eine Rasteroperationseinheit, welche die neu erzeugten Pixeldaten mit existierenden Daten in einem Framepuffer integriert. Der Framepuffer kann in Übereinstimmung mit der Anzahl der Verarbeitungscluster partitioniert werden, wobei jedes Cluster alle seine Daten in eine einzige Partition schreibt. In anderen Ausführungsformen braucht die Anzahl der Partitionen des Framepuffers nicht mit der Anzahl der verwendeten Verarbeitungscluster überein zu stimmen. Eine Kreuzschiene oder ein ähnlicher Schaltungsaufbau kann eine konfigurierbare Kopplung zwischen den Verarbeitungsclustern und den Framepufferpartitionen bereitstellen, so dass jedes Verarbeitungscluster mit jeder Framepufferpartition gekoppelt werden kann. In einigen Ausführungsformen wird die Kreuzschiene weggelassen, wodurch die Speicherplatzanordnung verbessert wird.
-
Die folgende detaillierte Beschreibung ermöglicht zusammen mit den begleitenden Zeichnungen ein besseres Verständnis der Art und der Vorteile der vorliegenden Erfindung.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
1 ist ein Blockschaubild eines Computersystems gemäß einer Ausführungsform der vorliegenden Erfindung.
-
2 ist ein Blockschaubild einer Rendering-Pipeline, die in einem Grafikprozessor gemäß einer Ausführungsform der vorliegenden Erfindung implementiert werden kann.
-
3 ist ein Blockschaubild eines Arrays mit nebenläufigen (multithreaded) Kernen für einen Grafikprozessor gemäß einer Ausführungsform der vorliegenden Erfindung.
-
4 veranschaulicht eine mögliche Kachelung eines Bildbereichs in eine Anzahl von Kacheln gemäß einer Ausführungsform der vorliegenden Erfindung.
-
5 ist ein vereinfachtes Blockschaubild, das eine Kopplung zwischen Verarbeitungsclustern und einem Framepuffer gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht.
-
6 ist ein vereinfachtes Blockschaubild, das eine Kopplung zwischen Verarbeitungsclustern und einem Framepuffer gemäß einer weiteren Ausführungsform der vorliegenden Erfindung veranschaulicht.
-
DETAILLIERTE BESCHREIBUNG DER ERFINDUNG
-
Systemüberblick
-
1 ist ein Blockschaubild eines Computersystems 100 gemäß einer Ausführungsform der vorliegenden Erfindung. Das Computersystem 100 enthält eine zentrale Verarbeitungseinheit (CPU) 102 und einen Systemspeicher 104, der über einen Buspfad kommuniziert, der eine Speicherbrücke 105 enthält. Die Speicherbrücke 105 ist über einen Buspfad 106 mit einer E/A(Eingabe/Ausgabe)-Brücke 107 verbunden. Die E/A-Brücke 107 empfängt Benutzereingaben von einer oder mehreren Benutzereingabegeräten 108 (zum Beispiel Tastatur, Maus) und leitet die Eingabe über den Bus 106 und die Speicherbrücke 105 an die CPU 102 weiter. Eine Sichtausgabe erfolgt auf einem Pixel-basierten Anzeigegerät 110 (zum Beispiel einem herkömmlichen Kathodenstrahlröhren- oder einem LCD-Monitor), das unter der Steuerung eines Grafikteilsystems 112 arbeitet, welches über einen Bus 113 mit der Speicherbrücke 105 gekoppelt ist. Eine Systemfestplatte 114 ist ebenfalls mit der E/A-Brücke 107 verbunden. Ein Schalter 116 stellt Verbindungen zwischen der E/A-Brücke 107 und anderen Komponenten her, wie zum Beispiel einem Netzwerkadapter 118 und verschiedenen Einsteckkarten 120, 121. Andere Komponenten (die nicht ausdrücklich gezeigt sind), einschließlich USB- oder sonstige Port-Verbindungen, CD-Laufwerke, DVD-Laufwerke und dergleichen, können ebenfalls mit der E/A-Brücke 107 verbunden werden. Bus-Verbindungen zwischen den verschiedenen Komponenten können unter Verwendung von Bus-Protokollen implementiert werden, wie zum Beispiel PCI (Peripheral Component Interconnect), PCI Express (PCI-E), AGP (Accelerated Graphics Port), HyperTransport oder anderen Bus-Protokoll(en), und Verbindungen zwischen verschiedenen Geräten können unterschiedliche Protokolle verwenden, wie dem Fachmann bekannt ist.
-
Das Grafikverarbeitungsteilsystem 112 enthält eine Grafikverarbeitungseinheit (GPU) 122 und einen Grafikspeicher 124, der zum Beispiel unter Verwendung eines oder mehrerer integrierter Schaltungs-Bauelemente implementiert werden kann, wie zum Beispiel programmierbare Prozessoren, anwendungsspezifische integrierte Schaltkreise (ASICs) und Speicherelemente. Die GPU 122 kann dafür konfiguriert sein, verschiedene Aufgaben auszuführen, die damit zu tun haben, Pixeldaten aus Grafikdaten zu erzeugen, die durch die CPU 102 und/oder den Systemspeicher 104 über die Speicherbrücke 105 und den Bus 113 zugeführt werden, wobei sie mit dem Grafikspeicher 124 interagiert, um Pixeldaten zu speichern und zu aktualisieren und dergleichen. Zum Beispiel kann die GPU 122 Pixeldaten aus 2-D- oder 3-D-Szenendaten erzeugen, die durch verschiedene Programme bereitgestellt werden, die in der CPU 102 ausgeführt werden. Die GPU 122 kann auch Pixeldaten, die über die Speicherbrücke 105 empfangen werden, in dem Grafikspeicher 124 mit oder ohne Weiterverarbeitung speichern. Die GPU 122 enthält außerdem ein Scan-out-Modul, das dafür konfiguriert ist, Pixeldaten aus dem Grafikspeicher 124 zu dem Anzeigegerät 110 zu senden.
-
Die CPU 102 arbeitet als der Master-Prozessor des Systems 100, der die Operationen anderer Systemkomponenten steuert und koordiniert. Insbesondere gibt die CPU 102 Befehle aus, die den Betrieb der GPU 122 steuern. In einigen Ausführungsformen schreibt die CPU 102 einen Strom aus Befehlen für die GPU 122 in einen Befehlspuffer, der sich im Systemspeicher 104, im Grafikspeicher 124 oder einem sonstigen Speicherort befinden kann, auf den sowohl die CPU 102 als auch die GPU 122 zugreifen können. Die GPU 122 liest den Befehlsstrom aus dem Befehlspuffer und führt Befehle asynchron mit dem Betrieb der CPU 102 aus. Die Befehle können herkömmliche Rendering-Befehle zum Erzeugen von Bildern sowie Allzweckberechnungsbefehle enthalten, die es Anwendungen ermöglichen, welche in der CPU 102 ausgeführt werden, die Berechnungsleistung der GPU 122 wirksam für eine Datenverarbeitung zu nutzen, die nichts mit der Bilderzeugung zu tun haben.
-
Es versteht sich, dass das hier gezeigte System veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Die Bus-Topologie, einschließlich der Anzahl und Anordnung von Brücken, kann nach Wunsch modifiziert werden. Zum Beispiel ist in einigen Ausführungsformen der Systemspeicher 104 mit der CPU 102 direkt anstatt über eine Brücke verbunden, und andere Geräten kommunizieren mit dem Systemspeicher 104 über die Speicherbrücke 105 und die CPU 102. In anderen alternativen Topologien ist das Grafikteilsystem 112 mit der E/A-Brücke 107 anstatt mit der Speicherbrücke 105 verbunden. In wieder anderen Ausführungsformen könnten die E/A-Brücke 107 und die Speicherbrücke 105 in einem einzelnen Chip integriert sein. Die im vorliegenden Text gezeigten konkreten Komponenten sind optional. Zum Beispiel könnten eine beliebige Anzahl von Einsteckkarten oder Peripheriegeräten unterstützt werden. In einigen Ausführungsformen wird der Schalter 116 weggelassen, und der Netzwerkadapter 118 und die Einsteckkarten 120, 121 sind direkt mit der E/A-Brücke 107 verbunden.
-
Die Verbindung der GPU 122 mit dem Rest des Systems 100 kann ebenfalls variiert werden. In einigen Ausführungsformen ist das Grafiksystem 112 als eine Einsteckkarte implementiert, die in einen Erweiterungsschlitz des Systems 100 eingesteckt werden kann. In anderen Ausführungsformen ist eine GPU auf einem einzelnen Chip mit einer Busbrücke, wie zum Beispiel einer Speicherbrücke 105 oder E/A-Brücke 107, integriert.
-
Eine GPU kann mit einer beliebigen Menge an lokalem Grafikspeicher ausgestattet sein, einschließlich keinem lokalen Speicher, und kann lokalen Speicher und Systemspeicher in einer beliebigen Kombination verwenden. Zum Beispiel ist in einer Unified Memory Architecture(UMA)-Ausführungsform kein dedizierter Grafikspeicherbaustein vorhanden, und die GPU verwendet ausschließlich oder fast ausschließlich Systemspeicher. In UMA-Ausführungsformen kann die GPU in einen Busbrücken-Chip integriert sein oder kann als ein diskreter Chip mit einem Hochgeschwindigkeitsbus (zum Beispiel PCI-E) versehen sein, der die GPU mit dem Brücken-Chip und Systemspeicher verbindet.
-
Es versteht sich des Weiteren, dass eine beliebige Anzahl von GPUs in ein System eingebunden sein kann, indem zum Beispiel mehrere GPUs auf einer einzelnen Grafikkarte angeordnet werden oder indem mehrere Grafikkarten mit dem Bus 113 verbunden werden. Mehrere GPUs können parallel betrieben werden, um Bilder für dasselbe Anzeigegerät oder für verschiedene Anzeigegeräte zu erzeugen.
-
Außerdem können GPUs, die Aspekte der vorliegenden Erfindung verkörpern, in eine Vielzahl verschiedener Geräte eingebunden werden, einschließlich Allzweck-Computersysteme, Videospielekonsolen und andere spezielle Computersysteme, DVD-Player, handgehaltene Geräte wie zum Beispiel Mobiltelefone oder persönliche digitale Assistenten und so weiter.
-
Rendering-Pipeline-Überblick
-
2 ist ein Blockschaubild einer Rendering-Pipeline 200, die in der GPU 122 von 1 gemäß einer Ausführungsform der vorliegenden Erfindung implementiert werden kann. In dieser Ausführungsform ist die Rendering-Pipeline 200 unter Verwendung einer Architektur implementiert, in der jegliche relevante Vertexshader-Programme, Geometrieshader-Programme und Pixelshader-Programme unter Verwendung derselben Parallelverarbeitungshardware ausgeführt werden, die im vorliegenden Text als ein ”Array mit nebenläufigen (multithreaded) Kernen” 202 bezeichnet wird. Das Array mit nebenläufigen Kernen 202 wird weiter unten beschrieben.
-
Zusätzlich zu dem Array mit nebenläufigen Kernen 202 enthält die Rendering-Pipeline 200 ein Front-End 204 und einen Datenassemblierer 206, ein Einrichtmodul 208, einen Rasterisierer (rasterizer) 210, ein Farbassembliermodul 212 und ein Rasteroperationsmodul (ROP) 214, von denen jedes unter Verwendung herkömmlicher Integrierter-Schaltkreis-Technologien oder anderer Technologien implementiert werden kann.
-
Das Front-End 204 empfängt Statusinformationen (STATE), Rendering-Befehle (CMD) und Geometrie-Daten (GDATA) zum Beispiel von der CPU 102 von 1. In einigen Ausführungsformen gibt die CPU 102 die Geometrie-Daten nicht direkt aus, sondern gibt Verweise auf Orte im Systemspeicher 104 aus, an denen Geometrie-Daten gespeichert sind. Der Datenassemblierer 206 ruft die Daten aus dem Systemspeicher 104 ab. Die Statusinformationen, Rendering-Befehle und Geometrie-Daten können von einer allgemein herkömmlichen Art sein und können dafür verwendet werden, um das oder die gewünschten gerenderten Bilder zu definieren, einschließlich Geometrie, Beleuchtung, Abschattung, Textur, Bewegung und/oder Kameraparameter für eine Szene.
-
In einer Ausführungsform enthalten die Geometrie-Daten eine Anzahl von Objektdefinitionen für Objekte (zum Beispiel einen Tisch, einen Stuhl, eine Person oder ein Tier), die in der Szene vorkommen können. Objekte werden vorteilhafterweise als Gruppen geometrischer Grundformen (zum Beispiel Punkte, Linien, Dreiecke und/oder sonstige Polygone) modelliert, die anhand ihrer Eckpunkte definiert werden. Für jeden Eckpunkt (vertex) wird eine Position in einem Objektkoordinatensystem spezifiziert, welche Position die Position des Eckpunktes relativ zu dem modellierten Objekt darstellt. Zusätzlich zu einer Position können jedem Eckpunkt noch verschiedene weitere Attribute zugeordnet sein. Generell kann zu den Attributen eines Eckpunktes jede beliebige Eigenschaft gehören, die anhand eines einzelnen Eckpunktes spezifiziert wird. Zum Beispiel gehören in einigen Ausführungsformen zu den Eckpunkt-Attributen skalare oder Vektor-Attribute, die zum Bestimmen von Qualitäten verwendet werden, wie zum Beispiel der Farbe, der Textur, der Transparenz, der Beleuchtung, der Abschattung und der Animation des Eckpunktes und seiner zugehörigen geometrischen Grundformen.
-
Geometrische Grundformen (primitives), wie oben bereits angesprochen, werden allgemein anhand ihrer Eckpunkte (vertices) definiert, und ein einzelner Eckpunkt kann in einer beliebigen Anzahl von geometrischen Grundformen enthalten sein. In einigen Ausführungsformen ist jedem Eckpunkt ein Index zugewiesen (bei dem es sich im jeden beliebigen eindeutigen Identifikator handeln kann), und eine geometrische Grundform wird definiert, indem eine geordnete Liste von Indizes für die Eckpunkte bereitgestellt wird, die diese geometrische Grundform bilden. Andere Techniken zum Definieren geometrischer Grundformen (einschließlich herkömmlicher Techniken wie zum Beispiel Dreiecksstreifen oder Fächer) können ebenfalls verwendet werden.
-
Die Statusinformationen und Rendering-Befehle definieren Verarbeitungsparameter und -aktionen für verschiedene Stufen der Rendering-Pipeline 200. Das Front-End 204 lenkt die Statusinformationen und Rendering-Befehle über einen (nicht ausdrücklich gezeigten) Steuerungspfad zu anderen Komponenten der Rendering-Pipeline 200. Wie dem Fachmann bekannt ist, können diese Komponenten auf empfangene Statusinformationen mit dem Speichern oder Aktualisieren von Werten in verschiedenen Steuerregistern reagieren, auf die während der Verarbeitung zugegriffen wird, und können auf Rendering-Befehle mit der Verarbeitung von Daten reagieren, die in der Pipeline empfangen werden.
-
Das Front-End 204 lenkt die Geometrie-Daten zu dem Datenassemblierer 206. Der Datenassemblierer 206 formatiert die Geometrie-Daten und bereitet sie für die Übermittlung in einem Geometriemodul 218 in dem Array mit nebenläufigen Kernen 202 vor.
-
Das Geometriemodul 218 weist (nicht ausdrücklich gezeigte) programmierbare Verarbeitungsmaschinen in dem Array mit nebenläufigen Kernen 202 an, Vertex- und/oder Geometrieshader-Programme an den Eckpunkt-Daten auszuführen, wobei die Programme in Reaktion auf die Statusinformationen ausgewählt werden, die durch das Front-End 204 übermittelt werden. Die Vertex- und/oder Geometrieshader-Programme können durch die Rendering-Anwendung spezifiziert werden, wie dem Fachmann bekannt ist, und es können verschiedene Shader-Programme auf verschiedene Eckpunkte und/oder geometrische Grundformen angewendet werden. Das zu verwendende Shader-Programm bzw. die zu verwendenden Shader-Programme können im Systemspeicher oder im Grafikspeicher gespeichert werden und können gegenüber dem Array mit nebenläufigen Kernen 202 über geeignete Rendering-Befehle und Statusinformationen identifiziert werden, wie dem Fachmann bekannt ist. In einigen Ausführungsformen können Vertexshader- und/oder Geometrieshader-Programme in mehreren Durchgängen ausgeführt werden, wobei während jedes Durchgangs verschiedene Verarbeitungsoperationen ausgeführt werden. Jedes Vertex- und/oder Geometrieshader-Programm bestimmt die Anzahl der Durchgänge und die Operationen, die während jedes Durchgangs auszuführen sind. Vertex- und/oder Geometrieshader-Programme können Algorithmen unter Verwendung eines weiten Bereichs mathematischer und logischer Operationen an Eckpunkten und anderen Daten implementieren, und die Programme können bedingte oder abzweigende Ausführungspfade und direkte und indirekte Speicherzugriffe enthalten.
-
Vertexshader-Programme und Geometrieshader-Programme können zum Implementieren einer Vielzahl verschiedener visueller Effekte verwendet werden, einschließlich Beleuchtungs- und Abschattungseffekte. Zum Beispiel wandelt in einer einfachen Ausführungsform ein Vertex-Programm einen Eckpunkt aus seinem 3D-Objektkoordinatensystem in ein 3D-Clipraum- oder Weltraumkoordinatensystem um. Diese Transformation definiert die relativen Positionen der verschiedenen Objekte in der Szene. In einer Ausführungsform kann die Umwandlung programmiert werden, indem in die Rendering-Befehle und/oder -Daten, die jedes Objekt definieren, eine Umwandlungsmatrix zum Umwandeln aus dem Objektkoordinatensystem dieses Objekts in Clipraumkoordinaten aufgenommen wird. Das Vertexshader-Programm wendet diese Umwandlungsmatrix auf jeden Eckpunkt der geometrischen Grundformen an, aus denen ein Objekt besteht. Es können komplexere Vertexshader-Programme verwendet werden, um eine Vielzahl verschiedener visueller Effekte zu implementieren, einschließlich Beleuchtung und Abschattung, prozeduraler Geometrie und Animationsoperationen. Zahlreiche Beispiele solcher Eckpunkt-für-Eckpunkt-Operationen sind dem Fachmann bekannt, und auf eine detaillierte Beschreibung wird verzichtet, da sie für das Verständnis der vorliegenden Erfindung nicht maßgeblich ist.
-
Geometrieshader-Programme (geometry shader programs) unterscheiden sich von Vertexshader-Programmen dadurch, dass Geometrieshader-Programme an geometrischen Grundformen (Gruppen von Eckpunkten) anstatt an einzelnen Eckpunkten operieren. Somit kann in einigen Fällen ein Geometrie-Programm neue Eckpunkte erzeugen und/oder Eckpunkten oder geometrische Grundformen aus dem Satz der verarbeiteten Objekte entfernen. In einigen Ausführungsformen können Durchgänge durch ein Vertexshader-Programm und ein Geometrieshader-Programm abgewechselt werden, um die Geometrie-Daten zu verarbeiten.
-
In einigen Ausführungsformen werden Vertexshader-Programme und Geometrieshader-Programme unter Verwendung derselben programmierbaren Verarbeitungsmaschinen in dem Array mit nebenläufigen Kernen 202 ausgeführt. Somit kann zu bestimmten Zeiten eine bestimmte Verarbeitungsmaschine als ein Vertexshader arbeiten, der Vertex-Programmbefehle empfängt und ausführt, und zu anderen Zeiten kann dieselbe Verarbeitungsmaschine als ein Geometrieshader arbeiten, der Geometrie-Programmbefehle empfängt und ausführt. Die Verarbeitungsmaschinen können nebenläufig sein, und verschiedene Befehlsfolgen, die verschiedene Arten von Shader-Programmen ausführen, können gleichzeitig in dem Array mit nebenläufigen Kernen 202 in Verarbeitung sein.
-
Nachdem die Vertex- und/oder Geometrieshader-Programme ausgeführt wurden, leitet das Geometriemodul 218 die verarbeiteten Geometrie-Daten (GDATA') zu dem Einrichtmodul 208. Das Einrichtmodul 208, das von allgemein herkömmlichem Design sein kann, erzeugt Randgleichungen aus den Clipraum- oder Schirmraumkoordinaten jeder geometrischen Grundform. Die Randgleichungen können vorteilhafterweise verwendet werden, um zu bestimmen, ob sich ein Punkt in dem Schirmraum innerhalb oder außerhalb der geometrischen Grundform befindet.
-
Das Einrichtmodul 208 übermittelt jede geometrische Grundform (PRIM) an den Rasterisierer 210. Der Rasterisierer 210, der von allgemein herkömmlichem Design sein kann, bestimmt, welche Pixel (sofern zutreffend) durch die geometrische Grundform abgedeckt sind, zum Beispiel unter Verwendung herkömmlicher Abtastumwandlungsalgorithmen. Im Sinne des vorliegenden Textes meint ein ”Pixel” (oder ”Fragment”) allgemein eine Region im 2-D-Schirmraum, für die ein einzelner Farbwert zu bestimmen ist. Anzahl und Anordnung der Pixel können ein konfigurierbarer Parameter der Rendering-Pipeline 200 sein und könnten gegebenenfalls mit der Schirmauflösung eines bestimmten Anzeigegerätes korreliert sein. Wie dem Fachmann bekannt ist, kann die Pixelfarbe an mehreren Positionen innerhalb des Pixels abgetastet werden (zum Beispiel unter Verwendung herkömmlicher Supersampling- oder Multisampling-Techniken), und in einigen Ausführungsformen wird das Supersampling oder Multisampling innerhalb des Pixelshaders gehandhabt.
-
Nach dem Bestimmen, welche Pixel durch eine geometrische Grundform abgedeckt sind, übermittelt der Rasterisierer 210 die geometrische Grundform (PRIM) zusammen mit einer Liste der Schirmkoordinaten (X, Y) der Pixel, die durch die geometrische Grundform abgedeckt sind, zu einem Farbassembliermodul 212. Das Farbassembliermodul 212 verknüpft die geometrischen Grundformen und Abdeckungsinformationen, die von dem Rasterisierer 210 kommend empfangen wurden, mit Attributen (zum Beispiel Farbkomponenten, Texturkoordinaten, Oberflächennormalen) der Eckpunkte der geometrischen Grundform und erzeugt Ebenengleichungen (oder andere geeignete Gleichungen), die einige oder alle der Attribute als eine Funktion der Position im Schirmkoordinatenraum definiert.
-
Diese Attribut-Gleichungen können vorteilhafterweise in einem Pixelshader-Programm verwendet werden, um einen Wert für das Attribut an einer beliebigen Stelle innerhalb der geometrischen Grundform zu interpolieren. Es können herkömmliche Techniken zum Erzeugen der Gleichungen verwendet werden. Zum Beispiel erzeugt das Farbassembliermodul 212 in einer Ausführungsform Koeffizienten A, B, und C für eine Ebenengleichung der Form U = Ax + By + C für jedes Attribut U.
-
Das Farbassembliermodul 212 übermittelt die Attribut-Gleichungen (EQS, die zum Beispiel die Ebenengleichungskoeffizienten A, B und C enthalten können) für jede geometrische Grundform, die mindestens ein Pixel abdeckt, und eine Liste mit Schirmkoordinaten (X, Y) der abgedeckten Pixel an ein Pixelmodul 224 in dem Array mit nebenläufigen Kernen 202. Das Pixelmodul 224 weist (nicht ausdrücklich gezeigte) programmierbare Verarbeitungsmaschinen in dem Array mit nebenläufigen Kernen 202 an, ein oder mehrere Pixelshader-Programme an jedem Pixel auszuführen, das durch die geometrische Grundform abgedeckt wird, wobei das Programm oder die Programme in Reaktion auf die Statusinformationen ausgewählt werden, die durch das Front-End 204 übermittelt werden. Wie im Fall von Vertexshader-Programmen und Geometrieshader-Programmen können Rendering-Anwendungen das Pixelshader-Programm spezifizieren, das für einen bestimmten Satz Pixel zu verwenden ist. Pixelshader-Programme können verwendet werden, um eine Vielzahl verschiedener visueller Effekte zu implementieren, einschließlich Beleuchtungs- und Abschattungseffekte, Reflexionen, Texturmischung, prozedurale Texturerzeugung und so weiter. Zahlreiche Beispiele solcher Pixel-für-Pixel-Operationen sind dem Fachmann bekannt, und auf eine detaillierte Beschreibung wird verzichtet, da sie für das Verständnis der vorliegenden Erfindung nicht maßgeblich ist. Pixelshader-Programme können Algorithmen unter Verwendung eines weiten Bereichs mathematischer und logischer Operationen an Pixeln und anderen Daten implementieren, und die Programme können bedingte oder abzweigende Ausführungspfade und direkte und indirekte Speicherzugriffe enthalten.
-
Pixelshader-Programme werden vorteilhafterweise in dem Array mit nebenläufigen Kernen 202 unter Verwendung derselben programmierbaren Verarbeitungsmaschinen ausgeführt, die auch die Vertex- und/oder Geometrieshader-Programme ausführen. Somit kann zu bestimmten Zeiten eine bestimmte Verarbeitungsmaschine als ein Vertexshader arbeiten, der Vertex-Programmbefehle empfängt und ausführt, und zu anderen Zeiten kann dieselbe Verarbeitungsmaschine als ein Geometrirshader arbeiten, der Geometrie-Programmbefehle empfängt und ausführt, und zu wieder anderen Zeiten kann dieselbe Verarbeitungsmaschine als ein Pixelshader arbeiten, der Pixelshader-Programmbefehle empfängt und ausführt. Es versteht sich, dass das Array mit nebenläufigen Kernen einen natürlichen Lastausgleich zwischen Pixel- und Eckpunkt-Verarbeitung ermöglicht. Wenn die Anwendung Geometrie-intensiv ist (wenn zum Beispiel viele kleine geometrische Grundformen verwendet werden), so wird allgemein ein größerer Teil der Verarbeitungszyklen in dem Array mit nebenläufigen Kernen 202 auf Vertex- und/oder Geometrieshader verwendet, und wenn die Anwendung Pixel-intensiv ist (wenn zum Beispiel weniger und größere geometrische Grundformen unter Verwendung komplexer Pixelshader-Programme mit mehreren Texturen und dergleichen abgeschattet werden), so wird allgemein ein größerer Anteil der Verarbeitungszyklen auf Pixelshader verwendet.
-
Nachdem die Verarbeitung für ein Pixel oder eine Gruppe von Pixeln vollendet ist, übermittelt das Pixelmodul 224 die verarbeiteten Pixel (PDATA) an den ROP 214. Der ROP 214, der von einem allgemein herkömmlichen Design sein kann, integriert die Pixelwerte, die von dem Pixelmodul 224 kommend empfangen wurden, mit Pixeln des Bildes, das in dem Framepuffer 226 aufgebaut wird, der sich zum Beispiel in dem Grafikspeicher 124 befinden kann. In einigen Ausführungsformen kann der ROP 214 Pixel maskieren oder neue Pixel mit Pixeln vermischen, die zuvor in das gerenderte Bild geschrieben wurden. Tiefenpuffer, Alphapuffer und Schablonenpuffer können ebenfalls verwendet werden, um den Anteil (sofern zutreffend) jedes ankommenden Pixels an dem gerenderten Bild zu bestimmen. Pixeldaten PDATA', die der entsprechenden Kombination jedes ankommenden Pixelwertes und jedes zuvor gespeicherten Pixelwertes entsprechen, werden in den Framepuffer 226 zurückgeschrieben. Nachdem das Bild vollständig ist, kann der Framepuffer 226 zu einem Anzeigegerät ausgescannt werden und/oder einer Weiterverarbeitung unterzogen werden.
-
Es versteht sich, dass die im vorliegenden Text beschriebene Rendering-Pipeline veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Die Pipeline kann andere Einheiten als die gezeigten enthalten, und die Sequenz der Verarbeitungsereignisse kann von der im vorliegenden Text beschriebenen abweichen. Zum Beispiel kann in einigen Ausführungsformen eine Rasterisierung in Stufen mit einem ”groben” Rasterisierer ausgeführt werden, der den gesamten Schirm in Blöcken (zum Beispiel 16 × 16 Pixel) verarbeitet, um zu bestimmen, welche Blöcke (sofern zutreffend) das Dreieck abdeckt (oder teilweise abdeckt), gefolgt von einem ”feinen” Rasterisierer, der die einzelnen Pixel innerhalb eines Blocks verarbeitet, zu dem festgestellt wird, dass er mindestens teilweise abgedeckt ist. In einer solchen Ausführungsform ist der Feinrasterisierer in dem Pixelmodul 224 enthalten. In einer weiteren Ausführungsform können einige Operationen, die herkömmlicherweise durch einen ROP ausgeführt werden, innerhalb des Pixelmoduls 224 ausgeführt werden, bevor die Pixeldaten zu dem ROP 214 weitergeleitet werden.
-
Des Weiteren können mehrere Instanzen einiger oder aller im vorliegenden Text beschriebenen Module parallel betrieben werden. In einer solchen Ausführungsform enthält das Array mit nebenläufigen Kernen 202 zwei oder mehr Geometriemodule 218 und eine gleiche Anzahl von Pixelmodulen 224, die parallel arbeiten. Jedes Geometriemodul und Pixelmodul steuert gemeinsam eine andere Teilmenge der Verarbeitungsmaschinen in dem Array mit nebenläufigen Kernen 202.
-
Konfiguration des Arrays mit nebenläufigen Kernen
-
In einer Ausführungsform besitzt das Array mit nebenläufigen Kernen 202 eine hoch-parallele Architektur, die eine gleichzeitige Ausführungsform einer großen Anzahl von Instanzen der Vertex-, Geometrie- und/oder Pixelshader-Programme in verschiedenen Kombinationen unterstützt. 3 ist ein Blockschaubild des Arrays mit nebenläufigen Kernen 202 gemäß einer Ausführungsform der vorliegenden Erfindung.
-
In dieser Ausführungsform enthält das Array mit nebenläufigen Kernen 202 eine Anzahl (N) von Verarbeitungsclustern 302. Im vorliegenden Text sind erforderlichenfalls mehrere Instanzen gleicher Objekte mit Bezugszahlen, die das Objekt bezeichnen, und in Klammern gesetzten Zahlen, die die Instanz bezeichnen, kenntlich gemacht. Es kann eine beliebige Anzahl N (zum Beispiel 1, 4, 8 oder eine beliebige andere Anzahl) von Verarbeitungsclustern vorhanden sein. In 3 ist ein einzelnes Verarbeitungscluster 302 im Detail gezeigt. Es versteht sich, dass andere Verarbeitungscluster 302 von ähnlichem oder identischem Design sein können.
-
Jedes Verarbeitungscluster 302 enthält eine Geometrie-Steuereinheit 304 (die das Geometriemodul 218 von 2 implementiert) und eine Pixel-Steuereinheit 306 (die das Pixelmodul 224 von 2 implementiert). Die Geometrie-Steuereinheit 304 und die Pixel-Steuereinheit 306 kommunizieren jeweils mit einer Kern-Schnittstelle 308. Die Kern-Schnittstelle 308 steuert eine Anzahl (M) von Kernen 310, die die Verarbeitungsmaschinen des Arrays mit nebenläufigen Kernen 202 enthalten. Jede beliebige Anzahl M (zum Beispiel 1, 2, 4 oder eine beliebige andere Anzahl) von Kernen 310 kann mit einer einzelnen Kern-Schnittstelle verbunden sein. Jeder Kern 310 ist vorteilhafterweise als ein nebenläufiger Ausführungskern implementiert, der in der Lage ist, eine große Anzahl (zum Beispiel 100 oder mehr) an gleichzeitigen Ausführungsbefehlsfolgen zu unterstützen (wobei sich der Begriff ”Befehlsfolge” auf eine Instanz eines bestimmten Programms bezieht, das an einem bestimmten Satz Eingangsdaten ausgeführt wird), einschließlich einer Kombination aus Eckpunkt-Befehlsfolgen, Geometrie-Befehlsfolgen und Pixel-Befehlsfolgen. In einer Ausführungsform implementiert jeder Kern 310 eine P-Weg-SIMD-Architektur, um P Befehlsfolgen parallel auszuführen, wobei P eine willkürlich gewählte ganze Zahl (zum Beispiel 8, 16, 32) ist und in der Lage ist, eine Anzahl G (zum Beispiel 18, 24 usw.) von Gruppen aus P Befehlsfolgen gleichzeitig zu verwalten. Eine detaillierte Beschreibung des Kerns 310 findet sich in der vorläufigen US-Patentanmeldung Nr. 60/752,265, eingereicht am 19. Dezember 2005, die durch Bezugnahme für alle Zwecke in ihrer Gesamtheit in den vorliegenden Text aufgenommen wird.
-
Die Kern-Schnittstelle 308 steuert ebenfalls eine Textur-Pipeline 314, die zwischen Kernen 310 gemeinsam genutzt wird. Die Textur-Pipeline 314, die von einem allgemein herkömmlichen Design sein kann, enthält vorteilhafterweise Logikschaltungen, die dafür konfiguriert sind, Texturkoordinaten zu empfangen, Texturdaten, die den Texturkoordinaten entsprechen, aus dem Speicher zu holen und die Texturdaten gemäß verschiedenen Algorithmen zu filtern. Es können herkömmliche Filterungsalgorithmen verwendet werden, einschließlich bilinearer und trilinearer Filterung. Wenn ein Kern 310 in einer seiner Befehlsfolgen auf einen Texturbefehl stößt, so übermittelt er die Texturkoordinaten über die Kern-Schnittstelle 308 an die Textur-Pipeline 314. Die Textur-Pipeline 314 verarbeitet den Texturbefehl und sendet das Ergebnis über die Kern-Schnittstelle 308 an den Kern 310 zurück. Eine Texturverarbeitung durch die Pipeline 314 kann eine beträchtliche Anzahl an Taktzyklen verbrauchen, und während eine Befehlsfolge auf das Texturergebnis wartet, setzt der Kern 310 vorteilhafterweise die Ausführung anderer Befehlsfolgen fort.
-
Während des Betriebes übermittelt der Datenassemblierer 206 (2) Geometrie-Daten GDATA an Verarbeitungscluster 302. In einer Ausführungsform teilt der Datenassemblierer 206 den ankommenden Strom aus Geometrie-Daten in Teile und wählt, zum Beispiel auf der Grundlage der Verfügbarkeit von Ausführungsressourcen, aus, welches der Verarbeitungscluster 302 den nächsten Teil der Geometrie-Daten erhalten soll. Dieser Teil wird an die Geometrie-Steuereinheit 304 in dem gewählten Verarbeitungscluster 302 übermittelt.
-
Die Geometrie-Steuereinheit 304 leitet die empfangenen Daten an die Kern-Schnittstelle 308 weiter, welche die Eckpunkt-Daten in einen Kern 310 lädt, und weist dann den Kern 310 an, das entsprechende Vertexshader-Programm zu starten. Nachdem das Vertexshader-Programm zu Ende ausgeführt wurde, gibt die Kern-Schnittstelle 308 ein Signal an die Geometrie-Steuereinheit 304 aus. Wenn ein Geometrieshader-Programm ausgeführt werden soll, so weist die Geometrie-Steuereinheit 304 die Kern-Schnittstelle 308 an, das Geometrieshader-Programm zu starten. In einigen Ausführungsformen werden die verarbeiteten Eckpunkt-Daten an die Geometrie-Steuereinheit 304 zurückgesendet, wenn das Vertexshader-Programm zu Ende ausgeführt wurde, und die Geometrie-Steuereinheit 304 weist die Kern-Schnittstelle 308 an, die die Daten neu zu laden, bevor das Geometrieshader-Programm ausgeführt wird. Nach erfolgter Ausführung des Vertexshader-Programms und/oder des Geometrieshader-Programms übermittelt die Geometrie-Steuereinheit 304 die verarbeiteten Geometrie-Daten (GDATA') an das Einrichtmodul 208 von 2.
-
Auf der Pixel-Stufe übermittelt das Farbassembliermodul 212 (2) Attribut-Gleichungen EQS für eine geometrische Grundform (primitive) und Pixelkoordinaten (X, Y) der Pixel, die durch die geometrische Grundform abgedeckt werden, an das Verarbeitungscluster 302. In einer Ausführungsform teilt das Farbassembliermodul 212 den ankommenden Strom aus Abdeckungsdaten in Teile und wählt, zum Beispiel auf der Grundlage der Verfügbarkeit von Ausführungsressourcen oder der Position der geometrischen Grundform in den Schirmkoordinaten, aus, welches der Verarbeitungscluster 302 den nächsten Teil der Daten empfangen soll. Dieser Teil wird an die Pixel-Steuereinheit 306 in dem gewählten Verarbeitungscluster 302 übermittelt.
-
Die Pixel-Steuereinheit 306 übermittelt die Daten an die Kern-Schnittstelle 308, die die Pixeldaten in einen Kern 310 lädt, und weist dann den Kern 310 an, das Pixelshader-Programm zu starten. Wenn der Kern 310 nebenläufig ist, so können Pixelshader-Programme, Geometrieshader-Programme und Vertexshader-Programme allesamt gleichzeitig in demselben Kern 310 ausgeführt werden. Nach erfolgter Ausführung des Pixelshader-Programms übermittelt die Kern-Schnittstelle 308 die verarbeiteten Pixeldaten zu der Pixel-Steuereinheit 306, welche die Pixeldaten PDATA zu der ROP-Einheit 214 (2) weiterleitet.
-
Es versteht sich, dass das im vorliegenden Text beschriebene Array mit nebenläufigen Kernen veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Es kann eine beliebige Anzahl an Verarbeitungsclustern vorhanden sein, und jedes Verarbeitungscluster kann eine beliebige Anzahl von Kernen enthalten. In einigen Ausführungsformen können Shader bestimmter Typen darauf beschränkt sein, in bestimmten Verarbeitungsclustern oder in bestimmten Kernen ausgeführt zu werden. Zum Beispiel könnten Geometrieshader darauf beschränkt sein, im Kern 310(0) jedes Verarbeitungsclusters ausgeführt zu werden. Solche Designentscheidungen können auf der Grundlage von Überlegungen bezüglich der Hardware-Größe und -Komplexität im Verhältnis zur Leistung getroffen werden, wie dem Fachmann bekannt ist. Eine gemeinsam genutzte Textur-Pipeline ist ebenfalls optional. In einigen Ausführungsformen könnte jeder Kern seine eigene Textur-Pipeline haben oder könnte Allzweck-Funktionseinheiten wirksam zum Ausführen von Texturberechnungen nutzen.
-
Zu verarbeitende Daten können auf verschiedene Weise zu den Verarbeitungsclustern verteilt werden. In einer Ausführungsform empfangen der Datenassemblierer (oder eine andere Quelle von Geometrie-Daten) und das Farbassembliermodul (oder eine andere Quelle von Pixelshader-Eingangsdaten) Informationen, welche die Verfügbarkeit von Verarbeitungsclustern oder einzelnen Kernen zum Handhaben zusätzlicher Befehlsfolgen verschiedener Typen anzeigen, und wählen ein Ziel-Verarbeitungscluster oder einen Ziel-Kern für jede Befehlsfolge aus. In einer weiteren Ausführungsform werden Eingangsdaten von einem Verarbeitungscluster zum nächsten weitergeleitet, bis ein Verarbeitungscluster mit der Fähigkeit, die Daten zu verarbeiten, sie akzeptiert. In einer weiteren Ausführungsform werden Verarbeitungscluster anhand der Eigenschaften der Eingangsdaten ausgewählt, wie zum Beispiel der Schirmkoordinaten von zu verarbeitenden Pixeln.
-
Das Array mit nebenläufigen Kernen kann auch wirksam zum Ausführen von Allzweckberechnungen verwendet werden, die gegebenenfalls mit dem Rendern von Bildern im Zusammenhang stehen können. In einer Ausführungsform kann jede Berechnung, die in einer datenparallelen Zerlegung ausgedrückt werden kann, durch das Array mit nebenläufigen Kernen als ein Array aus Befehlsfolgen gehandhabt werden, die in einem einzelnen Kern ausgeführt werden. Die Ergebnisse solcher Berechnungen können in den Framepuffer geschrieben und in den Systemspeicher zurückgelesen werden.
-
Zuweisung der Pixelshader-Arbeitslast
-
Gemäß einer Ausführungsform der vorliegenden Erfindung werden Pixel, die durch ein Pixelshader-Programm zu verarbeiten sind, auf der Grundlage der Position der Pixel innerhalb des Bildbereichs zu einem Verarbeitungscluster 302 (3) geleitet. Zum Beispiel kann der Bildbereich in eine Anzahl von Kacheln unterteilt werden. Jede Kachel ist mit einem der Verarbeitungscluster 302 in einer solchen Weise verknüpft, dass die Kacheln, die zu einem Cluster gehören, über den Bildbereich verstreut sind (d. h. mindestens einige der Kacheln, die einem Verarbeitungscluster zugeordnet sind, grenzen nicht aneinander).
-
4 veranschaulicht eine mögliche Kachelung eines Bildbereichs 400 in eine große Anzahl von Kacheln 402 gemäß einer Ausführungsform der vorliegenden Erfindung. Jede Kachel 402 könnte zum Beispiel 16 × 16 Pixel betragen oder von einer beliebigen anderen zweckmäßigen Größe sein. In dieser Ausführungsform enthält das Array mit nebenläufigen Kernen 202 von 3 acht Verarbeitungscluster 302(0) bis 302(7). Jede Kachel 402 in 4 enthält eine Zahl i (0 bis 7), die anzeigt, welcher Verarbeitungskern 302(i) Pixel in dieser Kachel verarbeitet. Wie in 4 zu erkennen ist, ist jedem Verarbeitungscluster 302 eine gleiche (oder fast gleiche) Anzahl von Kacheln 402 innerhalb des Bildbereichs 400 zugewiesen, und die Kacheln, die jedem Cluster 302 zugewiesen sind, grenzen nicht aneinander an. Es wird erwartet, dass für viele Grafikanwendungen ein Verteilen der Arbeitslast in dieser Weise einen ungefähren Arbeitslastausgleich zwischen den Verarbeitungsclustern 302 bewirkt. Eine geeignete Pixelverteilungslogik kann in die Rendering-Pipeline 200, zum Beispiel in das Farbassembliermodul 212 der 2, eingebunden werden.
-
Es versteht sich, dass die in 4 gezeigte Kachelung veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Die Kacheln können jede beliebige Größe haben. In einigen Ausführungsformen sind Größe und Anzahl der Kacheln konfigurierbar, wobei die Kachelgröße auf der Grundlage der Anwendungscharakteristika ausgewählt wird, wie zum Beispiel, ob ein Multisampling-Modus verwendet wird. Die Anordnung der Kacheln, die jedem Verarbeitungscluster zugeordnet sind, kann nach Wunsch variiert werden.
-
Kacheln können einer beliebigen Anzahl von Verarbeitungsclustern zugeordnet werden, bis hin zur Gesamtzahl, die in einer bestimmten GPU vorhanden sind. In einigen Ausführungsformen sind die Kacheln weniger als allen Verarbeitungsclustern zugeordnet. Somit kann eine GPU Bilder unter Verwendung nur einiger ihrer Verarbeitungscluster zum Verarbeiten von Pixel-Befehlsfolgen rendern. Solange mindestens ein Verarbeitungscluster verfügbar ist, ist die GPU in der Lage, Bilder zu rendern, wenn auch nur mit verringertem Durchsatz. Es kann nützlich sein, während des Arbeitens einige Cluster von der Verarbeitung von Pixel-Befehlsfolgen auszuklammern, zum Beispiel zum Arbeiten in einem Stromsparmodus (einige Kerne oder Cluster können abgeschaltet werden, während andere arbeiten), um die Mindestleistungsanforderungen zu ermitteln (ohne die Verfügbarkeit verschiedener GPUs zu erfordern) und/oder um eine Toleranz gegen Defekte in dem einem oder anderen der Kerne zu erreichen.
-
In einigen alternativen Ausführungsformen sind Kacheln bestimmten Kernen 310 anstatt Verarbeitungsclustern 302 zugeordnet.
-
Pixelshader-Kopplung an Framepuffer
-
In einigen Ausführungsformen gibt es keinen zentralisierten ROP 214, wie in 2 vorgeschlagen, sondern jede Pixel-Steuereinheit 306 in 3 enthält ihren eigenen ROP, der Pixel an den Framepuffer 226 von 2 übermittelt. In solchen Ausführungsformen wird eine Kopplung von Verarbeitungsclustern 302 zu dem Framepuffer bereitgestellt.
-
In einer Ausführungsform mit N Verarbeitungsclustern ist der Framepuffer 226 in N Partitionen unterteilt. Jedes Cluster 302 ist mit einer anderen der N Partitionen gekoppelt.
-
5 ist ein vereinfachtes Blockschaubild, das eine Kopplung zwischen Verarbeitungsclustern 302 und einem Framepuffer 500 gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht. Es versteht sich, dass der Framepuffer 226 von 2 mehrere Framepuffer 500 enthalten könnte, wobei jeder Framepuffer 500 eine spezifizierte Menge Pixel für Pixel für dasselbe Bild speichert. Zum Beispiel enthält in einer Ausführungsform der Framepuffer 226 einen Z-Puffer; Farbkomponentenpuffer (zum Beispiel für rote, grüne und blaue Farbkomponenten) und einen Transparenz(Alpha)-Puffer. Es versteht sich, dass jede beliebige Anzahl von Framepuffern 500 vorhanden sein kann und dass ”Pixel” im Sinne des vorliegenden Textes sich auf Abtastpositionen innerhalb des Bildes bezieht, die gegebenenfalls der Anzahl der aktiven Pixel in einem bestimmten Anzeigegerät entsprechen können. Der Einfachheit halber ist nur ein einziger Framepuffer 500 gezeigt. Es versteht sich, dass die gleiche Partitionierung auf jeden Framepuffer für ein Bild angewendet werden kann.
-
Der Framepuffer 500 ist (physisch oder logisch) in N Partitionen 502 unterteilt, wobei jede Partition groß genug ist, um die Daten für mindestens 1/N der Pixel in dem Bild zu speichern. Jedes der N Verarbeitungscluster 302 ist mit einer der N Partitionen 502 gekoppelt. Somit speichert das Verarbeitungscluster 302(0) alle seine Ausgabepixeldaten in der Partition 502(0), das Verarbeitungscluster 302(1) in der Partition 502(1), und so weiter. Es ist anzumerken, dass in dem Umfang, wie Kacheln, die durch ein bestimmtes Verarbeitungscluster 302 verarbeitet werden, nicht aneinandergrenzen, die Daten in einer bestimmten Framepufferpartition 502 von nicht-aneinandergrenzenden Kacheln stammen.
-
Die Anzeige(scanout)-Logik beobachtet vorteilhafterweise die korrekte Anzeigereihenfolge der Daten beim Zugriff auf den Framepuffer 500. Insbesondere ist es nicht erforderlich, dass Partitionen der Reihe nach ausgelesen werden.
-
Wie oben angemerkt, könnten in einigen Ausführungsformen weniger als alle Verarbeitungskerne 302 zum Erzeugen von Pixeln verwendet werden. In der in 5 gezeigten Ausführungsform übermittelt nur das Verarbeitungscluster 302(0) Pixel an die Framepufferpartition 502(0). Wenn das Verarbeitungscluster 302(0) nicht zum Erzeugen von Pixeln betrieben wird, so wird dementsprechend die Framepufferpartition 502(0) nicht verwendet. Der Bildbereich kann neu gekachelt werden, oder Kacheln können zwischen den Verarbeitungsclustern 302(1) bis 302(N-1) dergestalt neu zugewiesen werden, dass der Bereich zwischen N-1 Verarbeitungsclustern aufgeteilt wird. In einigen Ausführungsformen muss möglicherweise die Abtastauflösung verringert werden, zum Beispiel wenn Framepufferpartitionen 502(1) bis 502(N-1) nicht genügend Platz bereitstellen, um alle Pixeldaten für das Bild in der originalen Abtastauflösung zu speichern. In Ausführungsformen, wo die Partitionen logisch anstatt physisch sind, kann der Framepuffer 500 entsprechend der Anzahl der verfügbaren Verarbeitungscluster 302 neu partitioniert werden.
-
In einer alternativen Ausführungsform kann jedes Verarbeitungscluster auf mehrere Framepufferpartitionen zugreifen. 6 ist ein vereinfachtes Blockschaubild, das eine Kopplung zwischen Verarbeitungsclustern 302 und einem Framepuffer 600 gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht. Es versteht sich, dass der Framepuffer 226 von 2 mehrere Framepuffer 600 enthalten könnte, wobei jeder Framepuffer 600 eine spezifizierte Menge Pixel für Pixel für dasselbe Bild speichert, wie es oben mit Bezug auf den Framepuffer 500 beschrieben wird. Es versteht sich, dass jede beliebige Anzahl von Framepuffern 600 vorhanden sein kann. Der Einfachheit halber ist nur ein einziger Framepuffer 600 gezeigt. Es versteht sich, dass die Partitionierung auf jeden Framepuffer für ein Bild angewendet werden kann.
-
Der Framepuffer 600 ist (physisch oder logisch) in eine Anzahl B von Partitionen 602 unterteilt, wobei B gleich der Anzahl N oder verschieden von der Anzahl N der Verarbeitungscluster 302 sein kann. Die Verarbeitungscluster 302 sind über eine Kreuzschiene 604 mit den Partitionen 602 gekoppelt. Jedes Cluster 302 kann Pixeldaten in eine beliebige (oder in mehrere) der B Partitionen 602 schreiben.
-
In dieser Ausführungsform ist die Kreuzschiene 604 konfigurierbar, wodurch es möglich ist, die Kopplung von Verarbeitungsclustern 302 mit den Framepufferpartitionen 602 nach Wunsch zu modifizieren. Zum Beispiel könnten, wie oben angesprochen, in einigen Ausführungsformen weniger als alle der Verarbeitungskerne 302 zum Erzeugen von Pixeln verwendet werden. Wenn in der in 6 gezeigten Ausführungsform der Verarbeitungskern 302(0) deaktiviert ist, so kann die Kreuzschiene 604 dergestalt umkonfiguriert werden, dass immer noch alle Framepufferpartitionen 602 für den einen oder anderen der Verarbeitungskerne 302 zugänglich sind. Die Anzeige(scanout)-Logik ist vorteilhafterweise so konfigurierbar, dass die Framepufferdaten unabhängig von der Konfiguration der Kreuzschiene 604 oder der Zuordnung der Kacheln zu den Verarbeitungskernen 302 korrekt ausgelesen (scanout) werden.
-
Wenn mehrere Framepuffer vorhanden sind (zum Beispiel Z, Farbe, Alpha usw.), so kann jeder Framepuffer in der beschriebenen Weise in B Partitionen unterteilt werden. In einigen Ausführungsformen ist die Anzahl der Partitionen nicht für alle Framepuffer die gleiche. Zum Beispiel könnte ein Z-Puffer mehr oder weniger Partitionen als ein Farbpuffer haben.
-
Weitere Ausführungsformen
-
Obgleich die Erfindung mit Bezug auf konkrete Ausführungsformen beschrieben wurde, erkennt der Fachmann, dass zahlreiche Modifikationen möglich sind. Obgleich also die Erfindung mit Bezug auf konkrete Ausführungsformen beschrieben wurde, versteht es sich, dass die Erfindung alle Modifikationen und Äquivalente innerhalb des Geltungsbereichs der folgenden Ansprüche erfassen soll.