DE102013017980B4 - Auslösung einer Leistungsereigniserfassung durch parallele Zustandsbündel - Google Patents

Auslösung einer Leistungsereigniserfassung durch parallele Zustandsbündel Download PDF

Info

Publication number
DE102013017980B4
DE102013017980B4 DE102013017980.7A DE102013017980A DE102013017980B4 DE 102013017980 B4 DE102013017980 B4 DE 102013017980B4 DE 102013017980 A DE102013017980 A DE 102013017980A DE 102013017980 B4 DE102013017980 B4 DE 102013017980B4
Authority
DE
Germany
Prior art keywords
workload
graphics processing
processing pipeline
event
unit
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.)
Active
Application number
DE102013017980.7A
Other languages
English (en)
Other versions
DE102013017980A1 (de
Inventor
Roger L. Allen
Ziyad S. Hakura
Thomas Melvin OGLETREE
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 DE102013017980A1 publication Critical patent/DE102013017980A1/de
Application granted granted Critical
Publication of DE102013017980B4 publication Critical patent/DE102013017980B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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

Landscapes

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

Abstract

Eine Ausführungsform der vorliegenden Erfindung gibt ein Verfahren zur Analyse des Leistungsverhaltens einer Grafikverarbeitungs-Pipeline an. Eine erste Arbeitslast und eine zweite Arbeitslast werden miteinander in einer Pipeline kombiniert, um eine kombinierte Arbeitslast zu erzeugen. Die erste Arbeitslast ist mit einer ersten Instanz verknüpft und die zweite Arbeitslast ist mit einer zweiten Instanz verknüpft. Es werden ein erstes und ein zweites Anfangsereignis für die kombinierte Arbeitslast erzeugt, die angeben, dass mit der Verarbeitung der ersten und der zweiten Arbeitslast an einer ersten Position in der Grafikverarbeitungs-Pipeline begonnen wurde. Es werden ein erstes und ein zweites Endereignis erzeugt, die angeben, dass die Verarbeitung der ersten und der zweiten Arbeitslast an einer zweiten Position in der Grafikverarbeitungs-Pipeline beendet ist.

Description

  • HINTERGRUND DER ERFINDUNG
  • Gebiet der Erfindung
  • Folgende Dokumente stellen den Stand der Technik dar: US 2012 / 0 232 845 A1 , US 2010 / 0 020 090 A1 , US 2008 / 0 100 627 A1 , US 8 963 932 B1 , US 7 778 800 B2 , US 2007/0 139 421 A1 und US 7 519 797 B1 .
  • Dabei offenbart die US 2012 / 0 232 845 A1 die Bestimmung des Leistungsverhaltens eines Prozessors beim Verarbeiten einer Dateneinheit.
  • Die vorliegende Erfindung betrifft generell die Analyse der Leistung eines grafischen Chips und insbesondere die Auslösung bzw. Triggerung der Erfassung eines Leistungsereignisses mittels paralleler Zustandsbündel bzw. Pipelinebearbeiteter Zustandsbündel.
  • Beschreibung des Stands der Technik
  • Hardware für die grafische Verarbeitung enthält typischerweise eine Schaltung, die als eine Grafikverarbeitungs-Pipeline bekannt ist. Die Grafikverarbeitungs-Pipeline kann in Stufen unterteilt werden. Information einschließlich grafischer Daten und Befehle durchlaufen die Grafikverarbeitungs-Pipelines von der frühesten Stufe bis zur spätesten Stufe, und jede Stufe verarbeitet die Informationen, indem diverse zugehörige Funktionen und Operationen an der Information ausgeführt werden. Stufen können unabhängig voneinander arbeiten, wodurch es unterschiedlichen Stufen möglich ist, gleichzeitig unterschiedliche Informationen zu verarbeiten. Die gleichzeitige Verarbeitung unterschiedlicher Information auf diese Weise erhöht die Nutzbarkeit der Grafikverarbeitungs-Pipeline, wodurch das Leistungsverhalten verbessert wird.
  • Eine Grafikverarbeitungs-Pipeline kann ausgebildet sein, „Leistungsdaten“ bereitzustellen, die damit in Beziehung stehen, wie effizient Grafikdaten in der Grafikverarbeitungs-Pipeline verarbeitet werden. Derartige Leistungsdaten können die Zeit beinhalten, die bis zum Abschluss einer spezifischen Aufgabe erforderlich ist, die Menge an Daten, die während einer gewissen Zeitdauer verarbeitet werden, und andere ähnliche Maßzahlen. Typischerweise werden Leistungsdaten im Hinblick auf eine spezielle Einheit an Arbeit ermittelt. Eine derartige Einheit an Arbeit kann eine „Instanz“ sein, die, wie hierin verwendet ist, eine Gruppe aus miteinander in Beziehung stehenden Grafikverarbeitungs-Pipeline-Methoden bezeichnet (etwa Zeichnungsaufrufe), die alle an einem gewissen Bilderzeugungsziel-„Zustand“ ausgeführt werden.
  • In einigen konventionellen Architekturen für Grafikverarbeitungs-Pipelines können Leistungsdaten von Instanz zu Instanz analysiert werden. Ein Befehl zum Starten der Überwachung einer Leistung bzw. eines Leistungsverhaltens kann in die Grafikverarbeitungs-Pipeline zusammen mit einer Instanz gesendet werden, für die die Leistungsdaten gewünscht werden. Die Zeit, bei der die Instanz in die Grafikverarbeitungs-Pipeline gesendet wird, und die Zeit, bei der die Ergebnisse der verarbeiteten Instanz die Grafikverarbeitungs-Pipeline verlassen, können verwendet werden, um zu ermitteln, wie viel Zeit zur Verarbeitung der Instanz erforderlich ist. Ferner können Zähler zum Zählen spezieller beendeter Abschnitten an Arbeit bei der Verarbeitung der Instanz, etwa die Anzahl an schattierten Pixel und dergleichen, ebenfalls aufgezeichnet werden.
  • In einigen Architekturen von Grafikverarbeitungs-Pipelines kann jedoch die Grafikverarbeitungs-Pipeline eine Einheit, die als Kacheleinheit bekannt ist, an einer Zwischenposition in der Grafikverarbeitungs-Pipeline enthalten. Die Kacheleinheit ist ausgebildet, Grafikdaten von einem ersten Teil der Grafikverarbeitungs-Pipeline zu empfangen und die Grafikdaten in gegenseitig sich ausschließende Konstrukte, die als „Kacheln“ bekannt sind, einzuteilen. Um dies zu bewerkstelligen, kann eine Kacheleinheit Grafikdaten und Befehle aus mehreren Instanzen aufsammeln, die in die Grafikverarbeitungs-Pipeline gesendet werden, und sie kann diese unterteilen und die Instanzen miteinander verschachtelt anordnen, um eine kombinierte Arbeitslast zu erzeugen, und kann die kombinierte Arbeitslast in einen zweiten Teil der Grafikverarbeitungs-Pipeline senden. Der zweite Teil der Grafikverarbeitungs-Pipeline verarbeitet die Daten Kachel für Kachel anstatt Instanz für Instanz.
  • Das Vorhandensein einer Kacheleinheit kann eine konventionelle Überwachung der Leistung, wie sie zuvor beschrieben ist, nahezu unmöglich machen, da die gerade verarbeitete Arbeit in der Grafikverarbeitungs-Pipeline, die nachgeordnet zu der Kacheleinheit erfolgt, auf Kacheln beruht und nicht auf Instanzen. Anders ausgedrückt, da nachgeordnete Stufen in der Grafikverarbeitungs-Pipeline zu jedem Zeitpunkt eine gegebene Kacheln verarbeiten im Gegensatz zu einer speziellen Instanz, liefern Zeitstempel für den Zeitpunkt, wenn eine Kachel eine gegebene Stufe der Grafikverarbeitungs-Pipeline betritt und verlässt, die Gesamtzeit, die die Verarbeitung mehrerer Instanzen betrifft im Gegensatz dazu, dass Information über die Zeit bereitgestellt wird, die zur Verarbeitung einer speziellen Instanz benötigt wird. In ähnlicher Weise würden Zähler, die zu einer nachgeordneten Stufe der Grafikverarbeitungs-Pipeline gehören, Zahlen liefern, die die Verarbeitung mehrerer Instanzen betreffen im Gegensatz zu der Bereitstellung von Zahlen, die die Verarbeitung einer speziellen Instanz betreffen. Ohne Information, die sich darauf bezieht, wie spezielle Instanzen in der Grafikverarbeitungs-Pipeline verarbeitet werden, sind die Fehlerbehebung in der Grafikverarbeitungs-Pipeline und die Analysemöglichkeiten zur Verbesserung des Leistungsverhaltens der Grafikverarbeitungs-Pipeline wesentlich schwieriger.
  • Wie das Vorhergehende zeigt, ist es eine Aufgabe der vorliegenden Erfindung, eine Möglichkeit bereitzustellen, Leistungsdaten zu erhalten, die die Arbeitslasten einer Grafikverarbeitungs-Pipeline in einem auf Kacheln beruhenden Systems betreffen.
  • ÜBERBLICK ÜBER DIE ERFINDUNG
  • Eine Ausführungsform der vorliegenden Erfindung stellt ein Verfahren zur Analyse der Leistung bzw. des Leistungsverhaltens einer Grafikverarbeitungs-Pipeline bereit. Es werden eine erste Arbeitslast und eine zweite Arbeitslast zusammen in einer Pipeline kombiniert, um eine kombinierte Arbeitslast zu erzeugen. Die erste Arbeitslast ist mit einer ersten Instanz verknüpft und die zweite Arbeitslast ist mit einer zweiten Instanz verknüpft. Ein erstes und ein zweites Anfangsereignis werden für die kombinierte Arbeitslast erzeugt, die angeben, dass begonnen wird, die erste und die zweite Arbeitslast an einer ersten Position der Grafikverarbeitungs-Pipeline zu verarbeiten. Es werden ein erstes und ein zweites Endereignis erzeugt, die angeben, dass die Verarbeitung der ersten und der zweiten Arbeitslast an einer zweiten Position in der Grafikverarbeitungs-Pipeline beendet wird.
  • Ein Vorteil der offenbarten Vorgehensweise besteht darin, dass Leistungsdaten für eine einzelne Instanz innerhalb einer kombinierten Gruppe aus Instanzen für eine Pipeline mit einer Kacheleinheit ermittelt werden können, die Instanzen in Kacheln unterteilt und Kacheln von unterschiedlichen Instanzen verschachtelt bzw. miteinander verzahnt.
  • Figurenliste
  • 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 ist jedoch zu beachten, dass die angefügten Zeichnungen nur typische Ausführungsformen dieser Erfindung darstellen und daher nicht als Einschränkung des Schutzbereichs 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 Computersystem aus 1 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 Parallelverarbeitungseinheiten aus 2 für die Realisierung konfiguriert werden können gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 5 ist ein Graph, der einen Datenfluss durch eine Grafikverarbeitungs-Pipeline in Abhängigkeit der Zeit gemäß einer Ausführungsform der vorliegenden Erfindung zeigt;
    • 6A ist eine Konzeptansicht eines Grafikblocks, der mehrere Blöcke angibt, wovon jeder eine unterschiedliche Instanz repräsentiert und wobei die Ansicht grafisch darstellt, wieviel Zeit eine Grafikverarbeitungs-Pipeline erfordert, um jede Instanz zu verarbeiten;
    • 6B ist eine Konzeptansicht eines Grafikblocks, der die in 6A gezeigten Instanzen angibt, wobei diese neu eingeteilt sind, um die Leistung der Grafikverarbeitungs-Pipeline in jedem Zustand hervorzuheben;
    • 7 zeigt eine Grafikverarbeitungs-Pipeline mit einer Kacheleinheit gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 8A ist ein Graph, der die Überwachung des Leistungsverhaltens einer Grafikverarbeitungs-Pipeline zeigt, wobei der Datenstrom durch die Pipeline in Abhängigkeit von der Zeit gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist;
    • 8B ist eine Blockansicht, die beispielhafte Ereignisse darstellt, die von lokalen Leistungsüberwachungseinheiten in einer Grafikverarbeitungs-Pipeline gemäß einer Ausführungsform der vorliegenden Erfindung erzeugt werden;
    • 8C ist eine Blockansicht, die Ereignisse darstellt, die von einer Grafikverarbeitungs-Pipeline gemäß einer Ausführungsform der vorliegenden Erfindung erzeugt werden;
    • 9 ist ein Flussdiagramm von Verfahrensschritten zur Analyse der Leistung einer Grafikverarbeitungs-Pipeline gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 10 ist ein Flussdiagramm von Verfahrensschritten zur Ausgabe von Parzellen und zum Erzeugen von Wiederholungssignalen gemäß einer Ausführungsform der vorliegenden Erfindung; und
    • 11 ist ein Flussdiagramm von Verfahrensschritten zur Analyse der Leistung einer Grafikverarbeitungs-Pipeline 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 auf dem Gebiet, dass die vorliegende Erfindung auch ohne eines oder mehrere 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.
  • Es kann ein Compiler 101 in einem Gerätetreiber 103 eingebettet sein. Der Compiler 101 kompiliert Programmbefehle, wie sie für die Ausführung von dem Parallelverarbeitungssubsystem 112 benötigt werden. Während einer derartigen Kompilierung kann der Compiler 101 Transformationen von Programmbefehlen während diverser Phasen der Kompilierung anwenden. In einer weiteren Ausführungsform der vorliegenden Erfindung kann der Compiler 101 eine autarke Anwendung sein.
  • 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 GPC208 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 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 eine Warteschlangenaufgabe anstelle einer Gitteraufgabe kodieren), und eine Kennung der TMD, denen das CTA zugeordnet ist, speichern.
  • Wenn die TMD ein Gitter-TMD sind, bewirkt die Ausführung der TMD, 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 gespeichert sein, oder die TMD können einen Zeiger auf die Daten speichern, die von den CTAs verarbeitet werden. Die TMD können ferner eine Startadresse des Programms enthalten, das von den CTAs ausgeführt wird.
  • Wenn die TMD Warteschlange-TMD sind, dann kann eine Warteschlangeneigenschaft der TMD 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 zugeordnet sind. Die Warteschlangeneinträge können auch eine Kind-Aufgabe repräsentieren, die von weiteren TMD 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 oder separat zu den TMD gespeichert werden, in welchem Falle die TMD 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, 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 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.
  • Grafik-Pipeline-Architektur
  • 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 Rasteroperationen-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 Rasteroperationen-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 Rasteroperationseinheit 465 ist eine Verarbeitungseinheit, die Rasteroperationen ausführt, etwa Schablonenbildung, z-Test, Mischung, und dergleichen, und die Pixeldaten als verarbeitete Grafikdaten zur Speicherung an den Grafikspeicher ausgibt. Die verarbeiteten Grafikdaten können in dem Grafikspeicher, beispielsweise den Parallelverarbeitungsspeicher 204 und/oder den Systemspeicher 104 zur Anzeige auf dem Anzeigegerät 110 oder zur weiteren Verarbeitung durch die CPU 102 oder das Parallelverarbeitungssubsystem 112 gespeichert werden. In einigen Ausführungsformen der vorliegenden Erfindung ist die Rasteroperationseinheit 465 ausgebildet, z-oder Farbdaten zu komprimieren, die in den Speicher geschrieben werden, und z-oder Farbdaten zu dekomprimieren, die aus dem Speicher ausgewiesen werden.
  • Die Grafikverarbeitungs-Pipeline 400 ist ausgebildet, Leistungseigenschaften einer „Instanz“ zu analysieren, die eine Ansammlung zugehörige Methoden, etwa von „Zeichnungsaufrufen“ ist, die an einen gewissen „Zustand“ ausgeführt werden. Methoden beinhalten Aufrufe, die von dem Treiber 103 gesendet werden, um die Grafikverarbeitungs-Pipeline 400 anzuweisen, gewisse Objekte zu zeichnen. Methoden enthalten auch Befehle, um einen Bilderzeugungszustand zu ändern. Eine Instanz enthält typischerweise eine oder mehrere Methoden, um einen speziellen Bilderzeugungszustand festzulegen, und enthält einen oder mehrere Zeichnungsaufrufe, die in diesen Bilderzeugungszustand auszuführen sind.
  • Um Leistung bzw. das Leistungsverhalten einer Instanz zu analysieren, gibt der Treiber 103 eine Warten-auf-Untätigkeit-Methode aus, gefolgt von einer „PMTrigger“-Methode, gefolgt von einer Instanz, gefolgt von einer Warten-auf-Untätigkeit-Methode, gefolgt von einer „PMTrigger“-Methode. Die „Warten-auf-Untätigkeit“-Methode veranlasst Pipeline zu warten, bis die Grafikverarbeitungs-Pipeline keine Daten und Befehle mehr aufweist, bevor weitere Methoden verarbeitet werden, die in die Grafikverarbeitungs-Pipeline gesendet werden. Die PMTrigger-(oder „Leistungsüberwachungsauslösung- bzw. Trigger“) Methode veranlasst die Grafikverarbeitungs-Pipeline 400, einen Leistungsüberwachungsmodus umzuschalten (in diesen eintreten oder diesen verlassen), in welchem die Grafikverarbeitungs-Pipeline 400 Leistungsdaten für die Methoden bereitstellt, die von der Grafikverarbeitungs-Pipeline 400 verarbeitet werden. Eine Methode zur Änderung des Zustands bewirkt, dass die die Methoden, die nachfolgend zu dem Zustandsänderungsbefehl gesendet werden, in dem Zustand verarbeitet werden, für die die Änderung angefordert wird. Insgesamt bewirken die Methoden, die der Treiber 103 in die Grafikverarbeitungs-Pipeline 400 sendet, dass die Grafikverarbeitungs-Pipeline 400 eine Instanz für die Analyse isoliert und diese Instanz verarbeitet und Leistungsdaten erzeugt.
  • Leistungsdaten werden erhalten im Hinblick, zu welcher Zeit die Instanz in die Grafikverarbeitungs-Pipeline 400 eingetreten ist, und zu welcher Zeit die Instanz die Grafikverarbeitungs-Pipeline 400 verlassen hat. Diese beiden Zeitpunkte erlauben die Bestimmung einer Verarbeitungszeit für eine Instanz. Leistungsdaten können auch eine oder mehrere Zahlen für spezielle Einheiten von Arbeit beinhalten, die von der Grafikverarbeitungs-Pipeline 400 während der Verarbeitung einer Instanz abgeschlossen wurde. Derartige Einheiten an Arbeit können beispielsweise Pixel beinhalten, die schattiert wurden.
  • Auslösung einer Erfassung eines Leistungsereignisses für gekachelte Arbeitslasten
  • 5 ist ein Graph, der einen Datenstrom durch die Grafikverarbeitungs-Pipeline 400 in Abhängigkeit von der Zeit gemäß einer Ausführungsform der vorliegenden Erfindung zeigt. Der Treiber 103 sendet eine Warten-auf-Untätigkeit-Methode 502-1, eine PM Trigger-Methode 504-1, eine Instanz 506, eine zweite Warten-auf-Untätigkeit-Methode 502-2 und eine zweite PM Trigger-Methode 504-2. Die Warten-auf-Untätigkeit-Methode 502-1 veranlasst die Pipeline 400, alle Daten zu löschen. Somit beginnt der Graf ohne Daten in der Grafikverarbeitungs-Pipeline 400, wie dies durch die untätigen Bereiche 508 angegeben ist. Wenn die Grafikverarbeitungs-Pipeline 400 zurückgesetzt ist, beginnt die Grafikverarbeitungs-Pipeline 400 mit der Verarbeitung der Instanz 506. Der Block 516 repräsentiert einen Datenstrom durch die Stufen der Grafikverarbeitungs-Pipeline 400, der die Instanz 506 betrifft. Die Linien 518-1 und 518-2 geben entsprechend den Zeitpunkt des Eintritts und des Austritts der Instanz an. Die Linien 518-1 und 518-2 können miteinander verwendet werden, um eine gesamte verstrichene Zeit 522 für die Instanz 506 zu ermitteln.
  • 6A ist eine Konzeptansicht eines Grafikblocks, der mehrere Blöcke 600, 602, 604, 606, 608, 610, 612 und 614 angibt, wovon jeder eine andere Instanz repräsentiert, und wobei die Ansicht grafisch darstellt, wie viel Zeit die Grafikverarbeitungs-Pipeline 400 benötigt, um jede Instanz zu verarbeiten. Die in 6A dargestellten Instanzen können Instanzen zum Zeichnen eines speziellen Rahmens bzw. Blocks umfassen. Die Grafikverarbeitungs-Pipeline 400 verarbeitet mehrere Instanzen von mehreren unterschiedlichen Zuständen, um den Block zu zeichnen. Instanzen, die den Blöcken 600, 602, 614 entsprechen, werden im Zustand Null gezeichnet, Instanzen, die den Blöcken 604, 606, 610 und 612 entsprechen, werden im Zustand 1 gezeichnet und eine Instanz, die dem Block 608 entspricht, wird im Zustand 2 gezeichnet.
  • 6 zeigt eine Konzeptansicht eines Grafikblocks, der die Instanzen, die in 6A gezeigt sind, angibt, wobei diese umgeordnet sind, um die Leistung der grafischen Verarbeitung-Pipeline 400 in jedem Zustand hervorzuheben. Die Leistungsanalyse kann daraus bestehen, dass bestimmt wird, wie lange die Grafikverarbeitungs-Pipeline 400 braucht, um Arbeit in jedem Zustand auszuführen. Somit gibt 6B die Gesamtdauer 620 für die Verarbeitung im Zustand 1, die Gesamtdauer 622 zur Verarbeitung im Zustand 0 und die Gesamtdauer 624 zur Verarbeitung im Zustand 2 an.
  • In der Grafikverarbeitungs-Pipeline, die in Verbindung mit den 5-6B beschrieben ist, kann die Verarbeitungszeit, die in einem speziellen Zustand benötigt wird, einfach ermittelt werden, ebenso wie Zählerzahlen für spezielle Arten von Arbeiten, da die Arbeit Instanz für Instanz verarbeitet wird. Wie jedoch mit Bezug zu den 7-10 beschrieben ist, in denen eine Grafikverarbeitungs-Pipeline erläutert ist, die eine Kachelbildung ausführt, ist die Verarbeitungszeit für einen speziellen Zustand nicht einfach zu ermitteln, da die Arbeit Kachel für Kachel ausgeführt wird. Die 7-10 stellen somit Techniken zur Analyse der Leistung einer graphischen Pipeline bereit, in der eine Kachelbildung ausgeführt wird.
  • 7 zeigt eine Grafikverarbeitungs-Pipeline 700 mit einer Kacheleinheit 753 gemäß einer Ausführungsform der vorliegenden Erfindung. Wie gezeigt, umfasst die Grafikverarbeitungs-Pipeline 700 in Verarbeitungsrichtung vorgeordnete Einheiten bzw. vorgeordnete Einheiten 710, eine Kacheleinheit 753 und in Verarbeitungsrichtung nachgeordnete Einheiten bzw. nachgeordnete Einheiten 720. Die vorgeordneten Einheiten 710 können Einheiten enthalten, etwa einen Daten-Assembler (nicht gezeigt), eine Vertex-Verarbeitungseinheit (nicht gezeigt), einen Grundelemente-Assembler (nicht gezeigt), eine Geometrie-Verarbeitungseinheit (nicht gezeigt) und eine Darstellungsfeldskalier-, Auswahl-und Schneideeinheit (nicht gezeigt). Die nachgeordneten Einheiten 720 können Einheiten enthalten, etwa eine Rastereinheit (nicht gezeigt), eine Fragment-Verarbeitungseinheit (nicht gezeigt) und eine Rasteroperationseinheit 765. Die Kacheleinheit 753 empfängt Grundelemente aus den vorgeordneten Einheiten 710. Die Kacheleinheit 753 kombiniert Grundelemente, die mit unterschiedlichen Instanzen verknüpft sind, und verteilt die Grundelemente auf der Grundlage um, in welche „Kacheln“ die Grundelemente gehören. Kacheln sind Abschnitte eines Bildschirms, zu dem die Grundelemente gehören. Die Kacheleinheit 753 wartet, bis Grundelemente aus mehreren Instanzen die Kacheleinheit 753 erreicht haben, und ermittelt, wie diese Grundelemente miteinander zu kombinieren sind. Die Kacheleinheit 753 kombiniert die Grundelemente zu Parzellen zur Verarbeitung durch die nachgeordneten Einheiten 720. Die Kacheleinheit 753 kombiniert die Parzellen zu Kacheln, wobei jede Parzelle einen Teilbereich der Kachel repräsentiert, die aus der gleichen Instanz hergeleitet ist.
  • Aufgrund der Natur der Kacheln werden Instanzen als Gesamtheit nicht auf einmal in nachgeordneten Einheiten verarbeitet. Eintrittszeitpunkte und Austrittszeitpunkte für Kacheln liefern nicht notwendigerweise Information im Hinblick auf die Verarbeitungszeit für Instanzen, und die gesamte Verarbeitungszeit für Instanzen kann nicht in ähnlicher Weise erzeugt werden, wie dies mit Bezug zu den 5-6B beschrieben ist. Um eine Ermittlung von leistungsbezogenen Daten für die Grafikverarbeitungs-Pipeline mit einer Kacheleinheit zu ermöglichen, berücksichtigen Ausführungsformen der Erfindung die Ausbreitung von lokalen Leistungsüberwachungs-Auslösemethoden mit Lesezeichen durch die Grafikverarbeitungs-Pipeline hindurch. Lokale Überwachungseinheiten, die mit diversen Einheiten innerhalb der Grafikverarbeitungs-Pipeline gekoppelt sind, erfassen die lokale Leistungsüberwachungs-Auslösemethode und die Lesezeichen und erzeugen Leistungsereignisse mit Daten, die die Verarbeitung von Kacheln und Instanzen betreffen.
  • Die Kacheleinheit 753 ist mit zwei lokalen Leistungsüberwachungseinheiten 780-1, 780-2 gekoppelt. Die lokale Leistungsüberwachungseinheit 7/8-1 ist mit einem Eintrittspunkt der Kacheleinheit 753 gekoppelt und die lokale Leistungsüberwachungseinheiten 7/8-2 ist mit einem Austrittspunkt der Kacheleinheit 753 gekoppelt. Eine dritte lokale Leistungsüberwachungseinheit 780-3 ist mit der Rasteroperationseinheit (ROP) 765 in den nachgeordneten Einheiten 720 der Grafikverarbeitungs-Pipeline 700 gekoppelt.
  • Der Treiber 103 ist ausgebildet, eine lokale Leistungsauslösemethode (im Weiteren werden diese auch kollektiv als „PMLokalTrigger(Lesezeichen)“ bezeichnet) durch die Grafikverarbeitungs-Pipeline 700 zu senden. Die lokale Leistungsauslösemethode hat ein Lesezeichen, das die Instanz kennzeichnet, die mit der lokalen Leistungsauslösemethode verknüpft ist. Einheiten in der Grafikverarbeitungs-Pipeline 700 sind ausgebildet, die PMLokalTrigger(Lesezeichen)-Methode durch die Grafikverarbeitungs-Pipeline 700 zu leiten. Die Leistungsüberwachungseinheiten 780 sind ausgebildet, PMLokalTrigger(Lesezeichen) zu erfassen und ein Leistungsereignis in Reaktion auf den Empfang von PMLokalTrigger(Lesezeichen) zu erzeugen.
  • Das Leistungsereignis dient dazu, die Zeit zu erkennen, bei der eine Parzelle eine spezielle Einheit in der Grafikverarbeitungs-Pipeline 700 erreicht hat. Das Leistungsereignis umfasst Daten, die angeben, welche lokale Leistungsüberwachungseinheit das Ereignis erzeugt hat (eine „Leistungsüberwachung-ID“), den Wert der Marke der PMLokalTrigger(Lesezeichen), die die Erzeugung des Ereignisses ausgelöst hat, den Zeitstempel, der die Zeit repräsentiert, bei der das Leistungsereignis erzeugt wird, und einen oder mehrere der Zähler zur Aufzeichnung zusätzlicher Daten nach Bedarf. Der Zeitstempel erlaubt die Ermittlung der Zeit, bei der eine Parzelle die Einheit passiert hat, die das Leistungsereignis erzeugt hat. Die Marke erlaubt die Bestimmung der Instanz, mit der der Zeitstempel verknüpft ist. Die Leistungsüberwachung-ID gibt an, welche Einheit das Ereignis erzeugt hat. Die Zähler können nach Bedarf verwendet werden, und können eingesetzt werden, um aufzuzeigen, wie viele Einheiten eine spezielle Art an Arbeit beispielsweise in einer speziellen Zeitdauer ausgeführt haben. Das Ereignis umfasst ferner einen vorhergehenden Lesezeichenwert, der angibt, mit welcher Instanz das vorhergehende Ereignis, das von der lokalen Leistungsüberwachungseinheit gesendet wurde, verknüpft war. Das Ereignis enthält ferner Zähler für das Lesezeichen und für das vorhergehende Lesezeichen, die die Häufigkeit angeben, mit der ein Ereignis, das mit einem speziellen Lesezeichenwert verknüpft ist, gesendet worden ist. Das Lesezeichen und der Lesezeichenzähler bezeichnen eine spezielle Parzelle.
  • Der Treiber 103 ist ausgebildet, eine PMLokalTrigger(Lesezeichen)- Methode am Anfang jeder Instanz zu senden. Da jedoch mehrere Parzellen mit jeder Instanz verknüpft sind, bewirkt die PMLokalTrigger(Lesezeichen)- Methode, die von dem Treiber 103 gesendet wird, lediglich, dass die lokalen Leistungsüberwachungseinheiten 780 ein Ereignis für die erste Parzelle erzeugen, die mit einer speziellen Instanz verknüpft ist. Daher ist die Kacheleinheit 753 ausgebildet, die PMLokalTrigger(Lesezeichen)- Methode, die von dem Treiber 103 gesendet wird, jedes Mal „wieder auszugeben bzw. zu wiederholen“, wenn eine Parzelle nach der ersten Parzelle, die mit einer speziellen Instanz verknüpft ist, zu den nachgeordneten Einheiten 720 gesendet wird. Die „Wiederausgabe bzw. Wiederholung“ der PMLokalTrigger(Lesezeichen)- Methode ist eine Kopie der PMLokalTrigger(Lesezeichen)- Methode, die für die erste Parzelle in einer Instanz, die an die nachgeordneten Einheiten 720 gesendet wurde, übermittelt wurde. Die wiederholte PMLokalTrigger(Lesezeichen) wird somit ebenfalls durch die nachgeordneten Einheiten 720 geführt und bewirkt ebenfalls, dass die lokalen Leistungsüberwachungseinheiten 780 in den nachgeordneten Einheiten 720, etwa die lokale Leistungsüberwachungseinheit 780-3 in der ROP 765, ein Leistungsereignis erzeugen, das leistungsbezogene Daten enthält, etwa die Leistungsüberwachung-ID, den Wert des Lesezeichens, den Zeitstempel, wann das Leistungsereignis erzeugt wird, und einen oder mehrere Zähler zur Aufzeichnung zusätzlicher Daten nach Bedarf.
  • Die lokalen Leistungsüberwachungseinheiten 780 senden die Leistungsereignisse an einen Speicher zur Analyse mittels Softwaremodulen oder Hardwaremodulen, die ausgebildet sind, Leistungsdaten zu analysieren. In einer Ausführungsform kann eine autarke Anwendung, die auf einem Computer abgearbeitet wird, die Leistungsereignisse empfangen und Leistungsmaßzahlen erzeugen. In einer weiteren Ausführungsform empfängt der Treiber 103 die Leistungsereignisse und erzeugt die Leistungsmaßzahlen.
  • 8A ist ein Graph, der den Vorgang der Leistungsüberwachung der Grafikverarbeitungs-Pipeline 700 zeigt, wobei der Datenstrom durch die Pipeline in Abhängigkeit von der Zeit gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt ist. Der Treiber 103 sendet eine Warten-auf-Untätigkeit-Methode, eine Leistungsüberwachungsauslösemethode, lokale Leistungsauslösemethoden und Instanzen und eine weitere Warten-auf-Untätigkeit-Methode und eine Leistungsüberwachungsauslösemethode. Die vorgeordneten Einheiten 710 verarbeiten Daten, die die Instanzen betreffen. Die von den vorgeordneten Einheiten 710 verarbeiteten Daten enthalten Daten 814, die die Instanz 1 betreffen, Daten 816, die die Instanz 2 betreffen, und Daten 818, die die Instanz 3 betreffen. Ferner verbreiten die vorgeordneten Einheiten 710 eine lokale Leistungsauslösemethode mit Daten 814, eine lokale Leistungsauslösemethode mit Daten 816 und eine lokale Leistungsauslösemethode mit Daten 818. Die Kacheleinheit 753 kombiniert die Daten 814, 816, 818 und sendet Parzellen 824, 826, 828 an die nachgeordneten Einheiten 720. Die Kacheleinheit 753 sendet die lokalen Leistungsauslösemethoden und gibt die lokalen Leistungsauslösemethoden an die nachgeordneten Einheiten 720 aus. Die ROP 765 verarbeitet die Parzellen 824, 826, 828.
  • Die Kacheleinheit 753 empfängt die lokalen Leistungsauslösemethoden von den vorgeordneten Einheiten 710. Die lokale Leistungsüberwachungseinheit 780-1 erzeugt Ereignisse 829 beim Empfang lokaler Leistungsauslösemethoden. Die Kacheleinheit 753 verbreitet die lokalen Leistungsauslösemethoden an die nachgeordneten Einheiten 720. Wenn die Parzellen 824, 826, 828 ausgegeben werden, erzeugt die lokale Leistungsüberwachungseinheit 780-2 die Ereignisse 825, 827. Die Ereignisse 825 sind die Ereignisse, die erzeugt werden, wenn die lokalen Leistungsauslösemethoden von der Kacheleinheit 753 verbreitet werden. Die Ereignisse 827 sind die Ereignisse, die erzeugt werden, wenn die Wiederholungen der Methoden von der Kacheleinheit 753 verbreitet werden. Die Ereignisse 835 sind die Ereignisse, die erzeugt werden, wenn die lokalen Leistungsauslösemethoden die ROP 765 erreichen. Die Ereignisse 837 sind die Ereignisse, die erzeugt werden, wenn die wiederholt ausgegebenen Methoden die ROP 765 erreichen.
  • Die Zeitstempel von Ereignissen, die jede Parzelle „begrenzen“, liefern Information im Hinblick auf die Verarbeitungsaufgaben für jede Parzelle. Der Zeitstempel aus dem Ereignis, das von der lokalen Leistungsüberwachungseinheit 780-2 erzeugt wurde, die mit dem Austrittspunkt der Kacheleinheit 753 verknüpft ist, kann von dem Zeitstempel aus dem Ereignis subtrahiert werden, das von der lokalen Leistungsüberwachungseinheit 780-3 erzeugt wurde, die mit der ROP 765 gekoppelt ist, um die Verarbeitungszeitdauer zwischen der Kacheleinheit 753 und der ROP 765 zu erhalten. Für jede Parzelle werden Ereignisse erzeugt, wenn die Parzelle zuerst an einer speziellen Einheit eintrifft (mit der Bearbeitung beginnt) und diese verlässt (die Verarbeitung beendet). Eine Verarbeitungsdauer für eine Parzelle in den nachgeordneten Einheiten 720 kann ermittelt werden, indem der Zeitstempel, der bei Beginn der Verarbeitung der Parzelle an der lokalen Leistungsüberwachungseinheit 780-2 in der Kacheleinheit 753 erzeugt wird, von dem Zeitstempel aus dem Ereignis subtrahiert wird, das bei Beendigung der Verarbeitung der Parzelle an der lokalen Leistungsüberwachungseinheit 780-2, die mit der ROP 765 und gekoppelt ist, erzeugt wird.
  • 8B ist eine Blockansicht, die beispielhafte Ereignisse darstellt, die von den lokalen Leistungsüberwachungseinheiten 780 in der Grafikverarbeitungs-Pipeline 700 gemäß einer Ausführungsform der vorliegenden Erfindung erzeugt werden. Die in 8B aufgelisteten Ereignisse werden von den mehreren lokalen Leistungsüberwachungseinheiten 780 erzeugt und sind in chronologischer Reihenfolge gezeigt. Wie man erkennen kann, wächst der Zeitstempel 856 von dem obersten Ereignis bis zu dem untersten Ereignis an. Jedes Ereignis umfasst eine Leistungsüberwachung-ID 852, eine Ereignis-ID 854, einen Zeitstempel 856, eine vorhergehende Lesezeichennummer 858 und einen vorhergehenden Lesezeichenzähler 860, eine Lesezeichennummer 862 und einen Lesezeichenzähler 864, und einen oder mehrere Leistungsüberwachungszähler 866 und 868.
  • Die Leistungsüberwachung-ID 852 gibt an, welche Leistungsüberwachungseinheit das Ereignis erzeugt. Die Ereignis-ID gibt die Nummer des Ereignisses an. Ein erstes Ereignis, das von einer Leistungsüberwachungseinheit erzeugt wird, kann eine Ereignis-ID von 1 haben, ein zweites Ereignis, das von der gleichen Leistungsüberwachungseinheit erzeugt wird, kann eine Ereignis-ID von 2 haben, usw. Der Zeitstempel 856 gibt die Zeit an, bei der das Ereignis erzeugt wird. In den 8B und 8C ist die Zeit in willkürlichen Zeiteinheiten dargestellt. Ereignisse können die Zeit in Taktzyklen, in Zeiteinheiten oder in anderer Weise speichern.
  • Die Lesezeichennummer 862 ist der Lesezeichenwert, der von der lokalen Leistungsüberwachungseinheit 780 erfasst wird, und der die Grafikverarbeitungs-Pipeline 700 mit PMLokalTrigger(Lesezeichen) durchläuft. Die lokalen Leistungsüberwachungseinheiten 780 speichern Zähler bzw. Zählwerte für jeden Lesezeichenwert und enthalten den Lesezeichenzähler 864 in dem Ereignis. Wenn beispielsweise ein erstes Ereignis mit einem ersten Lesezeichenwert erzeugt wird, ist der Zählwert 1, wenn ein zweites Ereignis mit dem gleichen ersten Lesezeichenwert erzeugt wird, ist der Zähtwert 2. Das vorhergehende Lesezeichen 858 gibt die Lesezeichennummer des Ereignisses an, das unmittelbar vor dem aktuellen Ereignis in einer speziellen lokalen Leistungsüberwachungseinheit 780 erzeugt wurde. Wenn daher eine lokale Leistungsüberwachungseinheit ein erstes Ereignis mit einem Lesezeichen von 2 erzeugt, und dann ein zweites Ereignis mit einem Lesezeichen von 3 erzeugt, ist die vorhergehende Lesezeichennummer für das zweite Ereignis 2. Die vorhergehende Lesezeichennummer dient dazu anzuzeigen, welche Parzelle von einem gewissen Teil der Grafikverarbeitungs-Pipeline 700 zuvor verarbeitet wurde, und die Lesezeichennummer dient dazu anzugeben, welche Parzelle als nächstes von dem gleichen Teil der Grafikverarbeitungs-Pipeline 700 verarbeitet wird. Der vorhergehende Lesezeichenzähler 860 speichert die Häufigkeit, mit der ein Ereignis mit einem speziellen vorhergehenden Lesezeichenwert ausgegeben wurde in ähnlicher Weise wie für den Lesezeichenwert 862 und den Lesezeichenzähler 864.
  • Die Kombination eines speziellen Lesezeichenwerts 862 und des Wertes des Lesezeichenzählers 864 gibt eindeutig an, welche Parzelle nach dem Ereignis kommt, während die Kombination eines speziellen Wertes eines vorhergehenden Lesezeichens 858 und eines Wertes eines vorhergehenden Lesezeichenzählers 860 eindeutig angibt, welche Parzelle vor diesem Ereignis kommt. Es kann ein spezieller vorhergehender Lesezeichenwert verwendet werden, um anzugeben, dass keine Parzelle vor dem Ereignis kommt, wenn beispielsweise die Pipeline auf Grund eines Warten-auf-Untätigkeit-Signals leer war. In 8B ist dieser spezielle vorhergehende Lesezeichenwert mit „-“ bezeichnet.
  • Die Leistungsüberwachungszähler 866, 868 sind Zähler für Allgemeinzwecke, die von den lokalen Leistungsüberwachungseinheiten verwendet werden können, um einen beliebigen Wert nach Bedarf aufzuzeichnen. In den 8B und 8C ist kein Wert gezeigt, es kann aber ein beliebiger Wert von den Leistungsüberwachungszählern 866, 868 gezählt werden.
  • Das Ereignis 825-1 hat einen Lesezeichenwert, der der Instanz 1 entspricht, wodurch angezeigt wird, dass die Parzelle nach dem Ereignis 825-1 mit der Instanz 1 verknüpft ist. Der Lesezeichenzähler in dem Ereignis 825-1 zeigt an, dass die Parzelle 824, die nach dem Ereignis 825-1 kommt, die erste Parzelle ist, die in die nachgeordneten Einheiten 720 gesendet wird, die mit der Instanz 1 verknüpft ist. Das vorhergehende Lesezeichen und der vorhergehende Lesezeichenzähler geben an, dass nichts vor der ersten Parzelle war, die mit der Instanz 1 verknüpft ist. Das Ereignis 825-1 hat einen Zeitstempel, der angibt, wann die Parzelle 824-1 von der Kacheleinheit 753 in die nachgeordneten Einheiten 720 gesendet wird.
  • Das Ereignis 835-2 hat einen vorhergehenden Lesezeichenwert, der der Instanz 1 entspricht, wodurch angezeigt wird, dass die Parzelle, die von der ROP 765 vor der Erzeugung des Ereignisses 835-2 verarbeitet wurde, mit der Instanz 1 verknüpft ist. Das Ereignis 835-2 hat auch einen Zähler, der angibt, dass die mit der Instanz 1 verknüpfte Parzelle mit dem Ereignis 835-2 verknüpft ist. Der Zählerwert gibt an, dass die Parzelle, die von der ROP 765 verarbeitet wird, bevor das Ereignis 835-2 erzeugt wird, die erste Parzelle 824-1 ist, die zu der Instanz 1 gehört. Das Ereignis 835-2 hat ferner einen Zeitstempel, der angibt, wann das Ereignis 835-2 erzeugt wird.
  • 8C ist eine Blockansicht, die Ereignisse darstellt, die von der Grafikverarbeitungs-Pipeline 700 gemäß einer Ausführungsform der vorliegenden Erfindung erzeugt werden. Zusammen geben das Ereignis 825-1, das von der Kacheleinheit 753 erzeugt wird, und das Ereignis 835-2, das von der ROP 765 erzeugt wird, eine verstrichene Zeit von der Sendung der Parzelle 824 in die nachgeordneten Einheiten 720 bis zur Verarbeitung der Parzelle 824 durch die ROP 765 an. Das Ereignis 825-1 wird erzeugt, wenn die Verarbeitung der Parzelle 824 in den nachgeordneten Einheiten 720 beginnt, und das Ereignis 835-2 wird erzeugt, wenn die Verarbeitung der Parzelle 824 in den nachgeordneten Einheiten 720 beendet wird. In ähnlicher Weise zeigen das Ereignis 825-2 und das Ereignis 835-3 eine verstrichene Zeit von der Sendung der Parzelle 826 in die nachgeordneten Einheiten 720 bis zur Verarbeitung der Parzelle 826 durch die ROP 765 an. Die Ereignisse 825-3 und 837-1 geben eine verstrichene Zeit für die Parzelle 828 an. Andere Ereignisse 825, 827, 835 und 837 gegen die entsprechenden verstrichene Zeiten für andere Parzellen an.
  • Wie man erkennt, können Ereignisse aus einer ersten Einheit mit Ereignissen aus der zweiten Einheit, die nachgeordnet ist, paarweise verknüpft werden, um eine abgelaufene Zeit für die Parzelle zwischen den zwei Einheiten zu ermitteln. Das Lesezeichen und der Lesezeichenzählerwert in dem Ereignis aus der ersten Einheit werden mit dem vorhergehenden Lesezeichenwert und dem vorhergehenden Lesezeichenzählerwert in Ereignissen aus der zweiten Einheit verglichen. Wenn die Werte in dem Lesezeichen 862 und in dem Lesezeichenzähler 864 in dem Ereignis aus der ersten Einheit zu den Werten in dem vorhergehenden Lesezeichen 858 und dem vorhergehenden Lesezeichenzähler 860 in dem Ereignis aus der zweiten Einheit passen, dann „begrenzen“ das erste Ereignis und das zweite Ereignis eine Parzelle. Das erste Ereignis liefert einen Zeitstempel für die Zeit, bei der die Parzelle die erste Einheit passiert hat, und das zweite Ereignis liefert einen Zeitstempel für die Zeit, bei der die Parzelle die zweite Einheit passiert hat. Die Instanz, mit der die Parzelle verknüpft ist, wird durch den Wert des Lesezeichens 862 für das erste Ereignis bereitgestellt, und die Nummer der Parzelle wird durch den Lesezeichenzähler 864 für das erste Ereignis bereitgestellt.
  • Daten in den Ereignissen 825-1, 835-2 geben an, dass die verstrichene Zeit für die Parzelle 1, die mit der Instanz 1 verknüpft ist, 328 - 275 = 53 Zeiteinheiten beträgt. Daten in den Ereignissen 825-1 und 835-3 geben an, dass die verstrichene Zeit für die Parzelle 1, die mit der Instanz 2 verknüpft ist, 351 - 305 = 54 Zeiteinheiten beträgt. Daten in den Ereignissen 825-3 und 837-1 zeigen an, dass die verstrichene Zeit für die Parzelle 1, die mit der Instanz 3 verknüpft ist, 390 - 333 = 57 Zeiteinheiten beträgt. Eine Gesamtzeit für die Verarbeitung einer Instanz zwischen der ersten Einheit und der zweiten Einheit kann ermittelt werden, indem die verschiedenen Zeiten für alle Parzellen, die von der Kacheleinheit 753 gesendet wurden und mit dieser Instanz verknüpft sind, addiert werden.
  • 9 ist ein Flussdiagramm von Verfahrensschritten zur Analyse der Leistung einer Grafikverarbeitungs-Pipeline 700 gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl die Verfahrensschritte in Verbindung mit den 1-4 und 7-8B beschrieben sind, erkennt der Fachmann auf diesem Gebiet, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge geeignet ist, innerhalb des Schutzbereichs der vorliegenden Erfindung liegt.
  • Wie gezeigt, beginnt das Verfahren 900 im Schritt 902, in welchem der Treiber 103 die grafische Verarbeitungs-Pipeline 700 mit einer oder mehreren Warten-auf-Untätigkeit-Methoden, einer oder mehreren PMTrigger-Methoden, einer oder mehreren PMLokalTrigger(Lesezeichen)- Methoden und einer oder mehreren Instanzen versorgt. Die PMLokalTrigger(Lesezeichen)- Methoden gehen jeder Instanz voraus, und der Lesezeichenwert ist ein Wert, der die Instanz kennzeichnet, die der PMLokalTrigger(Lesezeichen)- Methode vorausgeht.
  • Im Schritt 904 verarbeiten die vorgeordneten Einheiten 710 in der Grafikverarbeitungs-Pipeline 700 Instanzen, um Daten zu erzeugen. Die PMLokalTrigger(Lesezeichen)- Methode treffen ebenfalls in der Kacheleinheit 753 ein. Im Schritt 906 erfasst der Eintrittspunkt der Kacheleinheit 753 die PMLokalTrigger(Lesezeichen)- Methoden. Im Schritt 908 erzeugt eine erste lokale Leistungsüberwachungseinheit 780-1, die mit dem Eintrittspunkt der Kacheleinheit 753 verbunden ist, Ereignisse für die PMLokalTrigger(Lesezeichen)- Methoden, die von dem Eintrittspunkt der Kacheleinheit 753 erfasst werden. Im Schritt 910 empfängt die Kacheleinheit 753 Daten aus den vorgeordneten Einheiten 710 und kombiniert die Daten, um eine kombinierte Arbeitslast zu erzeugen. Im Schritt 912 gibt die Kacheleinheit 753 Parzellen für die kombinierte Arbeitslast aus und erzeugt Wiederholungen. Der Schritt 912 ist detaillierter nachfolgend mit Bezug zu 10 beschrieben.
  • Im Schritt 914 erfasst der Eintrittspunkt der Kacheleinheit 753 PMLokalTrigger(Lesezeichen)- Methoden und Wiederholungen. Im Schritt 916 erzeugt eine zweite lokale Leistungsüberwachungseinheit 780-2, die mit dem Eintrittspunkt der Kacheleinheit 753 verbunden ist, Ereignisse, die mit den PMLokalTrigger(Lesezeichen)- Methoden und Wiederholungen, die von dem Eintrittspunkt der Kacheleinheit 753 erfasst werden, verknüpft sind. Im Schritt 918 laufen Parzellen durch die nachgeordneten Einheiten 720. Im Schritt 920 empfängt die ROP 765 Parzellen und erfasst PMLokalTrigger(Lesezeichen)- Methoden. Im Schritt 922 erzeugt eine dritte lokale Leistungsüberwachungseinheit 780-3 Ereignisse, die mit PMLokalTrigger(Lesezeichen)- Methoden und Wiederholungen, die von der ROP 765 empfangen werden, verknüpft sind.
  • 10 ist ein Flussdiagramm von Verfahrensschritten zur Ausführung des Schritts 912 aus 9 einschließlich der Ausgabe von Parzellen und der Erzeugung von Wiederholungen gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl die Verfahrensschritte in Verbindung mit den 1-4 und 7-8B beschrieben sind, erkennt der Fachmann auf diesem Gebiet, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge ausgebildet ist, im Schutzbereich der vorliegenden Erfindung liegt.
  • Wie gezeigt, beginnt ein Verfahren 1000 im Schritt 1002, in welchem die Kacheleinheit 753 eine Parzelle an die nachgeordneten Einheiten 720 ausgibt. Im Schritt 1004 prüft die Kacheleinheit 753, ob die Parzelle die erste Parzelle ist, die an die nachgeordneten Einheiten 720 zu senden ist und mit einer speziellen Instanz verknüpft ist. Wenn die Parzelle die erste Parzelle in einer Instanz ist, ist eine PMLokalTrigger(Lesezeichen)- Methode in der Grafikverarbeitungs-Pipeline 700, die Kacheleinheit 753 erzeugt, keine Wiederholung, und das Verfahren geht weiter zum Schritt 1006. Im Schritt 1006 verbreitet die Kacheleinheit 753 die PMLokalTrigger(Lesezeichen)- Methode an die nachgeordneten Einheiten 720. Im Schritt 1007 prüft die Kacheleinheit 753, ob die Kacheleinheit 752 gerade dabei ist, eine weitere Parzelle in die nachgeordneten Einheiten 720 auszugeben. Wenn die Kacheleinheit 752 im Begriff ist, eine weitere Parzelle zu verbreiten, geht das Verfahren zurück zum Schritt 1002.
  • Wenn im Schritt 1004 die Parzelle nicht die erste Parzelle in einer Instanz ist, geht das Verfahren 1000 weiter zum Schritt 1008. Im Schritt 1008 ermittelt die Kacheleinheit 753 den Lesezeichenwert für die aktuelle Parzelle. Im Schritt 1010 wiederholt die Kacheleinheit 753 die PMLokalTrigger(Lesezeichen)- Methode für die aktuelle Parzelle. Das Verfahren geht dann weiter zum Schritt 1007.
  • 11 ist ein Flussdiagramm von Verfahrensschritten zur Analyse der Leistung einer Grafikverarbeitungs-Pipeline 700 gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl die Verfahrensschritte in Verbindung mit den 1-4 und 7-8B dargestellt sind, erkennt der Fachmann auf diesem Gebiet, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge geeignet ist, innerhalb des Schutzbereichs der vorliegenden Erfindung liegt.
  • Wie gezeigt, beginnt ein Verfahren 1100 im Schritt 1102, in welchem der Treiber 103 Warten-auf-Untätigkeit-Methoden, PMTrigger-Methoden, PMLokalTrigger(Lesezeichen)- Methoden und Instanzen an die Grafikverarbeitungs-Pipeline 700 ausgibt. Die Pipeline beginnt mit der Verarbeitung der Instanzen und erzeugt die Leistungsereignisse. Im Schritt 1104 empfängt der Treiber 103 Leistungsereignisse, die Leistungsdaten der Grafikverarbeitungs-Pipeline 700 kennzeichnen. Im Schritt 1106 analysiert der Treiber 103 Leistungsereignisse, um Leistungsdaten für die in die Pipeline gesendeten Instanzen zu ermitteln. Die Analyse der Leistungsereignisse kann die Analyse von Zeitstempeln in unterschiedlichen Ereignissen umfassen, um eine Dauer der Verarbeitung für eine gewisse Arbeitslast zu ermitteln. Die Analyse von Leistungsereignisse kann auch die Analyse und Zähler für Allgemeinzwecke umfassen, um die Menge einer gewissen Art von Arbeit zu ermitteln, die von der Grafikverarbeitungs-Pipeline 700 ausgeführt wurde, etwa die Anzahl an schattierten Pixel während der Verarbeitung der diversen Instanzen.
  • Zusammengefasst gilt: die zuvor beschriebenen Ausführungsformen stellen Merkmale bereit, um eine Leistungsanalyse einer Grafikverarbeitungs-Pipeline zu ermöglichen, die eine Kacheleinheit aufweist. Ein Treiber ist ausgebildet, eine Leistungsüberwachungsauslösemethode an die Grafikverarbeitungs-Pipeline zu senden. Lokale Leistungsüberwachungseinheiten sind mit der Kacheleinheit und mit einer nachgeordneten Position in der Pipeline, etwa einer ROP, gekoppelt. Die lokalen Leistungsüberwachungseinheiten erzeugen ein „Ereignis“ mit leistungsbezogenen Daten, etwa einen Zeitstempel bei Erkennung der Leistungsüberwachungsauslösemethode. Die Kacheleinheit stellt sicher, dass eine Leistungsüberwachungsauslösemethode und ein entsprechendes Lesezeichen, das eine Instanz kennzeichnet, für jede Parzelle gesendet werden, die mit einer entsprechenden Instanz verknüpft ist. Für die erste Parzelle, die mit einer Instanz verknüpft ist, ist die ursprüngliche Leistungsüberwachungsauslösemethode bereits in der Pipeline. Jedoch erzeugt für jede Parzelle nach der ersten Parzelle, die mit einer speziellen Instanz verknüpft ist, die Kacheleinheit eine „Wiederholung“ der Leistungsüberwachungsauslösemethode und des entsprechenden Lesezeichen. Die Ereignisse, die von den lokalen Leistungsüberwachungseinheiten erzeugt werden, können an einen Speicher ausgegeben und von einer Software analysiert werden, die auf einem Computer abgearbeitet wird, um eine verstrichene Zeit für die Verarbeitung jeder Parzelle zu ermitteln. Es können Zähler in Ereignissen bereitgestellt werden und diese können Information in Bezug auf eine Menge einer speziellen Art von Arbeit angeben, die für eine spezielle Parzelle verarbeitet wurde.
  • Ein Vorteil der zuvor beschriebenen Ausführungsformen besteht darin, dass Leistungsdaten einer ganzen Instanz für eine Pipeline mit einer Kacheleinheit ermittelt werden können, die Instanzen in Kacheln unterteilt und die Kacheln für unterschiedliche Instanzen miteinander verschachtelt.
  • 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 auf einer Vielzahl computerlesbarer Speichermedien enthalten sein. Zu anschaulichen computerlesbaren Speichermedien gehören, ohne Einschränkung: (i) nichtbeschreibbare Speichermedien (beispielsweise Nur-Lese-Speichereinrichtungen in einem Computer, etwa Kompaktdisketten-Nur-Lese-Speicher-(CD-) Disketten, die von einem CD-Raum-Laufwerk lesbar sind, Flash-Speicher, Nur-Lese-Speicher-(ROM) Chips oder eine beliebige andere Art eines nicht-flüchtigen Halbleiterspeichers), auf denen Information permanent gespeichert ist; und (ii) beschreibbare Speichermedien (beispielsweise Disketten in einem Diskettenlaufwerk oder Festplattenlaufwerke oder eine andere Art von Halbleiterspeichern mit wahlfreiem Zugriff), auf denen ä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, wie sie in den angefügten Patentansprüchen dargelegt ist, abzuweichen. Die vorhergehende Beschreibung und die Zeichnungen sind daher als anschaulich und nicht als einschränkend zu betrachten.
  • Daher ist der Schutzbereich der Ausführungsformen der vorliegenden Erfindung in den folgenden Patentansprüchen angegeben.

