-
HINTERGRUND DER ERFINDUNG
-
Gebiet der Erfindung
-
Die
vorliegende Erfindung betrifft allgemein die Kachelung von dreidimensionalen
Oberflächenpatches
und genauer die Durchführung
einer Kachelung in einem einzigen Durchgang durch eine Graphikprozessierpipeline.
-
Beschreibung des Standes der
Technik
-
Das
Programmiermodell für
eine Kachelungs-Hardware hat sich entwickelt zum Offenlegen neuer
Shaderprogramme, die ausgeführt
werden zum Durchführen
einer Kachelung von dreidimensionalen Oberflächenpatches. Konventionelle
Hardwarearchitekturen verwenden einen Zweidurchlaufansatz um eine
Kachelung durchzuführen.
Während des
ersten Durchlaufs durch einen Graphikprozessierpipeline-Vertexshader
und Kachelungssteuershader (oder Steuerungshüllshader) werden Programme
ausgeführt
und Vertexdaten und Kachelungsparameter in einem Speicher gespeichert. Nachdem
der erste Durchgang vollendet ist, wird die Graphikprozessiereinheit
rekonfiguriert. Während
eines zweiten Durchlaufs durch die Graphikprozessiereinheit werden
die Vertexdaten und Kachelungsparameter von dem Speicher gelesen
und Kachelungsberechnungsshader- (oder Domainshader-) und Geometrieshaderprogramme
ausgeführt
zum Vervollständigen
der Kachelungsoperation. Typischerweise initiiert ein Softwareanwendungsprogramm
oder Gerätetreiber
sowohl den ersten Durchlauf als auch den zweiten Durchlauf.
-
Was
entsprechend benötigt
wird, ist ein verbessertes System und Verfahren zum Ausführen von Kachelungsshaderprogrammen.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Ein
System und ein Verfahren zum Durchführen einer Kachelung in einem
einzigen Durchgang durch einen Graphikprozessor teilen die Prozessierressourcen
innerhalb des Graphikprozessors in Sätze zum Durchführen von
verschiedenen Kachelungsoperationen. Vertexdaten und Kachelungsparameter werden
direkt von einer Prozessierressource zu einer anderen weitergeleitet,
anstatt in einem Speicher gespeichert zu werden. Folglich wird eine
Oberflächenpatchbeschreibung
an den Graphikprozessor geliefert und die Kachelung wird vervollständigt in
einem einzigen ununterbrochenen Durchlauf durch den Graphikprozessor
ohne Zwischendaten in den Speicher zu speichern.
-
Verschiedene
Ausführungsformen
eines Verfahrens der Erfindung zum Durchführen einer Kachelung in einem
Einzeldurchlauf durch einen Graphikprozessor umfassen ein Konfigurieren
eines ersten Satzes von Prozessiereinheiten des Graphikprozessors
und ein Konfigurieren eines zweiten Satzes der Prozessiereinheiten
innerhalb des Graphikprozessors. Der erste Satz von Prozessiereinheiten
ist konfiguriert zum Ausführen
eines Kachelungssteuershaders zum Prozessieren von Oberflächenpatches,
Berechnen von Kachelungsdetailniveaus und Erzeugen einer Graphikgrundform
(graphics primitive), welche mehrfache Vertices aufweist. Der zweite
Satz von Prozessiereinheiten ist konfiguriert zum Ausführen eines
Kachelungsberechnungsshaders zum jeweils Prozessieren von einem
der mehreren Vertices. Der Kachelungssteuershader und der Kachelungsberechnungsshader
werden dann ausgeführt
zum Kacheln der Oberflächenpatches
in einem einzigen Durchlauf durch den ersten Satz von Prozessiereinheiten
und den zweiten Satz von Prozessiereinheiten zum Erzeugen von prozessierten
Vertices.
-
Verschiedene
Ausführungsformen
der Erfindung enthalten ein System zum Durchführen einer Kachelung in einem
einzigen Durchlauf durch einen Graphikprozessor. Der Graphikprozessor
umfasst einen ersten Satz von Prozessiereinheiten, einen zweiten
Satz von Prozessiereinheiten und einen Crossbarverbinder (Matrixverbinder).
Der erste Satz von Prozessiereinheiten ist konfiguriert zum Ausführen eines
Kachelungssteuershaders zum Prozessieren von Oberflächenpatches
und Erzeugen einer Graphikgrundform (graphics primitive), welche
mehrere Vertices aufweist. Der zweite Satz der Prozessiereinheiten
ist konfiguriert zum Ausführen
eines Kachelungsberechnungsshaders zum jeweils Prozessieren von
einem der mehreren Vertices. Der Crossbarverbinder mit dem ersten
Satz von Prozessiereinheiten und dem zweiten Satz von Prozessiereinheiten
gekoppelt und konfiguriert zum Weiterleiten der mehreren Vertices,
die von dem ersten Satz von Prozessiereinheiten ausgegeben werden,
an die Eingänge des
zweiten Satzes der Prozessiereinheiten.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Dass
die Weise, in welcher die oben vorgetragenen Merkmale der vorliegenden
Erfindung im Detail verstanden werden kann, kann eine spezifischere
Beschreibung der Erfindung, die oben kurz zusammengefasst wurde,
erhalten werden durch Bezugnahme auf Ausführungsformen, von welchen einige
in den anhängenden
Zeichnungen veranschaulicht sind. Es sollte jedoch erwähnt werden,
dass die anhängenden
Zeichnungen nur typische Ausführungsformen
dieser Erfindung illustrieren und folglich nicht als deren Umfang
einschränkend betrachtet werden
sollen, denn die Erfindung kann andere, gleichermaßen wirksame
Ausführungsformen
zulassen.
-
1 ist
ein Blockdiagramm, welches ein Computersystem, das konfiguriert
ist zum Implementieren von einem oder mehreren Aspekten der vorliegenden
Erfindung, veranschaulicht;
-
2 ist
ein Blockdiagramm eines Parallelprozessiersubsystems für das Computersystem
von 1, gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
3A ist
ein Blockdiagramm einer GPC innerhalb einer der PPUs von 2,
gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
3B ist
ein Blockdiagramm einer Teileinheit innerhalb einer der PPUs von 2,
gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
4 ist
ein Konzeptdiagramm einer Graphikprozessierpipeline, wobei eine
oder mehrere der PPUs von 2 konfiguriert
werden können,
diese zu implementieren, gemäß einer
Ausführungsform der
vorliegenden Erfindung;
-
5A ist
ein Flussdiagramm von Verfahrensschritten zum Durchführen einer
Kachelung in einem einzigen Durchlauf, gemäß einer Ausführungsform
der vorliegenden Erfindung; und
-
5B ist
ein Blockdiagramm einer GPC, welche konfiguriert ist zum Durchführen einer
Kachelung in einem einzigen Durchlauf, gemäß einer Ausführungsform
der vorliegenden Erfindung.
-
DETAILLIERTE BESCHREIBUNG
-
In
der folgenden Beschreibung werden zahlreiche spezifische Details
vorgetragen zum Bereitstellen eines gründlicheren Verständnisses
der vorliegenden Erfindung. Jedoch wird für den Fachmann deutlich sein,
dass die vorliegende Erfindung ausgeführt werden kann, ohne eines
oder mehrerer dieser spezifischen Details. In anderen Beispielen
sind gut bekannte Merkmale nicht beschrieben worden, um eine Verschleierung
der vorliegenden Erfindung zu vermeiden.
-
Systemüberblick
-
1 ist
ein Blockdiagramm, welches ein Computersystem 100 veranschaulicht,
das konfiguriert ist zum Implementieren von einem oder mehreren
Aspekten der vorliegenden Erfindung. Das Computersystem 100 umfasst
eine Zentralprozessiereinheit (CPU 102) und einen Systemspeicher 104,
die über
einen Busweg durch eine Speicherbrücke 105 kommunizieren.
Die Speicherbrücke 105 kann
in die CPU 102 integriert sein, wie in 1 dargestellt.
Alternativ kann die Speicherbrücke 105 eine
konventionelle Vorrichtung sein, z. B. ein Northbridge-Chip, welcher über einen
Bus mit der CPU 102 verbunden ist. Die Speicherbrücke 105 ist über einen
Kommunikationsweg 106 (z. B. einen HyperTransport-Link)
mit einer I/O(input/output)-Brücke 107 verbunden.
Die I/O-Brücke 107,
welche z. B. ein Southbridge-Chip sein kann, empfängt Benutzereingaben
von einer oder mehreren Benutereingabevorrichtungen 108 (z. B.
Tastatur, Maus) und leitet die Eingabe an die CPU 102 über den
Pfad 106 und die Speicherbrücke 105 weiter. Ein
Parallelprozessiersubsystem 112 ist an die Speicherbrücke 105 über einen
Bus oder einen anderen Kommunikationsweg 113 (z. B. einen PCI-Express, Accelerated
Graphics Port, oder HyperTransport-Link) gekoppelt; in einer Ausführungsform
ist das Parallelprozessiersubsystem 112 ein Graphiksubsystem,
welches Pixel an eine Anzeigevorrichtung 110 (z. B. einen
konventionellen CRT- oder LCD-basierten Monitor) liefert. Eine Systemplatte 114 ist
ebenfalls mit der I/O-Bridge 107 verbunden. Ein Switch 116 liefert
Verbindungen zwischen der I/O-Bridge 107 und anderen Komponenten,
wie beispielsweise einem Netzwerkadapter 118 und verschiedenen
Add-in-Karten 120 und 121. Andere Komponenten
(nicht explizit dargestellt) einschließlich USB- oder andere Port-Verbindungen,
CD-Laufwerke, DVD-Laufwerke, Filmaufnahmevorrichtungen und dergleichen
können
ebenfalls an die I/O-Brücke 107 angeschlossen
sein. Kommunikationswege, welche die verschiedenen Komponenten in 1 verbinden,
können
implementiert sein unter Verwendung von geeigneten Protokollen,
wie z. B. PCI (Peripheral Component Interconnect), PCI-Express (PCI-E),
AGP (Accelerated Graphics Port), HyperTransport, oder jedem anderen
Bus- oder Punkt-zu-Punkt-Kommunikationsprotokoll(e),
und Verbindungen zwischen verschiedenen Vorrichtungen können verschiedene
Protokolle verwenden, wie dies im Stand der Technik bekannt ist.
-
In
einer Ausführungsform
umfasst das Parallelprozessiersubsystem 112 eine Schaltung,
welche optimiert ist für
Graphik- und Videoprozessieren, einschließlich, z. B. einer Videoausgabeschaltung,
und bildet eine Graphikprozessiereinheit (GPU). In einer anderen
Ausführungsform
schließt
das Parallelprozessiersubsystem 112 eine Schaltung ein,
die optimiert ist für
Universalprozessieren (general purpose processing), während es
die zugrundeliegende Berechnungsarchitektur, welche hierin genauer
beschrieben wird, bewahrt. In einer nochmals anderen Ausführungsform
kann das Parallelprozessiersubsystem 112 mit einem oder
mehreren Systemelementen integriert sein, wie beispielsweise der Speicherbrücke 105,
CPU 102 und I/O-Brücke 107, um
ein On-Chip-System (system on chip, SoC) zu bilden.
-
Es
wird verstanden werden, dass das hierin dargestellte System veranschaulichend
ist und dass Variationen und Modifikationen möglich sind.
-
Die
Verbindungstopologie, einschließlich
der Anzahl und Anordnung von Brücken,
kann wie gewünscht
modifiziert werden. Zum Beispiel ist in einigen Ausführungsformen
der Systemspeicher 104 mit der CPU 102 direkt,
als stattdessen durch eine Brücke,
verbunden, und andere Vorrichtungen kommunizieren mit dem Systemspeicher 104 über die Speicherbrücke 105 und
die CPU 102. In anderen alternativen Topologien, ist das
Parallelprozessiersubsystem 112 mit der I/O-Brücke 107 oder
direkt mit der CPU 102 verbunden, als stattdessen mit der Speicherbrücke 105.
In nochmals anderen Ausführungsformen
sind eine oder mehrere von CPU 102, I/O-Brücke 107,
Parallelprozessiersubsystem 112 und Speicherbrücke 105 in
einen oder mehrere Chips integriert. Die einzelnen hierin dargestellten
Komponenten sind optional; z. B. könnte jede Anzahl von Add-in-Karten
oder Peripheriegeräten
unterstützt werden.
In einigen Ausführungen
ist der Switch 116 eliminiert und der Netzwerkadapter 118 und
die Add-in-Karten 120, 121 sind direkt mit der
I/O-Brücke 107 verbunden.
-
2 veranschaulicht
ein Parallelprozessiersystem 112 gemäß einer Ausführungsform
der vorliegenden Erfindung. Wie dargestellt, enthält das Parallelprozessiersystem 112 eine
oder mehrere Parallelprozessiereinheiten (PPUs) 202, von
denen jede an einen lokalen Parallelprozessier(PP)speicher 204 gekoppelt
ist. Allgemein umfasst ein Parallelprozessiersubsystem eine Anzahl
U von PPUs, wobei U ≥ 1
ist. (Hierin werden mehrere Instanzen von ähnlichen Objekten mit Bezugszeichen
bezeichnet, die das Objekt identifizieren und parenthetischen Nummern,
welche die Instanz identifizieren, wo dies erforderlich ist.) Die
PPUs 202 und die Parallelprozessierspeicher 204 können implementiert
sein unter Verwendung von einem oder mehreren integrierten Vorrichtungen,
wie beispielsweise programmierbaren Prozessoren, anwendungsspezifischen
integrierten Schaltungen (ASICs) oder Speichervorrichtungen, in jeder
anderen technisch möglichen
Art und Weise.
-
Wieder
bezugnehmend auf 1, sind in einigen Ausführungsformen
einige oder alle der PPUs 202 in dem Parallelprozessiersubsystem 112 Graphikprozessoren
mit Renderingpipelines, die konfiguriert werden können zum
Durchführen
von verschiedenen Aufgaben, die in Beziehung stehen zu dem Erzeugen
von Pixeldaten aus Graphikdaten, die von der CPU 102 und/oder
dem Systemspeicher 104 geliefert werden, Interagieren mit
dem lokalen Parallelprozessierspeicher 204 (welcher verwendet
werden kann als Graphikspeicher, enthaltend z. B. einen konventionellen
Framepuffer) zum Speichern und Updaten der Pixeldaten, Liefern der
Pixeldaten an eine Anzeigevorrichtung 110, und dergleichen.
In einigen Ausführungsformen
kann das Parallelprozessiersubsystem 112 eine oder mehrere
PPUs 202 enthalten, die als Graphikprozessoren arbeiten
und eine oder mehrere andere PPUs 202, die für Universal(general purpose)-Berechnungen
verwendet werden. Die PPUs können
identisch oder verschieden sein, und jede PPU kann ihre eigene(n)
zugeordnete(n) Parallelprozessierspeichervorrichtung(en) oder keine
zugeordnete Parallelprozessierspeichervorrichtung(en) aufweisen.
Eine oder mehrere PPUs 202 können Daten an die Anzeigevorrichtung 110 ausgeben
oder jede PPU 202 kann Daten an eine oder mehrere Anzeigevorrichtungen 110 ausgeben.
-
Im
Betrieb ist die CPU 102 der Hauptprozessor des Computersystems 100,
welcher Operationen von anderen Systemkomponenten steuert und koordiniert.
Insbesondere gibt die CPU 102 Befehle aus, welche den Betrieb
der PPUs 202 steuern. In einigen Ausführungsformen schreibt die CPU 102 einen Strom
von Befehlen für
jede PPU 202 in einen Befehlspuffer (nicht explizit dargestellt
in entweder 1 oder 2), welcher
in dem Systemspeicher 104, dem Parallelprozessierspeicher 204,
oder einem anderen Speicherort angeordnet sein kann, welcher beiden,
CPU 102 und PPU 202 zugänglich ist. Die PPU 202 liest
den Befehlsstrom von dem Befehlspuffer und führt dann Befehle asynchron
relativ zu dem Betrieb der CPU 102 aus. Die CPU 102 kann auch
Datenpuffer erzeugen, welche die PPUs 202 in Reaktion auf Befehle
in dem Befehlspuffer lesen können.
Jeder Befehls- und Datenpuffer kann von mehreren PPUs 202 gelesen
werden.
-
Nun
zurückkommend
auf 2, enthält
jede PPU 202 eine I/O(input/output)-Einheit 205, welche mit dem
Rest des Computersystems 100 über den Kommunikationsweg 113,
welcher mit der Speicherbrücke 105 (oder,
in einer alternativen Ausführungsform,
direkt mit der CPU 102) verbunden ist, kommuniziert. Die
Verbindung von PPU 202 mit dem Rest des Computersystems 100 kann
ebenfalls variiert werden. In einigen Ausführungsformen ist das Parallelprozessiersubsystem 112 implementiert
als eine Add-in-Karte, die in einen Erweiterungsslot des Computersystems 100 eingeführt werden
kann. In anderen Ausführungsformen
kann eine PPU 202 auf einem einzigen Chip mit einer Busbrücke, wie
beispielsweise der Speicherbrücke 105 oder
der I/O-Brücke 107 integriert
sein. In nochmals anderen Ausführungsformen
können
einige oder alle Elemente der PPU 202 auf einem einzigen
Chip mit der CPU 102 integriert sein.
-
In
einer Ausführungsform
ist der Kommunikationspfad 113 ein PCI-E-Link, in welchem
dezidierte Spuren für
jede PPU 202 reserviert sind, wie es im Stand der Technik
bekannt ist. Andere Kommunikationspfade können ebenfalls verwendet werden.
Eine I/O-Einheit 205 erzeugt Pakete (oder andere Signale) zur Übertragung
auf dem Kommunikationsweg 113 und empfängt alle eingehenden Pakete
(oder andere Signale) von dem Kommunikationsweg 113, und
richtet eingehende Pakete an geeignete Komponenten von PPU 202.
Zum Beispiel können
Befehle, welche auf das Ausführen
von Aufgaben bezogen sind, an ein Host-Interface 206 gerichtet
werden, während Befehle,
die auf Speicheroperationen bezogen sind (z. B. Lesen von oder Schreiben
an den Parallelprozessierspeicher 204), an eine Speichercrossbarseinheit 210 gerichtet
werden können.
Das Host-Interface 206 liest jeden Befehlspuffer und gibt
die Arbeit, die durch den Befehlspuffer spezifiziert ist, an ein Frontend 212 aus.
-
Jede
PPU 202 implementiert vorteilhafterweise eine hochparallele
Prozessierarchitektur. Wie im Detail dargestellt, enthält die PPU 202(0) ein
Prozessierclusterarray 230, welches eine Anzahl C von allgemeinen
Prozessierclustern (GPCs) 208 enthält, wobei C ≥ 1. Jede GPC 208 ist
in der Lage, eine große
Anzahl (z. B. Hunderte oder Tausende) von Threads gleichzeitig auszuführen, wobei
jeder Thread eine Instanz eines Programms ist. In verschiedenen
Anwendungen können
verschiedene GPCs 208 zum Prozessieren von verschiedenen
Typen von Programmen und zum Durchführen von verschiedenen Typen
von Berechnungen reserviert sein. Zum Beispiel kann in einer Graphikanwendung ein
erster Satz von GPCs 208 reserviert sein zum Durchführen von
Kachelungsoperationen und zum Erzeugen von Grundform(Primitive)-Topologien
für Patches,
und ein zweiter Satz von GPCs 208 kann reserviert sein
zum Durchführen
von Kachelungsshading zum Berechnen von Patchparametern für die Grundformtopologien
und zum Bestimmen von Vertexpositionen und anderen Pro-Vertex-Attributen. Die
Reservierung von GPCs 208 kann variieren abhängig von
der Arbeitslast, die für
jeden Typ von Programm oder Berechnung entsteht. Alternativ können alle
GPCs 208 reserviert sein zum Durchführen von Prozessieraufgaben
unter Verwendung eines Zeitschlitzschemas zum Wechseln zwischen
verschiedenen Prozessieraufgaben.
-
GPCs 208 empfangen
Prozessieraufgaben, die ausgeführt
werden sollen, über
eine Arbeitsverteilungseinheit 200, welche Befehle, die
Prozessieraufgaben definieren, von der Frontendeinheit 212 empfängt. Prozessieraufgaben
enthalten Pointer auf Daten, die prozessiert werden sollen, z. B.
Oberflächen(patch)daten,
Grundformdaten, Vertexdaten und/oder Pixeldaten, sowie Zustandsparameter
und Befehle, welche definieren, wie die Daten prozessiert werden
sollen (z. B. welches Programm ausgeführt werden soll). Die Arbeitsverteilungseinheit
kann konfiguriert sein zum Abholen der Pointer, die den Aufgaben
entsprechen, die Arbeitsverteilungseinheit 200 kann die Pointer
von dem Frontend 212 empfangen, oder die Arbeitsverteilungseinheit 200 kann
die Daten direkt empfangen. In einigen Ausführungsformen der vorliegenden
Erfindung spezifizieren Indizes den Ort der Daten in einem Array.
Das Frontend 212 stellt sicher, dass die GPCs 208 in
einen gültigen
Zustand konfiguriert sind, bevor das Prozessieren, welches durch
die Befehlspuffer spezifiziert ist, eingeleitet (initiiert) wird.
-
Wenn
zum Beispiel die PPU 202 zum Graphikprozessieren verwendet
wird, wird die Prozessierlast für
jeden Patch in ungefähr
gleichgroße
Aufgaben geteilt, um die Verteilung des Kachelungsprozessierens
auf mehrere GPCs 208 zu ermöglichen. Die Arbeitsverteilungseinheit 200 kann
konfiguriert sein zum Ausgeben von Aufgaben mit einer Frequenz,
die geeignet ist, Aufgaben an mehrere GPCs 208 zur Prozessierung
zu liefern. In einigen Ausführungsformen
der vorliegenden Erfindung sind Teile der GPCs 208 konfiguriert
zum Durchführen
von verschiedenen Typen von Prozessierung. Zum Beispiel kann ein
erster Teil konfiguriert sein zum Durchführen von Vertexshading und
Topologieerzeugung, ein zweiter Teil kann konfiguriert sein zur
Durchführung von
Kachelung und Geometrieshading, und ein dritter Teil kann konfiguriert
sein zum Durchführen
von Pixelshading in einem Bildschirmraum zum Erzeugen eines gerenderten
Bildes. Die Fähigkeit,
Teile der GPCs 208 zum Durchführen von verschiedenen Typen
von Prozessierung zu reservieren, trägt effizient jeder Expansion
und Kontraktion von Daten, die durch die verschiedenen Prozessiertypen
erzeugt werden, Rechnung. Zwischendaten, welche von den GPCs 208 erzeugt
werden, können
gepuffert werden zum Erlauben, dass die Zwischendaten zwischen GPCs 208 mit
minimalen Blockieren übertragen
werden, wenn eine Rate, mit welcher die Daten durch einen nachfolgenden
(downstream) GPC 208 akzeptiert werden, der Rate, mit welcher
die Daten durch einen vorgeordneten (upstream) GPC erzeugt werden,
hinterher hinkt.
-
Das
Speicherinterface 214 kann geteilt sein in eine Anzahl,
von Speicherteileinheiten, von denen jede direkt mit einem Teil
des Parallelprozessierspeichers 204 gekoppelt ist, wobei
D ≥ 1. Jeder
Speicherteil besteht allgemein aus einem oder mehreren Speichervorrichtungen
(z. B. DRAM 220). Fachleute werden verstehen, dass das
DRAM 220 ersetzt werden kann mit anderen geeigneten Speichervorrichtungen und
von allgemein konventionellem Design sein kann. Eine detaillierte
Beschreibung wird deshalb weggelassen. Renderziele (engl. render
targets), wie beispielsweise Framepuffer oder Texturkarten können über die
DRAMs 220 gespeichert werden, was den Teileinheiten 215 erlaubt,
Teile von jedem Renderziel parallel zu schreiben, um die verfügbare Bandbreite
des Parallelprozessierspeichers 204 effizient zu nutzen.
-
Jede
der GPCs 208 kann Daten prozessieren, die an irgendeine
der Teileinheiten 215 innerhalb des Parallelprozessierspeichers 204 geschrieben werden
sollen. Die Crossbareinheit 10 ist konfiguriert zum Weiterleiten
der Ausgabe von jedem GPC 208 an den Eingang von einer
Teileinheit 214 oder zu einem anderen GPC 208 zur
weiteren Prozessierung. Die GPCs 208 kommunizieren mit
dem Speicherinterface 214 durch die Crossbareinheit 210 zum
Lesen von oder Schreiben an verschiedene externe Speichervorrichtungen.
In einer Ausführungsform
hat die Crossbareinheit 210 eine Verbindung zu dem Speicherinterface 214 zum
Kommunizieren mit der I/O-Einheit 205, wie auch eine Verbindung
zum lokalen Parallelprozessierspeicher 204, und ermöglicht dadurch
den Prozessierkernen innerhalb der verschiedenen GPCs 208 mit
dem Systemspeicher 104 oder anderem Speicher, der für die PPU 202 nicht
lokal ist, zu kommunizieren. Die Crossbareinheit 210 kann
virtuelle Kanäle
verwenden, zum Separieren der Trafficströme zwischen dem GPCs 208 und
den Teileinheiten 215.
-
Wiederum
können
die GPCs 208 programmiert sein zum Ausführen von Prozessieraufgaben, welche
eine breite Vielzahl von Anwendungen betreffen, einschließlich, aber
nicht hierauf beschränkt,
lineare und nichtlineare Datentranformationen, Filtern von Video-
und/oder Audiodaten, Modellierungsoperationen (z. B. Anwenden von
Gesetzen der Physik zum Bestimmen von Position, Geschwindigkeit
und anderen Attributen von Objekten), Bildrenderingoperationen (z.
B. Kachelungsshader-, Vertexshader-, Geometrieshader- und/oder Pixelshaderprogramme),
und so weiter.
-
PPUs 202 können Daten
von dem Systemspeicher 104 und/oder lokalen Parallelprozessierspeichern 204 in
interne (On-Chip)Speicher transferieren, die Daten prozessieren
und das Ergebnis zurückschreiben
in den Systemspeicher 104 und/oder die lokalen Parallelprozessierspeicher 204,
wo auf solche Daten durch andere Systemkomponenten, einschließlich CPU 102 oder
ein anderes Parallelprozessiersubsystem 112, zugegriffen
werden kann.
-
Eine
PPU 202 kann ausgestattet sein mit irgendeinem Betrag von
lokalen Parallelprozessierspeicher 204, einschließlich keinen
lokalen Speicher, und kann lokalen Speicher und Systemspeicher in
jeder Kombination verwenden. Zum Beispiel kann eine PPU 202 ein
Graphikprozessor in einer Einheitsspeicherarchitektur(unified memory
architecture, UMA)-Ausführungsform
sein. In solchen Ausführungsformen
würde wenig
oder kein dezidierter Graphik(parallellprozessier)speicher bereitgestellt
werden, und die PPU 202 würde ausschließlich oder
fast ausschließlich
Systemspeicher verwenden. In UMA-Ausführungsformen kann eine PPU 202 in
einen Brücken-Chip oder Prozessor-Chip
integriert sein, oder als diskreter Chip mit einem Hochgeschwindigkeitslink
(z. B. PCI-E), welcher die PPU 202 mit dem Systemspeicher über einen
Brücken-Chip oder
andere Kommunikationsmittel verbindet, bereitgestellt sein.
-
Wie
oben erwähnt,
kann jede Anzahl von PPUs 202 in einem Parallelprozessiersubsystem 112 enthalten
sein. Zum Beispiel können
mehrere PPUs 202 auf einer einzigen Add-in-Karte bereitgestellt sein,
oder mehrere Add-in-Karten können
mit dem Kommunikationspfad 113 verbunden sein, oder eine oder
mehrere PPUs 202 können
in einen Brücken-Chip
integriert sein. Die PPUs 202 in einem Multi-PPU-System
können
identisch zu einander oder verschieden voneinander sein. Zum Beispiel könnten verschiedene
PPUs 202 verschiedene Anzahlen von Prozessierkernen, verschiedene
Menge an lokalem Parallelprozessierspeicher, usw. aufweisen. Wo
mehrere PPUs 202 vorhanden sind, können diese PPUs parallel betrieben
sein zum Prozessieren von Daten mit einem höheren Durchsatz als es mit
einer einzigen PPU 202 möglich wäre. Systeme, welche eine oder
mehrere PPUs 202 enthalten, können implementiert sein in
einer Vielzahl von Konfigurationen und Formfaktoren, einschließlich Desktop,
Laptop oder Handheld-Personalcomputer, Server, Workstations, Spielkonsolen,
eingebetteten Systemen (embedded systems) und dergleichen.
-
Prozessierclusterarray-Überblick
-
3A ist
ein Blockdiagramm eines GPC 208 innerhalb einer der PPUs 202 von 2,
gemäß einer
Ausführungsform
der vorliegenden Erfindung. Jeder GPC 208 kann konfiguriert
sein zum parallelen Ausführen
einer großen
Anzahl von Threads, wobei der Begriff „Thread” sich auf eine Instanz eines
bestimmten Programms bezieht, welches auf einem bestimmten Satz
von Eingangsdaten abläuft.
In einigen Ausführungsformen
werden Einzelinstruktions-, Mehrfachdaten-(SIMD)Instruktions-Herausgabetechniken
verwendet zum Unterstützen
von paralleler Ausführung
einer großen
Anzahl von Threads ohne mehrere unabhängige Instruktionseinheiten
bereitzustellen. In anderen Ausführungsformen
werden Einzelinstruktions-, Mehrfach-Thread(single instruction, multiple
thread (SIMT))-Techniken verwendet zum Unterstützen von paralleler Ausführung einer
großen Anzahl
von allgemein synchronisierten Threads unter Verwendung einer gemeinsamen
Instruktionseinheit, die konfiguriert ist zum Herausgeben von Instruktionen
an einen Satz von Prozessierengines innerhalb jedes einzelnen der
GPCs 208. Im Unterschied zu einem SIMD-Ausführungsregime,
wo alle Prozessierengines typischerweise identische Instruktionen
ausführen,
erlaubt SIMT eine Ausführung
verschiedener Threads, um leichter divergenten Ausführungspfaden
durch ein gegebenes Threadprogramm zu folgen. Fachleute werden verstehen,
dass ein SIMD-Prozessierregime eine funktionale Untermenge eines
SIMT-Prozessierregimes
repräsentiert.
-
In
Graphikanwendungen kann eine GPCs 208 konfiguriert sein,
um eine Grundformengine (engl. primitive engine) zum Durchführen von
Bildschirmraumgraphikprozessierfunktionen, die ein Grundformsetup,
Rasterung und z-Culling enthalten können, hierauf aber nicht beschränkt sind,
zu enthalten. Wie in 3A dargestellt, empfängt eine
Setup-Einheit 302 Instruktionen zum Prozessieren von Graphikgrundformen
und liest Graphikgrundformparameter von Puffern. Die Puffer können in
L1-Caches 315, Teileinheiten (partition units) 215 oder
PP-Speicher 204 gespeichert sein. Eine Raster/z-Cull-Einheit 303 empfängt die
Graphikgrundformparameter und rastert Grundformen, die Pixel schneiden,
die der Raster/z-Cull-Einheit 304 zugeordnet sind. Jedes
Pixel ist nur einer der Raster/z-Cull-Einheiten 303 zugeordnet,
und so werden Teile von Graphikgrundformen, die Pixel schneiden,
die nicht der Raster/z-Cull-Einheit 303 zugeordnet sind,
verworfen. Die Raster/z-Cull-Einheit 303 führt auch
z-Culling durch, zum Entfernen von Teilen von Graphikgrundformen,
die nicht sichtbar sind. Eine z-preROP-Einheit 304 führt Adressumsetzungen
zum Zugreifen auf z-Daten durch und unterstützt ein Anfordern von z-Daten
basierend auf verschiedenen z-Prozessiermoden.
-
Die
Operation des GPC 208 wird vorteilhafterweise gesteuert über einen
Pipelinemanager 305, welcher Prozessieraufgaben, die von
der Arbeitsverteilungseinheit 200 (über die Setup-Einheit 302,
die Raster/z-Cull- Einheit 303 und
die zpreROP-Einheit 304) empfangen werden, an Streaming-Multiprozessor-Einheiten
(streaming multiprocessor units, SMUs) 310 verteilt. Der
Pipelinemanager 305 kann auch konfiguriert sein zum Steuern
einer Arbeitsverteilungscrossbar 330 durch Spezifizieren
von Zielen für
prozessierte Daten, die von den SMUs 310 ausgegeben werden.
-
In
einer Ausführungsform
enthält
jede GPC 208 eine Anzahl M von SMUs 310, wobei
M ≥ 1, wobei
jede SMU 310 konfiguriert ist zum Prozessieren von einer
oder mehreren Thread-Gruppen. Auch enthält jede SMU 310 vorteilhafterweise
einen identischen Satz von funktionalen Einheiten (z. B. arithmetischen
Logikeinheiten, etc.), die gepipelined werden können, was erlaubt, dass eine
neue Instruktion ausgegeben wird, bevor eine vorherige Instruktion
abgeschlossen wurde, wie diese im Stand der Technik bekannt ist.
Jede Kombination von funktionalen Einheiten kann bereitgestellt
sein. In einer Ausführungsform
unterstützen
die funktionalen Einheiten eine Vielzahl von Operationen einschließlich Ganzzahl- und
Gleitkomma-Arithmetik (z. B. Addition und Multiplikation), Vergleichsoperationen,
Bool'sche-Operationen
(AND, OR, XOR), Bit-Schieben und Berechnen von verschiedenen algebraischen
Funktionen (z. B. planare Interpolation, trigonometrische, exponentielle,
und logarithmische Funktionen, etc.); und dieselbe Funktionaleinheit-Hardware
kann wirksam eingesetzt werden zum Durchführen von verschiedenen Operationen.
-
Die
Folge von Instruktionen, die an einen bestimmten GPC 208 gesendet
werden, bildet einen Thread, wie vorstehend hierin definiert, und
die Ansammlung einer bestimmten Anzahl von gleichzeitig ablaufenden
Threads über
die Parallelprozessierengines (nicht dargestellt) innerhalb einer
SMU 310, wird hierin als eine „Thread-Gruppe” bezeichnet.
Wie hierin verwendet, bezieht sich eine „Thread-Gruppe” auf eine
Gruppe von Threads, welche gleichzeitig dasselbe Programm auf verschiedenen
Eingangsdaten ausführen,
wobei jeder Thread der Gruppe einer anderen Prozessierengine innerhalb
einer SMU 310 zugeordnet ist. Eine Thread-Gruppe kann weniger Threads
als die Anzahl der Prozessierengines innerhalb der SMU 310 enthalten,
in welchem Fall einige Prozessiereinheiten während Zyklen im Leerlauf sind,
wenn diese Thread-Gruppe
prozessiert wird. Eine Thread-Gruppe kann auch mehr Threads als
die Anzahl der Prozessierengines innerhalb der SMU 310 enthalten,
in welchem Fall das Prozessieren über mehrere Taktzyklen stattfinden
wird. Da jede SMU 310 bis zu G-Thread-Gruppen gleichzeitig
unterstützen
kann, folgt, dass bis zu G × M-Thread-Gruppen
in der GPC 208 zu einem gegebenen Zeitpunkt ablaufen können.
-
Zusätzlich kann
eine Mehrzahl von in Beziehung stehenden Thread-Gruppen zur selben
Zeit innerhalb einer SMU 310 aktiv sein (in verschiedenen Phasen
der Ausführung).
Diese Ansammlung von Thread-Gruppen wird hierin als ein „kooperatives Threadarray” (cooperative
thread array, „CTA”) bezeichnet.
Die Größe eines
bestimmten CTA ist gleich m × k,
wobei k die Anzahl an gleichzeitig ablaufenden Threads in einer
Thread-Gruppe ist und typischerweise ein ganzzahliges Vielfaches
der Anzahl von Parallelprozessierengines innerhalb der SMU 310 ist, und
m die Anzahl von Thread-Gruppen ist, die gleichzeitig innerhalb
der SMU 310 aktiv sind. Die Größe eines CTA wird allgemein
bestimmt durch den Programmierer und die Menge an Hardware-Ressourcen,
wie beispielsweise Speicher oder Register, die dem CTA zur Verfügung stehen.
-
Ein
exklusiver lokaler Adressraum ist für jeden Thread verfügbar und
ein geteilter pro-CTA-Adressraum wird verwendet zum Übertragen
von Daten zwischen Threads innerhalb eines CTA. Daten, die in dem
pro-Thread-Lokaladressraum und
dem proCTA-Adressraum gespeichert sind, werden in dem L1-Cache 320 gespeichert
und eine Räumungsrichtlinie
kann verwendet werden, um ein Halten der Daten in dem L1-Cache 320 zu
begünstigen. Jede
SMU 310 verwendet Platz in einem korrespondierenden L1-Cache 320,
der verwendet wird zum Durchführen
von Lade- und Speicheroperationen. Jede SMU 310 hat auch
Zugriff auf L2-Caches innerhalb der Teileinheiten 215,
die unter allen GPCs 208 geteilt werden und verwendet werden
können
zum Transferieren von Daten zwischen Threads. Schließlich haben
die SMUs 310 auch Zugriff auf einen Off-Chip-„Global”-Speicher,
welcher z. B. den Parallelprozessierspeicher 204 und/oder
den Systemspeicher 104 enthalten kann. Ein L2-Cache kann
verwendet werden zum Speichern von Daten, die in den globalen Speicher
geschrieben werden oder hiervon gelesen werden. Es sollte sich verstehen,
dass jeder Speicher, der zu der PPU 202 extern ist, als
globaler Speicher verwendet werden kann.
-
In
Graphikanwendungen kann ein GPC 208 konfiguriert sein,
so dass jede SMU 310 mit einer Textureinheit 315 zum
Durchführen
von Texturabbildungsoperationen, z. B. Bestimmen von Texturprobenpositionen,
Lesen von Texturdaten, und Filtern der Texturdaten, gekoppelt ist.
Texturdaten werden über
das Speicherinterface 214 und werden von einem L2-Cache,
dem Parallelprozessierspeicher 204 oder dem Systemspeicher 104 abgeholt,
wenn sie benötigt
werden. Die Textureinheit 315 kann konfiguriert sein zum
Speichern der Texturdaten in einem internen Cache. In einigen Ausführungsformen
ist die Textureinheit 315 an den L1-Cache 320 gekoppelt und
Texturdaten sind in dem L1-Cache 320 gespeichert. Jede
SMU 310 gibt prozessierte Aufgaben an die Arbeitsverteilungscrossbar 330 aus,
zum Bereitstellen der prozessierten Aufgaben an eine andere GPC 208 zur
weiteren Prozessierung oder zum Speichern der prozessierten Aufgabe
in einem L2-Cache, einem
Parallelprozessierspeicher 204 oder einem Systemspeicher 104 über die
Crossbareinheit 210. Ein preROP(Vor-Rasteroperationen,
engl. preraster operations) 325 ist konfiguriert zum Empfangen
von Daten von dem SMU 310, Richten von Daten an ROP-Einheiten
innerhalb der Teileinheiten 215 und Durchführen von
Optimierungen für
Farbmischen, Organisieren von Pixelfarbdaten und Durchführen von
Adressumsetzungen.
-
Es
wird verstanden werden, dass die Kernarchitektur, wie sie hierin
beschrieben ist, illustrativ ist und dass Variationen und Modifikationen
möglich sind.
Jede Anzahl von Prozessierengines, z. B. SMUs 310, Textureinheiten 315 oder
preROPs 325 können
innerhalb einer GPC 208 enthalten sein. Ferner, während nur
eine GPC 208 dargestellt ist, kann eine PPU 202 jede
Anzahl von GPCs 208 enthalten, die vorteilhafterweise funktional ähnlich zueinander sind,
so dass das Ausführungsverhalten
nicht davon abhängt,
welcher GPC 208 eine bestimmte Prozessieraufgabe empfängt. Ferner
arbeitet jeder GPC 208 vorteilhafterweise unabhängig von
anderen GPCs 208 unter Verwendung von separaten und individuellen
Prozessierengines, L1-Caches 320, usw.
-
3B ist
ein Blockdiagramm einer Teileinheit 215 innerhalb einer
der PPUs 202 von 2, gemäß einer
Ausführungsform
der vorliegenden Erfindung. Wie dargestellt umfasst die Teileinheit 215 einen
L2-Cache 350, einen Framepuffer (frame buffer, FB) 355 und
eine Rasteroperationseinheit (ROP) 360. Der L2-Cache 350 ist
ein Lese/Schreib-Cache, welcher konfiguriert ist zum Durchführen von
Lade- und Speicheroperationen, die von der Crossbareinheit 210 und
dem ROP 360 empfangen werden. Lesefehler und dringende
Zurückschreibanfragen
werden von dem L2-Cache 350 an den FB 355 zur
Prozessierung ausgegeben. Schmutzige Updates (engl. dirty updates)
werden ebenfalls an den FB 355 zum opportunistischen Ausführen gesendet.
Der FB 355 koppelt direkt an den Parallelprozessierspeicher 204, ausgebend
Lese- und Schreibanfragen
und empfangend Daten, welche von dem Parallelprozessierspeicher 204 gelesen
wurden.
-
In
Graphikanwendungen ist der ROP 360 eine Prozessiereinheit,
die Rasteroperationen durchführt,
wie beispielsweise Schablonieren, z-Testen, Mischen (engl. bending)
und dergleichen, und Pixeldaten als prozessierte Graphikdaten zum
Speichern in einem Graphikspeicher ausgibt. In einigen Ausführungsformen
der vorliegenden Erfindung, ist der ROP 360 innerhalb jedes
GPC 208 enthalten anstelle von jeder Teileinheit 215,
und Pixellesungen und -schreibungen werden über die Crossbareinheit 210 anstelle
von Pixelfragment übertragen.
-
Die
prozessierten Graphikdaten können
auf einer Anzeigevorrichtung 110 angezeigt werden oder zum
weiteren Prozessieren durch die CPU 102 oder durch eine
der Prozessieridentitäten
innerhalb des Parallelprozessiersubsystems 112 weitergeleitet
(geroutet) werden. Jede Teileinheit 215 enthält einen ROP 360 zum
Verteilen des Prozessierens der Rasteroperationen. In einigen Ausführungsformen
kann der ROP 360 konfiguriert sein zum Komprimieren von z-
oder Farbdaten, die in einen Speicher geschrieben werden und zum
Dekomprimieren von z- oder Farbdaten, die von einem Speicher gelesen
werden.
-
Fachleute
werden verstehen, dass die in den 1, 2, 3A und 3B beschriebene
Architektur in keiner Weise den Umfang der vorliegenden Erfindung
limitiert und dass die hierin gelehrten Techniken implementiert
werden können
auf jeder geeignet konfigurierten Prozessiereinheit, einschließlich, ohne
Beschränkung,
einer oder mehreren CPUs, einer oder mehreren Mehrfachkern-CPUs, einer
oder mehreren PPUs 202, einer oder mehreren GPCs 208,
einer oder mehreren Graphik- oder Spezialprozessiereinheiten, oder
dergleichen, ohne von dem Umfang der vorliegenden Erfindung abzuweichen.
-
Graphikpipeline-Architektur
-
4 ist
ein Konzeptdiagramm einer Graphikprozessierpipeline 400,
wobei eine oder mehrere der PPUs 202 von 2 konfiguriert
werden können, um
diese zu implementieren, gemäß einer
Ausführungsform
der vorliegenden Erfindung. Zum Beispiel kann eine der SMUs 310 konfiguriert
sein zum Durchführen
der Funktionen von einer oder mehreren einer Vertexprozessiereinheit 415,
einer Geometrieprozessiereinheit 425 und einer Fragmentprozessiereinheit 460.
Die Funktionen von Datenassembler 410, Grundformassembler 420,
Rastervorrichtung 455 und Rasteroperationseinheit 465 kann
auch durch andere Prozessierengines innerhalb einer GPC 208 und
einer entsprechenden Teileinheit 215 durchgeführt werden.
Alternativ kann die Graphikprozessierpipeline 400 implementiert
werden unter Verwendung von dezidierten Prozessiereinheiten für eine oder
mehrere Funktionen.
-
Die
Datenassembler-410-Prozessiereinheit sammelt Vertexdaten
für Oberflächen höherer Ordnung,
Grundformen, und dergleichen, und gibt die Vertexdaten, einschließlich der
Vertexattribute, an die Vertexprozessiereinheit 415 aus.
Die Vertexprozessiereinheit 415 ist eine programmierbare
Ausführungseinheit,
die konfiguriert ist zum Ausführen
von Vertexshaderprogrammen, die Vertexdaten beleuchten und transformieren,
wie durch die Vertexshaderprogramme spezifiziert ist. Zum Beispiel
kann die Vertexprozessiereinheit 415 programmiert sein
zum Transformieren der Vertexdaten von einer objektbasierten Koordinaten-Darstellung
(Objektraum) in ein alternativ basiertes Koordinatensystem, wie
beispielsweise ein Benutzerkoordinatensystem (engl. world space)
oder einen normierten Vorrichtungskoordinaten(engl. normalized device
coordinates, NDC)-Raum. Die Vertexprozessiereinheit 415 kann
mittels des Datenassemblers 410 zur Verwendung in dem Prozessieren
der Vertexdaten Daten lesen, die in dem L1-Cache 320, dem Parallelprozessierspeicher 204 oder
dem Systemspeicher 104 gespeichert sind.
-
Der
Grundformassembler 420 empfängt Vertexattribute von der
Vertexprozessiereinheit 415, liest gespeicherte Vertexattribute
wenn benötigt
und konstruiert Graphikgrundformen zum Prozessieren durch die Geometrieprozessiereinheit 425.
Graphikgrundformen schließen
Dreiecke, Liniensegmente, Punkte, und dergleichen ein. Die Geometrieprozessiereinheit 425 ist
eine programmierbare Ausführungseinheit,
die konfiguriert ist zum Ausführen
von Geometrieshaderprogrammen, welche Graphikgrundformen, die von
dem Grundformassembler 420 empfangen werden, transformieren
wie durch die Geometrieshaderprogramme spezifiziert ist. Zum Beispiel
kann die Geometrieprozessiereinheit 425 programmiert sein
zum Unterteilen der Graphikgrundformen in eine oder mehrere neue
Graphikgrundformen und zum Berechnen von Parametern, wie beispielsweise
Ebenengleichungskoeffizienten, die zum Rastern der neuen Graphikgrundformen
verwendet werden.
-
In
einigen Ausführungsformen
kann die Geometrieprozessiereinheit 425 auch Elemente in
dem Geometriedatenstrom (engl. geometry stream) hinzufügen oder
löschen.
Die Geometrieprozessiereinheit 425 gibt die Parameter und
die Vertices, welche die neuen Graphikgrundformen spezifizieren,
an eine Darstellungsfeldskalierungs-, Cull- und Clip-Einheit 450 aus.
Die Geometrieprozessiereinheit 425 kann Daten lesen, die
in dem Parallelprozessierspeicher 204 oder dem Systemspeicher 104 zur
Verwendung in dem Prozessieren der Geometriedaten gespeichert sind.
Darstellungsfeldskalierungs-, Cull- und Clip-Einheit 450 führt ein
Beschneiden, Culling und eine Darstellungsfeldsskalierung (engl.
viewport scaling) durch und gibt prozessierte Graphikgrundformen
an eine Rastervorrichtung 455 aus.
-
Ein
Rasterer-455-Scan konvertiert die neuen Graphikgrundformen
und gibt Fragmente und Bedeckungsdaten an die Fragmentprozessiereinheit 460 aus.
Zusätzlich
kann die Rastervorrichtung konfiguriert sein zum Durchführen von
z-Culling und anderen z-basierten Optimierungen. Die Fragmentprozessiereinheit 460 ist
eine programmierbare Ausführungseinheit,
die konfiguriert ist zum Ausführen
von Fragmentshaderprogrammen, welche Fragmente, die von der Rastervorrichtung 455 empfangen
werden, transformiert, wie in den Fragmentshaderprogrammen angegeben.
Zum Beispiel kann die Fragmentprozessiereinheit 460 programmiert
sein zum Durchführen von
Operationen, wie beispielsweise Perspektivenkorrektur, Texturabbildung,
Shading, Blending, und dergleichen, zum Erzeugen von geshadeten
Fragmenten, die an eine Rasteroperationseinheit 465 ausgegeben
werden. Die Fragmentprozessiereinheit 460 kann Daten lesen,
die in dem Parallelprozessierspeicher 204 oder dem Systemspeicher 104 zur
Verwendung im Prozessieren der Fragmentdaten gespeichert sind. Fragmente
können
auf Pixel-, Proben- oder anderer Granularität geshadet werden, abhängig von
der programmierten Abtastrate.
-
Die
Rasteroperationseinheit 465 ist eine Prozessiereinheit,
die Rasteroperationen durchführt,
beispielsweise Schablonieren, z-Testen, Vermischen (blending) und
dergleichen, und Pixeldaten als prozessierte Graphikdaten zum Speichern
in einem Graphikspeicher ausgibt. Die prozessierten Graphikdaten
können
in dem Graphikspeicher gespeichert werden, z. B. dem Parallelprozessierspeicher 204 und/oder
dem Systemspeicher 104, zur Anzeige auf der Anzeigevorrichtung 110 oder
zur weiteren Prozessierung durch die CPU 102 oder das Parallelprozessiersubsystem 112.
In einigen Ausführungsformen
der vorliegenden Erfindung, ist die Rasteroperationseinheit 465 konfiguriert
zum Komprimieren von z- oder Farbdaten, die in einen Speicher geschrieben werden,
und zum Dekomprimieren von z- oder Farbdaten, die von dem Speicher
gelesen werden.
-
Einzeldurchgangskachelung
-
Um
eine Kachelung in einem einzigen Durchlauf durchzuführen, ist
ein erster Teil von SMUs 310 konfiguriert zum Ausführen von
Kachelungssteuershaderprogrammen und zweiter Teil von SMUs 310 ist
konfiguriert zum Ausführen
von Kachelungsberechnungsshaderprogrammen. Der erste Teil von SMUs 310 empfängt Oberflächenpatchbeschreibungen
und gibt Graphikgrundformen wie beispielsweise kubische Dreiecksgrundformen,
die durch zehn Kontrollpunkte definiert sind, und Kachelungsparameter wie beispielsweise
Detailniveauwerte aus. Graphikgrundformen und Kachelungsparameter
werden von einer SMU 310 zu einer anderen durch den L1-Cache 320 und
die Arbeitsverteilungscrossbar 330 weitergeleitet, anstatt
in dem PP-Speicher 204 gespeichert zu werden. Deshalb wird
die Kachelung eines Oberflächenpatches
in einem einzigen ununterbrochenen Durchlauf durch die GPC 208 abgeschlossen,
ohne Speichern von Zwischendaten in dem L2-Cache 350 oder
dem PP-Speicher 204. Zusätzlich liefert ein Anwendungsprogramm
oder ein Gerätetreiber 103 die Oberflächenpatchbeschreibung
und rekonfiguriert nicht Teile der GPC 208 während dem
Kachelungsprozessieren.
-
Die
Anzahl von SMUs 310 in dem ersten Teil kann gleich, größer oder
kleiner sein als die Anzahl von SMUs 310 in dem zweiten
Teil. Wichtig ist, dass die Anzahl von SMUs 310 in dem
ersten und zweiten Teilen massgeschneidert sein kann, um der Prozessierlast
zu entsprechen. Die Anzahl von Vertices, welche von einem einzigen
Oberflächenpatch
erzeugt wird, variiert mit dem berechneten Kachelungsdetailniveau.
Folglich kann eine einzige SMP 310 in dem ersten Teil von
SMUs 310 „Arbeit” für mehrere SMPs 310 in
dem zweiten Teil von SMUs 310 erzeugen, da die Ausführung eines
Kachelungssteuershaderprogramms zu einer Datenexpansion führen kann.
-
5A ist
ein Flussdiagramm von Verfahrensschritten zum Durchführen einer
Kachelung in einem einzigen Durchgang, gemäß einer Ausführungsform
der vorliegenden Erfindung. In Schritt 510 konfiguriert
der Gerätetreiber 103 einen
ersten Satz von SMUs 310 für eine Kachelungssteuershaderprogrammausführung. Ein
Kachelungssteuershaderprogramm kann einen Wechsel der Basis eines
Steuerpunktes, eine Berechnung von Kachelungsdetailniveausparametern
oder dergleichen durchführen,
und wird einmal für
jeden Oberflächenpatch
ausgeführt. Ein
Wechsel der Basis eines Patches tritt auf, wenn ein Kachelungssteuershaderprogramm
einen Patch (Satz von Kontrollpunkten) eingibt und einen anderen Patch
(einen anderen Satz von Kontrollpunkten) ausgibt, wobei die Anzahl
von Kontrollpunkten zwischen dem Eingabepatch und dem Ausgabepatch
abweicht. Im Schritt 520 konfiguriert der Gerätetreiber 103 einen
zweiten Satz von SMUs 310 für eine Kachelungsberechnungsprogrammausführung. Ein
Kachelungsberechnungssteuershaderprogramm kann eine Endposition
und Attribute von jedem Vertex berechnen basierend auf den Patchgrundformkontrollpunkten,
einer parametrischen (u, v) Position für jeden Vertex, Verschiebungskarten
und dergleichen, und wird einmal für jeden Ausgabe-Vertex ausgeführt.
-
In
Schritt 520 konfiguriert der Gerätetreiber 103 SMUs 310 in
einen ersten Satz und einen zweiten Satz und lädt die Kachelungssteuershader-
und Kachelungsberechnungsshaderprogramme herunter, die von den GPCs 208 ausgeführt werden
zum Prozessieren der Oberflächendaten
und Erzeugen der Ausgabevertices. In Schritt 530 führen die
SMUs 310 in dem ersten Satz von SMUs 310 das Kachelungssteuershaderprogramm
aus zum Erzeugen von Graphikgrundformen, z. B., Kontrollpunkten
für Graphikgrundformen
wie beispielsweise kubische Dreiecke.
-
In
Schritt 540 werden Vertices der Graphikgrundformen, die
von dem ersten Satz von SMUs 310 ausgegeben werden, auf
die Eingänge
des zweiten Satzes von SMUs 310 verteilt. In Schritt 545 führen die
SMUs 310 in dem zweiten Satz von SMUs 310 das
Kachelungsberechnungsshaderprogramm aus, zum Erzeugen von Ausgabevertices.
Man beachte, dass für
verschiedene Vertices, die Schritte 530, 540 und 545 zu
verschiedenen Zeiten auftreten. Folglich, wenn die Graphikgrundformen,
die von den SMUs 310 in dem ersten Satz ausgegeben werden, beginnen
die SMUs 310 in dem zweiten Satz mit der Ausführung des
Kachelungsberechnungsprogramms zum Erzeugen der Ausgabevertices.
Da die SMUs 310 konfiguriert sind, zum Prozessieren der
Oberflächenpatches
in einem einzigen Durchlauf, wird der Gerätetreiber 103 nicht
benötigt
zum Rekonfigurieren von SMUs 310 zum Durchführen von
verschiedenen Operationen während
der Kachelungsoperationen.
-
5B ist
ein Blockdiagramm von GPC 208, welcher konfiguriert ist
zum Durchführen
einer Kachelung in einem einzigen Durchlauf, gemäß einer Ausführungsform
der vorliegenden Erfindung. Ein erster Satz 550 ist ein
erster Satz von SMUs 310, der konfiguriert ist zum Ausführen von
Kachelungssteuershaderprogrammen. Ein zweiter Satz 560 ist
ein zweiter Satz von SMUs 310, der konfiguriert ist zum Ausführen von
Kachelungsberechnungsshaderprogrammen. Der erste Satz 550,
die Arbeitungsverteilungscrossbar 330 und der zweite Satz 560 können konfiguriert
sein zum Durchführen
der Schritte 530, 540 und 545 von 5A.
Die Arbeitsverteilungscrossbar 330 ist konfiguriert zum
Verbinden von jedem SMU 310 in dem ersten Satz 550 mit
jedem SMU 310 in dem zweiten Satz 560.
-
Oberflächendaten 555,
welche die Oberflächenpatches
repräsentieren,
können
in dem L1-Cache 320 gespeichert werden, wie in 5B dargestellt,
und von dem ersten Satz 550 gelesen werden. Der Pipelinemanager 305 kann
konfiguriert sein zum Bereitstellen von Orten von Oberflächendaten 555 an jede
SMU 310 in dem ersten Satz 550 zum Verteilen der
Oberflächenpatches
für ein
Prozessieren. Kachelungsdaten 570, welche die Graphikgrundformen
repräsentieren,
die von dem ersten Satz 550 ausgegeben werden, können in
dem L1-Cache 320 gespeichert sein. Der Pipelinemanager 305 liefert
Arbeitsverteilungscrossbar-330-Weiterleitungsinformation, die
benötigt
wird zum Verteilen der Graphikgrundformvertices an die Eingänge der
SMUs 310 in dem zweiten Satz 560. In einigen Ausführungsformen
der vorliegenden Erfindung, wie beispielsweise in der Ausführungsform,
die in 5B dargestellt ist, werden Kachelungsdaten 570 durch
die Arbeitsverteilungscrossbar 330 weitergeleitet (geroutet).
In anderen Ausführungsformen
der vorliegenden Erfindung werden Indizes, welche dem Ort jedes
Graphikgrundform-Vertex entsprechen, durch die Arbeitsverteilungscrossbar 330 weitergeleitet,
zum Verteilen der Kachelungsdaten 570, welche von dem ersten
Satz 550 ausgegeben werden, an die Eingänge des zweiten Satzes 560.
Wichtig ist, dass die Kachelungsdaten 570 in dem L1-Cache 320 oder
in dem L2-Cache 350 gespeichert sind, als vielmehr in dem
PP-Speicher 204 gespeichert zu sein, was die Anzahl an Taktzyklen
reduziert, die benötigt
werden zum Lesen und Schreiben von Kachelungsdaten 570.
-
Wenn
die SMUs 310 in dem ersten Satz 550 Kachelungsdaten 570 schreiben,
lesen die SMUs 310 in dem zweiten Satz 560 Kachelungsdaten 570, so
dass die Speichermenge, die von Kachelungsdaten 570 verbraucht
wird, reduziert ist, um in den L1-Cache 320 oder dem L2-Cache 350 zu
passen. Im Gegensatz hierzu werden in einem konventionellen System,
wenn zwei verschiedene Durchläufe
verwendet werden zum Ausführen
der Programme, alle Daten, welche von dem Kachelungssteuershaderprogramm
für eine
Gruppe von Patches erzeugt werden, in einem Off-Chip-Speicher, z.
B. PP-Speicher 204, gespeichert, bevor die Pipeline konfiguriert
wird zum Ausführen
des Kachelungsberechnungsshaderprogramms und Lesen der Daten. Zusätzlich,
wenn eine konventionelle Zweidurchlauftechnik verwendet wird, ist
die Anzahl von Patches in einer Gruppe typischerweise groß, um die
Frequenz von Pipeline-Rekonfigurationen, die auftreten zum Wechsel
zwischen dem Ausführen
des Kachelungssteuershaderprogramms und des Kachelungsberechnungsshaderprogramms,
zu reduzieren. Die Kachelungsdaten, die durch Prozessieren der größeren Anzahl
von Patches in dem ersten Durchlauf erzeugt werden, erfordern mehr
Speicher als Kachelungsdaten 570, und werden deshalb in
dem Off-Chip-Speicher gespeichert.
-
Wie
in Verbindung mit 5A und 5B beschrieben,
wird eine Kachelung einer Oberflächenpatchbeschreibung
in einem einzigen ununterbrochenen Durchlauf durch den GPC 208 ohne
das Speichern von Zwischendaten in dem PP-Speicher 204 absolviert. Zusätzlich liefert
ein Anwendungsprogramm oder Gerätetreiber 103 die
Oberflächenpatchbeschreibung
und rekonfiguriert nicht Teile des GPC 208 während dem
Kachelungsprozessieren. Ein Anwendungsprogrammierer kann vorteilhafterweise
die PPU 202 als eine einzige Kachelungspipeline sehen,
die automatisch konfiguriert wird zum Prozessieren von Oberflächen in
einem einzigen Durchlauf.
-
Eine
Ausführungsform
der Erfindung kann implementiert werden als Programmprodukt zur
Verwendung mit einem Computersystem. Das (die) Programm(e) des Programmprodukts
definieren Funktionen der Ausführungsform
(einschließlich
der hierin beschriebenen Verfahren) und können auf einer Vielzahl von
computerlesbaren Speichermedien enthalten sein. Anschauliche computerlesbare
Speichermedien umfassen, ohne jedoch hierauf beschränkt zu sein:
(i) nichtbeschreibbare Speichermedien (z. B., Nur-Lesespeichervorrichtungen
innerhalb eines Computers wie beispielsweise CD-ROM-Disks, die von einem CD-ROM-Laufwerk
lesbar sind, Flashspeicher, ROM-Chips
oder jeder Typ von Festkörper-nichtflüchtigem-Halbleiterspeicher),
auf welchen Informationen permanent gespeichert ist; und (ii) schreibbare
Speichermedien (z. B. Floppydisks innerhalb eines Diskettenlaufwerks
oder eines Festplattenlaufwerks, oder jeder Typ von Festkörperdirektzugriffs(random-access)Halbleiterspeicher),
auf welchem veränderbare
Informationen gespeichert sind.
-
Die
Erfindung wurde oben beschrieben mit Bezug auf spezifische Ausführungsformen.
Fachleute werden jedoch verstehen, dass verschiedene Modifikationen
und Veränderungen
hieran durchgeführt werden
können,
ohne von dem breiteren Geist und dem Umfang der Erfindung, wie er
in den anhängenden
Ansprüchen
vorgetragen ist, abzuweichen. Die vorstehende Beschreibung und die
Zeichnungen sind entsprechend in einem illustrativen anstatt in
einem restriktiven Sinne zu sehen.