DE102013017981A1 - Optimierung einer Dreieck-Topologie für Pfad-Bilderzeugung - Google Patents

Optimierung einer Dreieck-Topologie für Pfad-Bilderzeugung Download PDF

Info

Publication number
DE102013017981A1
DE102013017981A1 DE102013017981.5A DE102013017981A DE102013017981A1 DE 102013017981 A1 DE102013017981 A1 DE 102013017981A1 DE 102013017981 A DE102013017981 A DE 102013017981A DE 102013017981 A1 DE102013017981 A1 DE 102013017981A1
Authority
DE
Germany
Prior art keywords
triangles
triangle
group
path
memory
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.)
Pending
Application number
DE102013017981.5A
Other languages
English (en)
Inventor
Jeffrey A. Bolz
Mark J. Kilgard
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 DE102013017981A1 publication Critical patent/DE102013017981A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/20Drawing from basic elements, e.g. lines or circles
    • G06T11/203Drawing of straight lines or curves

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

Eine Technik zur effizienteren Erzeugung von Pfadbildern unterteilt Pfadkonturen parkettartig in Dreiecksfächer, die eine Gruppe aus repräsentativen Dreiecken enthalten. Die Topologie der Gruppe aus repräsentativen Dreiecken wird dann im Hinblick auf eine größere Effizienz bei der Rasterunterteilung optimiert, indem ein Umkehr-Operator auf ausgewählte Dreieckspaare innerhalb der Gruppe aus repräsentativen Dreiecken angewendet wird. Die optimierten Dreieckspaare werden dann unter Anwendung einer Pfad-Bilderzeugungstechnik, etwa Schablone und Abdeckungen, als Bilder erzeugt.

