DE102020118078A1 - Gradientennäherungsfiltermechanismus - Google Patents

Gradientennäherungsfiltermechanismus Download PDF

Info

Publication number
DE102020118078A1
DE102020118078A1 DE102020118078.0A DE102020118078A DE102020118078A1 DE 102020118078 A1 DE102020118078 A1 DE 102020118078A1 DE 102020118078 A DE102020118078 A DE 102020118078A DE 102020118078 A1 DE102020118078 A1 DE 102020118078A1
Authority
DE
Germany
Prior art keywords
pixels
graphics
pixel
logic
gradient
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
DE102020118078.0A
Other languages
English (en)
Inventor
Filip Strugar
Trapper McFerron
Adam Lake
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.)
Intel Corp
Original Assignee
Intel 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
Priority claimed from US16/910,252 external-priority patent/US11120620B2/en
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE102020118078A1 publication Critical patent/DE102020118078A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • 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

Landscapes

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

Abstract

Es wird eine Vorrichtung offenbart, um eine Schattierung mit veränderbarer Rate zu ermöglichen. Die Vorrichtung umfasst einen oder mehrere Prozessoren, um einen Verlaufsausgangspixelwert für einen Pixelblock zu erzeugen, einen Gradientenwert, der einen Gradienten des Verlaufsausgangspixelwerts umfasst, unter Verwendung von Nachbarpixeldaten zu erzeugen und die Pixel im Pixelblock unter Verwendung des Gradientenwerts zu verarbeiten, um einen Feinpixelwert für ein oder mehrere Pixel zu erzeugen.

