DE102021116364A1 - Vorrichtung und verfahren für strahlverfolgungs-detaillierungsgradübergänge von hoher qualität - Google Patents

Vorrichtung und verfahren für strahlverfolgungs-detaillierungsgradübergänge von hoher qualität Download PDF

Info

Publication number
DE102021116364A1
DE102021116364A1 DE102021116364.1A DE102021116364A DE102021116364A1 DE 102021116364 A1 DE102021116364 A1 DE 102021116364A1 DE 102021116364 A DE102021116364 A DE 102021116364A DE 102021116364 A1 DE102021116364 A1 DE 102021116364A1
Authority
DE
Germany
Prior art keywords
graphics
data
ray
traversal
shader
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
DE102021116364.1A
Other languages
English (en)
Inventor
Holger Gruen
Karthik Vaidyanathan
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
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE102021116364A1 publication Critical patent/DE102021116364A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06MCOUNTING MECHANISMS; COUNTING OF OBJECTS NOT OTHERWISE PROVIDED FOR
    • G06M1/00Design features of general application
    • G06M1/27Design features of general application for representing the result of count in the form of electric signals, e.g. by sensing markings on the counter drum
    • G06M1/272Design features of general application for representing the result of count in the form of electric signals, e.g. by sensing markings on the counter drum using photoelectric means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/36Level of detail

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Biomedical Technology (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Biophysics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Image Generation (AREA)

Abstract

Vorrichtung und Verfahren für genauere Detaillierungsgradübergänge. Zum Beispiel umfasst eine Ausführungsform einen Grafikprozessor, der umfasst: Strahltraversierungshardwarelogik zum Traversieren eines Strahls durch eine Beschleunigungsstruktur, um Intersektionen zwischen dem Strahl und einer oder mehreren Objektinstanzen zu bestimmen; und einen Detaillierungsgrad-Selektor zum: Setzen einer Instanzvergleichsmaske, die mit einer Objektinstanz assoziiert ist, auf einen ersten Detaillierungsgrad (LOD), wobei die Instanzvergleichsmaske einen N-Bit-Wert und ein oder mehrere Bits zum Anzeigen einer Art von Vergleichsoperation umfasst; Vergleichen eines Wertes aus einer Strahlmaske mit dem N-Bit-Wert gemäß der Art von Vergleichsoperation, um ein Vergleichsergebnis zu erzeugen; und Bestimmen, ob der erste LOD oder ein zweiter LOD zum Rendern eines oder mehrerer Pixel verwendet werden soll, gemäß dem Vergleichsergebnis.

Description

  • HINTERGRUND
  • Querverweis auf verwandte Anmeldungen
  • Diese Anmeldung beansprucht die Priorität der am 11. Juli 2020 eingereichten vorläufigen US-Patentanmeldung Serie Nr. 63/050,796 , die durch Bezugnahme hierin in ihrer Gesamtheit aufgenommen wird.
  • Gebiet der Erfindung
  • Diese Erfindung betrifft das Gebiet von Grafikprozessoren. Insbesondere betrifft die Erfindung eine Vorrichtung und ein Verfahren für Strahlverfolgung mit Detaillierungsgradübergängen von hoher Qualität.
  • Beschreibung der verwandten Technik
  • Strahlverfolgung ist eine Technik, bei welcher Lichttransport durch physikalisch gestütztes Rendering simuliert wird. Obwohl beim Rendern von Filmen weitverbreitet, wurde sie bis vor wenigen Jahren als zu ressourcenintensiv für die Echtzeit-Performance angesehen. Eine der wichtigsten Operationen bei der Strahlverfolgung ist die Verarbeitung einer Sichtbarkeitsabfrage für Strahl-Szene-Intersektionen, die als „Strahltraversierung“ bekannt ist, wobei Strahl-Szene-Intersektionen durch Traversieren und Schneiden von Knoten in einer Begrenzungsvolumenhierarchie (BVH - Bounding Volume Hierarchy) berechnet werden.
  • Bei der Grafikverarbeitungsarchitektur bezieht sich der Detaillierungsgrad (LOD - Level of Detail) auf die Auswahl von Gitterauflösungen basierend auf Variablen, wie beispielsweise Abstand. Zum Beispiel können die Details eines hochauflösenden Gitters nicht erforderlich sein, wenn das Gitter von der aktuellen Perspektive des Benutzers weiter entfernt ist. LOD-Techniken werden verwendet, um Speicherverbrauch zu reduzieren und Grafikverarbeitungsfunktionen, wie beispielsweise geometrisches Aliasing, zu verbessern.
  • Figurenliste
  • Die vorliegende Erfindung wird aus der folgenden ausführlichen Beschreibung in Verbindung mit den folgenden Zeichnungen besser verständlich, wobei:
    • 1 ein Blockdiagramm einer Ausführungsform eines Computersystems mit einem Prozessor mit einem oder mehreren Prozessorkernen und Grafikprozessoren ist;
    • 2A bis 2D Computersysteme und Grafikprozessoren veranschaulichen, die durch Ausführungsformen der Erfindung bereitgestellt werden;
    • 3A bis 3C Blockdiagramme zusätzlicher Grafikprozessor- und Rechenbeschleunigerarchitekturen veranschaulichen;
    • 4 ein Blockdiagramm einer Ausführungsformen einer Grafikverarbeitungs-Engine für einen Grafikprozessor ist;
    • 5A und 5B Thread-Ausführungslogik veranschaulichen, die ein Array von Verarbeitungselementen umfasst;
    • 6 ein Blockdiagramm von Thread-Ausführungslogik ist, die ein Array von Verarbeitungselementen umfasst;
    • 7 ein Grafikprozessor-Ausführungseinheitsanweisungsformat gemäß einer Ausführungsform veranschaulicht;
    • 8 ein Blockdiagramm einer anderen Ausführungsform eines Grafikprozessors ist, der eine Grafikpipeline, eine Medienpipeline, eine Anzeige-Engine, Thread-Ausführungslogik und eine Render-Ausgabepipeline umfasst.
    • 9A ein Blockdiagramm ist, das ein Grafikprozessor-Befehlsformat gemäß einer Ausführungsform veranschaulicht;
    • 9B ist ein Blockdiagramm, das eine Grafikprozessor-Befehlssequenz gemäß einer Ausführungsform;
    • 10 beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem gemäß einer Ausführungsform veranschaulicht;
    • 11A beispielhafte IP-Kernentwicklungssysteme veranschaulicht, die zum Herstellen einer integrierten Schaltung verwendet werden können, um Operationen gemäß einer Ausführungsform durchzuführen;
    • 11B bis 11D beispielhafte Package-Anordnungen mit Chiplets und Interposer-Substraten veranschaulichen;
    • 12 eine beispielhafte integrierte Systemchip-Schaltung, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt sein kann, gemäß einer Ausführungsform veranschaulicht;
    • 13 einen beispielhaften Grafikprozessor einer integrierten Systemchip-Schaltung veranschaulicht, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt sein kann;
    • 14 einen beispielhaften Grafikprozessor gemäß einer Ausführungsform der Erfindung veranschaulicht;
    • 15 eine Architektur zum Durchführen von Ersttraining einer Architektur für maschinelles Lernern veranschaulicht;
    • 16 veranschaulicht, wie eine Engine für maschinelles Lernen während der Laufzeit kontinuierlich trainiert und aktualisiert wird;
    • 17 veranschaulicht, wie eine Engine für maschinelles Lernen während der Laufzeit kontinuierlich trainiert und aktualisiert wird;
    • 18A und 18B veranschaulichen, wie Daten für maschinelles Lernen in einem Netzwerk gemeinsam genutzt werden; und
    • 19 ein Verfahren zum Trainieren einer Engine für maschinelles Lernern veranschaulicht;
    • 20 veranschaulicht, wie Knoten Phantomregionsdaten austauschen, um verteilte Entrauschungsoperationen durchzuführen;
    • 21 eine Architektur veranschaulicht, in welcher Bild-Rendering- und -Entrauschungsoperationen über eine Mehrzahl von Knoten verteilt werden;
    • 22 zusätzliche Details einer Architektur für verteiltes Rendern und Entrauschen veranschaulicht;
    • 23 ein Verfahren zur Durchführung von verteiltem Rendern und Entrauschen veranschaulicht.
    • 24 ein Verfahren für maschinelles Lernen veranschaulicht;
    • 25 eine Mehrzahl von miteinander verbundenen Universalgrafikprozessoren veranschaulicht;
    • 26 einen Satz von Faltungsschichten und vollständig verbundenen Schicht für eine Implementierung maschinellen Lernens veranschaulicht;
    • 27 ein Beispiel einer Faltungsschicht veranschaulicht;
    • 28 ein Beispiel eines Satzes von miteinander verbundenen Knoten in einer Implementierung maschinellen Lernens veranschaulicht;
    • 29 einen Trainingsrahmen veranschaulicht, innerhalb dessen ein neuronales Netzwerk unter Verwendung eines Trainingsdatensatzes lernt;
    • 30A Beispiele von Modellparallelität und Datenparallelität veranschaulicht;
    • 30B einen Systemchip (SoC) veranschaulicht;
    • 31 eine Verarbeitungsarchitektur veranschaulicht, die Strahlverfolgungskerne und Tensorkerne umfasst;
    • 32 ein Beispiel eines Strahlenbündels veranschaulicht;
    • 33 eine Vorrichtung zum Durchführen von Strahlenbündelverfolgung veranschaulicht;
    • 34 ein Beispiel einer Strahlenbündelhierarchie veranschaulicht;
    • 35 ein Verfahren zum Durchführen von Strahlenbündelverfolgung veranschaulicht;
    • 36 ein Beispiel einer verteilten Strahlverfolgungs-Engine veranschaulicht;
    • 37 und 38 Komprimierung veranschaulichen, die in einem Strahlverfolgungssystem durchgeführt wird;
    • 39 ein Verfahren veranschaulicht, das in einer Strahlverfolgungsarchitektur implementiert wird;
    • 40 eine beispielhafte Hybrid-Strahlverfolgungsvorrichtung veranschaulicht;
    • 41 Stapel veranschaulicht, die für Strahlverfolgungsoperationen verwendet werden;
    • 42 zusätzliche Details für eine Hybrid-Strahlverfolgungsvorrichtung veranschaulicht;
    • 43 eine Begrenzungsvolumenhierarchie veranschaulicht;
    • 44 einen Aufrufstapel und einen Traversierungszustandsspeicher veranschaulicht;
    • 45 ein Traversierungs- und Intersektionsverfahren veranschaulicht;
    • 46A und 46B veranschaulichen, wie mehrere Verteilzyklen zum Ausführen bestimmter Shader benötigt werden;
    • 47 veranschaulicht, wie ein einziger Verteilzyklus eine Mehrzahl von Shadern ausführt;
    • 48 veranschaulicht, wie ein einziger Verteilzyklus eine Mehrzahl von Shadern ausführt;
    • 49 eine Architektur zum Ausführen von Strahlverfolgungsanweisungen veranschaulicht;
    • 50 ein Verfahren zur Ausführung von Strahlverfolgungsanweisungen innerhalb eines Threads veranschaulicht;
    • 51 eine Ausführungsform einer Architektur für asynchrone Strahlverfolgung veranschaulicht;
    • 52A eine Ausführungsform einer Strahltraversierungsschaltung veranschaulicht;
    • 52B Prozesse veranschaulicht, die in einer Ausführungsform zum Verwalten von Strahlspeicherbanken ausgeführt werden;
    • 53 eine Ausführungsform einer Prioritätsauswahlschaltungsanordnung/-Logik veranschaulicht;
    • 54 beispielhafte Instanz-Flag-, Geometrie-Flag- und End-Flag-Einstellungen veranschaulicht;
    • 55A und 55B zusätzliche Flag-Einstellungen gemäß Ausführungsformen der Erfindung veranschaulichen;
    • 56 eine Ausführungsform zum Bestimmen von frühzeitigem Aus der Strahlverfolgungspipeline veranschaulicht;
    • 57 eine Ausführungsform einer Prioritätsauswahlschaltungsanordnung/-Logik veranschaulicht;
    • 58 eine beispielhafte Begrenzungsvolumenhierarchie (BVH) (BVH) veranschaulicht, die für Strahltraversierungsoperationen verwendet wird;
    • 59A und 59B zusätzliche Traversierungsoperationen veranschaulichen;
    • 60 eine Ausführungsform einer Stapelverwaltungsschaltungsanordnung zum Verwalten eines BVH-Stapels veranschaulicht;
    • 61A und 61B beispielhafte Datenstrukturen, Teilstrukturen und Operationen veranschaulichen, die für Strahlen, Treffer und Stapel durchgeführt werden; und
    • 62 einen Detaillierungsgrad-(LOD-)Selektor gemäß einer Ausführungsform veranschaulicht;
    • 63 ein Verfahren gemäß dem LOD-Selektor veranschaulicht.
  • AUSFÜHRLICHE BESCHREIBUNG
  • In der folgenden Beschreibung werden zu Erläuterungszwecken zahlreiche spezifische Details dargelegt, um ein umfassendes Verständnis der Ausführungsformen zu vermitteln, die im Folgenden beschrieben werden. Für den Fachmann ist jedoch zu erkennen, dass die Ausführungsformen der Erfindung ohne einige dieser spezifischen Einzelheiten realisiert werden können. In anderen Fällen sind allgemein bekannte Strukturen und Vorrichtungen in Form von Blockdiagrammen dargestellt, um ein Verkomplizieren der den Ausführungsformen der Erfindung zugrunde liegenden Prinzipien zu vermeiden.
  • BEISPIELHAFTE GRAFIKPROZESSORARCHITEKTUREN UND DATENTYPEN
  • Systemübersicht
  • 1 ist ein Blockdiagramm eines Verarbeitungssystems 100 gemäß einer Ausführungsform. Das System 100 kann in einem Desktopsystem mit einem Prozessor, einem Workstation-System mit mehreren Prozessoren oder einem Serversystem mit einer großen Anzahl von Prozessoren 102 oder Prozessorkernen 107 verwendet werden. In einer Ausführungsform ist das System 100 eine Verarbeitungsplattform, die in eine integrierte Systemchip-(SoC-)Schaltung zur Verwendung in mobilen, handgeführten oder eingebetteten Vorrichtungen, beispielsweise in Internet-der-Dinge-(IoT-)Vorrichtungen mit drahtgebundener oder drahtloser Konnektivität zu einem lokalen oder Weitverkehrsnetzwerk, eingebaut ist.
  • In einer Ausführungsform kann das System 100 eine serverbasierte Spieleplattform; eine Spielkonsole, einschließlich einer Spiel- und Medienkonsole; eine mobile Spielkonsole, eine handgeführte Spielkonsole oder eine Online-Spielkonsole umfassen, damit gekoppelt sein oder darin intergiert sein. In einigen Ausführungsformen ist das System 100 Teil eines Mobiltelefons, eines Smartphones, einer Tablet-Computervorrichtung oder einer mobilen, mit Internet verbundenen Vorrichtung, beispielsweise eins Laptops mit niedriger internen Speicherkapazität. Das Verarbeitungssystem 100 kann außerdem eine am Körper tragbare Vorrichtung, beispielsweise eine am Körper tragbare Smartwatch-Vorrichtung; Smart-Brillen oder - Kleidungsstücke, die um Merkmale erweiterter Realität (AR - Augmented Reality) oder virtueller Realität (VR) ergänzt sind, um visuelle, akustische oder taktile Ausgaben zum Ergänzen von visuellen, akustischen oder taktilen Erlebnissen der realen Welt bereitzustellen oder anderweitig Text, Audio, Grafiken, Video, Holografiebilder, Video oder taktiles Feedback bereitzustellen; eine andere Vorrichtung für erweiterte Realität (AR) oder eine andere Vorrichtung für virtuelle Realität (VR) umfassen, damit gekoppelt sein oder darin integriert sein. In einigen Ausführungsformen umfasst das Verarbeitungssystem 100 eine Fernseh- oder Digitalempfangsvorrichtung oder ist ein Teil davon. In einer Ausführungsform kann das System 100 ein selbstfahrendes Fahrzeug, wie beispielsweise einen Bus, einen Sattelzug, ein Auto, ein Motorrad oder ein Elektrofahrrad, ein Flugzeug oder einen Segelflieger (oder eine beliebige Kombination davon) umfassen, damit gekoppelt sein oder darin integriert sein. Das selbstfahrende Fahrzeug kann das System 100 zum Verarbeiten der rund um das Fahrzeug erfassten Umgebung verwenden.
  • In einigen Ausführungsformen umfassen der eine oder die mehreren Prozessoren 102 jeweils einen oder mehrere Prozessorkerne 107 zum Verarbeiten von Anweisungen, die bei Ausführung Operationen für System- oder Benutzersoftware durchführen. In einigen Ausführungsformen ist mindestens einer des einen oder der mehreren Prozessorkerne 107 zum Verarbeiten eines spezifischen Anweisungssatzes 109 konfiguriert. In einigen Ausführungsformen kann der Anweisungssatz 109 ein Rechnen mit komplexem Anweisungssatz (CSIC - Complex Instruction Set Computing), Rechnen mit reduziertem Anweisungssatz (RISC - Reduced Instruction Set Computing) oder Rechnen mit sehr langen Anweisungswörtern (VLIW - Very Long Instruction Word) ermöglichen. Ein oder mehrere Prozessorkern 107 können einen verschiedenen Anweisungssatz 109 verarbeiten, der Anweisungen zum Ermöglichen der Emulation von anderen Anweisungssätzen umfassen kann. Der Prozessorkern 107 kann außerdem andere Verarbeitungsvorrichtungen, beispielsweise einen Digitalsignalprozessor (DSP), umfassen.
  • In einigen Ausführungsformen umfasst der Prozessor 102 einen Cachespeicher 104. In Abhängigkeit von der Architektur kann der Prozessor 102 einen einzigen internen Cache oder mehrere Ebenen von internem Cache aufweisen. In einigen Ausführungsformen wird der Cachespeicher von verschiedenen Komponenten des Prozessors 102 gemeinsam genutzt. In einigen Ausführungsformen verwendet der Prozessor 102 außerdem einen externen Cache (z. B. einen Cache der Ebene 3 (L3) oder einen Cache der letzten Ebene (LLC - Last Level Cache)) (nicht dargestellt), der von den Prozessorkernen 107 unter Verwendung von bekannten Cache-Kohärenztechniken gemeinsam genutzt werden kann. Eine Registerdatei 106 kann zusätzlich im Prozessor 102 umfasst sein und verschiedene Arten von Registern zum Speichern verschiedener Datentypen (z. B. Ganzzahlregister, Gleitkommaregister, Statusregister und Anweisungszeigerregister) umfassen. Einige Register können Universalregister sein, während andere Register spezifisch für das Design des Prozessors 102 sein können.
  • In einigen Ausführungsformen sind der eine oder die mehreren Prozessor(en) 102 mit einem oder mehreren Schnittstellenbus(sen) 110 gekoppelt, um Kommunikationssignale, wie beispielsweise Adressen oder Daten, oder Steuersignale zwischen dem Prozessor 102 und anderen Komponenten im System 100 zu übertragen. Der Schnittstellenbus 110 kann in einer Ausführungsform ein Prozessorbus, beispielsweise eine Version des Direct Media Interface-(DMI-)Busses, sein. Prozessorbusse sind jedoch nicht auf den DMI-Bus beschränkt, sondern sie können auch einen oder mehrere Peripheral Component Interconnect-Busse (z. B. PCI, PCI express), Speicherbusse oder andere Typen von Schnittstellenbussen umfassen. In einer Ausführungsform umfassen die Prozessor(en) 102 eine integrierte Speichersteuerung 116 und einen Plattformsteuerhub 130. Die Speichersteuerung 116 ermöglicht Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 100, während der Plattformsteuerhub (PCH) 130 über einen lokalen E-/A-Bus Verbindungen zu E-/A-Vorrichtungen bereitstellt.
  • Die Speichervorrichtung 120 kann eine dynamische Direktzugriffspeichervorrichtung (DRAM - Dynamic Random Access Memory), eine statische Direktzugriffspeichervorrichtung (SRAM - Static Random Access Memory), eine Flash-Speichervorrichtung, eine Phasenwechselspeichervorrichtung oder irgendeine anderes Speichervorrichtung sein, die eine geeignete Performance aufweist, um als ein Prozessspeicher zu dienen. In einer Ausführungsform kann die Speichervorrichtung 120 als Systemspeicher für das System 100 fungieren, um Daten 122 und Anweisungen 121 zur Verwendung zu speichern, wenn der eine oder die mehreren Prozessoren 102 eine Anwendung oder einen Prozess ausführen. Die Speichersteuerung 116 ist außerdem mit einem optionalen externen Grafikprozessor 118 gekoppelt, der mit dem einen oder den mehren Grafikprozessoren 108 in den Prozessoren 102 kommunizieren kann, um Grafik- und Medienoperationen durchzuführen. In einigen Ausführungsformen können Grafik-, Medien- und/oder Rechenoperationen durch einen Beschleuniger 112 unterstützt werden, der ein Coprozessor ist, der zum Durchführen eines spezialisierten Satzes von Grafik-, Medien- oder Rechenoperationen konfiguriert sein kann. Zum Beispiel ist in einer Ausführungsform der Beschleuniger 112 ein Matrixmultiplikationsbeschleuniger, der zum Optimieren von Operationen maschinellen Lernens oder Rechenoperationen verwendet wird. In einer Ausführungsform ist der Beschleuniger 112 ein Strahlverfolgungsbeschleuniger, der zum Durchführen von Strahlverfolgungsoperationen zusammen mit dem Grafikprozessor 108 verwendet werden kann. In einer Ausführungsform kann ein externer Beschleuniger 119 statt oder zusammen mit dem Beschleuniger 112 verwendet werden.
  • In einigen Ausführungsformen kann eine Anzeigevorrichtung 111 mit den Prozessor(en) 102 verbunden sein. Bei der Anzeigevorrichtung 111 kann es sich um eine oder mehrere von einer internen Anzeigevorrichtung, wie beispielsweise in einer elektronischen Mobilvorrichtung oder einer Laptop-Vorrichtung, oder einer externen Anzeigevorrichtung handeln, die über eine Anzeigeschnittstelle (z. B. DisplayPort usw.) angeschlossen ist. In einer Ausführungsform kann die Anzeigevorrichtung 111 eine am Kopf angebrachte Anzeige (HMD - Head Mounted Display), beispielsweise ein stereoskopisches Anzeigegerät zur Verwendung in Anwendungen für virtuelle Realität (VR - Virtual Reality) oder Anwendungen für erweiterte Realität (AR - Augmented Reality), sein.
  • In einigen Ausführungsformen ermöglicht der Plattformsteuerhub 130, dass Peripheriegeräte über einen Hochgeschwindigkeits-E-/A-Bus mit der Speichervorrichtung 120 und dem Prozessor 102 verbunden werden. Die E-/A-Peripheriegeräte umfassen, ohne darauf beschränkt zu sein, eine Audiosteuerung 146, eine Netzwerksteuerung 134, eine Firmware-Schnittstelle 128, einen drahtlosen Sendeempfänger 126, Berührungssensoren 125, eine Datenspeichervorrichtung 124 (z. B. eine nichtflüchtigen Speicher, einen flüchtigen Speicher, ein Festplattenlaufwerk, einen Flash-Speicher, NAND, 3D-NAND, 3D-XPoint usw.). Die Datenspeichervorrichtung 124 kann über eine Speicherschnittstelle (z. B. SATA) oder über einen Peripheriebus, beispielsweise einen Peripheral Component Interconnect-Bus (z. B. PCI, PCI express) angeschlossen werden. Die Berührungssensoren 125 können Touchscreen-Sensoren, Drucksensoren oder Fingerabdrucksensoren umfassen. Der drahtlose Sendeempfänger 126 kann ein Wi-Fi-Sendeempfänger, ein Bluetooth-Sendeempfänger oder ein Mobilnetzwerk-Sendeempfänger, wie beispielsweise ein 3G-, 4G-, 5G- oder Long-Term Evolution-(LTE-)Sendeempfänger, sein. Die Firmware-Schnittstelle 128 ermöglicht Kommunikation mit der Systemfirmware und kann zum Beispiel eine vereinheitlichte erweiterbare Firmware-Schnittstelle (UEFI - Unified Extensible Firmware Interface) sein. Die Netzwerksteuerung 134 kann Netzwerkverbindung mit einem drahtgebundenen Netzwerk ermöglichen. In einigen Ausführungsformen ist eine Hochleistungs-Netzwerksteuerung (nicht dargestellt) mit dem Schnittstellenbus 110 gekoppelt. Die Audiosteuerung 146 ist in einer Ausführungsform eine hochauflösende Mehrkanal-Audiosteuerung. In einer Ausführungsform umfasst das System 100 eine optionale Legacy-E-/A-Steuerung 140 zum Koppeln von Legacy-Vorrichtungen (z. B. Personal System 2 (PS/2)) mit dem System. Der Plattformsteuerhub 130 kann außerdem mit einer oder mehreren USB-(Universal Serial Bus-)Steuerungen 142 zum Anschließen von Eingabevorrichtungen, wie beispielsweise Kombinationen aus Tastatur und Maus 143, einer Kamera 144 oder anderer USB-Eingabevorrichtungen, verbunden sein.
  • Es versteht sich, dass das dargestellte System 100 lediglich beispielhaft und nicht einschränkend ist, da auch andere Typen von Datenverarbeitungssystemen, die anders konfiguriert sind, verwendet werden können. Zum Beispiel kann eine Instanz der Speichersteuerung 116 und des Plattformsteuerhubs 130 in einen diskreten externen Grafikprozessor, beispielsweise den externen Grafikprozessor 118, integriert sein. In einer Ausführungsform können der Plattformsteuerhub 130 und/oder die Speichersteuerung 116 außerhalb des einen oder der mehreren Prozessor(en) 102 sein. Zum Beispiel kann das System 100 eine externe Speichersteuerung 116 und einen externen Plattformsteuerhub 130 umfassen, die als Speichersteuerhub und Peripheriegerätesteuerhub innerhalb eines System-Chipsatzes konfiguriert sein können, der mit den Prozessor(en) 102 in Kommunikation ist.
  • Zum Beispiel können Leiterplatten („Sleds“) verwendet werden, auf welchen Komponenten wie beispielsweise CPUs, Speicher und andere Komponenten angeordnet werden, die für erhöhte Wärmeleistung ausgelegt sind. In einigen Beispielen befinden sich Verarbeitungskomponenten, wie beispielsweise die Prozessoren, auf einer Oberseite eines Sleds, während Nahspeicher, wie beispielsweise DIMMs, sich auf einer Unterseite des Sleds befinden. Als Ergebnis des verbesserten Luftstroms, der durch dieses Design bereitgestellt wird, können die Komponenten bei höheren Frequenzen und Leistungspegeln als in typischen Systemen funktionieren und dadurch die Performance verbessern. Außerdem sind die Sleds so konfiguriert, dass sie mit Leistungs- und Datenkommunikationskabeln in einem Rack blindlings zusammenpassen, wodurch ihre Fähigkeit verbessert wird, schnell entfernt, aufgerüstet, neu installiert und/oder ersetzt zu werden. Ähnlich sind einzelne Komponenten, die sich auf den Sleds befinden, wie beispielsweise Prozessoren, Beschleuniger, Speicher und Datenspeicherlaufwerke, so konfiguriert, dass sie aufgrund ihres größeren Abstands voneinander, problemlos aufgerüstet werden können. In der veranschaulichten Ausführungsform umfassen die Komponenten zusätzlich Hardwarenachweismerkmale, um ihre Authentizität nachzuweisen.
  • Ein Rechenzentrum kann eine einzige Netzwerkarchitektur („Fabric“) verwenden, die mehrere andere Netzwerkarchitekturen, darunter Ethernet und Omni-Path, unterstützt. Die Sleds können über Glasfasern mit Switches gekoppelt sein, die eine höhere Bandbreite und eine niedrigere Latenz als typische Twisted-Pair-Verkabelung (z. B. Kategorie 5, Kategorie 5e, Kategorie 6 usw.) bereitstellen. Aufgrund der Zwischenverbindungen hoher Bandbreite und niedriger Latenz und der Netzwerkarchitektur kann das Rechenzentrum bei Verwendung Ressourcen, wie beispielsweise Speicher, Beschleuniger (z. B. GPUs, Grafikbeschleuniger, FPGAs, ASICs, Beschleuniger neuronaler Netzwerke und/oder künstlicher Intelligenz usw.) und physisch untergliederte Datenspeicherlaufwerke zusammenlegen und sie für Rechenressourcen (z. B. Prozessoren) auf einer Bedarfsbasis bereitstellen, um die Rechenressourcen zu befähigen, auf die zusammengelegten Ressourcen zuzugreifen, als ob sie vor Ort wären.
  • Eine Leistungsversorgung oder -quelle kann dem System 100 oder beliebigen hierin beschriebenen Komponenten und Systemen Spannung und/oder Strom zuführen. In einem Beispiel umfasst die Leistungsversorgung einen Wechselstrom-Gleichstrom-(WS-GS-)Adapter zum Anstecken an eine Steckdose in der Wand. Solch eine WS-Leistung kann eine Leistungsquelle erneuerbarer Energie (z. B. Solarenergie) sein. In einem Beispiel umfasst die Leistungsquelle eine GS-Leistungsquelle, wie beispielsweise einen externen WS-GS-Wandler. In einem Beispiel umfasst die Leistungsquelle oder Leistungsversorgung Drahtlosladehardware zum Aufladen durch die Nähe zu einem Aufladefeld. In einem Beispiel kann die Leistungsquelle eine interne Batterie, Wechselstromversorgung, eine Leistungsversorgung auf der Basis von Bewegung, eine Solarenergie-Leistungsversorgung oder eine Brennstoffzellenquelle umfassen.
  • 2A bis 2D veranschaulichen Computersysteme und Grafikprozessoren, die durch Ausführungsformen bereitgestellt werden, die hierin beschrieben werden. Die Elemente von 2A bis 2D, welche die gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente in einer anderen Figur hierin aufweisen, können auf eine ähnliche Art und Weise arbeiten oder funktionieren wie jene, die an anderer Stelle hierin beschrieben werden, sind aber nicht darauf beschränkt.
  • 2A ist ein Blockdiagramm einer Ausführungsform eines Prozessors 200 mit einem oder mehreren Prozessorkernen 202A-202N, einer integrierten Speichersteuerung 214 und einem integrierten Grafikprozessor 208. Der Prozessor 200 kann zusätzliche Kerne bis zu und einschließlich des zusätzlichen Kerns 202N umfassen, der durch das Feld mit gestrichelten Linien dargestellt ist. Jeder der Prozessorkerne 202A-202N umfasst eine oder mehrere interne Cache-Einheiten 204A-204N. In einigen Ausführungsformen hat jeder Prozessor außerdem Zugriff auf eine oder mehrere gemeinsame Cache-Einheiten 206. Die internen Cache-Einheiten 204A-204N und die gemeinsamen Cache-Einheiten 206 stellen eine Cachespeicherhierarchie innerhalb des Prozessors 200 dar. Die Cachespeicherhierarchie kann mindestens eine Anweisungs- und Datencache-Ebene innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen von gemeinsamen Caches mittlerer Ebene, beispielsweise Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4), oder anderer Cache-Ebenen umfassen, wobei die höchste Cache-Ebene vor dem externen Speicher als Cache der letzten Ebene (LLC - Last Level Cache) eingestuft wird. In einigen Ausführungsformen erhält eine Cache-Kohärenzlogik Kohärenz zwischen den verschiedenen Cache-Einheiten 206 und 204A-204N aufrecht.
  • In einigen Ausführungsformen kann der Prozessor 200 außerdem einen Satz einer oder mehrerer Bussteuereinheiten 216 und einen Systemagentenkern 210 umfassen. Die eine oder die mehreren Bussteuereinheiten 216 verwalten einen Satz von Peripheriebussen, wie beispielsweise einen oder mehrere PCI- oder PCI-Express-Busse. Der Systemagentenkern 210 stellt Verwaltungsfunktionalität für die verschiedenen Prozessorkomponenten bereit. In einigen Ausführungsformen umfasst der Systemagentenkern 210 eine oder mehrere integrierte Speichersteuerungen 214 zum Verwalten von Zugriff auf verschiedene externe Speichervorrichtungen (nicht dargestellt).
  • In einigen Ausführungsformen weisen ein oder mehrere der Prozessorkerne 202A-202N Unterstützung für simultanes Multithreading auf. In solch einer Ausführungsform umfasst der Systemagentenkern 210 Komponenten zum Koordinieren und Betreiben der Kerne 202A-202N bei Multithread-Verarbeitung. Der Systemagentenkern 210 kann zusätzlich eine Leistungssteuereinheit (PCU - Power Control Unit) umfassen, die Logik und Komponenten zum Regeln des Leistungszustands der Prozessorkerne 202A-202N und des Grafikprozessors 208 umfasst.
  • In einigen Ausführungsformen umfasst der Prozessor 200 zusätzlich den Grafikprozessor 208 zum Ausführen von Grafikverarbeitungsoperationen. In einigen Ausführungsformen ist der Grafikprozessor 208 mit dem Satz von gemeinsamen Cache-Einheiten 206 und dem Systemagentenkern 210, einschließlich der einen oder der mehreren integrierten Speichersteuerungen 214, gekoppelt. In einigen Ausführungsformen umfasst der Systemagentenkern 210 außerdem eine Anzeigesteuerung 211 zum Steuern der Grafikprozessorausgabe an eine oder mehrere gekoppelte Anzeigen. In einigen Ausführungsformen kann die Anzeigesteuerung 211 auch ein separates Modul sein, das mit dem Grafikprozessor über mindestens einen Interconnect gekoppelt ist, oder sie kann in den Grafikprozessor 208 integriert sein.
  • In einigen Ausführungsformen wird eine Interconnect-Einheit 212 auf Ringbasis zum Koppeln der internen Komponenten des Prozessors 200 verwendet. Es können jedoch eine alternative Interconnect-Einheit, wie beispielsweise ein Punkt-zu-Punkt-Interconnect, ein Switch-Interconnect, oder andere Techniken, einschließlich der auf dem Fachgebiet allgemein bekannten Techniken, verwendet werden. In einigen Ausführungsformen ist der Grafikprozessor 208 über einen E-/A-Link 213 mit dem Ring-Interconnect 212 gekoppelt.
  • Der beispielhafte E-/A-Link 213 stellt mindestens eine von vielen Varianten von E-/A-Interconnects dar, die einen On-Package-E-/A-Interconnect umfassen, der Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungs-Speichermodul 218, beispielsweise einem eDRAM-Modul, ermöglicht. In einigen Ausführungsformen kann jeder der Prozessorkerne 202A-202N und des Grafikprozessors 208 eingebettete Speichermodule 218 als gemeinsamen Cache der letzten Ebene verwenden.
  • In einigen Ausführungsformen sind die Prozessorkerne 202A-202N homogene Kerne, welche die gleiche Anweisungssatzarchitektur ausführen. In einer anderen Ausführungsform sind die Prozessorkerne 202A-202N in Bezug auf die Anweisungssatzarchitektur (ISA - Instruction Set Architecture) heterogen, wobei einer oder mehrere der Prozessorkerne 202A-202N einen ersten Anweisungssatz ausführen, während mindestens einer der anderen Kerne einen Teilsatz des ersten Anweisungssatzes oder einen anderen Anweisungssatz ausführt. In einer Ausführungsform sind die Prozessorkerne 202A-202N in Bezug auf die Mikroarchitektur heterogen, wobei ein oder mehrere Kerne einen verhältnismäßig höheren Leistungsverbrauch gegenüber einem oder mehreren Leistungskernen mit einem niedrigeren Leistungsverbrauch aufweisen. In einer Ausführungsform sind die Prozessorkerne 202A-202N in Bezug auf die Rechenfähigkeit heterogen. Außerdem kann der Prozessor 200 auf einem oder mehreren Chips oder als integrierte SoC-Schaltung mit den veranschaulichten Komponenten neben anderen Komponenten implementiert sein.
  • 2B ist ein Blockdiagramm von Hardwarelogik eines Grafikprozessorkerns 219 gemäß einigen Ausführungsformen, die hierin beschrieben werden. Elemente von 2B, welche die gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente in einer anderen Figur hierin aufweisen, können auf eine ähnliche Art und Weise arbeiten oder funktionieren wie jene, die an anderer Stelle hierin beschrieben werden, sind aber nicht darauf beschränkt. Bei dem Grafikprozessorkern 219, manchmal auch als Kern-Slice bezeichnet, kann es sich um einen oder mehrere Grafikkerne innerhalb eines modularen Grafikprozessors handeln. Der Grafikprozessorkern 219 ist beispielhaft für einen Grafikkern-Slice, und ein Grafikprozessor, wie hierin beschrieben, kann basierend auf Ziel-Leistungs- und -Performance-Hüllkurven mehrere Grafikkern-Slices umfassen. Jeder Grafikprozessorkern 219 kann einen Block mit fester Funktion 230 umfassen, der mit mehreren Teilkernen 221A-221F, auch als Teil-Slices bezeichnet, gekoppelt ist, die modulare Blöcke von Logik mit universeller und fester Funktion umfassen.
  • In einigen Ausführungsformen umfasst der Block mit fester Funktion 230 eine Geometrie-/Festfunktionspipeline 231, die von allen Teilkernen im Grafikprozessorkern 219 zum Beispiel in Implementierungen von Grafikprozessoren mit niedrigerer Performance und/oder niedrigerer Leistung gemeinsam genutzt werden kann. In verschiedenen Ausführungsformen umfasst die Geometrie-/Festfunktionspipeline 231 eine 3D-Festfunktionspipeline (z. B. die 3D-Pipeline 312 in 3 und 4, wie nachstehend beschrieben), eine Video-Front-End-Einheit, einen Thread-Erzeuger und einen Thread-Verteiler und einen Verwalter vereinheitlichter Rückgabepuffer, der vereinheitlichte Rückgabepuffer (zum Beispiel den vereinheitlichten Rückgabepuffer 418 in 4, wie nachstehend beschrieben) verwaltet.
  • In einer Ausführungsform umfasst der Block mit fester Funktion 230 außerdem eine Grafik-SoC-Schnittstelle 232, einen Grafik-Mikrocontroller 233 und eine Medienpipeline 234. Die Grafik-SoC-Schnittstelle 232 stellt eine Schnittstelle zwischen dem Grafikprozessorkern 219 und anderen Prozessorkernen innerhalb einer integrierten Systemchip-Schaltung bereit. Der Grafik-Mikrocontroller 233 ist ein programmierbarer Subprozessor, der zum Verwalten verschiedener Funktionen des Grafikprozessorkerns 219, einschließlich Verteilung, Disposition und Präemption von Threads, konfiguriert werden kann. Die Medienpipeline 234 (z. B. die Medienpipeline 316 von 3 und 4) umfasst Logik zum Ermöglichen des Decodierens, Codierens, Vorbearbeitens und/oder Nachbearbeitens von Multimedia-Daten, einschließlich Bildern und Videodaten. Die Medienpipeline 234 implementiert Medienoperationen über Anforderungen an Rechen- oder Sample-Logik innerhalb der Teilkerne 221-221 F.
  • In einer Ausführungsform befähigt die SoC-Schnittstelle 232 den Grafikprozessorkern 219 zum Kommunizieren mit Universal-Anwendungsprozessorkernen (z. B. CPUs) und/oder anderen Komponenten innerhalb eines SoCs, darunter Speicherhierarchieelementen, beispielsweise einem gemeinsamen Cachespeicher der letzten Ebene, dem System-RAM und/oder einem eingebetteten On-Chip- oder On-Package-DRAM. Die SoC-Schnittstelle 232 kann außerdem Kommunikation mit Vorrichtungen mit fester Funktion innerhalb des SoCs, wie beispielsweise Kamera-Abbildungspipelines, ermöglichen, und sie ermöglicht die Verwendung von und/oder implementiert Speicherunteilbarkeit, die von dem Grafikprozessorkern 219 und CPUs innerhalb des SoCs gemeinsam genutzt werden kann. Die SoC-Schnittstelle 232 kann auch Leistungsverwaltungssteuerungen für den Grafikprozessorkern 219 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Grafikkerns 219 und anderen Taktdomänen innerhalb des SoCs ermöglichen. In einer Ausführungsform ermöglicht die SoC-Schnittstelle 232 den Empfang von Befehlspuffern von einem Befehls-Streamer und einem globalen Thread-Verteiler, die zum Bereitstellen von Befehlen und Anweisungen für jeden von einem oder mehreren Grafikkernen innerhalb eines Grafikprozessors konfiguriert sind. Die Befehle und Anweisungen können, wenn Medienoperationen durchgeführt werden sollen, an die Medienpipeline 234 oder, wenn Grafikverarbeitungsoperationen durchgeführt werden sollen, an eine Geometrie- und Festfunktionspipeline (z. B. die Geometrie- und Festfunktionspipeline 231, die Geometrie- und Festfunktionspipeline 237) verteilt werden.
  • Der Grafik-Mikrocontroller 233 kann zum Durchführen verschiedener Dispositions- und Verwaltungsaufgaben für den Grafikprozessorkern 219 konfiguriert sein. In einer Ausführungsform kann der Grafik-Mikrocontroller 233 Grafik- und/oder Rechen-Workload-Disposition an den verschiedenen parallelen Grafik-Engines innerhalb von Arrays 222A-222F, 224A-224F von Ausführungseinheiten (EU - Execution Unit) innerhalb der Teilkerne 221A-221F durchführen. In diesem Dispositionsmodell kann Hostsoftware, die auf einem CPU-Kern eines SoCs ausgeführt wird, der den Grafikprozessorkern 219 umfasst, Workloads an eine von mehreren Grafikprozessorklingeln übermitteln, die eine Dispositionsoperation auf der geeigneten Grafik-Engine aufruft. Dispositionsoperationen umfassen ein Bestimmen, welche Workload als Nächstes ausgeführt werden soll, Übermitteln einer Workload an einen Befehls-Streamer, Präemptieren bestehender Workloads, die auf einer Engine ausgeführt werden, Überwachen des Fortschritts einer Workload und Benachrichtigen der Hostsoftware, wenn eine Workload fertig ist. In einer Ausführungsform kann der Grafik-Mikrocontroller 233 auch Niederleistungs- oder Ruhezustände für den Grafikprozessorkern 219 ermöglichen, was den Grafikprozessorkern 219 mit der Fähigkeit zum Speichern und Wiederherstellen von Registern innerhalb des Grafikprozessorkerns 219 über Niederleistungszustandsübergänge unabhängig vom Betriebssystem und/oder der Grafiktreibersoftware auf dem System versieht.
  • Der Grafikprozessorkern 219 kann mehr oder weniger als die veranschaulichten Teilkerne 221A-221F und bis zu N modularen Teilkernen aufweisen. Für jeden Satz von N Teilkernen kann der Grafikprozessorkern 219 außerdem gemeinsame Funktionslogik 235, einen gemeinsamen und/oder Cachespeicher 236, eine Geometrie-/Festfunktionspipeline 237 sowie zusätzliche Logik mit fester Funktion 238 zum Beschleunigen verschiedener Grafik- und Rechenverarbeitungsoperationen umfassen. Die gemeinsame Funktionslogik 235 kann Logikeinheiten umfassen, die mit der gemeinsamen Funktionslogik 420 von 4 (z. B. Sampler-, mathematische und/oder Inter-Thread-Kommunikationslogik) assoziiert ist, die von allen N Teilkernen innerhalb des Grafikprozessorkerns 219 gemeinsam genutzt werden kann. Der gemeinsame und/oder Cachespeicher 236 kann ein Cache der letzten Ebene für den Satz von N Teilkernen 221A-221 F innerhalb des Grafikprozessorkerns 219 sein, und er kann auch als gemeinsamer Speicher dienen, auf den mehrere Teilkerne zugreifen können. Die Geometrie-/Festfunktionspipeline 237 kann anstelle der Geometrie-/Festfunktionspipeline 231 innerhalb des Blocks mit fester Funktion 230 enthalten sein, und sie kann die gleichen oder ähnliche Logikeinheiten umfassen.
  • In einer Ausführungsform umfasst der Grafikprozessorkern 219 zusätzliche Logik mit fester Funktion 238, die diverse Beschleunigungslogik mit fester Funktion zur Verwendung durch den Grafikprozessorkern 219 umfassen kann. In einer Ausführungsform umfasst die zusätzliche Logik mit fester Funktion 238 eine zusätzliche Geometrie-Pipeline zur Verwendung bei reiner Positionsschattierung. Bei reiner Positionsschattierung gibt es zwei Geometrie-Pipelines, die Vollgeometriepipeline innerhalb der Geometrie-/Festfunktionspipeline 238, 231 und eine Cull-Pipeline, die eine zusätzliche Geometrie-Pipeline ist, die innerhalb der zusätzlichen Logik mit fester Funktion 238 enthalten sein kann. In einer Ausführungsform ist die Cull-Pipeline (cull - engl. Auslese, Wegschneiden, Abfall) verschlankte Version der Vollgeometriepipeline. Die Vollpipeline und die Cull-Pipeline können verschiedene Instanzen derselben Anwendung ausführen, wobei jede Instanz einen eigenen Kontext aufweist. Reine Positionsschattierung kann lange Cull-Durchläufe von verworfenen Dreiecken verbergen und ermöglichen, dass Schattierung in einigen Fällen früher durchgeführt wird. Zum Beispiel kann in einer Ausführungsform die Cull-Pipeline-Logik innerhalb der zusätzlichen Logik mit fester Funktion 238 Positions-Shader parallel zur Hauptanwendung ausführen und erzeugt im Allgemeinen kritische Ergebnisse schneller als die Vollpipeline, da die Cull-Pipeline nur das Positionsattribut der Vertices abruft und schattiert, ohne Rasterung und Rendering der Pixel für den Framepuffer durchzuführen. Die Cull-Pipeline kann die erzeugten kritischen Ergebnisse zum Berechnen von Sichtbarkeitsinformationen für alle der Dreiecke ungeachtet dessen verwenden, ob diese Dreiecke gecullt werden. Die Vollpipeline (die in diesem Fall als Wiedergabepipeline bezeichnet werden kann) kann die Sichtbarkeitsinformationen konsumieren, um die gecullten Dreiecke zu überspringen, um nur die sichtbaren Dreiecke zu schattieren, die schließlich zur Rasterungsphase weitergegeben werden.
  • In einer Ausführungsform kann die zusätzliche Logik mit fester Funktion 238 außerdem Logik zur Beschleunigung maschinellen Lernens, wie beispielsweise Matrixmultiplikationslogik mit fester Funktion, für Implementierungen umfassen, die Optimierungen für Training oder Inferenzierung für maschinelles Lernens umfassen.
  • Innerhalb eines jeden Grafik-Teilkerns 221 A-221 F ist ein Satz von Ausführungsressourcen enthalten, der zum Durchführen von Grafik-, Medien- und Rechenoperationen in Reaktion auf Anforderungen durch eine Grafikpipeline, eine Medienpipeline oder Shader-Programmen verwendet werden kann. Die Grafik-Teilkerne 221A-221 F umfassen mehrere EU-Arrays 222A-222F, 224A-224F, Thread-Verteilungs- und Inter-Thread-Kommunikationslogik (TD/IC - Thread Dispatch and Inter-Thread Communication) 223A-223F, einen 3D-(z. B. Textur-)Sampler 225A-225F, einen Medien-Sampler 206A-206F, einen Shader-Prozessor 227A-227F und einen gemeinsamen lokalen Speicher (SLM - Shared Local Memory) 228A-228F. Die EU-Arrays 222A-222F, 224A-224F umfassen jeweils mehrere Ausführungseinheiten, die Universal-Grafikverarbeitungseinheiten sind, die zum Durchführen von Gleitkomma- und Ganzzahl-/Festpunkt-Logikoperationen im Dienst einer Grafik-, Medien- oder Rechenoperation imstande sind und Grafik-, Medien- oder Rechen-Shader-Programme umfassen. Die TD/IC-Logik 223A-223F führt lokale Thread-Verteilungs- und Thread-Steueroperationen für die Ausführungseinheiten innerhalb eines Teilkerns durch und ermöglicht Kommunikation zwischen Threads, die auf den Ausführungseinheiten des Teilkerns ausgeführt werden. Der 3D-Sampler 225A-225F kann Textur- oder andere 3D-Grafik-bezogene Daten in Speicher einlesen. Der 3D-Sampler kann Texturdaten basierend auf einem konfigurierten Sample-Zustand und dem mit einer gegebenen Textur assoziierten Texturformat unterschiedlich lesen. Der Medien-Sampler 206A-206F kann ähnliche Leseoperationen basierend auf dem mit Mediendaten assoziiert Typ und Format durchführen. In einer Ausführungsform kann jeder Grafik-Teilkern 221A-221 F alternativ einen vereinigten 3D- und Medien-Sampler umfassen. Threads, die auf den Ausführungseinheiten innerhalb eines jeden der Teilkerne 221A-221 F ausgeführt werden, können Gebrauch vom gemeinsamen lokalen Speicher 228A-228F innerhalb jedes Teilkerns machen, um zu ermöglichen, dass Threads, die innerhalb einer Thread-Gruppe ausgeführt werden, unter Verwendung eines gemeinsamen On-Chip-Speicherpools ausgeführt werden.
  • 2C veranschaulicht eine Grafikverarbeitungseinheit (GPU - Graphics Processing Unit) 239, die dedizierte Sätze von Grafikverarbeitungsressourcen umfasst, die in Mehrkerngruppen 240A-240N organisiert sind. Obwohl nur die Details einer einzigen Mehrkerngruppe 240A bereitgestellt werden, versteht es sich, dass die andere Mehrkerngruppen 240B-240N mit den gleichen oder ähnlichen Sätzen von Grafikverarbeitungsressourcen ausgestattet sein können.
  • Wie veranschaulicht, kann eine Mehrkerngruppe 240A einen Satz von Grafikkernen 243, einen Satz von Tensorkernen 244 und einen Satz von Strahlverfolgungskernen 245 umfassen. Ein Scheduler/Verteiler 241 disponiert und verteilt die Grafik-Threads zur Ausführung auf den verschiedenen Kernen 243, 244, 245. Ein Satz von Registerdateien 242 speichert Operanden-Werte, die von den Kernen 243, 244, 245 verwendet werden, wenn die Grafik-Threads ausgeführt werden. Diese können zum Beispiel Ganzzahlregister zum Speichern von Ganzzahlwerten, Gleitkommaregister zum Speichern von Gleitkommawerten, Vektor-Register zum Speichern von gepackten Datenelementen (Ganzzahl- und/oder Gleitkomma-Datenelementen) und Kachelregister zum Speichern von Tensor-/Matrixwerten umfassen. In einer Ausführungsform werden die Kachelregister als kombinierte Sätze von Vektor-Registern implementiert.
  • Eine Kombination aus einem oder mehreren Caches der Ebene 1 (L1) und gemeinsamen Speichereinheiten 247 speichert Grafikdaten, wie beispielsweise Texturdaten, Vertex-Daten, Pixeldaten, Strahldaten, Begrenzungsvolumendaten usw. lokal innerhalb jeder Mehrkerngruppe 240A. Eine oder mehrere Textureinheiten 247 können außerdem zum Durchführen von Texturierungsoperationen, wie beispielsweise Texturabbildung und -sampling, verwendet werden. Eine Cache der Ebene 2 (L2) 253, der von allen oder einem Teilsatz der Mehrkerngruppen 240A-240N gemeinsam genutzt wird, speichert Grafikdaten und/oder Grafikanweisungen für mehrere gleichzeitige Grafik-Threads. Wie veranschaulicht, kann der L2-Cache 253 über eine Mehrzahl von Mehrkerngruppen 240A-240N gemeinsam genutzt werden. Eine oder mehrere Speichersteuerungen 248 koppeln die GPU 239 mit einem Speicher 249, der ein Systemspeicher (z. B. DRAM) und/oder ein dedizierter Grafikspeicher (z. B. GDDR6-Speicher) sein kann.
  • Eine Eingabe-/Ausgabe-(E-/A-)Schaltungsanordnung 250 koppelt die GPU 239 mit einer oder mehreren E-/A-Vorrichtungen 252, wie beispielsweise Digitalsignalprozessoren (DSP), Netzwerksteuerungen oder Benutzereingabevorrichtungen. Ein On-Chip-Interconnect kann zum Koppeln der E-/A-Vorrichtungen 252 mit der GPU 239 und dem Speicher 249 verwendet werden. Eine oder mehrere E-/A-Speicherverwaltungseinheiten (IOMMU - I/O Memory Management Unit) 251 der E-/A-Schaltungsanordnung 250 koppeln die E-/A-Vorrichtungen 252 direkt mit dem Systemspeicher 249. In einer Ausführungsform verwaltet die IOMMU 251 mehrere Sätze von Seitentabellen zum Abbilden von virtuellen Adressen auf physische Adressen im Systemspeicher 249. In dieser Ausführungsform können die E-/A-Vorrichtungen 252, die CPU(s) 246 und die GPU(s) 239 denselben virtuellen Adressraum gemeinsam nutzen.
  • In einer Implementierung unterstützt die IOMMU 251 Virtualisierung. In diesem Fall kann sie einen ersten Satz von Seitentabellen zum Abbilden von virtuellen Gast-/Grafik-Adressen auf physische Gast-/Grafik-Adressen und einen zweiten Satz von Seitentabellen zum Abbilden der physischen Gast-/Grafik-Adressen auf physische System-/Host-Adressen (z. B. innerhalb des Systemspeichers 249) verwalten. Die Basisadressen eines jeden des ersten und des zweiten Satzes von Seitentabellen können in Steuerregistern gespeichert und bei einem Kontextwechsel ausgelagert werden (so dass z. B. der neue Kontext mit Zugriff auf den relevanten Satz von Seitentabellen versehen wird). Obwohl in 2C nicht dargestellt, können jeder der Kerne 243, 244, 245 und/oder jede der Mehrkerngruppen 240A-240N Übersetzungsvorgriffspuffer (TLBs) zum Zwischenspeichern von Übersetzungen Gast virtuell in Gast physisch, Übersetzungen von Gast physisch in Host physisch und Übersetzungen von Gast virtuell in Host physisch umfassen.
  • In einer Ausführungsform sind die CPUs 246, die GPUs 239 und die E-/A-Vorrichtungen 252 auf einem einzigen Halbleiterchip und/oder Chip-Package integriert. Der veranschaulichte Speicher 249 kann auf demselben Chip integriert oder über eine chipexterne Schnittstelle mit den Speichersteuerungen 248 gekoppelt sein. In einer Implementierung umfasst der Speicher 249 einen GDDR6-Speicher, der sich denselben virtuellen Adressraum mit anderen physischen Speicher auf Systemebene teilt, obwohl die zugrundeliegenden Prinzipien der Erfindung nicht auf diese spezifische Implementierung beschränkt sind.
  • In einer Ausführungsform umfassen die Tensorkerne 244 eine Mehrzahl von Ausführungseinheiten, die speziell zum Durchführen von Matrixoperationen ausgelegt sind, wobei es sich um die grundlegende Rechenoperation handelt, die zum Durchführen von Operationen tiefen Lernens verwendet wird. Zum Beispiel könne simultane Matrixmultiplikationsoperationen für Training und Inferenzierung neuronaler Netzwerke verwendet werden. Die Tensorkerne 244 können Matrixverarbeitung unter Verwendung einer Vielzahl von Operanden-Genauigkeiten, darunter Gleitkomma einfacher Genauigkeit (z. B. 32 Bits), Gleitkomma halber Genauigkeit (z. B. 16 Bits), Ganzzahlwörter (16 Bits), Bytes (8 Bits) und Halbbytes (4 Bits), durchführen. In einer Ausführungsform extrahiert eine Implementierung eines neuronalen Netzwerks Merkmale jeder gerenderten Szene und kombiniert möglicherweise Details von mehreren Frames, um ein Endbild hoher Qualität zu erstellen.
  • In Implementierungen für tiefes Lernen kann Parallelmatrixmultiplikationsarbeit zur Ausführung auf den Tensorkernen 244 disponiert werden. Das Training von neuronalen Netzwerken insbesondere erfordert eine erhebliche Anzahl von Matrix-Skalarproduktoperationen. Um eine Formulierung eines inneren Produkts einer N x N x N-Matrixmultiplikation zu verarbeiten, können die Tensorkerne 244 mindestens N Skalarprodukt-Verarbeitungselemente umfassen. Vor Beginn der Matrixmultiplikation wird eine vollständige Matrix in Kachelregister geladen, und mindestens eine Spalte einer zweiten Matrix wird jeden Zyklus für N Zyklen geladen. Jeden Zyklus gibt es N Skalarprodukte, die verarbeitet werden.
  • Matrixelemente können in Abhängigkeit von der spezifischen Implementierung in verschiedenen Genauigkeiten gespeichert werden, darunter 16-Bit-Wörter, 8-Bit-Bytes (z. B. INT8) und 4-Bit-Halbbytes (z. B. INT4). Verschiedene Genauigkeitsmodi können für die Tensorkerne 244 spezifiziert werden, um sicherzustellen, dass die effizienteste Genauigkeit für verschiedene Workloads verwendet wird (z. B. Inferenzieren von Workloads, die Quantisierung von Bytes und Halbbytes tolerieren können).
  • In einer Ausführungsform beschleunigen die Strahlverfolgungskerne 245 Strahlverfolgungsoperationen sowohl für Echtzeit-Strahlverfolgungs- als auch Nicht-Echtzeit-Strahlverfolgungsimplementierungen. Insbesondere umfassen die Strahlverfolgungskerne 245 eine Strahltraversierungs-/- intersektionsschaltungsanordnung zum Durchführen von Strahltraversierung unter Verwendung von Begrenzungsvolumenhierarchien (BVHs) und Identifizieren von Intersektionen zwischen Strahlen und Primitiven, die innerhalb der BVH-Volumina eingeschlossen sind. Die Strahlverfolgungskerne 245 können außerdem eine Schaltungsanordnung zum Durchführen von Tiefenprüfung und Culling (z. B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) umfassen. In einer Ausführungsform führen die Strahlverfolgungskerne 245 Traversierungs- und Intersektionsoperationen zusammen mit hierin beschriebenen Bild-Entrauschungstechniken durch, von welchen wenigstens ein Teil auf den Tensorkernen 244 ausgeführt wird. Zum Beispiel implementieren die Tensorkerne 244 in einer Ausführungsform ein neuronales Netzwerk für tiefes Lernen zum Durchführen von Entrauschung von Frames, die durch die Strahlverfolgungskerne 245 erzeugt werden. Die CPU(s) 246, die Grafikkerne 243 und/oder die Strahlverfolgungskerne 245 können jedoch ebenfalls alle oder einen Teil der Algorithmen für Entrauschung und/oder tiefes Lernen implementieren.
  • Wie bereits erwähnt, kann außerdem eine verteilte Lösung zum Entrauschen eingesetzt werden, wobei die GPU 239 in einer Computervorrichtung ist, die mit anderen Computervorrichtungen über ein Netzwerk oder einen Hochgeschwindigkeits-Interconnect gekoppelt ist. In dieser Ausführungsform nutzen die miteinander verbundenen Computervorrichtungen gemeinsam Lern-/Trainingsdaten für neuronale Netzwerke zum Verbessern der Geschwindigkeit, mit welcher das Gesamtsystem lernt, Entrauschung für verschiedene Typen von Bildframes und/oder verschiedene Grafikanwendungen durchzuführen.
  • In einer Ausführungsform verarbeiten die Strahlverfolgungskerne 245 alle BVH-Traversierungen und Strahl-Primitiv-Intersektionen und Bewahren die Grafikkerne 243 davor, mit Tausenden Anweisungen pro Strahl überlastet zu werden. In einer Ausführungsform umfasst jeder Strahlverfolgungskern 245 einen ersten Satz von spezialisierten Schaltungen zum Durchführen von Begrenzungsrahmentests (z. B. für Traversierungsoperationen) und einen zweiten Satz von spezialisierten Schaltungen zum Durchführen von Strahl-Dreieck-Intersektionstests (z. B. Intersektionsstrahlen, die traversiert wurden). Demnach kann in einer Ausführungsform die Mehrkerngruppe 240A einfach eine Strahlsonde starten, und die Strahlverfolgungskerne 245 können unabhängig Strahlverfolgung und -intersektion durchführen und Trefferdaten (z. B. ein Treffer, kein Treffer, mehrere Treffer usw.) an den Thread-Kontext zurückliefern. Die anderen Kerne 243, 244 sind davon befreit, andere Grafik- oder Rechenarbeiten durchzuführen, während die Strahlverfolgungskerne 245 die Traversierungs- und Intersektionsoperationen durchführen.
  • In einer Ausführungsform umfasst jeder Strahlverfolgungskern 245 eine Traversierungseinheit zum Durchführen von BVH-Testoperationen und eine Intersektionseinheit, die Strahl-Primitiv-Intersektionstests durchführt. Die Intersektionseinheit erzeugt eine Antwort „Treffer“, „kein Treffer“ oder „Mehrfachtreffer“, die sie für den entsprechenden Thread bereitstellt. Während der Traversierungs- und Intersektionsoperationen werden die Ausführungsressourcen der anderen Kerne (z. B. Grafikkerne 243 und Tensorkerne 244) freigestellt, um andere Formen von Grafikarbeit durchzuführen.
  • In einer spezifischen Ausführungsform, die nachstehend beschrieben wird, wird ein hybrider Rasterungs-/Strahlverfolgungsansatz verwendet, wobei Arbeit zwischen den Grafikkernen 243 und den Strahlverfolgungskernen 245 verteilt wird.
  • In einer Ausführungsform umfassen die Strahlverfolgungskerne 245 (und/oder andere Kerne 243, 244) Hardwareunterstützung für einen Strahlverfolgungsanweisungssatz, wie beispielsweise DirectX Ray Tracing (DXR) von Microsoft, der einen DispatchRays-Befehl (Strahlen-verteilen-Befehl) sowie Strahlerzeugungs-, Nächstgelegener-Treffer-, Jeder-Treffer- und Fehler-Shader umfasst, welche die Zuordnung von eindeutigen Sätzen von Shadern und Texturen für jedes Objekt ermöglichen. Eine andere Strahlverfolgungsplattform, die durch die Strahlverfolgungskerne 245, die Grafikkerne 243 und die Tensorkerne 244 unterstützt werden kann, ist Vulkan 1.1.85. Es ist jedoch zu beachten, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf eine spezifische Strahlverfolgungs-ISA beschränkt sind.
  • Im Allgemeinen können die verschiedenen Kerne 245, 244, 243 einen Strahlverfolgungsanweisungssatz unterstützen, der Anweisungen/Funktion für Strahlerzeugung, Nächstgelegener Treffer, Jeder Treffer, Strahl-Primitiv-Intersektionen, Pro-Primitiv- und hierarchischen Begrenzungsrahmenaufbau, Fehler, Besuch und Ausnahmen umfasst. Genauer gesagt, umfasst eine Ausführungsform Strahlverfolgungsanweisungen zum Durchführen der folgenden Funktionen:
  • Strahlerzeugung - Strahlerzeugungsanweisungen können für jedes Pixel, jeden Sample oder jede andere benutzerdefinierte Arbeitszuordnung ausgeführt werden.
  • Nächstgelegener Treffer - Eine Nächstgelegener-Treffer-Anweisung kann zum Lokalisieren des nächstgelegenen Intersektionspunkts eines Strahls mit Primitiven innerhalb einer Szene ausgeführt werden.
  • Jeder Treffer - Eine Jeder-Treffer-Anweisung identifiziert mehrere Intersektionen zwischen einem Strahl und Primitiven in einer Szene, um möglicherweise einen neuen nächstgelegenen Intersektionspunkt zu identifizieren.
  • Intersektion - Eine Intersektionsanweisung führt einen Strahl-Primitiv-Intersektionstest durch und gibt ein Ergebnis aus.
  • Pro-Primitiv-Begrenzungsrahmenaufbau - Diese Anweisung erstellt einen Begrenzungsrahmen um ein gegebenes Primitiv oder eine gegebene Gruppe von Primitiven (z. B. beim Erstellen einer neuen BVH oder einer anderen Beschleunigungsdatenhierarchie).
  • Fehler - Zeigt an, dass ein Strahl die gesamte Geometrie innerhalb einer Szene oder eine spezifizierte Region einer Szene verfehlt.
  • Besuch - Zeigt die Kinder-Volumina an, die ein Strahl traversiert.
  • Ausnahmen - Umfasst verschiedene Typen von Ausnahmehandlern (die z. B. für verschiedene Fehlerbedingungen aufgerufen werden).
  • 2D ist ein Blockdiagramm einer Universal-Grafikverarbeitungseinheit (GPGPU - General Purpose Graphics Processing Unit) 270, die als Grafikprozessor und/oder Rechenbeschleuniger gemäß hierin beschriebenen Ausführungsform konfiguriert sein kann. Die GPGPU 270 kann über einen oder mehrere System- und/oder Speicherbusse mit Hostprozessoren (z. B. einer oder mehreren CPU(s) 246) und Speichern 271, 272 verbunden sein. In einer Ausführungsform ist der Speicher 271 ein Systemspeicher, der mit der einen oder den mehreren CPU(s) 246 gemeinsam genutzt werden kann, während der Speicher 272 ein Vorrichtungsspeicher ist, der für die GPGPU 270 reserviert ist. In einer Ausführungsform können Komponenten innerhalb der GPGPU 270 und des Vorrichtungsspeichers 272 in Speicheradressen abgebildet sein, auf welche die eine oder die mehreren CPU(s) 246 zugreifen können. Zugriff auf die Speicher 271 und 272 kann über eine Speichersteuerung 268 ermöglicht werden. In einer Ausführungsform umfasst die Speichersteuerung 268 eine interne Direktzugriffsspeicher-(DMA-)Steuerung 269, oder sie kann Logik zum Durchführen von Operationen umfassen, die sonst von einer DMA-Steuerung durchgeführt würden.
  • Die GPGPU 270 umfasst mehrere Cachespeicher, darunter einen L2-Cache 253, einen L1-Cache 254, einen Anweisungs-Cache 255 und einen gemeinsamen Speicher 256, von dem mindestens ein Teil ebenfalls als Cachespeicher partitioniert ist. Die GPGPU 270 umfasst außerdem mehrere Recheneinheiten 260A-260N. Jede Recheneinheit 260A-260N umfasst einen Satz von Vektor-Registern 261, Skalar-Registern 262, Vektor-Logikeinheiten 263 und Skalar-Logikeinheiten 264. Die Recheneinheiten 260A-260N können auch einen lokalen gemeinsamen Speicher 265 und einen Programmzähler 266 umfassen. Die Recheneinheiten 260A-260N können mit einem Konstant-Cache 267 gekoppelt sein, der zum Speichern von konstanten Daten verwendet werden kann, wobei es sich um Daten handelt, die sich während der Ausführung eines Kernel- oder Shader-Programms, das auf der GPGPU 270 ausgeführt wird, nicht ändern. In einer Ausführungsform ist der Konstant-Cache 267 ein Skalardaten-Cache, und zwischengespeicherte Daten können direkt in die Skalar-Register 262 eingebracht werden.
  • Während des Betriebs können die eine oder die mehreren CPU(s) 246 Befehle in Register oder Speicher in der GPGPU 270 schreiben, die in einem zugreifbaren Adressraum abgebildet wurde. Die Befehlsprozessoren 257 können die Befehle aus Registern oder Speicher auslesen und bestimmen, wie diese Befehle innerhalb der GPGPU 270 verarbeitet werden. Ein Thread-Verteiler 258 kann dann verwendet werden, um Threads an die Recheneinheiten 260A-260N zum Ausführen dieser Befehle zu verteilen. Jede Recheneinheit 260A-260N kann Threads unabhängig von den anderen Recheneinheiten ausführen. Außerdem kann jede Recheneinheit 260A-260N unabhängig für bedingte Berechnung konfiguriert sein und die Berechnungsergebnisse bedingt an Speicher ausgeben. Die Befehlsprozessoren 257 können die eine oder die mehreren CPU(s) 246 unterbrechen, wenn die übermittelten Befehle ausgeführt sind.
  • 3A bis 3C veranschaulichen Blockdiagramme zusätzlicher Grafikprozessor- und Rechenbeschleunigerarchitekturen, die durch hierin beschriebene Ausführungsformen bereitgestellt werden. Die Elemente von 3A bis 3C, welche die gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente in einer anderen Figur hierin aufweisen, können auf eine ähnliche Art und Weise arbeiten oder funktionieren wie jene, die an anderer Stelle hierin beschrieben werden, sind aber nicht darauf beschränkt.
  • 3A ist ein Blockdiagramm eines Grafikprozessors 300, der eine diskrete Grafikverarbeitungseinheit sein kann, oder ein Grafikprozessor mit einer Mehrzahl von integrierten Verarbeitungskernen oder anderen Halbleitervorrichtungen sein kann, wie beispielsweise Speichervorrichtungen oder Netzwerkschnittstellen, ohne darauf beschränkt zu sein. In einigen Ausführungsformen kommuniziert der Grafikprozessor über eine im Speicher abgebildete E-/A-Schnittstelle zu Registern auf dem Grafikprozessor und mit im Prozessorspeicher angeordneten Befehlen. In einigen Ausführungsformen umfasst der Grafikprozessor 300 eine Speicherschnittstelle 314 zum Zugreifen auf Speicher. Die Speicherschnittstelle 314 kann eine Schnittstelle zu lokalem Speicher, einem oder mehreren internen Caches, einem oder mehreren gemeinsamen externen Caches und/oder zu Systemspeicher ein.
  • In einigen Ausführungsformen umfasst der Grafikprozessor 300 auch eine Anzeigesteuerung 302 zum Steuern von Anzeigeausgabedaten an eine Anzeigevorrichtung 318. Die Anzeigesteuerung 302 umfasst Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und Komposition mehrerer Schichten von Video- oder Benutzerschnittstellenelementen. Die Anzeigevorrichtung 318 kann eine interne oder externe Anzeigevorrichtung sein. In einer Ausführungsform ist die Anzeigevorrichtung 318 eine am Kopf angebrachte Anzeigevorrichtung, beispielsweise eine Anzeigevorrichtung für virtuelle Realität (VR - Virtual Reality) oder eine Anzeigevorrichtung für erweiterte Realität (AR - Augmented Reality). In einigen Ausführungsformen kann der Grafikprozessor 300 eine Videocodec-Engine 306 zum Codieren, Decodieren und Umcodieren von Medien von und zwischen einem oder mehreren Mediencodierungsformaten, darunter Moving Picture Experts Group (MPEG)-Formate, wie beispielsweise MPEG-2, Advanced Video Coding (AVC)-Formate, wie beispielsweise H.264/MPEG-4 AVC, H.265/HEVC, Alliance for Open Media (AOMedia) VP8, VP9, sowie die Formate Society of Motion Picture & Television Engineers (SMPTE) 421 M/VC-1 und Joint Photographic Experts Group (JPEG), wie beispielsweise JPEG- und Motion JPEG (MJPEG)-Formate, sein, ohne darauf beschränkt zu sein.
  • In einigen Ausführungsformen umfasst der Grafikprozessor 300 eine Engine 304 zur Blockbildübertragung (BLIT - Block Image Transfer) zum Durchführen von zweidimensionalen (2D) Rasterungsoperationen, die zum Beispiel Bitgrenzen-Blockübertragungen umfassen. In einer Ausführungsform werden 2D-Grafikoperationen jedoch unter Verwendung einer oder mehrerer Komponenten einer Grafikverarbeitungs-Engine (GPE - Graphics Processing Engine) 310 durchgeführt. In einigen Ausführungsformen ist die GPE 310 eine Rechen-Engine zum Durchführen von Grafikoperationen, einschließlich dreidimensionaler (3D) Grafikoperationen und Medienoperationen.
  • In einigen Ausführungsformen umfasst die GPE 310 eine 3D-Pipeline 312 zum Durchführen von 3D-Operationen, wie beispielsweise Rendering von dreidimensionalen Bildern und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 3D-Primitiv-Formen (z. B. Rechteck, Dreieck usw.) wirken. Die 3D-Pipeline 312 umfasst programmierbare Elemente und solche mit fester Funktion, die verschiedene Aufgaben innerhalb des Elements durchführen und/oder Ausführungs-Threads für ein 3D-/Medien-Subsystem 315 erzeugen. Obwohl die 3D-Pipeline 312 verwendet werden kann, um Medienoperationen durchzuführen, umfasst eine Ausführung der GPE 310 auch eine Medienpipeline 316, die speziell zum Durchführen von Medienoperationen, wie beispielsweise Videonachbearbeitung und Bildverbesserung, verwendet wird.
  • In einigen Ausführungsformen umfasst die Medienpipeline 316 Logikeinheiten, die eine feste Funktion haben oder programmierbar sind, um eine oder mehrere spezialisiertere Medienoperationen, wie beispielsweise Videodecodierbeschleunigung, Videoentschachtelung und Videocodierbeschleunigung, anstelle oder im Auftrag der Videocodec-Engine 306 durchzuführen. In einer Ausführungsform umfasst die Medienpipeline 316 zusätzlich eine Thread-Erzeugungseinheit zum Erzeugen von Threads zur Ausführung auf dem 3D-/Medien-Subsystem 315. Die erzeugten Threads führen Berechnungen für die Medienoperationen auf einer oder mehreren Grafikausführungseinheiten im 3D-/Medien-Subsystem 315 durch.
  • In einigen Ausführungsformen umfasst das 3D-/Medien-Subsystem 315 Logik zum Ausführen von Threads, die von der 3D-Pipeline 312 und der Medienpipeline 316 erzeugt werden. In einer Ausführungsform senden die Pipelines Thread-Ausführungsanforderungen an das 3D-/Medien-Subsystem 315, das eine Thread-Verteilungslogik zum Arbitrieren und Verteilen der verschiedenen Anforderungen an verfügbare Thread-Ausführungsressourcen umfasst. Die Ausführungsressourcen umfassen ein Array von Grafikausführungseinheiten zum Verarbeiten der 3D- und Medien-Threads. In einigen Ausführungsformen umfasst das 3D-/Medien-Subsystem 315 einen oder mehrere interne Caches für Thread-Anweisungen und -Daten. In einigen Ausführungsform umfasst das Subsystem außerdem einen gemeinsamen Speicher, der Register und adressierbaren Speicher umfasst, um Daten zwischen Threads zu teilen und Ausgabedaten zu speichern.
  • 3B veranschaulicht einen Grafikprozessor 320 mit einer Kachelarchitektur gemäß einigen hierin beschriebenen Ausführungsformen. In einer Ausführungsform umfasst der Grafikprozessor 320 einen Grafikverarbeitungs-Engine-Cluster 322 mit mehreren Instanzen der Grafikverarbeitungs-Engine 310 von 3A innerhalb einer Grafik-Engine-Kachel 310A-310D. Alle Grafik-Engine-Kacheln 310A-310D können über einen Satz von Kachel-Interconnects 323A-323F miteinander verbunden sein. Jede Grafik-Engine-Kachel 310A-310D kann über Speicher-Interconnects 325A-325D auch mit einem Speichermodul oder einer Speichervorrichtung 326A-326D. Die Speichervorrichtungen 326A-326D können jede Grafikspeichertechnologie verwenden. Zum Beispiel kann es sich bei den Speichervorrichtungen 326A-326D um Speicher mit Grafik-Doppeldatenrate (GDDR- Graphics Double Data Rate) handeln. Die Speichervorrichtungen 326A-326D sind in einer Ausführungsform Speichermodule mit hoher Bandbreite (HBM - High-Bandwidth Memory), die mit ihrer jeweiligen Grafik-Engine-Kachel 310A-310D auf dem Die sein können. In einer Ausführungsform sind die Speichervorrichtungen 326A-326D gestapelte Speichervorrichtungen, die auf ihrer jeweiligen Grafik-Engine-Kachel 310A-310D gestapelt sein können. In einer Ausführungsform befinden sich jede Grafik-Engine-Kachel 310A-310D und jeder assoziierte Speicher 326A-326D auf separaten Chiplets, die an einen Basis-Die oder ein Basissubstrat gebondet sind, wie in 11B bis 11D ausführlicher beschrieben.
  • Der Grafikverarbeitungs-Engine-Cluster 322 kann mit einem On-Chip- oder On-Package-Fabric-Interconnect 324 verbunden sein. Der Fabric-Interconnect 324 kann Kommunikation zwischen Grafik-Engine-Kacheln 310A-310D und Komponenten wie dem Videocodec 306 und einer oder mehreren Kopier-Engines 304 ermöglichen. Die Kopier-Engines 304 können verwendet werden, um Daten aus den und in die Speichervorrichtungen 326A-326D und zwischen diesen und dem Speicher zu verschieben, der außerhalb des Grafikprozessors 320 (z. B. Systemspeicher) ist. Der Fabric-Interconnect 324 kann auch zum Verbinden der Grafik-Engine-Kacheln 310A-310D untereinander verwendet werden. Der Grafikprozessor 320 kann optional eine Anzeigesteuerung 302 zum Ermöglichen einer Verbindung mit einer externen Anzeigevorrichtung 318 umfassen. Der Grafikprozessor kann auch als Grafik- oder Rechenbeschleuniger konfiguriert sein. Bei der Beschleunigerkonfiguration können die Anzeigesteuerung 302 und die Anzeigevorrichtung 318 weggelassen werden.
  • Der Grafikprozessor 320 kann über eine Hostschnittstelle 328 mit einem Hostsystem verbunden sein. Die Hostschnittstelle 328 kann Kommunikation zwischen dem Grafikprozessor 320, dem Systemspeicher und/oder anderen Systemkomponenten ermöglichen. Die Hostschnittstelle 328 kann zum Beispiel ein PCI-Express-Bus oder eine andere Art von Hostsystemschnittstelle sein.
  • 3C veranschaulicht einen Rechenbeschleuniger 330 gemäß hierin beschriebenen Ausführungsformen. Der Rechenbeschleuniger 330 kann architektonische Ähnlichkeiten mit dem Grafikprozessor 320 von 3B aufweisen und ist für Rechenbeschleunigung optimiert. Ein Rechen-Engine-Cluster 332 kann einen Satz von Rechen-Engine-Kacheln 340A-340D umfassen, die Ausführungslogik umfassen, die für parallele oder vektorbasierte universelle Rechenoperationen optimiert ist. In einigen Ausführungsformen umfassen die Rechen-Engine-Kacheln 340A-340D keine Grafikverarbeitungslogik mit fester Funktion, obwohl eine oder mehrere Rechen-Engine-Kacheln 340A-340D Logik zum Durchführen von Medienbeschleunigung umfassen können. Die Rechen-Engine-Kacheln 340A-340D können über Speicher-Interconnects 325A-325D mit Speichern 326A-326D verbunden sein. Die Technologie der Speicher 326A-326D und der Speicher-Interconnects 325A-325D kann ähnlich wie die des Grafikprozessors 320 oder verschieden davon sein. Die Grafikrechen-Engine-Kacheln 340A-340D können außerdem über einen Satz von Kachel-Interconnects 323A-323F miteinander verbunden sein, und sie können mit einem Fabric-Interconnect 324 verbunden und/oder durch diesen untereinander verbunden sein. In einer Ausführungsform umfasst der Rechenbeschleuniger 330 einen großen L3-Cache 336, der als vorrichtungsweiter Cache konfiguriert sein kann. Der Rechenbeschleuniger 330 kann außerdem über eine Hostschnittstelle 328 in ähnlicher Weise wie der Grafikprozessor 320 von 3B mit einem Hostprozessor und -speicher verbunden sein.
  • Grafikverarbeitungs-Engine
  • 4 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine 410 eines Grafikprozessors gemäß einigen Ausführungsformen. In einer Ausführungsform ist die Grafikverarbeitungs-Engine (GPE) 410 eine Version der in 3A dargestellten GPE 310 und kann eine Grafik-Engine-Kachel 310A-310D von 3B darstellen. Elemente von 4, welche die gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente in einer anderen Figur hierin aufweisen, können auf eine ähnliche Art und Weise arbeiten oder funktionieren wie jene, die an anderer Stelle hierin beschrieben werden, sind aber nicht darauf beschränkt. Zum Beispiel sind die 3D-Pipeline 312 und die Medienpipeline 316 von 3A veranschaulicht. Die Medienpipeline 316 ist in einigen Ausführungsformen der GPE 410 optional und muss in der GPE 410 nicht explizit enthalten sein. Zum Beispiel ist in mindestens einer Ausführungsform ein separater Medien- und/oder Bildprozessor mit der GPE 410 gekoppelt.
  • In einigen Ausführungsformen ist die GPE 410 mit einem Befehls-Streamer 403, der einen Befehlsstrom für die 3D-Pipeline 312 und/oder die Medienpipelines 316 bereitstellt, gekoppelt oder umfasst einen solchen. In einigen Ausführungsformen ist der Befehls-Streamer 403 mit Speicher gekoppelt, wobei es sich um einen Systemspeicher oder einen oder mehrere von einem internen Cachespeicher und einem gemeinsamen Cachespeicher handeln kann. In einigen Ausführungsformen empfängt der Befehls-Streamer 403 Befehle vom Speicher und sendet die Befehle an die 3D-Pipeline 312 und/oder die Medienpipeline 316. Die Befehle sind Direktiven, die von einem Ringpuffer abgerufen werden, der Befehle für die 3D-Pipeline 312 und die Medien-Pipeline 316 speichert. In einer Ausführungsform kann der Ringpuffer außerdem Batch-Befehlspuffer umfassen, die Batches mehrerer Befehle speichern. Die Befehle für die 3D-Pipeline 312 können auch Verweise auf Daten umfassen, die in Speicher gespeichert sind, wie beispielsweise auf Vertex- und Geometriedaten für die 3D-Pipleine 312 und/oder Bilddaten und Speicherobjekte für die Medienpipeline 316, ohne darauf beschränkt zu sein. Die 3D-Pipeline 312 und die Medienpipeline 316 verarbeiten die Befehle und Daten durch Durchführen von Operationen mittels Logik innerhalb der jeweiligen Pipelines oder durch Verteilen eines oder mehrerer Ausführungsthreads an ein Grafikkern-Array 414. In einer Ausführungsform umfasst das Grafikkern-Array 414 einen oder mehrere Blöcke von Grafikkernen (z. B. Grafikkern(e) 415A, Grafikkern(e) 415B), wobei jeder Block einen oder mehrere Grafikkerne umfasst. Jeder Grafikkern umfasst einen Satz von Grafikausführungsressourcen, die Universal- und Spezial-Grafikausführungslogik zum Durchführen von Grafik- und Rechenoperationen sowie Texturverarbeitungslogik mit fester Funktion und/oder Beschleunigungslogik für maschinelles Lernen und künstliche Intelligenz umfassen.
  • In verschiedenen Ausführungsformen kann die 3D-Pipeline 312 programmierbare Logik und Logik mit fester Funktion zum Verarbeiten eines oder mehrerer Shader-Programme, wie beispielswiese Vertex-Shader-, Geometrie-Shader-, Pixel-Shader-, Fragment-Shader-, Rechen-Shader- oder anderer Shader-Programme, durch Verarbeiten der Anweisungen und Verteilen von Ausführungsthreads an das Grafikkern-Array 414 umfassen. Das Grafikkern-Array 414 stellt einen vereinigten Block von Ausführungsressourcen zur Verwendung bei der Verarbeitung dieser Shader-Programme bereit. Mehrzweck-Ausführungslogik (z. B. Ausführungseinheiten) innerhalb der Grafikkern(e) 415A-414B der Grafikkern-Array 414 umfasst Unterstützung für verschiedene 3D-API-Shader-Sprachen und kann mehrere simultane Ausführungsthreads ausführen, die mit mehreren Shadern assoziiert sind.
  • In einigen Ausführungsformen umfasst das Grafikkern-Array 414 Ausführungslogik zum Ausführen von Medienfunktionen, wie beispielsweise Video- und/oder Bildverarbeitung. In einer Ausführungsform umfassen die Ausführungseinheiten Universallogik, die programmiert werden kann, um allgemeine parallele Rechenoperationen zusätzlich zu Grafikverarbeitungsoperationen durchzuführen. Die Universallogik kann Verarbeitungsoperationen parallel oder in Verbindung mit Universallogik innerhalb der Prozessorkern(e) 107 von 1 oder des Kerns 202A-202N wie in 2A durchführen.
  • Ausgabedaten, die durch Threads erzeugt werden, die auf dem Grafikkern-Array 414 ausgeführt werden, können Daten an Speicher in einem vereinheitlichten Rückgabepuffer (URB) 418 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 zu senden, die auf dem Grafikkern-Array 414 ausgeführt werden. In einigen Ausführungsformen kann der URB 418 zusätzlich zur Synchronisierung zwischen Threads auf dem Grafikkern-Array und der Logik mit fester Funktion innerhalb der gemeinsamen Funktionslogik 420 verwendet werden.
  • In einen Ausführungsformen ist das Grafikkern-Array 414 derart skalierbar, dass das Array basierend auf dem Zielleistungspegel und dem Ziel-Performanceniveau der GPE 410 eine veränderliche Anzahl von Grafikkernen umfasst, die jeweils eine veränderliche Anzahl von Ausführungseinheiten aufweist. In einer Ausführungsform sind die Ausführungsressourcen dynamisch skalierbar, derart dass Ausführungsressourcen nach Bedarf aktiviert oder deaktiviert werden können.
  • Das Grafikkern-Array 414 ist mit der gemeinsamen Funktionslogik 420 gekoppelt, die mehrere Ressourcen umfasst, die von den Grafikkernen im Grafikkern-Array gemeinsam genutzt werden. Die gemeinsamen Funktionen innerhalb der gemeinsamen Funktionslogik 420 sind Hardwarelogikeinheiten, die spezialisierte Zusatzfunktionalität für das Grafikkern-Array 414 bereitstellen. In verschiedenen Ausführungsformen umfasst die gemeinsame Funktionslogik 420 Sampler-421-, mathematische 422 und Inter-Thread-Kommunikations-(ITC-)423-Logik. Außerdem implementieren einige Ausführungsformen einen oder mehrere Cache(s) 425 innerhalb der gemeinsamen Funktionslogik 420.
  • Eine gemeinsame Funktion wird zumindest in einem Fall implementiert, in welchem der Bedarf an einer gegebenen Spezialfunktion zur Einbeziehung in das Grafikkern-Array 414 unzureichend ist. Stattdessen wird eine einzige Instanziierung dieser Spezialfunktion als eine eigenständige Entität in der gemeinsamen Funktionslogik 420 implementiert und von den Ausführungsressourcen innerhalb des Grafikkern-Arrays 414 gemeinsam genutzt. Der genaue Satz von Funktionen, die innerhalb des Grafikkern-Arrays 414 gemeinsam genutzt wird und im Grafikkern-Array 414 enthalten ist, variiert von Ausführungsform zu Ausführungsform. In einigen Ausführungsformen können spezifische gemeinsame Funktionen innerhalb der gemeinsamen Funktionslogik 420, die vom Grafikkern-Array 414 extensiv genutzt werden, in die gemeinsame Funktionslogik 416 innerhalb des Grafikkern-Arrays 414 aufgenommen werden. In verschiedenen Ausführungsformen kann die gemeinsame Funktionslogik 416 innerhalb des Grafikkern-Arrays 414 einen Teil oder die Gesamtheit der Logik innerhalb der gemeinsamen Funktionslogik 420 enthalten. In einer Ausführungsform können alle Logikelemente innerhalb der gemeinsamen Funktionslogik 420 in die gemeinsame Funktionslogik 416 des Grafikkern-Arrays 414 kopiert sein. In einer Ausführungsform wird die gemeinsame Funktionslogik 420 zugunsten der gemeinsamen Funktionslogik 416 innerhalb des Grafikkern-Arrays 414 ausgeschlossen.
  • Ausführungseinheiten
  • 5A und 5B veranschaulichen Thread-Ausführungslogik 500, die ein Array von Verarbeitungselementen umfasst, das in einem Grafikprozessorkern gemäß hierin beschriebenen Ausführungsformen eingesetzt wird. Elemente von 5A und 5B, welche die gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente in einer anderen Figur hierin aufweisen, können auf eine ähnliche Art und Weise arbeiten oder funktionieren wie jene, die an anderer Stelle hierin beschrieben werden, sind aber nicht darauf beschränkt. 5A und 5B veranschaulichen eine Übersicht über die Thread-Ausführungslogik 500, die für Hardwarelogik repräsentativ sein kann, die mit jedem Teilkern 221A-221F von 2B veranschaulicht wurde. 5A ist für eine Ausführungseinheit innerhalb eines Universal-Grafikprozessors repräsentativ, während 5B für eine Ausführungseinheit repräsentativ ist, die innerhalb eines Rechenbeschleunigers verwendet werden kann.
  • Wie 5A veranschaulicht, umfasst in einigen Ausführungsformen die Thread-Ausführungslogik 500 einen Shader-Prozessor 502, einen Thread-Verteiler 504, einen Anweisungscache 506, ein skalierbares Ausführungseinheits-Array mit einer Mehrzahl von Ausführungseinheiten 508A-508N, einen Sampler 510, einen gemeinsamen lokalen Speicher 511, einen Datencache 512 und einen Datenport 514. In einer Ausführungsform kann das skalierbare Ausführungseinheits-Array durch Aktivieren oder Deaktivieren einer oder mehrerer Ausführungseinheiten (z. B. beliebiger der Ausführungseinheiten 508A, 508B, 508C, 508D bis 508N-1 und 508N) basierend auf den Rechenanforderungen einer Workload dynamisch skaliert werden. In einer Ausführungsform sind die enthaltenen Komponenten über eine Interconnect-Fabric, die mit jeder der Komponenten verknüpft ist, miteinander verbunden. In einigen Ausführungsformen umfasst die Thread-Ausführungslogik 500 eine oder mehrere Verbindungen mit Speicher, beispielsweise Systemspeicher oder Cachespeicher, durch einen oder mehrere vom Anweisungscache 506, dem Datenport 514, dem Sampler 510 und den Ausführungseinheiten 508A-508N. In einigen Ausführungsformen ist jede Ausführungseinheit (z. B. 508A) eine eigenständige programmierbare Universalrecheneinheit, die zum Ausführen mehrerer simultaner Hardware-Threads imstande ist, während sie parallel mehrere Datenelemente für jeden Thread verarbeitet. In verschiedenen Ausführungsformen ist das Array von Ausführungseinheiten 508A-508N skalierbar, um eine beliebige Anzahl von Ausführungseinheiten einzubeziehen.
  • In einigen Ausführungsformen werden die Ausführungseinheiten 508A-508N in erster Linie zum Ausführen von Shader-Programmen verwendet. Ein Shader-Prozessor 502 kann die verschiedenen Shader-Programme verarbeiten und Ausführungsthreads, die mit den Shader-Programmen assoziiert sind, über einen Thread-Verteiler 504 verteilen. In einer Ausführungsform umfasst der Thread-Verteiler Logik zum Arbitrieren von Thread-Initiierungsanforderungen von den Grafik- und Medienpipelines und Instanziieren der angeforderten Threads auf einer oder mehreren Ausführungseinheiten in den Ausführungseinheiten 508A-508N. Zum Beispiel kann eine Geometrie-Pipeline Vertex-, Tessellations- oder Geometrie-Shader an Thread-Ausführungslogik zur Verarbeitung verteilen. In einigen Ausführungsformen kann der Thread-Verteiler 504 auch Laufzeit-Thread-Erzeugungsanforderungen von den ausführenden Shader-Programmen verarbeiten.
  • In einigen Ausführungsformen unterstützen die Ausführungseinheiten 508A-508N einen Anweisungssatz, der native Unterstützung für viele 3D-Grafik-Shader-Standardanweisungen umfasst, derart dass Shader-Programme aus Grafikbibliotheken (z. B. Direct 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen Vertex- und Geometrieverarbeitung (z. B. Vertex-Programme, Geometrie-Programme, Vertex-Shader), Pixelverarbeitung (z. B. Pixel-Shader, Fragment-Shader) und allgemeine Verarbeitung (z. B. Rechen- und Medien-Shader). Jeder der Ausführungseinheiten 508A-508N ist zur Mehrfachausgabe-Einzelanweisung-Mehrfachdaten-(SIMD-)Ausführung imstande, und Multithread-Betrieb ermöglicht eine effiziente Ausführungsumgebung im Hinblick auf Speicherzugriffe mit höherer Latenz. Jeder Hardware-Thread innerhalb einer jeden Ausführungseinheit weist eine dedizierte Registerdatei hoher Bandbreite und einen unabhängigen assoziierten Thread-Zustand auf. Ausführung ist Mehrfachausgabe pro Takt an Pipelines, die zu Ganzzahl-Operationen, Gleitkomma-Operationen einfacher und doppelter Genauigkeit, SIMD-Verzweigungsfähigkeit, logischen Operationen, transzendentalen Operationen und diversen anderen Operationen imstande sind. Während des Wartens auf Daten vom Speicher oder einer der gemeinsamen Funktionen veranlasst Abhängigkeitslogik innerhalb der Ausführungseinheiten 508A-508N einen Warte-Thread, zu schlafen, bis die angeforderten Daten zurückgesendet wurden. Währen der Warte-Thread schläft, können Hardwareressourcen der Verarbeitung anderer Threads gewidmet werden. Zum Beispiel kann während einer Verzögerung, die mit einer Vertex-Shader-Operation assoziiert ist, eine Ausführungseinheit Operationen für einen Pixel-Shader, einen Fragment-Shader oder einen anderen Typ von Shader-Programm, einschließlich eines anderen Vertex-Shaders, durchführen. Verschiedene Ausführungsformen können das Verwenden von Ausführung durch Einzelanweisung-Multithread (SIMT - Single Instruction Multiple Thread) als eine Alternative zum Verwenden von SIMD oder zusätzlich zum Verwenden von SIMD betreffen. Eine Bezugnahme auf einen SIMD-Kern oder eine SIMD-Operation kann auch für SIMT gelten oder für SIMT in Kombination mit SIMD gelten.
  • Jede Ausführungseinheit in den Ausführungseinheiten 508A-508N verarbeitet Arrays von Datenelementen. Die Anzahl von Datenelementen ist die „Ausführungsgröße“ oder die Anzahl von Kanälen für die Anweisung. Ein Anweisungskanal ist eine logische Einheit von Ausführung für Datenelementzugriff, Maskierung und Flusssteuerung innerhalb von Anweisungen. Die Anzahl von Kanälen kann von der Anzahl von physischen arithmetisch-logischen Einheiten (ALU - Arithmetic Logic Unit) oder Gleitkomma-Einheiten (FPU - Floating Point Units) für einen spezifischen Grafikprozessor unabhängig sein. In einigen Ausführungsformen unterstützen die Ausführungseinheiten 508A-508N Ganzzahl- und Gleitkomma-Datentypen.
  • Der Ausführungseinheitsanweisungssatz umfasst SIMD-Anweisungen. Die verschiedenen Datenelemente können als gepackter Datentyp in einem Register gespeichert werden, und die Ausführungseinheit verarbeitet die verschiedenen Elemente basierend auf der Datengröße der Elemente. Wenn zum Beispiel ein 256-Bit breiter Vektor verarbeitet wird, werden die 256 Bits des Vektors in einem Register gespeichert, und die Ausführungseinheit verarbeitet den Vektor als vier separate gepackte 54-Bit-Datenelemente (Datenelemente mit Vierfachwort-(QW - Quad-Word-)Größe), acht separate gepackte 32-Bit-Datenelemente (Datenelemente mit Doppelwort-(DW-)Größe), sechzehn separate gepackte 16-Bit-Datenelemente (Datenelement mit Wort-(W-)Größe) oder zweiunddreißig separate 8-Bit-Datenelemente (Datenelemente mit Byte-(B-)Größe). Es sind jedoch andere Vektorbreiten und Registergrößen möglich.
  • In einer Ausführungsform können eine oder mehrere Ausführungseinheiten zu einer fusionierten Ausführungseinheit 509A-509N mit Thread-Steuerlogik (507A-507N), die den fusionierten EUs gemeinsam ist, kombiniert sein. Mehrere EUs können zu einer EU-Gruppe fusioniert sein. Jede EU in der fusionierten EU-Gruppe kann zum Ausführen eines separaten SIMD-Hardware-Threads konfiguriert sein. Die Anzahl von EUs in einer fusionierten EU-Gruppe kann gemäß Ausführungsformen variieren. Außerdem können verschiedene SIMD-Breiten pro EU realisiert werden und umfassen SIMD8, SIMD16, und SIMD32, ohne darauf beschränkt zu sein. Jede fusionierte Grafikausführungseinheit 509A-509N umfasst mindestens zwei Ausführungseinheiten. Zum Beispiel umfasst die fusionierte Ausführungseinheit 509A eine erste EU 508A, eine zweite EU 508B und Thread-Steuerlogik 507A, die der ersten EU 508A und der zweiten EU 508B gemeinsam ist. Die Thread-Steuerlogik 507A steuert Threads, die auf der fusionierten Grafikeinheit 509A ausgeführt werden, und ermöglicht jeder EU innerhalb der fusionierten Ausführungseinheit 509A-509N Ausführung unter Verwendung eines gemeinsamen Anweisungszeigerregisters.
  • Ein oder mehrere interne Anweisungscaches (z. B. 506) sind in der Thread-Ausführungslogik 500 enthalten, um Thread-Anweisungen für die Ausführungseinheiten zwischenzuspeichern. In einigen Ausführungsformen sind ein oder mehrere Datencaches (z. B. 512) zum Zwischenspeichern von Thread-Daten während der Thread-Ausführung enthalten. Threads, die auf der Ausführungslogik 500 ausgeführt werden, können explizit verwaltete Daten auch im gemeinsamen lokalen Speicher 511 speichern. In einigen Ausführungsformen ist ein Sampler 510 zum Bereitstellen von Textur-Sampling für 3D-Operation und Medien-Sampling für Medienoperationen enthalten. In einigen Ausführungsformen umfasst der Sampler 510 spezialisierte Textur- oder -Medien-Sampling-Funktionalität zum Verarbeiten von Textur- und Mediendaten während des Sampling-Prozesses vor dem bereitstellen der gesampelten Daten für eine Ausführungseinheit.
  • Während der Ausführung senden die Grafik- und die Medienpipeline Thread-Initiierungsanforderungen mittels einer Thread-Erzeugungs- und -Verteilungslogik an die Thread-Ausführungslogik 500. Sobald eine Gruppe von geometrischen Objekten verarbeitet und in Pixeldaten gerastet ist, wird Pixelprozessorlogik (z. B. Pixel-Shader-Logik, Fragment-Shader-Logik usw.) innerhalb des Shader-Prozessors 502 aufgerufen, um Ausgabeinformationen weiterzuberechnen und zu bewirken, dass Ergebnisse auf Ausgabeflächen geschrieben werden (z. B. Farbpuffer, Tiefenpuffer, Schablonenpuffer). In einigen Ausführungsformen berechnet ein Pixel-Shader oder ein Fragment-Shader die Werte der verschiedenen Vertex-Attribute, die über das gerasterte Objekt interpoliert werden sollen. In einigen Ausführungsformen führt dann Pixelprozessorlogik innerhalb des Shader-Prozessors 502 ein Anwendungsprogrammierschnittstellen-(API)gestütztes Pixel- oder Fragment-Shader-Programm aus. Zum Ausführen des Shader-Programms verteilt der Shader-Prozessor 502 Threads über den Thread-Verteiler 504 an eine Anweisungseinheit (z. B. 508A). In einigen Ausführungsformen verwendet der Shader-Prozessor 502 Textur-Sampling-Logik im Sampler 510, um auf Texturdaten in Texturbildern zuzugreifen, die in Speicher gespeichert sind. Arithmetische Operationen an den Texturdaten und den eingegebenen Geometriedaten berechnen Pixelfarbdaten für jedes geometrische Fragment oder verwerfen ein oder mehrere Pixel aus der Weiterverarbeitung.
  • In einigen Ausführungsformen stellt der Datenport 514 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 500 zum Ausgeben von verarbeiteten Daten an Speicher zur Weiterverarbeitung auf einer Grafikprozessor-Ausgabepipeline. In einigen Ausführungsformen umfasst der Datenport 514 einen oder mehrere Cachespeicher (z. B. Datencache 512), um Daten für Speicherzugriff über den Datenport zwischenzuspeichern, oder ist damit gekoppelt.
  • In einer Ausführungsform kann die Ausführungslogik 500 außerdem einen Strahlverfolger 505 umfassen, der Strahlverfolgungsbeschleunigungsfunktionalität bereitstellt. Der Strahlverfolger 505 kann einen Strahlverfolgungsanweisungssatz unterstützen, der Anweisungen/Funktionen zur Strahlerzeugung umfasst. Der Strahlverfolgungsanweisungssatz kann dem Strahlverfolgungsanweisungssatz, der von den Strahlverfolgungskernen 245 in 2C unterstützt wird, ähneln oder verschieden davon sein.
  • 5B veranschaulicht beispielhafte interne Details einer Ausführungseinheit 508 gemäß Ausführungsformen. Eine Grafikausführungseinheit 508 kann eine Anweisungsabrufeinheit 537, ein Allgemeinregisterdatei-Array (GRF - General Register File) 524, ein Architekturregisterdatei-Array (ARF - Architectural Register File) 526, einen Thread-Arbiter 522, eine Sendeeinheit 530, eine Verzweigungseinheit 532, einen Satz von SIMD-Gleitkomma-Einheiten (FPU - Floating Point Unit) 534 und in einer Ausführungsform einen Satz von dedizierten Ganzzahl-SIMD-ALUs 535 umfassen. Die GRF 524 und die ARF 526 umfassen den Satz von Allgemeinregisterdateien und Architekturregisterdateien, die mit jedem Simultan-Hardware-Thread assoziiert sind, der in der GrafikAusführungseinheit 508 aktiv sein kann. In einer Ausführungsform wird ein Pro-Thread-Architekturzustand in der ARF 526 aufrechterhalten, während Daten, die während der Thread-Ausführung verwendet werden, in der GRF 524 gespeichert werden. Der Ausführungszustand jedes Threads, einschließlich der Anweisungszeiger für jeden Thread, können in Threadspezifischen Registern im ARF 526 gehalten werden.
  • In einer Ausführungsform weist die Grafikausführungseinheit 508 eine Architektur auf, die eine Kombination aus simultanem Multithreading (SMT) und feinkörnigem verschachtelten Multithreading (IMT) ist. Die Architektur hat eine modulare Konfiguration, die zum Zeitpunkt des Entwurfs basierend auf einer Zielanzahl von simultanen Threads und einer Anzahl von Registern pro Ausführungseinheit feinabgestimmt werden kann, wobei Ausführungseinheitsressourcen über Logik aufgeteilt werden, die zum Ausführen von mehreren simultanen Threads verwendet wird. Die Anzahl von logischen Threads, die von der Grafikausführungseinheit 508 ausgeführt werden kann, ist nicht auf die Anzahl von Hardware-Threads beschränkt, und es können jedem Hardware-Thread mehrere logische Threads zugeordnet werden.
  • In einer Ausführungsform kann die Grafikausführungseinheit 508 mehrere Anweisungen, die jeweils verschiedene Anweisungen sein können, gemeinsam erteilen. Der Thread-Arbiter 522 des Threads der Grafikausführungseinheit 508 kann die Anweisungen an eine von der Sendeeinheit 530, der Verzweigungseinheit 532 oder den SIMD-FPU(s) 534 zur Ausführung verteilen. Jeder Ausführungsthread kann auf Allgemeinregister innerhalb der GRF 524 zugreifen 128, wobei jedes Register 32 Bytes speichern kann, auf die als SIMD-8-Elementvektor von 32-Bit-Datenelementen zugegriffen werden kann. In einer Ausführungsform hat jeder Ausführungseinheitsthread Zugriff aus 4 kBytes innerhalb der GRF 524, obwohl Ausführungsformen nicht darauf beschränkt sind und in anderen Ausführungsformen mehr oder weniger Registerressourcen vorgesehen sein können. In einer Ausführungsform ist die Grafikausführungseinheit 508 in sieben Hardware-Threads partitioniert, die unabhängig Rechenoperationen durchführen können, obwohl die Anzahl von Threads pro Ausführungseinheit gemäß Ausführungsformen auch variieren kann. Zum Beispiel werden in einer Ausführungsform bis zu 16 Hardware-Threads unterstützt. In einer Ausführungsform, in welcher sieben Threads auf 4 kBytes zugreifen können, kann die GRF 524 insgesamt 28 kBytes speichern. Wenn 16 Threads auf 4 kBytes zugreifen können, kann die GRF 524 insgesamt 64 kBytes speichern. Flexible Adressiermodi können ermöglichen, dass Register zusammen adressiert werden, um effektiv größere Register zu erstellen oder beabstandete rechteckige Blockdatenstrukturen darzustellen.
  • In einer Ausführungsform werden Speicheroperationen, Sampler-Operationen und andere Systemkommunikationen längerer Latenz mittels „Senden“-Anweisungen verteilt, die durch die Meldungsweitergabe-Sendeeinheit 530 ausgeführt werden. In einer Ausführungsform werden Verzweigungsanweisungen an eine dedizierte Verzweigungseinheit 532 verteilt, um SIMD-Divergenz und etwaige -Konvergenz zu ermöglichen.
  • In einer Ausführungsform umfasst die Grafikausführungseinheit 508 eine oder mehrere SIMD-Gleitkomma-Einheiten (FPU(s)) 534 zum Durchführen von Gleitkomma-Operationen. In einer Ausführungsform unterstützen die FPU(s) 534 auch Ganzzahlberechnung. In einer Ausführungsform können die FPU(s) 534 bis zu einer Anzahl M von 32-Bit-Gleitkomma-(oder Ganzzahl-)Operationen SIMD-ausführen oder bis zu 2 M 16-Bit-Ganzzahl- oder 16-Bit-Gleitkomma-Operationen SIMD-ausführen. In einer Ausführungsform stellt mindestens eine der FPU(s) erweiterte mathematische Fähigkeit zum Unterstützen von transzendentalen mathematischen Hochdurchsatz-Funktionen und 54-Bit-Gleitkomma doppelter Genauigkeit bereit. In einigen Ausführungsformen ist auch ein Satz von 8-Bitz-Ganzzahl-SIMD-ALUs 535 vorhanden und kann spezifisch optimiert werden, um Operationen durchzuführen, die mit Berechnungen für maschinelles Lernen assoziiert sind.
  • In einer Ausführungsform können Arrays mehrerer Instanzen der Grafikausführungseinheit 508 in einer Grafik-Teilkerngruppierung (z. B. einem Teil-Slice) instanziiert werden. Für Skalierbarkeit können Produktarchitekten die genaue Anzahl von Ausführungseinheiten pro Teilkerngruppierung wählen. In einer Ausführungsform kann die Ausführungseinheit 508 Anweisungen über eine Mehrzahl von Ausführungskanälen ausführen. In einer weiteren Ausführungsform wird jeder Thread, der auf der Grafikausführungseinheit 508 ausgeführt wird, auf einem verschiedenen Kanal ausgeführt.
  • 6 veranschaulicht eine zusätzliche Ausführungseinheit 600 gemäß einer Ausführungsform. Die Ausführungseinheit 600 kann eine rechenoptimierte Ausführungseinheit zur Verwendung in einer Rechen-Engine-Kachel 340A-340D wie in 3C sein, ist aber nicht entsprechend beschränkt. Es können auch Varianten der Ausführungseinheit 600 in einer Grafik-Engine-Kachel 310A-310D wie in 3B verwendet werden. In einer Ausführungsform umfasst die Ausführungseinheit 600 eine Thread-Steuereinheit 601, eine Thread-Zustandseinheit 602, eine Anweisungsabruf-/-vorabrufeinheit 603, und eine Anweisungsdecodiereinheit 604. Die Ausführungseinheit 600 umfasst außerdem eine Registerdatei 606, die Register speichert, die Hardware-Threads innerhalb der Ausführungseinheit zugeordnet werden können. Die Ausführungseinheit 600 umfasst außerdem eine Sendeeinheit 607 und eine Verzweigungseinheit 608. In einer Ausführungsform können die Sendeeinheit 607 und die Verzweigungseinheit 608 ähnlich wie die Sendeeinheit 530 und eine Verzweigungseinheit 532 der Grafikausführungseinheit 508 von 5B funktionieren.
  • Die Ausführungseinheit 600 umfasst auch eine Recheneinheit 610, die mehrere verschiedene Typen von Funktionseinheiten umfasst. In einer Ausführungsform umfasst die Recheneinheit 610 eine ALU-Einheit 611, die ein Array von arithmetisch-logischen Einheiten umfasst. Die ALU-Einheit 611 kann zum Durchführen von 64-Bit-, 32-Bit- und 16-Bit-Ganzzahl- und -Gleitkomma-Operationen konfiguriert sein. Ganzzahl- und Gleitkomma-Operationen können simultan durchgeführt werden. Die Recheneinheit 610 kann außerdem ein systolisches Array 612 und eine mathematische Einheit 613 umfassen. Das systolische Array 612 umfasst ein W breites und D tiefes Netzwerk von Datenverarbeitungseinheiten, die zum Durchführen von Vektor- oder anderen datenparallelen Operationen in einer systolischen Weise verwendet werden können. In einer Ausführungsform kann das systolische Array 612 zum Durchführen von Matrixoperationen, beispielsweise Matrix-Skalarproduktoperationen, konfiguriert sein. In einer Ausführungsform unterstützt das systolische Array 612 16-Bit-Gleitkomma-Operationen sowie 8-Bit- und 4-Bit-Ganzzahloperationen. In einer Ausführungsform kann das systolische Array 612 zum Beschleunigen von Operationen maschinellen Lernens konfiguriert sein. In solchen Ausführungsformen kann das systolische Array 612 mit Unterstützung für das 16-Bit-Gleitkommaformat bfloat konfiguriert sein. In einer Ausführungsform kann die mathematische Einheit 613 enthalten sein, um einen spezifischen Teilsatz von mathematischen Operationen in einer effizienten Weise und mit geringerem Leistungsaufwand als die ALU-Einheit 611 durchzuführen. Die mathematische Einheit 613 kann eine Variante der mathematischen Logik umfassen, die in der gemeinsamen Funktionslogik einer Grafikverarbeitungs-Engine anzutreffen ist, die durch andere Ausführungsformen bereitgestellt wird (z. B. die mathematische Logik 422 der gemeinsamen Funktionslogik 420 von 4). In einer Ausführungsform kann die mathematische Einheit 613 zum Durchführen von 32-Bit- und 64-Bit-Gleitkomma-Operationen konfiguriert sein.
  • Die Thread-Steuereinheit 601 umfasst Logik zum Steuern der Ausführung von Threads innerhalb der Ausführungseinheit. Die Thread-Steuereinheit 601 kann Thread-Arbitrierungslogik zum Starten, Stoppen und Präemptieren von Threads innerhalb der Ausführungseinheit 600 umfassen. Die Thread-Zustandseinheit 602 kann zum Speichern eines Thread-Zustands für Threads verwendet werden, die zur Ausführung auf der Ausführungseinheit 600 zugeordnet sind. Das Speichern des Thread-Zustands innerhalb der Ausführungseinheit ermöglicht die schnelle Präemption von Threads, wenn diese Threads gesperrt werden oder in den Ruhezustand eintreten. Die Anweisungsabruf-/-vorabrufeinheit 603 kann Anweisungen aus einem Anweisungscache von Ausführungslogik einer höheren Ebene (z. B. dem Anweisungscache 506 wie in 5A) abrufen. Die Anweisungsabruf-/-vorabrufeinheit 603 kann außerdem Vorabrufanforderungen für Anweisungen, die in das Anweisungscache geladen werden sollen, basierend auf einer Analyse von gegenwärtig ausführenden Threads ausgeben. Die Anweisungsdecodiereinheit 604 kann zum Decodieren von Anweisungen verwendet werden, die durch die Recheneinheiten ausgeführt werden sollen. In einer Ausführungsform kann die Anweisungsdecodiereinheit 604 als ein sekundärer Decoder zum Decodieren von komplexen Anweisungen in einzelne Mikrooperationen verwendet werden.
  • Die Ausführungseinheit 600 umfasst außerdem eine Registerdatei 606, die von Hardware-Threads verwendet werden kann, die auf der Ausführungseinheit 600 ausgeführt werden. Register in der Registerdatei 606 können über die Logik aufgeteilt werden, die zum Ausführen von mehreren simultanen Threads innerhalb der Recheneinheit 610 der Ausführungseinheit 600 verwendet wird. Die Anzahl von logischen Threads, die von der Grafikausführungseinheit 600 ausgeführt werden kann, ist nicht auf die Anzahl von Hardware-Threads beschränkt, und es können jedem Hardware-Thread mehrere logische Threads zugeordnet werden. Die Größe der Registerdatei 606 kann über Ausführungsformen basierend auf der Anzahl von unterstützten Hardware-Threads variieren. In einer Ausführungsform kann Registerumbenennung zum dynamischen Zuweisen von Registern zu Hardware-Threads verwendet werden.
  • 7 ist ein Blockdiagramm, das ein Grafikprozessoranweisungsformat 700 gemäß einigen Ausführungsformen veranschaulicht. In einer oder mehreren Ausführungsformen unterstützen die Grafikprozessorausführungseinheiten einen Anweisungssatz mit Anweisungen in mehreren Formaten. Die Felder mit durchgezogenen Linien veranschaulichen die Komponenten, die im Allgemeinen in einer Ausführungseinheitsanweisung enthalten sind, während die gestrichelten Linien Komponenten umfassen, die optional sind oder die nur in einem Teilsatz der Anweisungen enthalten sind. In einigen Ausführungsformen handelt es sich bei dem beschriebenen und veranschaulichten Anweisungsformat 700 insofern um Makroanweisungen, als sie Anweisungen sind, die an die Anweisungseinheit übermittelt werden, im Gegensatz zu Mikrooperationen, die aus der Anweisungsdecodierung resultieren, sobald die Anweisung verarbeitet ist.
  • In einigen Ausführungsformen unterstützen die Grafikprozessorausführungseinheiten Anweisungen nativ in einem 128-Bit-Anweisungsformat 710. Ein kompaktiertes 64-Bit-Anweisungsformat 730 ist für einige Anweisungen basierend auf der ausgewählten Anweisung, den Anweisungsoptionen und der Anzahl von Operanden verfügbar. Das native 128-Bit-Anweisungsformat 710 stellt Zugriff auf alle Anweisungsoptionen bereit, während im 64-Bit-Format 730 einige Optionen und Operationen eingeschränkt sind. Die im 64-Bit-Format 730 verfügbaren nativen Anweisungen variieren von Ausführungsform zu Ausführungsform. In einigen Ausführungsformen ist die Anweisung unter Verwendung eines Satzes von Indexwerten in einem Indexfeld 713 zum Teil kompaktiert. Die Ausführungseinheitshardware verweist auf einen Satz von Kompaktierungstabellen basierend auf den Indexwerten und verwendet die Kompaktierungstabellenausgaben zum Wiederherstellen einer nativen Anweisung im 128-Bit-Anweisungsformat 710. Es können auch andere Größen und Formate von Anweisung verwendet werden.
  • Für jedes Format definiert ein Anweisungs-Opcode 712 die Operation, welche die Ausführungseinheit durchführen soll. Die Ausführungseinheiten führen jede Anweisung über die mehreren Datenelemente jedes Operanden parallel aus. Zum Beispiel führt die Ausführungseinheit in Reaktion auf eine Addieranweisung eine simultane Additionsoperation über jeden Farbkanal durch, der ein Texturelement oder ein Bildelement darstellt. Standardmäßig führt die Ausführungseinheit jede Anweisung über alle Datenkanäle der Operanden durch. In einigen Ausführungsformen ermöglicht ein Anweisungskontrollfeld 714 Kontrolle über bestimmte Ausführungsoptionen, wie beispielsweise Kanalauswahl (z. B. Prädiktion) und Datenkanalreihenfolge (z. B. Umordnung). Für Anweisungen im 128-Bit-Anweisungsformat 710 begrenzt ein Exec-Größe-Feld (Ausführungsgröße-Feld) 716 die Anzahl von Datenkanälen, die parallel ausgeführt wird. In einigen Ausführungsformen ist das Exec-Größe-Feld 716 im kompakten 64-Bit-Anweisungsformat 730 nicht zur Verwendung verfügbar.
  • Einige Ausführungseinheitsanweisungen weisen bis zu drei Operanden auf, die zwei Quelloperanden, src0 720, src1 722, und einen Zieloperanden 718 umfassen. In einigen Ausführungsformen unterstützen die Ausführungseinheiten zwei Zielanweisungen, wobei eines der Ziele impliziert ist. Datenbearbeitungsanweisungen können einen dritten Quelloperanden (z. B. SRC2 724) aufweisen, wobei der Anweisungs-Opcode 712 die Anzahl von Quelloperanden bestimmt. Der letzte Quelloperand einer Anweisung kann ein unmittelbarer (z. B. hartcodierter) Wert sein, der mit der Anweisung weitergegeben wird.
  • In einigen Ausführungsformen umfasst das 128-Bit-Anweisungsformat 710 ein Zugriffs-/Adressmodus-Feld 726, das zum Beispiel spezifiziert, ob ein direkter Registeradressiermodus oder ein indirekter Registeradressiermodus verwendet wird. Wenn der direkte Registeradressiermodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden durch Bits in der Anweisung direkt bereitgestellt.
  • In einigen Ausführungsformen umfasst das 128-Bit-Anweisungsformat 710 ein Zugriffs-/Adressmodus-Feld 726, das einen Adressmodus und/oder einen Zugriffsmodus für die Anweisung spezifiziert. In einer Ausführungsform wird der Zugriffsmodus zum Definieren einer Datenzugriffsausrichtung für die Anweisung verwendet. Einige Ausführungsformen unterstützten Zugriffsmodi, die einen 16-Byte-ausgerichteten Zugriffsmodus und einen 1-Byte-ausgerichteten Zugriffsmodus umfassen, wobei die Byte-Ausrichtung die Zugriffsausrichtung der Anweisungsoperanden bestimmt. Wenn zum Beispiel in einem ersten Modus, kann die Anweisung Byte-ausgerichtetes Adressieren für Quell- und Zieloperanden verwenden und, wenn in einem zweiten Modus, kann die Anweisung 16-Byte-ausgerichtetes Adressieren für alle Quell- und Zieloperanden verwenden.
  • In einer Ausführungsform bestimmt der Adressmodusteil des Zugriffs-/Adressmodus-Feld 726, ob die Anweisung direktes oder indirektes Adressieren verwenden soll. Wenn der direkte Registeradressiermodus verwendet wird, stellen Bits in der Anweisung direkt die Registeradresse eines oder mehrerer Operanden bereit. Wenn der indirekte Registeradressiermodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressregisterwert und einem Adresse-unmittelbar-Feld in der Anweisung berechnet werden.
  • In einigen Ausführungsformen werden Anweisungen basierend auf Opcode-712-Bitfeldern gruppiert, um Opcode-Decodierung 740 zu vereinfachen. Für einen 8-Bit-Opcode ermöglichen die Bits 4, 5, und 6 der Ausführungseinheit, den Typ von Opcode zu bestimmen. Die dargestellte genaue Opcode-Gruppierung ist lediglich ein Beispiel. In einigen Ausführungsformen umfasst eine Verschiebungs- und Logik-Opcode-Gruppe 742 Datenverschiebungs- und Logikanweisungen (z. B. Verschieben (mov - move), Vergleichen (cmp - compare). In einigen Ausführungsformen teilt sich die Verschiebungs- und Logikgruppe 742 die fünf höchstwertigen Bits (MSB), wobei Verschieben-(mov-)Anweisungen die Form 0000xxxxb aufweisen, und Logikanweisungen die Form 0001xxxxb aufweisen. Eine Flusssteuerungsanweisungsgruppe 744 (z. B. Aufrufen, Springen (jmp - jump)) umfasst Anweisungen in Form von 0010xxxxb (z. B. 0x20). Eine Mischanweisungsgruppe 746 umfasst eine Mischung von Anweisungen, einschließlich Synchronisierungsanweisungen (z. B. Warten, Senden), in der Form von 0011 xxxxb (z. B. 0x30). Eine Parallel-Math-Anweisungsgruppe 748 umfasst komponentenweise arithmetische Anweisungen (z. B. Addieren, Multiplizieren (mul - multiply)) in der Form von 0100xxxxb (z. B. 0x40). Die Parallel-Math-Gruppe 748 führt arithmetische Operationen über Datenkanäle parallel durch. Die Vektor-Math-Gruppe 750 umfasst arithmetische Anweisungen (z. B. dp4)) in der Form von 0101xxxxb (z. B. 0x50). Die Vektor-Math-Gruppe führt arithmetische, beispielsweise Skalarprodukt-, Berechnungen an Vektoroperanden durch. Die veranschaulichte Opcode-Decodierung 740 kann in einer Ausführungsform verwendet werden, um zu bestimmen, welcher Teil einer Ausführungseinheit zum Ausführen einer decodierten Anweisung verwendet wird. Zum Beispiel können einige Ausführungsformen als systolische Anweisungen festgelegt sein, die durch ein systolisches Array ausgeführt werden. Andere Anweisungen, wie beispielsweise Strahlverfolgungsanweisungen (nicht dargestellt), können zu einem Strahlverfolgungskern oder einer Strahlverfolgungslogik innerhalb eines Slices oder einer Partition von Ausführungslogik geleitet werden.
  • Grafikpipeline
  • 8 ist ein Blockdiagramm einer anderen Ausführungsform eines Grafikprozessors 800. Elemente von 8, welche die gleichen Bezugszeichen (oder Bezeichnungen) wie die Elemente in einer anderen Figur hierin aufweisen, können auf eine ähnliche Art und Weise arbeiten oder funktionieren wie jene, die an anderer Stelle hierin beschrieben werden, sind aber nicht darauf beschränkt.
  • In einigen Ausführungsformen umfasst der Grafikprozessor 800 eine Geometrie-Pipeline 820, eine Medienpipeline 830, eine Anzeige-Engine 840, Thread-Ausführungslogik 850 und eine Render-Ausgabepipeline 870. In einigen Ausführungsformen ist der Grafikprozessor 800 ein Grafikprozessor innerhalb eines Mehrkern-Verarbeitungssystems, das einen oder mehrere Universalverarbeitungskerne umfasst. Der Grafikprozessor wird durch Registerschreiboperationen in ein oder mehrere Steuerregister (nicht dargestellt) oder über Befehle gesteuert, die über einen Ring-Interconnect 802 an den Grafikprozessor 800 erteilt werden. In einigen Ausführungsformen koppelt der Ring-Interconnect 802 den Grafikprozessor 800 mit anderen Komponenten, beispielsweise anderen Grafikprozessoren oder Universalprozessoren. Befehle vom Ring-Interconnect 802 werden durch einen Befehls-Streamer 803 interpretiert, der die Anweisungen an einzelne Komponenten der Geometrie-Pipeline 820 oder der Medienpipeline 830 übermittelt.
  • In einigen Ausführungsformen lenkt der Befehls-Streamer 803 die Operation eines Vertex-Abrufers 805, der Vertex-Daten aus Speicher ausliest und Vertex-Verarbeitungsbefehle ausführt, die vom Befehls-Streamer 803 bereitgestellt werden. In einigen Ausführungsformen stellt der Vertex-Abrufen 805 Vertex-Daten für einen Vertex-Shader 807 bereit, der Koordinatenraumtransformation und Beleuchtungsoperationen für jeden Vertex durchführt. In einigen Ausführungsformen führen der Vertex-Abrufer 805 und der Vertex-Shader 807 Vertex-Verarbeitungsanweisungen durch Verteilen von Ausführungsthreads an die Ausführungseinheiten 852A-852B mittels des Thread-Verteilers 831 durch.
  • In einigen Ausführungsformen handelt es sich bei den Ausführungseinheiten 852A-852B um ein Array von Vektorprozessoren mit einem Anweisungssatz zum Durchführen von Grafik- und Medienoperationen. In einigen Ausführungsformen weisen die Ausführungseinheiten 852A-852B einen angeschlossenen L1-Cache 851 auf, der für jedes Array spezifisch ist oder von den Arrays gemeinsam genutzt wird. Der Cache kann konfiguriert sein als Datencache, Anweisungscache oder Einzelcache, der partitioniert ist, um Daten und Anweisungen in verschiedenen Partitionen zu enthalten.
  • In einigen Ausführungsformen umfasst die Geometrie-Pipeline 820 Tessellationskomponenten zum Durchführen von hardwarebeschleunigter Tessellation von 3D-Objekten. In einigen Ausführungsformen konfiguriert ein programmierbarer Hull-Shader 811 die Tessellationsoperationen. Ein programmierbarer Domänen-Shader 817 stellt eine Back-End-Auswertung der Tessellationsausgabe bereit. Ein Tessellator 813 arbeitet auf die Weisung des Hull-Shaders 811 und enthält Speziallogik, um einen Satz von detaillierten geometrischen Objekten basierend auf einem groben geometrischen Modell zu erzeugen, das als Eingabe in die Geometrie-Pipeline 820 bereitgestellt wird. Wenn in einigen Ausführungsformen Tessellation nicht verwendet wird, können die Tessellationskomponenten (z. B. Hull-Shader 811, Tessellator 813 und Domänen-Shader 817) umgangen werden.
  • In einigen Ausführungsformen können vollständige geometrische Objekte durch einen Geometrie-Shader 819 mittels eines oder mehrerer Threads verarbeitet werden, die an Ausführungseinheiten 852A-852B verteilt werden, oder sie können direkt zum Clipper 829 weitergehen. In einigen Ausführungsformen verarbeitet der Geometrie-Shader ganze geometrische Objekte statt Vertices oder Patches von Vertices wie in vorherigen Stufen der Grafikpipeline. Wenn Tessellation deaktiviert ist, empfängt der Geometrie-Shader 819 eine Eingabe vom Vertex-Shader 807. In einigen Ausführungsformen kann der Geometrie-Shader 819 durch ein Geometrie-Shader-Programm programmiert werden, um Geometrie-Tessellation durchzuführen, wenn die Tessellationseinheiten deaktiviert sind.
  • Vor der Rasterung verarbeitet ein Clipper 829 die Vertex-Daten. Der Clipper 829 kann ein Clipper mit fester Funktion oder ein programmierbarer Clipper mit Clipping- und Geometrie-Shader-Funktionen sein. In einigen Ausführungsformen verteilt eine Rasterungs- und Tiefentestkomponente 873 in der Render-Ausgabepipeline 870 Pixel-Shader, um geometrische Objekte in Pro-Pixel-Darstellungen umzuwandeln. In einigen Ausführungsformen ist die Pixel-Shader-Logik in der Thread-Ausführungslogik 850 enthalten. In einigen Ausführungsformen kann eine Anwendung die Rasterungs- und Tiefentestkomponente 873 umgehen und über eine Stream-out-Einheit 823 auf ungerasterte Vertex-Daten zugreifen.
  • Der Grafikprozessor 800 weist einen Interconnect-Bus, eine Interconnect-Fabric oder einen anderen Interconnect-Mechanismus auf, der Daten- und Meldungsweitergabe zwischen den Hauptkomponenten des Prozessors ermöglicht. In einigen Ausführungsformen sind die Ausführungseinheiten 852A-852B und damit assoziierte logische Einheiten (z. B. L1-Cache 851, Sampler 854, Textur-Cache 858, etc.) über einen Datenport 856 miteinander verbunden, um Speicherzugriff durchzuführen und mit Render-Ausgabepiplinekomponenten des Prozessors zu kommunizieren. In einigen Ausführungsformen weisen der Sampler 854, die Caches 851, 858 und die Ausführungseinheiten 852A-852B jeweils separate Speicherzugriffspfade auf. In einer Ausführungsform kann der Textur-Cache 858 auch als Sampler-Cache konfiguriert sein.
  • In einigen Ausführungsformen enthält die Render-Ausgabepipeline 870 eine Rasterungs- und Tiefentestkomponente 873, die vertexbasierte Objekte in eine assoziierte pixelbasierte Darstellung umwandelt. In einigen Ausführungsformen umfasst die Rasterlogik eine Fenster-/Maskiereinheit zum Durchführen von Dreiecks- und Linienrasterung mit fester Funktion. Ein zugehöriger Render-Cache 878 und ein zugehöriger Tiefen-Cache 879 sind in einigen Ausführungsformen ebenfalls verfügbar. Eine Pixeloperationskomponente 877 führt pixelbasierte Operationen an den Daten durch, obwohl in einigen Fällen Pixeloperationen, die mit 2D-Operationen assoziiert sind (z. B. Bitblockbildübertragungen mit Überblendung), durch die 2D-Engine 841 durchgeführt oder zum Zeitpunkt des Anzeigens durch die Anzeigesteuerung 843 unter Verwendung von Überlagerungsanzeigeebenen ersetzt werden. In einigen Ausführungsformen ist ein gemeinsamer L3-Cache 875 für alle Grafikkomponenten verfügbar, der die gemeinsame Nutzung von Daten ohne Verwendung des Hauptsystemspeichers ermöglicht.
  • In einigen Ausführungsformen umfasst die Grafikprozessor-Medienpipeline 830 eine Medien-Engine 837 und ein Video-Front-End 834. In einigen Ausführungsformen empfängt das Video-Front-End 834 Pipeline-Befehle vom Befehls-Streamer 803. In einigen Ausführungsformen umfasst die Medienpipeline 830 einen separaten Befehls-Streamer. In einigen Ausführungsformen verarbeitet das Video-Front-End 834 Medienbefehle vor dem Senden des Befehls an die Medien-Engine 837. In einigen Ausführungsformen umfasst die Medien-Engine 837 Thread-Erzeugungsfunktionalität zum Erzeugen von Threads zur Verteilung an Thread-Ausführungslogik 850 über den Thread-Verteiler 831.
  • In einige Ausführungsformen umfasst der Grafikprozessor 800 eine Anzeige-Engine 840. In einigen Ausführungsformen ist die Anzeige-Engine 840 außerhalb vom Prozessor 800 und über den Ring-Interconnect 802 oder einen anderen Interconnect-Bus oder eine andere Interconnect-Fabric mit dem Grafikprozessor gekoppelt. In einigen Ausführungsformen umfasst die Anzeige-Engine 840 eine 2D-Engine 841 und eine Anzeigesteuerung 843. In einigen Ausführungsformen enthält die Anzeige-Engine 840 Speziallogik, die imstande ist, unabhängig von der 3D-Pipeline zu funktionieren. In einigen Ausführungsformen ist die Anzeigesteuerung 843 mit einer Anzeigevorrichtung (nicht dargestellt) gekoppelt, wobei es sich um eine systemintegrierte Anzeigevorrichtung, wie in einem Laptop-Computer, oder eine externe Anzeigevorrichtung handeln kann, die über einen Anzeigevorrichtungsverbinder angeschlossen ist.
  • In einigen Ausführungsformen können die Geometrie-Pipeline 820 und die Medienpipeline 830 zum Durchführen von Operationen basierend auf mehreren Grafik- und Medienprogrammierschnittstellen konfiguriert sein, und sind nicht spezifisch für eine Anwendungsprogrammierschnittstelle (API). In einigen Ausführungsformen übersetzt Treibersoftware für den Grafikprozessor API-Aufrufe, die für eine bestimmte Grafik- oder Medienbibliothek spezifisch sind, in Befehle, die vom Grafikprozessor verarbeitet werden können. In einigen Ausführungsformen wird Unterstützung für die Grafik- und Rechen-APIs Open Graphics Library (OpenGL), Open Computing Language (OpenCL) und/oder Vulkan, alle von der Khronos Group, bereitgestellt. In einigen Ausführungsformen kann außerdem Unterstützung für die Direct3D-Bibliothen von der Microsoft Corporation bereitgestellt werden. In einigen Ausführungsformen kann eine Kombination dieser Bibliotheken unterstützt werden. Auch für die Open Source Computer Vision Library (OpenCV) kann Unterstützung bereitgestellt werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline würde ebenfalls unterstützt, wenn eine Abbildung von der Pipeline der zukünftigen API auf die Pipeline des Grafikprozessors durchgeführt werden kann.
  • Grafikpipeline-Programmierung
  • 9A ist ein Blockdiagramm, das ein Grafikprozessor-Befehlsformat 900 gemäß einigen Ausführungsformen veranschaulicht. 9B ist ein Blockdiagramm, das eine Grafikprozessor-Befehlssequenz 910 gemäß einer Ausführungsform veranschaulicht. Die Felder mit durchgezogenen Linien veranschaulichen die Komponenten, die im Allgemeinen in einem Grafikbefehl enthalten sind, während die gestrichelten Linien Komponenten umfassen, die optional sind oder die nur in einem Teilsatz der Grafikbefehle enthalten sind. Das beispielhafte Grafikprozessor-Befehlsformat 900 von 9A umfasst Datenfelder zum Identifizieren eines Client 902, einen Befehlsoperationscode (Opcode) 904, und Daten 906 für den Befehl. Ein Teil-Opcode 905 und eine Befehlsgröße 908 sind in einigen Befehlen ebenfalls enthalten.
  • In einigen Ausführungsformen spezifiziert der Client 902 die Client-Einheit der Grafikvorrichtung, welche die Befehlsdaten verarbeitet. In einigen Ausführungsformen prüft ein Grafikprozessor-Befehlsparser das Client-Feld jedes Befehls, um die Weiterverarbeitung des Befehls zu konditionieren und die Befehlsdaten zur entsprechenden Client-Einheit zu leiten. In einigen Ausführungsformen umfassen die Grafikprozessor-Client-Einheiten eine Speicherschnittstelleneinheit, eine Render-Einheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit. Jede Client-Einheit weist eine entsprechende Verarbeitungspipeline auf, welche die Befehle verarbeitet. Sobald der Befehl durch den Client-Einheit empfangen wird, liest die Client-Einheit den Opcode 904 und, falls vorhanden, den Teil-Opcode 905 aus, um die Operation zu bestimmen, die durchgeführt werden soll. Die Client-Einheit führt den Befehl unter Verwendung von Informationen im Datenfeld 906 aus. Für einige Befehle soll ein explizite Befehlsgröße 908 die Größe des Befehls spezifizieren. In einigen Ausführungsformen bestimmt der Befehlsparser die Größe wenigstens einiger der Befehle basierend auf dem Befehls-Opcode automatisch. In einigen Ausführungsformen werden Befehle über Vielfache eines Doppelworts ausgerichtet. Es können auch andere Befehlsformate verwendet werden.
  • Das Flussdiagramm in 9B veranschaulicht eine beispielhafte Grafikprozessor-Befehlssequenz 910. In einigen Ausführungsformen verwendet Software oder Firmware eines Datenverarbeitungssystems, das eine Ausführungsform eines Grafikprozessors darstellt, eine Version der dargestellten Befehlssequenz zum Vorbereiten, Ausführen und Beenden eines Satzes von Grafikoperationen. Eine Sample-Befehlssequenz ist dargestellt und wird lediglich als Beispiel beschrieben, da Ausführungsformen nicht auf diese spezifischen Befehle oder auf diese Befehlssequenz beschränkt sind.
  • Außerdem können die Befehle als ein Batch von Befehlen in einer Befehlssequenz erteilt werden, derart dass der Grafikprozessor die Sequenz von Befehlen wenigstens teilweise gleichzeitig verarbeitet.
  • In einigen Ausführungsformen kann die Grafikprozessor-Befehlssequenz 910 mit einem Pipeline-Leerungsbefehl 912 beginnen, um jegliche aktive Grafikpipeline zu veranlassen, die gegenwärtig anstehenden Befehle für die Pipeline auszuführen. In einigen Ausführungsformen arbeiten die 3D-Pipeline 922 und die Medienpipeline 924 nicht gleichzeitig. Die Pipeline-Leerung wird durchgeführt, um die aktive Grafikpipeline zum Ausführen jeglicher anstehenden Befehle zu veranlassen. In Reaktion auf eine Pipeline-Leerung setzt der Befehlsparser für den Grafikprozessor Befehlsverarbeitung aus, bis die aktiven Zeichen-Engines anstehende Operationen abschließen und die relevanten Lesecaches für ungültig erklärt werden. Optional können Daten im Rendercache, die als „dirty“ (ungültig) markiert sind, in den Speicher geleert werden. In einigen Ausführungsformen kann der Pipeline-Leerungsbefehl 912 zur Pipeline-Synchronisierung oder vor dem Versetzen des Grafikprozessors in einen Energiesparzustand verwendet werden.
  • In einigen Ausführungsformen wird ein Pipeline-Auswahlbefehl 913 verwendet, wenn eine Befehlssequenz vom Grafikprozessor verlangt, explizit zwischen Pipelines zu wechseln. In einigen Ausführungsformen wird ein Pipeline-Auswahlbefehl 913 nur einmal innerhalb eines Ausführungskontexts vor dem Erteilen von Pipeline-Befehlen benötigt, sofern der Kontext nicht ist, Befehle für beide Pipelines zu erteilen. In einigen Ausführungsformen ist ein Pipeline-Leerungsbefehl 912 unmittelbar vor einem Pipeline-Wechsel mittels des Pipeline-Auswahlbefehls 913 erforderlich.
  • In einigen Ausführungsformen konfiguriert ein Pipeline-Steuerungsbefehl 914 eine Grafikpipeline zum Betrieb und wird zum Programmieren der 3D-Pipeline 922 und der Medienpipeline 924 verwendet. In einigen Ausführungsformen konfiguriert der Pipeline-Steuerungsbefehl 914 den Pipeline-Zustand für die aktive Pipeline. In einer Ausführungsform wird der Pipeline-Steuerungsbefehl 914 zur Pipeline-Synchronisierung und zum Löschen von Daten aus einem oder mehreren Cachespeichern innerhalb der aktiven Pipeline vor dem Verarbeiten eines Batches von Befehlen verwendet.
  • In einigen Ausführungsformen werden Rückgabepufferzustandsbefehle 916 zum Konfigurieren eines Satzes von Rückgabepuffern für die jeweiligen Pipelines zum Schreiben von Daten konfiguriert. Einige Pipelineoperationen erfordern Zuweisung, Auswahl oder Konfiguration eines oder mehrerer Rückgabepuffer, in welche die Operationen während der Verarbeitung Zwischendaten schreiben. In einigen Ausführungsformen verwendet der Grafikprozessor außerdem einen oder mehrere Rückgabepuffer zum Speichern von Ausgabedaten und zum Durchführen von threadübergreifender Kommunikation. In einigen Ausführungsformen umfasst der Rückgabepufferzustand 916 ein Auswählen der Größe und der Anzahl von Rückgabepuffern zur Verwendung für einen Satz von Pipelineoperationen.
  • Die restlichen Befehle in der Befehlssequenz unterscheiden sich je nach der aktiven Pipeline für Operationen. Basierend auf einer Pipeline-Bestimmung 920 wird die Befehlssequenz für die 3D-Pipeline 922 beginnend mit dem 3D-Pipelinezustand 930 oder die Medienpipeline 924 beginnend mit dem Medienpipelinezustand 940 zugeschnitten.
  • Die Befehle zum Konfigurieren des 3D-Pipelinezustands 930 umfassen 3D-Zustandseinstellbefehle für Vertexpufferzustand, Vertex-Elementzustand, Konstantfarbzustand, Tiefenpufferzustand und andere Zustandsvariable, die vor dem Verarbeiten von 3D-Primitiven konfiguriert werden sollen. Die Werte dieser Befehle werden wenigstens zum Teil basierend auf der spezifischen 3D-API in Verwendung bestimmt. In einigen Ausführungsformen sind 3D-Pipelinezustands-930-Befehl auch zum selektiven Deaktivieren oder Umgehen von gewissen Pipeline-Elementen in der Lage, wenn diese Elemente nicht verwendet werden.
  • In einigen Ausführungsformen wird ein 3D-Primitiv-Befehl 932 zum Übermitteln von 3D-Primitiven verwendet, die von der 3D-Pipeline verarbeitet werden sollen. Befehle und zugehörige Parameter, die durch den 3D-Primitiv-Befehl 932 an den Grafikprozessor weitergegeben werden, werden zur Vertex-Abruffunktion in der Grafikpipeline weitergeleitet. Die Vertex-Abruffunktion verwendet die Daten des 3D-Primitiv-Befehls 932 zum Erzeugen von Vertex-Datenstrukturen. Die Vertex-Datenstrukturen werden in einem oder mehreren Rückgabepuffern gespeichert. In einigen Ausführungsformen wird der 3D-Primitiv-Befehl 932 zum Durchführen von Vertex-Operationen an 3D-Primitiven durch Vertex-Shader verwendet. Zum Verarbeiten von Vertex-Shadern verteilt die 3D-Pipleine 922 Shader-Ausführungsthreads an die Grafikprozessor-Ausführungseinheiten.
  • In einigen Ausführungsformen wird die 3D-Pipeline 922 durch einen Ausführen-934-Befehl oder ein Ereignis ausgelöst. In einigen Ausführungsformen löst eine Registerschreiboperation Befehlsausführung aus. In einigen Ausführungsformen wird Ausführung durch einen „Los“- oder „Start“-Befehl in der Befehlssequenz ausgelöst. In einer Ausführungsform wird Befehlsausführung unter Verwendung eines Pipeline-Synchronisierungsbefehles zum Entleeren der Befehlssequenz durch die Grafikpipeline ausgelöst. Die 3D-Pipeline führt Geometrieverarbeitung für die 3D-Primitive durch. Sobald die Operationen abgeschlossen sind, werden die resultierenden geometrischen Objekte gerastert, und die Pixel-Engine färbt die resultierenden Pixel. Zusätzliche Befehle zum Steuern von Pixelschattierung und Pixel-Back-End-Operationen können für diese Operationen ebenfalls umfasst sein.
  • In einigen Ausführungsformen folgt die Grafikprozessor-Befehlssequenz 910 beim Durchführen von Medienoperationen dem Pfad der Medienpipeline 924. Im Allgemeinen hängt die spezifische Verwendung und Art der Programmierung für die Medienpipeline 924 von den Medien- oder Rechenoperationen ab, die durchgeführt werden sollen. Spezifische Mediendecodieroperationen können während der Mediendecodierung an die Medienpipeline ausgelagert werden. In einigen Ausführungsformen kann die Medienpipeline auch umgangen werden, und Mediendecodierung kann ganz oder teilweise unter Verwendung von Ressourcen durchgeführt werden, die durch einen oder mehrere Universalverarbeitungskerne bereitgestellt werden. In einer Ausführungsform umfasst die Medienpipeline außerdem Elemente für Operationen der Universal-Grafikprozessoreinheit (GPGPU), wobei der Grafikprozessor zum Durchführen von SIMD-Vektoroperationen unter Verwendung von Rechen-Shader-Programmen eingesetzt wird, die nicht explizit mit dem Rendering von Grafikprimitiven in Beziehung stehen.
  • In einigen Ausführungsformen ist die Medienpipeline 924 in ähnlicher Weise wie die 3D-Pipeline 922 konfiguriert. Ein Satz von Befehlen zum Konfigurieren des Medienpipelinezustands 940 wird verteilt oder in einer Befehlswarteschlange vor den Medienobjektbefehlen 942 angeordnet. In einigen Ausführungsformen umfassen Befehle für den Medienpipelinezustand 940 Daten zum Konfigurieren der Medienpipelineelemente, die zum Verarbeiten der Medienobjekte verwendet werden. Dies umfasst Daten zum Konfigurieren der Videodecodier- und Videocodierlogik innerhalb der Medienpipeline, wie beispielsweise das Codier- oder Decodierformat. In einigen Ausführungsformen unterstützen Befehle für den Medienpipelinezustand 940 auch die Verwendung eines oder mehrerer Zeiger auf „indirekte“ Zustandselemente, die einen Batch von Zustandseinstellungen enthalten.
  • In einigen Ausführungsformen stellen Medienobjektbefehle 942 Zeiger auf Medienobjekte zur Verarbeitung durch die Medienpipeline bereit. Die Medienobjekte umfassen Speicherpuffer, die Videodaten enthalten, die verarbeitet werden sollen. In einigen Ausführungsformen müssen vor dem Erteilen eines Medienobjektbefehls 942 alle Medienpipelinezustände gültig sein. Sobald der Pipelinezustand konfiguriert ist und die Medienobjektbefehle 942 in die Warteschlange eingereiht sind, wird die Medienpipeline 924 durch einen Ausführen-Befehl 944 oder ein äquivalentes Auslöseereignis (z. B. Registerschreiboperation) ausgelöst. Eine Ausgabe aus der Medienpipeline 924 kann dann durch Operationen, die durch die 3D-Pipeline 922 oder die Medienpipeline 924 bereitgestellt werden, nachbearbeitet werden. In einigen Ausführungsformen werden GPGPU-Operationen in ähnlicher Weise wie Medienoperationen konfiguriert und ausgeführt.
  • Grafiksoftwarearchitektur
  • 10 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem 1000 gemäß einigen Ausführungsformen. In einigen Ausführungsformen umfasst die Softwarearchitektur eine 3D-Grafikanwendung 1010, ein Betriebssystem 1020 und mindestens einen Prozessor 1030. In einigen Ausführungsformen umfasst der Prozessor 1030 einen Grafikprozessor 1032 und einen oder mehrere Universalprozessorkern(e) 1034. Die Grafikanwendung 1010 und das Betriebssystem 1020 werden jeweils im Systemspeicher 1050 des Datenverarbeitungssystems ausgeführt.
  • In einigen Ausführungsformen enthält die 3DGrafikanwendung 1010 ein oder mehrere Shader-Programme mit Shader-Anweisungen 1012. Die Shader-Sprachanweisungen können in einer höheren Shader-Sprache, wie beispielsweise der High-Level Shader Language (HLSL) von Direct3D, der OpenGL Shader Language (GLSL) usw. sein. Die Anwendung kann außerdem ausführbare Anweisungen 1014 in einer Maschinensprache umfassen, die zur Ausführung durch den Universalprozessorkern 1034 geeignet sind. Die Anwendung umfasst auch Grafikobjekte 1016, die durch Vertex-Daten definiert werden.
  • In einigen Ausführungsformen ist das Betriebssystem 1020 ein Microsoft® Windows® Betriebssystem von der Microsoft Corporation, ein proprietäres UNIX-ähnliches Betriebssystem oder ein UNIX-ähnliches Open-Source-Betriebssystem, das eine Variante des Linux-Kernels verwendet. Das Betriebssystem 1020 kann eine Grafik-API 1022, wie beispielsweise die Direct3D-API, die OpenGL-API oder die Vulkan-API unterstützen. Wenn die Direct3D-API in Verwendung ist, verwendet das Betriebssystem 1020 einen Front-End-Shader-Compiler 1024 zum Kompilieren jeglicher Shader-Anweisungen 1012 in HLSL in eine niedrigere Shader-Sprache. Die Kompilierung kann eine Just-In-Time-Kompilierung (JIT) sein, oder die Anwendung kann eine Shader-Vorkompilierung durchführen. In einigen Ausführungsformen werden Shader höherer Ebene während der Kompilierung der 3D-Grafikanwendung 1010 in Shader niedrigerer Ebene kompiliert. In einigen Ausführungsformen werden die Shader-Anweisungen 1012 in einer Zwischenform, wie einer Version der Standard Portable Intermediate Representation (SPIR), das von der Vulkan-API verwendet wird, bereitgestellt.
  • In einigen Ausführungsformen enthält ein Benutzermodus-Grafiktreiber 1026 einen Back-End-Shader-Compiler 1027 zum Umwandeln der Shader-Anweisungen 1012 in eine hardwarespezifische Darstellung. Wenn die OpenGL-API in Verwendung ist, werden die Shader-Anweisungen 1012 in der GLSL-Hochsprache an einen Benutzermodus-Grafiktreiber 1026 zur Kompilierung weitergegeben. In einigen Ausführungsformen verwendet der Benutzermodus-Grafiktreiber 1026 Betriebssystem-Kernelmodusfunktionen 1028 zum Kommunizieren mit einem Kernelmodus-Grafiktreiber 1029. In einigen Ausführungsformen kommuniziert der Kernelmodus-Grafiktreiber 1029 mit dem Grafikprozessor 1032 zum Verteilen von Befehlen und Anweisungen.
  • IP-Kern-Implementierungen
  • Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch repräsentativen Code implementiert sein, der auf einem maschinenlesbaren Medium gespeichert ist und Logik innerhalb einer integrierten Schaltung, wie einem Prozessor, darstellt und/oder definiert. Zum Beispiel kann das maschinenlesbare Medium Anweisungen umfassen, die diverse Logik innerhalb des Prozessor darstellen. Bei Auslesen durch eine Maschine können die die Anweisungen die Maschine zum Erzeugen von Logik zum Durchführen der hierin beschriebenen Techniken veranlassen. Solche Darstellungen, die als „IP-Kerne“ bekannt sind, sind wiederverwendbare Einheiten von Logik für eine integrierte Schaltung, die auf einem dinglichen maschinenlesbaren Medium als Hardwaremodell gespeichert sein kann, das die Struktur der integrierten Schaltung beschreibt. Das Hardwaremodell kann an verschiedene Kunden oder Herstellungseinrichtungen geliefert werden, die das Hardwaremodell auf Fertigungsmaschinen laden, welche die integrierte Schaltung herstellen. Die integrierte Schaltung kann derart gefertigt werden, dass die Schaltung Operationen in Verbindung mit jeder der hierin beschriebenen Ausführungsformen durchführt.
  • 11A ist ein Blockdiagramm, das ein IP-Kernentwicklungssystem 1100 veranschaulicht, das zum Herstellen einer integrierten Schaltung zum Durchführen von Operationen gemäß einer Ausführungsform verwendet werden kann. Das IP-Kernentwicklungssystem 1100 kann verwendet werden, um wiederverwendbare Modulentwürfe zu erzeugen, die in einen größeren Entwurf integriert oder zum Bilden einer ganzen integrierten Schaltung (z. B. einer integrierten SoC-Schaltung) verwendet werden können. Eine Entwurfseinrichtung 1130 kann Softwaresimulation 1110 eines IP-Kern-Entwurfs in einer höheren Programmiersprache (z. B. C/C++) erzeugen. Die Softwaresimulation 1110 kann zum Entwerfen, Testen und Verifizieren des Verhaltens des IP-Kerns unter Verwendung eines Simulationsmodells 1112 verwendet werden. Das Simulationsmodell 1112 kann Funktions-, Verhaltens- und/oder Zeitsimulationen umfassen. Ein Entwurf 1115 einer Registertransferebene (RTL - Register Transfer Level) 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 von digitalen Signalen zwischen Hardwareregistern modelliert, welche die zugehörige Logik umfassen, die unter Verwendung der modellierten digitalen Signale ausgeführt wird. Zusätzlich zu einem RTL-Entwurf 1115 können auf Logikebene oder Transistorebene auch Entwürfe niedrigerer Ebenen erstellt, entworfen oder synthetisiert werden. Demnach können die spezifischen Details des anfänglichen Entwurfs oder der anfänglichen Simulation variieren.
  • Der RTL-Entwurf 1115 oder ein Äquivalent kann ferner durch die Entwurfseinrichtung zu einem Hardwaremodell 1120 synthetisiert werden, das in einer Hardware-Beschreibungssprache (HDL - Hardware Description Language) oder einer anderen Darstellung von physikalischen Entwurfsdaten sein kann. Die HDL kann weitersimuliert oder -getestet werden, um den IP-Kern-Entwurf zu verifizieren. Der IP-Kern-Entwurf kann unter Verwendung eines nichtflüchtigen Speichers 1140 (z. B. einer Festplatte, eines Flash-Speichers oder eines beliebigen nichtflüchtigen Speichermediums) zur Lieferung an eine Fertigungseinrichtung 1165 eines Dritten gespeichert werden. Alternativ kann der IP-Kern-Entwurf über eine drahtgebundene Verbindung 1150 oder eine drahtlose Verbindung 1160 gesendet werden (z. B. über das Internet). Die Fertigungseinrichtung 1165 kann dann eine integrierte Schaltung fertigen, die wenigstens zum Teil auf dem IP-Kern-Entwurf basiert. Die gefertigte integrierte Schaltung kann zum Durchführen von Operationen gemäß mindestens einer hierin beschriebenen Ausführungsform konfiguriert werden.
  • 11B veranschaulicht eine Seitenansicht einer IC-Package-Anordnung 1170 gemäß einigen hierin beschriebenen Ausführungsformen im Querschnitt. Die IC-Package-Anordnung 1170 veranschaulicht eine Implementierung eines oder mehrerer Prozessoren oder einer oder mehrerer Beschleunigervorrichtungen, wie hierin beschrieben. Die Package-Anordnung 1170 umfasst mehrere Einheiten von Hardwarelogik 1172, 1174, die mit einem Substrat 1180 verbunden ist. Die Logik 1172, 1174 kann wenigstens teilweise in konfigurierbarer Logik oder in Logikhardware mit fester Funktionalität implementiert sein, und sie kann einen oder mehrere Teile beliebiger der Prozessorkern(e), Grafikprozessor(en) oder anderer Beschleunigervorrichtungen umfassen, die hierin beschrieben werden. Jede Logikeinheit 1172, 1174 kann innerhalb eines Halbleiter-Dies implementiert und über eine Interconnect-Struktur 1173 mit dem Substrat 1180 gekoppelt sein. Die Interconnect-Struktur 1173 kann zum Leiten von elektrischen Signalen zwischen den Logikeinheiten 1172, 1174 und dem Substrat 1180 konfiguriert sein und solche Interconnects wie Bondhügel oder Säulen umfassen, ohne darauf beschränkt zu sein. In einigen Ausführungsformen kann die Interconnect-Struktur 1173 so konfiguriert sein, dass sie elektrische Signale, beispielsweise Eingabe-/Ausgabe-(E-/A-)Signale, und/oder Leistungs- oder Massesignale leitet, die mit dem Betrieb der Logik 1172, 1174 assoziiert sind. In einigen Ausführungsformen ist das Substrat 1180 ein epoxidbasiertes Laminatsubstrat. Das Substrat 1180 kann in anderen Ausführungsformen andere geeignete Arten von Substraten umfassen. Die Package-Anordnung 1170 kann über einen Package-Interconnect 1183 mit anderen elektrischen Vorrichtung verbunden sein. Der Package-Interconnect 1183 kann mit einer Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale zu anderen Vorrichtungen, wie beispielsweise eine Hauptplatine, einen anderen Chipsatz oder ein Mehrchip-Modul, zu leiten.
  • In einigen Ausführungsformen können die Logikeinheiten 1172, 1174 mit einer Brücke 1182, die zum Leiten von elektrischen Signalen zwischen den Logikeinheiten 1172, 1174 konfiguriert ist, elektrisch gekoppelt sein. Die Brücke 1182 kann eine dicht gepackte Interconnect-Struktur sein, die eine Route für elektrische Signale bereitstellt. Die Brücke 1182 kann ein Brückensubstrat umfassen, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Elektrische Routing-Merkmale können auf dem Brückensubstrat ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen den Logikeinheiten 1172, 1174 bereitzustellen.
  • Obwohl zwei Logikeinheiten 1172, 1174 und eine Brücke 1182 veranschaulicht sind, können Ausführungsformen, die hierin beschrieben werden, mehr oder weniger Logikeinheiten auf einem oder mehreren Dies umfassen. Der eine oder die mehreren Dies können durch null oder mehr Brücken verbunden sein, da die Brücke 1182 entfernt werden kann, wenn die Logik auf einem einzigen Die enthalten ist. Alternativ können mehrere Dies oder Logikeinheiten durch eine oder mehrere Brücken verbunden sein. Zusätzlich können mehrere Logikeinheiten, Dies und Brücken in anderen möglichen Konfigurationen, einschließlich dreidimensionaler Konfigurationen, miteinander verbunden sein.
  • 11C veranschaulicht eine Package-Anordnung 1190 die mehrere Einheiten von Hardwarelogik-Chiplets umfasst, die mit einem Substrat 1180 (z. B. einem Basis-Die) verbunden sind. Eine Grafikverarbeitungseinheit, ein Parallelprozessor und/oder ein Rechenbeschleuniger, wie hierin beschrieben, können aus diversen Silizium-Chiplets zusammengesetzt sein, die getrennt hergestellt werden. In diesem Zusammenhang ist ein Chiplet eine wenigstens teilweise gehäuste integrierte Schaltung, die verschiedene Logikeinheiten umfasst, die mit anderen Chiplets zu einem größeren Package zusammengebaut werden können. Ein diverser Satz von Chiplets mit unterschiedlicher IP-Kern-Logik kann zu einer einzigen Vorrichtung zusammengebaut werden. Außerdem können die Chiplets unter Verwendung einer aktiven Interposer-Technologie in einen Basis-Die oder ein Basis-Chiplet integriert werden. Die hierin beschriebenen Konzepte ermöglichen die Zwischenverbindung und Kommunikation zwischen verschiedenen Formen von IPs innerhalb der GPU. IP-Kerne können unter Verwendung verschiedener Prozesstechnologien hergestellt und während der Herstellung zusammengesetzt werden, was die Komplexität des Zusammenführens mehrerer IPs, insbesondere auf einem großen SoC mit mehreren IP-Varianten, für den gleichen Herstellungsprozess vermeidet. Das Ermöglichen der Verwendung mehrerer Prozesstechnologien verkürzt die Vorlaufzeit und stellt eine kostengünstige Möglichkeit zum Erzeugen mehrerer Produkt-SKUs bereit. Außerdem sind die untergliederten IPs empfänglicher für unabhängiges Power-Gating, und Komponenten, die bei einer gegebenen Workload nicht in Verwendung sind, können abgeschaltet werden, was den Gesamtleistungsverbrauch reduziert.
  • Die Hardwarelogik-Chiplets können Spezial-Hardwarelogik-Chiplets 1172, Logik- oder E-/A-Chiplets 1174, und/oder Speicher-Chiplets 1175 sein. Die Hardwarelogik-Chiplets 1172 und die Logik- oder E-/A-Chiplets 1174 können wenigstens teilweise in konfigurierbarer Logik oder in Logikhardware mit fester Funktionalität implementiert sein, und sie können einen oder mehrere Teile beliebiger der Prozessorkern(e), Grafikprozessor(en), Parallelprozessoren oder anderer Beschleunigervorrichtungen umfassen, die hierin beschrieben werden. Die Speicher-Chiplets 1175 können DRAM-Speicher (z. B. GDDR, HBM) Cachespeicher (SRAM) sein.
  • Jedes Chiplet kann als separater Halbleiter-Die gefertigt und über eine Interconnect-Struktur 1173 mit dem Substrat 1180 gekoppelt sein. Die Interconnect-Struktur 1173 kann zum Leiten von elektrischen Signalen zwischen den verschiedenen Chiplets und Logik innerhalb des Substrats 1180 konfiguriert sein. Die Interconnect-Struktur 1173 kann solche Interconnects wie Bondhügel oder Säulen umfassen, ohne darauf beschränkt zu sein. In einigen Ausführungsformen kann die Interconnect-Struktur 1173 so konfiguriert sein, dass sie elektrische Signale, beispielsweise Eingabe-/Ausgabe-(E-/A-)Signale, und/oder Leistungs- oder Massesignale leitet, die mit dem Betrieb der Logik-, E-/A- und Speicher-Chiplets assoziiert sind.
  • In einigen Ausführungsformen ist das Substrat 1180 ein epoxidbasiertes Laminatsubstrat. Das Substrat 1180 kann in anderen Ausführungsformen andere geeignete Arten von Substraten umfassen. Die Package-Anordnung 1190 kann über einen Package-Interconnect 1183 mit anderen elektrischen Vorrichtung verbunden sein. Der Package-Interconnect 1183 kann mit einer Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale zu anderen Vorrichtungen, wie beispielsweise eine Hauptplatine, einen anderen Chipsatz oder ein Mehrchip-Modul, zu leiten.
  • In einigen Ausführungsformen können ein Logik- oder E-/A-Chiplet 1174 und ein Speicher-Chiplet 1175 über eine Brücke 1187, die zum Leiten von elektrischen Signalen zwischen dem Logik- oder E-/A-Chiplet 1174 und einem Speicher-Chiplet 1175 konfiguriert ist, elektrisch gekoppelt sein. Die Brücke 1187 kann eine dicht gepackte Interconnect-Struktur sein, die eine Route für elektrische Signale bereitstellt. Die Brücke 1187 kann ein Brückensubstrat umfassen, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Elektrische Routing-Merkmale können auf dem Brückensubstrat ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen dem Logik- oder E-/A-Chiplet 1174 und einem Speicher-Chiplet 1175 bereitzustellen. Die Brücke 1187 kann auch als Siliziumbrücke oder Interconnect-Brücke bezeichnet werden. Zum Beispiel ist die Brücke 1187 in einigen Ausführungsformen eine eingebettete Mehrfach-Die-Interconnect-Brücke (EMIB - Embedded Multi-die Interconnect Bridge). In einigen Ausführungsformen kann die Brücke 1187 einfach eine direkte Verbindung von einem Chiplet zu einem anderen Chiplet sein.
  • Das Substrat 1180 kann Hardwarekomponenten für E/A 1191, Cachespeicher 1192 und andere Hardwarelogik 1193 umfassen. Eine Fabric 1185 kann in das Substrat 1180 eingebettet sein, um Kommunikation zwischen den verschiedenen Logik-Chiplets und der Logik 1191, 1193 innerhalb des Substrats 1180 zu ermöglichen. In einer Ausführungsform können die E/A 1191, die Fabric 1185, der Cache, die Brücke und andere Hardwarelogik 1193 in einen Basis-Die integriert sein, der auf die Oberseite des Substrats 1180 geschichtet ist.
  • In verschiedenen Ausführungsformen kann eine Package-Anordnung 1190 eine kleinere oder größere Anzahl von Komponenten und Chiplets umfasst, die durch eine Fabric 1185 oder eine oder mehrere brücken 1187 miteinander verbunden sind. Die Chiplets innerhalb der Package-Anordnung 1190 können in einer 3D- oder 2,5D-Anordnung angeordnet sein. Im Allgemeinen können Brückenstrukturen 1187 verwendet werden, um einen Punkt-zu-Punkt-Interconnect zum Beispiel zwischen Logik- oder E-/A-Chiplets und Speicher-Chiplets zu ermöglichen. Die Fabric 1185 kann verwendet werden, um mehrere Logik- und/oder E-/A-Chiplets (z. B. die Chiplets 1172, 1174, 1191, 1193) mit anderen Logik- und/oder E-/A-Chiplets zu verbinden. In einer Ausführungsform kann der Cachespeicher 1192 innerhalb des Substrats als globaler Cache für die Package-Anordnung 1190, Teil eines verteilten globalen Caches oder dedizierter Cache für die Fabric 1185 dienen.
  • 11D veranschaulicht eine Package-Anordnung 1194 mit austauschbaren Chiplets 1195 gemäß einer Ausführungsform. Die austauschbaren Chiplets 1195 können in standardisierte Einbauplätze auf einem oder mehreren Basis-Chiplets, 1196, 1198 eingebaut sein. Die Basis-Chiplets 1196, 1198 können über einen Brücken-Interconnect 1197 gekoppelt sein, der anderen hierin beschriebenen Brücken-Interconnects ähneln und zum Beispiel eine EMIB sein kann. Auch Speicher-Chiplets können mit Logik- oder E-/A-Chiplets über einen Brücken-Interconnect verbunden sein. E-/A- und Logik-Chiplets können über eine Interconnect-Fabric kommunizieren. Die Basis-Chiplets können jeweils einen oder mehrere Einbauplätze in einem standardisierten Format für eine Logik und/oder E/A oder einen Speicher/Cache unterstützen.
  • In einer Ausführungsform können SRAM- und Leistungsabgabeschaltungen in eines oder mehrere der Basis-Chiplets 1196, 1198 gefertigt sein, die unter Verwendung einer anderen Prozesstechnologie in Bezug auf die austauschbaren Chiplets 1195, die auf der Oberseite der Basis-Chiplets gestapelt sind, gefertigt sein können. Zum Beispiel können die Basis-Chiplets 1196, 1198 unter Verwendung einer umfangreicheren Prozesstechnologie gefertigt sein, während die austauschbaren Chiplets unter Verwendung einer weniger umfangreichen Prozesstechnologie hergestellt sein können. Eines oder mehrere der austauschbaren Chiplets 1195 können Speicher-Chiplets (z. B. DRAM) sein. Basierend auf der Leistung und/oder der Performance, die für das Produkt angestrebt werden, das die Package-Anordnung 1194 verwendet, können verschiedene Speicherdichten für die Package-Anordnung 1194 ausgewählt werden. Außerdem können Logik-Chiplets mit unterschiedlicher Anzahl von Typen von Funktionseinheiten zum Zeitpunkt der Montage basierend auf der für das Produkt angestrebten Leistung und/oder Performance ausgewählt werden. Zudem können Chiplets, die IP-Logik-Kerne unterschiedlichen Typs enthalten, in die Einbauplätze der austauchbaren Chiplets eingefügt werden, was hybride Prozessordesigns ermöglicht, die IP-Blöcke verschiedener Technologien mischen und zusammenpassen können.
  • Beispielhafte integrierte Systemchip-Schaltung
  • 12 und 13 veranschaulichen beispielhafte integrierte Schaltungen und zugehörige Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt sein können, gemäß verschiedenen hierin beschriebenen Ausführungsformen. Zusätzlich zu dem, was veranschaulicht ist, können andere Logik und Schaltungen enthalten sein, darunter zusätzliche Grafikprozessoren/-kerne, Peripherieschnittstellensteuerungen oder Universalprozessorkerne.
  • 12 ist ein Blockdiagramm, das eine beispielhafte integrierte Systemchip-Schaltung 1200, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt sein kann, gemäß einer Ausführungsform veranschaulicht. Die beispielhafte integrierte Schaltung 1200 umfasst einen oder mehrere Anwendungsprozessor(en) 1205 (z. B. CPUs) und mindestens einen Grafikprozessor 1210 und kann außerdem einen Bildprozessor 1215 und/oder einen Videoprozessor 1220 umfassen, von welchen ein beliebiger ein modularer IP-Kern von derselben oder mehreren verschiedenen Entwurfseinrichtungen sein kann. Die integrierte Schaltung 1200 umfasst eine Peripherie- oder Buslogik, die eine USB-Steuerung 1225, eine UART-Steuerung 1230, eine SPI/SDIO-Steuerung 1235 und eine I2S/I2C-Steuerung 1240 umfasst. Außerdem kann die integrierte Schaltung eine Anzeigevorrichtung 1245, die mit einer oder mehreren von einer High-Definition-Multimedia-Schnittstelle-(HDMI-)Steuerung 1250 und einer Mobile Industry Processor Interface-(MIPI-)Anzeigeschnittstelle 1255. Speicherung kann durch ein Flash-Speicher-Subsystem 1260 vorgesehen sein, das einen Flash-Speicher und eine Flash-Speichersteuerung umfasst. Eine Speicherschnittstelle kann durch eine Speichersteuerung 1265 für Zugriff auf SDRAM- oder SRAM-Speichervorrichtung vorgesehen sein. Einige integrierte Schaltungen umfassen zusätzlich eine eingebettete Sicherheits-Engine 1270.
  • 13 und 14 sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung innerhalb eines SoCs gemäß hierin beschriebenen Ausführungsformen veranschaulichen. 13 veranschaulicht einen beispielhaften Grafikprozessor 1310 einer integrierten Systemchip-Schaltung, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt sein kann, gemäß einer Ausführungsform. 13 veranschaulicht einen weiteren beispielhaften Grafikprozessor 1340 einer integrierten Systemchip-Schaltung, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt sein kann, gemäß einer Ausführungsform. Der Grafikprozessor 1310 von 13 ist ein Beispiel eines Grafikprozessorkerns mit geringen Leistungsverbrauch. Der Grafikprozessor 1340 von 14 ist ein Beispiel eines Grafikprozessorkerns höherer Leistungsfähigkeit. Jeder der Grafikprozessoren 1310, 1340 kann eine Variante des Grafikprozessors 1210 von 12 sein.
  • Wie in 13 dargestellt, umfasst der Grafikprozessor 1310 einen Vertex-Prozessor 1305 und einen oder mehrere Fragment-Prozessor(en) 1315A-1315N (z. B. 1315A, 1315B, 1315C, 1315D bis 1315N-1 und 1315N). Der Grafikprozessor 1310 kann verschiedene Shader-Programme über separate Logik ausführen, derart dass der Vertex-Prozessor 1305 zum Ausführen von Operationen für Vertex-Shader-Programme optimiert ist, während der eine oder die mehreren Fragment-Prozessor(en) 1315A-1315N Fragment-(z. B. Pixel-)Schattierungsoperationen für Fragment- oder Pixel-Shader-Programme ausführen. Der Vertex-Prozessor 1305 führt die Vertex-Verarbeitungsstufe der 3D-Pipeline durch und erzeugt Primitiv- und Vertex-Daten. Die Fragment-Prozessoren 1315A-1315N verwenden die vom Vertex-Prozessor 1305 erzeugten Primitiv- und Vertex-Daten 1305 zum Erzeugen eines Framepuffers, der auf einer Anzeigevorrichtung angezeigt wird. In einer Ausführungsform sind die Fragment-Prozessor(en) 1315A-1315N zum Ausführen von Fragment-Shader-Programmen gemäß OpenGL-API optimiert, die zum Durchführen ähnlicher Operationen wie ein Pixel-Shader-Programm gemäß Direct 3D-API verwendet werden können.
  • Der Grafikprozessor 1310 umfasst außerdem eine oder mehrere Speicherverwaltungseinheiten (MMU - Memory Management Unit) 1320A-1320B, einen oder mehrere Cache(s) 1325A-1325B und einen oder mehrere Schaltungs-Interconnects 1330A-1330B. Die eine oder die mehreren MMU(s) 1320A-1320B ermöglichen ein Abbilden von virtuellen auf physikalische Adressen für den Vertex-Prozessor 1310 sowie den Vertex-Prozessor 1305 und/oder die Fragment-Prozessor(en) 1315A-1315N, die auf in Speicher gespeicherte Vertex- und/oder -Bild-/-Texturdaten zusätzlich zu Vertex- und/oder Bild-/Texturdaten verweisen können, die in dem einen oder den mehreren Cache(s) 1325A-1325B gespeichert sind. In einer Ausführungsform können die eine oder die mehreren MMU(s) 1320A-1320B mit anderen MMUs innerhalb des Systems, einschließlich einer oder mehrerer MMUs, die mit dem einen oder den mehreren Anwendungsprozessor(en) 1205, dem Bildprozessor 1215 und/oder dem Videoprozessor 1220 von 12 assoziiert sind, synchronisiert sein, derart dass jeder Prozessor 1205-1220 an einem gemeinsamen oder vereinheitlichten virtuellen Speichersystem teilhaben kann. Gemäß einigen Ausführungsformen ermöglichen der oder die mehreren Schaltungs-Interconnect(s) 1330A-1330B dem Grafikprozessor 1310, eine Schnittstellenverbindung mit anderen IP-Kernen innerhalb des SoCs entweder über einen internen Bus des SoCs oder über eine direkte Verbindung herzustellen.
  • Wie in 13 dargestellt, umfasst der Grafikprozessor 1340 die eine oder die mehreren MMU(s) 1320A-1320B, den einen oder die mehreren Cache(s) 1325A-1325B und den einen oder die mehreren Schaltungs-Interconnect(s) 1330A-1330B des Grafikprozessors 1310 von 13. Der Grafikprozessor 1340 umfasst einen oder mehrere Shader-Kern(e) 1355A-1355N (z. B. 1455A, 1355B, 1355C, 1355D, 1355E, 1355F bis 1355N-1 und 1355N), die eine vereinheitlichte Shader-Kern-Architektur bereitstellen, in welcher ein einziger Kern oder Kerntyp alle Arten von programmierbarem Shader-Code, einschließlich eines Shader-Programmcodes zum Implementieren von Vertex-Shadern, Fragment-Shadern und/oder Rechen-Shadern, ausführen kann. Die exakte Anzahl von vorhandenen Shader-Kernen kann zwischen Ausführungsformen und Implementierungen variieren. Außerdem umfasst der Grafikprozessor 1340 einen Zwischenkern-Aufgabeverwalter 1345, der als Thread-Verteiler zum Verteilen von Ausführungsthreads an einen oder mehrere Shader-Kerne 1355A-1355N fungiert, und eine Kachelungseinheit 1358 zum Beschleunigen von Kachelungsoperationen für kachelbasiertes Rendering, wobei Rendering-Operationen für eine Szene in Bildraum unterteilt werden, um zum Beispiel lokale räumliche Kohärenz innerhalb einer Szene zu nutzen oder Verwendung von internen Caches zu optimieren.
  • STRAHLVERFOLGUNG MIT MASCHINELLEM LERNEN
  • Wie bereits erwähnt, ist Strahlverfolgung ist eine Grafikverarbeitungstechnik, bei welcher Lichttransport durch physikalisch gestütztes Rendering simuliert wird. Eine der wichtigsten Operationen bei der Strahlverfolgung ist das Verarbeiten einer Sichtbarkeitsabfrage, die Traversierungs- und Intersektionstests von Knoten in einer Begrenzungsvolumenhierarchie (BVH) erfordert.
  • Strahl- und pfadverfolgungsbasierte Techniken berechnen Bilder durch Verfolgen von Strahlen und Pfaden durch jedes Pixel und Verwenden von Zufallssampling, um optimierte Effekte wie Schatten, Glanz, indirekte Beleuchtung usw. zu berechnen. Das Verwenden nur weniger Samples ist schnell, produziert aber rauschbehaftete Bilder, während ein Verwenden vieler Samples Bilder hoher Qualität produziert, aber kostspielig ist.
  • Maschinelles Lernen umfasst alle Schaltungsanordnungen, Programmcodes oder Kombinationen davon, die zum progressiven Verbessern der Performance einer spezifizierten Aufgabe oder Rendern genauerer Vorhersagen oder Entscheidungen imstande sind. Einige Engines für maschinelles Lernen können diese Aufgaben durchführen oder diese Vorhersagen/Entscheidungen rendern, ohne explizit zum Durchführen der Aufgaben oder Rendern der Vorhersagen/Entscheidungen programmiert zu sein. Es gibt eine Vielzahl von Techniken maschinellen Lernens, die überwachtes und halbüberwachtes Lernen, unüberwachtes Lernen und bestärkendes Lernen umfassen (ohne darauf beschränkt zu sein).
  • In den letzten Jahren kam eine bahnbrechende Lösung für Strahl-/Pfadverfolgung zur Echtzeitverwendung in der Form von „Entrauschung“ auf - der Prozess des Verwendens von Bildverarbeitungstechniken zum Erzeugen von hochwertigen gefilterten/entrauschten Bildern aus rauschbehafteten Eingaben geringer Sampleanzahl. Die wirksamsten Entrauschungstechniken beruhen auf Techniken maschinellen Lernens, wobei eine Engine für maschinelles Lernen lernt, wie ein rauschbehaftetes Bild aussehen würde, wenn es mit mehr Samples berechnet worden wäre. In einer spezifischen Implementierung wird das maschinelle Lernen durch ein neuronales Faltungsnetzwerk (CNN - Convolutional Neural Network) durchgeführt; die zugrundeliegenden Prinzipien sind jedoch nicht auf eine CNN-Implementierung beschränkt. In solch einer Implementierung werden Trainingsdaten mit Eingaben geringer Sampleanzahl und Ground-Truth erzeugt. Das CNN wird trainiert, um das konvergierte Pixel aus einer Nachbarschaft von rauschbehafteten Pixeln um das betreffende Pixel vorherzusagen.
  • Obwohl sie nicht perfekt ist, hat sich die Al-basierte Entrauschungstechnik als überraschend wirksam erwiesen. Dies jedoch mit der Einschränkung, dass gute Trainingsdaten erforderlich sind, da das Netzwerk sonst die falschen Ergebnisse vorhersagen kann. Wenn zum Beispiel ein Animationsfilmstudio ein Entrauschungs-CNN auf alte Filme mit Szenen auf Land trainierte und dann versucht, das trainierte CNN zum Entrauschen von Frames aus einem neuen Film zu verwenden, der auf dem Wasser spielt, dann wird die Entrauschungsoperation nicht optimal funktionieren.
  • Um dieses Problem zu lösen, können Lerndaten während des Renderings dynamisch gesammelt werden, und eine Engine für maschinelles Lernen, wie beispielsweise ein CNN, kann basierend auf den Daten, auf welchen es gegenwärtig ausgeführt wird, kontinuierlich trainiert werden, wodurch die Engine für maschinelles Lernen für die vorliegende Aufgabe kontinuierlich verbessert wird. Daher kann eine Trainingsphase noch vor der Laufzeit durchgeführt werden, aber fortgesetzt werden, um die Gewichte des maschinellen Lernens während der Laufzeit bedarfsweise anzupassen. Dadurch werden die hohen Kosten des Berechnens der Referenzdaten, die für das Training benötigt werden, vermieden, indem die Erzeugung von Lerndaten jeden Frame oder alle N Frames auf eine Teilregion des Bildes beschränkt wird. Insbesondere werden die rauschbehafteten Eingaben zum Entrauschen des vollständigen Frames mit dem aktuellen Netzwerk erzeugt. Außerdem wird eine kleinere Region von Referenzdaten erzeugt und für kontinuierliches Training verwendet, wie im Folgenden beschrieben.
  • Obwohl hierin eine CNN-Implementierung beschrieben wird, kann jede Form von Engine für maschinelles Lernen verwendet werden, einschließlich Systemen, die überwachtes Lernen (z. B. Erstellen eines mathematischen Modells eines Satzes von Daten, der sowohl die Eingaben als auch die gewünschten Ausgaben enthält), unüberwachtes Lernen (die z. B. Eingabedaten für bestimmte Strukturtypen auswerten) und/oder eine Kombination von überwachtem und unüberwachtem Lernen durchführen, ohne darauf beschränkt zu sein.
  • Bestehende Entrauschungsimplementierungen funktionieren in einer Trainingsphase und einer Laufzeitphase. Während der Trainingsphase wird eine Netzwerktopologie definiert, die eine Region von N x N Pixeln mit verschiedenen Pro-Pixel-Datenkanälen, wie beispielsweise Pixelfarbe, Tiefe, Normale, Normalabweichung, Primitiv-IDs und Albedo, empfängt und eine endgültige Pixelfarbe erzeugt. Ein Satz von „repräsentativen“ Trainingsdaten wird unter Verwendung eines Frame-Wertes von Eingaben geringer Sampleanzahl und unter Bezugnahme auf die „gewünschten“ Pixelfarben erzeugt, die mit einer sehr hohen Sampleanzahl berechnet werden. Das Netzwerk wird auf diese Eingaben trainiert, wobei ein Satz von „idealen“ Gewichten für das Netzwerk erzeugt wird. In diesen Implementierungen werden die Referenzdaten verwendet, um die Gewichte des Netzwerks so zu trainieren, dass die Ausgabe des Netzwerks dem gewünschten Ergebnis möglichst genau entspricht.
  • Während der Laufzeit werden die gegebenen vorberechneten idealen Netzwerkgewichte geladen, und das Netzwerk wird initialisiert. Für jeden Frame wird ein Bild aus Entrauschungseingaben geringer Sampleanzahl (d. h. den gleichen, die zum Training verwendet werden) erzeugt. Für jedes Pixel wird die gegebene Nachbarschaft von Eingaben von Pixeln durch das Netzwerk laufen gelassen, um die „entrauschte“ Pixelfarbe vorherzusagen und einen entrauschten Frame zu erzeugen.
  • 15 veranschaulicht eine Anfangstrainingsimplementierung. Eine Engine für maschinelles Lernen 1500 (z. B. ein CNN) empfängt eine Region von N x N Pixeln als Bilddaten hoher Sampleanzahl 1702 mit verschiedenen Pro-Pixel-Datenkanälen, wie beispielsweise Pixelfarbe, Tiefe, Normale, Normalabweichung, Primitiv-IDs und Albedo, und erzeugt endgültige Pixelfarben. Repräsentative Trainingsdaten werden unter Verwendung eines Frames Wertes von Eingaben geringer Sampleanzahl 1501 erzeugt. Das Netzwerk wird auf diese Eingaben trainiert und erzeugt einen Satz von idealen Gewichten 1505, den die Engine für maschinelles Lernen 1500 anschließend zum Entrauschen von Bildern geringer Sampleanzahl während der Laufzeit verwendet.
  • Zum Verbessern der zuvor erwähnten Techniken wird eine Entrauschungsphase zum Erzeugen neuer Trainingsdaten jeden Frame oder Teilsatz von Frames (z. B. alle N Frames, wobei N = 2, 3, 4, 10, 25 usw.) vergrößert. Wie in 16 veranschaulicht, werden insbesondere eine oder mehrere Regionen in jedem Frame gewählt, die hierin als „neue Referenzregionen“ 1602 bezeichnet werden und die mit einer hohen Sampleanzahl in einen separaten Puffer hoher Sampleanzahl 1604 gerendert werden. Ein Puffer geringer Sampleanzahl 1603 speichert den Eingabeframe geringer Sampleanzahl 1601 (der die Region geringer Sampleanzahl 1604 umfasst, die der neuen Referenzregion 1602 entspricht).
  • Die Position der neuen Referenzregion 1602 kann nach dem Zufallsprinzip ausgewählt werden. Alternativ kann die Position der neuen Referenzregion 1602 in einer vorspezifizierten Weise für jeden neuen Frame angepasst werden (z. B. unter Verwendung einer vordefinierten Verschiebung der Region zwischen Frames, die auf eine spezifizierte Region in der Mitte des Frames beschränkt ist, usw.)
  • Ungeachtet dessen, wie die neue Referenzregion ausgewählt wird, wird sie durch die Engine für maschinelles Lernen 1600 zum kontinuierlichen Verfeinern und Aktualisieren der trainierten Gewichte 1605 verwendet, die zum Entrauschen eingesetzt werden. Insbesondere werden Referenzpixelfarben aus jeder neuen Referenzregion 1602 und rauschbehaftete Referenzpixeleingaben aus einer entsprechenden Region geringer Sampleanzahl 1607 gerendert. Dann wird Ergänzungstraining auf der Engine für maschinelles Lernen 1600 unter Verwendung der Referenzregion hoher Sampleanzahl 1602 und der entsprechenden Region geringer Sampleanzahl 1607 durchgeführt. Im Gegensatz zum Anfangstraining wird dieses Training während der Laufzeit für jede neue Referenzregion 1602 kontinuierlich durchgeführt - um dadurch zu gewährleisten, dass die Engine für maschinelles Lernen 1600 genau trainiert wird. Zum Beispiel können Pro-Pixel-Datenkanäle (z. B. Pixelfarbe, Tiefe, Normale, Normalabweichung usw.) ausgewertet werden, welche die Engine für maschinelles Lernen 1600 zum Durchführen von Anpassungen an den trainierten Gewichten 1605 verwendet. Wie im Trainingsfall (15) wird die Engine für maschinelles Lernen 1600 auf einen Satz von idealen Gewichten 1605 zum Entfernen von Rauschen aus dem Eingabeframe geringer Sampleanzahl 1601 zum Erzeugen des entrauschten Frames 1620 trainiert. Die trainierten Gewichte 1605 werden jedoch basierend auf neuen Bildcharakteristiken neuer Typen von Eingabeframes geringer Sampleanzahl 1601 kontinuierlich aktualisiert.
  • Die Neutrainingsoperationen, die von der Engine für maschinelles Lernen 1600 durchgeführt werden, können in einem Hintergrundprozess auf der Grafikprozessoreinheit (GPU) oder dem Hostprozessor gleichzeitig ausgeführt werden. Die Render-Schleife, die als eine Treiberkomponente und/oder GPU-Hardwarekomponente implementiert sein kann, kann kontinuierlich neue Trainingsdaten (z. B. in Form neuer Referenzregionen 1602) erzeugen, die sie in eine Warteschlange einreiht. Der Hintergrundtrainingsprozess, der auf der GPU oder dem Hostprozessor ausgeführt wird, kann die neuen Trainingsdaten kontinuierlich aus seiner Warteschlange auslesen, trainiert die Engine für maschinelles Lernen 1600 neu und aktualisiert sie in entsprechenden Intervallen mit neuen Gewichten 1605.
  • 17 veranschaulicht ein Beispiel einer solchen Implementierung, wobei der Hintergrundtrainingsprozess 1700 von der Host-CPU 1710 implementiert wird. Insbesondere verwendet der Hintergrundtrainingsprozess 1700 die neue Referenzregion hoher Sampleanzahl 1602 und die entsprechende Region geringer Sampleanzahl 1604 zum kontinuierlichen Aktualisieren der trainierten Gewichte 1605, um dadurch die Engine für maschinelles Lernen 1600 zu aktualisieren.
  • Wie in 18A für das nicht einschränkende Beispiel eines Mehrspieler-Online-Spiels veranschaulicht, erzeugen verschiedene Hostmaschinen 1820-1822 individuell Referenzregionen, die ein Hintergrundtrainingsprozess 1700A-C an einen Server 1800 (z. B. einen Spieleserver) sendet. Der Server 1800 führt dann Training auf einer Engine für maschinelles Lernen 1810 unter Verwendung der neuen Referenzregionen durch, die von jedem der Hosts 1821-1822 empfangen werden, und aktualisiert die Gewichte 1805, wie zuvor beschrieben. Er sendet die Gewichte 1805 an die Hostmaschinen 1820, welche die Gewichte 1605A-C speichern, um dadurch jede einzelne Engine für maschinelles Lernen (nicht dargestellt) zu aktualisieren. Da der Server 1800 in einem sehr kurzen Zeitraum mit einer großen Anzahl von Referenzregionen versehen werden kann, kann er die Gewichte für jede gegebene Anwendung (z. B. Online-Spiel), die von den Benutzern ausgeführt wird, wirksam und genau aktualisieren.
  • Wie in 18B veranschaulicht, können die verschiedenen Hostmaschinen neue trainierte Gewichte (z. B. basierend auf den Trainings-/Referenzregionen 1602, wie zuvor beschrieben) erzeugen und die neuen trainierten Gewichte an einen Server 1800 (z. B. einen Spieleserver) freigeben oder alternativ ein Peer-to-Peer-Freigabeprotokoll verwenden. Eine Verwaltungskomponente für maschinelles Lernen 1810 auf dem Server erzeugt einen Satz von kombinierten Gewichten 1805 unter Verwendung der neuen Gewichte von jeder der Hostmaschinen. Die kombinierten Gewichte 1805 können zum Beispiel ein Durchschnitt sein, der aus den neuen Gewichten erzeugt und kontinuierlich aktualisiert wird, wie hierin beschrieben. Sobald erzeugt, können Kopien der kombinierten Gewichte 1605A-C an jede der Hostmaschinen 1820-1821 gesendet und darauf gespeichert werden, die dann die kombinierten Gewichte zum Durchführen von Entrauschungsoperationen verwenden, wie hierin beschrieben.
  • Der Aktualisierungsmechanismus der halbgeschlossenen Schleife kann auch von Hardwareherstellern verwendet werden. Zum Beispiel kann das Referenznetzwerk als Teil des vom Hardwarehersteller vertriebenen Treibers umfasst sein. Da der Treiber neue Trainingsdaten unter Verwendung der hierin beschriebenen Techniken erzeugt und diese kontinuierlich an den Hardwarehersteller zurückübermittelt, verwendet der Hardwarehersteller diese Informationen, um seine Implementierungen für maschinelles Lernen für die nächste Treiberaktualisierung weiter zu verbessern.
  • In einer beispielhaften Implementierung (z. B. in Batch-Film-Rendering auf einer Renderfarm) sendet der Renderer die neu erzeugten Trainingsregionen an einen dedizierten Server oder eine dedizierte Datenbank (in der Render-Farm dieses Studios), der/die diese Daten mit der Zeit von mehreren Render-Knoten aggregiert. Ein separater Prozess auf einer separaten Maschine verbessert das dedizierte Entrauschungsnetzwerk des Studios kontinuierlich, und neue Render-Aufträge verwenden stets das letzte trainierte Netzwerk.
  • In 19 ist ein Verfahren für maschinelles Lernen veranschaulicht. Das Verfahren kann auf den hierin beschriebenen Architekturen implementiert werden, ist aber nicht auf ein spezifisches System oder eine spezifische Grafikverarbeitungsarchitektur beschränkt.
  • Bei 1901 werden als Teil der Anfangstrainingsphase Bilddaten geringer Sampleanzahl und Bilddaten hoher Sampleanzahl für eine Mehrzahl von Bildframes erzeugt. Bei 1902 wird eine Entrauschungs-Engine für maschinelles Lernen unter Verwendung der Bilddaten hoher/geringer Sampleanzahl trainiert. Zum Beispiel kann ein Satz von Gewichten eines neuronalen Faltungsnetzwerks, die mit Pixelmerkmalen assoziiert sind, gemäß dem Training aktualisiert werden. Es kann jedoch jede Architektur für maschinelles Lernen verwendet werden.
  • Bei 1903 werden während der Laufzeit Bildframes geringer Sampleanzahl zusammen mit mindestens einer Referenzregion mit einer hohen Sampleanzahl erzeugt. Bei 1904 wird die Referenzregion hoher Sampleanzahl von der Engine für maschinelles Lernen und/oder separater Trainingslogik (z. B. einem Hintergrundtrainingsmodul 1700) zum kontinuierlichen Verfeinern des Trainings der Engine für maschinelles Lernen verwendet. Zum Beispiel kann die Referenzregion hoher Sampleanzahl in Kombination mit einem entsprechenden Abschnitt des Bildes mit geringer Sampleanzahl verwendet werden, um fortzufahren, der Engine für maschinelles Lernen 1904 beizubringen, wie Entrauschen am wirksamsten durchgeführt werden kann. In einer CNN-Implementierung zum Beispiel kann dies Aktualisieren der mit dem CNN assoziierten Gewichte umfassen.
  • Mehrere Varianten, die oben beschrieben wurden, können implementiert werden, beispielsweise die Art und Weise, wie die Rückmeldeschleife zur Engine für maschinelles Lernen konfiguriert wird, die Entitäten, welche die Trainingsdaten erzeugen, die Art und Weise, in welcher die Trainingsdaten an die Trainings-Engine rückgemeldet werden, und wie das verbesserte Netzwerk für die Rendering-Engines bereitgestellt wird. Obwohl außerdem die oben beschriebenen Beispiele kontinuierliches Training unter Verwendung einer einzigen Referenzregion durchführen, kann jede Anzahl von Referenzregionen verwendet werden. Wie bereits erwähnt, können zudem die Referenzregionen verschiedene Größen aufweisen, auf verschiedenen Anzahlen von Bildframes verwendet werden und unter Verwendung verschiedener Techniken (z. B. nach dem Zufallsprinzip, gemäß einem vorbestimmten Muster usw.) in verschiedenen Positionen innerhalb der Bildframes positioniert werden.
  • Obwohl außerdem ein neuronales Faltungsnetzwerk (CNN) als ein Beispiel der Engine für maschinelles Lernen 1600 beschrieben wird, können die der Erfindung zugrundeliegenden Prinzipien unter Verwendung jeglicher Form von Engine für maschinelles Lernen implementiert werden, die zum kontinuierlichen Verfeinern ihrer Ergebnisse unter Verwendung neuer Trainingsdaten imstande ist. Als Beispiel und ohne Einschränkung umfassen andere Implementierungen maschinellen Lernens die Gruppenmethode für Datenhandhabung (GMDH - Group Method of Data Handling), Long Short-Term Memory, Deep Reservoir Computing, Deep Belief-Netzwerke, Tensor-Deep-Stacking-Netzwerke und Deep-Predictive-Coding-Netzwerke, um nur einige zu nennen.
  • VORRICHTUNG UND VERFAHREN ZUR EFFIZIENTEN ENTRAUSCHUNG
  • Wie bereits erwähnt, ist Entrauschung ein kritisches Merkmal für Echtzeit-Strahlverfolgung mit glatten, rauschfreien Bildern geworden. Rendering kann über ein verteiltes System auf mehreren Vorrichtung erfolgen, aber bislang funktionieren die bestehenden Entrauschungs-Frameworks alle auf einer einzigen Instanz auf einer einzigen Engine. Wenn Rendering über mehrere Vorrichtung erfolgt, stehen ihnen möglicherweise nicht alle gerenderten Pixel zum Berechnen eines entrauschten Abschnitts des Bildes zur Verfügung.
  • Ein verteilter Entrauschungsalgorithmus, der sowohl mit Entrauschungstechniken auf der Basis von künstlicher Intelligenz (AI - Artificial Intelligence) als auch auf Nicht-AI-Basis funktioniert, wird vorgestellt. Regionen des Bildes werden entweder bereits aus einer verteilten Render-Operation über Knoten verteilt oder aufgeteilt und aus einem einzigen Framepuffer verteilt. Phantomregionen von Nachbarregionen, die zum Berechnen von ausreichender Entrauschung benötigt werden, werden bei Bedarf von Nachbarknoten gesammelt, und die resultierenden Endkacheln werden zu einem Endbild zusammengesetzt.
  • VERTEILTE VERARBEITUNG
  • 20 veranschaulicht mehrere Knoten 2021-2023, die Rendering durchführen. Obwohl der Einfachheit halber nur drei Knoten veranschaulicht sind, sind die der Erfindung zugrundeliegenden Prinzipien nicht auf eine spezifische Anzahl von Knoten beschränkt. Eigentlich kann ein einziger Knoten zum Implementieren bestimmter Ausführungsformen der Erfindung verwendet werden.
  • Die Knoten 2021-2023 rendern jeweils einen Abschnitt eines Bildes, was in diesem Beispiel zu Regionen 2011-2013 führt. Obwohl in 20 rechteckige Regionen 2011-2013 dargestellt sind, können Regionen jeglicher Form verwendet werden, und jede Vorrichtung kann jede Anzahl von Regionen verarbeiten. Die Regionen, die von einem Knoten benötigt werden, um eine hinlänglich gleichmäßige Entrauschungsoperationen durchzuführen, werden als Phantomregionen 2011-2013 bezeichnet. Mit anderen Worten stellen die Phantomregionen 2001-2003 die Gesamtheit von Daten dar, die zum Durchführen von Entrauschung auf einer spezifizierten Qualitätsstufe erforderlich ist. Ein Herabsetzen der Qualitätsstufe reduziert die Größe der Phantomregion und demnach die erforderliche Menge von Daten, und ein Heraufsetzen der Qualitätsstufe vergrößert die Phantomregion und vermehrt die entsprechenden Daten, die erforderlich sind.
  • Wenn ein Knoten, wie beispielsweise der Knoten 2021, über eine lokale Kopie eines Abschnitts der Phantomregion 2001 verfügt, die zum Entrauschen seiner Region 2011 auf einer spezifizierten Qualitätsstufe erforderlich ist, ruft der Knoten die erforderlichen Daten von einem oder mehreren „benachbarten“ Knoten, wie beispielsweise dem Knoten 2022 ab, der einen Abschnitt der Phantomregion 2001 besitzt, wie veranschaulicht. Ähnlich ruft der Knoten 2022 die erforderlichen Phantomregionsdaten 2032 vom Knoten 2021 ab, wenn der Knoten 2022 über eine lokale Kopie der Phantomregion 2002 verfügt, die zum Entrauschen seiner Region 2012 auf der spezifizierten Qualitätsstufe erforderlich ist. Das Abrufen kann über einen Bus, einen Interconnect oder eine Hochgeschwindigkeitsspeicher-Fabric (z. B. ein Hochgeschwindigkeits-Ethernet) durchgeführt werden, oder es kann auch ein On-Chip-Interconnect in einem Mehrkern-Chip sein, der zum Verteilen von Rendering-Arbeit unter einer Mehrzahl von Kernen (z. B. zum Rendern großer Bilder entweder bei extremen Auflösungen oder variierender Zeit) imstande ist. Jeder Knoten 2021-2023 kann eine individuelle Ausführungseinheit oder einen spezifizierten Satz von Ausführungseinheiten innerhalb eines Grafikprozessors umfassen.
  • Die spezifische Menge von Daten, die gesendet werden soll, hängt von den verwendeten Entrauschungstechniken ab. Außerdem können die Daten von der Phantomregion alle Daten umfassen, die zum Verbessern von Entrauschung jeder jeweiligen Region benötigt werden. Zum Beispiel können die Phantomregionsdaten Farben/Wellenlängen, Intensität/Alphadaten und/oder Normale von Bildern umfassen. Die der Erfindung zugrunde liegenden Prinzipien sind jedoch auf keinen bestimmte Satz von Phantomregionsdaten beschränkt.
  • ZUSÄTZLICHE EINZELHEITEN
  • Für langsamere Netzwerke oder Interconnects kann Komprimierung dieser Daten unter Verwendung bestehender verlustfreier oder verlustbehafteter Universalkomprimierung eingesetzt werden. Beispiele umfassen zlib, gzip und Lempel-Ziv-Markov-Kettenalgorithmus (LZMA), ohne darauf beschränkt zu sein. Ferner kann inhaltsspezifische Komprimierung verwendet werden, wobei zu erwähnen ist, dass die Deltain-Strahl-Treffer-Informationen zwischen Frames ziemlich spärlich sein können, und nur die Samples, die zu diesem Delta beitragen, gesendet werden müssen, wenn der Knoten die gesammelten Deltas aus vorherigen Frames bereits hat. Diese können selektiv zu Knoten i gepusht werden, welche diese Samples sammeln, oder ein Knoten i kann Samples von anderen Knoten anfordern. Verlustfreie Komprimierung wird für bestimmte Typen von Daten und Programmcodes verwendet, während verlustbehaftete Datenkomprimierung für andere Datentypen verwendet wird.
  • 21 veranschaulicht zusätzliche Einzelheiten der Interaktionen zwischen den Knoten 2021-2022. Jeder Knoten 2021-2022 umfasst eine Strahlverfolgungs-Rendering-Schaltungsanordnung 2081-2082 zum Rendern der jeweiligen Bildregionen 2011-2012 und Phantomregionen 2001-2002. Entrauscher 2100-2111 führen Entrauschungsoperationen an den Regionen 2011 bzw. 2012 aus, für deren Rendern und Entrauschen jeder Knoten 2021-2022 verantwortlich ist. Die Entrauscher 2021-2022 können zum Beispiel Schaltungsanordnung, Software oder eine beliebige Kombination davon zum Erzeugen der entrauschten Regionen 2121 bzw. 2122 umfassen. Wie bereits erwähnt, kann es sein, dass die Entrauscher 2021-2022 beim Erzeugen von entrauschten Regionen auf Daten innerhalb einer Phantomregion angewiesen sind, die einem anderen Knoten gehört (z. B. kann der Entrauscher 2100 Daten von der Phantomregion 2002 benötigen, die dem Knoten 2022 gehört).
  • Demnach können die Entrauscher 2100-2111 die entrauschten Regionen 2121-2122 unter Verwendung von Daten aus den Regionen 2011-2012 bzw. den Phantomregionen 2001-2002 erzeugen, von welchen wenigstens ein Teil von einem anderen Knoten empfangen werden kann. Regionsdatenverwalter 2101-2102 können Datenübertragungen aus Phantomregionen 2001-2002 verwalten, wie hierin beschrieben. Komprimier-/Dekomprimiereinheiten 2131-2132 können Komprimierung und Dekomprimierung der Phantomregionsdaten durchführen, die jeweils zwischen den Knoten 2021-2022 ausgetauscht werden.
  • Zum Beispiel kann der Regionsdatenverwalter 2101 des Knotens 2021 auf Verlangen des Knotens 2022 Daten aus der Phantomregion 2001 an den Komprimierer/Dekomprimierer 2131 senden, der die Daten komprimiert, um komprimierte Daten 2106 zu erzeugen, die er an den Knoten 2022 sendet, um dadurch Bandbreite über den Interconnect, das Netzwerk, den Bus oder eine andere Datenkommunikationsverbindung zu reduzieren. Der Komprimierer/Dekomprimierer 2132 des Knotens 2022 dekomprimiert dann die komprimierten Daten 2106, und der Entrauscher 2111 verwendet die dekomprimierten Phantomdaten zum Erzeugen einer entrauschten Region 2012 mit einer höheren Qualität, als sie nur mit Daten aus der Region 2012 möglich wäre. Der Regionsdatenverwalter 2102 kann die dekomprimierten Daten aus der Phantomregion 2001 in einem Cache, einem Arbeitsspeicher, einer Registerdatei oder einem anderen Speicher speichern, um sie für den Entrauscher 2111 beim Erzeugen der entrauschten Region 2122 zur Verfügung zu stellen. Ein ähnlicher Satz von Operationen kann durchgeführt werden, um die Daten aus der Phantomregion 2002 für den Entrauscher 2100 auf dem Knoten 2021 bereitzustellen, der die Daten in Kombination mit Daten aus der Region 2011 verwendet, um eine entrauschte Region 2121 höherer Qualität zu erzeugen.
  • ABRUFEN VON DATEN ODER RENDERN
  • Wenn die Verbindung zwischen Vorrichtungen, wie beispielsweise den Knoten 2021-2022, langsam ist (d. h. langsamer als eine Schwellenlatenz und/oder eine Schwellenbandbreite), kann das lokale Rendern von Phantomregionen schneller als das Anfordern der Ergebnisse von anderen Vorrichtungen sein. Dies kann während der Laufzeit durch Verfolgen von Netzwerktransaktionsgeschwindigkeiten und linear extrapolierten Renderzeiten für die Phantomregionsgröße bestimmt werden. In solchen Fällen, wenn Rendern aus der gesamten Phantomregion schneller ist, können am Ende mehrere Vorrichtungen die gleichen Abschnitte des Bildes rendern. Die Auflösung des gerenderten Abschnitts der Phantomregionen kann basierend auf der Varianz der Basisregion und dem bestimmten Unschärfegrad angepasst werden.
  • LASTAUSGLEICH
  • Es können statische und/oder dynamische Lastausgleichsschemata zum Verteilen der Verarbeitungslast unter den verschiedenen Knoten 2021-2023 verwendet werden. Hinsichtlich des dynamischen Lastausgleichs kann die durch das Entrauschungsfilter bestimmte Varianz sowohl mehr Zeit beim Entrauschen erfordern, als auch die Menge von Samples erhöhen, die zum Rendern einer spezifischen Region der Szene verwendet wird, wobei eine niedrige Varianz und unscharfe Regionen weniger Samples erfordern. Die spezifischen Regionen, die den spezifischen Knoten zugeordnet werden, können basierend auf Daten von vorherigen Frames dynamisch angepasst oder dynamisch über Vorrichtungen kommuniziert werden, während sie rendern, so dass alle Vorrichtungen die gleiche Arbeitsmenge haben.
  • 22 veranschaulicht, wie ein Monitor 2201-2202, der auf jedem jeweiligen Knoten 2021-2022 ausgeführt wird, Performance-Metrikdaten sammelt, die, ohne darauf beschränkt zu sein, die Zeit, die zum Senden von Daten über die Netzwerkschnittstelle 2211-2212 aufgewendet wird, die Zeit, die beim Entrauschen einer Region (mit oder ohne Phantomregionsdaten) aufgewendet wird, und die Zeit umfassen, die beim Rendern jeder Region/Phantomregion aufgewendet wird. Die Monitore 2201-2202 melden diese Performance-Metriken an einen Verwalter- oder Lastausgleichsknoten 2201 zurück, der die Daten analysiert, um die aktuelle Workload auf jedem Knoten 2021-2022 zu identifizieren, und bestimmt möglicherweise einen effizienteren Modus zum Verarbeiten der verschiedenen entrauschten Regionen 2121-2122. Der Verwalterknoten 2201 verteilt dann neue Workloads für neuen Region an die Knoten 2021-2022 gemäß der erkannten Last. Zum Beispiel kann der Verwalterknoten 2201 mehr Arbeit an jene Knoten senden, die nicht stark ausgelastet sind, und/oder Arbeit von jenen Knoten umverteilen, die überlastet sind. Außerdem kann der Lastausgleichsknoten 2201 eine Neukonfigurationsbefehl senden, um die spezifische Weise anzupassen, in welcher das Rendern und/oder Entrauschen von jedem der Knoten durchgeführt wird (wovon einige Beispiele oben beschrieben wurden).
  • BESTIMMEN VON PHANTOMREGIONEN
  • Die Größen und Formen der Phantomregionen 2001-2002 können basierend auf dem Entrauschungsalgorithmus bestimmt werden, der durch die Entrauscher 2100-2111 implementiert wird. Ihre jeweilige Größen können dann basierend auf der erkannten Varianz der Samples, die entrauscht werden, dynamisch modifiziert werden. Der zur Al-Entrauschung verwendete Lernalgorithmus selbst kann zum Bestimmen geeigneter Regionsgrößen verwendet werden, oder in anderen Fällen, beispielsweise bei bilateraler Unschärfe, bestimmt die vorgegebene Filterbreite die Größe der Phantomregionen 2001-2002. In einer beispielhaften Implementierung, die einen Lernalgorithmus verwendet, kann eine Engine für maschinelles Lernen auf dem Verwalterknoten 2201 ausgeführt werden, und/oder Teile des maschinellen Lernens können auf jedem der einzelnen Knoten 2021-2023 ausgeführt werden (siehe z. B. vorstehende 18A-B mit zugehörigem Text).
  • SAMMELN DES ENDBILDES
  • Das Endbild kann durch Sammeln der gerenderten und entrauschten Regionen von jedem der Knoten 2021-2023 ohne Notwendigkeit von Phantomregionen oder Normalen erzeugt werden. In 22 zum Beispiel werden die entrauschten Regionen 2121-2122 an den Regionsprozessor 2280 des Verwalterknotens 2201 gesendet, der die Regionen kombiniert, um das entrauschte Endbild 2290 zu erzeugen, das dann auf einer Anzeige 2290 angezeigt wird. Der Regionsprozessor 2280 kann die Regionen unter Verwendung einer Vielzahl von 2D-Kompositionstechniken kombinieren. Obwohl als getrennte Komponenten veranschaulicht, können der Regionsprozessor 2280 und das entrauschte Bild 2290 integrale Bestandteile der Anzeige 2290 sein. Die verschiedenen Knoten 2021-2022 können eine Direktsendetechnik zum Senden der entrauschten Regionen 2121-2122 und möglicherweise mancherlei verlustbehaftete oder verlustfreie Kompression der Regionsdaten verwenden.
  • Al-Entrauschung ist immer noch eine kostspielige Operation und Gaming wird immer mehr in die Cloud verlegt. Entsprechend kann das Verteilen von Verarbeitung von Entrauschung über mehrere Knoten 2021-2022 erforderlich sein, um Echtzeit-Frameraten für traditionelles Gaming oder virtuelle Realität (VR) zu erreichen, was höhere Frameraten erfordert. Filmstudios rendern außerdem häufig in Renderfarmen, die zur schnelleren Entrauschung verwendet werden können.
  • Ein beispielhaftes Verfahren zum Durchführen von verteiltem Rendern und Entrauschen ist in 23 veranschaulicht. Das Verfahren kann innerhalb des Kontexts der zuvor beschriebenen Systemarchitekturen implementiert werden, ist aber auf keine spezifische Systemarchitektur beschränkt.
  • Bei 2301 wird Grafikarbeit an eine Mehrzahl von Knoten verteilt, wobei jeder Knoten Strahlverfolgungsoperationen zum Rendern einer Region eines Bildframes durchführt. Jeder Knoten kann bereits Daten in einem Speicher aufweisen, die zum Durchführen der Operationen erforderlich sind. Zum Beispiel können zwei oder mehr der Knoten sich einen gemeinsamen Speicher teilen, oder die lokalen Speicher der Knoten können bereits gespeicherte Daten von früheren Strahlverfolgungsoperationen aufweisen. Alternativ oder zusätzlich können bestimmte Daten an jeden Knoten gesendet werden.
  • Bei 2302 wird die „Phantomregion“ bestimmt, die für ein spezifiziertes Entrauschungsniveau (d. h. ein akzeptierbares Performanceniveau) erforderlich ist. Die Phantomregion umfasst alle Daten, die zum Realisieren des spezifizierten Entrauschungsniveaus erforderlich sind, darunter Daten, die einem oder mehreren anderen Knoten gehören.
  • Bei 2303 werden Daten in Bezug auf die Phantomregionen (oder Abschnitte davon) zwischen Knoten ausgetauscht. Bei 2304 führt jeder Knoten Entrauschung an seiner jeweiligen Region (z. B. unter Verwendung der ausgetauschten Daten), und bei 2305 werden die Ergebnisse kombiniert, um den entrauschten Endbildframe zu erzeugen.
  • Ein Verwalterknoten oder Primärknoten, wie beispielsweise in 22 dargestellt, kann die Arbeit an die Knoten verteilen und die von den Knoten durchgeführte Arbeit dann kombinieren, um den Endbildframe zu erzeugen. Eine Peer-basierte Architektur kann verwendet werden, wenn die Knoten Peers sind, die Daten zum Rendern und Entrauschen des Endbildframes austauschen.
  • Die hierin beschriebenen Knoten (z. B. die Knoten 2021-2023) können Grafikverarbeitungs-Computersysteme sein, die über ein Hochgeschwindigkeitsnetzwerk miteinander verbunden sind. Alternativ können die Knoten einzelne Verarbeitungselemente sein, die mit einer Hochgeschwindigkeitsspeicher-Fabric gekoppelt sind. Alle Knoten können sich einen gemeinsamen virtuellen Speicherraum und/oder einen gemeinsamen physischen Speicher teilen. Alternativ können die Knoten eine Kombination von CPUs und GPUs sein. Zum Beispiel kann es sich bei dem oben beschriebenen Verwalterknoten 2201 um eine CPU und/oder um auf der CPU ausgeführte Software handeln, und bei den Knoten 2021-2022 kann es sich um GPUs und/oder um auf den GPUs ausgeführte Software handeln. Es können mehrere verschiedenen Typen von Knoten verwendet werden, solange sie den der Erfindung zugrundeliegenden Prinzipien entsprechen.
  • IMPLEMENTIERUNGEN BEISPIELHAFTER NEURONALER NETZWERKE
  • Es gibt viele Arten von neuronalen Netzwerken; eine einfache Art eines neuronalen Netzwerks ist ein vorwärtsgekoppeltes neuronales Netzwerk. Ein vorwärtsgekoppeltes neuronales Netzwerk kann als ein azyklischer Graph implementiert werden, in welchem die Knoten in Schichten angeordnet sind. Typischerweise umfasst die Topologie eines vorwärtsgekoppelten Netzwerks eine Eingabeschicht und eine Ausgabeschicht, die durch mindestens eine verborgene Schicht getrennt sind. Die verborgene Schicht wandelt eine Eingabe, die durch die Eingabeschicht empfangen wird, in eine Darstellung um, die zum Erzeugen einer Ausgabe in der Ausgabeschicht verwendet werden kann. Die Netzwerkknoten sind über Kanten mit den Knoten in benachbarten Schichten vollständig verbunden, aber es gibt keine Kanten zwischen Knoten innerhalb jeder Schicht. Daten, die an den Knoten einer Eingabeschicht eines vorwärtsgekoppelten Netzwerks empfangen werden, werden mittels einer Aktivierungsfunktion, welche die Zustände der Knoten jeder nachfolgenden Schicht im Netzwerk basierend auf Koeffizienten („Gewichten“) berechnet, die jeweils mit jeder der die Schichten verbindenden Kanten assoziiert sind, zu den Knoten der Ausgabeschicht propagiert (d. h. „vorwärtsgekoppelt“). In Abhängigkeit vom spezifischen Modell, das durch den Algorithmus dargestellt wird, der ausgeführt wird, kann die Ausgabe aus dem Algorithmus des neuronalen Netzwerks verschiedene Formen annehmen.
  • Bevor ein Algorithmus für maschinelles Lernen zum Modellieren eines spezifischen Problems verwendet werden kann, wird der Algorithmus unter Verwendung eines Trainingsdatensatzes trainiert. Das Trainieren eines neuronalen Netzwerks umfasst ein Auswählen einer Netzwerktopologie, Verwenden eines Satzes von Trainingsdaten, die ein Problem darstellen, das durch das Netzwerk modelliert wird, und Anpassen der Gewichte, bis das Netzwerkmodell mit einem minimalen Fehler für alle Instanzen des Trainingsdatensatzes funktioniert. Zum Beispiel wird während eines überwachten Lerntrainingsprozesses für ein neuronales Netzwerk die Ausgabe, die durch das Netzwerk in Reaktion auf die Eingabe erzeugt wird, die eine Instanz in einem Trainingsdatensatz darstellt, mit der „korrekten“ beschrifteten Ausgabe für diese Instanz verglichen, ein Fehlersignal, das die Differenz zwischen der Ausgabe und der beschrifteten Ausgabe darstellt, wird berechnet, und die mit den Verbindungen assoziierten Gewichte werden angepasst, um diesen Fehler zu minimieren, wenn das Fehlersignal durch die Schichten des Netzwerks zurückpropagiert wird. Das Netzwerk wird dann als „trainiert“ angesehen, wenn die Fehler für jede der Ausgaben, die von den Instanzen des Trainingsdatensatzes erzeugt werden, minimiert sind.
  • Die Genauigkeit eines Algorithmus für maschinelles Lernen kann durch die Qualität des zum Trainieren des Algorithmus verwendeten Datensatzes erheblich beeinflusst werden. Der Trainingsprozess kann rechenintensiv sein und auf einem herkömmlichen Universalprozessor einen erheblichen Zeitaufwand erfordern. Demgemäß wird Parallelverarbeitungshardware zum Trainieren vieler Arten von Algorithmen für maschinelles Lernen eingesetzt. Dies ist insbesondere zum Optimieren des Trainings von neuronalen Netzwerken nützlich, da die Berechnungen, die beim Anpassen der Koeffizienten in neuronalen Netzwerken durchgeführt werden, sich von Natur aus für parallele Implementierungen anbieten. Insbesondere wurden viele Algorithmen und Softwareanwendungen für maschinelles Lernen angepasst, um von der Parallelverarbeitungshardware innerhalb von Universalgrafikverarbeitungsvorrichtungen Gebrauch zu machen.
  • 24 ist ein verallgemeinertes Diagramm eines Softwarestapels für maschinelles Lernen 2400. Eine Anwendung für maschinelles Lernen 2402 kann zum Trainieren eines neuronalen Netzwerks unter Verwendung eines Trainingsdatensatzes oder zum Verwenden eines trainierten tiefen neuronalen Netzwerks zum Implementieren von Maschinenintelligenz konfiguriert sein. Die Anwendung für maschinelles Lernen 2402 kann Trainings- und Inferenzfunktionalität für ein neuronales Netzwerk und/oder spezialisierte Software umfassen, die zum Trainieren eines neuronalen Netzwerks vor seiner Bereitstellung verwendet werden kann. Die Anwendung für maschinelles Lernen 2402 kann jede Art von Maschinenintelligenz implementieren, einschließlich Erkennung, Mapping und Lokalisierung von Bildern, autonomer Navigation, Sprachsynthese, medizinischer Bildgebung oder Sprachübersetzung, ohne darauf beschränkt zu sein.
  • Hardwarebeschleunigung für die Anwendung für maschinelles Lernen 2402 kann durch ein Framework für maschinelles Lernen 2404 ermöglicht werden. Das Framework für maschinelles Lernen 2404 kann auf Hardware implementiert sein, die hierin beschrieben wird, wie beispielsweise dem Verarbeitungssystem 100, das die hierin beschriebenen Prozessoren und Komponenten umfasst. Die für 24 beschriebenen Elemente, welche die gleichen oder ähnliche Bezeichnungen wie die Elemente irgendeiner anderen Figur hierin haben, beschreiben die gleichen Elemente wie in den anderen Figuren, können in einer ähnlichen Weise wie diese arbeiten oder funktionieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jenen verknüpft sein, die hierin an anderer Stelle beschrieben werden, ohne darauf beschränkt zu sein. Das Framework für maschinelles Lernen 2404 kann eine Bibliothek von Primitiven für maschinelles Lernen bereitstellen. Primitive für maschinelles Lernen sind Basisoperationen, die im Allgemeinen durch Algorithmen für maschinelles Lernen durchgeführt werden. Ohne das Framework für maschinelles Lernen 2404 müssten Entwickler von Algorithmen für maschinelles Lernen die mit dem Algorithmus für maschinelles Lernen assoziierte Hauptrechenlogik erstellen und optimieren und die Rechenlogik dann erneut optimieren, wenn neue parallele Prozessoren entwickelt werden. Stattdessen kann die Anwendung für maschinelles Lernen zum Durchführen der notwendigen Berechnungen unter Verwendung der durch das Framework für maschinelles Lernen 2404 bereitgestellten Primitive konfiguriert werden. Beispielhafte Primitive umfassen Tensorfaltungen, Aktivierungsfunktionen und Pooling, wobei es sich um Rechenoperationen handelt, die während des Trainierens eines neuronalen Faltungsnetzwerks (CNN) durchgeführt werden. Das Framework für maschinelles Lernen 2404 kann auch Primitive zum Implementieren von Teilprogrammen für grundlegende lineare Algebra, die von vielen Algorithmen für maschinelles Lernen durchgeführt werden, bereitstellen, wie beispielsweise Matrix- und Vektoroperationen.
  • Das Framework für maschinelles Lernen 2404 kann Eingabedaten, die von der Anwendung für maschinelles Lernen 2402 empfangen werden, verarbeiten und die entsprechende Eingabe in ein Rechen-Framework 2406 erzeugen. Das Rechen-Framework 2406 kann die zugrundeliegenden Anweisungen, die für den GPGPU-Treiber 2408 bereitgestellt werden, abstrahieren, um das Framework für maschinelles Lernen 2404 zum Nutzen von Hardwarebeschleunigung durch die GPGPU-Hardware 2410 zu befähigen, ohne dass das Framework für maschinelles Lernen 2404 über intime Kenntnis von der Architektur der GPGPU-Hardware 2410 verfügen müsste. Außerdem kann das Rechen-Framework 2406 Hardwarebeschleunigung für das Framework für maschinelles Lernen 2404 über eine Vielzahl von Typen und Generationen der GPGPU-Hardware 2410 ermöglichen.
  • GPGPU-beschleunigtes maschinellen Lernen
  • 25 veranschaulicht ein Mehrfach-GPU-Computersystem 2500, das eine Variante des Verarbeitungssystems 100 sein kann. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit dem Verarbeitungssystem 100 hierin auch eine entsprechende Kombination mit dem Mehrfach-GPU-Computersystem 2500, ohne darauf beschränkt zu sein. Die Elemente von 25, welche die gleichen oder ähnliche Bezeichnungen wie die Elemente in irgendeiner anderen Figur haben, beschreiben die gleichen Elemente wie in den anderen Figuren, können in einer ähnlichen Weise wie diese arbeiten oder funktionieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jenen verknüpft sein, die hierin an anderer Stelle beschrieben werden, ohne darauf beschränkt zu sein. Das Mehrfach-GPU-Computersystem 2500 kann einen Prozessor 2502 umfassen, der über einen Hostschnittstellenschalter 2504 mit mehreren GPGPUs 2506A-D gekoppelt ist. Der Hostschnittstellenschalter 2504 kann zum Beispiel eine PCI-Express-Schaltvorrichtung sein, die den Prozessor 2502 mit einem PCI-Express-Bus koppelt, über welchen der Prozessor 2502 mit dem Satz von GPGPUs 2506A-D kommunizieren kann. Jede der mehreren GPGPUs 2506A-D kann eine Instanz der oben beschriebenen GPGPU sein. Die GPGPUs 2506A-D können über einen Satz von Hochgeschwindigkeits-Punkt-zu-Punkt-GPU-zu-GPU-Links 2516 miteinander verbunden sein. Die Hochgeschwindigkeits-GPU-zu-GPU-Links können jede der GPGPUs 2506A-D über einen dedizierten GPU-Link verbinden. Die P2P-GPU-Links 2516 ermöglichen direkte Kommunikation zwischen jeder der GPGPUs 2506A-D ohne Notwendigkeit von Kommunikation über den Hostschnittstellenbus, mit dem der Prozessor 2502 verbunden ist. Wenn der GPU-zu-GPU-Verkehr zu den P2P-GPU-Links geleitet wird, bleibt der Hostschnittstellenbus für Systemspeicherzugriff oder zum Kommunizieren mit anderen Instanzen des Mehrfach-GPU-Computersystems 2500 zum Beispiel über eine oder mehrere Netzwerkvorrichtungen verfügbar. Statt die GPGPUs 2506A-D über den Hostschnittstellenschalter 2504 mit dem Prozessor 2502 zu verbinden, kann der Prozessor 2502 direkte Unterstützung für P2P-GPU-Links 2516 umfassen und daher eine direkte Verbindung zu den GPGPUs 2506A-D herstellen.
  • Implementierungen neuronaler Netzwerke für maschinelles Lernen
  • Die hierin beschriebene Computerarchitektur kann so konfiguriert sein, dass sie die Arten von Parallelverarbeitung durchführt, die zum Trainieren und Bereitstellen von neuronalen Netzwerken für maschinelles Lernen besonders geeignet sind. Ein neuronales Netzwerk kann als ein Netzwerk von Funktionen mit einer Graphenbeziehung verallgemeinert werden. Wie auf dem Fachgebiet allgemein bekannt ist, gibt es eine Vielzahl von Arten von Implementierungen neuronaler Netzwerke, die für maschinelles Lernen verwendet werden. Eine beispielhafte Art von neuronalem Netzwerk ist das vorwärtsgekoppelte Netzwerk, wie zuvor beschrieben.
  • Eine zweite beispielhafte Art von neuronalem Netzwerk ist das neuronale Faltungsnetzwerk (CNN - Convolutional Neural Network). Ein CNN ist ein spezialisiertes vorwärtsgekoppeltes neuronales Netzwerk zum Verarbeiten von Daten mit einer bekannten, gitterähnlichen Topologie, wie beispielsweise Bilddaten. Demgemäß werden CNNs im Allgemeinen für maschinelle Seh- und Bilderkennungsanwendungen verwendet, aber sie können auch für andere Arten von Mustererkennung, wie beispielsweise Sprech- und Sprachverarbeitung, eingesetzt werden. Die Knoten in der CNN-Eingabeschicht sind in einen Satz von „Filtern“ (Merkmalsdetektoren nach dem Vorbild der rezeptiven Felder in der Retina) eingeteilt, und die Ausgabe jedes Satzes von Filtern wird zu Knoten in nachfolgenden Schichten des Netzwerks propagiert. Die Berechnungen für ein CNN umfassen ein Anwenden der mathematischen Faltungsoperation auf jedes Filter zum Erzeugen der Ausgabe dieses Filters. Faltung ist eine spezielle Art von mathematischer Operation, die durch zwei Funktion durchgeführt wird, um eine dritte Funktion zu erzeugen, die eine modifizierte Version einer der beiden ursprünglichen Funktionen ist. In der Faltungsnetzwerkterminologie kann die erste Funktion für die Faltung als Eingabe bezeichnet werden, während die zweite Funktion als Faltungskernel bezeichnet werden kann. Die Ausgabe kann als die Merkmalskarte bezeichnet werden. Zum Beispiel kann die Eingabe in eine Faltungsschicht ein mehrdimensionales Array von Daten sein, das die verschiedenen Farbkomponenten eines Eingangsbildes definiert. Der Faltungskernel kann ein mehrdimensionales Array von Parametern sein, wobei die Parameter durch den Trainingsprozess für das neuronale Netzwerk angepasst werden.
  • Rekurrente neuronale Netzwerke (RNN - Recurrent Neural Network) sind eine Familie von vorwärtsgekoppelten neuronalen Netzwerken, die Rückkopplungsverbindungen zwischen Schichten umfassen. RNNs ermöglichen das Modellieren von sequenziellen Daten durch Verteilen von Parameterdaten über verschiedene Teile des neuronalen Netzwerks. Die Architektur für ein RNN umfasst Zyklen. Die Zyklen stellen den Einfluss eines gegenwärtigen Wertes einer Variablen auf ihren eigenen Wert zu einem zukünftigen Zeitpunkt dar, da zumindest ein Teil der Ausgabedaten aus dem RNN als Rückkopplung zum Verarbeiten einer nachfolgenden Eingabe in einer Sequenz verwendet wird. Dieses Merkmal macht RNNs aufgrund der veränderlichen Beschaffenheit, in welcher Sprachdaten zusammengesetzt werden können, insbesondere für Sprachverarbeitung verwendbar.
  • Die nachstehend beschriebenen Figuren stellen beispielhafte CNN- und RNN-Netzwerke dar und beschreiben einen allgemeinen Prozess zum Trainieren bzw. Bereitstellen jeder dieser Arten von Netzwerken. Es versteht sich, dass diese Beschreibungen beispielhaft und nicht einschränkend sind und die veranschaulichten Konzepte allgemein auf tiefe neuronale Netzwerke und Techniken maschinellen Lernens im Allgemeinen angewendet werden können.
  • Die oben beschriebenen beispielhaften neuronalen Netzwerke können zum Durchführen von tiefem Lernen verwendet werden. Tiefes Lernen ist maschinelles Lernen unter Verwendung von tiefen neuronalen Netzwerken. Die tiefen neuronalen Netzwerke, die beim tiefen Lernen verwendet werden, sind künstliche neuronale Netzwerke, die im Gegensatz zu flachen neuronalen Netzwerken, die nur eine einzige verborgene Schicht umfassen, aus mehreren verborgenen Schichten bestehen. Das Trainieren tieferer neuronaler Netzwerke ist im Allgemeinen rechenintensiver. Die zusätzlichen verborgenen Schichten des Netzwerks ermöglichen jedoch mehrstufige Mustererkennung, die zu geringeren Ausgabefehlern gegenüber Techniken für flaches maschinelles Lernen führt.
  • Tiefe neuronale Netzwerke, die beim tiefen Lernen verwendet werden, umfassen typischerweise ein Front-End-Netzwerk zum Durchführen von Merkmalserkennung, das mit einem Back-End-Netzwerk gekoppelt ist, das ein mathematisches Modell darstellt, das Operationen (z. B. Objektklassifizierung, Spracherkennung usw.) basierend auf der für das Modell bereitgestellten Merkmalsdarstellung durchführen kann. Tiefes Lernen ermöglicht ein Durchführen von maschinellem Lernen, ohne handgefertigtes Merkmalsengineering für das Modell durchführen zu müssen. Stattdessen können tiefe neuronale Netzwerke Merkmale basierend auf einer statistischen Struktur oder Korrelation innerhalb der Eingabedaten lernen. Die erlernten Merkmale können für ein mathematisches Modell bereitgestellt werden, das die erkannten Merkmale auf eine Ausgabe abbilden kann. Das mathematische Modell, das vom Netzwerk verwendet wird, ist im Allgemeinen auf die spezifische Aufgabe, die durchgeführt werden soll, spezialisiert, und es werden verschiedene Modelle zum Durchführen verschiedener Aufgaben verwendet.
  • Sobald das neuronale Netzwerk strukturiert ist, kann ein Lernmodell auf das Netzwerk angewendet werden, um das Netzwerk zum Durchführen spezifischer Aufgaben zu trainieren. Das Lernmodell beschreibt, wie die Gewichte innerhalb des Modells angepasst werden sollen, um den Ausgabefehler des Netzwerks zu reduzieren. Rückwärtspropagierung von Fehlern ist ein allgemeines Verfahren, das zum Trainieren von neuronalen Netzwerken verwendet wird. Ein Eingabevektor wird dem Netzwerk zur Verarbeitung präsentiert. Die Ausgabe des Netzwerks wird unter Verwendung einer Verlustfunktion mit der gewünschten Ausgabe verglichen, und für jedes der Neuronen in der Ausgabeschicht wird ein Fehlerwert berechnet. Die Fehlerwerte werden dann rückwärtspropagiert, bis jedes Neuron einen assoziierten Fehlerwert aufweist, der ungefähr seinen Beitrag zur ursprünglichen Ausgabe darstellt. Das Netzwerk kann dann unter Verwendung eines Algorithmus, wie beispielsweise des stochastischen Gradientenabstiegsalgorithmus, aus diesen Fehlern lernen, um die Gewichte des neuronalen Netzwerks zu aktualisieren.
  • 26 und 27 veranschaulichen ein beispielhaftes neuronales Faltungsnetzwerk. 26 veranschaulicht verschiedene Schichten innerhalb eines CNNs. Wie in 26 dargestellt, kann ein beispielhaftes CNN, das zum Modellieren von Bildverarbeitung verwendet wird, eine Eingabe 2602 empfangen, die Rot-, Grün- und Blau-(RGB-)Komponenten eines Eingangsbildes beschreibt. Die Eingabe 2602 kann durch mehrere Faltungsschichten (z. B. die Faltungsschicht 2604, die Faltungsschicht 2606) verarbeitet werden. Die Ausgabe aus den mehreren Faltungsschichten kann optional durch einen Satz von vollständig verbundenen Schichten 2608 verarbeitet werden. Neuronen in einer vollständig verbundenen Schicht haben vollständige Verbindungen zu allen Aktivierungen in der vorherigen Schicht, wie zuvor für ein vorwärtsgekoppeltes Netzwerk beschrieben. Die Ausgabe aus den vollständig verbundenen Schichten 2608 kann verwendet werden, um ein Ausgabeergebnis aus dem Netzwerk zu erzeugen. Die Aktivierungen innerhalb der vollständig verbundenen Schichten 2608 können unter Verwendung von Matrixmultiplikation anstelle von Faltung berechnet werden. Nicht alle CNN-Implementierungen machen von vollständig verbundenen Schichten Gebrauch. Zum Beispiel kann in einigen Implementierungen die Faltungsschicht 2606 eine Ausgabe für das CNN erzeugen.
  • Die Faltungsschichten sind spärlich verbunden, was sich von einer traditionellen Konfiguration eines neuronalen Netzwerks unterscheidet, die in den vollständig verbundenen Schichten 2608 zu finden ist. Schichten traditioneller neuronaler Netzwerke sind vollständig verbunden, derart dass jede Ausgabeeinheit mit jeder Eingabeeinheit interagiert. Die Faltungsschichten sind jedoch spärlich verbunden, da die Ausgabe der Faltung eines Feldes (anstelle des jeweiligen Zustandswerts eines jeden der Knoten im Feld) in die Knoten der nachfolgenden Schicht eingegeben wird, wie veranschaulicht. Die mit den Faltungsschichten assoziierten Kernels führen Faltungsoperationen durch, deren Ausgabe an die nächste Schicht gesendet wird. Die Reduzierung der Dimensionalität, die innerhalb der Faltungsschichten durchgeführt wird, ist ein Aspekt, der Skalierung des CNNs zum Verarbeiten großer Bilder ermöglicht.
  • 27 veranschaulicht beispielhafte Berechnungsstufen innerhalb einer Faltungsschicht eines CNNs. Eine Eingabe in eine Faltungsschicht 2712 eines CNN kann in drei Stufen einer Faltungsschicht 2714 verarbeitet werden. Die drei Stufen können eine Faltungsstufe 2716, eine Detektorstufe 2718 und eine Poolingstufe 2720 umfassen. Die Faltungsschicht 2714 kann dann Daten an eine nachfolgende Faltungsschicht ausgeben. Die letzte Faltungsschicht des Netzwerks kann Merkmalskarten-Ausgabedaten erzeugen oder eine Eingabe für eine vollständig verbundene Schicht bereitstellen, um zum Beispiel einen Klassifizierungswert für die Eingabe in das CNN zu erzeugen.
  • In der Faltungsstufe 2716 werden mehrere Faltungen parallel durchgeführt, um einen Satz von linearen Aktivierungen zu erzeugen. Die Faltungsstufe 2716 kann eine Affintransformation umfassen, die eine beliebige Transformation ist, die als lineare Transformation plus Translation spezifiziert werden kann. Affintransformationen umfassen Rotationen, Translationen, Skalierung und Kombinationen dieser Transformationen. Die Faltungsstufe berechnet die Ausgabe von Funktionen (z. B. Neuronen), die mit spezifischen Regionen in der Eingabe verbunden sind, die als die lokale Region bestimmt werden kann, die mit dem Neuron assoziiert ist. Die Neuronen berechnen ein Skalarprodukt zwischen den Gewichten der Neuronen und der Region in der lokalen Eingabe, mit der die Neuronen verbunden sind. Die Ausgabe aus der Faltungsstufe 2716 definiert einen Satz von linearen Aktivierungen, der von nachfolgenden Stufen der Faltungsschicht 2714 verarbeitet wird.
  • Die linearen Aktivierungen können von einer Detektorstufe 2718 verarbeitet werden. In der Detektorstufe 2718 wird jede lineare Aktivierung von einer nichtlinearen Aktivierungsfunktion verarbeitet. Die nichtlineare Aktivierungsfunktion verbessert die nichtlinearen Eigenschaften des Gesamtnetzwerks, ohne die rezeptiven Felder der Faltungsschicht zu beeinflussen. Es können mehrere Arten von nichtlinearen Aktivierungsfunktionen verwendet werden. Eine spezifische Art ist die gleichgerichtete lineare Einheit (ReLU - Rectified Linear Unit), die eine Aktivierungsfunktion verwendet, die als f(x) = max (0, x) definiert ist, derart dass der Schwellenwert der Aktivierung auf null gesetzt ist.
  • Die Poolingstufe 2720 verwendet eine Pooling-Funktion, welche die Ausgabe der Faltungsschicht 2706 durch eine zusammenfassende Statistik der benachbarten Ausgaben ersetzt. Die Pooling-Funktion kann zum Einführen von Translationsinvarianz in das neuronale Netzwerk verwendet werden, derart dass kleine Translationen der Eingabe die gepoolten Ausgaben nicht verändern. Invarianz einer lokalen Translation kann in Szenarien verwendet werden, in welchen das Vorhandensein eines Merkmals in den Eingabedaten wichtiger als die genaue Position des Merkmals ist. Es können verschiedene Arten von Pooling-Funktionen während der Poolingstufe 2720 verwendet werden, darunter max-Pooling, average-Pooling und L2-Norm-Pooling. Außerdem umfassen einige CNN-Implementierungen keine Poolingstufe. Stattdessen ersetzen solche Implementierungen sie durch eine zusätzliche Faltungsstufe mit einem vergrößerten Schritt in Bezug auf die vorherigen Faltungsstufen.
  • Die Ausgabe aus der Faltungsschicht 2714 kann dann von der nächsten Schicht 2722 verarbeitet werden. Die nächste Schicht 2722 kann eine zusätzliche Faltungsschicht oder eine der vollständig verbundenen Schichten 2708 sein. Zum Beispiel kann die erste Faltungsschicht 2704 von 27 an die zweite Faltungsschicht 2706 ausgeben, währen die zweite Faltungsschicht an eine erste Schicht der vollständig verbundenen Schichten 2808 ausgeben kann.
  • 28 veranschaulicht ein beispielhaftes rekurrentes neuronales Netzwerk 2800. In einem rekurrenten neuronalen Netzwerk (RNN) beeinflusst der vorherige Zustand des Netzwerks die Ausgabe des aktuellen Zustands des Netzwerks. RNNs können in den verschiedensten Formen unter Verwendung einer Vielzahl von Funktionen aufgebaut sein. Die Verwendung von RNNs dreht sich im Allgemeinen um die Verwendung von mathematischen Modellen zum Vorhersagen der Zukunft basierend auf einer früheren Sequenz von Eingaben. Zum Beispiel kann ein RNN zum Durchführen von statistischer Sprachmodellierung zum Vorhersagen eines bevorstehenden Wortes in Anbetracht einer vorherigen Sequenz von Wörtern verwendet werden. Das veranschaulichte RNN 2800 kann so beschrieben werden, dass es eine Eingabeschicht 2802, die einen Eingabevektor empfängt, verborgene Schichten 2804 zum Implementieren einer rekurrenten Funktion, einen Rückkopplungsmechanismus 2805 zum Ermöglichen einer „Erinnerung“ an vorherige Zustände 2806 und eine Ausgabeschicht zum Ausgeben eines Ergebnisses aufweist. Das RNN 2800 funktioniert auf der Basis von Zeitschritten. Der Zustand des RNNs in einem gegebenen Zeitschritt wird basierend auf dem vorherigen Zeitschritt über den Rückkopplungsmechanismus 2805 beeinflusst. Für einen gegebenen Zeitschritt wird der Zustand der verborgenen Schichten 2804 durch den vorherigen Zustand und die Eingabe im aktuellen Zeitschritt definiert. Eine anfängliche Eingabe (x1) in einem ersten Zeitschritt kann durch die verborgene Schicht 2804 verarbeitet werden. Eine zweite Eingabe (x2) kann von der verborgenen Schicht 2804 unter Verwendung von Zustandsinformationen verarbeitet werden, die während der Verarbeitung der anfänglichen Eingabe (x1) bestimmt werden. Ein gegebener Zustand kann als s_t = f(Ux_t + Ws_(t - 1)) berechnet werden, wobei U und W Parametermatrizen sind. Die Funktion f ist im Allgemeinen eine Nichtlinearität, wie beispielsweise die hyperbolische Tangentenfunktion (Tanh) oder eine Variante der Gleichrichterfunktion f(x) = max (0, x). Die spezifische mathematische Funktion, die in den verborgenen Schichten 2804 verwendet wird, kann jedoch in Abhängigkeit von den spezifischen Implementierungsdetails des RNNs 2800 variieren.
  • Zusätzlich zu den beschriebenen Basis-CNN und -RNN-Netzwerken können Varianten dieser Netzwerke ermöglicht werden. Eine beispielhafte RNN-Variante ist das RNN mit langem Kurzzeitgedächtnis (LSTM - Long Short-Term Memory). LSTM-RNNs sind zum Lernen von Langzeitabhängigkeiten imstande, die zum Verarbeiten längerer Sprachsequenzen notwendig sein können. Eine Variante des CNNs ist ein Deep-Believe-Faltungsnetzwerk, das eine ähnliche Struktur wie ein CNN hat und auf ähnliche Weise wie ein Deep-Belief-Netzwerk trainiert wird. Ein Deep-Belief-Netzwerk (DBN) ist ein generatives neuronales Netzwerk, das aus mehreren Schichten stochastischer (Zufalls-) Variablen besteht. DBNs können Schicht für Schicht unter Verwendung von gierigem unüberwachtem Lernen trainiert werden. Die erlernten Gewichte des DBNs können dann durch Bestimmen eines optimalen anfänglichen Satzes von Gewichten für das neuronale Netzwerk zum Bereitstellen von neuronalen Vortrainings-Netzwerken verwendet werden.
  • 29 veranschaulicht Training und Bereitstellung eines tiefen neuronalen Netzwerks. Sobald ein gegebenes Netzwerk für eine Aufgabe strukturiert wurde, wird das neuronale Netzwerk unter Verwendung eines Trainingsdatensatzes 2902 trainiert. Verschiedene Trainingsframeworks 2904 wurden zum Ermöglichen von Hardwarebeschleunigung des Trainingsprozesses entwickelt. Zum Beispiel kann das oben beschriebene Framework für maschinelles Lernen als Trainingsframework konfiguriert werden. Das Trainingsframework 2904 kann in ein untrainiertes neuronales Netzwerk 2906 einhaken und ermöglichen, dass das untrainierte neuronale Netzwerk unter Verwendung der hierin beschriebenen Parallelverarbeitungsressourcen trainiert wird, um ein trainiertes neuronales Netzwerk 2908 zu erzeugen.
  • Zum Starten des Trainingsprozesses können die anfänglichen Gewichte nach dem Zufallsprinzip oder durch Vortraining unter Verwendung eines Deep-Belief-Netzwerks gewählt werden. Der Trainingszyklus kann dann entweder in überwachter oder unüberwachter Weise durchgeführt werden.
  • Überwachtes Lernen ist ein Lernverfahren, wobei Training als eine vermittelte Operation durchgeführt wird, wie beispielsweise wenn der Trainingsdatensatz 2902 eine Eingabe umfasst, die mit der gewünschten Ausgabe für die Eingabe gepaart ist, oder wobei der Trainingsdatensatz eine Eingabe mit einer bekannten Ausgabe umfasst und die Ausgabe des neuronalen Netzwerks manuell klassifiziert wird. Das Netzwerk verarbeitet die Eingaben und vergleicht die resultierenden Ausgaben mit einem Satz von erwarteten oder gewünschten Ausgaben. Fehler werden dann durch das System rückwärtspropagiert. Das Trainingsframework 2904 kann anpassen, um die Gewichte anzupassen, die das untrainierte neuronale Netzwerk 2906 steuern. Das Trainingsframework 2904 kann Werkzeuge bereitstellen, um zu überwachen, wie gut das untrainierte neuronale Netzwerk 2906 sich einem Modell annähert, das zum Erzeugen korrekter Antworten basierend auf bekannten Eingabedaten geeignet ist. Der Trainingsprozess findet wiederholt statt, da die Gewichte des Netzwerks angepasst werden, um die durch das neuronale Netzwerk gebildete Ausgabe zu verfeinern. Der Trainingsprozess kann fortfahren, bis das neuronale Netzwerk eine statistisch erwünschte Genauigkeit erreicht, die mit einem trainierten neuronalen Netzwerk 2908 assoziiert ist. Das trainierte neuronale Netzwerk 2908 kann dann zum Implementieren einer beliebigen Anzahl von maschinellen Lernoperationen bereitgestellt werden.
  • Unüberwachtes Lernen ist ein Lernverfahren, wobei das Netzwerk unter Verwendung von unbeschrifteten Daten versucht, sich selbst zu trainieren. Demnach umfasst der Trainingsdatensatz 2902 für unüberwachtes Lernen Eingabedaten ohne jegliche assoziierte Ausgabedaten. Das untrainierte neuronale Netzwerk 2906 kann Gruppierungen innerhalb der unbeschrifteten Eingabe lernen, und es kann bestimmen, wie einzelne Eingaben mit dem gesamten Datensatz in Beziehung stehen. Unüberwachtes Training kann zum Erzeugen einer selbstorganisierenden Karte verwendet werden, die eine Art von trainiertem neuronalem Netzwerk 2907 ist, das zum Durchführen von Operationen imstande ist, die beim Reduzieren der Dimensionalität von Daten nützlich sind. Unüberwachtes Training kann auch zum Durchführen von Anomalieerkennung verwendet werden, welche die Identifizierung von Datenpunkten in einem Eingabedatensatz ermöglicht, die vom normalen Muster der Daten abweichen.
  • Es können auch Varianten von überwachtem und unüberwachtem Training eingesetzt werden. Halbüberwachtes Lernen ist eine Technik, wobei der Trainingsdatensatz 2902 eine Mischung aus beschrifteten und unbeschrifteten Daten derselben Verteilung umfasst. Inkrementelles Lernen ist eine Variante des überwachten Lernens, wobei Eingabedaten kontinuierlich zum Weitertrainieren des Modells verwendet werden. Inkrementelles Lernen befähigt das trainierte neuronale Netzwerk 2908, sich an die neue Daten 2912 anzupassen, ohne das dem Netzwerk während des Anfangstrainings eingeflößte Wissen zu vergessen.
  • Ob überwacht oder unüberwacht, der Trainingsprozess kann für besonders tiefe neuronale Netzwerke zu rechenintensiv für einen einzigen Rechenknoten sein. Statt einen einzigen Rechenknoten zu verwenden, kann ein verteiltes Netzwerk von Rechenknoten zum Beschleunigen des Trainingsprozess verwendet werden.
  • 30A ist ein Blockdiagramm, das verteiltes Lernen veranschaulicht. Verteiltes Lernen ist ein Trainingsmodell, das mehrere verteilte Rechenknoten, wie beispielsweise die oben beschriebenen Knoten, zum Durchführen überwachten oder unüberwachten Trainings eines neuronalen Netzwerks verwendet. Die verteilten Rechenknoten können jeweils einen oder mehrere Hostprozessoren und einen oder mehrere der Universalverarbeitungsknoten, wie beispielsweise eine hochparallele Universal-Grafikverarbeitungseinheit, umfassen. Wie veranschaulicht, kann verteiltes Lernen bei Modellparallelität 3002, Datenparallelität 3004 oder einer Kombination von Modell- und Datenparallelität durchgeführt werden.
  • Bei der Modellparallelität 3002 können verschiedene Rechenknoten in einem verteilten System Trainingsberechnungen für verschiedene Teile eines einzigen Netzwerks durchführen. Zum Beispiel kann jede Schicht eines neuronalen Netzwerks durch einen verschiedenen Verarbeitungsknoten des verteilten Systems trainiert werden. Die Vorteile der Modellparallelität umfassen die Fähigkeit zur Skalierung auf besonders große Modelle. Ein Teilen der Berechnungen, die mit verschiedenen Schichten des neuronalen Netzwerks assoziiert sind, ermöglicht das Trainieren von sehr großen neuronalen Netzwerken, in welchen die Gewichte aller Schichten nicht in den Speicher eines einzigen Rechenknoten passen würden. In einigen Fällen kann Modellparallelität insbesondere beim Durchführen von überwachtem Training großer neuronaler Netzwerke verwendet werden.
  • Bei der Datenparallelität 3004 weisen die verschiedenen Knoten des verteilten Netzwerks eine vollständige Instanz des Modells auf, und jeder Knoten empfängt einen anderen Teil der Daten. Die Ergebnisse von den verschiedenen Knoten werden dann kombiniert. Obwohl verschiedene Ansätze für Datenparallelität möglich sind, erfordern die Ansätze von Datenparalleltraining allesamt eine Technik des Kombinierens von Ergebnissen und Synchronisieren der Modellparameter zwischen jedem Knoten. Beispielhafte Ansätze zum Kombinieren von Daten umfassen Datenparallelität auf der Basis von Mittelung und Aktualisierung von Parametern. Parametermittelung trainiert jeden Knoten auf einen Teilsatz der Trainingsdaten und setzt die globalen Parameter (z. B. Gewichte, Bias) auf den Mittelwert der Parameter von jedem Knoten. Parametermittelung verwendet einen zentralen Parameterserver, der die Parameterdaten verwaltet. Aktualisierungsbasierte Datenparallelität ähnelt der Parametermittelung mit der Ausnahme, dass statt des Übertragens von Parametern von den Knoten an den Parameterserver die Aktualisierungen an das Modell übertragen werden. Außerdem kann aktualisierungsbasierte Datenparallelität auf dezentrale Weise durchgeführt werden, wobei Aktualisierungen komprimiert und zwischen Knoten übertragen werden.
  • Kombinierte Modell- und Datenparallelität 3006 kann zum Beispiel in einem verteilten System implementiert werden, in welchem jeder Rechenknoten mehrere GPUs umfasst. Jeder Knoten kann eine vollständige Instanz des Modells aufweisen, wobei separate GPUs innerhalb eines jeden Knotens zum Trainieren verschiedener Teile des Modells verwendet werden.
  • Verteiltes Training weist erhöhten Overhead in Bezug auf Training auf einer einzigen Maschinen auf. Die hierin beschriebenen Parallelprozessoren und -GPGPUs können jedoch verschiedene Techniken zum Reduzieren des Overheads verteilten Trainings, einschließlich Techniken zum Ermöglichen von GPU-zu-GPU-Datenübertragung mit hoher Bandbreite und beschleunigter Remote-Datensynchronisierung, implementieren.
  • Beispielhafte Anwendungen maschinellen Lernens
  • Maschinelles Lernen kann zum Lösen einer Vielzahl von technischen Problemen angewendet werden, einschließlich maschinellen Sehens, autonomen Fahrens und autonomer Navigation, Spracherkennung und Sprachverarbeitung, ohne darauf beschränkt zu sein. Maschinelles Sehen war traditionellerweise einer der aktivsten Forschungsbereiche für Anwendungen maschinellen Lernens. Anwendungen maschinellen Sehens reichen vom Nachbilden menschlicher Sehfähigkeiten, wie beispielsweise Gesichtserkennung, bis hin zum Erzeugen neuer Kategorien visueller Fähigkeiten. Zum Beispiel können Anwendungen maschinellen Sehens zum Erkennen von Schallwellen aus Schwingungen konfiguriert werden, die in Objekten induziert werden, die in einem Video sichtbar sind. Parallelprozessbeschleunigtes maschinelles Lernen ermöglicht das Trainieren von Anwendungen maschinellen Sehens unter Verwendung von wesentlich größeren Trainingssätzen, als dies früher möglich war, und ermöglicht die Bereitstellung von Inferenzsystemen unter Verwendung von Parallelprozessoren mit niedrigem Leistungsverbrauch.
  • Parallelprozessbeschleunigtes maschinelles Lernen findet Anwendung beim autonomen Fahren, einschließlich Fahrspur- und Verkehrszeichenerkennung, Hindernisvermeidung, Navigation und Antriebssteuerung. Techniken beschleunigten maschinellen Lernens können zum Trainieren von Fahrmodellen basierend auf Datensätzen verwendet werden, welche die geeigneten Antworten auf spezifische Trainingseingaben definieren. Die hierin beschriebenen Parallelprozessoren können schnelles Trainieren der zunehmend komplexeren neuronalen Netzwerke ermöglichen, die für Lösungen autonomen Fahrens verwendet werden, und sie ermöglichen die Bereitstellung von Inferenzprozessoren mit niedrigem Leistungsverbrauch in einer Mobilplattform, die zur Integration in autonomen Fahrzeugen geeignet sind.
  • Parallelprozessorbeschleunigte tiefe neuronale Netzwerke haben Ansätze maschinellen Lernens für automatische Spracherkennung (ASR - Automatic Speech Recognition) ermöglicht. ASR umfasst die Erzeugung einer Funktion, welche in Anbetracht einer akustischen Eingabesequenz die wahrscheinlichste Sprachsequenz berechnet. Beschleunigtes maschinelles Lernen unter Verwendung von tiefen neuronalen Netzwerken ermöglichte die Ersetzung des verdeckten Markow-Modells (HMM) und Gaußscher Mischmodelle, die früher für ASR verwendet wurden.
  • Parallelprozessorbeschleunigtes maschinelles Lernen kann auch zum Beschleunigen der Verarbeitung natürlicher Sprache verwendet werden. Prozeduren automatischen Lernens können von statistischen Inferenzalgorithmen Gebrauch machen, um Modelle zu erzeugen, die gegen fehlerhafte oder ungewohnte Eingaben robust sind. Beispielhafte Prozessoranwendungen natürlicher Sprache umfassen automatische Maschinenübersetzung zwischen menschlichen Sprachen.
  • Die Parallelverarbeitungsplattformen, die für maschinelles Lernen verwendet werden, können in Trainingsplattformen und Bereitstellungsplattformen unterteilt werden. Trainingsplattformen sind im Allgemeinen hochparallel und umfassen Optimierungen zum Beschleunigen von Mehrfach-GPU-Einzelknoten-Training und Mehrfachknoten-Mehrfach-GPU-Training. Beispielhafte Parallelprozessoren, die zum Trainieren geeignet sind, umfassen die hochparallele Universal-Grafikverarbeitungseinheit und/oder die Mehrfach-GPU-Computersysteme, die hierin beschrieben werden. Bereitgestellte Plattformen für maschinelles Lernen umfassen hingegen im Allgemeinen Parallelprozessoren mit niedrigerer Leistung, die zur Verwendung in solchen Produkten wie Kameras, autonomen Robotern und autonomen Fahrzeugen geeignet sind.
  • 30B veranschaulicht einen beispielhaften Inferenz-Systemchip (SOC) 3100, der zum Durchführen von Inferenz unter Verwendung eines Trainingsmodells geeignet ist. Die Elemente von 30B, welche die gleichen oder ähnliche Bezeichnungen wie die Elemente in irgendeiner anderen Figur haben, beschreiben die gleichen Elemente wie in den anderen Figuren, können in einer ähnlichen Weise wie diese arbeiten oder funktionieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jenen verknüpft sein, die hierin an anderer Stelle beschrieben werden, ohne darauf beschränkt zu sein. Der SOC 3100 kann Verarbeitungskomponenten umfassen, die einen Medienprozessor 3102, einen Sehprozessor 3104, eine GPGPU 3106 und einen Mehrkernprozessor 3108 umfassen. Der SOC 3100 kann zusätzlich einen On-Chip-Speicher 3105 umfassen, der einen gemeinsamen On-Chip-Datenpool ermöglichen kann, auf den jede der Verarbeitungskomponenten zugreifen kann. Die Verarbeitungskomponenten können für Betrieb mit niedriger Leistung optimiert sein, um Bereitstellung für eine Vielzahl von Plattformen für maschinelles Lernen zu ermöglichen, einschließlich autonomer Fahrzeuge und autonomer Roboter. Zum Beispiel kann eine Implementierung des SOCs 3100 als Teil des Hauptsteuersystems für ein autonomes Fahrzeug verwendet werden. Wenn der SOC 3100 zur Verwendung in autonomen Fahrzeugen konfiguriert wird, wird der SOC zur Erfüllung der relevanten Funktionssicherheitsstandards der Gerichtsbarkeit im Bereitstellungsgebiet entworfen und konfiguriert.
  • Während des Betriebs arbeiten der Medienprozessor 3102 und der Sehprozessor 3104 zum Beschleunigen maschineller Sehoperationen zusammen. Der Medienprozessor 3102 kann Decodierung niedriger Latenz von mehreren Videoströmen hoher Auflösung (z. B. 4K, 8K) ermöglichen. Die decodierten Videoströme können in einen Puffer im On-Chip-Speicher 3105 geschrieben werden. Der Sehprozessor 3104 kann dann das decodierte Video parsen und einleitende Verarbeitungsoperationen an den Frames des decodierten Videos zur Vorbereitung der Verarbeitung der Frames unter Verwendung eines trainierten Bilderkennungsmodells durchführen. Zum Beispiel kann der Sehprozessor 3104 Faltungsoperationen für ein CNN beschleunigen, das zum Durchführen von Bilderkennung an den hochauflösenden Videodaten verwendet wird, während Back-End-Modellberechnungen durch die GPGPU 3106 durchgeführt werden.
  • Der Mehrkernprozessor 3108 kann Steuerlogik um zum Unterstützen von Sequenzierung und Synchronisierung von Datenübertragungen und gemeinsamen Speicheroperationen umfassen, die vom Medienprozessor 3102 und dem Sehprozessor 3104 durchgeführt werden. Der Mehrkernprozessor 3108 kann außerdem als Anwendungsprozessor zum Ausführen von Softwareanwendungen fungieren, die von der Inferenzberechnungsfähigkeit der GPGPU 3106 Gebrauch machen können. Zum Beispiel kann wenigstens ein Teil der Navigations- und Ansteuerlogik in Software implementiert sein, die auf dem Mehrkernprozessor 3108 ausgeführt wird. Solch eine Software kann Berechnungs-Workloads direkt an die GPGPU 3106 ausgeben, oder die Berechnungs-Workloads können an den Mehrkernprozessor 3108 ausgegeben werden, der wenigstens einen Teil dieser Operationen an die GPGPU 3106 abwälzen kann.
  • Die GPGPU 3106 kann Verarbeitungscluster, wie beispielsweise eine Niederleistungskonfiguration der Verarbeitungscluster DPLAB06A-DPLAB06H innerhalb der hochparallelen Universal-Grafikverarbeitungseinheit DPLAB00, umfassen. Die Verarbeitungscluster innerhalb der GPGPU 3106 können Anweisungen unterstützen, die insbesondere zum Durchführen von Inferenzberechnungen am trainierten neuronalen Netzwerk optimiert sind. Zum Beispiel kann die GPGPU 3106 Anweisungen zum Durchführen von Berechnungen niedriger Genauigkeit, wie beispielsweise 8-Bit- und 4-Bit-Ganzzahlvektoroperationen, unterstützen.
  • STRAHLVERFOLGUNGSARCHITEKTUR
  • In einer Implementierung umfasst der Grafikprozessor Schaltungsanordnung und/oder Programmcode zum Durchführen von Echtzeit-Strahlverfolgung. Ein dedizierter Satz von Strahlverfolgungskernen kann im Grafikprozessor enthalten sein, um die verschiedenen hierin beschriebenen Strahlverfolgungsoperationen, einschließlich Strahltraversierungs- und/oder Strahlintersektionsoperationen, durchzuführen. Zusätzlich zu den Strahlverfolgungskernen können auch mehrere Sätze von Grafikverarbeitungskernen zum Durchführen von programmierbaren Schattierungsoperationen und mehrere Sätze von Tensorkernen zum Durchführen von Matrixoperationen an Tensor-Daten enthalten sein.
  • 31 veranschaulicht einen beispielhaften Teil einer solchen Grafikverarbeitungseinheit (GPU) 3105, die dedizierte Sätze von Grafikverarbeitungsressourcen umfasst, die in Mehrkerngruppen 3100A-N angeordnet sind. Die Grafikverarbeitungseinheit (GPU) 3105 kann eine Variante des Grafikprozessors 300, der GPGPU 1340 und/oder eines beliebigen anderen hierin beschriebenen Grafikprozessors sein. Daher offenbart die Offenbarung jeglicher Merkmale für Grafikprozessoren auch eine entsprechende Kombination mit der GPU 3105, ohne darauf beschränkt zu sein. Außerdem beschreiben die Elemente von 31, welche die gleichen oder ähnliche Bezeichnungen wie die Elemente in irgendeiner anderen Figur haben, die gleichen Elemente wie in den anderen Figuren, können in einer ähnlichen Weise wie diese arbeiten oder funktionieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jenen verknüpft sein, die hierin an anderer Stelle beschrieben werden, ohne darauf beschränkt zu sein. Obwohl nur die Details einer einzigen Mehrkerngruppe 3100A bereitgestellt werden, versteht es sich, dass die anderen Mehrkerngruppen 3100B-N mit den gleichen oder ähnlichen Sätzen von Grafikverarbeitungsressourcen ausgestattet sein können.
  • Wie veranschaulicht, kann eine Mehrkerngruppe 3100A einen Satz von Grafikkernen 3130, einen Satz von Tensorkernen 3140 und einen Satz von Strahlverfolgungskernen 3150 umfassen. Ein Scheduler/Verteiler 3110 disponiert und verteilt die Grafik-Threads zur Ausführung auf den verschiedenen Kernen 3130, 3140, 3150. Ein Satz von Registerdateien 3120 speichert Operanden-Werte, die von den Kernen 3130, 3140, 3150 beim Ausführen der Grafik-Threads verwendet werden. Diese können zum Beispiel Ganzzahlregister zum Speichern von Ganzzahlwerten, Gleitkommaregister zum Speichern von Gleitkommawerten, Vektor-Register zum Speichern von gepackten Datenelementen (Ganzzahl- und/oder Gleitkomma-Datenelementen) und Kachelregister zum Speichern von Tensor-/Matrixwerten umfassen. Die Kachelregister können als kombinierte Sätze von Vektor-Registern implementiert sein.
  • Ein oder mehrere Caches der Ebene 1 (L1) und eine oder mehrere Textureinheiten 3160 speichern Grafikdaten, wie beispielsweise Texturdaten, Vertex-Daten, Pixeldaten, Strahldaten, Begrenzungsvolumendaten usw. lokal innerhalb jeder Mehrkerngruppe 3100A. Eine Cache der Ebene 2 (L2) 3180, der von allen oder einem Teilsatz der Mehrkerngruppen 3100A-N gemeinsam genutzt wird, speichert Grafikdaten und/oder Grafikanweisungen für mehrere gleichzeitige Grafik-Threads. Wie veranschaulicht, kann der L2-Cache 3180 über eine Mehrzahl von Mehrkerngruppen 3100A-N gemeinsam genutzt werden. Eine oder mehrere Speichersteuerungen 3170 koppeln die GPU 3105 mit einem Speicher 3198, der ein Systemspeicher (z. B. DRAM) und/oder ein dedizierter Grafikspeicher (z. B. GDDR6-Speicher) sein kann.
  • Eine Eingabe-/Ausgabe-(E-/A-)Schaltungsanordnung 3195 koppelt die GPU 3105 mit einer oder mehreren E-/A-Vorrichtungen 3195, wie beispielsweise Digitalsignalprozessoren (DSP), Netzwerksteuerungen oder Benutzereingabevorrichtungen. Ein On-Chip-Interconnect kann zum Koppeln der E-/A-Vorrichtungen 3190 mit der GPU 3105 und dem Speicher 3198 verwendet werden. Eine oder mehrere E-/A-Speicherverwaltungseinheiten (IOMMU - I/O Memory Management Unit) 3170 der E-/A-Schaltungsanordnung 3195 koppeln die E-/A-Vorrichtungen 3190 direkt mit dem Systemspeicher 3198. Die IOMMU 3170 kann mehrere Sätze von Seitentabellen zum Abbilden von virtuellen Adressen auf physische Adressen im Systemspeicher 3198 verwalten. Außerdem können die E-/A-Vorrichtungen 3190, die CPU(s) 3199 und die GPU(s) 3105 sich denselben virtuellen Adressraum teilen.
  • Die IOMMU 3170 kann außerdem Virtualisierung unterstützen. In diesem Fall kann sie einen ersten Satz von Seitentabellen zum Abbilden von virtuellen Gast-/Grafik-Adressen auf physische Gast-/Grafik-Adressen und einen zweiten Satz von Seitentabellen zum Abbilden der physischen Gast-/Grafik-Adressen auf physische System-/Host-Adressen (z. B. innerhalb des Systemspeichers 3198) verwalten. Die Basisadressen eines jeden des ersten und des zweiten Satzes von Seitentabellen können in Steuerregistern gespeichert und bei einem Kontextwechsel ausgelagert werden (so dass z. B. der neue Kontext mit Zugriff auf den relevanten Satz von Seitentabellen versehen wird). Obwohl in 31 nicht dargestellt, können jeder der Kerne 3130, 3140, 3150 und/oder jede der Mehrkerngruppen 3100A-N Übersetzungsvorgriffspuffer (TLBs) zum Zwischenspeichern von Übersetzungen Gast virtuell in Gast physisch, Übersetzungen von Gast physisch in Host physisch und Übersetzungen von Gast virtuell in Host physisch umfassen.
  • Die CPUs 3199, die GPUs 3105 und die E-/A-Vorrichtungen 3190 können auf einem einzigen Halbleiterchip und/oder Chip-Package integriert sind. Der veranschaulichte Speicher 3198 kann auf demselben Chip integriert oder über eine chipexterne Schnittstelle mit den Speichersteuerungen 3170 gekoppelt sein. In einer Implementierung umfasst der Speicher 3198 einen GDDR6-Speicher, der sich denselben virtuellen Adressraum mit anderen physischen Speicher auf Systemebene teilt, obwohl die zugrundeliegenden Prinzipien der Erfindung nicht auf diese spezifische Implementierung beschränkt sind.
  • Die Tensorkerne 3140 können eine Mehrzahl von Ausführungseinheiten umfassen, die speziell zum Durchführen von Matrixoperationen ausgelegt sind, wobei es sich um die grundlegende Rechenoperation handelt, die zum Durchführen von Operationen tiefen Lernens verwendet wird. Zum Beispiel können simultane Matrixmultiplikationsoperationen für Training und Inferenzierung neuronaler Netzwerke verwendet werden. Die Tensorkerne 3140 können Matrixverarbeitung unter Verwendung einer Vielzahl von Operanden-Genauigkeiten, darunter Gleitkomma einfacher Genauigkeit (z. B. 32 Bits), Gleitkomma halber Genauigkeit (z. B. 16 Bits), Ganzzahlwörter (16 Bits), Bytes (8 Bits) und Halbbytes (4 Bits), durchführen. Eine Implementierung eines neuronalen Netzwerks kann außerdem Merkmale jeder gerenderten Szene extrahieren und möglicherweise Details von mehreren Frames kombinieren, um ein Endbild hoher Qualität zu erstellen.
  • In Implementierungen für tiefes Lernen kann parallele Matrixmultiplikationsarbeit zur Ausführung auf den Tensorkernen 3140 disponiert werden. Das Training von neuronalen Netzwerken insbesondere erfordert eine erhebliche Anzahl von Matrix-Skalarproduktoperationen. Um eine Formulierung eines inneren Produkts einer N x N x N-Matrixmultiplikation zu verarbeiten, können die Tensorkerne 3140 mindestens N Skalarprodukt-Verarbeitungselemente umfassen. Vor Beginn der Matrixmultiplikation wird eine vollständige Matrix in Kachelregister geladen, und mindestens eine Spalte einer zweiten Matrix wird jeden Zyklus für N Zyklen geladen. Jeden Zyklus gibt es N Skalarprodukte, die verarbeitet werden.
  • Matrixelemente können in Abhängigkeit von der spezifischen Implementierung in verschiedenen Genauigkeiten gespeichert werden, darunter 16-Bit-Wörter, 8-Bit-Bytes (z. B. INT8) und 4-Bit-Halbbytes (z. B. INT4). Verschiedene Genauigkeitsmodi können für die Tensorkerne 3140 spezifiziert werden, um sicherzustellen, dass die effizienteste Genauigkeit für verschiedene Workloads verwendet wird (z. B. Inferenzieren von Workloads, die Quantisierung von Bytes und Halbbytes tolerieren können).
  • Die Strahlverfolgungskerne 3150 können zum Beschleunigen von Strahlverfolgungsoperationen sowohl für Echtzeit-Strahlverfolgungs- als auch Nicht-Echtzeit-Strahlverfolgungsimplementierungen verwendet werden. Insbesondere können die Strahlverfolgungskerne 3150 Strahltraversierungs-/-intersektionsschaltungsanordnung zum Durchführen von Strahltraversierung unter Verwendung von Begrenzungsvolumenhierarchien (BVHs) und Identifizieren von Intersektionen zwischen Strahlen und Primitiven umfassen, die innerhalb der BVH-Volumina eingeschlossen sind. Die Strahlverfolgungskerne 3150 können außerdem Schaltungsanordnung zum Durchführen von Tiefenprüfung und Culling (z. B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) umfassen. In einer Ausführungsform führen die Strahlverfolgungskerne 3150 Traversierungs- und Intersektionsoperationen zusammen mit hierin beschriebenen Bild-Entrauschungstechniken durch, von welchen wenigstens ein Teil auf den Tensorkernen 3140 ausgeführt wird. Zum Beispiel können die Tensorkerne 3140 ein neuronales Netzwerk für tiefes Lernen zum Durchführen von Entrauschung von Frames implementieren, die durch die Strahlverfolgungskerne 3150 erzeugt werden. Die CPU(s) 3199, die Grafikkerne 3130, und/oder die Strahlverfolgungskerne 3150 können jedoch ebenfalls alle oder einen Teil der Algorithmen für Entrauschung und/oder tiefes Lernen implementieren.
  • Wie bereits erwähnt, kann außerdem eine verteilte Lösung zum Entrauschen eingesetzt werden, wobei die GPU 3105 in einer Computervorrichtung ist, die über ein Netzwerk oder einen Hochgeschwindigkeits-Interconnect mit anderen Computervorrichtungen gekoppelt ist. Die miteinander verbundenen Computervorrichtungen können Lern-/Trainingsdaten für neuronale Netzwerke zum Verbessern der Geschwindigkeit, mit welcher das Gesamtsystem lernt, Entrauschung für verschiedene Typen von Bildframes und/oder verschiedene Grafikanwendungen durchzuführen, gemeinsam nutzen.
  • Die Strahlverfolgungskerne 3150 können alle BVH-Traversierungen und Strahl-Primitiv-Intersektionen verarbeiten und Bewahren die Grafikkerne 3130 davor, mit Tausenden Anweisungen pro Strahl überlastet zu werden. Jeder Strahlverfolgungskern 3150 kann einen ersten Satz von spezialisierten Schaltungen zum Durchführen von Begrenzungsrahmentests (z. B. für Traversierungsoperationen) und einen zweiten Satz von spezialisierten Schaltungen zum Durchführen von Strahl-Dreieck-Intersektionstests (z. B. Intersektionsstrahlen, die traversiert wurden) umfassen. Demnach kann die Mehrkerngruppe 3100A einfach eine Strahlsonde starten, und die Strahlverfolgungskerne 3150 können unabhängig Strahlverfolgung und -intersektion durchführen und Trefferdaten (z. B. ein Treffer, kein Treffer, mehrere Treffer usw.) an den Thread-Kontext zurückliefern. Die anderen Kerne 3130, 3140 können davon befreit sein, andere Grafik- oder Rechenarbeiten durchzuführen, während die Strahlverfolgungskerne 3150 die Traversierungs- und Schneidoperationen durchführen.
  • Jeder Strahlverfolgungskern 3150 kann eine Traversierungseinheit zum Durchführen von BVH-Testoperationen und eine Intersektionseinheit umfassen, die Strahl-Primitiv-Intersektionstests durchführt. Die Intersektionseinheit kann dann eine Antwort „Treffer“, „kein Treffer“ oder „Mehrfachtreffer“ erzeugen, die sie für den entsprechenden Thread bereitstellt. Während der Traversierungs- und Intersektionsoperationen können die Ausführungsressourcen der anderen Kerne (z. B. Grafikkerne 3130 und Tensorkerne 3140) freigestellt werden, um andere Formen von Grafikarbeit durchzuführen.
  • Es kann auch ein hybrider Rasterungs-/Strahlverfolgungsansatz verwendet werden, wobei Arbeit zwischen den Grafikkernen 3130 und den Strahlverfolgungskernen 3150 verteilt wird.
  • Die Strahlverfolgungskerne 3150 (und/oder andere Kerne 3130, 3140) können Hardwareunterstützung für einen Strahlverfolgungsanweisungssatz, wie beispielsweise DirectX Ray Tracing (DXR) von Microsoft, umfassen, der einen DispatchRays-Befehl (Strahlenverteilen-Befehl) sowie Strahlerzeugungs-, Nächstgelegener-Treffer-, Jeder-Treffer und Fehler-Shader umfasst, welche die Zuordnung von eindeutigen Sätzen von Shadern und Texturen für jedes Objekt ermöglichen. Eine andere Strahlverfolgungsplattform, die durch die Strahlverfolgungskerne 3150, die Grafikkerne 3130 und die Tensorkerne 3140 unterstützt werden kann, ist Vulkan 1.1.85. Es ist jedoch zu beachten, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf eine spezifische Strahlverfolgungs-ISA beschränkt sind.
  • Im Allgemeinen können die verschiedenen Kerne 3150, 3140, 3130 einen Strahlverfolgungsanweisungssatz unterstützen, der Anweisungen/Funktion für Strahlerzeugung, Nächstgelegener Treffer, Jeder Treffer, Strahl-Primitiv-Intersektionen, Pro-Primitiv- und hierarchischen Begrenzungsrahmenaufbau, Fehler, Besuch und Ausnahmen umfasst. Genauer gesagt können Strahlverfolgungsanweisungen zum Ausführen der folgenden Funktionen enthalten sein:
    • Strahlerzeugung - Strahlerzeugungsanweisungen können für jedes Pixel, jeden Abtastwert oder jede andere benutzerdefinierte Arbeitszuordnung ausgeführt werden.
    • Nächstgelegener Treffer - Eine Nächstgelegener-Treffer-Anweisung kann zum Lokalisieren des nächstgelegenen Intersektionspunkts eines Strahls mit Primitiven innerhalb einer Szene ausgeführt werden.
    • Jeder Treffer - Eine Jeder-Treffer-Anweisung identifiziert mehrere Intersektionen zwischen einem Strahl und Primitiven in einer Szene, um möglicherweise einen neuen nächstgelegenen Intersektionspunkt zu identifizieren.
    • Intersektion - Eine Intersektionsanweisung führt einen Strahl-Primitiv-Intersektionstest durch und gibt ein Ergebnis aus.
    • Pro-Primitiv-Begrenzungsrahmenaufbau - Diese Anweisung erstellt einen Begrenzungsrahmen um ein gegebenes Primitiv oder eine gegebene Gruppe von Primitiven (z. B. beim Erstellen einer neuen BVH oder einer anderen Beschleunigungsdatenhierarchie).
    • Fehler - Zeigt an, dass ein Strahl die gesamte Geometrie innerhalb einer Szene oder eine spezifizierte Region einer Szene verfehlt.
    • Besuch - Zeigt die Kinder-Volumina an, die ein Strahl traversiert.
    • Ausnahmen - Umfasst verschiedene Typen von Ausnahmehandlern (die z. B. für verschiedene Fehlerbedingungen aufgerufen werden).
  • HIERARCHISCHE STRAHLBÜNDELVERFOLGUNG
  • Begrenzungsvolumenhierarchien werden im Allgemeinen zum Verbessern der Effizienz verwendet, mit welcher Operationen an Grafik-Primitiven und anderen Grafikobjekten durchgeführt werden. Eine BVH ist eine hierarchische Baumstruktur, die basierend auf einem Satz von geometrischen Objekten aufgebaut ist. Am oberen Ende der Baumstruktur ist der Wurzelknoten, der alle der geometrischen Objekte in einer gegebenen Szene einschließt. Die einzelnen geometrischen Objekte sind in Begrenzungsvolumina eingewickelt, welche die Blattknoten des Baums bilden. Diese Knoten werden dann als kleine Sätze gruppiert und innerhalb größerer Begrenzungsvolumina eingeschlossen. Diese wiederum werden ebenfalls gruppiert und in einer rekursiven Weise innerhalb größerer Begrenzungsvolumina eingeschlossen, was schließlich zu einer Baumstruktur mit einem einzigen Begrenzungsvolumen führt, das durch den Wurzelknoten am oberen Ende des Baums dargestellt wird. Begrenzungsvolumenhierarchien werden zum wirksamen Unterstützen einer Vielzahl von Operationen an einem Satz von geometrischen Objekten, wie beispielsweise Kollisionserkennung, Primitiv-Culling und StrahlTraversierungs-/-Intersektionsoperationen, eingesetzt, die bei Strahlverfolgung verwendet werden.
  • In Strahlverfolgungsarchitekturen werden Strahlen durch eine BVH traversiert, um Strahl-Primitiv-Intersektionen zu bestimmen. Wenn zum Beispiel ein Strahl nicht durch den Wurzelknoten der BVH durchtritt, dann schneidet der Strahl keines der durch die BVH eingeschlossenen Primitive, und es ist keine Weiterverarbeitung für den Strahl in Bezug auf diesen Satz von Primitiven erforderlich. Wenn ein Strahl durch einen ersten Kindknoten der BVH, aber nicht den zweiten Kindknoten durchtritt, dann braucht der Strahl nicht gegen Primitive getestet zu werden, die durch den zweiten Kindknoten eingeschlossen sind. Auf diese Weise stellt eine BVH einen wirksamen Mechanismus zum Testen auf Strahl-Primitiv-Intersektionen bereit.
  • Anstelle einzelner Strahlen können Gruppen von benachbarten Strahlen, die als „Strahlenbündel“ bezeichnet werden, gegen die BVH getestet werden. 32 veranschaulicht ein beispielhaftes Strahlenbündel 3201, das durch vier verschiedene Strahlen skizziert ist. Jeder Strahl, der das Patch 3200 schneidet, das durch die vier Strahlen definiert wird, wird als innerhalb desselben Strahlenbündels angesehen. Obwohl das Strahlenbündel 3201 in 32 durch eine rechteckige Anordnung von Strahlen definiert ist, können Strahlenbündel auf verschiedene andere Arten und Weisen definiert sein, und dennoch den der Erfindung zugrundeliegenden Prinzipien entsprechen (z. B. Kreise, Ellipsen usw.)
  • 33 veranschaulicht, wie eine Strahlverfolgungs-Engine 3310 einer GPU 3320 die Strahlenbündelverfolgungstechniken implementiert, die hierin beschrieben werden. Konkret erzeugt eine Strahlerzeugungsschaltungsanordnung 3304 eine Mehrzahl von Strahlen, für welche Traversierungs- und Intersektionsoperation durchgeführt werden sollen. Statt jedoch Traversierungs- und Intersektionsoperationen an einzelnen Strahlen durchführen, werden Traversierungs- und Intersektionsoperationen unter Verwendung einer Hierarchie von Strahlenbündeln 3307 durchgeführt, die durch eine Strahlenbündelhierarchieaufbau-Schaltungsanordnung 3305 erzeugt werden. Die Strahlenbündelhierarchie ist analog zur Begrenzungsvolumenhierarchie (BVH). Zum Beispiel stellt 34 ein Beispiel eines Primärstrahlenbündels 3400 bereit, das in eine Mehrzahl von verschiedenen Komponenten unterteilt werden kann. Konkret kann das Primärstrahlenbündel 3400 in vier Quadranten 3401-3404 geteilt werden, und jeder Quadrant kann selbst in Teilquadranten, wie beispielsweise die Teilquadranten A-D innerhalb des Quadranten 3404, geteilt werden. Das Primärstrahlenbündel kann auf verschiedene Arten und Weisen unterteilt werden. Zum Beispiel kann das Primärstrahlenbündel in Hälften (statt Quadranten) geteilt werden, und jede Hälfte kann in Hälften geteilt werden usw. Ungeachtet dessen, wie die Unterteilungen durchgeführt werden, wird eine hierarchische Struktur in ähnlicher Weise erzeugt wie eine BVH, z. B. mit einem Wurzelknoten, der das Primärstrahlenbündel 3400 darstellt, einer ersten Ebene von Kindknoten, die jeweils durch einen Quadranten 3401-3404 dargestellt werden, zweiten Kindknoten für jeden Teilquadranten A-D so weiter.
  • Sobald die Strahlenbündelhierarchie 3307 aufgebaut ist, kann eine Traversierungs-/Intersektionsschaltungsanordnung 3306 Traversierungs-/Intersektionsoperationen unter Verwendung der Strahlenbündelhierarchie 3307 und der BVH 3308 durchführen. Konkret kann sie das Strahlenbündel gegen die BVH und Cull-Abschnitte des Strahlenbündels testen, die keine Abschnitte der BVH schneiden. Zum Beispiel können sie unter Verwendung der in 34 dargestellten Daten in Bezug auf die BVH und eine spezifische Verzweigung gecullt werden, wenn die Teilstrahlenbündel, die mit Teilregionen 3402 und 3403 assoziiert sind, sich mit der BVH oder dem Zweig der BVH nicht schneiden. Die restlichen Abschnitte 3401, 3404 können durch Durchführen einer Tiefezuerst-Suche oder eines anderen Suchalgorithmus gegen die BVH getestet werden.
  • Ein Verfahren für Strahlverfolgung ist 35 veranschaulicht. Das Verfahren kann innerhalb des Kontexts der zuvor beschriebenen Grafikverarbeitungsarchitekturen implementiert werden, ist aber auf keine spezifische Architektur beschränkt.
  • Bei 3500 wird ein Primärstrahlenbündel gebildet, das eine Mehrzahl von Strahlen umfasst, und bei 3501 wird das Strahlenbündel unterteilt und es werden hierarchische Datenstrukturen erzeugt, um eine Strahlenbündelhierarchie aufzubauen. Die Operationen 3500 und 3501 könne als eine einzige, integrierte Operation durchgeführt werden, die eine Strahlenbündelhierarchie aus einer Mehrzahl von Strahlen aufbaut. Bei 3502 wird die Strahlenbündelhierarchie mit einer BVH zum Cullen von Strahlen (aus der Strahlenbündelhierarchie) und/oder Knoten/Primitiven aus der BVH verwendet. Bei 3503 werden Strahl-Primitiv-Intersektionen für die restlichen Strahlen und Primitive bestimmt.
  • VERLUSTBEHAFTETE UND VERLUSTFREIE PAKETKOMPRIMIERUNG IN EINEM VERTEILTEN STRAHLVERFOLGUNGSSYSTEM
  • Strahlverfolgungsoperationen können über eine Mehrzahl von Rechenknoten verteilt werden, die über ein Netzwerk miteinander gekoppelt sind. 36 zum Beispiel veranschaulicht einen Strahlverfolgungscluster 3600, der eine Mehrzahl von Strahlverfolgungsknoten 3610-3613 umfasst, die Strahlverfolgungsoperationen parallel durchführen, wobei die Ergebnisse möglicherweise auf einem der Knoten kombiniert werden. In der veranschaulichten Architektur sind die Strahlverfolgungsknoten 3610-3613 über ein Gateway kommunikativ mit einer Client-seitigen Strahlverfolgungsanwendung 3630 verbunden.
  • Eine der Schwierigkeiten bei einer verteilten Architektur ist die große Menge von Paketdaten, die zwischen jedem der Strahlverfolgungsknoten 3610-3613 gesendet werden muss. Sowohl Techniken verlustbehafteter Komprimierung als auch Techniken verlustfreier Komprimierung können zum Verringern der Daten verwendet werden, die zwischen den Strahlverfolgungsknoten 3610-3613 gesendet werden.
  • Zum Implementieren verlustfreier Komprimierung werden Daten oder Befehle gesendet, die dem empfangenden Knoten ein Wiederherstellen der Ergebnisse ermöglichen, statt Pakete zu senden, die mit den Ergebnissen bestimmter Arten von Operationen gefüllt sind. Zum Beispiel brauchen Operationen für stochastisch gesampelte Flächenlichter und Umgebungsokklusion (AO - Ambient Okklusion) nicht unbedingt Richtungen. Folglich kann ein sendender Knoten einfach einen zufälligen Anfangswert senden, der durch den empfangenden Knoten dann zum Durchführen von Zufallssampling verwendet wird. Wenn zum Beispiel eine Szene über Knoten 3610-3612 verteilt ist, brauchen zum Sampeln von Licht 1 an Punkt p1-p3 nur die Licht-ID und -Ursprünge an die Knoten 3610-3612 gesendet zu werden. Jeder der Knoten kann dann das Licht unabhängig stochastisch sampeln. Der zufällige Anfangswert kann durch den empfangenden Knoten erzeugt werden. Ähnlich können für Primärstrahltrefferpunkte, Umgebungsokklusion (AO - Ambient Occlusion) und Weichschattensampling auf den Knoten 3610-3612 berechnet werden, ohne auf die Ursprungspunkte für nachfolgende Frames zu warten. Wenn zudem bekannt ist, dass ein Satz von Strahlen zur gleichen Punktlichtquelle geht, können Anweisungen, welche die Lichtquelle identifizieren, an den empfangenden Knoten gesendet werden, der sie auf den Satz von Strahlen anwendet. Als ein anderes Beispiel kann, wenn es N Umgebungsokklusionsstrahlen gibt, die an einen einzigen Punkt gesendet werden, ein Befehl zum Erzeugen von N Samples von diesem Punkt gesendet werden.
  • Verschiedene weitere Techniken für verlustbehaftete Komprimierung können verwendet werden. Zum Beispiel kann ein Quantisierungsfaktor eingesetzt werden, um alle Koordinatenwerte zu quantisieren, die mit der BBVH, Primitiven und Strahlen assoziiert sind. Außerdem können 32-Bit-Gleitkommawerte, die für Daten wie BVH-Knoten und Primitive verwendet werden, in 8-Bit-Ganzzahlwerte umgewandelt werden. In einer beispielhaften Implementierung werden Grenzen von Strahlenpaketen in voller Genauigkeit gespeichert, aber einzelne Strahlpunkte P1-P3 werden als indizierte Offsets zu den Grenzen gesendet. Ähnlich kann eine Mehrzahl von lokalen Koordinatensystemen erzeugt werden, die 8-Bit-Ganzzahlwerte als lokale Koordinaten verwendet. Die Position des Ursprungs eines jeden dieser lokalen Koordinatensysteme kann unter Verwendung der Werte voller Genauigkeit (z. B. 32-Bit-Gleitkomma) codiert werden, um die globalen und lokalen Koordinatensystem wirksam zu verbinden.
  • Es folgt ein Beispiel für verlustfreie Komprimierung. Ein Beispiel eines Strahldatenformats, das intern in einem Strahlverfolgungssystem verwendet wird, ist, wie folgt:
      struct Ray
      {
      uint32 pixld;
      uint32 materiallD;
      uint32 instancelD;
      uint64 primitivelD;
      uint32 geometrylD;
      uint32 lightlD;
      float origin[3];
      float direction[3];
      float t0;
      float t;
      float time;
      float normal[3]; //verwendet für Geometrie-Intersektionen
      float u;
      float v;
       
      float wavelength;
      float phase; //Interferometrie
      float refractedOffset; //Schlieren-esque
      float amplitude;
      float weight;
      };
  • Statt die Rohdaten für jeden einzelnen erzeugten Knoten zu senden, können diese Daten durch Gruppieren von Werte komprimiert und durch Erzeugen von impliziten Strahlen unter Verwendung anwendbarer Metadaten komprimiert werden, soweit möglich.
  • Bündeln und Gruppieren von Strahldaten
  • Flags können für allgemeine Daten oder Masken mit Modifikatoren verwendet werden.
  •       struct RayPacket
          {
          uint32 size;
          uint32 flags;
          list<Ray> rays;
          }
  • Zum Beispiel: RayPacket . rays = ray_1 bis ray_256
    Figure DE102021116364A1_0001
  • Alle Ursprünge werden gemeinsam genutzt
  • Alle Strahldaten werden gepackt, mit der Ausnahme, dass nur einziger Ursprung über alle Strahlen gespeichert wird. RayPacket.flags wird für RAYPACKET_COMMON_ORIGIN gesetzt. Wenn RayPacket bei Empfang ungepackt ist, werden Ursprünge aus dem einzigen Ursprungswert eingefüllt.
  • Ursprünge werden nur von einigen Strahlen gemeinsam genutzt
  • Alle Strahldaten werden gepackt, mit Ausnahme von Strahlen, die Ursprünge gemeinsam nutzen. Für jede Gruppe von eindeutigen gemeinsamen Ursprüngen, wird ein Operator aufgepackt, der die Operation (gemeinsame Ursprünge) identifiziert, den Ursprung speichert und maskiert, welche Strahlen die Informationen gemeinsam nutzen. Solch eine Operation kann an allen gemeinsamen Werten unter Knoten durchgeführt werden, wie beispielsweise Material-IDs, Primitiv-IDs, Ursprung, Richtung, Normale usw.
  •       struct RayOperation
          {
          uint8 operationID;
          void* value;
          uint64 mask;
          }
  • Senden impliziter Strahlen
  • Oft können Strahldaten am empfangenden Ende mit minimalen Metainformationen abgeleitet werden, die verwendet werden, um sie zu erzeugen. Ein sehr gebräuchliches Beispiel ist das Erzeugen mehrerer Sekundärstrahlen, um eine Fläche stochastisch zu sampeln. Statt dass der Sender einen Sekundärstrahl erzeugt und ihn sendet, und der Empfänger Operationen daran durchführt, kann der Sender einen Befehl senden, dass ein Strahl mit unabhängigen Informationen erzeugt werden soll, und der Strahl wird am empfangenden Ende erzeugt. Falls der Strahl zuerst durch den Sender erzeugt werden muss, um zu bestimmen, an welchen Empfänger er gesendet werden soll, wird der Strahl erzeugt, und der zufällige Anfangswert kann zum erneuten Erzeugen des exakt gleichen Strahls gesendet werden.
  • Um zum Beispiel einen Trefferpunkt mit 64 Schattenstrahlen zu sampeln, die eine Flächenlichtquelle sampeln, schneiden sich alle 64 Strahlen mit Regionen aus dem gleichen Rechenknoten N4. Ein RayPacket mit gemeinsamem Ursprung und gemeinsamer Normale wird erzeugt. Es könnten mehr Daten gesendet werden, wenn gewünscht wird, dass der Empfänger den resultierenden Pixelbeitrag schattiert, aber für dieses Beispiel wird davon ausgegangen, dass nur gewünscht wird, zurückzusenden, ob ein Strahl die Daten von anderen Knoten trifft. Eine RayOperation wird für Schattenstrahl-erzeugen-Operation erzeugt und erhält den Wert der zu sampelnden Licht-ID und den Zufallszahlanfangswert zugeordnet. Wenn N4 das Strahlenpaket empfängt, erzeugt er die vollständig gefüllten Strahldaten durch Füllen der gemeinsamen Ursprungsdaten in alle Strahlen und Festlegen der Richtung basierend auf der Licht-ID, die mit dem Zufallszahlanfangswert stochastisch gesampelt wird, um dieselben Strahlen zu erzeugen, die der ursprüngliche Sender erzeugte. Beim Zurücksenden der Ergebnisse müssen nur binäre Ergebnisse für jeden Strahl zurückgeliefert werden, die durch eine Maske über die Strahlen weitergegeben werden können.
  • Ein Senden der ursprünglichen 64 Strahlen in diesem Beispiel hätte 104 Bytes * 64 Strahlen = 6.656 Bytes verwendet. Würden die zurückgesendeten Strahlen in ihrer Rohform gesendet, verdoppelte sich dies außerdem auf 13.312 Bytes. Bei Verwenden verlustfreier Komprimierung, wobei nur der gemeinsame Strahlursprung, die gemeinsame Normale und die gemeinsame Strahlerzeugungsoperation mit Anfangswert und ID gesendet werden, werden nur 29 Bytes gesendet, wobei 8 Bytes für die geschnittene Maske zurückgesendet werden. Dies führt zu einer Datenkomprimierungsrate, die über das Netzwerk gesendet werden muss, von ~360:1. Dies bezieht den Overhead zum Verarbeiten der Nachricht selbst nicht ein, der er auf irgendeine Weise identifiziert werden müsste, was aber der Implementierung überlassen wird. Andere Operationen können zum Neuberechnen des Strahlursprungs und von Strahlrichtungen aus der Pixel-ID für Primärstrahlen, Neukalkulieren von Pixel-IDs basierend auf den Bereichen im RayPacket und vielen anderen möglichen Implementierungen zur Neuberechnung von Werten durchgeführt werden. Ähnliche Operationen können für einzelne oder Gruppen von gesendeten Strahlen verwendet werden, einschließlich Schatten, Spiegelungen, Brechung, Umgebungsokklusion, Intersektionen, Volumenintersektionen, Schattierung, zurückgesendeter Spiegelungen bei Strahlverfolgung usw.
  • 37 veranschaulicht weitere Details für zwei Strahlverfolgungsknoten 3710-3711, die Komprimierung und Dekomprimierung von Strahlverfolgungspaketen durchführen. Konkret führt, wenn eine erste Strahlverfolgungs-Engine 3730 zum Senden von Daten an eine zweite Strahlverfolgungs-Engine 3731 bereit ist, eine Strahlkomprimierungsschaltungsanordnung 3720 verlustbehaftete und/oder verlustfreie Komprimierung durch, wie hierin beschrieben (indem sie z. B. 32-Bit-Werte in 8-Bit-Werte umwandelt und Rohdaten für Anweisungen zum Wiederherstellen der Daten ersetzt, usw.) Die komprimierten Strahlenpakete 3701 werden von einer Netzwerkschnittstelle 3725 über ein lokales Netzwerk (z. B. ein 10-Gb/s-, 100-Gb/s-Ethernet-Netzwerk) an eine Netzwerkschnittstelle 3726 gesendet. Eine Strahldekomprimierungsschaltungsanordnung dekomprimiert dann gegebenenfalls die Strahlenpakete. Sie kann zum Beispiel Befehle zum Wiederherstellen der Strahlverfolgungsdaten ausführen (z. B. unter Verwendung eines zufälligen Anfangswerts, um Zufallssampling für Beleuchtungsoperationen durchzuführen). Die Strahlverfolgungs-Engine 3731 verwendet die empfangenen Daten dann zum Durchführen von Strahlverfolgungsoperationen.
  • In umgekehrter Richtung komprimiert eine Strahlkomprimierungsschaltungsanordnung 3741 Strahldaten, die Netzwerkschnittstelle 3726 sendet die komprimierten Daten über das Netzwerk (z. B. unter Verwendung der hierin beschriebenen Techniken), eine Strahldekomprimierungsschaltungsanordnung 3740 dekomprimiert die Strahldaten nötigenfalls, und die Strahlverfolgungs-Engine 3730 verwendet die Daten bei Strahlverfolgungsoperationen. Obwohl in 37 als getrennte Einheiten veranschaulicht, können die Strahldekomprimierungsschaltungsanordnung 3740 und 3741 in die Strahlverfolgungs-Engines 3730 bzw. 3731 integriert sein. Insofern als die komprimierten Strahldaten Befehle zum Wiederherstellen der Strahldaten umfassen, können diese Befehle zum Beispiel durch jede jeweilige Strahlverfolgungs-Engine 3730-3731 ausgeführt werden.
  • Wie in 38 veranschaulicht, kann die Strahlkomprimierungsschaltungsanordnung 3720 Schaltungsanordnung für verlustbehaftete Komprimierung 3801 zum Durchführen der hierin beschriebenen Techniken verlustbehafteter Komprimierung (z. B. Umwandeln von 32-Bit-Gleitkommakoordinaten in 8-Bit-Ganzzahlkoordinaten) und Schaltungsanordnung für verlustfreie Komprimierung 3803 zum Durchführen von Techniken verlustfreier Komprimierung (z. B. Senden von Befehlen und Daten, um der Strahlneukomprimierungsschaltungsanordnung 3821 Wiederherstellung der Daten zu ermöglichen) umfassen. Die Strahldekomprimierungsschaltungsanordnung 3721 umfasst Schaltungsanordnung für verlustbehaftete Dekomprimierung 3802 und Schaltungsanordnung für verlustfreie Dekomprimierung 3804 zum Durchführen von verlustfreier Dekomprimierung.
  • Ein weiteres beispielhaftes Verfahren ist in 39 veranschaulicht. Das Verfahren kann auf den hierin beschriebenen Strahlverfolgungsarchitekturen oder anderer Architekturen implementiert werden, ist aber auf keine spezifische Architektur beschränkt.
  • Bei 3900 werden Strahldaten empfangen, die von einem ersten Strahlverfolgungsknoten an einen zweiten Strahlverfolgungsknoten gesendet werden. Bei 3901 führt die Schaltungsanordnung für verlustbehaftete Komprimierung verlustbehaftete Komprimierung an ersten Strahlverfolgungsdaten durch, bei 3902 führt die Schaltungsanordnung für verlustfreie Komprimierung verlustfreie Komprimierung an zweiten Strahlverfolgungsdaten durch. Bei 3903 werden die komprimierten Strahlverfolgungsdaten an einen zweiten Strahlverfolgungsknoten gesendet. Bei 3904 führt die Schaltungsanordnung für verlustbehaftete/verlustfreie Dekomprimierung verlustbehaftete/verlustfreie Dekomprimierung der Strahlverfolgungsdaten durch, bei 3905 führt der zweite Strahlverfolgungsknoten Strahlverfolgungsoperationen unter Verwendung der dekomprimierten Daten durch.
  • GRAFIKPROZESSOR MIT HARDWAREBESCHLEUNIGTER HYBRIDER STRAHLVERFOLGUNG
  • Als Nächstes wird eine Hybrid-Rendering-Pipeline vorgestellt, die Rasterung auf den Grafikkernen 3130 und Strahlverfolgungsoperationen auf den Strahlverfolgungskernen 3150, den Grafikkernen 3130 und/oder den CPU-Kernen 3199 durchführt. Zum Beispiel können auf den Grafikkernen 3130 Rasterung und Tiefentests anstelle der Primärstrahlenfangstufe durchgeführt werden. Die Strahlverfolgungskerne 3150 können dann Sekundärstrahlen für Spiegelungen und Brechungen von Strahlen sowie Schatten erzeugen. Außerdem werden bestimmte Regionen einer Szene, in welcher die Strahlverfolgungskeren 3150 Strahlverfolgungsoperationen (z. B. basierend auf Materialeigenschaftsschwellen, beispielsweise hohen Rückstrahlungsgraden) durchführen, ausgewählt, während andere Regionen der Szene mit Rasterung auf den Grafikkernen 3130 gerendert werden. Diese hybride Implementierung kann für Echtzeit-Strahlverfolgungsanwendungen - bei welchen Latenz eine kritische Angelegenheit ist - verwendet werden.
  • Die nachstehend beschriebene Strahltraversierungsarchitektur kann zum Beispiel programmierbare Schattierung und Steuerung von Strahltraversierung unter Verwendung von bestehenden Einzelanweisungs-Mehrfachdaten-(SIMD - Single Instruction Multiple Data-) und/oder Einzelanweisungs-Multithread-(SIMT - Single Instruction Multiple Thread-)Grafikprozessoren bei gleichzeitiger Beschleunigung von kritischen Funktionen, wie beispielsweise BVH-Traversierung und/oder Intersektionen, unter Verwendung von dedizierter Hardware durchführen. SIMD-Belegung für inkohärente Pfade kann durch Neugruppierung von erzeugten Shadern an spezifischen Punkten während der Traversierung und vor der Schattierung verbessert werden. Dies wird unter Verwendung von dedizierter Hardware erreicht, die Shader chipintern dynamisch sortiert. Rekursion wird durch Aufteilen einer Funktion in Fortsetzungen gehandhabt, die bei Rücksendung und Neugruppierung von Fortsetzungen vor der Ausführung für verbesserte SIMD-Belegung ausgeführt werden.
  • Programmierbare Steuerung von Strahltraversierung/- intersektion wird durch Zerlegen von Traversierungsfunktionalität in eine innere Traversierung, die als Hardware mit fester Funktion implementiert werden kann, und eine äußere Traversierung erreicht, die auf GPU-Prozessoren ausgeführt wird und programmierbare Steuerung durch benutzerdefinierte Traversierungs-Shader ermöglicht. Die Kosten für die Übertragung des Traversierungskontexts zwischen Hardware und Software werden durch konservatives Trunkieren des inneren Traversierungszustands während des Übergangs zwischen innerer und äußerer Traversierung reduziert.
  • Programmierbare Steuerung von Strahlverfolgung kann durch die verschiedenen Shader-Typen ausgedrückt werden, die in nachstehender Tabelle A aufgeführt sind. Es kann mehrere Shader für jeden Typ geben. Zum Beispiel kann jedes Material einen unterschiedlichen Treffer-Shader aufweisen. TABELLE A
    Shader-Typ Funktionalität
    Primär Starten von Primärstrahlen
    Treffer Bidirektionale Reflexionsverteilungsfunktion (BRDF - Bidirectional Reflectance Distribution Function), Sampling, Starten von Sekundärstrahlen
    Jeder Treffer Berechnen von Durchlässigkeitsgrad für Alpha-texturierte Geometrie
    Fehler Berechnen von Strahldichte von einer Lichtquelle
    Intersektion Schneiden von benutzerdefinierten Formen
    Traversierung Auswahl und Transformation von Instanzen
    Aufrufbar Universalfunktion
  • Rekursive Strahlverfolgung kann durch eine API-Funktion initiiert werden, die dem Grafikprozessor befiehlt, einen Satz von Primär-Shadern oder eine Intersektionsschaltungsanordnung zu starten, die Strahl-Szene-Intersektionen für Primärstrahlen erzeugen kann. Dies wiederum erzeugt andere Shader, wie beispielsweise Traversierungs-, Treffer- oder Fehler-Shader. Ein Shader, der einen Kind-Shader erzeugt, kann außerdem einen Rückgabewert von diesem Kind-Shader empfangen. Aufrufbare Shader sind Universalfunktionen, die durch einen anderen Shader direkt erzeugt werden können und ebenfalls Rückgabewerte an den aufrufenden Shader zurückgeben können.
  • 40 veranschaulicht eine Grafikverarbeitungsarchitektur, die eine Shader-Ausführungsschaltungsanordnung 4000 und eine Schaltungsanordnung mit fester Funktion 4010 veranschaulicht. Das Universal-Ausführungshardwaresubsystem umfasst eine Mehrzahl von Einzelanweisungs-Mehrfachdaten-(SIMD-) und/oder Einzelanweisungs-Multithread-(SIMT-)Kernen/-Ausführungseinheiten (EUs) 4001 (d. h. ein oder mehrere Kerne können eine Mehrzahl von Ausführungseinheiten umfassen), einen oder mehrere Sampler 4002 und einen Cache der Ebene 1 (L1) 4003 oder eine andere Form von lokalem Speicher. Das Hardwaresubsystem mit fester Funktion 4010 umfasst eine Nachrichteneinheit 4004, einen Scheduler 4007, Strahl-BVH-Traversierungs-/-Intersektionsschaltungsanordnung 4005, eine Sortierschaltungsanordnung 4008, und einen lokalen L1-Speicher 4006.
  • In Betrieb verteilt ein Primärverteiler 4009 einen Satz von Primärstrahlen an den Scheduler 4007, der Arbeit für Shader disponiert, die auf den SIMD/SIMT-Kernen/-EUs 4001 ausgeführt werden. Die SIMD-Kerne/-EUs 4001 können die oben beschriebenen Strahlverfolgungskerne 3150 und/oder Grafikkerne 3130 sein. Ausführung der Primär-Shader erzeugt zusätzliche Arbeit, die durchzuführen ist (z. B. von einem oder mehreren Kind-Shadern und oder Hardware mit fester Funktion auszuführen ist). Die Nachrichteneinheit 4004 verteilt Arbeit, die durch die SIMD-Kerne/- EUs 4001 erzeugt wird, an den Scheduler 4007, die bei Bedarf auf den freien Stapelpool zugreift, die Sortierschaltungsanordnung 4008 oder die Strahl-BVH-Intersektionsschaltungsanordnung 4005. Wenn die zusätzliche Arbeit an den Scheduler 4007 gesendet wird, wird sie zur Verarbeitung auf den SIMD/SIMT-Kernen/-EUs 4001 disponiert. Vor dem Disponieren kann die Sortierschaltungsanordnung 4008 die Strahlen in Gruppen oder Bins sortieren, wie hierin beschrieben (z. B. Strahlen mit ähnlichen Charakteristiken gruppieren). Die Strahl-BVH-Intersektionsschaltungsanordnung 4005 führt Intersektionstests von Strahlen unter Verwendung von BVH-Volumina durch. Zum Beispiel kann die Strahl-BVH-Schaltungsanordnung 4005 Strahlkoordinaten mit jeder Ebene der BVH vergleichen, um Volumina zu identifizieren, die vom Strahl geschnitten werden.
  • Shader können unter Verwendung eines Shader-Datensatzes, eine von einem Benutzer zugewiesene Struktur, die einen Zeiger auf die Eingabefunktion umfasst, anbieterspezifische Metadaten und globale Argumente für den Shader, der von den SIMD-Kernen/-EUs 4001 ausgeführt wird, referenziert werden. Jede ausführende Instanz eines Shaders ist mit einem Aufrufstapel assoziiert, der zum Speichern von Argumenten verwendet werden kann, die zwischen einem Eltern-Shader und einem Kind-Shader weitergegeben werden. Aufrufstapel können auch Verweise auf die Fortsetzungsfunktionen speichern, die ausgeführt werden, wenn ein Aufruf zurückgegeben wird.
  • 41 veranschaulicht einen beispielhaften Satz von zugeordneten Stapeln 4101, der einen Primär-Shader-Stapel, einen Treffer-Shader-Stapel, einen Traversierungs-Shader-Stapel, einen Fortsetzungsfunktionsstapel und einen Strahl-BVH-Intersektionsstapel umfasst (der, wie beschrieben, durch Hardware mit fester Funktion 4010 ausgeführt werden kann). Neue Shader-Aufrufe können neue Stapel aus einem freien Stapelpool 4102 implementieren. Die Aufrufstapel, z. B. Stapel, die im Satz von zugeordneten Stapeln enthalten sind, können in einem lokalen L1-Cache 4003, 4006 zwischengespeichert werden, um die Latenz von Zugriffen zu reduzieren.
  • Es kann eine endliche Anzahl von Aufrufstapeln geben, wobei jedem eine feste maximale Größe „Sstack“ in einer benachbarten Speicherregion zugwiesen ist. Daher kann die Basisadresse eines Stapels direkt aus einem Stapelindex (SID) als Basisadresse = SID * Sstack berechnet werden. Stapel-IDs können vom Scheduler 4007 beim Disponieren von Arbeit für die SIMD-Kerne/-EUs 4001 zugewiesen und freigegeben werden.
  • Der Primärverteiler 4009 kann einen Grafikprozessor-Befehlsprozessor umfassen, der Primär-Shader in Reaktion auf einen Verteilungsbefehl vom Host (z. B. einer CPU) verteilt. Der Scheduler 4007 kann diese Verteilungsanforderungen empfangen und startet einen Primär-Shader auf einem SIMD-Prozessor-Thread, wenn er eine Stapel-ID für jede SIMD-Lane zuweisen kann. Stapel-IDs können aus dem freien Stapelpool 4102 zugewiesen werden, der zu Beginn des Verteilungsbefehls initialisiert wird.
  • Ein Ausführungs-Shader kann einen Kind-Shader durch Senden einer Erzeugungsnachricht an die Nachrichtenübermittlungseinheit 4004 erzeugen. Dieser Befehl umfasst die Stapel-IDs, die mit dem Shader assoziiert sind, und umfasst außerdem einen Zeiger auf den Kind-Shader-Datensatz für jede aktive SIMD-Lane. Ein Eltern-Shader kann diese Nachricht nur einmal für eine aktive Lane ausgeben. Nach dem Senden von Erzeugungsnachrichten für alle relevanten Lanes kann der Eltern-Shader beendet werden.
  • Ein Shader, der auf den SIMD-Kernen/-EUs 4001 ausgeführt wird, kann auch Aufgaben mit fester Funktion, wie beispielsweise Strahl-BVH-Intersektion, unter Verwendung einer Erzeugungsnachricht mit einem Shader-Datensatzzeiger erzeugen, der für die Hardware mit fester Funktion reserviert ist. Wie bereits erwähnt, sendet die Nachrichtenübermittlungseinheit 4004 erzeugte Strahl-BVH-Intersektionsarbeit an die Strahl-BVH-Intersektionsschaltungsanordnung mit fester Funktion 4005 und aufrufbare Shader direkt an die Sortierschaltungsanordnung 4008. Die Sortierschaltungsanordnung kann die Shader durch Shader-Datensatzzeiger gruppieren, um ein SMID-Batch mit ähnlichen Charakteristiken abzuleiten. Demgemäß können Stapel-IDs von verschiedenen Eltern-Shadern durch die Sortierschaltungsanordnung 4008 in dasselbe Batch sortiert werden. Die Sortierschaltungsanordnung 4008 sendet gruppierte Batches an den Scheduler 4007, der auf den Shader-Datensatz aus dem Grafikspeicher 2511 oder dem Cache der letzten Ebene (LLC) 4020 zugreift und den Shader auf einem Prozessor-Thread startet.
  • Fortsetzungen können als aufrufbare Shader behandelt und ebenfalls durch Shader-Datensätze referenziert werden. Wenn ein Kind-Shader erzeugt wird und Werte an den Eltern-Shader zurückliefert, kann ein Zeiger auf den Fortsetzungs-Shader-Datensatz auf den Aufrufstapel 4101 gepusht werden. Wenn ein Kind-Shader zurückliefert, kann der Fortsetzungs-Shader-Datensatz dann vom Aufrufstapel 4101 gepoppt werden, und ein Fortsetzungs-Shader kann erzeugt werden. Optional können erzeugte Fortsetzungen ähnlich aufrufbaren Shadern durch die Sortiereinheit durchlaufen und auf einem Prozessor-Thread gestartet werden.
  • Wie in 42 veranschaulicht, gruppiert die Sortierschaltungsanordnung 4008 erzeugte Aufgaben durch die Shader-Datensatzzeiger 4201A, 4201 B, 4201n, um SIMD-Batches zur Schattierung zu erzeugen. Die Stapel-IDs oder Kontext-IDs in einem sortierten Batch können aus verschiedenen Verteilungen und verschiedenen Eingabe-SIMD-Lanes gruppiert werden. Eine Gruppierungsschaltungsanordnung 4210 kann das Sortieren unter Verwendung einer Struktur 4201 eines inhaltsadressierbaren Speichers (CAM - Content Addressable Memory) durchgeführt werden, die eine Mehrzahl von Einträgen umfasst, wobei jeder Eintrag mit einem Tag 4201 identifiziert wird. Wie bereits erwähnt, kann das Tag 4201 ein entsprechender Shader-Datensatzzeiger 4201A, 4201 B, 4201 n sein. Die CAM-Struktur 4201 kann eine begrenzte Anzahl von Tags (z. B. 32, 64, 128 usw.) speichern, die jeweils mit einem unvollständigen SIMD-Batch assoziiert sind, das einem Shader-Datensatzzeiger entspricht.
  • Für einen eingehenden Erzeugungsbefehl weist jede SIMD-Lane eine entsprechende Stapel-ID (dargestellt als 16 Kontext-IDs 0 bis 15 in jedem CAM-Eintrag) und einen Shader-Datensatzzeiger 4201A-B,...n (der als Tag-Wert fungiert) auf. Die Gruppierungsschaltungsanordnung 4210 kann den Shader-Datensatzzeiger für jede Lane mit den Tags 4201 in der CAM-Struktur 4201 vergleichen, um ein übereinstimmendes Batch zu finden. Wenn ein übereinstimmendes Batch gefunden wird, kann die Stapel-ID/Kontext-ID zum Batch hinzugefügt werden. Andernfalls kann ein neuer Eintrag mit einem neuen Shader-Datensatzzeiger erstellt werden, wobei ein älterer Eintrag mit einem unvollständigen Batch möglicherweise entfernt wird.
  • Ein Ausführungs-Shader kann die Zuweisung des Aufrufstapels, wenn er leer ist, aufheben, indem er eine Zuweisungsaufhebungsnachricht an die Nachrichteneinheit sendet. Die Zuweisungsaufhebungsnachricht wird an den Scheduler weitergeleitet, der Stapel-IDs/Kontext-IDs für aktive SIMD-Lanes an den freien Pool zurücksendet.
  • Ein hybrider Ansatz für Strahltraversierungsoperationen unter Verwendung einer Kombination aus Strahlverfolgung mit fester Funktion und Software-Strahlverfolgung wird vorgestellt. Folglich stellt er die Flexibilität von Softwaretraversierung bei gleichzeitigem Aufrechterhalten der Wirksamkeit von Traversierung mit fester Funktion bereit. 43 stellt eine Beschleunigungsstruktur dar, die für hybride Traversierung verwendet werden kann und wobei es sich um ein Baum mit zwei Ebenen mit einer einzigen BVH 4300 einer oberen Ebene und mehreren BVHs 4301 und 4302 einer unteren Ebene handelt. Grafische Elemente sind rechts dargestellt, um innere Traversierungspfade 4303, äußere Traversierungspfade 4304, Traversierungsknoten 4305, Blattknoten mit Dreiecken 4306 und Blattknoten mit benutzerdefinierten Primitiven 4307 anzuzeigen.
  • Die Blattknoten 4306 in der BVH 4300 der oberen Ebene können Dreiecke, Intersektions-Shader-Datensätze für benutzerdefinierte Primitive oder Traversierungs-Shader-Datensätze referenzieren. Die Blattknoten mit Dreiecken 4306 der BVHs 4301-4302 der unteren Ebene können nur Dreiecke und Intersektions-Shader-Datensätze für benutzerdefinierte Primitive referenzieren. Der Referenztyp ist innerhalb des Blattknotens 4306 codiert. Innere Traversierung 4303 bezieht sich auf Traversierung innerhalb jeder BVH 4300-4302. Innere Traversierungsoperationen umfassen Berechnung von Strahl-BVH-Intersektionen, und Traversierung über die BVH-Strukturen 4300-4302 ist als äußere Traversierung bekannt. Innere Traversierungsoperationen können in Hardware mit fester Funktion wirksam implementiert werden, während Operationen äußerer Traversierung mit programmierbaren Shadern mit akzeptabler Performance durchgeführt werden können. Folglich können innere Traversierungsoperationen unter Verwendung der Schaltungsanordnung mit fester Funktion 4010 durchgeführt werden, und Operationen äußerer Traversierung können unter Verwendung einer Shader-Ausführungsschaltungsanordnung 4000 durchgeführt werden, die SIMD-/SIMT-Kerne-/EUs 4001 zum Ausführen von programmierbaren Shadern umfasst.
  • Es ist zu erwähnen, dass die SIMD-/SIMT-Kerne/-EUs 4001 hierin der Einfachheit halber manchmal einfach nur als „Kerne“, „SIMD-Kerne“, „EUs“ oder „SIMD-Prozessoren“ bezeichnet werden. Ähnlich wird die Strahl-BVH-Traversierungs-/Intersektionsschaltungsanordnung 4005 hierin einfach nur als „Traversierungseinheit“, „Traversierungs-/Intersektionseinheit“ oder „Traversierungs-IIntersektionsschaltungsanordnung“ bezeichnet. Wenn ein alternativer Begriff verwendet wird, ändert der spezifische Name, der zum Bezeichnen der jeweiligen Schaltungsanordnung/Logik verwendet wird, nicht die zugrundeliegenden Funktion, welche die Schaltungsanordnung/Logik durchführt, wie hierin beschrieben.
  • Obwohl außerdem in 40 zu Erläuterungszwecken als eine Einzelkomponente veranschaulicht, kann die Traversierungs-/Intersektionseinheit 4005 eine eigene Traversierungseinheit und eine separate Intersektionseinheit umfassen, die jeweils in Schaltungsanordnung und/oder Logik implementiert sein können, wie hierin beschrieben.
  • Wenn ein Strahl während einer inneren Traversierung einen Traversierungsknoten schneidet, kann ein Traversierungs-Shader erzeugt werden. Die Sortierschaltungsanordnung 4008 kann diese Shader durch Shader-Datensatzzeiger 4201A-B, ...n gruppieren, um ein SIMD-Batch zu erstellen, das vom Scheduler 4007 zur SIMD-Ausführung auf den SIMD-Kernen/-EUs 4001 gestartet wird. Traversierungs-Shader können Traversierung auf mehrere Arten und Weisen modifizieren und eine große Auswahl an Anwendungen ermöglichen. Zum Beispiel kann der Traversierungs-Shader eine BVH bei einem gröberen Detaillierungsgrad (LOD - Level Of Detail) auswählen und den Strahl transformieren, um Transformationen von starren Körpern zu ermöglichen. Der Traversierungs-Shader kann dann innere Traversierung für die ausgewählte BVH erzeugen.
  • Innere Traversierung berechnet Strahl-BVH-Intersektionen durch Traversieren der BVH und Berechnen von Strahl-Rahmen- und Strahl-Dreieck-Intersektionen. Innere Traversierung wird auf dieselbe Weise wie Shader durch Senden einer Nachricht an die Nachrichtenübermittlungsschaltungsanordnung 4004 erzeugt, welche die entsprechende Erzeugungsnachricht an die Strahl-BVH-Intersektionsschaltungsanordnung 4005 weiterleitet, welche die Strahl-BVH-Intersektionen berechnet.
  • Der Stapel für innere Traversierung kann lokal in der Schaltungsanordnung mit fester Funktion 4010 (z. B. innerhalb des L1-Caches 4006) gespeichert werden. Wenn ein Strahl einen Blattknoten schneidet, der einem Traversierungs-Shader oder einem Intersektions-Shader entspricht, kann innere Traversierung beendet und der innere Stapel trunkiert werden. Der trunkierte Stapel kann zusammen mit einem Zeiger auf den Strahl und die BVH an einem durch den Aufruf-Shader spezifizierten Speicherort in Speicher geschrieben werden, und dann kann der entsprechende Traversierungs-Shader oder Intersektions-Shader erzeugt werden. Wenn der Strahl während einer inneren Traversierung irgendwelche Dreiecke schneidet, können die entsprechenden Trefferinformation als Eingabeargumente für diese Shader bereitgestellt werden, wie im nachstehenden Code dargestellt. Diese erzeugten Shader können durch die Sortierschaltungsanordnung 4008 gruppiert werden, um SIMD-Batches zur Ausführung zu erstellen.
  •       struct Hitlnfo {
          float barycentrics[2];
          float tmax;
          bool innerTravComplete;
          uint primID;
          uint geomlD;
          ShaderRecord* leafShaderRecord;
          }
  • Das Trunkieren des inneren Traversierungsstapels reduziert die Kosten seines Überquellens in Speicher. Gemäß dem in „Restart Trail for Stackless BVH Traversal, High Performance Graphics (2010), ff. 107-111“, beschriebenen Ansatz können zum Trunkieren des Stapels auf eine kleine Anzahl von Einträgen an der obersten Stelle des Stapels ein 42-Bit-Neustart-Pfad und ein 6-Bit-Tiefenwert angewendet werden. Der Neustart-Pfad zeigt Verzweigungen an, die innerhalb der BVH bereits genommen wurden, und der Tiefenwert zeigt die Tiefe von Traversierung an, die dem letzten Stapeleintrag entspricht. Diese Informationen genügen, um innere Traversierung zu einem späteren Zeitpunkt wiederaufzunehmen.
  • Die innere Traversierung ist abgeschlossen, wenn der innere Stapel leer ist und es keine zu testenden BVH-Knoten mehr gibt. In diesem Fall wird ein Handler eines äußeren Stapels erzeugt, der von der obersten Stelle des äußeren Stapels poppt und Traversierung wiederaufnimmt, wenn der äußere Stapel nicht leer ist.
  • Äußere Traversierung kann die Haupttraversierungszustands-Engine ausführen und in Programmcode implementiert sein, der durch die Shader-Ausführungsschaltung 4000 ausgeführt wird. Sie kann eine Abfrage für innere Traversierung unter den folgenden Bedingungen erzeugen: (1) wenn ein neuer Strahl durch einen Treffer-Shader oder einen Primär-Shader erzeugt wird; (2) wenn ein Traversierungs-Shader eine BVH für Traversierung auswählt; und (3) wenn ein Handler eines äußeren Stapels innere Traversierung für eine BVH wiederaufnimmt.
  • Wie in 44 veranschaulicht, wird vor dem Erzeugen innerer Traversierung Platz auf dem Aufrufstapel 4405 für die Schaltungsanordnung mit fester Funktion 4010 zum Speichern des trunkierten inneren Stapels 4410 zugewiesen. Offsets 4403-4404 zur obersten Stelle des Aufrufstapels und dem inneren Stapel werden im Traversierungszustand 4400 aufrechterhalten, der ebenfalls im Speicher 2511 gespeichert wird. Der Traversierungszustand 4400 umfasst außerdem den Strahl im Welt-Speicherplatz 4401 und Objekt-Speicherplatz 4402 sowie Trefferinformationen für das nächstgelegene Intersektionsprimitiv.
  • Der Traversierungs-Shader, der Intersektions-Shader und der Handler des äußeren Stapels werden allesamt durch die Strahl-BVH-Intersektionsschaltungsanordnung 4005 erzeugt. Der Traversierungs-Shader weist auf dem Aufrufstapel 4405 vor dem Initiieren einer neuen inneren Traversierung für die BVH der zweiten Ebene zu. Der Handler des äußeren Stapels ist ein Shader, der für das Aktualisieren der Trefferinformationen und Wiederaufnehmen jeglicher anstehender innerer Traversierungsaufgaben verantwortlich ist. Der Handler des äußeren Stapels ist außerdem für das Erzeugen von Treffer- oder Fehler-Shadern verantwortlich, wenn Traversierung abgeschlossen ist. Traversierung ist abgeschlossen, wenn es keine anstehenden Abfragen für innere Traversierung mehr zu erzeugen gibt. Wenn Traversierung abgeschlossen ist und eine Intersektion gefunden wird, wird ein Treffer-Shader erzeugt; andernfalls wird ein Fehler-Shader erzeugt.
  • Obwohl das oben beschriebene Hybridtraversierungsschema eine BVH-Hierarchie mit zwei Ebenen verwendet, kann eine beliebige Anzahl von BVH-Ebenen mit der entsprechenden Änderung der Implementierung der äußeren Traversierung implementiert werden.
  • Obwohl vorstehend außerdem die Schaltungsanordnung mit fester Funktion 4010 zum Durchführen von Strahl-BVH-Intersektionen beschrieben wird, können auch andere Systemkomponenten in Schaltungsanordnung mit fester Funktion implementiert werden. Zum Beispiel kann der oben beschriebene Handler des äußeren Stapels ein interner (für den Benutzer nicht sichtbarer) Shader sein, der potenziell in der BVH-Traversierungs-/-Intersektionsschaltungsanordnung 4005 implementiert sein könnte. Diese Implementierung kann zum Reduzieren der Anzahl von verteilten Shader-Stufen und Hin- und Rückübertragungen (Roundtrips) zwischen der Intersektionshardware mit fester Funktion 4005 und dem Prozessor verwendet werden.
  • Die hierin beschriebenen Beispiele ermöglichen programmierbare Schattierungs- und Strahltraversierungssteuerung unter Verwendung von benutzerdefinierten Funktionen, die mit größerer SIMD-Effizienz auf bestehenden und zukünftigen GPU-Prozessoren ausgeführt werden können. Programmierbare Steuerung von Strahltraversierung ermöglicht mehrere wichtige Merkmale, wie beispielsweise prozedurale Instanziierung, stochastische Detaillierungsgradauswahl, benutzerdefinierte Primitiv-Intersektion und verzögerte BVH-Aktualisierungen.
  • Außerdem wird eine programmierbare Mehrfachanweisungs-Mehrfachdaten-(MIMD-)Strahlverfolgungsarchitektur bereitgestellt, die spekulative Ausführung von Treffer- und Intersektions-Shadern unterstützt. Konkret setzt die Architektur den Akzent auf das Reduzieren des Dispositions- und Kommunikations-Overheads zwischen den oben in Bezug auf 40 beschriebenen programmierbaren SIMD-/SIMT-Kernen/- Ausführeinheiten 4001 und den MIMD-Traversierungs-/- Intersektionseinheiten 4005 in einer hybriden Strahlverfolgungsarchitektur. Im Folgenden werden mehrere Schemata spekulativer Ausführung von Treffer- und Intersektions-Shadern beschrieben, die in einem einzigen Batch von der Traversierungshardware verteilt werden können, um mehrere Traversierungs- und Schattierungsumlaufzeiten zu vermeiden. Es kann eine dedizierte Schaltungsanordnung zum Implementieren dieser Techniken verwendet werden.
  • Die Ausführungsformen der Erfindung sind insbesondere in Anwendungsfällen vorteilhaft, in welchen die Ausführung mehrerer Treffer- oder Intersektions-Shader von einer Strahltraversierungsabfrage gewünscht wird, die bei Implementierung ohne dedizierte Hardwareunterstützung einen erheblichen Overhead mit sich bringen würde. Diese umfassen, ohne darauf beschränkt zu sein, Nächstgelegene-k-Treffer-Abfrage (Starten eines Treffer-Shaders für die k nächstgelegenen Intersektionen) und mehrere programmierbare Intersektions-Shader.
  • Die hierin beschriebenen Techniken können als Erweiterung der in 40 veranschaulichten (und in Bezug auf 40-44 beschriebenen) Architektur implementiert werden. Konkret bauen die vorliegenden Ausführungsformen der Erfindung auf dieser Architektur mit Erweiterungen zum Verbessern der Performance der oben erwähnten Anwendungsfälle auf.
  • Eine Beschränkung der Performance von hybriden Strahlverfolgungstraversierungsarchitekturen stellen der Overhead durch das Starten von Traversierungsabfragen von den Ausführungseinheiten und der Overhead durch das Aufrufen von programmierbaren Shadern von der Strahlverfolgungshardware dar. Wenn mehrere Treffer- oder Intersektions-Shader während der Traversierung desselben Strahls aufgerufen werden, erzeugt dieser Overhead „Ausführungs-Roundtrips“ (Hin- und Rückübertragungen) zwischen den programmierbaren Kernen 4001 und der Traversierungs-/Intersektionseinheit 4005. Dies erhöht auch den Druck auf die Sortiereinheit 4008, die SIMD-/SIMT-Kohärenz aus den einzelnen Shader-Aufrufen extrahieren muss.
  • Mehrere Aspekte von Strahlverfolgung erfordern programmierbare Steuerung, die durch die verschiedenen Shader-Typen ausgedrückt werden kann, die in vorstehender TABELLE A aufgeführt sind (d. h. Primär, Treffer, Jeder Treffer, Fehler, Intersektion, Traversierung und Aufrufbar). Es kann mehrere Shader für jeden Typ geben. Zum Beispiel kann jedes Material einen unterschiedlichen Treffer-Shader aufweisen. Einige dieser Shader-Typen sind in der aktuellen Strahlverfolgungs-API von Microsoft® definiert.
  • Kurz zusammengefasst wird rekursive Strahlverfolgung durch eine API-Funktion initiiert, die der GPU befiehlt, einen Satz von Primär-Shadern zu starten, die Strahl-Szene-Intersektionen (implementiert in Hardware und/oder Software) für Primärstrahlen erzeugen können. Dies wiederum kann andere Shader, wie beispielsweise Traversierungs-, Treffer- oder Fehler-Shader erzeugen. Ein Shader, der einen Kind-Shader erzeugt, kann außerdem einen Rückgabewert von diesem Shader empfangen. Aufrufbare Shader sind Universalfunktionen, die durch einen anderen Shader direkt erzeugt werden können und ebenfalls Rückgabewerte an den aufrufenden Shader zurückliefern können.
  • Strahltraversierung berechnet Strahl-Szene-Intersektionen durch Traversieren und Schneiden von Knoten in einer Begrenzungsvolumenhierarchie (BVH). Jüngste Forschungen haben gezeigt, dass die Wirksamkeit des Berechnens von Strahl-Szene-Intersektionen unter Verwendung von Techniken, die für Hardware mit fester Funktion besser geeignet sind, wie beispielsweise Arithmetik reduzierter Genauigkeit, BVH-Komprimierung, Pro-Strahl-Zustandsmaschinen, dedizierte Intersektionspipelines und benutzerdefinierte Caches, um über eine Größenordnung verbessert werden kann.
  • Die in 40 dargestellte Architektur umfasst solch ein System, in welchem ein Array von SIMD-/SIMT-Kernen/-Ausführungseinheiten 4001 mit einer Strahlverfolgungs-/-intersektionseinheit 4005 interagiert, um programmierbare Strahlverfolgung durchzuführen. Programmierbare Shader werden auf SIMD/SIMT-Threads auf den Ausführungseinheiten/- kernen 4001 abgebildet, wobei SIMD/SIMT-Nutzung, -Ausführung und - Datenkohärenz für optimale Performance entscheidend sind. Strahlabfragen lösen Kohärenz aus verschiedenen Gründen häufig auf, darunter:
    • Traversierungsdivergenz: Die Dauer der BVH-Traversierung variiert stark zwischen Strahlen, die asynchrone Strahlverarbeitung bevorzugen.
    • Ausführungsdivergenz: Strahlen, die aus verschiedenen Lanes desselben SIMD-/SIMT-Threads erzeugt werden, können zu verschiedenen Shader-Aufrufen führen.
    • Datenzugriffsdivergenz: Strahlen, die auf verschiedenen Oberflächen auftreffen, sampeln verschiedene BVH-Knoten und Primitive, und Shader greifen zum Beispiel auf verschiedene Texturen zu. Datenzugriffsdivergenz kann durch eine Vielzahl anderer Szenarien verursacht werden.
  • Die SIMD/SIMT-Kerne/-Ausführungseinheiten 4001 können Varianten von hierin beschriebenen Kernen/Ausführungseinheiten sein, welche die Grafikkern(e) 415A-415B, die Shader-Kerne 1355A-N, die Grafikkerne 3130, die Grafik-Ausführungseinheit 608, die Ausführungseinheiten 852A-B oder beliebige andere Kerne/Ausführungseinheiten umfassen, die hierin beschrieben werden. Die SIMD/SIMT-Kerne/-Ausführungseinheiten 4001 können anstelle der Grafikkern(e) 415A-415B, der Shader-Kerne 1355A-N, der Grafikkerne 3130, der Grafik-Ausführungseinheit 608, der Ausführungseinheiten 852A-B oder beliebiger anderer hierin beschriebener Kerne/Ausführungseinheiten verwendet werden. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit den Grafikkern(en) 415A-415B, den Shader-Kernen 1355AN, den Grafikkernen 3130, der Grafik-Ausführungseinheit 608, den Ausführungseinheiten 852A-B oder beliebigen anderen hierin beschriebenen Kerne/Ausführungseinheiten hierin auch eine entsprechende Kombination mit den SIMD/SIMT-Kernen/-Ausführungseinheiten 4001 von 40, ohne darauf beschränkt zu sein.
  • Die Strahlverfolgungs-/-intersektionseinheit 4005 kann die ersten zwei Probleme durch Verarbeiten jedes Strahls individuell und außerhalb der Reihenfolge bewältigen. Dies löst jedoch SIMD-/SIMT-Gruppen auf. Die Sortiereinheit 4008 ist daher für das Bilden neuer, kohärenter SIMD/SIMT-Gruppen von Shader-Aufrufen zur neuerlichen Verteilung an die Ausführungseinheiten verantwortlich.
  • Die Vorteile solch einer Architektur gegenüber einer rein softwarebasierten Strahlverfolgungsimplementierung direkt auf den SIMD-/SIMT-Prozessoren sind leicht zu erkennen. Allerdings gibt es einen Overhead, der mit der Nachrichtenübermittlung zwischen den SIMD/SIMT-Kernen/-Ausführungseinheiten 4001 (hierin manchmal einfach als SIMD/SIMT-Prozessoren oder -Kerne-/-EUs bezeichnet) und der MIMD-Traversierungs-/Intersektionseinheit 4005 assoziiert ist. Außerdem kann die Sortiereinheit 4008 aus inkohärenten Shader-Aufrufen keine perfekte SIMD/SIMT-Nutzung gewinnen.
  • Es können Anwendungsfälle identifiziert werden, in welchen Shader-Aufrufe während einer Traversierung besonders häufig sind. Verbesserungen werden für hybride MIMD-Strahlverarbeitungsprozessoren beschrieben, um den Overhead von Kommunikation zwischen den Kernen/EUs 4001 und den Traversierungs-/Intersektionseinheiten 4005 signifikant zu reduzieren. Dies kann insbesondere bei der Ermittlung der k nächstgelegenen Intersektionen und Implementierung von programmierbaren Intersektions-Shadern vorteilhaft sein. Es ist jedoch zu erwähnen, dass die hierin beschriebenen Techniken nicht auf ein bestimmtes Verarbeitungsszenario beschränkt sind.
  • Im Folgenden wird eine Zusammenfassung der hohen Kosten des Strahlverfolgungskontextwechsels zwischen den Kernen/EUs 4001 und der Traversierungs-/Intersektionseinheit mit fester Funktion 4005 bereitgestellt. Der Großteil des Peformance-Overheads wird jedes Mal, wenn der Shader-Aufruf während einer Einzelstrahltraversierung notwendig ist, durch diese beiden Kontextwechsel verursacht.
  • Jede SIMD/SIMT-Lane, die einen Strahl startet, erzeugt eine Erzeugungsnachricht für die Traversierungs-/Intersektionseinheit 4005, die mit einer zu traversierenden BVH assoziiert ist. Die Daten (der Strahltraversierungskontext) werden durch die Erzeugungsnachricht und den (Zwischen-)Speicher an die Traversierungs-/Intersektionseinheit 4005 weitergeleitet. Wenn die Traversierungs-/Intersektionseinheit 4005 bereit ist, einen neuen Hardwarethread zur Erzeugungsnachricht zuzuordnen, lädt sie den Traversierungszustand und führt Traversierung an der BVH durch. Es gibt auch Setup-Kosten, die vor dem ersten Traversierungsschritt an der BVH geleistet werden müssen.
  • 45 veranschaulicht einen Betriebsfluss einer programmierbaren Strahlverfolgungspipeline. Die schattierten Elemente, die Traversierung 4502 und Intersektion 4503 umfassen, können in Schaltungsanordnung mit fester Funktion implementiert sein, während die restlichen Elemente mit programmierbaren Kernen/Ausführungseinheiten implementiert sein können.
  • Ein Primärstrahl-Shader 4501 sendet bei 4502 Arbeit an die Traversierungsschaltungsanordnung, welche die aktuellen Strahl(en) durch die BVH (oder eine andere Beschleunigungsarchitektur) traversiert. Wenn ein Blattknoten erreicht wird, ruft die Traversierungsschaltungsanordnung bei 4503 die Intersektionsschaltungsanordnung auf, die bei Identifizierung einer Strahl-Dreieck-Intersektion bei 4504 einen Jeder-Treffer-Shader aufruft (der Ergebnisse an die Traversierungsschaltungsanordnung zurückliefern kann, wie angezeigt).
  • Alternativ kann die Traversierung vor dem Erreichen eines Blattknotens beendet werden, und es wird bei 4507 ein Nächstgelegener-Treffer-Shader (wenn ein Treffer gemeldet wurde) oder bei 4506 ein Fehler-Shader (im Falle eines Fehlers) aufgerufen.
  • Wie bei 4505 angezeigt, kann ein Intersektions-Shader aufgerufen werden, wenn die Traversierungsschaltungsanordnung einen Blattknoten mit benutzerdefiniertem Primitiv erreicht. Ein benutzerdefiniertes Primitiv kann ein beliebiges Nicht-Dreieck-Primitiv sein, wie beispielsweise ein Polygon oder ein Polyeder (z. B. Tetraeder, Voxels, Hexaeder, Keile, Pyramiden oder ein anderes unstrukturiertes Volumen). Der Intersektions-Shader 4505 identifiziert jegliche Intersektionen zwischen dem Strahl und dem benutzerdefinierten Primitiv für den Jeder-Treffer-Shader 4504, der Jeder-Treffer-Verarbeitung implementiert.
  • Wenn Hardwaretraversierung 4502 eine programmierbare Stufe erreicht, kann die Traversierungs-/Intersektionseinheit 4005 eine Shader-Verteilungsnachricht an einen relevanten Shader 4505-4507 erzeugen, der einer einzelnen SIMD-Lane der Ausführungseinheit(en) entspricht, die verwendet werden, um den Shader auszuführen. Da Verteilungen in einer willkürlichen Reihenfolge von Strahlen erfolgen und sie in den aufgerufenen Programmen divergent sind, kann die Sortiereinheit 4008 mehrere Verteilungsaufrufe akkumulieren, um kohärente SIMD-Batches zu extrahieren. Der aktualisierte Traversierungszustand und die optionalen Shader-Argumente werden durch die Traversierungs-/Intersektionseinheit 4005 in den Speicher 2511 geschrieben.
  • Beim Problem der k nächstgelegenen Intersektionen wird ein Nächstgelegener-Treffer-Shader 4507 für die ersten k Intersektionen ausgeführt. Bei der herkömmlichen Methode würde dies das Beenden der Strahltraversierung bei Auffinden der nächstgelegenen Intersektion, Aufrufen eines Treffer-Shaders und Erzeugen eines neuen Strahls aus dem Treffer-Shader zum Suchen der nächsten nächstgelegenen Intersektion (mit dem Strahlursprungsoffset, damit nicht dieselbe Intersektion erneut erfolgt) bedeuten. Es ist leicht zu erkennen, dass diese Implementierung k Strahlerzeugungen für einen einzigen Strahl erfordern würde. Eine andere Implementierung funktioniert mit Jeder-Treffer-Shadern 4504, die für alle Intersektionen aufgerufen werden, und Verwalten einer globalen Liste von nächstgelegenen Intersektionen unter Verwendung einer Einfügesortieroperation. Das Hauptproblem bei diesem Ansatz ist, dass es keine Obergrenze für Jeder-Treffer-Shader-Aufrufe gibt.
  • Wie bereits erwähnt, kann ein Intersektions-Shader 4505 bei (benutzerdefinierten) Nicht-Dreieck-Primitiven aufgerufen werden. In Abhängigkeit vom Ergebnis des Intersektionstests und des Traversierungszustands (anstehende Knoten- und Primitiv-Intersektionen) kann die Traversierung desselben Strahls nach der Ausführung des Intersektions-Shaders 4505 fortfahren. Daher kann das Auffinden des nächstgelegenen Treffers mehrere Hin- und Rückübertragungen zu/von der Ausführungseinheit erfordern.
  • Ein Schwerpunkt kann auch auf die Reduzierung von SIMD-MIMD-Kontextwechseln für Intersektions-Shader 4505 und Treffer-Shader 4504, 4507 durch Änderungen an der Traversierungshardware und dem Shader-Dispositionsmodell gelegt werden. Zunächst verzögert die Strahltraversierungsschaltungsanordnung 4005 Shader-Aufrufe durch Akkumulieren mehrerer potenzieller Aufrufe und ihr Verteilen in einem größeren Batch. Außerdem können bestimmte Aufrufe, die sich als unnötig herausstellen, auf dieser Stufe gecullt werden. Darüber hinaus kann der Shader-Scheduler 4007 mehrere Shader-Aufrufe aus demselben Traversierungskontext zu einem einzigen SIMD-Batch aggregieren, was zu einer einzigen Strahlerzeugungsnachricht führt. In einer beispielhaften Implementierung unterbricht die Traversierungshardware 4005 den Traversierungsthread und wartet auf die Ergebnisse von mehreren Shader-Aufrufen. Dieser Betriebsmodus wird hierin als „spekulative“ Shader-Ausführung bezeichnet, da er die Verteilung mehrerer Shader ermöglicht, von welchen einige möglicherweise nicht aufgerufen werden, wenn sequenzielle Aufrufe verwendet werden.
  • 46A veranschaulicht ein Beispiel, bei welchem eine Traversierungsoperation mehrere benutzerdefinierte Primitive 4650 in einem Teilbaum findet, und 46B veranschaulicht, wie dies mit drei Intersektionsverteilungszyklen C1-C3 gelöst werden kann. Konkret kann der Scheduler 4007 drei Zyklen zum Übermitteln der Arbeit an den SIMD-Prozessor 4001 benötigen, und die Traversierungsschaltungsanordnung 4005 benötigt drei Zyklen zum Bereitstellen der Ergebnisse für die Sortiereinheit 4008. Der von der Traversierungsschaltungsanordnung 4005 benötigte Traversierungszustand 4601 kann in einem Speicher, wie beispielsweise einem lokalen Cache (z. B. einem L1-Cache und/oder L2-Cache), gespeichert werden.
  • A. Verzögerte Strahlverfolgungs-Shader-Aufrufe
  • Die Art und Weise, auf welche der Hardwaretraversierungszustand 4601 verwaltet wird, um die Akkumulierung von mehreren potenziellen Intersektions- oder Trefferaufrufen in einer Liste zu ermöglichen, kann ebenfalls modifiziert werden. Zu einem gegebenen Zeit während der Traversierung kann jeder Eintrag in der Liste zum Erzeugen eines Shader-Aufrufs verwendet werden. Zum Beispiel können die k nächstgelegenen Intersektionspunkte auf der Traversierungshardware 4005 und/oder im Traversierungszustand 4601 im Speicher akkumuliert werden, und Treffer-Shader können für jedes Element aufgerufen werden, wenn die Traversierung abgeschlossen ist. Für Treffer-Shader können mehrere potenzielle Intersektionen für einen Teilbaum in der BVH akkumuliert werden.
  • Für den Nächstgelegene-k-Anwendungsfall ist der Vorteil dieses Ansatzes, dass anstelle von k - 1 Hin- und Rückübertragungen zu/von den SIMD-Kernen/-EUs 4001 und k - 1 neuen Erzeugungsnachrichten alle Treffer-Shader aus dem gleichen Traversierungsthread während einer einzelnen Traversierungsoperation auf der Traversierungsschaltungsanordnung 4005 aufgerufen werden. Ein Problem für potenzielle Implementierungen ist, dass es nicht unbedeutend ist, die Ausführungsreihenfolge von Treffer-Shadern zu garantieren (der „Roundtrip“-Standardansatz garantiert, dass der Treffer-Shader der nächstgelegenen Intersektion zuerst ausgeführt wird, usw.). Dies kann entweder durch die Synchronisierung der Treffer-Shader oder die Lockerung der Reihenfolge gelöst werden.
  • Für den Intersektions-Shader-Anwendungsfall weiß die Traversierungsschaltungsanordnung 4005 im Voraus nicht, ob ein gegebener Shader einen positiven Intersektionstest zurücksenden wird. Es ist jedoch möglich, spekulativ mehrere Intersektions-Shader auszuführen und, wenn zumindest einer ein positives Treffer-Ergebnis zurücksendet, wird er mit dem globalen nächstgelegenen Treffer zusammengeführt. Spezifische Implementierungen müssen eine optimale Anzahl von verzögerten Intersektionstests finden, um die Anzahl von Verteilungsaufrufen zu reduzieren, aber ein Aufrufen zu vieler redundanter Intersektions-Shader zu vermeiden.
  • B. Aggregierte Shader-Aufrufe von der Traversierungsschaltungsanordnung
  • Bei Verteilung mehrerer Shader aus derselben Strahlerzeugung auf der Traversierungsschaltung 4005 können Verzweigungen im Fluss des Strahltraversierungsalgorithmus erzeugt werden. Dies kann für Intersektions-Shader problematisch sein, da der Rest der BVH-Traversierung vom Ergebnis aller verteilten Intersektionstests abhängt. Dies bedeutet, dass eine Synchronisierungsoperation notwendig ist, um auf das Ergebnis der Shader-Aufrufe zu warten, was auf asynchroner Hardware schwierig sein kann.
  • Zwei Punkte zum Zusammenführen der Ergebnisse der Shader-Aufrufe können sein: der SIMD-Prozessor 4001 und die Traversierungsschaltungsanordnung 4005. In Bezug auf den SIM-Prozessor 4001 können mehrere Shader synchronisiert werden und ihre Ergebnisse unter Verwendung von Programmiermodellen aggregieren. Eine verhältnismäßig einfache Möglichkeit, dies zu tun, ist, globale Unteilbarkeiten zu verwenden und Ergebnisse in einer gemeinsamen Datenstruktur in einem Speicher zu aggregieren, in welchem die Intersektionsergebnisse mehrerer Shader gespeichert werden könnten. Dann kann der letzte Shader die Datenstruktur auflösen und die Traversierungsschaltungsanordnung 4005 erneut aufrufen, um die Traversierung fortzusetzen.
  • Es kann auch ein wirksamerer Ansatz implementiert werden, der die Ausführung mehrerer Shader-Aufrufe auf Lanes desselben SIMD-Threads auf dem SIMD-Prozessor 4001 beschränkt. Die Intersektionstests werden dann unter Verwendung von SIMD/-SIMT-Reduzierungsoperationen lokal reduziert (statt auf globale Unteilbarkeiten zu bauen). Diese Implementierung kann auf neuer Schaltungsanordnung innerhalb der Sortiereinheit 4008 beruhen, um ein kleines Batch von Shader-Aufrufen im gleichen SIMD-Batch bleiben zu lassen.
  • Die Ausführung der Traversierungsthreads auf der Traversierungsschaltungsanordnung 4005 kann ferner unterbrochen werden. Unter Verwendung des herkömmlichen Ausführungsmodells wird, wenn ein Shader während einer Traversierung verteilt wird, der Traversierungsthread beendet und der Strahltraversierungszustand wird in einem Speicher gespeichert, um die Ausführung von anderen Strahlerzeugungsbefehlen zu ermöglichen, während die Ausführungseinheiten 4001 die Shader verarbeiten. Wenn der Traversierungsthread bloß unterbrochen wird, muss der Traversierungszustand nicht gespeichert werden und kann auf jedes Shader-Ergebnis getrennt warten. Diese Implementierung kann Schaltungsanordnung zum Vermeiden von Blockierungen und Bereitstellen ausreichender Hardwarenutzung umfassen.
  • 47 und 48 veranschaulichen Beispiele eines Verzögerungsmodells, das einen einzigen Shader-Aufruf auf den SIM-Kernen/Ausführungseinheiten 4001 mit drei Shadern 4701 aufruft. Bei Bewahrung werden alle Intersektionstests innerhalb derselben SIMD/SIMT-Gruppe ausgewertet. Folglich kann die nächstgelegene Intersektion ebenfalls auf den programmierbaren Kernen/Ausführungseinheiten 4001 berechnet werden.
  • Wie erwähnt, kann die Gesamtheit oder ein Teil der Shader-Aggregation und/oder -Verzögerung durch die Traversierungs-/Intersektionsschaltungsanordnung 4005 und/oder den Kern-/EU-Scheduler 4007 durchgeführt werden. 47 veranschaulicht, wie eine Shader-Verzögerungs-/Aggregatorschaltungsanordnung 4706 innerhalb des Schedulers 4007 Disposition von Shadern, die mit einem spezifischen SIMD-/SIMT-Thread bzw. einer spezifischen SIMD-/SIMT-Lane assoziiert sind, verzögern kann, bis ein spezifiziertes Auslöseereignis eintritt. Bei Erkennen des Auslöseereignisses verteilt der Scheduler 4007 die mehreren aggregierten Shader in einem einzigen SIMD-/SIMT-Batch an die Kerne/EUs 4001.
  • 48 veranschaulicht, wie eine Shader-Verzögerungs-/Aggregatorschaltungsanordnung 4805 innerhalb der Traversierungs-/Intersektionsschaltungsanordnung 4005 Disposition von Shadern, die mit einem spezifischen SIMD-Thread bzw. einer spezifischen SIMD-Lane assoziiert sind, verzögern kann, bis ein spezifiziertes Auslöseereignis eintritt. Bei Erkennen des Auslöseereignisses übermittelt die Traversierungs-/Intersektionsschaltungsanordnung 4005 die aggregierten Shader in einem einzigen SIMD-/SIMT-Batch an die Sortiereinheit 4008.
  • Es ist jedoch zu erwähnen, dass die Shader-Verzögerungs- und -Aggregationstechniken innerhalb verschiedener anderer Komponenten implementiert werden können, wie beispielsweise der Sortiereinheit 4008, oder über mehrere Komponenten verteilt werden können. Zum Beispiel kann die Traversierungs-/Intersektionsschaltungsanordnung 4005 einen ersten Satz von Shader-Aggregationsoperationen durchführen, und der Scheduler 4007 kann einen zweiten Satz von Shader-Aggregationsoperationen durchführen, um sicherzustellen, dass Shader für einen SIMD-Thread auf den Kernen/EUs 4001 effizient disponiert werden.
  • Das „Auslöseereignis“, das die Verteilung der aggregierten Shader an die Kerne/EUs bewirkt, kann ein Verarbeitungsereignis sein, wie beispielsweise eine spezifische Anzahl von akkumulierten Shadern oder eine mit einem spezifischen Thread assoziierte Mindestlatenz. Alternativ oder zusätzlich kann das Auslöseereignis ein zeitliches Ereignis sein, wie beispielsweise eine bestimmte Dauer von einer Verzögerung des ersten Shaders oder eine spezifische Anzahl von Prozessorzyklen. Andere Variablen, wie beispielsweise die aktuelle Workload auf den Kernen/EUs 4001 und der Traversierungs-/Intersektionsschaltungseinheit 4005 können vom Scheduler 4007 ebenfalls ausgewertet werden, um zu bestimmen, wann das SIMD/SIMT-Batch von Shaders verteilt werden soll.
  • Verschiedene Ausführungsformen der Erfindung können unter Verwendung verschiedener Kombinationen der zuvor erwähnten Ansätze basierend auf der spezifischen verwendeten Systemarchitektur und den Anforderungen der Anwendung implementiert werden.
  • STRAHLVERFOLGUNGSANWEISUNGEN
  • Die nachstehend beschriebenen Strahlverfolgungsanweisungen sind in einer Anweisungssatzarchitektur (ISA - Instruction Set Architecture) enthalten, die von der CPU 3199 und/oder der GPU 3105 unterstützt wird. Bei Ausführung durch die CPU können die Einzelanweisungs-Mehrfachdaten-(SIMD-)Anweisungen Vektor-/gepackte Quell- und Zielregister zum Durchführen der beschriebenen Operationen verwenden und können durch einen CPU-Kern decodiert und ausgeführt werden. Bei Ausführung durch eine GPU 3105 können die Anweisungen von den Grafikkernen 3130 ausgeführt werden. Zum Beispiel kann jede der oben beschriebenen Ausführungseinheiten (EU) 4001 die Anweisungen ausführen. Alternativ oder zusätzlich können die Anweisungen von Anweisungsschaltungsanordnung auf den Strahlverfolgungskernen 3150 und/oder Tensorkernen 3140 ausgeführt werden.
  • 49 veranschaulicht eine Architektur zum Ausführen der Strahlverfolgungsanweisungen, die im Folgenden beschrieben wird. Die veranschaulichte Architektur kann in einen oder mehrere der oben beschriebenen Kerne 3130, 3140, 3150 (siehe z. B. 31 und zugehörigen Text) integriert sein, oder sie kann in einer anderen Prozessorarchitektur umfasst sein.
  • In Betrieb ruft eine Anweisungsabrufeinheit 4903 Strahlverfolgungsanweisungen 4900 von einem Speicher 3198 ab, und ein Decoder 4995 decodiert die Anweisungen. In einer Implementierung decodiert der Decoder 4995 Anweisungen zum Erzeugen von ausführbaren Operationen (z. B. Mikrooperationen oder Uops in einem mikrocodierten Kern). Alternativ können einige oder alle der Strahlverfolgungsanweisungen 4900 ohne Decodierung ausgeführt werden, so dass kein Decoder 4904 erforderlich ist.
  • In jeder Implementierung disponiert und verteilt ein Scheduler/Verteiler 4905 die Anweisungen (oder Operationen) über eine Satz von Funktionseinheiten (FU - Functional Unit) 4910-4912. Die veranschaulichte Implementierung umfasst eine Vektor-FU 4910 zum Ausführen von Einzelanweisungs-Mehrfachdaten-(SIMD-)Anweisungen, die Operationen an mehreren gepackten Datenelementen, die in Vektor-Registern 4915 gespeichert sind, gleichzeitig durchführen, und eine Skalar-FU 4911 zum Durchführen von Operationen an Skalarwerten, die in einem oder mehreren Skalar-Registern 4916 gespeichert sind. Eine optionale Strahlverfolgungs-FU 4912 kann an gepackten Datenwerten, die in den Vektor-Registern 4915 gespeichert sind, und/oder Skalarwerten, die in den Skalar-Registern 4916 gespeichert sind, Operationen durchführen. In einer Implementierung ohne dedizierte FU 4912 können die Vektor-FU 4910 und möglicherweise die Skalar-FU 4911 die nachstehend beschriebenen Strahlverfolgungsanweisungen ausführen.
  • Die verschiedenen FUs 4910-4912 rufen Strahlverfolgungsdaten 4902 (z. B. Traversierungs-/Intersektionsdaten), die zum Ausführen der Strahlverfolgungsanweisungen 4900 benötigt werden, aus dem Vektor-Registern 4915, dem Skalar-Register 4916 und/oder dem lokalen Cache-Subsystem 4908 (z. B. einem L1-Cache) ab. Die FUs 4910-4912 können außerdem Zugriffe auf Speicher 3198 über Lade- und Speicheroperationen durchführen, und das Cache-Subsystem 4908 kann unabhängig so funktionieren, dass es die Daten lokal zwischenspeichert.
  • Obwohl die Strahlverfolgungsanweisungen zum Verbessern der Performance für Strahltraversierung/-intersektion und BVH-Builds verwendet werden können, können sie auch auf andere Bereiche, wie beispielsweise Hochleistungsrechen-(HPC - High Performance Computing) und Universal-GPU-(GPGPU-)Implementierungen anwendbar sein.
  • In den nachfolgenden Beschreibungen wird der Begriff „Doppelwort“ manchmal als „dw“ abgekürzt, und unsigniertes Byte wird als „ub“ abgekürzt. Außerdem können die Quell- und Zielregister, auf die nachstehend Bezug genommen wird (z. B. src0, src1, dest usw.), sich auf Vektor-Register 4915 oder in einigen Fällen auf eine Kombination von Vektor-Registern 4915 und Skalar-Registern 4916 beziehen. Typischerweise werden Vektor-Register 4915 verwendet, wenn ein Quell- oder Zielwert, der von einer Anweisung verwendet wird, gepackte Datenelemente umfasst (wenn z. B. eine Quelle oder ein Ziel N Datenelemente speichert). Andere Werte können Skalar-Register 4916 oder Vektor-Register 4915 verwenden.
  • Dequantisieren
  • Ein Beispiel der Dequantisierungsanweisung „dequantisiert“ zuvor quantisierte Werte. Als Beispiel können in einer Strahlverfolgungsimplementierung bestimmte BVH-Teilbäume quantisiert werden, um Speicher- und Bandbreitenanforderungen zu reduzieren. Die Dequantisierungsanweisung kann die Form „Dequantisieren von dest src0 src1 src2“ annehmen, wobei das Quellregister src0 N unsignierte Bytes speichert, das Quellregister src1 1 unsigniertes Byte speichert, das Quellregister src2 1 Gleitkommawert speichert, und das Zielregister dest N Gleitkommawerte speichert. All diese Register können Vektor-Register 4915 sein. Alternativ können src0 und dest Vektor-Register 4915 sein, und src 1 und src2 können Skalar-Register 4916 sein.
  • Die folgende Codesequenz definiert eine spezifische Implementierung der Dequantisierungsanweisung:
  •       für (int i = 0; i < SIMD_WIDTH) {
              wenn (execMask[i]) {
                }}dst[i] = src2[i] + Idexp(convert_to_float(src0[i]),src1);
              }
          }
  • In diesem Beispiel multipliziert Idexp einen doppeltgenauen Gleitkommawert mit einer spezifizierten ganzzahligen Potenz von zwei (d. h. Idexp(x, exp) = x * 2exp). Wenn im vorstehenden Code der Ausführungsmaskenwert, der mit dem aktuellen SIMD-Datenelement (execMask[i])) assoziiert ist, auf 1 gesetzt ist, dann wird das SIMD-Datenelement in Position i in src0 in einen Gleitkommawert umgewandelt und mit der ganzzahligen Potenz des Wertes in src1 (2src1-Wert) multipliziert, und dieser Wert wird zum entsprechenden SIMD-Datenelement in src2 addiert.
  • Selektive Min oder Max
  • Eine selektive Min- oder Max-Anweisung kann entweder eine Min- oder eine Max-Operation pro Lane durchführen (d. h. das Minimum oder das Maximum eines Satzes von Werten zurückliefern), wie durch ein Bit in einer Bitmaske angezeigt. Die Bitmaske kann die Vektor-Register 4915, Skalar-Register 4916 oder einen separaten Satz von Maskenregister (nicht dargestellt) verwenden. Die folgende Codesequenz definiert eine spezifische Implementierung der Min-/Max-Anweisung: sel_min_max dest src0 src1 src2, wobei src0 N Doppelwörter speichert, src1 N Doppelwörter speichert, src2 ein Doppelwort speichert, und das Zielregister N Doppelwörter speichert.
  • Die folgende Codesequenz definiert eine spezifische Implementierung der selektiven Min-/Max-Anweisung:
  •       für (int i = 0; i < SIMD_WIDTH) {
              wenn (execMask[i]) {
              dst[i] = (1 << i) & src2 ? min(src0[i],src1 [i]) : max(src0[i],src1 [i]);
              }
          }
  • In diesem Beispiel wird der Wert (1 < < i) & src2 (eine 1 linksverschoben um i UND-verknüpft mit src2) zum Auswählen entweder des Minimums des i-ten Datenelements in src0 und src1 oder des Maximums des i-ten Datenelements in src0 und src1 verwendet. Die Operation wird für das i-te Datenelement nur durchgeführt, wenn der Ausführungsmaskenwert, der mit dem aktuellen SIMD-Datenelement (execMask[i])) assoziiert ist, auf 1 gesetzt ist.
  • Mischindexanweisung
  • Eine Mischindexanweisung kann jeden Satz von Eingabe-Lanes auf die Ausgabe-Lanes kopieren. Für eine SIMD-Breite von 32 kann diese Anweisung bei einem niedrigeren Durchsatz ausgeführt werden. Diese Anweisung nimmt die folgende Form an: shuffle_index dest src0 src1 <optional flag>, wobei src0 N Doppelwörter speichert, src1 N unsignierte Bytes (d. h. den Indexwert) speichert, und dest N Doppelwörter speichert.
  • Die folgende Codesequenz definiert eine spezifische Implementierung der Mischindexanweisung:
  •       für (int i = 0; i < SIMD_WIDTH) {
          uint8_t srcLane = src1.index[i]; 
          wenn (execMask[i]) {
          bool invalidLane = srcLane < 0 || srcLane >= SIMD_WIDTH ||
     !execMask[srcLaneMod];
           
          wenn (FLAG) {
          invalidLane |= flag[srcLaneMod];
          }
    
           
          wenn (invalidLane) {
          dst[i] = src0[i];
          }
          sonst {
          dst[i] = src0[srcLane];
          }
          }
          }
  • Im vorstehenden Code identifiziert der Index in src1 die aktuelle Lane. Wenn der i-te Wert der Ausführungsmaske auf 1 gesetzt ist, dann wird eine Prüfung durchgeführt, um sicherzustellen, dass die Quell-Lane innerhalb des Bereichs von 0 bis zur SIMD-Breite ist. Wenn dies der Fall ist, dann wird ein Flag gesetzt (srcLaneMod), und das Datenelement i des Ziels wird gleich dem Datenelement i von src0 gesetzt. Wenn die Lane innerhalb des Bereichs (d. h. gültig) ist, dann wird der Indexwert von src1 (srcLane0) als ein Index in src0 (dst[i] = src0[srcLane]) verwendet.
  • Direkte Up/Dn/XOR-Mischanweisung
  • Eine direkte Mischanweisung kann Eingabedatenelemente/- Lanes basierend auf einem Immediate (Direktwert) der Anweisung mischen. Der Immediate kann Verschiebung der Eingabe-Lanes um 1, 2, 4, 8 oder 16 Positionen basierend auf dem Wert des Immediates spezifizieren. Optional kann ein zusätzliches Quell-Skalar-Register als Füllwert spezifiziert werden. Wenn der Quell-Lane-Index ungültig ist, wird der Füllwert (wenn bereitgestellt) in der Datenelementposition im Ziel gespeichert. Wenn kein Füllwert bereitgestellt wird, dann wird die Datenelementposition auf alle 0 gesetzt.
  • Ein Flag-Register kann als Quellmaske verwendet werden. Wenn das Flag-Bit für eine Quell-Lane auf 1 gesetzt ist, kann die Quell-Lane als ungültig markiert werden, und die Anweisung kann fortfahren.
  • Es folgen Beispiele verschiedener Implementierungen der direkten Mischanweisung:
  •  shuffle_<up/dn/xor>_<1/2/4/8/16> dest src0 <optional src1> <optional flag>
     shuffle_<up/dn/xor>_<1/2/4/8/16> dest src0 <optional src1> <optional flag>
  • In dieser Implementierung speichert src0 N Doppelwörter, src1 speichert ein Doppelwort für den Füllwert (falls vorhanden), und dest speichert N Doppelwörter, die das Ergebnis umfassen.
  • Die folgende Codesequenz definiert eine spezifische Implementierung der direkten Mischanweisung:
  •       für (int i = 0; i < S!MD_WIDTH) {
          int8_t srcLane;
          switch(SHUFFLE_TYPE) {
          case UP:
          srcLane = i - SHIFT;
          case DN:
          srcLane = i + SHIFT;
          case XOR:
          srcLane = i ^ SHIFT;
          }
           
          wenn (execMask[i]) {
          bool invalidLane = scrLane <0 || scrLane >= SIMD_WINDT ||
    !execMask[srcLane];
          wenn (FLAG) {
          invalidLane |= flag[srcLane];
          }
           
          wenn (invalidLane) {
          wenn (SRC1)
          dst[i] = src1;
          sonst
          dst[i] = 0;
          }
          sonst {
          dst[i] = src0[srcLane];
          }
          }
          }
  • Hierbei können die Eingabedatenelemente/-Lanes um 1, 2, 4, 8 oder 16 Positionen basierend auf dem Wert des Immediates verschoben werden. Das Register src1 ist ein zusätzliches Quell-Skalar-Register, das als Füllwert verwendet wird, der in der Datenelementposition im Ziel gespeichert wird, wenn der Quell-Lane-Index ungültig ist. Wenn kein Füllwert bereitgestellt wird, und der Quelle-Lane-Index ungültig ist, wird die Datenelementposition im Ziel auf 0en gesetzt. Das Flag-Register (FLAG) wird als Quellmaske verwendet. Wenn das Flag-Bit für eine Quell-Lane auf 1 gesetzt ist, kann die Quell-Lane als ungültig markiert werden, und die Anweisung fährt fort, wie oben beschrieben.
  • Indirekte Up/Dn/XOR-Mischanweisung
  • Die indirekte Mischanweisung weist einen Quelloperanden (src1) auf, der die Abbildung von Quell-Lanes auf Ziel-Lanes steuert. Die indirekte Mischanweisung kann die folgende Form annehmen:
  •       shuffle_<up/dn/xor> dest src0 src1 <optional flag> 
    wobei src0 N Doppelwörter speichert, src1 1 Doppelwort speichert, und dest N Doppelwörter speichert.
  • Die folgende Codesequenz definiert eine spezifische Implementierung der indirekten Mischanweisung:
  •       für (int i = 0; i < S!MD_WIDTH) {
          int8_t srcLane;
          switch(SHUFFLE_TYPE) {
          case UP:
          srcLane = i - src1;
          case DN:
          srcLane = i + src1;
          case XOR:
          srcLane = i ^ src1;
          }
           
          wenn (execMask[i]) {
          bool invalidLane = srcLane < 0 || srcLane >= SIMD_WIDTH ||
     !execMask[srcLane];
           
          wenn (FLAG) {
          invalidLane |= flag[srcLane];
          }
           
          wenn (invalidLane) {
          dst[i] = 0;
          }
          sonst {
          dst[i] = src0[srcLane];
          }
          }
          }
  • Demnach funktioniert die indirekte Mischanweisung ähnlich wie die oben beschriebene direkte Mischanweisung, aber die Abbildung von Quell-Lanes auf Ziel-Lanes wird durch das Quellregister src1 statt durch den Immediate gesteuert.
  • Lane-übergreifende Min-/Max-Anweisung
  • Eine Lane-übergreifende Minimum-/Maximum-Anweisung kann für Gleitkomma- und Ganzzahl-Datentypen verwendet werden. Die Lane-übergreifende Minimum-Anweisung kann die Form „lane_min dest src0“ annehmen, und die Lane-übergreifende Maximum-Anweisung kann die Form „Iane_max dest src0“ annehmen, wobei src0 N Doppelwörter speichert und dest 1 Doppelwort speichert.
  • Als Beispiel definiert die folgende Codesequenz eine spezifische Implementierung des Lane-übergreifenden Minimums: dst = src [ 0 ]
    Figure DE102021116364A1_0002
  •       für (int i = 1; i < S!MD_WIDTH) {
          wenn (execMask[i]) {
          dst = min(dst, src[i]);
          }
          }
  • In diesem Beispiel wird der Doppelwort-Wert in der Datenelementposition i des Quellregisters mit dem Datenelement im Zielregister verglichen, und das Minimum der beiden Werte wird in das Zielregister kopiert. Die Lane-übergreifende Maximum-Anweisung funktioniert im Wesentlichen auf dieselbe Weise, mit dem einzigen Unterschied, dass das Maximum des Datenelements in Position i und der Zielwert ausgewählt werden.
  • Lane-übergreifende Min-/Max-Index-Anweisung
  • Die Lane-übergreifende Minimum-Index-Anweisung kann die Form „lane_min_index dest src0“ annehmen, und die Lane-übergreifende Maximum-Index-Anweisung kann die Form „lane_max_index dest src0“ annehmen, wobei src0 N Doppelwörter speichert und dest 1 Doppelwort speichert.
  • Als Beispiel definiert die folgende Codesequenz definiert eine spezifische Implementierung der Lane-übergreifenden Minimum-Index-Anweisung:
  •       dst_index = 0;
          tmp = src[0]
           
          für (int i = 1; i < S!MD_WIDTH) {
           
          wenn (src[i] < tmp && execMask[i])
          {
          tmp = src[i];
          dst_index = i;
          }
          }
  • In diesem Beispiel wird der Zielindex von 0 auf SIMD-Breite inkrementiert und umfasst das Zielregister. Wenn das Ausführungsmaskenbit gesetzt ist, dann wird das Datenelement in Position i im Quellregister in einen temporären Speicherplatz (tmp) kopiert, und der Zielindex wird auf die Datenelementposition i gesetzt.
  • Lane-übergreifende Sortiernetzwerk-Anweisung
  • Eine Lane-übergreifende Sortiernetzwerk-Anweisung kann alle N Eingabeelemente unter Verwendung eines N breiten (stabilen) Sortiernetzwerks entweder in aufsteigender Reihenfolge (sortnet_min) oder in absteigender Reihenfolge (sortnet_max) sortieren. Die Min-/Max-Versionen der Anweisung können die Formen „sortnet_min dest src0“ bzw. „sortnet_max dest src0“ annehmen. In einer Implementierung speichern src0 und dest N Doppelwörter. Die Min-/Max-Sortierung kann an den N Doppelwörtern von src0 durchgeführt werden, und die Elemente in aufsteigender Reihenfolge (für Min) oder die Elemente in absteigender Reihenfolge (für Max) werden in ihrer jeweils sortierten Reihenfolge in dest gespeichert. Ein Beispiel einer Codesequenz, welche die Anweisung definiert, ist: dst = apply_N_wide_sorting_network_min/max(src0).
  • Lane-übergreifende Sortierungsnetzwerk-Index-Anweisung
  • Eine Lane-übergreifende Sortiernetzwerk-Index-Anweisung kann alle N Eingabeelemente unter Verwendung eines N breiten (stabilen) Sortiernetzwerks sortieren, gibt aber den Permutationsindex entweder in aufsteigender Reihenfolge (sortnet_min) oder in absteigender Reihenfolge (sortnet_max) zurück. Die Min-/Max-Versionen der Anweisung können die Formen „sortnet_min_index dest src0“ and „sortnet_max_index dest src0“ annehmen, wobei src0 und dest jeweils N Doppelwörter speichern. Ein Beispiel einer Codesequenz, welche die Anweisung definiert, ist: dst = appiy_N_wide_sorting_network_min/max_index(src0).
  • Ein Verfahren zur Ausführung beliebiger der vorstehenden Anweisungen ist 50 veranschaulicht. Das Verfahren kann auf den vorstehend beschriebenen Prozessorarchitekturen implementiert werden, ist aber nicht auf eine spezifische Prozessor- oder Systemarchitektur beschränkt.
  • Bei 5001 werden Anweisungen eines primären Grafik-Threads auf Prozessorkernen ausgeführt. Diese können zum Beispiel einen der oben beschriebenen Kerne (z. B. die Grafikkerne 3130) umfassen. Wenn Strahlverfolgungsarbeit innerhalb des primären Grafik-Threads erreicht wird, was bei 5002 bestimmt wird, werden die Strahlverfolgungsanweisungen an die Strahlverfolgungsausführungs-Schaltungsanordnung ausgelagert, welche die Form einer Funktionseinheit (FU), wie beispielsweise in Bezug auf 49 beschrieben, aufweisen kann oder welche in einem dedizierten Strahlverfolgungskern 3150 sein kann, wie in Bezug auf 31 beschrieben.
  • Bei 5003 werden die Strahlverfolgungsanweisungen decodiert oder von einem Speicher abgerufen, und bei 5005 werden die Anweisungen in ausführbare Anweisungen decodiert (z. B. in einer Ausführungsform, die einen Decoder benötigt). Bei 5004 werden die Strahlverfolgungsanweisungen zur Ausführung durch die Strahlverfolgungsschaltungsanordnung disponiert und verteilt. Bei 5005 werden die Strahlverfolgungsanweisungen von der Strahlverfolgungsschaltungsanordnung ausgeführt. Zum Beispiel können die Anweisungen verteilt und auf den oben beschriebenen FUs (z. B. der Vektor-FU 4910, der Strahlverfolgungs-FU 4912 usw.) und/oder den Grafikkernen 3130 oder den Strahlverfolgungskernen 3150 ausgeführt werden.
  • Wenn die Ausführung für eine Strahlverfolgungsanweisung abgeschlossen ist, werden die Ergebnisse bei 5006 gespeichert (z. B. wieder im Speicher 3198 gespeichert), und bei 5007 wird der primäre Grafik-Thread benachrichtigt. Bei 5008 werden die Strahlverfolgungsergebnisse innerhalb des Kontexts des primären Threads verarbeitet (z. B. aus dem Speicher ausgelesen und in Grafik-Rendering-Ergebnisse integriert).
  • In einigen Ausführungsformen kann der Begriff „Engine“ oder „Modul“ oder „Logik“ sich auf eine anwendungsspezifische integrierte Schaltung (ASIC - Application Specific Integrated Circuit), einen elektronischen Schaltkreis, einen Prozessor (gemeinsam genutzt, dediziert oder als Gruppe) und/oder einen Speicher (gemeinsam genutzt, dediziert oder als Gruppe), die ein oder mehr Software- oder Firmware-Programme, einen kombinatorischen Logikschaltkreis und/oder andere geeignete Komponenten ausführen, die die beschriebene Funktionalität bereitstellen, beziehen, Teil davon sein oder solche umfassen. In Ausführungsformen kann eine Engine, eine Modul oder Logik in Firmware, Hardware, Software oder einer beliebigen Kombination von Firmware, Hardware und Software implementiert sein.
  • VORRICHTUNG UND VERFAHREN ZUR ASNYCHRONEN STRAHLVERFOLGUNG
  • Ausführungsformen der Erfindung umfassen eine Kombination aus Beschleunigungsschaltungsanordnung mit fester Funktion und Universalverarbeitungsschaltungsanordnung zum Durchführen von Strahlverfolgung. Zum Beispiel können bestimmte Operationen in Bezug auf Strahlverfolgung einer Begrenzungsvolumenhierarchie (BVH) und Intersektionstests durch die Beschleunigungsschaltungsanordnung mit fester Funktion durchgeführt werden, während eine Mehrzahl von Ausführungsschaltungen verschiedene Formen von Strahlverfolgungs-Shadern (z. B. Jeder-Treffer-Shader, Intersektions-Shader, Fehler-Shader usw.) ausführt. Eine Ausführungsform umfasst Doppelspeicherbänke mit hoher Bandbreite, die eine Mehrzahl von Einträgen zum Speichern von Strahlen und entsprechende Doppelstapel zum Speichern von BVH-Knoten umfassen. In dieser Ausführungsform wechselt die Traversierungsschaltungsanordnung zwischen den Doppelstrahlbänken und -stapeln ab, um einen Strahl in jedem Taktzyklus zu verarbeiten. Außerdem umfasst eine Ausführungsform Prioritätsauswahlschaltungsanordnung/-logik, die zwischen internen Knoten, nicht-internen Knoten und Primitiven unterscheidet und diese Informationen zum intelligenten Priorisieren von Verarbeitung der BVH-Knoten und der durch die BVH-Knoten begrenzten Primitive verwendet.
  • Eine spezifische Ausführungsform reduziert den Hochgeschwindigkeitsspeicher, der für Traversierung erforderlich ist, unter Verwendung eines kurzen Stapels, um eine begrenzte Anzahl von BVH-Knoten während der Traversierungsoperationen zu speichern. Diese Ausführungsform umfasst Stapelverwaltungsschaltungsanordnung/-logik zum effizienten Pushen und Poppen von Einträgen auf den bzw. von dem kurzen Stapel, um sicherzustellen, dass die erforderlichen BVH-Knoten verfügbar sind. Außerdem werden Traversierungsoperationen durch Durchführen von Aktualisierungen an einer Verfolgungsdatenstruktur verfolgt. Wenn die Traversierungsschaltungsanordnung/-logik gestoppt wird, kann sie die Verfolgungsdatenstruktur konsultieren, um mit Traversierungsoperationen an derselben Position innerhalb der BVH zu beginnen, in der sie aufgehört hat, und die Verfolgung von Daten, die bei einer Datenstrukturverfolgung aufrechterhalten werden, wird durchgeführt, so dass die Traversierungsschaltungsanordnung/-logik neu starten kann.
  • 51 veranschaulicht eine Ausführungsform, die eine Shader-Ausführungsschaltungsanordnung 4000 zum Ausführen von Shader-Programmcode und Verarbeiten von assoziierten Strahlverfolgungsdaten 4902 (z. B. BVH-Knotendaten und Strahldaten), eine Strahlverfolgungsbeschleunigungs-Schaltungsanordnung 5110 zum Durchführen von Traversierungs- und Intersektionsoperationen und einen Speicher 3198 zum Speichern von Programmcode und assoziierten Daten umfasst, die durch die RT-Beschleunigungsschaltungsanordnung 5110 (RT - Ray Tracing) und die Shader-Ausführungsschaltungsanordnung 4000 verarbeitet werden.
  • In einer Ausführungsform umfasst die Shader-Ausführungsschaltungsanordnung 4000 eine Mehrzahl von Kernen/Ausführungseinheiten 4001, die Shader-Programmcode ausführen, um verschiedene Formen von datenparallelen Operationen durchzuführen. Zum Beispiel können die Kerne/Ausführungseinheiten 4001 in einer Ausführungsform eine Einzelanweisung über mehrere Lanes ausführen, wobei jede Instanz der Anweisung Operationen an Daten durchführt, die in einer verschiedenen Lane gespeichert sind. In einer SIMT-Implementierung zum Beispiel wird jede Instanz der Anweisung mit einem verschiedenen Thread assoziiert. Während der Ausführung speichert ein L1-Cache bestimmte Strahlverfolgungsdaten für effizienten Zugriff (z. B. kürzlich oder häufig abgerufene Daten).
  • Ein Satz von Primärstrahlen kann an den Scheduler 4007 verteilt werden, der Arbeit für Shader disponiert, die durch die Kerne/EUs 4001 ausgeführt werden. Die Kerne/EUs 4001 können Strahlversorgungskerne 3150, Grafikkerne 3130, CPU-Kerne 3199 oder andere Arten von Schaltungsanordnung sein, die zum Ausführen von Shader-Programmcode imstande sind. Ein oder mehrere Primärstrahl-Sader 5101 verarbeiten die Primärstrahlen und erzeugen zusätzliche Arbeit, die von der Strahlverfolgungsbeschleunigungs-Schaltungsanordnung 5110 und/oder den Kernen/EUs 4001 durchgeführt werden soll (z. B. durch einen oder mehrere Kind-Shader ausgeführt werden soll). Neue Arbeit, die vom Primärstrahl-Shader 5101 oder anderen Shadern erzeugt wird, die von den Kernen EUs 4001 ausgeführt werden, können an Sortierschaltungsanordnung 4008 verteilt werden, welche die Strahlen in Gruppen oder Bins sortiert (z. B. Strahlen mit ähnlichen Charakteristiken gruppiert), wie hierin beschrieben. Der Scheduler 4007 disponiert dann die neue Arbeit auf den Kernen/EUs 4001.
  • Andere Shader, die ausgeführt werden können, umfassen Jeder-Treffer-Shader 4514 und Nächstgelegener-Treffer-Shader 4507, die Trefferergebnisse verarbeiten (z. B. jeden Treffer oder den nächstgelegenen Treffer für einen gegebenen Strahl identifizieren), wie oben beschrieben. Ein Fehler-Shader 4506 verarbeitet Strahlfehler (wenn z. B. ein Strahl den Knoten/das Primitiv nicht schneidet). Wie bereits erwähnt, können die verschiedenen Shader unter Verwendung eines Shader-Datensatzes referenziert werden, der einen oder mehrere Zeiger, anbieterspezifische Metadaten und globale Argumente umfassen kann. In einer Ausführungsform werden Shader-Datensätze durch Shader-Datensatzkennungen (SRI - Shader Record Identifier) identifiziert. In einer Ausführungsform ist jede ausführende Instanz eines Shaders mit einem Aufrufstapel 5203 assoziiert, der Argumente speichert, die zwischen einem Eltern-Shader und einem Kind-Shader weitergegeben werden. Aufrufstapel 5121 können auch Verweise auf die Fortsetzungsfunktionen speichern, die ausgeführt werden, wenn ein Aufruf zurückgegeben wird.
  • Die Strahltraversierungsschaltungsanordnung 5102 traversiert jeden Strahl durch Knoten einer BVH und arbeitet sich durch die Hierarchie der BVH nach unten (z. B. durch Elternknoten, Kindknoten und Blattknoten), um Knoten/Primitive zu identifizieren, die vom Strahl traversiert werden. Eine Strahl-BVH-Intersektionsschaltungsanordnung 5103 führt Intersektionstests von Strahlen durch, bestimmt Trefferpunkte auf Primitiven und erzeugt Ergebnisse in Reaktion auf die Treffer. Die Traversierungsschaltungsanordnung 5102 und die Intersektionsschaltungsanordnung 5103 können Arbeit von dem einen oder den mehreren Aufrufstapeln 5121 abrufen. Innerhalb der Strahlverfolgungsbeschleunigungs-Schaltungsanordnung 5110 können Aufrufstapel 5121 und assoziierte Strahlverfolgungsdaten 4902 in einem lokalen Strahlverfolgungscache (RTC - Ray Tracing Cache) 5107 oder einer anderen lokalen Speichervorrichtung für effizienten Zugriff durch die Traversierungsschaltungsanordnung 5102 und die Intersektionsschaltungsanordnung 5103 gespeichert werden. Eine spezifische Ausführungsform, die Im Folgenden beschrieben wird, umfasst Strahlbänke mit hoher Bandbreite (siehe z. B. 52A).
  • Strahlverfolgungsbeschleunigungs-Schaltungsanordnung 5110 kann eine Variante der verschiedenen Traversierungs-/Intersektionsschaltungen sein, die hierin beschrieben werden und die Strahl-BVH-Traversierungs-/Intersektionsschaltung 4005, die Traversierungsschaltung 4502 und die Intersektionsschaltung 4503 sowie die Strahlverfolgungskerne 3150 umfassen. Die Strahlverfolgungsbeschleunigungs-Schaltungsanordnung 5110 kann anstelle der Strahl-BVH-Traversierungs-/Intersektionsschaltung 4005, der Traversierungsschaltung 4502 und der Intersektionsschaltung 4503 sowie der Strahlverfolgungskerne 3150 oder anderer Schaltungsanordnung/Logik zum Verarbeiten von BVH-Stapeln und/oder Durchführen von Traversierung/Intersektion verwendet werden. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit der Strahl-BVH-Traversierungs-/Intersektionsschaltung 4005, der Traversierungsschaltung 4502 und der Intersektionsschaltung 4503 sowie den Strahlverfolgungskernen 3150, die hierin beschrieben wird, auch eine entsprechende Kombination mit der Strahlverfolgungsbeschleunigungs-Schaltungsanordnung 5110, ohne darauf beschränkt zu sein.
  • Unter Bezugnahme auf 52A umfasst eine Ausführungsform der Strahltraversierungsschaltungsanordnung 5102 eine erste und eine zweite Strahlspeicherbank 5201 bzw. 5202, wobei jede Bank eine Mehrzahl von Einträgen zum Speichern einer entsprechenden Mehrzahl von eingehenden Strahlen 5206 umfasst, die aus Speicher geladen werden. Entsprechend umfassen der erste und der zweite Stapel 5203 bzw. 5204 ausgewählte BVH-Knotendaten 5290-5291, die aus Speicher ausgelesen und zur Verarbeitung lokal gespeichert werden. Wie hierin beschrieben, sind die Stapel 5203-5204 in einer Ausführungsform kurze Stapel, die ein begrenzte Anzahl von Einträgen zum Speichern von BVH-Knotendaten umfassen (z. B. sechs Einträge in einer Ausführungsform). Obwohl von den Strahlbänken 5201-5202 getrennt dargestellt, können die Stapel 5203-5204 auch innerhalb der entsprechenden Strahlenbänke 5201-5202 verwaltet werden. Alternativ können die Stapel 5203-5204 in einem separaten lokalen Speicher oder Cache gespeichert werden.
  • Eine Ausführungsform der Traversierungsverarbeitungsschaltungsanordnung 5210 wechselt beim Auswählen des nächsten zu verarbeitenden Strahls oder Knotens zwischen zwei Bänken 5201-5202 und Stapeln 5203-5204 (z. B. in einer Ping-Pong-Weise) ab. Zum Beispiel kann die Traversierungsverarbeitungsschaltungsanordnung 5210 einen neuen Strahl/BVH-Knoten aus einer alternativen Strahlbank bzw. einem alternativen Stapel bei jedem Taktzyklus auswählen, um dadurch hochwirksamen Betrieb sicherzustellen. Es ist zu jedoch erwähnen, dass diese spezifische Anordnung zum Erfüllen der der Erfindung zugrundeliegenden Prinzipien nicht notwendig ist.
  • In einer Ausführungsform gleicht ein Strahlzuweiser 5205 den Eintrag von eingehenden Strahlen 5206 in die erste und die zweite Speicherbank 5201 bzw. 5202 basierend auf aktuellen Relativwerten eines Satzes von Bankzuweisungszählern 5220 aus. In einer Ausführungsform verwalten die Bankzuweisungszähler 5220 eine Zählung der Anzahl von nicht traversierten Strahlen in jeder der ersten und der zweiten Speicherbank 5201-5202. Zum Beispiel kann ein erster Bankzuweisungszähler, wenn der Strahlzuweiser 5205 der ersten Bank 5201 einen neuen Strahl zuweist, inkrementiert und, wenn ein Strahl aus der ersten Bank 5201 verarbeitet wird, dekrementiert werden. Ähnlich kann der zweite Bankzuweisungszähler, wenn der Strahlzuweiser 5205 der zweiten Bank 5201 einen neuen Strahl zuweist, inkrementiert und, wenn ein Strahl aus der zweiten Bank 5201 verarbeitet wird, dekrementiert werden.
  • In einer Ausführungsform weist der Strahlzuweiser 5205 den aktuellen Strahl einer Bank zu, die mit dem kleineren Zählerwert assoziiert ist. Wenn die beiden Zähler gleich sind, kann der Strahlzuweiser 5205 jede Bank auswählen, oder er kann eine andere Bank von der auswählen, die das letzte Mal, als die Zähler zuletzt gleich waren, ausgewählt wurde. In einer Ausführungsform wird jeder Strahl in einem Eintrag einer der Bänke 5201-5202 gespeichert, und jede Bank umfasst 32 Einträge zum Speichern von bis zu 32 Strahlen. Die der Erfindung zugrunde liegenden Prinzipien sind jedoch nicht auf diese Details beschränkt.
  • 52B veranschaulicht vier Prozesse 5251-5254, die in einer Ausführung zum Verwalten der Strahlspeicherbänke 5201-5202 und der Stapel 5203-5204 ausgeführt werden. In einer Ausführungsform sind die vier Prozesse 5251-5254 verschiedene Implementierungen oder Konfigurationen eines gemeinsamen Satzes von Programmcode (hierin manchmal als „TraceRay“ bezeichnet). Der Initial-Prozess 5251 (Anfangsprozess) kann ausgeführt werden, um den Strahl 5261 auszulesen und eine neue Traversierung einer BVH von oben nach unten ausgehend vom Wurzelknoten durchzuführen. Die Alloc-Funktion (Zuweisungsfunktion) modifiziert Steuerbits und startet entsprechende Leseanforderungen für den Strahlverfolgungsstapel. Konkret setzt Alloc zum Zuweisen des neuen Eintrags das Bit „Gültig“ (VLD) und setzt das Bit „Bereit zur Entfernung“ (Evict_Rdy) zurück. Im Bankeintrag für den Strahl werden das Bit „Daten vorhanden“ (DP - Data Present) und das Bit „Dirty“ (Modifiziert) zurückgesetzt. Das DP-Bit wird im entsprechenden Stapeleintrag gesetzt. Für die entsprechende Hitinfo (Treffer-Info) wird das DP-Bit gesetzt, und das Dirty-Bit wird zurückgesetzt. Das DP-Bit und das mit den Knotendaten assoziierte Shader-Datensatzkennung-(SRI-)DP-Bit werden zurückgesetzt.
  • Der Instanziierungsprozess 5252 führt Traversierung innerhalb eines der (vom Wurzelknoten verschiedenen) Knoten der BVH durch und liest den Strahl und den vorher festgeschriebenen Treffer 5262 aus. Wenn in einer Ausführungsform einer der Treffer-Shader einen Treffer zwischen dem Strahl und einem Primitiv identifiziert, dann wird der Festschreibungsprozess 5253 zum Festschreiben von Ergebnissen und Auslesen des Strahls, des potenziellen Treffers und des Stapels 5263 ausgeführt. Alternativ wird der Fortsetzungsprozess 5254 zum Fortsetzen der Traversierung des Strahls und Auslesen des Strahls, des festgeschriebenen Treffers und des Stapels 5264 ausgeführt.
  • Unter verschiedenen Umständen muss die Traversierungsschaltungsanordnung 5002 Traversierungsoperationen aussetzen und den aktuellen Strahl und assoziierte BVH-Knoten speichern, beispielsweise wenn ein Shader zum Durchführen einer Sequenz von Operationen erforderlich ist. Wenn zum Beispiel ein nicht opakes Objekt ein Treffer oder eine prozedurale Textur ist, speichert die Traversierungsschaltungsanordnung 5002 den Stapel 5203-5204 in Speicher und führt den erforderlichen Shader aus. Sobald der Shader die Verarbeitung des Treffers (oder anderer Daten) abgeschlossen hat, stellt die Traversierungsschaltungsanordnung 5002 den Zustand der Strahlbänke 5201-5202 und Stapel 5203-5204 aus Speicher wieder her.
  • In einer Ausführungsform überwacht ein Traversierungs-/Stapel-Tracker 5248 kontinuierlich Traversierungs- und Stapeloperationen und speichert Neustartdaten in einem Verfolgungsarray 5249. Wenn zum Beispiel die Traversierungsschaltungsanordnung 5002 die Knoten N, N0, N1, N2 und N00 traversiert und Ergebnisse erzeugt hat, dann aktualisiert der Traversierungs-/Stapel-Tracker 5248 das Verfolgungsarray, um anzuzeigen, dass Traversierung dieser Knoten abgeschlossen ist, und/oder um anzuzeigen, dass der nächste Knoten aus dem Stapel verarbeitet werden soll. Wenn die Traversierungsschaltungsanordnung 5002 neu gestartet wird, liest sie die Neustartdaten aus dem Verfolgungsarray 5249 aus, damit sie Traversierung auf der korrekten Stufe neu startet, ohne einen der BVH-Knoten erneut zu traversieren (und Zyklen zu vergeuden). Die Neustartdaten, die im Verfolgungsarray 5249 gespeichert werden, werden manchmal als „Neustartpfad“ oder „RST“ (Restart Trail) bezeichnet.
  • Wie in 52B angezeigt, verwalten die verschiedenen TraceRay-Prozesse 5251-5254 mittels einer oder mehreren Funktionen Zuweisung in die Strahlspeicherbänke 5201-5202 und daraus heraus. Wie für den Initiierungsprozess 5251 veranschaulicht, setzt eine Alloc-Funktion (Zuweisungsfunktion) das Gültig-Bit (VLD) in einem Speicherbankeintrag (das anzeigt, dass der Eintrag nun einen gültigen Strahl enthält) und setzt das Flag „Bereit zur Entfernung“ (das anzeigt, das die Strahldaten nicht entfernt werden sollten) zurück (Rst - Reset). Die Ray-Funktion (Strahlfunktion) speichert den Strahl im ausgewählten Eintrag und setzt das Bit „Daten vorhanden“ (DP - Data Present) (das anzeigt, dass Strahldaten im Eintrag gespeichert sind) und das Dirty-Bit (das anzeigt, dass die Daten nicht modifiziert wurden) zurück. Nach dem Auslesen des Strahls aus der Speicherbank setzt die Stack-Funktion (Stapelfunktion) das DP-Bit und ruft den relevanten BVH-Knoten aus dem Stapel ab (z. B. den Wurzelknoten im Falle des Initiierungsprozesses 5251 und einen anderen Knoten im Falle des Instanziierungsprozesses 5252). Die Hitinfo-Funktion (Treffer-Info-Funktion) setzt das Dirty-Bit zurück und setzt das DP-Bit für die Initiierungsfunktion 5251 oder setzt es für alle anderen Funktionen zurück. In einer Ausführungsform produziert die Hitinfo Daten, die einen Strahltreffer widerspiegeln. Die Node-Funktion (Knotenfunktion) setzt das DP-Bit und die SRI-DP zurück, wobei es sich um die DP für die Shader-Datensatzkennung (SRI - Shader Record Identifier) handelt. Eine Ausführungsform führt eine Suche nach einem Kernel-Start-Zeiger (KSP - Kernel Start Pointer) durch, um sicherzustellen, dass der KSP nicht gleich null ist. Wenn dies jedoch der Fall ist, dann wird eine andere Behandlung für nicht-opake Quads implementiert.
  • Sobald in einer Ausführungsform ein Strahleintrag in einer oder mehreren der Speicherbänke 5201-5202 zugewiesen wurde, wird ein Abruf zum Abrufen der Knotendaten (und möglicherweise anderer Daten) aus dem mit dem Strahl assoziierten Stapel durchgeführt. In einer Ausführungsform wird ein Stapel für jeden Strahl verwaltet, der den Arbeitssatz von Daten für den aktuellen Knoten umfasst, durch den der Strahl traversiert wird.
  • Bei Vorrücken auf die nächste Ebene in der BVH (z. B. bei Bestimmen, dass der Strahl einen Elternknoten schneidet), werden die Kindknoten sortiert und auf den Stapel 5203-5204 gepusht. Die Kindknoten werden der Reihe nach vom Stapel gepoppt und einzeln verarbeitet, um Kindknoten zu identifizieren, welche der Strahl traversiert (Traversierungs-„Treffer“). In einer Ausführungsform wird der Stapel aus einem Arbeitsspeicher oder einem lokalen Cache/Datenspeicher geladen, wann immer es eine Übergabe zwischen der RT-Beschleunigungsschaltungsanordnung 5110 und den Shadern 4504, 4506, 4507, 5101, 5105 gibt.
  • Wenn ein Blattknoten, der ein Quadrat oder ein Dreieck (oder eine andere Art von Primitiv) umfasst, durch die Traversierungsschaltungsanordnung 5102 identifiziert wird, gibt sie diese Informationen an die Intersektionsschaltungsanordnung 5103 weiter, welche einen Intersektionstest am Quadrat bzw. Dreieck durchführt. Wenn das Primitiv weder ein Quadrat noch ein Dreieck ist, beendet die Traversierungsschaltungsanordnung in einer Implementierung die Traversierung und übergibt die Steuerung zurück an den Nächstgelegener-Treffer-Shader 4507 (wenn ein Treffer erkannt wird) oder den Fehler-Shader 4506 (wenn kein Treffer erkannt wird). In einer Implementierung, in welcher die Intersektionsschaltungsanordnung 5103 zum Durchführen von Intersektionen für eine Vielzahl von Primitiven zusätzlich zu Quadraten und Dreiecken (z. B. Linien, Bögen, Kreisen usw.) ausgelegt ist, leitet die Traversierungsschaltungsanordnung 5102 dann Blattknoten für diese Primitive zur Intersektionsschaltungsanordnung 5103 weiter.
  • Wenn in einer Ausführungsform eine Hardware- oder Softwarekomponente eine Leseanforderung für den Speicher 3198 oder einen Cache erzeugt, wird ein 16-Bit-Tag zum Bereitstellen von Informationen über den Datentyp und -anforderer verwendet. Zum Beispiel kann ein Zwei-Bit-Code spezifizieren, ob die Anforderung für einen Strahl, Stapeldaten, Trefferdaten, Knotendaten aus der BVH oder irgendeinen anderen Typ von Daten ist. Wenn der Strahl, der Stapel und die Hitinfo aus dem Speicher zurückgegeben wurden, wird der Strahl durch einen oder mehrere BVH-Knoten traversiert, und Intersektionstests können durchgeführt werden, wie oben beschrieben.
  • Ein oder mehrere Stapel 5203-5204 und Strahlen 5206 können auf verschiedenen Verarbeitungsstufen aus Speicher geladen werden. Zum Beispiel können der Initiierungsprozess 5251 und/oder der Instanziierungsprozess 5252 verlangen, dass eine neue BVH zur Traversierung geladen wird. Unter diesen Umständen kann der Stapel 5203-5204 auf den obersten Knoten (oder „Wurzel“-Knoten) der BVH initialisiert werden. Für eine Strahlfortsetzung 5254 innerhalb einer BVH kann der Stapel 5203-5204 aus Speicher geladen und erweitert werden. Sobald der Stapel 5203-5204 vorbereitet wurde, werden Knotendaten aus dem Stapel abgerufen (eine Operation, die im Folgenden manchmal als Proc_Node_Fetch bezeichnet wird).
  • In einer Ausführungsform werden Knotendaten durch Starten von Parallelanforderungen für zwei nicht-interne (NI) Knoten und zwei interne Knoten abgerufen. 53 veranschaulicht eine Ausführungsform, in welcher Prioritätsauswahl-Logik (PRISEL - Priority Selection Logic) 5311 für NI-Knoten zwei NI-Knoten anfordert: einen ersten NI-Knoten 5301 aus Bank 0 und einen zweiten NI-Knoten 5302 aus Bank 1. Gleichzeitig fordert die Internal-Node-PRISEL-Logik 5312 zwei interne Knoten an: einen ersten Knoten 5303 aus Bank 0 und einen zweiten Knoten 5304 aus Bank 1.
  • In einer Ausführungsform priorisiert die NI-Knoten-Prioritätsauswahl-Logik (PRISEL) 5311 einen des ersten Ni-Knotens 5301 und des zweiten NI-Knotens 5302 und speichert Priorisierungsergebnis im Strahlverfolgungscache (RTC). Ähnlich fordert die Internal-Node-PRISEL-Logik 5312 zwei interne Knoten an und wählt ein Priorisierungsergebnis von einem ersten internen Knoten 5303 und einem zweiten internen Knoten 5304 aus.
  • Jede Instanz der Prioritätsauswahl-Logik 5311-5312 priorisiert einen der nicht-internen BVH-Knoten 5301-5302 und einen der internen BVH-Knoten 5303-5304 aus einer verschiedenen Bank, wenn möglich. In einer Ausführungsform wird nur eine Anforderung aus jeder Bank (z. B. eine der Anforderungen 5302 und 5304 und eine der Anforderungen 5301 und 5303) ausgewählt. Der Start dieser Anforderungen kann außerdem das Bit „Daten vorhanden“ (DP) des Stapels zurücksetzen, wie angezeigt, so dass dieser Eintrag in Reaktion auf eine Knotenabrufoperation nicht abgerufen wird. In einer Ausführungsform für die Instanzabrufoperation wird das Bit „Daten vorhanden“ (DP) des Strahls zurückgesetzt, wenn die Instanzanforderung gesendet wird, und schließlich gesetzt, wenn der Strahl nach dem Knotenabruf transformiert wird.
  • In einer Ausführungsform wird node_info bei Start von Leseoperationen geschrieben, und die Adresse bzw. das Tag wird für die Leseanforderungen berechnet, wie folgt:
    1. i. rtt_rtc_rd_addr[47:6] = rt_ray.rt_ray_ctrl.root_node_ptr[47:6] + curr_stack.child_offset; (Anmerkung: Der Kind-Offset am Knoten ist stets in Bezug auf den aktuellen BVH-Wurzelknoten)
    2. ii. rtt_rtc_rd_tag[6:0] = {RTT_INST, rtt_alloc_entry[5:0]};
    3. iii. node.node_info = curr_stack.node_info.
  • In einer Ausführungsform setzen die zurückgelieferten Knotendaten das DP-Bit für den Knoten und den Stapel.
  • Die folgenden Fälle können basierend auf dem Lese-Flag unterschieden werden:
    1. A. Interner Knoten: Dies schreibt in den Knoten.
    2. B. Instanz: Dies aktualisiert rt_ray.rt_ray_ctrl für die BVH (1) der nächsten Ebene und schreibt die Knotenstruktur.
      1. i. root_node_ptr = node_return.StartNodePtr
      2. ii. hitgrp_srbase_ptr = rt_ray_ctrl.hitgrp_srbase_ptr + rt_ray_ctrl.srstride*node_return.instancecontributiontohitgrpindex
      3. iii. hitgrp_sr_stride = rt_ray_ctrl.srstride* rt_ray_ctrl.shade_indx_mult
      4. iv. inst_leaf_ptr = rt_ray.rt_ray_ctrl.root_node_ptr + stack.current_node.child_offset → Nur Logical-Ansicht, Abrufen und Speichern der Knotenabrufadresse während Instance Node-Abrufanforderung selbst
      5. v. {miss_sr_ptr, shader_indx_mult, mask} = {rt_ray[0].rt_ray_ctrl.miss_sr_ptr, rt_ray[0].rt_ray_ctrl. shader_indx_mult, rt_ray[0].rt_ray_ctrl.mask} ~ Bewahren von BVH[0]
      6. vi. flag[0] = rt_ray[0].rt_ray_ctrl.flag[0] | (~rt_ray[0].rt_ray_ctrl.flag[1] & Node_Return.flag[2]); → Entweder Bewahren von Opaque via Ray oder Via Instance Flag (nur wenn Ray Flag nicht Force Non-Opaque)
      7. vii. flag[0] = rt_ray[0].rt_ray_ctrl.flag[0])| (~rt_ray[0].rt_ray_ctrl.flag[0] & Node_Return.flag[3]); → Entweder Bewahren von Non Opaque via Ray oder Via Instance Flag (nur wenn Ray Flag nicht Force Opaque))
      8. viii. flag[3:2] = rt_ray[0].rt_ray_ctrl.flag[3:2]; → (kzeptieren von FIRST HIT und Beenden von Suche oder Überspringen von Closest Hit Shader) Bewahren von BVH[0]
      9. ix. flag[5:4] = Node_Return.flag[0] ? 2'd0: rt_ray[0].rt_ray_ctrl.flag[5:4]; —> Dreieck-Culling ist deaktiviert VIA Instance
      10. x. flag[8:6] = rt_ray[0].rt_ray_ctrl.flag[8:6]; → (Deaktivieren von Intersektions-Shader, Cull Opaque oder Cull von Opaque oder Cull Non-Opaque) Bewahren BVH[0]
      11. xi. node.node_ctrl = Nicht Benötigt für Instanz
      12. xii. node.node_data = {'0, node_rtn.obj2world_p, world2obj_vzyx};
    3. C. Quadrat: Dies aktualisiert den Knoten, wie folgt:
      1. i. node.node_ctrl = {node_rtn.leafDesc.last, node_rtn.leafDesc.Primlndex1Delta[15:0], node_rtn.leafDesc.Primlndex0[31:0], node_rtn.shader_indx};
      2. ii. node.node_data = {'0, Quad_mode, J[2:0], V[3:0]}; → Quad_mode = node_rtn.leafDesc.PrimIndex1Delta[15:0] ! = '0;
  • Basierend auf dem Strahl-Flag, dem Instanz-Flag und dem Geometrie-Flag zeigt die Opak-/Nicht-Opak-Tabelle in 54 das resultierende Flag an, das beim Abrufen der Knotendaten verwendet werden soll (opak oder nicht opak). Wie in der Tabelle angezeigt, haben Strahl-Flags stets Vorrang. Außerdem schließen sich einige der Status gegenseitig aus. In einer Ausführungsform werden diese in Hardware mit der Priorität von exklusiven Bits gehandhabt. Wenn in einer Implementierung cull_opaque und force_opaque beide gesetzt sind, wird die assoziierte Geometrie automatisch gecullt.
    opaque = rt_ray.rt_ray_ctrl.flag[0] | quad.flag[0]; (Es ist zu beachten, dass Ray Stored per BVH Level die Instanz-Flags bereits berücksichtigt)
    nopaque = rt_ray.rt_ray_ctrl.flag[1] | ~ quad.flag[0];
  • 55A ist eine Tabelle, die Strahl-Flag-Behandlung und Ausnahmen gemäß einer Ausführungsform darstellt. Hierbei basiert die Cull-Entscheidung auf einer Kombination des Strahl-Flags, des Instanz-Flags und des Geometrie-Flags.
    cull_opaque = rt_ray.rt_ray_ctrl.flag[6] & (rt_ray.rt_ray_ctrl.flag[0] | quad.flag[0]);
    cull_nopaque = rt_ray.rt_ray_ctrl.flag[7] & (rt_ray.rt_ray_ctrl.flag[1] | ~quad.flag[0]);
    cull = cull_opaque | cull_nopaque;
  • Ein maskenbasiertes Culling kann in einer Ausführungsform implementiert werden, wie folgt: mask_kill = ~|(rtc_rtt_rd_rtn.mask & rtc_rtt_rd_rtn.data.mask);
  • 55B ist eine Tabelle, die endgültiges Culling gemäß einer Ausführungsform darstellt. Die Ray Flags (cull_opaque und force_opaque) oder (cull_non_opaque und force_non_opaque) schließen sich gegenseitig aus. In dieser Gleichung berücksichtigt das Ray Flag jedoch auch das Instanz-Flag, welches opak/nicht opak setzen kann. Nur Geometrie kann gecullt werden, während sowohl Instanz als auch Geometrie maskiert werden können.
  • Wie in 56 veranschaulicht, wird in einer Ausführungsform basierend auf der Auswertung der oben beschriebenen Cull- und mask_kill-Einstellungen bei 5601 oder 5602 frühzeitiges Aus bestimmt, und das Ergebnis wird entweder bei 5603 an den Knotenspeicher und/oder bei 5604 an den Stapel gesendet.
  • Sobald die Knotendaten bereit sind, können Rahmen-/Intersektionstests durchgeführt werden. Dies wird in einer Ausführungsform durch einen Prozess erreicht, der hierin als Ray_Test_Proc bezeichnet wird und der zwei zugrunde liegende Prozesse aufweist, die gleichzeitig ausgeführt werden, einen zum Füllen des Quadrats/der Instanz (Ql) und einen anderen zum Durchführen der Rahmen-/Intersektionstests. In einer Implementierung, die in 57 veranschaulicht ist, startet Ray_Test_Proc zwei parallele Instanzen von Prioritätsauswahl-Logik (PRISEL) 5701-5702: eine Quadrat-/Instanz-PRISEL 5701 zum Anfordern und Auswählen zwischen einem Quadrat/einer Instanz 5711 aus Bank 0 und einem zweiten Quadrat/einer zweiten Instanz 5712 aus Bank 1, und eine PRISEL 5702 für interne Knoten zum Anfordern und Auswählen zwischen einem internen Knoten aus Bank 0 5713 und einem internen Knoten aus Bank 1 5714.
  • In einer Ausführungsform priorisiert die Quadrat-/Instanz-Prioritätsauswahl-Logik 5701 einen des ersten QI-Knotens 5711 und des zweiten QI-Knotens 5712 und speichert das Priorisierungsergebnis in der Strahlverfolgungswarteschlange (RTQ - Ray Tracing Queue) zur Weiterverarbeitung (z. B. für Intersektionstests). Ähnlich priorisiert die PRISEL-Logik 5702 für interne Knoten einen der internen BVH-Knoten 5713-5714, an welchem ein Strahlverfolgungstraversierungs-(RTT-)Rahmentest durchgeführt wird. In einer Ausführungsform wird nur eine Anforderung aus jeder Bank (z. B. eine der Anforderungen 5711 und 5712 und eine der Anforderungen 5713 und 5714) ausgewählt. Der Start dieser Anforderungen kann außerdem das Bit „Daten vorhanden“ (DP) des Stapels zurücksetzen, wie angezeigt, so dass dieser Eintrag in Reaktion auf eine Knotenabrufoperation nicht abgerufen wird. In einer Ausführungsform für die Instanzabrufoperation wird das Bit „Daten vorhanden“ (DP) des Strahls zurückgesetzt, wenn die Instanzanforderung gesendet wird, und schließlich gesetzt, wenn der Strahl nach dem Knotenabruf transformiert wird.
  • Als Teil dieses Prozesses wird für jede Quadrat-Test-Verteilung, bei welcher der Knotentyp nicht opak ist, die Shader-Datensatzkennungs-Nullsuche als bindungslose Thread-Verteilung (BTD - Bindless Thread Dispatch) basierend auf der folgenden Shader-Datensatzkennungssuchadresse verteilt:
    • sri_null_lookup_ptr[47:3] = 2*(Ray.hitGroupSRBasePtr + Node.leafDesc.ShaderIndex* ray.SRStride) + 1;
    • sri_null_lookup_tag[7:0] = {1'd0, RTT _INST, rtt_alloc_entry[5:0]};
  • In einer Ausführungsform ist ein Quadrat-/Instanz-(QI-)-Entkopplungs-FIFO enthalten, um temporäre Stapel-FIFO-voll-Bedingungen aufzulösen und synchrone Aktualisierungen von Treffer-Info/Strahl mit einem Push auf den Stapel-FIFO (siehe z. B. Stapel-FIFO 6001 in 60) zu implementieren. Die geschieht so, dass Strahl/Treffer-Info ein garantiertes Bit „Daten vorhanden“ (DP) in nachfolgenden Prozessen gesetzt aufweist. Es ist zu erwähnen, dass Strahl/Treffer-Info bei Kollision mit Speicherschreiboperationen eine feste hohe Priorität zugeordnet werden kann.
  • Die Rückgabe von RTQ kann zu einer Instance (z. B. einer Instanztransformation) oder einem Quad (d. h. Traversierungs-/Intersektionstestergebnissen) auf zwei getrennten Grenzflächen führen. Im Folgenden werden in einer Ausführungsform zwei Rückgabe-FIFOs zum Verarbeiten von Ergebnissen verwendet.
    1. a. Instanz-Rückgabe-FIFO: Aktualisieren rt_ray.rt_ray_data = rtq_rt_ray_data; ray_dirty[Entry] = 1;
    2. b. Quadrat-Rückgabe-FIFO:
      1. i. Wenn das Quad nicht opak ist und (Tfar < Prev_Tfar) → Prüfen von SRI_NULL_DP zum Poppen vom (Auslesen aus) Quadrat-/Instanz-(QI-) Entkopplungs-FIFO. Es ist zu erwähnen, dass in einer Ausführungsform die Hitinfo-Schreiboperation aus dem Strahlverfolgungswarteschlangen-(RTQ)FIFO eine höhere Priorität gegenüber MemHitinfo aufweist.
        1. 1. Wenn (KSP_NULL = 1) → Behandeln des nicht opaken Quadrats, als ob es opak wäre und Aktualisieren von Tfar.
        2. 2. Wenn (KSP_NULL != 1) → Schreiben der potenziellen HitInfo in Speicher mit dem Gültig-Bit auf 1 gesetzt.
          • Auslesen von T, U, V, Leaf Type, PrimLeaflndex und Front Face aus der RTQ.
          • Auslesen von PrimIndexDelta, PrimleafPtr aus NodeData. Aktualisieren von instanceLeafPtr aus Ray Data.
          • hitGroupRecPtr, wie oben berechnet
      2. ii. Wenn das Quad nicht opak ist und (Tfar < Prev_Tfar) → Aktualisieren der Committed HitInfo mit Valid = 1. Auslesen von T,U,V, Leaf Type, PrimLeaflndex, Front Face aus der RTQ. Auslesen von PrimIndexDelta, PrimleafPtr aus NodeData. Aktualisieren von instanceLeafPtr aus rt_ray.rt_ray_ctrl hitGroupRecPtr, wie für oben berechnet
  • In einer Ausführungsform kann die Rückgabe vom Strahlverfolgungstraversierungs-(RTT-)Rahmenintersektionstest zur Weiterverarbeitung auf den Stapel 0/1 (5203/5204) FIFO 6001 gepusht werden.
  • 58 und 59A-B veranschaulichen ein Beispiel einer BVH-Strahlverarbeitung unter Verwendung eines „kurzen“ Stapels (wie z. B. Stapel 5203 oder 5204, die eine begrenzte Anzahl von lokalen Stapeleinträgen umfassen). Ein kurzer Stapel wird verwendet, um Hochgeschwindigkeitsspeicherung in Kombination mit intelligenten Knotenverwaltungstechniken zum Bereitstellen einer hochwirksamen Sequenz von Traversierungsoperationen bereitzustellen. Im veranschaulichten Beispiel umfasst der kurze Stapel 5203 Einträge für sechs BVH-Knoten. Die der Erfindung zugrunde liegenden Prinzipien können jedoch unter Verwendung von kurzen Stapeln verschiedener Größen implementiert werden.
  • Die Operationen 5949-5972 pushen und poppen Stapeleinträge während der BVH-Traversierung. In einer Ausführungsform werden die Operationen 5949-5972 am Stapel 5203 durch die Stapelverarbeitungsschaltungsanordnung 5120 (siehe 51) durchgeführt. Eine spezifische Traversierungssequenz ist dargestellt, die beim BVH-Wurzelknoten N 5900 auf der BVH-Ebene 0 beginnt.
  • Bei 5949 wird der Stapel 5203 mit dem Knoten N initialisiert, der dann vom Stapel gepoppt und verarbeitet wird, was zu Treffern H0-H2 führt, die Kindknoten N0-N2 5901-5903 auf Ebene 1 der BVH umfassen (d. h. „Treffer“ bedeutet, dass der Strahl die drei Kindknoten N0-N2 5901-5903 traversiert). Die drei Kindknoten-Treffer 5901-5902 werden basierend auf dem Trefferabstand sortiert und in der sortierten Reihenfolge auf den Stapel 5203 gepusht (Operation 5950). Demnach werden in dieser Ausführungsform, wann immer ein neuer Satz von Kindknoten ausgewertet wird, diese basierend auf dem Trefferabstand sortiert und in der sortierten Reihenfolge in den Stapel 5203 geschrieben (d. h. mit den näher gelegenen Kindknoten an der obersten Stelle des Stapels).
  • Der erste Kindknoten N0 5901 (d. h. der nächstgelegene Kindknoten) wird vom Stapel 5203 gepoppt und verarbeitet, was zu drei weiteren Kindknoten-Treffern N00-N02 5911-5913 auf Ebene 2 der BVH (die „Ebene“ wird manchmal als die „Tiefe“ der BVH-Knoten bezeichnet) führt, die sortiert und auf den Stapel 5203 gepusht werden (Operation 5951).
  • Der Kindknoten N00 5911 wird vom Stapel gepoppt und verarbeitet, was zu einem einzigen Treffer führt, der einen einzigen Kindknoten N000 5920 auf Ebene 3 der BVH umfasst (Operation 5952). Dieser Knoten wird gepoppt und verarbeitet, was zu sechs Treffern N0000-N0005 5931-5936 auf Ebene 4 führt, die sortiert und auf den Stapel 5203 gepusht werden (Operation 5953). Um innerhalb des kurzen Stapels 5203 Platz schaffen, werden die Knoten N1, N2, N02, N01 entfernt, wie angezeigt (d. h. um den kurzen Stapel auf sechs Einträge zu begrenzen). Der erste sortierte Knoten N0000 5931 wird gepoppt und verarbeitet, wodurch drei Treffer N00000-N00002 5931-5933 auf Ebene 5 der BVH erzeugt werden (Operation 5954). Knoten N0005 wird entfernt, um auf dem kurzen Stapel 5203 Platz für neue Knoten zu schaffen.
  • In einer Ausführungsform wird ein Knoten jedes Mal aus dem kurzen Stapel 5203 entfernt, wenn er wieder im Speicher gespeichert wird. Er wird dann zu einem späteren Zeitpunkt (z. B. wenn es Zeit ist, den Knoten gemäß der Traversierungsoperation verarbeiten) wieder auf den kurzen Stapel 5203 geladen.
  • Die Verarbeitung geht auf 59A weiter, wo Knoten N00001 und N00002 gepoppt und auf Ebene 5 der BVH verarbeitet werden (Operationen 5955-5956). Knoten N0001, N0002, N0003 und N0004 auf Ebene 4 werden dann gepoppt und verarbeitet (Operationen 5957-5960), was zu einem leeren kurzen Stapel 5203 führt.
  • Daher führt eine Popp-Operation zu einem Abruf des BVH-Wurzelknotens, Knoten N, gemäß dem Neustartpfad (RST) (Operation 5961). Die drei Kind-Treffer N0, N1, N2 von Ebene 1 werden erneut sortiert und auf den kurzen Stapel gepusht (Operation 5962). Knoten N0 wird dann gepoppt und verarbeitet, gefolgt von Knoten N00, N000 und N0005 (Operationen 5963-5965). Knoten N01 wird gepoppt und verarbeitet (Operation 5966), gefolgt von Knoten N02, Knoten N2 und Knoten N1 (Operationen 5967-5970), was erneut zu einem leeren kurzen Stapel führt. Folglich wird der nächste Knoten der Ebene 2, N11, vom kurzen Stapel gepoppt und verarbeitet, womit die Traversierung abgeschlossen ist (d. h. da Knoten N11 zu keinem Treffer führte).
  • Wie bereits erwähnt, aktualisiert eine Ausführungsform eines Traversierungs-Trackers 5248 das Traversierungsarray 5249, das den Kindknoten/-Teilbaum auf jeder Ebene der BVH-Hierarchie identifiziert, die gegenwärtig traversiert wird. In einer Implementierung ist die Länge des Verfolgungsarrays 5249 gleich der Tiefe der BVH (6 im veranschaulichten Beispiel), und jeder Eintrag im Verfolgungsarrays 5249 umfasst einen Indexwert, der den Kind-Teilbaum identifiziert, der gegenwärtig traversiert wird. In einer spezifischen Implementierung umfasst jeder Eintrag im Verfolgungsarray 5249 für eine N breite BVH (d. h. wobei jeder interne Knoten N Kindknoten referenziert) einen log2(N)-Bitwert zum Identifizieren der Kindknoten/-Teilbäume. In einer Ausführungsform wurden Kindknoten/- Teilbäume, welchen ein Index zugeordnet ist, der kleiner als der aktuelle Kind-Index ist, vollständig traversiert und werden deshalb im Falle eines Neustarts nicht erneut besucht. In einer Ausführungsform wird, wenn das letzte geschnittene Kind traversiert wird, der Kind-Index auf einen Maximalwert gesetzt, um anzuzeigen, dass es keine Einträge mehr auf dem Stapel gibt.
  • Der kurze Traversierungsstapel 5203 kann die obersten paar Einträge des Stapels in einem kreisförmigen Array speichern. In einer Ausführungsform umfasst jeder Stapeleintrag im kurzen Traversierungsstapel 5203 einen Offset zu einem Knoten, verschiedene Informationen, wie beispielsweise Knotentyp (intern, Primitiv, Instanz usw.) sowie ein Bit, das anzeigt, ob dieses Kind der letzte (am weitesten entfernte) geschnittene Kindknoten in einem Elternknoten ist. Es ist zu jedoch erwähnen, dass diese spezifischen Details zum Erfüllen der der Erfindung zugrundeliegenden Prinzipien nicht notwendig sind.
  • 60 veranschaulicht eine Ausführungsform der Stapelverarbeitungsschaltungsanordnung/-logik 5120 zum Durchführen von Stapelverwaltungs- und Traversierungsoperationen, wie oben beschrieben. Ein Stapel-FIFO 6001 wird mit BVH-Kindknoten 6000 geladen, die verarbeitet werden müssen. Wenn zum Beispiel ein Rahmentest oder ein Quadrat-Test von der Traversierungsverarbeitungsschaltung 5210 durchgeführt wird, werden die Ergebnisse in den Stapel-FIFO 6001 gepusht und zum Aktualisieren des Stapels 5203 verwendet. Dies kann zum Beispiel Aktualisierung der Treffer-Info umfassen, beispielsweise des Satzes von Kindknoten 6000, der mit einem spezifischen Treffer assoziiert ist.
  • Die Stapelverarbeitungsschaltungsanordnung/-logik 6003 liest Einträge aus dem Stapel 5203 mit Daten, die zum Verarbeiten jedes Eintrags benötigt werden, der eine Anzeige im Hinblick darauf umfasst, ob der BVH-Knoten ein interner Knoten oder ein Blattknoten ist, und assoziierten Indexdaten aus. Wenn der Knoten ein Blattknoten/Quadrat ist, dann können die Daten Quadrat-Deskriptoren und Indizes sowie Shader-Indexdaten umfassen. Die Stapelverarbeitungsschaltungsanordnung/-logik 6003 führt dann die hierin beschriebenen Stapelverarbeitungsoperationen durch, wie beispielsweise Identifizieren neuer Knoten, die mit einem Treffer assoziiert sind, und Sortieren der Knoten basierend auf dem Trefferabstand. Obwohl als separate Entität veranschaulicht, kann die Stapelverarbeitungsschaltungsanordnung/-logik 6003 in die Traversierungsschaltungsanordnung 5102 integriert sein.
  • Wie angezeigt, erzeugt die Stapelverarbeitungsschaltungsanordnung/-logik 6003 Stapelaktualisierungen 6011, während sie Verarbeitung jedes BVH-Knotens aus dem Stapel 5203 durchführt. Zum Beispiel kann sie nach dem Auslesen eines Eintrags aus dem Stapel 5203 verschiedene Steuerbits, wie beispielsweise das Bit „Daten vorhanden“ (DP) und das Bit „Gültig“ (VLD), aktualisieren. 60 veranschaulicht die Bereit-zur-Entfernung- und Daten-vorhanden-Bits 6010 als gesetzt. Eine entsprechende Stapelaktualisierung 6011 kann auch an den Stapel 5203 gesendet werden (um z. B. zu ermöglichen, dass alte Einträge entfernt werden, um Platz für neue Kindknoten zu schaffen).
  • Stapelaktualisierungen können mittels einer Arbitrierschaltungsanordnung 6012 gesteuert werden, die zwischen Aktualisieren des Stapels 5203 mit den aktuellen Verarbeitungsaktualisierungen 6011, Füllen des Stapels 5203 aus Speicher mit einem oder mehreren neuen BVH-Kindknoten (Mem Fill) und Durchführen einer anfänglichen Zuweisung zum Stapel aus Speicher (z. B. Starten mit dem Wurzelknoten und einem oder mehreren Kindknoten) auswählt.
  • Wenn in einer Ausführungsform ein Quadrat, eine Instanz bzw. ein interner Knoten auf dem Stapel verarbeitet wird, können eine oder mehrere der folgenden Operationen durchgeführt werden:
    1. 1. Entfernung des Stapeleintrags aufgrund mehrerer Bedingungen, wie beispielsweise Hinunterbewegen durch die Instanz für eine neue BVH, Verarbeiten einer Treffer-Prozedur, eines Jeder-Treffer-Shaders usw.
    2. 2. Aufheben der Zuweisung des Ray-Eintrags, wenn der Stapel aufgrund einer Treffer-Prozedur und/oder eines Jeder-Treffer-Shaders entfernt wird.
    3. 3. Aufheben der Zuweisung des Cache-Eintrags, wenn der Stapel aufgrund einer Treffer-Prozedur und/oder eines Jeder-Treffer-Shaders entfernt wird.
    4. 4. Aktualisierung der Strahlsteuerung (nur BVH), wenn der Strahl über das Instanzblatt zur neuen BVH nach unten weitergegeben werden muss.
  • 61A-B veranschaulichen Tabellen zum Konfigurieren von Lese-/Schreibports und Setzen von Steuerbits für alle Strahlverfolgungs-Traversierungsstrukturen. Konkret sind beispielhafte Teilstrukturen, vertikale Strukturen und Lese-/Schreibaktionen für Strahlen 6101, Treffer 6102 und Stapel 6103 dargestellt. Es ist jedoch zu beachten, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf diese spezifischen Datenstrukturen/-operationen beschränkt sind.
  • VORRICHTUNG UND VERFAHREN FÜR STRAHLVERFOLGUNGS-DETAILLIERUNGSGRADÜBERGÄNGE VON HOHER QUALITÄT
  • Bei der Grafikverarbeitungsarchitektur kann sich der „Detaillierungsgrad“ (LOD - Level of Detail) auf die Auswahl von Gitterauflösungen basierend auf Variablen, wie beispielsweise Abstand von der Kamera, beziehen. LOD-Techniken werden verwendet, um Speicherverbrauch zu reduzieren und Grafikverarbeitungsfunktionen, wie beispielsweise geometrisches Aliasing in Spielen, zu verbessern. Zum Beispiel können die Details eines hochauflösenden Gitters nicht erforderlich sein, wenn das Gitter von der aktuellen Perspektive des Benutzers weiter entfernt ist.
  • In rasterungsbasierten Implementierungen werden weiche Übergänge zwischen LODs unter Verwendung „stochastischer LOD“-Techniken ermöglicht, wie beispielsweise in Lloyd et al, „Implementing Stochastic Levels of Detail with Microsoft DirectX Raytracing“ (15. Juni 2020), beschrieben. Ohne diese stochastischen Techniken kann der Übergang zwischen LODs zu störenden Artefakten führen, bei welchen Objekte plötzlich ihr Erscheinungsbild ändern, wenn ein neuer LOD gewählt wird. Bei Verwenden stochastischer LODs wird eine Cross-Auflösung zwischen LOD-Graden durch eine Zufallszuordnung von Pixeln zu einem der am Übergang beteiligten LODs durchgeführt (z. B. entweder dem LOD höheren Auflösung oder niedrigerer Auflösung).
  • Die vorstehende Lösung verwendet eine Binärmaske und einen binären Vergleichswert zum Erreichen von acht Übergangsschritten für stochastische LOD-Übergänge beim Überblenden von einem ersten LOD („LODO“) zu einem zweiten LOD („LOD1“). In dieser Implementierung werden eine 8-Bit-Strahlmaske und eine 8-Bit-Instanzmaske UND-verknüpft, um zu bestimmen, ob eine Instanz traversiert werden muss. Die 8-Bit-Masken und die assoziierten bitweise logischen Operationen führen zu begrenzten LOD-Übergangsfähigkeiten. Zum Beispiel würde bei einem Übergang zwischen LODO und LOD1 eines Objekts, wobei LODO einen Teilwert von 0,25 aufweist, und LOD1 einen Teilwert von 0,75 (basierend auf dem Kameraabstand), die Maske für die Instanz auf LODO gesetzt, um nur 2 Zufallsbits (0,25 von 8 Bits) zu aktivieren. Die Instanzmaske für LOD1 würde auf das binäres Komplement der Maske von LODO mit 6 aktivierten Bits gesetzt. Für einen gegebenen Strahl wird ein Zufallsbit in der Strahlmaske ausgewählt, um eine Zufallsauswahl von jedem von LODO (mit einer Wahrscheinlichkeit von 0,25) und LOD1 (mit einer Wahrscheinlichkeit von 0,75) zu erreichen. Da jedoch nur eines von acht Bits ausgewählt wird, gibt es nur 8 Zwischenschritte für den Übergang zwischen LODO und LOD1.
  • Wie in 62 dargestellt, wird in einer Ausführungsform der Erfindung eine LOD-Selektor 6205 mit einer N-Bit-Vergleichsoperationsmaske 6220 bereitgestellt, die als ein Binärwert zum Bestimmen einer durchzuführenden Vergleichsoperationen behandelt wird. Die ausgewählte Vergleichsoperation wird zum Vergleich mit der Referenz verwendet, um mehr LOD-Übergangsschritte zu ermöglichen. In einer Ausführungsform wird die Vergleichsoperation aus kleiner gleich (less_equal) und größer als (greater) ausgewählt, obwohl die der Erfindung zugrunde liegenden Prinzipen nicht auf diese spezifischen Vergleichsoperationen beschränkt sind. In einer Implementierung werden 8 Bits verwendet (N = 8), wobei 7 der Bits einen unsignierten Ganzzahlwert im Bereich von [0...127] definieren, was 128 Übergangsschritte für LOD-Überblendung ermöglicht, und 1 Bit die Vergleichsoperation anzeigt (wenn z. B. auf 0 gesetzt, dann wird eine less_equal-Operation durchgeführt und, wenn auf 1 gesetzt, wird die greater-Operation durchgeführt). In einer Ausführungsform kann eine Strahlvergleichsmaske 6221 auch für den LOD-Selektor 6205 im Bereich von [0...127] als zusätzlicher Strahlparameter bereitgestellt werden.
  • Die folgende Codesequenz zeigt auf, wie Strahltraversierung in einer Ausführungsform auf diese neue Vergleichsmaske reagiert:
  •  if(ray.InstanceMask & instance.InstanceMask)
     {
          if(
          ( instance.ComparisonMode == less_equal &&
     instance.ComparisonMask <= ray.ComparisonMask) ||
          (instance.ComparisonMode == greater &&
     instance.ComparisonMask > ray.ComparisonMask )
          )
           
          {
          traverseInstance(Instance);
          }
     }
  • In der vorstehenden Codesequenz testet die erste IF-Aussage, ob die Binärmasken Traversierung in die aktuelle Instanz ermöglichen. Wenn dies der Fall ist, dann testet die zweite IF-Aussage die Vergleichsmoduseinstellung in Anbetracht der Werte für die Instanzvergleichsmaske (z. B. die Vergleichsoperationsmaske 6220) und die Strahlvergleichsmaske 6221.
  • Zurück zum vorstehenden LOD-Übergangsbeispiel werden für die Instanz von LODO mit einem Teilwert von 0,25 die ersten 7 Bits auf einen Wert von 31 (=int(0,25*127)) gesetzt, und das letzte Bit wird auf 0 gesetzt (und zeigt die less_equal-Operation an). Für die Instanz von LOD1 mit einem Teilwert von 0,75 werden die ersten 7 Bits auf einen Wert von 31 (=int(1,0 - 0,75)*127)) gesetzt, und das letzte Bit wird auf 1 gesetzt (und zeigt die greater-Operation an). Wenn daher für diese Implementierung eine gleichmäßig verteilte Zufallszahl im Bereich von [0 ...127] als Strahlvergleichsmaske erzeugt wird, gibt es bis zu 127 Übergangsschritte, die vom LOD-Selektor 6205 für den Übergang zwischen LODO und LOD1 ausgewählt werden können.
  • Obwohl die vorstehend dargelegten spezifischen Details zum Zwecke der Erläuterung verwendet werden, können die der Erfindung zugrunde liegenden Prinzipien mit anderen Details implementiert werden. Zum Beispiel können andere Vergleichsoperatoren anstelle von oder zusätzlich zu less_equal und greater verwendet werden. Zum Beispiel können solche Vergleichsoperatoren wie not_equal (nicht gleich), gleich, kleiner und greater_equal (größer gleich) ebenfalls verwendet werden. Eine Implementierung umfasst ein Strahl-Flag und ein Instanz-Flag, die UNDverknüpfte Strahlmasken deaktivieren und die Verwendung dieser Bits als Vergleichsmasken aktivieren.
  • BEISPIELE
  • Es folgen beispielhafte Implementierungen verschiedener Ausführungsformen der Erfindung.
  • Beispiel 1. Verfahren, umfassend: Setzen einer Instanzvergleichsmaske, die mit einer Instanz assoziiert ist, auf einen ersten Detaillierungsgrad (LOD), wobei die Instanzvergleichsmaske einen N-Bit-Wert und ein oder mehrere Bits zum Anzeigen einer Art von Vergleichsoperation umfasst; Vergleichen eines Wertes aus einer Strahlmaske mit dem N-Bit-Wert gemäß der Art von Vergleichsoperation, um ein Vergleichsergebnis zu erzeugen; und Bestimmen, ob der erste LOD oder ein zweiter LOD zum Rendern eines oder mehrerer Pixel verwendet werden soll, gemäß dem Vergleichsergebnis.
  • Beispiel 2. Verfahren nach Beispiel 1, wobei der N-Bit-Wert einen 7-Bit-Wert und das eine oder die mehreren Bits umfasst, um anzuzeigen, dass die Vergleichsoperation ein Bit umfasst.
  • Beispiel 3. Verfahren nach Beispiel 1, wobei die Art von Vergleichsoperation größer als, größer gleich, kleiner als oder kleiner gleich umfasst.
  • Beispiel 4. Verfahren nach Beispiel 1, ferner umfassend: anfängliches Bestimmen, ob die Instanzvergleichsmaske oder eine andere Binärmaske Traversierung in die Instanz ermöglicht; und Vergleichen des Wertes aus der Strahlmaske mit dem N-Bit-Wert nur dann, wenn Traversierung in die Instanz ermöglicht wird.
  • Beispiel 5. Verfahren nach Beispiel 1, wobei der zweite LOD eine zweite Instanzvergleichsmaske damit assoziiert aufweist, wobei die zweite Instanzvergleichsmaske einen zweiten N-Bit-Wert und zweite ein oder mehrere Bits zum Anzeigen einer Art von Vergleichsoperation umfasst.
  • Beispiel 6. Verfahren nach Beispiel 5, wobei der zweite LOD einen Detaillierungsgrad höher oder niedriger als der erste LOD ist.
  • Beispiel 7. Verfahren nach Beispiel 6, wobei die Art von Vergleichsoperation, die durch das eine oder die mehreren Bits der Instanzvergleichsmaske des ersten LODs angezeigt wird, eine erste Art umfasst, und die Art von Vergleichsoperation, die durch das eine oder die mehreren Bits der zweiten Instanzvergleichsmaske angezeigt wird, eine von der ersten Art verschiedene zweite Art umfasst.
  • Beispiel 8. Verfahren nach Beispiel 7, wobei die erste Art kleiner gleich umfasst, und die zweite Art größer als umfasst.
  • Beispiel 9. Grafikprozessor, umfassend: Strahltraversierungshardwarelogik zum Traversieren eines Strahls durch eine Beschleunigungsstruktur, um Intersektionen zwischen dem Strahl und einer oder mehreren Objektinstanzen zu bestimmen; und einen Detaillierungsgrad-Selektor zum: Setzen einer Instanzvergleichsmaske, die mit einer Objektinstanz assoziiert ist, auf einen ersten Detaillierungsgrad (LOD), wobei die Instanzvergleichsmaske einen N-Bit-Wert und ein oder mehrere Bits zum Anzeigen einer Art von Vergleichsoperation umfasst; Vergleichen eines Wertes aus einer Strahlmaske mit dem N-Bit-Wert gemäß der Art von Vergleichsoperation, um ein Vergleichsergebnis zu erzeugen; und Bestimmen, ob der erste LOD oder ein zweiter LOD zum Rendern eines oder mehrerer Pixel verwendet werden soll, gemäß dem Vergleichsergebnis.
  • Beispiel 10. Grafikprozessor nach Beispiel 9, wobei der N-Bit-Wert einen 7-Bit-Wert und das eine oder die mehreren Bits umfasst, um anzuzeigen, dass die Vergleichsoperation ein Bit umfasst.
  • Beispiel 11. Grafikprozessor nach Beispiel 9, wobei die Art von Vergleichsoperation größer als, größer gleich, kleiner als oder kleiner gleich umfasst.
  • Beispiel 12. Grafikprozessor nach Beispiel 9, ferner umfassend: anfängliches Bestimmen, ob die Instanzvergleichsmaske oder eine andere Binärmaske Traversierung in die Objektinstanz ermöglicht; und Vergleichen des Wertes aus der Strahlmaske mit dem N-Bit-Wert nur dann, wenn Traversierung in die Objektinstanz ermöglicht wird.
  • Beispiel 13. Grafikprozessor nach Beispiel 9, wobei der zweite LOD eine zweite Instanzvergleichsmaske damit assoziiert aufweist, wobei die zweite Instanzvergleichsmaske einen zweiten N-Bit-Wert und zweite ein oder mehrere Bits zum Anzeigen einer Art von Vergleichsoperation umfasst.
  • Beispiel 14. Grafikprozessor nach Beispiel 13, wobei der zweite LOD einen Detaillierungsgrad höher oder niedriger als der erste LOD ist.
  • Beispiel 15. Grafikprozessor nach Beispiel 14, wobei die Art von Vergleichsoperation, die durch das eine oder die mehreren Bits der Instanzvergleichsmaske des ersten LODs angezeigt wird, eine erste Art umfasst, und die Art von Vergleichsoperation, die durch das eine oder die mehreren Bits der zweiten Instanzvergleichsmaske angezeigt wird, eine von der ersten Art verschiedene zweite Art umfasst.
  • Beispiel 16. Grafikprozessor nach Beispiel 15, wobei die erste Art kleiner gleich umfasst, und die zweite Art größer als umfasst.
  • Beispiel 17. Maschinenlesbares Medium, das Programmcode darauf gespeichert aufweist, der bei Ausführung durch eine Maschine die Maschine zum Durchführen der folgenden Operationen veranlasst, die folgenden Operationen durchzuführen: Setzen einer Instanzvergleichsmaske, die mit einer Instanz assoziiert ist, auf einen ersten Detaillierungsgrad (LOD), wobei die Instanzvergleichsmaske einen N-Bit-Wert und ein oder mehrere Bits zum Anzeigen einer Art von Vergleichsoperation umfasst; Vergleichen eines Wertes aus einer Strahlmaske mit dem N-Bit-Wert gemäß der Art von Vergleichsoperation, um ein Vergleichsergebnis zu erzeugen; und Bestimmen, ob der erste LOD oder ein zweiter LOD zum Rendern eines oder mehrerer Pixel verwendet werden soll, gemäß dem Vergleichsergebnis.
  • Beispiel 18. Maschinenlesbares Medium nach Beispiel 17, wobei der N-Bit-Wert einen 7-Bit-Wert und das eine oder die mehreren Bits umfasst, um anzuzeigen, dass die Vergleichsoperation ein Bit umfasst.
  • Beispiel 19. Maschinenlesbares Medium nach Beispiel 17, wobei die Art von Vergleichsoperation größer als, größer gleich, kleiner als oder kleiner gleich umfasst.
  • Beispiel 20. Maschinenlesbares Medium nach Beispiel 17, ferner umfassend: anfängliches Bestimmen, ob die Instanzvergleichsmaske oder eine andere Binärmaske Traversierung in die Instanz ermöglicht; und Vergleichen des Wertes aus der Strahlmaske mit dem N-Bit-Wert nur dann, wenn Traversierung in die Instanz ermöglicht wird.
  • Beispiel 21. Maschinenlesbares Medium nach Beispiel 17, wobei der zweite LOD eine zweite Instanzvergleichsmaske damit assoziiert aufweist, wobei die zweite Instanzvergleichsmaske einen zweiten N-Bit-Wert und zweite ein oder mehrere Bits zum Anzeigen einer Art von Vergleichsoperation umfasst.
  • Beispiel 22. Maschinenlesbares Medium nach Beispiel 21, wobei der zweite LOD einen Detaillierungsgrad höher oder niedriger als der erste LOD ist.
  • Beispiel 23. Maschinenlesbares Medium nach Beispiel 22, wobei die Art von Vergleichsoperation, die durch das eine oder die mehreren Bits der Instanzvergleichsmaske des ersten LODs angezeigt wird, eine erste Art umfasst, und die Art von Vergleichsoperation, die durch das eine oder die mehreren Bits der zweiten Instanzvergleichsmaske angezeigt wird, eine von der ersten Art verschiedene zweite Art umfasst.
  • Beispiel 24. Maschinenlesbares Medium nach Beispiel 23, wobei die erste Art kleiner gleich umfasst, und die zweite Art größer als umfasst.
  • Ausführungsformen der Erfindung können verschiedene Schritte umfassen, die vorstehend beschrieben wurden. Die Schritte können in maschinenausführbaren Anweisungen realisiert sein, die verwendet werden können, um einen Universal- oder Spezialprozessor zu veranlassen, die Schritte auszuführen. Alternativ können diese Schritte durch spezifische Hardwarekomponenten, welche festverdrahtete Logik zum Ausführen der Schritte umfassen können, oder eine beliebige Kombination von programmierten Computerkomponenten und maßgeschneiderten Hardwarekomponenten ausgeführt werden.
  • Wie hierin beschrieben, können sich Anweisungen auf spezifische Konfigurationen von Hardware, wie beispielsweise anwendungsspezifische integrierte Schaltungen (ASICs), die so konfiguriert sind, dass sie bestimmte Operationen ausführen oder eine vorbestimmte Funktionalität aufweisen, oder Softwareanweisungen beziehen, die in einem Speicher gespeichert sind, der auf einem nicht-transitorischen computerlesbaren Medium enthalten ist. Demnach können die in den Figuren dargestellten Techniken unter Verwendung von Code und Daten implementiert werden, die auf einer oder mehreren elektronischen Einrichtungen (z. B. einer Endstation, einem Netzelement usw.) gespeichert und ausgeführt werden. Solche elektronischen Einrichtungen speichern und kommunizieren (intern und/oder mit anderen elektronischen Einrichtungen über ein Netz) Code und Daten unter Verwendung von computer-/maschinenlesbaren Medien, wie beispielsweise nicht-transitorischen computer-/maschinenlesbaren Speichermedien (z. B. Magnetplatten, optischen Platten; Direktzugriffsspeicher; Festwertspeicher; Flash-Speichereinrichtungen; Phasenwechselspeicher) und transitorischen computer-/maschinenlesbaren Kommunikationsmedien (z. B. elektrischen, optischen, akustischen oder einer anderen Form von übertragenen Signalen - wie beispielsweise Trägerwellen, Infrarotsignalen, digitalen Signalen usw.).
  • Außerdem umfassen solche elektronischen Einrichtungen typischerweise einen Satz von einem oder mehreren Prozessoren, die mit einer oder mehreren anderen Komponenten, wie beispielsweise einer oder mehreren Speichereinrichtungen (nicht-transitorischen Speichermedien), Benutzer-Eingabe-/Ausgabeeinrichtungen (z, B. einer Tastatur, einem Berührungsbildschirm und/oder einer Anzeige) und Netzverbindungen, gekoppelt sind. Das Koppeln des Satzes von Prozessoren und anderer Komponenten erfolgt typischerweise durch einen oder mehrere Busse und Brücken (auch als Buscontroller bezeichnet). Die Speichereinrichtung und die Signale, welche den Netzverkehr übertragen, stellen ein oder mehrere maschinenlesbare Speichermedien und maschinenlesbare Kommunikationsmedien dar. Demnach speichert die Speichereinrichtung einer bestimmten elektronischen Einrichtung typischerweise Code und/oder Daten zur Ausführung auf dem Satz des einen oder der mehreren Prozessoren dieser elektronischen Einrichtung. Natürlich können ein oder mehrere Teile einer Ausführungsform der Erfindung unter Verwendung von verschiedenen Kombinationen von Software, Firmware und/oder Hardware implementiert sein. Die gesamte ausführliche Beschreibung hindurch wurden zu Erläuterungszwecken zahlreiche spezifische Details dargelegt, um ein umfassendes Verständnis der vorliegenden Erfindung zu vermitteln. Für Fachleute ist jedoch zu erkennen, dass die Erfindung ohne einige dieser spezifischen Details realisiert werden kann. In bestimmten Fällen wurden allgemein bekannte Strukturen und Funktionen nicht im Detail beschrieben, um ein Verkomplizieren des Gegenstands der vorliegenden Erfindung zu vermeiden. Demgemäß sollten der Schutzbereich und das Wesen der Erfindung nur in Bezug auf die folgenden Ansprüche beurteilt werden.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 63/050796 [0001]

    Claims (15)

    1. Verfahren, umfassend: Setzen einer Instanzvergleichsmaske, die mit einer Instanz assoziiert ist, auf einen ersten Detaillierungsgrad (LOD), wobei die Instanzvergleichsmaske einen N-Bit-Wert und ein oder mehrere Bits zum Anzeigen einer Art von Vergleichsoperation umfasst; Vergleichen eines Wertes aus einer Strahlmaske mit dem N-Bit-Wert gemäß der Art von Vergleichsoperation, um ein Vergleichsergebnis zu erzeugen; und Bestimmen, ob der erste LOD oder ein zweiter LOD zum Rendern eines oder mehrerer Pixel verwendet werden soll, gemäß dem Vergleichsergebnis.
    2. Verfahren nach Anspruch 1, wobei der N-Bit-Wert einen 7-Bit-Wert und das eine oder die mehreren Bits umfasst, um anzuzeigen, dass die Vergleichsoperation ein Bit umfasst.
    3. Verfahren nach Anspruch 1, wobei die Art von Vergleichsoperation größer als, größer gleich, kleiner als oder kleiner gleich umfasst.
    4. Verfahren nach Anspruch 1, ferner umfassend: anfängliches Bestimmen, ob die Instanzvergleichsmaske oder eine andere Binärmaske Traversierung in die Instanz ermöglicht; und Vergleichen des Wertes aus der Strahlmaske mit dem N-Bit-Wert nur dann, wenn Traversierung in die Instanz ermöglicht wird.
    5. Verfahren nach Anspruch 1, wobei der zweite LOD eine zweite Instanzvergleichsmaske damit assoziiert aufweist, wobei die zweite Instanzvergleichsmaske einen zweiten N-Bit-Wert und zweite ein oder mehrere Bits zum Anzeigen einer Art von Vergleichsoperation umfasst.
    6. Verfahren nach Anspruch 5, wobei der zweite LOD einen Detaillierungsgrad höher oder niedriger als der erste LOD ist.
    7. Verfahren nach Anspruch 6, wobei die Art von Vergleichsoperation, die durch das eine oder die mehreren Bits der Instanzvergleichsmaske des ersten LODs angezeigt wird, eine erste Art umfasst, und die Art von Vergleichsoperation, die durch das eine oder die mehreren Bits der zweiten Instanzvergleichsmaske angezeigt wird, eine von der ersten Art verschiedene zweite Art umfasst.
    8. Verfahren nach Anspruch 7, wobei die erste Art kleiner gleich umfasst, und die zweite Art größer als umfasst.
    9. Grafikprozessor, umfassend: Strahltraversierungshardwarelogik zum Traversieren eines Strahls durch eine Beschleunigungsstruktur, um Intersektionen zwischen dem Strahl und einer oder mehreren Objektinstanzen zu bestimmen; und einen Detaillierungsgrad-Selektor zum: Setzen einer Instanzvergleichsmaske, die mit einer Objektinstanz assoziiert ist, auf einen ersten Detaillierungsgrad (LOD), wobei die Instanzvergleichsmaske einen N-Bit-Wert und ein oder mehrere Bits zum Anzeigen einer Art von Vergleichsoperation umfasst, Vergleichen eines Wertes aus einer Strahlmaske mit dem N-Bit-Wert gemäß der Art von Vergleichsoperation, um ein Vergleichsergebnis zu erzeugen, und Bestimmen, ob der erste LOD oder ein zweiter LOD zum Rendern eines oder mehrerer Pixel verwendet werden soll, gemäß dem Vergleichsergebnis.
    10. Grafikprozessor nach Anspruch 9, wobei der N-Bit-Wert einen 7-Bit-Wert und das eine oder die mehreren Bits umfasst, um anzuzeigen, dass die Vergleichsoperation ein Bit umfasst.
    11. Grafikprozessor nach Anspruch 9, wobei die Art von Vergleichsoperation größer als, größer gleich, kleiner als oder kleiner gleich umfasst.
    12. Grafikprozessor nach Anspruch 9, ferner umfassend: anfängliches Bestimmen, ob die Instanzvergleichsmaske oder eine andere Binärmaske Traversierung in die Objektinstanz ermöglicht; und Vergleichen des Wertes aus der Strahlmaske mit dem N-Bit-Wert nur dann, wenn Traversierung in die Objektinstanz ermöglicht wird.
    13. Grafikprozessor nach Anspruch 9, wobei der zweite LOD eine zweite Instanzvergleichsmaske damit assoziiert aufweist, wobei die zweite Instanzvergleichsmaske einen zweiten N-Bit-Wert und zweite ein oder mehrere Bits zum Anzeigen einer Art von Vergleichsoperation umfasst.
    14. Grafikprozessor nach Anspruch 13, wobei der zweite LOD einen Detaillierungsgrad höher oder niedriger als der erste LOD ist.
    15. Grafikprozessor nach Anspruch 14, wobei die Art von Vergleichsoperation, die durch das eine oder die mehreren Bits der Instanzvergleichsmaske des ersten LODs angezeigt wird, eine erste Art umfasst, und die Art von Vergleichsoperation, die durch das eine oder die mehreren Bits der zweiten Instanzvergleichsmaske angezeigt wird, eine von der ersten Art verschiedene zweite Art umfasst.
    DE102021116364.1A 2020-07-11 2021-06-24 Vorrichtung und verfahren für strahlverfolgungs-detaillierungsgradübergänge von hoher qualität Pending DE102021116364A1 (de)

    Applications Claiming Priority (4)

    Application Number Priority Date Filing Date Title
    US202063050796P 2020-07-11 2020-07-11
    US63/050,796 2020-07-11
    US17/349,602 US11989817B2 (en) 2020-07-11 2021-06-16 Apparatus and method for high quality ray-traced level of detail transitions
    US17/349,602 2021-06-16

    Publications (1)

    Publication Number Publication Date
    DE102021116364A1 true DE102021116364A1 (de) 2022-01-13

    Family

    ID=79020480

    Family Applications (1)

    Application Number Title Priority Date Filing Date
    DE102021116364.1A Pending DE102021116364A1 (de) 2020-07-11 2021-06-24 Vorrichtung und verfahren für strahlverfolgungs-detaillierungsgradübergänge von hoher qualität

    Country Status (3)

    Country Link
    US (1) US11989817B2 (de)
    CN (1) CN113935886A (de)
    DE (1) DE102021116364A1 (de)

    Families Citing this family (2)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    US20230252717A1 (en) * 2022-02-04 2023-08-10 Qualcomm Incorporated Ray tracing processor
    US20240070960A1 (en) * 2022-08-31 2024-02-29 Microsoft Technology Licensing, Llc Systems and methods for ray tracing acceleration structure level of detail processing

    Family Cites Families (1)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    US9704270B1 (en) * 2015-07-30 2017-07-11 Teradici Corporation Method and apparatus for rasterizing and encoding vector graphics

    Also Published As

    Publication number Publication date
    US20220012934A1 (en) 2022-01-13
    CN113935886A (zh) 2022-01-14
    US11989817B2 (en) 2024-05-21

    Similar Documents

    Publication Publication Date Title
    DE102021118444A1 (de) Einrichtung und Verfahren zum Komprimieren von Strahlverfolgungsbeschleunigungsstrukturaufbaudaten
    DE112020000850T5 (de) Cache-Struktur und -Nutzung
    DE102020124932A1 (de) Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel
    DE112020000846T5 (de) Architektur für Block-Sparse-Operationen an einem systolischen Array
    DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
    US11087522B1 (en) Apparatus and method for asynchronous ray tracing
    US20240144577A1 (en) Apparatus and method for performing non-local means filtering using motion estimation circuitry of a graphics processor
    DE102020131896A1 (de) Deep learning-basierte auswahl von abtastwerten für adaptives supersampling
    DE112020000464T5 (de) Mehrfachkachel-grafikprozessor-rendering
    DE102020132544A1 (de) Vorrichtung und verfahren für doppelpräzisionsstrahlquerung in einer raytracing-pipeline
    US11900498B2 (en) Apparatus and method for performing a stable and short latency sorting operation
    DE102020132377A1 (de) Vorrichtung und Verfahren zur Drosselung einer Raytracing-Pipeline
    DE102022124599A1 (de) Vorrichtung und verfahren zur baumstrukturdatenreduzierung
    DE102020129409A1 (de) Dynamisches unterteilen von aktivierungen und kernels zum verbessern von speichereffizienz
    DE102020130865A1 (de) Anweisungen und logik für vektor-multiplikation-addition mit zero-skipping
    DE102020134334A1 (de) Vorrichtung und verfahren zur quantisierten konvergenten richtungsbasierten strahlsortierung
    DE102022130536A1 (de) Sich selbst abstimmende thread-verteilungsrichtlinie
    DE102022125600A1 (de) Eingabefilterung und abtaster-beschleunigung für supersampling
    DE102022119733A1 (de) Sammeln von nutzdaten aus beliebigen registern für sende-nachrichten in einer grafikumgebung
    DE102021116364A1 (de) Vorrichtung und verfahren für strahlverfolgungs-detaillierungsgradübergänge von hoher qualität
    DE102021121187A1 (de) EINRICHTUNG UND VERFAHREN ZUR EFFIZIENTEN GRAFIKVERARBEITUNG EINSCHLIEßLICH STRAHLVERFOLGUNG
    DE112020000902T5 (de) Datenvorabruf für die grafikdatenverarbeitung
    DE102022124603A1 (de) Einrichtung und verfahren für ray-tracing mit shader-aufruf-graphenmanalyse
    DE102022130862A1 (de) Niederleistungs-inferenz-engine-pipeline in einer grafikverarbeitungseinheit
    DE102022125592A1 (de) Erweitern von zeitlichen Anti-Aliasing mit neuronalem Netzwerk zur Historienvalidierung