Description

  • HINTERGRUND DER ERFINDUNG
  • Gebiet der Erfindung
  • Die vorliegende Erfindung betrifft generell die pfadgestützte Bilderzeugung bzw. die Pfad-Bilderzeugung und insbesondere die Optimierung einer Dreieck-Topologie für die Pfad-Bilderzeugung.
  • Beschreibung des Stands der Technik
  • Die Pfad-Bilderzeugung repräsentiert eine Art einer auflösungsunabhängigen zweidimensionalen (2D) Bilderzeugung, die die Basis für eine Anzahl wichtiger Grafikerzeugungsstandards bildet, die im Stand der Technik bekannt sind als PostScript, Java 2D, Apples Quartz 2D, PDF, TrueType-Zeichenfont, OpenType-Zeichenfont, PostScript-Zeichenfont, skalierbare Vektorgrafiken (SVG), OpenVG, Microsoft Silverlight, Adobe Flash, Microsoft XML Papier Spezifikation (XPS), und mehr.
  • Eine Klasse von Techniken zur Ausführung einer Pfad-Bilderzeugung umfasst mindestens einen Parkettierungs-Schritt bzw. Mosaikbildungsschritt und einen Pfadabdeckungsschritt. Pfadelemente werden in repräsentative Dreiecke im Parkettierungs-Schritt unterteilt. Der Pfadabdeckungsschritt zeichnet viele parkettartige bzw. mosaikartige Dreiecke, und Abtaststellen, die von diesen Dreiecken abgedeckt werden, werden in einem Schablonen- oder Farbpuffer gezählt, der verwendet wird, um zu ermitteln, ob jede Abtaststelle innerhalb oder außerhalb eines zugehörigen Pfads ist. Nach vorne gewandte Dreiecke erhöhen die Zahl der abgedeckten Abtaststellen und nach hinten gewandte Dreiecke verringern die Zahl der abgedeckten Abtaststellen. Abtaststellen, die als innerhalb eines Pfades liegend gezählt werden, werden entsprechend einer zugehörigen Pfadfüllfarbe erzeugt, während Abtastwerte, die als außerhalb eines Pfades liegend gezählt werden, nicht mit der Pfadfüllfarbe erzeugt werden.
  • Viele übliche Parkettierungs-Techniken erzeugen Fächer und Gitter aus Dreiecken mit sehr schmalen, splitterartigen Dreiecken, die typischerweise eine Bilderzeugung mit sehr schlechter Effizienz ergeben. Folglich kann die gesamte Effizienz der Pfad-Bilderzeugung und deren Leistungsverhalten relativ gering sein, wodurch die Qualität der Anwenderwahrnehmung beeinträchtigt sein kann.
  • Wie das Vorhergehende zeigt, ist das, was auf diesem Gebiet benötigt wird, eine Technik für eine erhöhte Pfad-Bilderzeugungseffizienz.
  • ÜBERBLICK ÜBER DIE ERFINDUNG
  • Eine Ausführungsform der vorliegenden Erfindung stellt ein Verfahren zur Verarbeitung eines Pfadbildes für effiziente Rasterunterteilung bereit, wobei das Verfahren umfasst: eine Parkettierung bzw. Mosaikeinteilung einer oder mehrerer Konturen, die das Pfadbild definieren, in eine erste Gruppe aus Dreiecken, wobei jedes Dreieck der ersten Gruppe aus Dreiecken eine Umlaufreihenfolge enthält, Erzeugung einer zweiten Gruppe aus Dreiecken, die optimiert sind, um den Aufwand die Rastereinteilung auf der Grundlage einer Topologie und einer Umlaufreihenfolge von Dreiecken innerhalb der ersten Gruppe aus Dreiecken zu reduzieren, und Speicherung der zweiten Gruppe aus Dreiecken.
  • Andere Ausführungsformen der vorliegenden Erfindung umfassen, ohne Einschränkung, ein computerlesbares Speichermedium mit Befehlen, die, wenn sie von einer Verarbeitungseinheit ausgeführt werden, die Verarbeitungseinheit veranlassen, die hierin beschriebenen Techniken auszuführen, sowie eine Recheneinrichtung, die eine Verarbeitungseinheit enthält, die ausgebildet ist, die hierin beschriebenen Techniken auszuführen.
  • Ein Vorteil der offenbarten Technik besteht darin, dass sie die Bilderzeugungseffizienz von Pfadbildern, die von einer grafischen Verarbeitungseinheit erzeugt werden, verbessert.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Um die Art und Weise, in der die oben genannten Merkmale der vorliegenden Erfindung detailliert verstanden werden können, anzugeben, wird eine speziellere Beschreibung der Erfindung, die zuvor kurz zusammengefasst ist, mit Bezug zu Ausführungsformen angegeben, wovon einige in den angefügten Zeichnungen dargestellt sind. Es sollte jedoch beachtet werden, dass die angefügten Zeichnungen nur typische Ausführungsformen dieser Erfindung darstellen und nicht als einschränkend für ihren Schutzbereich zu betrachten sind, da die Erfindung andere gleichermaßen wirksame Ausführungsformen zulässt.
  • 1 ist eine Blockansicht, die ein Computersystem darstellt, das ausgebildet ist, einen oder mehrere Aspekte der vorliegenden Erfindung zu realisieren;
  • 2 ist eine Blockansicht eines Parallelverarbeitungssubsystems für das in 1 gezeigte Computersystem gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 3 ist eine Blockansicht eines Teils eines Datenstrom-Multiprozessors in dem allgemeinen Verarbeitungs-Cluster aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 4 ist eine Konzeptansicht einer Grafikverarbeitungs-Pipeline, in der eine oder mehrere der PPUs aus 2 für die Realisierung konfiguriert werden können, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 5A zeigt eine Flip-Operation bzw. eine Umkehroperation an einem Dreieckspaar, das parkettartig bzw. mosaikartig aus einem Pfadelement erzeugt ist, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 5B zeigt den Verarbeitungsaufwand, der mit einem Dreieckspaar verknüpft ist, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 5C zeigt den Verarbeitungsaufwand, der mit einem umgekehrten Dreieckspaar verknüpft ist, gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 6 zeigt eine Umkehroperation an einem Dreieckspaar mit unterschiedlichen Orientierungsattributen gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 7 zeigt sequenzielle Umkehroperationen für eine verbesserte Gesamttopologieoptimierung gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 8 ist ein Flussdiagramm von Verfahrensschritten zur Ausführung einer Pfad-Bilderzeugung mit optimierter Dreieckstopologie gemäß einer Ausführungsform der vorliegenden Erfindung; und
  • 9 ist ein Flussdiagramm von Verfahrensschritten zur Ausführung einer Topologieoptimierung gemäß einer Ausführungsform der vorliegenden Erfindung.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden Beschreibung werden zahlreiche spezielle Details angegeben, um ein gründlicheres Verständnis der vorliegenden Erfindung zu ermöglichen. Jedoch erkennt der Fachmann, dass die vorliegende Erfindung auch ohne eines oder mehrerer dieser speziellen Details in die Praxis umgesetzt werden kann.
  • Systemüberblick
  • 1 ist eine Blockansicht, die ein Computersystem 100 darstellt, das ausgebildet ist, einen oder mehrere Aspekte der vorliegenden Erfindung zu realisieren. Das Computersystem 100 umfasst eine zentrale Recheneinheit (CPU) 102 und einen Systemspeicher 104, die über einen Verbindungspfad, der eine Speicherbrücke 105 enthalten kann, miteinander in Verbindung stehen. Die Speicherbrücke 105, die beispielsweise ein Nordbrücken-Chip sein kann, ist über einen Bus oder einen anderen Kommunikationspfad 106 (beispielsweise eine HyperTransport-Verbindung) mit einer I/O-(Eingabe/Ausgabe-)Brücke 107 verbunden. Die I/O-Brücke 107, die beispielsweise ein Südbrücken-Chip sein kann, empfängt eine Anwendereingabe aus einem oder mehreren Anwender-Eingabegeräten 108 (beispielsweise Tastatur, Maus) und leitet die Eingabe an die CPU 102 über den Kommunikationspfad 106 und die Speicherbrücke 105 weiter. Ein Parallelverarbeitungssubsystem 112 ist mit der Speicherbrücke 105 über einen Bus oder einen zweiten Kommunikationspfad 113 (beispielsweise ein peripherer Komponenten-Verbindung-(PCI)Express, ein beschleunigter Graphikport oder eine HyperTransport-Verbindung) verbunden. In einer Ausführungsform ist das Parallelverarbeitungssubsystem 112 ein Grafiksubsystem, das Pixel einem Anzeigegerät 110 zuleitet, das eine konventionelle Kathodenstrahlröhre, eine Flüssigkristallanzeige, eine Anzeige mit lichtemittierenden Dioden oder dergleichen sein kann. Eine Systemdiskette 114 ist ebenfalls mit der I/O-Brücke 107 verbunden und kann ausgebildet sein, Inhalt und Anwendungen und Daten zur Verwendung durch die CPU 102 und das Parallelverarbeitungssubsystem 112 zu speichern. Die Systemdiskette 114 stellt nicht-flüchtigen Speicherplatz für Anwendungen und Daten bereit und kann fest installierte oder entfernbare Festplattenlaufwerke, Flash-Speichereinrichtungen und CD-(Kompaktdisketten-Nur-Lese-Speicher), DVD-(digitale Vielseitigkeitsdisketten-ROM), Blu-ray, HD-DVD (hochauflösende DVD) oder andere magnetische, optische Speichereinrichtungen oder Halbleiterspeichereinrichtungen umfassen.
  • Ein Schalter bzw. eine Schalteinrichtung 116 stellt Verbindungen zwischen der I/O-Brücke 107 und anderen Komponenten, etwa einem Netzwerkadapter 118 und diversen Zusatzkarten 120 und 121 bereit. Andere Komponenten (nicht explizit gezeigt) einschließlich eines universellen seriellen Busses (USB) oder andere Portverbindungen, Kompaktdisketten-(CD-)Laufwerke, digitale Vielseitigkeitsdisketten-(DVD-)Laufwerke, Filmaufzeichnungsgeräte und dergleichen, können ebenfalls mit der I/O-Brücke 107 verbunden sein. Die diversen Kommunikationspfade, die in 1 gezeigt sind, einschließlich der speziell genannten Kommunikationspfade 106 und 113, können unter Anwendung beliebiger geeigneter Protokolle realisiert werden, etwa durch PCI-Express, AGP (beschleunigter Graphikport), HyperTransport oder durch ein oder mehrere andere Bus- oder Punkt-Zu-Punkt-Kommunikationsprotokolle, und Verbindungen zwischen unterschiedlichen Geräten können unterschiedliche Protokolle benutzen, wie dies im Stand der Technik bekannt ist.
  • In einer Ausführungsform enthält das Parallelverarbeitungssubsystem 112 eine Schaltung, die für Grafikverarbeitung und Videoverarbeitung optimiert ist, wozu beispielsweise eine Videoausgabeschaltung gehört, und das System bildet eine grafische Verarbeitungseinheit (GPU). In einer weiteren Ausführungsform enthält das Parallelverarbeitungssubsystem 112 eine Schaltung, die für die Verarbeitung für Allgemeinzwecke optimiert ist, wobei dennoch die zu Grunde liegende Rechenarchitektur, die nachfolgend detaillierter beschrieben ist, beibehalten ist. In einer noch weiteren Ausführungsform kann das Parallelverarbeitungssubsystem 112 mit einem oder mehreren anderen Systemelementen zu einem einzelnen Subsystem zusammengefasst sein, etwa durch Vereinigen der Speicherbrücke 105, der CPU 102 und der I/O-Brücke 107, um ein System auf einem Chip (SoC) zu bilden.
  • Zu beachten ist, dass das hierin gezeigte System anschaulicher Natur ist und dass Variationen und Modifizierungen möglich sind. Die Verbindungstopologie, einschließlich der Anzahl und Anordnung von Brücken, die Anzahl an CPUs 102 und die Anzahl an Parallelverarbeitungssubsystemen 112 kann nach Bedarf modifiziert werden. Beispielsweise ist in einigen Ausführungsformen der Systemspeicher 104 direkt mit der CPU 102 anstatt über eine Brücke verbunden, und andere Geräte kommunizieren mit dem Systemspeicher 104 über die Speicherbrücke 105 und die CPU 102. In anderen alternativen Topologien ist das Parallelverarbeitungssubsystem 112 mit der I/O-Brücke 107 oder direkt mit der CPU 102 anstatt mit der Speicherbrücke 105 verbunden. In noch anderen Ausführungsformen können die I/O-Brücke 107 und die Speicherbrücke 105 in einem einzelnen Chip integriert sein, anstatt dass sie als ein oder mehrere diskrete Bauelemente vorhanden sind. Große Ausführungsformen können zwei oder mehr CPUs 102 und zwei oder mehr Parallelverarbeitungssubsysteme 112 aufweisen. Die speziellen Komponenten, die hierin gezeigt sind, sind optional; beispielsweise kann eine beliebige Zahl an Zusatzkarten oder peripheren Geräten unterstützt werden. In einigen Ausführungsformen ist der Schalter 116 weggelassen, und der Netzwerkadapter 118 und die Zusatzkarten 120, 121 sind direkt mit der I/O-Brücke 107 verbunden.
  • 2 zeigt ein Parallelverarbeitungssubsystem 112 gemäß einer Ausführungsform der vorliegenden Erfindung. Wie gezeigt, umfasst das Parallelverarbeitungssubsystem 112 eine oder mehrere Parallelverarbeitungseinheiten (PPUs) 202, wovon jede mit einem lokalen Parallelverarbeitungs-(PP)Speicher 204 verbunden ist. Im Allgemeinen enthält ein Parallelverarbeitungssubsystem eine Anzahl U an PPUs, wobei U ≥ 1 ist. (Hierin werden mehrere Instanzen gleicher Objekte mit Bezugszeichen belegt, die das Objekt kennzeichnen, und Zahlen in Klammern geben bei Bedarf die Instanz an.) Die PPUs 202 und die Parallelverarbeitungsspeicher 204 können unter Anwendung einer oder mehrerer integrierter Schaltungseinrichtungen, etwa durch programmierbare Prozessoren, anwendungsspezifische integrierte Schaltungen (ASIC), oder Speichereinrichtungen oder durch eine andere technisch machbare Weise realisiert werden.
  • Es sei wieder auf 1 sowie auf 2 verwiesen; in einigen Ausführungsformen sind einige oder alle der PPUs 202 in dem Parallelverarbeitungssubsystem 112 Grafikprozessoren mit Bilderzeugungs-Pipelines, die konfiguriert werden können, um diverse Operationen auszuführen, die betreffen: die Erzeugung von Pixeldaten aus Grafikdaten, die von der CPU 102 und/oder dem Systemspeicher 104 über die Speicherbrücke 105 und den zweiten Kommunikationspfad 113 bereitgestellt werden, die Wechselwirkung mit dem lokalen Parallelverarbeitungsspeicher 204 (der als Grafikspeicher verwendbar ist und beispielsweise einen konventionellen Blockpuffer enthält), um Pixeldaten zu speichern und zu aktualisieren, die Zuleitung von Pixeldaten an das Anzeigegerät 110, und dergleichen. In einigen Ausführungsformen kann das Parallelverarbeitungssubsystem 112 eine oder mehrere PPUs 202 aufweisen, die als Grafikprozessoren arbeiten, und kann eine oder mehrere andere PPUs 202 aufweisen, die für Berechnungen für Allgemeinzwecke verwendet werden. Die PPUs 202 können identisch oder unterschiedlich sein, und jede PPU 202 kann einen oder mehrere spezielle Parallelverarbeitungsspeichereinrichtungen oder keinen speziellen Parallelverarbeitungsspeicher aufweisen. Eine oder mehrere PPUs 202 in dem Parallelverarbeitungssubsystem 112 können Daten an das Anzeigegerät 110 ausgeben, oder jede PPU 202 in dem Parallelverarbeitungssubsystem 112 kann Daten an ein oder mehrere Anzeigegeräte 110 ausgeben.
  • Während des Betriebs ist die CPU 102 der übergeordnete Prozessor des Computersystems 100 und steuert und koordiniert den Betrieb anderer Systemkomponenten. Insbesondere gibt die CPU 102 Befehle aus, die den Betrieb der PPUs 202 steuern. In einigen Ausführungsformen schreibt die CPU 102 einen Strom aus Befehlen für jede PPU 202 in eine Datenstruktur (die in 1 oder 2 nicht explizit gezeigt ist), die in dem Systemspeicher 104, dem Parallelverarbeitungsspeicher 204 oder an einer weiteren Speicherstelle liegen kann, auf die sowohl die CPU 102 als auch die PPU 202 zugreifen kann. Ein Zeiger auf jede Datenstruktur wird in einen Schiebepuffer geschrieben, um die Verarbeitung des Stroms aus Befehlen in der Datenstruktur zu initiieren. Die PPU 202 liest Befehlsströme aus einem oder mehreren Schiebepuffern aus und führt die Befehle asynchron relativ zu der Arbeitsweise der CPU 102 aus. Es können für jeden Schiebepuffer durch ein Anwendungsprogramm über den Gerätetreiber 103 Prioritäten für die Ausführung angegeben werden, um die Disponierung der unterschiedlichen Schiebepuffer zu steuern.
  • Es sei nun wieder auf 2 sowie auf 1 verwiesen; jede PPU 202 enthält eine I/O-(Eingabe/Ausgabe-)Einheit 205, die mit dem Rest des Computersystems 100 über den Kommunikationspfad 113 in Verbindung steht, der mit der Speicherbrücke 105 (oder in einer alternativen Ausführungsform direkt mit der CPU 102) in Verbindung steht. Die Verbindung der PPU 202 mit dem Rest des Computersystems 100 kann auch anders sein. In einigen Ausführungsformen ist das Parallelverarbeitungssubsystem 112 als eine Zusatzkarte realisiert, die in einen Erweiterungssteckplatz des Computersystems 100 eingeführt werden kann. In anderen Ausführungsformen kann eine PPU 202 in einem einzelnen Chip zusammen mit einer Busbrücke, etwa der Speicherbrücke 105 oder der I/O-Brücke 107 integriert sein. In noch anderen Ausführungsformen können einige oder alle Elemente der PPU 202 zusammen mit der CPU 102 in einem einzelnen Chip integriert sein.
  • In einer Ausführungsform ist der Kommunikationspfad 113 eine PCI-Expressverbindung, in der jeder PPU 202 spezielle Bahnen zugeordnet sind, wie dies im Stand der Technik bekannt ist. Es können auch andere Kommunikationspfade verwendet werden. Eine I/O-Einheit 205 erzeugt Pakete (oder andere Signale) zur Übertragung auf dem Kommunikationspfad 113 und empfängt ferner alle eintreffenden Pakete (oder andere Signale) aus dem Kommunikationspfad 113, wodurch die eintreffenden Pakete zu geeigneten Komponenten der PPU 202 weitergeleitet werden. Beispielsweise können Befehle, die Verarbeitungsaufgaben betreffen, an eine Hauptschnittstelle 206 geleitet werden, während Befehle, die Speicheroperationen (beispielsweise das Lesen aus dem oder Schreiben in den Parallelverarbeitungsspeicher 204) betreffen, an eine Speicherkreuzungseinheit 210 geleitet werden können. Die Hauptschnittstelle 206 liest jeden Schiebepuffer aus und gibt den in dem Schiebepuffer gespeicherten Befehlsstrom an einen Frontbereich 212 aus.
  • Jede PPU 202 realisiert vorteilhafterweise eine äußerst parallele Verarbeitungsarchitektur. Wie detailliert gezeigt ist, enthält die PPU 202(0) ein Verarbeitung-Cluster-Array 230, das eine Anzahl C an allgemeinen Verarbeitungs-Clustern (GPCs) 208 enthält, wobei C ≥ 1 ist. Jeder GPC 208 ist in der Lage, eine große Anzahl (beispielsweise hunderte oder tausende) Stränge gleichzeitig auszuführen, wobei jeder Strang eine Instanz eines Programms ist. In diversen Anwendungen können unterschiedliche GPCs 208 zur Verarbeitung unterschiedlicher Arten von Programmen oder zur Ausführung unterschiedlicher Arten von Berechnungen reserviert werden. Die Reservierung bzw. Zuweisung von GPCs 208 kann in Abhängigkeit von der Arbeitslast unterschiedlich sein, die sich für jede Art von Programm oder Berechnung ergibt.
  • Die GPCs 208 empfangen zu verarbeitende Ausführungsaufgabe aus einer Arbeitsverteilungseinheit in einer Aufgaben/Arbeitseinheit 207. Die Arbeitsverteilungseinheit empfängt Zeiger auf Verarbeitungsaufgaben, die als Aufgaben-Metadaten (TMD) (nicht gezeigt) codiert und im Speicher abgelegt sind. Die Zeiger auf die TMD sind in dem Befehlsstrom enthalten, der als ein Schiebepuffer gespeichert ist und von der Frontbereichseinheit 212 aus der Hauptschnittstelle 206 empfangen wird. Verarbeitungsaufgaben, die als TMD codiert sein können, enthalten Indizes von zu verarbeitenden Daten, sowie Zustandsparameter und Befehle, die definieren, wie die Daten zu verarbeiten sind (beispielsweise welches Programm auszuführen ist). Die Aufgaben/Arbeitseinheit 207 empfängt Aufgaben aus dem Frontbereich 212 und stellt sicher, dass die GPCs 208 in einen zulässigen Zustand konfiguriert werden, bevor die Verarbeitung, wie sie durch jeden Satz der TMD spezifiziert ist, initiiert wird. Es kann eine Priorität für jeden Satz an TMD angegeben werden, die verwendet wird, um die Ausführung der Verarbeitungsaufgaben zu disponieren. Verarbeitungsaufgaben können auch aus dem Verarbeitungs-Cluster-Array 230 empfangen werden. Optional können die TMD einen Parameter enthalten, der steuert, ob die TMD dem Anfang oder dem Ende einer Liste von Verarbeitungsaufgaben (oder einer Liste aus Zeigern auf die Verarbeitungsaufgaben) hinzuzufügen sind, wodurch eine weitere Ebene einer Steuerung zusätzlich zur Priorität bereitgestellt wird.
  • Eine Speicherschnittstelle 214 enthält eine Anzahl D an Partitionseinheiten 215, die jeweils direkt mit einem Teil des Parallelverarbeitungsspeichers 204 verbunden sind, wobei D ≥ 1 ist. Wie gezeigt, ist generell die Anzahl an Partitionseinheiten 215 gleich der Anzahl an dynamischen Speichern mit wahlfreiem Zugriff (DRAM) 220. In anderen Ausführungsformen ist die Anzahl an Partitionseinheiten 215 gegebenenfalls nicht gleich der Anzahl an Speichereinrichtungen. Der Fachmann auf dem Gebiet erkennt, dass die DRAM 220 durch andere geeignete Speichereinrichtungen ersetzt werden können und dass sie von allgemein konventioneller Gestaltung sein können. Eine detaillierte Beschreibung wird daher weggelassen. Bilderzeugungsziele, etwa Blockpuffer oder Texturzuordnungen, können in den DRAMs 220 gespeichert sein, wodurch es den Partitionseinheiten 215 möglich ist, Bereiche jedes Bilderzeugungsziels parallel zu beschreiben, um in effizienter Weise die verfügbare Bandbreite des Parallelverarbeitungsspeichers 204 auszunutzen.
  • Jeder der GPCs 208 kann Daten verarbeiten, dass Sie in die DRAMs 220 in dem Parallelverarbeitungsspeicher 204 geschrieben werden. Die Kreuzungseinheit 210 ist ausgebildet, die Ausgabe jedes GPC 208 dem Eingang einer Partitionseinheit 215 oder einem weiteren GPC 208 für die weitere Verarbeitung zuzuleiten. Die GPCs 208 kommunizieren mit der Speicherschnittstelle 214 über die Kreuzungseinheit 210, um diverse externe Speichereinrichtungen auszulesen oder diese zu beschreiben. In einer Ausführungsform hat die Kreuzungseinheit 210 eine Verbindung zu der Speicherschnittstelle 214, um mit der I/O-Einheit 205 zu kommunizieren, und hat auch eine Verbindung zu dem lokalen Parallelverarbeitungsspeicher 204, wodurch es den Verarbeitungskernen in den unterschiedlichen GPCs 208 ermöglicht wird, mit dem Systemspeicher 104 oder einem anderen Speicher zu kommunizieren, der nicht lokal für die PPU 202 ist. In der in 2 gezeigten Ausführungsform ist die Kreuzungseinheit 210 direkt mit der I/O-Einheit 205 verbunden. Die Kreuzungseinheit 210 kann virtuelle Kanäle verwenden, um Verkehrsströme zwischen den GPCs 208 und den Partitionseinheiten 215 zu trennen.
  • Die GPCs 208 können wiederum so programmiert sein, dass sie Verarbeitungsaufgaben, die eine Fülle von Anwendungen betreffen, ausführen, wozu gehören, ohne einschränkend zu sein, lineare und nicht-lineare Datentransformationen, die Filterung von Video- und/oder Audiodaten, Modellierungsoperationen (beispielsweise die Anwendung physikalischer Gesetze zur Bestimmung der Position, Geschwindigkeit und anderer Attribute von Objekten), Bilderzeugungsoperationen (beispielsweise Programme für die Parkettierungs-Schattierung, Vertex-Schattierung, Geometrie-Schattierung und/oder Pixel Schattierung) usw. Die PPUs 202 können Daten von dem Systemspeicher 104 und/oder dem lokalen Parallelverarbeitungsspeicher 204 in einen internen (Chip internen) Speicher übertragen, die Daten verarbeiten und die Ergebnisdaten zurück in den Systemspeicher 104 und/oder die lokalen Parallelverarbeitungsspeicher 204 schreiben, wo auf derartige Daten von anderen Systemkomponenten zugegriffen werden kann, wozu die CPU 102 oder ein weiteres Parallelverarbeitungssubsystem 112 gehören.
  • Eine PPU 202 kann mit einer beliebigen Größe an lokalem Parallelverarbeitungsspeicher 204 versehen sein, wobei auch kein lokaler Speicher mit eingeschlossen ist, und kann den lokalen Speicher und einen Systemspeicher in beliebiger Kombination verwenden. Beispielsweise kann eine PPU 202 ein Grafikprozessor in einer Ausführungsform mit vereinheitlichter Speicherarchitektur (UMA) sein. In derartigen Ausführungsformen wird wenig oder kein spezieller graphischer (Parallelverarbeitungs-)Speicher bereitgestellt, und die PPU 202 verwendet ausschließlich oder nahezu ausschließlich den Systemspeicher. In UMA-Ausführungsformen kann eine PPU 202 in einem Brückenchip oder einem Prozessorchip integriert sein, oder kann als ein diskreter Chip mit einer Hochgeschwindigkeitsverbindung vorgesehen sein (beispielsweise PCI-Expressverbindung), die die PPU 202 mit dem Systemspeicher über einen Brückenchip oder eine andere Kommunikationseinrichtungen verbindet.
  • Wie zuvor angegeben ist, kann eine beliebige Anzahl an PPUs 202 in einem Parallelverarbeitungssubsystem 112 enthalten sein. Beispielsweise können mehrere PPUs 202 auf einer einzelnen Zusatzkarte bereitgestellt werden, oder es können mehrere Zusatzkarten mit dem Kommunikationspfad 112 verbunden sein, oder eine oder mehrere PPUs 202 können in einem Brückenchip integriert sein. Die PPUs 202 in einem Multi-PPU-System können identisch oder unterschiedlich zueinander sein. Beispielsweise können verschiedene PPUs 202 eine verschiedene Anzahl an Verarbeitungskernen, eine verschiedene Größe an lokalem Parallelverarbeitungsspeicher usw. aufweisen. Wenn mehrere PPUs 202 vorhanden sind, können diese PPUs parallel betrieben werden, so dass Daten mit höherem Durchsatz verarbeitet werden, als dies mit einer einzelnen PPU 202 möglich wäre. Systeme, die eine oder mehrere PPUs 202 enthalten, können in einer Vielzahl von Konfigurationen und Formfaktoren eingerichtet werden, wozu Tischrechner, mobile Rechner oder Hand-Personalcomputer, Dienstleister-Rechner, Arbeitsplatzrechner, Spielekonsolen, eingebettete Systeme und dergleichen gehören.
  • Es können mehrere Verarbeitungsaufgaben gleichzeitig in den GPCs 208 ausgeführt werden, und eine Verarbeitungsaufgabe kann eine oder mehrere „Kind-” Verarbeitungsaufgaben während der Ausführung erzeugen. Die Aufgaben/Arbeitseinheit 207 empfängt die Aufgaben und disponiert dynamisch die Verarbeitungsaufgaben und die Kind-Verarbeitungsaufgaben zur Ausführung durch die GPCs 208.
  • 3 ist eine Blockansicht eines Datenstrom-Multiprozessors (SM) 310 in einem GPC 208 aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung. Jeder GPC 208 kann so gestaltet sein, dass er eine große Anzahl an Strängen parallel ausführen kann, wobei der Begriff „Strang” eine Instanz eines speziellen Programms bezeichnet, das mit einem speziellen Satz an Eingangsdaten ausgeführt wird. In einigen Ausführungsformen werden Einzelbefehl-Mehrfach-Daten-(SIMD-)Befehlsausgabetechniken eingesetzt, um eine parallele Ausführung einer großen Anzahl an Strängen zu ermöglichen, ohne dass mehrere unabhängige Befehlseinheiten bereitgestellt werden. In anderen Ausführungsformen werden Einzelbefehl-Multi-Strang-(SIMT-)Techniken angewendet, um die parallele Ausführung einer großen Anzahl an im allgemeinen synchronisierten Strängen zu ermöglichen, wobei eine gemeinsame Befehlseinheit verwendet wird, die ausgebildet ist, Befehle an eine Gruppe aus Verarbeitungseinheiten innerhalb jedes GPCs 208 auszugeben. Anders als ein SIMD-Ausführungsregime, in welchem alle Verarbeitungseinheiten typischerweise identische Befehle ausführen, ermöglicht die SIMT-Ausführung, das unterschiedliche Stränge effizienter divergenten Ausführungspfaden durch ein gegebenes Strangprogramm hindurch folgen. Der Fachmann erkennt, dass ein SIMD-Verarbeitungsregime eine funktionale Untergruppe eines SIMT-Verarbeitungsregimes darstellt.
  • Der Betrieb des GPC 208 wird vorteilhafterweise über einen Pipeline-Verwalter (nicht gezeigt) gesteuert, der Verarbeitungsaufgaben an einen oder mehrere Datenstrom-Multiprozessoren (SM) 310 verteilt, wobei jeder SM 310 ausgebildet ist, eine oder mehrere Stranggruppen zu verarbeiten. Jeder SM 310 enthält einen Befehls-L1-Cache-Speicher 370, der ausgebildet ist, Befehle und Konstanten aus dem Speicher über einen L1.5-Cache-Speicher (nicht gezeigt) in dem GPC 208 zu empfangen. Eine Kettendisponier-und-Befehlseinheit 312 empfängt Befehle und Konstanten aus dem Befehls-L1-Cache-Speicher 370 und steuert eine lokale Registerdatei 304 und Funktionseinheiten des SM 310 entsprechend den Befehlen und den Konstanten. Die Funktionseinheiten des SM 310 enthalten N Exec-(Ausführungs- oder Verarbeitungs-)Einheiten 302 und P Lade-Speichereinheiten (LSU) 303. Die Funktionseinheiten des SM 310 werden als Pipeline bzw. parallel betrieben werden, wodurch es möglich ist, dass ein neuer Befehl ausgegeben wird, bevor ein vorhergehender Befehl beendet ist, wie dies im Stand der Technik bekannt ist. Es kann eine beliebige Kombination aus Funktionsausführungseinheiten bereitgestellt werden. In einer Ausführungsform unterstützen die Funktionseinheiten eine Fülle von Operationen, wozu Ganzzahl- und Gleitkommaarithmetik (beispielsweise Addition und Multiplikation), Vergleichsoperationen, Bool'sche Operationen (UND, ODER, EXKLUSIV ODER), Bit-Verschiebung und Berechnung diverser algebraischer Funktionen gehören (beispielsweise Ebeneninterpolation, trigonometrische, exponentielle und logarithmische Funktionen usw.); und die gleiche Hardware der Funktionseinheiten kann vorteilhafterweise zum Ausführen unterschiedlicher Operationen verwendet werden.
  • Die Reihe von Befehlen, die an einen speziellen GPC 208 ausgegeben wird, bildet einen Strang, wie dies zuvor hierin definiert ist, und die Ansammlung einer gewissen Anzahl an gleichzeitig ausgeführten Strängen in den Parallelverarbeitungseinheiten (nicht gezeigt) innerhalb eines SM 310 wird hierin als eine „Kette bzw. Wölbung” oder „Stranggruppe” bezeichnet. Wie hierin verwendet ist, bezeichnet eine „Stranggruppe” eine Gruppe aus Strängen, die gleichzeitig in dem gleichen Programm mit unterschiedlichen Eingangsdaten ausgeführt werden, wobei ein Strang der Gruppe einer unterschiedlichen Verarbeitungseinheit innerhalb eines SM 310 zugewiesen ist. Eine Stranggruppe kann weniger Stränge als die Anzahl an Verarbeitungseinheiten innerhalb des SM 310 aufweisen, in welchem Falle gewisse Verarbeitungseinheiten während Arbeitszyklen untätig sind, wenn diese Stranggruppe gerade verarbeitet wird. Eine Stranggruppe kann auch mehr Stränge als die Anzahl an Verarbeitungseinheiten innerhalb des SM 310 aufweisen, in welchem Falle die Verarbeitung über aufeinanderfolgende Taktzyklen erfolgt. Da jeder SM 310 bis zu G Stranggruppen gleichzeitig unterstützen kann, ergibt sich, dass ein System in einem GPC 208, das M Datenstrom-Multiprozessoren 310 aufweist, bis zu G·M Stranggruppen in dem GPC 208 zu jeder Zeit ausgeführt werden können.
  • Ferner können mehrere in Beziehung stehende Stranggruppen (in unterschiedlichen Phasen der Ausführung) gleichzeitig in einen SM 310 aktiv sein. Diese Ansammlung an Stranggruppen wird hierin als ein „kooperatives Strang-Array” („CTA”) oder „Strang-Array” bezeichnet. Die Größe eines speziellen CTA ist gleich m·k, wobei k die Anzahl an gleichzeitig ausgeführten Strängen in einer Stranggruppe ist und typischerweise ein ganzzahliges Vielfaches der Anzahl an Parallelverarbeitungseinheiten innerhalb des SM 310 ist, und wobei m die Anzahl an Stranggruppen ist, die gleichzeitig in dem SM 310 aktiv ist. Die Größe eines CTA wird generell von dem Programmierer und der Menge an Hardware-Ressourcen bestimmt, etwa von Speichern und Registern, die für das CTA verfügbar sind.
  • In Ausführungsformen der vorliegenden Erfindung ist es wünschenswert, die PPU 202 oder einen oder mehrere andere Prozessoren eines Rechensystems zu verwenden, um Berechnungen für Allgemeinzwecke unter Verwendung von Strang-Arrays auszuführen. Jedem Strang in dem Strang-Array ist eine eindeutige Strangkennung („Strang-ID”) zugewiesen, auf die der Strang während der Ausführung des Strangs zugreifen kann. Die Strang-ID, die als ein eindimensionaler oder mehrdimensionaler numerischer Wert definiert sein kann, steuert diverse Aspekte des Verarbeitungsverhaltens des Strangs. Beispielsweise kann eine Strang-ID verwendet werden, um zu bestimmen, welchen Teil eines Eingangsdatensatzes ein Strang zu verarbeiten hat und/oder um zu bestimmen, welchen Teil eines Ausgangsdatensatzes ein Strang zu erzeugen oder zu schreiben hat.
  • Eine Sequenz aus Befehlen pro Strang kann mindestens einen Befehl enthalten, der ein kooperatives Verhalten zwischen dem repräsentativen Strang und einem oder mehreren anderen Strängen des Strang-Arrays angibt. Beispielsweise kann die Sequenz aus Befehlen pro Strang enthalten: einen Befehl, um die Ausführung von Operationen für den repräsentativen Strang an einem speziellen Punkt in der Sequenz zu unterbrechen, bis zu einer Zeit, bei der eine oder mehrere der anderen Stränge diesen speziellen Punkt erreicht haben, einen Befehl für den repräsentativen Strang, Daten in einen gemeinsam benutzten Speicher zu speichern, auf den eine oder mehrere der anderen Stränge Zugriff haben, einen Befehl für den repräsentativen Strang, in atomarer Weise bzw. ungeteilter Weise Daten zu lesen und zu aktualisieren, die in einem gemeinsam benutzten Speicher gespeichert sind, auf den einer oder mehrere der anderen Stränge Zugriff haben auf Grundlage ihrer Strang-ID, oder dergleichen. Das CTA-Programm kann ferner einen Befehl enthalten, um eine Adresse in dem gemeinsam benutzten Speicher zu berechnen, aus der Daten auszulesen sind, wobei die Adresse eine Funktion der Strang-ID ist. Durch die Definition geeigneter Funktionen und durch die Bereitstellung von Synchronisiertechniken können Daten in eine gegebene Speicherstelle in einem gemeinsam benutzten Speicher durch einen Strang eines CTA geschrieben werden, und können aus dieser Speicherstelle von einem anderen Strang des gleichen CTA in vorhersagbarer Weise ausgelesen werden. Folglich kann ein beliebiges gewünschtes Schema an gemeinsamer Datennutzung zwischen Strängen unterstützt werden, und ein beliebiger Strang in einem CTA kann Daten mit einem beliebigen anderen Strang in dem gleichen CTA gemeinsam benutzen. Der Grad, falls verhandeln, einer gemeinsamen Datennutzung zwischen Strängen eines CTA ist durch das CTA-Programm bestimmt; es ist somit zu beachten, dass in einer speziellen Anwendung, die CTAs verwendet, die Stränge eines CTA Daten untereinander gemeinsam nutzen können oder auch nicht, wobei dies von dem CTA-Programm bestimmt ist, und die Begriffe „CTA” und „Strang-Array” werden hierin als Synonym verwendet.
  • Der SM 310 stellt einen chipinternen (internen) Datenspeicherplatz mit unterschiedlichen Ebenen an Zugänglichkeit bereit. Spezialregister (nicht gezeigt) sind von der LSU 303 lesbar aber nicht beschreibbar und können verwendet werden, um Parameter zu speichern, die die „Position” jedes Strangs definieren. In einer Ausführungsform enthalten die Spezialregister ein Register pro Strang (oder pro Exec-Einheit 302 in dem SM 310), das eine Strang-ID speichert. Jedes Register einer Strang-ID ist nur von einer entsprechenden Exec-Einheit 302 ansprechbar. Spezialregister können auch zusätzliche Register enthalten, die von allen Strängen lesbar sind, die die gleiche Verarbeitungsaufgabe ausführen, die durch einem Satz an TMD 322 repräsentiert ist (oder von allen LSU 303), die eine CTA-Kennung, die CTA-Dimensionen, die Dimensionen eines Gitters, zu welchem das CTA gehört (eine Warteschlangenposition, wenn die TMD 322 eine Warteschlangenaufgabe anstelle einer Gitteraufgabe kodieren), und eine Kennung der TMD 322, denen das CTA zugeordnet ist, speichern.
  • Wenn die TMD 322 ein Gitter-TMD sind, bewirkt die Ausführung der TMD 322, dass eine festgelegte Anzahl an CTAs gestartet und ausgeführt wird, um die festgelegte Menge an Daten zu verarbeiten, die in der Warteschlange gespeichert sind. Die Anzahl an CTAs ist als das Produkt der Gitterbreite, Höhe und Tiefe angegeben. Die festgelegte Menge an Daten kann in den TMD 322 gespeichert sein, oder die TMD 322 können einen Zeiger auf die Daten speichern, die von den CTAs verarbeitet werden. Die TMD 322 können ferner eine Startadresse des Programms enthalten, das von den CTAs ausgeführt wird.
  • Wenn die TMD 322 Warteschlange-TMD sind, dann kann eine Warteschlangeneigenschaft der TMD 322 verwendet werden, was bedeutet, dass die zu verarbeitende Datenmenge nicht notwendigerweise festgelegt ist. Warteschlangeneinträge speichern Daten zur Verarbeitung durch die CTAs, die den TMD 322 zugeordnet sind. Die Warteschlangeneinträge können auch eine Kind-Aufgabe repräsentieren, die von weiteren TMD 322 während der Ausführung eines Strangs erzeugt wird, wodurch eine eingebettete Parallelität geschaffen wird. Typischerweise wird die Ausführung des Strangs oder des CTA, das den Strang enthält, unterbrochen, bis die Ausführung der Kind-Aufgabe abgeschlossen ist. Die Warteschlange kann in den TMD 322 oder separat zu den TMD 322 gespeichert werden, in welchem Falle die TMD 322 einen Warteschlangenzeiger auf die Warteschlange speichern. Vorteilhafterweise können die von der Kind-Aufgabe erzeugten Daten in die Warteschlange geschrieben werden, während die TMD 322, die die Kind-Aufgabe repräsentieren, ausgeführt werden. Die Warteschlange kann als eine Ringwarteschlange realisiert werden, so dass die gesamte Datenmenge nicht auf die Größe der Warteschlange beschränkt ist.
  • CTAs, die einem Gitter angehören, haben implizite Parameter für die Gitterbreite, Höhe und Tiefe, die die Position des jeweiligen CTA innerhalb des Gitters angegeben. Spezialregister werden während der Initialisierung in Reaktion auf Befehle beschrieben, die über den Frontbereich 212 von dem Gerätetreiber 103 empfangen werden, und die Register ändern sich während der Ausführung einer Verarbeitungsaufgabe nicht. Der Frontbereich 212 disponiert jede Verarbeitungsaufgabe für die Ausführung. Jedes CTA ist einem speziellen Satz an TMD 322 für die gleichzeitige Ausführung einer oder mehrerer Aufgaben zugeordnet. Ferner kann ein einzelner GPC 208 mehrere Aufgaben gleichzeitig ausführen.
  • Ein Parameterspeicher (nicht gezeigt) speichert Laufzeitparameter (Konstanten), die von einem beliebigen Strang innerhalb des gleichen CTA (oder einer LSU 303) gelesen aber nicht beschrieben werden können. In einer Ausführungsform leitet der Gerätetreiber 103 Parameter dem Parameterspeicher zu, bevor der SM 310 angewiesen wird, die Ausführung einer Aufgabe zu beginnen, die diese Parameter verwendet. Ein beliebiger Strang innerhalb eines CTA (oder eine Exec-Einheit 302 innerhalb des SM 310) kann auf den globalen Speicher mittels einer Speicherschnittstelle 214 zugreifen. Teile des globalen Speichers können in dem L1-Cache-Speicher 320 liegen.
  • Eine lokale Registerdatei 304 wird von jedem Strang als Arbeitsbereich verwendet; jedes Register ist für die ausschließliche Nutzung durch einen einzigen Strang reserviert, und Daten in einem Register der lokalen Registerdatei 304 sind nur für den Strang verfügbar, dem das Register zugewiesen ist. Die lokale Registerdatei 304 kann als eine Registerdatei realisiert sein, die physikalisch oder logisch in P Bahnen unterteilt ist, wobei jede eine gewisse Anzahl an Einträgen (wobei jeder Eintrag beispielsweise ein 32-Bit-Wort speichern kann) aufweist. Jeder der N Exec-Einheiten 302 und jeder der P Lade-Speichereinheiten LSU 303 ist eine einzelne Bahn zugewiesen, und entsprechende Einträge in unterschiedlichen Bahnen können mit Daten für unterschiedliche Stränge, die in dem gleichen Programm ausgeführt werden, angereichert werden, um eine SIMD-Ausführung zu ermöglichen. Unterschiedliche Teile der Bahnen können unterschiedlichen Gruppen der G gleichzeitigen Stranggruppen zugewiesen sein, so dass auf einen gegebenen Eintrag in der lokalen Registerdatei 304 nur von einem speziellen Strang zugegriffen werden kann. In einer Ausführungsform sind gewisse Einträge innerhalb der lokalen Registerdatei 304 für die Speicherung von Strangkennungen reserviert, wodurch eines der Spezialregister realisiert wird. Ferner speichert ein gleichförmiger L1-Cache-Speicher 320 gleichförmige oder konstante Werte für jede Bahn der N Exec-Einheiten 302 und der P Lade-Speichereinheiten LSU 303.
  • Der gemeinsam genutzte Speicher 306 ist für Stränge innerhalb eines einzelnen CTA zugänglich; anders ausgedrückt, jede Stelle in dem gemeinsam benutzten Speicher 306 ist für einen beliebigen Strang innerhalb des gleichen CTA (oder eine Verarbeitungseinheit innerhalb des SM 310) zugänglich. Der gemeinsam genutzte Speicher 306 kann als eine gemeinsame benutzte Registerdatei oder ein gemeinsam benutzter chipinterner Cache-Speicher mit einer Verbindung realisiert werden, die es einer beliebigen Verarbeitungseinheit ermöglicht, jede Stelle in dem gemeinsam benutzten Speicher zu lesen oder zu beschreiben. In anderen Ausführungsformen kann der gemeinsam benutzte Zustandsraum auf ein Gebiet pro CTA eines chipexternen Speichers abgebildet sein, und kann in dem L1-Cache-Speicher 320 zwischengespeichert sein. Der Parameterspeicher kann als ein spezieller Abschnitt innerhalb der gleichen gemeinsamen benutzten Registerdatei oder als ein gemeinsam benutzter Crash-Speicher realisiert sein, der den gemeinsam benutzten Speicher 306 realisiert, oder kann als eine separate gemeinsame benutzte Registerdatei oder ein chipinterner Cache-Speicher realisiert sein, auf den die LSUs 303 nur einen lesenden Zugriff haben. In einer Ausführungsform wird der Bereich, der den Parameterspeicher bildet, auch verwendet, um die CTA-ID und die Aufgaben-ID sowie die CTA- und Gitter-Abmessungen oder Warteschlangenposition zu speichern, wodurch Teile der Spezialregister realisiert werden. Jede LSU 303 in dem SM 310 ist mit einer vereinheitlichten Adressenzuordnungseinheit 352 verbunden, die eine Adresse, die für Lade- und Speicherbefehle bereitgestellt wird, die in einem vereinheitlichten Speicherraum angegeben sind, eine Adresse in jedem einzelnen Speicherraum umwandelt. Folglich kann ein Befehl verwendet werden, um auf den lokalen, den gemeinsam benutzten oder den globalen Speicherraum zuzugreifen, indem eine Adresse in dem vereinheitlichten Speicherraum angegeben wird.
  • Der L1-Cache-Speicher 320 in jedem SM 310 kann verwendet werden, um private lokale Daten pro Strang und auch globale Daten pro Anwendung zwischenzuspeichern. In einigen Ausführungsformen können die gemeinsamen benutzten Daten pro CTA in dem L1-Cache-Speicher 320 zwischengespeichert werden. Die LSU 303 sind mit dem gemeinsam benutzten Speicher 306 und dem L1-Cache-Speicher 320 über eine Speicher- und Cache-Verbindung 318 verbunden.
  • Es ist ersichtlich, dass die hierin beschriebene Kernarchitektur anschaulicher Natur ist und dass Variationen und Modifizierungen möglich sind. Es kann eine beliebige Anzahl an Verarbeitungseinheiten, beispielsweise SM 310, in einem GPC 208 enthalten sein. Wie ferner in 2 gezeigt ist, kann eine PPU 202 eine beliebige Anzahl an GPC 208 enthalten, die vorteilhafterweise in funktionaler Hinsicht ähnlich zueinander sind, so dass das Ausführungsverhalten nicht davon abhängt, welcher GPC 208 welche spezielle Verarbeitungsaufgabe empfängt. Ferner kann jeder GPC 208 vorteilhafterweise unabhängig von anderen GPCs 208 unter Verwendung separater und unterscheidbarer Verarbeitungseinheiten, L1-Cache-Speicher arbeiten, um Aufgaben für ein oder mehrere Anwendungsprogramme auszuführen.
  • Der Fachmann auf dem Gebiet erkennt, dass die in den 13 beschriebene Architektur in keiner Weise den Schutzbereich der vorliegenden Erfindung einschränkt und dass die hierin gelehrten Techniken in einer beliebigen geeignet ausgebildeten Verarbeitungseinheit realisiert werden können, wozu gehören, ohne Einschränkung, eine oder mehrere CPUs, eine oder mehrere Mehrkern-CPUs, eine oder mehrere PPUs 202, ein oder mehrere GPCs 208, eine oder mehrere grafische Verarbeitungseinheiten oder Verarbeitungseinheiten für Allgemeinzwecke, oder dergleichen, ohne von dem Schutzbereich der vorliegenden Erfindung abzuweichen.
  • 4 ist eine Konzeptansicht einer Grafikverarbeitungs-Pipeline 400, die in eine oder mehrere der PPUs 202 aus 2 zur Realisierung konfiguriert werden können gemäß einer Ausführungsform der vorliegenden Erfindung. Beispielsweise kann einer der SM 310 so gestaltet sein, dass er die Funktionen einer oder mehrerer Vertex-Verarbeitungseinheiten 415, einer Geometrie-Verarbeitungseinheit 425 und einer Fragment-Verarbeitungseinheit 460 ausführt. Die Funktionen eines Daten-Assemblers 410, eines Grundelemente-Assemblers 420, einer Rastereinheit 455 und einer Farbrasteroperationen(CROP)-Einheit 465 können ebenfalls durch andere Verarbeitungseinheiten innerhalb eines GPC 208 und einer entsprechenden Partitionseinheit 215 ausgeführt werden. Andernfalls kann die Grafikverarbeitungs-Pipeline 400 unter Verwendung spezieller Verarbeitungseinheiten für eine oder mehrere Funktionen realisiert werden.
  • Die Verarbeitungseinheit in Form des Daten-Assemblers 410 sammelt Vertex-Daten für Oberflächen höherer Ordnung, Grundelemente und dergleichen und gibt die Vertex-Daten, wozu die Vertex-Attribute gehören, an die Vertex-Verarbeitungseinheit 415 aus. Die Vertex-Verarbeitungseinheit 415 ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Vertex-Schattierungsprogramme auszuführen, um Beleuchtung und die Transformation von Vertex-Daten anzugeben, wie sie durch die Vertex-Schattierungsprogramme spezifiziert sind. Beispielsweise kann die Vertex-Verarbeitungseinheit 415 programmiert sein, um die Vertex-Daten von einer objektbasierten Koordinatendarstellung (Objektraum) in ein Koordinatensystem mit alternativer Basis zu transformieren, etwa in einen Welt-Raum oder in einen normierten Gerätekoordinaten-(NDC)Raum. Die Vertex-Verarbeitungseinheit 415 kann Daten auslesen, die in dem L1-Cache-Speicher 320, in dem Parallelverarbeitungsspeicher 204 oder in dem Systemspeicher 104 von dem Daten-Assemblers 410 zur Verwendung bei der Verarbeitung der Vertex-Daten gespeichert sind.
  • Der Assembler für Grundelemente 420 empfängt Vertex-Attribute aus der Vertex-Verarbeitungseinheit 415, wobei gespeicherte Vertex-Attribute nach Bedarf ausgelesen werden, und baut grafische Grundelemente für die Verarbeitung durch die Geometrie-Verarbeitungseinheit 425 auf. Zu grafischen Grundelementen gehören Dreiecke, Liniensegmente, Punkte und dergleichen. Die Geometrie-Verarbeitungseinheit 425 ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Geometrie-Schattierungsprogramme auszuführen, wobei grafische Grundelemente, die von dem Assembler für Grundelemente 420 empfangen werden, transformiert werden, wie dies durch die Geometrie-Schattierungsprogramme angegeben ist. Beispielsweise kann die Geometrie-Verarbeitungseinheit 425 so programmiert sein, dass sie die grafischen Grundelemente in ein oder mehrere neue grafische Grundelemente unterteilt und Parameter berechnet, etwa Koeffizienten für die Ebenengleichung, die verwendet werden, um die neuen grafischen Grundelemente in Raster einzuteilen.
  • In einigen Ausführungsformen kann die Geometrie-Verarbeitungseinheit 425 auch Elemente dem Geometrie-Strom hinzufügen oder aus diesem löschen. Die Geometrie-Verarbeitungseinheit 425 gibt die Parameter und Vertices bzw. Eckpunkte, die die neuen grafischen Grundelemente angeben, an eine Darstellungsfeld-Skalierungs-, Auswahl-, und Schneideeinheit 450 aus. Die Geometrie-Verarbeitungseinheit 425 kann Daten lesen, die in dem Parallelverarbeitungsspeicher 204 oder in den Systemspeicher 104 gespeichert sind und zur Weiterverarbeitung der Geometriedaten verwendet werden. Die Darstellungsfeld-Skalier-, Auswahl-, und Schneideeinheit 450 führt einen Schneiden, Auswählen und eine Darstellungsfeldskalierung aus und gibt die verarbeiteten grafischen Grundelemente an eine Rastereinheit 455 aus.
  • Die Rastereinheit 455 konvertiert in abtastender Weise die neuen grafischen Grundelemente und gibt Fragmente und Abdeckungsdaten an die Fragment-Verarbeitungseinheit 460 aus. Ferner kann die Rastereinheit 455 ausgebildet sein, eine z-Auswahl und andere z-basierte Optimierungen durchzuführen.
  • Die Fragment-Verarbeitungseinheit 460 ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Fragment-Schattierungsprogramme auszuführen, wobei Fragmente, die aus der Rastereinheit 455 erhalten werden, transformiert werden in der Art, wie dies durch die Fragment-Schattierungsprogramme angegeben ist. Beispielsweise kann die Fragment-Verarbeitungseinheit 460 so programmiert sein, dass Operationen ausgeführt werden, etwa eine perspektivische Korrektur, eine Texturzuordnungen, eine Schattierung, eine Mischung und dergleichen, um schattierte Fragmente zu erzeugen, die an die CROP-Einheit 465 ausgegeben werden. Die Fragment-Verarbeitungseinheit 460 kann Daten lesen, die in dem Parallelverarbeitungsspeicher 204 oder in den Systemspeicher 104 zur Verwendung bei der Verarbeitung der Fragmentdaten gespeichert sind. Fragmente können schattiert sein auf Ebene von Pixel, Abtastwerten oder entsprechend einer anderen Auflösung, wobei dies von der programmierten Abtastrate abhängig.
  • Die CROP-Einheit 465 ist eine Verarbeitungseinheit, die Rasteroperationen ausführt, etwa Schablonenbildung, z-Test, Mischung und dergleichen, und die Pixeldaten als verarbeitete Grafikdaten zur Speicherung im Grafikspeicher ausgibt. Die verarbeiteten Grafikdaten können im Grafikspeicher, beispielsweise dem Parallelverarbeitungsspeicher 204, und/oder dem Systemspeicher 104 zur Anzeige auf dem Anzeigegerät 110 oder zur weiteren Verarbeitung durch die CPU 102 oder das Parallelverarbeitungssubsystem 112 gespeichert werden. In gewissen Ausführungsformen umfasst jedes Pixel mehrere Farbabtastwerte. In einigen Ausführungsformen ist die CROP-Einheit 465 ausgebildet, z-Abtastdaten, Farbabtastdaten oder eine Kombination davon zu komprimieren, die in den Speicher geschrieben werden, und um z-Abtastdaten und Farbabtastdaten zu dekomprimieren, die aus dem Speicher gelesen werden. Das Ziel dieser Komprimiertechnik besteht darin, nicht die Größe eines Bildes im Speicher zu reduzieren, sondern den Bearbeitungsaufwand zu verringern, der mit dem Bild verknüpft ist, indem alle Abtastwerte für ein gegebenes Pixel durch eine Gruppe aus Abtastwerten dargestellt wird, die eine Verarbeitung erfordern. In einer typischen Szene enthält die Mehrheit der Pixel Farbabtastwerte mit gleichem Wert und diese Komprimiertechnik ermöglicht ein verbessertes Verarbeitungsverhalten. Es werden mehrere Farbabtastwerte kombiniert, um ein fehlerbefreites Pixel in einem resultierenden Bild zur Anzeige oder zur weiteren Verarbeitung zu erzeugen. Wenn alle Farbabtastwerte, die zu einem speziellen Pixel gehören, im Wert gleich sind, wird ein einziger Farbabtastwerte für das Pixel gespeichert und die Statusinformation für das Pixel wird so festgelegt, dass sie anzeigt, dass die Abtastwerte komprimiert sind. In einer Ausführungsform haben die Abtastwerte, die zu einem Pixel gehören, die gleiche Farbe, wenn ein entsprechendes Fragment das Pixel vollständig bedeckt. Farbabtastwerte für das Pixel innerhalb des Bildes können kombiniert werden, um ein fehlerbefreites Pixel für die Anzeige zu erzeugen.
  • Topologieoptimierung
  • In gewissen Ausführungsformen ist die Grafikverarbeitungs-Pipeline 400 ausgebildet, ein Bild zu erzeugen, das durch einen Fächer aus Dreiecken definiert ist, die aus komplexen Pfadelementen, die ein Pfadbild umfassen, parkettartig bzw. mosaikartig erzeugt sind. Die Fächer aus Dreiecken werden konventioneller Weise um einen Ankerpunkt herum parkettartig angeordnet, um Umlaufzahlen für abgedeckte Abtaststellen zu bewahren. Die Fächer aus Dreiecken streichen entlang jedes Pfadelements innerhalb des Pfadbildes, um eine Fläche abzudecken, die Pfadelemente innerhalb des Pfadbildes entsprechen. Diese Art des Parkettierungsprozesses ist nahe liegend und erzeugt eine korrekte Pfadabdeckung und korrekte Umlaufzahlen für die Abtaststellen. Jedoch neigen resultierende Dreiecke tendenziell dazu, relativ schmal zu sein, was zur Ineffizienz in einem nachfolgenden Rastereinteilungsschritt führt. Ausführungsformen der vorliegenden Erfindung ermöglichen ein verbessertes Verhalten bei der Pfad-Bilderzeugung mittels Topologieoptimierung, um die mittlere Dreiecksbreite zu vergrößern oder die mittlere Dreiecksfläche zu verringern, wodurch die mittlere Rastereinteilungseffizienz verbessert wird.
  • In gewissen Ausführungsformen wird die Topologieoptimierung unmittelbar vor der Pfad-Bilderzeugung des Pfadbildes durchgeführt. In anderen Ausführungsformen wird die Topologieoptimierung in Verbindung mit der Erzeugung des Pfadbildes ausgeführt. In derartigen Ausführungsformen wird das Pfadbild dann mit optimierter Topologie gespeichert. Die Topologieoptimierung wird durch die Anwendung einer Reihe von Topologie-Umkehr-Operationen an einer Gruppe aus parkettbasierten bzw. mosaikartig angeordneten Dreiecken erreicht, die das Pfadbild definieren.
  • 5A zeigt eine Umkehroperation bzw. Flip-Operation 500 an einem Dreieckspaar, das aus Pfadelementen parkettartig bzw. mosaikartig erzeugt ist, gemäß einer Ausführungsform der vorliegenden Erfindung. Ein gegebenes Dreieck ist durch drei Vertices bzw. Eckpunkte definiert und kann eindeutig durch die drei Vertices gekennzeichnet werden. Beispielsweise kann ein Dreieck mit dem Eckpunkten ABC als ein Dreieck ABC oder einfach als „ΔABC” bezeichnet werden. Wie gezeigt, ist das Dreieck 510 (ΔABC) durch die Eckpunkte ABC findet, das Dreieck 512 (ΔACD) ist durch die Eckpunkte ACD definiert, das Dreieck 514 (ΔABD) ist durch die Eckpunkte ABD definiert, und das Dreieck 516 (ΔBCD) ist durch die Eckpunkte BCD definiert. Jedes Dreieck hat eine zugehörige Umlaufreihenfolge, die typischerweise spezifiziert ist als im Uhrzeigersinn oder im Gegenuhrzeigersinn. Jedes Dreieck besitzt ferner eine zugehörige Fläche, die positiv sein kann, wenn das Dreieck eine Umlaufreihenfolge im Gegenuhrzeigersinn hat, oder die negativ ist, wenn das Dreieck eine Umlaufreihenfolge im Uhrzeigersinn hat. Ein Dreieck kann als nach vorne gewandt betrachtet werden, wenn es eine negative Fläche hat, und kann als nach hinten gewandt betrachtet werden, wenn es eine positive Fläche hat.
  • Die Abdeckung für jede Abtaststelle innerhalb eines Bildes wird als eine Umlaufzahl akkumuliert. Vor der Bilderzeugung wird typischerweise eine voreingestellte Umlaufzeit von null (nicht abgedeckt) zugeordnet. Wenn ein nach hinten gewandtes Dreieck eine Abtaststelle abdeckt, wird eine Umlaufzahl für die Abtaststelle erniedrigt. Wenn ein nach vorne gewandtes Dreieck die Abtaststelle abdeckt, wird eine Umlaufzahl für die Abtaststelle erhöht. Es können viele Dreiecke die gleiche Abtaststelle abdecken, und eine endgültige Umlaufzahl für die Abtaststelle wird als eine Summe der Umlaufzahlen für jedes Dreieck, das die Abtaststelle bedeckt, berechnet. Umlaufzahlen für Abtaststellen innerhalb eines erzeugten Bildes können in einem Schablonenpuffer, Farbpuffer oder in einem anderen technisch machbaren Puffer akkumuliert werden, der ein zweidimensionales Array aus Werten aufweist. Eine gegebene Umlaufzahl bestimmt, ob eine entsprechende Abtaststelle innerhalb eines zugehörigen Pfads liegt. In einer typischen Implementierung zeigt eine Umlaufzahl, die gleich null ist, an, dass die Abtaststelle nicht innerhalb eines zugehörigen Pfads liegt, während eine Umlaufzahl, die nicht null ist, angibt, dass die Abtaststelle innerhalb des Pfads liegt. Somit stellt die Umlaufzahl einen Indikator für eine Pfadinklusion bzw. einen Pfadinklusionsindikator für die Abtaststelle bereit. In gewissen alternativen Implementierungen wird ein einzelnes Statusbit als der Pfadinklusionsindikator für die Abtaststelle beibehalten. In derartigen Implementierungen ändert sich bei Abdeckung durch ein neues Dreieck der Zustand jedes Statusbits.
  • Die Flip-Operation bzw. Umkehroperation 500 empfängt als Eingabe ΔABC und ΔACD und erzeugt als Ausgabe ΔABD und ΔBCD. Die Eckpunkte A bis D bleiben geometrisch an der Stelle und die Orientierungsattribute für jedes Dreieckgebiet werden bewahrt. Ferner ist die Fläche von ΔABC + ΔACD gleich der Fläche von ΔABD + ΔBCD. Eine geeignete Umkehroperation ist im Stand der Technik als eine bistellare Umkehroperation bekannt.
  • 5B zeigt den Verarbeitungsaufwand, der mit einem Dreieckspaar verknüpft ist, gemäß einer Ausführungsform der vorliegenden Erfindung. In gewissen Bilderzeugungsarchitekturen sind schmale Dreiecke weniger effizient zu erzeugen als breitere Dreiecke. Insbesondere erzeugt die Rastereinteilung eines Dreiecks, die von der Rastereinheit 455 aus 4 durchgeführt wird, einen Aufwand bzw. Kosten im Hinblick auf Taktzyklen von einem Taktzyklus pro Dreieckskante, die ein feines Rastergebiet 520 schneidet. Wie gezeigt, ist das Dreieckspaar 510, 512 aus 5A auf zwölf feine Rastergebiete 520 projiziert. Ein Gebiet 520(0) enthält fünf Dreieckskanten, ein Gebiet 520(1) enthält zwei Dreieckskanten und ein Gebiet 520(2) enthält vier Dreieckskanten. Wenn alle Dreieckskanten, die zu dem Dreieckspaar gehören, aufsummiert werden, ergeben sich insgesamt dreißig Dreieckskanten innerhalb der zwölf feinen Gebiete, wodurch angegeben wird, dass 30 Zyklen erforderlich sind, um das Dreieckspaar in Raster zu unterteilen.
  • 5C zeigt den Verarbeitungsaufwand, der mit einem umgekehrten Dreieckspaar gemäß einer Ausführungsform der vorliegenden Erfindung verknüpft ist. Wie gezeigt, enthält das Dreieckspaar 514, 516 aus 5A insgesamt einundzwanzig Dreieckskanten innerhalb der feinen Rastergebiete 520. Die Gesamtheit der einundzwanzig Dreieckskanten gibt an, dass einundzwanzig Zyklen erforderlich sind, um das umgekehrte Dreieckspaar in ein Raster einzuteilen. In diesem Beispiel ist der Aufwand für die Rastereinteilung, der mit einem Gebiet verknüpft ist, das von den Dreiecken 510 und 512 bedeckt wird, von dreißig Zyklen auf einundzwanzig Zyklen reduziert infolge der Darstellung des Gebiets mit breiteren Dreiecken 514 und 516.
  • 6 zeigt eine Umkehroperation 600 an einem Dreieckspaar mit unterschiedlichen Orientierungsattributen gemäß einer Ausführungsform der vorliegenden Erfindung. Dabei ist ΔEGH ein nach vorne gewandtes Dreieck, während ΔEHF ein nach hinten gewandtes Dreieck ist. Da jedes Dreieck in dem Dreieckspaar ein unterschiedliches Orientierungsattribut besitzt, löschen sich die Umlaufzahlen für die Abtaststellen in überlappenden Gebieten des Dreieckspaars zu null aus, wodurch angegeben wird, dass der Pfad diese Abtaststellen nicht abdeckt. Umlaufzahlen für Abtaststellen in nicht überlappenden Gebieten sind nicht null, wodurch angegeben wird, dass der Pfad diese Abtaststellen abdeckt.
  • Die Umkehroperation 600 erzeugt ΔEGF, das nach hinten gewandt ist, und ΔGHF, das nach vorne gewandt ist. Das Gebiet EJH ist weder durch das Dreieck ΔEGF noch durch ΔEHF abgedeckt, und die Abtaststellen, die darin liegen, werden weder von ΔEGF noch von ΔGHF geändert. Ein Gebiet FGJ ist sowohl von ΔEGF als auch von ΔGHF abgedeckt, und die Abtaststellen, die darin liegen, haben Umlaufzahlen, die sich aufgrund der Beitrage von ΔEGF und ΔGHF zu null auslöschen.
  • Wie hierin durch die Umkehroperation 500 und durch die Umkehroperation 600 dargestellt ist, erzeugt eine bistellare Umkehroperation Dreiecksbreiten, die zur Bestimmung der Abdeckung für einen Pfad, der dem Dreieckspaar zugeordnet ist, geeignet sind. In dem Beispiel aus 6 wird eine bessere Rastereffizienz als Folge der Umkehroperation 600 erreicht, da eine Kombination der ΔEGF und ΔGHF weniger Abtaststellen erzeugen muss während der Rasterunterteilung als eine Kombination aus ΔEGH und ΔEHF.
  • 7 zeigt eine Sequenz aus Umkehroperationen 710, 720 für eine insgesamt verbesserte Topologieoptimierung gemäß einer Ausführungsform der vorliegenden Erfindung. Wie gezeigt, transformiert die Umkehroperation 710 ΔKLN und ΔKMN in eine Topologie, die ΔKLN und ΔKLN enthält. Die Umkehroperation 710 transformiert ferner ΔKNP und ΔKPQ in eine Topologie mit ΔKNQ und ΔNPQ. Nach der Umkehroperation 710 ist jedes Dreieck für eine effizientere Rasterunterteilung breiter. Die Umkehroperation 720 erzeugt ΔKLQ, ΔLNQ, ΔLMN und ΔNPQ, die alle generell Dreiecke sind im Hinblick auf eine effizientere Rasterunterteilung. Die Verwendung der Umlaufzahlen zur Bestimmung, welche Gebiete abgedeckt werden, ergibt eine identische Abdeckung für jede unterschiedliche Gruppe aus vier gezeigten Dreiecken.
  • 8 ist ein Flussdiagramm von Verfahrensschritten zur Ausführung einer Pfad-Bilderzeugung mit optimierter Dreieckstopologie gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 14 geschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge geeignet ist, innerhalb des Schutzbereichs der Erfindung liegt. In einer Ausführungsform werden die Verfahrensschritte von einer CPU-Einheit, etwa der CPU 102 aus 1 ausgeführt. In einer weiteren Ausführungsform werden die Verfahrensschritte von einer GPU-Einheit, etwa dem Parallelverarbeitungssubsystem 112, ausgeführt.
  • Wie gezeigt, beginnt ein Verfahren 800 in einem Schritt 810, in welchem ein Pfadbild, das Pfadelemente enthält, empfangen wird. Im Schritt 820 wird das Pfadbild in eine Gruppe aus repräsentativen Dreiecken parkettartig unterteilt. Eine Technik zur parkettartigen oder mosaikartigen Unterteilung des Pfadbildes beinhaltet die Auswahl eines Ankerpunkts und die Bildung von Fächern von Dreiecken um den Ankerpunkt herum. Ein gegebenes Dreieck, das einen Dreiecksfächer bildet, kann nach vorne gewandt oder nach hinten gewandt sein und kann einen positiven oder einen negativen Wert zu den Umlaufzahlen hinzufügen, die mit dem von dem Dreieck abgedeckten Abtaststellen verknüpft sind. Die gesamte Gruppe aus repräsentativen Dreiecken stellt eine auflösungsunabhängige Darstellung des Pfadbildes bereit, die auflösungsunabhängige Konturen umfassen kann.
  • Im Schritt 830 wird die Topologie für die Gruppe aus repräsentativen Dreiecken optimiert unter Anwendung eines Umkehr-Operators, der selektiv auf Dreieckspaare einwirkt, die eine gemeinsame Kante besitzen. Der Umkehr-Operator wird auf ein gegebenes Dreieckspaar angewendet, wenn eine resultierende Topologie gemäß zuminderst einer Umkehr-Maßzahl verbessert ist, ansonsten wird der Umkehr-Operator nicht auf dieses Dreieckspaar angewendet. Eine Umkehr-Maßzahl ist eine Flächensumme für Dreiecke, die ein Dreieckspaar umfassen. Ein nach vorne gewandtes Dreieck und ein nach hinten gewandtes Dreieck, die überlappen, können zumindest einen Teil ihrer entsprechenden Flächen auslöschen und erfordern weniger Rasteraufwand, wie dies in 6 gezeigt ist. Diese Maßzahl kann daher verbessert werden, wenn die Flächensumme verringert wird. Eine weitere Umkehr-Maßzahl ist eine Dreieckssplitterung (oder eine Maßzahl für die Schmalheit) für das Paar aus Dreiecken, wobei diese Zahl als der minimale Winkel zwischen beliebigen zwei Kanten, die zu dem Dreieckspaar gehören, definiert werden kann. Diese Maßzahl kann daher verbessert werden, indem der minimale Winkel vergrößert wird, wodurch das schmalste Dreieck des Dreieckspaars verbreitert wird. Eine Realisierung des Schritts 830 ist detaillierter nachfolgend in 9 dargestellt.
  • Im Schritt 840 wird eine optimierte Gruppe aus Dreiecken gespeichert. Die optimierte Gruppe aus Dreiecken kann die Gruppe der repräsentativen Dreiecke und topologischen Optimierungen, die darauf angewendet sind, umfassen. Die optimierte Gruppe aus Dreiecken kann in einem temporären Puffer innerhalb eines Speichersubsystems für die Bilderzeugung gespeichert werden. Die optimierte Gruppe aus Dreiecken kann auch in einem nicht-flüchtigen Speichermedium gespeichert werden, um zu einer künftigen Zeit erzeugt zu werden. Im Schritt 850 wird die optimierte Gruppe aus Dreiecken zur Bilderzeugung eingesetzt, um ein entsprechendes Bild mit einer spezifizierten Auflösung zu erzeugen. In einer Ausführungsform wird die optimierte Gruppe aus Dreiecken entsprechend einer Pfaderzeugung-Schablonen- und Abdeck-Technik erzeugt. Es kann eine beliebige technisch machbare Realisierung einer Schablone und Abdeckung eingerichtet werden, ohne von dem Schutzbereich und dem Grundgedanken der vorliegenden Erfindung abzuweichen. In typischen Realisierungen einer Schablone und Abdeckung wird zunächst eine Umlaufzahl für die Abtaststelle eines zweidimensionalen Puffers erzeugt durch Akkumulieren von Umlaufzahlen für unterschiedliche Abtaststellen auf der Grundlage der Abdeckung den Dreiecken, die das Pfadbild definieren. Anschließend werden Abtaststellen mit Umlaufzahlen, die ungleich Null sind, in dem entsprechenden Bild abgedeckt, um eine Bilderzeugung des Pfadbildes zu erreichen. Das Verfahren endet im Schritt 890.
  • 9 ist ein Flussdiagramm von Verfahrensschritten zur Ausführung einer Topologieoptimierung gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 14 beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge geeignet ist, innerhalb des Schutzbereichs der Erfindung liegt. In einer Ausführungsform werden die Verfahrensschritte von einer CPU-Einheit, etwa der CPU 102 aus 1 ausgeführt. In einer weiteren Ausführungsform werden die Verfahrensschritte von einer GPU-Einheit, etwa dem Parallelverarbeitungssubsystem 112, ausgeführt.
  • Wie gezeigt, beginnt das Verfahren 900 im Schritt 910, in welchem eine Gruppe aus repräsentativen Dreiecken für ein Pfadbild empfangen wird. Die Gruppe repräsentativer Dreiecke umfasst Dreiecke, die aus der Parkettunterteilung des Pfadbildes erzeugt sind. Wenn im Schritt 920 ein Maß für eine Beendigung nicht erfüllt ist, geht das Verfahren zum Schritt 922 weiter. Ein Maß für die Beendigung kann beispielsweise einen Zeitüberlauf-Mechanismus, ein Schwellwert für den Iterationszähler, eine Kostenfunktionen oder eine andere technisch mögliche Maßzahl zur Bestimmung eines Endes beinhalten. Die Iterationszahl kann eine Zahl an Durchläufen durch eine Arbeitsgruppe aus Dreiecken wiedergeben, die Dreiecke aus der Gruppe der repräsentativen Dreiecke, umgekehrte Dreieckspaar aus der Gruppe der repräsentativen Dreiecke oder eine Kombination davon enthalten kann. Die Arbeitsgruppe der Dreiecke enthält Dreiecke in beliebig optimiertem Zustand, die das Pfadbild definieren.
  • Im Schritt 922 wird eine Umkehr-Maßzahl für mindestens ein Paar aus Dreiecken innerhalb der Arbeitsgruppe der Dreiecke berechnet. Eine Umkehr-Maßzahl kann eine Flächensumme oder eine Maßzahl für die Schmalheit beinhalten, wie dies zuvor in 8 beschrieben ist, oder kann eine andere technisch realisierbare Maßzahl beinhalten, die dazu dient, die relative Optimiertheit einer gegebenen Dreieckstopologie zu messen. Im Schritt 924 werden Dreieckspaare aus dem mindestens einen Paar aus Dreiecken, die ein Umkehr-Maßzahlkriterium erfüllen, ausgewählt. In einer Ausführungsform durchläuft ein „Gierig”-Auswahlalgorithmus alle Dreiecke innerhalb der Arbeitsgruppe aus Dreiecken und behält Dreieckspaare aus, die die Anforderung einer Umkehr-Maßzahl erfüllen. Im Schritt 926 wird eine Umkehr-Operation an ausgewählten Dreieckspaaren ausgeführt.
  • Es sei wieder auf den Schritt 920 verwiesen; wenn ein Maß für die Beendigung erfüllt ist, dann endet das Verfahren im Schritt 990.
  • Zusammengefasst gilt: es wird eine Technik für effizientes Erzeugen eines Pfadbildes offenbart. Die Pfadelemente, etwa Konturen, die das Pfadbild bilden, werden in eine Gruppe aus repräsentativen Dreiecken parkettartig eingeteilt, die als Dreiecksfächer aufgebaut strukturiert sind. Dreieckspaare, die aus der Gruppe repräsentative Dreiecke ausgewählt sind, werden im Hinblick auf die Effizienz der Rastereinteilung unter Anwendung eines Umkehr-Operators, der auf Dreieckspaare angewendet wird, optimiert, die eine Anforderung für ein Umkehr-Maß erfüllen. Es können ein oder mehrere Optimierungsdurchläufe für eine Gruppe aus repräsentativen Dreiecken ausgeführt werden, um die gesamten Kosten bzw. den Aufwand für die Rastereinteilung zu reduzieren. Eine resultierende Gruppe aus Dreiecken wird dann unter Anwendung einer beliebigen technisch machbaren Technik, etwa Schablonen- und Abdeckungs-Bilderzeugung umgesetzt. Ein Vorteil der offenbarten Technik besteht darin, dass sie die Bilderzeugungseffizienz für Pfadbilder, die von einer grafischen Verarbeitungseinheit erzeugt werden, verbessert.
  • Obwohl sich das Vorhergehende an Ausführungsformen der vorliegenden Erfindung richtet, können andere und weitere Ausführungsformen der Erfindung erdacht werden, ohne von deren grundlegenden Schutzbereich abzuweichen. Beispielsweise können Aspekte der vorliegenden Erfindung in Hardware oder Software oder in einer Kombination aus Hardware und Software realisiert werden. Eine Ausführungsform der Erfindung kann als ein Programmprodukt zur Verwendung in einem Computersystem realisiert werden. Das bzw. die Programme des Programmprodukts definieren Funktionen der Ausführungsformen (einschließlich der hierin beschriebenen Verfahren) und können in einer Vielzahl von computerlesbaren Speichermedien enthalten sein. Zu anschaulichen computerlesbaren Speichermedien gehören, ohne Einschränkung: (i) nicht-beschreibbare Speichermedien (beispielsweise Nur-Lese-Speichereinrichtungen in einem Computer, etwa CD-ROM-Disketten, die von einem CD-ROM-Laufwerk lesbar sind, Flash-Speicher, ROM-Chips oder eine andere Art eines nicht flüchtigen Halbleiterspeichers), auf welchen Information permanent gespeichert ist; und (ii) beschreibbare Speichermedien (beispielsweise Disketten in einem Diskettenlaufwerk oder ein Festplattenlaufwerk oder eine andere Art eines Halbleiterspeichers mit wahlfreiem Zugriff), auf welchen änderbare Information gespeichert ist.
  • Die Erfindung ist mit Bezug zu speziellen Ausführungsformen beschrieben worden. Der Fachmann erkennt jedoch, dass diverse Modifizierungen und Änderungen daran vorgenommen werden können, ohne von dem breiteren Grundgedanken und dem Schutzbereich der Erfindung abzuweichen, wie sie in den angefügten Patentansprüchen angegeben ist. Die vorhergehende Beschreibung und die Zeichnungen sind daher als anschaulich und nicht als beschränkend zu betrachten.
  • Daher ist der Schutzbereich der vorliegenden Erfindung durch die folgenden Patentansprüche festgelegt.

