DE102013022257A1 - Programmierbares Mischen in mehrsträngigen Verarbeitungseinheiten - Google Patents

Programmierbares Mischen in mehrsträngigen Verarbeitungseinheiten Download PDF

Info

Publication number
DE102013022257A1
DE102013022257A1 DE102013022257.5A DE102013022257A DE102013022257A1 DE 102013022257 A1 DE102013022257 A1 DE 102013022257A1 DE 102013022257 A DE102013022257 A DE 102013022257A DE 102013022257 A1 DE102013022257 A1 DE 102013022257A1
Authority
DE
Germany
Prior art keywords
data
merge
unit
pixel data
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102013022257.5A
Other languages
English (en)
Inventor
Rui M. Bastos
Mark J. Kilgard
William Craig McKnight
Jerome F. Duluk jun.
Pierre SOUILLOT
Dale L. Kirkland
Christian Amsinck
Joseph Detmer
Christian Rouet
Don Bittel
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 DE102013022257A1 publication Critical patent/DE102013022257A1/de
Pending legal-status Critical Current

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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/503Blending, e.g. for anti-aliasing
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2340/00Aspects of display data processing
    • G09G2340/10Mixing of images, i.e. displayed pixel being the result of an operation, e.g. adding, on the corresponding input pixels

Abstract

Eine Technik zur effizienteren Bildverarbeitung reduziert einen komplexen Mischmodus in eine Reihe von grundlegenden Mischoperationen. Die Reihe aus grundlegenden Mischoperationen wird in einer umlaufenden Pipeline ausgeführt, bis ein endgültiger Mischwert berechnet ist. Die umlaufende Pipeline ist in einer Farbrasteroperationseinheit einer grafischen Verarbeitungseinheit für einen effizienten Zugriff auf Bildpufferdaten angeordnet.