Claims (10)

  1. Eine Grafikverarbeitungs-Pipeline (700), die ausgebildet ist, Leistungsdaten zu erzeugen, mit: einer Kacheleinheit (753), die ausgebildet ist, eine erste Arbeitslast und eine zweite Arbeitslast in der Grafikverarbeitungs-Pipeline (700) miteinander zu kombinieren, um eine kombinierte Arbeitslast zu erzeugen, wobei die erste Arbeitslast mit einer ersten Instanz verknüpft ist und die zweite Arbeitslast mit einer zweiten Instanz verknüpft ist; einer ersten lokalen Leistungsüberwachungseinheit (780-1), die mit der Kacheleinheit (753) gekoppelt und ausgebildet ist, um: ein erstes Anfangsereignis (829-1) für die kombinierte Arbeitslast zu erzeugen, wobei das erste Anfangsereignis (829-1) angibt, dass mit der Verarbeitung der ersten Arbeitslast an einer ersten Position in der Grafikverarbeitungs-Pipeline (700) begonnen wurde, und ein zweites Anfangsereignis (829-2) für die kombinierte Arbeitslast zu erzeugen, wobei das zweite Anfangsereignis (829-2) angibt, dass mit der Verarbeitung der zweiten Arbeitslast an der ersten Position in der Grafikverarbeitungs-Pipeline (700) begonnen wurde; und einer zweiten lokalen Leistungsüberwachungseinheit (780-2), die ausgebildet ist, um: ein erstes Endereignis (825-1) für die kombinierte Arbeitslast zu erzeugen, wobei das erste Endereignis (825-1) angibt, dass die Verarbeitung der ersten Arbeitslast an einer zweiten Position in der Grafikverarbeitungs-Pipeline (700) beendet ist, und ein zweites Endereignis (825-2) für die kombinierte Arbeitslast zu erzeugen, wobei das zweite Endereignis (825-2) angibt, dass die Verarbeitung der zweiten Arbeitslast an der zweiten Position in der Grafikverarbeitungs-Pipeline (700) beendet ist.
  2. Die Grafikverarbeitungs-Pipeline nach Anspruch 1, wobei jeweils das erste Anfangsereignis (829-1), das zweite Anfangsereignis (829-2), das erste Endereignis (825-1) und das zweite Endereignis (825-2) einen Zeitstempel (856), eine Leistungsüberwachung-ID (852) und einen Lesezeichenwert (858; 862) umfassen.
  3. Die Grafikverarbeitungs-Pipeline nach Anspruch 2, wobei die Kacheleinheit (753) ferner ausgebildet ist, eine dritte Arbeitslast mit der ersten Arbeitslast und der zweiten Arbeitslast zu kombinieren, um die kombinierte Arbeitslast zu erzeugen, wobei die dritte Arbeitslast mit einer dritten Instanz verknüpft ist.
  4. Die Grafikverarbeitungs-Pipeline nach Anspruch 3, wobei: die erste lokale Leistungsüberwachungseinheit (780-1) ferner ausgebildet ist, ein drittes Anfangsereignis (829-3) für die kombinierte Arbeitslast zu erzeugen, wobei das dritte Anfangsereignis (829-3) angibt, dass mit der Verarbeitung der dritten Arbeitslast an der ersten Position in der Grafikverarbeitungs-Pipeline (700) begonnen wurde; und die zweite lokale Leistungsüberwachungseinheit (780-2) ferner ausgebildet ist, ein drittes Endereignis (825-3) für die kombinierte Arbeitslast zu erzeugen, wobei das dritte Endereignis (825-3) angibt, dass die Verarbeitung der zweiten Arbeitslast an der zweiten Position in der Grafikverarbeitungs-Pipeline (700) beendet ist.
  5. Die Grafikverarbeitungs-Pipeline nach Anspruch 1, wobei die Kacheleinheit (753) an der ersten Position in der Grafikverarbeitungs-Pipeline (700) angeordnet ist, und wobei eine Rasteroperationseinheit (765) an der zweiten Position in der Grafikverarbeitungs-Pipeline (700) angeordnet ist.
  6. Die Grafikverarbeitungs-Pipeline nach Anspruch 1, wobei die erste Instanz mehrere zugehörige Methoden umfasst, die der Grafikverarbeitungs-Pipeline (700) zugeleitet werden, und wobei die zweite Instanz mehrere zweite zugehörige Methoden umfasst, die der Grafik-Pipeline (700) zugeleitet werden.
  7. Die Grafikverarbeitungs-Pipeline nach Anspruch 1, die ferner umfasst: eine dritte lokale Leistungsüberwachungseinheit (780-3), die ausgebildet ist, um: ein erstes Zwischenereignis (835-1) für die kombinierte Arbeitslast zu erzeugen, wobei das erste Zwischenereignis (835-1) angibt, dass die Verarbeitung der ersten Arbeitslast an einer ersten Zwischenposition in der Grafikverarbeitungs-Pipeline (700) begonnen hat, und ein zweites Zwischenereignis (835-2) für die kombinierte Arbeitslast zu erzeugen, wobei das zweite Zwischenereignis (835-2) angibt, dass die Verarbeitung der zweiten Arbeitslast an der ersten Zwischenposition in der Grafikverarbeitungs-Pipeline (700) begonnen hat, wobei die erste Position ein Eintrittspunkt der Kacheleinheit (753) ist, die erste Zwischenposition ein Austrittspunkt der Kacheleinheit (753) ist, eine Rasteroperationseinheit (765) an der zweiten Position angeordnet ist, und die zweite lokale Leistungsüberwachungseinheit (780-2) mit der Rasteroperationseinheit (765) gekoppelt ist.
  8. Die Grafikverarbeitungs-Pipeline nach Anspruch 7, wobei die erste lokale Leistungsüberwachungseinheit (780-1), die zweite lokale Leistungsüberwachungseinheit (780-2) und die dritte lokale Leistungsüberwachungseinheit (780-3) ferner ausgebildet sind, eine Anzahl für eine Art von Arbeit zu ermitteln, die für die erste Arbeitslast und die zweite Arbeitslast abgeschlossen worden ist.
  9. Die Grafikverarbeitungs-Pipeline nach Anspruch 1, wobei die Kacheleinheit (753) ferner ausgebildet ist, ein Wiederholungssignal zu erzeugen.
  10. Ein Rechensystem mit: einer Grafikverarbeitungs-Pipeline (700), die ausgebildet ist, um: eine erste Instanz und eine zweite Instanz zu verarbeiten, um eine erste Arbeitslast und eine zweite Arbeitslast zu erzeugen, und eine erste Arbeitslast und eine zweite Arbeitslast zu Bildung einer kombinierten Arbeitslast zu kombinieren; einem Prozessor, der mit der Grafikverarbeitungs-Pipeline (700) verbunden ist; und einem Speicher, der mit dem Prozessor verbunden ist, wobei der Speicher einen Treiber enthält mit Befehlen, die, wenn sie von dem Prozessor ausgeführt werden, den Prozessor veranlassen, um: die erste Instanz, die zweite Instanz, ein erstes lokales Leistungsüberwachungsauslösesignal und ein zweites lokales Leistungsüberwachungsauslösesignal an die Grafikverarbeitungs-Pipeline (700) zu senden; aus der Grafikverarbeitungs-Pipeline (700) ein erstes Anfangsereignis (829-1) zu empfangen, das angibt, dass mit der Verarbeitung der ersten Arbeitslast an einer ersten Position in der Grafikverarbeitungs-Pipeline (700) begonnen wurde; aus der Grafikverarbeitungs-Pipeline ein erstes Endereignis (825-1) zu empfangen, das angibt, dass die Verarbeitung der ersten Arbeitslast an einer zweiten Position in der Grafikverarbeitungs-Pipeline (700) beendet ist; aus der Grafikverarbeitungs-Pipeline (700) ein zweites Anfangsereignis (829-2) zu empfangen, das angibt, dass mit der Verarbeitung der zweiten Arbeitslast an der ersten Position in der Grafikverarbeitungs-Pipeline (700) begonnen wurde; und aus der Grafikverarbeitungs-Pipeline (700) ein zweites Endereignis (825-2) zu empfangen, das angibt, dass die Verarbeitung der zweiten Arbeitslast an der zweiten Position in der Grafikverarbeitungs-Pipeline (700) beendet ist.