Claims (10)

  1. Ein Verfahren zur Verarbeitung eines Pfadbildes, um eine Rastereinteilung zu ermöglichen, wobei das Verfahren umfasst: Parkettartiges Unterteilen einer oder mehrerer Konturen, die das Pfadbild definieren, in eine erste Gruppe aus Dreiecken, wobei mindestens ein Dreieck, das in der ersten Gruppe aus Dreiecken enthalten ist, mindestens eine Abtaststelle abdeckt, und wobei die mindestens eine Abtaststelle einen Pfadinklusionsindikator enthält; Erzeugen einer zweiten Gruppe aus Dreiecken, die ausgebildet sind, den Aufwand der Rasterunterteilung auf der Grundlage des einen oder mehreren Dreiecke, die in der ersten Gruppe aus Dreiecken enthalten sind, zu reduzieren; und Speichern der zweiten Gruppe aus Dreiecken in einem Speicher.
  2. Das Verfahren nach Anspruch 1, wobei jedes in der ersten Gruppe aus Dreiecken enthaltene Dreieck eine Umlaufreihenfolge enthält, wobei der Pfadinklusionsindikator eine Umlaufzahl auf der Grundlage einer Umlaufreihenfolge, die mit einem abdeckenden Dreieck verknüpft ist, umfasst.
  3. Das Verfahren nach Anspruch 1, das ferner umfasst: Erzeugen eines Bildes in einem Bildpuffer mit einer spezifizierten Auflösung durch Ausführung der Schritte: Erzeugen eines Pfadinklusionsindikators für jede Abtaststelle in einem Schablonenpuffer auf der Grundlage der zweiten Gruppe aus Dreiecken; und Erzeugen einer Bildfarbe auf der Grundlage eines entsprechenden Pfadinklusionsindikators, der in dem Schablonenpuffer liegt.
  4. Das Verfahren nach Anspruch 1, wobei die parkettartige Unterteilung umfasst: Auswählen eines Ankerpunkts für das Pfadbild; und Erzeugen eines unterschiedlichen Dreiecksfächers für jede der einen oder mehreren Konturen, wobei Dreiecke, die zu dem einen oder den mehreren Dreiecksfächern gehören, in der ersten Gruppe aus Dreiecken enthalten sind.
  5. Das Verfahren nach Anspruch 1, wobei Erzeugen der zweiten Gruppe aus Dreiecken umfasst: Berechnen eines Umkehr-Maßes für ein oder mehrere Dreieckspaare, die in der ersten Gruppe aus Dreiecken enthalten sind, oder für ein oder mehrere Dreieckspaare, die in der zweiten Gruppe aus Dreiecken enthalten sind; Auswählen mindestens eines Dreieckspaars aus den einen oder mehreren Dreieckspaaren, die ein Kriterium für das Umkehr-Maß erfüllen; Ausführen einer Umkehr-Operation an dem mindestens einen Dreieckspaar, um mindestens eine resultierendes Dreieckspaar zu erzeugen; und Hinzufügen des resultierenden Dreieckspaars zu der zweiten Gruppe aus Dreiecken.
  6. Das Verfahren nach Anspruch 5, das ferner umfasst: Ermitteln, dass ein Maß für die Beendigung nicht erfüllt worden ist.
  7. Das Verfahren nach Anspruch 5, wobei das Umkehr-Maß für ein gegebenes Dreieckspaar eine Summe von Dreiecksflächen für zwei Dreiecke, die das gegebene Dreieckspaar bilden, umfasst.
  8. Das Verfahren nach Anspruch 5, wobei das Umkehr-Maß für ein gegebenes Dreieckspaar einen minimalen Winkel, der zu zwei Dreiecken gehört, die das gegebene Dreieckspaar bilden, umfasst.
  9. Das Verfahren nach Anspruch 5, wobei Aswählen mindestens eines Dreieckspaars umfasst: Durchlaufen der ersten Gruppe aus Dreiecken, um eine Sequenz aus Dreieckspaaren zu erzeugen; Berechnen eines anderen Umkehr-Maßes für jedes Dreieckspaar in der Sequenz aus Dreieckspaaren; und Ermitteln mindestens eines Dreieckspaars, das ein Kriterium für das Umkehr-Maß erfüllt.
  10. Eine Recheneinrichtung mit: einem Speicher; und einer Verarbeitungseinheit, die mit dem Speicher verbunden und ausgebildet ist, ein Pfadbild zu erzeugen durch: parkettartiges Unterteilen einer oder mehrerer Konturen, die das Pfadbild definieren, in eine erste Gruppe aus Dreiecken, wobei mindestens ein Dreieck, das in der ersten Gruppe aus Dreiecken enthalten ist, mindestens eine Abtaststelle abdeckt, und wobei die mindestens eine Abtaststelle einen Pfadinklusionsindikator aufweist; Erzeugen einer zweiten Gruppe aus Dreiecken, die ausgebildet sind, den Aufwand für die Rasterunterteilung auf der Grundlage des einen oder den mehreren Dreiecke, die in der ersten Gruppe aus Dreiecken enthalten sind, zu reduzieren; Speichern der zweiten Gruppe aus Dreiecken in einem Speicher; und Erzeugen eines Bildes mit spezifizierter Auflösung unter Anwendung einer Schablone- und Abdeckungs-Bilderzeugung der zweiten Gruppe aus Dreiecken.