Description

  • HINTERGRUND DER ERFINDUNG
  • Gebiet der Erfindung
  • Die vorliegende Erfindung betrifft mehrsträngige Computerarchitekturen und insbesondere ein programmierbares Mischen in mehrsträngigen Verarbeitungseinheiten.
  • Beschreibung des Stands der Technik
  • Eine Reihe wichtiger Standards zur grafischen Bilderzeugung, die als OpenVG, SVG, Cairo, Skia, JavaFX, Adobe Flash, Adobe PDF, Apples Quartz 2D und HTML5 bekannt sind, erfordern komplexe Mischmodi, die nicht direkt von den konventionellen grafischen Verarbeitungseinheiten (GPUs) unterstützt werden. Als Folge davon wird grafischer Inhalt, der gemäß diesen grafischen Bilderzeugungsstandards formatiert ist, konventioneller Weise von einer zentralen Recheneinheit (CPU) als Bild erzeugt, die in der Lage ist, die aufwändigen Mischmodi unter Anwendung allgemeiner Verarbeitungsoperationen zu realisieren. Jedoch bietet die CPU keine effiziente Bearbeitung mit hohem Durchsatz im Vergleich zu einer GPU, woraus sich möglicherweise ein vergleichsweise langsames Bilderzeugungsleistungsverhalten auf CPU-Basis für den grafischen Inhalts ergibt.
  • Konventionelle GPUs verwalten die Arbeit zur grafischen Bilderzeugung als eine Reihe von Grafikobjekten, die jeweils in eine Anzahl von Fragmenten unterteilt werden, die dann einer Fragment-Schattierungseinheit zugeleitet werden. Die Fragment-Schattierungseinheit berechnet eine Farbe für jedes Fragment und erzeugt ein entsprechendes schattiertes Fragmente, das typischerweise Informationen über Farbe und um Durchlässigkeit beinhaltet. Jedes schattierte Fragment wird dann einer Farbrasteroperationen-(CROP-)Einheit zugeleitet, die ausgebildet ist, das schattierte Fragmente mit Farbdaten für ein entsprechendes Pixel, das in einen Blockpuffer bzw. Bildpuffer gespeichert ist, zu mischen. Die CROP-Einheit führt konventioneller Weise diesen Mischvorgang unter Anwendung einer Schaltung mit festgelegter Funktion für die Summe zweier Produkte, die nicht direkt die komplexen Mischmodi realisieren.
  • Eine Vorgehensweise zur Ausführung komplexer Mischmodi, die in den Standards für die grafische Bilderzeugung in einer GPU benötigt werden, besteht darin, eine Fragment-Schattierungseinheit zu programmieren, so dass diese komplexe Mischmodi realisiert. Zwar ist eine Fragment-Schattierungseinheit gut programmierbar und in der Lage, die komplexen Mischmodi auszuführen, jedoch ist die Lese- und Schreibverarbeitungszeit zwischen der Fragment-Schattierungseinheit und dem Blockpufferspeicher in einer konventionellen GPU relativ lange, so dass das Bilderzeugungsverhalten beeinträchtigt wird und mit hoher Wahrscheinlichkeit unter das Niveau absinkt, das für eine aktuelle CPU erreichbar ist.
  • Wie das Vorhergehende zeigt, ist das, was auf diesem Gebiet benötigt wird, eine Technik zur effizienteren Bilderzeugung mittels komplexer Mischmodi in einer GPU.
  • ÜBERBLICK ÜBER DIE ERFINDUNG
  • Eine Ausführungsform der vorliegenden Erfindung gibt ein Verfahren zur Ausführung einer programmierbaren Mischoperation an, wobei das Verfahren umfasst: Empfangen von zuminderst Ursprungspixeldaten oder Zielpixeldaten für die Verarbeitung auf der Grundlage einer Sequenz von Befehlen, die zu der programmierbaren Mischoperation gehören, Ermitteln, dass eine erste Mischoperation erforderlich ist, wobei die erste Mischoperation durch einen ersten Befehl aus der Sequenz an Befehlen angegeben ist, Ausführen der ersten Mischoperation, um ein erstes Zwischenergebnis zu erzeugen, Ausführen einer zweiten Mischoperation, um ein zweites Zwischenergebnis zu erzeugen, wobei die zweite Mischoperation von einem zweiten Befehl aus der Sequenz an Befehlen angegeben ist, und Speichern des zweiten Zwischenergebnisses. Die programmierbare Mischoperation kann eine beliebige Sequenz an Befehlen mit einer beliebigen Anzahl an Befehlen bezeichnen.
  • Andere Ausführungsformen der vorliegenden Erfindung umfassen, ohne Einschränkung, ein computerlesbares Speichermedium mit Befehlen, die, wenn sie von einer Verarbeitungseinheit ausgeführt werden, die Verarbeitungseinheit veranlassen, die hierin beschriebenen Techniken auszuführen, und umfassen auch eine Recheneinrichtung, die eine Verarbeitungseinheit umfasst, die ausgebildet ist, die hierin beschriebenen Techniken auszuführen.
  • Ein Vorteil der offenbarten Technik besteht darin, dass sie es ermöglicht, grafischen Inhalt, der komplexe Mischmodi erfordert, effizient von einer grafischen Verarbeitungseinheit als Bild erzeugt wird.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Um die Art und Weise, in der die oben genannten Merkmale der vorliegenden Erfindung detailliert verstanden werden können, anzugeben, wird eine speziellere Beschreibung der Erfindung, die zuvor kurz zusammengefasst ist, mit Bezug zu Ausführungsformen angegeben, wovon einige in den angefügten Zeichnungen dargestellt sind. Es ist jedoch zu beachten, dass die angefügten Zeichnungen nur typische Ausführungsformen dieser Erfindung darstellen und daher nicht als Einschränkung für ihren Schutzbereich zu betrachten sind, da die Erfindung andere gleichermaßen wirksame Ausführungsformen zulässt.
  • 1 ist eine Blockansicht, die ein Computersystem darstellt, das ausgebildet ist, einen oder mehrere Aspekte der vorliegenden Erfindung zu realisieren;
  • 2 ist eine Blockansicht eines Parallelverarbeitungssubsystems für das Computersystem aus 1 gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 3A ist eine Blockansicht des Frontbereichs aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 3B ist eine Blockansicht eines allgemeinen Verarbeitungs-Clusters in einer der Parallelverarbeitungseinheiten (PPUs) aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 3C ist eine Blockansicht eines Teils des Datenstrom-Multiprozessors aus 3B gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 4 ist eine Konzeptansicht einer Grafikverarbeitungs-Pipeline, in die eine oder mehrere der PPUs aus 2 zur Realisierung konfiguriert werden können gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 5 ist eine Mischschaltung, die ausgebildet ist, einen Durchlauf einer detaillierten Mischoperation gemäß einer Ausführungsform der vorliegenden Erfindung zu realisieren;
  • 6 zeigt eine Farbrasteroperationen-Mischeinheit, die ausgebildet ist, iterierte Mischoperationen gemäß einer Ausführungsform der vorliegenden Erfindung zu realisieren;
  • 7 ist ein Flussdiagramm von Verfahrensschritten zur Konfigurierung einer Farbrasteroperationen-Mischeinheit, um integrierte Mischoperationen gemäß einer Ausführungsform der vorliegenden Erfindung auszuführen; und
  • 8 ist ein Flussdiagramm von Verfahrensschritten zur Ausführung einer Mischoperation gemäß einer Ausführungsform der vorliegenden Erfindung.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden Beschreibung sind zahlreiche spezielle Details angegeben, um ein gründlicheres Verständnis der vorliegenden Erfindung zu ermöglichen. Der Fachmann erkennt jedoch, dass die vorliegende Erfindung auch ohne eines oder mehrere dieser speziellen Details in die Praxis umgesetzt werden kann. In anderen Fällen sind gut bekannte Merkmale nicht beschrieben, um eine Verdunkelung der vorliegenden Erfindung zu vermeiden.
  • 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, der einen Gerätetreiber 103 enthält. Die CPU 102 und der Systemspeicher 104 kommunizieren über einen Verbindungspfad, der eine Speicherbrücke 105 umfassen kann. 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 Eingabe/Ausgabe-(I/O-)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 Pfad 106 und die Speicherbrücke 105 weiter. Ein Parallelverarbeitungssubsystem 112 ist mit der Speicherbrücke 105 über einen Bus oder einen anderen Kommunikationspfad 113 (beispielsweise ein peripherer Komponenten-Verbindung-(PCI)Express, ein beschleunigter Graphikport (AGP), oder eine HyperTransport-Verbindung) verbunden; in einer Ausführungsform ist das Parallelverarbeitungssubsystem 112 ein Grafiksubsystem, das Pixel an ein Anzeigegerät 110 (beispielsweise ein Monitor auf Basis einer konventionellen Kathodenstrahlröhre (CRT) oder einer Flüssigkristallanzeige) liefert. Eine Systemdiskette 114 ist ebenfalls mit der I/O-Brücke 107 verbunden. Ein Schalter 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), wozu ein universeller serieller Bus (USB) oder andere Portverbindungen, Kompaktdisketten-(CD)Laufwerke, Laufwerke für digitale Videodisketten (DVD), Filmaufzeichnungsgeräte und dergleichen gehören, können ebenfalls mit der I/O-Brücke 107 verbunden sein. Die diversen, in 1 gezeigten Kommunikationspfade, einschließlich der speziell genannten Kommunikationspfade 106 113, können unter Anwendung beliebiger geeigneter Protokolle realisiert werden, etwa durch PCI, PCI-Express (PCIe), AGP, HyperTransport, oder durch ein oder mehrere andere Bus- oder Punkt-Zu-Punkt-Kommunikationsprotokolle, und Verbindungen zwischen unterschiedlichen Einrichtungen können unterschiedliche Protokolle verwenden, wie dies im Stand der Technik bekannt ist.
  • In einer Ausführungsform enthält das Parallelverarbeitungssubsystem 112 eine Schaltung, die für Grafikverarbeitung und Videoverarbeitung optimiert ist, wozu beispielsweise eine Videoausgabeschaltung gehört, und das System bildet eine grafische Verarbeitungseinheit (GPU). In einer weiteren Ausführungsform enthält das Parallelverarbeitungssubsystem 112 eine Schaltung, die für die Verarbeitung für Allgemeinzwecke optimiert ist, wobei dennoch die zu Grunde liegende Rechenarchitektur, die nachfolgend detaillierter beschrieben ist, beibehalten ist. In einer noch weiteren Ausführungsform kann das Parallelverarbeitungssubsystem 112 mit einem oder mehreren anderen Systemelementen zu einem einzelnen Subsystem zusammengefasst sein, etwa durch Vereinigen der Speicherbrücke 105, der CPU 102 und der I/O-Brücke 107, um ein System auf einem Chip (SoC) zu bilden.
  • Zu beachten ist, dass das hierin gezeigte System anschaulicher Natur ist und dass Variationen und Modifizierungen möglich sind. Die Verbindungstopologie, einschließlich der Anzahl und Anordnung von Brücken, die Anzahl an CPUs 102 und die Anzahl an Parallelverarbeitungssubsystemen 112 kann nach Bedarf modifiziert werden. Beispielsweise ist in einigen Ausführungsformen der Systemspeicher 104 direkt mit der CPU 102 anstatt über eine Brücke verbunden, und andere Geräte kommunizieren mit dem Systemspeicher 104 über die Speicherbrücke 105 und die CPU 102. In anderen alternativen Topologien ist das Parallelverarbeitungssubsystem 112 mit der I/O-Brücke 107 oder direkt mit der CPU 102 anstatt mit der Speicherbrücke 105 verbunden. In noch anderen Ausführungsformen können die I/O-Brücke 107 und die Speicherbrücke 105 in einem einzelnen Chip integriert sein, anstatt dass sie als ein oder mehrere diskrete Bauelemente vorhanden sind. Große Ausführungsformen können zwei oder mehr CPUs 102 und zwei oder mehr Parallelverarbeitungssubsysteme 112 aufweisen. Die speziellen Komponenten, die hierin gezeigt sind, sind optional; beispielsweise kann eine beliebige Zahl an Zusatzkarten oder peripheren Geräten unterstützt werden. In einigen Ausführungsformen ist der Schalter 116 weggelassen, und der Netzwerkadapter 118 und die Zusatzkarten 120, 121 sind direkt mit der I/O-Brücke 107 verbunden.
  • 2 zeigt ein Parallelverarbeitungssubsystem 112 gemäß einer Ausführungsform der vorliegenden Erfindung. Wie gezeigt, umfasst das Parallelverarbeitungssubsystem 112 eine oder mehrere Parallelverarbeitungseinheiten (PPUs) 202, wovon jede mit einem lokalen Parallelverarbeitungs-(PP)Speicher 204 verbunden ist. Im Allgemeinen enthält ein Parallelverarbeitungssubsystem eine Anzahl U an PPUs, wobei U ≥ 1 ist. (Hierin werden mehrere Instanzen gleicher Objekte mit Bezugszeichen belegt, die das Objekt kennzeichnen, und Zahlen in Klammern geben bei Bedarf die Instanz an.) Die PPUs 202 und die Parallelverarbeitungsspeicher 204 können unter Anwendung einer oder mehrerer integrierter Schaltungseinrichtungen, etwa durch programmierbare Prozessoren, anwendungsspezifische integrierte Schaltungen (ASIC), oder Speichereinrichtungen oder durch eine andere technisch machbare Weise realisiert werden.
  • Es sei wieder auf 1 sowie auf 2 verwiesen; in einigen Ausführungsformen sind einige oder alle der PPUs 202 in dem Parallelverarbeitungssubsystem 112 Grafikprozessoren mit Bilderzeugungs-Pipelines, die konfiguriert werden können, um diverse Operationen auszuführen, die betreffen: die Erzeugung von Pixeldaten aus Grafikdaten, die von der CPU 102 und/oder dem Systemspeicher 104 über die Speicherbrücke 105 und den zweiten Kommunikationspfad 113 bereitgestellt werden, die Wechselwirkung mit dem lokalen Parallelverarbeitungsspeicher 204 (der als Grafikspeicher verwendbar ist und beispielsweise einen konventionellen Blockpuffer enthält), um Pixeldaten zu speichern und zu aktualisieren, die Zuleitung von Pixeldaten an das Anzeigegerät 110, und dergleichen. In einigen Ausführungsformen kann das Parallelverarbeitungssubsystem 112 eine oder mehrere PPUs 202 aufweisen, die als Grafikprozessoren arbeiten, und kann eine oder mehrere andere PPUs 202 aufweisen, die für Berechnungen für Allgemeinzwecke verwendet werden. Die PPUs 202 können identisch oder unterschiedlich sein, und jede PPU 202 kann einen oder mehrere spezielle Parallelverarbeitungsspeichereinrichtungen oder keinen speziellen Parallelverarbeitungsspeicher aufweisen. Eine oder mehrere PPUs 202 in dem Parallelverarbeitungssubsystem 112 können Daten an das Anzeigegerät 110 ausgeben, oder jede PPU 202 in dem Parallelverarbeitungssubsystem 112 kann Daten an ein oder mehrere Anzeigegeräte 110 ausgeben.
  • Während des Betriebs ist die CPU 102 der übergeordnete Prozessor des Computersystems 100 und steuert und koordiniert den Betrieb anderer Systemkomponenten. Insbesondere gibt die CPU 102 Befehle aus, die den Betrieb der PPUs 202 steuern. In einigen Ausführungsformen schreibt die CPU 102 einen Strom aus Befehlen für jede PPU 202 in eine Datenstruktur (die in 1 oder 2 nicht explizit gezeigt ist), die in dem Systemspeicher 104, dem Parallelverarbeitungsspeicher 204 oder an einer weiteren Speicherstelle liegen kann, auf die sowohl die CPU 102 als auch die PPU 202 zugreifen kann. Ein Zeiger auf jede Datenstruktur wird in einen Schiebepuffer geschrieben, um die Verarbeitung des Stroms aus Befehlen in der Datenstruktur zu initiieren. Die PPU 202 liest Befehlsströme aus einem oder mehreren Schiebepuffern aus und führt die Befehle asynchron relativ zu der Arbeitsweise der CPU 102 aus. Es können für jeden Schiebepuffer durch ein Anwendungsprogramm über den Gerätetreiber 103 Prioritäten für die Ausführung angegeben werden, um die Disponierung der unterschiedlichen Schiebepuffer zu steuern.
  • Es sei nun wieder auf 2 sowie auf 1 verwiesen; jede PPU 202 enthält eine I/O-(Eingabe/Ausgabe-)Einheit 205, die mit dem Rest des Computersystems 100 über den Kommunikationspfad 113 in Verbindung steht, der mit der Speicherbrücke 105 (oder in einer alternativen Ausführungsform direkt mit der CPU 102) in Verbindung steht. Die Verbindung der PPU 202 mit dem Rest des Computersystems 100 kann auch anders sein. In einigen Ausführungsformen ist das Parallelverarbeitungssubsystem 112 als eine Zusatzkarte realisiert, die in einen Erweiterungssteckplatz des Computersystems 100 eingeführt werden kann. In anderen Ausführungsformen kann eine PPU 202 in einem einzelnen Chip zusammen mit einer Busbrücke, etwa der Speicherbrücke 105 oder der I/O-Brücke 107 integriert sein. In noch anderen Ausführungsformen können einige oder alle Elemente der PPU 202 zusammen mit der CPU 102 in einem einzelnen Chip integriert sein.
  • In einer Ausführungsform ist der Kommunikationspfad 113 eine PCI-Expressverbindung, in der jeder PPU 202 spezielle Bahnen zugeordnet sind, wie dies im Stand der Technik bekannt ist. Es können auch andere Kommunikationspfade verwendet werden. Eine I/O-Einheit 205 erzeugt Pakete (oder andere Signale) zur Übertragung auf dem Kommunikationspfad 113 und empfängt ferner alle eintreffenden Pakete (oder andere Signale) aus dem Kommunikationspfad 113, wodurch die eintreffenden Pakete zu geeigneten Komponenten der PPU 202 weitergeleitet werden. Beispielsweise können Befehle, die Verarbeitungsaufgaben betreffen, an eine Hauptschnittstelle 206 geleitet werden, während Befehle, die Speicheroperationen (beispielsweise das Lesen aus dem oder Schreiben in den Parallelverarbeitungsspeicher 204) betreffen, an eine Speicherkreuzungseinheit 210 geleitet werden können. Die Hauptschnittstelle 206 liest jeden Schiebepuffer aus und gibt den in dem Schiebepuffer gespeicherten Befehlsstrom an einen Frontbereich 212 aus.
  • Jede PPU 202 realisiert vorteilhafterweise eine äußerst parallele Verarbeitungsarchitektur. Wie detailliert gezeigt ist, enthält die PPU 202(0) ein Verarbeitung-Cluster-Array 230, das eine Anzahl C an allgemeinen Verarbeitungs-Clustern (GPCs) 208 enthält, wobei C ≥ 1 ist. Jeder GPC 208 ist in der Lage, eine große Anzahl (beispielsweise hunderte oder tausende) Stränge gleichzeitig auszuführen, wobei jeder Strang eine Instanz eines Programms ist. In diversen Anwendungen können unterschiedliche GPCs 208 zur Verarbeitung unterschiedlicher Arten von Programmen oder zur Ausführung unterschiedlicher Arten von Berechnungen reserviert werden. Die Reservierung bzw. Zuweisung von GPCs 208 kann in Abhängigkeit von der Arbeitslast unterschiedlich sein, die sich für jede Art von Programm oder Berechnung ergibt.
  • Die GPCs 208 empfangen zu verarbeitende Ausführungsaufgabe aus einer Arbeitsverteilungseinheit in einer Aufgaben/Arbeitseinheit 207. Die Arbeitsverteilungseinheit empfängt Zeiger auf Verarbeitungsaufgaben, die als Aufgaben-Metadaten (TMD) (nicht gezeigt) codiert und im Speicher abgelegt sind. Die Zeiger auf die TMD sind in dem Befehlsstrom enthalten, der als ein Schiebepuffer gespeichert ist und von der Frontbereichseinheit 212 aus der Hauptschnittstelle 206 empfangen wird. Verarbeitungsaufgaben, die als TMD codiert sein können, enthalten Indizes von zu verarbeitenden Daten, sowie Zustandsparameter und Befehle, die definieren, wie die Daten zu verarbeiten sind (beispielsweise welches Programm auszuführen ist). Die Aufgaben/Arbeitseinheit 207 empfängt Aufgaben aus dem Frontbereich 212 und stellt sicher, dass die GPCs 208 in einen zulässigen Zustand konfiguriert werden, bevor die Verarbeitung, wie sie durch jeden Satz der TMD spezifiziert ist, initiiert wird. Es kann eine Priorität für jeden Satz an TMD angegeben werden, die verwendet wird, um die Ausführung der Verarbeitungsaufgaben zu disponieren. Verarbeitungsaufgaben können auch aus dem Verarbeitungs-Cluster-Array 230 empfangen werden. Optional können die TMD einen Parameter enthalten, der steuert, ob die TMD dem Anfang oder dem Ende einer Liste von Verarbeitungsaufgaben (oder einer Liste aus Zeigern auf die Verarbeitungsaufgaben) hinzuzufügen sind, wodurch eine weitere Ebene einer Steuerung zusätzlich zur Priorität bereitgestellt wird.
  • Eine Speicherschnittstelle 214 enthält eine Anzahl D an Partitionseinheiten 215, die jeweils direkt mit einem Teil des Parallelverarbeitungsspeichers 204 verbunden sind, wobei D ≥ 1 ist. Wie gezeigt, ist generell die Anzahl an Partitionseinheiten 215 gleich der Anzahl an dynamischen Speichern mit wahlfreiem Zugriff (DRAM) 220. In anderen Ausführungsformen ist die Anzahl an Partitionseinheiten 215 gegebenenfalls nicht gleich der Anzahl an Speichereinrichtungen. Der Fachmann auf dem Gebiet erkennt, dass die DRAM 220 durch andere geeignete Speichereinrichtungen ersetzt werden können und dass sie von allgemein konventioneller Gestaltung sein können. Eine detaillierte Beschreibung wird daher weggelassen. Bilderzeugungsziele, etwa Blockpuffer oder Texturzuordnungen, können in den DRAMs 220 gespeichert sein, wodurch es den Partitionseinheiten 215 möglich ist, Bereiche jedes Bilderzeugungsziels parallel zu beschreiben, um in effizienter Weise die verfügbare Bandbreite des Parallelverarbeitungsspeichers 204 auszunutzen.
  • Jeder der GPCs 208 kann Daten verarbeiten, dass Sie in die DRAMs 220 in dem Parallelverarbeitungsspeicher 204 geschrieben werden. Die Kreuzungseinheit 210 ist ausgebildet, die Ausgabe jedes GPC 208 dem Eingang einer Partitionseinheit 215 oder einem weiteren GPC 208 für die weitere Verarbeitung zuzuleiten. Die GPCs 208 kommunizieren mit der Speicherschnittstelle 214 über die Kreuzungseinheit 210, um diverse externe Speichereinrichtungen auszulesen oder diese zu beschreiben. In einer Ausführungsform hat die Kreuzungseinheit 210 eine Verbindung zu der Speicherschnittstelle 214, um mit der I/O-Einheit 205 zu kommunizieren, und hat auch eine Verbindung zu dem lokalen Parallelverarbeitungsspeicher 204, wodurch es den Verarbeitungskernen in den unterschiedlichen GPCs 208 ermöglicht wird, mit dem Systemspeicher 104 oder einem anderen Speicher zu kommunizieren, der nicht lokal für die PPU 202 ist. In der in 2 gezeigten Ausführungsform ist die Kreuzungseinheit 210 direkt mit der I/O-Einheit 205 verbunden. Die Kreuzungseinheit 210 kann virtuelle Kanäle verwenden, um Verkehrsströme zwischen den GPCs 208 und den Partitionseinheiten 215 zu trennen.
  • Die GPCs 208 können wiederum so programmiert sein, dass sie Verarbeitungsaufgaben, die eine Fülle von Anwendungen betreffen, ausführen, wozu gehören, ohne einschränkend zu sein, lineare und nicht-lineare Datentransformationen, die Filterung von Video- und/oder Audiodaten, Modellierungsoperationen (beispielsweise die Anwendung physikalischer Gesetze zur Bestimmung der Position, Geschwindigkeit und anderer Attribute von Objekten), Bilderzeugungsoperationen (beispielsweise Programme für die Parkettierungs-Schattierung, Vertex-Schattierung, Geometrie-Schattierung und/oder Pixel Schattierung) usw. Die PPUs 202 können Daten von dem Systemspeicher 104 und/oder dem lokalen Parallelverarbeitungsspeicher 204 in einen internen (Chip internen) Speicher übertragen, die Daten verarbeiten und die Ergebnisdaten zurück in den Systemspeicher 104 und/oder die lokalen Parallelverarbeitungsspeicher 204 schreiben, wo auf derartige Daten von anderen Systemkomponenten zugegriffen werden kann, wozu die CPU 102 oder ein weiteres Parallelverarbeitungssubsystem 112 gehören.
  • Eine PPU 202 kann mit einer beliebigen Größe an lokalem Parallelverarbeitungsspeicher 204 versehen sein, wobei auch kein lokaler Speicher mit eingeschlossen ist, und kann den lokalen Speicher und einen Systemspeicher in beliebiger Kombination verwenden. Beispielsweise kann eine PPU 202 ein Grafikprozessor in einer Ausführungsform mit vereinheitlichter Speicherarchitektur (UMA) sein. In derartigen Ausführungsformen wird wenig oder kein spezieller graphischer (Parallelverarbeitungs-)Speicher bereitgestellt, und die PPU 202 verwendet ausschließlich oder nahezu ausschließlich den Systemspeicher. In UMA-Ausführungsformen kann eine PPU 202 in einem Brückenchip oder einem Prozessorchip integriert sein, oder kann als ein diskreter Chip mit einer Hochgeschwindigkeitsverbindung vorgesehen sein (beispielsweise PCI-Expressverbindung), die die PPU 202 mit dem Systemspeicher über einen Brückenchip oder eine andere Kommunikationseinrichtungen verbindet.
  • Wie zuvor angegeben ist, kann eine beliebige Anzahl an PPUs 202 in einem Parallelverarbeitungssubsystem 112 enthalten sein. Beispielsweise können mehrere PPUs 202 auf einer einzelnen Zusatzkarte bereitgestellt werden, oder es können mehrere Zusatzkarten mit dem Kommunikationspfad 112 verbunden sein, oder eine oder mehrere PPUs 202 können in einem Brückenchip integriert sein. Die PPUs 202 in einem Multi-PPU-System können identisch oder unterschiedlich zueinander sein. Beispielsweise können verschiedene PPUs 202 eine verschiedene Anzahl an Verarbeitungskernen, eine verschiedene Größe an lokalem Parallelverarbeitungsspeicher usw. aufweisen. Wenn mehrere PPUs 202 vorhanden sind, können diese PPUs parallel betrieben werden, so dass Daten mit höherem Durchsatz verarbeitet werden, als dies mit einer einzelnen PPU 202 möglich wäre. Systeme, die eine oder mehrere PPUs 202 enthalten, können in einer Vielzahl von Konfigurationen und Formfaktoren eingerichtet werden, wozu Tischrechner, mobile Rechner oder Hand-Personalcomputer, Dienstleister-Rechner, Arbeitsplatzrechner, Spielekonsolen, eingebettete Systeme und dergleichen gehören.
  • Mehrfache gleichzeitige Aufgaben-Disponierung
  • 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 die Verarbeitungsaufgaben und die Kind-Verarbeitungsaufgaben dynamisch für die Ausführung durch die GPCs 208.
  • 3A ist eine Blockansicht der Aufgaben/Arbeitseinheit 207 aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung. Die Aufgaben/Arbeitseinheit 207 umfasst eine Aufgabenverwaltungseinheit 300 und die Arbeitsverteilungseinheit 340. Die Aufgabenverwaltungseinheit 300 verwaltet zu disponierende Aufgaben auf der Grundlage von Ausführungsprioritätsebenen. Für jede Prioritätsebene speichert die Aufgabenverwaltungseinheit 300 eine Liste von Zeigern auf die TMD 322, die den Aufgaben in der Disponiertabelle 321 entsprechen, wobei die Liste als eine verknüpfte Liste realisierbar ist. Die TMD 322 können in dem PP-Speicher 204 oder in dem Systemspeicher 104 gespeichert werden. Die Rate, mit der die Aufgabenverwaltungseinheit 300 Aufgaben annimmt und die Aufgaben in der Disponiertabelle 321 speichert, ist von der Rate entkoppelt, mit der die Aufgabenverwaltungseinheit 300 Aufgaben zur Ausführung disponiert. Daher kann die Aufgabenverwaltungseinheit 300 mehrere Aufgaben sammeln, bevor sie die Aufgaben disponiert. Die gesammelten Aufgaben können dann auf der Grundlage einer Prioritätsinformation oder unter Anwendung anderer Techniken, etwa einer Umlauf-Disponierung, disponiert werden.
  • Die Aufgabenverteilungseinheit 340 enthält eine Aufgabentabelle 345 mit Spalten bzw. Bereichen, die von den TMD 322 für eine Aufgabe, die gerade ausgeführt wird, jeweils eingenommen werden können. Die Aufgabenverwaltungseinheit 300 kann Aufgaben zur Ausführung disponieren, wenn es einen freien Bereich in der Aufgabentabelle 345 gibt. Wenn kein freier Bereich vorhanden ist, kann eine Aufgabe mit höherer Priorität, die keinen Bereich einnimmt, eine Aufgabe mit geringerer Priorität, die einen Bereich besetzt, verdrängen. Wenn eine Aufgabe verdrängt wird, wird die Aufgabe angehalten, und wenn die Ausführung der Aufgabe noch nicht abgeschlossen ist, dann wird ein Zeiger auf die Aufgabe einer Liste aus Aufgabenzeigern, die zu disponieren sind, hinzugefügt, so dass die Ausführung der Aufgabe zu einer späteren Zeit wieder aufgenommen wird. Wenn eine Kind-Verarbeitungsaufgabe während der Ausführung einer Aufgabe erzeugt wird, wird ein Zeiger auf die Kind-Aufgabe der Liste aus Aufgabenzeigern, die zu disponieren sind, hinzugefügt. Eine Kind-Aufgabe kann von einem Satz an TMD 322, die in dem Verarbeitungs-Cluster-Array 230 ausgeführt werden, erzeugt werden.
  • Im Gegensatz zu einer Aufgabe, die von der Aufgaben/Arbeitseinheit 207 aus dem Frontbereich 212 empfangen wird, werden Kind-Aufgaben aus dem Verarbeitungs-Cluster-Array 230 empfangen. Kind-Aufgaben werden nicht in Schiebepuffer eingefügt oder an den Frontbereich gesendet. Die CPU 102 wird nicht benachrichtigt, wenn eine Kind-Aufgabe erzeugt wird oder wenn Daten für die Kind-Aufgabe in dem Speicher abgelegt werden. Ein weiterer Unterschied zwischen den Aufgaben, die über die Schiebepuffer bereitgestellt werden, und Kind-Aufgaben besteht darin, dass die über die Schiebepuffer bereitgestellten Aufgaben von dem Anwendungsprogramm definiert sind, wohingegen die Kind-Aufgaben während der Ausführung der Aufgaben dynamisch erzeugt werden.
  • Überblick über die Aufgabenverarbeitung
  • 3B ist eine Blockansicht eines GPC 208 in einer der PPUs 202 aus 2 gemäß einer Ausführungsform der vorliegenden Erfindung. Jeder GPC 208 kann ausgebildet sein, eine große Anzahl an Strängen parallel auszuführen, wobei der Begriff „Strang” eine Instanz eines speziellen Programms bezeichnet, die an 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 unterstützen, ohne dass mehrere unabhängige Befehlseinheiten vorgesehen werden müssen. In anderen Ausführungsformen werden Einzelbefehl-Mehr-Strang-(SIMT-)Techniken eingesetzt, um eine parallele Ausführung einer großen Anzahl an im Allgemeinen synchronisierten Strängen auszuführen, wobei eine gemeinsame Befehlseinheit verwendet wird, die ausgebildet ist, Befehle an eine Gruppe aus Verarbeitungseinheiten innerhalb jedes einzelnen der GPCs 208 auszugeben. Anders als bei einem SIMD-Ausführungsregime, in welchem alle Verarbeitungseinheiten typischerweise identische Befehle ausführen, ermöglicht es die SIMT-Ausführung, dass unterschiedliche Stränge leichter divergenten Ausführungspfaden durch ein gegebenes Strangprogramm hindurch folgen können. Der Fachmann erkennt, dass ein SIMD-Verarbeitungsregime eine funktionale Teilmenge eines SIMT-Verarbeitungsregimes darstellt.
  • Der Betrieb der GPC 208 wird vorteilhafterweise durch einen Pipeline-Verwalter 305 gesteuert, der Verarbeitungsaufgaben an Datenstrom-Multi-Prozessoren (SM) 310 verteilt. Der Pipeline-Verwalter 305 kann ferner ausgebildet sein, eine Arbeitsverteilungskreuzungseinheit 330 durch Angabe von Zielen für verarbeitete Daten, die von den SM 310 ausgegeben werden, zu steuern.
  • In einer Ausführungsform enthält jeder GPC 208 eine Anzahl M an SM 310, wobei M ≥ 1 ist, wobei jeder SM 310 ausgebildet ist, eine oder mehrere Stranggruppen zu verarbeiten. Ferner enthält jeder SM 310 vorteilhafterweise eine identische Gruppe aus Funktionsausführungseinheiten (beispielsweise Ausführungseinheiten und Lade-Sprecher-Einheiten – wie sie als Exec-Einheiten 302 und LSUs 303 in 3C gezeigt sind), die als Pipeline betrieben werden können, wodurch es möglich ist, dass ein neuer Befehl ausgegeben wird, bevor ein vorhergehender Befehl abgeschlossen 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 Vielzahl von Operationen, wozu Ganzzahlarithmetik, Gleitkommazahlarithmetik (beispielsweise Addition und Multiplikation), Vergleichsoperationen, Bool'sche Operationen (UND, ODER, EXKLUSIV ODER), Bit-Verschiebung und Berechnung diverser algebraischer Funktionen gehören (beispielsweise ebene Interpolation, trigonometrische, exponentielle und logarithmische Funktionen usw.); und die gleiche Hardware der Funktionseinheiten kann vorteilhafter benutzt werden, um unterschiedliche Operationen auszuführen.
  • Die Reihe von Befehlen, die an einen speziellen GPC 208 übertragen wird, bildet einen Strang, wie dies hierin zuvor definiert ist, und die Ansammlung einer gewissen Anzahl an gleichzeitig ausgeführten Strängen in den diversen Parallelverarbeitungseinheiten (nicht gezeigt) innerhalb eines SM 310 wird hierin als eine „Kette” oder „Stranggruppe” bezeichnet. Wie hierin verwendet ist, bezeichnet eine „Stranggruppe” eine Gruppe aus Strängen, die gleichzeitig in dem gleichen Programm an unterschiedlichen Eingangsdaten operieren, wobei ein Strang der Gruppe einer anderen Verarbeitungseinheit innerhalb eines SM 310 zugewiesen ist. Eine Stranggruppe kann weniger Stränge als die Anzahl an Verarbeitungseinheiten in dem SM 310 aufweisen, in welchem Falle gewisse Verarbeitungseinheiten während Arbeitszyklen untätig sind, wenn diese Stranggruppe verarbeitet wird. Eine Stranggruppe kann auch mehr Stränge als die Anzahl an Verarbeitungseinheiten innerhalb des SM 310 enthalten, in welchem Falle die Verarbeitung über aufeinanderfolgende Taktzyklen erfolgt. Da jeder SM 310 bis zu G Stranggruppen gleichzeitig unterstützen kann, folgt, dass 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 gleichzeitig in einen SM 310 aktiv sein (in unterschiedlichen Ausführungsphasen). Diese Ansammlung aus 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 ist allgemein durch den Programmierer und der Menge an Hardware-Ressourcen, etwa Speicher oder Register, die für das CTA verfügbar sind, bestimmt.
  • Jeder SM 310 enthält einen Cache-Speicher der Ebene eins (L1) (in 3C gezeigt) oder verwendet Speicherplatz in einem entsprechenden L1-Cache-Speicher außerhalb des SM 310, der verwendet wird, um Lade- und Speicheroperationen auszuführen. Jeder SM 310 hat auch Zugriff zu Cache-Speichern der Ebene zwei (L2), die von allen GPCs 208 gemeinsam benutzt werden und die verwendbar sind, um Daten zwischen Strängen auszutauschen. Schließlich haben alle SM 310 auch Zugriff auf einen Chip externen „globalen” Speicher, der beispielsweise den Parallelverarbeitungsspeicher 204 und/oder den Systemspeicher 104 umfassen kann. Zu beachten ist, dass jeder Speicher außerhalb der PPU 202 als globaler Speicher verwendet werden kann. Ferner kann ein Cache-Speicher eins-Punkt-fünf (L1.5) in dem GPC 208 enthalten sein, der ausgebildet ist, Daten zu empfangen und zu halten, die aus einem Speicher über die Speicherschnittstelle 214 abgeholt und von den SM 310 angefordert wurden, wozu Befehle, gleichförmige Daten und konstante Daten gehören, und um die angeforderten Daten dem SM 310 zuzuleiten. Ausführungsformen mit mehreren SM 310 in dem GPC 208 benutzen vorteilhafterweise gemeinsame Befehle und Daten, die in dem Cache-Speicher L1.5 335 zwischengespeichert sind.
  • Jeder GPC 208 kann eine Speicherverwaltungseinheit (MMU) 328 aufweisen, die ausgebildet ist, virtuelle Adressen physikalischen Adressen zuzuordnen. In anderen Ausführungsformen können die eine oder die mehreren MMU 328 in der Speicherschnittstelle 214 liegen. Die MMU 328 umfasst eine Gruppe aus Seitentabelleneinträgen (PTE), die verwendet werden, um eine virtuelle Adresse einer physikalischen Adresse einer Kachel zuzuordnen, und enthält optional einen Cache-Zeilenindex. Die MMU 328 kann Adressen-Translations-Nebenschaupuffer (TLB) oder Cache-Speicher aufweisen, die in dem Multiprozessor SM 310 oder in dem L1-Cache-Speicher oder dem GPC 208 liegen können. Die physikalische Adresse wird so verarbeitet, dass Zugriffslokalität für Oberflächendaten verteilt wird, um eine effiziente Aufteilung von Anforderungen zwischen den Partitionseinheiten zu ermöglichen. Der Cache-Zeilenindex kann verwendet werden, um zu bestimmen, ob die Anforderung für eine Cache-Zeile ein Treffer oder einen Fehltreffer ist.
  • In Grafikanwendungen und Rechenanwendungen kann ein GPC 208 so ausgebildet sein, dass jeder SM 310 mit einer Textureinheit 315 zur Ausführung von Texturzuordnungsoperationen verbunden ist, beispielsweise zur Bestimmung von Textur-Abtastpositionen, zum Auslesen von Texturdaten und zur Filterung der Texturdaten. Texturdaten werden aus einem internen Textur-L1-Cache-Speicher (nicht gezeigt) oder in einigen Ausführungsformen aus dem L1-Cache-Speicher innerhalb des SM 310 ausgelesen und von einem L2-Cache Speicher, dem Parallelverarbeitungsspeicher 204 oder dem Systemspeicher 104 nach Bedarf abgeholt. Jeder SM 310 gibt verarbeitete Aufgaben an die Arbeitsverteilungskreuzungseinheit 330 aus, um die verarbeitete Aufgabe einem weiteren GPC 208 für die Weiterverarbeitung zuzuführen, oder um die verarbeitete Aufgabe in einem L2-Cache-Speicher, dem Parallelverarbeitungsspeicher 204 oder dem Systemspeicher 104 über die Kreuzungseinheit 210 zu speichern. Eine Vor-ROP-Einheit (Vor-Rasteroperationen) 325 ist ausgebildet, Daten aus dem SM 310 zu empfangen, Daten an die ROP-Einheiten in den Partitionseinheiten 215 weiterzuleiten und Optimierungen im Hinblick auf die Farbmischung auszuführen, Pixel-Farbdaten zu verwalten und Adressenübersetzungen auszuführen.
  • Zu beachten ist, dass die Kernarchitektur, die hierin beschrieben ist, anschaulicher Natur ist und dass Änderungen und Modifizierungen möglich sind. Es kann eine beliebige Anzahl an Verarbeitungseinheiten, beispielsweise SM 310 oder Textureinheiten 315, Vor-ROP-Einheiten 325 in einem GPC 208 enthalten sein. Obwohl ferner nur ein einzelner GPC 208 gezeigt ist, kann eine PPU 202 eine beliebige Anzahl an GPC 208 enthalten, die vorteilhafterweise funktional zueinander ähnlich sind, so dass das Arbeitsverhalten nicht davon abhängt, welcher GPC 208 welche Verarbeitungsaufgabe erhält. Ferner arbeitet jeder GPC 208 vorteilhafterweise unabhängig von anderen GPC 208 unter Verwendung separater und unterschiedlicher Verarbeitungseinheiten, L1-Cache-Seichern, um Aufgaben für eine oder mehrere Anwendungsprogramme auszuführen.
  • Der Fachmann erkennt, dass die in den 1, 2, 3A und 3B beschriebene Architektur in keiner Weise den Schutzbereich der vorliegenden Erfindung beschränkt und dass die hierin gelehrten Techniken in einer beliebigen geeignet konfigurierten Verarbeitungseinheit realisiert werden können, wozu, ohne Einschränkung, eine oder mehrere CPUs, eine oder mehrere Multi-Kern-CPUs, eine oder mehrere PPUs 202, ein oder mehrere GPC 208, eine oder mehrere grafische Verarbeitungseinheiten oder Verarbeitungseinheiten für Spezialzwecke oder dergleichen gehören, ohne von dem Schutzbereich der vorliegenden Erfindung abzuweichen.
  • 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 Anwendung von Strang-Arrays auszuführen. Jedem Strang in dem Strang-Array ist eine eindeutige Strangkennung („Strang-ID”) zugeordnet, 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 Arbeitsverhaltens des Strangs. Beispielsweise kann eine Strang-ID verwendet werden, um zu bestimmen, welcher Bereich des Eingangsdatensatzes eines Strangs zu verarbeiten ist und/oder um zu bestimmen, welcher Bereich eines Ausgangsdatensatzes von einem Strang zu erzeugen oder zu schreiben ist.
  • 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 festlegt. 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 anzuhalten, bis zu dem Zeitpunkt, an welchem ein oder mehrere der anderen Stränge diesen speziellen Punkt erreicht haben, einen Befehl für den repräsentativen Strang, dass dieser Daten in einem gemeinsam benutzten Speicher gespeichert, auf den ein oder mehrere der anderen Stränge Zugriff haben, einen Befehl für den repräsentativen Strang, um Daten, die in einem gemeinsam benutzten Speicher gespeichert sind, auf den ein oder mehrere der anderen Stränge auf der Grundlage ihrer Strang-ID Zugriff haben, in atomarer Weise bzw. ungeteilter Weise zu lesen und zu aktualisieren, und dergleichen. Das CTA-Programm kann ferner einen Befehl enthalten, um eine Adresse in dem gemeinsam benutzten Speicher zu berechnen, aus welcher Daten auszulesen sind, wobei die Adresse eine Funktion der Strang-ID ist. Durch die Festlegung 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 Stelle durch einen anderen Strang des gleichen CTA in vorhersagbarer Weise ausgelesen werden. Folglich kann ein gewünschtes Muster an gemeinsamer Datennutzung zwischen den Strängen eingerichtet werden, und ein Strang in einem CTA kann Daten gemeinsam mit einem anderen Strang in dem gleichen CTA benutzen. Das Ausmaß, falls vorhanden, einer gemeinsamen Datennutzung zwischen den Strängen eines CTA ist durch das CTA-Programm festgelegt; somit ist zu beachten, dass in einer speziellen Anwendung, die CTA benutzt, die Stränge eines CTA gegebenenfalls Daten miteinander gemeinsam benutzten oder auch nicht, wobei dies von dem CTA-Programm abhängt, und somit werden die Begriffe „CTA” und „Strang-Array” hierin als Synonym verwendet.
  • 3C ist eine Blockansicht des SM 310 aus 3B gemäß einer Ausführungsform der vorliegenden Erfindung. Der SM 310 umfasst einen Befehls-L1-Cache-Speicher 370, der ausgebildet ist, Befehle und Konstanten aus dem Speicher über den L1.5-Cache-Speicher 335 zu erhalten. Eine Kettendisponier- und Befehlseinheit 312 empfängt Befehle und Konstanten aus dem Befehls-L1-Cache-Speicher 370 und speichert die lokale Registerdatei 304 und Funktionseinheiten des SM 310 entsprechend den Befehlen und Konstanten. Die Funktionseinheiten des SM 310 umfassen N Exec-(Ausführung- oder Verarbeitungs-)Einheiten 302 und P Lade-Speichereinheiten (LSU) 303.
  • Der SM 310 stellt einen chipinternen (internen) Datenspeicherplatz mit unterschiedlichen Ebenen an Zugänglichkeit bereit. Spezialregister (nicht gezeigt) sind von der LSU 303 lesbar aber nicht beschreibbar und können verwendet werden, um Parameter zu speichern, die die „Position” jedes Strangs definieren. In einer Ausführungsform enthalten die Spezialregister ein Register pro Strang (oder pro Exec-Einheit 302 in dem SM 310), das eine Strang-ID speichert. Jedes Register einer Strang-ID ist nur von einer entsprechenden Exec-Einheit 302 ansprechbar. Spezialregister können auch zusätzliche Register enthalten, die von allen Strängen lesbar sind, die die gleiche Verarbeitungsaufgabe ausführen, die durch einem Satz an TMD 322 repräsentiert ist (oder von allen LSU 303), die eine CTA-Kennung, die CTA-Dimensionen, die Dimensionen eines Gitters, zu welchem das CTA gehört (eine Warteschlangenposition, wenn die TMD 322 eine Warteschlangenaufgabe anstelle einer Gitteraufgabe kodieren), und eine Kennung der TMD 322, denen das CTA zugeordnet ist, speichern.
  • Wenn die TMD 322 ein Gitter-TMD sind, bewirkt die Ausführung der TMD 322, dass eine festgelegte Anzahl an CTAs gestartet und ausgeführt wird, um die festgelegte Menge an Daten zu verarbeiten, die in der Warteschlange gespeichert sind. Die Anzahl an CTAs ist als das Produkt der Gitterbreite, Höhe und Tiefe angegeben. Die festgelegte Menge an Daten kann in den TMD 322 gespeichert sein, oder die TMD 322 können einen Zeiger auf die Daten speichern, die von den CTAs verarbeitet werden. Die TMD 322 können ferner eine Startadresse des Programms enthalten, das von den CTAs ausgeführt wird.
  • Wenn die TMD 322 Warteschlange-TMD sind, dann kann eine Warteschlangeneigenschaft der TMD 322 verwendet werden, was bedeutet, dass die zu verarbeitende Datenmenge nicht notwendigerweise festgelegt ist. Warteschlangeneinträge speichern Daten zur Verarbeitung durch die CTAs, die den TMD 322 zugeordnet sind. Die Warteschlangeneinträge können auch eine Kind-Aufgabe repräsentieren, die von weiteren TMD 322 während der Ausführung eines Strangs erzeugt wird, wodurch eine eingebettete Parallelität geschaffen wird. Typischerweise wird die Ausführung des Strangs oder des CTA, das den Strang enthält, unterbrochen, bis die Ausführung der Kind-Aufgabe abgeschlossen ist. Die Warteschlange kann in den TMD 322 oder separat zu den TMD 322 gespeichert werden, in welchem Falle die TMD 322 einen Warteschlangenzeiger auf die Warteschlange speichern. Vorteilhafterweise können die von der Kind-Aufgabe erzeugten Daten in die Warteschlange geschrieben werden, während die TMD 322, die die Kind-Aufgabe repräsentieren, ausgeführt werden. Die Warteschlange kann als eine Ringwarteschlange realisiert werden, so dass die gesamte Datenmenge nicht auf die Größe der Warteschlange beschränkt ist.
  • CTAs, die einem Gitter angehören, haben implizite Parameter für die Gitterbreite, Höhe und Tiefe, die die Position des jeweiligen CTA innerhalb des Gitters angegeben. Spezialregister werden während der Initialisierung in Reaktion auf Befehle beschrieben, die über den Frontbereich 212 von dem Gerätetreiber 103 empfangen werden, und die Register ändern sich während der Ausführung einer Verarbeitungsaufgabe nicht. Der Frontbereich 212 disponiert jede Verarbeitungsaufgabe für die Ausführung. Jedes CTA ist einem speziellen Satz an TMD 322 für die gleichzeitige Ausführung einer oder mehrerer Aufgaben zugeordnet. Ferner kann ein einzelner GPC 208 mehrere Aufgaben gleichzeitig ausführen.
  • Ein Parameterspeicher (nicht gezeigt) speichert Laufzeitparameter (Konstanten), die von einem beliebigen Strang innerhalb des gleichen CTA (oder einer LSU 303) gelesen aber nicht beschrieben werden können. In einer Ausführungsform leitet der Gerätetreiber 103 Parameter dem Parameterspeicher zu, bevor der SM 310 angewiesen wird, die Ausführung einer Aufgabe zu beginnen, die diese Parameter verwendet. Ein beliebiger Strang innerhalb eines CTA (oder eine Exec-Einheit 302 innerhalb des SM 310) kann auf den globalen Speicher mittels einer Speicherschnittstelle 214 zugreifen. Teile des globalen Speichers können in dem L1-Cache-Speicher 320 liegen.
  • Eine lokale Registerdatei 304 wird von jedem Strang als Arbeitsbereich verwendet; jedes Register ist für die ausschließliche Nutzung durch einen einzigen Strang reserviert, und Daten in einem Register der lokalen Registerdatei 304 sind nur für den Strang verfügbar, dem das Register zugewiesen ist. Die lokale Registerdatei 304 kann als eine Registerdatei realisiert sein, die physikalisch oder logisch in P Bahnen unterteilt ist, wobei jede eine gewisse Anzahl an Einträgen (wobei jeder Eintrag beispielsweise ein 32-Bit-Wort speichern kann) aufweist. Jeder der N Exec-Einheiten 302 und jeder der P Lade-Speichereinheiten LSU 303 ist eine einzelne Bahn zugewiesen, und entsprechende Einträge in unterschiedlichen Bahnen können mit Daten für unterschiedliche Stränge, die in dem gleichen Programm ausgeführt werden, angereichert werden, um eine SIMD-Ausführung zu ermöglichen. Unterschiedliche Teile der Bahnen können unterschiedlichen Gruppen der G gleichzeitigen Stranggruppen zugewiesen sein, so dass auf einen gegebenen Eintrag in der lokalen Registerdatei 304 nur von einem speziellen Strang zugegriffen werden kann. In einer Ausführungsform sind gewisse Einträge innerhalb der lokalen Registerdatei 304 für die Speicherung von Strangkennungen reserviert, wodurch eines der Spezialregister realisiert wird. Ferner speichert ein gleichförmiger L1-Cache-Speicher 320 gleichförmige oder konstante Werte für jede Bahn der N Exec-Einheiten 302 und der P Lade-Speichereinheiten LSU 303.
  • Der gemeinsam genutzte Speicher 306 ist für Stränge innerhalb eines einzelnen CTA zugänglich; anders ausgedrückt, jede Stelle in dem gemeinsam benutzten Speicher 306 ist für einen beliebigen Strang innerhalb des gleichen CTA (oder eine Verarbeitungseinheit innerhalb des SM 310) zugänglich. Der gemeinsam genutzte Speicher 306 kann als eine gemeinsame benutzte Registerdatei oder ein gemeinsam benutzter chipinterner Cache-Speicher mit einer Verbindung realisiert werden, die es einer beliebigen Verarbeitungseinheit ermöglicht, jede Stelle in dem gemeinsam benutzten Speicher zu lesen oder zu beschreiben. In anderen Ausführungsformen kann der gemeinsam benutzte Zustandsraum auf ein Gebiet pro CTA eines chipexternen Speichers abgebildet sein, und kann in dem L1-Cache-Speicher 320 zwischengespeichert sein. Der Parameterspeicher kann als ein spezieller Abschnitt innerhalb der gleichen gemeinsamen benutzten Registerdatei oder als ein gemeinsam benutzter Crash-Speicher realisiert sein, der den gemeinsam benutzten Speicher 306 realisiert, oder kann als eine separate gemeinsame benutzte Registerdatei oder ein chipinterner Cache-Speicher realisiert sein, auf den die LSUs 303 nur einen lesenden Zugriff haben. In einer Ausführungsform wird der Bereich, der den Parameterspeicher bildet, auch verwendet, um die CTA-ID und die Aufgaben-ID sowie die CTA- und Gitter-Abmessungen oder Warteschlangenposition zu speichern, wodurch Teile der Spezialregister realisiert werden. Jede LSU 303 in dem SM 310 ist mit einer vereinheitlichten Adressenzuordnungseinheit 352 verbunden, die eine Adresse, die für Lade- und Speicherbefehle bereitgestellt wird, die in einem vereinheitlichten Speicherraum angegeben sind, eine Adresse in jedem einzelnen Speicherraum umwandelt. Folglich kann ein Befehl verwendet werden, um auf den lokalen, den gemeinsam benutzten oder den globalen Speicherraum zuzugreifen, indem eine Adresse in dem vereinheitlichten Speicherraum angegeben wird.
  • Der L1-Cache-Speicher 320 in jedem SM 310 kann verwendet werden, um private lokale Daten pro Strang und auch globale Daten pro Anwendung zwischenzuspeichern. In einigen Ausführungsformen können die gemeinsamen benutzten Daten pro CTA in dem L1-Cache-Speicher 320 zwischengespeichert werden. Die LSU 303 sind mit dem gemeinsam benutzten Speicher 306 und dem L1-Cache-Speicher 320 über eine Speicher- und Cache-Verbindung 380 verbunden.
  • Architektur der Grafik-Pipeline
  • 4 ist eine Konzeptansicht einer Grafikverarbeitungs-Pipeline 400, die in eine oder mehrere der PPUs 202 aus 2 zur Realisierung konfiguriert werden können gemäß einer Ausführungsform der vorliegenden Erfindung. Beispielsweise kann einer der SM 310 so gestaltet sein, dass er die Funktionen einer oder mehrerer Vertex-Verarbeitungseinheiten 415, einer Geometrie-Verarbeitungseinheit 425 und einer Fragment-Verarbeitungseinheit 460 ausführt. Die Funktionen eines Daten-Assemblers 410, eines Grundelemente-Assemblers 420, einer Rastereinheit 455 und einer Farbrasteroperationen(CROP)-Einheit 465 können ebenfalls durch andere Verarbeitungseinheiten innerhalb eines GPC 208 und einer entsprechenden Partitionseinheit 215 ausgeführt werden. Andernfalls kann die Grafikverarbeitungs-Pipeline 400 unter Verwendung spezieller Verarbeitungseinheiten für eine oder mehrere Funktionen realisiert werden.
  • Die Verarbeitungseinheit in Form des Daten-Assemblers 410 sammelt Vertex-Daten für Oberflächen höherer Ordnung, Grundelemente und dergleichen und gibt die Vertex-Daten, wozu die Vertex-Attribute gehören, an die Vertex-Verarbeitungseinheit 415 aus. Die Vertex-Verarbeitungseinheit 415 ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Vertex-Schattierungsprogramme auszuführen, um Beleuchtung und die Transformation von Vertex-Daten anzugeben, wie sie durch die Vertex-Schattierungsprogramme spezifiziert sind. Beispielsweise kann die Vertex-Verarbeitungseinheit 415 programmiert sein, um die Vertex-Daten von einer objektbasierten Koordinatendarstellung (Objektraum) in ein Koordinatensystem mit alternativer Basis zu transformieren, etwa in einen Welt-Raum oder in einen normierten Gerätekoordinaten-(NDC)Raum. Die Vertex-Verarbeitungseinheit 415 kann Daten auslesen, die in dem L1-Cache-Speicher 320, in dem Parallelverarbeitungsspeicher 204 oder in dem Systemspeicher 104 von dem Daten-Assemblers 410 zur Verwendung bei der Verarbeitung der Vertex-Daten gespeichert sind.
  • Der Assembler für Grundelemente 420 empfängt Vertex-Attribute aus der Vertex-Verarbeitungseinheit 415, wobei gespeicherte Vertex-Attribute nach Bedarf ausgelesen werden, und baut grafische Grundelemente für die Verarbeitung durch die Geometrie-Verarbeitungseinheit 425 auf. Zu grafischen Grundelementen gehören Dreiecke, Liniensegmente, Punkte und dergleichen. Die Geometrie-Verarbeitungseinheit 425 ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Geometrie-Schattierungsprogramme auszuführen, wobei grafische Grundelemente, die von dem Assembler für Grundelemente 420 empfangen werden, transformiert werden, wie dies durch die Geometrie-Schattierungsprogramme angegeben ist. Beispielsweise kann die Geometrie-Verarbeitungseinheit 425 so programmiert sein, dass sie die grafischen Grundelemente in ein oder mehrere neue grafische Grundelemente unterteilt und Parameter berechnet, etwa Koeffizienten für die Ebenengleichung, die verwendet werden, um die neuen grafischen Grundelemente in Raster einzuteilen.
  • In einigen Ausführungsformen kann die Geometrie-Verarbeitungseinheit 425 auch Elemente dem Geometrie-Strom hinzufügen oder aus diesem löschen. Die Geometrie-Verarbeitungseinheit 425 gibt die Parameter und Vertices bzw. Eckpunkte, die die neuen grafischen Grundelemente angeben, an eine Darstellungsfeld-Skalierungs-, Auswahl-, und Schneideeinheit 450 aus. Die Geometrie-Verarbeitungseinheit 425 kann Daten lesen, die in dem Parallelverarbeitungsspeicher 204 oder in den Systemspeicher 104 gespeichert sind und zur Weiterverarbeitung der Geometriedaten verwendet werden. Die Darstellungsfeld-Skalier-, Auswahl-, und Schneideeinheit 450 führt einen Schneiden, Auswählen und eine Darstellungsfeldskalierung aus und gibt die verarbeiteten grafischen Grundelemente an eine Rastereinheit 455 aus.
  • Die Rastereinheit 455 konvertiert in abtastender Weise die neuen grafischen Grundelemente und gibt Fragmente und Abdeckungsdaten an die Fragment-Verarbeitungseinheit 460 aus. Ferner kann die Rastereinheit 455 ausgebildet sein, eine z-Auswahl und andere z-basierte Optimierungen durchzuführen.
  • Die Fragment-Verarbeitungseinheit 460 ist eine programmierbare Ausführungseinheit, die ausgebildet ist, Fragment-Schattierungsprogramme auszuführen, wobei Fragmente, die aus der Rastereinheit 455 erhalten werden, transformiert werden in der Art, wie dies durch die Fragment-Schattierungsprogramme angegeben ist. Beispielsweise kann die Fragment-Verarbeitungseinheit 460 so programmiert sein, dass Operationen ausgeführt werden, etwa eine perspektivische Korrektur, eine Texturzuordnungen, eine Schattierung, eine Mischung und dergleichen, um schattierte Fragmente zu erzeugen, die an die CROP-Einheit 465 ausgegeben werden. Die Fragment-Verarbeitungseinheit 460 kann Daten lesen, die in dem Parallelverarbeitungsspeicher 204 oder in den Systemspeicher 104 zur Verwendung bei der Verarbeitung der Fragmentdaten gespeichert sind. Fragmente können schattiert sein auf Ebene von Pixel, Abtastwerten oder entsprechend einer anderen Auflösung, wobei dies von der programmierten Abtastrate abhängig.
  • Die CROP-Einheit 465 ist eine Verarbeitungseinheit, die Rasteroperationen ausführt, etwa Farbmischung und dergleichen, und die Pixeldaten als verarbeitete Grafikdaten zur Speicherung im Grafikspeicher ausgibt. Die verarbeiteten Grafikdaten können im Grafikspeicher, beispielsweise dem Parallelverarbeitungsspeicher 204, und/oder dem Systemspeicher 104 zur Anzeige auf dem Anzeigegerät 110 oder zur weiteren Verarbeitung durch die CPU 102 oder das Parallelverarbeitungssubsystem 112 gespeichert werden. In gewissen Ausführungsformen umfasst jedes Pixel mehrere Farbabtastwerte. In derartigen Ausführungsformen ist die CROP-Einheit 465 ausgebildet, Farbabtastdaten zu komprimieren, die in den Speicher geschrieben werden, und um Farbabtastdaten zu dekomprimieren, die aus dem Speicher gelesen werden. Das Ziel dieser Komprimiertechnik besteht darin, nicht die Größe eines Bildes im Speicher zu reduzieren, sondern den Bearbeitungsaufwand zu verringern, der mit dem Bild verknüpft ist, indem alle Abtastwerte für ein gegebenes Pixel durch eine Gruppe aus Abtastwerten dargestellt wird, die eine Verarbeitung erfordern. In einer typischen Szene enthält die Mehrheit der Pixel Farbabtastwerte mit gleichem Wert und diese Komprimiertechnik ermöglicht ein verbessertes Verarbeitungsverhalten. Es werden mehrere Farbabtastwerte kombiniert, um ein fehlerbefreites Pixel in einem resultierenden Bild zur Anzeige oder zur weiteren Verarbeitung zu erzeugen. Wenn alle Farbabtastwerte, die zu einem speziellen Pixel gehören, im Wert gleich sind, wird ein einziger Farbabtastwerte für das Pixel gespeichert und die Statusinformation für das Pixel wird so festgelegt, dass sie anzeigt, dass die Abtastwerte komprimiert sind. In einer Ausführungsform haben die Abtastwerte, die zu einem Pixel gehören, die gleiche Farbe, wenn ein entsprechendes Fragment das Pixel vollständig bedeckt. Farbabtastwerte für das Pixel innerhalb des Bildes können kombiniert werden, um ein fehlerbefreites Pixel für die Anzeige zu erzeugen.
  • Iterierte Mischeinheit
  • Ausführungsformen der vorliegenden Erfindung ermöglichen es einem Parallelverarbeitungssubsystem, etwa einer GPU, Mischoperationen in der CROP 465 aus 4 auszuführen. Mit diesem verfügbaren komplexen Mischoperationen können Inhalte für grafische Bilderzeugungsstandards, etwa OpenVG, SVG, Cairo, Skia, JavaFX, Adobe Flash, Adobe PDF, Apples Quartz 2D und HTML5 effizient in der GPU erzeugt werden, wodurch das Systemverhalten vorteilhafterweise verbessert wird. Um komplexe Mischoperationen zu unterstützen, ist die CROP 465 ausgebildet, eine Mischoperation mit mehreren Durchläufen an Ursprungs- und Zieldaten auszuführen. In einer Ausführungsform umfasst jeder Durchlauf der Mehrfach-Durchlauf-Mischoperation eine Summe aus zwei Produkten, wie dies nachfolgend detaillierter dargestellt ist.
  • Eine konventionelle CROP-Einheit realisiert eine Mischung mit einer Summe aus zwei Produkten, die durch die nachfolgende Gleichung 1 angegeben ist: src_color·src_coefficient + dst_color·dst_coefficient (Gl. 1)
  • Dabei bedeutet „src” Daten, die aus vorgeordneter Stelle empfangen werden, etwa Farbdaten und Durchlässigkeitsdaten, die in der Fragment-Schattiereinheit 460 berechnet werden. Hier bedeutet ferner „dst” Daten, die bereits in dem Bilderzeugungsziel gespeichert sind, etwa in den Blockpufferspeicher. Beispielsweise würde eine Mischoperation, die einen vorgeordneten Wert src_color mit 70% Durchlässigkeit mit einem Wert dst_color kombiniert, mit einem src_coefficient von 0,70 und einem dst_coefficient von 0,30 ausgeführt, so dass der Wert src_color 70% und der Wert dst_color 30% zu einer gemischten Farbe, die in dem Blockpuffer gespeichert wird, beiträgt. Konventionelle GPUs unterstützen diese Art an Mischoperationen, die im Wesentlichen eine Mischung mit einem einzelnen Durchlauf ist, als eine native CROP-Mischoperationen. Jedoch werden komplexere Mischoperationen für gewöhnlich nicht als CROP-Mischoperationen unterstützt. Ein Beispiel einer komplexen Mischoperation, die von einer konventionellen CROP-Einheit nicht unterstützt wird, ist eine Mischoperationen mit weichem Licht, die im Format von Adobe Flash realisiert wird. Die Mischung mit weichem Licht ist nachfolgenden der Tabelle 1 gezeigt. Tabelle 1
    Figure DE102013022257A1_0002
  • Ausführungsformen der vorliegenden Erfindung realisieren komplexe Mischoperationen, indem jede komplexe Mischoperation in eine Reihe einfacher Mischdurchläufe zerlegt wird, wobei jeder Mischdurchlauf nur eine Summe aus zwei Produkten erfordert. Beispielsweise kann die zuvor in Tabelle 1 gezeigte Mischoperationen zerlegt und realisiert werden in Form dreier Mischdurchläufe, wobei jeder eine Summe aus zwei Produkten umfasst. Diese drei Mischdurchläufe sind nachfolgend in Tabelle 2 gezeigt. Eine bedingte Ausführung und eine temporäre Speicherung sind der Grundfunktion einer CROP-Mischeinheit hinzugefügt. Die temporäre Speicherung, die durch die variable „T” angegeben ist, ermöglicht es, dass Zwischenergebnisse zwischen den Mischdurchläufen verwendet werden können. Tabelle 2
    Durchlauf1: if(src <= 0.5) T = dst·src + 0.5·dst
    Durchlauf2: if(src > 0.5) T = (1 – dst)·src – 0.5
    Durchlauf3: if(src > 0.5) T = T + 1.5·dst
  • In dem Beispiel aus Tabelle 2 kann der Bedingungsoperator Durchlauft „if (src <= 0.5)” bewerten, eine Zuweisungsoperation Durchlauft auszuführen „T = dst·src + 0.5·dst” während des Durchlauft. Ein Bedingungsoperator Durchlauf2 „if src > 0.5” kann bewerten, eine Zuordnungsoperation für den Durchlauf2 „T =(1 – dst)·src – 0.5” während des Durchlauf2 auszuführen. In ähnlicher Weise kann ein Bedingungsoperator Durchlauf3 „if (src > 0.5)” bewerten, eine Zuordnungsoperation Durchlauf3 „T = T + 1.5·dst” während des Durchlauf2 auszuführen. Wie angegeben ist, sind der Bedingungsoperator Durchlauft einerseits und die Bedingungsoperatoren Durchlauf2 und Durchlauf3 einander ausschließend, so dass entweder die Zuordnungsoperation Durchlauft für gegebene src-Daten oder die Zuordnungsoperationen Durchlauf2 und Durchlauf3 für die src-Daten ausgeführt werden. In einer Ausführungsform werden Durchlauft, Durchlauf2 und Durchlauf3 für jedes Pixel, das gemischt wird, ausgeführt, wobei Zuordnungsoperationen entweder in Durchlauft oder jeweils im Durchlauf2 und Durchlauf3 auftreten. Nachdem der Durchlauf3 abgeschlossen ist, enthält die variable T einen endgültigen Mischwert für ein entsprechendes Pixel. Dieser endgültige Mischwert kann in ein Blockpufferbild geschrieben werden.
  • Wie zuvor gezeigt ist, kann ein temporärer Wert, der mit einem gegebenen Mischdurchlauf verknüpft ist, in der temporären Variablen „T” während eines Durchlaufs gespeichert werden und kann für Mischberechnungen in einem nachfolgenden Mischdurchlauf verfügbar sein. Ein Array aus einer oder mehreren temporären Variablen wird hierin als T[k] bezeichnet, wobei „k” einen Array-Index zur Auswahl der einen oder der mehreren temporären Variablen T[k] repräsentiert. In einer Ausführungsform wird jedes T[k] anfänglich auf null gesetzt, bevor eine Mischoperation an einem neuen Pixel beginnt. Eine Interpretation des Verhaltens der temporären Variablen ist die, dass jeder Mischdurchlauf ein implizites „else” enthält, das temporäre Variablen rezirkuliert, so dass diese in einem nachfolgenden Mischdurchlauf an dem gleichen Pixel verfügbar sind.
  • Es werden mehrere Abtastungen, die ein Pixel bilden, jeweils entsprechend einer ausgewählten komplexen Mischoperation verarbeitet. Jede Abtastung kann unterschiedliche Farbabtastwerte enthalten, die Ursprungsdaten für eine komplexe Mischoperation umfassen. Beispielsweise kann ein Pixel eine Gruppe aus vier Farbabtastwerten enthalten, die im Weiteren als eine Vierergruppe bezeichnet wird. Eine komplexe Mischoperation an einer Vierergruppe umfasst die Ausführung der komplexen Mischoperation an jedem Farbabtastwert, der zu der Vierergruppe gehört, um vier gemischte Farbabtastwerte zu erzeugen.
  • Jeder Abtastwert kann einen Alpha-(Undurchsichtigkeits-)Wert enthalten. In einem Betriebsmodus wird eine Alpha-Mischung für jeden Abtastwert ausgeführt, wobei resultierende Alpha-Werte gespeichert werden, bis Durchläufe an zugehörigen Farb-(Rot, Grün und Blau)Daten abgeschlossen sind. Die resultierenden Alpha-Werte werden dann mit ihren zugehörigen Farbdaten paarweise in Beziehung gesetzt und zusammen als Pixelabtastwerte, beispielsweise in einem Bildpuffer, gespeichert. In einem iterierten Alpha-Betriebsmodus werden Alpha-Werte, die zu jedem Abtastwert gehören, in gleicher Weise als entsprechende Farbdaten verarbeitet.
  • Generell kann jeder komplexe Mischmodus in eine Sequenz aus Iterationen zerlegt werden, die eine normale Mischgleichung enthalten, die als eine Summe zweier Produkte (A·B + C·D) definiert ist. Die unterschiedlichen temporären Werte T[k] können erzeugt und als Eingabe für die Mischgleichung in einer gegebenen Iteration verwendet werden, wobei „k” ein Index der Bezeichnung eines temporären Werts ist. Ein grundlegendes Programmiermodell für ein Mischprogramm, das einen komplexen Mischmodus realisiert, ist nachfolgend in Tabelle 3 gezeigt. In jedem Durchlauf (p) können Daten aus diversen Quellen für jede Variable A, B, C, D und k ausgewählt werden.
  • Es muss eine Bedingung (cond) für eine Zuweisung erfüllt werden, so dass diese in einem Durchlauf ausgeführt wird. Jede Bedingung bewertet einen Bool'schen Wert von WAHR oder FALSCH. In einer Ausführungsform werden acht Bedingungsfunktionen realisiert, wozu gehören: größer als, größer oder gleich, gleich, ungleich, kleiner oder gleich, kleiner als, nie (falsch) und immer (wahr). Die Bedingungen werden für jede Komponente (beispielsweise Rot, Grün, Blau) bewertet und jede Bewertung einer Bedingung wird pro Komponente ausgeführt.
  • Jeder unterschiedliche komplexe Mischmodus definiert eine Gesamtzahl an Durchläufen (N_PASSES) zusammen mit einer Variablenauswahlinformation für die Variablen A, B, C, D und k für jeden Durchlauf. Tabelle 3
    for (p = 0, p < N_PASSES, p++)
    if (cond) T[k] = (A·B) + (C·D)
  • In einer Ausführungsform werden die temporären Werte zu Beginn jeder komplexen Mischoperation auf null initialisiert. Jede endgültige Ausgabe einer integrierten Mischoperation ist entweder das Ergebnis einer Zuweisung in dem letzten Durchlauf des Mischprogramms oder T[0], wenn eine Bedingung für den letzten Durchlauf ein FALSCH ergibt. Die Ausgabedaten sind in T[0] in einem vorhergehenden Durchlauf gespeichert worden, wenn die Bedingung in dem letzten Mischdurchlauf als FALSCH bewertet worden ist. Der Fachmann erkennt, dass andere Regeln für die Zuweisung von Ausgangsdaten realisiert werden können, ohne von dem Schutzbereich und dem Grundgedanken der Ausführungsformen der vorliegenden Erfindung abzuweichen. In einer Ausführungsform wird eine maximale Anzahl an Durchläufen auf 128 für einen beliebigen komplexen Mischmodus festgelegt. Alternativ können mehr oder weniger Durchläufe pro komplexen Mischmodus ausgeführt werden.
  • In gewissen Ausführungsformen wird ein vorhergehendes Zwischenergebnis (PBR) bei jedem Durchlauf gespeichert und als Eingabe für den nachfolgenden Durchlauf verfügbar gemacht. Die Verwendung eines PBR als Eingang kann in gewissen Szenarien Leistung einsparen, da das PBR aus einem lokalen Register anstatt aus einer Instanz eines Speichers mit wahlfreiem Zugriff (RAM) verfügbar ist, der für das Lesen und Schreiben mehr Leistung erfordern kann.
  • In gewissen Ausführungsformen realisiert die Mischschaltung die Summe aus zwei Produkt-Mischfunktionen. Es wird ein Rezirkulationspfad von dem Ausgang der Mischschaltung zu dem Eingang der Mischschaltung hinzugefügt. Der Rezirkulationspfad kann einen Speicher für bis zu der maximalen Anzahl an Vierergruppen, die verarbeitet werden, enthalten, so dass jede Vierergruppe die Mischschaltung mehrere Male als Iteration durchlaufen kann. Die maximale Anzahl an Viererreihen kann entsprechend einer Anzahl an Verarbeitungsstufen ausgewählt werden, die erforderlich ist, um einen Durchlauf auszuführen. In einer Ausführungsform können bis zu sieben Viererreihen innerhalb eines Rezirkulationspfads, der sieben Verarbeitungsstufen enthält, gerade verarbeitet werden.
  • Um gewisse komplexe Mischoperationen zu ermöglichen, wird eine Gruppe an Funktionen realisiert, um auf Eingangsdaten einzuwirken, die mit einem gegebenen Durchlauf verknüpft sind, oder um auf Ausgangsdaten einzuwirken, die zu dem Durchlauf gehören. Jeder Eingangswert für die Mischschaltung wird aus einer Gruppe von Eingangsoperatoren ausgewählt, wozu gehören, ohne Einschränkung, eine Konstante Null, eine Konstante Eins, eine Konstante Farbe, eine Ursprungsfarbe, ein Ursprungs-Alpha, eine Zielfarbe, ein Ziel-Alpha, eins minus Ursprungs-Alpha oder Ziel-Alpha, ein temporärer Wert T[k], eine minimale Operation, eine maximale Operation, eine Absolutwert-Operation, eine Nicht-Operation, ein PBR, eine Kehrwert-Operation, eine Quadratwurzeloperation und ein Kehrwert einer Quadratwurzel. Operatoren für die Ausgangsdaten eines Mischdurchlaufs können umfassen, ohne Einschränkung: Daten-Vertauschungsoperatoren und Schreibmaskenoperatoren. Jeder Farbkanal (Rot, Grün, Blau, Alpha) jedes Abtastwerts wird unabhängig unter Anwendung einer Gruppe aus Eingangswerten und Ausgangsoperatoren berechnet, die für einen speziellen Durchlauf definiert sind. Weitere Funktionen können auch einen Skalarprodukt-Operator, einen Vektornormierungsoperator und dergleichen realisieren. Gewisse Funktionen, etwa der Kehrwert, die Quadratwurzel und andere beliebig definierte Funktionen können über eine stückweise lineare Approximation der Funktion realisiert werden. Es kann eine beliebige technisch machbare Technik eingesetzt werden, um die stückweise lineare Approximation zu realisieren, und es können Glättungs- und Interpoliertechniken angewendet werden, ohne von dem Schutzbereich und dem Grundgedanken der vorliegenden Erfindung abzuweichen.
  • Für Mischoperationen mit komprimierten Ursprungs- und Ziel-Farbkomponenten muss nur eine Mischoperation an der repräsentativen Farbe anstatt an jedem unabhängigen Abtastwert ausgeführt werden. Für Konfigurationen mit vier Abtastwerten pro Pixel repräsentiert dies ungefähr ein Viertel des Verarbeitungsaufwands für das Mischen jeder Komponente. Dieser Effizienzvorteil skaliert mit der Anzahl an Abtastwerten pro Pixel.
  • 5 zeigt eine Mischschaltung 500, die ausgebildet ist, einen Durchlauf einer integrierten Mischoperation gemäß einer Ausführungsform der vorliegenden Erfindung zu realisieren. Eine Operations-(op-)Einheit 534 und Multiplizierer 530, 532 sind ausgebildet, mindestens eine Summe von Produktoperationen der Form A·B + C·D auszuführen, um die Ausgabe 558 zu erzeugen. Die Operationseinheit 534 ist ausgebildet, zumindest Additions- und Subtraktionsoperationen auszuführen. Ein Auswahlsignal 514 veranlasst Multiplexer 510, einen der Eingänge A 550 auszuwählen, um als die A-Variable in der Operationssumme aus Produkten zu dienen. Ein Auswahlsignal 516 veranlasst den Multiplexer 512, einen der Eingänge B 552 auszuwählen, um als die B-Variable zu dienen. Ein Auswahlsignal 524 veranlasst den Multiplexer 520, einen der Eingänge C 554 auszuwählen, um als die C-Variable zu dienen. Ein Auswahlsignal 526 veranlasst den Multiplexer 523, einen der Eingänge D 556 auszuwählen, um als die D-Variable zu dienen. Die Auswahlsignale 514, 516, 524 und 526 werden auf der Grundlage eines Befehls konfiguriert, der für einen speziellen Durchlauf ausgewählt ist, sowie auf der Grundlage von Ergebnissen einer vorhergehenden Bewertung von Bedingungen. In einer Ausführungsform arbeiten vier Instanzen der Mischschaltung 500 parallel, um Werte für Rot, Grün, Blau und Alpha für einen Abtastwert zu berechnen. Es kann eine beliebige Anzahl an Instanzen eingerichtet werden, um einen gewissen Grad an Gesamtparallelität zu erreichen. Jeder Eingangswert 550, 552, 554, 556 kann einen Gleitkommawert, etwa einen Gleitkommawert mit 16 Bit umfassen.
  • Die Eingänge 550(0) bis 550(N) entsprechen verfügbaren Eingängen, die die Gruppe aus Eingangsoperatoren für die A-Variable umfassen. In ähnlicher Weise entsprechen die Eingänge 552, 554 und 556 verfügbaren Eingängen, die Gruppen an Eingangsoperatoren für die jeweiligen B-, C- und D-Variable umfassen.
  • 6 zeigt eine CROP-Mischeinheit 600, die ausgebildet ist, iterierte Mischoperationen gemäß einer Ausführungsform der vorliegenden Erfindung zu realisieren. In einer Ausführungsform liegt die CROP-Mischeinheit 600 in der CROP-Einheit 465 aus 4, und die Grafikverarbeitungs-Pipeline 400 ist in einer GPU eingerichtet, etwa in dem Parallelverarbeitungssubsystem 112.
  • Die CROP-Mischeinheit 600 umfasst einen Einzeldurchlaufmischpfad 610 und einen Mehrfach-Durchlauf-Mischpfad 650, der ausgebildet ist, Datenergebnisse für aufeinanderfolgende Iterationen über den Rezirkulationspfad 662 zurückzuführen. Wenn ein Einzeldurchlauf-Mischmodus aktiv ist, berechnet der Einzeldurchlaufmischpfad 610 Mischoperationen für eintreffende Pixel und der Mehrfach-Durchlauf-Mischpfad 650 wird in einen Zustand niedriger Leistung versetzt. Wenn ein Mehrfach-Durchlauf-Mischmodus aktiv ist, berechnet der Mehrfach-Durchlauf-Mischpfad 650 Mischoperationen für eintreffende Pixel über zwei oder mehr Durchläufe (Iterationen), die Mischoperationen an den eintreffenden Pixel beinhalten. In alternativen Ausführungsformen ist nur der Mehrfach-Durchlauf-Mischpfad 650 realisiert und ausgebildet, auch Einzeldurchlauf-Mischoperationen auszuführen. Derartige alternative Ausführungsformen können gegebenenfalls im Mittel mehr Leistung verbrauchen, da eine größere Schaltung in Einzeldurchlauf-Mischoperationen beteiligt ist, die tendenziell eine gegebene Szene dominieren können.
  • In einer Ausführungsform ist der Rezirkulationspfad 662 ausgebildet, bis zu sieben Vierergruppen parallel (als Pipeline) zu senden und ermöglicht damit, dass vier Vierergruppen den Mehrfach-Durchlauf-Mischpfad 650 mehrere Male durchlaufen, wodurch Sequenzen an grundlegenden Mischoperationen ausgeführt werden, die zusammen komplexe Mischmodi ermöglichen. In dem zuvor genannten Beispiel der Mischung eines weichen Lichts der Tabelle 2 erfordert jede Mischung des weichen Lichts 3 Iterationen d. h. eine für jeden ausgeführten Durchlauf. In diesem Beispiel beträgt der Durchsatz für diejenigen Pixel, die eine Mischung an weichem Licht benötigen, ein Drittel des Durchsatzes einer Einzeldurchlaufmischung. Da src-Daten und dst-Daten in mehr als einem Durchlauf benötigt werden, werden diese Daten zurückgespeist und in einen fifo geschoben, der auf die Verarbeitungszeit der Mischeinheit abgestimmt ist. Temporäre Daten, wozu zumindest T[0] ... T[2] gehören, können ebenfalls zur Verwendung in mehreren Iterationen zurückgespeist werden.
  • Ausführungsformen mit sowohl dem Mehrfach-Durchlauf-Mischpfad 650 als auch dem Einzeldurchlaufmischpfad 610 zeigen Verarbeitungseigenschaften von Mischmodi mit einzelnem Durchlauf, wobei die dynamische Leistung zur Unterstützung der Mischmodi mit mehreren Durchläufen nur ansteigt, wenn eine Mischung mit mehreren Durchläufen erforderlich ist. Da der Mehrfach-Durchlauf-Mischpfad 650 keinen dauerhaften Zustand benötigt, sobald die Verarbeitung abgeschlossen ist, sind mehrere architektonische Strategien für die Leistungseinsparung verfügbar, wozu die Abschaltung der Schaltung gehört, die den Mehrfach-Durchlauf-Mischpfad 650 enthält.
  • In einer Ausführungsform verarbeitet die CROP-Mischeinheit 600 die Ursprungs- und Zieldaten in einer Reihe von Pipeline-Stufen. Die Ursprungs- und Zieldaten können jeweils unterschiedliche Datenformate umfassen, die unterschiedliche Datenraten pro Pixel enthalten, und können unterschiedliche Farbdarstellungsformate umfassen. Die Ursprungs- und Zieldaten werden für die Mischung durch die Stufen S0–S5 615 vorbereitet, die die Ursprungs- und Zieldaten auf das gleiche Format abbilden. Die Schaltung, die mit den Mischoperationen verknüpft ist, wird vereinfacht, indem nur ein einzelnes Format unterstützt werden muss. In einer Ausführungsform werden die Ursprungs- und Zieldaten auf eine Gleitkommadarstellung für die Mischung abgebildet, etwa auf eine Gleitkommadarstellung mit 16 Bits. Resultierende Daten aus den Mischoperationen müssen gegebenenfalls in einem von diversen verfügbaren Formaten dargestellt und gespeichert werden. Die Stufe S11 621 ist ausgebildet, die resultierenden Daten in ein Zielformat zur Speicherung umzuwandeln. In einer Ausführungsform umfasst die Umwandlung der resultierenden Daten in ein neues Format, die Abbildung auf einen spezifizierten Bereich, etwa einen Bereich von 0,0 bis 1,0 oder –1,0 bis 1,0.
  • Die Stufen SP S6 616 bis SP S10 620 bilden den Einzeldurchlaufmischpfad 610. Grundlegende Mischoperationen, die durch eine Summe aus zwei Produkten definiert sind, können von den Stufen SP S6 616 bis SP S10 620 verarbeitet werden. Die Stufen MP S6 656 bis MP S10 660 bilden den Mehrfach-Durchlauf-Mischpfad 650. Komplexe Mischoperationen, die zwei oder mehr Durchläufe erfordern, können von den Stufen MP S6 656 bis MP S10 660 verarbeitet werden. Eine Pförtner-Einheit 655 ist ausgebildet, den Zugang von Mehrfach-Durchlauf-Ursprungs- und Zieldaten hinein in den Mehrfach-Durchlauf-Mischpfad 650 für die Verarbeitung zu ermöglichen. Eine Flussanweisungseinheit 661 ist ausgebildet, die resultierenden Daten zurück zu der Pförtner-Einheit 655 für eine erneute Zulassung zurückzuführen, wenn ein weiterer Verarbeitungsdurchlauf benötigt wird, oder die resultierenden Daten an die SP S10 620 zu senden, die die resultierenden Daten an S11 621 für eine Umformatierung in ein Zielformat leitet.
  • In einer Ausführungsform gestattet die Pförtner-Einheit 655 Zufluss von Arbeit zu dem Mehrfach-Durchlauf-Mischpfad 650 zur Verarbeitung in Einheiten von Vierergruppen. Die Pförtner-Einheit 655 ist ausgebildet, um zu versuchen, die Anzahl an Vierergruppen, die in dem MP-Mischpfad 650 verarbeitet werden, zu maximieren, ohne dass eine maximale Anzahl an Vierergruppen überschritten wird, die zu jeder Zeit parallel verarbeitet werden kann. In einer Realisierung gestattet die Pförtner-Einheit 655, dass Vierergruppen in den MP-Mischpfad 650 eintreten, bis eine erste Vierergruppe über den Rezirkulationspfad 662 zurückgespeist wird, wobei an diesem Punkt die Pförtner-Einheit 655 aufhört, neue Vierergruppen zur Verarbeitung in die Gruppe aus Vierergruppen mit Zugangsberechtigung eintreten zu lassen. Wenn die letzte Vierergruppe in der Gruppe mit Zugangsberechtigung in den MP-Mischpfad 650 geschoben wird, nach einer Zurückspeisung über den Rezirkulationspfad 662, dann kann die Pförtner-Einheit 655 damit beginnen, neue Vierergruppen für die Verarbeitung zuzulassen. Das Ziel ist dabei für die Pförtner-Einheit 655, in effizienter Weise Arbeit für den MP-Mischpfad 650 zuzulassen, wobei Anhäufungen und Überlauf vermieden werden.
  • Die Pförtner-Einheit 655 leert den MP-Mischpfad 650, wenn Vierergruppen, die einen anderen komplexen Mischmodus erfordern, für die Verarbeitung vorliegen. Die Pförtner-Einheit 655 leert ebenfalls den MP-Mischpfad 650 vor einem Ereignis zur Kontextumschaltung.
  • In einer Ausführungsform kann die Zustandsverwaltung für den Mehrfach-Durchlauf-Mischpfad 650 realisiert werden, um Konfigurationsänderungen in der Pipeline zu verhindern, während aktuelle Transaktionen gerade ausgeführt werden. Dies vereinfacht die gesamte Zustandsverwaltung. Jeder Durchlauf kann ein Befehlsbündel enthalten, das vorgeordnet dekodiert werden kann und als ein dekodiertes Befehlsbündel weitergeleitet werden kann, das einen iterierten Mischzustand für jeden Mischdurchlauf enthält.
  • 7 ist ein Flussdiagramm von Verfahrensschritten zur Konfigurierung der Farbrasteroperationen-Mischeinheit, so dass diese iterierte Mischoperationen gemäß einer Ausführungsform der vorliegenden Erfindung ausführt. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 16 beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge ausgebildet ist, innerhalb des Schutzbereichs der Erfindung liegt. In einer Ausführungsform werden die Verfahrensschritte von einem GPU-Gerätetreiber, etwa dem Gerätetreiber 103 aus 1 ausgeführt.
  • Wie gezeigt, beginnt ein Verfahren 700 im Schritt 710, in welchem der GPU-Treiber einen Aufruf für eine Anwendungsprogrammierschnittstelle (API) empfängt, der einen speziellen Mischmodus anfordert. Dieser Mischmodus kann durch ein Anwendungsprogramm bestimmt sein, das darauf vorbereitet, Inhalt, der den Mischmodus erfordert, zu verarbeiten. Wenn im Schritt 720 eine iterierte Mischbefehlssequenz, die dem angeforderten Mischmodus entspricht, nicht erzeugt worden ist, dann geht das Verfahren weiter zum Schritt 722, in welchem der Treiber eine iterierte Mischbefehlssequenz für den angeforderten Mischmodus erzeugt. Wenn im Schritt 730 die iterierte Mischbefehlssequenz noch nicht in einer zugehörigen GPU vorhanden ist, dann geht das Verfahren weiter zum Schritt 732, in welchem der Treiber die iterierte Mischbefehlssequenz in die GPU lädt. Das Verfahren endet im Schritt 790, in welchem der Treiber die GPU konfiguriert, um den angeforderten Mischmodus als eine von der CROP-Einheit 465 auszuführende Mischoperation auszuführen.
  • Es sei wieder auf den Schritt 720 verwiesen; wenn die iterierte Mischbefehlssequenz, die dem angeforderten Mischmodus entspricht, erzeugt worden ist, geht das Verfahren weiter zum Schritt 730, der zuvor beschrieben ist.
  • Es sei wieder auf Schritt 730 von oben verwiesen; wenn die iterierte Mischbefehlssequenz bereits in der GPU vorhanden ist, dann geht das Verfahren weiter zum Schritt 790.
  • 8 ist ein Flussdiagramm von Verfahrensschritten zur Ausführung einer Mischoperation gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl die Verfahrensschritte in Verbindung mit den Systemen der 16 beschrieben sind, erkennt der Fachmann, dass ein beliebiges System, das zur Ausführung der Verfahrensschritte in beliebiger Reihenfolge ausgebildet ist, innerhalb des Schutzbereichs der Erfindung liegt. In einer Ausführungsform wird das Verfahren 800 von einer CROP-Einheit, etwa der CROP-Einheit 465 aus 4, ausgeführt.
  • Wie gezeigt, beginnt ein Verfahren 800 im Schritt 810, in welchem die CROP-Einheit Ursprungsdaten und Zieldaten, die gemäß der Mischoperation zu mischen sind, empfängt. Wenn im Schritt 820 die Ursprungsdaten und die Zieldaten keine frühe Aus-Bedingung angeben, dann geht das Verfahren weiter zum Schritt 822. Eine frühe Aus-Bedingung ist hierin als eine Bedingungen definiert, in der entweder die Ursprungsdaten alleine oder die Zieldaten alleine ein gemischtes Ergebnis definieren, bei welchem eine Mischung der Ursprungsdaten und der Zieldaten überflüssig wird. Ein Beispiel einer frühen Aus-Bedingung ist, wenn Ursprungsdaten vollständig undurchsichtig sind, wodurch jeglicher Beitrag der Zieldaten während einer Mischung zu null gemacht wird. Ein weiteres Beispiel einer frühen Aus-Bedingung ist, wenn Ursprungsdaten vollständig transparent sind, so dass ein jeglicher Beitrag der Ursprungsdaten während eine Mischung zu null gemacht wird. Im Schritt 822 werden die Ursprungs- und Zieldaten auf ein gemeinsames Format abgebildet, etwa ein Gleitkommaformat mit 16 Bits. Es kann auch jedes andere technisch machbare Format als ein gemeinsames Format für Mischoperationen realisiert werden.
  • Wenn im Schritt 830 die Mischoperation eine Mehrfach-Durchlauf-(iterierte)Mischoperation ist, dann geht das Verfahren weiter zum Schritt 832, in welchem eine Pförtner-Funktion einen Mehrfach-Durchlauf (MP) für die Ursprungsdaten und die Zieldaten zulässt. In einer Ausführungsform wird die Pförtner-Funktion durch die Pförtner-Einheit 655 aus 6 realisiert. Die Pförtner-Funktion erlaubt, dass ausreichend Arbeit in einen MP-Mischpfad, etwa den MP-Mischpfad 650, zufließt, um effizient und korrekt die Rechenressourcen des MP-Mischpfads zu nutzen, während Leerläufe vermieden werden. In einer Ausführungsform wird der Rechenstatus, der zu dem MP-Mischpfad 650 gehört, während des Zuflusses neuer Daten initialisiert. Ein Rechenstatus kann beinhalten, ohne Einschränkung, eine Durchlaufanzahl, Werte von T[k] usw. Die Durchlaufanzahl kann angeben, wie viele Durchläufe an einem speziellen Datensatz ausgeführt worden sind. Im Schritt 834 wird eine ausgewählte Mischoperation an den ausgewählten Eingangsdaten ausgeführt. Beispielsweise wird eine Summe aus Produkten oder eine Differenz aus Produkten an vier ausgewählten Operatoren aus einer Gruppe von Eingangsoperatoren ausgeführt, wie zuvor beschrieben ist.
  • Wenn im Schritt 840 ein aktuell abgearbeiteter Mischdurchlauf der letzte Durchlauf ist, dann geht das Verfahren weiter zum Schritt 842, in welchem Ausgangsdaten auf ein Zielformat abgebildet werden. Ein Beispiel eines Zielformats ist ein 8-Bit-Ganzzahlformat für einen Bildschirm-Raum mit Rot, Grün, Blau (sRGB). Im Schritt 844 werden die Ausgangsdaten an einer Zielstelle im Speicher gespeichert, etwa in einem Bildpuffer innerhalb des PP-Speichers 204 aus 2. Das Verfahren endet im Schritt 890. Wenn jedoch im Schritt 840 der aktuell abgearbeitete Mischdurchlauf nicht der letzte Mischdurchlauf ist, dann kehrt das Verfahren zurück zum Schritt 834, der zuvor beschrieben ist.
  • Es sei wieder auf den Schritt 830 verwiesen; wenn die Mischoperation keine Mehrfach-Durchlauf-(iterierte)Mischoperation ist, dann geht das Verfahren weiter zum Schritt 842, der zuvor beschrieben ist.
  • Es sei wieder auf den Schritt 820 verwiesen; wenn die Ursprungsdaten und die Zieldaten tatsächlich eine frühe Aus-Bedingung anzeigen, dann geht das Verfahren weiter zum Schritt 842, der zuvor beschrieben ist. Wenn gemäß einer Ausführungsform die Ursprungsdaten und die Zieldaten eine frühe Aus-Bedingung angeben, die einen Einfluss der Ursprungsdaten zu null macht, dann werden im Schritt 844 die Ausgangsdaten an einer Zielstelle im Speicher gespeichert. Das Verfahren endet im Schritt 890.
  • In einer Ausführungsform kann eine frühe Aus-Bedingung auf der Grundlage von Ursprungsdaten ermittelt werden, die vollständig transparent sind, wobei jegliche Operation zum Schreiben oder Mischen von bzw. mit Zieldaten unnötig ist. In gewissen Ausführungsformen kann eine frühe Aus-Bedingung auf der Grundlage darauf ermittelt werden, dass Zieldaten vollständig undurchlässig sind, wodurch eine Schreiboperation oder Mischoperation zwischen Ursprungsdaten und Zieldaten unnötig ist. Wenn eine frühe Aus-Bedingung erfasst wird, kann das Verfahren die Schritte 842844 umgehen und im Schritt 890 enden.
  • Zusammengefasst gilt: es wird eine Technik zur effizienteren Ausführung einer komplexen Mischoperation in einer Rasteroperationseinheit einer grafischen Verarbeitungseinheit offenbart. Die Technik zerlegt die komplexe Mischoperation in eine Reihe aus zwei oder mehr Iterationen, wovon jede eine Operation an zwei Produkten umfasst. Die Operation kann umfassen, ohne Einschränkung, eine Summe oder eine Differenz. Mindestens zwei Eingangswerte für jedes Produkt werden aus einer Gruppe von Eingangsoperatoren ausgewählt. In einer Ausführungsform werden die beiden Produkte, die Operation und die Eingangsoperatoren in einer gemeinsamen mathematischen Darstellung ausgeführt, etwa in einer Gleitkommadarstellung mit 16 Bits. Pixel, die lediglich eine einzelne Mischoperation benötigen, werden gemäß einer konventionellen Misch-Pipeline verarbeitet, um Leistung einzusparen.
  • Ein Vorteil der offenbarten Technik besteht darin, dass sie es möglich macht, grafischen Inhalt, der komplexe Mischmodi erfordert, effizient in einer grafischen Verarbeitungseinheit zu verarbeiten.
  • Obwohl sich das Vorhergehende an Ausführungsformen der vorliegenden Erfindung richtet, können andere und weitere Ausführungsformen der Erfindung erdacht werden, ohne von deren grundlegenden Schutzbereich abzuweichen. Beispielsweise können Aspekte der vorliegenden Erfindung in Hardware oder Software oder in einer Kombination aus Hardware und Software realisiert werden. Eine Ausführungsform der Erfindung kann als ein Programmprodukt zur Verwendung in einem Computersystem realisiert werden. Das bzw. die Programme des Programmprodukts definieren Funktionen der Ausführungsformen (einschließlich der hierin beschriebenen Verfahren) und können in einer Vielzahl von computerlesbaren Speichermedien enthalten sein. Zu anschaulichen computerlesbaren Speichermedien gehören, ohne Einschränkung: (i) nicht-beschreibbare Speichermedien (beispielsweise Nur-Lese-Speichereinrichtungen in einem Computer, etwa CD-ROM-Disketten, die von einem CD-ROM-Laufwerk lesbar sind, Flash-Speicher, ROM-Chips oder eine andere Art eines nicht flüchtigen Halbleiterspeichers), auf welchen Information permanent gespeichert ist; und (ii) beschreibbare Speichermedien (beispielsweise Disketten in einem Diskettenlaufwerk oder ein Festplattenlaufwerk oder eine andere Art eines Halbleiterspeichers mit wahlfreiem Zugriff), auf welchen änderbare Information gespeichert ist.
  • Die Erfindung ist mit Bezug zu speziellen Ausführungsformen beschrieben worden. Der Fachmann erkennt jedoch, dass diverse Modifizierungen und Änderungen daran vorgenommen werden können, ohne von dem breiteren Grundgedanken und dem Schutzbereich der Erfindung abzuweichen, wie sie in den angefügten Patentansprüchen angegeben ist. Die vorhergehende Beschreibung und die Zeichnungen sind daher als anschaulich und nicht als beschränkend zu betrachten.
  • Daher ist der Schutzbereich der vorliegenden Erfindung durch die folgenden Patentansprüche festgelegt.

