DE102009039231A1 - Einzeldurchgang-Kachelung - Google Patents

Einzeldurchgang-Kachelung Download PDF

Info

Publication number
DE102009039231A1
DE102009039231A1 DE102009039231A DE102009039231A DE102009039231A1 DE 102009039231 A1 DE102009039231 A1 DE 102009039231A1 DE 102009039231 A DE102009039231 A DE 102009039231A DE 102009039231 A DE102009039231 A DE 102009039231A DE 102009039231 A1 DE102009039231 A1 DE 102009039231A1
Authority
DE
Germany
Prior art keywords
tiling
processing
processing units
memory
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE102009039231A
Other languages
English (en)
Other versions
DE102009039231B4 (de
Inventor
Justin S. Sunnyvale Legakis
Emmett M. San Jose Kilgariff
Henry Packard Woodside Moreton
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102009039231A1 publication Critical patent/DE102009039231A1/de
Application granted granted Critical
Publication of DE102009039231B4 publication Critical patent/DE102009039231B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Geometry (AREA)
  • Multimedia (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)
  • Multi Processors (AREA)

Abstract

Ein System und ein Verfahren zum Durchführen einer Kachelung in einem einzigen Durchlauf durch einen Graphikprozessor teilt 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 in einem einzigen ununterbrochenen Durchlauf durch den Graphikprozessor ohne Speichern von Zwischendaten in einem Speicher absolviert.

Description

  • 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.

Claims (10)

  1. Verfahren zum Durchführen einer Kachelung in einem einzigen Durchlauf durch einen Graphikprozessor, das Verfahren enthaltend: Konfigurieren eines ersten Satzes von Prozessiereinheiten des Graphikprozessors zum Ausführen eines Kachelungssteuershaders zum Prozessieren von Oberflächenpatches und Erzeugen einer Graphikgrundform, welche mehrere Vertices aufweist; Konfigurieren eines zweiten Satzes der Prozessiereinheiten innerhalb des Graphikprozessors zum Ausführen eines Kachelungsberechnungsshaders zum Prozessieren von einem der mehreren Vertices; und Ausführen des Kachelungssteuershaders und des Kachelungsberechnungsshaders 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.
  2. Verfahren nach Anspruch 1, ferner enthaltend den Schritt des Verteilens der mehreren Vertices, die von dem ersten Satz der Prozessiereinheiten ausgegeben werden, auf Eingänge des zweiten Satzes der Prozessiereinheiten.
  3. Verfahren nach Anspruch 2, wobei der Schritt des Verteilens ein Weiterleiten von Indizes, welche einem Ort entsprechen, der jeden der mehreren Vertices speichert, von dem ersten Satz der Prozessiereinheiten zu Eingängen des zweiten Satzes der Prozessiereinheiten.
  4. Verfahren nach Anspruch 1, wobei der Kachelungssteuershader für jeden einen der Oberflächenpatches ein einziges Mal ausgeführt wird zum Berechnen eines Niveaus von Detailparametern für den einen Oberflächenpatch.
  5. Verfahren nach Anspruch 1, wobei der Kachelungsberechnungsshader für jeden einen der mehreren Vertices ein einziges Mal ausgeführt wird zum Berechnen einer Endposition und Attributen des einen Vertex.
  6. Verfahren nach Anspruch 1, wobei jede der Prozessiereinheiten den Kachelungssteuershader oder den Kachelungsberechnungsshader ausführt unabhängig von den anderen Prozessiereinheiten.
  7. System zum Durchführen einer Kachelung in einem einzigen Durchlauf, enthaltend: einen Graphikprozessor enthaltend: einen ersten Satz von Prozessiereinheiten, die konfiguriert sind zum Ausführen eines Kachelungssteuershaders zum Prozessieren von Oberflächenpatches und Erzeugen einer Graphikgrundform, welche mehrere Vertices aufweist; einen zweiten Satz von Prozessiereinheiten, die konfiguriert sind zum Ausführen eines Kachelungsberechnungsshaders zum jeweils Prozessieren von einem der mehreren Vertices; und einen Crossbarverbinder, welche mit dem ersten Satz von Prozessiereinheiten und dem zweiten Satz von Prozessiereinheiten gekoppelt ist und konfiguriert ist zum Liefern der mehreren Vertices, die von dem ersten Satz von Prozessiereinheiten ausgegeben werden, an Eingänge des zweiten Satzes der Prozessiereinheiten.
  8. Das System nach Anspruch 7, wobei der Kachelungssteuershader für jeden einen der Oberflächenpatches ein einziges Mal ausgeführt wird zum Berechnen von Detailniveauparametern für den einen Oberflächenpatch.
  9. System nach Anspruch 7, wobei der Kachelungsberechnungsshader für jeden einen der mehreren Vertices ein einziges Mal ausgeführt wird zum Berechnen einer Endposition und Attributen des einen Vertex.
  10. System nach Anspruch 7, wobei die Prozessiereinheiten konfiguriert sind zum Ausführen des Kachelungssteuershaders und des Kachelungsberechnungsshaders zum Kacheln der Oberflächenpatches in einem einzigen Durchlauf.
DE102009039231.9A 2008-09-29 2009-08-28 Einzeldurchgang-Kachelung Active DE102009039231B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/240,382 US20100079454A1 (en) 2008-09-29 2008-09-29 Single Pass Tessellation
US12/240,382 2008-09-29

Publications (2)

Publication Number Publication Date
DE102009039231A1 true DE102009039231A1 (de) 2010-04-29
DE102009039231B4 DE102009039231B4 (de) 2020-06-25

Family

ID=41171988

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102009039231.9A Active DE102009039231B4 (de) 2008-09-29 2009-08-28 Einzeldurchgang-Kachelung

Country Status (7)

Country Link
US (1) US20100079454A1 (de)
JP (1) JP5303787B2 (de)
KR (1) KR101091374B1 (de)
CN (1) CN101714247B (de)
DE (1) DE102009039231B4 (de)
GB (1) GB2463763B (de)
TW (1) TWI417806B (de)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0818277D0 (en) * 2008-10-06 2008-11-12 Advanced Risc Mach Ltd Graphics processing system
US8131931B1 (en) * 2008-10-22 2012-03-06 Nvidia Corporation Configurable cache occupancy policy
US8868838B1 (en) 2008-11-21 2014-10-21 Nvidia Corporation Multi-class data cache policies
US20100164954A1 (en) * 2008-12-31 2010-07-01 Sathe Rahul P Tessellator Whose Tessellation Time Grows Linearly with the Amount of Tessellation
US9436969B2 (en) * 2009-10-05 2016-09-06 Nvidia Corporation Time slice processing of tessellation and geometry shaders
US20120017062A1 (en) * 2010-07-19 2012-01-19 Advanced Micro Devices, Inc. Data Processing Using On-Chip Memory In Multiple Processing Units
US9804995B2 (en) * 2011-01-14 2017-10-31 Qualcomm Incorporated Computational resource pipelining in general purpose graphics processing unit
US9047686B2 (en) * 2011-02-10 2015-06-02 Qualcomm Incorporated Data storage address assignment for graphics processing
US9626191B2 (en) 2011-12-22 2017-04-18 Nvidia Corporation Shaped register file reads
US10535185B2 (en) 2012-04-04 2020-01-14 Qualcomm Incorporated Patched shading in graphics processing
US9747107B2 (en) 2012-11-05 2017-08-29 Nvidia Corporation System and method for compiling or runtime executing a fork-join data parallel program with function calls on a single-instruction-multiple-thread processor
US9947084B2 (en) 2013-03-08 2018-04-17 Nvidia Corporation Multiresolution consistent rasterization
KR102104057B1 (ko) 2013-07-09 2020-04-23 삼성전자 주식회사 점별로 테셀레이션 팩터를 할당하는 방법과 상기 방법을 수행할 수 있는 장치들
KR102066533B1 (ko) * 2013-11-19 2020-01-16 삼성전자 주식회사 도메인 쉐이딩 방법과 이를 수행하는 장치들
GB2518019B (en) 2013-12-13 2015-07-22 Aveva Solutions Ltd Image rendering of laser scan data
KR102366808B1 (ko) * 2014-10-22 2022-02-23 삼성전자주식회사 캐시 메모리 시스템 및 그 동작방법
CN104933675B (zh) * 2015-07-02 2017-11-07 浙江大学 一种周期性可控的复杂镶嵌图案生成方法
US10430229B2 (en) * 2015-12-21 2019-10-01 Intel Corporation Multiple-patch SIMD dispatch mode for domain shaders
US20170178384A1 (en) * 2015-12-21 2017-06-22 Jayashree Venkatesh Increasing Thread Payload for 3D Pipeline with Wider SIMD Execution Width
US10068372B2 (en) 2015-12-30 2018-09-04 Advanced Micro Devices, Inc. Method and apparatus for performing high throughput tessellation
US10643381B2 (en) 2016-01-12 2020-05-05 Qualcomm Incorporated Systems and methods for rendering multiple levels of detail
US10643296B2 (en) 2016-01-12 2020-05-05 Qualcomm Incorporated Systems and methods for rendering multiple levels of detail
GB2543866B (en) 2016-03-07 2017-11-01 Imagination Tech Ltd Task assembly for SIMD processing
CN105957150A (zh) * 2016-05-16 2016-09-21 浙江大学 一种具有连续性和周期性表面图案的三维形体生成方法
US20170358132A1 (en) * 2016-06-12 2017-12-14 Apple Inc. System And Method For Tessellation In An Improved Graphics Pipeline
US10310856B2 (en) 2016-11-09 2019-06-04 Arm Limited Disabling thread execution when executing instructions in a data processing system
US10497084B2 (en) 2017-04-24 2019-12-03 Intel Corporation Efficient sharing and compression expansion of data across processing systems
US10127626B1 (en) * 2017-07-21 2018-11-13 Arm Limited Method and apparatus improving the execution of instructions by execution threads in data processing systems
US11055896B1 (en) * 2020-02-25 2021-07-06 Parallels International Gmbh Hardware-assisted emulation of graphics pipeline
CN113947515A (zh) * 2020-07-17 2022-01-18 芯原微电子(上海)股份有限公司 细分曲线数据处理实现方法、系统、介质及矢量图形处理装置

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5982375A (en) * 1997-06-20 1999-11-09 Sun Microsystems, Inc. Floating point processor for a three-dimensional graphics accelerator which includes single-pass stereo capability
JP2000011190A (ja) * 1998-06-25 2000-01-14 Sony Corp 画像処理装置
US6707457B1 (en) * 1999-09-30 2004-03-16 Conexant Systems, Inc. Microprocessor extensions for two-dimensional graphics processing
US6954204B2 (en) * 2002-07-18 2005-10-11 Nvidia Corporation Programmable graphics system and method using flexible, high-precision data formats
US7379496B2 (en) * 2002-09-04 2008-05-27 Microsoft Corporation Multi-resolution video coding and decoding
US7034826B1 (en) * 2003-02-28 2006-04-25 Microsoft Corporation Spiral construction of a geodesic dome
US7109987B2 (en) * 2004-03-02 2006-09-19 Ati Technologies Inc. Method and apparatus for dual pass adaptive tessellation
US6972769B1 (en) * 2004-09-02 2005-12-06 Nvidia Corporation Vertex texture cache returning hits out of order
US7425952B2 (en) * 2004-11-23 2008-09-16 Metavr, Inc. Three-dimensional visualization architecture
US20060245500A1 (en) * 2004-12-15 2006-11-02 David Yonovitz Tunable wavelet target extraction preprocessor system
JP4255449B2 (ja) * 2005-03-01 2009-04-15 株式会社ソニー・コンピュータエンタテインメント 描画処理装置、テクスチャ処理装置、およびテセレーション方法
TWI366151B (en) * 2005-10-14 2012-06-11 Via Tech Inc Multiple graphics processor system and methods
US7583268B2 (en) * 2005-11-10 2009-09-01 Via Technologies, Inc. Graphics pipeline precise interrupt method and apparatus
US7634637B1 (en) * 2005-12-16 2009-12-15 Nvidia Corporation Execution of parallel groups of threads with per-instruction serialization
US7568063B2 (en) * 2006-02-02 2009-07-28 Hewlett-Packard Development Company, L.P. System and method for a distributed crossbar network using a plurality of crossbars
TWI385547B (zh) * 2006-10-27 2013-02-11 Hon Hai Prec Ind Co Ltd 圖形自動替換系統及方法
US8643644B2 (en) * 2008-03-20 2014-02-04 Qualcomm Incorporated Multi-stage tessellation for graphics rendering
US8120608B2 (en) * 2008-04-04 2012-02-21 Via Technologies, Inc. Constant buffering for a computational core of a programmable graphics processing unit

Also Published As

Publication number Publication date
GB2463763A (en) 2010-03-31
TWI417806B (zh) 2013-12-01
KR20100036183A (ko) 2010-04-07
US20100079454A1 (en) 2010-04-01
KR101091374B1 (ko) 2011-12-07
GB0914951D0 (en) 2009-09-30
CN101714247B (zh) 2012-06-20
DE102009039231B4 (de) 2020-06-25
CN101714247A (zh) 2010-05-26
TW201019262A (en) 2010-05-16
JP2010086528A (ja) 2010-04-15
GB2463763B (en) 2011-03-02
JP5303787B2 (ja) 2013-10-02

Similar Documents

Publication Publication Date Title
DE102009039231B4 (de) Einzeldurchgang-Kachelung
DE102009047518B4 (de) Computersystem und Verfahren geeignet zum Vermeiden von Datenkommunikationsverklemmungssituationen durch Markieren von CPU-Datenverkehr als speziell
DE102013017639B4 (de) Zwischenspeicherung von adaptiv dimensionierten Cache-Kacheln in einem vereinheitlichten L2-Cache-Speicher mit Oberflächenkomprimierung
DE102013017640B4 (de) Verteilte gekachelte Zwischenspeicherung
DE102012211670A1 (de) Simultanes Unterbreiten an eine Mehr-Produzenten-Queue mittels mehrerer Threads
DE102018132468A1 (de) Multi-gpu-frame-rendern
DE102008026431B4 (de) Extrapolation von nicht residenten Mipmap-Daten unter Verwendung residenter Mipmap-Daten
DE112010003750T5 (de) Hardware für parallele Befehlslistenerzeugung
DE102009046847A1 (de) Mehrklassen-Daten-Cache-Verfahren
DE112010003758T5 (de) Instruktionen zum Verwalten einer parallelen Cache-Hierarchie
DE102012222558B4 (de) Signalisieren, Ordnen und Ausführung von dynamisch erzeugten Aufgaben in einem Verarbeitungs-System
DE102012212639A1 (de) Temporäre SIMT-Ausführungs-Optimierung
DE102016122297A1 (de) Mehrfach-Durchlauf-Rendering in einer Bildschirm-Raum-Pipeline
DE102013020968A1 (de) Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher
DE102012222394A1 (de) Verfahren und Vorrichtung zum Sammelzwischenspeichern von Quelloperanden
DE102013200997A1 (de) Ein blockierungsfreies FIFO
DE102013208554A1 (de) Verfahren und System zum Managen verschachtelter Ausführungsströme
DE102013200991A1 (de) Automatisches abhängige-Aufgabe-Anstoßen
DE102013020967B4 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware
DE102013201178A1 (de) Steuern von Arbeitsverteilung für Verarbeitung von Tasks
DE102013020485A1 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware
DE102012221502A1 (de) System und Verfahren zum Durchführen von gestalteter-Speicherzugriff-Operationen
DE102013018139A1 (de) Technik zur Speicherung gemeinsamer Vertices
DE102013202173A1 (de) Einheitliche Lade-Verarbeitung für Teilsätze von parallelen Threads
DE102013020810A1 (de) Effiziente Super-Abtastung mit Schattierungs-Strängen pro Pixel

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
R016 Response to examination communication
R016 Response to examination communication
R016 Response to examination communication
R082 Change of representative

Representative=s name: KRAUS & WEISERT PATENTANWAELTE PARTGMBB, DE

R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final