DE102013017981.5A 2012-12-17 2013-11-29 Optimierung einer Dreieck-Topologie für Pfad-Bilderzeugung Pending DE102013017981A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/717,458 2012-12-17
US13/717,458 US9558573B2 (en) 2012-12-17 2012-12-17 Optimizing triangle topology for path rendering

Publications (1)

Publication Number Publication Date
DE102013017981A1 true DE102013017981A1 (de) 2014-06-18

Family

ID=50821482

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102013017981.5A Pending DE102013017981A1 (de) 2012-12-17 2013-11-29 Optimierung einer Dreieck-Topologie für Pfad-Bilderzeugung

Country Status (4)

Country Link
US (1) US9558573B2 (de)
CN (1) CN103871019B (de)
DE (1) DE102013017981A1 (de)
TW (1) TWI611373B (de)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9836879B2 (en) * 2013-04-16 2017-12-05 Autodesk, Inc. Mesh skinning technique
EP2985735B1 (de) 2014-08-11 2019-12-04 Samsung Electronics Co., Ltd Verfahren und vorrichtung zur durchführung von kachelbasierter wegdarstellung
CN106371780B (zh) * 2015-07-22 2019-08-13 龙芯中科技术有限公司 矢量图形处理方法和装置
US10643381B2 (en) * 2016-01-12 2020-05-05 Qualcomm Incorporated Systems and methods for rendering multiple levels of detail
KR102618560B1 (ko) 2016-06-15 2023-12-27 삼성전자주식회사 경로 렌더링을 수행하는 방법 및 장치
KR102446865B1 (ko) * 2017-09-12 2022-09-23 삼성전자주식회사 경로 렌더링을 수행하는 그래픽 처리 장치 및 그래픽 처리 방법
KR20200073697A (ko) 2018-12-14 2020-06-24 삼성전자주식회사 경로를 포함하는 객체를 렌더링하는 장치, 이를 포함하는 컴퓨팅 장치 및 이의 렌더링 방법
CN113052939B (zh) * 2019-12-10 2024-03-08 辉达公司 对路径描边的补丁区段、顶端和连接统一编码

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6064771A (en) 1997-06-23 2000-05-16 Real-Time Geometry Corp. System and method for asynchronous, adaptive moving picture compression, and decompression
JP4464657B2 (ja) 2002-11-12 2010-05-19 パナソニック株式会社 曲面画像処理装置及び曲面画像処理方法
US7212205B2 (en) * 2002-11-12 2007-05-01 Matsushita Electric Industrial Co., Ltd. Curved surface image processing apparatus and curved surface image processing method
US7408553B1 (en) * 2005-12-15 2008-08-05 Nvidia Corporation Inside testing for paths
JP4157569B2 (ja) * 2006-05-11 2008-10-01 株式会社東芝 描画装置、描画方法及び描画プログラム
US8773432B2 (en) * 2008-04-18 2014-07-08 Adobe Systems Incorporated Triangulation for accelerated multi-resolution rendering of stroked paths
US10424112B2 (en) * 2012-05-14 2019-09-24 Autodesk, Inc. Mesh boundary smoothing