Claims (10)

  1. Eine grafische Verarbeitungseinheit mit: einer Mischeinheit, die ausgebildet ist, eine programmierbare Mischoperation auszuführen durch: Empfangen von Ursprungspixeldaten und Zielpixeldaten zur Verarbeitung; Ermitteln, ob eine erste Mischoperation erforderlich ist beruhend darauf, ob eine Frühe-Aus-Bedingung besteht; und wenn die Frühe-Aus-Bedingung nicht besteht, und eine erste Mischoperation erforderlich ist, dann Ausführen der ersten Mischoperation auf der Grundlage der Ursprungspixeldaten und der Zielpixeldaten zur Erzeugung eines ersten Mischergebnisses, oder wenn die Frühe-Aus-Bedingung besteht, und eine erste Mischoperation nicht erforderlich ist, dann Ausführen einer Umgehungsoperation und Speichern der Ursprungspixeldaten oder Zielpixeldaten in einem Bilderzeugungsziel.
  2. Die graphische Verarbeitungseinheit nach Anspruch 1, wobei die Mischeinheit ferner ausgebildet ist, die Ursprungspixeldaten und die Zielpixeldaten auf ein einheitliches arithmetisches Format abzubilden.
  3. Die graphische Verarbeitungseinheit nach Anspruch 1, wobei mindestens einen Befehl, der mit der programmierbaren Mischoperation verknüpft ist, eine Kehrwert-Operation, eine Quadratwurzel-Operation oder eine stückweise lineare Operation angibt.
  4. Die graphische Verarbeitungseinheit nach Anspruch 1, wobei mindestens einen Befehl, der mit der programmierbaren Mischoperation verknüpft ist, einen Eingangsoperanden enthält, der durch eine Konstante gegeben ist.
  5. Die graphische Verarbeitungseinheit nach Anspruch 1, wobei die Ursprungspixeldaten zwei oder mehr Abtastwerte umfassen, die durch eine einzelne Farbe und eine Marke repräsentiert sind, die angibt, dass die Ursprungspixeldaten komprimiert sind.
  6. Die graphische Verarbeitungseinheit nach Anspruch 1, wobei die Frühe-Aus-Bedingung nicht besteht, und wobei eine erste Mischoperation erforderlich ist, und die Mischeinheit ferner ausgebildet ist zu ermitteln, ob eine Reihe von Mischoperationen mit mehrfachem Durchlauf oder eine Einzeldurchlauf-Mischoperation auszuführen ist.
  7. Die graphische Verarbeitungseinheit nach Anspruch 6, wobei eine Reihe aus Mischoperationen mit mehrfachem Durchlauf auszuführen ist, und wobei die Mischeinheit ferner ausgebildet ist, eine zweite Mischoperation nachfolgend zu der ersten Mischoperation auszuführen auf der Grundlage der Ursprungspixeldaten und der Zielpixeldaten, um ein zweites Mischergebnis zu erzeugen.
  8. Die graphische Verarbeitungseinheit nach Anspruch 7, wobei die zweite Mischoperation auch auf einem Wert aus einem Array temporärer Variablen oder einem vorhergehenden Mischergebnisregister beruht.
  9. Die graphische Verarbeitungseinheit nach Anspruch 1, wobei die Frühe-Aus-Bedingung besteht, wenn die Ursprungspixeldaten entweder vollständig undurchlässig oder vollständig durchlässig sind.
  10. Die graphische Verarbeitungseinheit nach Anspruch 1, wobei die Mischeinheit eine Rasteroperationseinheit umfasst.