DE102013017980.7A 2012-12-18 2013-11-29 Auslösung einer Leistungsereigniserfassung durch parallele Zustandsbündel Active DE102013017980B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/719,034 2012-12-18
US13/719,034 US9030480B2 (en) 2012-12-18 2012-12-18 Triggering performance event capture via pipelined state bundles

Publications (2)

Publication Number Publication Date
DE102013017980A1 DE102013017980A1 (de) 2014-06-18
DE102013017980B4 true DE102013017980B4 (de) 2021-02-04

Family

ID=50821481

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102013017980.7A Active DE102013017980B4 (de) 2012-12-18 2013-11-29 Auslösung einer Leistungsereigniserfassung durch parallele Zustandsbündel

Country Status (4)

Country Link
US (1) US9030480B2 (de)
CN (1) CN103870213B (de)
DE (1) DE102013017980B4 (de)
TW (1) TWI528178B (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9679342B2 (en) * 2013-07-12 2017-06-13 Arm Limited Result data stream coding for repeating workloads
US9910760B2 (en) * 2015-08-07 2018-03-06 Nvidia Corporation Method and apparatus for interception of synchronization objects in graphics application programming interfaces for frame debugging
KR102381945B1 (ko) * 2015-11-18 2022-04-01 삼성전자주식회사 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법
CN107610039A (zh) * 2016-07-12 2018-01-19 联发科技股份有限公司 图像处理方法及图像处理装置
GB2555586B (en) * 2016-10-31 2019-01-02 Imagination Tech Ltd Performance profiling in a graphics unit
US10475149B2 (en) * 2017-09-25 2019-11-12 Intel Corporation Policies and architecture to dynamically offload VR processing to HMD based on external cues
US11875057B2 (en) * 2021-07-20 2024-01-16 Nvidia Corporation Shared structure for a logic analyzer and programmable state machine

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070139421A1 (en) * 2005-12-21 2007-06-21 Wen Chen Methods and systems for performance monitoring in a graphics processing unit
US20080100627A1 (en) * 2004-11-15 2008-05-01 Jorn Nystad Processing of 3-Dimensional Graphics
US7519797B1 (en) * 2006-11-02 2009-04-14 Nividia Corporation Hierarchical multi-precision pipeline counters
US20100020090A1 (en) * 2008-07-16 2010-01-28 Arm Limited Monitoring graphics processing
US7778800B2 (en) * 2006-08-01 2010-08-17 Nvidia Corporation Method and system for calculating performance parameters for a processor
US20120232845A1 (en) * 2009-09-14 2012-09-13 Sony Computer Entertainment Europe Limited Method and apparatus for determining processor performance
US8963932B1 (en) * 2006-08-01 2015-02-24 Nvidia Corporation Method and apparatus for visualizing component workloads in a unified shader GPU architecture

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5371840A (en) * 1990-04-26 1994-12-06 Honeywell Inc. Polygon tiling engine
US6753878B1 (en) * 1999-03-08 2004-06-22 Hewlett-Packard Development Company, L.P. Parallel pipelined merge engines
US6885376B2 (en) * 2002-12-30 2005-04-26 Silicon Graphics, Inc. System, method, and computer program product for near-real time load balancing across multiple rendering pipelines
US8497865B2 (en) * 2006-12-31 2013-07-30 Lucid Information Technology, Ltd. Parallel graphics system employing multiple graphics processing pipelines with multiple graphics processing units (GPUS) and supporting an object division mode of parallel graphics processing using programmable pixel or vertex processing resources provided with the GPUS
US8400454B2 (en) * 2005-03-30 2013-03-19 Ati Technologies, Inc. System and method for creating motion blur
GB0524804D0 (en) * 2005-12-05 2006-01-11 Falanx Microsystems As Method of and apparatus for processing graphics
GB0900700D0 (en) * 2009-01-15 2009-03-04 Advanced Risc Mach Ltd Methods of and apparatus for processing graphics

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080100627A1 (en) * 2004-11-15 2008-05-01 Jorn Nystad Processing of 3-Dimensional Graphics
US20070139421A1 (en) * 2005-12-21 2007-06-21 Wen Chen Methods and systems for performance monitoring in a graphics processing unit
US7778800B2 (en) * 2006-08-01 2010-08-17 Nvidia Corporation Method and system for calculating performance parameters for a processor
US8963932B1 (en) * 2006-08-01 2015-02-24 Nvidia Corporation Method and apparatus for visualizing component workloads in a unified shader GPU architecture
US7519797B1 (en) * 2006-11-02 2009-04-14 Nividia Corporation Hierarchical multi-precision pipeline counters
US20100020090A1 (en) * 2008-07-16 2010-01-28 Arm Limited Monitoring graphics processing
US20120232845A1 (en) * 2009-09-14 2012-09-13 Sony Computer Entertainment Europe Limited Method and apparatus for determining processor performance

Also Published As

Publication number Publication date
DE102013017980A1 (de) 2014-06-18
TW201435581A (zh) 2014-09-16
CN103870213B (zh) 2017-04-12
CN103870213A (zh) 2014-06-18
US20140168231A1 (en) 2014-06-19
US9030480B2 (en) 2015-05-12
TWI528178B (zh) 2016-04-01

Similar Documents

Publication Publication Date Title
DE102013017980B4 (de) Auslösung einer Leistungsereigniserfassung durch parallele Zustandsbündel
DE102013017640B4 (de) Verteilte gekachelte Zwischenspeicherung
DE102009039231B4 (de) Einzeldurchgang-Kachelung
DE102013017982A1 (de) COMPILER gesteuerte Gebietsdisponierung für SIMD-Ausführung von Strängen
DE102013100179A1 (de) Verfahren und System zum Auflösen von Thread-Divergenzen
DE102013018139A1 (de) Technik zur Speicherung gemeinsamer Vertices
DE102013020967B4 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware
DE102013020614A1 (de) Mit Mehrfachauflösung konsistente Rastereinteilung
DE102018109538A1 (de) Techniken zum umfassenden Synchronisieren einer Ausführung von Threads
DE112012000212T5 (de) Technik für live Analyse-basierte Rematerialisation zur Reduktion von Registerdruck und zur Verbesserung von Parallelität
DE102013020810A1 (de) Effiziente Super-Abtastung mit Schattierungs-Strängen pro Pixel
DE102013020807A1 (de) Handhabung von nachgeordneten Z-Abdeckungsdaten in Rasteroperationen
DE102013020968A1 (de) Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher
DE102012211670A1 (de) Simultanes Unterbreiten an eine Mehr-Produzenten-Queue mittels mehrerer Threads
DE102013017509A1 (de) Effiziente Speichervirtualisierung in mehrsträngigen Verarbeitungseinheiten
DE102013022257A1 (de) Programmierbares Mischen in mehrsträngigen Verarbeitungseinheiten
DE112010003750T5 (de) Hardware für parallele Befehlslistenerzeugung
DE102013018445A1 (de) Festlegung eines nachgeordneten Bilderzeugungszustands in einer vorgeordneten Schattierungseinheit
DE102013018136A1 (de) Technik zur Speicherung gemeinsamer Vertices
DE102013200997A1 (de) Ein blockierungsfreies FIFO
DE102013202173A1 (de) Einheitliche Lade-Verarbeitung für Teilsätze von parallelen Threads
DE102013017511A1 (de) Effiziente speichervirtualisierung in mehrsträngigen verarbeitungseinheiten
DE102013020485A1 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware
DE102013019333A1 (de) Registerzuweisung für als cluster vorliegende mehrebenen-registerdaten
DE102012210056A1 (de) Ausgeben einer kohärenten Ausgabe von mehreren Threads für printf

Legal Events

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

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

Representative=s name: VERSCHT, THOMAS K., DIPL.-PHYS.(UNIV.), DE

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