Also Published As

Publication number Publication date
US20140168222A1 (en) 2014-06-19
US9558573B2 (en) 2017-01-31
TWI611373B (zh) 2018-01-11
CN103871019B (zh) 2017-05-31
TW201439971A (zh) 2014-10-16
CN103871019A (zh) 2014-06-18

Similar Documents

Publication Publication Date Title
DE102013020613A1 (de) Umgehung der Pixel-Schattierung für die grafische Bilderzeugung mit geringer Leistung
DE102013020614A1 (de) Mit Mehrfachauflösung konsistente Rastereinteilung
DE102013017981A1 (de) Optimierung einer Dreieck-Topologie für Pfad-Bilderzeugung
DE102013017640B4 (de) Verteilte gekachelte Zwischenspeicherung
DE102013020810A1 (de) Effiziente Super-Abtastung mit Schattierungs-Strängen pro Pixel
DE102013018139A1 (de) Technik zur Speicherung gemeinsamer Vertices
DE102013017639B4 (de) Zwischenspeicherung von adaptiv dimensionierten Cache-Kacheln in einem vereinheitlichten L2-Cache-Speicher mit Oberflächenkomprimierung
DE102013020807A1 (de) Handhabung von nachgeordneten Z-Abdeckungsdaten in Rasteroperationen
DE102013018445A1 (de) Festlegung eines nachgeordneten Bilderzeugungszustands in einer vorgeordneten Schattierungseinheit
DE102009039231B4 (de) Einzeldurchgang-Kachelung
DE102018132468A1 (de) Multi-gpu-frame-rendern
DE102013022257A1 (de) Programmierbares Mischen in mehrsträngigen Verarbeitungseinheiten
DE102016122297A1 (de) Mehrfach-Durchlauf-Rendering in einer Bildschirm-Raum-Pipeline
DE102018114286A1 (de) Durchführen einer Traversierungs-Stack-Komprimierung
DE102013018136A1 (de) Technik zur Speicherung gemeinsamer Vertices
DE102013021046A1 (de) Erzeugung fehlerbefreiter Voxel-Daten
DE102013020968A1 (de) Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher
DE102008026431A1 (de) Extrapolation von nicht residenten Mipmap-Daten unter Verwendung residenter Mipmap-Daten
DE102013114090A1 (de) Konservative Rasterung von Primitiven unter Benutzung eines Fehler-Terms
DE112013005255T5 (de) Bedarfsweise Geometrie- und Beschleunigungsstrukturerzeugung
DE102013020966A1 (de) Leistungseffiziente Attribut-Handhabung für Parkettierungs- und Geometrie-Schattierungseinheiten
DE102019135639A1 (de) Auf Echtzeit-Strahlverfolgung (RTRT) basierende adaptive Mehrfrequenzschattierung (AMFS)
DE112017001703T5 (de) Verfahren und Vorrichtung zum effizienteren Ray-Tracing von instanziierter Geometrie
DE102016109905A1 (de) Stückweise lineare unregelmäßige Rasterisierung
DE102013020967B4 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

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

R016 Response to examination communication