DE102013022257.5A 2012-12-20 2013-12-09 Programmierbares Mischen in mehrsträngigen Verarbeitungseinheiten Pending DE102013022257A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/723,092 2012-12-20
US13/723,092 US9183609B2 (en) 2012-12-20 2012-12-20 Programmable blending in multi-threaded processing units

Publications (1)

Publication Number Publication Date
DE102013022257A1 true DE102013022257A1 (de) 2014-06-26

Family

ID=50878826

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102013022257.5A Pending DE102013022257A1 (de) 2012-12-20 2013-12-09 Programmierbares Mischen in mehrsträngigen Verarbeitungseinheiten

Country Status (4)

Country Link
US (1) US9183609B2 (de)
CN (1) CN103885752A (de)
DE (1) DE102013022257A1 (de)
TW (1) TWI525584B (de)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9965876B2 (en) * 2013-03-18 2018-05-08 Arm Limited Method and apparatus for graphics processing of a graphics fragment
US9978171B2 (en) 2014-07-29 2018-05-22 Nvidia Corporation Control of a sample mask from a fragment shader program
US9424686B2 (en) * 2014-08-08 2016-08-23 Mediatek Inc. Graphics processing circuit having second vertex shader configured to reuse output of first vertex shader and/or process repacked vertex thread group and related graphics processing method thereof
US9437172B2 (en) 2014-08-19 2016-09-06 Apple Inc. High-speed low-power access to register files
US10769746B2 (en) 2014-09-25 2020-09-08 Apple Inc. Data alignment and formatting for graphics processing unit
US10255547B2 (en) * 2014-12-04 2019-04-09 Nvidia Corporation Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system
GB2540970B (en) * 2015-07-31 2018-08-15 Advanced Risc Mach Ltd Executing Groups of Instructions Atomically
CN106326628B (zh) * 2015-12-03 2018-12-28 西安邮电大学 一种实现自然对数和自然指数函数的可重构阵列结构
US10643381B2 (en) * 2016-01-12 2020-05-05 Qualcomm Incorporated Systems and methods for rendering multiple levels of detail
JP2017176652A (ja) 2016-03-31 2017-10-05 花王株式会社 微細中空突起具
US10951874B2 (en) * 2016-09-02 2021-03-16 Mediatek Inc. Incremental quality delivery and compositing processing
US10223822B2 (en) 2016-12-22 2019-03-05 Apple Inc. Mid-render compute for graphics processing
US10504270B2 (en) 2016-12-22 2019-12-10 Apple Inc. Resource synchronization for graphics processing
US10445852B2 (en) 2016-12-22 2019-10-15 Apple Inc. Local image blocks for graphics processing
US10324844B2 (en) 2016-12-22 2019-06-18 Apple Inc. Memory consistency in graphics memory hierarchy with relaxed ordering
US10310861B2 (en) 2017-04-01 2019-06-04 Intel Corporation Mechanism for scheduling threads on a multiprocessor
US20200012531A1 (en) * 2017-04-01 2020-01-09 Intel Corporation Execution unit-shared hybrid technique for accelerated computing on graphics processors
US11379420B2 (en) * 2019-03-08 2022-07-05 Nvidia Corporation Decompression techniques for processing compressed data suitable for artificial neural networks
TWI714390B (zh) * 2019-12-13 2020-12-21 中華電信股份有限公司 作業流程調控方法
CN111275802B (zh) * 2020-01-19 2023-04-21 杭州群核信息技术有限公司 一种基于vray的pbr材质渲染方法和系统
CN116957908B (zh) * 2023-09-20 2023-12-15 上海登临科技有限公司 一种硬件处理架构、处理器以及电子设备
CN117710502A (zh) * 2023-12-12 2024-03-15 摩尔线程智能科技(北京)有限责任公司 渲染方法、装置及存储介质

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4823286A (en) * 1987-02-12 1989-04-18 International Business Machines Corporation Pixel data path for high performance raster displays with all-point-addressable frame buffers
US5185856A (en) 1990-03-16 1993-02-09 Hewlett-Packard Company Arithmetic and logic processing unit for computer graphics system
JP3462566B2 (ja) * 1994-04-08 2003-11-05 株式会社ソニー・コンピュータエンタテインメント 画像生成装置
US5544306A (en) * 1994-05-03 1996-08-06 Sun Microsystems, Inc. Flexible dram access in a frame buffer memory and system
US6466210B1 (en) * 1997-12-22 2002-10-15 Adobe Systems Incorporated Blending image data using layers
US6259462B1 (en) * 1998-12-09 2001-07-10 Ati International Srl Method and apparatus for texture blending in a video graphics circuit
JP3258286B2 (ja) * 1998-12-15 2002-02-18 インターナショナル・ビジネス・マシーンズ・コーポレーション 半透明物体と不透明物体とが混在する複数の物体についての画像データをコンピュータ表示画面に表示する描画方法および描画装置
US6226017B1 (en) * 1999-07-30 2001-05-01 Microsoft Corporation Methods and apparatus for improving read/modify/write operations
US7414632B1 (en) * 2000-01-07 2008-08-19 Intel Corporation Multi-pass 4:2:0 subpicture blending
US6741259B2 (en) 2001-03-30 2004-05-25 Webtv Networks, Inc. Applying multiple texture maps to objects in three-dimensional imaging processes
US6697064B1 (en) * 2001-06-08 2004-02-24 Nvidia Corporation System, method and computer program product for matrix tracking during vertex processing in a graphics pipeline
US7307667B1 (en) 2003-06-27 2007-12-11 Zoran Corporation Method and apparatus for an integrated high definition television controller
KR100573876B1 (ko) * 2004-07-13 2006-04-25 한국과학기술원 태양 복사 압력을 이용하여 타원 궤도에 있는 위성 자세제어 방법
US7973797B2 (en) * 2006-10-19 2011-07-05 Qualcomm Incorporated Programmable blending in a graphics processing unit
US8638341B2 (en) * 2007-10-23 2014-01-28 Qualcomm Incorporated Antialiasing of two-dimensional vector images
US8681162B2 (en) 2010-10-15 2014-03-25 Via Technologies, Inc. Systems and methods for video processing