Description

  • QUERVERWEIS
  • Diese Patentanmeldung steht mit der vorläufigen US-Patentanmeldung mit der lfd. Nr. 62/872.357 mit dem Titel GRADIENTENNÄHERUNG ZUR SCHATTIERUNG MIT VERÄNDERBARER RATE UNTER VERWENDUNG VON PIXELSCHATTIERERBEFEHLE MIT PARTIELLER ABLEITUNG IN GRAPHIKRECHENUMGEBUNGEN von Filip Strugar u. a., eingereicht am 10. Juli 2019, Anwaltslaufzettel-Nr. AC2828-Z, deren Inhalte hier durch Bezugnahme aufgenommen sind, in Beziehung und beansprucht unter §35 USC, Abschnitt 119 deren Priorität.
  • HINTERGRUND
  • Schattierung mit veränderbarer Rate (VRS) oder Pixelgrobschattierung (CPS) bezieht sich auf eine Technik zum Ermöglichen einer Zuordnung der Rendering-Leistungsfähigkeit und/oder der Rendering-Leistung bei variierenden Raten über einem gerenderten Bild zum Optimieren einer Gesamtleistungsfähigkeit auf Kosten einer gewissen visuellen Qualität. Mit VRS kann eine Schattierung bei einer Frequenz, die gröber als ein Pixel ist, durchgeführt werden, wobei eine Gruppe von Pixeln als eine einzelne Einheit schattiert werden kann und das Ergebnis dann als ein einzelner konstanter Wert zu allen Abtastwerten in der Gruppe übertragen wird.
  • Um die Abtastrate von einer Schattiererausgabe mit geringer Auflösung zu einer Ausgabe mit vollständiger Auflösung zu erhöhen, verwendet VRS ein sogenanntes Punktfilter, wobei derselbe Pixelwert zu allen Abtastwerten in einer Gruppe übertragen wird. Außer dass sie ungenau sind, ist in derartigen herkömmlichen Techniken die Blockausrichtung im Bildschirmraum konstant und für alle Zeichenaufrufe gleich, derart, dass das Ergebnis unter einer Szenenobjektbewegung eine visuell irritierende Mosaikwirkung ist. In einigen herkömmlichen Techniken werden Nachverarbeitungsfilterlösungen auf VRS-Ausgaben angewendet, jedoch wird es in derartigen Fällen schwierig und aufwändig, ein Weichzeichnen über Geometriegrenzen zu vermeiden.
  • Figurenliste
  • Damit die Weise, auf die die oben vorgetragenen Merkmale der vorliegenden Ausführungsformen genau verstanden werden können, kann eine genauere Beschreibung der Ausführungsformen, die oben kurz zusammengefasst werden, unter Bezugnahme auf Ausführungsformen, von denen einige in den beigefügten Zeichnungen dargestellt sind, vorgenommen werden. Es ist allerdings festzuhalten, dass die beigefügten Zeichnungen lediglich typische Ausführungsformen darstellen und deshalb nicht als ihren Umfang einschränkend betrachtet werden sollen.
    • 1 ist ein Blockdiagramm eines Verarbeitungssystems gemäß einer Ausführungsform;
    • 2A-2D stellen Rechensysteme und Graphikprozessoren dar, die durch die hier beschriebenen Ausführungsformen geschaffen werden;
    • 3A-3C stellen Blockdiagramme zusätzlicher Graphikprozessor- und Rechenbeschleuniger-Architekturen dar, die durch Ausführungsformen geschaffen werden;
    • 4 ist ein Blockdiagramm einer Graphikverarbeitungsmaschine eines Graphikprozessors gemäß einigen Ausführungsformen;
    • 5A-5B stellen eine Thread-Ausführungslogik, die eine Anordnung von Verarbeitungselementen, die in einem Graphikprozessorkern eingesetzt werden, enthält, gemäß Ausführungsformen dar;
    • 6 stellt eine zusätzliche Ausführungseinheit gemäß einer Ausführungsform dar;
    • 7 ist ein Blockdiagramm, das ein Graphikprozessorbefehlsformat gemäß einigen Ausführungsformen darstellt;
    • 8 ist ein Blockdiagramm eines Graphikprozessors gemäß einer weiteren Ausführungsform;
    • 9A und 9B stellen ein Graphikprozessorbefehlsformat und eine Befehlsabfolge gemäß einigen Ausführungsformen dar;
    • 10 stellt eine beispielhafte Graphik-Software-Architektur für ein Datenverarbeitungssystem gemäß einigen Ausführungsformen dar;
    • 11A-11D stellen eine integrierte Schaltungsbaugruppenanordnung gemäß einer Ausführungsform dar;
    • 12 ist ein Blockdiagramm, das eine beispielhafte integrierte System-on-Chip-Schaltung gemäß einer Ausführungsform darstellt;
    • 13A & 13B ist ein Blockdiagramm, das einen zusätzlichen beispielhaften Graphikprozessor darstellt; und
    • 14 stellt eine Rechenvorrichtung dar, die einen Gradientennäherungsfiltermechanismus und eine oder mehrere Gradientenfilterkomponenten gemäß einer Ausführungsform hostet.
    • 15A-15C stellen Blockartefakte in herkömmlichen VRS-Implementierungen dar.
    • 16 ist ein Flussdiagramm, das eine Ausführungsform eines Gradientenfilterschattierprozesses darstellt.
    • 17 stellt eine Ausführungsform eines Gradientenfilterschattierpseudocodes dar.
    • 18 ist ein Flussdiagramm, das eine weitere Ausführungsform eines Gradientenfilterschattierprozesses darstellt.
    • 19 stellt eine weitere Ausführungsform eines Gradientenfilterschattierpseudocodes dar.
    • 20 stellt eine Ausführungsform von Pseudocode zum Farbklemmen dar.
    • 21-23 stellen Pseudocode für weitere Ausführungsformen eines Gradientenfilterschattierprozesses, der Farbklemmen enthält, dar.
  • GENAUE BESCHREIBUNG
  • In Ausführungsformen werden Gradientenannäherungsfilter implementiert, um Blockartefakte während einer VRS-Pixelschattierung unter Verwendung verfügbarer Nachbarpixeldaten, um einen Gradientenwert zu erzeugen, der auf einen Verlaufsausgangsfarbwert für einen Pixelblock angewendet wird, um Feinpixelausgangswerte für Pixel in einem Pixelblock zu erzeugen, zu verringern.
  • Systemübersicht
  • 1 ist ein Blockdiagramm eines Verarbeitungssystems 100 gemäß einer Ausführungsform. Das System 100 kann in einem Einzelprozessordesktopsystem, einem Mehrprozessor-Workstation-System oder einem Server-System, das eine große Anzahl Prozessoren 102 oder Prozessorkerne 107 besitzt, verwendet werden. In einer Ausführungsform ist das System 100 eine Verarbeitungsplattform, die in eine integrierte System-on-Chip-Schaltung (integrierte SoC-Schaltung) zur Verwendung in mobilen, handgeführten oder eingebetteten Vorrichtungen wie z. B. in Vorrichtungen des Internets der Dinge (IoT-Vorrichtungen) mit einer drahtgebundenen oder drahtlosen Konnektivität zu einem lokalen Netz oder einem Großraumnetz eingearbeitet ist.
  • In einer Ausführungsform kann das System 100 Folgendes enthalten, damit gekoppelt sein oder darin integriert sein: eine serverbasierte Spielplattform; eine Spielkonsole, die eine Spiel- und Medienkonsole enthält; eine mobile Spielkonsole, eine handgeführte Spielkonsole oder eine Online-Spielkonsole. In einigen Ausführungsformen ist das System 100 ein Teil eines Mobiltelefons, eines Smartphones, einer Tablet-Rechenvorrichtung oder einer mobilen mit dem Internet verbundenen Vorrichtung wie z. B. ein Laptop mit einer geringen internen Speicherkapazität. Das Verarbeitungssystem 100 kann außerdem Folgendes enthalten, damit gekoppelt sein oder darin integriert sein: eine tragbare Vorrichtung wie z. B. eine tragbare Smartwatch-Vorrichtung; eine Datenbrille oder Kleidung, die mit Merkmalen erweiterter Realität (AR) oder virtueller Realität (VR) erweitert ist, um optische, akustische oder haptische Ausgaben bereitzustellen, um reale optische, akustische oder haptische Erfahrungen zu ergänzen oder auf andere Weise Text, Audio, Graphik, Video, holographische Bilder oder holographisches Video oder haptische Rückmeldungen bereitzustellen; eine weitere Vorrichtung für erweiterte Realität (AR-Vorrichtung) oder eine weitere Vorrichtung für virtuelle Realität (VR-Vorrichtung). In einigen Ausführungsformen enthält das Verarbeitungssystem 100 eine Fernseh- oder Set-Top-Box-Vorrichtung oder ist Teil davon. In einer Ausführungsform kann das System 100 Folgendes enthalten, damit gekoppelt sein oder darin integriert sein: ein selbstfahrendes Fahrzeug wie z. B. ein Bus, ein Zugmaschinenanhänger, ein Personenkraftwagen, ein Motor- oder Elektrofahrrad, ein Flugzeug oder ein Segelflugzeug (oder eine beliebige Kombination davon). Das selbstfahrende Fahrzeug kann das System 100 verwenden, um die Umgebung, die um das Fahrzeug erfasst wurde, zu verarbeiten.
  • In einigen Ausführungsformen enthalten der eine oder die mehreren Prozessoren 102 jeweils einen oder mehrere Prozessorkerne 107, um Befehle zu verarbeiten, die, wenn sie ausgeführt werden, Operationen für System- oder Anwender-Software durchführen. In einigen Ausführungsformen ist mindestens einer des einen oder der mehreren Prozessorkerne 107 konfiguriert, einen bestimmten Befehlssatz 109 zu verarbeiten. In einigen Ausführungsformen kann der Befehlssatz 109 eine Berechnung mit komplexem Befehlssatz (CISC), eine Berechnung mit verringertem Befehlssatz (RISC) oder eine Berechnung mittels eines sehr langen Befehlsworts (VLIW) ermöglichen. Ein oder mehrere Prozessorkerne 107 können einen verschiedenen Befehlssatz 109 verarbeiten, der Befehle enthalten kann, um die Emulation weiterer Befehlssätze zu ermöglichen. Der Prozessorkern 107 kann auch weitere Verarbeitungsvorrichtungen wie z. B. einen digitalen Signalprozessor (DSP) enthalten.
  • In einigen Ausführungsformen enthält der Prozessor 102 einen Zwischenspeicher 104. Abhängig von der Architektur kann der Prozessor 102 einen einzelnen internen Zwischenspeicher oder mehrere Stufen internen Zwischenspeichers besitzen. In einigen Ausführungsformen wird der Zwischenspeicher zwischen verschiedenen Komponenten des Prozessors 102 gemeinsam verwendet. In einigen Ausführungsformen verwendet der Prozessor 102 außerdem einen externen Zwischenspeicher (z. B. einen Zwischenspeicher der Stufe-3 (L3-Zwischenspeicher) oder einen Zwischenspeicher der letzten Stufe (LLC)) (der nicht gezeigt ist), der zwischen Prozessorkernen 107 unter Verwendung bekannter Zwischenspeicherkohärenztechniken gemeinsam verwendet werden kann. Eine Registerdatei 106 kann zusätzlich im Prozessor 102 enthalten sein und kann verschiedene Typen von Registern zum Speichern verschiedener Typen von Daten enthalten (z. B. Ganzzahlregister, Gleitkommaregister, Statusregister und Befehlszeigerregister). Einige Register können allgemein verwendbare Register sein, während weitere Register für den Entwurf des Prozessors 102 spezifisch sein können.
  • In einigen Ausführungsformen sind ein oder mehrere Prozessoren 102 mit einem oder mehreren Schnittstellenbussen 110 gekoppelt, um Kommunikationssignale wie z. B. eine Adresse, Daten oder Steuersignale zwischen dem Prozessor 102 und weiteren Komponenten im System 100 zu übertragen. Der Schnittstellenbus 110 kann in einer Ausführungsform ein Prozessorbus wie z. B. eine Version des direkten Medienschnittstellenbusses (DMI-Bus) sein. Allerdings sind Prozessorbusse nicht auf den DMI-Bus beschränkt und können einen oder mehrere Peripheriekomponentenverbindungsbusse (z. B. PCI, PCI-Express), Speicherbusse oder weitere Typen von Schnittstellenbussen enthalten. In einer Ausführungsform enthalten der eine oder die mehreren Prozessoren 102 einen integrierten Speicher-Controller 116 und einen Plattform-Controller-Knotenpunkt 130. Der Speicher-Controller 116 ermöglicht eine Kommunikation zwischen einer Speichervorrichtung und weiteren Komponenten des Systems 100, während der Plattform-Controller-Knotenpunkt (PCH) 130 Verbindungen zu Eingabe-/AusgabeVorrichtungen über einen lokalen Eingabe-/Ausgabe-Bus bereitstellt.
  • Die Speichervorrichtung 120 kann eine dynamische Schreib-/Lese-Speichervorrichtung (DRAM-Vorrichtung), eine statische Schreib-/Lese-Speichervorrichtung (SRAM-Vorrichtung), eine Flash-Speichervorrichtung, eine Phasenänderungsspeichervorrichtung oder irgendeine weitere Speichervorrichtung, die eine geeignete Leistungsfähigkeit besitzt, um als Prozessspeicher zu dienen, sein. In einer Ausführungsform kann die Speichervorrichtung 120 als Systemspeicher für das System 100 arbeiten, um Daten 122 und Befehle 121 zu Verwendung, wenn der eine oder die mehreren Prozessoren 102 eine Anwendung oder einen Prozess ausführen, zu speichern. Der Speicher-Controller 116 ist außerdem an einen wahlweisen externen Graphikprozessor 118 gekoppelt, der mit dem einen oder den mehreren Graphikprozessoren 108 in den Prozessoren 102 kommunizieren kann, um Graphik- und Medienoperationen durchzuführen. In einigen Ausführungsformen können Graphik-, Medien- und/oder Rechenoperationen durch einen Beschleuniger 112 unterstützt werden, der ein Coprozessor ist, der konfiguriert sein kann, einen spezialisierten Satz von Graphik-, Medien- oder Rechenoperationen durchzuführen. Zum Beispiel ist in einer Ausführungsform der Beschleuniger 112 ein Matrixmultiplikationsbeschleuniger, der verwendet wird, ein maschinelles Lernen oder Rechenoperationen zu optimieren. In einer Ausführungsform ist der Beschleuniger 112 ein Strahlverfolgungsbeschleuniger, der verwendet werden kann, um Strahlverfolgungsoperationen in Übereinstimmung mit dem Graphikprozessor 108 durchzuführen. In einer Ausführungsform kann ein externer Beschleuniger 119 statt des oder in Übereinstimmung mit dem Beschleuniger 112 verwendet werden.
  • In einigen Ausführungsformen kann eine Anzeigevorrichtung 111 mit dem einen oder den mehreren Prozessoren 102 verbunden sein. Die Anzeigevorrichtung 111 kann eine interne Anzeigevorrichtung wie in einer mobilen elektronischen Vorrichtung oder einer Laptopvorrichtung und/oder eine externe Anzeigevorrichtung, die über eine Anzeigeschnittstelle (z. B. DisplayPort usw.) angebunden ist, sein. In einer Ausführungsform kann die Anzeigevorrichtung 111 eine am Kopf montierte Anzeigevorrichtung (HMD) wie z. B. eine stereoskopische Anzeigevorrichtung zur Verwendung in Anwendungen virtueller Realität (VR-Anwendungen) oder Anwendungen erweiterter Realität (AR-Anwendungen) sein.
  • In einigen Ausführungsformen ermöglicht der Plattform-Controller-Knotenpunkt 130, dass sich Peripheriegeräte über einen Hochgeschwindigkeits-Eingabe-/Ausgabe-Bus mit der Speichervorrichtung 120 und dem Prozessor 102 verbinden. Die Eingabe-/Ausgabe-Peripheriegeräte enthalten einen Audio-Controller 146, einen Netz-Controller 134, eine Firmware-Schnittstelle 128, eine Drahtlos-Sende-/Empfangseinrichtung 126, Berührungssensoren 125 und eine Datenspeichervorrichtung 124 (z. B. einen nichtflüchtigen Speicher, einen flüchtigen Speicher, ein Festplattenlaufwerk, einen Flash-Speicher, NAND, 3D-NAND, 3D-XPoint usw.), sind jedoch nicht darauf beschränkt. Die Datenspeichervorrichtung 124 kann Verbindungen über eine Speicherschnittstelle (z. B. SATA) oder über einen Peripheriebus wie z. B. einen Peripheriekomponentenverbindungsbus (z. B. PCI, PCI-Express) herstellen. Die Berührungssensoren 125 können Berührungsbildschirmsensoren, Drucksensoren oder Fingerabdrucksensoren enthalten. Die Drahtlos-Sende-/Empfangseinrichtung 126 kann eine Wi-Fi-Sende-/Empfangseinrichtung, eine Bluetooth-Sende-/Empfangseinrichtung oder eine Mobilfunknetz-Sende-/Empfangseinrichtung wie z. B. eine 3G, 4G, 5G oder Langzeitentwicklungs-Sende-/Empfangseinrichtung (LTE-Sende-/Empfangseinrichtung) sein. Die Firmware-Schnittstelle 128 ermöglicht eine Kommunikation mit einer System-Firmware und kann z. B. eine einheitliche erweiterbare Firmware-Schnittstelle (UEFI) sein. Der Netz-Controller 134 kann eine Netzverbindung zu einem drahtgebundenen Netz ermöglichen. In einigen Ausführungsformen ist ein Hochleistungsnetz-Controller (der nicht gezeigt ist) an den Schnittstellenbus 110 gekoppelt. Der Audio-Controller 146 ist in einer Ausführungsform ein hochauflösender Mehrkanalaudio-Controller. In einer Ausführungsform enthält das System 100 einen wahlweisen Alt-Eingabe-/Ausgabe-Controller 140, um Alt-Vorrichtungen (z. B. Vorrichtungen des persönliches Systems 2 (PS/2-Vorrichtungen)) an das System zu koppeln. Der Plattform-Controller-Knotenpunkt 130 kann auch eine Verbindung mit einem oder mehreren Controllern 142 des universellen seriellen Busses (USB) herstellen, um mit Eingabevorrichtungen wie z. B. Kombinationen 143 von Tastatur und Maus, einer Kamera 144 oder weiteren USB-Eingabevorrichtungen zu verbinden.
  • Es wird begrüßt werden, dass das gezeigte System 100 beispielhaft und nicht einschränkend ist, da auch weitere Typen von Datenverarbeitungssystemen, die verschieden konfiguriert sind, verwendet werden können. Zum Beispiel kann eine Instanz des Speicher-Controllers 116 und des Plattform-Controller-Knotenpunkts 130 in einen diskreten externen Graphikprozessor wie z. B. den externen Graphikprozessor 118 integriert sein. In einer Ausführungsform können der Plattform-Controller-Knotenpunkt 130 und/oder der Speicher-Controller 116 außerhalb des einen oder der mehreren Prozessoren 102 vorliegen. Zum Beispiel kann das System 100 einen externen Speicher-Controller 116 und einen Plattform-Controller-Knotenpunkt 130, der als ein Speicher-Controller-Knotenpunkt und ein Peripherie-Controller-Knotenpunkt konfiguriert sein kann, in einem Chipsatz, der mit dem einen oder den mehreren Prozessoren 102 in Kommunikation ist, enthalten.
  • Zum Beispiel können Leiterplatten („Schlitten“) verwendet werden, auf denen Komponenten wie z. B. CPUs, Speicher und weitere Komponenten angeordnet sind für erhöhte thermische Leistungsfähigkeit entworfen sind. In einigen Beispielen befinden sich Verarbeitungskomponenten wie z. B. die Prozessoren auf einer Oberseite eines Schlittens, während naher Speicher wie z. B. DIMMs sich auf einer Unterseite des Schlittens befinden. Als ein Ergebnis des verbesserten Luftstroms, der durch diese Gestaltung geschaffen wird, können die Komponenten bei höheren Frequenzen und Leistungspegeln als in typischen Systemen arbeiten, wodurch die Leistungsfähigkeit erhöht wird. Darüber hinaus sind die Schlitten konfiguriert, eine Blindverbindung mit Leistungs- und Datenkommunikationskabeln in einem Gestell herzustellen, wodurch ihre Fähigkeit verbessert wird, schnell entfernt, aufgerüstet, neuinstalliert und/oder ersetzt zu werden. Entsprechend sind einzelne Komponenten, die sich auf den Schlitten befinden, wie z. B. Prozessoren, Beschleuniger, Speicher und Datenspeicherlaufwerke konfiguriert, aufgrund ihres erhöhten Abstands voneinander leicht aufgerüstet zu werden. In der veranschaulichenden Ausführungsform enthalten die Komponenten zusätzlich Hardware-Beglaubigungsmerkmale, um ihre Echtheit nachzuweisen.
  • Ein Rechenzentrum kann eine einzelne Netzarchitektur („Struktur“) verwenden, die mehrere weitere Netzarchitekturen, die Ethernet und „Omni-Path“ enthalten, unterstützt. Die Schlitten können mittels Lichtwellenleitern, die eine höhere Bandbreite und eine geringere Latenz als eine typische Verkabelung mit verdrillten Doppelkabeln (z. B. Kategorie 5, Kategorie 5e, Kategorie 6 usw.) liefern, an Switches gekoppelt sein. Aufgrund der hohen Bandbreite, der Verbindungen mit geringer Latenz und der Netzarchitektur kann das Datenzentrum im Betrieb Betriebsmittel wie z. B. Speicher, Beschleuniger (z. B. GPUs, Graphikbeschleuniger, FPGAs, ASICs, neuronale Netze und/oder Beschleuniger künstlicher Intelligenz usw.) und Datenspeicherlaufwerke, die physisch zerstreut sind, bündeln und sie Rechenbetriebsmitteln (z. B. Prozessoren) nach Bedarf zur Verfügung stellen, was den Rechenbetriebsmitteln ermöglicht, auf die gebündelten Betriebsmittel zuzugreifen, als ob sie lokal wären.
  • Eine Stromversorgung oder Stromquelle kann Spannung und/oder Strom zum System 100 oder irgendeiner Komponente oder irgendeinem System, die bzw. das hier beschrieben wird, liefern. In einem Beispiel enthält die Stromversorgung einen Wechselstrom-Gleichstrom-Adapter (einen Adapter von Wechselstrom zu Gleichstrom) zum Einstecken in eine Steckdose. Derartige Wechselstromleistung kann von eine Stromquelle erneuerbarer Energie (z. B. Solarenergie) stammen. In einem Beispiel enthält die Stromquelle eine Gleichstromquelle wie z. B. einen Wechselstrom-Gleichstrom-Umsetzer. In einem Beispiel enthält die Stromquelle oder die Leistungsversorgung eine Hardware für drahtloses Laden, um über die Nähe zu einem Ladefeld zu laden. In einem Beispiel kann die Stromquelle eine interne Batterie, eine Wechselstromversorgung, eine bewegungsbasierte Stromversorgung, eine Solarstromversorgung oder eine Brennstoffzellenquelle enthalten.
  • 2A-2D stellen Rechensysteme und Graphikprozessoren, die durch hier beschriebene Ausführungsformen geschaffen werden, dar. Die Elemente von 2A-2D, die dieselben Bezugszeichen (oder Namen) wie die Elemente einer beliebigen weiteren Figur hier besitzen, können in einer beliebigen Weise, die der an anderen Stellen hier Beschriebenen ähnlich ist, arbeiten oder wirken, sind jedoch nicht darauf beschränkt.
  • 2A ist ein Blockdiagramm einer Ausführungsform eines Prozessors 200, der einen oder mehrere Prozessorkerne 202A-202N, einen integrierten Speicher-Controller 214 und einen integrierten Graphikprozessor 208 besitzt. Der Prozessor 200 kann zusätzliche Kerne bis zu und einschließlich des zusätzlichen Kerns 202N, der durch die gestrichelten Boxen repräsentiert wird, enthalten. Jeder der Prozessorkerne 202A-202N enthält eine oder mehrere interne Zwischenspeichereinheiten 204A-204N. In einigen Ausführungsformen hat jeder Prozessorkern auch Zugriff auf eine oder mehrere gemeinsam verwendete Zwischenspeichereinheiten 206. Die internen Zwischenspeichereinheiten 204A-204N und die gemeinsam verwendeten Zwischenspeichereinheiten 206 repräsentieren eine Zwischenspeicherhierarchie im Prozessor 200. Die Zwischenspeicherhierarchie kann mindestens eine Stufe eines Befehls- und Datenzwischenspeichers in jedem Prozessorkern und eine oder mehrere Stufen eines gemeinsam verwendeten Mittenstufenzwischenspeichers wie z. B. Zwischenspeicher der Stufe 2 (L2), der Stufe 3 (L3), der Stufe 4 (L4) oder weiterer Stufen enthalten, wobei die höchste Stufe eines Zwischenspeichers vor einem externen Speicher als der LLC eingestuft ist. In einigen Ausführungsformen erhält eine Zwischenspeicherkohärenzlogik die Kohärenz zwischen den verschiedenen Zwischenspeichereinheiten 206 und 204A-204N.
  • In einigen Ausführungsformen kann der Prozessor 200 auch einen Satz einer oder mehrerer Bus-Controller-Einheiten 216 und einen Systemagentenkern 210 enthalten. Die eine oder die mehreren Bus-Controller-Einheiten 216 managen einen Satz von Peripheriebussen wie z. B. einen oder mehrere PCI- oder PCI-Express-Busse. Der Systemagentenkern 210 stellt eine Managementfunktionalität für die verschiedenen Prozessorkomponenten bereit. In einigen Ausführungsformen enthält der Systemagentenkern 210 einen oder mehrere integrierte Speicher-Controller 214, um den Zugriff auf verschiedene externe Speichervorrichtungen (die nicht gezeigt sind) zu managen.
  • In einigen Ausführungsformen enthalten der eine oder die mehreren Prozessorkerne 202A-202N eine Unterstützung für gleichzeitiges Mehrfach-Threading. In einer derartigen Ausführungsform enthält der Systemagentenkern 210 Komponenten zum Koordinieren und Betreiben von Kernen 202A-202N während einer Mehrfach-Thread-Verarbeitung. Der Systemagentenkern 210 kann zusätzlich eine Leistungssteuereinheit (PCU) enthalten, die eine Logik und Komponenten enthält, um den Leistungszustand der Prozessorkerne 202A-202N und des Graphikprozessors 208 zu steuern.
  • In einigen Ausführungsformen enthält der Prozessor 200 zusätzlich den Graphikprozessor 208, um Graphikverarbeitungsoperationen auszuführen. In einigen Ausführungsformen ist der Graphikprozessor 208 an den Satz gemeinsam verwendeter Zwischenspeichereinheiten 206 und den Systemagentenkern 210, der den einen oder die mehreren integrierten Speicher-Controller 214 enthält, gekoppelt. In einigen Ausführungsformen enthält der Systemagentenkern 210 außerdem einen Anzeige-Controller 211, um die Graphikprozessorausgabe zu einer oder mehreren gekoppelten Anzeigevorrichtungen anzusteuern. In einigen Ausführungsformen kann der Anzeige-Controller 211 außerdem ein getrenntes Modul sein, das über mindestens eine Verbindung an den Graphikprozessor gekoppelt ist, oder kann in den Graphikprozessor 208 integriert sein.
  • In einigen Ausführungsformen wird eine ringförmige Verbindungseinheit 212 verwendet, um die internen Komponenten des Prozessors 200 zu koppeln. Allerdings können eine alternative Verbindungseinheit wie z. B. eine Punkt-zu-Punkt-Verbindung, eine geschaltete Verbindung oder weitere Techniken, die Techniken, die im Stand der Technik bekannt sind, verwendet werden. In einigen Ausführungsformen ist der Graphikprozessor 208 über eine Eingabe-/Ausgabe-Verbindung 213 an die ringförmige Verbindung 212 gekoppelt.
  • Die beispielhafte Eingabe-/Ausgabe-Verbindung 213 repräsentiert mindestens eine einer Vielzahl von Eingabe-/Ausgabe-Verbindungen, die eine baugruppeninterne Eingabe-/Ausgabe-Verbindung, die eine Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 218, wie z. B. einem eDRAM-Modul ermöglicht, enthalten. In einigen Ausführungsformen können sämtliche Prozessorkerne 202A-202N und der Graphikprozessor 208 eingebettete Speichermodule 218 als einen gemeinsam verwendeten Zwischenspeicher der letzten Stufe verwenden.
  • In einigen Ausführungsformen sind die Prozessorkerne 202A-202N homogene Kerne, die dieselbe Befehlssatzarchitektur ausführen. In einer weiteren Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich der Befehlssatzarchitektur (ISA) heterogen, wobei ein oder mehrere Prozessorkerne 202A-202N einen ersten Befehlssatz ausführen, während mindestens einer der weiteren Kerne eine Untermenge des ersten Befehlssatz oder einen verschiedenen Befehlssatz ausführt. In einer Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich der Mikroarchitektur heterogen, wobei ein oder mehrere Kerne, die eine relativ höhere Leistungsaufnahme besitzen, mit einem oder mehreren Leistungskernen, die eine niedrigere Leistungsaufnahme besitzen, gekoppelt sind. In einer Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich der Rechenleistungsfähigkeit heterogen. Zusätzlich kann der Prozessor 200 in einem oder mehreren Chips oder als eine integrierte SoC-Schaltung, die zusätzlich zu weiteren Komponenten die dargestellten Komponenten besitzt, implementiert sein.
  • 2B ist ein Blockdiagramm einer Hardware-Logik eines Graphikprozessorkerns 219 gemäß einigen hier beschriebenen Ausführungsformen. Elemente von 2B, die dieselben Bezugszeichen (oder Namen) wie die Elemente einer beliebigen weiteren Figur hier besitzen, können in einer beliebigen Weise, die der an anderen Stellen hier Beschriebenen ähnlich ist, arbeiten oder wirken, sind jedoch nicht darauf beschränkt. Der Graphikprozessorkern 219, der manchmal als ein Kernabschnitt bezeichnet wird, kann ein oder mehrere Graphikkerne in einem modularen Graphikprozessor sein. Der Graphikprozessorkern 219 ist beispielhaft für einen Graphikkernabschnitt und ein Graphikprozessor, der hier beschrieben wird, kann mehrere Graphikkernabschnitte auf der Grundlage einer Soll-Leistung und Leistungshüllkurven enthalten. Jeder Graphikprozessorkern 219 kann einen festen Funktionsblock 230 enthalten, der mit mehreren Unterkernen 221A-221F, die auch als Unterabschnitte bezeichnet werden und modulare Blöcke einer allgemein verwendbaren Logik und einer Logik mit fester Funktion enthalten, gekoppelt ist.
  • In einigen Ausführungsformen enthält der Block 230 mit fester Funktion eine Geometrie-/Festfunktions-Pipeline 231, die durch alle Unterkerne im Graphikprozessorkern 219 z. B. in Graphikprozessorimplementierungen mit niedriger Leistungsfähigkeit und/oder niedriger Leistung gemeinsam verwendet werden kann. In verschiedenen Ausführungsformen enthält die Geometrie-/Festfunktions-Pipeline 231 eine 3D-Festfunktions-Pipeline (z. B. eine 3D-Pipeline 312 wie in 3 und 4, die unten beschrieben werden), eine Video-Frontend-Einheit, einen Thread-Spawner und einen Thread-Disponenten und einen Manager für einheitliche Rückgabepuffer, der einheitliche Rückgabepuffer managt (z. B. der einheitliche Rückgabepuffer 418 in 4, wie unten beschrieben wird).
  • In einer Ausführungsform enthält der Block 230 mit fester Funktion außerdem eine SoC-Graphikschnittstelle 232, einen Graphik-Mikrocontroller 233 und eine Medien-Pipeline 234. Die SoC-Graphikschnittstelle 232 schafft eine Schnittstelle zwischen dem Graphikprozessorkern 219 und weiteren Prozessorkernen in einer integrierten System-On-Chip-Schaltung. Der Graphik-Mikrocontroller 233 ist ein programmierbarer Unterprozessor, der konfigurierbar ist, verschiedene Funktionen des Graphikprozessorkerns 219, die eine Thread-Auslieferung, Thread-Planung und Thread-Präemption enthalten, zu managen. Die Medien-Pipeline 234 (z. B. die Medien-Pipeline 316 von 3 und 4) enthält eine Logik, um das Decodieren, das Codieren, die Vorverarbeitung und/oder die Nachverarbeitung von Multimediadaten, die Bild-Daten und Video-Daten enthalten, zu ermöglichen. Die Medien-Pipeline 234 implementiert Medienoperationen mittels Anforderungen an eine Rechen- oder Abtastlogik in den Unterkernen 221-221F.
  • In einer Ausführungsform ermöglicht die SoC-Schnittstelle 232, dass der Graphikprozessorkern 219 mit allgemein verwendbaren Anwendungsprozessorkernen (z. B. CPUs) und/oder weiteren Komponenten in einem SoC, die Speicherhierarchieelemente wie z. B. einen gemeinsam verwendeten Zwischenspeicher der letzten Stufe, den System-RAM und/oder in einem Chip oder in eine Baugruppe integrierten DRAM enthalten, kommuniziert. Die SoC-Schnittstelle 232 kann außerdem eine Kommunikation mit Vorrichtungen mit fester Funktion im SoC wie z. B. Kamerabildgebungs-Pipelines ermöglichen und ermöglicht die Verwendung von und/oder implementiert globale Speicheratome, die zwischen den Graphikprozessorkernen 219 und den CPUs im SoC gemeinsam verwendet werden können. Die SoC-Schnittstelle 232 kann außerdem Leistungsmanagementsteuerelemente für den Graphikprozessorkern 219 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Graphikprozessorkerns 219 und weiteren Taktdomänen im SoC ermöglichen. In einer Ausführungsform ermöglicht die SoC-Schnittstelle 232 den Empfang von Anweisungspuffern von einem Anweisungs-Streamer und einem globalen Thread-Disponenten, die konfiguriert sind, Anweisungen und Befehle zu jedem von einem oder mehreren Graphikkernen in einem Graphikprozessor zu liefern. Die Anweisungen und Befehle können dann, wenn Medienoperationen durchgeführt werden sollen, zur Medien-Pipeline 234 oder dann, wenn Graphikverarbeitungsoperationen durchgeführt werden sollen, zu einer Geometrie- und Festfunktions-Pipeline (z. B. die Geometrie-/Festfunktions-Pipeline 231 und die Geometrie- und Festfunktions-Pipeline 237) ausgeliefert werden.
  • Der Graphik-Mikrocontroller 233 kann konfiguriert sein, verschiedene Planungs- und Managementaufgaben für den Graphikprozessorkern 219 durchzuführen. In einer Ausführungsform kann der Graphik-Mikrocontroller 233 eine Graphik- und/oder Rechenarbeitslastplanung an den verschiedenen parallelen Graphikmaschinen in Ausführungseinheitsanordnungen (EU-Anordnungen) 222A-222F, 224A-224F in den Unterkernen 221A-221F durchführen. In diesem Planungsmodell kann eine Host-Software, die in einem CPU-Kern eines SoC, das den Graphikprozessorkern 219 enthält, ausgeführt wird, Arbeitslasten zu einer von mehreren Graphikprozessortürklingeln, die eine Planungsoperation an der passenden Graphikmaschine aufruft, übermitteln. Planungsoperationen enthalten ein Bestimmen, welche Arbeitslast als nächstes ausgeführt werden soll, ein Übermitteln einer Arbeitslast zu einem Anweisungs-Streamer, eine Präemption vorhandener Arbeitslasten, die in einer Maschine laufen, ein Überwachen des Fortschritts einer Arbeitslast und ein Benachrichtigen einer Host-Software, wenn eine Arbeitslast abgeschlossen ist. In einer Ausführungsform kann der Graphik-Mikrocontroller 233 auch einen Niedrigenergiezustand oder einen Ruhezustand für den Graphikprozessorkern 219 ermöglichen, was dem Graphikprozessorkern 219 die Fähigkeit bereitstellt, Register im Graphikprozessorkern 219 zwischen Niedrigleistungszustandsübergängen unabhängig vom Betriebssystem und/oder von Graphiktreiber-Software im System zu speichern und wiederherzustellen.
  • Der Graphikprozessorkern 219 kann mehr oder weniger als die dargestellten Unterkerne 221A-221F und bis zu N modulare Unterkerne besitzen. Für jeden Satz von N Unterkernen kann der Graphikprozessorkern 219 außerdem eine gemeinsam verwendete Funktionslogik 235, einen gemeinsam verwendeten Speicher und/oder einen Zwischenspeicher 236, eine Geometrie-/Festfunktions-Pipeline 237 sowie eine zusätzliche Logik 238 mit fester Funktion enthalten, um verschiedene Graphik- und Rechenverarbeitungsoperationen zu beschleunigen. Die gemeinsam verwendete Funktionslogik 235 kann Logikeinheiten enthalten, die der gemeinsam verwendeten Funktionslogik 420 von 4 (z. B. Abtasteinrichtung, Mathematik und/oder Kommunikationslogik zwischen Threads), die durch sämtliche N Unterkerne im Graphikprozessorkern 219 gemeinsam verwendet werden kann, zugeordnet sind. Der gemeinsam verwendete Speicher und/oder der Zwischenspeicher 236 können ein Zwischenspeicher der letzten Stufe für den Satz von N Unterkernen 221A-221F im Graphikprozessorkern 219 sein und können auch als ein gemeinsam verwendeter Speicher dienen, der durch mehrere Unterkerne zugänglich ist. Die Geometrie-/Festfunktions-Pipeline 237 kann statt der Geometrie-/Festfunktions-Pipeline 231 im Block 230 mit fester Funktion enthalten sein und kann dieselben oder ähnliche Logikeinheiten enthalten.
  • In einer Ausführungsform enthält der Graphikprozessorkern 219 eine zusätzliche Logik 238 mit fester Funktion, die verschiedene Logiken mit fester Funktion zur Verwendung durch den Graphikprozessorkern 219 enthalten kann. In einer Ausführungsform enthält die zusätzliche Logik 238 mit fester Funktion eine zusätzliche Geometrie-Pipeline zur Verwendung bei der Schattierung lediglich der Position. Bei der Schattierung lediglich der Position sind zwei Geometrie-Pipelines, die Gesamtgeometrie-Pipeline in der Geometrie-/Festfunktions-Pipeline 238, 231 und eine Ausschluss-Pipeline, die eine zusätzliche Geometrie-Pipeline, die in der zusätzlichen Logik 238 mit fester Funktion enthalten sein kann, ist, vorhanden. In einer Ausführungsform ist die Ausschluss-Pipeline eine reduzierte Version der Gesamtgeometrie-Pipeline. Die Gesamtgeometrie-Pipeline und die Ausschluss-Pipeline können verschiedene Instanzen derselben Anwendung ausführen, wobei jede Instanz einen getrennten Kontext besitzt. Die Schattierung lediglich der Position kann lange Ausschlussdurchläufe verworfener Dreiecke verbergen, was in einigen Fällen ermöglicht, dass die Schattierung früher abgeschlossen wird. Zum Beispiel und in einer Ausführungsform kann die Ausschluss-Pipeline-Logik in der zusätzlichen Logik 238 mit fester Funktion Positionsschattierer parallel zur Hauptanwendung ausführen und erzeugt im Allgemeinen kritische Ergebnisses schneller als die Gesamt-Pipeline, da die Ausschluss-Pipeline lediglich die Positionsmerkmale der Scheitelpunkte abruft und schattiert, ohne eine Rasterung und ein Rendern der Pixel zum Rahmenpuffer durchzuführen. Die Ausschluss-Pipeline kann die erzeugten kritischen Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke zu berechnen, ungeachtet dessen, ob diese Dreiecke ausgeschlossen werden. Die Gesamt-Pipeline (die in diesem Fall als eine Wiederhol-Pipeline bezeichnet werden kann) kann die Sichtbarkeitsinformationen gebrauchen, um die ausgeschlossenen Dreiecke auszulassen, um lediglich die sichtbaren Dreiecke, die letztendlich zur Rasterungsphase weitergeleitet werden, zu schattieren.
  • In einer Ausführungsform kann die zusätzliche Logik 238 mit fester Funktion außerdem eine Beschleunigungslogik für maschinelles Lernen wie z. B. eine Matrixmultiplikationslogik mit fester Funktion für Implementierungen, die Optimierungen für ein Training oder eine Schlussfolgerung maschinellen Lernens enthalten, enthalten.
  • Jeder Graphikunterkern 221A-221F enthält einen Satz Ausführungsbetriebsmittel, die verwendet werden können, um Graphik-, Medien- und Rechenoperationen in Reaktion auf Anforderungen durch eine Graphik-Pipeline, eine Medien-Pipeline oder Schattiererprogramme durchzuführen. Die Graphikunterkerne 221A-221F enthalten mehrere EU-Anordnungen 222A-222F, 224A-224F, eine Thread-Auslieferungslogik und eine Logik 223A-223F zur threadübergreifenden Kommunikation (TD/IC-Logik), eine 3D-Abtasteinrichtung 225A-225F (z. B. eine Texturabtasteinrichtung), eine Medienabtasteinrichtung 206A-206F, einen Schattiererprozessor 227A-227F und einen gemeinsam verwendeten lokalen Speicher (SLM) 228A-228F. Die EU-Anordnungen 222A-222F, 224A-224F enthalten jeweils mehrere Ausführungseinheiten, die allgemein verwendbare Graphikverarbeitungseinheiten sind, die Gleitkomma- und Ganzzahl-/Festkomma-Logikoperationen im Dienst einer Graphik-, Medien- oder Rechenoperation, die Graphik-, Medien- oder Rechenschattiererprogramme enthält, durchführen können. Die TD/IC-Logik 223A-223F führt lokale Thread-Auslieferungs- und Thread-Steuer-Operationen für die Ausführungseinheiten in einem Unterkern durch und ermöglicht eine Kommunikation zwischen Threads, die in den Ausführungseinheiten des Unterkerns ausgeführt werden. Die 3D-Abtasteinrichtung 225A-225F kann Texturdaten oder weitere mit einer 3D-Graphik in Beziehung stehende Daten in einen Speicher lesen. Die 3D-Abtasteinrichtung kann Texturdaten auf der Grundlage eines konfigurierten Abtastzustands und des Texturformats, das einer gegebenen Textur zugeordnet ist, verschieden lesen. Die Medienabtasteinrichtung 206A-206F kann ähnliche Leseoperationen auf der Grundlage des Typs und des Formats, das den Mediendaten zugeordnet ist, durchführen. In einer Ausführungsform kann jeder Graphikunterkern 221A-221F eine einheitliche 3D- und Medienabtasteinrichtung abwechselnd enthalten. Threads, die in den Ausführungseinheiten in jedem der Unterkerne 221A-221F ausgeführt werden, können gemeinsam verwendeten lokalen Speicher 228A-228F in jedem Unterkern verwenden, um Threads, die in einer Thread-Gruppe ausgeführt werden, zu ermöglichen, unter Verwendung eines gemeinsamen Pools von chipinternem Speicher ausgeführt zu werden.
  • 2C stellt eine Graphikverarbeitungseinheit (GPU) 239 dar, die fest zugeordnete Sätze von Graphikverarbeitungsbetriebsmitteln enthält, die in Mehrfachkerngruppen 240A-240N angeordnet sind. Während die Details lediglich einer einzelnen Mehrfachkerngruppe 240A bereitgestellt werden, wird begrüßt werden, dass die weiteren Mehrfachkerngruppen 240B-240N mit denselben oder ähnlichen Sätzen von Graphikverarbeitungsbetriebsmitteln ausgestattet sein können.
  • Wie dargestellt ist, kann eine Mehrfachkerngruppe 240A einen Satz Graphikkerne 243, einen Satz Tensorkerne 244 und einen Satz Strahlverfolgungskerne 245 enthalten. Eine Planungseinrichtung/ein Disponent 241 plant die Graphik-Threads zur Ausführung in den verschiedenen Kernen 243, 244, 245 und liefert sie aus. In einem Satz Registerdateien 242 sind Operandenwerte, die durch die Kerne 243, 244, 245 verwendet werden, wenn die Graphik-Threads ausgeführt werden, gespeichert. Diese können z. B. Ganzzahlregister zum Speichern von Ganzzahlwerten, Gleitkommaregister zum Speichern von Gleitkommawertenenthalten, Vektorregister zum Speichern von verpackten Datenelementen (Ganzzahl- und/oder Gleitkommadatenelemente) und Kachelregister zum Speichern von Tensor-/Matrix-Werten enthalten. In einer Ausführungsform sind die Kachelregister als kombinierte Sätze von Vektorregistern implementiert.
  • In einem oder mehreren kombinierten Zwischenspeichern der Stufe 1 (L1-Zwischenspeicher) und gemeinsam verwendeten Speichereinheiten 247 sind Graphikdaten wie z. B. Texturdaten, Scheitelpunktdaten, Pixeldaten, Strahldaten, Begrenzungsvolumendaten usw. lokal in jeder Mehrfachkerngruppe 240A gespeichert. Eine oder mehrere Textureinheiten 247 können außerdem verwendet werden, um Texturoperationen wie z. B. eine Texturabbildung und -abtastung durchzuführen. In einem Zwischenspeicher der Stufe 2 (L2-Zwischenspeicher) 253, der durch alle oder eine Untermenge der Mehrfachkerngruppen 240A-240N gemeinsam verwendet wird, sind Graphikdaten und/oder Befehle für mehrere gleichzeitige Graphik-Threads gespeichert. Wie dargestellt ist, kann der L2-Zwischenspeicher 253 über mehrere Mehrfachkerngruppen 240A-240N gemeinsam verwendet werden. Ein oder mehrere Speicher-Controller 248 koppeln die GPU 239 an einen Speicher 249, der ein Systemspeicher (z. B. DRAM) und/oder ein fest zugeordneter Graphikspeicher (z. B. GDDR6-Speicher) sein kann.
  • Eine Eingabe-/Ausgabe-Schaltungsanordnung (I/O-Schaltungsanordnung) 250 koppelt die GPU 239 an eine oder mehrere I/O-Vorrichtungen 252 wie z. B. digitale Signalprozessoren (DSPs), Netz-Controller oder Anwendereingabevorrichtungen. Eine chipinterne Verbindung kann verwendet werden, um die I/O-Vorrichtungen 252 an die GPU 239 und einen Speicher 249 zu koppeln. Eine oder mehrere I/O-Speichermanagementeinheiten (IOMMUs) 251 der I/O-Schaltungsanordnung 250 koppeln die I/O-Vorrichtungen 252 direkt an den Systemspeicher 249. In einer Ausführungsform managt die IOMMU 251 mehrere Sätze von Seitentabellen, um virtuelle Adressen auf physische Adressen in einem Systemspeicher 249 abzubilden. In dieser Ausführungsform können die I/O-Vorrichtungen 252, die eine oder die mehreren CPUs 246 und die eine oder die mehreren GPUs 239 denselben virtuellen Adressraum gemeinsam verwenden.
  • In einer Implementierung unterstützt die IOMMU 251 eine Virtualisierung. In diesem Fall kann sie einen ersten Satz Seitentabellen, um virtuelle Gast-/Graphik-Adressen auf physische Gast-/Graphik-Adressen abzubilden, und einen zweiten Satz Seitentabellen, um die physischen Gast-/Graphik-Adressen auf physische System-/Host-Adressen (z. B. im Systemspeicher 249) abzubilden, managen. Die Basisadressen jedes des ersten und des zweiten Satzes von Seitentabellen können in Steuerregistern gespeichert sein und in einem Kontextwechsel getauscht werden (z. B. derart, dass der neue Kontext mit Zugriff auf den relevanten Satz Seitentabellen versehen wird). Obwohl es in 2C nicht dargestellt ist, können sämtliche Kerne 243, 244, 245 und/oder Mehrfachkerngruppen 240A-240N Übersetzungsnachschlagepuffer (TLBs) enthalten, um Übersetzungen von virtuellen Gästen zu physischen Gästen, Übersetzungen von physischen Gästen zu physischen Hosts und Übersetzungen von virtuellen Gästen zu physischen Hosts zwischenzuspeichern.
  • In einer Ausführungsform sind die CPUs 246, die GPUs 239 und die I/O-Vorrichtungen 252 in einen einzelnen Halbleiterchip und/oder eine Chipbaugruppe integriert. Der dargestellte Speicher 249 kann im selben Chip integriert sein oder kann über eine chipexterne Schnittstelle an die Speicher-Controller 248 gekoppelt sein. In einer Implementierung umfasst der Speicher 249 GDDR6-Speicher, der denselben virtuellen Adressraum wie weitere physische Speicher auf Systemebene verwendet, obwohl die zugrunde liegenden Prinzipien nicht auf die bestimmte Implementierung beschränkt sind.
  • In einer Ausführungsform enthalten die Tensorkerne 244 mehrere Ausführungseinheiten, die speziell ausgelegt sind, Matrixoperationen durchzuführen, die die grundlegenden Rechenoperationen sind, die verwendet werden, um Operationen von tiefgehendem Lernen durchzuführen. Zum Beispiel können Operationen zur gleichzeitigen Matrixmultiplikation zum Training und zur Schlussfolgerung neuronaler Netze verwendet werden. Die Tensorkerne 244 können eine Matrixverarbeitung unter Verwendung einer Vielzahl von Operandengenauigkeiten, die Gleitkomma mit einfacher Genauigkeit (z. B. 32 Bit), Gleitkomma mit halber Genauigkeit (z. B. 16 Bit), ganzzahlige Worte (16 Bit), Bytes (8 Bit) und Halb-Bytes (4 Bit) enthalten, durchführen. In einer Ausführungsform extrahiert eine Implementierung eines neuronalen Netzes Merkmale jeder gerenderten Szene, wobei möglicherweise Details aus mehreren Rahmen kombiniert werden, um ein hochqualitatives endgültiges Bild zu konstruieren.
  • In Implementierungen tiefgehenden Lernens kann eine parallele Matrixmultiplikationsarbeit zur Ausführung in den Tensorkernen 244 geplant sein. Das Training neuronaler Netze erfordert insbesondere eine erhebliche Anzahl von Matrixskalarproduktoperationen. Um eine Formulierung eines inneren Produkts einer N × N × N-Matrixmultiplikation zu verarbeiten, können die Tensorkerne 244 mindestens N Skalarproduktverarbeitungselemente enthalten. Bevor die Matrixmultiplikation beginnt, wird eine gesamte Matrix in Kachelregister geladen und mindestens eine Spalte einer zweiten Matrix wird für N Arbeitszyklen in jedem Arbeitszyklus geladen. In jedem Arbeitszyklus liegen N Skalarprodukte vor, die verarbeitet werden.
  • Matrixelemente können abhängig von der bestimmten Implementierung in verschiedenen Genauigkeiten, die 16 Bit-Worte, 8 Bit-Bytes (z. B. INT8) und 4 Bit-Halbbytes (z. B. INT4) enthalten, gespeichert werden. Verschiedene Genauigkeitsmodi können für die Tensorkerne 244 festgelegt werden, um sicherzustellen, dass die wirtschaftlichste Präzision für verschiedene Arbeitslasten (wie z. B. Schlussfolgerungsarbeitslasten, die eine Quantisierung zu Bytes und Halb-Bytes tolerieren können) verwendet wird.
  • In einer Ausführungsform beschleunigen die Strahlverfolgungskerne 245 Strahlverfolgungsoperationen sowohl für Echtzeitstrahlverfolgungsimplementierungen als auch für Nicht-Echtzeitstrahlverfolgungsimplementierungen. Insbesondere enthalten die Strahlverfolgungskerne 245 eine Strahldurchlauf-/Strahlschnitt-Schaltungsanordnung zum Durchführen eines Strahldurchlaufens unter Verwendung von Begrenzungsvolumenhierarchien (BVHs) und Identifizieren von Schnittpunkten zwischen Strahlen und Grundelementen, die in den BVH-Volumen eingeschlossen sind. Die Strahlverfolgungskerne 245 können außerdem eine Schaltungsanordnung zum Durchführen einer tiefen Prüfung und eines Ausschlusses (z. B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) enthalten. In einer Implementierung führen die Strahlverfolgungskerne 245 Durchlaufs- und Schnittoperationen gemeinsam mit den hier beschriebenen Bildrauschunterdrückungstechniken, die mindestens teilweise in den Tensorkernen 244 ausgeführt werden können, durch. Zum Beispiel implementieren in einer Ausführungsform die Tensorkerne 244 ein neuronales Netz mit tiefgehendem Lernen, um eine Rauschunterdrückung von Rahmen, die durch die Strahlverfolgungskerne 245 erzeugt wurden, durchzuführen. Allerdings können die eine oder die mehreren CPUs 246, die Graphikkerne 243 und/oder die Strahlverfolgungskerne 245 außerdem alle oder einen Teil der Rauschunterdrückungsalgorithmen und/oder der Algorithmen für tiefgehendes Lernen implementieren.
  • Zusätzlich kann, wie oben beschrieben wurde, ein verteilter Lösungsversuch zur Rauschunterdrückung eingesetzt werden, in dem die GPU 239 sich in einer Rechenvorrichtung befindet, die über ein Netz oder eine Hochgeschwindigkeitsverbindung an weitere Rechenvorrichtungen gekoppelt ist. In dieser Ausführungsform verwenden die verbundenen Rechenvorrichtungen Lern-/Trainings-Daten für neuronale Netze, um die Geschwindigkeit, mit der das Gesamtsystem lernt, eine Rauschunterdrückung für verschiedene Typen von Bildrahmen und/oder verschiedene Graphikanwendungen durchzuführen, zu verbessern.
  • In einer Ausführungsform verarbeiten die Strahlverfolgungskerne 245 alle BVH-Durchläufe und Strahl-Grundelement-Schnitte, was den Graphikkernen 243 erspart, mit tausenden Befehlen pro Strahl überlastet zu werden. In einer Ausführungsform enthält jeder Strahlverfolgungskern 245 einen ersten Satz einer spezialisierten Schaltungsanordnung zum Durchführen von Begrenzungsrahmenprüfungen (z. B. für Durchlaufoperationen) und einen zweiten Satz einer spezialisierten Schaltungsanordnung zum Durchführen der Strahldreiecksschnittpunktprüfungen (z. B. sich schneidende Strahlen, die durchlaufen worden sind). Somit kann in einer Ausführungsform die Mehrfachkerngruppe 240A einfach eine Strahlensonde starten und die Strahlverfolgungskerne 245 führen unabhängig ein Strahldurchlaufen und Strahlschneiden durch und geben Trefferdaten (z. B. ein Treffer, kein Treffer, mehrere Treffer usw.) zum Thread-Kontext zurück. Die weiteren Kerne 243, 244 sind befreit, um weitere Graphik- oder Rechenarbeit durchzuführen, während die Strahlverfolgungskerne 245 die Durchlaufs- und Schnittoperationen durchführen.
  • In einer Ausführungsform enthält jeder Strahlverfolgungskern 245 eine Durchlaufeinheit, um BVH-Prüfoperationen durchzuführen, und eine Schnitteinheit, die Strahl-Grundelement-Schnittprüfungen durchführt. Die Schnitteinheit erzeugt eine „Treffer“-, „Kein Treffer“- oder „Mehrfachtreffer“-Antwort, die sie zum passenden Thread liefert. Während der Durchlaufs- und Schnittoperationen sind die Ausführungsbetriebsmittel der weiteren Kerne (z. B. die Graphikkerne 243 und die Tensorkerne 244) befreit, um weitere Formen von Graphikarbeit durchzuführen.
  • In einer bestimmten Ausführungsform, die unten beschrieben wird, wird ein hybrider Rasterungs-/Strahlverfolgungs-Lösungsversuch verwendet, in dem Arbeit zwischen den Graphikkernen 243 und den Strahlverfolgungskernen 245 verteilt wird.
  • In einer Ausführungsform enthalten die Strahlverfolgungskerne 245 (und/oder weitere Kerne 243, 244) eine Hardware-Unterstützung für einen Strahlverfolgungsbefehlssatz wie z. B. DirectX-Strahlverfolgung (DXR) von Microsoft, der eine DispatchRays-Anweisung sowie Schattierer durch Strahlerzeugung, nächstliegende Treffer, beliebige Treffer und Verfehlen enthält, die die Zuweisung eindeutiger Sätze von Schattierern und Texturen für jedes Objekt ermöglichen. Eine weitere Strahlverfolgungsplattform, die durch die Strahlverfolgungskerne 245, die Graphikkerne 243 und die Tensorkerne 244 unterstützt werden kann, ist Vulkan 1.1.85. Es ist allerdings festzuhalten, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf eine bestimmte Strahlverfolgungs-ISA beschränkt sind.
  • Im Allgemeinen können die verschiedenen Kerne 245, 244, 243 einen Strahlverfolgungsbefehlssatz unterstützen, der Befehle/Funktionen für Strahlerzeugung, nächstliegender Treffer, beliebiger Treffer, Strahl-Grundelement-Schnitt, grundelementweise und hierarchische Begrenzungsrahmenkonstruktion, Verfehlen, Besuchen und Ausnahmen enthält. Insbesondere enthält eine Ausführungsform Strahlverfolgungsbefehle, um die folgenden Funktionen durchzuführen:
  • Strahlerzeugung - Strahlerzeugungsbefehle können für jedes Pixel, jeden Abtastwert oder eine weitere anwenderdefinierte Arbeitszuweisung ausgeführt werden.
  • Nächstliegender Treffer - Ein Befehl für den nächstliegenden Treffer kann ausgeführt werden, um den nächstliegenden Schnittpunkt eines Strahls mit Grundelementen in einer Szene zu lokalisieren.
  • Beliebiger Treffer - Ein Befehl für einen beliebigen Treffer identifiziert mehrere Schnittpunkte zwischen einem Strahl und Grundelementen in einer Szene, um möglicherweise einen neuen nächstliegenden Schnittpunkt zu identifizieren.
  • Schnitt - Ein Schnittbefehl führt eine Strahl-Grundelement-Schnittprüfung durch und gibt ein Ergebnis aus.
  • Grundelementweise Begrenzungsrahmenkonstruktion - Dieser Befehl bildet einen Begrenzungsrahmen um ein gegebenes Grundelement oder eine gegebene Gruppe von Grundelementen (z. B. wenn eine neue BVH oder eine weitere Beschleunigungsdatenstruktur gebildet wird).
  • Verfehlen - Gibt an, dass ein Strahl die gesamte Geometrie in einer Szene oder in einem festgelegten Bereich einer Szene verfehlt.
  • Besuchen - Gibt die untergeordneten Volumen an, die ein Strahl durchlaufen wird.
  • Ausnahmen - Enthält verschiedene Typen von Ausnahmebehandlungen (wird z. B. für verschiedene Fehlerbedingungen aufgerufen).
  • 2D ist ein Blockdiagramm einer allgemein verwendbaren Graphikverarbeitungseinheit (GPGPU) 270, die als ein Graphikprozessor und/oder ein Rechenbeschleuniger konfiguriert werden kann, gemäß hier beschriebenen Ausführungsformen. Die GPGPU 270 kann über einen oder mehrere System- und/oder Speicherbusse mit Host-Prozessoren (z. B. eine oder mehrere CPUs 246) und einem Speicher 271, 272 verbunden sein. In einer Ausführungsform ist der Speicher 271 ein Systemspeicher, der mit der einen oder den mehreren CPUs 246 gemeinsam verwendet werden kann, während der Speicher 272 ein Vorrichtungsspeicher ist, der der GPGPU 270 fest zugeordnet ist. In einer Ausführungsform können Komponenten in der GPGPU 270 und dem Vorrichtungsspeicher 272 in Speicheradressen, die für die eine oder die mehreren CPUs 246 zugänglich sind, abgebildet werden. Der Zugriff auf den Speicher 271 und 272 kann mittels eines Speicher-Controllers 268 ermöglicht werden. In einer Ausführungsform enthält der Speicher-Controller 268 einen internen Controller 269 für direkten Speicherzugriff (DMA-Controller) oder kann eine Logik enthalten, um Operationen durchzuführen, die sonst durch einen DMA-Controller durchgeführt werden würden.
  • Die GPGPU 270 enthält mehrere Zwischenspeicher, die einen L2-Zwischenspeicher 253, einen L1-Zwischenspeicher 254, einen Befehlszwischenspeicher 255 und einen gemeinsam verwendeten Speicher 256, wovon mindestens ein Teil als ein Zwischenspeicher partitioniert werden kann, enthalten. Die GPGPU 270 enthält außerdem mehrere Recheneinheiten 260A-260N. Jede Recheneinheit 260A-260N enthält einen Satz Vektorregister 261, Skalarregister 262, Vektorlogikeinheiten 263 und Skalarlogikeinheiten 264. Die Recheneinheiten 260A-260N können auch einen lokal gemeinsam verwendeten Speicher 265 und einen Programmzähler 266 enthalten. Die Recheneinheiten 260A-260N können an einen konstanten Zwischenspeicher 267 gekoppelt sein, der verwendet werden kann, um konstante Daten, die Daten sind, die sich während des Ausführens eines Kern- oder Schattierprogramms, das in der GPGPU 270 ausgeführt wird, nicht ändern, zu speichern. In einer Ausführungsform ist der konstante Zwischenspeicher 267 ein Skalardatenzwischenspeicher und zwischengespeicherte Daten können direkt in die Skalarregister 262 abgerufen werden.
  • Während des Betriebs können die eine oder die mehreren CPUs 246 Anweisungen in Register oder einen Speicher in der GPGPU 270, die in einen erreichbaren Adressraum abgebildet sind, schreiben. Die Anweisungsprozessoren 257 können die Anweisungen aus Registern oder einem Speicher lesen und bestimmen, wie diese Anweisungen in der GPGPU 270 verarbeitet werden. Ein Thread-Disponent 258 kann dann verwendet werden, um Threads zu den Recheneinheiten 260A-260N auszuliefern, um diese Anweisungen durchzuführen. Jede Recheneinheit 260A-260N kann Threads von den weiteren Recheneinheiten unabhängig ausführen. Zusätzlich kann jede Recheneinheit 260A-260N unabhängig zur bedingten Berechnung konfiguriert sein und kann die Berechnungsergebnisse zu einem Speicher bedingt ausgeben. Die Anweisungsprozessoren 257 können die eine oder die mehreren CPUs 246 unterbrechen, wenn die übermittelten Anweisungen abgeschlossen sind.
  • 3A-3C stellen Blockdiagramme zusätzlicher Graphikprozessor- und Rechenbeschleuniger-Architekturen, die durch die hier beschriebenen Ausführungsformen geschaffen werden, dar. Die Elemente von 3A-3C, die dieselben Bezugszeichen (oder Namen) wie die Elemente einer beliebigen weiteren Figur hier besitzen, können in einer beliebigen Weise, die der an anderen Stellen hier Beschriebenen ähnlich ist, arbeiten oder wirken, sind jedoch nicht darauf beschränkt.
  • 3A ist ein Blockdiagramm eines Graphikprozessors 300, der eine diskrete Graphikverarbeitungseinheit sein kann oder ein Graphikprozessor, der in mehrere Verarbeitungskerne oder weitere Halbleitervorrichtung wie z. B. aber nicht beschränkt auf Speichervorrichtungen oder Netzschnittstellen integriert ist, sein kann. In einigen Ausführungsformen kommuniziert der Graphikprozessor über eine speicherabgebildete I/O-Schnittstelle mit Registern im Graphikprozessor und mit Anweisungen, die im Prozessorspeicher angeordnet sind. In einigen Ausführungsformen enthält der Graphikprozessor 300 eine Speicherschnittstelle 314, um auf Speicher zuzugreifen. Die Speicherschnittstelle 314 kann eine Schnittstelle zu einem lokalen Speicher, einem oder mehreren internen Zwischenspeichern, einem oder mehreren gemeinsam verwendeten externen Zwischenspeichern und/oder zu einem Systemspeicher sein.
  • In einigen Ausführungsformen enthält der Graphikprozessor 300 außerdem einen Anzeige-Controller 302, um Anzeigeausgabedaten zu einer Anzeigevorrichtung 318 anzusteuern. Der Anzeige-Controller 302 enthält eine Hardware für eine oder mehrere Overlay-Ebenen zur Anzeige und Zusammensetzung mehrerer Schichten von Video- oder Anwenderschnittstellenelementen. Die Anzeigevorrichtung 318 kann eine interne oder eine externe Anzeigevorrichtung sein. In einer Ausführungsform ist die Anzeigevorrichtung 318 eine am Kopf montierte Anzeigevorrichtung wie z. B. eine Anzeigevorrichtung für virtuelle Realität (VR-Anzeigevorrichtung) oder eine Anzeigevorrichtung für erweiterte Realität (AR-Anzeigevorrichtung). In einigen Ausführungsformen enthält der Graphikprozessor 300 eine Video-Codec-Maschine 306, um Medien zu, von oder zwischen einem oder mehreren Mediencodierungsformaten, die Formate der Bewegtbildexpertengruppe (MPEG-Formate) wie z. B. MPEG-2, fortschrittliche Videocodierungsformate (AVC-Formate) wie z. B. H.264/MPEG-4 AVC, H.265/HEVC, VP8, VP9 des Bündnisses für offene Medien (AOMedien) sowie das 421M/VC-1 der Gesellschaft von Bewegtbild- und Fernseh-Ingenieuren (SMPTE) und Formate der vereinten Photographie-Expertengruppe (JPEG-Formate) wie z. B. JPEG und Bewegungs-JPEG-Formate (MJPEG-Formate) enthalten, jedoch nicht darauf beschränkt sind, zu codieren, zu decodieren bzw. umzucodieren.
  • In einigen Ausführungsformen enthält der Graphikprozessor 300 eine Blockbildübertragungsmaschine (BLIT-Maschine) 304, um zweidimensionale (2D) Rastereroperationen durchzuführen, die z. B. Bit-Begrenzungsblockoperationen enthalten. Allerdings werden in einer Ausführungsform 2D-Graphikoperationen unter Verwendung einer oder mehrerer Komponenten der Graphikverarbeitungsmaschine (GPE-Maschine) 310 durchgeführt. In einigen Ausführungsformen ist die GPE 310 eine Rechenmaschine zum Durchführen von Graphikoperationen, die dreidimensionale (3D) Graphikoperationen und Medienoperationen enthalten.
  • In einigen Ausführungsformen enthält GPE 310 eine 3D-Pipeline 312 zum Durchführen von 3D-Operationen wie z. B. eines Renderns von dreidimensionalen Bildern und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 3D-Grundelemente (z. B. Rechteck, Dreieck usw.) einwirken. Die 3D-Pipeline 312 enthält programmierbare Elemente und Elemente mit fester Funktion, die verschiedene Aufgaben im Element durchführen und/oder Ausführungs-Threads zu einem 3D-/Medien-Untersystem 315 hervorbringen. Während die 3D-Pipeline 312 verwendet werden kann, um Medienoperationen durchzuführen, enthält eine Ausführungsform von GPE 310 außerdem eine Medien-Pipeline 316, die speziell verwendet wird, um Medienoperationen wie z. B. eine Videonachverarbeitung und eine Bildverbesserung durchzuführen.
  • In einigen Ausführungsformen enthält die Medien-Pipeline 316 Logikeinheiten mit fester Funktion oder programmierbare Funktionseinheiten, um eine oder mehrere spezialisierte Medienoperationen wie z. B. eine Videodecodierbeschleunigung, ein Videoentschachteln und eine Videocodierbeschleunigung anstatt oder im Namen der Videocodecmaschine 306 durchzuführen. In einigen Ausführungsformen enthält die Medien-Pipeline 316 zusätzlich eine Thread-Hervorbringungseinheit, um Threads zur Ausführung im 3D-/Medien-Untersystem 315 hervorzubringen. Die hervorgebrachten Threads führen Berechnungen für die Medienoperationen in einer oder mehreren Graphikausführungseinheiten, die im 3D-/Medien-Untersystem 315 enthalten sind, durch.
  • In einigen Ausführungsformen enthält das 3D-/Medien-Untersystem 315 eine Logik zum Ausführen von Threads, die durch die 3D-Pipeline 312 und die Medien-Pipeline 316 hervorgebracht wurden. In einer Ausführungsform senden die Pipelines Thread-Ausführungsanforderungen zum 3D-/Medien-Untersystem 315, das eine Thread-Auslieferungslogik zum Arbitrieren und Ausliefern der verschiedenen Anforderungen zu verfügbaren Thread-Ausführungsbetriebsmitteln enthält. Die Ausführungsbetriebsmittel enthalten eine Anordnung von Graphikausführungseinheiten, um die 3D- und Medien-Threads zu verarbeiten. In einigen Ausführungsformen enthält das 3D-/Medien-Untersystem 315 einen oder mehrere interne Zwischenspeicher für Thread-Befehle und Daten. In einigen Ausführungsformen enthält das Untersystem außerdem einen gemeinsam verwendeten Speicher, der Register und einen adressierbaren Speicher enthält, um Daten zwischen Threads gemeinsam zu verwenden und Ausgangsdaten zu speichern.
  • 3B stellt einen Graphikprozessor 320, der eine gekachelte Architektur besitzt, gemäß hier beschriebenen Ausführungsformen, dar. In einer Ausführungsform enthält der Graphikprozessor 320 ein Graphikverarbeitungsmaschinen-Cluster 322, das mehrere Instanzen der Graphikverarbeitungsmaschine 310 von 3A in einer Graphikmaschinenkachel 310A-310D besitzt. Jede Graphikmaschinenkachel 310A-310D kann über einen Satz Kachelverbindungen 323A-323F verbunden sein. Jede Graphikmaschinenkachel 310A-310D kann außerdem über Speicherverbindungen 325A-325D mit einem Speichermodul oder einer Speichervorrichtung 326A-326D verbunden sein. Die Speichervorrichtungen 326A-326D können eine beliebige Graphikspeichertechnologie verwenden. Zum Beispiel können die Speichervorrichtungen 326A-326D Graphikspeicher mit doppelter Datenrate (GDDR-Speicher) sein. Die Speichervorrichtungen 326A-326D sind in einer Ausführungsform Speichermodule mit großer Bandbreite (HBM-Module), die mit ihrer entsprechenden Graphikmaschinenkachel 310A-310D chipintern sein können. In einer Ausführungsform sind die Speichervorrichtungen 326A-326D gestapelte Speichervorrichtungen, die auf ihre entsprechenden Graphikmaschinenkacheln 310A-310D gestapelt sein können. In einer Ausführungsform befinden sich jede Graphikmaschinenkachel 310A-310D und der zugeordnete Speicher 326A-326D auf getrennten Chiplets, die mit einem Grundchip oder einem Grundsubstrat verbunden sind, wie in 11B-11D genauer beschrieben wird.
  • Das Graphikverarbeitungsmaschinen-Cluster 322 kann mit einer chipinternen oder baugruppeninternen Strukturverbindung 324 verbunden sein. Die Strukturverbindung 324 kann eine Kommunikation zwischen Graphikmaschinenkacheln 310A-310D und Komponenten wie z. B. der Video-Codec 306 und eine oder mehrere Kopiermaschinen 304 ermöglichen. Die Kopiermaschinen 304 können verwendet werden, um Daten aus, in und zwischen den Speichervorrichtungen 326A-326D und einem Speicher, der außerhalb des Graphikprozessors 320 liegt (z. B. Systemspeicher), zu bewegen. Die Strukturverbindung 324 kann außerdem verwendet werden, um die Graphikmaschinenkacheln 310A-310D zu verbinden. Der Graphikprozessor 320 kann wahlweise einen Anzeige-Controller 302 enthalten, um eine Verbindung mit einer externen Anzeigevorrichtung 318 zu ermöglichen. Der Graphikprozessor kann außerdem als ein Graphik- oder Rechenbeschleuniger konfiguriert sein. In der Beschleunigerkonfiguration können der Anzeige-Controller 302 und die Anzeigevorrichtung 318 ausgelassen werden.
  • Der Graphikprozessor 320 kann mittels einer Host-Schnittstelle 328 mit einem Host-System verbunden sein. Die Host-Schnittstelle 328 kann eine Kommunikation zwischen dem Graphikprozessor 320, einem Systemspeicher und/oder weiteren Systemkomponenten ermöglichen. Die Host-Schnittstelle 328 kann z. B. ein PCI-Express-Bus oder ein weiterer Typ einer Host-Systemschnittstelle sein.
  • 3C stellt einen Rechenbeschleuniger 330 gemäß hier beschriebenen Ausführungsformen dar. Der Rechenbeschleuniger 330 kann Architekturähnlichkeiten mit dem Graphikprozessor 320 von 3B enthalten und ist zur Rechenbeschleunigung optimiert. Ein Rechenmaschinen-Cluster 332 kann einen Satz Rechenmaschinenkacheln 340A-340D enthalten, die eine Ausführungslogik enthalten, die für parallel oder vektorbasierte allgemein verwendbare Rechenoperationen optimiert ist. In einigen Ausführungsformen enthalten die Rechenmaschinenkacheln 340A-340D keine Graphikverarbeitungslogik mit fester Funktion, obwohl in einer Ausführungsform eine oder mehrere Rechenmaschinenkacheln 340A-340D eine Logik zum Durchführen einer Medienbeschleunigung enthalten können. Die Rechenmaschinenkacheln 340A-340D können mittels Speicherverbindungen 325A-325D mit einem Speicher 326A-326D verbunden sein. Der Speicher 326A-326D und die Speicherverbindungen 325A-325D können eine ähnliche Technologie wie im Graphikprozessor 320 sein oder können verschieden sein. Die Graphikrechenmaschinenkacheln 340A-340D können auch mittels eines Satzes Kachelverbindungen 323A-323F verbunden sein und können mit einer Strukturverbindung 324 verbunden sein und/oder durch sie verbunden sein. In einer Ausführungsform enthält der Rechenbeschleuniger 330 einen großen L3-Zwischenspeicher 336, der als ein vorrichtungsweiter Zwischenspeicher konfiguriert ist. Der Rechenbeschleuniger 330 kann auch mit einem Host-Prozessor und einem Host-Speicher über eine Host-Schnittstelle 328 auf eine ähnliche Weise wie der Graphikprozessor 320 von 3B verbunden sein.
  • Graphikverarbeitungsmaschine
  • 4 ist ein Blockdiagramm einer Graphikverarbeitungsmaschine 410 eines Graphikprozessors gemäß einigen Ausführungsformen. In einer Ausführungsform ist die Graphikverarbeitungsmaschine (GPE) 410 eine Version der GPE 310, die in 3A gezeigt ist, und kann außerdem eine Graphikmaschinenkachel 310A-310D von 3B repräsentieren. Die Elemente von 4, die dieselben Bezugszeichen (oder Namen) wie die Elemente einer beliebigen weiteren Figur hier besitzen, können in einer beliebigen Weise, die der an anderen Stellen hier Beschriebenen ähnlich ist, arbeiten oder wirken, sind jedoch nicht darauf beschränkt. Zum Beispiel sind die 3D-Pipeline 312 und die Medien-Pipeline 316 von 3A dargestellt. Die Medien-Pipeline 316 ist in einigen Ausführungsformen der GPE 410 optional und muss nicht ausdrücklich in der GPE 410 enthalten sein. Zum Beispiel und in mindestens einer Ausführungsform ist ein getrennter Medien- und/oder Bildprozessor an die GPE 410 gekoppelt.
  • In einigen Ausführungsformen ist die GPE 410 an einen Anweisungs-Streamer 403, der einen Anweisungsstrom zu der 3D-Pipeline 312 und/oder den Medien-Pipelines 316 liefert, gekoppelt oder enthält ihn. In einigen Ausführungsformen ist der Anweisungs-Streamer 403 an einen Speicher, der ein Systemspeicher sein kann, oder einen oder mehrere interne Zwischenspeicher und einen gemeinsam verwendeten Zwischenspeicher gekoppelt. In einigen Ausführungsformen empfängt der Anweisungs-Streamer 403 Anweisungen vom Speicher und sendet die Anweisungen zur 3D-Pipeline 312 und/oder zur Medien-Pipeline 316. Die Anweisungen sind Richtlinien, die aus einem Ringpuffer, in dem Anweisungen für die 3D-Pipeline 312 und die Medien-Pipeline 316 gespeichert sind, geholt werden. In einer Ausführungsform kann der Ringpuffer zusätzlich Stapelanweisungspuffer enthalten, in denen Stapel mehrerer Anweisungen gespeichert sind. Die Anweisungen für die 3D-Pipeline 312 können außerdem Bezüge auf Daten, die in einem Speicher gespeichert sind, wie z. B. aber nicht beschränkt auf Scheitelpunkt- und Geometriedaten für die 3D-Pipeline 312 und/oder Bilddaten und Speicherobjekte für die Medien-Pipeline 316 enthalten. Die 3D-Pipeline 312 und die Medien-Pipeline 316 verarbeiten die Anweisungen und die Daten durch Durchführen von Operationen mittels einer Logik in den entsprechenden Pipelines oder durch Ausliefern eines oder mehrerer Ausführungs-Threads zu einer Graphikkernanordnung 414. In einer Ausführungsform enthält die Graphikkernanordnung 414 einen oder mehrere Blöcke von Graphikkernen (z. B. einen oder mehrere Graphikkerne 415A oder einen oder mehrere Graphikkerne 415B), wobei jeder Block einen oder mehrere Graphikkerne enthält. Jeder Graphikkern enthält einen Satz Graphikausführungsbetriebsmittel, der eine allgemein verwendbare und eine graphikspezifische Ausführungslogik enthält, um Graphik- und Rechenoperationen durchzuführen, sowie eine Texturverarbeitungslogik mit fester Funktion und/oder eine Beschleunigungslogik für maschinelles Lernen und künstliche Intelligenz.
  • In verschiedenen Ausführungsformen kann die 3D-Pipeline 312 eine Logik mit fester Funktion und eine programmierbare Logik enthalten, um ein oder mehrere Schattiererprogramme wie z. B. Scheitelpunktschattierer, Geometrieschattierer, Pixelschattierer, Fragmentschattierer, Rechenschattierer oder weitere Schattiererprogramme durch Verarbeiten der Befehle und Ausliefern von Ausführungs-Threads zur Graphikkernanordnung 414 zu verarbeiten. Die Graphikkernanordnung 414 schafft einen einheitlichen Block von Ausführungsbetriebsmitteln zur Verwendung bei der Verarbeitung dieser Schattiererprogramme. Eine Mehrzweckausführungslogik (z. B. Ausführungseinheiten) in dem einen oder den mehreren Graphikkernen 415A-414B der Graphikkernanordnung 414 enthält eine Unterstützung für verschiedene 3D-API-Schattierersprachen und kann mehrere gleichzeitige Ausführungs-Threads, die mehreren Schattierern zugeordnet sind, ausführen.
  • In einigen Ausführungsformen enthält die Graphikkernanordnung 414 eine Ausführungslogik, um Medienfunktionen wie z. B. Video- und/oder Bildbearbeitung durchzuführen. In einer Ausführungsform enthalten die Ausführungseinheiten eine allgemein verwendbare Logik, die programmierbar ist, parallele allgemein verwendbare Rechenoperationen zusätzlich zu Graphikverarbeitungsoperationen durchzuführen. Die allgemein verwendbare Logik kann Verarbeitungsoperationen parallel oder in Verbindung mit einer allgemein verwendbaren Logik in dem einen oder den mehreren Prozessorkernen 107 von 1 oder im Kern 202A-202N wie in 2A durchführen.
  • Ausgangsdaten, die durch Threads erzeugt werden, die in der Graphikkernanordnung 414 ausgeführt werden, können Daten in einem einheitlichen Rückgabepuffer (URB) 418 zu einem Speicher ausgeben. Der URB 418 kann Daten für mehrere Threads speichern. In einigen Ausführungsformen kann der URB 418 verwendet werden, um Daten zwischen verschiedenen Threads, die in der Graphikkernanordnung 414 ausgeführt werden, zu senden. In einigen Ausführungsformen kann der URB 418 zusätzlich zur Synchronisation zwischen Threads in der Graphikkernanordnung und einer Logik mit fester Funktion in der gemeinsam verwendeten Funktionslogik 420 verwendet werden.
  • In einigen Ausführungsformen ist die Graphikkernanordnung 414 derart, dass die Anordnung eine veränderbare Anzahl Graphikkerne enthält, die jeweils eine veränderbare Anzahl Ausführungseinheiten besitzen, auf der Grundlage der Soll-Leistung und des Leistungsniveaus der GPE 410 skalierbar. In einer Ausführungsform sind die Ausführungsbetriebsmittel derart dynamisch skalierbar, dass die Ausführungsbetriebsmittel nach Bedarf aktiviert oder deaktiviert werden können.
  • Die Graphikkernanordnung 414 ist an eine gemeinsam verwendete Funktionslogik 420 gekoppelt, die mehrere Betriebsmittel enthält, die zwischen den Graphikkernen in der Graphikkernanordnung gemeinsam verwendet werden. Die in der gemeinsam verwendeten Funktionslogik 420 gemeinsam verwendeten Funktionen sind Hardware-Logikeinheiten, die der Graphikkernanordnung 414 eine spezialisierte ergänzende Funktionalität bereitstellen. In verschiedenen Ausführungsformen enthält eine gemeinsam verwendete Funktionslogik 420 eine Abtastlogik 421, eine Mathematiklogik 422 und eine Logik 423 zur Kommunikation zwischen Threads (ITC-Logik), ist jedoch nicht darauf beschränkt. Zusätzlich implementieren einige Ausführungsformen einen oder mehrere Zwischenspeicher 425 in der gemeinsam verwendeten Funktionslogik 420.
  • Eine gemeinsam verwendete Funktion wird mindestens in einem Fall implementiert, in dem ein Bedarf einer gegebenen spezialisierten Funktion zur Einbeziehung in die Graphikkernanordnung 414 unzureichend ist. Stattdessen ist eine einzelne Instanziierung dieser spezialisierten Funktion als eine eigenständige Einheit in der gemeinsam verwendeten Funktionslogik 420 implementiert und wird zwischen den Ausführungsbetriebsmitteln in der Graphikkernanordnung 414 gemeinsam verwendet. Der genaue Satz Funktionen, die zwischen der Graphikkernanordnung 414 gemeinsam verwendet werden und in die Graphikkernanordnung 414 aufgenommen werden, unterscheidet sich zwischen Ausführungsformen. In einigen Ausführungsformen können bestimmte gemeinsam verwendete Funktionen in der gemeinsam verwendeten Funktionslogik 420, die durch die Graphikkernanordnung 414 ausgiebig verwendet werden, in der gemeinsam verwendeten Funktionslogik 416 in der Graphikkernanordnung 414 enthalten sein. In verschiedenen Ausführungsformen kann die gemeinsam verwendete Funktionslogik 416 in der Graphikkernanordnung 414 eine gewisse oder die gesamte Logik in der gemeinsam verwendeten Funktionslogik 420 enthalten. In einer Ausführungsform können alle Logikelemente in der gemeinsam verwendeten Funktionslogik 420 in der gemeinsam verwendeten Funktionslogik 416 der Graphikkernanordnung 414 dupliziert sein. In einer Ausführungsform ist die gemeinsam verwendete Funktionslogik 420 zugunsten der gemeinsam verwendeten Funktionslogik 416 in der Graphikkernanordnung 414 herausgenommen.
  • Ausführungseinheiten
  • 5A-5B stellen eine Thread-Ausführungslogik 500, die eine Anordnung von Verarbeitungselementen, die in einem Graphikprozessorkern eingesetzt werden, enthält, gemäß hier beschriebenen Ausführungsformen dar. Die Elemente von 5A-5B, die dieselben Bezugszeichen (oder Namen) wie die Elemente einer beliebigen weiteren Figur hier besitzen, können in einer beliebigen Weise, die der an anderen Stellen hier Beschriebenen ähnlich ist, arbeiten oder wirken, sind jedoch nicht darauf beschränkt. 5A-5B stellen eine Übersicht einer Thread-Ausführungslogik 500 dar, die eine Hardware-Logik repräsentieren kann, die mit jedem Unterkern 221A-221F von 2B dargestellt ist. 5A repräsentiert eine Ausführungseinheit in einem allgemein verwendbaren Graphikprozessor, während 5B eine Ausführungseinheit repräsentiert, die in einem Rechenbeschleuniger verwendet werden kann.
  • Wie in 5A dargestellt ist, enthält in einigen Ausführungsformen die Thread-Ausführungslogik 500 einen Schattiererprozessor 502, einen Thread-Disponenten 504, einen Befehlszwischenspeicher 506, eine skalierbare Ausführungseinheitsanordnung, die mehrere Ausführungseinheiten 508A-508N enthält, eine Abtasteinrichtung 510, einen gemeinsam verwendeten lokalen Speicher 511, einen Datenzwischenspeicher 512 und einen Datenanschluss 514. In einer Ausführungsform kann die skalierbare Ausführungseinheitsanordnung durch Aktivieren oder Deaktivieren einer oder mehrerer Ausführungseinheiten (z. B. beliebige der Ausführungseinheiten 508A, 508B, 508C, 508D bis 508N-1 und 508N) auf der Grundlage der Rechenbetriebsmittel einer Arbeitslast dynamisch skaliert werden. In einer Ausführungsform sind die aufgenommenen Komponenten mittels einer Verbindungsstruktur, die zu weiteren der Komponenten verbindet, verbunden. In einigen Ausführungsformen enthält die Thread-Ausführungslogik 500 eine oder mehrere Verbindungen zu einem Speicher wie z. B. einem Systemspeicher oder einem Zwischenspeicher durch einen Befehlszwischenspeicher 506 und/oder einen Datenanschluss 514 und/oder eine Abtasteinrichtung 510 und/oder Ausführungseinheiten 508A-508N. In einigen Ausführungsformen ist jede Ausführungseinheit (z. B. 508A) eine eigenständige programmierbare allgemein verwendbare Recheneinheit, die mehrere gleichzeitige Hardware-Threads ausführen kann, während mehrere Datenelemente für jeden Thread parallel verarbeitet werden. In verschiedenen Ausführungsformen ist die Anordnung von Ausführungseinheiten 508A-508N skalierbar, eine beliebige Anzahl einzelner Ausführungseinheiten zu enthalten.
  • In einigen Ausführungsformen werden die Ausführungseinheiten 508A-508N im Wesentlichen verwendet, um Schattiererprogramme auszuführen. Ein Schattiererprozessor 502 kann die verschiedenen Schattiererprogramme verarbeiten und Ausführungs-Threads, die mit den Schattiererprogrammen verbunden sind, mittels eines Thread-Disponenten 504 ausliefern. In einer Ausführungsform enthält der Thread-Disponent eine Logik, um Thread-Initiierungsanforderungen von den Graphik- und Medien-Pipelines zu arbitrieren und die angeforderten Threads in einer oder mehreren Ausführungseinheiten in den Ausführungseinheiten 508A-508N zu instanziieren. Zum Beispiel kann eine Geometrie-Pipeline Scheitelpunkt-, Mosaik- oder Geometrieschattierer zur Thread-Ausführungslogik zur Verarbeitung ausliefern. In einigen Ausführungsformen kann der Thread-Disponent 504 außerdem Laufzeit-Thread-Spawn-Anforderungen von den ausführenden Schattiererprogrammen verarbeiten.
  • In einigen Ausführungsformen unterstützen die Ausführungseinheiten 508A-508N einen Befehlssatz, der eine native Unterstützung für viele Norm-3D-Graphikschattierbefehle enthält, derart, dass Schattiererprogramme aus Graphikbibliotheken (z. B. „Direct 3D“ und „OpenGL“) mit einer minimalen Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen eine Scheitelpunkt- und Geometrieverarbeitung (z. B. Scheitelpunktprogramme, Geometrieprogramme und Scheitelpunktschattierer), eine Pixelverarbeitung (z. B. Pixelschattierer und Fragmentschattierer) und eine allgemein verwendbare Verarbeitung (z. B. Rechen- und Medienschattierer). Jede der Ausführungseinheiten 508A-508N ist in der Lage zu einer Mehrfachausgabe-Einzelbefehlsmehrfachdatenausführung (SIMD-Ausführung) und ein Mehrfach-Thread-Betrieb ermöglicht eine effiziente Ausführungsumgebung angesichts von Speicherzugriffen mit höherer Latenz. Jeder Hardware-Thread in jeder Ausführungseinheit besitzt eine fest zugeordnete Registerdatei mit hoher Bandbreite und einen zugeordneten unabhängigen Thread-Zustand. Die Ausführung ist eine Mehrfachausgabe pro Takt zu Pipelines, die zu Ganzzahloperationen, Gleitkommaoperationen mit einfacher und doppelter Genauigkeit, einer SIMD-Zweigfähigkeit, Logikoperationen, transzendenten Operationen und weiteren sonstigen Operationen in der Lage sind. Eine Abhängigkeitslogik bewirkt, während sie auf Daten aus einem Speicher oder von einer der gemeinsam verwendeten Funktionen wartet, in den Ausführungseinheiten 508A-508N, dass ein wartender Thread schläft, bis die angeforderten Daten zugrückgegeben wurden. Während der wartende Thread schläft, können Hardware-Betriebsmittel dem Verarbeiten weiterer Threads gewidmet werden. Zum Beispiel kann eine Ausführungseinheit während einer Verzögerung, die einer Scheitelpunktschattieroperation zugeordnet ist, Operationen für einen Pixelschattierer, einen Fragmentschattierer oder einen weiteren Typ eines Schattierprogramms, das einen verschiedenen Scheitelpunktschattierer enthält, durchführen. Verschiedene Ausführungsformen können die Verwendung der Ausführung unter Verwendung von Einzelbefehls-Mehrfach-Thread (SIMT) als eine Alternative zur Verwendung von SIMD oder zusätzlich zur Verwendung von SIMD anwenden. Bezugnahmen auf einen SIMD-Kern oder einen SIMD-Betrieb können auch für SIMT gelten oder für SIMD in Kombination mit SIMT gelten.
  • Jede Ausführungseinheit in den Ausführungseinheiten 508A-508N arbeitet an Anordnungen von Datenelementen. Die Anzahl von Datenelementen ist die „Ausführungsgröße“ oder die Anzahl von Kanälen für den Befehl. Ein Ausführungskanal ist eine logische Einheit der Ausführung für einen Datenelementzugriff, eine Datenelementmaskierung und eine Datenelementablaufsteuerung in Befehlen. Die Anzahl von Kanälen kann von der Anzahl physischer Arithmetik/LogikEinheiten (ALUs) oder Gleitkommaeinheiten (FPUs) für einen bestimmten Graphikprozessor unabhängig sein. In einigen Ausführungsformen unterstützen die Ausführungseinheiten 508A-508N Ganzzahl- und Gleitkommadatentypen.
  • Der Ausführungseinheitsbefehlssatz enthält SIMD-Befehle. Die verschiedenen Datenelemente können als ein gekapselter Datentyp in einem Register gespeichert werden und die Ausführungseinheit wird die verschiedenen Elemente auf der Grundlage der Datengröße der Elemente verarbeiten. Zum Beispiel werden dann, wenn an einem 256 Bit breiten Vektor gearbeitet wird, die 256 Bit des Vektors in einem Register gespeichert und die Ausführungseinheit arbeitet am Vektor als vier getrennte 54 Bit-gekapselte Datenelemente (Datenelemente von Vierwortgröße (QW-Größe)), acht getrennte 32 Bit-gekapselte Datenelemente (Datenelemente von Doppelwortgröße (DW-Größe)), sechzehn getrennte 16 Bit-gekapselte Datenelemente (Datenelemente von Wortgröße (W-Größe)) oder zweiunddreißig getrennte 8 Bit-gekapselte Datenelemente (Datenelemente von Byte-Größe (B-Größe)). Allerdings sind verschiedene Vektorbreiten und Registergrößen möglich.
  • In einer Ausführungsform können eine und mehrere Ausführungseinheiten in eine fusionierte Ausführungseinheit 509A-509N, die eine Thread-Steuerlogik (507A-507N) besitzt, die für die fusionierten EUs gemeinsam ist, kombiniert werden. Mehrere EUs können zu einer EU-Gruppe fusioniert werden. Jede EU in der fusionierten EU-Gruppe kann konfiguriert sein, einen getrennten SIMD-Hardware-Thread auszuführen. Die Anzahl EUs in einer fusionierten EU-Gruppe kann gemäß Ausführungsformen variieren. Zusätzlich können verschiedene SIMD-Breiten pro EU durchgeführt werden, die SIMD8, SIMD16 und SIMD32 enthalten, jedoch nicht darauf beschränkt sind. Jede fusionierte Graphikausführungseinheit 509A-509N enthält mindestens zwei Ausführungseinheiten. Zum Beispiel enthält die fusionierte Ausführungseinheit 509A eine erste EU 508A, eine zweite EU 508B und eine Thread-Steuerlogik 507A, die für die erste EU 508A und die zweite EU 508B gemeinsam ist. Die Thread-Steuerlogik 507A steuert Threads, die in der fusionierten Ausführungseinheit 509A ausgeführt werden, was jeder EU in den fusionierten Ausführungseinheiten 509A-509N ermöglicht, unter Verwendung eines gemeinsamen Befehlszeigerregisters ausgeführt zu werden.
  • Ein oder mehrere interne Befehlszwischenspeicher (z. B. 506) sind in der Thread-Ausführungslogik 500 enthalten, um Thread-Befehle für die Ausführungseinheiten zwischenzuspeichern. In einigen Ausführungsformen sind ein oder mehrere Datenzwischenspeicher (z.B. 512) enthalten, um Thread-Daten während der Thread-Ausführung zwischenzuspeichern. Threads, die in der Ausführungslogik 500 ausgeführt werden, können außerdem ausdrücklich gemanagte Daten im gemeinsam verwendeten lokalen Speicher 511 speichern. In einige Ausführungsformen ist eine Abtasteinrichtung 510 aufgenommen, um eine Texturabtastung für 3D-Operationen und eine Medienabtastung für Medienoperationen bereitzustellen. In einigen Ausführungsformen enthält die Abtasteinrichtung 510 eine spezialisierte Textur- oder Medienabtastfunktionalität, um Textur- oder Mediendaten während des Abtastprozesses zu verarbeiten, bevor die abgetasteten Daten zu einer Ausführungseinheit geliefert werden.
  • Während der Ausführung senden die Graphik-Pipeline und die Medien-Pipeline Thread-Initiierungsanaforderungen mittels einer Logik zum Hervorbringen und Ausliefern von Threads zur Ausführungslogik 500. Wenn eine Gruppe geometrischer Objekte verarbeitet und in Pixeldaten gerastert worden ist, wird eine Pixelprozessorlogik (z. B. eine Pixelschattierlogik, eine Fragmentschattierlogik usw.) im Schattiererprozessor 502 aufgerufen, um ferner Ausgangsinformationen zu berechnen und zu bewirken, dass Ergebnisse zu Ausgabeflächen (z. B. Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.) geschrieben werden. In einigen Ausführungsformen berechnet ein Pixelschattierer oder ein Fragmentschattierer die Werte der verschiedenen Scheitelpunktmerkmale, die über das gerasterte Objekt interpoliert werden sollen. In einigen Ausführungsformen führt dann eine Pixelprozessorlogik im Schattiererprozessor 502 ein von einer Anwendungsprogrammierschnittstelle versorgtes (APIversorgtes) Pixel- oder Fragmentschattierprogramm aus. Um das Schattierprogramm auszuführen, liefert der Schattiererprozessor 502 Threads mittels des Thread-Disponenten 504 zu einer Ausführungseinheit (z. B. 508A) aus. In einigen Ausführungsformen verwendet der Schattiererprozessor 502 eine Texturabtastlogik in der Abtasteinrichtung 510, um auf Texturdaten in Texturkarten, die in einem Speicher gespeichert sind, zuzugreifen. Arithmetikoperationen an den Texturdaten und den Eingangsgeometriedaten berechnen Pixelfarbdaten für jedes geometrische Fragment oder streichen ein oder mehrere Pixel aus der weiteren Verarbeitung.
  • In einigen Ausführungsformen schafft der Datenanschluss 514 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 500, um verarbeitete Daten zu einem Speicher zur weiteren Verarbeitung in einer Graphikprozessorausgabe-Pipeline auszugeben. In einigen Ausführungsformen enthält der Datenanschluss 514 einen oder mehrere Zwischenspeicher (z. B. den Datenzwischenspeicher 512), um Daten zum Speicherzugriff über den Datenanschluss zwischenzuspeichern, oder koppelt daran.
  • In einer Ausführungsform kann die Ausführungslogik 500 außerdem eine Strahlverfolgungsvorrichtung 505 enthalten, die eine Strahlverfolgungsbeschleunigungsfunktionalität bereitstellen kann. Die Strahlverfolgungsvorrichtung 505 kann einen Strahlverfolgungsbefehlssatz, der Befehle/Funktionen zur Strahlverfolgung enthält, unterstützen. Der Strahlverfolgungsbefehlssatz kann ähnlich dem Strahlverfolgungsbefehlssatz, der durch die Strahlverfolgungskerne 245 in 2C unterstützt wird, oder von ihm verschieden sein.
  • 5B stellt beispielhafte interne Details einer Ausführungseinheit 508 gemäß Ausführungsformen dar. Eine Graphikausführungseinheit 508 kann eine Befehlsabrufeinheit 537, eine Hauptregisterdateianordnung (GRF) 524, eine Architekturregisterdateianordnung (ARF) 526, einen Thread-Vermittler 522, eine Sendeeinheit 530, eine Zweigeinheit 532, einen Satz SIMD-Gleitkommaeinheiten (FPUs) 534 und in einer Ausführungsform einen Satz fest zugeordneter Ganzzahl-SIMD-ALUs 535 enthalten. Die GRF 524 und die ARF 526 enthalten den Satz Hauptregisterdateien und Architekturregisterdateien, die jedem gleichzeitigen Hardware-Thread, der in der Graphikausführungseinheit 508 aktiv sein kann, zugeordnet sind. In einer Ausführungsform wird der Architekturzustand pro Thread in der ARF 526 gepflegt, während Daten, die während der Thread-Ausführung verwendet werden, in der GRF 524 gespeichert sind. Der Ausführungszustand jedes Threads, der die Ausführungszeiger für jeden Thread enthält, kann in den thread-spezifischen Registern in der ARF 526 enthalten sein.
  • In einer Ausführungsform besitzt die Graphikausführungseinheit 508 eine Architektur, die eine Kombination von gleichzeitigen Mehrfach-Threading (SMT) und feinkörnigem verschachtelten Mehrfach-Threadings (IMT) ist. Die Architektur besitzt eine modulare Konfiguration, die zur Entwurfszeit auf der Grundlage einer Soll-Anzahl gleichzeitiger Threads und der Anzahl von Registern pro Ausführungseinheit feinabgestimmt werden kann, wobei Ausführungseinheitsbetriebsmittel über eine Logik verteilt sind, die zum Ausführen mehrerer gleichzeitiger Threads verwendet wird. Die Anzahl logischer Threads, die durch die Graphikausführungseinheit 508 ausgeführt werden können, ist nicht auf die Anzahl von Hardware-Threads beschränkt und jedem Hardware-Thread können mehrere logische Threads zugeordnet werden.
  • In einer Ausführungsform kann die Graphikausführungseinheit 508 mehrere Befehle, die jeweils verschiedene Befehle sein können, mitausgeben. Der Thread-Vermittler 522 der Graphikausführungseinheit 508 kann die Befehle zu der Sendeeinheit 530 oder der Zweigeinheit 532 oder der einen oder den mehreren SIMD-FPUs 534 zur Ausführung ausliefern. Jeder Ausführungs-Thread kann auf allgemein verwendbare Register in der GRF 524 zugreifen 128, wobei jedes Register 32 Byte, die als ein SIMD-8-Elementvektor aus 32 Bit-Datenelementen zugänglich sind, speichern kann. In einer Ausführungsform besitzt jeder Ausführungseinheits-Thread Zugriff auf 4 kByte im GRF 524, obwohl Ausführungsformen nicht derart beschränkt sind, und mehr oder weniger Registerbetriebsmittel können in weiteren Ausführungsformen vorgesehen sein. In einer Ausführungsform ist die Graphikausführungseinheit 508 in sieben Hardware-Threads unterteilt, die Rechenoperationen unabhängig durchführen können, obwohl sich die Anzahl von Threads pro Ausführungseinheit außerdem gemäß Ausführungsformen unterscheiden kann. Zum Beispiel werden in einer Ausführungsform bis zu 16 Hardware-Threads unterstützt. In einer Ausführungsform, in der sieben Threads auf 4 kByte zugreifen können, kann die GRF 524 insgesamt 28 kByte speichern. Wo 16 Threads auf 4 kByte zugreifen können, kann die GRF 524 insgesamt 64 kByte speichern. Flexible Adressierungsmodi können Registern ermöglichen, gemeinsam adressiert zu werden, um breitere Register wirksam bilden zu können oder um ausgreifende rechteckige Blockdatenstrukturen zu repräsentieren.
  • In einer Ausführungsform werden Speicheroperationen, Abtasteinrichtungsoperationen und weitere Systemkommunikationen mit größerer Latenz mittels „Senden“-Befehlen, die durch die nachrichtenweiterleitende Sendeeinheit 530 ausgeführt werden, ausgeliefert. In einer Ausführungsform werden Zweigbefehle zu einer fest zugeordneten Zweigeinheit 532 ausgeliefert, um eine SIMD-Divergenz und letztendlich Konvergenz zu ermöglichen.
  • In einer Ausführungsform enthält die Graphikausführungseinheit 508 eine oder mehrere SIMD-Gleitkommaeinheiten (FPUs) 534, um Gleitkommaoperationen durchzuführen. In einer Ausführungsform unterstützen die eine oder die mehreren FPUs 534 außerdem eine Ganzzahlberechnung. In einer Ausführungsform können die eine oder die mehreren FPUs 534 bis zu einer Anzahl von M 32 Bit-Gleitkommaoperationen (oder Ganzzahloperationen) SIMD-ausführen oder bis zu 2M 16 Bit-Ganzzahl- oder 16 Bit-Gleitkommaoperationen SIMD-ausführen. In einer Ausführungsform stellt mindestens eine der einen oder der mehreren FPUs eine erweiterte Mathematikleistungsfähigkeit bereit, um transzendente Mathematikfunktionen mit hohem Durchsatz und doppelter 54 Bit-Gleitkommagenauigkeit zu unterstützen. In einigen Ausführungsformen ist auch ein Satz 8 Bit-Ganzzahl-SIMD-ALUs 535 vorhanden und kann speziell optimiert sein, um Operationen, die mit Berechnungen für maschinelles Lernen verbunden sind, durchzuführen.
  • In einer Ausführungsform können Anordnungen mehrerer Instanzen der Graphikausführungseinheit 508 in einer Graphikunterkerngruppierung (z. B. ein Unterabschnitt) instanziiert werden. Zur Skalierbarkeit können Produktarchitekten die genaue Anzahl von Ausführungseinheiten pro Unterkerngruppierung wählen. In einer Ausführungsform kann die Ausführungseinheit 508 Befehle über mehrere Ausführungskanäle ausführen. In einer weiteren Ausführungsform wird jeder Thread, der in der Graphikausführungseinheit 508 ausgeführt wird, in einem verschiedenen Kanal ausgeführt.
  • 6 stellt eine zusätzliche Ausführungseinheit 600 gemäß einer Ausführungsform dar. Die Ausführungseinheit 600 kann eine rechenoptimierte Ausführungseinheit zur Verwendung z. B. in einer Rechenmaschinenkachel 340A-340D wie in 3C sein, ist jedoch nicht derart beschränkt. Varianten der Ausführungseinheit 600 können außerdem in einer Graphikmaschinenkachel 310A-310D wie in 3B verwendet werden. In einer Ausführungsform enthält die Ausführungseinheit 600 eine Thread-Steuereinheit 601, eine Thread-Zustandseinheit 602, eine Befehlsabruf-/Befehlsvorabruf-Einheit 603 und eine Befehlsdecodierungseinheit 604. Die Ausführungseinheit 600 enthält zusätzlich eine Registerdatei 606, in der Register gespeichert sind, die Hardware-Threads in der Ausführungseinheit zugewiesen werden können. Die Ausführungseinheit 600 enthält zusätzlich eine Sendeeinheit 607 und eine Zweigeinheit 608. In einer Ausführungsform können die Sendeeinheit 607 und die Zweigeinheit 608 ähnlich wie die Sendeeinheit 530 und eine Zweigeinheit 532 der Graphikausführungseinheit 508 von 5B arbeiten.
  • Die Ausführungseinheit 600 enthält außerdem eine Recheneinheit 610, die mehrere verschiedene Typen Funktionseinheiten enthält. In einer Ausführungsform enthält die Recheneinheit 610 eine ALU-Einheit 611, die eine Anordnung von Arithmetik/Logik-Einheiten enthält. Die ALU-Einheit 611 kann konfiguriert sein, 64 Bit-, 32 Bit- und 16 Bit-Ganzzahloperationen und Gleitkommaoperationen durchzuführen. Ganzzahloperationen und Gleitkommaoperationen können gleichzeitig durchgeführt werden. Die Recheneinheit 610 kann außerdem eine systolische Anordnung 612 und eine Mathematikeinheit 613 enthalten. Die systolische Anordnung 612 enthält ein Netz von Datenverarbeitungseinheiten der Breite W und der Tiefe D, das verwendet werden kann, um Vektoroperationen oder weitere datenparallele Operationen in einer systolischen Weise durchzuführen. In einer Ausführungsform kann die systolische Anordnung 612 konfiguriert sein, Matrixoperationen wie z. B. Skalarproduktoperationen durchzuführen. In einer Ausführungsform unterstützt die systolische Anordnung 612 16 Bit-Gleitkommaoperationen sowie 8 Bit- und 4 Bit-Ganzzahloperationen. In einer Ausführungsform kann die systolische Anordnung 612 konfiguriert sein, Operationen für maschinelles Lernen zu beschleunigen. In derartigen Ausführungsformen kann die systolische Anordnung 612 für das bfloat-16 Bit-Gleitkommaformat konfiguriert sein. In einer Ausführungsform kann eine Mathematikeinheit 613 enthalten sein, um eine bestimmte Untermenge mathematischer Operationen in einer effizienten Weise und mit geringerer Energie als die ALU-Einheit 611 durchzuführen. Die Mathematikeinheit 613 kann eine Variante der Mathematiklogik, die in einer gemeinsam verwendeten Funktionslogik einer Graphikverarbeitungsmaschine, die durch weitere Ausführungsformen bereitgestellt wird (z. B. die Mathematiklogik 422 der gemeinsam verwendeten Funktionslogik 420 von 4), gefunden werden kann, enthalten. In einer Ausführungsform kann die Mathematikeinheit 613 konfiguriert sein, 32 Bit- und 64 Bit-Gleitkommaoperationen durchzuführen.
  • Die Thread-Steuereinheit 601 enthält eine Logik, um die Ausführung von Threads in der Ausführungseinheit zu steuern. Die Thread-Steuereinheit 601 kann eine Thread-Schlichtungslogik enthalten, um eine Ausführung von Threads in der Ausführungseinheit 600 zu starten, zu stoppen und zu unterbrechen. Die Thread-Zustandseinheit 602 kann verwendet werden, um einen Thread-Zustand für Threads, die zum Ausführen in der Ausführungseinheit 600 zugewiesen wurden, zu speichern. Das Speichern des Thread-Zustands in der Ausführungseinheit 600 ermöglicht die schnelle Unterbrechung von Threads, wenn diese Threads blockiert oder untätig werden. Die Befehlsabruf-/Befehlsvorabruf-Einheit 603 kann Befehle aus einem Befehlszwischenspeicher einer übergeordneten Ausführungslogik (z. B. der Befehlszwischenspeicher 506 wie in 5A) abrufen. Die Befehlsabruf-/Befehlsvorabruf-Einheit 603 kann außerdem Vorabrufanforderungen, damit Befehle in den Befehlszwischenspeicher geladen werden, auf der Grundlage einer Analyse gegenwärtig ausgeführter Threads ausgeben. Die Befehlsdecodierungseinheit 604 kann verwendet werden, um Befehle zu decodieren, die durch die Recheneinheiten ausgeführt werden sollen. In einer Ausführungsform kann die Befehlsdecodierungseinheit 604 als ein sekundärer Decoder verwendet werden, um komplexe Befehle in einzelne Mikrooperationen zu decodieren.
  • Die Ausführungseinheit 600 enthält zusätzlich eine Registerdatei 606, die durch Hardware-Threads, die in der Ausführungseinheit 600 ausgeführt werden, verwendet werden kann. Register in der Registerdatei 606 können über die die Logik geteilt werden, die verwendet wird, um mehrere gleichzeitige Threads in der Recheneinheit 610 der Ausführungseinheit 600 auszuführen. Die Anzahl logischer Threads, die durch die Graphikausführungseinheit 600 ausgeführt werden können, ist nicht auf die Anzahl von Hardware-Threads beschränkt und mehrere logische Threads können jedem Hardware-Thread zugewiesen werden. Die Größe der Registerdatei 606 kann sich über Ausführungsformen auf der Grundlage der Anzahl unterstützter Hardware-Threads unterscheiden. In einer Ausführungsform kann eine Registerumbenennung verwendet werden, um Hardware-Threads Registern dynamisch zuzuordnen.
  • 7 ist ein Blockdiagramm, das ein Graphikprozessorbefehlsformat 700 gemäß einigen Ausführungsformen darstellt. In einer oder mehreren Ausführungsformen unterstützen die Graphikprozessorausführungseinheiten einen Befehlssatz, der Befehle in mehrere Formaten besitzt. Die Kästen aus durchgezogenen Linien stellen die Komponenten dar, die im Wesentlichen in einem Ausführungseinheitsbefehl enthalten sind, während die gestrichelten Linien Komponenten enthalten, die optional sind oder die lediglich in einer Untermenge der Befehle enthalten sind. In einigen Ausführungsformen besteht das beschriebene und dargestellte Befehlsformat 700 aus Makrobefehlen, dahingehend, dass sie Befehle sind, die der Ausführungseinheit zugeführt werden, im Gegensatz zu Mikrooperationen, die aus einer Befehlsdecodierung resultieren, wenn der Befehl verarbeitet wird.
  • In einigen Ausführungsformen unterstützen die Graphikprozessorausführungseinheiten nativ Befehle in einem 128 Bit-Befehlsformat 710. Ein auf 64 Bit verdichtetes Befehlsformat 730 ist für einige Befehle auf der Grundlage des gewählten Befehls, der Befehlsoptionen und der Anzahl von Operanden verfügbar. Das native 128 Bit-Befehlsformat 710 stellt einen Zugriff auf alle Befehlsoptionen bereit, während einige Optionen und Operationen im 64 Bit-Befehlsformat 730 beschränkt sind. Die nativen Befehle, die im 64 Bit-Befehlsformat 730 verfügbar sind, unterscheiden sich je nach Ausführungsform. In einigen Ausführungsformen wird der Befehl teilweise unter Verwendung eines Satzes von Indexwerten in einem Indexfeld 713 verdichtet. Die Ausführungseinheits-Hardware referenziert einen Satz Verdichtungstabellen auf der Grundlage der Indexwerte und verwendet die Verdichtungstabellenausgaben, um einen nativen Befehl im 128 Bit-Befehlsformat 710 zu rekonstruieren. Weitere Größen und Formate von Befehlen können verwendet werden.
  • Für jedes Format definiert der Befehlscode 712 die Operation, die die Ausführungseinheit durchführen soll. Die Ausführungseinheiten führen jeden Befehl parallel über die mehreren Datenelemente jedes Operanden aus. Zum Beispiel führt die Ausführungseinheit in Reaktion auf einen Addierbefehl eine gleichzeitige Addieroperation über jeden Farbkanal, der ein Texturelement oder ein Bildelement repräsentiert, durch. Standardmäßig führt die Ausführungseinheit jeden Befehl über alle Datenkanäle der Operanden durch. In einigen Ausführungsformen ermöglicht das Befehlssteuerfeld 714 eine Steuerung über bestimmte Ausführungsoptionen wie z. B. Kanalauswahl (z. B. Aussage) und Datenkanalreihenfolge (z. B. Umstellen). Für Befehle im 128 Bit-Befehlsformat 710 beschränkt ein Ausführungsgrößenfeld 716 die Anzahl Datenkanäle, die parallel ausgeführt werden. In einigen Ausführungsformen ist die Ausführungsgrößenfeld 716 nicht zur Verwendung im 64 Bit-Kompaktbefehlsformat 730 verfügbar.
  • Einige Ausführungseinheitsbefehle besitzen bis zu drei Operanden, die zwei Quelloperanden, src0 720, src1 722 und ein Ziel 718 enthalten. In einigen Ausführungsformen unterstützen die Ausführungseinheiten Doppelzielbefehle, wobei eines der Ziele impliziert ist. Datenmanipulationsbefehle können einen dritten Quelloperanden (z. B. SRC2 724) besitzen, wobei der Befehlscode 712 die Anzahl von Quelloperanden bestimmt. Der letzte Quelloperand eines Befehls kann ein unmittelbarer (z. B. fest eingebauter) Wert sein, der mit dem Befehl übergeben wird.
  • In einigen Ausführungsformen enthält das 128 Bit-Befehlsformat 710 ein Zugriffs-/Adressmodusfeld 726, das z. B. festlegt, ob ein direkter Registeradressierungsmodus oder ein indirekter Registeradressierungsmodus verwendet wird. Wenn ein direkter Registeradressierungsmodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden durch Bits im Befehl direkt bereitgestellt.
  • In einigen Ausführungsformen enthält das 128 Bit-Befehlsformat 710 ein Zugriffs-/Adressmodusfeld 726, das einen Adressmodus und/oder einen Zugriffsmodus für den Befehl festlegt. In einer Ausführungsform wird der Zugriffsmodus verwendet, um eine Datenzugriffsausrichtung für den Befehl zu definieren. Einige Ausführungsformen unterstützen Zugriffsmodi, die einen 16 Byte-ausgerichteten Zugriffsmodus und einen 1 Byte-ausgerichteten Zugriffsmodus enthalten, wobei die Byte-Ausrichtung des Zugriffsmodus die Zugriffsausrichtung der Befehlsoperanden bestimmt. Zum Beispiel kann der Befehl in einem ersten Modus eine Byte-ausgerichtete Adressierung für Quell- und Zieloperanden verwenden und kann der Befehl in einem zweiten Modus eine 16 Byte-ausgerichtete Adressierung für alle Quell- und Zieloperanden verwenden.
  • In einer Ausführungsformen bestimmt der Adressmodusabschnitt des Zugriffs-/Adressmodusfelds 726, ob der Befehl eine direkte oder eine indirekte Adressierung verwenden soll. Wenn ein direkter Registeradressierungsmodus verwendet wird, liefern Bits im Befehl direkt die Registeradresse eines oder mehrerer Operanden. Wenn ein indirekter Registeradressierungsmodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden auf der Grundlage eines Adressregisterwerts und eines unmittelbaren Adressfelds im Befehl berechnet werden.
  • In einigen Ausführungsformen sind Befehle auf der Grundlage eines Bit-Felds eines Befehlscodes 712 gruppiert, um ein Befehlscodedecodieren 740 zu vereinfachen. Für einen 8 Bit-Befehlscode ermöglichen die Bits 4, 5 und 6 der Ausführungseinheit, den Typ des Befehlscodes zu bestimmen. Die genaue Befehlscodegruppierung, die gezeigt ist, ist lediglich ein Beispiel. In einigen Ausführungsformen enthält eine Bewegungs- und Logik-Befehlscodegruppe 742 Datenbewegungs- und Logikbefehle (z. B. Bewegen (mov), Vergleichen (cmp)). In einigen Ausführungsformen verwendet die Bewegungs- und Logik-Gruppe 742 die fünf höchstwertigen Bits (MSB), wobei Bewegungsbefehle (mov-Befehle) in der Form von 0000xxxxb vorliegen und Logikbefehle in der Form von 0001xxxxb vorliegen. Eine Ablaufsteuerungsbefehlsgruppe 744 (z. B. Aufruf, Sprung (jmp)) enthält Befehle in der Form von 0010xxxxb (z. B. 0x20). Eine Befehlsgruppe 746 für Sonstiges enthält eine Mischung von Befehlen, die Synchronisationsbefehle (z. B. Warten, Senden) in der Form von 0011xxxxb (z. B. 0x30) enthält. Eine Befehlsgruppe 748 für parallele Mathematik enthält komponentenweise Arithmetikbefehle (z. B. Addieren, Multiplizieren (mul)) in der Form von 0100xxxxb (z. B. 0x40). Die Befehlsgruppe 748 für parallele Mathematik führt die Arithmetikoperationen über Datenkanäle parallel durch. Die Vektormathematikgruppe 750 enthält Arithmetikbefehle (z. B. dp4) in der Form von 0101xxxxb (z. B. 0x50). Die Vektormathematikgruppe führt Arithmetik wie z. B. Skalarproduktberechnungen an Vektoroperanden durch. Das dargestellte Befehlscodedecodieren 740 kann in einer Ausführungsform verwendet werden, um zu bestimmen, welcher Abschnitt einer Ausführungseinheit verwendet werden wird, um einen decodierten Befehl auszuführen. Zum Beispiel können einige Befehle als systolische Befehle festgelegt sein, die durch eine systolische Anordnung durchgeführt werden. Weitere Befehle wie z. B. Strahlverfolgungsbefehle (die nicht gezeigt sind) können zu einem Strahlverfolgungskern oder einer Strahlverfolgungslogik in einem Abschnitt oder einem Teilbereich einer Ausführungslogik geleitet werden.
  • Graphik-Pipeline
  • 8 ist ein Blockdiagramm einer weiteren Ausführungsform eines Graphikprozessors 800. Die Elemente von 8, die dieselben Bezugszeichen (oder Namen) wie die Elemente einer beliebigen weiteren Figur hier besitzen, können in einer beliebigen Weise, die der an anderen Stellen hier Beschriebenen ähnlich ist, arbeiten oder wirken, sind jedoch nicht darauf beschränkt.
  • In einigen Ausführungsformen enthält der Graphikprozessor 800 eine Geometrie-Pipeline 820, eine Medien-Pipeline 830, eine Anzeigemaschine 840, eine Thread-Ausführungslogik 850 und eine Renderausgabe-Pipeline 870. In einigen Ausführungsformen ist der Graphikprozessor 800 ein Graphikprozessor in einem Mehrkernverarbeitungssystem, das einen oder mehrere allgemein verwendbare Verarbeitungskerne enthält. Der Graphikprozessor wird durch Registerschreibvorgänge auf ein oder mehrere Steuerregister (die nicht gezeigt sind) oder über Anweisungen, die über eine Ringverbindung 802 zum Graphikprozessor 800 ausgegeben werden, gesteuert. In einigen Ausführungsformen koppelt die Ringverbindung 802 den Graphikprozessor 800 an weitere Verarbeitungskomponenten wie z. B. weitere Graphikprozessoren oder allgemein verwendbare Prozessoren. Anweisungen von der Ringverbindung 802 werden durch einen Anweisungs-Streamer 803, der Anweisungen zu individuellen Komponenten der Geometrie-Pipeline 820 oder der Medien-Pipeline 830 liefert, interpretiert.
  • In einigen Ausführungsformen leitet der Anweisungs-Streamer 803 den Betrieb einer Scheitelpunktabrufeinrichtung 805, die Scheitelpunktdaten aus einem Speicher liest und Scheitelpunktverarbeitungsanweisungen, die durch den Anweisungs-Streamer 803 geliefert werden, ausführt. In einigen Ausführungsformen liefert die Scheitelpunktabrufeinrichtung 805 Scheitelpunktdaten zu einem Scheitelpunktschattierer 807, der eine Koordinatenraumtransformation und Beleuchtungsoperationen an jedem Scheitelpunkt durchführt. In einigen Ausführungsformen führen die Scheitelpunktabrufeinrichtung 805 und der Scheitelpunktschattierer 807 Scheitelpunktverarbeitungsanweisungen durch Ausliefern von Ausführungs-Threads zu Ausführungseinheiten 852A-852B über einen Thread-Disponenten 831 aus.
  • In einigen Ausführungsformen sind die Ausführungseinheiten 852A-852B eine Anordnung von Vektorprozessoren, die einen Befehlssatz zum Durchführen von Graphik- und Medienoperationen besitzen. In einigen Ausführungsformen besitzen die Ausführungseinheiten 852A-852B einen angehängten L1-Zwischenspeicher 851, der für jede Anordnung spezifisch ist oder zwischen den Anordnungen gemeinsam verwendet wird. Der Zwischenspeicher kann als ein Datenzwischenspeicher, ein Befehlszwischenspeicher oder ein einzelner Zwischenspeicher, der partitioniert ist, um Daten und Befehle in verschiedenen Partitionen zu enthalten, konfiguriert sein.
  • In einigen Ausführungsformen enthält die Geometrie-Pipeline 820 Tessellierungskomponenten, um eine hardware-beschleunigte Tessellierung von 3D-Objekten durchzuführen. In einigen Ausführungsformen konfiguriert ein programmierbarer Rumpfschattierer 811 die Tessellierungsoperationen. Ein programmierbarer Domänenschattierer 817 stellt eine nachgeschaltete Bewertung einer Tessellierungsausgabe bereit. Ein Tessellator 813 arbeitet auf Anweisung des Rumpfschattierers 811 und enthält eine Logik für einen besonderen Zweck, um einen Satz detailreicher geometrischer Objekte auf der Grundlage eines groben geometrischen Modells, das als Eingabe zur Geometrie-Pipeline 820 geliefert wird, zu erzeugen. In einigen Ausführungsformen können, wenn keine Tessellierung verwendet wird, Tessellierungskomponenten (z. B. der Rumpfschattierer 811, der Tessellator 813 und der Domänenschattierer 817) umgangen werden.
  • In einigen Ausführungsformen können vollständige geometrische Objekte durch einen Geometrieschattierer 819 über einen oder mehrere Threads, die zu Ausführungseinheiten 852A-852B ausgeliefert werden, verarbeitet werden oder können direkt zum Begrenzer 829 fortschreiten. In einigen Ausführungsformen arbeitet der Geometrieschattierer an vollständigen geometrischen Objekten, anstatt Scheitelpunkten oder Stellen von Scheitelpunkten, wie in vorhergehenden Stufen der Graphik-Pipeline. Wenn die Tessellierung deaktiviert ist, empfängt der Geometrieschattierer 819 eine Eingabe vom Scheitelpunktschattierer 807. In einigen Ausführungsformen ist der Geometrieschattierer 819 durch ein Geometrieschattiererprogramm programmierbar, um eine Geometrietessellierung durchzuführen, wenn die Tessellierungseinheiten deaktiviert sind.
  • Vor der Rasterung verarbeitet ein Begrenzer 829 Scheitelpunktdaten. Der Begrenzer 829 kann ein Begrenzer mit fester Funktion oder ein programmierbarer Begrenzer, der Begrenzungs- und Geometrieschattiererfunktionen besitzt, sein. In einigen Ausführungsformen disponiert eine Rasterer- und Tiefenprüfungskomponente 873 in der Renderausgabe-Pipeline 870 Pixelschattierer, um die Geometrieobjekte in pixelweise Darstellungen umzuwandeln. In einigen Ausführungsformen ist eine Pixelschattiererlogik in der Thread-Ausführungslogik 850 enthalten. In einigen Ausführungsformen kann eine Anwendung die Rasterer- und Tiefenprüfungskomponente 873 umgehen und auf nicht gerasterte Scheitelpunktdaten über eine Stream-Ausgabeeinheit 823 zugreifen.
  • Der Graphikprozessor 800 besitzt einen Verbindungsbus, eine Verbindungsstruktur oder einen beliebigen weiteren Verbindungsmechanismus, der bzw. die ermöglicht, dass Daten und Nachrichten zwischen den Hauptkomponenten des Prozessors weitergeleitet werden. In einigen Ausführungsformen sind die Ausführungseinheiten 852A-852B und die zugeordneten Logikeinheiten (z. B. der L1-Zwischenspeicher 851, eine Abtasteinrichtung 854, ein Texturzwischenspeicher 858 usw.) mittels eines Datenanschlusses 856 verbunden, um einen Speicherzugriff durchzuführen und mit Renderausgabe-Pipeline-Komponenten des Prozessors zu kommunizieren. In einigen Ausführungsformen besitzen die Abtasteinrichtung 854, die Zwischenspeicher 851, 858 und die Ausführungseinheiten 852A-852B jeweils getrennte Speicherzugriffspfade. In einer Ausführungsform kann der Texturzwischenspeicher 858 auch als ein Abtasteinrichtungszwischenspeicher konfiguriert sein.
  • In einigen Ausführungsformen enthält die Renderausgabe-Pipeline 870 eine Rasterer- und Tiefenprüfungskomponente 873 die scheitelpunktbasierte Objekte in eine zugeordnete pixelbasierte Darstellung umwandelt. In einigen Ausführungsformen enthält die Rastererlogik eine Fensterungs-/Maskierungseinheit, um eine Dreiecks- und Linienrasterung mit fester Funktion durchzuführen. In einigen Ausführungsformen sind auch ein zugeordneter Renderzwischenspeicher 878 und ein zugeordneter Tiefenspeicher 879 verfügbar. Eine Pixeloperationskomponente 877 führt pixelbasierte Operationen an den Daten durch, obwohl in einigen Fällen Pixeloperationen, die 2D-Operationen (z. B. Bitblockbildübertragungen mit Mischen) zugeordnet sind, durch die 2D-Maschine 841 durchgeführt werden oder zur Anzeigezeit durch den Anzeige-Controller 843 unter Verwendung von Überlagerungsanzeigeebenen ersetzt werden. In einigen Ausführungsformen ist ein gemeinsam verwendeter L3-Zwischenspeicher 875 für alle Graphikkomponenten verfügbar, was das gemeinsame Verwenden von Daten ohne die Verwendung eines Hauptsystemspeichers ermöglicht.
  • In einigen Ausführungsformen enthält die Graphikprozessormedien-Pipeline 830 eine Medienmaschine 837 und ein Video-Frontend 834. In einigen Ausführungsformen empfängt das Video-Frontend 834 Pipeline-Anweisungen vom Anweisungs-Streamer 803. In einigen Ausführungsformen enthält die Medien-Pipeline 830 einen getrennten Anweisungs-Streamer. In einigen Ausführungsformen verarbeitet das Video-Frontend 834 Medienanweisungen, bevor es die Anweisung zur Medienmaschine 837 sendet. In einigen Ausführungsformen enthält die Medienmaschine 837 eine Thread-Hervorbringungsfunktionalität, um Threads zur Auslieferung über den Thread-Disponenten 831 zur Thread-Ausführungslogik 850 hervorzubringen.
  • In einigen Ausführungsformen enthält der Graphikprozessor 800 eine Anzeigemaschine 840. In einigen Ausführungsformen liegt die Anzeigemaschine 840 außerhalb des Prozessors 800 und ist über die Ringverbindung 802 oder einen weiteren Verbindungsbus oder eine weitere Verbindungsstruktur an den Graphikprozessor gekoppelt. In einigen Ausführungsformen enthält die Anzeigemaschine 840 eine 2D-Maschine 841 und einen Anzeige-Controller 843. In einigen Ausführungsformen enthält die Anzeigemaschine 840 eine Logik für einen besonderen Zweck, die von der 3D-Pipeline unabhängig arbeiten kann. In einigen Ausführungsformen ist der Anzeige-Controller 843 an eine Anzeigevorrichtung (die nicht gezeigt ist) gekoppelt, die eine ins System integrierte Anzeigevorrichtung wie z. B. in einem Laptop-Computer oder eine externe Anzeigevorrichtung, die über einen Anzeigevorrichtungsverbinder verbunden ist, sein kann.
  • In einigen Ausführungsformen sind die Geometrie-Pipeline 820 und die Medien-Pipeline 830 konfigurierbar, Operationen auf der Grundlage mehrerer Graphik- und Medienprogrammierschnittstellen durchzuführen, und sind nicht für eine Anwendungsprogrammierschnittstelle (API) spezifisch. In einigen Ausführungsformen übersetzt eine Treiber-Software für den Graphikprozessor Aufrufe, die für eine bestimmte Graphik- oder Medienbibliothek spezifisch sind, in Anweisungen, die durch den Graphikprozessor verarbeitet werden können. In einigen Ausführungsformen wird eine Unterstützung für offene Graphikbibliothek (OpenGL), die offene Rechensprache (OpenCL) und/oder die Graphik- und Rechen-API von Vulkan, die alle von der Khronos-Gruppe stammen, bereitgestellt. In einigen Ausführungsformen kann auch eine Unterstützung für die Direct3D-Bibliothek der Firma Microsoft bereitgestellt sein. In einigen Ausführungsformen kann eine Kombination dieser Bibliotheken unterstützt werden. Auch eine Unterstützung für die quelloffene Computervisionsbibliothek (OpenCV) kann bereitgestellt werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline würde auch unterstützt werden, wenn eine Abbildung von der Pipeline der zukünftigen API zur Pipeline des Graphikprozessors hergestellt werden kann.
  • Graphik-Pipeline-Programmierung
  • 9A ist ein Blockdiagramm, das ein Graphikprozessoranweisungsformat 900 gemäß einer Ausführungsform darstellt. 9B ist ein Blockdiagramm, das eine Graphikprozessoranweisungsabfolge 910 gemäß einer Ausführungsform darstellt. Die Kästen aus durchgezogenen Linien in 9A stellen die Komponenten dar, die im Wesentlichen in einer Graphikanweisung enthalten sind, während die gestrichelten Linien Komponenten enthalten, die optional sind oder die lediglich in einer Untermenge der Graphikanweisungen enthalten sind. Das beispielhafte Graphikprozessoranweisungsformat 900 von 9A enthält Datenfelder, um einen Client 902, einen Anweisungsbefehlscode (Befehlscode) 904 und Daten 906 für die Anweisung zu identifizieren. In einigen Anweisungen sind außerdem ein Unterbefehlscode 905 und eine Anweisungsgröße 908 enthalten.
  • In einigen Ausführungsformen legt der Client 902 die Client-Einheit der Graphikvorrichtung, die die Anweisungsdaten verarbeitet, fest. In einigen Ausführungsformen prüft ein Graphikprozessoranweisungsparser das Client-Feld jeder Anweisung, um die weitere Verarbeitung der Anweisung anzupassen und die Anweisungsdaten zur passenden Client-Einheit zu leiten. In einigen Ausführungsformen enthalten die Graphikprozessor-Client-Einheiten eine Speicherschnittstelleneinheit, eine Rendereinheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit. Jede Client-Einheit besitzt eine entsprechende Verarbeitungs-Pipeline, die die Anweisungen verarbeitet. Wenn die Anweisung durch die Client-Einheit empfangen wurde, liest die Client-Einheit den Befehlscode 904 und, falls vorhanden, den Unterbefehlscode 905, um die durchzuführende Operation zu bestimmen. Die Client-Einheit führt die Anweisung unter Verwendung der Informationen im Datenfeld 906 durch. Für einige Anweisungen wird erwartet, dass eine ausdrückliche Anweisungsgröße 908 die Größe der Anweisung festlegt. In einigen Ausführungsformen bestimmt der Anweisungsparser automatisch die Größe mindestens einiger Anweisungen auf der Größe des Anweisungsbefehlscodes. In einigen Ausführungsformen sind Anweisungen mittels Vielfachen eines Doppelwortes ausgerichtet. Weitere Anweisungsformate können verwendet werden.
  • Das Flussdiagramm in 9B stellt eine beispielhafte Graphikprozessoranweisungsabfolge 910 dar. In einigen Ausführungsformen verwendet eine Software oder eine Firmware eines Datenverarbeitungssystems, das eine Ausführungsform eines Graphikprozessors aufweist, verwendet eine Version der gezeigten Anweisungsfolge, um einen Satz Graphikoperationen einzurichten, auszuführen und zu beenden. Eine Beispielanweisungsfolge ist lediglich beispielhaft gezeigt und beschrieben, da Ausführungsformen nicht auf diese bestimmten Anweisungen oder auf diese Anweisungsfolge beschränkt sind. Außerdem können die Anweisungen als Anweisungsstapel in einer Anweisungsfolge ausgegeben werden, derart, dass der Graphikprozessor die Anweisungsfolge mindestens teilweise zusammenwirkend ausführen wird.
  • In einigen Ausführungsformen kann die Graphikprozessoranweisungsfolge 910 mit einer Pipeline-Leeranweisung 912 beginnen, um zu bewirken, dass jede aktive Graphik-Pipeline die aktuell unerledigten Anweisungen für die Pipeline abschließt. In einigen Ausführungsformen arbeiten die 3D-Pipeline 922 und die Medien-Pipeline 924 nicht gleichzeitig. Das Pipeline-Leeren wird durchgeführt, um zu bewirken, dass die aktive Graphik-Pipeline alle aktuell unerledigten Anweisungen abschließt. In Reaktion auf ein Pipeline-Leeren pausiert der Anweisungsparser für den Graphikprozessor die Anweisungsverarbeitung, bis die aktiven Zeichenmaschinen unerledigte Operationen abschließen und die relevanten Lesezwischenspeicher für ungültig erklärt werden. Wahlweise können alle Daten im Renderzwischenspeicher, der als ‚schmutzig‘ markiert ist, in einen Speicher entleert werden. In einigen Ausführungsformen kann die Pipeline-Leeranweisung 912 zur Pipeline-Synchronisation verwendet werden oder bevor der Graphikprozessor in einen Niedrigenergiezustand versetzt wird.
  • In einigen Ausführungsformen wird eine Pipeline-Wählanweisung 913 verwendet, wenn eine Anweisungsfolge erfordert, dass der Graphikprozessor zwischen Pipelines explizit umschaltet. In einigen Ausführungsformen ist eine Pipeline-Wählanweisung 913 in einem Ausführungskontext lediglich einmal erforderlich, bevor Pipeline-Anweisungen ausgegeben werden, sofern nicht der Kontext ausgelegt ist, Anweisungen für beide Pipelines auszugeben. In einigen Ausführungsformen ist eine Pipeline-Leeranweisung 912 unmittelbar vor einem Pipeline-Wechsel mittels der Pipeline-Wählanweisung 913 erforderlich.
  • In einigen Ausführungsformen konfiguriert eine Pipeline-Steueranweisung 914 eine Graphik-Pipeline für den Betrieb und wird verwendet, um die 3D-Pipeline 922 und die Medien-Pipeline 924 zu programmieren. In einigen Ausführungsformen konfiguriert die Pipeline-Steueranweisung 914 den Pipeline-Zustand für die aktive Pipeline. In einer Ausführungsform wird die Pipeline-Steueranweisung 914 zur Pipeline-Synchronisation und zum Löschen von Daten aus einem oder mehreren Zwischenspeichern in der aktiven Pipeline, bevor ein Anweisungsstapel verarbeitet wird, verwendet.
  • In einigen Ausführungsformen werden Rückgabepufferzustandsanweisungen 916 verwendet, um einen Satz Rückgabepuffer zum Schreiben von Daten durch die entsprechenden Pipelines zu konfigurieren. Einige Pipeline-Operationen erfordern die Zuordnung, Auswahl oder Konfiguration eines oder mehrerer Rückgabepuffer, in die die Operationen während der Verarbeitung Zwischendaten schreiben. In einigen Ausführungsformen verwendet der Graphikprozessor außerdem einen oder mehrere Rückgabepuffer, um Ausgangsdaten zu speichern und eine Kommunikation zwischen Threads durchzuführen. In einigen Ausführungsformen enthält der Rückgabepufferzustand 916 ein Wählen der Größe und der Anzahl von Rückgabepuffern zur Verwendung für einen Satz von Pipeline-Operationen.
  • Die verbleibenden Anweisungen in der Anweisungsfolge unterscheiden sich auf der Grundlage der für Operationen aktiven Pipeline. Auf der Grundlage einer Pipeline-Bestimmung 920 ist die Anweisungsfolge an die 3D-Pipeline 922 beginnend mit dem 3D-Pipeline-Zustand 930 oder die Medien-Pipeline 924 beginnend beim Medien-Pipeline-Zustand 940 angepasst.
  • Die Anweisungen zum Konfigurieren des 3D-Pipeline-Zustands 930 enthalten 3D-Zustandseinstellanweisungen für einen Scheitelpunktpufferzustand, einen Scheitelpunktelementzustand, einen konstanten Farbzustand, einen Tiefenpufferzustand und weitere Zustandsvariablen, die konfiguriert werden sollen, bevor 3D-Grundelementanweisungen verarbeitet werden. Die Werte dieser Anweisungen werden mindestens teilweise auf der Grundlage der bestimmten in Betrieb befindlichen 3D-API bestimmt. In einigen Ausführungsformen können Anweisungen des 3D-Pipeline-Zustands 930 außerdem bestimmte Pipeline-Elemente wahlweise deaktivieren oder umgehen können, wenn diese Elemente nicht verwendet werden.
  • In einigen Ausführungsformen wird die Anweisung für 3D-Grundelemente 932 verwendet, um 3D-Grundelemente, die durch die 3D-Pipeline verarbeitet werden sollen, zu übermitteln. Anweisungen und zugeordnete Parameter, die die dem Graphikprozessor mittels der Anweisung für 3D-Grundelemente 932 übergeben werden, werden zur Scheitelpunktabruffunktion in der Graphik-Pipeline weitergeleitet. Die Scheitelpunktabruffunktion verwendet die Anweisung für 3D-Grundelemente 932, um Scheitelpunktdatenstrukturen zu erzeugen. Die Scheitelpunktdatenstrukturen werden in einem oder mehreren Rückgabepuffern gespeichert. In einigen Ausführungsformen wird die Anweisung für 3D-Grundelemente 932 verwendet, um Scheitelpunktoperationen an 3D-Grundelementen mittels Scheitelpunktschattieren durchzuführen. Um Scheitelpunktschattierer zu verwenden, liefert die 3D-Pipeline 922 Schattiererausführungs-Threads zu Graphikprozessorausführungseinheiten aus.
  • In einigen Ausführungsformen wird die 3D-Pipeline 922 mittels einer Anweisung oder eines Ereignisses zur Ausführung 934 ausgelöst. In einigen Ausführungsformen löst ein Registerschreibvorgang eine Anweisungsausführung aus. In einigen Ausführungsformen wird die Ausführung mittels einer ‚go‘-Anweisung oder ‚kick‘-Anweisung in der Anweisungsfolge ausgelöst. In einer Ausführungsform wird die Anweisungsausführung unter Verwendung einer Pipeline-Synchronisationsanweisung ausgelöst, um die Anweisungsfolge über die Graphik-Pipeline zu leeren. Die 3D-Pipeline wird eine Geometrieverarbeitung für die 3D-Grundelemente durchführen. Wenn die Operationen abgeschlossenen sind, werden die resultierenden Geometrieobjekte gerastert und die Pixelmaschine färbt die resultierenden Pixel. Außerdem können zusätzliche Anweisungen zum Steuern des Pixelschattierens und von nachgeschalteten Pixeloperationen für diese Operationen enthalten sein.
  • In einigen Ausführungsformen folgt die Graphikprozessoranweisungsfolge 910 dem Pfad der Medien-Pipeline 924, wenn Medienoperationen durchgeführt werden. Im Allgemeinen hängt die bestimmte Verwendung und die Programmierweise für die Medien-Pipeline 924 von den durchzuführenden Medien- oder Rechenoperationen ab. Bestimmte Mediendecodieroperationen können während des Mediendecodierens zur Medien-Pipeline ausgelagert werden. In einigen Ausführungsformen kann die Medien-Pipeline auch umgangen werden und das Mediendecodieren kann vollständig oder teilweise unter Verwendung von Betriebsmitteln, die durch einen oder mehrere allgemein verwendbare Verarbeitungskerne bereitgestellt werden, durchgeführt werden. In einer Ausführungsform enthält die Medien-Pipeline außerdem Elemente für Operationen einer allgemein verwendbaren Graphikprozessoreinheit (GPGPU-Operationen), wobei der Graphikprozessor verwendet wird, um SIMD-Vektoroperationen unter Verwendung von rechnergestützten Schattiererprogrammen, die nicht ausdrücklich mit dem Rendern von Graphikgrundelementen in Beziehung stehen, durchzuführen.
  • In einigen Ausführungsformen ist die Medien-Pipeline 924 in einer ähnlichen Weise wie die 3D-Pipeline 922 konfiguriert. Ein Satz von Anweisungen, um den Medien-Pipeline-Zustand 940 zu konfigurieren, werden in eine Anweisungswarteschlange vor den Medienobjektanweisungen 942 ausgeliefert oder dort angeordnet. In einigen Ausführungsformen enthalten Anweisungen für den Medien-Pipeline-Zustand 940 Daten zum Konfigurieren der Medien-Pipeline-Elemente, die verwendet werden, um die Medienobjekte zu verarbeiten. Dies enthält Daten zum Konfigurieren der Videodecodier- und Videocodier-Logik in der Medien-Pipeline wie z. B. das Codier- oder Decodier-Format. In einigen Ausführungsformen unterstützen Anweisungen für den Medien-Pipeline-Zustand 940 außerdem die Verwendung eines oder mehrerer Zeiger zu „indirekten“ Zustandselementen, die einen Stapel von Zustandseinstellungen enthalten.
  • In einigen Ausführungsformen liefern Medienobjektanweisungen 942 Zeiger zu Medienobjekten zur Verarbeitung durch die Medien-Pipeline. Die Medienobjekte enthalten Speicherpuffer, die zu verarbeitende Videodaten enthalten. In einigen Ausführungsformen müssen alle Medien-Pipelinezustände gültig sein, bevor eine Medienobjektanweisung 942 ausgegeben wird. Wenn der Pipeline-Zustand konfiguriert ist und Medienobjektanweisungen 942 in eine Warteschlange eingereiht sind, wird die Medien-Pipeline 924 mittels einer Ausführungsanweisung 944 oder einem entsprechenden Ausführungsereignis (z. B. einem Registerschreibvorgang) ausgelöst. Ausgaben der Medien-Pipeline 924 können dann durch Operationen nachverarbeitet werden, die durch die 3D-Pipeline 922 oder die Medien-Pipeline 924 bereitgestellt werden. In einigen Ausführungsformen werden GPGPU-Operationen in einer ähnlichen Weise wie Medienoperationen konfiguriert und ausgeführt.
  • Graphik-Software-Architektur
  • 10 stellt eine beispielhafte Graphik-Software-Architektur für ein Datenverarbeitungssystem 1000 gemäß einigen Ausführungsformen dar. In einigen Ausführungsformen enthält eine Software-Architektur eine 3D-Graphikanwendung 1010, ein Betriebssystem 1020 und mindestens einen Prozessor 1030. In einigen Ausführungsformen enthält der Prozessor 1030 einen Graphikprozessor 1032 und einen oder mehrere allgemein verwendbare Prozessorkerne 1034. Die Graphikanwendung 1010 und das Betriebssystem 1020 werden jeweils im Systemspeicher 1050 des Datenverarbeitungssystems ausgeführt.
  • In einigen Ausführungsformen enthält die 3D-Graphikanwendung 1010 ein oder mehrere Schattiererprogramme, die Schattiererbefehle 1012 enthalten. Die Schattierersprachbefehle können in einer höheren Schattierersprache wie z. B. die höhere Schattierersprache (HLSL) von Direct3D, die OpenGL-Schattierersprache (GLSL) usw. vorliegen. Die Anwendung enthält außerdem ausführbare Befehle 1014 in einer Maschinensprache, die zur Ausführung durch den allgemein verwendbaren Prozessorkernen 1034 geeignet sind. Die Anwendung enthält außerdem Graphikobjekte 1016, die durch Scheitelpunktdaten definiert sind.
  • In einigen Ausführungsformen ist das Betriebssystem 1020 ein Microsoft®-Windows®-Betriebssystem von der Firma Microsoft, ein proprietäres UNIX-artiges Betriebssystem oder ein quelloffenes UNIX-artiges Betriebssystem unter Verwendung einer Variante des Linux-Kerns. Das Betriebssystem 1020 kann eine Graphik-API 1022 wie z. B. die Direct3D-API, die OpenGL-API oder die Vulkan-API unterstützen. Wenn die Direct3D-API in Betrieb ist, verwendet das Betriebssystem 1020 einen Frontend-Schattiererkompilierer 1024, um alle Schattiererbefehle 1012 in HSLS in eine niedrigere Schattierersprache zu übersetzen. Die Kompilierung kann eine Kompilierung während der Laufzeit (JIT-Kompilierung) sein oder die Anwendung kann eine Schattierervorkompilierung durchführen. In einigen Ausführungsformen werden während der Kompilierung der 3D-Graphikanwendung 1010 höhere Schattierer in niedrigere Schattierer kompiliert. In einigen Ausführungsformen werden die Schattiererbefehle 1012 in einer Zwischenform wie z. B. eine Version der portablen Normzwischendarstellung (SPIR), die durch die Vulkan-API verwendet wird, bereitgestellt.
  • In einigen Ausführungsformen enthält der Anwendermodusgraphiktreiber 1026 einen nachgeschalteten Schattiererkompilierer 1027, um die Schattiererbefehle 1012 in eine hardwarespezifische Darstellung umzuwandeln. Wenn die OpenGL-API verwendet wird, werden die Schattiererbefehle 1012 in der höheren GLSL-Sprache zur Kompilierung einem Anwendermodusgraphiktreiber 1026 übergeben. In einigen Ausführungsformen verwendet der Anwendermodusgraphiktreiber 1026 Betriebssystemkernmodusfunktionen 1028, um mit einem Kernmodusgraphiktreiber 1029 zu kommunizieren. In einigen Ausführungsformen kommuniziert der Kernmodusgraphiktreiber 1029 mit dem Graphikprozessor 1032, um Anweisungen und Befehle auszuliefern.
  • IP-Kernimplementierungen
  • Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch repräsentativen Code implementiert sein, der in einem maschinenlesbaren Medium gespeichert ist und eine Logik in einer integrierten Schaltung wie z. B. einem Prozessor repräsentiert und/oder definiert. Zum Beispiel kann das maschinenlesbare Medium Befehle enthalten, die verschiedene Logik im Prozessor repräsentieren. Die Befehle können, wenn sie durch eine Maschine gelesen werden, bewirken, dass die Maschine die Logik herstellt, um die hier beschriebenen Techniken durchzuführen. Derartige Repräsentationen, die als „IP-Kerne“ bekannt sind, sind wiederverwendbare Logikeinheiten für eine integrierte Schaltung, die in einem materiellen, maschinenlesbaren Medium als ein Hardware-Modell, das die Struktur der integrierten Schaltung beschreibt, gespeichert sein können. Das Hardware-Modell kann verschiedenen Kunden oder Fertigungsanlagen geliefert werden, die das Hardware-Modell in Fertigungsmaschinen laden, die die integrierte Schaltung fertigen. Die integrierte Schaltung kann derart hergestellt werden, dass die Schaltung Operationen durchführt, die in Verbindung mit einer der hier beschriebenen Ausführungsformen beschrieben werden.
  • 11A ist ein Blockdiagramm, das ein IP-Kernentwicklungssystem 1100 darstellt, das verwendet werden kann, um eine integrierte Schaltung zum Durchführen von Operationen gemäß einer Ausführungsform herzustellen. Das IP-Kernentwicklungssystem 1100 kann verwendet werden, um modulare, wiederverwendbare Entwürfe zu erzeugen, die in einen größeren Entwurf aufgenommen werden können oder verwendet werden können, um eine vollständige integrierte Schaltung (z. B. eine integrierte Schaltung eines SOC) herzustellen. Eine Entwurfsanlage 1130 kann eine Software-Simulation 1110 eines IP-Kernentwurfs in einer höheren Programmiersprache (z. B. C/C++) erzeugen. Die Software-Simulation 1110 kann verwendet werden, um das Verhalten des IP-Kerns unter Verwendung eines Simulationsmodells 1112 zu entwerfen, zu testen und zu überprüfen. Das Simulationsmodell 1112 kann Funktions-, Verhaltens- und/oder Zeitplanungssimulationen enthalten. Ein Registerübertragungsniveau-Entwurf (RTL-Entwurf) 1115 kann dann aus dem Simulationsmodell 1112 erstellt oder synthetisiert werden. Der RTL-Entwurf 1115 ist eine Abstraktion des Verhaltens der integrierten Schaltung, die den Fluss digitaler Signale zwischen Hardware-Registern modelliert, die die zugeordnete Logik enthält, die unter Verwendung der modellierten digitalen Signale durchgeführt wird. Zusätzlich zu einem RTL-Entwurf 1115 können auch niedrigere Entwürfe auf dem Logikniveau oder Transistorniveau erstellt, entworfen oder synthetisiert werden. Somit können sich die bestimmten Details des anfänglichen Entwurfs und der Simulation unterscheiden.
  • Der RTL-Entwurf 1115 oder eine Entsprechung kann ferner durch die Entwurfsanlage in ein Hardware-Modell 1120, das in einer Hardware-Beschreibungssprache (HDL) vorliegen kann, oder eine beliebige weitere Repräsentation physischer Entwurfsdaten synthetisiert werden. Die HDL kann ferner simuliert oder getestet werden, um den IP-Kernentwurf zu überprüfen. Der IP-Kernentwurf kann zur Übermittlung zu einer Fertigungsanlage 1165 einer dritten Instanz unter Verwendung eines nichtflüchtigen Speichers 1140 (z. B. eine Festplatte, ein Flash-Speicher oder ein beliebiges weiteres nichtflüchtiges Speichermedium gespeichert werden). Alternativ kann der IP-Kernentwurf (z. B. mittels des Internets) über eine drahtgebundene Verbindung 1150 oder eine drahtlose Verbindung 1160 übertragen werden. Die Fertigungsanlage 1165 kann dann eine integrierte Schaltung herstellen, die mindestens teilweise den IP-Kernentwurf als Grundlage verwendet. Die hergestellte integrierte Schaltung kann konfiguriert sein, Operationen gemäß mindestens einer hier beschriebenen Ausführungsform durchzuführen.
  • 11B stellt eine Querschnittsseitenansicht einer integrierten Schaltungsbaugruppenanordnung 1170 gemäß einer hier beschriebenen Ausführungsform dar. Die Schaltungsbaugruppenanordnung 1170 stellt eine Implementierung einer oder mehrerer Prozessor- oder Beschleunigervorrichtungen, die hier beschrieben werden, dar. Die Schaltungsbaugruppenanordnung 1170 enthält mehrere Einheiten einer Hardware-Logik 1172, 1174, die mit einem Substrat 1180 verbunden ist. Die Logik 1172, 1174 kann mindestens teilweise in einer konfigurierbaren Logik-Hardware oder einer Logik-Hardware mit fester Funktion implementiert werden und kann einen oder mehrere Abschnitte jedes des einen oder der mehreren Prozessorkerne, des einen oder der mehreren Graphikprozessorkerne oder weiterer Beschleunigervorrichtungen, die hier beschrieben werden, enthalten. Jede Logikeinheit 1172, 1174 kann in einem Halbleiterchip implementiert sein und über eine Verbindungsstruktur 1173 an das Substrat 1180 gekoppelt sein. Die Verbindungsstruktur 1173 kann konfiguriert sein, elektrische Signale zwischen der Logik 1172, 1174 und dem Substrat 1180 zu leiten und kann Verbindungen wie z. B. jedoch nicht beschränkt auf Höcker oder Säulen enthalten. In einigen Ausführungsformen kann die Verbindungsstruktur 1173 konfiguriert sein, elektrische Signale wie z. B. Eingabe-/Ausgabe-Signale (I/O-Signale) und/oder Leistungs- oder Massesignale, die dem Betrieb der Logik 1172, 1174 zugeordnet sind, zu leiten. In einigen Ausführungsformen ist das Substrat 1180 ein epoxidbasiertes Laminatsubstrat. In weiteren Ausführungsformen kann das Substrat 1180 weitere geeignete Typen von Substraten enthalten. Die Baugruppenanordnung 1170 kann über eine Baugruppenverbindung 1183 mit weiteren elektrischen Vorrichtungen verbunden sein. Die Baugruppenverbindung 1183 kann an eine Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale zu weiteren elektrischen Vorrichtungen wie z. B. einer Hauptplatine, einem weiteren Chipsatz oder einem Mehrchipmodul zu leiten.
  • In einigen Ausführungsformen sind die Logikeinheiten 1172, 1174 an eine Brücke 1182, die konfiguriert ist, elektrische Signale zwischen der Logik 1172, 1174 zu leiten, elektrisch gekoppelt. Die Brücke 1182 kann eine dichte Verbindungsstruktur sein, die eine Route für elektrische Signale schafft. Die Brücke 1182 kann ein Brückensubstrat enthalten, das aus Glas oder einem geeigneten Halbleitermaterial gebildet ist. Elektrische Leitungsbestandteile können auf dem Brückensubstrat gebildet sein, um eine Verbindung zwischen Chips zwischen der Logik 1172, 1174 schaffen.
  • Obwohl zwei Logikeinheiten 1172, 1174 und eine Brücke 1182 dargestellt sind, können hier beschriebene Ausführungsformen mehr oder weniger Logikeinheiten auf einem oder mehreren Chips enthalten. Der eine oder die mehreren Chips können durch null oder mehr Brücken verbunden sein, da die Brücke 1182 ausgeschlossen werden kann, wenn die Logik in einem einzelnen Chip enthalten ist. Alternativ können mehrere Chips oder Logikeinheiten durch eine oder mehrere Brücken verbunden sein. Zusätzlich können mehrere Logikeinheiten, Chips und Brücken in weiteren möglichen Konfigurationen, die dreidimensionale Konfigurationen enthalten, miteinander verbunden werden.
  • 11C stellt eine Baugruppenanordnung 1190 dar, die mehrere Einheiten von Hardware-Logikchiplets, die mit einem Substrat 1180 (z. B. einem Grundchip) verbunden sind, enthält. Eine Graphikverarbeitungseinheit, ein Parallelprozessor und/oder ein Rechenbeschleuniger, die hier beschrieben werden, können aus verschiedenen Siliziumchiplets, die getrennt hergestellt werden, gebildet sein. In diesem Zusammenhang ist ein Chiplet eine mindestens teilweise gekapselte integrierte Schaltung, die verschiedene Logikeinheiten enthält und die mit weiteren Chiplets in eine größere Baugruppe zusammengesetzt werden kann. Ein vielfältiger Satz von Chiplets mit verschiedener IP-Kernlogik kann zu einer einzelnen Vorrichtung zusammengesetzt werden. Zusätzlich können die Chiplets unter Verwendung einer aktiven Zwischenschalttechnologie in einen Grundchip oder ein Grundchiplet integriert sein. Die hier beschriebenen Konzepte ermöglichen die Verbindung und die Kommunikation zwischen den verschiedenen Formen von IP in der GPU. IP-Kerne können unter Verwendung verschiedener Prozesstechnologien hergestellt werden und während der Fertigung zusammengesetzt werden, was die Komplexität des Zusammenlaufens mehrerer IPs insbesondere in einem großen SoC mit mehreren Varianten-IPs zum selben Fertigungsprozess vermeidet. Ein Ermöglichen der Verwendung mehrerer Prozesstechnologien verbessert die Markteinführungszeit und schafft eine kostengünstige Art, mehrere Produkt-SKUs zu erstellen. Zusätzlich sind die zerteilten IPs offener, unabhängig leistungsgesteuert zu werden, und Komponenten, die bei einer gegebenen Arbeitsbelastung nicht verwendet werden, können ausgeschaltet werden, was die Gesamtleistungsaufnahme verringert.
  • Die Hardware-Logikchiplets können Hardware-Logikchiplets 1172 für einen besonderen Zweck, Logik- oder Eingabe-/Ausgabe-Chiplets 1174 und/oder Speicherchiplets 1175 enthalten. Die Hardware-Logikchiplets 1172 und die Logik- oder Eingabe-/Ausgabe-Chiplets 1174 können mindestens teilweise in einer konfigurierbaren Logik-Hardware oder einer Logik-Hardware mit fester Funktion implementiert werden und können einen oder mehrere Abschnitte jedes des einen oder der mehreren Prozessorkerne, des einen oder der mehreren Graphikprozessoren, der Parallelprozessoren oder weiterer Beschleunigervorrichtungen, die hier beschrieben werden. Die Speicherchiplets 1175 können DRAM-Speicher (z. B. GDDR-, HBM-Speicher) oder Zwischenspeicher (SRAM) sein.
  • Jedes Chiplet kann als ein getrennter Halbleiterchip hergestellt und über einen Verbindungsstruktur 1173 an das Substrat 1180 gekoppelt sein. Die Verbindungsstruktur 1173 kann konfiguriert sein, elektrische Signale zwischen den verschiedenen Chiplets und der verschiedenen Logik im Substrat 1180 zu leiten. Die Verbindungsstruktur 1173 kann Verbindungen wie z. B. jedoch nicht beschränkt auf Höcker oder Säulen enthalten. In einigen Ausführungsformen kann die Verbindungsstruktur 1173 konfiguriert sein, elektrische Signale wie z. B. Eingabe-/Ausgabesignale (I/O-Signale) und/oder Leistungs- oder Massesignale, die dem Betrieb der Logik, der I/O und der Speicherchiplets zugeordnet sind, zu leiten.
  • In einigen Ausführungsformen ist das Substrat 1180 ein epoxidbasiertes Laminatsubstrat. In weiteren Ausführungsformen kann das Substrat 1180 weitere geeignete Typen von Substraten enthalten. Die Baugruppenanordnung 1190 kann über eine Baugruppenverbindung 1183 mit weiteren elektrischen Vorrichtungen verbunden sein. Die Baugruppenverbindung 1183 kann an eine Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale zu weiteren elektrischen Vorrichtungen wie z. B. einer Hauptplatine, einem weiteren Chipsatz oder einem Mehrchipmodul zu leiten.
  • In einigen Ausführungsformen können ein Logik- oder I/O-Chiplet 1174 und ein Speicherchiplet 1175 mittels einer Brücke 1187, die konfiguriert ist, elektrische Signale zwischen dem Logik- oder I/O-Chiplet 1174 und einem Speicherchiplet 1175 zu leiten, elektrisch gekoppelt. Die Brücke 1187 kann eine dichte Verbindungsstruktur sein, die eine Route für elektrische Signale schafft. Die Brücke 1187 kann ein Brückensubstrat enthalten, das aus Glas oder einem geeigneten Halbleitermaterial gebildet ist. Elektrische Leitungsbestandteile können auf dem Brückensubstrat gebildet sein, um eine Verbindung zwischen dem Logik- oder I/O-Chiplet 1174 und einem Speicherchiplet 1175 zu schaffen. Die Brücke 1187 kann auch als eine Siliziumbrücke oder eine Verbindungsbrücke bezeichnet werden. Zum Beispiel ist die Brücke 1187 in einigen Ausführungsformen eine integrierte Multichipverbindungsbrücke (EMIB). In einigen Ausführungsformen kann die Brücke 1187 einfach eine direkte Verbindung von einem Chiplet zu einem weiteren Chiplet sein.
  • Das Substrat 1180 kann Hardware-Komponenten für I/O 1191, Zwischenspeicher 1192 und weitere Hardware-Logik 1193 enthalten. Eine Struktur 1185 kann in das Substrat 1180 integriert sein, um eine Kommunikation zwischen den verschiedenen Logikchiplets und der Logik 1191, 1193 im Substrat 1180 zu ermöglichen. In einer Ausführungsform können die I/O 1191, die Struktur 1185, der Zwischenspeicher, die Brücke und weitere Hardware-Logik 1193 in einen Grundchip, der auf das Substrat 1180 geschichtet ist, integriert sein.
  • In verschiedenen Ausführungsformen kann eine Baugruppenanordnung 1190 weniger oder mehr Komponenten und Chiplets, die durch eine Struktur 1185 oder eine oder mehrere Brücken 1187 verbunden sind, enthalten. Die Chiplets in der Baugruppenanordnung 1190 können in einer 3D- oder in einer 2,5D-Anordnung angeordnet sein. Im Allgemeinen können Brückenstrukturen 1187 verwendet werden, um eine punktweise Verbindung z. B. zwischen Logik- oder I/O-Chiplets und Speicherchiplets zu ermöglichen. Die Struktur 1185 kann verwendet werden, um die verschiedenen Logik- und/oder I/O-Chiplets (z. B. die Chiplets 1172, 1174, 1191, 1193) mit weiteren Logik- und/oder I/O-Chiplets zu verbinden. In einer Ausführungsform kann der Zwischenspeicher 1192 im Substrat als ein globaler Zwischenspeicher für die Baugruppenanordnung 1190, ein Teil eines verteilten globalen Zwischenspeichers oder als ein fest zugeordneter Zwischenspeicher für die Struktur 1185 wirken.
  • 11D stellt eine Baugruppenanordnung 1194, die austauschbare Chiplets 1195 enthält, gemäß einer Ausführungsform dar. Die austauschbaren Chiplets 1195 können in genormte Schlitze in einem oder mehreren Grundchiplets 1196, 1198 montiert sein. Die Grundchiplets 1196, 1198 können mittels einer Brückenverbindung 1197, die ähnlich den weiteren Brückenverbindungen, die hier beschrieben werden, sein kann und die z. B. eine EMIB sein kann, gekoppelt sein. Speicherchiplets können außerdem mittels einer Brückenverbindung mit Logik- oder I/O-Chiplets verbunden sein. I/O- und Logikchiplets können mittels einer Verbindungsstruktur kommunizieren. Die Grundchiplets können jeweils einen oder mehrere Schlitze in einem genormten Format für Logik oder I/O oder Speicher/Zwischenspeicher unterstützen.
  • In einer Ausführungsform können SRAM- und Leistungslieferschaltungen in einem oder mehreren der Grundchiplets 1196, 1198, die unter Verwendung einer verschiedenen Prozesstechnologie in Bezug auf die austauschbaren Chiplets 1195, die auf die Grundchiplets gestapelt sind, hergestellt werden, gefertigt werden. Zum Beispiel können die Grundchiplets 1196, 1198 unter Verwendung einer größeren Prozesstechnologie hergestellt werden, während die austauschbaren Chiplets unter Verwendung einer kleineren Prozesstechnologie hergestellt werden können. Eines oder mehrere der austauschbaren Chiplets 1195 können Speicherchiplets (z. B. DRAM-Chiplets) sein. Verschiedene Speicherdichten können für die Baugruppenanordnung 1194 auf der Grundlage der Leistung und/oder der Leistungsfähigkeit, die für das Produkt, das die Baugruppenanordnung 1194 verwendet, als Ziel gesetzt werden, gewählt werden. Zusätzlich können Logikchiplets mit einer verschiedenen Anzahl eines Typs von Funktionseinheiten zur Zeit des Zusammensetzens auf der Grundlage der Leistung und/oder der Leistungsfähigkeit, die für das Produkt als Ziel gesetzt werden, gewählt werden. Zusätzlich können Chiplets, die IP-Logikkerne verschiedener Typen enthalten, in die Schlitze für austauschbare Chiplets eingesetzt werden, was hybride Prozessorentwürfe ermöglicht, die IP-Blöcke verschiedener Technologie mischen und anpassen können.
  • Beispielhafte integrierte System-on-a-Chip-Schaltung
  • 12-13 stellen beispielhafte integrierte Schaltungen und zugeordnete Graphikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden können, gemäß verschiedenen hier beschriebenen Ausführungsformen dar. Zusätzlich zum Dargestellten können weitere Logik und Schaltungen enthalten sein, die zusätzliche Graphikprozessoren/Graphikkerne, Peripherieschnittstellen-Controller oder allgemein verwendbare Prozessorkerne enthalten.
  • 12 ist ein Blockdiagramm, das eine beispielhafte integrierte System-on-Chip-Schaltung 1200, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform darstellt. Die beispielhafte integrierte Schaltung 1200 enthält einen oder mehrere Anwendungsprozessoren 1205 (z. B. CPUs), mindestens einen Graphikprozessor 1210 und kann zusätzlich einen Bildprozessor 1215 und/oder einen Videoprozessor 1220 enthalten, die jeweils ein modularer IP-Kern aus derselben oder mehreren verschiedenen Entwurfsanlagen sein können. Die integrierte Schaltung 1200 enthält eine Peripherie- oder Buslogik, die einen USB-Bus-Controller 1225, einen UART-Controller 1230, einen SPI-/SDIO-Controller 1235 und einen I2S/I2C-Controller 1240 enthält. Zusätzlich kann die integrierte Schaltung eine Anzeigevorrichtung 1245, die an einen Controller 1250 für die hochauflösende Multimediaschnittstelle (HDMI-Controller) und/oder eine Anzeigeschnittstelle 1225 der mobilen Industrieprozessorschnittstelle (MIPI-Anzeigeschnittstelle) gekoppelt ist, enthalten. Eine Speicherung kann durch ein Flash-Speicheruntersystem 1260, das Flash-Speicher und einen Flash-Speicher-Controller enthält, bereitgestellt werden. Die Speicherschnittstelle kann über einen Speicher-Controller 1265 zum Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt sein. Einige integrierte Schaltungen enthalten zusätzlich eine integrierte Sicherheitsmaschine 1270.
  • 13A-13B sind Blockdiagramme, die beispielhafte Graphikprozessoren zur Verwendung in einem SoC gemäß hier beschriebenen Ausführungsformen darstellen. 13A stellt einen beispielhaften Graphikprozessor 1310 einer integrierten System-on-a-Chip-Schaltung, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform dar. 13B stellt einen zusätzlichen beispielhaften Graphikprozessor 1340 einer integrierten System-on-a-Chip-Schaltung, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform dar. Der Graphikprozessor 1310 von 13A ist ein Beispiel eines Niedrigenergiegraphikprozessorkerns. Der Graphikprozessor 1340 von 13B ist ein Beispiel eines Graphikprozessorkerns mit höherer Leistungsfähigkeit. Jeder der Graphikprozessoren 1310, 1340 kann eine Variante des Graphikprozessors 1210 von 12 sein.
  • Wie in 13A gezeigt ist, enthält der Graphikprozessor 1310 einen Scheitelpunktprozessor 1305 und einen oder mehrere Fragmentprozessoren 1315A-1315N (z. B. 1315A, 1315B, 1315C bis 1315N-1 und 1315N). Der Graphikprozessor 1310 kann verschiedene Schattiererprogramme über eine getrennte Logik derart ausführen, dass der Scheitelpunktprozessor 1305 optimiert ist, Operationen für Scheitelpunktschattiererprogramme auszuführen, während der eine oder die mehreren Fragmentprozessoren 1315A-1315N Fragmentschattieroperationen (z. B. Pixelschattieroperationen) für Fragment- oder Pixelschattiererprogramme ausführen. Der Scheitelpunktprozessor 1305 führt die Scheitelpunktverarbeitungsstufe der 3D-Graphik-Pipeline durch und erzeugt Grundelemente und Scheitelpunktdaten. Der eine oder die mehreren Fragmentprozessoren 1315A-1315N verwenden die Grundelement- und Scheitelpunktdaten, die durch den Scheitelpunktprozessor 1305 erzeugt wurden, um einen Rahmenpuffer zu erstellen, der auf einer Anzeigevorrichtung angezeigt wird. In einer Ausführungsform sind der eine oder die mehreren Fragmentprozessoren 1315A-1315N optimiert, Fragmentschattiererprogramme, wie sie in der OpenGL-API vorgesehen sind, auszuführen, die verwendet werden können, um ähnliche Operationen wie ein Pixelschattiererprogramm, das in der Direct-3D-API vorgesehen ist, durchzuführen.
  • Der Graphikprozessor 1310 enthält zusätzlich eine oder mehrere Speichermanagementeinheiten (MMUs) 1320A-1320B, einen oder mehrere Zwischenspeicher 1325A-1325B und eine oder mehrere Schaltungsverbindungen 1330A-1330B. Die eine oder die mehreren MMUs 1320A-1320B stellen eine Abbildung virtueller auf physische Adressen für den Graphikprozessor 1310, was für den Scheitelpunktprozessor 1305 und/oder für den einen oder die mehreren Fragmentprozessoren 1315A-1315N einschließt, die Scheitelpunkt- oder Bild-/Textur-Daten, die in einem Speicher gespeichert sind, zusätzlich zu Scheitelpunkt- oder Bild-/Textur-Daten, die in dem einen oder den mehreren Zwischenspeichern 1325A-1325B gespeichert sind, referenzieren können, bereit. In einer Ausführungsform können die eine oder die mehreren MMUs 1320A-1320B mit weiteren MMUs im System, die eine oder mehrere MMUs enthalten, die dem einen oder den mehreren Anwendungsprozessoren 1205, dem Bildprozessor 1215 und/oder dem Videoprozessor 1220 von 12 zugeordnet sind, synchronisiert sein, derart, dass jeder Prozessor 1205-1220 an einem gemeinsam verwendeten oder zusammengeführten virtuellen Speichersystem teilnehmen kann. Die eine oder die mehrere Schaltungsverbindungen 1330A-1330B ermöglichen dem Graphikprozessor 1310, an weitere IP-Kerne im SoC entweder über einen internen Bus des SoC oder über eine direkte Verbindung gemäß Ausführungsformen gekoppelt zu sein.
  • Wie in 13B gezeigt ist, enthält der Graphikprozessor 1340 die eine oder die mehreren MMUs 1320A-1320B, den einen oder die mehreren Zwischenspeicher 1325A-1325B und die eine oder die mehrere Schaltungsverbindungen 1330A-1330B des Graphikprozessors 1310 von 13A. Der Graphikprozessor 1340 enthält einen oder mehrere Schattiererkerne 1355A-1355N (z. B. 1455A, 1355B, 1355C, 1355D, 1355E, 1355F bis 1355N-1, 1355N), was eine einheitliche Schattiererkernarchitektur bereitstellt, in der ein einzelner Kern oder Typ oder Kern alle Typen programmierbaren Schattierercodes, der Schattiererprogrammcode enthält, um Scheitelpunktschattierer, Fragmentschattierer und/oder Rechenschattierer zu implementieren, ausführen kann. Die genaue Anzahl vorhandener Schattiererkerne kann sich zwischen Ausführungsformen und Implementierungen unterscheiden. Zusätzlich enthält der Graphikprozessor 1340 einen kernübergreifenden Taskmanager 1345, der als ein Thread-Disponent wirkt, um Ausführungs-Threads zu einem oder mehreren Schattiererkernen 1355A-1355N auszuliefern, und eine Kacheleinheit 1358, um Kacheloperationen für ein kachelbasiertes Rendern zu beschleunigen, in der Renderoperationen für eine Szene in einem Bildraum unterteilt werden, z. B. um eine örtliche räumliche Kohärenz in einer Szene auszunutzen oder die Verwendung interner Zwischenspeicher zu optimieren.
  • 14 stellt eine Rechenvorrichtung 1400 dar, die einen neuartigen und intelligenten Gradientennäherungsfiltermechanismus („Filtermechanismus“) 1410 gemäß einer Ausführungsform hostet. Die Rechenvorrichtung 1400 repräsentiert eine Kommunikations- und Datenverarbeitungsvorrichtung, die intelligente Sprachanweisungsvorrichtungen, intelligente persönliche Assistenten, Heim-/Büro-Automatisierungssysteme, Haushaltsgeräte (z. B. Waschmaschinen, Fernsehgeräte usw.), mobile Endgeräte (z. B. Smartphones, Tablet-Computer usw.), Spielvorrichtungen, Handgeräte, tragbare Endgeräte (z. B. intelligente Uhren, intelligente Armbänder usw.), Vorrichtungen für virtuelle Realität (VR-Vorrichtungen), am Kopf montierte Anzeigevorrichtungen (HMDs), Vorrichtungen des Internets der Dinge (IoT-Vorrichtungen), Laptop-Computer, Desktop-Computer, Server-Computer, Set-Top-Boxen (z. B. internetbasierte Kabelfernseh-Set-Top-Boxen usw.), Vorrichtungen auf der Grundlage des globalen Positionierungssystems (GPSbasierte Vorrichtungen), Kraftfahrzeug-Infotainment-Vorrichtungen usw. enthält oder repräsentiert (ohne Einschränkung).
  • In einigen Ausführungsformen enthält die Rechenvorrichtung 1400 eine beliebige Anzahl und einen beliebigen Typ weiterer intelligenter Vorrichtungen wie z. B. (ohne Einschränkung) autonome Maschinen oder Agenten mit künstlicher Intelligenz wie z. B. ein mechanische Agenten oder Maschinen, elektronische Agenten oder Maschinen, virtuelle Agenten oder Maschinen, elektromechanische Agenten oder Maschinen usw. oder arbeitet damit oder ist darin integriert oder vereinfacht sie. Beispiele autonomer Maschinen oder Agenten mit künstlicher Intelligenz können (ohne Einschränkung) Roboter, autonome Fahrzeuge (z. B. selbstfahrende Fahrzeuge, selbstfliegende Flugzeuge, selbstsegelnde Boote usw.), autonome Geräte (z. B. selbstarbeitende Baumaschinen, selbstoperierende medizinische Geräte usw.) und/oder dergleichen sein. Ferner sind „autonome Fahrzeuge“ nicht auf Personenkraftwagen beschränkt, sondern dass sie können eine beliebige Anzahl und einen beliebigen Typ autonomer Maschinen wie z. B. Roboter, autonome Geräte, autonome Haushaltseinrichtungen und/oder dergleichen enthalten und ein oder mehrere Aufgaben oder Operationen in Bezug auf derartige autonome Maschinen kann austauschbar als autonomes Fahren bezeichnet werden.
  • Ferner kann die Rechenvorrichtung 1400 z. B. eine Computerplattform, die eine integrierte Schaltung („IC“) wie z. B. ein System-on-a-Chip („SoC“ oder „SOC“) hostet, enthalten, die verschiedene Hardware- und/oder Software-Komponenten der Rechenvorrichtung 1400 in einem einzelnen Chip integriert. Zum Beispiel umfasst die Rechenvorrichtung 1400 eine Datenverarbeitungsvorrichtung, die einen oder mehrere Prozessoren besitzt, die eine Zentraleinheit 1412 und eine Graphikeinheit 1414, die in einer gemeinsamen Halbleiterbaugruppe ortsgleich sind, enthalten (jedoch nicht darauf beschränkt sind).
  • Wie dargestellt ist, kann die Rechenvorrichtung 1400 in einer Ausführungsform eine beliebige Anzahl und einen beliebigen Typ von Hardware- und/oder Software-Komponenten wie z. B. (ohne Einschränkung) eine Graphikeinheit („GPU“ oder einfach „Graphikprozessor“) 1414, einen Graphiktreiber (der auch als „GPU-Treiber“, „Graphiktreiberlogik“, „Treiberlogik“, Anwendermodustreiber (UMD), UMD, Anwendermodustreiberframework (UMDF), UMDF oder einfach „Treiber“ bezeichnet wird) 1416, eine Zentraleinheit („CPU“ oder einfach „Anwendungsprozessor“) 1412, einen Speicher 1404, Netzvorrichtungen, Treiber und/oder dergleichen sowie eine oder mehrere Eingabe-/Ausgabe-Quellen (I/O-Quellen) 1408 wie z. B. Berührungsbildschirme, berührungsempfindliche Felder, berührungsempfindliche Bedienfelder, virtuelle oder normale Tastaturen, virtuelle oder normale Mäuse, Anschlüsse, Verbinder usw. enthalten. Die Rechenvorrichtung 1400 kann ein Betriebssystem (OS) 1406 enthalten, das als eine Schnittstelle zwischen Hardware und/oder physischen Betriebsmitteln der Rechenvorrichtung 1400 und einem Anwender dient.
  • Es ist zu bedenken, dass ein weniger oder ein mehr ausgestattetes System als das Beispiel, das oben beschrieben wird, für bestimmte Implementierungen bevorzugt werden kann. Deshalb kann sich jede Konfiguration der Rechenvorrichtung 1400 von Implementierung zu Implementierung abhängig von einer Vielzahl Faktoren wie z. B. Preisbeschränkungen, Leistungsanforderungen, technischen Verbesserungen oder weiteren Umständen unterscheiden.
  • Ausführungsformen können als eine beliebige Kombination des Folgenden implementiert werden: ein oder mehrere Mikrochips oder integrierte Schaltungen, die unter Verwendung einer Hauptplatine verbunden sind, eine festverdrahtete Logik, Software, die durch eine Speichervorrichtung gespeichert und durch einen Mikroprozessor ausgeführt wird, Firmware, eine anwendungsspezifische integrierte Schaltung (ASIC) und/oder eine feldprogrammierbare Gate-Anordnung (FPGA). Begriffe wie z. B. „Logik“, „Modul“, „Komponente“, „Maschine“, „Schaltungsanordnung“, „Element“ und „Mechanismus“ können beispielhaft Software, Hardware, Firmware und/oder Kombinationen davon enthalten.
  • In einer Ausführungsform kann, wie dargestellt ist, der Filtermechanismus 1410 durch einen Speicher 1404 in Kommunikation mit einer oder mehreren I/O-Quellen 1408 wie z. B. Mikrophone, Lautsprecher usw. der Rechenvorrichtung 1400 gehostet werden. In einer weiteren Ausführungsform kann der Filtermechanismus 1410 ein Teil des Betriebssystems 1406 sein oder von ihm gehostet werden. In noch einer weiteren Ausführungsform kann der Filtermechanismus 1410 durch einen Graphiktreiber 1416 gehostet oder ermöglicht werden. In noch einer weiteren Ausführungsform kann der Filtermechanismus 1410 durch die Graphikeinheit („GPU“ oder einfach „Graphikprozessor“) 1414 oder eine Firmware des Graphikprozessors 1414 gehostet werden oder Teil davon sein; zum Beispiel kann der Filtermechanismus 1410 in Form einer Missbrauchsbewertungskomponente 1430 in die Verarbeitungs-Hardware des Graphikprozessors 1414 integriert oder als Teil davon implementiert sein. Ähnlich kann in noch einer weiteren Ausführungsform der Filtermechanismus 1410 durch eine Zentraleinheit („CPU“ oder einfach „Anwendungsprozessor“) 1412 gehostet werden oder Teil davon sein; zum Beispiel kann der Filtermechanismus 1410 in Form einer Gradientenannäherungsfilterkomponente („Filterkomponente“) 1420 in die Verarbeitungs-Hardware der Zentraleinheit 1412 integriert sein oder als Teil davon implementiert sein.
  • Zum Beispiel können Filterkomponenten 1420, 1430 und/oder jegliche Elemente des Filtermechanismus 1410 durch eine oder mehrere analoge oder digitale Schaltungen, Logikschaltungen, programmierbare Prozessoren, programmierbare Controller, GPUs, digitale Signalprozessoren (DSPs), anwendungsspezifische integrierte Schaltungen (ASICs), programmierbare Logikvorrichtungen (PLDs) und/oder feldprogrammierbare Logikeinrichtungen (FPLDs) implementiert werden.
  • Es wird in Erwägung gezogen, dass diese neue Technik nicht auf eine Software-Implementierung oder eine Hardware-Implementierung beschränkt ist und, wie in diesem Dokument weiter beschrieben wird, diese neue Technik in Software, Hardware, Firmware oder einer beliebigen Kombination davon implementiert werden kann. Daher wird ferner in Erwägung gezogen, dass Ausführungsformen nicht auf eine bestimmte Implementierung oder ein bestimmten Hosting des Filtermechanismus 1410 beschränkt sind und dass ein oder mehrere Abschnitte oder Komponenten des Filtermechanismus 1410 als Hardware, Software, Firmware oder einer beliebigen Kombination davon eingesetzt oder implementiert werden kann. Ferner umfasst wie hier verwendet die Wortverbindung „in Kommunikation“ einschließlich ihrer Variationen eine direkte Kommunikation und/oder eine indirekte Kommunikation durch eine oder mehrere Zwischenkomponenten und erfordert keine direkte physische (z. B. drahtgebundene) Kommunikation und/oder konstante Kommunikation, enthält jedoch vielmehr eine wahlweise Kommunikation in periodischen Intervallen, geplanten Intervallen, nicht periodischen Intervallen und/oder Einzelereignissen.
  • Die Rechenvorrichtung 1400 kann eine oder mehrere Netzschnittstellen hosten, um Zugriff auf ein Netz wie z. B. ein LAN, ein Großraumnetz (WAN), ein Stadtbereichsnetz (MAN), einer persönliches Netz (PAN), Bluetooth, ein Cloud-Netz, ein Mobilfunknetz (z. B. 3. Generation (3G), 4. Generation (4G) usw.), ein internes Netz, das Internet usw. Eine oder mehrere Netzschnittstellen können z. B. eine drahtlose Netzschnittstelle, die eine Antenne, die eine oder mehrere Antennen repräsentieren kann, besitzt, enthalten. Die eine oder die mehreren Netzschnittstellen können außerdem z. B. eine drahtgebundene Netzschnittstelle enthalten, um über ein Netzkabel, das z. B. ein Ethernet-Kabel, ein Koaxialkabel, ein faseroptisches Kabel, ein serielles Kabel oder ein paralleles Kabel sein kann, mit entfernten Vorrichtungen zu kommunizieren.
  • Ausführungsformen können z. B. als ein Computerprogrammprodukt bereitgestellt werden, das ein oder mehrere maschinenlesbare Medien enthalten kann, in denen maschinenausführbare Befehle gespeichert sind, die, wenn sie durch eine oder mehrere Maschinen wie z. B. einen Computer, eine Datenverarbeitungsmaschine, eine Datenverarbeitungsvorrichtung, ein Netz von Computer oder weitere elektronische Vorrichtungen ausgeführt werden, darin resultieren können, dass die eine oder die mehreren Maschinen Operationen gemäß hier beschriebenen Ausführungsformen ausführen. Wie unter Bezugnahme auf 1 beschrieben wurde, kann eine Maschine einen oder mehrere Prozessoren wie z. B. eine CPU, eine GPU usw. enthalten. Ein maschinenlesbares Medium kann Disketten, optische Platten, kompakte Datenträger mit schreibgeschütztem Speicher (CD-ROMs), magnetooptische Platten, ROMs, Schreib-/Lese-Speicher (RAMs) , löschbare programmierbare Festwertspeicher (EPROMs), elektrisch löschbare programmierbare Festwertspeicher (EEPROMs), magnetische oder optische Karten, Flash-Speicher oder weitere Typen von Medien/eines maschinenlesbaren Mediums, das zum Speichern maschinenausführbarer Befehle geeignet ist, enthalten, ist jedoch nicht darauf beschränkt.
  • Zum Beispiel dann, wenn einer der Vorrichtungsansprüche, der Verfahrensansprüche oder der Systemansprüche dieses Patents gelesen wird, um eine reine Software- und/oder Firmware-Implementierung abzudecken, kann mindestens ein Element der Filterkomponenten 1420, 1430 und/oder des Filtermechanismus 1410 ausdrücklich derart definiert sein, dass es eine nichttransitorische computerlesbare Speichervorrichtung oder einen nichttransitorischen computerlesbaren Speicherdatenträger wie z. B. einen Speicher, einen vielseitigen digitalen Datenträger (DVD), einen kompakten Datenträger (CD), einen Blu-Ray-Datenträger usw. enthält, der die Software und/oder die Firmware enthält.
  • Außerdem können ein oder mehrere Elemente der Filterkomponenten 1420, 1430 und/oder des Filtermechanismus 1410 als ein Computerprogrammprodukt heruntergeladen werden, wobei das Programm von einem entfernten Computer (z. B. ein Server) zu einem anfordernden Computer (z. B. ein Client) mittels eines oder mehrerer Datensignale, die in einer Trägerwelle oder einem weiteren Ausbreitungsmedium verkörpert sind und/oder dadurch moduliert sind, über eine Kommunikationsverbindung (z. B. eine Modemverbindung und/oder eine Netzverbindung) übertragen werden kann.
  • Überall in diesem Dokument kann auf den Begriff „Anwender“ austauschbar als „Betrachter“, „Beobachter“, „Sprecher“, „Person“, „Einzelperson“, „Endanwender“, „Entwickler“, „Programmierer“, „Administrator“ und/oder dergleichen Bezug genommen werden. Zum Beispiel kann in einigen Fällen ein Anwender einen Endanwender wie z. B. einen Verbraucher, der auf einen Client-Rechenvorrichtung zugreift, bezeichnen, während in einigen weiteren Fällen ein Anwender einen Entwickler, einen Programmierer, einen Systemadministrator usw., der auf eine Workstation, die als eine Client-Rechenvorrichtung dient, zugreift, enthalten kann. Es ist festzuhalten, dass überall in diesem Dokument Begriffe wie „Graphikdomäne“ austauschbar als „Graphikverarbeitungseinheit“, „Graphikprozessor“ oder einfach „GPU“ bezeichnet werden können und entsprechend „CPU-Domäne“ oder „Host-Domäne“ austauschbar als „Computerverarbeitungseinheit“, „Anwendungsprozessor“ oder einfach „CPU“ bezeichnet werden können.
  • Es ist festzuhalten, dass Begriffe wie z. B. „Knoten“, „Rechenknoten“, „Server“, „Server-Vorrichtung“, „Cloud-Computer“, „Cloud-Server“, „Cloud-Server-Computer“, „Maschine“, „Host-Maschine“, „Vorrichtung“, „Rechenvorrichtung“, „Computer“, „Rechensystem“ und dergleichen überall in diesem Dokument austauschbar verwendet werden können. Es ist ferner festzuhalten, dass Begriffe wie „Anwendung“, Software-Anwendung“, „Programm“, „Software-Programm“, „Paket“, „Software-Paket“ und dergleichen überall in diesem Dokument austauschbar verwendet werden können.
  • Ferner werden überall in diesem Dokument Begriffe wie z. B. „Anforderung“, „Abfrage“, „Auftrag“, „Arbeit“, „Arbeitselement“ und „Arbeitsbelastung“ austauschbar referenziert. Entsprechend kann eine „Anwendung“ oder ein „Agent“ ein Computerprogramm, eine Software-Anwendung, ein Spiel, eine Workstation-Anwendung usw. bezeichnen oder enthalten, die durch eine Anwendungsprogrammierschnittstelle (API) wie z. B. eine freie Render-API wie z. B. die offenen Graphikbibliothek (OpenGL®), DirectX® 11, DirectX® 12 usw. angeboten wird, wobei „Auslieferung“ austauschbar als „Arbeitseinheit“ oder „Los“ referenziert werden kann, während „Anwendung“ austauschbar als „Arbeitsablauf“ oder einfach „Agent“ bezeichnet werden kann.
  • Zum Beispiel kann eine Arbeitsbelastung wie z. B. die eines dreidimensionalen Spiels (3D-Spiel) eine beliebige Anzahl und einen beliebigen Typ von „Rahmen“ enthalten und ausgeben, wobei jeder Rahmen ein Bild (z. B. ein Segelboot, ein menschliches Gesicht) repräsentieren kann. Ferner kann jeder Rahmen eine beliebige Anzahl und einen beliebigen Typ von Arbeitseinheiten enthalten und bieten, wobei jede Arbeitseinheit einen Teil (z. B. einen Mast des Segelboots, die Stirn des menschlichen Gesichts) des Bilds (z. B. das Segelboot, das menschliche Gesicht), das durch seinen entsprechenden Rahmen repräsentiert wird, repräsentieren kann. Allerdings kann aus Gründen der Konsistenz überall in diesem Dokument jedes Element durch einen einzelnen Begriff (z. B. „Auslieferung“, „Agent“ usw.) bezeichnet werden.
  • In einigen Ausführungsformen können Begriffe wie z. B. „Anzeigebildschirm“ und „Anzeigefläche“ austauschbar Bezug nehmend auf den sichtbaren Abschnitt einer Anzeigevorrichtung verwendet werden, während der Rest der Anzeigevorrichtung in eine Rechenvorrichtung wie z. B. ein Smartphone, eine tragbare Vorrichtung usw. integriert sein kann. Es wird in Erwägung gezogen und ist festzuhalten, dass Ausführungsformen nicht auf eine bestimmte Rechenvorrichtung, eine bestimmte Software-Anwendung, eine bestimmte Hardware-Komponente, eine bestimmte Anzeigevorrichtung, einen bestimmten Anzeigebildschirm oder eine bestimmte Anzeigefläche, eine bestimmtes Protokoll, eine bestimmte Norm usw. beschränkt sind. Zum Beispiel können Ausführungsformen auf eine beliebige Anzahl und einen beliebigen Typ von Echtzeitanwendungen in einer beliebigen Anzahl und einem beliebigen Typ von Computern wie z. B. Desktops, Laptops, Tablet-Computer, Smartphones, am Kopf montierte Anzeigevorrichtungen und weitere tragbare Vorrichtungen und/oder dergleichen angewendet und damit verwendet werden. Ferner können z. B. Renderszenarios zur effizienten Durchführung unter Verwendung dieser neuartigen Technik von einfachen Szenarios wie z. B. ein Desktop-Zusammensetzen zu komplexen Szenarios wie z. B. Spiele, Anwendungen der erweiterten Realität usw. reichen.
  • Es ist festzuhalten, dass auf Begriffe wie Modell künstlicher Intelligenz („AI-Modell“), erklärbares AI-Modell („XAI-Modell“), Modell maschinellen Lernens („ML-Modell“), Modell tiefgehenden Lernens („DL-Modell“), Modell eines neuronalen Netzes („NN-Modell“) oder einfach „Modell“ und/oder dergleichen überall in diesem Dokument austauschbar referenziert werden. Ferner können überall in diesem Dokument Begriffe wie „autonome Maschine“ oder einfach „Maschine“, „autonomes Fahrzeug“ oder einfach „Fahrzeug“, „autonomer Agent“ oder einfach „Agent“, „autonome Vorrichtung“ oder einfach „Vorrichtung“ sowie „Rechenvorrichtung“, „Roboter“ und/oder dergleichen austauschbar referenziert werden.
  • Wie oben beschrieben wird, kann VRS gegenwärtig als eine Schattiertechnik implementiert werden, um alle Pixel in einem Block von Pixeln (oder Pixelblock) einmal durch Ausgeben eines einzelnen Werts zu schattieren. Zum Beispiel wird, während Dreiecksabdeckungs-, Tiefen- und Schablonenprüfungen bei einer vollen Auflösung (z. B. Feinpixelauflösung) durchgeführt werden, eine Schattierung pro Grobgruppe (z. B. 2 × 2 oder 4 × 4 usw.) einmal durchgeführt. Dies resultiert in einem einzelnen konstanten Wert für alle Abtastwert in der Gruppe. Allerdings kann VRS in Blockartefakten, die in einem resultierenden Bild auftreten, resultieren. 15A- 15C stellen eine Ausführungsform eines gerenderten Bilds dar. 15A zeigt das gerenderte Bild, ohne dass VRS auftritt, während 15B und 15C ein Rendern mit herkömmlicher 2 × 2- bzw. 4 × 4-VRS zeigen. Wie in 15B und 15C gezeigt ist, treten während den VRS-Implementierungen Blockartefakte auf. Gegenwärtig kann eine Nachverarbeitungsfilterung durchgeführt werden, um die Blockartefakte zu entfernen. Allerdings sind derartige Filterlösungen rechenintensiv.
  • Gemäß einer Ausführungsform blockiert der Filtermechanismus 1410 Artefakte während einer Pixel-Schattierung. In einer derartigen Ausführungsform verwendet der Filtermechanismus 1410 verfügbare Nachbarpixeldaten, um Ausgangswerte (z. B. Feinpixelausgangswerte) für jedes Pixel in einem Pixelblock zu verarbeiten (z. B. linear zu interpolieren). In einer weiteren Ausführungsform umfassen die verfügbaren Nachbarpixeldaten Daten (z. B. aus einem 2 × 2-Pixelblock), die verwendet werden, um partielle Differenzableitungsfunktionen (oder Differenzableitungskomponenten) (z. B. ddx_fein/ddy_fein) zu berechnen. Differenzableitungskomponenten sind Fragmentschattiererbefehle, die verwendet werden können, um eine Rate der Schwankung eines beliebigen Werts in Bezug auf Bildschirmraumkoordinaten zu berechnen.
  • In einer Ausführungsform greift der Filtermechanismus 1410 auf ein Verwenden eines Gradienten (oder einer Änderungsrate) einer letztendlichen Grobpixelausgabefarbe (wie z. B. über jeden 2 × 2-Pixelblock berechnet wurde) zurück, um den Grobfarbwert bei jeder Feinpixelposition in einem Pixelblock wirksam zu interpolieren und zu extrapolieren. In einem 2D-Bild wird diese Operation sowohl in x-Richtung als auch in y-Richtung durchgeführt. 16 ist ein Flussdiagramm, das eine Ausführungsform eines Gradientenfilterschattierprozesses für einen Grobblock darstellt. Im Verarbeitungsblock 1610 wird ein Grobpixelausgangswert (oder eine Ausgangsfarbe) für einen Pixelblock erzeugt. Im Verarbeitungsblock 1620 werden Nachbargrobpixeldaten empfangen.
  • Im Verarbeitungsblock 1630 wird ein Gradientenwert des Grobpixelausgangswerts erzeugt. In einer Ausführungsform wird der Gradientenwert über die Größe des Pixelblocks, wie sie zwischen den horizontalen (ddx_fein) oder vertikalen (ddy_fein) Nachbarn im Grobpixelblock (z. B. 2 × 2-Pixelviereck) berechnet wird, berechnet. Im Verarbeitungsblock 1640 wird jedes Pixel im Pixelblock verarbeitet, um einen Feinpixelwert zu erzeugen. In einer Ausführungsform enthält die Verarbeitung ein Annähern einer bilinearen Filterung unter Verwendung der Gradienten. In einer derartigen Ausführungsform werden horizontale/vertikale Versatzverhältnisse zwischen einem Grobpixelzentrum (z. B. Ausgangsfarbe) und Feinpixelzentren (z. B. oben links [-0,25, -0,25], oben rechts [0,25, -0,25], unten links [-0,25, 0,25], unten rechts [0,25, 0,25] für eine 2 × 2-VRS) zusätzlich zu den Gradienten verwendet, um die bilineare Filterung anzunähern. Die kann durch Beginnen beim Grobpixelausgangsfarbwert und Hinzufügen sowohl horizontaler als auch vertikaler Gradienten, die durch ihre Versatzverhältnisse für jeden Feinpixelort skaliert wurden, durchgeführt werden. 17 stellt eine Ausführungsform eines Pseudocodes, um die Gradientenfilterschattierung durchzuführen, dar.
  • In einer Ausführungsform besitzt jeder Schattierer-Thread, der ein einzelnes Grobpixel in einem Pixelblock verarbeitet, Zugriff auf alle Informationen eines horizontalen und eines vertikalen Nachbarn im Pixelblock. Allerdings besitzt ein Schattierer-Thread keinen Zugriff auf die weiteren zwei Nachbarn, die sich in einem benachbarten 2 × 2-Pixelblock befinden. In einer derartigen Ausführungsform führt der Filtermechanismus 1410 in der Hälfte der Fälle eine Interpolation in einer x-/Horizontal-Richtung (und entsprechend in einer y-/Vertikal-Richtung) durch und führt in der anderen Hälfte der Fälle eine Extrapolation durch.
  • In Fällen, in denen der Gradient nicht mit der tatsächlichen Rate der Änderung beim schattierten Ort übereinstimmt, kann die Extrapolation fehlerhafte Ergebnisse liefern. Allerdings liefert in vielen Fällen die Extrapolation eine bessere Schätzung als das Verwenden eines konstanten Werts. Somit wird in Ausführungsformen eine Extrapolation durch Verringern des Gradientenwerts um eine Konstante (Extrapolation_K) durchgeführt. In derartigen Ausführungsformen der Standard-Extrapolation K-Wert = 0,3, was einem Verwenden von 30 % der Extrapolation entspricht). Allerdings können weitere Ausführungsformen abhängig von Schattiereigenschaften verschiedene Extrapolation_K-Werte implementieren.
  • Gemäß einer Ausführungsform sind Pixelblöcke auf eine SV_Positionskoordinate geteilt durch das Zweifache einer VRS-Schattierrate in jeder Richtung ausgerichtet, um die Feinpixel, an denen eine Interpolation oder eine Extrapolation durchgeführt werden soll, zu bestimmen und zu klassifizieren. In einer weiteren Ausführungsform wird eine Bestimmung, ob eine Interpolation oder eine Extrapolation durchgeführt werden soll, auf der Grundlage einer Beobachtung davon vorgenommen, dass für linke Grobpixel in einem 2 × 2-Pixelblock extrapolierte Feinpixel die Pixel sind, die sich links des Zentrums eines Grobpixels befinden; und interpolierte Feinpixel Pixel rechts des Zentrums des Grobpixels sind. Dieselbe Beschreibung gilt in der Vertikalrichtung. In einer weiteren Ausführungsform kann die Extrapolations- bzw. Interpolationsklassifizierung unter Verwendung eines plattformunabhängigen Mechanismus unter Verwendung eines Befehls (z. B. ein QuadReadLaneA'-Befehl eines Modell 6-Schattierers), in dem ein Schattierer-Thread, der ein einzelnes Grobpixel ausführt, den Ort oben links in einem Pixelblock (z. B. durch Aufrufen von QuadReadLaneAt(Pixel_Ort, 0)) bestimmt, verarbeitet werden.
  • 18 ist ein Flussdiagramm, das eine Ausführungsform eines Gradientenfilterschattierprozesses für einen Grobblock darstellt. Im Verarbeitungsblock 1810 wird ein Grobpixelausgangswert (oder eine Ausgangsfarbe) für einen Pixelblock erzeugt. Im Verarbeitungsblock 1820 werden Nachbarpixeldaten empfangen. Im Verarbeitungsblock 1830 wird der Gradient der Ausgangsfarbe über die Größe des Pixelblocks bestimmt. Im Verarbeitungsblock 1840 werden Pixel im Pixelblock, die verarbeitet werden sollen, identifiziert und klassifiziert. Zum Beispiel werden Pixel, die interpoliert werden müssen, als Interpolationspixel identifiziert und klassifiziert, während Pixel, die extrapoliert müssen, als Extrapolationspixel identifiziert und klassifiziert werden. Im Verarbeitungsblock 1850 werden die klassifizierten Pixel mittels Interpolation oder Extrapolation verarbeitet. Wie oben diskutiert wird, wird eine Extrapolation durch Anwenden des Extrapolation_K-Werts auf den Gradienten durchgeführt. 19 stellt eine weitere Ausführungsform eines Gradientenfilterimplementierungs-Schattiererpseudocodes dar.
  • In einigen Fällen, können ein oder mehrere Grobpixel in einem Pixelblock außerhalb eines Dreiecks, das gerastert wird, liegen. Dies ist kein Problem, wenn partielle Ableitungen von Werten (z. B. ddx/ddy) mit konstanten Gradienten (z. B. Textur-UVs oder Tiefe), die korrekte Ergebnisse liefern, berechnet werden. Allerdings kann dies unvorhersagbare Ergebnisse verursachen, wenn es an einem Wert verwendet wird, der einen veränderlichen Gradienten besitzt, wie z. B. Texturinhalte oder die endgültige Farbausgabe.
  • In einer Ausführungsform wird dieses Problem durch Anwenden von Farbklemmwerten auf die horizontalen (x) und die vertikalen (y) Farbwerte gelöst. In dieser Ausführungsform umfassen die Farbklemmen einen absoluten Schwellenwert (z. B. A * grob_farb_wert + B * sqrt(abs(gradient)), wobei A und B Konstanten sind, die einen Beitrag über einem bestimmten absoluten Schwellenwert verringern). In einer derartigen Ausführungsform A = 1,0 und B = 0,04. 20 stellt eine Ausführungsform von Pseudocode zum Durchführen von Farbklemmen dar.
  • 21-23 stellen Pseudocode für weitere Ausführungsformen eines Gradientenfilterschattierprozesses, der Farbklemmen enthält, dar. Zum Beispiel stellen 21 und 22 Code für 2 × 2- bzw. 4 × 4-Pixelblöcke dar, während 23 Code für eine nichtquadratische VRS darstellt. Da die Gradientenfilterung an horizontalen und vertikalen Komponenten unabhängig arbeitet, kann die Implementierung nichtquadratischer VRS-Blockgrößen (1 × 2, 2 × 1, 4 × 2, 2 × 4 usw.) durch Wiederverwenden des bereitgestellten Codes für 2 × 2- und 4 × 4-Fälle erreicht werden. In 23 schafft der Code ein 1 × 2-Gradientenfilter, wobei das Filter lediglich entlang der y-Abmessung (Vertikalabmessung) angewendet wird.
  • Wie oben gezeigt wurde, implementiert der Filtermechanismus einen Algorithmus, der eine relativ kleine Anzahl Arithmetikbefehle erfordert. Da keine zusätzlichen Texturlesevorgänge oder Texturschreibvorgänge vorliegen, sind die zusätzlichen Kosten minimal zusätzliche Rechenbetriebsmittel sind erforderlich. Dies resultiert sowohl in einer höheren Ausgabequalität (wie z. B. durch ein SpitzenSignal/Rausch-Verhältnis (PSNR) mit vollständiger Auflösung als die „Ground-Truth“ gemessen wird) als auch einer Verringerung einer Blockartefaktwirkung; wodurch verbesserte visuelle Wirkungen auf statische Renderings sowie Szenen unter Bewegung geschaffen werden.
  • Ausführungsformen können als ein Element oder eine Kombination von Folgendem implementiert werden: ein oder mehrere Mikrochips oder eine oder mehrere integrierte Schaltungen, die unter Verwendung einer Hauptplatine verbunden sind, eine festverdrahtete Logik, Software, die durch eine Speichervorrichtung gespeichert und durch einen Mikroprozessor ausgeführt wird, Firmware, eine anwendungsspezifische integrierte Schaltung (ASIC) und/oder eine feldprogrammierbare Gate-Anordnung (FPGA). Der Begriff „Logik“ kann beispielhaft Software oder Hardware und/oder Kombinationen von Software und Hardware enthalten.
  • Ausführungsformen können z. B. als ein Computerprogrammprodukt bereitgestellt werden, das ein oder mehrere maschinenlesbare Medien enthalten kann, in denen maschinenlesbare Befehle gespeichert sind, die, wenn sie durch eine oder mehrere Maschinen wie z. B. einen Computer, ein Computernetz oder weitere elektronische Vorrichtungen ausgeführt werden, darin resultieren können, dass die eine oder die mehreren Maschinen Operationen gemäß Ausführungsformen, die hier beschrieben werden, ausführen. Ein maschinenlesbares Medium kann Disketten, optische Datenträger, CD-ROMs (kompakte Datenträger mit schreibgeschütztem Speicher) und magnetooptische Datenträger, ROMs, RAMs, EPROMs (löschbare programmierbare Festwertspeicher), EEPROMs (elektrisch löschbare programmierbare Festwertspeicher), magnetische oder optische Karten, Flash-Speicher oder weitere Typen von Medien/eines maschinenlesbaren Mediums, das zum Speichern maschinenausführbarer Befehle geeignet ist, enthalten, ist jedoch nicht darauf beschränkt.
  • Außerdem können Ausführungsformen als ein Computerprogrammprodukt heruntergeladen werden, wobei das Programm von einem entfernten Computer (z. B. ein Server) zu einem anfordernden Computer (z. B. ein Client) mittels eines oder mehrerer Datensignale, die in einer Trägerwelle oder ein weiteres Ausbreitungsmedium verkörpert und/oder dadurch moduliert sind, über eine Kommunikationsverbindung (z. B. ein Modem und/oder eine Netzverbindung) übertragen werden kann.
  • Die folgenden Abschnitte und/oder Beispiele betreffen weitere Ausführungsformen oder Beispiele. Besonderheiten in den Beispielen können überall in einer oder mehreren Ausführungsformen verwendet werden. Die verschiedenen Merkmale der verschiedenen Ausführungsformen oder Beispiel können unterschiedlich mit einigen enthaltenen und weiteren nicht enthaltenen Merkmalen kombiniert werden, um zu einer Vielzahl verschiedener Anwendungen zu passen. Beispiele können Gegenstände wie z. B. ein Verfahren, Mittel zum Durchführen von Vorgängen des Verfahrens, mindestens ein maschinenlesbares (oder computerlesbares) Medium, das Befehle enthält, die, wenn sie durch eine Maschine durchgeführt werden, bewirken, dass die Maschine Vorgänge des Verfahrens durchführt, oder eine Vorrichtung oder ein System um eine hybride Kommunikation gemäß Ausführungsformen und Beispielen, die hier beschrieben werden, zu ermöglichen, enthalten.
  • Einige Ausführungsformen betreffen Beispiel 1, das eine Vorrichtung enthält, um ein Schattieren mit veränderbarer Rate zu ermöglichen, die Folgendes umfasst: einen oder mehrere Prozessoren zum Erzeugen eines Verlaufsausgangspixelwerts für einen Pixelblock, Erzeugen eines Gradientenwerts, der einen Gradienten des Verlaufsausgangspixelwerts umfasst, unter Verwendung von Nachbarpixeldaten und Verarbeiten der Pixel im Pixelblock unter Verwendung des Gradientenwerts, um einen Feinpixelwert für ein oder mehrere Pixel zu erzeugen.
  • Beispiel 2 enthält den Gegenstand von Beispiel 1, wobei die Nachbarpixeldaten Daten umfassen, die verwendet werden, um partielle Differenzableitungskomponenten zu berechnen.
  • Beispiel 3 enthält den Gegenstand der Beispiele 1 und 2, wobei der Gradientenwert über eine Größe des Pixelblocks zwischen horizontalen oder vertikalen Nachbarn im Pixelblock bestimmt wird.
  • Beispiel 4 enthält den Gegenstand der Beispiele 1-3, wobei das Verarbeiten der Pixel ein Annähern einer bilinearen Filterung unter Verwendung des Gradientenwerts umfasst.
  • Beispiel 5 enthält den Gegenstand der Beispiele 1-4, wobei die bilineare Filterung für ein Pixel durch Addieren des horizontalen und des vertikalen Gradienten für ein Pixel zum Verlaufsausgangspixelwert angenähert wird.
  • Beispiel 6 enthält den Gegenstand der Beispiele 1-5, wobei die bilineare Filterung ferner durch angenähert für ein Pixel durch Skalieren des horizontalen und des vertikalen Gradienten, die um ein Versatzverhältnis skaliert sind, angenähert wird.
  • Beispiel 7 enthält den Gegenstand der Beispiele 1-6, wobei der eine oder die mehreren Prozessoren ferner ausgelegt sind, Pixel im Pixelblock, die interpoliert oder extrapoliert werden sollen, zu identifizieren und die Pixel als Interpolationspixel und Extrapolationspixel zu klassifizieren.
  • Beispiel 8 enthält den Gegenstand der Beispiele 1-7, wobei das Verarbeiten der Pixel ein Interpolieren der Interpolationspixel und ein Extrapolieren der Extrapolationspixel umfasst.
  • Beispiel 9 enthält den Gegenstand der Beispiele 1-8, wobei der eine oder die mehreren Prozessoren ferner ausgelegt sind, Farbklemmwerte auf horizontale und vertikale Werte eines Feinpixelwerts für das eine oder die mehreren Pixel anzuwenden.
  • Beispiel 10 enthält den Gegenstand der Beispiele 1-9, wobei ein Farbklemmwert einen absoluten Schwellenwert umfasst.
  • Einige Ausführungsformen betreffen Beispiel 11, das ein Verfahren enthält, um ein Schattieren mit veränderbarer Rate zu ermöglichen, das Folgendes umfasst: Erzeugen eines Verlaufsausgangspixelwerts für einen Pixelblock, Erzeugen eines Gradientenwerts, der einen Gradienten des Verlaufsausgangspixelwerts umfasst, unter Verwendung von Nachbarpixeldaten und Verarbeiten der Pixel im Pixelblock unter Verwendung des Gradientenwerts, um einen Feinpixelwert für ein oder mehrere Pixel zu erzeugen.
  • Beispiel 12 enthält den Gegenstand von Beispiel 11, wobei die Nachbarpixeldaten Daten umfassen, die verwendet werden, um partielle Differenzableitungskomponenten zu berechnen.
  • Beispiel 13 enthält den Gegenstand der Beispiele 11 und 12, wobei der Gradientenwert über eine Größe des Pixelblocks zwischen horizontalen oder vertikalen Nachbarn im Pixelblock bestimmt wird.
  • Beispiel 14 enthält den Gegenstand der Beispiele 11-13, wobei das Verarbeiten der Pixel ein Annähern einer bilinearen Filterung unter Verwendung des Gradientenwerts umfasst.
  • Beispiel 15 enthält den Gegenstand der Beispiele 11-14, das ferner Folgendes umfasst: Identifizieren von Pixeln im Pixelblock, die interpoliert oder extrapoliert werden sollen, und Klassifizieren der Pixel als Interpolationspixel und Extrapolationspixel.
  • Beispiel 16 enthält den Gegenstand der Beispiele 11-15, wobei das Verarbeiten der Pixel Folgendes umfasst: Interpolieren der Interpolationspixel und Extrapolieren der Extrapolationspixel.
  • Einige Ausführungsformen betreffen Beispiel 17, das mindestens ein nichttransitorisches computerlesbares Medium enthält, in dem Befehle gespeichert sind, die, wenn sie durch einen oder mehrere Prozessoren ausgeführt werden, die Prozessoren veranlassen zum Erzeugen eines Verlaufsausgangspixelwerts für einen Pixelblock, Erzeugen eines Gradientenwerts, der einen Gradienten des Verlaufsausgangspixelwerts umfasst, unter Verwendung von Nachbarpixeldaten und Verarbeiten der Pixel im Pixelblock unter Verwendung des Gradientenwerts, um einen Feinpixelwert für ein oder mehrere Pixel zu erzeugen.
  • Beispiel 18 enthält den Gegenstand von Beispiel 17, wobei das Verarbeiten der Pixel ein Annähern einer bilinearen Filterung unter Verwendung des Gradientenwerts umfasst.
  • Beispiel 19 enthält den Gegenstand der Beispiele 17 und 18, in dem Befehle gespeichert sind, die, wenn sie durch einen oder mehrere Prozessoren ausgeführt werden, die Prozessoren veranlassen zum Identifizieren von Pixeln im Pixelblock, die interpoliert oder extrapoliert werden sollen, und Klassifizieren der Pixel als Interpolationspixel und Extrapolationspixel.
  • Beispiel 20 enthält den Gegenstand von Beispiel 17-19, wobei das Verarbeiten der Pixel Folgendes umfasst: Interpolieren der Interpolationspixel und Extrapolieren der Extrapolationspixel.
  • Die vorhergehende Beschreibung und die Zeichnungen sollen in einer veranschaulichenden statt einer einschränkenden Weise betrachtet werden. Fachleute werden verstehen, dass verschiedene Modifikationen und Änderungen an den Ausführungsformen, die hier beschrieben werden, vorgenommen werden können, ohne vom weiteren Geist und Umfang der Erfindung, wie er in den angehängten Ansprüchen dargelegt ist, abzuweichen.

Claims (20)

  1. Vorrichtung, um ein Schattieren mit veränderbarer Rate zu ermöglichen, die Folgendes umfasst: einen oder mehrere Prozessoren zum Erzeugen eines Verlaufsausgangspixelwerts für einen Pixelblock; Erzeugen eines Gradientenwerts, der einen Gradienten des Verlaufsausgangspixelwerts umfasst, unter Verwendung von Nachbarpixeldaten und Verarbeiten der Pixel im Pixelblock unter Verwendung des Gradientenwerts, um einen Feinpixelwert für ein oder mehrere Pixel zu erzeugen.
  2. Vorrichtung nach Anspruch 1, wobei die Nachbarpixeldaten Daten umfassen, die verwendet werden, um partielle Differenzableitungskomponenten zu berechnen.
  3. Vorrichtung nach Anspruch 1 oder 2, wobei der Gradientenwert über eine Größe des Pixelblocks zwischen horizontalen oder vertikalen Nachbarn im Pixelblock bestimmt wird.
  4. Vorrichtung nach den Ansprüchen 1-3, wobei das Verarbeiten der Pixel ein Annähern einer bilinearen Filterung unter Verwendung des Gradientenwerts umfasst.
  5. Vorrichtung nach den Ansprüchen 1-4, wobei die bilineare Filterung für ein Pixel durch Addieren des horizontalen und des vertikalen Gradienten für ein Pixel zum Verlaufsausgangspixelwert angenähert wird.
  6. Vorrichtung nach den Ansprüchen 1-5, wobei die bilineare Filterung ferner durch angenähert für ein Pixel durch Skalieren des horizontalen und des vertikalen Gradienten, die um ein Versatzverhältnis skaliert sind, angenähert wird.
  7. Vorrichtung nach den Ansprüchen 1-6, wobei der eine oder die mehreren Prozessoren ferner ausgelegt sind, Pixel im Pixelblock, die interpoliert oder extrapoliert werden sollen, zu identifizieren und die Pixel als Interpolationspixel und Extrapolationspixel zu klassifizieren.
  8. Vorrichtung nach den Ansprüchen 1-7, wobei das Verarbeiten der Pixel ein Interpolieren der Interpolationspixel und ein Extrapolieren der Extrapolationspixel umfasst.
  9. Vorrichtung nach den Ansprüchen 1-8, wobei der eine oder die mehreren Prozessoren ferner ausgelegt sind, Farbklemmwerte auf horizontale und vertikale Werte eines Feinpixelwerts für das eine oder die mehreren Pixel anzuwenden.
  10. Vorrichtung nach den Ansprüchen 1-9, wobei ein Farbklemmwert einen absoluten Schwellenwert umfasst.
  11. Verfahren, um ein Schattieren mit veränderbarer Rate zu ermöglichen, das Folgendes umfasst: Erzeugen eines Verlaufsausgangspixelwerts für einen Pixelblock; Erzeugen eines Gradientenwerts, der einen Gradienten des Verlaufsausgangspixelwerts umfasst, unter Verwendung von Nachbarpixeldaten und Verarbeiten der Pixel im Pixelblock unter Verwendung des Gradientenwerts, um einen Feinpixelwert für ein oder mehrere Pixel zu erzeugen.
  12. Verfahren nach Anspruch 11, wobei die Nachbarpixeldaten Daten umfassen, die verwendet werden, um partielle Differenzableitungskomponenten zu berechnen.
  13. Verfahren nach Anspruch 11 oder 12, wobei der Gradientenwert über eine Größe des Pixelblocks zwischen horizontalen oder vertikalen Nachbarn im Pixelblock bestimmt wird.
  14. Verfahren nach den Ansprüchen 11-13, wobei das Verarbeiten der Pixel ein Annähern einer bilinearen Filterung unter Verwendung des Gradientenwerts umfasst.
  15. Verfahren nach den Ansprüchen 11-14, das ferner Folgendes umfasst: Identifizieren von Pixeln im Pixelblock, die interpoliert oder extrapoliert werden sollen; und Klassifizieren der Pixel als Interpolationspixel und Extrapolationspixel.
  16. Verfahren nach den Ansprüchen 11-15, wobei das Verarbeiten der Pixel Folgendes umfasst: Interpolieren der Interpolationspixel und Extrapolieren der Extrapolationspixel.
  17. Nichttransitorisches computerlesbares Medium oder nichttransitorische computerlesbare Medien, in dem Befehle gespeichert sind, die, wenn sie durch einen oder mehrere Prozessoren ausgeführt werden, die Prozessoren veranlassen zum Erzeugen eines Verlaufsausgangspixelwerts für einen Pixelblock; Erzeugen eines Gradientenwerts, der einen Gradienten des Verlaufsausgangspixelwerts umfasst, unter Verwendung von Nachbarpixeldaten und Verarbeiten der Pixel im Pixelblock unter Verwendung des Gradientenwerts, um einen Feinpixelwert für ein oder mehrere Pixel zu erzeugen.
  18. Computerlesbares Medium nach Anspruch 17, wobei das Verarbeiten der Pixel ein Annähern einer bilinearen Filterung unter Verwendung des Gradientenwerts umfasst.
  19. Computerlesbares Medium nach Anspruch 17 oder 18, in dem Befehle gespeichert sind, die, wenn sie durch einen oder mehrere Prozessoren ausgeführt werden, die Prozessoren veranlassen zum Identifizieren von Pixeln im Pixelblock, die interpoliert oder extrapoliert werden sollen; und Klassifizieren der Pixel als Interpolationspixel und Extrapolationspixel.
  20. Computerlesbares Medium nach den Ansprüchen 17-19, wobei das Verarbeiten der Pixel Folgendes umfasst: Interpolieren der Interpolationspixel und Extrapolieren der Extrapolationspixel.
DE102020118078.0A 2019-07-10 2020-07-09 Gradientennäherungsfiltermechanismus Pending DE102020118078A1 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201962872357P 2019-07-10 2019-07-10
US62/872,357 2019-07-10
US16/910,252 US11120620B2 (en) 2019-07-10 2020-06-24 Gradient approximation filtering mechanism
US16/910,252 2020-06-24

Publications (1)

Publication Number Publication Date
DE102020118078A1 true DE102020118078A1 (de) 2021-01-14

Family

ID=74092460

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020118078.0A Pending DE102020118078A1 (de) 2019-07-10 2020-07-09 Gradientennäherungsfiltermechanismus

Country Status (1)

Country Link
DE (1) DE102020118078A1 (de)

Similar Documents

Publication Publication Date Title
DE112020000874T5 (de) Systeme und Methoden zum Aktualisieren von speicherseitigen Caches in einer Multi-GPU-Konfiguration
DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
DE102020120372A1 (de) Programmierbare wandlungshardware
DE102020129251A1 (de) Adaptives verformbares kernvorhersagenetzwerk zum bildentrauschen
DE102020121814A1 (de) Vorrichtung und Verfahren zum Verwenden von Dreieckspaaren und gemeinsam genutzten Transformationsschaltungen zum Verbessern der Strahlverfolgungsleistung
DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
DE102020132272A1 (de) Verfahren und vorrichtung zum codieren basierend auf schattierungsraten
DE102020115680A1 (de) LESEZUSAMMENFüGUNG UND M ULTICAST-RÜCKFÜHRUNG FÜR EINEN GETEILTEN LOKALEN SPEICHER
DE102020131704A1 (de) Multikachelspeicherverwaltungsmechanismus
DE102019110027A1 (de) Kachelbasiertes rendern für mehrere auflösungen von bildern
DE102020130865A1 (de) Anweisungen und logik für vektor-multiplikation-addition mit zero-skipping
DE102020124872A1 (de) Verwendung von innere-abdeckung-informationen durch eine konservative-rasterung-pipeline zum aktivieren von earlyz für eine konservative rasterung
DE102020132871A1 (de) Verbessern von hierarchischer tiefenpuffer-cullingeffizienz durch maskenakkumulation
DE112020000848T5 (de) Skalarkernintegration
DE102020130880A1 (de) Mechanismus zur partitionierung eines geteilten lokalen speichers
DE102020126177A1 (de) Verfahren und vorrichtung zum planen der threadreihenfolge, um den cache-wirkungsgrad zu verbessern
DE102020129625A1 (de) Seitentabellen-mapping-mechanismus
DE102020129432A1 (de) System und Verfahren zum Anpassen eines ausführbaren Objekts an eine Verarbeitungseinheit
DE102020130184A1 (de) Optimierungsmechanismus mit spärlich besetzten matrizen
DE102020129409A1 (de) Dynamisches unterteilen von aktivierungen und kernels zum verbessern von speichereffizienz
DE102020115578A1 (de) Management von partiellem schreiben in einer grafik-enginemit mehreren kacheln
DE102019106701A1 (de) Einrichtung und Verfahren zum virtualisierten Planen von mehreren doppelten Grafik-Engines
DE102020134334A1 (de) Vorrichtung und verfahren zur quantisierten konvergenten richtungsbasierten strahlsortierung
DE102020113400A1 (de) Registerteilungsmechanismus
DE102020113789A1 (de) Asynchroner ausführungsmechanismus