Also Published As

Publication number Publication date
US20140176568A1 (en) 2014-06-26
TW201428678A (zh) 2014-07-16
CN103885752A (zh) 2014-06-25
US9183609B2 (en) 2015-11-10
TWI525584B (zh) 2016-03-11

Similar Documents

Publication Publication Date Title
DE102013022257A1 (de) Programmierbares Mischen in mehrsträngigen Verarbeitungseinheiten
DE102013114279B4 (de) Oberflächenverarbeitung mit Mehrfachabtastung unter Verwendung einer einzelnen Abtastung
DE102018132468A1 (de) Multi-gpu-frame-rendern
DE102013020807A1 (de) Handhabung von nachgeordneten Z-Abdeckungsdaten in Rasteroperationen
DE102013017640B4 (de) Verteilte gekachelte Zwischenspeicherung
DE102013020810A1 (de) Effiziente Super-Abtastung mit Schattierungs-Strängen pro Pixel
DE102013017639B4 (de) Zwischenspeicherung von adaptiv dimensionierten Cache-Kacheln in einem vereinheitlichten L2-Cache-Speicher mit Oberflächenkomprimierung
DE102013020614A1 (de) Mit Mehrfachauflösung konsistente Rastereinteilung
DE102013020613A1 (de) Umgehung der Pixel-Schattierung für die grafische Bilderzeugung mit geringer Leistung
DE102018119225A1 (de) System und Verfahren für einen optimierten Winograd-Faltungsbeschleuniger
DE102018114286A1 (de) Durchführen einer Traversierungs-Stack-Komprimierung
DE102013018445A1 (de) Festlegung eines nachgeordneten Bilderzeugungszustands in einer vorgeordneten Schattierungseinheit
DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
DE102016122297A1 (de) Mehrfach-Durchlauf-Rendering in einer Bildschirm-Raum-Pipeline
DE102013018139A1 (de) Technik zur Speicherung gemeinsamer Vertices
DE112017001703T5 (de) Verfahren und Vorrichtung zum effizienteren Ray-Tracing von instanziierter Geometrie
DE102013020968A1 (de) Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher
DE102013020966B4 (de) Leistungseffiziente Attribut-Handhabung für Parkettierungs- und Geometrie-Schattierungseinheiten
DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
DE102013021046A1 (de) Erzeugung fehlerbefreiter Voxel-Daten
DE102013018136A1 (de) Technik zur Speicherung gemeinsamer Vertices
DE102013020485A1 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware
DE112014002477T5 (de) Vorrichtung und Verfahren für eine effiziente Grafikverarbeitung in einer virtuellen Ausführungsumgebung
DE102013017981A1 (de) Optimierung einer Dreieck-Topologie für Pfad-Bilderzeugung
DE102013020967B4 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware

Legal Events

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

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

R016 Response to examination communication