DE102020132557A1 - Vorrichtung und verfahren für asynchrones raytracing - Google Patents

Vorrichtung und verfahren für asynchrones raytracing Download PDF

Info

Publication number
DE102020132557A1
DE102020132557A1 DE102020132557.6A DE102020132557A DE102020132557A1 DE 102020132557 A1 DE102020132557 A1 DE 102020132557A1 DE 102020132557 A DE102020132557 A DE 102020132557A DE 102020132557 A1 DE102020132557 A1 DE 102020132557A1
Authority
DE
Germany
Prior art keywords
node
bvh
data storage
data
storage bank
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
DE102020132557.6A
Other languages
English (en)
Inventor
Prasoonkumar Surti
Abhishek R. Appu
Karthik Vaidyanathan
Saikat Mandal
Michael Norris
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 DE102020132557A1 publication Critical patent/DE102020132557A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • 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/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/12Bounding box

Landscapes

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

Abstract

Vorrichtung und Verfahren für asynchrone Raytracing. Zum Beispiel weist eine Ausführungsform eines Prozessors auf: einen Begrenzungsvolumenhierarchie-(BVH) Generator zum Konstruieren einer BVH, aufweisend mehrere hierarchisch angeordnete Knoten, aufweisend einen Wurzelknoten, mehrere interne Knoten und mehrere Blattknoten, aufweisend Primitive, wobei jeder interne Knoten einen Kindknoten an entweder dem Wurzelknoten oder einem anderen internen Knoten aufweist und jeder Blattknoten einen Kindknoten an einem internen Knoten aufweist; eine erste Datenspeicherbank, die als eine erste Vielzahl von Einträgen anzuordnen ist; eine zweite Datenspeicherbank, die als eine zweite Vielzahl von Einträgen anzuordnen ist, wobei jeder Eintrag der ersten Vielzahl von Einträgen und der zweiten Vielzahl von Einträgen einen Strahl speichern soll, der die BVH durchqueren soll; eine Zuordnungsschaltung zum Verteilen eines eingehenden Strahls zu entweder der ersten Datenspeicherbank oder der zweiten Datenspeicherbank basierend auf einer relativen Anzahl von Strahlen, die derzeit in der ersten und zweiten Datenspeicherbank gespeichert sind; und Querungsschaltkreis zum Wechseln zwischen Auswahl eines nächsten Strahls aus der ersten Datenspeicherbank und der zweiten Datenspeicherbank, wobei der Querungsschaltkreis den nächsten Strahl durch die BVH queren lässt, indem er einen nächsten BVH-Knoten von einer Oberseite eines BVH-Knotenstapels liest und bestimmt, ob der nächste Strahl den nächsten BVH-Knoten kreuzt.

Description

  • ALLGEMEINER STAND DER TECHNIK
  • Gebiet der Erfindung
  • Diese Erfindung betrifft im Allgemeinen das Gebiet von Grafikprozessoren. Insbesondere betrifft die Erfindung eine Vorrichtung und ein Verfahren für asynchrones Raytracing.
  • Beschreibung des Standes der Technik
  • Raytracing ist eine Technik, bei der ein Lichttransport durch auf Physik basierendes Rendering simuliert wird. Allgemein im Cinematic Rendering verwendet, wurde es bis vor wenigen Jahren als zu ressourcenintensiv für Echtzeitdurchführung angesehen. Einer der Schlüsselbetriebe beim Raytracing ist Verarbeitung einer Sichtbarkeitsabfrage für Strahl-Szene-Kreuzungen, als „Strahlquerung“ bekannt, die Strahl-Szene-Kreuzungen durch querende und kreuzende Knoten in einer Begrenzungsvolumenhierarchie (BVHs, Bounding Volume Hierarchy) berechnet.
  • Die vorliegende Erfindung wird anhand der folgenden ausführlichen Beschreibung in Verbindung mit den folgenden Zeichnungen besser verständlich, in welchen:
    • 1 ein Blockdiagramm einer Ausführungsform eines Computersystems mit einem Prozessor mit einem oder mehreren Prozessorkernen und Grafikprozessoren ist;
    • 2A-D Blockdiagramme einer Ausführungsform eines Prozessors mit einem oder mehreren Prozessorkernen, einer integrierten Speichersteuerung und einem integrierten Grafikprozessor ist;
    • 3A-C Blockdiagramme einer Ausführungsform eines Grafikprozessors sind, der eine einzelne Grafikverarbeitungseinheit sein kann oder ein Grafikprozessor integriert mit mehreren Verarbeitungskernen sein kann;
    • 4 ein Blockdiagramm einer Ausführungsform einer Grafikverarbeitungsengine für einen Grafikprozessor ist;
    • 5A-B Blockdiagramme einer anderen Ausführungsform eines Grafikprozessors sind;
    • 6 Beispiele von Ausführungsschaltkreisen und -logik veranschaulicht;
    • 7 ein Grafikprozessorausführungseinheit-Anweisungsformat gemäß einer Ausführungsform veranschaulicht;
    • 8 ein Blockdiagramm einer anderen Ausführungsform eines Grafikprozessors ist, der eine Grafikpipeline, eine Medienpipeline, eine Anzeigeengine, Thread-Ausführungslogik, und eine Renderausgabepipeline aufweist;
    • 9A ein Blockdiagramm ist, das ein Grafikprozessorbefehlsformat gemäß einer Ausführungsform veranschaulicht;
    • 9B ein Blockdiagramm ist, das eine Grafikprozessorbefehlssequenz gemäß einer Ausführungsform veranschaulicht;
    • 10 beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem gemäß einer Ausführungsform veranschaulicht;
    • 11A-D ein beispielhaftes IP-Kernentwicklungssystem, das zur Herstellung einer integrierten Schaltung verwendet werden kann, und eine beispielhafte Package-Anordnung veranschaulichen;
    • 12 eine beispielhafte System-auf-einem-Chip integrierte Schaltung gemäß einer Ausführungsform veranschaulicht, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt werden kann;
    • 13 einen beispielhaften Grafikprozessor einer System-auf-einem-Chip integrierten Schaltung veranschaulicht, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt werden kann;
    • 14 beispielhafte Grafikprozessorarchitekturen veranschaulicht;
    • 15 eine Architektur zum Durchführen eines Anfangstrainings einer Maschinenlernarchitektur veranschaulicht;
    • 16 veranschaulicht, wie eine Maschinenlernengine kontinuierlich trainiert und während Laufzeit aktualisiert wird;
    • 17 veranschaulicht, wie eine Maschinenlernengine kontinuierlich trainiert und während Laufzeit aktualisiert wird;
    • 18A-B veranschaulichen, wie Maschinenlerndaten auf einem Netzwerk geteilt werden; und
    • 19 ein Verfahren zum Trainieren einer Maschinenlernengine veranschaulicht;
    • 20 veranschaulicht, wie Knoten Geistgebietsdaten austauschen, um verteilte Entrauschungsbetriebe durchzuführen;
    • 21 eine Architektur veranschaulicht, in der Bildrendering und Entrauschungsbetriebe über mehrere Knoten verteilt sind;
    • 22 zusätzliche Details einer Architektur für verteiltes Rendering und Entrauschen veranschaulicht;
    • 23 ein Verfahren zum Durchführen von verteiltem Rendering und Entrauschen veranschaulicht;
    • 24 ein Maschinenlernverfahren veranschaulicht;
    • 25 mehrere zwischenverbundene Allzweckgrafikprozessoren veranschaulicht;
    • 26 einen Satz von Faltschichten (Convolutional Layers) und vollständig verbundenen Schichten für eine Maschinenlernimplementierung veranschaulicht;
    • 27 ein Beispiel einer Faltschicht veranschaulicht;
    • 28 ein Beispiel eines Satzes miteinander verbundener Knoten in einer Maschinenlernimplementierung veranschaulicht;
    • 29 ein Trainingsrahmenwerk veranschaulicht, in dem ein neurales Netzwerk lernt, einen Trainingsdatensatz zu verwenden;
    • 30A Beispiele von Modellparallelität und Datenparallelität veranschaulicht;
    • 30B ein System-auf-einem-Chip (System on a Chip (SoC)) veranschaulicht;
    • 31 eine Verarbeitungsarchitektur veranschaulicht, die Raytracing-Kerne und Tensor-Kerne aufweist;
    • 32 ein Beispiel eines Strahls veranschaulicht;
    • 33 eine Vorrichtung zum Durchführen von Beamtracing veranschaulicht;
    • 34 ein Beispiel einer Strahlhierarchie veranschaulicht;
    • 35 ein Verfahren zum Durchführen von Beamtracing veranschaulicht;
    • 36 ein Beispiel einer verteilten Raytracing-Engine veranschaulicht;
    • 37-38 Kompression veranschaulichen, die in einem Raytracing-System durchgeführt wird;
    • 39 ein Verfahren veranschaulicht, das auf einer Raytracing Architektur implementiert wird;
    • 40 eine beispielhafte hybride Raytracing-Vorrichtung veranschaulicht;
    • 41 Stapel veranschaulicht, die für Raytracing-Betriebe verwendet werden;
    • 42 zusätzliche Details für eine hybride Raytracing-Vorrichtung veranschaulicht;
    • 43 eine Begrenzungsvolumenhierarchie veranschaulicht;
    • 44 einen Anrufstapel- und Querungszustandsspeicher veranschaulicht;
    • 45 ein Verfahren für Queren und Kreuzen veranschaulicht;
    • 46A-B veranschaulichen, wie mehrere Einlastungszyklen zur Ausführung gewisser Shader erforderlich sind;
    • 47 veranschaulicht, wie ein einzelner Einlastungszyklus mehrere Shader ausführt;
    • 48 veranschaulicht, wie ein einzelner Einlastungszyklus mehrere Shader ausführt;
    • 49 eine Architektur zur Ausführung von Raytracing-Anweisungen veranschaulicht;
    • 50 ein Verfahren zur Ausführung von Raytracing-Anweisungen innerhalb eines Threads veranschaulicht;
    • 51 eine Ausführungsform einer Architektur für asynchrones Raytracing veranschaulicht;
    • 52A einen Ausführungsform eines Strahlquerungsschaltkreises veranschaulicht;
    • 52B Prozesse veranschaulicht, die in einer Ausführungsform ausgeführt werden, um Strahlspeicherbänke zu verwalten;
    • 53 eine Ausführungsform von Prioritätsauswahlschaltkreis/-logik veranschaulicht;
    • 55A-C eine Ausführungsform von Prioritätsauswahlschaltkreis/-logik veranschaulicht;
    • 56 eine Ausführungsform zum frühen Bestimmen außerhalb der Raytracingpipeline veranschaulicht;
    • 57 eine Ausführungsform von Prioritätsauswahlschaltkreis/-logik veranschaulicht;
    • 58 eine beispielhafte Begrenzungsvolumenhierarchie (BVH) veranschaulicht, die für Strahlquerungsbetriebe verwendet wird;
    • 59A-B zusätzliche Querungsbetriebe veranschaulichen;
    • 60 eine Ausführungsform von Stapelverwaltungsschaltkreis zum Verwalten eines BVH-Stapels veranschaulicht; und
    • 61A-B beispielhafte Datenstrukturen, Teilstrukturen und Betriebe veranschaulichen, die für Strahlen, Treffer und Stapel durchgeführt werden.
  • AUSFÜHRLICHE BESCHREIBUNG
  • In der folgenden Beschreibung sind zur Erklärung zahlreiche spezifische Einzelheiten angeführt, um ein umfassendes Verständnis der Ausführungsformen der in der Folge beschriebenen Erfindung zu ermöglichen. Für einen Fachmann ist jedoch offensichtlich, dass die Ausführungsformen der Erfindung ohne einige dieser spezifischen Details umgesetzt werden können. In anderen Fällen sind allgemein bekannte Strukturen und Vorrichtungen in Blockdiagrammform dargestellt, um ein Verschleiern der zugrundeliegenden Prinzipien der Ausführungsformen der Erfindung zu vermeiden.
  • Beispielhafte Grafikprozessorarchitekturen und datentypen
  • Systemübersicht
  • 1 ist ein Blockdiagramm eines Verarbeitungssystems 100 gemäß einer Ausführungsform. System 100 kann in einem Einzelprozessor-Desktopsystem, einem Multiprozessor-Workstationsystem oder einem Serversystem, das eine große Zahl von Prozessoren 102 oder Prozessorkernen 107 aufweist, verwendet werden. In einer Ausführungsform ist das System 100 eine Verarbeitungsplattform, die innerhalb einer System-auf-einem-Chip (SoC) integrierten Schaltung eingegliedert ist, zur Verwendung in mobilen, handgehaltenen oder eingebetteten Vorrichtungen, wie innerhalb von Internet-der-Dinge- (IoT, Internet-of-Things) Vorrichtungen mit kabelgebundener oder kabelloser Konnektivität mit einem lokalen oder Weitverkehrsnetzwerk.
  • In einer Ausführungsform kann System 100 aufweisen, gekoppelt sein mit oder integriert sein in: eine serverbasierte Spieleplattform; eine Spielekonsole, aufweisend eine Spiele- und Medienkonsole; eine mobile Spielekonsole, eine handgehaltene Spielekonsole oder eine Online-Spielekonsole. In manchen Ausführungsformen ist das System 100 Teil eines Mobiltelefons, Smartphones, einer Tabletrechenvorrichtung oder mobilen internetverbundenen Vorrichtung, wie ein Laptop mit niedriger interner Datenspeicherkapazität. Verarbeitungssystem 100 kann auch aufweisen, sich koppeln mit oder integriert sein in: eine tragbare Vorrichtung, wie eine tragbare Smartwatch-Vorrichtung; smarte Brillen oder Bekleidung, die mit Merkmalen erweiterter Realität (AR, Augmented Reality) oder virtueller Realität (VR, Virtual Reality) erweitert sind, um visuelle, hörbare oder taktile Ausgänge bereitzustellen, um visuelle, hörbare oder taktile Erfahrungen der echten Welt zu unterstützen oder anderswie Text, Audio, Grafik, Video, holografische Bilder oder Video oder taktile Rückmeldung bereitzustellen; andere erweiterte Realität- (AR) Vorrichtung; oder andere virtuelle Realität- (VR) Vorrichtung. In manchen Ausführungsformen weist das Verarbeitungssystem 100 einen Fernseher oder eine Set-Top-Box-Vorrichtung auf oder ist Teil davon. In einer Ausführungsform kann System 100 aufweisen, sich koppeln mit oder integriert sein in ein(em) selbstfahrenden Fahrzeug, wie ein Bus, Traktoranhänger, Auto, Motor- oder Elektrorad, Flugzeug oder Gleiter (oder eine beliebige Kombination davon). Das selbstfahrende Fahrzeug kann System 100 verwenden, um die um das Fahrzeug wahrgenommene Umgebung zu verarbeiten.
  • In manchen Ausführungsformen weisen der eine oder die mehreren Prozessoren 102 jeweils einen oder mehrere Prozessorkerne 107 auf, um Anweisungen zu verarbeiten, die, wenn ausgeführt, Betriebe für System oder Anwendersoftware durchführen. In manchen Ausführungsformen ist mindestens einer des einen oder der mehreren Prozessorkerne 107 konfiguriert, einen bestimmten Anweisungssatz 109 zu verarbeiten. In manchen Ausführungsformen kann Anweisungssatz 109 komplexe Anweisungssatzberechnung (CISC, Complex Instruction Set Computing), reduzierte Anweisungssatzberechnung (RISC, Reduced Instruction Set Computing) oder Berechnung über ein sehr langes Anweisungswort (VLIW, Very Long Instruction Word) erleichtern. Ein oder mehrere Prozessorkerne 107 können einen verschiedenen Anweisungssatz 109 verarbeiten, der Anweisungen aufweisen kann, um die Emulation anderer Anweisungssätze zu erleichtern. Prozessorkern 107 kann auch andere Verarbeitungsvorrichtungen aufweisen, die einen Digitalsignalprozessor (DSP, Digital Signal Processor).
  • In manchen Ausführungsformen weist der Prozessor 102 Cachespeicher 104 auf. Abhängig von der Architektur kann der Prozessor 102 einen einzelnen internen Cache oder mehrere Level von internem Cache aufweisen. In manchen Ausführungsformen wird der Cachespeicher unter unterschiedlichen Komponenten des Prozessors 102 geteilt. In manchen Ausführungsformen verwendet der Prozessor 102 auch einen externen Cache (z.B. einen Level-3 (L3) Cache oder Letztes-Level-Cache (LLC, Last-Level-Cache)) (nicht gezeigt), der unter Prozessorkernen 107 unter Verwendung bekannter Cachekohärenztechniken geteilt werden kann. Eine Registerdatei 106 kann zusätzlich in Prozessor 102 aufgewiesen sein und kann verschiedene Typen von Registern zum Speichern verschiedener Typen von Daten aufweisen (z.B. Ganzzahlregister, Gleitkommaregister, Statusregister und ein Anweisungszeigerregister). Manche Register können Allzweckregister sein, während andere Register für das Design des Prozessors 102 bestimmt sein können.
  • In manchen Ausführungsformen sind ein oder mehrere Prozessor(en) 102 mit einem oder mehreren Schnittstellenbus(sen) 110 gekoppelt, um Kommunikationssignale zu übertragen, wie Adress-, Daten- oder Steuersignale zwischen Prozessor 102 und anderen Komponenten in dem System 100. Der Schnittstellenbus 110 kann in einer Ausführungsform ein Prozessorbus sein, wie eine Version des Direct Media Interface (DMI) Busses. Jedoch sind Prozessorbusse nicht auf den DMI-Bus begrenzt und können einen oder mehrere Peripheral Component Interconnect-Busse (z.B. PCI, PCI Express), Speicherbusse oder andere Typen von Schnittstellenbussen aufweisen. In einer Ausführungsform weisen der/die Prozessor(en) 102 eine integrierte Speichersteuerung 116 und einen Plattformsteuerungshub 130 auf. Die Speichersteuerung 116 erleichtert Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 100, während der Plattformsteuerungshub (PCH, Platform Controller Hub) 130 Verbindungen mit I/O-Vorrichtungen über einen lokalen I/O-Bus bereitstellt.
  • Die Speichervorrichtung 120 kann eine dynamische Direktzugriffspeicher- (DRAM, Dynamic Random-Access Memory) Vorrichtung, eine statische Direktzugriffspeicher- (SRAM, Static Random Access Memory) Vorrichtung, Flashspeichervorrichtung, Phasenänderungsspeichervorrichtung oder eine andere Speichervorrichtung, die geeignete Arbeitsleistung aufweist, um als Prozessspeicher zu dienen, sein. In einer Ausführungsform kann die Speichervorrichtung 120 als Systemspeicher für das System 100 arbeiten, um Daten 122 und Anweisungen 121 zur Verwendung zu speichern, wenn der eine oder die mehreren Prozessoren 102 eine Anwendung oder einen Prozess ausführen. Speichersteuerung 116 koppelt sich auch mit einem optionalen externen Grafikprozessor 118, der mit dem einen oder den mehreren Grafikprozessoren 108 in Prozessoren 102 kommunizieren kann, um Grafik- und Medienbetriebe durchzuführen. In manchen Ausführungsformen können Grafik-, Medien- und oder Rechenbetriebe von einem Beschleuniger 112 unterstützt werden, der ein Coprozessor ist, der konfiguriert sein kann, einen bestimmten Satz von Grafik-Medien- oder Rechenbetrieben durchzuführen. Zum Beispiel ist in einer Ausführungsform der Beschleuniger 112 ein Matrixmultiplikationsbeschleuniger, der verwendet wird, um Maschinenlern- oder Rechenbetriebe zu optimieren. In einer Ausführungsform ist der Beschleuniger 112 ein Raytracing-Beschleuniger, der verwendet werden kann, um Raytracing-Betriebe in Einklang mit dem Grafikprozessor 108 durchzuführen. In einer Ausführungsform kann ein externer Beschleuniger 119 anstelle von oder in Einklang mit dem Beschleuniger 112 verwendet werden.
  • In manchen Ausführungsformen kann sich eine Anzeigevorrichtung 111 mit dem/den Prozessor(en) 102 verbinden. Die Anzeigevorrichtung 111 kann eine oder mehrere einer internen Anzeigevorrichtung, wie in einer mobilen Elektronikvorrichtung oder einer Laptopvorrichtung, oder einer externen Anzeigevorrichtung, die über eine Anzeigeschnittstelle (z.B. DisplayPort usw.) angehängt ist, sein. In einer Ausführungsform kann die Anzeigevorrichtung 111 eine am Kopf befestigte Anzeige (HMD, Head Mounted Display) sein, wie eine stereoskopische Anzeigevorrichtung zur Verwendung in virtuellen Realität- (VR) Anwendungen oder erweiterten Realität- (AR) Anwendungen.
  • In manchen Ausführungsformen ermöglicht der Plattformsteuerungshub 130 Peripheriegeräten, sich mit Speichervorrichtung 120 und Prozessor 102 über einen Hochgeschwindigkeits-I/O-Bus zu verbinden. Die I/O-Peripherie weist auf, ist aber nicht begrenzt auf, eine Audiosteuerung 146, eine Netzwerksteuerung 134, eine Firmware-Schnittstelle 128, einen drahtlosen Sendeempfänger 126, Berührungssensoren 125, eine Datenspeichervorrichtung 124 (z.B. nichtflüchtigen Speicher, flüchtigen Speicher, Festplatte, Flashspeicher, NAND, 3D NAND, 3D XPoint usw.). Die Datenspeichervorrichtung 124 kann sich über eine Datenspeicherschnittstelle (z.B. SATA) oder über einen Peripheriebus, wie einen Peripheral Component Interconnect-Bus (z.B. PCI, PCI Express), verbinden. Die Berührungssensoren 125 können Berührungssensoren, Drucksensoren oder Fingerabdrucksensoren aufweisen. Der drahtlose Sendeempfänger 126 kann ein Wi-Fi-Sendeempfänger, ein Bluetooth-Sendeempfänger oder ein Mobilnetzsendeempfänger 126, wie ein 3G, 4G, 5G oder Long Term Evolution-(LTE) Sendeempfänger sein. Die Firmware-Schnittstelle 128 ermöglicht Kommunikation mit Systemfirmware und kann zum Beispiel eine vereinheitlichte erweiterbare Firmware-Schnittstelle (UEFI, Unified Extensible Firmware Interface) sein. Die Netzwerksteuerung 134 kann eine Netzwerkverbindung mit einem kabelgebundenen Netzwerk ermöglichen. In manchen Ausführungsformen koppelt sich eine Hocharbeitsleistungsnetzwerksteuerung (nicht gezeigt) mit dem Schnittstellenbus 110. Die Audiosteuerung 146 ist in einer Ausführungsform eine Multikanalhochdefinitionsaudiosteuerung. In einer Ausführungsform weist das System 100 eine optionale ältere I/O-Steuerung 140 zur Kopplung älterer (z.B. Personal System 2 (PS/2)) Vorrichtungen mit dem System auf. Die Plattformsteuerungshub 130 kann sich auch mit einer oder mehreren Universal Serial Bus- (USB) Steuerungen 142 verbinden, die Eingangsvorrichtungen, wie Tastatur und Maus 143 Kombinationen, eine Kamera 144 oder andere USB-Eingangsvorrichtungen verbinden.
  • Es wird begrüßt, dass das gezeigte System 100 beispielhaft und nicht begrenzend ist, da andere Typen von Datenverarbeitungssystemen, die verschieden konfiguriert sind, auch verwendet werden können. Zum Beispiel können eine Instanz der Speichersteuerung 116 und des Plattformsteuerungshubs 130 in einen diskreten externen Grafikprozessor integriert sein, wie den externen Grafikprozessor 118. In einer Ausführungsform können der Plattformsteuerungshub 130 und/oder die Speichersteuerung 116 extern von dem einen oder den mehreren Prozessor(en) 102 sein. Zum Beispiel kann das System 100 eine externe Speichersteuerung 116 und einen Plattformsteuerungshub 130, der als ein Speichersteuerungshub und Peripheriesteuerungshub innerhalb eines Systemchipsatzes konfiguriert sein kann, der in Kommunikation mit dem/den Prozessor(en) 102 ist, aufweisen.
  • Zum Beispiel können Schaltungsplatten („Sleds“) verwendet werden, auf denen Komponenten, wie CPUs, Speicher und andere Komponenten platziert sind, die für erhöhte Wärmearbeitsleistung designt sind. In manchen Beispielen liegen Verarbeitungskomponenten, wie die Prozessoren, an einer Oberseite eines Sleds, während naher Speicher, wie DIMMs, an einer Bodenseite des Sleds liegen. Als ein Resultat des verbesserten Luftstroms, der durch dieses Design bereitgestellt ist, können die Komponenten bei höheren Frequenzen und Leistungsleveln als in typischen Systemen arbeiten, wodurch die Arbeitsleistung erhöht wird. Darüber hinaus sind die Sleds konfiguriert, sich blind mit Leistungs- und Datenkommunikationskabeln in einem Rahmen zusammenzuschließen, wodurch deren Fähigkeit verbessert wird, schnell entfernt, aufgerüstet, neu installiert und/oder ersetzt zu werden. Ähnlich sind individuelle Komponenten, die auf den Sleds liegen, wie Prozessoren, Beschleuniger, Speicher und Datenspeicherlaufwerke, konfiguriert, aufgrund deren erhöhten Abstands voneinander leicht aufgerüstet werden zu können. In der veranschaulichten Ausführungsform weisen die Komponenten zusätzlich Hardwarebestätigungsmerkmale auf, um deren Authentizität zu belegen.
  • Ein Datenzentrum kann eine Einzelnetzwerkarchitektur („Fabric“) nutzen, die mehrere andere Netzwerkarchitekturen unterstützt, aufweisend Ethernet und Omni-Path. Die Sleds können mit Schaltern über optische Fasern gekoppelt sein, die höhere Bandbreite und niedrigere Latenz als herkömmliche verdrillte Kabel (z.B. Kategorie 5, Kategorie 5e, Kategorie 6 usw.) bereitstellen. Aufgrund der hohen Bandbreite, Niederlatenzzwischenverbindungen und Netzwerkarchitektur kann das Datenzentrum in Verwendung Ressourcen bündeln, wie Speicher, Beschleuniger (z.B. GPUs, Grafikbeschleuniger, FPGAs, ASICs, neurale Netzwerk- und/oder künstliche Intelligenzbeschleuniger usw.) und Datenspeicherlaufwerke, die physisch zerstreut sind, und sie Rechenressourcen (z.B. Prozessoren) nach Bedarf bereitstellen, was den Rechenressourcen ermöglicht, auf die gebündelten Ressourcen zuzugreifen, als ob sie lokal wären.
  • Ein Netzteil oder eine Stromquelle kann Spannung und/oder Strom an System 100 oder eine beliebige hierin beschriebene Komponente oder ein System bereitstellen. In einem Beispiel weist das Netzteil einen AC/DC- (Wechselstrom zu Gleichstrom (Alternating Current to Direct Current)) Adapter auf, der in eine Steckdose zu stecken ist. Dieser Wechselstrom kann eine Stromquelle aus erneuerbarer Energie sein (z.B. Solarstrom). In einem Beispiel weist eine Stromquelle eine Gleichstromquelle auf, wie einen externen AC/DC-Wandler. In einem Beispiel weist die Stromquelle oder das Netzteil drahtlose Ladehardware auf, um über Nähe zu einem Ladefeld zu laden. In einem Beispiel kann die Stromquelle eine interne Batterie, Wechselstromversorgung, bewegungsbasierte Stromversorgung, Solarstromversorgung oder Brennstoffzellenquelle aufweisen.
  • 2A-2D veranschaulichen Rechensysteme und Grafikprozessoren, die durch hierin beschriebene Ausführungsformen bereitgestellt sind. Die Elemente von 2A-2D, die dieselben Bezugsnummern (oder Namen) wie die Elemente einer beliebigen anderen Figur hierin aufweisen, können auf eine ähnliche Weise wie hier an anderer Stelle beschrieben arbeiten oder funktionieren, sind aber nicht darauf begrenzt.
  • 2A ist ein Blockdiagramm einer Ausführungsform eines Prozessors 200, der eine oder mehrere Prozessorkerne 202A-202N, eine integrierte Speichersteuerung 214 und einen integrierten Grafikprozessor 208 aufweist. Prozessor 200 kann zusätzliche Kerne bis zu und aufweisend zusätzlichen Kern 202N aufweisen, die durch die strichlierten Boxen dargestellt sind. Jeder der Prozessorkerne 202A-202N weist eine oder mehrere interne Cacheeinheiten 204A-204N auf. In manchen Ausführungsformen weist jeder Prozessorkern auch Zugriff auf eine oder mehrere geteilte zwischengespeicherte Einheiten 206 auf. Die internen Cacheeinheiten 204A-204N und geteilten Cacheeinheiten 206 stellen eine Cachespeicherhierarchie innerhalb des Prozessors 200 dar. Die Cachespeicherhierarchie kann mindestens ein Level von Anweisungs- und Datencache innerhalb jedes Prozessorkerns und ein oder mehrere Level geteilten Mittellevelcaches aufweisen, wie einen Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Level von Cache, wo das höchste Level von Cache vor externem Speicher als der LLC klassifiziert ist. In manchen Ausführungsformen behält Cachekohärenzlogik Kohärenz zwischen den unterschiedlichen Cacheeinheiten 206 und 204A-204N bei.
  • In manchen Ausführungsformen kann Prozessor 200 auch einen Satz einer oder mehrerer Bussteuerungseinheiten 216 und einen Systemagentenkern 210 aufweisen. Die eine oder mehreren Bussteuerungseinheiten 216 verwalten einen Satz von Peripheriebussen, wie einen oder mehrere PCI oder PCI Express Busse. Systemagentenkern 210 stellt Verwaltungsfunktionalität für die unterschiedlichen Prozessorkomponenten bereit. In manchen Ausführungsformen weist Systemagentenkern 210 eine oder mehrere integrierte Speichersteuerungen 214 auf, um Zugriff auf unterschiedliche externe Speichervorrichtungen (nicht gezeigt) zu verwalten.
  • In manchen Ausführungsformen weisen ein oder mehrere der Prozessorkerne 202A-202N Unterstützung für gleichzeitiges Multithreading auf. In solch einer Ausführungsform weist der Systemagentenkern 210 Komponenten zum Koordinieren und Betreiben von Kernen 202A-202N während multigethreadeter Verarbeitung auf. Systemagentenkern 210 kann zusätzlich eine Leistungssteuereinheit (PCU, Power Control Unit) aufweisen, die Logik und Komponenten aufweisen kann, um den Stromzustand der Prozessorkerne 202A-202N und des Grafikprozessors 208 zu regulieren.
  • In manchen Ausführungsformen weist Prozessor 200 zusätzlich einen Grafikprozessor 208 auf, um Grafikverarbeitungsbetriebe auszuführen. In manchen Ausführungsformen koppelt der Grafikprozessor 208 mit dem Satz von geteilten Cacheeinheiten 206 und dem Systemagentenkern 210, der die eine oder mehreren integrierten Speichersteuerungen 214 aufweist. In manchen Ausführungsformen weist der Systemagentenkern 210 auch eine Anzeigesteuerung 211 auf, um Grafikprozessorausgabe zu einer oder mehreren gekoppelten Anzeigen zu treiben. In manchen Ausführungsformen kann Anzeigesteuerung 211 auch ein separates Modul sein, das über mindestens eine Zwischenverbindung mit dem Grafikprozessor gekoppelt ist, oder kann innerhalb des Grafikprozessors 208 integriert sein.
  • In manchen Ausführungsformen wird eine ringbasierte Zwischenverbindungseinheit 212 verwendet, um sich mit den internen Komponenten des Prozessors 200 zu koppeln. Jedoch kann eine alternative Zwischenverbindungseinheit verwendet werden, wie eine Punkt-zu-Punkt-Zwischenverbindung, eine geschaltete Zwischenverbindung oder andere Techniken, Techniken am Stand der Technik aufweisend. In manchen Ausführungsformen koppelt sich Grafikprozessor 208 mit der Ringzwischenverbindung 212 über einen I/O-Link 213.
  • Der beispielhafte I/O-Link 213 stellt mindestens eine von mehreren Arten von I/O-Zwischenverbindungen dar, eine I/O-Zwischenverbindung auf dem Package aufweisend, die Kommunikation zwischen unterschiedlichen Prozessorkomponenten erleichtert, und ein eingebettetes Hochleistungsspeichermodul 218, wie ein eDRAM-Modul. In manchen Ausführungsformen können alle der Prozessorkerne 202A-202N und Grafikprozessor 208 eingebettete Speichermodule 218 verwenden, wie einen geteilten Letztes-Level-Cache.
  • In manchen Ausführungsformen sind Prozessorkerne 202A-202N homogene Kerne, die dieselbe Anweisungssatzarchitektur ausführen. In einer anderen Ausführungsform sind Prozessorkerne 202A-202N im Sinne von Anweisungssatzarchitektur (ISA, Instruction Set Architektur) heterogen, wo ein oder mehrere Prozessorkerne 202A-202N einen ersten Anweisungssatz ausführen, während mindestens einer der anderen Kerne einen Teilsatz des ersten Anweisungssatzes oder einen verschiedenen Anweisungssatz ausführt. In einer Ausführungsform sind Prozessorkerne 202A-202N im Sinne von Mikroarchitektur heterogen, wo ein oder mehrere Kerne, die einen relativ höheren Leistungsverbrauch aufweisen, sich mit einem oder mehreren Leistungskernen koppeln, die einen niedrigeren Leistungsverbrauch aufweisen. In einer Ausführungsform sind Prozessorkerne 202A-202N im Sinne von Rechenkapazität heterogen. Zusätzlich kann Prozessor 200 auf einem oder mehreren Chips oder als eine SoC-integrierte Schaltung, die die veranschaulichten Komponenten aufweist, zusätzlich zu anderen Komponenten implementiert sein.
  • 2B ist ein Blockdiagramm von Hardwarelogik eines Grafikprozessorkerns 219 gemäß manchen hierin beschriebenen Ausführungsformen. Elemente von 2B, die dieselben Referenznummern (oder Namen) wie die Elemente einer beliebigen anderen Figur hierin aufweisen, können auf eine beliebige Weise, ähnlich der sonst hierin beschriebenen arbeiten oder fungieren, sind aber nicht darauf begrenzt. Der Grafikprozessorkern 219, manchmal als ein Kernprozessorelement bezeichnet, kann ein oder können mehrere Grafikkerne innerhalb eines modularen Grafikprozessors sein. Der Grafikprozessorkern 219 ist beispielhaft für ein Grafikkernprozessorelement und ein Grafikprozessor, wie hierin beschrieben, kann mehrere Grafikkernprozessorelemente aufweisen, basierend auf Zielleistung und Arbeitsleistungshüllenkurven. Jeder Grafikprozessorkern 219 kann einen fixierten Funktionsblock 230 aufweisen, der mit den mehreren Teilkernen 221A-221F, auch als Teilprozessorelemente bezeichnet, gekoppelt ist, die modulare Blöcke von Allzweck- und fixierter Funktionslogik aufweisen.
  • In manchen Ausführungsformen weist der fixierte Funktionsblock 230 eine Geometrie-/fixierte Funktionspipeline 231 auf, die sich alle Teilkerne in dem Grafikprozessorkern 219 zum Beispiel in Niederarbeitsleistungs- und/oder Niederleistungsgrafikprozessorimplementierungen teilen können. In unterschiedlichen Ausführungsformen weist die Geometrie-/fixierte Funktionspipeline 231 eine 3Dfixierte Funktionspipeline (z.B. 3D-Pipeline 312 wie in 3 und 4 gezeigt, die unten beschrieben sind) eine Video frontend-Einheit, einen Thread-Spawner und Thread-Dispatcher und einen vereinheitlichten Rückführungspufferverwalter auf, der vereinheitlichte Rückführpuffer (z.B. vereinheitlichte Rückführpuffer 418 in 4, wie unten beschrieben) verwaltet.
  • In einer Ausführungsform weist der fixierte Funktionsblock 230 auch eine Grafik-SoC-Schnittstelle 232, eine Grafikmikrosteuerung 233 und eine Medienpipeline 234 auf. Die Grafik-SoC-Schnittstelle 232 stellt eine Schnittstelle zwischen dem Grafikprozessorkern 219 und anderen Prozessorkernen innerhalb einer System-auf-einem-Chip-integrierten Schaltung bereit. Die Grafikmikrosteuerung 233 ist ein programmierbarer Teilprozessor, der konfigurierbar ist, unterschiedliche Funktionen des Grafikprozessorkerns 219 zu verwalten, aufweisend Thread-Einlastung, -Planung und -Vorberechtigung. Die Medienpipeline 234 (z.B. Medienpipeline 316 von 3 und 4) weist Logik auf, um die Decodierung, Codierung, Vorverarbeitung und/oder Nachbearbeitung von Multimediadaten, Bild- und Videodaten aufweisend, zu erleichtern. Die Medienpipeline 234 implementiert Medienbetriebe über Anfragen an Rechen- oder Abtastungslogik innerhalb der Teilkerne 221-221F.
  • In einer Ausführungsform ermöglicht die SoC-Schnittstelle 232 dem Grafikprozessorkern 219, mit Allzweckanwendungsprozessorkernen (z.B. CPUs) und/oder anderen Komponenten innerhalb eines SoC zu kommunizieren, aufweisend Speicherhierarchieelemente, wie geteilten Letztes-Level-Cachespeicher, den System-RAM und/oder auf dem Chip oder auf dem Package eingebetteten DRAM. Die SoC-Schnittstelle 232 kann auch Kommunikation mit fixierten Funktionsvorrichtungen innerhalb des SoC ermöglichen, wie Kamerabildgebungspipelines, und ermöglicht die Verwendung von und/oder implementiert globale Speicher-Atomics, die zwischen dem Grafikprozessorkern 219 und CPUs innerhalb des SoC geteilt 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 SoC ermöglichen. In einer Ausführungsform ermöglicht die SoC-Schnittstelle 232 Empfang von Befehlspuffern von einem Befehlsstreamer und globalen Thread-Dispatcher, die konfiguriert sind, Befehle und Anweisungen an jeden eines oder mehrerer Grafikkerne innerhalb eines Grafikprozessors bereitzustellen. Die Befehle und Anweisungen können zu der Medienpipeline 234 eingelastet werden, wenn Medienbetriebe durchzuführen sind, oder zu einer Geometrie- und fixierte Funktionspipeline (z.B. Geometrie- und fixierte Funktionspipeline 231, Geometrie- und fixierte Funktionspipeline 237), wenn Grafikverarbeitungsbetriebe durchzuführen sind.
  • Die Grafikmikrosteuerung 233 kann konfiguriert sein, unterschiedliche Planungs- und Verwaltungsaufgaben für den Grafikprozessorkern 219 durchzuführen. In einer Ausführungsform kann die Grafikmikrosteuerung 233 Grafik- und/oder Rechennutzlastplanung an den unterschiedlichen parallelen Grafikengines innerhalb von Ausführungseinheit- (EU, Execution Unit) Arrays 222A-222F, 224A-224F innerhalb der Teilkerne 221A-221F durchführen. In diesem Planungsmodell kann Hostsoftware, die auf einem CPU-Kern eines SoC läuft, das den Grafikprozessorkern 219 aufweist, Arbeitslasten einem von mehreren Grafikprozessor-Doorbells vorlegen, was einen Planungsbetrieb auf der geeigneten Grafikengine aufruft. Planungsbetriebe weisen auf zu ermitteln, welche Arbeitslast als nächstes abzuspielen ist, eine Arbeitslast einem Befehlsstreamer vorzulegen, bestehende Arbeitslasten, die auf einer Engine laufen, vorab zu berechtigen, Fortschritt einer Arbeitslast zu überwachen und Hostsoftware zu benachrichtigen, wenn eine Arbeitslast abgeschlossen ist. In einer Ausführungsform kann die Grafikmikrosteuerung 233 auch Niederleistungs- oder inaktive Zustände für den Grafikprozessorkern 219 erleichtern, was dem Grafikprozessorkern 219 die Fähigkeit bereitstellt, Register innerhalb des Grafikprozessorkerns 219 über Niederleistungszustandsübergänge unabhängig von dem Betriebssystem und/oder der Grafiktreibersoftware auf dem System zu speichern und wiederherzustellen.
  • Der Grafikprozessorkern 219 kann mehr oder weniger als die veranschaulichten Teilkerne 221A-221F aufweisen, bis zu N modulare Teilkerne. Für jeden Satz von N Teilkernen kann der Grafikprozessorkern 219 auch geteilte Funktionslogik 235 und/oder Cachespeicher 236, eine Geometrie-/fixierte Funktionspipeline 237, wie auch zusätzliche fixierte Funktionslogik 238 aufweisen, um unterschiedliche Grafik- und Rechenverarbeitungsbetriebe zu beschleunigen. Die geteilte Funktionslogik 235 kann Logikeinheiten aufweisen, die mit der geteilten Funktionslogik 420 von 4 (z.B. Abtaster-, Mathematik- und/oder Zwischen-Thread-Kommunikationslogik) verknüpft sind, die durch jeden der N Teilkerne innerhalb des Grafikprozessorkerns 219 geteilt werden kann. Der geteilte und/oder Cachespeicher 236 kann ein Letztes-Level-Cache für den Satz von N Teilkernen 221A-221F innerhalb des Grafikprozessorkerns 219 sein und kann auch als geteilter Speicher dienen, der für mehrere Teilkerne zugänglich ist. Die Geometrie-/fixierte Funktionspipeline 237 kann stattdessen in der Geometrie-/fixierte Funktionspipeline 231 innerhalb des fixierten Funktionsblocks 230 aufgewiesen sein und kann dieselben oder ähnliche Logikeinheiten aufweisen.
  • In einer Ausführungsform weist der Grafikprozessorkern 219 zusätzliche fixierte Funktionslogik 238 auf, die unterschiedliche fixierte Funktionsbeschleunigungslogik zur Verwendung durch den Grafikprozessorkern 219 aufweisen kann. In einer Ausführungsform weist die zusätzliche fixierte Funktionslogik 238 eine zusätzliche Geometriepipeline zur Verwendung bei ausschließlicher Positionsschattierung auf. Bei ausschließlicher Positionsschattierung gibt es zwei Geometriepipelines, die vollständige Geometriepipeline innerhalb der Geometrie-/fixierte Funktionspipeline 238, 231, und eine Auslesepipeline, die eine zusätzliche Geometriepipeline ist, die innerhalb der zusätzlichen fixierte Funktionslogik 238 aufgewiesen sein kann. In einer Ausführungsform ist die Auslesepipeline eine reduzierte Version der vollständigen Geometriepipeline. Die vollständige Pipeline und die Auslesepipeline können verschiedene Instanzen derselben Anwendung ausführen, wobei jede Instanz einen separaten Kontext aufweist. Ausschließliche Positionsschattierung kann lange Auslesedurchläufe verworfener Dreieckte verstecken, was ermöglicht, Schattierung in manchen Instanzen früher abzuschließen. Zum Beispiel und in einer Ausführungsform kann die Auslesepipelinelogik innerhalb der zusätzlichen fixierten Funktionslogik 238 Positionsshader parallel mit der Hauptanwendung ausführen und im Allgemeinen kritische Ergebnisse schneller als die vollständige Pipeline erzeugen, da die Auslesepipeline nur das Positionsattribut der Scheitelpunkte abruft und schattiert, ohne Rasterisierung und Rendering der Pixel an dem Framepuffer durchzuführen. Die Auslesepipeline kann die erzeugten kritischen Ergebnisse verwenden, um Sichtbarkeitsinformationen über alle der Dreiecke zu berechnen, ohne zu berücksichtigen, ob diese Dreiecke ausgelesen sind. Die vollständige Pipeline (die in dieser Instanz als eine Wiedergabepipeline bezeichnet werden kann) kann die Sichtbarkeitsinformationen verwerten, um die ausgelesenen Dreiecke zu überspringen, um nur die sichtbaren Dreiecke zu schattieren, die letztlich zu der Rasterisierungsphase weitergegeben werden.
  • In einer Ausführungsform kann die zusätzliche fixierte Funktionslogik 238 auch Maschinenlernbeschleunigungslogik, wie fixierte Funktionsmatrixmultiplikationslogik, für Implementierungen aufweisen, die Optimierungen für Maschinenlerntraining oder Schlussfolgerung aufweisen.
  • Innerhalb jedes Grafikteilkerns 221A-221F ist ein Satz von Ausführungsressourcen aufgewiesen, die verwendet werden können, um Grafik-, Medien- und Rechenbetriebe in Antwort auf Anfragen durch Grafikpipeline, Medienpipeline oder Shader-Programme durchzuführen. Die Grafikteilkerne 221A-221F weisen mehrere EU-Arrays 222A-222F, 224A-224F, Thread-Einlastungs- und Zwischenthread-Kommunikations- (TD/IC) -logik 223A-223F, einen 3D (z.B. Textur) Abtaster 225A-225F, einen Medienabtaster 206A-206F, einen Shader-Prozessor 227A-227F und geteilten lokalen Speicher (SLM) 228A-228F auf. Die EU-Arrays 222A-222F, 224A-224F weisen jeweils mehrere Ausführungseinheiten auf, die Allzweckgrafikverarbeitungseinheiten sind, die im Stande sind Gleitkomma- und Ganzzahl-/Festkommalogikbetriebe im Dienst eines Grafik-, Medien- oder Rechenbetriebs durchzuführen, aufweisend Grafik-, Medien- oder Rechenshader-Programme. Die TD/IC-Logik 223A-223F führt lokale Thread-Einlastung und Thread-Steuerungsbetriebe für die Ausführungseinheiten innerhalb eines Teilkerns durch und erleichtert Kommunikation zwischen Threads, die auf den Ausführungseinheiten des Teilkerns ausführen. Der 3D-Abtaster 225A-225F kann Textur oder andere 3D-Grafik bezüglich Daten in Speicher lesen. Der 3D-Abtaster kann Texturdaten basierend auf einem konfigurierten Abtastzustand und dem mit einer gegebenen Textur verknüpften Texturformat unterschiedlich lesen. Der Medienabtaster 206A-206F kann ähnliche Lesebetriebe basierend auf dem Typ und Format, die mit Mediendaten verknüpft sind, durchführen. In einer Ausführungsform kann jeder Grafikteilkern 221A-221F stattdessen einen vereinheitlichten 3D- und Medienabtaster aufweisen. Threads, die auf den Ausführungseinheiten innerhalb jedes der Teilkerne 221A-221F ausführen, können geteilten lokalen Speicher 228A-228F innerhalb jedes Teilkerns verwenden, um Threads zu ermöglichen, innerhalb einer Threadgruppe auszuführen, um unter Verwendung eines gemeinsamen Pools von Auf-dem-Chip-Speicher auszuführen.
  • 2C veranschaulicht eine Grafikverarbeitungseinheit (GPU) 239, die dedizierte Sätze von Grafikverarbeitungsressourcen in Multikerngruppen 240A-240N eingerichtet aufweist. Während die Details nur einer einzelnen Multikerngruppe 240A bereitgestellt sind, wird begrüßt, dass die anderen Multikerngruppen 240B-240N mit denselben oder ähnlichen Sätzen von Grafikverarbeitungsressourcen ausgestattet sein können.
  • Wie veranschaulicht, kann eine Multikerngruppe 240A einen Satz von Grafikkernen 243, einen Satz von Tensorkernen 244 und einen Satz von Raytracing-Kernen 245 aufweisen. Ein Einplaner/Dispatcher 241 plant und lastet Grafikthreads zur Ausführung auf den unterschiedlichen Kernen 243, 244, 245 ein. Ein Satz von Registerdateien 242 speichert Operandenwerte, die von den Kernen 243, 244, 245 verwendet werden, wenn die Grafikthreads ausgeführt werden. Diese können zum Beispiel Ganzzahlregister zum Speichern von Ganzzahlwerten, Gleitkommaregister zum Speichern von Gleitkommawerten, Vektorregister zum Speichern gepackter Datenelemente (Ganzzahl und/oder Gleitkommadatenelemente) und Kachelregister zum Speichern von Tensor-/Matrixwerten aufweisen. In einer Ausführungsform sind die Kachelregister als kombinierte Sätze von Vektorregistern implementiert.
  • Ein oder mehrere kombinierte Level-1- (L1) Caches und geteilte Speichereinheiten 247 speichern Grafikdaten, wie Texturdaten, Scheitelpunktdaten, Pixeldaten, Strahldaten, Volumenbegrenzungsdaten usw. lokal innerhalb jeder Multikerngruppe 240A. Eine oder mehrere Textureinheiten 247 können auch verwendet werden, um Texturierungsbetriebe durchzuführen, wie Texturabbildung und -abtastung. Ein Level-2- (L2) Cache 253, den sich alle oder eine Teilmenge der Multikerngruppen 240A-240N teilen, speichert Grafikdaten und/oder Anweisungen für mehrere gleichzeitige Grafikthreads. Wie veranschaulicht, kann der L2-Cache 253 über mehrere Multikerngruppen 240A-240N gespeichert werden.
  • Wie veranschaulicht, kann der L2-Cache 253 über mehrere Multikerngruppen 240A-240N geteilt 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.
  • Eingabe/Ausgabe- (I/O) Schaltkreis 250 koppelt die GPU 239 mit einer oder mehreren I/O-Vorrichtungen 252, wie Digitalsignalprozessoren (DSPs), Netzwerksteuerungen oder Anwendereingabevorrichtungen. Eine Zwischenverbindung auf dem Chip kann verwendet werden, um die I/O-Vorrichtungen 252 mit der GPU 239 und Speicher 249 zu koppeln. Eine oder mehrere I/O-Speicherverwaltungseinheiten (IOMMUs, I/O Memory Management Units) 251 des I/O-Schaltkreises 250 koppeln die I/O-Vorrichtungen 252 direkt mit dem Systemspeicher 249. In einer Ausführungsform verwaltet die IOMMU 251 mehrere Sätze von Seitentabellen, um virtuelle Adressen auf physische Adressen in Systemspeicher 249 abzubilden. In dieser Ausführungsform können die I/O-Vorrichtungen 252, CPU(s) 246 und GPU(s) 239 sich denselben virtuellen Adressraum teilen.
  • In einer Implementierung unterstützt die IOMMU 251 Virtualisierung. In diesem Fall kann sie einen ersten Satz von Seitentabellen verwalten, um virtuelle Gast-/Grafikadressen auf physische Gast-/Grafikadressen abzubilden, und einen zweiten Satz von Seitentabellen verwalten, um die physischen Gast-/Grafikadressen auf physische System-/Hostadressen (z.B. innerhalb von Systemspeicher 249) abzubilden. Die Basisadressen sowohl des ersten und zweiten Satzes von Seitentabellen können in Steuerungsregistern gespeichert und bei einem Kontextwechsel ausgetauscht werden (z.B. derart, dass der neue Kontext mit Zugriff auf den relevanten Satz von Seitentabellen bereitgestellt ist). Während es nicht in 2C veranschaulicht ist, kann jeder der Kerne 243, 244, 245 und/oder Multikerngruppen 240A-240N Übersetzungsnachschlagepuffer (TLBs, Translation Lookaside Buffers) aufweisen, um virtueller Gast zu physischem Gast Übersetzungen, physischer Gast zu physischem Host Übersetzungen und virtueller Gast zu physischem Host Übersetzungen zwischenzuspeichern.
  • In einer Ausführungsform sind die CPUs 246, GPUs 239 und I/O-Vorrichtungen 252 auf einem einzelnen Halbleiterchip und/oder Chip-Package integriert. Der veranschaulichte Speicher 249 kann auf demselben Chip integriert sein oder kann mit den Speichersteuerungen 248 über eine Schnittstelle extern vom Chip gekoppelt sein. In einer Implementierung umfasst der Speicher 249 GDDR6-Speicher, der sich denselben virtuellen Adressraum wie andere physische Systemlevelspeicher teilt, obwohl die zugrundeliegenden Prinzipien der Erfindung nicht auf diese bestimmte Implementierung begrenzt sind.
  • In einer Ausführungsform weisen die Tensorkerne 244 mehrere Ausführungseinheiten auf, die spezifisch gestaltet sind, Matrixoperationen durchzuführen, die der fundamentale Rechenbetrieb sind, der verwendet wird, um Tiefenlernbetriebe durchzuführen. Zum Beispiel können gleichzeitige Matrixmultiplikationsoperationen für neurales Netzwerktraining und Schlussfolgerung verwendet werden. Die Tensorkerne 244 können Matrixverarbeitung unter Verwendung einer Vielfalt von Operandenpräzisionen durchführen, aufweisend Einfachpräzisionsgleitkomma (z.B. 32 Bits), Halbpräzisionsgleitkomma (z.B. 16 Bits), Ganzzahlworte (16 Bits), Bytes (8 Bits) und Halbbytes (4 Bits). In einer Ausführungsform extrahiert eine neurale Netzwerkimplementierung Merkmale jeder gerenderten Szene, die potentiell Details mehrerer Frames kombiniert, um ein hochqualitatives finales Bild zu erstellen.
  • Bei Tiefenlernimplementierungen kann parallele Matrixmultiplikationsarbeit zur Ausführung auf den Tensorkernen 244 eingeplant werden. Das Training von neuralen Netzwerken benötigt insbesondere eine signifikante Zahl von Zahlenmatrixskalarproduktbetrieben. Um eine Innenproduktformulierung einer N x N x N Matrixmultiplikation zu verarbeiten, können die Tensorkerne 244 mindestens N Skalarproduktverarbeitungselemente aufweisen. Bevor die Matrixmultiplikation beginnt, wird eine gesamte Matrix in Kachelregister geladen und mindestens eine Spalte einer zweiten Matrix wird bei jedem Zyklus für N Zyklen geladen. Bei jedem Zyklus werden N Skalarprodukte verarbeitet.
  • Matrixelemente können bei verschiedenen Präzisionen gespeichert werden, abhängig von der bestimmten Implementierung, aufweisend 16-Bit-Worte, 8-Bit-Bytes (z.B. INT8) und 4-Bit-Halbbytes (z.B. INT4). Verschiedene Präzisionsmodi können für die Tensorkerne 244 bestimmt werden, um sicherzustellen, dass die effizienteste Präzision für verschiedene Arbeitslasten verwendet wird (z.B. wie Schlussfolgerungsarbeitslasten, die Quantisierung auf Bytes und Halbbytes tolerieren können).
  • In einer Ausführungsform beschleunigen die Raytracing-Kerne 245 Raytracing-Betriebe für sowohl Echtzeit-Raytracing und Nichtechtzeit-Raytracingimplementierungen. Insbesondere weisen die Raytracing-Kerne 245 Strahlquerungs-/-kreuzungsschaltkreise auf, um Strahlquerung unter Verwendung von Begrenzungsvolumenhierarchien (BVHs) durchzuführen und Kreuzungen zwischen Strahlen und Primitiven zu identifizieren, die innerhalb der BVH-Volumen umschlossen sind. Die Raytracing-Kerne 245 können auch Schaltkreise zum Durchführen von Tiefentestung und Auslese (z.B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) aufweisen. In einer Implementierung führen die Raytracing-Kerne 245 Querungs- und Kreuzungsbetriebe in Einklang mit den hierin beschriebenen Bildentrauschungstechniken durch, von denen mindestens ein Abschnitt auf den Tensorkernen 244 ausgeführt werden kann. Zum Beispiel implementieren in einer Ausführungsform die Tensorkerne 244 ein neurales Tiefenlernnetzwerk, um Entrauschen von Frames durchzuführen, das von den Raytracing-Kernen 245 erzeugt wird. Jedoch können die CPU(s) 246, Grafikkerne 243 und/oder Raytracingkerne 245 auch alle oder einen Abschnitt der Entrausch- und/oder Tiefenlernalgorithmen implementieren.
  • Zusätzlich kann, wie zuvor beschrieben, ein verteilter Ansatz von Entrauschen eingesetzt werden, bei dem die GPU 239 in einer Rechenvorrichtung ist, die mit anderen Rechenvorrichtungen über ein Netzwerk oder eine Hochgeschwindigkeitszwischenverbindung gekoppelt ist. In dieser Ausführungsform teilen sich die zwischenverbundenen Rechenvorrichtungen neurale Netzwerklern-/-trainingsdaten, um die Geschwindigkeit zu verbessern, mit der das gesamte System lernt, Entrauschen für verschiedene Typen von Bildframes und/oder verschiedene Grafikanwendungen durchzuführen.
  • In einer Ausführungsform verarbeiten die Raytracing-Kerne 245 alle BVH-Querungs- und Strahlprimitivkreuzungen, was die Grafikkerne 243 davor bewahrt, mit tausenden Anweisungen pro Strahl überladen zu werden. In einer Ausführungsform weist jeder Raytracing-Kern 245 einen ersten Satz spezialisierter Schaltkreise zum Durchführen von Begrenzungsboxtests (z.B. für Querungsbetriebe) und einen zweiten Satz spezialisierter Schaltkreise zum Durchführen der Strahl-Dreieck-Kreuzungstests (z.B. kreuzende Strahlen, die gequert wurden) auf. Daher kann in einer Ausführungsform die Multikerngruppe 240A einfach eine Strahlsonde starten und die Raytracing-Kerne 245 können unabhängig Strahlquerung und -kreuzung durchführen und Trefferdaten (z.B. ein Treffer, kein Treffer, viele Treffer usw.) an den Threadkontext zurückgeben. Die anderen Kerne 243, 244 sind frei, um andere Grafik- oder Rechenarbeit durchführen, während die Raytracing-Kerne 245 die Querungs- und Kreuzungsbetriebe durchführen.
  • In einer Ausführungsform weist jeder Raytracing-Kern 245 eine Querungseinheit auf, um BVH-Testbetriebe durchzuführen und eine Kreuzungseinheit, die Strahl-Primitiv-Kreuzungstests durchführt. Die Kreuzungseinheit erzeugt einen „Treffer“, „Nichttreffer“ oder „mehrere Treffer“ Antwort, die sie dem geeigneten Thread bereitstellt. Während der Querungs- und Kreuzungsbetriebe sind die Ausführungsressourcen der anderen Kerne (z.B. Grafikkerne 243 und Tensorkerne 244) frei, andere Formen von Grafikarbeit durchzuführen.
  • In einer unten beschriebenen bestimmten Ausführungsform wird ein Hybrid-Rasterisierungs-/Raytracing-Ansatz verwendet, in dem Arbeit zwischen den Grafikkernen 243 und Raytracing-Kernen 245 aufgeteilt wird.
  • In einer Ausführungsform weisen die Raytracing-Kerne 245 (und/oder andere Kerne 243, 244) Hardwareunterstützung für einen Raytracing-Anweisungssatz wie Microsofts DirectX Ray Tracing (DXR) auf, der einen DispatchRays-Befehl aufweist, wie auch Strahlerzeugungs-, nächster-Hit-, beliebiger-Treffer- und Verfehlungs-Shader, die die Zuweisung eindeutiger Sätze von Shadern und Texturen für jedes Objekt ermöglichen. Eine andere Raytracing-Plattform, die von den Raytracing-Kernen 245, Grafikkernen 243 und Tensorkernen 244 unterstützt werden kann, ist Vulkan 1.1.85. Man beachte jedoch, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf irgendeine bestimmte Raytracing-ISA begrenzt ist.
  • Im Allgemeinen können die unterschiedlichen Kerne 245, 244, 243 einen Raytracing-Anweisungssatz unterstützen, der Anweisungen/Funktionen für Strahlerzeugung, nächster Treffer, beliebiger Treffer, Strahl-Primitiv-Kreuzung, pro-Primitiv und hierarchische Begrenzungsboxerrichtung, Verfehlung, Aufsuchen und Ausnahmen aufweist. Genauer weist eine Ausführungsform Raytracing-Anweisungen auf, um die folgenden Funktionen durchzuführen:
    • Ray Generation - Strahlerzeugungsanweisungen können für jedes Pixel, jede Probe oder andere anwenderdefinierte Arbeitszuweisung ausgeführt werden.
    • Closest Hit - Eine nächster-Treffer-Anweisung kann ausgeführt werden, um den nächsten Kreuzungspunkt eines Strahls mit Primitiven innerhalb einer Szene zu lokalisieren.
    • Anv Hit - Eine beliebiger-Treffer-Anweisung identifiziert mehrere Kreuzungen zwischen einem Strahl und Primitiven innerhalb einer Szene, potentiell, um einen neuen nächsten Kreuzungspunkt zu identifizieren.
    • Intersection - Eine Kreuzungsanweisung führt einen Strahl-Primitiv-Kreuzungstest durch und gibt ein Ergebnis aus.
    • Per-Primitive Bounding Box Construction - Diese Anweisung bildet eine Begrenzungsbox um ein gegebenes Primitiv oder Gruppen von Primitiven (z.B., wenn eine neue BVH oder andere Beschleunigungsdatenstruktur gebildet wird). Miss - gibt an, dass ein Strahl die gesamte Geometrie innerhalb einer Szene oder ein bestimmtes Gebiet einer Szene verfehlt.
    • Visit - gibt die Untervolumina an, die ein Strahl queren wird.
    • Exceptions - weist unterschiedliche Typen von Ausnahmehandlern auf (z.B. für unterschiedliche Fehlerbedingungen aufgerufen).
  • 2D ist ein Blockdiagramm einer Allzweckgrafikverarbeitungseinheit (GPGPU, General Purpose Graphics Processing Unit) 270, die gemäß hierin beschriebenen Ausführungsformen als ein Grafikprozessor und/oder Rechenbeschleuniger konfiguriert sein kann. Die GPGPU 270 kann sich mit Prozessoren (z.B. eine oder mehrere CPU(s) 246) und Speicher 271, 272 über einen oder mehrere System- und/oder Speicherbusse zwischenverbinden. In einer Ausführungsform ist der Speicher 271 Systemspeicher, der mit der einen oder den mehreren CPU(s) 246 geteilt werden kann, während Speicher 272 Vorrichtungsspeicher ist, der dediziert für die GPGPU 270 ist. In einer Ausführungsforme können Komponenten innerhalb der GPGPU 270 und Vorrichtungsspeicher 272 in Speicheradressen abgebildet werden, die für die eine oder mehreren CPU(s) 246 zugänglich sind. Zugriff auf Speicher 271 und 272 kann über eine Speichersteuerung 268 erleichtert werden. In einer Ausführungsform weist die Speichersteuerung 268 eine interne Direktspeicherzugriff- (DMA, Direct Memory Access) -steuerung 269 auf oder kann Logik aufweisen, um Betriebe durchzuführen, die ansonsten von einer DMA-Steuerung durchgeführt werden würden.
  • Die GPGPU 270 weist mehrere Cachespeicher auf, aufweisend einen L2-Cache 253, L1-Cache 254, einen Anweisungscache 255 und geteilten Speicher 256, von dem mindestens ein Abschnitt auch als ein Cachespeicher partitioniert sein kann. Die GPGPU 270 weist auch mehrere Recheneinheiten 260A-260N auf. Jede Recheneinheit 260A-260N weist einen Satz von Vektorregistern 261, Skalarregistern 262, Vektorlogikeinheiten 263 und Skalarlogikeinheiten 264 auf. Die Recheneinheiten 260A-260N können auch lokal geteilten Speicher 265 und einen Programmzähler 266 aufweisen. Die Recheneinheiten 260A-260N können sich mit einem konstanten Cache 267 koppeln, der verwendet werden kann, um konstante Daten zu speichern, die Daten sind, die sich während des Ablaufs von Kernel oder Shader-Programm nicht ändern, das auf der GPGPU 270 ausführt. In einer Ausführungsform ist das konstante Cache 267 ein Skalardatencache und zwischengespeicherte Daten können direkt in die Skalarregister 262 abgerufen werden.
  • Während Betrieb können die eine oder mehreren CPU(s) 246 Befehle in Register oder Speicher in der GPGPU 270 schreiben, die in einen zugänglichen Adressraum abgebildet wurde. Die Befehlsprozessoren 257 können die Befehle von Registern oder Speicher lesen und ermitteln, wie diese Befehle innerhalb der GPGPU 270 verarbeitet werden. Ein Thread-Dispatcher 258 kann dann verwendet werden, um Threads zu den Recheneinheiten 260A-260N einzulasten, um diese Befehle durchzuführen. Jede Recheneinheit 260A-260N kann Threads unabhängig von den anderen Recheneinheiten ausführen. Zusätzlich kann jede Recheneinheit 260A-260N unabhängig für konditionale Berechnung konfiguriert sein und kann konditional die Berechnungsergebnisse zu Speicher ausgeben. Die Befehlsprozessoren 257 können die eine oder mehreren CPU(s) 246 unterbrechen, wenn die vorgelegten Befehle abgeschlossen sind.
  • 3A-3C veranschaulichen Blockdiagramme zusätzlicher Grafikprozessor- und Rechenbeschleunigerarchitekturen, die von hierin beschriebenen Ausführungsformen bereitgestellt sind. Die Elemente von 3A-3C, die dieselben Referenznummern (oder Namen) wie die Elemente einer beliebigen anderen Figur hierin aufweisen, können auf eine ähnliche Weise wie hier an anderer Stelle beschrieben arbeiten oder funktionieren, sind aber nicht darauf begrenzt.
  • 3A ist ein Blockdiagramm eines Grafikprozessors 300, der eine diskrete Grafikverarbeitungseinheit sein kann, oder ein Grafikprozessor sein kann, in dem mehrere Verarbeitungskerne integriert sind, oder andere Halbleitervorrichtungen, wie, aber nicht begrenzt auf, Speichervorrichtungen oder Netzwerkschnittstellen. In manchen Ausführungsformen kommuniziert der Grafikprozessor über eine speicherabgebildete I/O-Schnittstelle mit Registern auf dem Grafikprozessor und mit Befehlen, die in den Prozessorspeicher platziert sind. In manchen Ausführungsformen weist Grafikprozessor 300 eine Speicherschnittstelle 314 zu Zugriffsspeicher auf. Speicherschnittstelle 314 kann eine Schnittstelle zu lokalem Speicher, einem oder mehreren internen Caches, einem oder mehreren geteilten externen Caches und/oder zu Systemspeicher sein.
  • In manchen Ausführungsformen weist Grafikprozessor 300 auch eine Anzeigesteuerung 302 auf, um Anzeigeausgabedaten zu einer Anzeigevorrichtung 318 zu treiben. Anzeigesteuerung 302 weist Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und Zusammenstellung von mehreren Schichten von Video oder Anwenderschnittstellenelementen auf. Die Anzeigevorrichtung 318 kann eine interne oder externe Anzeigevorrichtung sein. In einer Ausführungsform ist die Anzeigevorrichtung 318 eine am Kopf befestigte Anzeigevorrichtung, wie eine Anzeigevorrichtung für virtuelle Realität (VR, Virtual Reality) oder eine Anzeigevorrichtung für erweiterte Realität (AR, Augmented Reality). In manchen Ausführungsformen weist Grafikprozessor 300 eine Videocodec-Engine 306 auf, um Medien zu, von oder zwischen einem oder mehreren Mediencodierungsformaten zu codieren, decodieren oder transcodieren, aufweisend, aber nicht begrenzt auf, Moving Picture Experts Group (MPEG) Formate, wie MPEG-2, Advanced Video Coding (AVC) Formate, wie H.264/MPEG-4 AVC, H.265/HEVC, Alliance for Open Media (AOMedia) VP8, VP9, wie auch die Society of Motion Picture & Television Engineers (SMPTE) 421M/VC-1 und Joint Photographic Experts Group (JPEG) Formate, wie JPEG, und Motion JPEG (MJPEG) Formate.
  • In manchen Ausführungsformen weist Grafikprozessor 300 eine Blockbildtransfer-(BLIT, Block Image Transfer) Engine 304 auf, um zweidimensionale (2D) Rasterisierungsbetriebe durchzuführen, aufweisend zum Beispiel Bitbegrenzungsblocktransfers. Jedoch sind in einer Ausführungsform 2D-Grafikbetriebe unter Verwendung einer oder mehrerer Komponenten von Grafikverarbeitungsengine (GPE, Graphics Processing Engine) 310 durchgeführt. In manchen Ausführungsformen ist GPE 310 eine Rechenengine zum Durchführen von Grafikbetrieben, aufweisend dreidimensionale (3D) Grafikbetriebe und Medienbetriebe.
  • In manchen Ausführungsformen weist GPE 310 eine 3D-Pipeline 312 zum Durchführen von 3D-Betrieben auf, wie Rendern von dreidimensionalen Bildern und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 3D-Primitivformen (z.B. Rechteck, Dreieck usw.) wirken. Die 3D-Pipeline 312 weist programmierbare und fixierte Funktionselemente auf, die unterschiedliche Aufgaben innerhalb des Elements durchführen und/oder Ausführungsthreads zu einem 3D/Medienteilsystem 315 starten. Während 3D-Pipeline 312 verwendet werden kann, um Medienbetriebe durchzuführen, weist eine Ausführungsform von GPE 310 auch eine Medienpipeline 316 auf, die insbesondere verwendet wird, um Medienbetriebe durchzuführen, wie Videonachbearbeitung und Bildverbesserung.
  • In manchen Ausführungsformen weist Medienpipeline 316 fixierte Funktions- oder programmierbare Logikeinheiten auf, um einen oder mehrere spezialisierte Medienbetriebe durchzuführen, wie Videodecodierungsbeschleunigung, Videoentflechtung und Videocodierungsbeschleunigung anstelle von oder seitens der Videocodec-Engine 306. In manchen Ausführungsformen weist Medienpipeline 316 zusätzlich eine Thread-Starteinheit auf, um Threads zur Ausführung auf 3D-/Medienteilsystem 315 zu starten. Die gestarteten Threads führen Berechnungen für die Medienbetriebe auf einer oder mehreren Grafikausführungseinheiten durch, die in 3D-/Medienteilsystem 315 aufgewiesen sind.
  • In manchen Ausführungsformen weist 3D-/Medienteilsystem 315 Logik zum Ausführen von Threads auf, die von 3D-Pipeline 312 und Medienpipeline 316 gestartet wurden. In einer Ausführungsform senden die Pipelines Thread-Ausführungsanfragen an 3D-/Medienteilsystem 315, das Thread-Einlastungslogik zum Vermitteln und Einlasten der unterschiedlichen Anfragen an verfügbare Thread-Ausführungsressourcen aufweist. Die Ausführungsressourcen weisen ein Array von Grafikausführungseinheiten auf, um die 3D- und Medienthreads zu verarbeiten. In manchen Ausführungsformen weist 3D-/Medienteilsystem 315 einen oder mehrere interne Caches für Threadanweisungen und Daten auf. In manchen Ausführungsformen weist das Teilsystem auch geteilten Speicher auf, aufweisend Register und adressierbaren Speicher, um Daten zwischen Threads zu teilen und Ausgabedaten zu speichern.
  • 3B veranschaulicht einen Grafikprozessor 320, der eine gekachelte Architektur aufweist, gemäß hierin beschriebenen Ausführungsformen. In einer Ausführungsform weist der Grafikprozessor 320 einen Grafikverarbeitungsengine-Cluster 322 auf, der mehrere Instanzen der Grafikverarbeitungsengine 310 von 3A innerhalb einer Grafikengine-Kachel 310A-310D aufweist. Jede Grafikengine-Kachel 310A-310D kann über einen Satz von Kachelzwischenverbindungen 323A-323F zwischenverbunden sein. Jede Grafikengine-Kachel 310A-310D kann auch mit einem Speichermodul oder einer Speichervorrichtung 326A-326D über Speicherzwischenverbindungen 325A-325D verbunden sein. Die Speichervorrichtungen 326A-326D können beliebige Grafikspeichertechnologie verwenden. Zum Beispiel können die Speichervorrichtungen 326A-326D Grafikdoppeldatenraten- (GDDR, Graphics Double Data Rate) Speicher sein. Die Speichervorrichtungen 326A-326D sind in einer Ausführungsform Hochbandbreitenspeicher- (HBM, High Bandwidth Memory) Module, die mit deren jeweiliger Grafikengine-Kachel 310A-310D auf dem Die sein können. In einer Ausführungsform sind die Speichervorrichtungen 326A-326D gestapelte Speichervorrichtungen, die auf deren jeweilige Grafikengine-Kachel 310A-310D gestapelt sein können. In einer Ausführungsform liegen jede Grafikengine-Kachel 310A-310D und damit verknüpfter Speicher 326A-326D auf separaten Chiplets, die an einen Basis-Die oder ein Basissubstrat gebondet sind, wie ferner in 11B-11D im Detail beschrieben wird.
  • Der Grafikverarbeitungsengine-Cluster 322 kann sich mit einer Fabric-Zwischenverbindung 324 auf dem Chip oder auf dem Package verbinden. Die Fabric-Zwischenverbindung 324 kann Kommunikation zwischen Grafikengine-Kacheln 310A-310D und Komponenten wie dem Videocodec 306 und einer oder mehreren Koper-Engines 304 ermöglichen. Die Kopierengines 304 können verwendet werden, um Daten aus den, in die und zwischen den Speichervorrichtungen 326A-326D und Speicher zu bewegen, der außerhalb des Grafikprozessors 320 (z.B. Systemspeicher) ist. Die Fabric-Zwischenverbindung 324 kann verwendet werden, um die Grafikengine-Kacheln 310A-310D zwischenzu-verbinden. Der Grafikprozessor 320 kann optional eine Anzeigesteuerung 302 aufweisen, um eine Verbindung mit einer externen Anzeigevorrichtung 318 zu ermöglichen. Der Grafikprozessor kann auch als ein Grafik- oder Rechenbeschleuniger konfiguriert sein. In der Beschleunigerkonfiguration können die Anzeigesteuerung 302 und Anzeigevorrichtung 318 ausgelassen werden.
  • Der Grafikprozessor 320 kann sich über eine Hostschnittstelle 328 mit einem Hostsystem verbinden. Die Hostschnittstelle 328 kann Kommunikation zwischen dem Grafikprozessor 320, Systemspeicher und/oder anderen Systemkomponenten ermöglichen. Die Hostschnittstelle 328 kann zum Beispiel ein PCI Express Bus oder ein anderer Typ 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 zur Rechenbeschleunigung optimiert. Ein Rechenengine-Cluster 332 kann einen Satz von Rechenengine-Kacheln 340A-340D aufweisen, die Ausführungslogik aufweisen, die für parallele oder vektorbasierte Allzweckrechenbetriebe optimiert ist. In manchen Ausführungsformen weisen die Rechenengine-Kacheln 340A-340D keine Grafikverarbeitungslogik mit fixierter Funktion auf, obwohl in einer Ausführungsform eine oder mehrere der Rechenengine-Kacheln 340A-340D Logik aufweisen können, um Medienbeschleunigung durchzuführen. Die Rechenengine-Kacheln 340A-340D können mit Speicher 326A-326D über Speicherzwischenverbindungen 325A-325D verbunden sein. Der Speicher 326A-326D und Speicherzwischenverbindungen 325A-325D können ähnliche Technologie wie in Grafikprozessor 320 aufweisen oder davon verschieden sein. Die Grafikrechen-Engine-Kacheln 340A-340D können auch über einen Satz von Kachelzwischenverbindungen 323A-323F zwischenverbunden sein und können mit einer Fabric-Zwischenverbindung 324 verbunden sein und/oder durch diese zwischenverbunden sein. In einer Ausführungsform weist der Rechenbeschleuniger 330 einen großen L3-Cache 336 auf, der als ein vorrichtungsweiter Cache konfiguriert sein kann. Der Rechenbeschleuniger 330 kann auch mit einem Hostprozessor und Speicher über eine Hostschnittstelle 328 auf eine ähnliche Weise wie der Grafikprozessor 320 von 3B verbunden sein.
  • Grafikverarbeitunsseneine
  • 4 ist ein Blockdiagramm einer Grafikverarbeitungsengine 410 eines Grafikprozessors in Übereinstimmung mit manchen Ausführungsformen. In einer Ausführungsform ist die Grafikverarbeitungsengine (GPE) 410 eine Version der in 3A gezeigten GPE 310 und kann auch eine Grafikengine-Kachel 310A-310D von 3B darstellen. Elemente von 4, die dieselben Referenznummern (oder Namen) wie die Elemente einer beliebigen anderen Figur hierin aufweisen, können auf eine ähnliche Weise wie hier an anderer Stelle beschrieben arbeiten oder funktionieren, sind aber nicht darauf begrenzt. Zum Beispiel sind die 3D-Pipeline 312 und Medienpipeline 316 von 3A veranschaulicht. Die Medienpipeline 316 ist optional in manchen Ausführungsformen der GPE 410 und kann ausdrücklich innerhalb der GPE 410 aufgewiesen sein. Zum Beispiel und in mindestens einer Ausführungsform ist ein separater Medien- und/oder Bildprozessor mit der GPE 410 gekoppelt.
  • In manchen Ausführungsformen koppelt sich GPE 410 mit einem Befehlsstreamer 403 oder weist diesen auf, der einen Befehlsstream zu der 3D-Pipeline 312 und/oder den Medienpipelines 316 bereitstellt. In manchen Ausführungsformen ist Befehlsstreamer 403 mit Speicher, der Systemspeicher sein kann, oder einem oder mehreren von internem Cachespeicher und geteiltem Cachespeicher gekoppelt. In manchen Ausführungsformen empfängt Befehlsstreamer 403 Befehle von dem Speicher und sendet die Befehle an 3D-Pipeline 312 und/oder Medienpipeline 316. Die Befehle sind von einem Ringpuffer, der Befehle für die 3D-Pipeline 312 und Medienpipeline 316 speichert, abgerufene Richtlinien. In einer Ausführungsform kann der Ringpuffer zusätzlich Sammelbefehlspuffer aufweisen, die Sammlungen mehrerer Befehle speichern. Die Befehle für die 3D-Pipeline 312 können auch Referenzen auf Daten aufweisen, die in Speicher gespeichert sind, wie, aber nicht begrenzt auf, Scheitelpunkt- und Geometriedaten für die 3D-Pipeline 312 und/oder Bilddaten und Speicherobjekte für die Medienpipeline 316. Die 3D-Pipeline 312 und Medienpipeline 316 verarbeiten die Befehle und Daten, indem Betriebe über Logik innerhalb der jeweiligen Pipelines durchgeführt werden oder indem ein oder mehrere Ausführungsthreads in ein Grafikkernarray 414 eingelastet werden. In einer Ausführungsform weist das Grafikkernarray 414 einen oder mehrere Blöcke von Grafikkernen (z.B. Grafikkern(e) 415A, Grafikkern(e) 415B) auf, wobei jeder Block einen oder mehrere Grafikkerne aufweist. Jeder Grafikkern weist einen Satz von Grafikausführungsressourcen auf, der Allzweck- und grafikspezifische Ausführungslogik aufweist, um Grafik- und Rechenbetriebe durchzuführen, wie auch Texturverarbeitung mit fixierter Funktion und/oder Maschinenlern- und Beschleunigungslogik mit künstlicher Intelligenz.
  • In unterschiedlichen Ausführungsformen kann die 3D-Pipeline 312 fixierte Funktion und programmierbare Logik aufweisen, um ein oder mehrere Shader-Programme zu verarbeiten, wie Scheitelpunktshader, Geometrieshader, Pixelshader, Fragmentshader, Rechenshader oder andere Shaderprogramme, indem die Anweisungen verarbeitet werden und Ausführungsthreads in das Grafikkernarray 414 eingelastet werden. Das Grafikkernarray 414 stellt einen vereinheitlichten Block von Ausführungsressourcen zur Verwendung bei Verarbeitung dieser Shader-Programme bereit. Mehrzweckausführungslogik (z.B. Ausführungseinheiten) innerhalb des/der Grafikkerns (Grafikkerne) 415A-415B des Grafikkernarrays 414 weist Unterstützung für unterschiedliche 3D-API-Shader-Sprachen auf und kann mehrere gleichzeitige Ausführungsthreads ausführen, die mit mehreren Shadern verknüpft sind.
  • In manchen Ausführungsformen weist das Grafikkernarray 414 Ausführungslogik auf, um Medienfunktionen durchzuführen, wie Video- und/oder Bildverarbeitung. In einer Ausführungsform weisen die Ausführungseinheiten Allzwecklogik auf, die programmierbar ist, parallele Allzweckrechenbetriebe zusätzlich zu Grafikverarbeitungsbetrieben durchzuführen. Die Allzwecklogik kann Verarbeitungsbetriebe parallel oder in Verbindung mit Allzwecklogik innerhalb des/der Prozessorkerns (Prozessorkerne) 107 von 1 oder Kern 202A-202N, wie in 2A, durchführen.
  • Ausgabedaten, die von Threads erzeugt werden, die auf dem Grafikkernarray 414 ausführen, können Daten an Speicher in einem vereinheitlichen Rückführungspuffer (URB, Unified Return Buffer) 418 ausgeben. Der URB 418 kann Daten für mehrere Threads speichern. In manchen Ausführungsformen kann der URB 418 verwendet werden, um Daten zwischen verschiedenen Threads zu senden, die auf dem Grafikkernarray 414 ausführen. In manchen Ausführungsformen kann der URB 418 zusätzlich zur Synchronisation zwischen Threads auf dem Grafikkernarray und fixierter Funktionslogik innerhalb der geteilten Funktionslogik 420 verwendet werden.
  • In manchen Ausführungsformen ist Grafikkernarray 414 derart skalierbar, dass das Array eine variable Zahl von Grafikkernen aufweist, wobei jeder eine variable Zahl von Ausführungseinheiten aufweist, basierend auf der Zielleistung und dem Arbeitsleistungslevel von GPE 410. In einer Ausführungsform sind die Ausführungsressourcen derart dynamisch skalierbar, dass Ausführungsressourcen nach Bedarf aktiviert oder deaktiviert werden können.
  • Das Grafikkernarray 414 koppelt sich mit geteilter Funktionslogik 420, die mehrere Ressourcen aufweist, die zwischen den Grafikkernen in dem Grafikkernarray geteilt werden. Die geteilten Funktionen innerhalb der geteilten Funktionslogik 420 sind Hardwarelogikeinheiten, die spezialisierte ergänzende Funktionalität zu dem Grafikkernarray 414 bereitstellen. In unterschiedlichen Ausführungsformen weist geteilte Funktionslogik 420, ist aber nicht begrenzt auf, Abtaster- 421, Mathematik-422 und Zwischen-Thread-Kommunikations- (ITC) 423 Logik auf. Zusätzlich implementieren manche Ausführungsformen einen oder mehrere Cache(s) 425 innerhalb der geteilten Funktionslogik 420.
  • Eine geteilte Funktion ist mindestens in einem Fall implementiert, wo der Bedarf an einer gegebenen spezialisierten Funktion zum Einschluss innerhalb des Grafikkernarrays 414 unzureichend ist. Stattdessen ist eine einzelne Instanziierung dieser spezialisierten Funktion als eine eigenständige Entität in der geteilten Funktionslogik 420 implementiert und wird unter den Ausführungsressourcen innerhalb des Grafikkernarrays 414 geteilt. Der präzise Satz von Funktionen, die zwischen dem Grafikkernarray 414 geteilt werden und innerhalb des Grafikkernarrays 414 aufgewiesen sind, variiert über die Ausführungsformen hinweg. In manchen Ausführungsformen können bestimmte geteilte Funktionen innerhalb der geteilten Funktionslogik 420, die umfangreich von dem Grafikkernarray 414 verwendet werden, innerhalb geteilter Funktionslogik 416 innerhalb des Grafikkernarrays 414 aufgewiesen sein. In unterschiedlichen Ausführungsformen kann die geteilte Funktionslogik 416 innerhalb des Grafikkernarrays 414 manche oder alle Logik innerhalb der geteilten Funktionslogik 420 aufweisen. In einer Ausführungsform können alle Logikelemente innerhalb der geteilten Funktionslogik 420 innerhalb der geteilten Funktionslogik 416 des Grafikkernarrays 414 dupliziert sein. In einer Ausführungsform ist die geteilte Funktionslogik 420 zugunsten der geteilten Funktionslogik 416 innerhalb des Grafikkernarrays 414 ausgeschlossen.
  • Ausführungseinheiten
  • 5A-5B veranschaulichen Thread-Ausführungslogik 500, die ein Array von Verarbeitungselementen aufweist, die in einem Grafikprozessorkern aufgewiesen sind, gemäß hierin beschriebenen Ausführungsformen. Elemente von 5A-5B, die dieselben Referenznummern (oder Namen) wie die Elemente einer beliebigen anderen Figur hierin aufweisen, können auf eine ähnliche Weise wie hier an anderer Stelle beschrieben arbeiten oder funktionieren, sind aber nicht darauf begrenzt. 5A-5B veranschaulichen eine Übersicht von Thread-Ausführungslogik 500, die für Hardwarelogik repräsentativ sein kann, die mit jedem Teilkern 221A-221F von 2B veranschaulicht ist. 5A stellt eine Ausführungseinheit innerhalb eines Allzweckgrafikprozessors dar, während 5B eine Ausführungseinheit darstellt, die innerhalb eines Rechenbeschleunigers verwendet werden kann.
  • Wie in 5A veranschaulicht, weist in manchen Ausführungsformen Thread-Ausführungslogik 500 einen Shader-Prozessor 502, einen Thread-Dispatcher 504, Anweisungscache 506, ein skalierbares Ausführungseinheitsarray, das mehrere Ausführungseinheiten 508A-508N aufweist, einen Abtaster 510, geteilten lokalen Speicher 511, einen Datencache 512 und einen Datenanschluss 514 auf. In einer Ausführungsform kann das skalierbare Ausführungseinheitsarray dynamisch skalieren, indem eine oder mehrere Ausführungseinheiten (z.B. beliebige der Ausführungseinheiten 508A, 508B, 508C, 508D bis 508N-1 und 508N) basierend auf den Rechenanforderungen einer Arbeitslast aktiviert oder deaktiviert werden. In einer Ausführungsform sind die aufgewiesenen Komponenten über ein Zwischenverbindungsfabric zwischenverbunden, das jede der Komponenten verlinkt. In manchen Ausführungsformen weist Thread-Ausführungslogik 500 eine oder mehrere Verbindungen mit Speicher, wie Systemspeicher oder Cachespeicher, durch einen oder mehrere von Anweisungscache 506, Datenanschluss 514, Abtaster 510 und Ausführungseinheiten 508A-508N auf. In manchen Ausführungsformen ist jede Ausführungseinheit (z.B. 508A) eine eigenständige programmierbare Allzweckrecheneinheit, die im Stande ist, mehrere gleichzeitige Hardwarethreads auszuführen, während mehrere Datenelemente parallel für jeden Thread verarbeitet werden. In unterschiedlichen Ausführungsformen ist das Array von Ausführungseinheiten 508A-508N skalierbar, eine beliebige Zahl individueller Ausführungseinheiten aufzuweisen.
  • In manchen Ausführungsformen sind die Ausführungseinheiten 508A-508N vorrangig verwendet, um Shader-Programme auszuführen. Ein Shader-Prozessor 502 kann die unterschiedlichen Shader-Programme und Einlastungsausführungsthreads, die mit den Shader-Programmen über einen Thread-Dispatcher 504 verknüpft sind, verarbeiten. In einer Ausführungsform weist der Thread-Dispatcher Logik auf, um Thread-Initialisierungsanfragen von den Grafik- und Medienpipelines zu vermitteln und die angefragten Threads auf einer oder mehreren Ausführungseinheiten in den Ausführungseinheiten 508A-508N zu instanziieren. Zum Beispiel kann eine Geometriepipeline Scheiteilpunkt-, Tessellations- oder Geometrieshader zur Verarbeitung zu der Thread-Ausführungslogik einlasten. In manchen Ausführungsformen kann Thread-Dispatcher 504 auch Laufzeit-Thread-Startanfragen von den ausgeführten Shader-Programmen verarbeiten.
  • In manchen Ausführungsformen unterstützen die Ausführungseinheiten 508A-508N einen Anweisungssatz, der native Unterstützung für viele Standard-3D-Grafikshader-Anweisungen derart aufweist, dass Shaderprogramme von Grafikbibliotheken (z.B. Direct 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen Scheitelpunkt- und Geometrieverarbeitung (z.B. Scheitelpunktprogramme, Geometrieprogramme, Scheitelpunktshader), Pixelverarbeitung (z.B. Pixelshader, Fragmentshader) und Allzweckverarbeitung (z.B. Rechen- und Medienshader). Jede der Ausführungseinheiten 508A-508N ist zur Mehrfachausgabe-Einzelanweisung-Mehrfach-Daten- (SIMD, Single Instruction Multiple Data) Ausführung im Stande und multigethreadeter Betrieb ermöglicht eine effiziente Ausführungsumgebung angesichts Speicherzugriffen mit höherer Latenz. Jeder Hardwarethread innerhalb jeder Ausführungseinheit weist eine dedizierte Hochbandbreitenregisterdatei auf und ist mit einem unabhängigen Thread-Zustand verknüpft. Ausführung wird Pro Takt mehrfach an Pipelines ausgestellt, die zu Ganzzahl-, Einzel- und Doppelpräzisionsgleitkommabetrieben, SIMD-Zweigkapazität, logischen Betrieben, transzendentalen Betrieben und anderen diversen Betrieben im Stande sind. Während auf Daten von Speicher oder einer der geteilten Funktionen gewartet wird, veranlasst Abhängigkeitslogik innerhalb der Ausführungseinheiten 508A-508N einen wartenden Thread zu ruhen, bis die angefragten Daten zurückgeleitet wurden. Während der wartende Thread ruht, können Hardwareressourcen Verarbeitung anderer Threads gewidmet werden. Zum Beispiel kann während einer Verzögerung, die mit einem Scheitelpunktshader-Betrieb verknüpft ist, eine Ausführungseinheit Betriebe für einen Pixelshader, Fragmentshader oder einen anderen Typ von Shaderprogramm, das einen verschiedenen Scheitelpunktshader aufweist, durchführen. Unterschiedliche Ausführungsformen können darauf zutreffen, Ausführung unter Verwendung von Einzelanweisung-Mehrfach-Thread (SIMT, Single Instruction Multiple Thread) als eine Alternative zur Verwendung von SIMD oder zusätzlich zur Verwendung von SIMD zu verwenden. Bezug auf einen SIMD-Kern oder Betrieb kann auch auf SIMD zutreffen oder auf SIMD in Kombination mit SIMT zutreffen.
  • Jede Ausführungseinheit in Ausführungseinheiten 508A-508N arbeitet auf Arrays von Datenelementen. Die Zahl von Datenelementen ist die „Ausführungsgröße“ oder die Zahl von Kanälen für die Anweisung. Ein Ausführungskanal ist eine logische Einheit von Ausführung für Datenelementzugriff, Maskierung und Ablaufsteuerung innerhalb von Anweisungen. Die Zahl von Kanälen kann unabhängig von der Zahl von physischen arithmetischen Logikeinheiten (ALUs, Arithmetic Logic Units) oder Gleitkommaeinheiten (FPUs, Floating Point Units) für einen bestimmten Grafikprozessor sein. In manchen Ausführungsformen unterstützen Ausführungseinheiten 508A-508N Ganzzahl- und Gleitkommadatentypen.
  • Der Ausführungseinheitsanweisungssatz weist SIMD-Anweisungen auf. Die unterschiedlichen Datenelemente können als ein verpackter Datentyp in einem Register gespeichert sein und die Ausführungseinheit wird die unterschiedlichen Elemente basierend auf der Datengröße der Elemente verarbeiten. Zum Beispiel, wenn auf einem 256-Bit breiten Vektor gearbeitet wird, sind die 256 Bits des Vektors in einem Register gespeichert und die Ausführungseinheit arbeitet auf dem Vektor als vier separate 54-Bit verpackte Datenelemente (Quad-Wort (WQ) große Datenelemente), acht separate 32-Bit verpackte Datenelemente (Doppelwort (DW) große Datenelemente), sechzehn separate 16-Bit verpackte Datenelemente (Wort (W) große Datenelemente) oder zweiunddreißig separate 8-Bit Datenelemente (Byte (B) große Datenelemente). Jedoch sind verschiedene Vektorbreiten und Registergrößen möglich.
  • In einer Ausführungsform können eine oder mehr Ausführungseinheiten in eine zusammengefügte Ausführungseinheit 509A-509N kombiniert werden, die Thread-Steuerungslogik (507A-507N) aufweist, die die vereinigten EUs gemeinsam haben. Mehrere EUs können in eine EU-Gruppe vereinigt werden. Jede EU in der vereinigten EU-Gruppe kann konfiguriert sein, einen separaten SIMD-Hardwarethread auszuführen. Die Zahl von EUs in einer vereinigten EU-Gruppe kann gemäß Ausführungsformen variieren. Zusätzlich können unterschiedliche SIMD-Breiten pro-EU durchgeführt werden, aufweisend, aber nicht begrenzt auf, SIMD8, SIMD16 und SIMD32. Jede vereinigte Grafikausführungseinheit 509A-509N weist mindestens zwei Ausführungseinheiten auf. Zum Beispiel weist vereinigte Ausführungseinheit 509A eine erste EU 508A, zweite EU 508B und Thread-Steuerungslogik 507A auf, die die erste EU 508A und die zweite EU 508B gemeinsam haben. Die Thread-Steuerungslogik 507A steuert Threads, die auf der vereinigten Grafikausführungseinheit 509A ausgeführt werden, was jeder EU innerhalb der vereinigten Ausführungseinheiten 509A-509N erlaubt, unter Verwendung eines gemeinsamen Anweisungszeigerregisters ausgeführt zu werden.
  • Ein oder mehrere interne Anweisungscaches (z.B. 506) sind in der Thread-Ausführungslogik 500 aufgewiesen, um Thread-Anweisungen für die Ausführungseinheiten zwischenzuspeichern. In manchen Ausführungsformen sind ein oder mehrere Datencaches (z.B. 512) aufgewiesen, um Threaddaten während Thread-Ausführung zwischenzuspeichern. Threads, die auf der Ausführungslogik 500 ausführen, können auch ausdrücklich verwaltete Daten in dem geteilten lokalen Speicher 511 speichern. In manchen Ausführungsformen ist ein Abtaster 510 aufgewiesen, um Texturabtastung für 3D-Betriebe und Medienabtastung für Medienbetriebe bereitzustellen. In manchen Ausführungsformen weist Abtaster 510 spezialisierte Textur- und Medienabtastungsfunktionalität auf, um Textur- oder Mediendaten während des Abtastungsprozesses zu verarbeiten, bevor die abgetasteten Daten an eine Ausführungseinheit bereitgestellt werden.
  • Während Ausführung senden die Grafik- und Medienpipelines Thread-Einleitungsanfragen an Thread-Ausführungslogik 500 über Thread-Start- und Einlastungslogik. Sobald eine Gruppe von geometrischen Objekten verarbeitet und in Pixeldaten gerastert wurde, wird Pixelprozessorlogik (z.B. Pixelshader-Logik, Fragmentshader-Logik usw.) innerhalb des Shader-Prozessors 502 aufgerufen, um ferner Ausgabeinformationen zu berechnen und Ergebnisse zu veranlassen, zu Ausgabeoberflächen geschrieben zu werden (z.B. Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.). In manchen Ausführungsformen berechnet ein Pixelshader oder Fragmentshader die Werte der unterschiedlichen Scheitelpunktattribute, die über das gerasterte Objekt zu interpolieren sind. In manchen Ausführungsformen führt Pixelprozessorlogik innerhalb des Shaderprozessors 502 dann ein Anwendungsprogrammierschnittstellen- (API, Anwendungsprogrammierungsschnittstelle) -geliefertes Pixel- oder Fragmentshader-Programm aus. Um das Shader-Programm auszuführen, lastet der Shader-Prozessor 502 Threads zu einer Ausführungseinheit (z.B. 508A) über Thread-Dispatcher 504 ein. In manchen Ausführungsformen verwendet Shader-Prozessor 502 Texturabtastungslogik in dem Abtaster 510, um auf Texturdaten in Texturabbildungen zuzugreifen, die in Speicher gespeichert sind. Arithmetische Betriebe an den Texturdaten und den Eingabegeometriedaten errechnen Pixelfarbdaten für jedes geometrische Fragment oder verwerfen ein oder mehrere Pixel von weiterer Verarbeitung.
  • In manchen Ausführungsformen stellt der Datenanschluss 514 einen Speicherzugriffmechanismus für die Thread-Ausführungslogik 500 bereit, um verarbeitete Daten an Speicher für weitere Verarbeitung auf einer Grafikprozessorausgabepipeline auszugeben. In manchen Ausführungsformen weist der Datenanschluss 514 einen oder mehrere Cachespeicher (z.B. Datencache 512) auf oder koppelt sich damit, um Daten für Speicherzugriff über den Datenanschluss zwischenzuspeichern.
  • In einer Ausführungsform kann die Ausführungslogik 500 auch einen Raytracer 505 aufweisen, der Raytracing-Beschleunigungsfunktionalität bereitstellen kann. Der Raytracer 505 kann einen Raytracing-Anweisungssatz unterstützen, der Anweisungen/Funktionen für Strahlerzeugung aufweist. Der Raytracing-Anweisungssatz kann ähnlich dem Raytracing-Anweisungssatz sein, der von den Raytracing-Kernen 245 in 2C unterstützt wird, oder sich davon unterscheiden.
  • 5B veranschaulicht beispielhafte interne Details einer Ausführungseinheit 508 gemäß manchen Ausführungsformen. Eine Grafikausführungseinheit 508 kann eine Anweisungsabrufeinheit 537, ein allgemeines Registerdateiarray (GRF, General Register File array) 524, ein architektonisches Registerdateiarray (ARF, Architectural Register File Array) 526, einen Thread-Vermittler 522, eine Sendeeinheit 530, eine Verzweigungseinheit 532, einen Satz von SIMD-Gleitkommaeinheiten (FPUs) 534 und in einer Ausführungsform einen Satz von dedizierten Ganzzahl-SIMD-ALUs 535 aufweisen. Das GRF 524 und ARF 526 weisen den Satz von allgemeinen Registerdateien und Architekturregisterdateien auf, die mit jedem gleichzeitigen Hardwarethread verknüpft sind, der in der Grafikausführungseinheit 508 aktiv sein kann. In einer Ausführungsform wird ein architektonischer Zustand pro Thread in dem ARF 526 beibehalten, während Daten, die während Thread-Ausführung verwendet werden, in dem GRF 524 gespeichert werden. Der Ausführungszustand jedes Threads, aufweisend die Anweisungszeiger für jeden Thread, kann in Thread-spezifischen Registern in dem RF 526 gehalten werden.
  • In einer Ausführungsform weist die Grafikausführungseinheit 508 eine Architektur auf, die eine Kombination von gleichzeitigem Multithreading (SMT, Simultaneous Multi-Threading) und feinabgestuftem vernetzten Multithreading (IMT, Interleaved Multi-Threading) ist. Die Architektur weist eine modulare Konfiguration auf, die zum Zeitpunkt von Design basierend auf einer Zielzahl gleichzeitiger Threads und einer Zahl von Registern pro Ausführungseinheit feinabgestuft werden kann, wo Ausführungseinheitsressourcen über Logik geteilt sind, die verwendet wird, mehrere gleichzeitige Threads auszuführen. Die Zahl von logischen Threads, die von der Grafikausführungseinheit 508 ausgeführt werden können, ist nicht auf die Zahl von Hardwarethreads begrenzt und mehrere logische Threads können jedem Hardwarethread zugewiesen werden.
  • In einer Ausführungsform kann die Grafikausführungseinheit 508 mehrere Anweisungen gemeinsam ausstellen, die jeweils verschiedene Anweisungen sein können. Der Thread-Vermittler 522 des Grafikausführungseinheitsthreads 508 kann die Anweisungen zu einer der Sendeeinheit 530, Verzweigungseinheit 532 oder SIMD-FPU(s) 534 zur Ausführung einlasten. Jeder Ausführungsthread kann auf Allzweckregister innerhalb des GRF 524 zugreifen 128, wo jedes Register 32 Bytes speichern kann, die als ein SIMD 8-Elementvektor von 32-Bit Datenelementen zugänglich sind. In einer Ausführungsform weist jeder Ausführungseinheitsthread Zugriff auf 4 Kbytes innerhalb des GRF 524 auf, obwohl Ausführungsformen dahin nicht begrenzt sind und mehr oder weniger Registerressourcen in anderen Ausführungsformen bereitgestellt sein können. In einer Ausführungsform ist die Grafikausführungseinheit 508 in sieben Hardwarethreads partitioniert, die unabhängig Rechenbetriebe durchführen können, obwohl die Zahl von Threads pro Ausführungseinheit auch gemäß Ausführungsformen variieren kann. Zum Beispiel sind in einer Ausführungsform bis zu 16 Hardwarethreads unterstützt. In einer Ausführungsform, in der sieben Threads auf 4 Kbytes zugreifen können, kann das GRF 524 insgesamt 28 Kbytes speichern. Wo 16 Threads auf 4 Kbytes zugreifen können, kann das GRF 524 insgesamt 64 Kbytes speichern. Flexible Adressmodi können Registern gestatten, gemeinsam adressiert zu werden, um effektiv breitere Register zu bilden oder überstiegene rechteckige Blockdatenstrukturen darzustellen.
  • In einer Ausführungsform sind Speicherbetriebe, Abtasterbetriebe und andere Systemkommunikationen mit längerer Latenz über „Send“-Anweisungen eingelastet, die von der Nachrichtenweitergabesendeeinheit 530 ausgeführt werden. In einer Ausführungsform sind Verzweigungsanweisungen zu einer dedizierten Verzweigungseinheit 532 eingelastet, um SIMD-Divergenz und eventuelle Konvergenz zu erleichtern.
  • In einer Ausführungsform weist die Grafikausführungseinheit 508 eine oder mehrere SIMD-Gleitkommaeinheiten (FPU(s)) 534 auf, um Gleitkommabetriebe durchzuführen. In einer Ausführungsform unterstützt (unterstützen) die FPU(s) 534 auch Ganzzahlberechnung. In einer Ausführungsform kann (können) die FPU(s) 534 bis zu einer Zahl von M 32-Bit Gleitkomma- (oder Ganzzahl-) -betrieben SIMD ausführen oder bis zu 2M 16-Bit Ganzzahl- oder 16-Bit Gleitkommabetrieben SIMD ausführen. In einer Ausführungsform stellt mindestens eine der FPU(s) erweiterte mathematische Kapazität bereit, um transzendentale mathematische Funktionen mit Hochdurchsatz und 54-Bit Gleitkomma mit Doppelpräzision zu unterstützen. In manchen Ausführungsformen ist auch ein Satz von 8-Bit Ganzzahl-SIMD-ALUs 535 vorhanden und kann spezifisch optimiert werden, um Betriebe durchzuführen, die mit Maschinenlernberechnungen verknüpft sind.
  • In einer Ausführungsform können Arrays mehrerer Instanzen der Grafikausführungseinheit 508 in einer Grafikteilkerngruppierung (z.B. ein Teilprozessorelement) instanziiert sein. Zur Skalierbarkeit können Produktarchitekten die exakte Zahl von Ausführungseinheiten pro Teilkerngruppierung auswählen. In einer Ausführungsform kann die Ausführungseinheit 508 Anweisungen über mehrere Ausführungskanäle ausführen. In einer weiteren Ausführungsform ist 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, zum Beispiel, einer Rechenengine-Kachel 340A-340D wie in 3C sein, ist aber nicht dahin begrenzt. Varianten der Ausführungseinheit 600 können auch in einer Grafikengine-Kachel 310A-310D wie in 3B verwendet werden. In einer Ausführungsform weist die Ausführungseinheit 600 eine Thread-Steuerungseinheit 601, eine Thread-Zustandseinheit 602, eine Anweisungsabruf-/-vorababrufeinheit 603 und eine Anweisungsdecodierungseinheit 604 auf. Die Ausführungseinheit 600 weist zusätzlich eine Registerdatei 606 auf, die Register speichert, die Hardwarethreads innerhalb der Ausführungseinheit zugewiesen werden können. Die Ausführungseinheit 600 weist zusätzlich eine Sendeeinheit 607 und eine Verzweigungseinheit 608 auf. In einer Ausführungsform können die Sendeeinheit 607 und Verzweigungseinheit 608 ähnlich der Sendeeinheit 530 und einer Verzweigungseinheit 532 der Grafikausführungseinheit 508 von 5B arbeiten.
  • Die Ausführungseinheit 600 weist auch eine Recheneinheit 610 auf, die mehrere verschiedene Typen von funktionalen Einheiten aufweist. In einer Ausführungsform weist die Recheneinheit 610 eine ALU-Einheit 611 auf, die ein Array arithmetischer Logikeinheiten aufweist. Die ALU-Einheit 611 kann konfiguriert sein, 64-Bit, 32-Bit und 16-Bit Ganzzahl- und Gleitkommabetriebe durchzuführen. Ganzzahl- und Gleitkommabetriebe können gleichzeitig durchgeführt werden. Die Recheneinheit 610 kann auch ein systolisches Array 612 und eine Mathematikeinheit 613 aufweisen. Das systolische Array 612 weist ein W breites und D tiefes Netzwerk von Datenverarbeitungseinheiten auf, die verwendet werden können, um Vektor- oder andere datenparallele Betriebe auf eine systolische Weise durchzuführen. In einer Ausführungsform kann das systolische Array 612 konfiguriert sein, Matrixoperationen durchzuführen, wie Matrixskalarproduktbetriebe. In einer Ausführungsform unterstützt das systolische Array 612 16-Bit Gleitkommabetriebe, wie auch 8-Bit und 4-Bit Ganzzahlbetriebe. In einer Ausführungsform kann das systolische Array 612 konfiguriert sein, Maschinenlernbetriebe zu beschleunigen. In solchen Ausführungsformen kann das systolische Array 612 mit Unterstützung für das bfloat 16-Bit Gleitkommaformat konfiguriert sein. In einer Ausführungsform kann eine Mathematikeinheit 613 aufgewiesen sein, um einen bestimmten Teilsatz mathematischer Betriebe auf eine effiziente und leistungssparsamere Weise als die ALU-Einheit 611 durchzuführen. Die Mathematikeinheit 613 kann eine Variante von Mathematiklogik aufweisen, die in geteilter Funktionslogik einer Grafikverarbeitungsengine gefunden werden kann, die von anderen Ausführungsformen bereitgestellt ist (z.B. Mathematiklogik 422 der geteilten Funktionslogik 420 von 4). In einer Ausführungsform kann die Mathematikeinheit 613 konfiguriert sein, 32-Bit und 64-Bit Gleitkommabetriebe durchzuführen.
  • Die Thread-Steuerungseinheit 601 weist Logik auf, um die Ausführung von Threads innerhalb der Ausführungseinheit zu steuern. Die Thread-Steuerungseinheit 601 kann Threadvermittlungslogik aufweisen, um Ausführung von Threads innerhalb der Ausführungseinheit 600 zu beginnen, zu stoppen und zu umgehen. Die Thread-Zustandseinheit 602 kann verwendet werden, um Thread-Zustand für Threads zu speichern, die zugewiesen sind, auf der Ausführungseinheit 600 ausgeführt zu werden. Den Thread-Zustand innerhalb der Ausführungseinheit 600 zu speichern, ermöglicht die rasche Umgehung von Threads, wenn diese Threads blockiert oder inaktiv werden. Die Anweisungsabruf-/-vorababrufeinheit 603 kann Anweisungen von einem Anweisungscache von Ausführungslogik eines höheren Levels (z.B. Anweisungscache 506 wie in 5A) abrufen. Die Anweisungsabruf-/-vorababrufeinheit 603 kann auch Vorababrufanfragen für Anweisungen, die in den Anweisungscache zu laden sind, basierend auf einer Analyse aktuell ausgeführter Threads ausstellen. Die Anweisungsdecodierungseinheit 604 kann verwendet werden, um Anweisungen zu decodieren, die von den Recheneinheiten auszuführen sind. In einer Ausführungsform kann die Anweisungsdecodierungseinheit 604 als ein sekundärer Decoder verwendet werden, um komplexe Anweisungen in einzelne Mikrobetriebe zu decodieren.
  • Die Ausführungseinheit 600 weist zusätzlich eine Registerdatei 606 auf, die von Hardwarethreads verwendet werden kann, die auf der Ausführungseinheit 600 ausgeführt werden. Register in der Registerdatei 606 können über die Logik geteilt werden, die verwendet wird, um mehrere gleichzeitige Threads innerhalb der Recheneinheit 610 der Ausführungseinheit 600 auszuführen. Die Zahl logischer Threads, die von der Grafikausführungseinheit 600 ausgeführt werden können, ist nicht auf die Zahl von Hardwarethreads begrenzt, und mehrere logische Threads können jedem Hardwarethread zugewiesen werden. Die Größe der Registerdatei 606 kann über Ausführungsformen basierend auf der Zahl von unterstützen Hardwarethreads variieren. In einer Ausführungsform kann Registerumbenennung verwendet werden, um Register dynamisch zu Hardwarethreads zuzuweisen.
  • 7 ist ein Blockdiagramm, das ein Grafikprozessoranweisungsformat 700 gemäß manchen Ausführungsformen veranschaulicht. In einer oder mehreren Ausführungsformen unterstützen die Grafikprozessorausführungseinheiten einen Anweisungssatz, der Anweisungen in mehreren Formaten aufweist. Die durchgängig linierten Boxen veranschaulichen die Komponenten, die im Allgemeinen in einer Ausführungseinheitsanweisung aufgewiesen sind, während die strichlierten Linien Komponenten aufweisen, die optional sind oder die nur in einem Teilsatz der Anweisungen aufgewiesen sind. In manchen Ausführungsformen ist beschriebenes und veranschaulichtes Anweisungsformat 700 Makroanweisungen, indem sie Anweisungen sind, die von der Ausführungseinheit geliefert werden, entgegen Mikrobetrieben, die von Anweisungsdecodierung resultieren, sobald die Anweisung verarbeitet ist.
  • In manchen Ausführungsformen unterstützen die Grafikprozessorausführungseinheiten nativ Anweisungen in einem 128-Bit Anweisungsformat 710. Ein 64-Bit komprimiertes Anweisungsformat 730 ist für manche Anweisungen basierend auf der ausgewählten Anweisung, den Anweisungsoptionen und der Zahl von Operanden verfügbar. Das native 128-Bit Anweisungsformat 710 stellt Zugriff auf alle Anweisungsoptionen bereit, während manche Optionen und Betriebe in dem 64-Bit Format 730 eingeschränkt sind. Die nativen Anweisungen, die in dem 64-Bit Format 730 verfügbar sind, variieren je Ausführungsform. In manchen Ausführungsformen ist die Anweisung zum Teil unter Verwendung eines Satzes von Indexwerten in einem Indexfeld 713 komprimiert. Die Ausführungseinheitshardware bezieht sich auf einen Satz von Komprimierungstabellen, basierend auf den Indexwerten, und verwendet die Komprimierungstabellenausgaben, um eine native Anweisung in dem 128-Bit Anweisungsformat 710 zu rekonstruieren. Andere Größen und Formate von Anweisung können verwendet werden.
  • Für jedes Format definiert Anweisungs-Opcode 712 den Betrieb, den die Ausführungseinheit durchführen wird. Die Ausführungseinheiten führen jede Anweisung parallel über mehrere Datenelemente jedes Operanden aus. Zum Beispiel führt die Ausführungseinheit in Antwort auf eine Zugabeanweisung einen gleichzeitigen Zugabebetrieb über jeden Farbkanal durch, der ein Texturelement oder Bildelement darstellt. Standardmäßig führt die Ausführungseinheit jede Anweisung über alle Datenkanäle der Operanden durch. In manchen Ausführungsformen ermöglicht Anweisungssteuerungsfeld 714 Steuerung über gewisse Ausführungsoptionen, wie Kanalauswahl (z.B. Vorhersage) und Datenkanalreihenfolge (z.B. Durchmischung). Für Anweisungen in dem 128-Bit Anweisungsformat 710 begrenzt ein Exec-Größenfeld 716 die Zahl von Datenkanälen, die parallel ausgeführt werden In manchen Ausführungsformen ist Exec-Größenfeld 716 nicht zur Verwendung in dem 64-Bit kompakten Anweisungsformat 730 verfügbar.
  • Manche Ausführungseinheitsanweisungen weisen bis zu drei Operanden auf, aufweisend zwei Quelloperanden, src0 720, src1 722 und ein Ziel 718. In manchen Ausführungsformen unterstützen die Ausführungseinheiten Doppelzielanweisungen, wo eines der Ziele inbegriffen ist. Datenmanipulationsanweisungen können einen dritten Quelloperanden (z.B. SRC2 724) aufweisen, wo der Anweisungs-Opcode 712 die Zahl von Quelloperanden ermittelt. Ein letzter Quelloperand einer Anweisung kann ein Zwischenwert (z.B. hartcodiert) sein, der mit der Anweisung weitergegeben wird.
  • In manchen Ausführungsformen weist das 128-Bit Anweisungsformat 710 ein Zugriffs-/Adressmodusfeld 726 auf, das zum Beispiel bestimmt, ob direkter Registeradressierungsmodus oder indirekter Registeradressierungsmodus verwendet wird. Wenn direkter Registeradressierungsmodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden direkt durch Bits in der Anweisung bereitgestellt.
  • In manchen Ausführungsformen weist das 128-Bit Anweisungsformat 710 ein Zugriffs-/Adressmodusfeld 726 auf, das einen Adressmodus und/oder einen Zugriffsmodus für die Anweisung bestimmt. In einer Ausführungsform wird der Zugriffsmodus verwendet, um eine Datenzugriffsausrichtung für die Anweisung zu definieren. Manche Ausführungsformen unterstützen Zugriffsmodi, die einen 16-Byte ausgerichteten Zugriffsmodus und einen 1-Byte ausgerichteten Zugriffsmodus aufweisen, wo die Byte-Ausrichtung des Zugriffsmodus die Zugriffsausrichtung der Anweisungsoperanden ermittelt. Zum Beispiel, wenn in einem ersten Modus, kann die Anweisung Byte-ausgerichtete Adressierung für Quell- und Zieloperanden verwenden, und wenn in einem zweiten Modus, kann die Anweisung 16-Byte-ausgerichtete Adressierung für alle Quell- und Zieloperanden verwenden.
  • In einer Ausführungsform ermittelt der Adressmodusabschnitt des Zugriffs-/Adressmodusfelds 726, ob die Anweisung direkte oder indirekte Adressierung verwenden wird. Wenn direkter Registeradressmodus verwendet wird, stellen Bits in der Anweisung direkt die Registeradresse eines oder mehrerer Operanden bereit. Wenn indirekter Registeradressiermodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf dem Adressregisterwert und einem Adresszwischenfeld in der Anweisung berechnet werden.
  • In manchen Ausführungsformen sind Anweisungen basierend auf Opcode 712 Bitfeldern gruppiert, um Opcode-Decodierung 740 zu vereinfachen. Für einen 8-Bit Opcode erlauben Bits 4, 5 und 6 der Ausführungseinheit, den Typ von Opcode zu ermitteln. Die präzise gezeigte Opcode-Gruppierung ist bloß ein Beispiel. In manchen Ausführungsformen weist eine Bewegungs- und Logik-Opcode-Gruppe 742 Datenbewegungs- und Logikanweisungen auf (z.B. move (mov), compare (cmp)). In manchen Ausführungsformen teilt sich Bewegungs- und Logikgruppe 742 die fünf signifikantesten Bits (MSB, Most Significant Bits), wo move (mov) Anweisungen in der Form von 0000xxxxb sind und Logikanweisungen in der Form von 0001xxxxb sind. Eine Ablaufsteuerungsanweisungsgruppe 744 (z.B. call, jump (jmp)) weist Anweisungen in der Form von 0010xxxxb (z.B. 0x20) auf. Eine diverse Anweisungsgruppe 746 weist einen Mix von Anweisungen auf, aufweisend Synchronisationsanweisungen (z.B. wait, send) in der Form von 0011xxxxb (z.B. 0x30). Eine parallele Mathematikanweisungsgruppe 748 weist komponentenweise arithmetische Anweisungen (z.B. add, multiply (mul)) in der Form von 0100xxxb (z.B. 0x40) auf. Die parallele Mathematikgruppe 748 führt die arithmetischen Betriebe parallel über Datenkanäle durch. Die Vektormathematikgruppe 750 weist Arithmetikanweisungen (z.B. dp4) in der Form von 0101xxxxb (z.B. 0x50) auf. Die Vektormathematikgruppe führt Arithmetik, wie Skalarproduktberechnungen, an Vektoroperanden durch. Der veranschaulichte Opcode-Decodierung 740 kann in einer Ausführungsform verwendet werden, um zu ermitteln, welcher Abschnitt einer Ausführungseinheit gesendet wird, um eine decodierte Anweisung auszuführen. Zum Beispiel können manche Anweisungen als systolische Anweisungen gestaltet sein, die von einem systolischen Array durchgeführt werden. Andere Anweisungen, wie Raytracing-Anweisungen (nicht gezeigt) können zu einem Raytracing-Kern oder einer Raytracing-Logik innerhalb eines Prozessorelements oder einer Partition von Ausführungslogik geleitet werden.
  • Grafikpipeline
  • 8 ist ein Blockdiagramm einer anderen Ausführungsform eines Grafikprozessors 800. Elemente von 8, die dieselben Referenznummern (oder Namen) wie die Elemente einer beliebigen anderen Figur hierin aufweisen, können auf eine ähnliche Weise wie hier an anderer Stelle beschrieben arbeiten oder funktionieren, sind aber nicht darauf begrenzt.
  • In manchen Ausführungsformen weist Grafikprozessor 800 eine Geometriepipeline 820, eine Medienpipeline 830, eine Anzeigeengine 840, Thread-Ausführungslogik 850 und eine Renderausgabepipeline 870 auf. In manchen Ausführungsformen ist Grafikprozessor 800 ein Grafikprozessor innerhalb eines Multikernverarbeitungssystems, das einen oder mehrere Allzweckverarbeitungskerne aufweist. Der Grafikprozessor wird von Registerschrieben zu einem oder mehreren Steuerungsregistern (nicht gezeigt) oder über Befehle, die an Grafikprozessor 800 über eine Ringzwischenverbindung 802 ausgestellt werden, gesteuert. In manchen Ausführungsformen koppelt Ringzwischenverbindung 802 Grafikprozessor 800 mit anderen Verarbeitungskomponenten, wie anderen Grafikprozessoren oder Allzweckprozessoren. Befehle von Ringzwischenverbindung 802 sind durch einen Befehlsstreamer 803 interpretiert, der Anweisungen an individuelle Komponenten der Geometriepipeline 820 oder die Medienpipeline 830 liefert.
  • In manchen Ausführungsformen lenkt Befehlsstreamer 803 den Betrieb eines Scheitelpunktabrufers 805, der Scheitelpunktdaten von Speicher liest und führt Scheitelpunktverarbeitungsbefehle aus, die von Befehlsstreamer 803 bereitgestellt sind. In manchen Ausführungsformen stellt Scheitelpunktabrufer 805 Scheitelpunktdaten an einen Scheitelpunktshader 807 bereit, der Koordinatenraumtransformation und Belichtungsbetriebe an jedem Scheitelpunkt durchführt. In manchen Ausführungsformen führen Scheitelpunktabrufer 805 und Scheitelpunktshader 807 Scheitelpunktverarbeitungsanweisungen aus, indem Ausführungsthreads zu Ausführungseinheiten 852A-852B über einen Thread-Dispatcher 831 eingelastet werden.
  • In manchen Ausführungsformen sind Ausführungseinheiten 852A-852B ein Array von Vektorprozessoren, die einen Anweisungssatz zum Durchführen von Grafik- und Medienbetrieben aufweisen. In manchen Ausführungsformen weisen Ausführungseinheiten 852A-852B einen angebrachten L1-Cache 851 auf, der für jede Array spezifisch ist oder zwischen den Arrays geteilt wird. Der Cache kann als ein Datencache, ein Anweisungscache oder ein einzelner Cache konfiguriert sein, der partitioniert ist, Daten und Anweisungen in verschiedenen Partitionen zu enthalten.
  • In manchen Ausführungsformen weist Geometriepipeline 820 Tessellationskomponenten auf, um hardwarebeschleunigte Tessellation von 3D-Objekten durchzuführen. In manchen Ausführungsformen konfiguriert ein programmierbarer Hull-Shader 811 die Tessellationsbetriebe. Ein programmierbarer Domänenshader 817 stellt Backend-Evaluierung von Tessellationsausgabe bereit. Ein Tessellator 813 arbeitet bei der Richtung von Hull-Shader 811 und enthält Sonderzwecklogik, um einen Satz von detaillierten geometrischen Objekten basierend auf einem groben geometrischen Modell bereitzustellen, das als Eingabe zu Geometriepipeline 820 bereitgestellt ist. In manchen Ausführungsformen, falls Tessellation nicht verwendet wird, können Tessellationskomponenten (z.B. Hull-Shader 811, Tessellator 813 und Domänenshader 817) umgangen werden.
  • In manchen Ausführungsformen können vollständige geometrische Objekte von einem Geometrieshader 819 über einen oder mehrere Threads verarbeitet werden, die zu Ausführungseinheiten 852A-852B eingelastet sind, oder können direkt zu dem Begrenzer 829 fortfahren. In manchen Ausführungsformen arbeitet der Geometrieshader auf gesamten geometrischen Objekten und nicht auf Scheitelpunkten oder vereinzelten Scheitelpunkten, wie in vorherigen Stufen der Grafikpipeline. Falls die Tessellation deaktiviert ist, empfängt der Geometrieshader 819 Eingabe von dem Scheitelpunktshader 807. In manchen Ausführungsformen ist Geometrieshader 819 durch ein Geometrieshader-Programm programmierbar, um Geometrietessellation durchzuführen, falls die Tessellationseinheiten deaktiviert sind.
  • Vor Rasterisierung verarbeitet ein Begrenzer 829 Scheitelpunktdaten. Der Begrenzer 829 kann ein fixierter Funktionsbegrenzer oder ein programmierbarer Begrenzer sein, der Begrenzungs- und Geometrieshader-Funktionen aufweist. In manchen Ausführungsformen lastet eine Rasterisierer- und Tiefentestkomponente 873 in der Renderausgabepipeline 870 Pixelshader ein, um die geometrischen Objekte in Pro-Pixel-Darstellungen umzuwandeln. In manchen Ausführungsformen ist Pixelshader-Logik in Thread-Ausführungslogik 850 aufgewiesen. In manchen Ausführungsformen kann eine Anwendung die Rasterisierer- und Tiefentestkomponente 873 umgehen und auf ungerasterte Scheitelpunktdaten über eine Stream-Ausgangseinheit 823 zugreifen.
  • Der Grafikprozessor 800 weist einen Zwischenverbindungsbus, ein Zwischenverbindungsfabric oder einen anderen Zwischenverbindungsmechanismus auf, der Daten- und Nachrichtendurchleitung unter den Hauptkomponenten des Prozessors erlaubt. In manchen Ausführungsformen sind Ausführungseinheiten 852A-852B und verknüpfte Logikeinheiten (z.B. L1-Cache 851, Abtaster 854, Texturcache 858 usw.) über einen Datenanschluss 856 zwischenverbunden, um Speicherzugriff durchzuführen und mit Renderausgabepipeline-Komponenten des Prozessors zu kommunizieren. In manchen Ausführungsformen weisen Abtaster 854, Caches 851, 858 und Ausführungseinheiten 852A-852B jeweils separate Speicherzugriffspfade auf. In einer Ausführungsform kann der Texturcache 858 auch als ein Abtastercache konfiguriert sein.
  • In manchen Ausführungsformen enthält Renderausgabepipeline 870 eine Rasterisierer- und Tiefentestkomponente 873, die scheitelpunktbasierte Objekte in eine verknüpfte pixelbasierte Darstellung umwandelt. In manchen Ausführungsformen weist die Rasterisiererlogik eine Fensterungs-/Maskierungseinheit auf, um fixierte Funktionsdreieck- und Linienrasterisierung durchzuführen. Ein verknüpfter Rendercache 878 und Tiefencache 879 sind in manchen Ausführungsformen auch verfügbar. Eine Pixelbetriebskomponente 877 führt pixelbasierte Betriebe an den Daten aus, obwohl in manchen Instanzen Pixelbetriebe, die mit 2D-Betrieben (z.B. Bildblockierungsbildtransfers mit Vermischung) verknüpft sind, von der 2D-Engine 841 durchgeführt werden oder zum Anzeigezeitpunkt von der Anzeigesteuerung 843 unter Verwendung von Überlagerungsanzeigeebenen ersetzt werden. In manchen Ausführungsformen ist ein geteilter L3-Cache 875 für alle Grafikkomponenten verfügbar, was das Teilen von Daten ohne die Verwendung von Hauptsystemspeicher erlaubt.
  • In manchen Ausführungsformen weist Grafikprozessormedienpipeline 830 eine Medienengine 837 und ein Video-Frontend 834 auf. In manchen Ausführungsformen empfängt Video-Frontend 834 Pipelinebefehle von dem Befehlsstreamer 803. In manchen Ausführungsformen weist Medienpipeline 830 einen separaten Befehlsstreamer auf. In manchen Ausführungsformen verarbeitet Video-Frontend 834 Medienbefehle vor Senden des Befehls an die Medienengine 837. In manchen Ausführungsformen weist Medienengine 837 Thread-Startfunktionalität, um Threads zu starten, um sie zu Thread-Ausführungslogik 850 über Thread-Dispatcher 831 einzulasten.
  • In manchen Ausführungsformen weist Grafikprozessor 800 eine Anzeigeengine 840 auf. In manchen Ausführungsformen ist Anzeigeengine 840 außerhalb von Prozessor 800 und koppelt sich mit dem Grafikprozessor über die Ringzwischenverbindung 802 oder einen anderen Zwischenverbindungsbus oder ein Fabric. In manchen Ausführungsformen weist Anzeigeengine 840 eine 2D-Engine 841 und eine Anzeigesteuerung 843 auf. In manchen Ausführungsformen enthält Anzeigeengine 840 Sonderzwecklogik, die im Stande ist, unabhängig von der 3D-Pipeline zu arbeiten. In manchen Ausführungsformen koppelt sich Anzeigesteuerung 843 mit einer Anzeigevorrichtung (nicht gezeigt), die eine systemintegrierte Anzeigevorrichtung sein kann, wie in einem Laptopcomputer oder einer externen Anzeigevorrichtung, die über einen Anzeigevorrichtungsstecker angebracht ist.
  • In manchen Ausführungsformen sind die Geometriepipeline 820 und Medienpipeline 830 konfigurierbar, Betriebe basierend auf mehreren Grafik- und Medienprogrammierschnittstellen durchzuführen und sind für keine Anwendungsprogrammierschnittstelle (API) spezifisch. In manchen Ausführungsformen übersetzt Treibersoftware für den Grafikprozessor API-Anrufe, die spezifisch für eine bestimmte Grafik- oder Medienbibliothek sind, in Befehle, die von dem Grafikprozessor verarbeitet werden können. In manchen Ausführungsformen ist Unterstützung für die Open Graphics Library (OpenGL), Open Computing Language (OpenCL) und/oder Vulkan Grafik- und Rechen-API, alle von der Khronos Group, bereitgestellt. In manchen Ausführungsformen kann auch Unterstützung für die Direct3D Bibliothek von der Microsoft Corporation bereitgestellt sein. In manchen Ausführungsformen kann eine Kombination dieser Bibliotheken unterstützt werden. Unterstützung kann auch für die Open Source Computer Vision Bibliothek (OpenCV) bereitgestellt sein. Eine zukünftige API mit einer kompatiblen 3D-Pipeline würde auch unterstützt werden, falls eine Abbildung von der Pipeline der zukünftigen API zu der Pipeline des Grafikprozessors gemacht werden kann.
  • Graphikpipelineprogrammierung
  • 9A ist ein Blockdiagramm, das ein Grafikprozessorbefehlsformat 900 gemäß manchen Ausführungsformen veranschaulicht. 9B ist ein Blockdiagramm, das eine Grafikprozessorbefehlssequenz 910 gemäß einer Ausführungsform veranschaulicht. Die durchgängig linierten Boxen in 9A veranschaulichen die Komponenten, die im Allgemeinen in einem Grafikbefehl aufgewiesen sind, während die strichlierten Linien Komponenten aufweisen, die optional sind oder die nur in einem Teilsatz der Grafikbefehle aufgewiesen sind. Das beispielhafte Grafikprozessorbefehlsformat 900 von 9A weist Datenfelder auf, um einen Client 902, einen Befehlsbetriebscode (Opcode) 904 und Daten 906 für den Befehl zu identifizieren. Ein Teil-Opcode 905 und eine Befehlsgröße 908 sind auch in manchen Befehlen aufgewiesen
  • In manchen Ausführungsformen bestimmt Client 902 die Client-Einheit der Grafikvorrichtung, die die Befehlsdaten verarbeitet. In manchen Ausführungsformen untersucht ein Grafikprozessorbefehlszerteiler das Client-Feld jedes Befehls, um die weitere Verarbeitung des Befehls zu bedingen und die Befehlsdaten an die geeignete Client-Einheit zu leiten. In manchen Ausführungsformen weisen die Grafikprozessor-Client-Einheiten eine Speicherschnittstelleneinheit, eine Render-Einheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit auf. Jede Client-Einheit weist eine entsprechende Verarbeitungspipeline auf, die die Befehle verarbeitet. Sobald der Befehl von der Client-Einheit empfangen ist, liest die Client-Einheit den Opcode 904 und, falls vorhanden, Teil-Opcode 905, um den durchzuführenden Betrieb zu ermitteln. Die Client-Einheit führt den Befehl unter Verwendung von Informationen in Datenfeld 906 durch. Für manche Befehle wird erwartet, dass eine ausdrückliche Befehlsgröße 908 die Größe des Befehls bestimmt. In manchen Ausführungsformen ermittelt der Befehlszerteiler automatisch die Größe von mindestens manchen der Befehle, basierend auf dem Befehls-Opcode. In manchen Ausführungsformen sind Befehle über Vielfache eines Doppelworts ausgerichtet. Andere Befehlsformate können verwendet werden.
  • Das Ablaufdiagramm in 9B veranschaulicht eine beispielhafte Grafikprozessorbefehlssequenz 910. In manchen Ausführungsformen verwendet Software oder Firmware eines Datenverarbeitungssystems, das eine Ausführungsform eines Grafikprozessors bietet, eine Version der gezeigten Befehlssequenz, um einen Satz von Grafikbetrieben einzurichten, auszuführen und zu beenden. Eine Probenbefehlssequenz ist zu Zwecken eines Beispiels gezeigt und beschrieben, aber Ausführungsformen sind nicht auf diese bestimmten Befehle oder auf diese Befehlssequenz begrenzt. Außerdem können die Befehle als Bündel von Befehlen in einer Befehlssequenz derart ausgestellt werden, dass der Grafikprozessor die Sequenz von Befehlen in mindestens teilweiser Gleichzeitigkeit verarbeiten wird.
  • In manchen Ausführungsformen kann die Grafikprozessorbefehlssequenz 910 mit einem Pipeline-Leerungsbefehl 912 beginnen, um eine beliebige aktive Grafikpipeline zu veranlassen, die aktuell ausständigen Befehle für die Pipeline abzuschließen. In manchen Ausführungsformen arbeiten die 3D-Pipeline 922 und die Medienpipeline 924 nicht zugleich. Die Pipelineleerung wird durchgeführt, um die aktive Grafikpipeline zu aktivieren, um beliebige ausstehende Befehle abzuschließen. In Antwort auf eine Pipeline-Leerung wird der Befehlszerteiler für den Grafikprozessor Befehlsverarbeitung pausieren, bis die aktiven Zeichen-Engines ausstehende Betriebe abschließen und die relevanten Lesecaches für ungültig erklärt sind. Optional können alle Daten in dem Rendercache, die als „schmutzig“ markiert sind, zu Speicher geleert werden. In manchen Ausführungsformen kann Pipeline-Leerungsbefehl 912 für PipelineSynchronisation oder vor Platzieren des Grafikprozessors in einen Niederleistungszustand verwendet werden.
  • In manchen Ausführungsformen wird ein Pipeline-Auswahlbefehl 913 verwendet, wenn eine Befehlssequenz erfordert, dass der Grafikprozessor ausdrücklich zwischen Pipelines wechselt. In manchen Ausführungsformen wird ein Pipeline-Auswahlbefehl 913 nur einmal innerhalb eines Ausführungskontextes benötigt, bevor Pipelinebefehle ausgestellt werden, außer der Kontext ist, Befehle für beide Pipelines auszustellen. In manchen Ausführungsformen wird ein Pipeline-Leerungsbefehl 912 unmittelbar vor einem Pipelinewechsel über den Pipelineauswahlbefehl 913 benötigt.
  • In manchen Ausführungsformen konfiguriert ein Pipelinesteuerungsbefehl 914 eine Grafikpipeline für Betrieb und wird verwendet, um die 3D-Pipeline 922 und die Medienpipeline 924 zu programmieren. In manchen Ausführungsformen konfiguriert Pipelinesteuerungsbefehl 914 den Pipelinezustand für die aktive Pipeline. In einer Ausführungsform wird der Pipelinesteuerungsbefehl 914 für Pipelinesynchronisation und zum Löschen von Daten aus einem oder mehreren Cachespeichern innerhalb der aktiven Pipeline verwendet, bevor ein Befehlsbündel verarbeitet wird.
  • In manchen Ausführungsformen werden Rückführungspufferzustandsbefehle 916 verwendet, um einen Satz von Rückführungspuffern für die jeweiligen Pipelines zu konfigurieren, um Daten zu schreiben. Manche Pipelinebetriebe benötigen die Zuweisung, Auswahl oder Konfiguration eines oder mehrerer Rückführungspuffer, in die die Betriebe Zwischendaten während Verarbeitung schreiben. In manchen Ausführungsformen verwendet der Grafikprozessor auch einen oder mehrere Rückführungspuffer, um Ausgabedaten zu speichern und Quer-Threadkommunikation durchzuführen. In manchen Ausführungsformen weist der Rückführungspufferzustand 916 auf, die Größe und Zahl von Rückführungspuffern auszuwählen, die für einen Satz von Pipelinebetrieben zu verwenden sind.
  • Die restlichen Befehle in der Befehlssequenz weichen basierend auf der aktiven Pipeline für Betriebe ab. Basierend auf einer Pipelineermittlung 920 ist die Befehlssequenz für die 3D-Pipeline 922, beginnend mit dem 3D-Pipelinezustand 930, oder die Medienpipeline 924, beginnend bei dem Medienpipelinezustand 940, maßgeschneidert.
  • Die Befehle, um den 3D-Pipelinezustand 930 zu konfigurieren, weisen 3D-Zustandsbefehle für Scheitelpunktpufferzustand, Scheitelpunktelementzustand, konstanten Farbzustand, Tiefenpufferzustand und andere Zustandsvariablen auf, die zu konfigurieren sind, bevor 3D-Primitivbefehle verarbeitet werden. Die Werte dieser Befehle sind mindestens zum Teil basierend auf der bestimmten 3D API in Verwendung ermittelt. In manchen Ausführungsformen sind 3D-Pipelinezustands-930 Befehle auch im Stande, selektiv gewisse Pipelineelemente zu deaktivieren oder zu umgehen, falls diese Elemente nicht verwendet werden.
  • In manchen Ausführungsformen wird 3D-Primitiv- 932 Befehl verwendet, um von der 3D-Pipeline zu verarbeitende 3D-Primitive vorzulegen. Befehle und verknüpfte Parameter, die zu dem Grafikprozessor über den 3D-Primitiv- 932 Befehl weitergegeben werden, werden zu der Scheitelpunktfunktion in der Grafikpipeline weitergeleitet. Die Scheitelpunktabruffunktion verwendet die 3D-Primitiv- 932 Befehlsdaten, um Scheitelpunktdatenstrukturen zu erzeugen. Die Scheitelpunktdatenstrukturen sind in einem oder mehreren Rückführungspuffern gespeichert. In manchen Ausführungsformen wird 3D-Primitiv- 932 Befehl verwendet, um Scheitelpunktbetriebe auf 3D-Primitiven über Scheitelpunkt-Shader durchzuführen. Um Scheitelpunkt-Shader zu verarbeiten, lastet 3D-Pipeline 922 Shader-Ausführungs-Threads zu Grafikprozessorausführungseinheiten ein.
  • In manchen Ausführungsformen ist 3D-Pipeline 922 über einen Ausführungs- 934 Befehl oder ein Ereignis ausgelöst. In manchen Ausführungsformen löst ein Registerschrieb Befehlsausführung aus. In manchen Ausführungsformen ist Ausführung über einen „go“ oder „kick“ Befehl in der Befehlssequenz ausgelöst. In einer Ausführungsform ist Befehlsausführung unter Verwendung eines Pipelinesynchronisationsbefehls ausgelöst, um die Befehlssequenz durch die Grafikpipeline zu leeren. Die 3D-Pipeline wird Geometrieverarbeitung für die 3D-Primitive durchführen. Sobald Betriebe abgeschlossen sind, werden die resultierenden geometrischen Objekte rasterisiert und die Pixel-Engie färbt die resultierenden Pixel. Zusätzliche Befehle, um Pixel-Shading und Pixel-Backend-Betriebe zu steuern, können auch für diese Betriebe aufgewiesen sein.
  • In manchen Ausführungsformen folgt die Grafikprozessorbefehlssequenz 910 dem Medienpipeline- 924 -pfad, wenn Medienbetriebe durchgeführt werden. Im Allgemeinen hängt die bestimmte Verwendung und Weise von Programmierung für die Medienpipeline 924 von den durchzuführenden Medien- oder Rechenbetrieben ab. Bestimmte Mediendecodierungsbetriebe können während Mediendecodierung zu der Medienpipeline abgeladen werden. In manchen Ausführungsformen kann die Medienpipeline auch umgangen werden und Mediendecodierung kann zur Gänze oder zum Teil unter Verwendung von Ressourcen durchgeführt werden, die von einem oder mehreren Allzweckverarbeitungskernen bereitgestellt sind. In einer Ausführungsform weist die Medienpipeline auch Elemente für Allzweckgrafikprozessoreinheit- (GPGPU) Betriebe auf, wo der Grafikprozessor verwendet wird, um SIMD-Vektorbetriebe unter Verwendung von Rechen-Shader-Programmen durchzuführen, die nicht ausdrücklich auf das Rendering von Grafikprimitiven bezogen sind.
  • In manchen Ausführungsformen ist Medienpipeline 924 auf eine ähnliche Weise wie die 3D-Pipeline 922 konfiguriert. Ein Satz von Befehlen, um den Medienpipelinezustand 940 zu konfigurieren, wird vor den Medienobjektbefehlen 942 in eine Befehlswarteschlange eingelastet oder platziert. In manchen Ausführungsformen weisen Befehle für den Medienpipelinezustand 940 Daten auf, um die Medienpipelineelemente zu konfigurieren, die verwendet werden, um die Medienobjekte zu verarbeiten. Dies weist Daten auf, um die Videodecodierungs-und Videocodierungslogik innerhalb der Medienpipeline zu konfigurieren, wie Codierungs- und Decodierungsformat. In manchen Ausführungsformen unterstützen Befehle für den Medienpipelinezustand 940 auch die Verwendung eines oder mehrerer Zeiger zu „indirekten“ Zustandselementen, die ein Bündel von Zustandseinstellungen enthalten.
  • In manchen Ausführungsformen liefern Medienobjektbefehle 942 Zeiger zu Medienobjekten zur Verarbeitung durch die Medienpipeline. Die Medienobjekte weisen Speicherpuffer auf, die zu verarbeitende Videodaten enthalten. In manchen Ausführungsformen müssen alle Medienpipelinezustände gültig sein, bevor ein Medienobjektbefehl 942 ausgestellt wird. Sobald der Pipelinezustand konfiguriert ist und Medienobjektbefehle 942 eingereiht sind, wird die Medienpipeline 924 über einen Ausführungsbefehl 944 oder ein gleichwertiges Ausführungsereignis (z.B. Registerschrieb) ausgelöst. Ausgabe von der Medienpipeline 924 kann dann von Betrieben nachbearbeitet werden, die von der 3D-Pipeline 922 oder der Medienpipeline 924 bereitgestellt sind. In manchen Ausführungsformen sind GPGPU-Betriebe auf eine ähnliche Weise wie Medienbetriebe konfiguriert und ausgeführt.
  • Grafiksoftwarearchitektur
  • 10 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem 1000 gemäß manchen Ausführungsformen. In manchen Ausführungsformen weist Softwarearchitektur eine 3D-Grafikanwendung 1010, ein Betriebssystem 1020 und mindestens einen Prozessor 1030 auf. In manchen Ausführungsformen weist Prozessor 1030 einen Grafikprozessor 1032 und einen oder mehrere Allzweckprozessorkern(e) 1034 auf. Die Grafikanwendung 1010 und das Betriebssystem 1020 sind jeweils in dem Systemspeicher 1050 des Datenverarbeitungssystems ausgeführt.
  • In manchen Ausführungsformen enthält 3D-Grafikanwendung 1010 ein oder mehrere Shader-Programme, die Shader-Anweisungen 1012 aufweisen. Die Shader-Sprachanweisungen können in einer Shader-Hochsprache sein, wie der High-Level Shader Language (HLSL) von Direct3D, der OpenGL Shader Language (GLSL) und so weiter. Die Anwendung weist auch ausführbare Anweisungen 1014 in einer Maschinensprache auf, die zur Ausführung durch den Allzweckprozessorkern 1034 geeignet ist. Die Anwendung weist auch Grafikobjekte 1016 auf, die von Scheitelpunktdaten definiert sind.
  • In manchen Ausführungsformen ist Betriebssystem 1020 ein Microsoft(1 Windows® Betriebssystem von der Microsoft Corporation, ein proprietäres UNIX-ähnliches Betriebssystem oder ein quelloffenes UNIX-ähnliches Betriebssystem, das eine Variante des Linux-Kernel verwendet. Das Betriebssystem 1020 kann eine Grafik-API 1022 unterstützen, wie die Direct3D API, die OpenGL API oder die Vulkan API. Wenn die Direct3D API verwendet wird, verwendet das Betriebssystem 1020 einen Frontend-Shader-Kompilierer 1024, um beliebige Shader-Anweisungen 1012 in HLSL in eine Shader-Niedersprache zu kompilieren. Die Kompilierung kann eine Just-in-Time (JIT) Kompilation verwenden oder die Anwendung kann Shader-Vorabkompilation durchführen. In manchen Ausführungsformen sind Hoch-Shader während der Kompilation der 3D-Grafikanwendung 1010 in Nieder-Shader kompiliert. In manchen Ausführungsformen sind die Shader-Anweisungen 1012 in einer Zwischenform bereitgestellt, wie einer Version der Standard Portable Intermediate Representation (SPIR), die von der Vulkan API verwendet wird.
  • In manchen Ausführungsformen enthält Anwendermodusgrafiktreiber 1026 einen Backend-Shader-Kompilierer 1027, um die Shader-Anweisungen 1012 in eine hardwarespezifische Darstellung umzuwandeln. Wenn die OpenGL API in Verwendung ist, werden Shader-Anweisungen 1012 in der GLSL-Hochsprache zu einem Anwendermodusgrafiktreiber 1026 zur Kompilation weitergegeben. In manchen Ausführungsformen verwendet Anwendermodusgrafiktreiber 1026 Betriebssystem-Kernelmodusfunktionen 1028, um mit einem Kernelmodusgrafiktreiber 1029 zu kommunizieren. In manchen Ausführungsformen kommuniziert Kernelmodusgrafiktreiber 1029 mit dem Grafikprozessor 1032, um Befehle und Anweisungen einzulasten.
  • IP- Kern-Implementierungen
  • Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch stellvertretenden Code implementiert sein, der auf einem maschinenlesbaren Medium gespeichert ist, das Logik innerhalb einer integrierten Schaltung, wie einen Prozessor, darstellt und/oder definiert. Zum Beispiel kann das maschinenlesbare Medium Anweisungen aufweisen, die unterschiedliche Logik innerhalb des Prozessors darstellen. Wenn von einer Maschine gelesen, können die Anweisungen die Maschine veranlassen, die Logik zu fertigen, um die hierin beschriebenen Techniken durchzuführen. Solche Darstellungen, als „IP-Kerne“ bekannt, sind wiederverwendbare Einheiten von Logik für eine integrierte Schaltung, die auf einem greifbaren, maschinenlesbaren Medium gespeichert sein können, wie ein Hardwaremodell, das die Struktur der integrierten Schaltung beschreibt. Das Hardwaremodell kann an unterschiedliche Kunden oder Herstellungseinrichtungen geliefert werden, die das Hardwaremodell auf Fertigungsmaschinen laden, die die integrierte Schaltung herstellen. Die integrierte Schaltung kann derart gefertigt sein, dass die Schaltung in Verbindung mit einer beliebigen der hierin beschriebenen Ausführungsformen beschriebene Betriebe durchführt.
  • 11A ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem 1100 veranschaulicht, das verwendet werden kann, um eine integrierte Schaltung herzustellen, um Betriebe gemäß einer Ausführungsform durchzuführen. Das IP-Kern-Entwicklungssystem 1100 kann verwendet werden, um modulare, wiederverwendbare Designs zu erzeugen, die in ein größeres Design eingegliedert werden können oder verwendet werden können, um eine gesamte integrierte Schaltung (z.B. eine SOC-integrierte Schaltung) zu errichten. Eine Designstätte 1130 kann eine Softwaresimulation 1110 eines IP-Kerndesigns in einer Programmierhochsprache (z.B. C/C++) erzeugen. Die Softwaresimulation 1110 kann verwendet werden, um das Verhalten des IP-Kerns unter Verwendung eines Simulationsmodells 1112 zu designen, zu testen und zu verifizieren. Das Simulationsmodell 1112 kann funktionelle, verhaltensbezogene und/oder Taktungssimulationen aufweisen. Ein Registertransferlevel- (RTL) Design 1115 kann dann aus dem Simulationsmodell 1112 erstellt oder synthetisiert werden. Das RTL-Design 1115 ist eine Abstraktion des Verfahrens der integrierten Schaltung, die den Ablauf digitaler Signale zwischen Hardwareregistern modelliert, aufweisend die verknüpfte Logik, die unter Verwendung der modellierten Digitalsignale durchgeführt wird. Zusätzlich zu einem RTL-Design 1115 können auch Niederleveldesigns bei dem Logiklevel oder Transistorlevel erzeugt, designt oder synthetisiert werden. Daher können die bestimmten Details des Anfangsdesigns und der Simulation variieren.
  • Das RTL-Design 1115 oder ein Äquivalent kann weiter von der Designeinrichtung in ein Hardwaremodell 1120 synthetisiert werden, das in einer Hardwarebeschreibungssprache (HDL, Hardware Description Language) oder einer anderen Darstellung von physischen Designdaten sein kann. Die HDL kann weiter simuliert oder getestet werden, um das IP-Kern-Design zu verifizieren. Das IP-Kern-Design kann zur Zustellung an eine Drittfertigungsstätte 1165 unter Verwendung von nichtflüchtigem Speicher 1140 (z.B. Festplatte, Flashspeicher oder ein beliebiges nichtflüchtiges Datenspeichermedium) gespeichert sein. Alternativ kann das IP-Kern-Design mittels einer kabelgebundenen Verbindung 1150 oder drahtlosen Verbindung 1160 übertragen werden (z.B. über das Internet). Die Fertigungsstätte 1165 kann dann eine integrierte Schaltung fertigen, die mindestens zum Teil auf dem IP-Kern-Design basiert. Die gefertigte integrierte Schaltung kann konfiguriert sein, Betriebe in Übereinstimmung mit mindestens einer hierin beschriebenen Ausführungsform durchzuführen.
  • 11B veranschaulicht eine Querschnittseitenansicht einer integrierten Schaltungs-Package-Anordnung 1170 gemäß manchen hierin beschriebenen Ausführungsformen. Die integrierte Schaltungs-Package-Anordnung 1170 veranschaulicht eine Implementierung einer oder mehrerer Prozessor- oder Beschleunigervorrichtungen, wie hierin beschrieben. Die Package-Anordnung 1170 weist mehrere Einheiten von Hardware-Logik 1172, 1174 auf, die mit einem Substrat 1180 verbunden sind. Die Logik 1172, 1174 kann mindestens teilweise in konfigurierbarer Logik oder fixierter Funktionalitätslogikhardware implementiert sein und kann einen oder mehrere Abschnitte beliebiger des/der Prozessorkern(e), Grafikprozessor(en) oder anderer hierin beschriebener Beschleunigervorrichtungen aufweisen. Jede Einheit von Logik 1172, 1174 kann innerhalb eines Halbleiter-Dies implementiert sein oder mit dem Substrat 1180 über eine Zwischenverbindungsstruktur 1173 gekoppelt sein. Die Zwischenverbindungsstruktur 1173 kann konfiguriert sein, elektrische Signale zwischen der Logik 1172, 1174 und dem Substrat 1180 zu leiten und kann Zwischenverbindungen aufweisen, wie, aber nicht begrenzt auf, Bumps oder Säulen. In manchen Ausführungsformen kann die Zwischenverbindungsstruktur 1173 konfiguriert sein, elektrische Signale zu leiten, wie zum Beispiel Eingabe/Ausgabe- (I/O, Input/Output) Signale und/oder Leistungs- oder Massesignale, die mit dem Betrieb der Logik 1172, 1174 verknüpft sind. In manchen Ausführungsformen ist das Substrat 1180 ein Epoxy-basiertes Laminatsubstrat. Das Substrat 1180 kann andere geeignete Typen von Substraten in anderen Ausführungsformen aufweisen. Die Package-Anordnung 1170 kann mit anderen elektrischen Vorrichtungen über eine Package-Zwischenverbindung 1183 verbunden sein. Die Package-Zwischenverbindung 1183 kann mit einer Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale mit anderen elektrischen Vorrichtungen zu leiten, wie einer Hauptplatine, einem anderen Chipsatz oder Multichipmodul.
  • In manchen Ausführungsformen sind die Einheiten von Logik 1172, 1174 elektrisch mit einer Brücke 1182 gekoppelt, die konfiguriert ist, elektrische Signale zwischen der Logik 1172, 1174 zu leiten. Die Brücke 1182 kann eine dichte Zwischenverbindungsstruktur sein, die eine Leitung für elektrische Signale bereitstellt. Die Brücke 1182 kann ein Brückensubstrat aufweisen, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Elektrische Leitungsmerkmale können auf dem Brückensubstrat gebildet sein, um eine Chip-zu-Chip-Verbindung zwischen der Logik 1172, 1174 bereitzustellen.
  • Obwohl zwei Einheiten von Logik 1172, 1174 und einer Brücke 1182 veranschaulicht sind, können hierin beschriebene Ausführungsformen mehr oder weniger Logikeinheiten auf einem oder mehreren Dies aufweisen. Der eine oder die mehreren Dies können durch null oder mehr Brücken verbunden sein, da die Brücke 1182 ausgeschlossen sein kann, wenn die Logik auf einem einzelnen Die aufgewiesen ist. Alternativ können mehrere Dies oder Einheiten von Logik durch eine oder mehrere Brücken verbunden sein. Zusätzlich können mehrere Logikeinheiten, Dies und Brücken miteinander in anderen möglichen Konfigurationen verbunden sein, aufweisend dreidimensionale Konfigurationen.
  • 11C veranschaulicht eine Package-Anordnung 1190, die mehrere Einheiten von Hardwarelogikchiplets aufweist, die mit einem Substrat 1180 (z.B. Basis-Die) verbunden sind. Eine Grafikverarbeitungseinheit, ein paralleler Prozessor und/oder Rechenbeschleuniger wie hierin beschrieben, können aus vielfältigen Siliziumchiplets zusammengesetzt sein, die separat hergestellt wurden. In diesem Kontext ist ein Chiplet eine mindestens teilweise gepackte integrierte Schaltung, die individuelle Einheiten von Logik aufweist, die mit anderen Chiplets in ein größeres Package zusammengefügt werden können. Ein vielfältiger Satz von Chiplets mit verschiedener IP-Kern-Logik kann in eine einzelne Vorrichtung zusammengesetzt werden. Zusätzlich können die Chiplets in ein Basis-Die oder Basischiplet unter Verwendung aktiver Interposer-Technologie integriert sein. Die hierin beschriebenen Konzepte ermöglichen die Zwischenverbindung und Kommunikation zwischen den verschiedenen Formen von IP innerhalb der GPU. IP-Kerne können unter Verwendung verschiedener Prozesstechnologien hergestellt und während Herstellung zusammengefügt werden, was die Komplexität vermeidet, mehrere IPs, insbesondere auf einem großen SoC mit einigen Arten von IPs, zu demselben Herstellungsprozess zusammenlaufen zu lassen. Die Verwendung mehrerer Prozesstechnologien zu ermöglichen, verbessert die Zeit bis zur Vermarktung und stellt eine kosteneffektive Weise bereit, mehrere Produkt-SKUs zu erstellen. Zusätzlich sind die verteilten IPs zugänglicher dafür, unabhängig leistungsgeschaltet zu werden, wobei Komponenten, die auf einer gegebenen Nutzlast nicht in Verwendung sind, ausgeschaltet werden können, was einen Gesamtleistungsverbrauch verringert.
  • Die Hardwarelogikchiplets können Sonderzweckhardwarelogikchiplets 1172, Logik- oder I/O-Chiplets 1174 und/oder Speicherchiplets 1175 aufweisen. Die Hardwarelogikchiplets 1172 und Logik- oder I/O-Chiplets 1174 können mindestens teilweise in konfigurierbarer Logik oder fixierter Funktionalitätslogikhardware implementiert sein und können einen oder mehrere Abschnitte beliebiger des/der Prozessorkern(e), Grafikprozessor(en), parallelen Prozessoren oder anderen hierin beschriebenen Beschleunigervorrichtungen aufweisen. Die Speicherchiplets 1175 können DRAM- (z.B. GDDR, HBM) Speicher oder Cache- (SRAM) Speicher sein.
  • Jedes Chiplet kann als separates Halbleiter-Die gefertigt sein und mit dem Substrat 1180 über eine Zwischenverbindungsstruktur 1173 gekoppelt sein. Die Zwischenverbindungsstruktur 1173 kann konfiguriert sein, elektrische Signale zwischen den unterschiedlichen Chiplets und Logik innerhalb des Substrats 1180 zu leiten. Die Zwischenverbindungsstruktur 1173 kann Zwischenverbindungen aufweisen, wie, aber nicht begrenzt auf, Bumps oder Säulen. In manchen Ausführungsformen kann die Zwischenverbindungsstruktur 1173 konfiguriert sein, elektrische Signale, wie zum Beispiel Eingang/Ausgang- (I/O) Signale und/oder Leistungs- oder Massesignale, die mit dem Betrieb der Logik-, I/O- und Speicherchiplets verknüpft sind, zu leiten.
  • In manchen Ausführungsformen ist das Substrat 1180 ein Epoxy-basiertes Laminatsubstrat. Das Substrat 1180 kann in anderen Ausführungsformen andere geeignete Typen von Substraten aufweisen. Die Package-Anordnung 1190 kann mit anderen elektrischen Vorrichtungen über eine Package-Zwischenverbindung 1183 verbunden sein. Die Package-Zwischenverbindung 1183 kann an eine Fläche des Substrats 1180 gekoppelt sein, um elektrische Signale zu anderen elektrischen Vorrichtungen zu leiten, wie einer Hauptplatine, einem anderen Chipsatz oder einem Multichipmodul.
  • In manchen Ausführungsformen kann ein Logik- oder I/O-Chiplet 1174 und ein Speicherchiplet 1175 elektrisch über eine Brücke 1187 gekoppelt sein, die konfiguriert ist, elektrische Signale zwischen dem Logik- oder I/O-Chiplet 1174 und einem Speicherchiplet 1175 zu leiten. Die Brücke 1187 kann eine dichte Zwischenverbindungsstruktur sein, die eine Leitung für elektrische Signale bereitstellt. Die Brücke 1187 kann ein Brückensubstrat aufweisen, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Elektrische Leitungsmerkmale können auf dem Brückensubstrat gebildet sein, um eine Chip-zu-Chip-Verbindung zwischen dem Logik- oder I/O-Chiplet 1174 und einem Speicherchiplet 1175 bereitzustellen. Die Brücke 1187 kann auch als eine Siliziumbrücke oder eine Zwischenverbindungsbrücke bezeichnet werden. Zum Beispiel ist die Brücke 1187 in manchen Ausführungsformen eine eingebettete Multi-Die-Zwischenverbindungsbrücke (EMIB, Embedded Multi-die Interconnect Bridge). In manchen 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 I/O 1191, Cachespeicher 1192 und andere Hardwarelogik 1193 aufweisen. Ein Fabric 1185 kann in das Substrat 1180 eingebettet sein, um Kommunikation zwischen den unterschiedlichen Logikchiplets und der Logik 1191, 1193 innerhalb des Substrats 1180 zu ermöglichen. In einer Ausführungsform können der I/O 1191, das Fabric 1185, der Cache, die Brücke und andere Hardwarelogik 1193 in ein Basis-Die integriert sein, das auf das Substrat 1180 geschichtet ist.
  • In unterschiedlichen Ausführungsformen kann eine Package-Anordnung 1190 weniger oder mehr Komponenten und Chiplets aufweisen, die durch ein Fabric 1185 oder eine oder mehrere Brücken 1187 zwischenverbunden sind. Die Chiplets innerhalb der Package-Anordnung 1190 können in einer 3D- oder 2,5D-Anordnung eingerichtet sein. Im Allgemeinen können Brückenstrukturen 1187 verwendet werden, um eine Punkt-zu-Punkt-Zwischenverbindung zwischen zum Beispiel Logik- oder I/O-Chiplets und Speicherchiplets zu ermöglichen. Das Fabric 1185 kann verwendet werden, um die unterschiedlichen Logik- und/oder I/O-Chiplets (z.B. Chiplets 1172, 1174, 1191, 1193) zwischenzuverbinden. mit anderer Logik und/oder I/O-Chiplets. In einer Ausführungsform kann der Cachespeicher 1192 innerhalb des Substrats als ein globaler Cache für die Package-Anordnung 1190, Teil eines verteilten globalen Caches, oder als ein dedizierter Cache für das Fabric 1185 agieren.
  • 11D veranschaulicht eine Package-Anordnung 1194, die austauschbare Chiplets 1195 aufweist, gemäß einer Ausführungsform. Die austauschbaren Chiplets 1195 können in standardisierten Schlitzen auf einem oder mehreren Basischiplets 1196, 1198 eingerichtet sein. Die Basischiplets 1196, 1198 können über eine Brückenzwischenverbindung 1197 gekoppelt sein, die ähnlich den anderen Brückenverbindungen sein kann, die hierin beschrieben sind, und kann zum Beispiel ein EMIB sein. Speicherchiplets können auch mit Logik- oder I/O-Chiplets über eine Brückenzwischenverbindung verbunden sein. I/O- und Logikchiplets können über ein Zwischenverbindungsfabric kommunizieren. Die Basischiplets können jeweils einen oder mehrere Schlitze in einem standardisierten Format für eines von Logik oder I/O oder Speicher/Cache unterstützen.
  • In einer Ausführungsform können SRAM- und Leistungslieferungsschaltungen in ein oder mehrere der Basischiplets 1196, 1198 gefertigt sein, die unter Verwendung einer verschiedenen Prozesstechnologie relativ zu den austauschbaren Chiplets 1195 gefertigt sein können, die auf die Basischiplets gestapelt sind. Zum Beispiel können die Basischiplets 1196, 1198 unter Verwendung einer größeren Prozesstechnologie gefertigt werden, während die austauschbaren Chiplets unter Verwendung einer kleineren Prozesstechnologie hergestellt sein können. Ein oder mehrere der austauschbaren Chiplets 1195 können Speicher- (z.B. DRAM) Chiplets sein. Verschiedene Speicherdichten können für die Package-Anordnung 1194 basierend auf der Leistung und/oder Arbeitsleistung ausgewählt sein, die für das Produkt angezielt wird, das die Package-Anordnung 1194 verwendet. Zusätzlich können Logikchiplets mit einer verschiedenen Zahl von Typen von funktionalen Einheiten zum Zeitpunkt der Anordnung basierend auf der Leistung und/oder Arbeitsleistung, die für das Produkt angezielt werden, ausgewählt werden. Zusätzlich können Chiplets, die IP-Logikkerne verschiedener Typen enthalten, in die austauschbaren Chipletschlitze eingesetzt werden, was Hybridprozessordesigns ermöglicht, die verschiedene Technologie-IP-Blöcke frei kombinieren können.
  • Beispielhafte System-auf-einem-Chip integrierte Schaltung
  • 12-14 veranschaulichen beispielhafte integrierte Schaltungen und verknüpfte Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt sein können, gemäß unterschiedlichen hierin beschriebenen Ausführungsformen. Zusätzlich zu dem Veranschaulichten können andere Logik und Schaltungen aufgewiesen sein, die zusätzliche Grafikprozessoren/-kerne, periphere Schnittstellensteuerungen oder Allzweckprozessorkerne aufweisen.
  • 12 ist ein Blockdiagramm, das eine beispielhafte System-auf-einem-Chipintegrierte Schaltung 1200 veranschaulicht, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt werden kann, gemäß einer Ausführungsform. Beispielhafte integrierte Schaltung 1200 weist einen oder mehrere Anwendungsprozessor(en) 1205 (z.B. CPUs), mindestens einen Grafikprozessor 1210 auf und kann zusätzlich einen Bildprozessor 1215 und/oder einen Videoprozessor 1220 aufweisen, von denen beliebige ein modularer IP-Kern von derselben oder vielen verschiedenen Designeinrichtungen sein können. Integrierte Schaltung 1200 weist Peripherie- oder Buslogik auf, aufweisend eine USB-Steuerung 1225, UART-Steuerung 1230, eine SPI/SDIO-Steuerung 1235 und eine I2S/I2C-Steuerung 1240. Zusätzlich kann die integrierte Schaltung eine Anzeigevorrichtung 1245 aufweisen, die mit einer oder mehreren einer High-Definition Multimedia Interface (HDMI) Steuerung 1250 und einer Mobile Industry Processor Interface (MIPI) Anzeigeschnittstelle 1255 gekoppelt ist. Datenspeicher kann durch ein Flashspeicherteilsystem 1260 bereitgestellt sein, das Flashspeicher und eine Flashspeichersteuerung aufweist. Speicherschnittstelle kann über eine Speichersteuerung 1265 für Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt sein. Manche integrierte Schaltungen weisen zusätzlich eine eingebettete Sicherheitsengine 1270 auf.
  • 13-14 sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung innerhalb eines SoC veranschaulichen, gemäß hierin beschriebenen Ausführungsformen. 13A veranschaulicht einen beispielhaften Grafikprozessor 1310 einer System-auf-einem-Chip-integrierten Schaltung, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt sein kann, gemäß einer Ausführungsform. 13B veranschaulicht einen zusätzlichen beispielhaften Grafikprozessor 1340 einer System-auf-einem-Chip-integrierten Schaltung, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt sein kann, gemäß einer Ausführungsform. Grafikprozessor 1310 von 13A ist ein Beispiel eines Niederleistungsgrafikprozessorkerns. Grafikprozessor 1340 von 13B ist ein Beispiel eines Hocharbeitsleistungsgrafikprozessorkerns. Jeder der Grafikprozessoren 1310, 1340 kann eine Variante des Grafikprozessors 1210 von 12 sein.
  • Wie in 13 gezeigt, weist Grafikprozessor 1310 einen Scheitelpunktprozessor 1305 und einen oder mehrere Fragmentprozessor(en) 1315A-1315N (z.B. 1315A, 1315B, 1315C, 1315D bis 1315N-1 und 1315N) auf. Grafikprozessor 1310 kann verschiedene Shader-Programme über separate Logik derart ausführen, dass der Scheitelpunktprozessor 1305 optimiert ist, Betriebe für Scheitelpunkt-Shader-Programme auszuführen, während der eine oder die mehreren Fragment-Shaderprozessor(en) 1315A-1315N Fragment- (z.B. Pixel) Shading-Betriebe für Fragment- oder Pixel-Shader-Programme ausführen. Der Scheitelpunktprozessor 1305 führt die Scheitelpunktverarbeitungsstufe der 3D-Grafikpipeline aus und erzeugt Primitive und Scheitelpunktdaten. Der/die Fragmentprozessor(en) 1315A-1315N verwenden die Primitiv- und Scheitelpunktdaten, die von dem Scheitelpunktprozessor 1305 erzeugt sind, um einen Framepuffer zu erstellen, der auf einer Anzeigevorrichtung angezeigt wird. In einer Ausführungsform sind die Fragmentprozessor(en) 1315A-1315N optimiert, Fragment-Shader-Programme auszuführen, wie sie in der OpenGL API bereitgestellt sind, die verwendet werden können, ähnliche Betriebe wie ein Pixel-Shader-Programm durchzuführen, wie es in der der Direct 3D API bereitgestellt ist.
  • Grafikprozessor 1310 weist zusätzlich eine oder mehrere Speicherverwaltungseinheiten (MMUs, Memory Management Units) 1320A-1320B, Cache(s) 1325A-1325B und Schaltungszwischenverbindung(en) 1330A-1330B auf. Die eine oder mehreren MMU(s) 1320A-1320B stellen virtuelle zu physischer Adressabbildung für den Grafikprozessor 1310 bereit, aufweisend den Scheitelpunktprozessor 1305 und/oder Fragmentprozessor(en) 1315A-1315N, die sich auf Scheitelpunkt- oder Bild-/Texturdaten beziehen können, die in Speicher gespeichert sind, zusätzlich zu Scheitelpunkt- oder Bild-/Texturdaten, die in dem einen oder den mehreren Cache(s) 1325A-1325B gespeichert sind. In einer Ausführungsform können die eine oder mehreren MMU(s) 1320A-1320B mit anderen MMUs innerhalb des Systems synchronisiert werden, aufweisend eine oder mehrere MMUs, die mit dem einen oder den mehreren Anwendungsprozessor(en) 1205, Bildprozessor 1215 und/oder Videoprozessor 1220 von 12 derart verknüpft sind, dass jeder Prozessor 1205-1220 in einem geteilten oder vereinheitlichten virtuellen Speichersystem teilnehmen kann. Die eine oder mehreren Schaltungszwischenverbindung(en) 1330A-1330B ermöglichen Grafikprozessor 1310, sich mit anderen IP-Kernen innerhalb des SOC entweder über einen internen Bus des SOC oder über eine direkte Verbindung zu verschalten, gemäß Ausführungsformen.
  • Wie in 14 gezeigt, weist Grafikprozessor 1340 die eine oder mehreren MMU(s) 1320A-1320B, Cache(s) 1325A-1325B und Schaltungszwischenverbindung(en) 1330A-1330B des Grafikprozessors 1310 von 13 auf. Grafikprozessor 1340 weist einen oder mehrere Shader-Kern(e) 1355A-1355N (z.B. 1455A, 1355B, 1355C, 1355D, 1355E, 1355F über 1355N-1 und 1355N) auf, der eine vereinheitlichte Shader-Kernarchitektur bereitstellt, in der ein einzelner Kern oder Typ oder Kern alle Typen programmierbaren Shader-Codes ausführen kann, aufweisend Shader-Programmcode, um Scheitelpunkt-Shader, Fragment-Shader und/oder Rechen-Shader zu implementieren. Die exakte Zahl von vorhandenen Shader-Kernen kann unter Ausführungsformen und Implementierungen variieren. Zusätzlich weist Grafikprozessor 1340 einen Zwischenkernaufgabenverwalter 1345 auf, der als ein Thread-Dispatcher dient, um Ausführungs-Threads zu einem oder mehreren Shader-Kernen 1355A-1355N einzulasten, und eine Kachelungseinheit 1358, um Kachelungsbetriebe für kachelbasiertes Rendering zu beschleunigen, in dem Rendering-Betriebe für eine Szene in Bildraum unterteilt sind, zum Beispiel um lokale räumliche Kohärenz mit einer Szene auszunutzen oder Verwendung interner Caches zu optimieren.
  • Raytracing Mit Maschinenlernen
  • Wie oben erwähnt, ist Raytracing eine Grafikverarbeitungstechnik, in der Lichttransport durch auf Physik basiertes Rendering simuliert wird. Einer der Schlüsselbetriebe beim Raytracing ist Verarbeitung einer Sichtbarkeitsanfrage, die Quer- und Schneidtestung von Knoten in einer Begrenzungsvolumenhierarchie (BVH) erfordert.
  • Auf Ray- und Pfadtracing beruhende Techniken berechnen Bilder durch Verfolgen von Strahlen und Pfaden durch jedes Pixel und Verwenden von Zufallsabtastung, um erweiterte Effekte wie Schatten, Glanz, indirekte Beleuchtung usw. zu berechnen. Die Verwendung nur einiger Abtastungen ist schnell, erzeugt aber verrauschte Bilder, während die Verwendung vieler Abtastungen Bilder hoher Qualität erzeugt, aber unerschwinglich ist.
  • Maschinenlernen weist jeden Schaltkreis, Programmcode, oder eine Kombination davon auf, der/die im Stande ist, zunehmend Arbeitsleistung einer bestimmten Aufgabe zu verbessern oder zunehmend exaktere Vorhersagen oder Entscheidungen zu treffen. Manche Maschinenlernen-Engines können diese Aufgaben durchführen oder diese Vorhersagen/Entscheidungen treffen, ohne ausdrücklich programmiert zu sein, die Aufgaben durchführen oder die Vorhersagen/Entscheidungen treffen. Es gibt eine Reihe von Maschinenlerntechniken, die überwachtes und semi-überwachtes Lernen, unüberwachtes Lernen und Verstärkungslernen aufweisen (ohne aber darauf begrenzt zu sein).
  • In den letzten mehreren Jahren ist eine bahnbrechende Lösung für Ray-/Pfadtracing für Echtzeitverwendung in der Form von „Entrauschen“ in Erscheinung getreten - der Prozess, Bildverarbeitungstechniken zu verwenden, um gefilterte/rauschfreie Bilder hoher Qualität aus verrauschten Eingängen mit niedriger Abtastzahl zu erzeugen. Die effektivsten Entrauschungstechniken beruhen auf Maschinenlerntechniken, wo eine Maschinenlernengine lernt, wie ein verrauschtes Bild aussähe, wenn es mit mehr Abtastungen berechnet worden wäre. In einer bestimmten Implementierung wird das Maschinenlernen von einem Convolutional Neural Network (CNN) durchgeführt; die zugrundeliegenden Prinzipien der Erfindung sind jedoch nicht auf eine CNN-Implementierung begrenzt. In einer solchen Implementierung werden Trainingsdaten mit Eingängen geringer Abtastzahl und Grundwahrheit (Ground Truth) erzeugt. Das CNN wird trainiert, das konvergierte Pixel aus einer Nachbarschaft verrauschter Pixeleingänge um das fragliche Pixel vorherzusagen.
  • Wenn auch nicht perfekt, hat sich diese AI-basierte Entrauschungstechnik als überraschend wirksam erwiesen. Der Vorbehalt ist jedoch, dass gute Trainingsdaten erforderlich sind, da das Netzwerk sonst die falschen Ergebnisse vorhersagen würde. Wenn zum Beispiel ein Studio für animierte Filme ein Entrauschungs-CNN an früheren Filmen mit Szenen auf dem Land trainiert und dann versucht, das trainierte CNN zum Entrauschen von Frames aus einer neuen Filmkulisse auf Wasser zu verwenden, wird der Entrauschungsbetrieb eine suboptimale Leistung zeigen.
  • Zur Behandlung dieses Problems können Lerndaten dynamisch während Rendering gesammelt werden und eine Maschinenlernengine, wie ein CNN, kann fortlaufend auf Basis der Daten trainiert werden, an welche sie aktuell laufen gelassen wird, wodurch die Maschinenlernengine fortlaufend für die vorliegende Aufgabe verbessert wird. Daher kann weiterhin eine Trainingsphase vor Laufzeit durchgeführt werden, aber fortgesetzt werden, um die Maschinenlerngewichte während Laufzeit nach Bedarf einzustellen. Dadurch werden die hohen Kosten zum Berechnen der Referenzdaten, die für das Training erforderlich sind, vermieden, indem die Erzeugung von Lerndaten auf ein Teilgebiet des Bilds jedes Frame oder alle N Frames begrenzt wird. Insbesondere werden die verrauschten Eingänge eines Frames zum Entrauschen des vollständigen Frames mit dem aktuellen Netzwerk erzeugt. Zusätzlich kann ein kleines Gebiet von Referenzpixeln erzeugt und für ein fortlaufendes Training, wie unten beschrieben, verwendet werden.
  • Während hier eine CNN-Implementierung beschrieben ist, kann jede Form von Maschinenlernengine verwendet werden, aufweisend, aber nicht begrenzt auf, Systeme, die überwachtes Lernen (z.B. Erstellen eines mathematischen Modells eines Datensatzes, der sowohl die Eingänge als auch die gewünschten Ausgänge enthält), unüberwachtes Lernen (die z.B. die Eingangsdaten für gewisse Arten von Struktur auswerten), und/oder eine Kombination aus überwachtem und unüberwachtem Lernen durchführen.
  • Bestehende Entrauschungsimplementierungen arbeiten in einer Trainingsphase und einer Laufzeitphase. Während der Trainingsphase wird eine Netzwerktopologie definiert, die ein Gebiet von NxN Pixeln mit verschiedenen Datenkanälen pro Pixel empfängt, wie Pixelfarbe, Tiefe, Normale, normale Abweichung, primitive IDs und Albedo, und eine finale Pixelfarbe erzeugt. Ein Satz „repräsentativer“ Trainingsdaten wird unter Verwendung eines Werts eines Frames von Eingängen geringer Abtastzahl und Verweisen auf die „gewünschten“ Pixelfarben, die mit einer sehr hohen Abtastzahl berechnet werden, erzeugt. Das Netzwerk wird auf diese Eingänge trainiert, wobei ein Satz „idealer“ Gewichte für das Netzwerk erzeugt wird. In diesen Implementierungen werden die Referenzdaten verwendet, um die Gewichte des Netzwerks zu trainieren, den Ausgang des Netzwerks auf das gewünschte Ergebnis so nah wie möglich abzustimmen.
  • Zur Laufzeit werden die gegebenen, vorberechneten, idealen Netzwerkgewichte geladen und das Netzwerk wird initialisiert. Für jedes Frame wird ein Bild mit niedriger Abtastzahl aus Entrauschungseingängen (d.h. denselben wie für das Training verwendet) erzeugt. Für jedes Pixel wird die gegebene Nachbarschaft von Eingängen der Pixel durch das Netzwerk laufen gelassen, um die „rauschfreie“ Pixelfarbe vorherzusagen, wodurch ein rauschfreies Frame erzeugt wird.
  • 15 veranschaulicht eine Anfangstrainingsimplementierung. Eine Maschinenlernengine 1500 (z.B. ein CNN) empfängt ein Gebiet von N x N Pixeln Bilddaten mit hoher Abtastzahl 1702 mit verschiedenen Datenkanälen pro Pixel wie Pixelfarbe, Tiefe, Normale, normale Abweichung, Primitive-IDs, und Albedo, und zeigt finale Pixelfarben. Repräsentative Trainingsdaten werden anhand eines Werts eines Frames von Eingängen geringer Abtastzahl 1501 erzeugt. Das Netzwerk wird auf diese Eingaben trainiert, wobei ein Satz „idealer“ Gewichte 1505 erzeugt wird, den die Maschinenlernengine 1500 anschließend zum Entrauschen von Bildern mit niedriger Abtastzahl zur Laufzeit verwendet.
  • Zur Verbesserung der obenstehenden Techniken wird die Entrauschungsphase zum Erzeugen neuer Trainingsdaten jedes Frame oder jeden Teilsatz von Frames (z.B. alle N Frames, wo N = 2, 3, 4, 10, 25 usw.) erweitert. Insbesondere, wie in 16 veranschaulicht, werden ein oder mehrere Gebiete in jedem Frame gewählt, die hier als „neue Referenzgebiete“ 1602 bezeichnet werden, die mit einer hohen Abtastzahl in einen separaten Puffer hoher Abtastzahl 1604 gerendert werden. Ein Puffer niedriger Abtastzahl 1603 speichert das Eingangsframe niedriger Abtastzahl 1601 (enthaltend das Niederabtastungsgebiet 1604 entsprechend dem neuen Referenzgebiet 1602).
  • Die Stelle des neuen Referenzgebiets 1602 kann beliebig gewählt werden. Alternativ kann die Stelle des neuen Referenzgebiets 1602 auf eine vorab spezifizierte Weise für jedes neue Frame (z.B. unter Verwendung einer vordefinierten Bewegung des Gebiets zwischen Frames, begrenzt auf ein spezifiziertes Gebiet in der Mitte des Frames usw.) eingestellt werden.
  • Unabhängig davon, wie das neue Referenzgebiet gewählt wird, wird es von der Maschinenlernengine 1600 verwendet, um die trainierten Gewichte 1605, die zum Entrauschen verwendet werden, fortlaufend zu verfeinern und zu aktualisieren. Insbesondere werden Referenzpixelfarben von jedem neuen Referenzgebiet 1602 und verrauschte Referenzpixeleingänge von einem entsprechenden Gebiet niedriger Abtastzahl 1607 gerendert. Dann wird ergänzendes Training auf der Maschinenlernengine 1600 unter Verwendung des Referenzgebiets hoher Abtastzahl 1602 und des entsprechenden Gebiets niedriger Abtastzahl 1607 durchgeführt. Im Gegensatz zu dem Anfangstraining wird dieses Training fortlaufend während der Laufzeit für jedes neue Referenzgebiet 1602 durchgeführt - wodurch sichergestellt wird, dass die Maschinenlernengine 1600 präzise trainiert ist. Zum Beispiel können Datenkanäle pro Pixel (z.B. Pixelfarbe, Tiefe, Normale, normale Abweichung usw.) evaluiert werden, die die Maschinenlernengine 1600 verwendet, um Einstellungen an den trainierten Gewichten 1605 vorzunehmen. Wie im Trainingsfall (15) wird die Maschinenlernengine 1600 auf einen Satz idealer Gewichte 1605 trainiert, um Rauschen aus dem Eingangsframe 1601 niedriger Abtastzahl zu entfernen, um das rauschfreie Frame 1620 zu erzeugen. Die trainierten Gewichte 1605 werden jedoch basierend auf neuen Bildeigenschaften von neuen Arten von Eingangsframes niedriger Abtastzahl 1601 fortlaufend aktualisiert.
  • Die Neutrainingsbetriebe, die von der Maschinenlernengine 1600 durchgeführt werden, können gleichzeitig in einem Hintergrundprozess an der Grafikprozessoreinheit (GPU) oder dem Hostprozessor durchgeführt werden. Die Renderschleife, die als eine Treiberkomponente und/oder eine GPU-Hardwarekomponente implementiert sein kann, kann fortlaufend neue Trainingsdaten erzeugen (z.B. in der Form neuer Referenzgebiete 1602), die sie in eine Warteschlange stellt. Der Hintergrundtrainingsprozess, der auf der GPU oder dem Hostprozessor ausgeführt wird, kann fortlaufend die neuen Trainingsdaten aus dieser Warteschlange lesen, die Maschinenlernengine 1600 neu trainieren und diese mit neuen Gewichten 1605 in geeigneten Intervallen aktualisieren.
  • 17 veranschaulicht ein Beispiel einer solchen Implementierung, in welcher der Hintergrundtrainingsprozess 1700 durch die Host-CPU 1710 implementiert wird. Insbesondere verwendet der Hintergrundtrainingsprozess 1700 das neue Referenzgebiet hoher Abtastzahl 1602 und das entsprechenden Niederabtastungsgebiet 1604, um die trainierten Gewichte 1605 fortlaufend zu aktualisieren, wodurch die Maschinenlernengine 1600 aktualisiert wird.
  • Wie in 18A für das nicht einschränkende Beispiel eines Online-Spiels für mehrere Spieler veranschaulicht, erzeugen verschiedene Hostmaschinen 1820-1822 einzeln Referenzgebiete, die ein Hintergrundtrainingsprozess 1700A-C zu einem Server 1800 (z.B. wie einen Spielserver) überträgt. Der Server 1800 führt dann Training an einer Maschinenlernengine 1810 unter Verwendung der neuen Referenzgebiete durch, die von jedem der Hosts 1821-1822 empfangen werden, wobei die Gewichte 1805 wie zuvor beschrieben aktualisiert werden. Er überträgt diese Gewichte 1805 an die Hostmaschinen 1820, die die Gewichte 1605A-C speichern, wodurch jede einzelne Maschinenlernengine (nicht gezeigt) aktualisiert wird. Da dem Server 1800 eine große Anzahl von Referenzgebieten in einer kurzen Zeitperiode bereitgestellt werden kann, kann er die Gewichte für jede gegebene Anwendung (z.B. ein Online-Spiel), die von den Anwendern ausgeführt wird, effizient und präzise aktualisieren.
  • Wie in 18B veranschaulicht, können die verschiedenen Hostmaschinen neue trainierte Gewichte (z.B. basierend auf Trainings-/Referenzgebieten 1602 wie zuvor beschrieben) erzeugen und die neuen trainierten Gewichte mit einem Server 1800 (z.B. einem Spielserver) teilen oder alternativ ein Peer-zu-Peer-Teilungsprotokoll verwenden. Eine Maschinenlernverwaltungskomponente 1810 auf dem Server erzeugt einen Satz kombinierter Gewichte 1805, unter Verwendung der neuen Gewichte, die von jeder der Hostmaschinen empfangen werden. Die kombinierten Gewichte 1805 können zum Beispiel ein Durchschnitt sein, der aus den neuen Gewichte erzeugt und fortlaufend aktualisiert wird, wie hier beschrieben. Sobald erzeugt, können Kopien der kombinierten Gewichte 1605A-C übertragen und auf jeder der Hostmaschinen 1820-1821 gespeichert werden, die dann die kombinierten Gewichte wie hier beschrieben zum Durchführen von Entrauschungsbetrieben verwenden kann.
  • Der Aktualisierungsmechanismus als halb geschlossene Schleife kann auch von dem Hardwarehersteller verwendet werden. Zum Beispiel kann das Referenznetzwerk als Teil des Treibers enthalten sein, der von dem Hardwarehersteller vertrieben wird. Wenn der Treiber unter Verwendung der hier beschriebenen Techniken neue Trainingsdaten erzeugt und diese fortlaufend dem Hardwarehersteller zurückleitet, verwendet der Hardwarehersteller diese Informationen, um seine Maschinenlernimplementierungen für die nächste Treiberaktualisierung weiter zu verbessern.
  • In einer beispielhaften Implementierung (z.B. beim Batch-Film-Rendering auf einer Renderfarm) überträgt der Renderer die neu erzeugten Trainingsgebiete an einen dedizierten Server oder eine Datenbank (in der Renderfarm dieses Studios), die diese Daten aus mehreren Renderknoten im Lauf der Zeit aggregiert. Ein separater Prozess auf einer separate Maschine verbessert fortlaufend das dedizierte Entrauschungsnetzwerk des Studios und neue Renderarbeiten verwenden immer das zuletzt trainierte Netzwerk.
  • Maschinenlernverfahren ist in 19 veranschaulicht. Das Verfahren kann auf den hier beschriebenen Architekturen implementiert sein, ist aber nicht auf eine bestimmte System- oder Grafikverarbeitungsarchitektur begrenzt.
  • Bei 1901 werden als Teil der Anfangstrainingsphase Bilddaten niedriger Abtastzahl und Bilddaten hoher Abtastzahl für mehrere Bildframes erzeugt. Bei 1902 wird eine Maschinenlern-Entrauschungsengine unter Verwendung der Bilddaten hoher/niedriger Abtastzahl trainiert. Zum Beispiel kann ein Satz von Convolutional Neural Network Gewichten, die mit Pixelmerkmalen verknüpft sind, gemäß dem Training aktualisiert werden. Es kann jedoch jede Maschinenlernarchitektur verwendet werden.
  • Bei 1903 werden zur Laufzeit Bildframes niedriger Abtastzahl gemeinsam mit mindestens einem Referenzgebiet mit einer hohen Abtastzahl erzeugt. Bei 1904 wird das Referenzgebiet hoher Abtastzahl von der Maschinenlernengine und/oder separater Trainingslogik (z.B. Hintergrundtrainingsmodul 1700) verwendet, um das Training der Maschinenlernengine fortlaufend zu verfeinern. Zum Beispiel kann das Referenzgebiet hoher Abtastzahl in Kombination mit einem entsprechenden Teil des Bilds niedriger Abtastzahl verwendet werden, um fortzufahren, die Maschinenlernengine 1904 zu lehren, wie Entrauschen am effektivsten durchzuführen ist. In einer CNN Implementierung kann dies zum Beispiel Aktualisieren der Gewichte bedeuten, die mit dem CNN verknüpft sind.
  • Mehrere oben beschriebene Variationen können implementiert werden, wie die Art, in der die Rückkopplungsschleife zu der Maschinenlernengine konfiguriert ist, die Einheiten, die die Trainingsdaten erzeugen, die Art, in der die Trainingsdaten zur Trainingsengine zurückgeleitet werden, und wie das verbesserte Netzwerk den Rendering-Engines bereitgestellt wird. Zusätzlich, während die oben beschriebenen Beispiele fortlaufendes Training unter Verwendung eines einzigen Referenzgebiets durchführen, kann eine beliebige Anzahl von Referenzgebieten verwendet werden. Ferner, wie zuvor erwähnt, können die Referenzgebiete unterschiedliche Größen aufweisen, können an unterschiedlichen Zahlen von Bildframes verwendet werden und können an verschiedenen Stellen innerhalb der Bildframes unter Verwendung unterschiedlicher Techniken positioniert werden (z.B. beliebig, gemäß einem vorbestimmten Muster usw.).
  • Zusätzlich, während ein Convolutional Neural Network (CNN) als ein Beispiel einer Maschinenlernengine 1600 beschrieben ist, können die zugrundeliegenden Prinzipien der Erfindung unter Verwendung jeder Form von Maschinenlernengine implementiert werden, die im Stande ist, ihre Ergebnisse unter Verwendung neuer Trainingsdaten fortlaufend zu verfeinern. Als Beispiel und nicht zur Einschränkung weisen andere Maschinenlernimplementierungen das Gruppenverfahren zur Datenhandhabung (GMDH, Group Method of Data Handling), langen kurzfristigen Speicher, tiefes Reservoirberechnen, Deep Belief Netzwerke, tiefe Tensor-Stapelnetzwerke und tiefe vorhersagende Codierungsnetzwerke, um nur einige zu nennen, auf.
  • Vorrichtung und Verfahren zum effizienten Verteilten Entrauschen
  • Wie oben beschrieben, ist Entrauschen ein kritisches Merkmal für Echtzeit-Raytracing mit glatten, rauschfreien Bildern geworden. Rendering kann über ein verteiltes System auf mehreren Vorrichtungen erfolgen, aber bisher arbeiten alle bestehenden Entrauschungsframeworks auf einer einzelnen Instanz auf einer einzelnen Maschine. Wenn Rendering über mehrere Vorrichtungen erfolgen soll, kann sein, dass bei diesen nicht auf alle gerenderten Pixel zur Berechnung eines rauschfreien Teil des Bilds zugegriffen werden kann.
  • Ein verteilter Entrauschungsalgorithmus, der sowohl mit künstlichen Intelligenz-(AI, Artificial Intelligence) als auch nicht auf AI beruhenden Entrauschungstechniken funktioniert, wird präsentiert. Gebiete des Bilds sind entweder über Knoten aus einem verteilten Renderbetrieb verteilt oder aufgeteilt und von einem einzigen Framepuffer verteilt. Geistgebiete von benachbarten Gebieten, die zur Berechnung ausreichendes Entrauschen benötigen, werden von benachbarten Knoten bei Bedarf gesammelt und die endgültig resultierenden Kacheln werden zu einem finalen Bild zusammengesetzt.
  • VERTEILTE VERARBEITUNG
  • 20 veranschaulicht mehrere Knoten 2021-2023, die Rendering durchführen. Während nur drei Knoten der Einfachheit wegen veranschaulicht sind, sind die zugrundeliegenden Prinzipien der Erfindung nicht auf eine bestimmte Anzahl von Knoten begrenzt. Tatsächlich kann ein einzelner Knoten verwendet werden, um gewisse Ausführungsformen der Erfindung zu implementieren.
  • Knoten 2021-2023 rendern jeweils einen Teil eines Bilds, was in diesem Beispiel zu Gebieten 2011-2013 führt. Während in 20 rechteckige Gebiete 2011-2013 gezeigt sind, können Gebiete jeder Form verwendet werden und jede Vorrichtung kann eine beliebige Anzahl von Gebieten verarbeiten. Die Gebiete, die von einem Knoten benötigt werden, um einen ausreichend reibungslosen Entrauschungsbetrieb durchzuführen, sind als Geistgebiete 2011-2013 bezeichnet. Mit anderen Worten, die Geistgebiete 2001-2003 stellen die Gesamtheit an Daten dar, die notwendig sind, um Entrauschen bei einem spezifizierten Qualitätsniveau durchzuführen. Ein Senken des Qualitätsniveaus verringert die Größe des Geistgebiets und daher die erforderliche Datenmenge und ein Erhöhen des Qualitätsniveaus vergrößert das Geistgebiet und die entsprechenden erforderlichen Daten.
  • Wenn ein Knoten wie Knoten 2021 eine lokale Kopie eines Teils des Geistgebiets 2001 hat, der erforderlich ist, um sein Gebiet 2011 bei einem spezifizierten Qualitätsniveau zu entrauschen, ruft der Knoten die erforderlichen Daten von einem oder mehreren „benachbarten“ Knoten, wie Knoten 2022, ab, die einen Teil von Geistgebiet 2001 besitzen, wie veranschaulicht. Ebenso, wenn Knoten 2022 eine lokale Kopie eines Teils von Geistgebiet 2002 hat, der erforderlich ist, um sein Gebiet 2012 bei dem spezifizierten Qualitätsniveau zu entrauschen, ruft Knoten 2022 die erforderlichen Geistgebietsdaten 2032 von Knoten 2021 ab. Das Abrufen kann über einen Bus, eine Zwischenverbindung, ein Hochgeschwindigkeitsspeicherfabric, ein Netzwerk (z.B. Hochgeschwindigkeits-Ethernet) erfolgen oder kann sogar eine On-Chip-Zwischenverbindung in einem Multikernchip sein, die im Stande ist, Renderingarbeit zwischen mehreren Kernen zu verteilen (die z.B. für Rendering großer Bilder bei entweder extremen Auflösungen oder variierender Zeit verwendet werden). Jeder Knoten 2021-2023 kann eine individuelle Ausführungseinheit oder einen spezifizierten Satz von Ausführungseinheiten in einem Grafikprozessor aufweisen.
  • Die spezifische zu sendende Datenmenge ist von den Entrauschungstechniken abhängig, die verwendet werden. Ferner können die Daten aus dem Geistgebiet beliebige Daten aufweisen, die notwendig sind, um Entrauschen jedes entsprechenden Gebiets zu verbessern. Zum Beispiel können die Geistgebietsdaten Bildfarben/Wellenlängen, Intensität/Alphadaten und/oder Normale aufweisen. Die zugrundeliegenden Prinzipien der Erfindung sind jedoch nicht auf einem bestimmten Satz von Geistgebietsdaten begrenzt.
  • ZUSÄTZLICHE EINZELHEITEN
  • Für langsamere Netzwerke oder Zwischenverbindungen kann Kompression dieser Daten unter Verwendung bestehender verlustloser oder verlustbehafteter Allzweckkompression benutz werden. Beispiele weisen zlib, gzip und Lempel-Ziv-Markov Kettenalgorithmus (LZMA, Lempel-Ziv-Markov Chain Algorithm) auf, ohne aber darauf begrenzt zu sein. Weiter kann inhaltsspezifische Kompression durch Festhalten, dass das Delta in Strahl-Trefferinformationen zwischen Frames ziemlich spärlich sein kann, verwendet werden und nur die Abtastungen, die zu diesem Delta beitragen, müssen gesendet werden, wenn der Knoten bereits die gesammelten Deltas von vorherigen Frames hat. Dies kann selektiv zu Knoten geschoben werden, die diese Abtastungen, i, sammeln, oder Knoten i kann Abtastungen von anderen Knoten anfragen. Verlustlose Kompression wird für bestimmte Arten von Daten und Programmcode verwendet, während verlustbehaftete Daten für anderen Arten von Daten verwendet werden.
  • 21 veranschaulicht zusätzliche Details der Interaktionen zwischen Knoten 2021-2022. Jeder Knoten 2021-2022 weist einen Raytracing-Renderingschaltkreis 2081-2082 für Rendering der entsprechenden Bildgebiete 2011-2012 und Geistgebiete 2001-2002 auf. Entrauscher 2100-2111 führen Entrauschungsbetriebe jeweils an den Gebieten 2011-2012 auf, für deren Rendering und Entrauschen jeder Knoten 2021-2022 verantwortlich ist. Die Entrauscher 2021-2022 können zum Beispiel Schaltkreis, Software oder jede Kombination davon aufweisen, um jeweils die rauschfreien Gebiete 2121-2122 zu erzeugen. Wie erwähnt, wenn rauschfreie Gebiete erzeugt werden, kann es notwendig sein, dass sich die Entrauscher 2021-2022 auf Daten in einem Geistgebiet beziehen, das ein anderer Knoten besitzt (z.B. kann Entrauscher 2100 Daten von Geistgebiet 2002 benötigen, das Knoten 2022 besitzt).
  • Daher können die Entrauscher 2100-2111 die rauschfreien Gebiete 2121-2122 unter Verwendung von Daten aus Gebieten 2011-2012 bzw. Geistgebieten 2001-2002 erzeugen, von welchen mindestens ein Teil von einem anderen Knoten empfangen wurde. Gebietsdatenverwalter 2101-2102 können Datentransfers von Geistgebieten 2001-2002 verwalten, wie hier beschrieben. Kompressor/Dekompressoreinheiten 2131-2132 können Kompression bzw. Dekompression der Geistgebietsdaten durchführen, die zwischen den Knoten 2021-2022 ausgetauscht werden.
  • Zum Beispiel kann Gebietsdatenverwalter 2101 von Knoten 2021 auf Anfrage von Knoten 2022 Daten vom Geistgebiet 2001 zu Kompressor/Dekompressor 2131 senden, der die Daten komprimiert, um komprimierte Daten 2106 zu erzeugen, die er zu Knoten 2022 überträgt, wodurch Bandbreite über die Zwischenverbindung, das Netzwerk, den Bus oder einen anderen Datenkommunikationslink verringert wird. Kompressor/Dekompressor 2132 von Knoten 2022 dekomprimiert dann die komprimierten Daten 2106 und Entrauscher 2111 verwendet die dekomprimierten Geistdaten, um ein rauschfreies Gebiet 2012 höherer Qualität zu erzeugen als mit nur Daten aus Gebiet 2012 möglich wäre. Der Gebietsdatenverwalter 2102 kann die dekomprimierten Daten von Geistgebiet 2001 in einem Cache, Speicher, einer Registerdatei oder einem anderen Datenspeicher speichern, um sie dem Entrauscher 2111 verfügbar zu machen, wenn das rauschfreie Gebiet 2122 erzeugt wird. Ein ähnlicher Satz von Betrieben kann durchgeführt werden, um die Daten von Geistgebiet 2002 dem Entrauscher 2100 auf Knoten 2021 bereitzustellen, der die Daten in Kombination mit Daten von Gebiet 2011 verwendet, um ein rauschfreies Gebiet 2121 höherer Qualität zu erzeugen.
  • ERGREIFEN VON DATEN ODER RENDERN
  • Wenn die Verbindung zwischen Vorrichtungen wie Knoten 2021-2022 langsam ist (d.h. langsamer als eine Schwellenlatenz und/oder Schwellenbandbreite), kann es schneller sein, Geistgebiete lokal zu rendern, anstatt die Ergebnisse von anderen Vorrichtungen anzufordern. Dies kann zu Laufzeit durch Verfolgen von Netzwerktransaktionsgeschwindigkeiten und linear extrapolierten Renderzeiten für die Geistgebietsgröße bestimmt werden. In solchen Fällen, wo es schneller ist, das gesamte Geistgebiet zu rendern, können mehrere Vorrichtungen letztendlich dieselben Teile des Bilds rendern. Die Auflösung des gerenderten Teils der Geistgebiete kann basierend auf der Varianz des Basisgebiet und des bestimmten Grads an Unschärfe eingestellt werden.
  • LASTAUSGLEICH
  • Statische und/oder dynamische Lastausgleichsschemata können verwendet werden, um die Verarbeitungslast unter den verschiedenen Knoten 2021-2023 zu verteilen. Für dynamischen Lastausgleich kann die Varianz, die durch das Entrauschungsfilter bestimmt wird, sowohl mehr Zeit beim Entrauschen benötigen aber auch die Menge Abtastungen, die zum Rendern eines bestimmten Gebiet der Szene erforderlich ist, antreiben, wobei unscharfe Gebiete des Bild mit geringer Varianz weniger Abtastungen benötigen können. Die spezifischen Gebiete, die spezifischen Knoten zugewiesen sind, können basierend auf Daten aus vorherigen Frames dynamisch eingestellt oder über Vorrichtungen dynamisch kommuniziert werden, während sie rendern, sodass alle Vorrichtungen dieselbe Arbeitsmenge haben.
  • 22 veranschaulicht, wie ein Monitor 2201-2202, der auf jedem entsprechenden Knoten 2021-2022 läuft, Leistungsmetrikdaten sammelt, aufweisend, aber nicht begrenzt auf, die Zeit, die zum Übertragen von Daten über die Netzwerkschnittstelle 2211-2212 aufgewendet wird, die Zeit, die beim Entrauschen eines Gebiets (mit und ohne Geistgebietsdaten) aufgewendet wird, und die Zeit, die beim Rendering jedes Gebiets/Geistgebiets aufgewendet wird. Die Monitore 2201-2202 berichten diese Leistungsmetrik zurück an einen Verwalter- oder Lastausgleicherknoten 2201, der die Daten analysiert, um die aktuelle Arbeitslast auf jedem Knoten 2021-2022 zu identifizieren, und möglicherweise einen effizienteren Verarbeitungsmodus der verschiedenen rauschfreien Gebiete 2121-2122 bestimmt. Der Verwalterknoten 2201 verteilt dann neue Arbeitslasten für neue Gebiete an die Knoten 2021-2022 gemäß der erfassten Last. Zum Beispiel kann der Verwalterknoten 2201 mehr Arbeit an jene Knoten übertragen, die nicht schwer belastet sind, und/oder Arbeit von jenen Knoten, die überlastet sind, neu zuordnen. Zusätzlich kann der Lastausgleicherknoten 2201 einen Rekonfigurationsbefehl übertragen, um die spezifische Weise einzustellen, in der Rendering und/oder Entrauschen von jedem der Knoten durchgeführt wird (manche Beispiele dafür sind oben beschrieben).
  • BESTIMMEN VON GEISTGEBIETEN
  • Die Größen und Formen der Geistgebiete 2001-2002 können basierend auf dem Entrauschungsalgorithmus bestimmt werden, der durch die Entrauscher 2100-2111 implementiert wird. Ihre entsprechenden Größen können dann basierend darauf, dass die erfasste Varianz der Abtastungen rauschfrei ist, dynamisch modifiziert werden. Der Lernalgorithmus, der für AI Entrauschen selbst verwendet wird, kann zum Bestimmen geeigneter Gebietsgrößen verwendet werden oder in anderen Fällen, wie einer bilateralen Unschärfe, wird die vorbestimmte Filterbreite die Größe der Geistgebiete 2001-2002 bestimmen. In einer beispielhaften Implementierung, die einen Lernalgorithmus verwendet, kann die Maschinenlernengine auf dem Verwalterknoten 2201 laufen und/oder Teile des Maschinenlernens können auf jedem der einzelnen Knoten 2021-2023 laufen (siehe z.B. 18A-B und zugehörigen Text oben).
  • ZUSAMMENSTELLEN DES FINALEN BILDS
  • Das finale Bild kann durch Zusammenstellen der gerenderten und rauschfreien Gebiete von jedem der Knoten 2021-2023 erzeugt werden. ohne die Geistgebiete oder Normalen zu benötigen. In 22 werden zum Beispiel die rauschfreien Gebiete 2121-2122 an Gebietsprozessor 2280 des Verwalterknotens 2201 übertragen, der die Gebiete kombiniert, um das finale rauschfreie Bild 2290 zu erzeugen, das dann auf einer Anzeige 2290 angezeigt wird. Der Gebietsprozessor 2280 kann die Gebiete unter Verwendung einer Reihe von 2D-Zusammenstellungstechniken kombinieren. Obwohl als separate Komponenten dargestellt, können der Gebietsprozessor 2280 und das rauschfreie Bild 2290 in die Anzeige 2290 integriert sein. Die verschiedenen Knoten 2021-2022 können eine direkte Sendetechnik zum Übertragen der rauschfreien Gebiete 2121-2122 verwenden und möglicherweise verschiedene verlustbehaftete oder verlustlose Kompression der Gebietsdaten verwenden.
  • AI Entrauschen ist weiterhin ein teurer Betrieb und da sich Spiele in die Cloud bewegen. Als solches kann Verteilungsverarbeitung von Entrauschen über mehrere Knoten 2021-2022 notwendig sein, um Echtzeit-Frameraten für herkömmliches Spielen oder virtuelle Realität (VR) zu erreichen, was höhere Frameraten erfordert. Filmstudios rendern häufig auch in großen Renderfarmen, die für schnelleres Entrauschen genutzt werden können.
  • Ein beispielhaftes Verfahren zum Durchführen von verteiltem Rendering und Entrauschen ist in 23 veranschaulicht. Das Verfahren kann im Kontext der oben beschriebenen Systemarchitekturen implementiert werden, ist aber nicht auf eine bestimmte Systemarchitektur begrenzt.
  • Bei 2301 wird Grafikarbeit in mehrere Knoten eingelastet, die Raytracing-Betriebe zum Rendern eines Gebiets eines Bildframes durchführen. Jeder Knoten kann bereits Daten, die zum Durchführen der Betriebe erforderlich sind, im Speicher haben. Zum Beispiel können sich zwei oder mehr der Knoten einen gemeinsamen Speicher teilen oder die lokalen Speicher der Knoten können bereits gespeicherte Daten aus vorherigen Raytracing-Betrieben haben. Alternativ oder zusätzlich können gewisse Daten zu jedem Knoten übertragen werden.
  • Bei 2302 wird das „Geistgebiet“, das für ein spezifiziertes Niveau an Entrauschen (d.h. bei einem annehmbaren Arbeitsleistungsniveau) erforderlich ist, bestimmt. Das Geistgebiet weist beliebige Daten auf, die zum Durchführen des spezifizierten Niveaus an Entrauschen notwendig sind, aufweisend Daten, in deren Besitz einer oder mehrere andere Knoten sind.
  • Bei 2303 werden Daten, die sich auf die Geistgebiete (oder Teile davon) beziehen, zwischen Knoten ausgetauscht. Bei 2304 führt jeder Knoten Entrauschen an seinem entsprechenden Gebiet (z.B. unter Verwendung der ausgetauschten Daten) durch und bei 2305 werden die Ergebnisse kombiniert, um das finale rauschfreie Bildframe zu erzeugen.
  • Ein Verwalterknoten oder primärer Knoten, wie in 22 gezeigt, kann die Arbeit in die Knoten einlasten und dann die Arbeit, die von den Knoten durchgeführt wird, kombinieren, um das finale Bildframe zu erzeugen. Eine Peerbasierte Architektur kann verwendet werden, wo die Knoten Peers sind, die Daten austauschen, um das finale Bildframe zu rendern und zu entrauschen.
  • Die hier beschriebenen Knoten (z.B. Knoten 2021-2023) können Grafikverarbeitungsrechensysteme sein, die über ein Hochgeschwindigkeitsnetzwerk zwischenverbunden sind. Alternativ können die Knoten einzelne Verarbeitungselemente sein, die an ein Hochgeschwindigkeitsspeicherfabric gekoppelt sind. Alle der Knoten können sich einen gemeinsamen virtuellen Speicherraum und/oder einen gemeinsamen physischen Speicher teilen. Alternativ können die Knoten eine Kombination aus CPUs und GPUs sein. Zum Beispiel kann der oben beschriebene Verwalterknoten 2201 eine CPU und/oder Software sein, die auf der CPU ausgeführt wird, und die Knoten 2021-2022 können GPUs und/oder Software sein, die auf den GPUs ausgeführt wird. Verschiedene unterschiedliche Arten von Knoten können verwendet werden, während sie noch mit den zugrundeliegenden Prinzipien der Erfindung übereinstimmen.
  • BEISPIELHAFTE NEURALE NETZWERKIMPLEMENTIERUNGEN
  • Es gibt viele Arten von neuralen Netzwerken; eine einfache Art von neuralem Netzwerk ist ein vorwärts gekoppeltes Netzwerk. Ein vorwärts gekoppeltes Netzwerk kann als ein azyklischer Graph implementiert sein, in dem die Knoten in Schichten eingerichtet sind. Typischerweise weist eine vorwärts gekoppelte Netzwerktopologie eine Eingangsschicht und eine Ausgangsschicht auf, die durch mindestens eine verborgene Schicht getrennt sind. Die verborgene Schicht transformiert Eingang, der durch die Eingangsschicht empfangen wird, in eine Darstellung, die zum Erzeugen von Ausgang in der Ausgangsschicht nützlich ist. Die Netzwerkknoten sind vollständig über Ränder mit den Knoten in benachbarten Schichten verbunden, aber es gibt keine Ränder zwischen Knoten innerhalb jeder Schicht. Daten, die an den Knoten einer Eingangsschicht eines vorwärts gekoppelten Netzwerks empfangen werden, werden zu den Knoten der Ausgangsschicht über eine Aktivierungsfunktion geleitet (d.h. „vorwärts gekoppelt“), die die Zustände der Knoten jeder folgenden Schicht im Netzwerk basierend auf Koeffizienten („Gewichte“) berechnet, die jeweils mit den Rändern verknüpft sind, die die Schichten verbinden. Abhänggig von dem spezifischen Modell, das durch den ausgeführten Algorithmus dargestellt ist, kann der Ausgang von dem neuralen Netzwerkalgorithmus verschiedene Formen annehmen.
  • Bevor ein Maschinenlernalgorithmus zur Modelldarstellung eines bestimmten Problems verwendet werden kann, wird der Algorithmus unter Verwendung eines Trainingsdatensatzes trainiert. Trainieren eines neuralen Netzwerks beinhaltet Auswählen einer Netzwerktopologie unter Verwendung eines Satzes von Trainingsdaten, die ein Problem darstellen, das von dem Netzwerk zu modellieren ist, Einstellen der Gewichte, bis das Netzwerkmodell mit minimalem Fehler in allen Instanzen des Trainingsdatensatzes arbeitet. Zum Beispiel wird während eines überwachten Lerntrainingsprozesses für ein neurales Netzwerk der Ausgang, der von dem Netzwerk in Antwort auf die Eingabe erzeugt wird, die eine Instanz in einem Trainingsdatensatz darstellt, mit dem „richtig“ markierten Ausgang für diese Instanz verglichen, ein Fehlersignal, das die Differenz zwischen dem Ausgang und dem markierten Ausgang darstellt, wird berechnet und die Gewichte, die mit den Verbindungen verknüpft sind, werden eingestellt, um dieses Fehler zu minimieren, wenn das Fehlersignal durch die Schichten des Netzwerks zurückgeleitet wird. Das Netzwerk wird als „trainiert“ angesehen, wenn die Fehler für jeden der Ausgänge, die aus den Instanzen des Trainingsdatensatzes erzeugt werden, minimiert sind.
  • Die Exaktheit eines Maschinenlernalgorithmus kann durch die Qualität des Datensatzes, der zum Trainieren des Algorithmus verwendet wird, signifikant beeinträchtigt werden. Der Trainingsprozess kann rechenintensiv sein und kann eine erhebliche Zeitdauer auf einem herkömmlichen Allzweckprozessor benötigen. Daher wird Parallelverarbeitungshardware verwendet, um viele Arten von Maschinenlernalgorithmen zu trainieren. Dies ist besonders zum Optimieren des Trainings neuraler Netzwerke nützlich, da die Berechnungen, die beim Einstellen der Koeffizienten in neuralen Netzwerken verwendet werden, sich natürlich für parallele Implementierungen eignen. Insbesondere wurden viele Maschinenlernalgorithmen und Softwareanwendungen angepasst, um die Parallelverarbeitungshardware in Allzweckgrafikverarbeitungsvorrichtungen zu nutzen.
  • 24 ist ein verallgemeinertes Diagramm eines Maschinenlern-Softwarestapels 2400. Eine Maschinenlernanwendung 2402 kann konfiguriert sein, ein neurales Netzwerk unter Verwendung eines Trainingsdatensatzes zu trainieren oder ein trainiertes tiefes neurales Netzwerk zum Implementieren von Maschinenintelligenz zu verwenden. Die Maschinenlernanwendung 2402 kann Trainings- und Schlussfolgerungsfunktionalität für ein neurales Netzwerk und/oder spezialisierte Software aufweisen, die zum Trainieren eines neuralen Netzwerks vor Einsatz verwendet werden kann. Die Maschinenlernanwendung 2402 kann jede Art von Maschinenintelligenz implementieren, aufweisend, aber nicht begrenzt auf Bilderkennung, Abbildung und Lokalisierung, autonome Navigation, Sprachsynthese, medizinische Bildgebung oder Sprachenübersetzung.
  • Hardwarebeschleunigung für die Maschinenlernanwendung 2402 kann über ein Maschinenlern-Framework 2404 ermöglicht werden. Das Maschinenlern-Framework 2404 kann auf hier beschriebener Hardware implementiert sein, wie dem Verarbeitungssystem 100, das die hier beschriebenen Prozessoren und Komponenten aufweist. Die für 24 beschriebenen Elemente mit denselben oder gleichen Namen wie die Elemente einer anderen Figur hierin beschreiben dieselben Elemente wie in den anderen Figuren, können auf eine gleiche Weise wie diese arbeiten oder funktionieren, können dieselben Komponenten umfassen und können mit anderen Entitäten verbunden sein, wie jenen, die hier an anderer Stelle beschrieben sind, sind aber nicht darauf begrenzt. Das Maschinenlern-Framework 2404 kann eine Bibliothek von Maschinenlern-Primitiven bereitstellen. Maschinenlernen-Primitive sind die grundlegenden Operationen, die von Maschinenlernalgorithmen gemeinsam durchgeführt werden. Ohne das Maschinenlern-Framework 2404 müssten Entwickler von Maschinenlernalgorithmen die Hauptrechenlogik, die mit dem Maschinenlernalgorithmus verknüpft ist, erstellen und optimieren, dann die Rechenlogik erneut optimieren, wenn neue parallele Prozessoren entwickelt werden. Stattdessen kann die Maschinenlernanwendung konfiguriert sein, die notwendigen Berechnungen unter Verwendung der Primitive durchzuführen, die durch das Maschinenlern-Framework 2404 bereitgestellt werden. Beispielhafte Primitive weisen Tensor-Faltungen, Aktivierungsfunktionen und Pooling auf, die Rechenoperationen sind, die durchgeführt werden, während ein Convolutional Neural Network (CNN) trainiert wird. Das Maschinenlern-Framework 2404 kann auch Primitive bereitstellen, um grundlegende lineare Algebrateilprogramme zu implementieren, die durch viele Maschinenlernalgorithmen durchgeführt werden, wie Matrix- und Vektoroperationen.
  • Das Maschinenlern-Framework 2404 kann Eingangsdaten, die von der Maschinenlernanwendung 2402 empfangen werden, verarbeiten und den richtigen Eingang zu einem Rechen-Framework 2406 erzeugen. Das Rechen-Framework 2406 kann die zugrundeliegenden Anweisungen, die dem GPGPU-Treiber 2408 bereitgestellt werden, abstrahieren, um dem Maschinenlern-Framework 2404 zu ermöglichen, Hardwarebeschleunigung über die GPGPU-Hardware 2410 zu nutzen, ohne dass das Maschinenlern-Framework 2404 genaue Kenntnis der Architektur der GPGPU-Hardware 2410 haben muss. Zusätzlich kann das Rechen-Framework 2406 Hardwarebeschleunigung für das Maschinenlern-Framework 2404 über eine Reihe von Arten und Generationen der GPGPU-Hardware 2410 ermöglichen.
  • GPGPU- Maschinenlernbeschleunigung
  • 25 veranschaulicht ein Multi-GPU-Rechensystem 2500, das eine Variante des Verarbeitungssystems 100 sein kann. Daher offenbart die Offenbarung beliebiger Merkmale in Kombination mit dem Verarbeitungssystem 100 hierin auch eine entsprechende Kombination mit Multi-GPU-Rechensystem 2500, ist aber nicht auf eine solche begrenzt. Die Elemente von 25 mit denselben oder gleichen Namen wie die Elemente einer anderen Figur hierin beschreiben dieselben Elemente wie in den anderen Figuren, können auf eine gleiche Weise wie diese arbeiten oder funktionieren, können dieselben Komponenten umfassen und können mit anderen Entitäten verbunden sein, wie jenen, die hier an anderer Stelle beschrieben sind, sind aber nicht darauf begrenzt. Das Multi-GPU-Rechensystem 2500 kann einen Prozessor 2502 aufweisen, der an mehrere GPGPUs 2506A-D über einen Host-Schnittstellenschalter 2504 verbunden ist. Der Host-Schnittstellenschalter 2504 kann zum, Beispiel eine PCI Express-Schaltvorrichtung sein, die den Prozessor 2502 an einen PCI Express-Bus koppelt, über den der Prozessor 2502 mit dem Satz von GPGPUs 2506A-D kommunizieren kann. Jeder 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 zwischenverbunden sein. Die Hochgeschwindigkeits-GPU-zu-GPU-Links können mit jeder der GPGPUs 2506A-D über einen dedizierten GPU-Link verbunden sein. Die P2P-GPU-Links 2516 ermöglichen direkte Kommunikation zwischen jeder der GPGPUs 2506A-D, ohne Kommunikation über den Host-Schnittstellenbus zu benötigen, mit dem der Prozessor 2502 verbunden ist. Wenn GPU-zu-GPU-Verkehr zu den P2P-GPU-Links gelenkt wird, bleibt der Host-Schnittstellenbus für einen Systemspeicherzugriff verfügbar oder für eine Kommunikation mit anderen Instanzen des Multi-GPU-Rechensystems 2500, zum Beispiel über eine oder mehrere Netzwerkvorrichtungen. Anstelle einer Verbindung der GPGPUs 2506A-D mit dem Prozessor 2502 über den Host-Schnittstellenschalter 2504 kann der Prozessor 2502 direkte Unterstützung für die P2P-GPU-Links 2516 aufweisen und somit direkt mit den GPGPUs 2506A-D verbunden sein.
  • Maschinenlernimplementierungen für ein neurales Netzwerk
  • Die hier beschriebene Rechenarchitektur kann konfiguriert sein, die Arten von Parallelverarbeitung durchzuführen, die besonders für Training und Einsatz neuraler Netzwerke für Maschinenlernen geeignet sind. Ein neurales Netzwerk kann als ein Netzwerk von Funktionen mit einer Graphenbeziehung verallgemeinert werden. Wie in der Technik allgemein bekannt ist, gibt es eine Reihe von Arten von neuralen Netzwerkimplementierungen, die beim Maschinenlernen verwendet werden. Eine beispielhafte Art von neuralem Netzwerk ist das vorwärts gekoppelte Netzwerk, wie zuvor beschrieben.
  • Eine zweite beispielhafte Art von neuralem Netzwerk ist das Convolutional Neural Network (CNN). Ein CNN ist ein spezialisiertes vorwärts gekoppeltes neurales Netzwerk zur Verarbeitung von Daten mit einer bekannten, gitterartigen Topologie, wie Bilddaten. Daher werden CNNs gemeinsam zum Berechnen von Sicht- und Bilderkennungsanwendungen verwendet, aber sie können auch für andere Arten von Strukturerkennung, wie Sprech- und Sprachverarbeitung verwendet werden. Die Knoten in der CNN Eingangsschicht sind zu einem Satz von „Filtern“ organisiert (Merkmaldetektoren, die durch die rezeptiven Felder inspiriert sind, die in der Retina vorgefunden werden) und der Ausgang jedes Satzes von Filtern wird zu Knoten in aufeinanderfolgenden Schichten des Netzwerks geleitet. Die Berechnungen für ein CNN weisen Anwenden der mathematischen Konvolutionsoperation an jedem Filter auf, um den Ausgang für diesen Filter zu erzeugen. Konvolution ist eine spezielle Art von mathematischer Operation, die von zwei Funktionen durchgeführt wird, um eine dritte Funktion zu erzeugen, die eine modifizierte Version einer der zwei ursprünglichen Funktionen ist. In der Terminologie des Konvolutionsnetzwerks kann die erste Funktion für die Konvolution als der Eingang bezeichnet werden, während die zweite Funktion als der Konvolutionskernel bezeichnet werden kann. Der Ausgang kann als die Merkmalskarte bezeichnet werden. Zum Beispiel kann der Eingang zu einer Konvolutionsschicht eine mehrdimensionale Gruppe von Daten sein, die die verschiedenen Farbkomponenten eines Eingangsbilds definiert. Der Konvolutionskernel kann eine mehrdimensionale Gruppe von Parametern sein, wobei die Parameter durch den Trainingsprozess für das neurale Netzwerk angepasst werden.
  • Rekurrente neurale Netzwerke (RNNs) sind eine Familie von vorwärtsgekoppelten neuralen Netzwerken, die Feedback-Verbindungen zwischen Schichten aufweisen. RNNs ermöglichen Modellierung von aufeinanderfolgenden Daten durch Teilen von Parameterdaten über verschiedene Teile des neuralen Netzwerks. Die Architektur für ein RNN weist Zyklen auf. Die Zyklen stellen den Einfluss eines gegenwärtigen Werts einer Variable auf ihren eigenen Wert zu einem zukünftigen Zeitpunkt dar, da mindestens ein Teil der Ausgangsdaten von dem RNN als Feedback für Verarbeitung nach Eingabe in eine Abfolge verwendet wird. Dieses Merkmal macht RNNs für Sprachverarbeitung aufgrund seiner variablen Eigenschaft, in der Sprachdaten zusammengesetzt sein können, besonders nützlich.
  • Die unten beschriebenen Figuren stellen beispielhafte vorwärtsgekoppelte CNN und RNN Netzwerke dar, beschreiben auch einen allgemeinen Prozess für Training beziehungsweise Einsatz dieser Arten von Netzwerken. Es ist klar, dass diese Beschreibungen beispielhaft und nicht begrenzend sind und die veranschaulichten Konzepte im Allgemeinen bei tiefen neuralen Netzwerken und Maschinenlerntechniken im Allgemeinen angewendet werden können.
  • Die oben beschriebenen, beispielhaften, neuralen Netzwerke können verwendet werden, um tiefes Lernen durchzuführen. Tiefes Lernen ist Maschinenlernen unter Verwendung tiefer neuraler Netzwerke. Die tiefen neuralen Netzwerke, die beim tiefen Lernen verwendet werden, sind künstliche neurale Netzwerke, die aus mehreren verborgenen Schichten zusammengesetzt sind, im Gegensatz zu flachen neuralen Netzwerken, die nur eine einzige verborgene Schicht aufweisen. Tiefere neurale Netzwerke sind im Allgemeinen rechenintensiver zu trainieren. Die zusätzlichen verborgenen Schichten des Netzwerks ermöglichen jedoch mehrstufige Mustererkennung, die zu verringertem Ausgangsfehler relativ zu flachen Maschinenlerntechniken führt.
  • Tiefe neurale Netzwerke, die beim tiefen Lernen verwendet werden, weisen typischerweise ein Frontend-Netzwerk zum Durchführen von Merkmalserkennung auf, das an ein Backend-Netzwerk gekoppelt ist, das ein mathematisches Modell darstellt, das Operationen (z.B. Objektklassifizierung, Spracherkennung usw.) basierend auf der Merkmalsdarstellung durchführen kann, die dem Modell bereitgestellt wird. Tiefes Lernen ermöglicht eine Durchführung von Maschinenlernen, ohne von Hand gestaltete Merkmalsbildung zu erfordern, die für das Modell durchgeführt wird. Stattdessen können tiefe neurale Netzwerke Merkmale basierend auf statistischer Struktur oder Korrelation in den Eingangsdaten lernen. Die gelernten Merkmale können einem mathematischen Modell bereitgestellt werden, das erfasste Merkmale auf einen Ausgang abbilden kann. Das mathematische Modell, das von dem Netzwerk verwendet wird, ist im Allgemeinen für die bestimmte durchzuführende Aufgabe spezialisiert und verschiedene Modelle werden zur Durchführung verschiedener Aufgaben verwendet.
  • Sobald das neurale Netzwerk strukturiert ist, kann ein Lernmodell an dem Netzwerk angewendet werden, um das Netzwerk zu trainieren, bestimmte Aufgaben durchzuführen. Das Lernmodell beschreibt, wie die Gewichte in dem Modell einzustellen sind, um den Ausgangsfehler des Netzwerks zu verringern. Rückübertragung von Fehlern ist ein allgemeines Verfahren, das zum Trainieren neuraler Netzwerke verwendet wird. Ein Eingangsvektor wird dem Netzwerk zur Verarbeitung präsentiert. Der Ausgang des Netzwerks wird mit dem gewünschten Ausgang unter Verwendung einer Verlustfunktion verglichen und ein Fehlerwert wird für jedes der Neuronen in der Ausgangsschicht berechnet. Die Fehlerwerte werden dann zurückübertragen, bis jedes Neuron einen zugehörigen Fehlerwert hat, der annähernd seinen Beitrag zu dem ursprünglichen Ausgang darstellt. Das Netzwerk kann dann aus diesen Fehlern unter Verwendung eines Algorithmus lernen, wie des stochastischen Gradientenabstiegsalgorithmus, um die Gewichte des neuralen Netzwerks zu aktualisieren.
  • 26-27 veranschaulichen ein beispielhaftes Convolutional Neural Network. 26 veranschaulicht verschiedene Schichten in einem CNN. Wie in 26 dargestellt, kann ein beispielhaftes CNN, das zur Modelldarstellung von Bildverarbeitung verwendet wird, Eingang 2602 empfangen, der die roten, grünen und blauen (RGB) Komponenten eines Eingangsbilds beschreibt. Der Eingang 2602 kann durch mehrere Faltungsschichten verarbeitet werden (z.B. Faltungsschicht 2604, Faltungsschicht 2606). Der Ausgang von den mehreren Faltungsschichten kann optional durch einen Satz vollständig verbundener 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. Der Ausgang von den vollständig verbundenen Schichten 2608 kann verwendet werden, um ein Ausgangsergebnis von dem Netzwerk zu erzeugen. Die Aktivierungen in den vollständig verbundenen Schichten 2608 können unter Verwendung von Matrixmultiplikation anstelle von Konvolution berechnet werden. Nicht alle CNN-Implementierungen verwenden vollständig verbundene Schichten. Zum Beispiel kann in manchen Implementierungen die Faltungsschicht 2606 Ausgang für das CNN erzeugen.
  • Die Faltungsschichten sind spärlich verbunden, was sich von herkömmlicher neuraler Netzwerkkonfiguration unterscheidet, die in den vollständig verbundenen Schichten 2608 vorgefunden wird. Herkömmliche neurale Netzwerkschichten sind vollständig verbunden, sodass jede Ausgangseinheit mit jeder Eingangseinheit interagiert. Die Faltungsschichten sind jedoch spärlich verbunden, da der Ausgang der Konvolution eines Feldes (anstelle des jeweiligen Zustandswerts jedes der Knoten in dem Feld) in die Knoten der folgenden Schicht eingegeben wird, wie veranschaulicht. Die Kernels, die mit den Faltungsschichten verknüpft sind, führen Konvolutionsoperationen durch, deren Ausgang zu der nächsten Schicht gesendet wird. Die Dimensionalitätsreduktion, die in den Faltungsschichten durchgeführt wird, ist ein Aspekt, der dem CNN ermöglicht, auf eine Verarbeitung großer Bilder skaliert zu werden.
  • 27 veranschaulicht beispielhafte Berechnungsstufen in einer Faltungsschicht eines CNN. Eingang zu einer Faltungsschicht 2712 eines CNN kann in drei Stufen einer Faltungsschicht 2714 verarbeitet werden. Die drei Stufen können eine Konvolutionsstufe 2716, eine Detektorstufe 2718 und eine Pooling-Stufe 2720 aufweisen. Die Konvolutionsschicht 2714 kann dann Daten an eine folgende Faltungsschicht ausgeben. Die letzte Faltungsschicht des Netzwerks kann Ausgangsmerkmalsabbildungsdaten ausgeben oder Eingang zu einer vollständig verbundenen Schicht bereitstellen, um zum Beispiel einen Klassifizierungswert für den Eingang zu dem CNN zu erzeugen.
  • In der Konvolutionsstufe 2716 werden mehrere Konvolutionen parallel durchgeführt, um einen Satz linearer Aktivierungen zu erzeugen. Die Konvolutionsstufe 2716 kann eine affine Transformation aufweisen, die jede Transformation ist, die als eine lineare Transformation plus eine Übersetzung spezifiziert werden kann. Affine Transformationen weisen Rotationen, Übersetzungen, Skalieren und Kombinationen dieser Transformationen auf. Die Konvolutionsstufe berechnet den Ausgang von Funktionen (z.B. Neuronen), die mit bestimmten Gebieten in dem Eingang verbunden sind, die als die lokale Gebiet bestimmt werden können, die mit dem Neuron verknüpft ist. Die Neuronen berechnen ein Skalarprodukt zwischen den Gewichten der Neuronen und dem Gebiet in dem lokalen Eingang, mit dem die Neuronen verbunden sind. Der Ausgang von der Konvolutionsstufe 2716 definiert einen Satz linearer Aktivierungen, die durch folgende Stufen der Faltungsschicht 2714 verarbeitet werden.
  • Die linearen Aktivierungen können durch eine Detektorstufe 2718 verarbeitet werden. In der Detektorstufe 2718 wird jede lineare Aktivierung durch eine nicht lineare Aktivierungsfunktion verarbeitet. Die nicht lineare Aktivierungsfunktion erhöht die nicht linearen Eigenschaften des gesamten Netzwerks, ohne die rezeptiven Felder der Faltungsschicht zu beeinflussen. Es können mehrere Arten der nicht linearen Aktivierungsfunktionen verwendet werden. Eine bestimmte Art ist die gleichgerichtete lineare Einheit (ReLU, Rectified Linear Unit), die eine Aktivierungsfunktion verwendet, definiert als f(x) = max(0, x), sodass die Aktivierung einen Schwellenwert bei null hat.
  • Die Pooling-Stufe 2720 verwendet eine Pooling-Funktion, die den Ausgang der Faltungsschicht 2706 mit einer Zusammenfassungsstatistik der nahen Ausgänge ersetzt. Die Pooling-Funktion kann verwendet werden, um Übersetzungsinvarianz in das neurale Netzwerk einzuführen, sodass kleine Übersetzungen zu dem Eingang die gepoolten Ausgänge nicht verändern. Invarianz bei lokaler Übersetzung kann in Szenarien nützlich sein, in welchen die Gegenwart eines Merkmals in den Eingangsdaten wichtiger ist als die präzise Stelle des Merkmals. Verschiedene Arten von Pooling-Funktionen können während der Pooling-Stufe 2720 verwendet werden, aufweisend Maximum-Pooling, Durchschnitts-Pooling und 12-Norm Pooling. Zusätzlich weisen manche CNN Implementierungen keine Pooling-Stufe auf. Stattdessen haben solche Implementierungen eine ergänzende und zusätzliche Konvolutionsstufe mit einer erhöhten Länge relativ zu den vorherigen Konvolutionsstufen.
  • Der Ausgang von der Faltungsschicht 2714 kann dann durch die nächste 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ährend die zweite Faltungsschicht an eine erste Schicht der vollständig verbundenen Schichten 2808 ausgeben kann.
  • 28 veranschaulicht ein beispielhaftes rekurrentes neurales Netzwerk 2800. In einem rekurrenten neuralen Netzwerk (RNN) beeinflusst der vorherige Zustand des Netzwerks den Ausgang des aktuellen Zustands des Netzwerks. RNNs können auf verschiedene Weisen unter Verwendung einer Vielzahl von Funktionen errichtet werden. Die Verwendung von RNNs dreht sich im Allgemeinen um die Verwendung mathematischer Modelle, um die Zukunft basierend auf einer früheren Abfolge von Eingängen vorherzusagen. Zum Beispiel kann ein RNN verwendet werden, um statistische Sprachmodellierung durchzuführen, um ein anstehendes Wort aufgrund einer vorherigen Abfolge von Wörtern vorherzusagen. Das veranschaulichte RNN 2800 kann so beschrieben werden, dass es eine Eingangsschicht 2802, die einen Eingangsvektor empfängt, verborgene Schichten 2804 zum Implementieren einer rekurrenten Funktion, einen Feedback-Mechanismus 2805, um einen ‚Speicher‘ vorheriger Zustände zu ermöglichen, und eine Ausgangsschicht 2806 zum Ausgeben eines Ergebnisses hat. Das RNN 2800 arbeitet auf der Basis von Zeitschritten. Der Zustand des RNN zu einem bestimmten Zeitschritt wird auf der Basis des vorherigen Zeitschritts über den Feedback-Mechanismus 2805 beeinflusst. Für einen bestimmten Zeitschritt ist der Zustand der verborgenen Schichten 2804 durch den vorherigen Zustand und den Eingang zum aktuellen Zeitschritt definiert. Ein anfänglicher Eingang (x1) bei einem ersten Zeitschritt kann durch die verborgene Schicht 2804 verarbeitet werden. Ein zweiter Eingang (x2) kann durch die verborgene Schicht 2804 unter Verwendung von Zustandsinformationen verarbeitet werden, die während der Verarbeitung des anfänglichen Eingangs (x1) bestimmt werden. Ein bestimmter Zustand kann als s_t=f(Ux_t+ Ws_(t-1))berechnet werden, wo U und W Parametermatrizen sind. Die Funktion f ist im Allgemeinen eine Nichtlinearität, wie die hyperbolische Tangentenfunktion (Tanh) oder eine Variante der Gleichrichterfunktion f(x) = max(0, x). Die bestimmte mathematische Funktion, die in den verborgenen Schichten 2804 verwendet wird, kann jedoch abhängig von den bestimmten Implementierungsdetails des RNN 2800 variieren.
  • Zusätzlich zu den beschriebenen CNN und RNN Basisnetzwerken können Variationen an diesen Netzwerken möglich sein. Eine beispielhafte RNN Variante ist das lange kurzfristige Speicher- (LSTM, Long Short Term Memory) RNN. LSTM RNNs sind im Stande, langfristige Abhängigkeiten zu lernen, die für Verarbeitung langer Sprachabfolgen notwendig sind. Eine Variante an dem CNN ist ein Convolutional Deep Belief Network, das eine ähnliche Struktur wie ein CNN hat und auf ähnliche Weise wie ein Deep Belief Network trainiert wird. Ein Deep Belief Network (DBN) ist ein generatives neurales Netzwerk, das aus mehreren Schichten stochastischer (zufälliger) Variabler besteht. DBNs können Schicht für Schicht unter Verwendung von begierigem unüberwachten Lernen trainiert werden. Die gelernten Gewichte des DBN können dann verwendet werden, um neurale Prä-Trainingsnetzwerke bereitzustellen, indem ein optimaler anfänglicher Satz von Gewichten für das neurale Netzwerk bestimmt wird.
  • 29 veranschaulicht Training und Nutzung eines tiefen neuralen Netzwerks. Sobald ein bestimmtes Netzwerk für eine Aufgabe strukturiert ist, wird das neurale Netzwerk unter Verwendung eines Trainingsdatensatzes 2902 trainiert. Verschiedene Training-Frameworks 2904 wurden entwickelt, um Hardwarebeschleunigung des Trainingsprozesses zu ermöglichen. Zum Beispiel kann das oben beschriebene Maschinenlern-Framework als ein Training-Framework konfiguriert sein. Das Training-Framework 2904 kann an einem untrainierten neuralen Netzwerk 2906 festhaken und dem untrainierten neuralen Netz ermöglichen, unter Verwendung der hier beschriebenen Parallelverarbeitungsressourcen trainiert zu werden, um ein trainiertes neurales Netz 2908 zu erzeugen.
  • Zum Starten des Trainingsprozesses können die anfänglichen Gewichte zufällig oder durch Prä-Training unter Verwendung eines Deep Belief Network gewählt werden. Der Trainingszyklus kann dann entweder auf überwachte oder unüberwachte Weise durchgeführt werden.
  • Überwachtes Lernen ist ein Lernverfahren, in dem Training als eine vermittelte Operation durchgeführt wird, wie wenn der Trainingsdatensatz 2902 Eingang gepaart mit dem gewünschten Ausgang für den Eingang aufweist oder wo der Trainingsdatensatz Eingang mit bekanntem Ausgang aufweist und der Ausgang des neuralen Netzwerks manuell abgestuft ist. Das Netzwerk verarbeitet die Eingänge und vergleicht die resultierenden Ausgänge mit einem Satz erwarteter oder gewünschter Ausgänge. Fehler werden dann durch das System zurück übertragen. Das Training-Framework 2904 kann einstellen, um die Gewichte einzustellen, die das untrainierte neurale Netzwerk 2906 steuern. Das Training-Framework 2904 kann Werkzeuge zum Überwachen bereitstellen, wie gut das untrainierte neurale Netzwerk 2906 zu einem Modell konvergiert, das zum Erzeugen korrekter Antworten basierend auf bekannten Eingangsdaten geeignet ist. Der Trainingsprozess erfolgt wiederholt, während die Gewichte des Netzwerks eingestellt werden, um den Ausgang zu verfeinern, der von dem neuralen Netzwerk erzeugt wird. Der Trainingsprozess kann fortfahren, bis das neurale Netzwerk eine statistisch gewünschte Genauigkeit erreicht, die mit einem trainierten neuralen Netz 2908 verknüpft ist. Das trainierte neurale Netzwerk 2908 kann dann eingesetzt werden, um eine beliebige Anzahl von Maschinenlernoperationen zu implementieren.
  • Unüberwachtes Lernen ist ein Lernverfahren, in dem das Netzwerk versucht, sich selbst unter Verwendung unmarkierter Daten zu trainieren. Daher weist für unüberwachtes Lernen der Trainingsdatensatz 2902 Eingangsdaten ohne zugehörige Ausgangsdaten auf. Das untrainierte neurale Netzwerk 2906 kann Gruppierungen in dem unmarkierten Eingang lernen und kann bestimmen, wie einzelne Eingänge mit dem gesamten Datensatz zusammenhängen. Unüberwachtes Training kann verwendet werden, um eine Selbstorganisierungskarte zu erstellen, die eine Art von trainiertem neuralen Netzwerk 2907 ist, das im Stande ist, Operationen durchzuführen, die beim Verringern der Dimensionalität von Daten nützlich sind. Unüberwachtes Training kann auch zum Durchführen einer Anomaliedetektion verwendet werden, die die Identifizierung von Datenpunkten in einem Eingangsdatensatz ermöglicht, die von den normalen Mustern der Daten abweichen.
  • Variationen beim überwachten und unüberwachten Training können auch benutzt werden. Semi-überwachtes Lernen ist eine Technik, in der der Trainingsdatensatz 2902 eine Mischung aus markierten und unmarkierten Daten derselben Verteilung aufweist. Inkrementelles Lernen ist eine Variante von überwachtem Lernen, bei der Eingangsdaten kontinuierlich verwendet werden, um das Modell weiter zu trainieren. Inkrementelles Lernen ermöglicht dem trainierten neuralen Netzwerk 2908, sich an die neuen Daten 2912 anzupassen, ohne das Wissen zu vergessen, das in das Netzwerk während des anfänglichen Trainings eingebracht wird.
  • Ob überwacht oder unüberwacht, der Trainingsprozess für besonders tiefe neurale Netzwerke kann zu rechenintensiv für einen einzelnen Rechenknoten sein. Stattdessen kann bei Verwendung eines einzelnen Rechenknotens ein verteiltes Netzwerk von Berechnungsknoten verwendet werden, um den Trainingsprozess zu beschleunigen.
  • 30A ist ein Blockdiagramm, das verteiltes Lernen zeigt. Verteiltes Lernen ist ein Trainingsmodell, das mehrere verteilte Berechnungsknoten aufweist, wie die oben beschriebenen Knoten, um überwachtes oder unüberwachtes Training eines neuralen Netzwerks durchzuführen. Die verteilten Berechnungsknoten können jeweils einen oder mehrere Host-Prozessoren und einen oder mehrere der Allzweckverarbeitungsknoten, wie die hoch parallele Allzweckgrafikverarbeitungseinheit aufweisen. Wie veranschaulicht, kann verteiltes Lernen mit Modellparallelismus 3002, Datenparallelismus 3004 oder einer Kombination von Modell- und Datenparallelismus durchgeführt werden.
  • Im Modellparallelismus 3002 können verschiedenen Berechnungsknoten in einem verteilten System Trainingsberechnungen für verschiedene Teile eines einzelnen Netzwerks durchführen. Zum Beispiel kann jede Schicht eines neuralen Netzwerks durch einen anderen Verarbeitungsknoten des verteilten Systems trainiert werden. Die Vorteile von Modellparallelismus weisen die Fähigkeit auf, auf besonders große Modelle zu skalieren. Teilen der Berechnungen, die mit verschiedenen Schichten des neuralen Netzwerks verknüpft sind, ermöglicht das Training sehr großer neuraler Netzwerke, in welchen die Gewichte aller Schichten nicht in den Speicher eines einzelnen Berechnungsknotens passen würden. In manchen Fällen kann Modellparallelismus beim Durchführen eines unüberwachten Trainings großer neuraler Netzwerke besonders nützlich sein.
  • Im Datenparallelismus 3004 haben die verschiedenen Knoten des verteilten Netzwerks eine vollständige Instanz des Modells und jeder Knoten empfängt einen anderen Teil der Daten. Die Ergebnisse aus den verschiedenen Knoten werden dann kombiniert. Während verschiedene Ansätze für Datenparallelismus möglich sind, erfordern datenparallele Trainingsansätze alle eine Technik zum Kombinieren von Ergebnissen und Synchronisieren der Modellparameter zwischen jedem Knoten. Beispielhafte Ansätze zum Kombinieren von Daten weisen Parameterdurchschnittsbildung und Datenparallelismus basierend auf Aktualisierung auf. Parameterdurchschnittsbildung trainiert jeden Knoten an einem Teilsatz der Trainingsdaten und Sätzen der globalen Parameter (z.B. Gewichte, Biases) auf den Durchschnitt der Parameter von jedem Knoten. Parameterdurchschnittsbildung verwendet einen zentralen Parameterserver, der die Parameterdaten hält. Auf Aktualisierung basierter Datenparallelismus ist Parameterdurchschnittsbildung ähnlich, außer, dass anstelle einer Übertragung von Parametern von dem Knoten zu dem Parameterserver die Aktualisierungen zu dem Modell übertragen werden. Zusätzlich kann auf Aktualisierung basierter Datenparallelismus auf dezentralisierte Weise durchgeführt werden, wo die Aktualisierungen komprimiert sind und zwischen Knoten übertragen werden.
  • Kombinierter Modell- und Datenparallelismus 3006 kann zum Beispiel in einem verteilten System implementiert werden, in dem jeder Berechnungsknoten mehrere GPUs aufweist. Jeder Knoten kann eine vollständige Instanz des Modells haben, wobei separate GPUs in jedem Knoten zum Trainieren verschiedener Teile des Modells verwendet werden.
  • Verteiltes Training hat erhöhten Mehraufwand relativ zu Training an einer einzelnen Maschine. Die hier beschriebenen parallelen Prozessoren und GPGPUs können jedoch verschiedene Techniken implementieren, um den Mehraufwand eines verteilten Trainings zu verringern, aufweisend Techniken, die GPU-zu-GPU Datentransfer hoher Bandbreite und beschleunigte ferne Datensynchronisation ermöglichen.
  • Beispielhafte Maschinenlernanwendungen
  • Maschinenlernen kann angewendet werden, um eine Reihe von technologischen Problemen zu lösen, aufweisend, ohne aber darauf beschränkt zu sein, Computer Vision, autonomes Lenken und Navigation, Spracherkennung und Sprachenverarbeitung. Computer Vision ist traditionell eines der aktivsten Forschungsgebiete für Maschinenlernanwendungen. Anwendungen von Computer Vision reichen von Reproduzieren von Sehfähigkeiten eines Menschen, wie Erkennen von Gesichtern, bis zum Erstellen neuer Kategorien von Sehfähigkeiten. Zum Beispiel können Computer Visionsanwendungen konfiguriert sein, Schallwellen aus den Vibrationen zu erkennen, die von Objekten herbeigeführt werden, die in einem Video sichtbar sind. Durch parallele Prozessoren beschleunigtes Maschinenlernen ermöglicht, dass Computer Visionsanwendungen unter Verwendung eines signifikant größeren Trainingsdatensatzes trainiert werden als zuvor machbar war, und ermöglicht den Einsatz von Schlussfolgerungssystemen unter Verwendung von leistungsarmen parallelen Prozessoren.
  • Durch parallele Prozessoren beschleunigtes Maschinenlernen hat autonome Fahranwendungen, aufweisend Spur- und Verkehrszeichenerkennung, Hindernisvermeidung, Navigation und Fahrsteuerung. Beschleunigte Maschinenlerntechniken können verwendet werden, um Fahrmodelle basierend auf Datensätzen zu trainieren, die die richtigen Reaktionen auf einen bestimmten Trainingseingang definieren. Die hier beschriebenen parallelen Prozessoren können rasches Training der zunehmend komplexen neuralen Netzwerke ermöglichen, die für autonome Fahrlösungen verwendet werden, und ermöglichen die Nutzung von Schlussfolgerungsprozessoren geringer Leistung in einer mobilen Plattform, die zur Integration in autonome Fahrzeuge geeignet sind.
  • Durch parallele Prozessoren beschleunigte tiefe neurale Netzwerke haben Maschinenlernansätze zur automatischen Spracherkennung (ASR) ermöglicht. ASR weist die Erstellung einer Funktion auf, die die wahrscheinlichste linguistische Abfolge aufgrund einer eingegebenen akustischen Abfolge berechnet. Beschleunigtes Maschinenlernen unter Verwendung tiefer neuraler Netzwerke hat den Ersatz der verborgenen Markov Modelle (HMMs) und Gaußschen Mischungsmodelle (GMMs) ermöglicht, die zuvor für ASR verwendet wurden.
  • Durch parallele Prozessoren beschleunigtes Maschinenlernen kann auch zum Beschleunigen von Verarbeitung natürlicher Sprache verwendet werden. Automatische Lernprozeduren können statistische Schlussfolgerungsalgorithmen nutzen, um Modelle zu erzeugen, die gegenüber fehlerhaftem oder unvertrautem Eingang robust sind. Beispielhafte Prozessoranwendungen bei natürlicher Sprache weisen automatische Maschinenübersetzung zwischen menschlichen Sprachen auf.
  • Die Parallelverarbeitungsplattformen, die zum Maschinenlernen verwendet werden, können in Trainingsplattformen und Nutzungsplattformen unterteilt werden. Trainingsplattformen sind im Allgemeinen hoch parallel und weisen Optimierungen auf, um Multi-GPU-Einzelknoten-Training und Multi-Knoten, Multi-GPU-Training zu beschleunigen. Beispielhafte parallele Prozessoren, die für Training geeignet sind, weisen die hoch parallel Allzweckgrafikverarbeitungseinheit und/oder die hier beschriebenen Multi-GPU-Rechensysteme auf. Im Gegensatz dazu weisen eingesetzte Maschinenlernplattformen im Allgemeinen leistungsärmere parallele Prozessoren auf, die zur Verwendung in Produkten wie Kameras, autonomen Robotern und autonomen Fahrzeugen geeignet sind.
  • 30B veranschaulicht ein beispielhaftes Schlussfolgerungssystem auf einem Chip (SOC) 3100, das zum Durchführen von Schlussfolgerung unter Verwendung eines trainierten Modells geeignet ist. Die Elemente von 30B mit denselben oder gleichen Namen wie die Elemente einer anderen Figur hierin beschreiben dieselben Elemente wie in den anderen Figuren, können auf eine gleiche Weise wie diese arbeiten oder funktionieren, können dieselben Komponenten umfassen und können mit anderen Entitäten verbunden sein, wie jenen, die hier an anderer Stelle beschrieben sind, sind aber nicht darauf begrenzt. Das SOC 3100 kann Verarbeitungskomponenten integrieren, aufweisend einen Medienprozessor 3102, einen Vision-Prozessor 3104, eine GPGPU 3106 und einen Multikernprozessor 3108 Das SOC 3100 kann zusätzlich On-Chip-Speicher 3105 enthalten, der einen geteilten On-Chip-Datenpool ermöglichen kann, der für jede der Verarbeitungskomponenten zugänglich ist. Die Verarbeitungskomponenten können für leistungsarmen Betrieb optimiert sein, um Nutzung für eine Reihe von Maschinenlernplattformen zu ermöglichen, aufweisend autonome Fahrzeuge und autonome Roboter. Zum Beispiel kann eine Implementierung des SOC 3100 als ein Teil des Hauptsteuersystems für ein autonomes Fahrzeug verwendet werden. Wenn das SOC 3100 zur Verwendung in autonomen Fahrzeugen konfiguriert ist, ist das SOC so gestaltet und konfiguriert, dass es den relevanten Funktionssicherheitsstandards der Nutzungsrechtsprechung entspricht.
  • Während des Betriebs können der Medienprozessor 3102 und Vision-Prozessor 3104 zusammenarbeiten, um Computer Vision-Operationen zu beschleunigen. Der Medienprozessor 3102 kann Decodieren mit niedriger Latenz von mehreren hochauflösenden (z.B. 4K, 8K) Videostreams ermöglichen. Die decodierten Videostreams können in einen Puffer in dem On-Chip-Speicher 3105 geschrieben werden. Der Vision-Prozessor 3104 kann dann das decodierte Video analysieren und vorläufige Verarbeitungsoperationen an den Frames des decodierten Videos in Vorbereitung einer Verarbeitung der Frames unter Verwendung eines trainierten Bilderkennungsmodells durchführen. Zum Beispiel kann der Vision-Prozessor 3104 Konvolutionsoperationen für ein CNN beschleunigen, das verwendet wird, um Bilderkennung an den hochauflösenden Videodaten durchzuführen, während Backend-Modellberechnungen durch die GPGPU 3106 durchgeführt werden.
  • Der Multikernprozessor 3108 kann Steuerlogik aufweisen, die Sequenzierung und Synchronisation von Datentransfers und geteilte Speicheroperationen unterstützt, die durch den Medienprozessor 3102 und den Vision-Prozessor 3104 durchgeführt werden. Der Multikernprozessor 3108 kann auch als ein Anwendungsprozessor dienen, um Softwareanwendungen auszuführen, die die Schlussfolgerungsrechenkapazität der GPGPU 3106 nutzen können. Zum Beispiel kann mindestens ein Teil der Navigations- und Fahrlogik in Software implementiert sein, die auf dem Multikernprozessor 3108 läuft. Solche Software kann direkt Berechnungsarbeitslasten an die GPGPU 3106 ausgeben oder die Berechnungsarbeitslasten können an den Multikernprozessor 3108 ausgegeben werden, der mindestens einen Teil dieser Operationen an die GPGPU 3106 abladen kann.
  • Die GPGPU 3106 kann Rechen-Cluster wie eine leistungsarme Konfiguration der Verarbeitungsclusters DPLAB06A-DPLAB06H in der hoch parallelen Allzweckgrafikverarbeitungseinheit DPLAB00 aufweisen. Die Rechen-Cluster in der GPGPU 3106 können Befehle unterstützen, die besonders optimiert sind, um Schlussfolgerungsberechnungen an einem trainierten neuralen Netzwerk durchzuführen. Zum Beispiel kann die GPGPU 3106 Befehle unterstützen, um Berechnungen geringer Präzision, wie 8-Bit und 4-Bit ganzzahlige Vektoroperationen durchzuführen.
  • Raytracing- Architektur
  • In einer Implementierung weist der Grafikprozessor Schaltkreis und/oder Programmcode zum Durchführen von Echtzeit-Raytracing auf. Ein dedizierter Satz von Raytracing-Kernen kann in dem Grafikprozessor aufgewiesen sein, um die verschiedenen hier beschriebenen Raytracing-Betriebe durchzuführen, aufweisend Strahlquerungs- und/oder Strahlskreuzungsbetriebe. Zusätzlich zu den Raytracing-Kernen können auch mehrere Sätze von Grafikverarbeitungskernen zum Durchführen programmierbarer Schattierungsbetriebe und mehrere Sätze von Tensor-Kernen zum Durchführen von Matrixoperationen an Tensordaten aufgewiesen sein.
  • 31 veranschaulicht einen beispielhaften Teil einer solchen Grafikverarbeitungseinheit (GPU) 3105, die dedizierte Sätze von Grafikverarbeitungsressourcen aufweist, die in Multikerngruppen 3100A-N eingerichtet sind. Die Grafikverarbeitungseinheit (GPU) 3105 kann eine Variante des Grafikprozessors 300, der GPGPU 1340 und/oder eines anderen hier beschriebenen Grafikprozessors sein. Daher offenbart die Offenbarung beliebiger Merkmale für Grafikprozessoren auch eine entsprechende Kombination mit der GPU 3105, ist aber nicht auf eine solche begrenzt. Ferner beschreiben die Elemente von 31 mit denselben oder gleichen Namen wie die Elemente einer anderen Figur hierin dieselben Elemente wie in den anderen Figuren, können auf eine gleiche Weise wie diese arbeiten oder funktionieren, können dieselben Komponenten umfassen und können mit anderen Entitäten verbunden sein, wie jenen, die hier an anderer Stelle beschrieben sind, sind aber nicht darauf begrenzt. Während die Details nur einer einzigen Multikerngruppe 3100A bereitgestellt sind, ist klar, dass andere Multikerngruppen 3100B-N mit denselben oder ähnlichen Sätzen von Grafikverarbeitungsressourcen ausgestattet sein können.
  • Wie veranschaulicht, kann eine Multikerngruppe 3100A einen Satz von Grafikkernen 3130, einen Satz von Tensor-Kernen 3140 und einen Satz von Raytracing-Kernen 3150 aufweisen. Ein Einplaner/Dispatcher 3110 plant und lastet die Grafikthreads zur Ausführung auf den verschiedenen Kernen 3130, 3140, 3150 ein. Ein Satz von Registerdateien 3120 speichert Operandenwerte, die von den Kernen 3130, 3140, 3150 beim Ausführen der Grafikthreads verwendet werden. Diese können zum Beispiel Ganzzahlregister zum Speichern von Ganzzahlwerten, Gleitkommaregisters zum Speichern von Gleitkommawerten, Vektorregister zum Speichern gepackter Datenelemente (Ganzzahl- und/oder Gleitkommadatenelemente) und Kachelregister zum Speichern von Tensor/Matrixwerten aufweisen. Die Kachelregister können als kombinierte Sätze von Vektorregistern implementiert sein.
  • Ein oder mehrere Level 1- (L1) Caches und Textureinheiten 3160 speichern Grafikdaten wie Texturdaten, Scheitelpunktdaten, Pixeldaten, Strahldaten, Begrenzungsvolumendaten usw. lokal in jeder Multikerngruppe 3100A. Ein Level 2- (L2) Cache 3180, den sich alle oder ein Teilsatz der Multikerngruppen 3100AN teilen, speichert Grafikdaten und/oder Anweisungen für mehrere gleichzeitige Grafikthreads. Wie veranschaulicht, können sich mehrere Multikerngruppen 3100A-N den L2-Cache 3180 teilen. Eine oder mehrere Speichersteuerungen 3170 koppeln die GPU 3105 an einen Speicher 3198, der ein Systemspeicher (z.B. DRAM) und/oder ein dedizierter Grafikspeicher (z.B. GDDR6 Speicher) sein kann.
  • Eingangs-/Ausgangs- (IO) Schaltkreis 3195 koppelt die GPU 3105 an eine oder mehrere IO-Vorrichtungen 3195 wie Digitalsignalprozessoren (DSPs), Netzwerksteuerungen oder Anwendereingabevorrichtungen. Eine On-Chip-Zwischenverbindung kann verwendet werden, um die I/O-Vorrichtungen 3190 an die GPU 3105 und den Speicher 3198 zu koppeln. Eine oder mehrere IO-Speicherverwaltungseinheiten (IOMMUs, IO Memory Management Units) 3170 des IO Schaltkreises 3195 koppeln die IO-Vorrichtungen 3190 direkt an den Systemspeicher 3198. Die IOMMU 3170 kann mehrere Sätze von Seitentabellen verwalten, um virtuelle Adressen auf physische Adressen im Systemspeicher 3198 abzubilden. Zusätzlich können sich IO-Vorrichtungen 3190, CPU(s) 3199, und GPU(s) 3105 denselben virtuellen Adressraum teilen.
  • Die IOMMU 3170 kann auch Virtualisierung unterstützen. In diesem Fall kann sie einen ersten Satz von Seitentabellen verwalten, um virtuelle Gast-/Grafikadressen auf physische Gast-/Grafikadressen abzubilden, sowie einen zweiten Satz von Seitentabellen, um die physischen Gast-/Grafikadressen auf physische System-/Hostadressen (z.B. im Systemspeicher 3198) abzubilden. Die Basisadressen jedes der ersten und zweiten Sätze von Seitentabellen können in Steuerregistern gespeichert und auf einem Kontextschalter ausgelagert werden (z.B. sodass der neue Kontext mit Zugriff auf den relevanten Satz von Seitentabellen bereitgestellt ist). Obwohl in 31 nicht veranschaulicht, kann jeder der Kerne 3130, 3140, 3150 und/oder Multikerngruppen 3100A-N Übersetzungsnachschlagepuffer (TLBs) aufweisen, um virtuelle Gast- zu physischen Gastübersetzungen, physische Gastzu physischen Gastübersetzungen und virtuelle Gast- zu virtuellen Gastübersetzungen zwischenzuspeichern.
  • Die CPUs 3199, GPUs 3105 und IO Vorrichtungen 3190 können auf einem einzelnen Halbleiterchip und/oder Chip-Package integriert sein. Der veranschaulichte Speicher 3198 kann auf demselben Chip integriert sein oder kann an die Speichersteuerungen 3170 über eine Off-Chip-Schnittstelle gekoppelt sein. In einer Implementierung weist der Speicher 3198 GDDR6 Speicher auf, der sich denselben virtuellen Adressenraum mit anderen physischen Speichern auf Systemebene teilt, obwohl die zugrundeliegenden Prinzipien der Erfindung sind auf diese spezifische Implementierung begrenzt sind.
  • Die Tensor-Kerne 3140 weisen mehrere Ausführungseinheiten auf, die im Speziellen gestaltet sind, Matrixoperationen durchzuführen, die eine grundlegende Rechenoperation sind, die zum Druckführen tiefer Lernbetriebe verwendet wird. Zum Beispiel können gleichzeitige Matrixmultiplikationsoperationen für neurales Netzwerktraining und Schlussfolgerung verwendet werden. Die Tensor-Kerne 3140 können Matrixerarbeitung unter Verwendung einer Reihe von Operandenpräzisionen durchführen, aufweisend Einfachpräzisionsgleitkomma (z.B. 32 Bits), Halbpräzisionsgleitkomma (z.B. 16 Bits), Ganzzahlworte (16 Bits), Bytes (8 Bits) und Halbbytes (4 Bits). Eine neurale Netzwerkimplementierung kann auch Merkmale jeder gerenderten Szene extrahieren, potentiell Details mehrerer Frames kombinieren, um ein hochqualitatives finales Bild zu erstellen.
  • Bei Tiefenlernimplementierungen kann parallele Matrixmultiplikationsarbeit zur Ausführung auf den Tensorkernen 3140 eingeplant werden. Das Training von neuralen Netzwerken benötigt insbesondere eine signifikante Zahl von Zahlenmatrixskalarproduktbetrieben. Um eine Innenproduktformulierung einer N x N x N Matrixmultiplikation zu verarbeiten, können die Tensorkerne 3140 mindestens N Skalarproduktverarbeitungselemente aufweisen. Bevor die Matrixmultiplikation beginnt, wird eine gesamte Matrix in Kachelregister geladen und mindestens eine Spalte einer zweiten Matrix wird bei jedem Zyklus für N Zyklen geladen. Bei jedem Zyklus werden N Skalarprodukte verarbeitet.
  • Matrixelemente können bei verschiedenen Präzisionen gespeichert werden, abhängig von der bestimmten Implementierung, aufweisend 16-Bit-Worte, 8-Bit-Bytes (z.B. INT8) und 4-Bit-Halbbytes (z.B. INT4). Verschiedene Präzisionsmodi können für die Tensorkerne 3140 bestimmt werden, um sicherzustellen, dass die effizienteste Präzision für verschiedene Arbeitslasten verwendet wird (z.B. wie Schlussfolgerungsarbeitslasten, die Quantisierung auf Bytes und Halbbytes tolerieren können).
  • Die Raytracing-Kerne 3150 können zum Beschleunigen von Raytracing-Betrieben sowohl für Echtzeit-Raytracing- als auch Nicht-Echtzeit Raytracing-Implementierungen verwendet werden. Insbesondere können die Raytracing-Kerne 3150 Strahlquerungs-/-kreuzungsschaltkreise aufweisen, um Strahlquerung unter Verwendung von Begrenzungsvolumenhierarchien (BVHs) durchzuführen und Kreuzungen zwischen Strahlen und Primitiven zu identifizieren, die innerhalb der BVH-Volumen umschlossen sind. Die Raytracing-Kerne 3150 können auch Schaltkreise zum Durchführen von Tiefentestung und Auslese (z.B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) aufweisen. In einer Implementierung führen die Raytracing-Kerne 3150 Querungs- und Kreuzungsbetriebe in Einklang mit den hierin beschriebenen Bildentrauschtechniken durch, von denen mindestens ein Abschnitt auf den Tensorkernen 3140 ausgeführt werden kann. Zum Beispiel implementieren in einer Ausführungsform die Tensorkerne 3140 ein neurales Tiefenlernnetzwerk, um Entrauschen von Frames durchzuführen, das von den Raytracing-Kernen 3150 erzeugt wird. Jedoch können die CPU(s) 3199, Grafikkerne 3130 und/oder Raytracingkerne 3150 auch alle oder einen Abschnitt der Entrausch- und/oder Tiefenlernalgorithmen implementieren.
  • Zusätzlich kann, wie zuvor beschrieben, ein verteilter Ansatz von Entrauschen eingesetzt werden, bei dem die GPU 3105 in einer Rechenvorrichtung ist, die mit anderen Rechenvorrichtungen über ein Netzwerk oder eine Hochgeschwindigkeitszwischenverbindung gekoppelt ist. Die zwischenverbundenen Rechenvorrichtungen können sich zusätzlich neurale Netzwerklern-/-trainingsdaten teilen, um die Geschwindigkeit zu verbessern, mit der das gesamte System lernt, Entrauschen für verschiedene Typen von Bildframes und/oder verschiedene Grafikanwendungen durchzuführen.
  • Die Raytracing-Kerne 3150 können alle BVH-Querungs- und Strahlprimitivkreuzungen verarbeiten, was die Grafikkerne 3130 davor bewahrt, mit tausenden Anweisungen pro Strahl überladen zu werden. Jeder Raytracing-Kern 3150 kann einen ersten Satz spezialisierter Schaltkreise zum Durchführen von Begrenzungsboxtests (z.B. für Querungsbetriebe) und einen zweiten Satz spezialisierter Schaltkreise zum Durchführen der Strahl-Dreieck-Kreuzungstests (z.B. kreuzende Strahlen, die gequert wurden) aufweisen. Daher kann die Multikerngruppe 3100A einfach eine Strahlsonde starten und die Raytracing-Kerne 3150 können unabhängig Strahlquerung und -kreuzung durchführen und Trefferdaten (z.B. ein Treffer, kein Treffer, viele Treffer usw.) an den Threadkontext zurückgeben. Die anderen Kerne 3130, 3140 können frei sein, um andere Grafik- oder Rechenarbeit durchführen, während die Raytracing-Kerne 3150 die Querungs- und Kreuzungsbetriebe durchführen.
  • Jeder Raytracing-Kern 3150 kann eine Querungseinheit, um BVH-Testbetriebe durchzuführen, und eine Kreuzungseinheit, die Strahl-Primitiv-Kreuzungstests durchführt, aufweisen. Die Kreuzungseinheit kann dann eine „Treffer“, „Nichttreffer“ oder „mehrere Treffer“ Antwort erzeugen, die sie dem geeigneten Thread bereitstellt. Während der Querungs- und Kreuzungsbetriebe sind die Ausführungsressourcen der anderen Kerne (z.B. Grafikkerne 3130 und Tensorkerne 3140) frei, andere Formen von Grafikarbeit durchzuführen.
  • Ein Hybrid-Rasterisierungs-/Raytracing-Ansatz kann auch verwendet werden, in dem Arbeit zwischen den Grafikkernen 3130 und Raytracing-Kernen 3150 aufgeteilt wird.
  • Die Raytracing-Kerne 3150 (und/oder andere Kerne 3130, 3140) können Hardwareunterstützung für einen Raytracing-Anweisungssatz wie Microsofts DirectX Ray Tracing (DXR) aufweisen, der einen DispatchRays-Befehl aufweist, wie auch Strahlerzeugungs-, nächster-Hit-, beliebiger-Treffer- und Verfehlungs-Shader, die die Zuweisung eindeutiger Sätze von Shadern und Texturen für jedes Objekt ermöglichen. Eine andere Raytracing-Plattform, die von den Raytracing-Kernen 3150, Grafikkernen 3130 und Tensorkernen 3140 unterstützt werden kann, ist Vulkan 1.1.85. Man beachte jedoch, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf irgendeine bestimmte Raytracing-ISA begrenzt ist.
  • Im Allgemeinen können die unterschiedlichen Kerne 3150, 3140, 3130 einen Raytracing-Anweisungssatz unterstützen, der Anweisungen/Funktionen für Strahlerzeugung, nächster Treffer, beliebiger Treffer, Strahl-Primitiv-Kreuzung, pro-Primitiv und hierarchische Begrenzungsboxerrichtung, Verfehlung, Aufsuchen und Ausnahmen aufweist. Genauer können Raytracing-Anweisungen aufgewiesen sein, um die folgenden Funktionen durchzuführen:
    • Ray Generation - Strahlerzeugungsanweisungen können für jedes Pixel, jede Probe oder andere anwenderdefinierte Arbeitszuweisung ausgeführt werden.
    • Closest Hit - Eine nächster-Treffer-Anweisung kann ausgeführt werden, um den nächsten Kreuzungspunkt eines Strahls mit Primitiven innerhalb einer Szene zu lokalisieren.
    • Any Hit - Eine beliebiger-Treffer-Anweisung identifiziert mehrere Kreuzungen zwischen einem Strahl und Primitiven innerhalb einer Szene, potentiell, um einen neuen nächsten Kreuzungspunkt zu identifizieren.
    • Intersection - Eine Kreuzungsanweisung führt einen Strahl-Primitiv-Kreuzungstest durch und gibt ein Ergebnis aus.
    • Per-Primitive Bounding Box Construction - Diese Anweisung bildet eine Begrenzungsbox um ein gegebenes Primitiv oder Gruppen von Primitiven (z.B., wenn eine neue BVH oder andere Beschleunigungsdatenstruktur gebildet wird).
    • Miss - gibt an, dass ein Strahl die gesamte Geometrie innerhalb einer Szene oder ein bestimmtes Gebiet einer Szene verfehlt.
    • Visit - gibt die Untervolumina an, die ein Strahl queren wird.
    • Exceptions - weist unterschiedliche Typen von Ausnahmehandlern auf (z.B. für unterschiedliche Fehlerbedingungen aufgerufen).
  • Hierarchisches Beamtracing
  • Begrenzungsvolumenhierarchien werden allgemein verwendet, um die Effizienz zu verbessern, mit der Betriebe an Grafikprimitiven und anderen Grafikobjekten durchgeführt werden. Eine BVH ist eine hierarchische Baumstruktur, die basierend auf einem Satz geometrischer Objekte errichtet ist. An der Oberseite der Baumstruktur ist der Wurzelknoten, der alle geometrischen Objekte in einer bestimmten Szene einschließt. Die einzelnen geometrischen Objekte sind in Begrenzungsvolumina eingefüllt, die die Blattknoten des Baums bilden. Diese Knoten werden dann als kleine Sätze gruppiert und in größeren Begrenzungsvolumina eingeschlossen. Diese werden wiederum auch rekursiv gruppiert und in anderen größeren Begrenzungsvolumina eingeschlossen, was schließlich zu einer Baumstruktur mit einem einzelnen Begrenzungsvolumen, dargestellt durch den Wurzelknoten, an der Oberseite des Baums führt. Begrenzungsvolumenhierarchien werden verwendet, um effizient eine Reihe von Betrieben an Sätzen von geometrischen Objekte zu unterstützen, wie Kollisionsdetektion, Primitiv-Culling und Strahlquerungs-/Kreuzungsbetriebe, die beim Raytracing verwendet werden.
  • In Raytracing-Architekturen werden Strahlen durch eine BVH gequert, um Kreuzungen von Strahl-Primitiv zu bestimmen. Wenn zum Beispiel ein Strahl nicht durch den Wurzelknoten der BVH geht, kreuzt der Strahl keine der Primitive, die von der BVH eingeschlossen sind, und es ist keine weitere Verarbeitung für den Strahl in Bezug auf diesen Satz von Primitiven erforderlich. Wenn ein Strahl durch einen ersten Kindknoten der BVH geht, nicht aber den zweiten Kindknoten, muss der Strahl nicht gegen Primitive getestet werden, die von dem zweiten Kindknoten eingeschlossen sind. Auf diese Weise stellt eine BVH einen effizienten Mechanismus zum Testen auf Strahl-Primitiv-Kreuzungen bereit.
  • Gruppen von angrenzenden Strahlen, als „Bündel“ bezeichnet, können gegen die BVH und nicht einzelne Strahlen getestet werden. 32 veranschaulicht ein beispielhaftes Bündel 3201, das durch vier verschiedene Strahlen umrissen ist. Sämtliche Strahlen, die das Feld 3200 kreuzen, das durch die vier Strahlen definiert ist, werden als in demselben Bündel liegend angesehen. Während das Bündel 3201 in 32 durch eine rechteckige Anordnung von Strahlen definiert ist, können Strahlen auf verschiedene andere Weisen definiert sein, während sie weiterhin den zugrundeliegenden Prinzipien der Erfindung entsprechen (z.B. Kreise, Ellipsen usw.).
  • 33 veranschaulicht, wie eine Raytracing-Engine 3310 einer GPU 3320 die hier beschriebene Beamtracing-Techniken implementiert. Insbesondere erzeugt Strahlerzeugungsschaltkreis 3304 mehrere Strahlen, für die Querungs- und Kreuzungsbetriebe durchzuführen sind. Anstatt jedoch Querungs- und Kreuzungsbetriebe an einzelnen Strahlen durchzuführen, werden Querungs- und Kreuzungsbetriebe unter Verwendung einer Hierarchie von Bündeln 3307 durchgeführt, die von Strahlhierarchieerrichtungsschaltkreis 3305 erzeugt wird. Die Strahlhierarchie ist zu der Begrenzungsvolumenhierarchie (BVH) analog. Zum Beispiel stellt 34 ein Beispiel eines primären Bündels 3400 bereit, das in mehrere verschiedene Komponenten unterteilt werden kann. Insbesondere kann primäres Bündel 3400 in Quadranten 3401-3404 unterteilt werden und jeder Quadrant kann selbst in Teilquadranten wie Teilquadranten A-D innerhalb von Quadrant 3404 unterteilt werden. Das primäre Bündel kann auf zahlreiche Weisen unterteilt werden. Zum Beispiel kann das primäre Bündel in die Hälfte (und nicht in Quadranten) geteilt werden und jede Hälfte kann in eine Hälfte geteilt werden und so weiter. Unabhängig davon, die die Unterteilungen vorgenommen werden, wird ein hierarchische Struktur auf ähnliche Weise wie eine BVH erzeugt, z.B. mit einem Wurzelknoten, der das primäre Bündel 3400 darstellt, einer ersten Ebene von Kindknoten, die jeweils durch einen Quadranten 3401-3404 dargestellt sind, einer zweiten Ebene von Kindknoten für jeden Teilquadrant A-D und so weiter.
  • Sobald die Strahlhierarchie 3307 konstruiert ist, kann Querungs-/Kreuzungsschaltkreis 3306 Querungs-/Kreuzungsbetriebe unter Verwendung der Strahlhierarchie 3307 und der BVH 3308 durchführen. Insbesondere kann er das Bündel gegen die BVH und Cull-Abschnitte des Bündels testen, die keine Abschnitte der BVH kreuzen. Wenn zum Beispiel unter Verwendung der in 34 gezeigten Daten die Teilbündel, die mit Teilgebieten 3402 und 3403 verknüpft sind, die BVH oder einen bestimmten Zweig der BVH nicht kreuzen, können sie dann in Bezug auf die BVH oder den Zweig ausgelesen werden. Die übrigen Abschnitte 3401, 3404 können dann gegen die BVH getestet werden, indem ein Zuerst-Tiefe-Such- oder anderer Suchalgorithmus durchgeführt wird.
  • Ein Verfahren für Raytracing ist in 35 veranschaulicht. Das Verfahren kann in dem Kontext der oben beschriebenen Grafikverarbeitungsarchitekturen implementiert sein, ist aber auf keine bestimmte Architektur begrenzt.
  • Bei 3500 wird ein primäres Bündel konstruiert, umfassend mehrere Strahlen, und bei 3501 wird das Bündel unterteilt und hierarchische Datenstrukturen werden erzeugt, um eine Strahlhierarchie zu schaffen. Die Betriebe 3500-3501 können als ein einzelner, integrierter Betrieb durchgeführt werden, der eine Strahlhierarchie aus mehreren Strahlen konstruiert. Bei 3502 wird die Strahlhierarchie mit einer BVH zum Auslesen von Strahlen (aus der Strahlhierarchie) und/oder Knoten/Primitiven aus der BVH verwendet. Bei 3503 werden Strahl-Primitive-Kreuzungen für die übrigen Strahlen und Primitiven bestimmt.
  • VERLUSTBEHAFTETE UND VERLUSTLOSE PAKETKOMPRESSION IN EINEM VERTEILTEN RAYTRACING-SYSTEM
  • Raytracing-Betriebe können über mehrere Rechenknoten verteilt sein, die über ein Netzwerk aneinander gekoppelt sind. 36 veranschaulicht zum Beispiel einen Raytracing-Cluster 3600, der mehrere Raytracing-Knoten 3610-3613 umfasst, die Raytracing-Betriebe parallel durchführen, wobei sie möglicherweise die Ergebnisse eines der Knoten kombinieren. In der veranschaulichten Architektur sind die Raytracing-Knoten 3610-3613 kommunikativ an eine Client-seitige Raytracing-Anwendung 3630 über ein Gateway gekoppelt.
  • Eine der Schwierigkeiten mit einer verteilten Architektur ist die große Menge paketierter Daten, die zwischen jeden der Raytracing-Knoten 3610-3613 übertragen werden muss. Sowohl verlustlose Kompressionstechniken als auch verlustbehaftete Kompressionstechniken können verwendet werden, um die Daten zu reduzieren, die zwischen den Raytracing-Knoten 3610-3613 übertragen werden.
  • Zur Implementierung verlustloser Kompression werden, anstatt Pakete zu senden, die mit den Ergebnissen gewisser Betriebe gefüllt, sind, Daten oder Befehle gesendet, die dem empfangenden Knoten erlauben, die Ergebnisse zu rekonstruieren. Zum Beispiel benötigen stochastisch abgetasteten Flächenbeleuchtungs- und Umgebungsverdeckungs- (AO, Ambient Occlusion) Betriebe nicht unbedingt Richtungen. Folglich kann ein übertragender Knoten einfach einen Startwert (Random Seed) senden, das dann von dem empfangenden Knoten verwendet wird, um Zufallsabtastung durchzuführen. Wenn zum Beispiel eine Szene über Knoten 3610-3612 verteilt wird, müssen zum Abtasten von Licht 1 an Punkten p1-p3 nur die Licht-ID und Ursprünge an Knoten 3610-3612 gesendet werden. Jeder der Knoten kann dann das Licht unabhängig stochastisch abtaten. Der Startwert kann von dem empfangenden Knoten erzeugt werden. Ebenso können für primäre Strahltrefferpunkt Umgebungsverdeckungs- (AO) und Weichschattenabtastung an Knoten 3610-3612 berechnet werden, ohne auf die ursprünglichen Punkte für folgende Frames zu warten. Zusätzlich, falls bekannt ist, dass ein Satz von Strahlen zu derselben Punktlichtquelle gehen wird, können Anweisungen, die die Lichtquelle identifizieren, an den empfangenden Knoten gesendet werden, der diese bei dem Satz von Strahlen anwendet. Als ein anderes Beispiel, falls N Umgebungsverdeckungsstrahlen zu einem einzigen Punkt übertragen werden, kann ein Befehl gesendet werden, um N Abtastungen von diesem Punkt zu erzeugen.
  • Verschiedene zusätzliche Techniken können für verlustbehaftete Kompression angewendet werden. Zum Beispiel kann ein Quantisierungsfaktor verwendet werden, um alle Koordinatenwerte zu quantisieren, die mit BVH, Primitiven und Strahlen verknüpft sind. Zusätzlich können 32-Bit Gleitkommawerte, die für Daten wie BVH-Knoten und Primitive verwendet werden, in 8-Bit Ganzzahlwerte konvertiert werden. In einer beispielhaften Implementierung werden die Grenzen von Strahlenpaketen voller Präzision gespeichert, aber einzelne Strahlenpunkte P1-P3 werden als indizierte Versätze zu den Grenzen übertragen. Ebenso können mehrere lokale Koordinatensysteme erzeugt werden, die 8-Bit Ganzzahlwerte als lokale Koordinaten verwenden. Die Stelle des Ursprungs jedes dieser lokalen Koordinatensysteme kann unter Verwendung der vollen Präzisionswerte (z.B. 32-Bit Gleitkommapunkt) codiert werden, wodurch das globale und lokale Koordinatensystem effektiv verbunden werden.
  • Es folgt ein Beispiel für verlustlose Kompression. Ein Beispiel eines Strahlendatenformats, das intern in einem Raytracing-Programm verwendet wird, ist wie folgt:
 struct Ray 
 {
 uint32 pixId;
 uint32 materialID;
 uint32 instanceID;
 uint64 primitiveID;
 uint32 geometryID;
 uint32 lightID;
 float origin[3];
 float direction[3];
 float t0;
 float t;
 float time;
 float normal[3]; //used for geometry intersections
 float u;
 float v;
 float wavelength;
 float phase; //Interferometry
 float refractedOffset; //Schlieren-esque
 float amplitude;
 float weight;
 };
  • Anstatt die Rohdaten für jeden erzeugten Knoten zu senden, können diese Daten durch Gruppieren von Werten und durch Erstellen implizierter Strahlen unter Verwendung anwendbarer Metadata, falls möglich, komprimiert werden.
  • Bündeln und Gruppieren von Strahlendaten
  • Es können Flags für gemeinsame Daten oder Masken mit Modifikatoren verwendet werden.
  •  struct RayPacket
     {
     uint32 size; 
     uint32 flags;
     list<Ray> rays;
     }
  • Zum Beispiel:
  •  RayPacket.rays = ray_1 to ray_256
  • Ursprünge werden alle geteilt
  • Alle Strahldaten werden verpackt, außer es wird nur ein einziger Ursprung über alle Strahlen gespeichert. RayPacket.flags wird für RAYPACKET-COMMON-ORIGIN gesetzt. Wenn RayPacket nach Empfang entpackt wird, werden Ursprünge aus dem einzelnen Ursprungswert aufgefüllt.
  • Ursprünge werden nur unter manchen Strahlen geteilt
  • Alle Strahlendaten werden verpackt, mit Ausnahme von Strahlen, die gemeinsame Ursprünge haben. Für jede Gruppe einzigartiger geteilter Ursprünge wird ein Operator verpackt, der den Betrieb identifiziert (geteilte Ursprünge), den Ursprung speichert und maskiert, welche Strahlen sich die Informationen teilen. Ein solcher Betrieb kann auf Werten erfolgen, die sich Knoten teilen, wie Material-IDs, Primitiv-IDs, Ursprung, Richtung, Normale usw.
  •  struct RayOperation
     {
     uint8 operationID;
     void* value;
     uint64 mask;
     }
     }
  • Senden implizierter Strahlen
  • Häufig können Strahlendaten am empfangenden Ende mit minimalen Metainformationen abgeleitet werden, die zu deren Erzeugung verwendet wurden. Ein sehr allgemeines Beispiel ist Erzeugen mehrere sekundärer Strahlen, um eine Fläche stochastisch abzutasten. Anstatt dass der Sender einen sekundären Strahl erzeugt, diesen sendet und der Empfänger ihn bearbeitet, kann der Sender einen Befehl senden, dass ein Strahl mit beliebigen abhängigen Informationen erzeugt werden muss, und der Strahl wird am empfangenden Ende erzeugt. Falls der Strahl zuerst von dem Sender erzeugt werden muss um zu bestimmen, an welchen Empfänger er zu senden ist, wird der Strahl erzeugt und der Startwert kann gesendet werden, um exakt denselben Strahl zu regenerieren.
  • Zum Beispiel zur Abtastung eines Trefferpunkts mit 64 Schattenstrahlen, die eine Flächenlichtquelle abtasten, kreuzen alle 64 Strahlen Gebiete von demselben Rechen-N4. Ein RayPacket mit gemeinsamem Ursprung und Normale wird erstellt. Mehr Daten könnten gesendet werden, wenn gewünscht ist, dass der Empfänger den resultierenden Pixel-Beitrag schattiert, aber für dieses Beispiel sei angenommen, dass wir nur zurückmelden möchten, ob ein Strahl andere Knotendaten trifft. Eine RayOperation wird für eine Schattenstrahlerzeugungsoperation erstellt und ihr wird der Wert der abzutastenden lightID und die Startwertzahl zugeordnet. Wenn N4 das Strahlenpaket empfängt, erzeugt er die vollständig gefüllten Strahlendaten durch Auffüllen der gemeinsamen Ursprungsdaten auf alle Strahlen und Einstellen der Richtung basierend auf der lightID, stochastisch abgetastet mit der Startwertzahl, um dieselben Strahlen zu erzeugen, die der ursprüngliche Sender erzeugt hat. Wenn die Ergebnisse zurückgemeldet werden, müssen nur binäre Ergebnisse für jeden Strahl zurückgemeldet werden, die durch eine Maske über den Strahlen übergeben werden können.
  • Senden der ursprünglichen 64 Strahlen in diesem Beispiel würde 104 Bytes * 64 Strahlen = 6656 Bytes verwenden. Wenn die rücklaufenden Strahlen auch in ihrer Rohform gesendet werden, dann wird dies auch auf 13312 Bytes verdoppelt. Bei Verwendung von verlustloser Kompression, wobei nur der gemeinsame Strahlursprung, Normale und Strahlenerzeugungsbetrieb mit Seed und ID gesendet werden, werden nur 29 Bytes gesendet, mit 8 rückgemeldeten Bytes für die gekreuzte Maske. Dies führt zu einer Datenkompressionsrate, die über das Netzwerk gesendet werden muss, von ∼360:1. Dies weist nicht den Mehraufwand zum Verarbeiten der Nachricht selbst auf, die auf dieselbe Art identifiziert werden müsste, aber dies ist der Implementierung überlassen. Andere Betriebe können zum Neuberechnen von Strahlursprung und Richtungen aus der PixelD für primäre Strahlen, Neuberechnen von PixelIDs basierend auf den Bereichen im Raypacket und viele andere mögliche Implementierungen für Neuberechnung von Werten durchgeführt werden. Ähnliche Betriebe können für einen einzelnen oder eine Gruppe von gesendeten Strahlen verwendet werden, aufweisend Schatten, Reflexionen, Brechung, Umgebungsverdeckung, Kreuzungen, Volumenkreuzungen, Schattieren, Ablenkreflexionen beim Path-Tracing usw.
  • 37 veranschaulicht zusätzliche Details für zwei Raytracing-Knoten 3710-3711, die Kompression und Dekompression von Raytracing-Paketen durchführen. Insbesondere, wenn eine erste Raytracing-Engine 3730 bereit ist, Daten an eine zweite Raytracing-Engine 3731 zu übertragen, führt Strahlenkompressionsschaltkreis 3720 verlustbehaftet und/oder verlustlose Kompression der Raytracing.Daten wie hier beschrieben durch (z.B. Konvertieren von 32-Bit Werten zu 8-Bit Werten, Ersetzen von Rohdaten durch Anweisungen zum Rekonstruieren der Daten usw.). Die komprimierten Strahlenpakete 3701 werden von Netzwerkschnittstelle 3725 an Netzwerkschnittstelle 3726 über ein lokales Netzwerk (z.B. ein 10Gb/s, 100Gb/s Ethernet Netzwerk) übertragen. Strahldekompressionsschaltkreis dekomprimiert dann die Strahlenpakete, falls angemessen. Zum Beispiel kann er Befehle zum Rekonstruieren der Raytracing-Daten (z.B. unter Verwendung eines Startwerts, um Zufallsabtastung für Beleuchtungsbetriebe durchzuführen) ausführen. Raytracing-Engine 3731 verwendet dann die empfangenen Daten, um Raytracing-Betriebe durchzuführen.
  • In der umgekehrten Richtung komprimiert Strahlenkompressionsschaltkreis 3741 Strahlendaten, Netzwerkschnittstelle 3726 überträgt die komprimierten Strahlendaten über das Netzwerk (z.B. unter Verwendung der hier beschriebenen Techniken), Strahlendekompressionsschaltkreis 3740 dekomprimiert die Strahlendaten, falls nötig, und Raytracing-Engine 3730 verwendet die Daten in Raytracing-Betrieben. Obwohl als eine separate Einheit in 37 veranschaulicht, kann Strahlendekompressionsschaltkreis 3740-3741 jeweils in Raytracing-Engines 3730-3731 integriert sein. Zum Beispiel in dem Ausmaß, in dem die komprimierten Strahlendaten Befehle zum Rekonstruieren der Strahlendaten aufweisen, können diese Befehle durch jede entsprechende Raytracing-Engine 3730-3731 ausgeführt werden.
  • Wie in 38 veranschaulicht, kann Strahlenkompressionsschaltkreis 3720 verlustbehafteten Kompressionsschaltkreis 3801 zum Durchführen der hier beschriebenen verlustbehafteten Kompressionstechniken (z.B.Konveriteren von 32-Bit Gleitkommakoordinaten zu 8-Bit Ganzzahlkoordinaten) und verlustlosen Kompressionsschaltkreis 3803 zum Durchführen der verlustlosen Kompressionstechniken (z.B. Übertragen von Befehlen und Daten, um Strahlenrekompressionsschaltkreis 3821 zu ermöglichen, die Daten zu rekonstruieren) aufweisen. Strahlendekompressionsschaltkreis 3721 weist verlustbehafteten Dekompressionsschaltkreis 3802 und verlustlosen Dekompressionsschaltkreis 3804 zum Durchführen verlustloser Dekompression auf.
  • Ein anderes beispielhaftes Verfahren ist in 39 veranschaulicht. Das Verfahren kann auf den Raytracing-Architekturen oder anderen hier beschriebenen Architekturen implementiert werden, ist aber nicht auf eine bestimmte Architektur beschränkt.
  • Bei 3900 werden Strahlendaten empfangen, die von einem ersten Raytracing-Knoten an einen zweiten Raytracing-Knoten übertragen werden. Bei 3901 führt verlustbehafteter Kompressionsschaltkreis verlustbehaftete Kompression an ersten Raytracing-Daten durch und bei 3902 führt verlustloser Kompressionsschaltkreis verlustlose Kompression an zweiten Raytracing-Daten durch. Bei 3903 werden die komprimierten Raytracing-Daten an einen zweiten Raytracing-Knoten übertragen. Bei 3904 führt verlustbehafteter/verlustloser Dekompressionsschaltkreis verlustbehaftete/verlustlose Dekompression der Raytracing-Daten durch und bei 3905 führt der zweite Raytracing-Knoten Raytracing-Betriebe unter Verwendung der dekomprimierten Daten durch.
  • GRAFIKPROZESSOR MIT HARDWARE-BESCHLEUNIGTEM HYBRIDEN RAYTRACING
  • Anschließend wird eine hybride Rendering-Pipeline präsentiert, die Rasterisierung an Grafikkernen 3130 und Raytracing-Betriebe an den Raytracing-Kernen 3150, Grafikkernen 3130, und/oder CPU 3199 Kernen durchführt. Zum Beispiel können Rasterisierungs- und Tiefentestung an den Grafikkernen 3130 an Stelle der primären Ray-Casting-Stufe durchgeführt werden. Die Raytracing-Kerne 3150 können dann sekundäre Strahlen für Strahlenreflexionen, Brechungen und Schatten durchführen. Zusätzlich werden gewisse Gebiete einer Szene, in welche die Raytracing-Kerne 3150 Raytracing-Betriebe durchführen (z.B. basierend auf Schwellenwerten materieller Eigenschaft wie hohe Reflexionsgrade) ausgewählt, während andere Gebiete der Szene mit Rasterisierung an den Grafikkernen 3130 gerendert werden. Diese hybride Implementierung kann für Echtzeit-Raytracing-Anwendungen verwendet werden - wo Latenz ein kritischer Punkt ist.
  • Die unten beschriebene Strahlquerungsarchitektur kann zum Beispiel programmierbare Schattierung und Steuerung von Strahlquerung unter Verwendung bestehender Einzelne-Anweisung-Mehrere-Daten (SIMD, Single Instruction Multiple Data) und/oder Einzelne-Anweisung-Mehrere-Thread (SIMT, Single Instruction Multiple Thread) Grafikprozessoren durchführen, während kritische Funktionen, wie BVH-Querung und/oder -Kreuzung, unter Verwendung dedizierter Hardware durchgeführt werden. SIMD-Belegung für inkohärente Pfade kann durch Umgruppieren von gestarteten Shadern an spezifischen Punkten während Querung und vor Schattierung verbessert werden. Dies wird unter Verwendung dedizierter Hardware erreicht, die Shader dynamisch, auf dem Chip, sortiert. Rekursion wird durch Teilen einer Funktion in Fortsetzungen, die bei Rückkehr laufen, und Umgruppierung von Fortsetzungen vor Ausführung für verbesserte SIMD-Belegung verwaltet.
  • Programmierbare Steuerung von Strahlquerungen-/-kreuzungen wird durch Zerlegen von Querungsfunktionalität in eine innere Querung, die als fixierte Funktionshardware implementiert sein kann, und eine äußere Querung, die auf GPU-Prozessoren läuft und programmierbare Steuerung durch anwenderdefinierte Querungsshader ermöglicht, erreicht. Die Kosten einer Übertragung des Querungskontexts zwischen Hardware und Software werden durch konservatives Beschneiden des inneren Querungszustands während des Übergangs zwischen innerer und äußerer Querung verringert.
  • Programmierbare Steuerung von Raytracing kann durch die verschiedenen Arten von Shader ausgedrückt werden, die in folgender Tabelle A aufgelistet sind. Es kann mehrere Shader für jede Art geben. Zum Beispiel kann jedes Material einen anderen Treffer-Shader haben. TABELLE A
    Shader-Art Funktionalität
    Primär Startet primäre Strahlen
    Treffer Zweiseitig gerichtete Reflexionsverteilungsfunktions-(BRDF, Bidirectional Reflectance Distribution Function) Abtastung, Starten sekundärer Strahlen
    Jeder Treffer Berechnen von Durchlässigkeit für alphatexturierte Geometrie
    Verfehlen Berechnen von Leuchtkraft von einer Lichtquelle
    Kreuzung Übliche Kreuzungsformen
    Querung Instanzauswahl und Transformation
    Anrufbar Allzweckfunktion
  • Rekursives Raytracing kann durch eine API-Funktion eingeleitet werden, die dem Grafikprozessor befiehlt, einen Satz primärer Shader oder Kreuzungsschaltkreis zu starten, der Strahl-Szene-Kreuzungen für primäres Strahlen starten kann. Dies startet wiederum andere Shaders wie Querung, Treffer-Shaders oder Verfehlungs-Shader. Ein Shader, der einen Kind-Shader startet, kann auch einen Rückkehrwert von diesem Kind-Shader empfangen. Anrufbare Shader sind Allzweckfunktionen, die direkt durch einen anderen Shader gestartet werden können und auch Werte an den anrufenden Shader zurückleiten können.
  • 40 veranschaulicht eine Grafikverarbeitungsarchitektur, die Shader-Ausführungsschaltkreise 4000 und fixierte Funktionsschaltkreise 4010 aufweist. Das Allzweckausführungs-Hardwareteilsystem weist mehrere Einzelne-Anweisung-Mehrere-Daten (SIMD) und/oder Einzelne-Anweisung-Mehrere-Threads- (SIMT) Kerne/Ausführungseinheiten (EUs) 4001 auf (d.h. jeder Kern kann mehrere Ausführungseinheiten), eine oder mehrere Abtaster 4002 und einen Level 1- (L1) Cache 4003 oder eine andere Form von lokalem Speicher auf. Das fixierte Funktionshardware-Teilsystem 4010 weist Nachrichteneinheit 4004, einen Einplaner 4007, Strahl-BVH-Querungs-/Kreuzungsschaltkreis 4005, Sortierschaltkreis 4008 und eine lokalen LI-Cache 4006 auf.
  • In Betrieb lastet primärer Dispatcher 4009 einen Satz primärer Strahlen in den Einplaner 4007 ein, der Arbeit für die Shader plant, die auf den SIMD/SIMT-Kernen/EUs 4001 ausgeführt wird. Die SIMD-Kerne/EUs 4001 können oben beschriebene Raytracing-Kerne 3150 und/oder Grafikkerne 3130 sein. Ausführung der primären Shader startet zusätzliche durchzuführende Arbeit (z.B. von einem oder mehreren Kind-Shadern und/oder fixierter Funktionshardware auszuführen). Die Nachrichteneinheit 4004 verteilt Arbeit, die durch die SIMD Kerne/EUs 4001 gestartet wird, an den Einplaner 4007, greift bei Bedarf auf den freien Stapelpool, den Sortierschaltkreis 4008 oder den Strahl-BVH Kreuzungsschaltkreis 4005 zu. Wenn die zusätzliche Arbeit an den Einplaner 4007 gesendet wird, wird sie zur Verarbeitung auf den SIMD/SIMT-Kernen/EUs 4001 geplant. Vor Planung kann der Sortierschaltkreis 4008 die Strahlen in Gruppen oder Kästen wie hier beschrieben sortieren (z.B. Gruppieren von Strahlen mit ähnlichen Eigenschaften). Der Strahl-BVH-Kreuzungsschaltkreis 4005 führt Kreuzungstestung von Strahlen unter Verwendung von BVH-Volumina durch. Zum Beispiel kann der Strahl-BVH-Kreuzungsschaltkreis 4005 Strahlkoordinatem mit jeder Ebene der BVH vergleichen, um Volumina zu identifizieren, die von dem Strahl gekreuzt werden.
  • Auf Shader kann unter Verwendung einer Shaderaufzeichnung, einer vom Anwender zugewiesenen Struktur, die einen Zeiger zu der Eintrittsfunktion aufweist, verkäuferspezifische Metadaten und globale Argumente zu dem Shader, der von den SIMD-Kernen/EUs 4001 ausgeführt wird, verwiesen werden. Jede ausführende Instanz eines Shaders ist mit einem Anrufstapel verknüpft der zum Speichern von Argumenten verwendet werden kann, die zwischen einem Eltern-Shader und Kind-Shader weitergeleitet werden. Anrufstapel können auch Verweise auf die Fortsetzungsfunktionen speichern, die ausgeführt werden, wenn ein Anruf zurückkehrt.
  • 41 veranschaulicht einen beispielhaften Satz zugewiesener Stapel 4101, der einen primären Shader-Stapel, einen Treffer-Shader-Stapel, einen Querungs-Shader-Stapel, einen Fortsetzungsfunktionsstapel und einen Strahl-BVH-Kreuzungsstapel aufweist (der, wie beschrieben durch fixierte Funktionshardware 4010 ausgeführt werden kann). Neue Shader-Aufrufe können neue Stapel aus einem freien Stapelpool 4102 implementieren. Die Anrufstapel, z.B. Stapel, die in dem Satz zugewiesener Stapel aufgewiesen sind, können in einem lokalen LI-Cache 4003, 4006 zwischengespeichert werden, um die Latenz von Zugriffen zu verringern.
  • Es kann eine endliche Anzahl von Anrufstapeln geben, jeweils mit einem „Sstack“ fixierter Maximalgröße, der in einem angrenzenden Speichergebiet zugewiesen ist. Daher kann die Basisadresse eines Stapels direkt aus einem Stapelindex (SID) als Basisadresse = SID * Sstack berechnet werden. Stapel-IDs können durch den Einplaner 4007 beim Planen von Arbeit für die SIMD-Kerne/EUs 4001 zugewiesen oder aus der Zuweisung genommen werden.
  • Der primäre Dispatcher 4009 kann einen Grafikprozessorbefehlsprozessor aufweisen, der primäre Shader in Antwort auf einen Einlastbefehl von dem Host (z.B. einer CPU) einlastet. Der Einplaner 4007 kann diese Einlastanfragen empfangen und einen primären Shader auf einem SIMD-Prozessorthread starten, wenn einer eine Stapel-ID für jede SIMD-Bahn zuordnen kann. Stapel-IDs können aus dem freien Stapelpool 4102 zugeordnet werden, der zu Beginn des Einlastbefehls initialisiert wird.
  • Ein Ausführungsshader kann einen Kind-Shader durch Senden einer Startnachricht an die Nachrichteneinheit 4004 starten. Dieser Befehl weist die Stapel-IDs verknüpft mit dem Shader auf und weist auch einen Zeiger zur der Kind-Shader-Aufzeichnung für jede aktive SIMD-Bahn auf. Ein Eltern-Shader kann diese Nachricht nur einmal für eine aktive Bahn ausgeben. Nach Senden von Startnachrichten für alle relevanten Bahnen kann der Eltern-Shader enden.
  • Ein Shader, der auf den SIMD-Kernen/EUs 4001 ausführt, kann auch Aufgaben fixierter Funktion wie Strahl-BVH-Kreuzungen unter Verwendung einer Startnachricht mit einem Shader-Aufzeichnungszeiger, der für die Hardware fixierter Funktion reserviert ist, starten. Wie erwähnt, sendet die Benachrichtigungseinheit 4004 gestartete Strahl-BVH-Kreuzungsarbeit an den Strahl-BVH-Kreuzungsschaltkreis 4005 fixierter Funktion und anrufbare Shaders direkt zu dem Sortierschaltkreis 4008. Der Sortierschaltkreis kann die Shader durch Shader-Aufzeichnungszeiger gruppieren, um eine SIMD-Charge mit ähnlichen Eigenschaften abzuleiten. Daher können Stapel-IDs von verschiedenen Eltern-Shaders durch den Sortierschaltkreis 4008 in derselben Charge gruppiert werden. Der Sortierschaltkreis 4008 sendet gruppierte Chargen an den Einplaner 4007, der auf die Shader-Aufzeichnung vom Grafikspeicher 2511 oder dem Letztes-Level-Cache (LLC) 4020 zugreift und den Shader auf einem Prozessorthread startet.
  • Fortsetzungen können als anrufbare Shader behandelt werden und auf sie kann auch durch Shader-Aufzeichnungen verwiesen werden. Wenn ein Kind-Shader gestartet wird und Werte zu dem Eltern-Shader zurückleitet, kann ein Zeiger zu der Fortsetzungs-Shaderaufzeichnung auf den Anrufstapel 4101 geschoben werden. Wenn ein Kind-Shader zurückleitet, kann die Fortsetzungs-Shaderaufzeichnung dann aus dem Anrufstapel 4101 hervorstechen und ein Fortsetzungs-Shader gestartet werden. Optional können gestartete Fortsetzungen durch die Sortiereinheit gehen, ähnlich anrufbaren Shadern, und auf einem Prozessorthread gestartet werden.
  • Wie in 42 veranschaulicht, gruppiert der Sortierschaltkreis 4008 gestartete Aufgaben durch Shader-Aufzeichnungszeiger 4201A, 4201B, 4201n, um SIMD-Chargen für Schattierung zu starten. Die Stapel-IDs oder Kontext-IDs in einer sortierten Charge können aus verschiedenen Einlastungen und verschiedenen eingegebenen SIMD-Bahnen gruppiert werden. Ein Gruppierungsschaltkreis 4210 kann die Sortierung unter Verwendung einer inhaltadressierbaren Speicher (CAM, Content Addressable Memory) Struktur 4201 durchführen, die mehrere Einträge aufweist, wobei jeder Eintrag mit einem Tag 4201 identifiziert ist, wie erwähnt, kann das Tag 4201 ein entsprechender Shader-Aufzeichnungszeiger 4201A, 4201B, 4201n sein. Die CAM-Struktur 4201 kann eine begrenzte Anzahl von Tags (z.B. 32, 64, 128 usw.) speichern, die jeweils mit einer unvollständigen SIMD-Charge entsprechend dem einen Shader-Aufzeichnungszeiger verknüpft sind.
  • Für einen eingehenden Startbefehl hat jede SIMD-Bahn eine entsprechende Stapel-ID (gezeigt als 16 Kontext IDs 0-15 in jedem CAM-Eintrag) und einen Shader-Aufzeichnungszeiger 4201A-B,...n (der als Tag-Wert dient). Der Gruppierungsschaltkreis 4210 kann den Shader-Aufzeichnungszeiger für jede Bahn mit den Tags 4201 in der CAM-Struktur 4201 vergleichen, um eine übereinstimmende Charge zu finden. Wenn eine übereinstimmende Charge gefunden wird, kann die Stapel-ID/Kontext ID zu der Charge hinzugefügt werden. Andernfalls kann ein neuer Eintrag mit einem neuen Shader-Aufzeichnungszeiger-Tag erstellt werden, wobei möglicherweise ein älterer Eintrag mit einer unvollständigen Charge geräumt wird.
  • Ein Ausführungsshader kann den Anrufstapel aus der Zuordnung nehmen, wenn er leer ist, indem er eine Zuordnungsaufhebungsnachricht an die Nachrichteinheit sendet. Die Zuordnungsaufhebungsnachricht wird zu dem Einplaner weitergeleitet, der Stapel-IDs/Kontext IDs für aktive SIMD-Bahnen zu dem freien Pool zurückleitet.
  • Eine hybride Methode für Strahlquerungsbetriebe unter Verwendung einer Kombination aus Strahlquerung fixierter Funktion und Softwarestrahlquerung wird präsentiert. Folglich stellt sie die Flexibilität von Softwarequerung bereit, während die Effizienz von Querung fixierter Funktion beibehalten wird. 43 zeigt eine Beschleunigungsstruktur, die für hybride Querung verwendet werden kann, die ein Baum mit zwei Ebenen mit einer einzigen BVH 4300 oberer Ebene und mehreren BVHs 4301 und 4302 unterer Ebene ist. Grafische Elemente sind rechts gezeigt, um innere Querungspfade 4303, äußere Querungspfade 4304, Querungsknoten 4305, Blattknoten mit Dreiecken 4306 und Blattknoten mit üblichen Primitiven 4307 anzuzeigen.
  • Die Blattknoten mit Dreiecken 4306 in der BVH 4300 der oberen Ebene können Referenzdreiecke, Kreuzungs-Shaderaufzeichnungen für übliche Primitive oder Querungs-Shaderaufzeichnungen sein. Die Blattknoten mit Dreiecken 4306 der BVHs 4301-4302 der unteren Ebene können nur Referenzdreiecke und Kreuzungs-Shaderaufzeichnungen für herkömmliche Primitive sein. Die Art von Referenz wird in dem Blattknoten 4306 codiert. Innere Querung 4303 bezieht sich auf Querung in jeder BVH 4300-4302. Innere Querungsbetriebe weisen Berechnung von Strahl-BVH-Kreuzung auf und Querung über die BVH-Strukturen 4300-4302 ist als äußere Querung bekannt. Innere Querungsbetriebe können effizient in fixierter Funktionshardware implementiert sein, während äußere Querungbetriebe mit annehmbare Arbeitsleistung mit programmierbaren Shadern durchgeführt werden. Folglich können innere Querungsbetriebe unter Verwendung eines Schaltkreises 4010 fixierter Funktion durchgeführt werden und äußere Querungsbetriebe können unter Verwendung des Shader-Ausführungsschaltkreises 4000 durchgeführt werden, der SIMD/SIMT-Kerne/EUs 4001 zur Ausführung programmierbarer Shader aufweist.
  • Es ist zu beachten, dass die SIMD/SIMT-Kerne/EUs 4001 hier manchmal der Einfachheit wegen einfach als „Kerne“, „SIMD-Kerne“, „EUs“, oder „SIMD-Prozessoren“ bezeichnet sind. Ebenso wird der Strahl-BVH-Querungs-/Kreuzungsschaltkreis 4005 manchmal einfach als eine „Querungseinheit“, „Querungs-/Kreuzungseinheit“ oder „Querungs-/Kreuzungsschaltkreis“ bezeichnet. Wenn ein anderer Begriff verwendet wird, ändert der bestimmte Name, der zum Bezeichnen des jeweiligen Schaltkreises/der Logik verwendet wird, die zugrundeliegenden Funktionen nicht, die der Schaltkreis/die Logik wie hier beschrieben durchführt.
  • Ferner, während als eine einzelne Komponente in 40 zur Erklärung dargestellt, kann die Querungs-/Kreuzungseinheit 4005 eine einzelne Querungseinheit und eine separate Kreuzungseinheit aufweisen, von welchen jede in Schaltkreis und/oder Logik wie hier beschrieben implementiert sein kann.
  • Wenn ein Strahl einen Querungsknoten während einer inneren Querung kreuzt, kann ein Querungs-Shader gestartet sein. Der Sortierschaltkreis 4008 kann diese Shader durch Shader-Aufzeichnungszeiger 4201A-B, n gruppieren, um eine SIMD-Charge zu erzeugen, die durch den Einplaner 4007 zur SIMD-Ausführung auf den Grafik-SIMD-Kernen/EUs 4001 gestartet wird. Querungs-Shader können Querung auf mehrere Weisen modifizieren, wodurch ein weiter Bereich an Anwendungen möglich ist. Zum Beispiel kann der Querungs-Shader eine BVH mit einer gröberen Ebene an Detail (LOD, Level of Detail) wählen oder den Strahl transformieren, um starre Körpertransformationen zu ermöglichen. Der Querungs-Shader kann dann innere Querung für die ausgewählte BVH starten.
  • Innere Querung berechnet Strahl-BVH-Kreuzungen durch Queren der BVH und Berechnen von Strahl-Box- und Strahl-Dreieckskreuzungen. Innere Querung wird auf dieselbe Weise von Shadern gestartet, indem sie eine Nachricht an den Benachrichtigungsschaltkreis 4004 senden, der die entsprechende Startnachricht an den Strahl-BVH-Kreuzungsschaltkreis 4005 weiterleitet, der Strahl-BVH-Kreuzungen berechnet.
  • Der Stapel für innere Querung kann lokal in dem Schaltkreis 4010 fixierter Funktion gestartet werden (z.B. in dem Ll-Cache 4006). Wenn ein Strahl einen Blattknoten entsprechend einem Querungs-Shader oder einem Kreuzung Shader kreuzt, kann innere Querung beendet werden und der innere Stapel kann gekürzt werden. Der gekürzte Stapel gemeinsam mit einem Zeiger zu dem Strahl und der BVH kann in Speicher an einer Stelle geschrieben werden, die durch den anrufenden Shader spezifiziert ist, und dann kann der entsprechende Querungs-Shader oder Kreuzungs-Shader gestartet werden. Wenn der Strahl Dreiecke während innerer Querung kreuzt, können die entsprechenden Trefferinformationen als Eingangsargumente diesen Shadern bereitgestellt werden, wie in dem folgenden Code gezeigt. Diese gestarteten Shader können durch den Sortierschaltkreis 4008 gruppiert werden, um SIMD-Chargen zur Ausführung zu erstellen.
  •  struct HitInfo {
     float barycentrics[2];
     float tmax;
     bool innerTravComplete;
     uint primID;
     uint geomID;
     ShaderRecord* leafShaderRecord;
     }
  • Kürzen des inneren Querungsstapels verringert die Kosten dessen Überlaufens zu Speicher. Nach der Methode, die in Restart Trailfor Stackless BVH Traversal, High Performance Graphics (2010), S. 107-111, zum Kürzen des Stapels auf eine kleine Anzahl von Einträgen an der Oberseite des Stapels beschrieben ist, können ein 42-Bit Neustartweg und ein 6-Bit Tiefenwert angewendet werden. Der Neustartweg zeigt Verzweigungen an, die bereits im Inneren des BVH genommen wurden, und der Tiefenwert zeigt die Tiefe einer Querung entsprechend dem letzten Stapeleintrag an. Dies sind ausreichend Informationen, um eine innere Querung zu einem späteren Zeitpunkt wieder aufzunehmen.
  • Innere Querung ist fertig, wenn der innere Stapel leer ist und keine weiteren BVH-Knoten zu testen sind. In diesem Fall wird ein äußerer Stapelhandler gestartet, der die Oberseite des äußeren Stapels hervorholt und Querung wieder aufnimmt, wenn der äußere Stapel nicht leer ist.
  • Äußere Querung kann die Hauptquerungszustandsmaschine ausführen und kann in Programmcode implementiert sein, der von dem Shader-Ausführungsschaltkreis 4000 ausgeführt wird. Er kann eine innere Querungsanfrage unter den folgenden Bedingungen starten: (1) wenn ein neuer Strahl durch einen Treffer-Shader oder einen primären Shader gestartet wird; (2) wenn ein Querungs-Shader eine BVH zur Querung auswählt; und (3) wenn ein äußerer Stapelhandler innere Querung für eine BVH wieder aufnimmt.
  • Wie in 44 veranschaulicht, bevor innere Querung gestartet wird, wird Raum auf dem Anrufstapel 4405 für den Schaltkreis 4010 fixierter Funktion zugeordnet, um den gekürzten inneren Stapel 4410 zu speichern. Versätze 4403-4404 zu der Oberseite des Anrufstapels und dem inneren Stapel werden im Querungszustand 4400 beibehalten, der auch im Speicher 2511 gespeichert wird. Der Querungszustand 4400 weist auch den Strahl im Weltraum 4401 und Objektraum 4402 wie auch Trefferinformationen für die nächste kreuzende Primitive auf.
  • Der Querungs-Shader, Kreuzung Shader und äußere Stapelhandler werden alle durch den Strahl-BVH-Kreuzungsschaltkreis 4005 gestartet. Der Querungs-Shader ordnen auf dem Anrufstapel 4405 zu, bevor eine neue innere Querung für die BVH zweiter Ebene eingeleitet wird. Der äußere Stapelhandler ist ein Shader, der für Aktualisieren der Trefferinformationen und Wiederaufnahme anstehender innerer Querungsaufgaben verantwortlich ist. Der äußere Stapelhandler ist auch für Starten von Treffer- oder Verfehlungs-Shader verantwortlich, wenn Querung abgeschlossen ist. Querung ist abgeschlossen, wenn es keine anstehenden inneren Querungsanfragen zu starten gibt. Wenn Querung abgeschlossen ist und eine Kreuzung gefunden wird, wird ein Treffer-Shader gestartet; anderenfalls wird ein Verfehlungs-Shader gestartet.
  • Während das oben beschriebene hybride Querungsschema einen BVH Hierarchie mit zwei Ebenen verwendet, kann eine beliebige Anzahl von BVH-Ebenen mit einer entsprechenden Änderung in der äußeren Querungsimplementierung ebenso implementiert sein.
  • Zusätzlich, während fixierte Funktionsschaltkreise 4010 oben zum Durchführen von Strahl-BVH-Kreuzungen beschrieben sind, können andere Systemkomponenten auch in fixierten Funktionsschaltkreisen implementiert sein. Zum Beispiel kann der oben beschriebene äußere Stapelhandler ein interner (für den Anwender nicht sichtbarer) Shader sein, der möglicherweise in einem BVH-Querungs-/Kreuzungs-Schaltkreis 4005 fixierter Funktion implementiert sein kann. Diese Implementierung kann verwendet werden, um die Anzahl eingelasteter Shader-Stufen und Umläufe zwischen der Kreuzungshardware 4005 fixierter Funktion und dem Prozessor zu verringern.
  • Die hier beschriebenen Beispiele ermöglichen programmierbare Schattierungs- und Strahlquerungssteuerung unter Verwendung von anwenderdefinierten Funktionen, die mit größerer SIMD-Effizienz auf bestehenden und zukünftigen GPU-Prozessoren laufen können. Programmierbare Steuerung von Strahlquerung ermöglicht mehrere wichtige Merkmale, wie verfahrensmäßige Instanziierung, stochastische Detailebenenauswahl, herkömmliche Primitive-Kreuzung und träge BVH- Aktualisierungen.
  • Eine programmierbare Mehrere-Anweisungen-Mehrere-Daten- (MIMD) Raytracing-Architektur, die spekulative Ausführung von Treffer- und Kreuzungs-Shadern unterstützt, ist auch bereitgestellt. Insbesondere konzentriert sich die Architektur auf Verringern des Planungs- und Kommunikationsmehraufwands zwischen den programmierbaren SIMD/SIMT-Kernen/Ausführungseinheiten 4001, die oben in Bezug auf 40 beschrieben sind, und MIMD Querungs-/Kreuzungseinheiten 4005 fixierter Funktion in einer hybriden Raytracing-Architektur. Mehrere spekulative Ausführungsschemata von Treffer- und Kreuzungs-Shadern sind unten beschrieben, die in eine einzelne Charge von der Querungshardware eingelastet werden können, wobei mehrere Querungs- und Schattierungsumläufe vermieden werden. Ein dedizierter Schaltkreis kann zum Implementieren dieser Techniken verwendet werden.
  • Die Ausführungsformen der Erfindung sind besonderes in Anwendungsfällen nützlich, wo die Ausführung von mehreren Treffer- oder Kreuzungs-Shadern von einer Strahlquerungsanfrage gewünscht ist, die einen signifikanten Mehraufwand auferlegen würde, wenn ohne dedizierte Hardwareunterstützung implementiert. Diese weisen die nächste k-Trefferabfrage (Starten eines Treffer-Shaders für die k nächsten Kreuzungen) und mehrere programmierbare Kreuzungs-Shader auf, ohne aber darauf begrenzt zu sein.
  • Die hier beschriebenen Techniken können als Erweiterungen zu der in 40 veranschaulichten (und in Bezug auf 40-44 beschriebenen) Architektur implementiert sein. Insbesondere bauen die vorliegenden Ausführungsformen der Erfindung auf dieser Architektur mit Verbesserungen auf, um die Arbeitsleistung der oben erwähnten Anwendungsfälle zu verbessern.
  • Eine Arbeitsleistungseinschränkung hybrider Raytracing-Querungsarchitekturen ist der Mehraufwand beim Starten von Querungsabfragen von den Ausführungseinheiten und der Mehraufwand beim Aufrufen programmierbarer Shader von der Raytracing-Hardware. Wenn mehrere Treffer- oder Kreuzungs-Shader während der Querung desselben Strahls aufgerufen werden, erzeugt dieser Mehraufwand „Ausführungsumläufe“ zwischen den programmierbaren Kernen 4001 und Querungs-/Kreuzungseinheit 4005. Dies übt zusätzlichen Druck auf die Sortiereinheit 4008 aus, die SIMD/SIMT-Kohärenz aus den einzelnen Shader-Aufrufen extrahieren muss.
  • Mehrere Aspekte von Raytracing erfordern programmierbare Steuerung, die durch die verschiedenen Arten von Shadern ausgedrückt sind, die oben in TABELLE A aufgelistet sind (d.h. Primär, Treffer, jeder Treffern, Verfehlung, Kreuzung, Querung und anrufbar). Es können mehrere Shader für jede Art vorhanden sein. Zum Beispiel kann jedes Material einen anderen Treffer-Shader haben. Manche dieser Arten von Shader sind in der aktuellen Microsoft® Raytracing API definiert.
  • Als eine kurze Übersicht wird rekursives Raytracing durch eine API-Funktion eingeleitet, die der GPU befiehlt, einen Satz von primären Shadern zu starten, die Strahl-Szene-Kreuzungen (implementiert in Hardware und/oder Software) für primäre Strahlen überspannen können. Dies kann wiederum andere Shader starten, wie Querungs-, Treffer- oder Verfehlungs-Shader. Ein Shader, der einen Kind-Shader startet, kann auch einen rückgeleiteten Wert von diesem Shader empfangen. Anrufbare Shader sind Allzweckfunktionen, die direkt von einem anderen Shader gestartet werden können und auch Werte zu dem anrufenden Shader zurückleiten können.
  • Strahlquerung berechnet Strahl-Szene-Kreuzungen durch Queren und Kreuzen von Knoten in einer Begrenzungsvolumenhierarchie (BVH). Jüngste Forschung hat gezeigt, dass die Effizienz einer Berechnung von Strahl-Szene-Kreuzungen um mehr als eine Größenordnung unter Verwendung von Techniken verbessert werden kann, die für Hardware fixierter Funktion besser geeignet sind, wie Arithmetik verringerter Präzision, BVH Kompression, Pro-Strahl-Zustandsmaschinen, dedizierte Kreuzungspipeline und herkömmliche Caches.
  • Die in 40 gezeigte Architektur umfasst ein solches System, wo ein Array von SIMD/SIMT-Kernen/Ausführungseinheiten 4001 mit einer Raytracing/Kreuzungseinheit 4005 fixierter Funktion interagiert, um programmierbares Raytracing durchzuführen. Programmierbare Shader werden auf SIMD/SIMT-Threads auf den Ausführungseinheiten/Kernen 4001 abgebildet, wo SIMD/SIMT-Nutzung, Ausführung und Datenkohärenz für eine optimale Arbeitsleistung kritisch sind. Strahlabfragen brechen häufig Kohärenz aus verschiedenen Gründen, wie:
    • • Ouerungsdivergenz: die Dauer der BVH-Querung variiert stark unter Strahlen, die asynchrone Strahlverarbeitung favorisieren.
    • • Ausführungsdivergenz: Strahlen, die von verschiedenen Bahnen desselben SIMD/SIMT-Threads gestartet werden, können zu verschiedenen Shader-Aufrufen führen.
    • • Datenzugriffsdivergenz: Strahlen, die auf verschiedene Oberflächen treffen, tasten verschiedene BVH-Knoten und Primitive ab und Shader greifen zum Beispiel auf verschiedene Texturen zu. Eine Vielzahl anderer Szenarien können Datenzugriffsdivergenz verursachen.
  • Die SIMD/SIMT-Kerne/Ausführungseinheiten 4001 können Varianten von hier beschriebenen Kernen/Ausführungseinheiten sein, aufweisend Grafikkern(e) 415A-415B, Shader-Kerne 1355A-N, Grafikkerne 3130, Grafikausführungseinheit 608, Ausführungseinheiten 852A-B oder andere hier beschriebene Kerne/Ausführungseinheiten. Die SIMD/SIMT-Kerne/Ausführungseinheiten 4001 können anstelle der Grafikkern(e) 415A-415B, Shader-Kerne 1355A-N, Grafikkerne 3130, Grafikausführungseinheit 608, Ausführungseinheiten 852A-B oder anderen hier beschriebenen Kernen/Ausführungseinheiten verwendet werden.
  • Daher ist die Offenbarung beliebiger Merkmale in Kombination mit dem (den) Grafikkern(en) 415A-415B, Shader-Kernen 1355A-N, Grafikkernen 3130, Grafikausführungseinheit 608, Ausführungseinheiten 852A-B oder anderen hier beschriebenen Kerne/Ausführungseinheiten auch eine entsprechende Kombination mit den SIMD/SIMT-Kernen/Ausführungseinheiten 4001 von 40, ist aber nicht auf eine solche begrenzt.
  • Die Raytracing/Kreuzungseinheit 4005 fixierter Funktion kann die ersten zwei Herausforderungen durch einzelnes Verarbeitung jedes Strahls außerhalb der Reihe meistern. Dies bricht jedoch SIMD/SIMT-Gruppen auf. Die Sortiereinheit 4008 ist somit verantwortlich, neue kohärente SIMD/SIMT-Gruppen von Shader-Aufrufen zu bilden, die wieder den Ausführungseinheiten eingelastet werden.
  • Die Vorteile einer solchen Architektur im Vergleich zu einer rein auf Software beruhenden Raytracing Implementierung direkt an den SIMD/SIMT-Prozessoren sind leicht zu erkennen. Es gibt jedoch einen Mehraufwand, der mit der Benachrichtigung zwischen den SIMD/SIMT-Kernen/Ausführungseinheiten 4001 (manchmal hier als SIMD/SIMT-Prozessoren oder Kerne/EUs bezeichnet) und der MIMD Querungs-/Kreuzungseinheit 4005 verknüpft ist. Ferner kann die Sortiereinheit 4008 keine perfekte SIMD/SIMT-Nutzung aus inkohärenten Shader-Anrufen extrahieren.
  • Anwendungsfälle können identifiziert werden, wo Shader-Aufrufe während Querung besonders häufig sein können. Verbesserungen sind für hybride MIMD-Raytracing-Prozessoren beschrieben, um den Mehraufwand einer Kommunikation zwischen den Kernen/EUs 4001 und Querungs-/Kreuzungseinheiten 4005 signifikant zu verringern. Dies kann besonders günstig sein, wenn die k-nächsten Kreuzungen und Implementierung von programmierbaren Kreuzungs-Shadern gefunden werden. Es ist jedoch zu beachten, dass die hier beschriebenen Techniken nicht auf ein bestimmtes Verarbeitungsszenarium begrenzt sind.
  • Eine Zusammenfassung der hohen Kosten des Raytracing-Kontextumschaltens zwischen den Kernen/EUs 4001 und Querungs-/Kreuzungseinheit 4005 fixierter Funktion ist unten bereitgestellt. Der Großteil des Arbeitsleistungsmehraufwands wird durch diese zwei Kontextumschaltungen, jedes Mal, wenn der Shader-Aufruf während einer einzigen Strahlquerung notwendig ist, verursacht.
  • Jede SIMD/SIMT-Bahn, die einen Strahl startet, erzeugt eine Startnachricht an die Querungs-/Kreuzungseinheit 4005, die mit der zu querenden BVH verknüpft ist. Die Daten (Strahlquerungskontext) werden zu der Querungs-/Kreuzungseinheit 4005 über die Startnachrichtung und (gecacht) Speicher weitergeleitet. Wenn die Querungs-/Kreuzungseinheit 4005 bereit ist, der Startnachricht einen neuen Hardwarethread zuzuweisen, lädt sie den Querungszustand und führt Querung an der BVH durch. Es gibt auch Einrichtungskosten, die vor dem ersten Querungsschritt an der BVH durchgeführt werden müssen.
  • 45 veranschaulicht einen Betriebsablauf einer programmierbaren Raytracing-Pipeline. Die schattierten Elemente, die Querung 4502 und Kreuzung 4503 aufweisen, können in fixierten Funktionsschaltkreisen implementiert sein, während die übrigen Elemente mit programmierbaren Kernen/Ausführungseinheiten implementiert sein können.
  • Ein primärer Strahl-Shader 4501 sendet Arbeit an den Querungsschaltkreis bei 4502, die den (die) aktuellen Strahl(en) durch die BVH (oder andere Beschleunigungsstruktur) quert. Wenn ein Blattknoten erreicht ist, ruft der Querungsschaltkreis den Kreuzungsschaltkreis bei 4503 an, der nach Identifizieren einer Strahl-Dreieckskreuzung einen beliebigen Treffer-Shader bei 4504 aufruft (der Ergebnisse zurück an den Querungsschaltkreis bereitstellen kann, wie angezeigt).
  • Alternativ kann die Querung vor Erreichen eines Blattknotens beendet sein, und ein Nächster-Treffer-Shader wird bei 4507 (falls ein Treffer aufgezeichnet wurde) oder ein Verfehlungs-Shader bei 4506 (im Fall einer Verfehlung) aufgerufen.
  • Wie bei 4505 angezeigt, kann ein Kreuzungs-Shader aufgerufen werden, wenn der Querungsschaltkreis einen herkömmlichen Primitiv-Blattknoten erreicht. Ein herkömmliches Primitiv kann jedes Primitiv ungleich einem Dreieck sein, wie ein Vieleck oder ein Polyeder (z.B. Tetraeder, Voxel, Hexaeder, Keile, Pyramiden oder ein anderes „unstrukturiertes“ Volumen). Der Kreuzungs-Shader 4505 identifiziert sämtliche Kreuzungen zwischen dem Strahl und herkömmlichen Primitiv zu einem beliebigen Treffer-Shader 4504, der eine Trefferverarbeitung implementiert.
  • Wenn Hardwarequerung 4502 eine programmierbare Stufe erreicht, kann die Querungs-/Kreuzungseinheit 4005 eine Shader-Einlastungsnachricht an einen relevanten Shader 4505-4507 erzeugen, die einer einzelnen SIMD-Bahn der Ausführungseinheit(en) entspricht, die zum Ausführen des Shaders verwendet werden. Da Einlastungen in beliebiger Reihenfolge von Strahlen erfolgen und sie in den angerufenen Programmen divergent sind, kann die Sortiereinheit 4008 mehrere Einlastungsanrufe sammeln, um kohärente SIMD-Chargen zu extrahieren. Der aktualisierte Querungszustand und die optionalen Shaderargumente können von der Querungs-/Kreuzungseinheit 4005 in Speicher 2511 geschrieben werden.
  • Beim Problem der k-nächsten Kreuzung wird ein Nächster-Treffer-Shader 4507 für die ersten k Kreuzungen ausgeführt. Auf herkömmliche Weise würde dies bedeuten, die Strahlquerung beim Auffinden der nächsten Kreuzung zu beenden, einen Treffer-Shader aufzurufen und einen neuen Strahl von dem Treffer-Shader zu starten, um die nächste am naheliegendste Kreuzung zu finden (wobei der Strahlenursprung versetzt ist, sodass dieselbe Kreuzung nicht wieder auftritt). Es ist leicht zu erkennen, dass diese Implementierung k Strahlenstarts für einen einzigen Strahl benötigt. Eine andere Implementierung arbeitet mit Beliebiger-Treffer-Shadern 4504, die für alle Kreuzungen aufgerufen werden und eine globale Liste nächster Kreuzungen führen, unter Verwendung eines Einsetzsortierbetriebs. Das Hauptproblem bei dieser Methode ist, dass es keine obere Grenze für Aufrufe von Beliebiger-Treffer-Shadern gibt.
  • Wie erwähnt, kann ein Kreuzungs-Shader 4505 auf (herkömmlichen) Primitiven ungleich einem Dreieck aufgerufen werden. Abhängig von dem Ergebnis des Kreuzungstests und des Querungszustands (anstehende Knoten- und Primitiv-Kreuzungen), kann die Querung desselben Strahls nach Ausführung des Kreuzungs-Shaders 4505 fortgesetzt werden. Daher kann Finden des nächsten Treffers mehrere Umläufe zu der Ausführungseinheit erfordern.
  • Ein Schwerpunkt kann auch auf die Verringerung von SIMD-MIMD Kontextumschaltungen für Kreuzungs-Shader 4505 und Treffer-Shader 4504, 4507 durch Änderungen an der Querungshardware und dem Shader-Planungsmodell gelegt werden. Zuerst schiebt der Strahlquerungsschaltkreis 4005 Shader-Aufrufe auf, indem mehrere mögliche Aufrufe gesammelt und diese in eine größere Charge eingelastet werden. Zusätzlich können gewisse Aufrufe, die sich als unnötig herausstellen, in dieser Stufe ausgelesen werden. Ferner kann der Shader-Einplaner 4007 mehrere Shader-Aufrufe von demselben Querungskontext zu einer einzigen SIMD-Charge aggregieren, was zu einer einzigen Strahlstartnachricht führt. In einer beispielhaften Implementierung unterbricht die Querungshardware 4005 den Querungs-Thread und wartet auf die Ergebnisse von mehreren Shader-Aufrufen. Diese Betriebsart wird hier als „spekulative“ Shader-Ausführung bezeichnet, da sie das Einlasten mehrerer Shader erlaubt, von welchen einige nicht angerufen werden, wenn aufeinanderfolgende Aufrufe verwendet werden.
  • 46A veranschaulicht ein Beispiel, in dem der Querungsbetrieb auf mehrere herkömmliche Primitive 4650 in einem Teilbaum trifft, und 46B veranschaulicht, wie dies mit drei Kreuzungseinlastungszyklen C1-C3 aufgelöst werden kann. Insbesondere kann der Einplaner 4007 drei Zyklen benötigen, um die Arbeit dem SIMD-Prozessor 4001 zu unterbreiten, und der Querungsschaltkreis 4005 benötigt drei Zyklen, um die Ergebnisse der Sortiereinheit 4008 bereitzustellen. Der Querungszustand 4601, den der Querungsschaltkreis 4005 benötigt, kann in einem Speicher wie einem lokalen Cache (z.B. ein L1-Cache und/oder L2-Cache) gespeichert werden.
  • Aufgeschobene Raytracing-Shader-Aufrufe
  • Die Art, in der der Hardware-Querungszustand 4601 verwaltet wird, um die Ansammlung mehrerer potentieller Kreuzungs- oder Trefferaufrufe in einer Liste zu ermöglichen, kann auch modifiziert werden. Zu einem bestimmten Zeitpunkt während Querung kann jeder Eintrag in der Liste verwendet werden, um einen Shader-Aufruf zu erzeugen. Zum Beispiel können die k-nächsten Kreuzungspunkte auf der Querungshardware 4005 und/oder im Querungszustand 4601 in Speicher gesammelt werden und Treffer-Shader können für jedes Element aufgerufen werden, wenn die Querung abgeschlossen ist. Für Treffer-Shader können mehrere potentielle Kreuzungen für einen Teilbaum in der BVH gesammelt werden.
  • Für den nächste-k Verwendungsfall ist der Vorteil dieser Methode, dass anstelle von k-1 Umläufen zu dem SIMD-Kern/der EU 4001 und k-1 neuen Strahlstartnachrichten, alle Treffer-Shader von demselben Querungs-Thread während eines einzigen Querungsbetriebs auf dem Querungsschaltkreis 4005 aufgerufen werden. Eine Herausforderung bei potentiellen Implementierungen ist, dass es nicht einfach ist, die Ausführungsreihenfolge von Treffer-Shadern zu garantieren (die „Umlauf‟-Standardmethode garantiert, dass der Treffer-Shader der nächsten Kreuzung als erster ausgeführt wird usw.). Dies kann entweder durch Synchronisation der Treffer-Shader oder die Lockerung der Reihenfolge behandelt werden.
  • Für den Verwendungsfall eines Kreuzungs-Shaders weiß der Querungsschaltkreis 4005 im Voraus nicht, ob ein bestimmter Shader einen positiven Kreuzungstest zurückmelden wird. Es ist jedoch möglich, spekulativ mehrere Kreuzungs-Shaders auszuführen, und wenn mindestens einer ein positives Trefferergebnis rückmeldet, dieser in den global nächsten Treffer gereiht wird. Spezifische Implementierungen müssen eine optimale Anzahl aufgeschobener Kreuzungstests finden, um die Anzahl an Einlastungsanrufen zu verringern, aber ein Anrufen zu vieler redundanter Kreuzungs-Shader zu verringern.
  • Aggregierte Shader-Aufrufe von den Ouerungsschaltkreisen
  • Wenn mehrere Shader von demselben Strahlstart auf dem Querungsschaltkreis 4005 eingelastet werden, können Verzweigungen in dem Fluss der Strahlquerungsalgorithmen erzeugt werden. Dies kann für Kreuzungs-Shader problematisch sein, da der Rest der BVH-Querung von dem Ergebnis aller eingelasteter Kreuzungstests abhängt. Dies bedeutet, dass ein Synchronisationsbetrieb notwendig ist, um auf das Ergebnis der Shader-aufrufe zu warten, was auf asynchroner Hardware herausfordernd sein kann.
  • Zwei Verschmelzungspunkte der Ergebnisse der Shader-Anrufe können sein: der SIMD-Prozessor 4001 und der Querungsschaltkreis 4005. In Bezug auf den SIMD-Prozessor 4001 können mehrere Shaders synchronisieren und ihre Ergebnisse unter Verwendung von Standardprogrammierungsmodellen aggregieren. Eine relativ einfach Möglichkeit, dies durchzuführen, ist die Verwendung global Atomics und aggregierter Ergebnisse in geteilter Datenstruktur im Speicher, wo Kreuzungsergebnisse mehrerer Shader gespeichert sein könnten. Dann kann der letzte Shader die Datenstruktur auflösen und den Querungsschaltkreis 4005 zurückrufen, um die Querung fortzusetzen.
  • Eine effizientere Methode kann auch implementiert werden, die die Ausführung mehrerer Shader-Aufrufe auf Bahnen desselben SIMD-Threads auf dem SIMD-Prozessor 4001 begrenzt. Die Kreuzungstests werden dann lokal unter Verwendung von SIMD/SIMT-Reduktionsbetrieben reduziert (anstatt auf globalen Atomics zu beruhen). Diese Implementierung kann auf neuen Schaltkreisen innerhalb der Sortiereinheit 4008 beruhen, um eine kleine Charge von Shader-Aufrufen in derselben SIMD-Charge bleiben zu lassen.
  • Die Ausführung des Querungs-Threads kann ferner auf dem Querungsschaltkreis 4005 unterbrochen werden. Unter Verwendung des herkömmlichen Ausführungsmodells, wenn ein Shader während Querung eingelastet wird, wird der Querungs-Thread beendet und der Strahlquerungszustand wird im Speicher gespeichert, um die Ausführung anderer Strahlstartbefehle zu erlauben, während die Ausführungseinheiten 4001 die Shader verarbeiten. Wenn der Querungs-Thread nur unterbrochen ist, muss der Querungszustand nicht gespeichert werden und kann auf jedes Shader-Ergebnis separat waren. Diese Implementierung kann Schaltkreise aufweisen, um Deadlocks zu vermeiden und ausreichende Hardwarenutzung bereitzustellen.
  • 47-48 veranschaulichen Beispiele eines aufgeschobenen Modells, das einen einzigen Shader-Aufruf auf den SIMD-Kernen/Ausführungseinheiten 4001 mit drei Shadern 4701 aufruft. Wenn behalten, werden alle Kreuzungstests innerhalb derselben SIMD/SIMT-Gruppe ausgewertet. Folglich kann die nächste Kreuzung auch auf den programmierbaren Kernen/Ausführungseinheiten 4001 berechnet werden.
  • Wie erwähnt, kann die gesamte oder ein Teil der Shader-Aggregation und/oder - Aufschiebung von dem Querungs-/Kreuzungsschaltkreis 4005 und/oder dem Kern /EU-Einplaner 4007 durchgeführt werden. 47 veranschaulicht, wie Shader-Aufschiebungs-/-Aggregationsschaltkreis 4706 im Einplaner 4007 Planung von Shadern aufschieben kann, die mit einem/einer bestimmten SIMD/SIMT-Thread/Bahn verknüpft sind, bis ein spezifiziertes auslösendes Ereignis eingetreten ist. Nach Detektieren des auslösenden Ereignisses lastet der Einplaner 4007 die mehreren aggregierten Shader in einer einzelnen SIMD/SIMT-Charge in die Kerne/EUs 4001 ein.
  • 48 veranschaulicht, wie Shader-Aufschiebungs-/-Aggregationsschaltkreis 4805 im Querungs-/Kreuzungsschaltkreis 4005 Planung von Shadern aufschieben kann, die mit einem/einer bestimmten SIMD -Thread/Bahn verknüpft sind, bis ein spezifiziertes auslösendes Ereignis eingetreten ist. Nach Detektieren des auslösenden Ereignisses unterbreitet der Querungs-/Kreuzungsschaltkreis 4005 die aggregierten Shader der Sortiereinheit 4008 in einer einzigen SIMD/SIMT-Charge.
  • Es ist jedoch zu beachten, dass die Shader-Aufschiebungs-/-Aggregationstechniken in verschiedenen anderen Komponenten wie der Sortiereinheit 4008 implementiert sein können oder über mehrere Komponenten verteilt sein können. Zum Beispiel kann der Querungs-/Kreuzungsschaltkreis 4005 einen ersten Satz von Shader-Aggregationsbetrieben durchführen und der Einplaner 4007 kann einen zweiten Satz von Shader-Aggregationsbetrieben durchführen um sicherzustellen, dass Shader für einen SIMD-Thread effizient auf den Kernen/EUs 4001 geplant werden können.
  • Das „auslösende Ereignis“, um zu veranlassen, dass die aggregierten Shader bei den Kernen/EUs eingelastet werden, kann ein Verarbeitungsereignis sein, wie eine bestimmte Anzahl akkumulierter Shader oder eine Minimallatenz, die mit einem bestimmten Thread verknüpft ist. Alternativ oder zusätzlich kann das auslösende Ereignis ein zeitliches Ereignis sein, wie eine gewisse Dauer seit dem Aufschieben des ersten Shaders oder eine bestimmte Anzahl von Prozessorzyklen. Andere Variable, wie die aktuelle Arbeitslast auf den Kernen/EUs 4001 und der Querungs-/Kreuzungseinheit 4005 können auch von dem Einplaner 4007 ausgewertet werden um zu bestimmen, wann die SIMD/SIMT-Charge von Shadern einzulasten ist.
  • Verschiedene Ausführungsformen der Erfindung können unter Verwendung verschiedener Kombinationen der oben stehenden Methoden implementiert werden, basierend auf der besonderen verwendeten Systemarchitektur und den Anforderungen der Anwendung.
  • Raytracing- Anweisungen
  • Die unten beschriebenen Raytracing-Anweisungen sind in einer Anweisungssatzarchitektur (ISA) aufgewiesen, die die CPU 3199 und/oder GPU 3105 unterstützt. Falls von der CPU ausgeführt, können die Einzelne-Anweisung-Mehrere-Daten- (SIMD) Anweisungen Vektor/gepackte Quellen- und Zielortregister benutzen, um die beschriebenen Betriebe durchzuführen, und können von einem CPU-Kern decodiert und ausgeführt werden. Falls von einer GPU 3105 ausgeführt, können die Anweisungen von Grafikkernen 3130 ausgeführt werden. Zum Beispiel können beliebige der oben beschriebenen Ausführungseinheiten (EUs) 4001 die Anweisungen ausführen. Alternativ oder zusätzlich können die Anweisungen durch Ausführungsschaltkreise auf den Raytracing-Kernen 3150 und/oder Tensor-Kernen Tensor-Kernen 3140 ausgeführt werden.
  • 49 veranschaulicht eine Architektur zum Ausführen der unten beschriebenen Raytracing-Anweisungen. Die veranschaulichte Architektur kann in einen oder mehrere der oben beschriebenen Kerne 3130, 3140, 3150 integriert sein (siehe z.B. 31 und zugehörigen Text) oder kann in einer anderen Prozessorarchitektur aufgewiesen sein.
  • In Betrieb ruft eine Anweisungsabrufeinheit 4903 Raytracing-Anweisungen 4900 vom Speicher 3198 ab und ein Decodierer 4995 decodiert die Anweisungen. In einer Implementierung decodiert der Decodierer 4995 Anweisungen, um ausführbare Betriebe (z.B. Mikrobetriebe oder uops in einem mikrocodierten Kern) zu erzeugen. Alternativ können einige oder alle der Raytracing-Anweisungen 4900 ohne Decodieren ausgeführt werden, wobei als solches ein Decodierer 4904 nicht erforderlich ist.
  • In jeder Implementierung plant ein Einplaner/Dispatcher 4905 die Anweisungen (oder Betriebe) und lastet sie über einen Satz von Funktionseinheiten (FUs) 4910-4912 ein. Die veranschaulichte Implementierung weist eine Vektor FU 4910 zum Ausführen von Einzelne-Anweisung-Mehrere-Daten- (SIMD) Anweisungen auf, die gleichzeitig auf mehreren gepackten Datenelementen arbeiten, die in Vektorregistern 4915 gespeichert sind, und eine skalare FU 4911 zum Arbeiten auf Skalarwerten, die in einem oder mehreren Skalarregistern 4916 gespeichert sind. Eine optionale Raytracing-FU 4912 kann gepackte Datenwerte bearbeiten, die in den Vektorregistern 4915 gespeichert sind, und/oder Skalarwerte, die in den Skalarregistern 4916 gespeichert sind. In einer Implementierung ohne eine dedizierte FU 4912 können die Vektor FU 4910 und möglicherweise die skalare FU 4911 die unten beschriebenen Raytracing-Anweisungen durchführen.
  • Die verschiedenen FUs 4910-4912 greifen auf Raytracing-Daten 4902 (z.B. Querungs-/Kreuzungsdaten) zu, die zum Ausführen der Raytracing-Anweisungen 4900 notwendig sind, aus den Vektorregistern 4915, dem Skalarregister 4916 und/oder dem lokalen Cache-Teilsystem 4908 (z.B. ein L1-Cache) zu. Die FUs 4910-4912 können auch Zugriffe auf Speicher 3198 über Last- und Speicheroperationen durchführen und das Cache-Teilsystem 4908 kann unabhängig arbeiten, um die Daten lokal zwischenzuspeichern.
  • Während die Raytracing-Anweisungen verwendet werden können, um Arbeitsleistung für Strahlquerung/-kreuzung und BVH-Aufbauten zu verbessern, können sie auch bei anderen Bereichen anwendbar sein, wie Hochleistungsberechnung (HPC, High Performance Computing) und Allzweck-GPU (GPGPU, General Purpose GPU) Implementierungen.
  • In den folgenden Beschreibungen wird manchmal der Begriff Doppelwort mit dw abgekürzt und ein Byte ohne Zeichen wird mit ub abgekürzt. Zusätzlich können sich die Quellen- und Zielregister, auf die unten Bezug genommen wird, (z.B. src0, src1, dest usw.) auf Vektorregister 4915 oder in manchen Fällen eine Kombination aus Vektorregistern 4915 und Skalarregistern 4916 beziehen. Typischerweise, wenn ein Quellen- oder Zielortwert, der von einer Anweisung verwendet wird, gepackte Datenelemente aufweist (z.B. wo eine Quelle oder ein Zielort N Datenelemente speichert), werden Vektorregister 4915 verwendet. Andere Werte können Skalarregister 4916 oder Vektorregister 4915 verwenden.
  • Entauantisieren
  • Ein Beispiel für die Entquantisierungsanweisung „entquantisiert“ zuvor quantisierte Werte. Beispielsweise können in einer Raytracing-Implementierung gewisse BVH-Teilbäume quantisiert werden, um Datenspeicher- und Bandbreitenanforderungen zu verringern. Die Entquantisierungsanweisung kann die Form von dequantize dest src0 src1 src2 annehmen, wo Quellenregister src0 N Bytes ohne Zeichen speichert, Quellenregister src1 1 Byte ohne Zeichen speichert, Quellenregister src2 1 Gleitkommawert speichert und Zielortregister dest N Gleitkommawerte speichert. Alle dieser Register können Vektorregister 4915 sein. Alternativ können src0 und dest Vektorregister 4915 sein und src 1 und src2 können Skalarregister 4916 sein.
  • Die folgende Codesequenz definiert eine bestimmte Implementierung der entquantisierten Anweisung:
  •  für (int i = 0; i < SIMD_WIDTH) {
     wenn (execMask[i]) { 
     dst[i] = src2[i] + Idexp(convert_to_float(srcO[i]),src1),
      }
     }
  • In diesem Beispiel multipliziert ldexp einen Doppelpräzisionsgleitkommawert mit einer spezifizierten ganzzahligen Potenz von zwei (d.h. ldexp(x, exp) = x * 2exp). Wenn in dem obenstehenden Code der Ausführungsmaskenwert, der mit dem aktuellen SIMD-Datenelement (execMask[i])) verknüpft ist, auf 1 gestellt ist, dann wird das SIMD-Datenelement an Stelle i in src0 zu einem Gleitkommawert umgewandelt und mit der ganzzahligen Potenz des Werts in src1 (2src1 value) multipliziert, und dieser Wert wird zu dem entsprechenden SIMD-Datenelement in src2 addiert.
  • Selektives Min oder Max
  • Eine selektive Min- oder Max-Anweisung kann entweder einen Min- oder einen Max-Betrieb pro Bahn durchführen (d.h. das Minimum oder Maximum eines Satzes von Werten zurückleiten), wie durch ein Bit in einer Bitmaske angezeigt. Die Bitmaske kann die Vektorregister 4915, Skalarregister 4916 oder einen separaten Satz von Maskenregistern (nicht gezeigt) verwenden. Die folgende Codesequenz definiert eine besondere Implementierung der Min/Max-Anweisung: sel_min_max dest src0 src1 src2, wo src0 N Doppelwörter speichert, src1 N Doppelwörter speichert, src2 ein Doppelwort speichert und das Zielortregister N Doppelwörter speichert.
  • Die folgende Codesequenz definiert eine besondere 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 nach links verschoben um i UND-verknüpft mit src2) verwendet, um entweder das Minimum des i-ten Datenelements in src0 und oder das Maximum des i-ten Datenelements in src0 und auszuwählen. Der Betrieb wird für das i-te Datenelement nur durchgeführt, wenn der Ausführungsmaskenwert, der mit dem aktuellen SIMD-Datenelement (execMask[i])) verknüpft ist, auf 1 gestellt ist.
  • Shuffle Index-Anweisung
  • Eine Shuffle Index-Anweisung kann jeden Satz von Eingangsbahnen zu den Ausgangsbahnen kopieren. Für eine SIMD-Breite von 32 kann diese Anweisung bei einem niedrigeren Durchsatz ausgeführt werden. Diese Anweisung nimmt die Form: shuffle_index dest src0 src1 <optional flag> an, wo src0 N Doppelwörter speichert, src1 N Bytes ohne Zeichen (d.h. den Indexwert) speichert und dest N Doppelwörter speichert.
  • Die folgende Codesequenz definiert eine besondere Implementierung der Shuffle Index-Anweisung:
    Figure DE102020132557A1_0001
    Figure DE102020132557A1_0002
  • Im obenstehenden Code identifiziert der Index in src1 die aktuelle Bahn. Wenn der i-te Wert in der Ausführungsmaske auf 1 gestellt ist, wird eine Prüfung durchgeführt um sicherzustellen, dass die Quellenbahn im Bereich von 0 bis zur SIMD-Breite ist. Wenn dies zutrifft, wird das Flag gesetzt (srcLaneMod) und Datenelement i des Zielorts wird gleich dem Datenelement i mit src0 eingestellt. Wenn die Bahn innerhalb des Bereichs ist (d.h. gültig ist), wird der Indexwert von src1 (srcLane0) als ein Index in src0 (dst[i] = src0[srcLane]) verwendet.
  • Zwischenwert-Shuffle Up/Dn/XOR-Anweisung
  • Eine Zwischenwert-Shuffle-Anweisung kann eingegebene Datenelemente/Bahnen basierend auf einem Zwischenwert der Anweisung shuffeln. Der Zwischenwert kann Verschieben der Eingangsbahnen um 1, 2, 4, 8 oder 16 Positionen angeben, basierend auf dem Wert des Zwischenwerts. Optional kann ein zusätzliches Skalarquellenregister als ein Füllwert spezifiziert werden. Wenn der Quellenbahnindex ungültig ist, wird der Füllwert (falls bereitgestellt) an der Datenelementstelle im Zielort gespeichert. Wenn kein Füllwert bereitgestellt ist, wird die Datenelementstelle auf nur 0 gestellt.
  • Ein Flag-Register kann als Quellenmaske verwendet werden. Wenn das Flag-Bit für eine Quellenbahn auf 1 gesetzt ist, kann die Quellenbahn als ungültig markiert werden und die Anweisung kann fortfahren.
  • Die Folgenden sind Beispiele von verschiedenen Implementierungen der Zwischenwert-Shuffle-Anweisung:
    • 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 besondere Implementierung der Zwischenwert-Shuffle-Anweisung:
    Figure DE102020132557A1_0003
  • Hier werden die Eingangsdatenelemente/Bahnen um 1, 2, 4, 8 oder 16 Positionen verschoben, basierend auf dem Wert des Zwischenwerts. Das Register src1 ist ein zusätzliches Skalarquellenregister, das als ein Füllwert verwendet wird, der an der Datenelementstelle im Zielort gespeichert wird, wenn der Quellenbahnindex ungültig ist. Wenn kein Füllwert bereitgestellt ist und der Quellenbahnindex ungültig ist, wird die Datenelementstelle im Zielort auf 0s gestellt. Das Flagregister (FLAG) wird als eine Quellenmaske verwendet. Wenn das Flag-Bit für eine Quellenbahn auf 1 gesetzt ist, wird die Quellenbahn als ungültig markiert und die Anweisung fährt wie oben beschrieben fort.
  • Indirekte Shuffle Up/Dn/XOR Anweisung
  • Die indirekte Shuffle-Anweisung hat einen Quellenoperanden (src1), der die Abbildung von Quellenbahnen auf Zielortbahnen steuert. Die indirekte Shuffle-Anweisung kann die Form annehmen:
  •  shuffle_<up/dn/xor> dest src0 src1 <optional flag>
    wo src0 N Doppelwörter speichert, 1 Doppelwort speichert und dest N Doppelwörter speichert.
  • Die folgende Codesequenz definiert eine besondere Implementierung der Zwischenwert-Shuffle-Anweisung:
  •  für (int i = 0; i < SIMD_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];
     }
     }
    }
  • Somit arbeitet die indirekte Shuffle-Anweisung auf ähnliche Weise wie die oben beschriebene Zwischenwert-Shuffle-Anweisung, aber die Abbildung von Quellenbahnen auf Zielortbahnen wird durch das Quellenregister und nicht den Zwischenwert gesteuert.
  • Querbahn-Min/Max-Anweisung
  • Eine Querbahn-Minimum/Maximum-Anweisung kann für Gleitkomma- und Ganzzahl-Datentypen unterstützt werden. Die Querbahn-Minimumanweisung kann die Form lane_min dest src0 annehmen und die Querbahn-Maximumanweisung kann die Form lane_max dest src0 annehmen, wo src0 N Doppelwörter speichert und dest 1 Doppelwort speichert.
  • Beispielsweise definiert die folgende Codesequenz eine besondere Implementierung des Querbahnminimums:
  •  dst = src[0];
     für (int i = 1; i < SIMD_WIDTH) {  wenn (execMask[i]) {
     dst = min(dst, src[i]);
     }
    }
  • In diesem Beispiel wird der Doppelwortwert in Datenelementposition i des Quellenregisters mit dem Datenelement im Zielortregister verglichen und das Minimum der zwei Werte wird in das Zielortregister kopiert. Die Querbahnmaximumanweisung arbeitet im Wesentlichen auf dieselbe Weise, wobei der einzige Unterschied darin besteht, dass das Maximum des Datenelements in Position i und der Zielortwert gewählt werden.
  • Querbahn-Min/Max-Indexanweisung
  • Eine Querbahnminimumindexanweisung kann die Form lane_min_index dest src0 annehmen und die Querbahnmaximumindexanweisung kann die Form lane_max_index dest src0 annehmen, wo src0 N Doppelwörter speichert und dest 1 Doppelwort speichert.
  • Beispielsweise definiert die folgende Codesequenz eine besondere Implementierung der Querbahnminimumindexanweisung:
  •  dst_index = 0;
     tmp = src[0]
     für (int i = 1; i < SIMD_WIDTH) {
    
     wenn (src[i] < tmp && execMask[i])
     }
     tmp = src[i];
     dst_index = i;
     } 
    }
  • In diesem Beispiel wird der Zielortindex von 0 auf SIMD-Breite erhöht, die das Zielortregister überspannt. Wenn das Ausführungsmaskenbit gesetzt ist, wird das Datenelement an Position i im Quellenregister auf eine temporäre Datenspeicherstelle (tmp) kopiert und der Zielortindex wird auf Datenelementposition i gestellt.
  • Querbahn-Sortiernetzwerkanweisuns
  • Eine Querbahnsortiernetzwerkanweisung kann alle N eingegebenen Elemente unter Verwendung eines N-weiten (stabilen) Sortiernetzwerks, entweder in aufsteigender Reihenfolge (sortnet_min) oder in absteigender Reihenfolge (sortnet_max) sortieren. Die Min/Max-Versionen der Anweisung können die Form sortnet_min dest src0 bzw. sortnet_max dest src0 annehmen. In einer Implementierung speichern src0 und dest N Doppelwörter. Die Min/Max-Sortierung wird an den N Doppelwörtern von src0 durchgeführt und die aufsteigend geordneten Elemente (für Min) oder absteigend geordneten Elemente (für Max) werden in dest in ihren entsprechenden geordneten Reihenfolgen gespeichert. Ein Beispiel eines Codesequenz, die die Anweisung definiert, ist: dst = apply_N_wide_sorting_Netzwerk_Min/Max(src0).
  • Querbahnsortiernetzwerkindexanweisung
  • Eine Querbahnsortiernetzwerkindexanweisung kann alle N eingegebenen Elemente unter Verwendung eines N-weiten (stabilen) Sortiernetzwerks sortieren, gibt aber den Permutierungsindex zurück, entweder in aufsteigender Reihenfolge (sortnet_min) oder in absteigender Reihenfolge (sortnet_max). Die Min/Max-Versionen der Anweisung können die Form sortnet_min_index dest src0 bzw. sortnet_max_index dest src0 annehmen, wo src0 und dest jeweils N Doppelwörter speichern. Ein Beispiel eines Codesequenz, die die Anweisung definiert, ist: dst = apply_N_wide_sorting_Netzwerk_Min/Max_index(src0).
  • Ein Verfahren zum Ausführen einer der obenstehenden Anweisungen ist in 50 veranschaulicht. Das Verfahren kann auf den oben beschriebenen, spezifischen Prozessorarchitekturen implementiert werden, in Antwort auf aber nicht auf einen bestimmten Prozessor oder eine bestimmte Systemarchitektur begrenzt.
  • Bei 5001 werden Anweisungen eines primären Grafik-Threads auf Prozessorkernen ausgeführt. Dieser kann zum Beispiel sämtliche der oben beschriebenen Kerne aufweisen (z.B. Grafikkerne 3130). Wenn Raytracing-Arbeit innerhalb des primären Grafik-Threads erreicht wird, bestimmt bei 5002, werden die Raytracing-Anweisungen auf den Raytracing-Ausführungsschaltkreis abgeladen, der die Form einer Funktionseinheit (FU) wie oben in Bezug auf 49 beschrieben annehmen kann oder der ein dedizierter Raytracing-Kern 3150 wie oben in Bezug auf 31 beschrieben sein kann.
  • Bei 5003 werden die Raytracing-Anweisungen decodiert, werden aus dem Speicher abgerufen und bei 5005 werden die Anweisungen in ausführbare Betriebe decodiert (z.B. in einer Ausführungsform, die eine Decodierer benötigt). Bei 5004 werden die Raytracing-Anweisungen geplant und zur Ausführung durch Raytracing-Schaltkreis eingelastet. Bei 5005 werden die Raytracing-Anweisungen durch den Raytracing-Schaltkreis ausgeführt. Zum Beispiel können die Anweisungen geplant und auf den oben beschriebenen FUs (z.B. Vektor FU 4910, Raytracing FU 4912 usw.) und/oder den Grafikkernen 3130 oder Raytracing-Kernen 3150 ausgeführt werden.
  • Wenn Ausführung für eine Raytracing Anweisung abgeschlossen ist, werden die Ergebnisse bei 5006 gespeichert (z.B. zurück zu Speicher 3198 gespeichert) und bei 5007 wird der primäre Grafik-Thread benachrichtigt. Bei 5008 werden die Raytracing-Ergebnisse im Kontext des primären Threads verarbeitet (z.B. aus Speicher gelesen und in Grafikrenderingergebnisse integriert).
  • In Ausführungsformen kann sich der Begriff „Engine“ oder „Modul“ oder „Logik“ auf eine anwendungsspezifische integrierte Schaltung (ASIC), einen elektronischen Schaltkreis, einen Prozessor (geteilt, dediziert oder Gruppe) und/oder Speicher (geteilt, dediziert oder Gruppe), die bzw. der ein oder mehrere Software- oder Firmwareprogramme ausführen, eine kombinatorische Logikschaltung und/oder andere geeignete Komponenten beziehen, Teil davon sein oder darin aufgewiesen sein, die die beschriebene Funktionalität bereitstellen. In Ausführungsformen kann eine Engine, ein Modul oder eine Logik in Firmware, Hardware, Software oder einer Kombination aus Firmware, Hardware und Software implementiert sein.
  • Vorrichtung und Verfahren für Asynchrones Raytracing
  • Ausführungsformen der Erfindung weisen eine Kombination aus Beschleunigungsschaltkreis fixierter Funktion und Allzweckschaltkreis zum Durchführen von Raytracing auf. Zum Beispiel können gewisse Betriebe, die mit Strahlquerung einer Begrenzungsvolumenhierarchie (BVH) und Kreuzungstestung in Zusammenhang stehen, durch den Beschleunigungsschaltkreis fixierter Funktion durchgeführt werden, während mehrere Ausführungsschaltkreise verschiedene Formen von Raytracing-Shadern (z.B. Beliebiger-Treffer-Shader, Kreuzungs-Shader, Verfehlungs-Shader usw.) ausführen. Eine Ausführungsform weist duale Hochbandbreitendatenspeicherbänke auf, die mehrere Einträge zum Speichern von Strahlen und entsprechende duale Stapel zum Speichern von BVH-Knoten aufweisen. In dieser Ausführungsform wechselt der Querungsschaltkreis zwischen den dualen Strahlenbänken und Stapeln, um einen Strahl auf jedem, Taktzyklus zu verarbeiten. Zusätzlich weist eine Ausführungsform Prioritätsauswahlschaltkreis/- logik auf, die zwischen internen Knoten, nicht internen Knoten und Primitiven unterscheidet und diese Informationen verwendet, um intelligent Verarbeitung der BVH-Knoten und der Primitive, die durch die BVH-Knoten gebunden sind, zu priorisieren.
  • Eine bestimmte Ausführungsform verringert den Hochgeschwindigkeitsspeicher, der zur Querung erforderlich ist, durch Verwendung eines kurzen Stapels, um eine begrenzte Anzahl von BVH-Knoten während Querungsbetriebe zu speichern. Diese Ausführungsform weist Stapelverwaltungsschaltkreis/-logik auf, um Einträge effizient zu dem kurzen Stapel zu schieben und aus diesem zu entfernen, um sicherzustellen, dass die erforderlichen BVH-Knoten verfügbar sind. Zusätzlich werden Querungsbetriebe verfolgt, indem Aktualisierungen an einer Verfolgungsdatenstruktur durchgeführt werden. Wenn der/die Querungsschaltkreis/-logik pausiert, kann er/sie die Verfolgungsdatenstruktur befragen, mit Querungsbetrieben an derselben Stelle in der BVH zu beginnen, wo sie geendet haben, und die Verfolgungsdaten, die ein einer Datenstrukturverfolgung gehalten werden, werden durchgeführt, sodass der/die Querungsschaltkreis/-logik erneut starten kann.
  • 51 veranschaulicht eine Ausführungsform, aufweisend Shader-Ausführungsschaltkreis 4000 zum Ausführen von Shaderprogrammcode und Verarbeiten zugehöriger Raytracing-Daten 4902 (z.B. BVH Knotendaten und Strahlendaten), Raytracing-Beschleunigungsschaltkreis 5110 zum Durchführen von Querungs- und Kreuzungsbetrieben und einen Speicher 3198 zum Speichern von Programmcode und zugehöriger Daten, die von dem RT-Beschleunigungsschaltkreis 5110 und Shader-Ausführungsschaltkreis 4000 verarbeitet werden.
  • In einer Ausführungsform weist der Shader-Ausführungsschaltkreis 4000 mehrere Kerne/Ausführungseinheiten 4001 auf, die Shaderprogrammcode ausführen, um verschiedene Formen von datenparallelen Betrieben durchzuführen. Zum Beispiel können in einer Ausführungsform die Kerne/Ausführungseinheiten 4001 eine einzelne Anweisung über mehrere Bahnen ausführen, wobei jede Instanz der Anweisung Daten bearbeitet, die in einer anderen Bahn gespeichert sind. In einer SIMT-Implementierung ist zum Beispiel jede Instanz der Anweisung mit einem anderen Thread verknüpft. Während Ausführung speichert ein L1 Cache gewisse Raytracing-Daten für effizienten Zugriff (z.B. Daten, auf die kürzlich oder häufig zugegriffen wurde).
  • Ein Satz von Primärstrahlen kann in den Einplaner 4007 eingelastet werden, der Arbeit für Shader plant, die durch die Kerne/EUs 4001 ausgeführt wird. Die Kerne/EUs 4001 können Raytracing-Kerne 3150, Grafikkerne 3130, CPU-Kerne 3199 oder andere Arten von Schaltkreis sein, imstande, Shaderprogrammcode auszuführen. Ein oder mehrere Primärstrahl-Shader 5101 verarbeiten die Primärstrahlen und Starten zusätzliche Arbeit, die durch Raytracing-Beschleunigungsschaltkreis 5110 und/oder die Kerne/EUs 4001 durchzuführen ist (z.B. durch einen oder mehrere Kind-Shader). Neue Arbeit, die durch den Primärstrahl-Shader 5101 oder andere Shader gestartet wird, die durch die Kerne/EUs 4001 ausgeführt wird, kann zu Sortierschaltkreis 4008 verteilt werden, der die Strahlen in Gruppen oder Kästen sortiert, wie hier beschrieben (z.B. Gruppieren von Strahlen mit ähnlichen Eigenschaften). Der Einplaner 4007 plant dann die neue Arbeit auf den Kernen/EUs 4001.
  • Andere Shader, die ausgeführt werden kann, weisen Beliebiger-Treffer-Shader 4514 und Nächster-Treffer-Shader 4507 auf, die Trefferergebnisse wie oben beschrieben verarbeiten (z.B. Identifizieren eines beliebigen Treffers bzw. des nächstens Treffers für einen bestimmten Strahl). Ein Verfehlungs-Shader 4506 verarbeitet Strahlverfehlungen (z.B. wo ein Strahl Knoten/Primitiv nicht kreuzt). Wie erwähnt, kann auf die verschiedenen Shader unter Verwendung eines Shader-Aufzeichnung verwiesen werden, die einen oder mehrere Zeiger, verkäuferspezifische Metadaten und globale Argumente aufweisen kann. In einer Ausführungsform sind Shader-Aufzeichnungen durch Shader-Aufzeichnungskennungen identifiziert (SRI). In einer Ausführungsform ist jede ausführende Instanz eines Shaders mit einem Anrufstapel 5203 verknüpft, der Argumente speichert, die zwischen einem Eltern-Shader und Kind-Shader geleitet werden. Anfrufstapel 5121 können auch Verweise auf Fortsetzungsfunktionen speichern, die ausgeführt werden, wenn ein Anruf zurückkommt.
  • Strahlquerungsschaltkreis 5102 quert jeden Strahl durch Knoten einer BVH, arbeitet sich die Hierarchie der BVH (z.B. durch Elternknoten, Kindknoten, und Blattknoten) nach unten, um Knoten/Primitive zu identifizieren, die von dem Strahl gequert werden. Strahl-BVH-Kreuzungsschaltkreis 5103 führt Kreuzungstestung von Strahlen durch, bestimmt Trefferpunkte auf Primitiven und erzeugt Ergebnisse in Antwort auf die Treffer. Der Querungsschaltkreis 5102 und Kreuzungsschaltkreis 5103 können Arbeit von dem einen oder den mehreren Anrufstapeln 5121 abrufen. Innerhalb des Raytracing-Beschleunigungsschaltkreises 5110 können Anrufstapel 5121 und zugehörige Raytracing-Daten 4902 innerhalb eines lokalen Raytracing-Cache (RTC) 5107 oder einer anderen lokalen Datenspeichervorrichtung für effizienten Zugriff durch den Querungsschaltkreis 5102 und Kreuzungsschaltkreis 5103 gespeichert werden.
  • Eine bestimmte, unten beschriebene Ausführungsform weist Hochbandbreitenstrahlenbänke auf (siehe z.B. 52A).
  • Der Raytracing-Beschleunigungsschaltkreis 5110 kann eine Variante der verschiedenen hier beschriebenen Querungs-/Kreuzungsschaltkreise, die Strahl-BVH Querungs-/Kreuzungsschaltkreis 4005, Querungsschaltkreis 4502 und Kreuzungsschaltkreis 4503 aufweisen, und Raytracing-Kerne 3150 sein. Der Raytracing Beschleunigungsschaltkreis 5110 kann anstelle des Strahl-BVH-Querungs-/Kreuzungsschaltkreises 4005, Querungsschaltkreises 4502 und Kreuzungsschaltkreises 4503 und der Raytracing-Kerne 3150 oder eines anderen Schaltkreises/einer anderen Logik zur Verarbeitung von BVH-Stapeln und/oder Durchführung von Querung/Kreuzung verwendet werden. Daher offenbart die Offenbarung beliebiger hier beschriebener Merkmale in Kombination mit dem Strahl-Querungs-/Kreuzungsschaltkreis 4005, Querungsschaltkreis 4502 und Kreuzungsschaltkreis 4503 und Raytracing-Kernen 3150 auch eine entsprechende Kombination mit dem Raytracing-Beschleunigungsschaltkreis 5110, ist aber nicht darauf begrenzt.
  • Unter Bezugnahme auf 52A weist eine Ausführungsform des Strahlquerungsschaltkreises 5102 erste und zweite Strahlspeicherbänke, 5201 bzw. 5202, auf, wo jede Bank mehrere Einträge zum Speichern entsprechender mehrerer eingehender Strahlen 5206 aufweist, die aus Speicher geladen werden. Entsprechende erste und zweite Stapel, 5203 bzw. 5204, weisen ausgewählte BVH-Knotendaten 5290-5291 auf, die aus Speicher gelesen und lokal zur Verarbeitung gespeichert werden. Wie hier beschrieben, sind in einer Ausführungsform die Stapel 5203-5204 „kurze“ Stapel, die eine begrenzte Anzahl von Einträgen zum Speichern von BVH-Knotendaten aufweisen (z.B. sechs Einträge in einer Ausführungsform). Während sie getrennt von den Strahlenbänken 5201-5202 veranschaulicht sind, können die Stapel 5203-5204 auch in den entsprechenden Strahlenbänken 5201-5202 gehalten werden. Alternativ können die Stapel 5203-5204 in einem separaten lokalen Speicher oder Cache gespeichert werden.
  • Eine Ausführungsform des Querungsverarbeitungsschaltkreises 5210 wechselt zwischen den zwei Bänken 5201-5202 und Stapeln 5203-5204 bei der Auswahl des nächsten zu verarbeitenden Strahls und Knotens (z.B. in einer Ping-Pong-Weise). Zum Beispiel kann der Querungsverarbeitungsschaltkreis 5210 einen neuen Strahl/einen BVH-Knoten aus einer anderen Bank und einem anderen Stapel bei jedem Taktzyklus wählen, wodurch ein hocheffizienter Betrieb garantiert ist. Es sollte jedoch festgehalten werden, dass diese spezifische Anordnung nicht notwendig ist, um den zugrundeliegenden Prinzipien der Erfindung zu entsprechen.
  • In einer Ausführungsform gleicht ein Zuordner 5205 den Eingang eingehender Strahlen 5206 in die erste bzw. zweite Speicherbank 5201-5202 basierend auf aktuellen relativen Werten eines Satzes von Bankzuordnungszählern 5220 aus. In einer Ausführungsform führen die Bankzuordnungszähler 5220 eine Zählung der Anzahl nicht gequerter Strahlen in jeder der ersten und zweiten Speicherbänke 5201-5202. Zum Beispiel kann ein erster Bankzuordnungszähler erhöht werden, wenn der Strahlzuordner 5205 einen neuen Strahl zu der ersten Bank 5201 hinzufügt, und gesenkt werden, wenn ein Strahl von der ersten Bank 5201 verarbeitet wird. Ebenso kann der zweite Bankzuordnungszähler erhöht werden, wenn der Strahlzuordner 5205 einen neuen Strahl zu der zweiten Bank 5201 hinzufügt, und gesenkt werden, wenn ein Strahl von der zweiten Bank 5201 verarbeitet wird.
  • In einer Ausführungsform ordnet der Strahlzuordner 5205 den aktuellen Eingangsstrahl einer Bank zu, die mit dem kleineren Zählerwert verknüpft ist. Wenn die zwei Zähler gleich sind, kann der Strahlzuordner 5205 jede Bank wählen oder kann eine andere Bank als die eine wählen, die das letzte Mal gewählt wurde, als die Zähler gleich waren. In einer Ausführungsform wird jeder Strahl in einem Eingang einer der Bänke 5201-5202 gespeichert und jede Bank umfasst 32 Eingänge zum Speichern von bis zu 32 Strahlen. Die zugrundeliegenden Prinzipien der Erfindung sind jedoch nicht auf diese Details begrenzt.
  • 52B veranschaulicht vier Prozesse 5251-5254, die in einer Ausführungsform ausgeführt werden, um die Strahlspeicherbänke 5201-5202 und Stapel 5203-5204 zu verwalten. In einer Ausführungsform sind die vier Prozesse 5251-5254 verschiedene Implementierungen oder Konfigurationen eines gemeinsamen Satzes von Programmcode (hier manchmal als „TraceRay“ bezeichnet). Der anfängliche Prozess 5251 kann ausgeführt werden, um den Strahl 5261 zu lesen und eine neue Querung einer BVH von oben nach unten durchzuführen, beginnend beim Wurzelknoten. Die Alloc-Funktion modifiziert Steuerbits und startet entsprechende Leseanfragen an den Raytracing-Stapel. Insbesondere setzt Alloc zum Zuordnen des neuen Eintrags das gültige (VLD) Bit und setzt das räumungsbereite (Evict_Rdy) Bit zurück. In dem Bankeintrag für den Strahl werden das Daten-vorhanden- (DP) Bit und das schmutzige Bit zurückgesetzt. Das DP-Bit in dem entsprechenden Stapeleintrag wird gesetzt. Für die entsprechende Hitinfo wird das DP-Bit gesetzt und das schmutzige Bit wird zurückgesetzt. Das DP-Bit und das Shader-Aufzeichnungskennungs- (SRI) DP-Bit, das mit den Knotendaten verknüpft ist, werden zurückgesetzt.
  • Der Instanzprozess 5252 führt Querung innerhalb eines der Knoten der BVH (außer dem Wurzelknoten) durch und liest den Strahl und zuvor erfolgten Treffer 5262. In einer Ausführungsform, wenn einer der Treffer-Shader einen Treffer zwischen dem Strahl und einem Primitiv identifiziert, wird der Kommit-Prozess 5253 ausgeführt, um Ergebnisse zu übergeben, wobei der Strahl, der mögliche Treffer und der Stapel 5263 gelesen werden. Alternativ wird der Fortsetzungsprozess 5254 ausgeführt, um mit Querung des Strahls fortzufahren, wobei der Strahl, der übergebene Treffer und der Stapel 5264 gelesen werden.
  • Unter verschiedenen Umständen muss der Querungsschaltkreis 5002 Querungsbetriebe pausieren und den aktuellen Strahl und zugehörige BVH-Knoten speichern, wie wenn ein Shader zum Durchführen einer Abfolge von Betrieben notwendig ist. Wenn zum Beispiel ein nicht opakes Objekt getroffen oder eine prozedurale Textur getroffen wird, speichert der Querungsschaltkreis 5002 den Stapel 5203-5204 bei Speicher und führt den erforderlichen Shader aus. Sobald der Shader Verarbeitung des Treffers (oder anderer Daten) abgeschlossen hat, stellt der Querungsschaltkreis 5002 den Zustand der Strahlenbänke 5201-5202 und Stapel 5203-5204 aus Speicher wieder her.
  • In einer Ausführungsform überwacht ein Querungs-/Staplverfolger 5248 fortlaufend Querungs- und Stapelbetriebe und speichert Neustartdaten in einem Verfolgungsarray 5249. Wenn zum Beispiel der Querungsschaltkreis 5002 bereits Knoten N, N0, N1, N2 und N00 gequert hat und Ergebnisse erzeugt hat, aktualisiert der Querungs-/Stapelverfolger 5248 das Verfolgungsarray, um anzuzeigen, dass Querung dieser Knoten abgeschlossen ist, und/oder um den nächsten Knoten anzuzeigen, der aus dem Stapel zu verarbeiten ist. Wenn der Querungsschaltkreis 5002 neu gestartet wird, liest er die Neustartdaten aus dem Verfolgungsarray 5249, sodass er Querung bei der korrekten Stufe neustarten kann, ohne einen der BVH-Knoten erneut zu durchqueren (und Zyklen zu verschwenden). Die Neustartdaten, die im Verfolgungsarray 5249 gespeichert sind, werden manchmal als der „Restart-Trail“ oder „RST“ bezeichnet.
  • Wie in 52B angegeben, verwalten die verschiedenen TraceRay-Prozesse 5251-5254 Zuordnung in die und aus den Strahlspeicherbänke(n) 5201-5202 über eine oder mehrere Funktionen. Wie für den anfänglichen Prozess 5251 veranschaulicht, setzt eine Alloc-Funktion das gültige Bit (VLD) in einem Datenspeicherbankeintrag (was anzeigt, dass der Eintrag nun einen gültigen Strahl enthält) und setzt das räumungsbereite Flag zurück (Rst) (was anzeigt, dass die Strahlendaten nicht geräumt werden sollten). Die Strahlfunktion speichert den Strahl in dem ausgewählten Eintrag und setzt das Daten-vorhanden- (DP) Bit (was anzeigt, dass Strahlendaten im Eintrag gespeichert sind) und das schmutzige Bit (was anzeigt, dass die Daten nicht modifiziert wurden) zurück. Nach Lesen des Strahls aus der Datenspeicherbank setzt die Stapelfunktion das DP-Bit und ruft den relevanten BVH-Knoten aus dem Stapel ab(z.B. den Wurzelknoten im Fall des anfänglichen Prozesses 5251 und einen anderen Knoten im Fall des Instanzprozesses 5252). Die HitInfo-Funktion setzt das schmutzige Bit zurück und setzt das DP-Bit für die anfängliche Funktion 5251 oder setzt es für alle anderen Funktionen zurück. In einer Ausführungsform erzeug Hitinfo Daten, die einen Strahltreffer reflektieren. Die Knotenfunktion setzt das DP-Bit und das SRI (Shader-Aufzeichnungskennung) DP zurück, welches das DP für Shader-Aufzeichnungskennung ist. Eine Ausführungsform führt einen Kernel-Start-Pointer (KSP)-Nachschlag aus um sicherzustellen, dass KSP nicht gleich null ist. Falls doch, dann wird eine andere Handlung für nicht opake Quads implementiert.
  • In einer Ausführungsform wird, sobald ein Strahleintritt in einer der Datenspeicherbänke 5201-5202 zugeordnet wurde, ein Abruf durchgeführt, um die Knotendaten (und möglicherweise andere Daten) aus dem Stapel abzurufen, der mit dem Strahl verknüpft ist. In einer Ausführungsform wird ein Stapel für jeden Strahl gehalten, der den Arbeitssatz von Daten für den aktuellen Knoten aufweist, den der Strahl durchquert.
  • Wenn auf die nächste Ebene in der BVH gewechselt wird (z.B. nach Bestimmen, dass der Strahl einen Elternknoten kreuzt), werden die Kindknoten sortiert und auf den Stapel 5203-5204 geschoben. Die Kindknoten werden anschließend einzeln aus dem Stapel entfernt, um Kindknoten zu identifizieren, die der Strahl quert („Querungstreffer“). In einer Ausführungsform wird der Stapel im Speicher oder einem lokalen Cache/Datenspeicher gespeichert, sobald eine Übergabe zwischen dem RT-Beschleunigungsschaltkreis 5110 und den Shadern 4504, 4506, 4507, 5101, 5105 stattfindet.
  • Wenn ein Blattknoten, der ein Quad oder Dreieck (oder eine andere Art von Primitiv) aufweist, durch den Querungsschaltkreis 5102 identifiziert ist, gibt er diese Informationen an den Kreuzungsschaltkreis 5103 weiter, der einen Kreuzungstest an dem Quad bzw. Dreieck durchführt. Wenn das Primitiv kein Quad oder Dreieck ist, beendet in einer Implementierung der Querungsschaltkreis die Querung und gibt Steuerung an den Nächster-Treffer-Shader 4507 (wenn ein Treffer detektiert wird) oder den Verfehlungs-Shader 4506 (wenn kein Treffer detektiert wird) zurück. In einer Implementierung, in der der Kreuzungsschaltkreis 5103 gestaltet ist, Kreuzungen für eine Reihe von Primitiven zusätzlich zu Quads und Dreiecken (z.B. Linien, Bögen, Kreise usw.) durchzuführen, leitet der Querungsschaltkreis 5102 Blattknoten für diese Primitives zum Kreuzungsschaltkreis 5103.
  • In einer Ausführungsform, wenn ein Hardware- oder Softwarekomponente eine Leseanfrage an Speicher 3198 oder Cache erzeugt, wird ein 16-Bit Tag verwendet, um Informationen über die Datenart und den Anfrager bereitzustellen. Zum Beispiel kann ein Zwei-Bit-Code spezifizieren, ob die Anfrage nach einem Strahl, Stapeldaten, Trefferdaten, Knotendaten aus der BVH oder eine andere Art von Daten ist. Wenn der Strahl, Stapel und Hitinfo vom Speicher zurückgeleitet werden, quert der Strahl einen oder mehrere BVH-Knoten und es wird ein Kreuzungstestung wie oben beschrieben durchgeführt.
  • Ein oder mehrere Stapel 5203-5204 und Strahlen 5206 werden aus Speicher in verschiedenen Verarbeitungsstufen geladen. Zum Beispiel können der anfängliche Prozess 5251 und/oder Instanzprozess 5252 erfordern, dass eine neue BVH zur Querung geladen wird. Unter diesen Umständen kann der Stapel 5203-5204 zum oberen Knoten (oder „Wurzelknoten“) der BVH initialisiert werden. Für eine Strahlfortsetzung 5254 innerhalb einer BVH kann der Stapel 5203-5204 aus dem Speicher geladen und expandiert werden. Sobald der Stapel 5203-5204 vorbereitet ist, werden Knotendaten aus dem Stapel abgerufen (ein Betrieb, der manchmal unten als Proc_Node_Fetch bezeichnet ist).
  • In einer Ausführungsform werden Knotendaten durch Starten paralleler Anfragen nach zwei nicht internen (NI) Knoten und zwei internen Knoten abgerufen. 53 veranschaulicht eine solche Ausführungsform, in der NI Knotenprioritätsauswahllogik (PRISEL) 5311 duale NI Knoten anfordert: einen ersten NI Knoten 5301 von Bank 0 und einen zweiten NI Knoten 5302 von Bank 1. Gleichzeitig fordert Interne Knoten PRISEL-Logik 5312 duale interne Knoten an: einen ersten Knoten 5303 von Bank 0 und einen zweiten Knoten 5304 von Bank 1.
  • In einer Ausführungsform priorisiert NI Knotenprioritätsauswahllogik (PRISEL) 5311 einen von dem ersten NI Knoten 5301 und zweiten NI Knoten 5302, speichert das priorisierte Ergebnis im Raytracing Cache (RTC). Ebenso fordert Interne Knoten PRISEL-Logik 5312 duale interne Knoten an und wählt ein priorisiertes Ergebnis aus einem ersten internen Knoten 5303 und einem zweiten internen Knoten 5304.
  • Jede Instanz der Prioritätsauswahllogik 5311-5312 priorisiert einen der nicht internen BVH-Knoten 5301-5302 und einen der internen BVH-Knoten 5303-5304 aus einer anderen Bank, falls möglich. In einer Ausführungsform wird nur eine Anfrage von jeder Bank gewählt (z.B. eine von Anfragen 5302 und 5304 und eine von Anfragen 5301 und 5303). Der Start dieser Anfragen kann auch das Stapeldaten-vorhanden- (DP) Bit zurücksetzen, wie angegeben, sodass dieser Eintrag nicht in Antwort auf einen Knotenabrufbetrieb abgerufen wird. In einer Ausführungsform für den Instanzabrufbetrieb wird das Daten-vorhanden- (DP) Bit des Strahls zurückgesetzt, wenn die Instanzanfrage gesendet wird, und schließlich gesetzt, wenn der Strahl nach dem Knotenabruf transformiert wird.
  • In einer Ausführungsform wird node_info beim Start von Lesungen geschrieben und die Adresse/das Tag wird wie folgt für die Leseanfragen berechnet:
    1. i. rtt_rtc_rd_addr[47:6] = rt_ray.rt_ray_ctrl.root_node_ptr[47:6] + curr_stack.child_offset; (Achtung: der Kindversatz auf dem Knoten ist immer in Bezug auf 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 werden die zurückgeleiteten Knotendaten das DP Bit für den Knoten und den Stapel setzen.
  • Die folgenden Fälle können basierend auf dem Lese-Tag unterschieden werden:
    1. A. Interner Knoten: Dieser schreibt zum Knoten
    2. B. Instanz: Dies aktualisiert rt_ray.rt_ray_ctrl für die nächste BVH-Ebene (1) 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.instancecontributiontohitgrp index
      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 logische Ansicht, Ergreifen und Speichern der Knotenabrufadresse während Instanzknotenanfrage selbst
      5. v. {miss_sr_ptr, shader_indx_mult, mask} = {rt_ray[0].rt_ray_ctrl.miss_sr_ptr,rt_ray[0].rt_ray_ctr1. shader_indx_mult, rt_ray[0].rt_ray_ctrl.mask} 0 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 Preserve Opaque via Ray oder Via Instance Flag (nur, wenn Ray Flag nicht Force Non-Opaque ist)
      7. vii. flag[1] = (rt_ray[0].rt_ray_ctrl.flag[1]) | (~rt_ray[0].rt_ray_ctrl.flag[0] & Node_Return.flag[3]); → Entweder Preserve Non Opaque via Ray oder Via Instance Flag (nur, wenn Ray Flag nicht Force Opaque ist)
      8. viii. flag[3:2] = rt_ray[0].rt_ray_ctrl.flag[3:2]; → (Akzeptieren von FIRST HIT und beenden von Search oder Skip 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 VIA Instance gesperrt
      10. x. flag[8:6] = rt_ray[0].rt_ray_ctrl.flag[8:6]; → (Sperren von Keuzungs-Shader, Cull Opaque oder Cull Non-Opaque) Bewahren von BVH[0]
      11. xi. node.node_ctrl = für Instanz nicht erforderlich
      12. xii. node.node_data = {'0, node_rtn.obj2world_p, world2obj_vzyx};
    3. C. Quad: aktualisiert den Knoten wie folgt
      1. i. node.node_ctrl = {node_rtn.leafDesc.last, node_rtn.leafDesc.PrimIndex1Delta[15:0], node_rtn.leafDesc.PrimIndex0[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.PrimIndexlDelta[15:0] != '0;
  • Basierend auf dem Strahl-Flag, Instanz-Flag und dem Geometry-Flag gibt die opak/nicht-opak Handhabungstabelle, die 55A gezeigt ist, das resultierende Flag an, das zu verwenden ist, wenn die Knotendaten abgerufen werden (opak oder nicht opak). Wie in der Tabelle angegeben, erhalten Strahl-Flags immer Vorrang. Zusätzlich sind manche der Zustände wechselseitig ausschließend. In einer Ausführungsform werden diese in Hardware behandelt, mit der Priorität exklusiver Bits. In einer Implementierung, wenn cull_opaque und fbrce_opaque beide gesetzt sind, wird die zugehörige Geometrie automatisch ausgelesen. opaque = rt_ray.rt_ray_ctrl.flag[0] | quad.flag[0]; (Beachte, dass Ray Stored pro BVH Level immer die Instanz-Flags berücksichtigt) nopaque = rt_ray.rt_ray_ctrl.flag[l] | ~ quad.flag[0];
  • 55B ist eine Tabelle, die Strahl-Flag-Handhabung und Ausnahmen gemäß einer Ausführungsform zeigt, Hier beruht die Entscheidung für Culling auf einer Kombination des Strahl-Flags, Instanz-Flags und Geometrie- Flag. 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 Auslesen kann in einer Ausführungsform wie folgt implementiert werden:
  •  mask_kill = ~|(rtc_rtt_rd_rtn.mask & rtc_rtt_rd_rtn.data.mask);
  • 55C ist eine Tabelle, die abschließendes Culling gemäß einer Ausführungsform zeigt. Das Strahl-Flag ist (cull_opak und force_opak) oder (cull_non_opak und force_non_opak), wie wechselseitig ausschließend sind. In dieser Gleichung jedoch berücksichtigt das Strahl-Flag auch das Instanz-Flag, das das opak/nicht opak setzen kann. Nur Geometrie kann ausgelesen werden, während sowohl Instanz als auch Geomatrie maskiert werden können.
  • Wie in 56 veranschaulicht, wird in einer Ausführungsform, basierend auf der Auswertung der oben beschriebenen Auslese- (cull) und mask_kill Einstellungen ein frühes Aus bei 5601 oder 5602 bestimmt und das Ergebnis entweder zum Knotendatenspeicher bei 5603 und/oder zum Stapel bei 5604 gesendet.
  • Sobald die Knotendaten bereit sind, können Box/Kreuzungstests durchgeführt werden. Dies wird in einer Ausführungsform durch einen Prozess erreicht, der hier als Ray_Test_Proc bezeichnet ist, der zwei grundlegende gleichzeitige Prozesse laufen lässt, einen zum Füllen der Quad/Instanz (QI) und einen anderen zum Durchführen der Box/Kreuzungstestung. In einer Implementierung, veranschaulicht in 57, startet Ray_Test_Proc zwei parallele Instanzen von Prioritätsauswahllogik (PRISEL) 5701-5702: eine Quad/Instanz PRISEL 5701 für Anfrage und Auswahl zwischen Quad/Instanz 5711 von Bank 0 und einer zweiten Quad/Instanz 5712 von Bank 1, und einen internen Knoten PRISEL 5702 für Anfrage und Auswahl zwischen einem internen Knoten von Bank 0 5713 und einem internen Knoten von Bank 1 5714.
  • In einer Ausführungsform priorisiert die Quad/Instanz Prioritätsauswahllogik 5701 einen von dem ersten QI Knoten 5711 und zweiten QI Knoten 5712, speichert das priorisierte Ergebnis in der Raytracing-Warteschlange (RTQ) zur Weiterverarbeitung (z.B. Kreuzungstestung). Ebenso priorisiert interne Knoten PRISEL-Logik 5702 einen der internen BVH-Knoten 5713-5714, auf dem ein Raytracing-Querungs- (RTT) Boxtest durchgeführt wird. In einer Ausführungsform wird nur eine Anfrage aus jeder Bank ausgewählt (z.B. eine von Anfragen 5711 und 5712 und eine von Anfragen 5713 und 5714). Der Start dieser Anfragen kann auch das Stapeldaten-vorhanden (DP) Bit zurücksetzen, wie angegeben, sodass dieser Eintrag nicht in Antwort auf einen Knotenabrufbetrieb abgerufen wird. In einer Ausführungsform wird für den Instanzabrufbetrieb das Daten vorhanden- (DP) Bit des Strahls zurückgesetzt, wenn die Instanzanfrage gesendet wird, und schließlich gesetzt, wenn der Strahl nach dem Knotenabruf transformiert wird.
  • Als Teil dieses Prozesses wird für jede Quad-Testeinlastung, wo die Art von Knoten nicht opak ist, der Shader-Aufzeichnungskennung-Nullnachverweis als bindungslose Thread-Einlastung (BTD) basierend auf der folgenden Shader-Aufzeichnungskennungsverweisadresse eingelastet:
  •  sri_null_lookup_ptr[47:3] = 2*(Ray.hitGroupSRBasePtr +
     Knoten.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 Quad/Instanz (QI) Entkopplungs-FIFO aufgewiesen, um zeitliche Stapel-FIFO-voll-Bedingungen aufzulösen und synchrone Aktualisierungen an Trefferinfo/Strahl mit einem Verschieben in den Stapel FIFO (siehe z.B. Stapel FIFO 6001 in 60) zu implementieren. Dies erfolgt, sodass Strahl/Trefferinfo ein garantiertes Daten vorhanden- (DP) Bit in anschließenden Prozessen gesetzt hat. Es ist zu beachten, dass Strahl/Trefferinfo bei einer festgesetzten hohen Priorität zugewiesen werden kann, wenn es zu einer Kollision mit Speicherschrieben kommt.
  • Die Rückleitung von RTQ kann zu einer Instanz (z.B. einer Instanztransformation) oder einem Quad (d.h. Querung/Kreuzungstestergebnisse) auf zwei separaten Schnittstellen führen. Unten sind die zwei Rücklauf-FIFOs angeführt, die in einer Ausführungsform zur Verarbeitung von Ergebnissen verwendet werden:
    1. a. Instanzrücklauf-FIFO: Aktualisieren von rt_ray.rt_ray_data = rtq_rt_ray_data; ray_dirty[Entry] = 1;
    2. b. Quad-Rücklauf- FIFO:
      1. i. Wenn Quad nicht opak ist und (Tfar < Prev_Tfar) → Check SRI_NULL_DP, um Quad/Instanz (QI) entkoppelten FIFO zu entfernen (lesen). Es ist zu beachten, dass in einer Ausführungsform der Hitinfo-Schrieb aus dem Raytracing-Warteschlangen- (RTQ) FIFO gegenüber MemHitInfo höhere Priorität hat.
        1. 1. If (KSPNULL = 1) → Behandeln des nicht opaken Quad als wäre es opak, und Aktualisieren von Tfar.
        2. 2. If(KSP_NULL != 1) →
          • ♦ Schreiben des möglichen HitInfo in Speicher mit dem gültigen Bit auf 1 gesetzt.
          • ♦ Lesen von T, U, V, Leaf Type, PrimLeaflndex und Front Face aus RTQ.
          • ♦ Lesen von PrimIndexDelta, PrimleafPtr aus NodeData. Aktualisieren von instanceLeafPtr aus Ray Data.
          • ♦ hitGroupRecPtr wie oben berechnet
      2. ii. Wenn Quad nicht opak ist und (Tfar < Prev_Tfar) →
        • ♦ Aktualisieren von Committed Hitinfo mit Valid = 1.
        • ♦ Lesen von T,U,V, Leaf Type, PrimLeafIndex, Front Face aus RTQ.
        • ♦ Lesen von PrimIndexDelta, PrimleafPtr aus NodeData.
        • ♦ Aktualisieren von instanceLeafPtr aus rt_ray.rt_ray_ctrl
        • ♦ hitGroupRecPtr wie oben berechnet
  • In einer Ausführungsform kann der Rücklauf aus dem Raytracing-Querungs- (RTT) Boxkreuzungstest in den Stapel 0/1 (5203/5204) FIFO 6001 zur Weiterverarbeitung geschoben werden.
  • 58 und 59A-B veranschaulichen ein Beispiel von BVH-Strahlverarbeitung unter Verwendung eines „kurzen“ Stapels (z.B. wie Stapel 5203 oder 5204, die eine begrenzte Anzahl lokaler Stapeleinträge aufweisen). Ein kurzer Stapel wird verwendet, um Hochgeschwindigkeitsdatenspeicher in Kombination mit intelligenten Knotenverwaltungstechniken zu bewahren, um eine hoch effiziente Abfolge von Querungsbetrieben bereitzustellen. In dem veranschaulichten Beispiel weist der kurze Stapel 5203 Einträge für sechs BVH-Knoten auf. Die zugrundeliegenden Prinzipien der Erfindung können jedoch unter Verwendung kurzer Stapel unterschiedlicher Größen implementiert werden.
  • Betriebe 5949-5972 fügen Stapeleinträge während BVH-Querung ein und entfernen diese. In einer Ausführungsform werden die Betriebe 5949-5972 an dem Stapel 5203 durch Stapelverarbeitungsschaltkreis 5120 durchgeführt (siehe 51). Eine spezifische Querungsabfolge ist gezeigt, beginnend mit dem BVH-Wurzelknoten N 5900 bei BVH-Ebene 0.
  • Bei 5949 wird der Stapel 5203 mit Knoten N initialisiert, der dann aus dem Stapel entfernt und verarbeitet wird, was zu Treffern H0-H2 führt, die Kindknoten N0-N2 5901-5903 auf Ebene 1 der BVH aufweisen (d.h. „Treffer“ bedeutet, dass Strahl die drei Kindknoten N0-N2 5901-5903 quert). Die drei Kindknotentreffer 5901-5902 werden basierend auf Trefferdistanz sortiert und in der sortierten Reihenfolge zu dem Stapel 5203 geschoben (Betrieb 5950). Somit werden in dieser Ausführungsform, sobald ein neuer Satz von Kindknoten ausgewertet ist, diese basierend auf Trefferdistanz ausgewertet und in den Stapel 5203 in der sortierten Reihenfolge geschrieben (d.h. mit den näheren Kindknoten an der Oberseite des Stapels).
  • Der erste Kindknoten N0 5901 (d.h. der nächste Kindknoten) wird aus dem Stapel 5203 entfernt und verarbeitet, wodurch drei weitere Kindknotentreffer N00-N02 5911-5913 auf Ebene 2 der BVH erhalten werden (die „Ebene“ wird manchmal als die „Tiefe“ der BVH-Knoten bezeichnet), die sortiert und zu dem Stapel 5203 geschoben werden (Betrieb 5951).
  • Kindknoten N00 5911 wird aus dem Stapel entfernt und verarbeitet, was zu einem einzelnen Treffer führt, der einen einzigen Kindknoten N000 5920 auf Ebene 3 der BVH aufweist (Betrieb 5952). Dieser Knoten wird entfernt und verarbeitet, was zu sechs Treffern N0000-N0005 5931-5936 auf Ebene 4 führt, die sortiert und zu Stapel 5203 geschoben werden (Betrieb 5953). Um Raum innerhalb des kurzen Stapels 5203 zu schaffen, werden Knoten N1, N2, N02, N01 wie angegeben entfernt (d.h. zur Begrenzung des kurzen Stapels auf sechs Einträge). Der erste sortierte Knoten N0000 5931 wird entfernt und verarbeitet, wodurch drei Treffer N00000-N00002 5931-5933 auf Ebene 5 der BVH erzeugt werden (Betrieb 5954). Knoten N0005 wird entfernt, um Raum auf dem kurzen Stapel 5203 für die neuen Knoten zu schaffen.
  • In einer Ausführungsform wird, jedes Mal, wenn ein Knoten aus dem kurzen Stapel 5203 entfernt wird, dieser wieder im Speicher gespeichert. Er wird dann zu einem späteren Zeitpunkt wieder in den kurzen Stapel 5203 geladen (z.B., wenn es Zeit ist, den Knoten gemäß dem Querungsbetrieb zu verarbeiten).
  • Verarbeitung fährt mit 59A fort, wo Knoten N00001 und N00002 auf Ebene 5 der BVH entfernt und verarbeitet werden (Betriebe 5955-5956). Knoten N0001, N0002, N0003 und N0004 auf Ebene 4 werden dann entfernt und verarbeitet (Betriebe 5957-5960), was zu einem leeren kurzen Stapel 5203 führt.
  • Somit führt ein Entfernungsbetrieb zum Abrufen des BVH-Wurzelknotens, Knoten N, gemäß dem Neustart-Trail (RST) (Betrieb 5961). Die drei Kind-Treffer N0, N1, N2 von Ebene 1 werden wieder sortiert und zu dem kurzen Stapel geschoben (Betrieb 5962). Knoten N0 wird dann entfernt und verarbeitet, gefolgt von Nodes N00, N000 und N0005 (Betriebe 5963-5965). Knoten N01 wird entfernt und verarbeitet (Betrieb 5966), gefolgt von Knoten N02, Knoten N2 und Knoten N1 (Betriebe 5967-5970), was wiederum zu einem leeren kurzen Stapel führt. Anschließend wird der nächste Knoten der Ebene 2, N11, aus dem kurzen Stapel entfernt und verarbeitet, was die Querung abschließt (d.h., da Knoten N11 zu keinem Treffer führte).
  • Wie erwähnt, aktualisiert eine Ausführungsform eines Querungsverfolgers 5248 das Verfolgungsarray 5249, das den Kindknoten/Teilbaum in jeder Ebene der BVH-Hierarchie identifiziert, die derzeit gequert wird. In einer Implementierung ist die Länge des Verfolgungsarrays 5249 gleich der Tiefe der BVH (6 in dem veranschaulichten Beispiel) und jeder Eintrag in dem Verfolgungsarray 5249 weist einen Indexwert auf, der den Kind-Teilbaum identifiziert, der derzeit durchquert wird. In einer spezifischen Implementierung, für eine N-weite BVH (d.h. wo jeder interne Knoten N Kindknoten referenziert) weist jeder Eintrag in dem Verfolgungsarray 5249 einen log2(N) Bit-Wert auf, um die Kindknoten/Teilbäume zu identifizieren. In einer Ausführungsform wurden Kindknoten/Teilbäume, welchen ein kleinerer Index zugewiesen ist als der aktuelle Kindindex, vollständig durchquert und daher werden sie im Fall eines Neustarts nicht erneut aufgesucht. In einer Ausführungsform, wenn das letzte gekreuzte Kind gequert ist, wird der Kindindex auf den Maximalwert gestellt um anzugeben, dass es keine weiteren Einträge an dem Stapel gibt.
  • Der kurze Querungsstapel 5203 kann die obersten wenigen Einträge es Stapels in einem kreisförmigen Array speichern. In einer Implementierung weist jeder Stapeleintrag in dem kurzen Querungsstapel 5203 einen Versatz zu einem Knoten, diverse Informationen wie die Art von Knoten (intern, Primitiv, Instanz usw.) wie auch ein Bit auf, das angibt, ob dieses Kind der letzte (am weitesten) gekreuzte Kindknoten in einem Elternknoten ist. Diese spezifischen Details sind jedoch nicht notwendig, um den zugrundeliegenden Prinzipien der Erfindung zu entsprechen.
  • 60 veranschaulicht eine Ausführungsform von Stapelverarbeitungsschaltkreis/-logik 5120 zum Durchführen von Stapelverwaltungs- und Querungsbetrieben wie oben beschrieben. Ein Stapel-FIFO 6001 wird mit jedem Kind-BVH-Knoten 6000 geladen, der Verarbeitung benötigt. Wenn zum Beispiel ein Boxtest oder Quadtest durch den Querungsverarbeitungsschaltkreis 5210 abgeschlossen ist, werden die Ergebnisse in den Stapel-FIFO 6001 geschoben und zum Aktualisieren des Stapels 5203 verwendet. Dies kann zum Beispiel Aktualisierungen an den Trefferinformationen aufweisen, wie dem Satz von Kindknoten 6000, der mit einem bestimmten Treffer verknüpft ist.
  • Stapelverarbeitungsschaltkreis/-logik 6003 liest Einträge aus dem Stapel 5203 mit Daten, die zur Verarbeitung jedes Eintrags erforderlich sind, aufweisend ein Angabe, ob der BVH-Knoten ein interner Knoten oder ein Blattknoten ist, und zugehöriger Indexdaten. Wenn der Knoten ein Blattknoten/Quad ist, können die Daten Quaddeskriptoren und Indizes wie auch Shader-Indexdaten aufweisen. Stapelverarbeitungsschaltkreis/-logik 6003 führt dann die hier beschriebenen Stapelverarbeitungsbetriebe durch, wie Identifizieren neuer Knoten, die mit einem Treffer verknüpft sind, und Sortieren der Knoten basierend auf Trefferdistanz. Obwohl als eine separate Entität dargestellt, kann Stapelverarbeitungsschaltkreis/- logik 6003 in dem Querungsschaltkreis 5102 integriert sein.
  • Wie angegeben, erzeugt Stapelverarbeitungsschaltkreis/-logik 6003 Stapelaktualisierungen 6011, wenn Verarbeitung jedes BVH-Knotens aus dem Stapel 5203 abgeschlossen ist. Zum Beispiel kann er/sie nach Lesen eines Eintrags aus dem Stapel 5203 die verschiedenen Steuer-Bits aktualisieren, wie Daten vorhanden- (DP) Bit und gültiges (VLD) Bit. 60 veranschaulicht die gesetzten räumungsbereiten und Daten vorhanden-Bits 6010. Eine entsprechende Stapelaktualisierung 6011 kann auch zu dem Stapel 5203 gesendet werden (z.B. Erlauben, dass alte Einträge entfernt werden und Raum für neue Kindknoten geschaffen wird).
  • Stapelaktualisierungen können über Vermittlerschaltkreis 6012 gesteuert werden, der zwischen Aktualisierung 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 Zuordnung zum Stapel aus Speicher (z.B. Starten mit dem Wurzelknoten und einem oder mehreren Kindknoten) wählt.
  • In einer Ausführungsform, wenn Quad/Instanz/interner Knoten auf dem Stapel verarbeitet wird, können einer oder mehrere der folgenden Betriebe durchgeführt werden:
    1. 1. Räumen des Stapeleintrags aufgrund von mehreren Bedingungen, wie Abwärtsbewegen der Instanz für einen neue BVH, Verarbeitung eines Treffer- prozeduralen, eines Beliebiger-Treffer-Shaders usw.
    2. 2. Herausnehmen des Strahleintrags aus der Zuordnung, wenn der Stapel aufgrund eines Treffer- prozeduralen und/oder Beliebiger-Treffer-Shaders geräumt wird.
    3. 3. Herausnehmen des Cache-Eintrags aus der Zuordnung, wenn dieser Stapel aufgrund eines Treffer- prozeduralen und/oder Beliebiger-Treffer-Shaders geräumt wird..
    4. 4. Aktualisieren der Strahlsteuerung (nur BVH), wenn der Strahl über das Instanzblatt nach unten zu der neuen BVH geleitet werden muss.
  • 61A-B veranschaulichen Tabellen zum Konfigurieren von Lese/Schreib-Ports und Einstellen von Steuer-Bits für alle Raytracing-Querungsstrukturen. Insbesondere beispielhafte Teilstrukturen, vertikale Strukturen und Lese/Schreibvorgänge sind für Strahlen 6101, Treffer 6102 und Stapel 6103 dargestellt. Es ist zu jedoch beachten, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf diese spezifischen Datenstrukturen/Betriebe begrenzt sind.
  • BEISPIELE
  • Es folgen beispielhafte Implementierungen verschiedener Ausführungsformen der Erfindung.
  • Beispiel 1. Eine Vorrichtung, aufweisend: einen Begrenzungsvolumenhierarchie-(BVH) Generator zum Konstruieren einer BVH, aufweisend mehrere hierarchisch angeordnete Knoten, aufweisend einen Wurzelknoten, mehrere interne Knoten und mehrere Blattknoten, aufweisend Primitive, wobei jeder interne Knoten einen Kindknoten an entweder dem Wurzelknoten oder einem anderen internen Knoten aufweist und jeder Blattknoten einen Kindknoten an einem internen Knoten aufweist; eine erste Datenspeicherbank, die als eine erste Vielzahl von Einträgen anzuordnen ist; eine zweite Datenspeicherbank, die als eine zweite Vielzahl von Einträgen anzuordnen ist, wobei jeder Eintrag der ersten Vielzahl von Einträgen und der zweiten Vielzahl von Einträgen einen Strahl speichern soll, der die BVH durchqueren soll; eine Zuordnungsschaltung zum Verteilen eines eingehenden Strahls zu entweder der ersten Datenspeicherbank oder der zweiten Datenspeicherbank basierend auf einer relativen Anzahl von Strahlen, die derzeit in der ersten und zweiten Datenspeicherbank gespeichert sind; und Querungsschaltkreis zum Wechseln zwischen Auswahl eines nächsten Strahls aus der ersten Datenspeicherbank und der zweiten Datenspeicherbank, wobei der Querungsschaltkreis den nächsten Strahl durch die BVH queren lässt, indem er einen nächsten BVH-Knoten von einer Oberseite eines BVH-Knotenstapels liest und bestimmt, ob der nächste Strahl den nächsten BVH-Knoten kreuzt.
  • Beispiel 2. Die Vorrichtung von Beispiel 1, weiter aufweisend: Banküberwachungsschaltkreis, um eine erste Anzahl von Strahlen zu verfolgen, die derzeit in der ersten Datenspeicherbank gespeichert sind, und eine zweite Anzahl von Strahlen, die derzeit in der zweiten Datenspeicherbank gespeichert sind.
  • Beispiel 3. Die Vorrichtung von Beispiel 2, wobei der Banküberwachungsschaltkreis weiter aufweist: einen ersten Zähler, der in Reaktion darauf erhöht wird, dass ein Strahl der ersten Datenspeicherbank durch die Zuordnungsschaltung hinzugefügt wird, und der in Reaktion darauf gesenkt wird, dass ein Strahl aus der ersten Datenspeicherbank durch den Querungsschaltkreis gelesen wird; und einen zweiten Zähler, der in Reaktion darauf erhöht wird, dass ein Strahl der zweiten Datenspeicherbank durch die Zuordnungsschaltung hinzugefügt wird, und der in Reaktion darauf gesenkt wird, dass ein Strahl aus der zweiten Datenspeicherbank durch den Querungsschaltkreis gelesen wird.
  • Beispiel 4. Die Vorrichtung von Beispiel 3, wobei die Zuordnungsschaltung den eingehenden Strahl entweder zu der ersten Datenspeicherbank oder der zweiten Datenspeicherbank basierend auf relativen Werten des ersten Zählers und des zweiten Zählers verteilen soll.
  • Beispiel 5. Die Vorrichtung von Beispiel 1, wobei der BVH-Knotenstapel einen ersten BVH-Knotenstapel aufweist, der erste BVH-Knotenstapel eine erste Vielzahl von internen Kindknoten speichert, die mit einem Strahltreffer mit einem Elternknoten der ersten mehreren Kindknoten verknüpft sind, die Vorrichtung weiter aufweisend: einen zweiten BVH-Knotenstapel zum Speichern einer zweite Vielzahl von internen Kindknoten und/oder Blattknoten.
  • Beispiel 6. Die Vorrichtung von Beispiel 5, wobei die internen Kindknoten auf dem Stapel basierend auf einer Distanz zwischen jedem internen Kindknoten und einem Koordinatenwert, der mit dem nächsten Strahl verknüpft ist, geordnet sind.
  • Beispiel 7. Die Vorrichtung von Beispiel 5, wobei der erste BVH-Knotenstapel in einem oder mehreren der ersten Vielzahl von Einträgen der ersten Datenspeicherbank gespeichert werden soll und der zweite BVH-Knotenstapel in einem oder mehreren der zweiten Vielzahl von Einträgen der zweiten Datenspeicherbank gespeichert werden soll.
  • Beispiel 8. Die Vorrichtung nach Anspruch 1, wobei der BVH-Knotenstapel N Einträge aufweist, wo N kleiner als eine Anzahl von Knoten der BVH ist.
  • Beispiel 9. Die Vorrichtung von Beispiel 8, weiter aufweisend: Querungsverfolgungsschaltkreis zum Aktualisieren eines Verfolgungsarrays in Reaktion darauf, dass der Querungsschaltkreis den nächsten Strahl in Bezug auf jeden BVH Knoten verarbeitet, der von der Oberseite des BVH-Knotenstapels gelesen wird.
  • Beispiel 10. Die Vorrichtung von Beispiel 9, wobei der Querungsschaltkreis einen aktuellen Querungszustand im Speicher in Reaktion auf Ausführung eines Shaders speichern soll, wobei der aktuelle Querungszustand die erste Vielzahl von Einträgen, die zweite Vielzahl von Einträgen und den BVH-Knotenstapel aufweist.
  • Beispiel 11. Die Vorrichtung von Beispiel 10, wobei der Querungsschaltkreis den aktuellen Querungszustand aus Speicher wiederherstellen soll und Querungsbetriebe neustarten soll, der Querungsschaltkreis das Verfolgungsarray lesen soll, um einen Anfangspunkt zu bestimmen, von dem die Querungsbetriebe neu zu starten sind.
  • Beispiel 12. Die Vorrichtung von Beispiel 11, wobei, wenn der nächste Strahl den nächsten BVH-Knoten kreuzt, mehrere Kindknoten des nächsten BVH-Knotens basierend auf einem Distanzwert sortiert werden, um eine sortierte Reihenfolge zu erzeugen, und die mehreren Kindknoten im BVH-Knotenstapel in der sortieren Reihenfolge gespeichert werden.
  • Beispiel 13. Ein Verfahren, aufweisend: Erzeugen einer Begrenzungsvolumenhierarchie (BVH), aufweisend mehrere hierarchisch angeordnete Knoten, aufweisend einen Wurzelknoten, mehrere interne Knoten und mehrere Blattknoten, aufweisend Primitive, wobei jeder interne Knoten einen Kindknoten an entweder dem Wurzelknoten oder einem anderen internen Knoten aufweist und jeder Blattknoten einen Kindknoten an einem internen Knoten aufweist; Konfigurieren einer ersten Vielzahl von Einträgen in einer ersten Datenspeicherbank; Konfigurieren einer zweiten Vielzahl von Einträgen in einer zweiten Datenspeicherbank, wobei jeder Eintrag der ersten Vielzahl von Einträgen und der zweiten Vielzahl von Einträgen einen Strahl speichern soll, der die BVH durchqueren soll; Verteilen eines eingehenden Strahls zu entweder der ersten Datenspeicherbank oder der zweiten Datenspeicherbank basierend auf einer relativen Anzahl von Strahlen, die derzeit in der ersten und zweiten Datenspeicherbank gespeichert sind; und Auswählen eines nächsten Strahls zur Querungsverarbeitung durch Wechseln zwischen der ersten Datenspeicherbank und der zweiten Datenspeicherbank; Entfernen eines nächsten BVH-Knotens von einer Oberseite eines BVH-Knotenstapels; und Bestimmen, ob der nächste Strahl den nächsten BVH-Knoten kreuzt.
  • Beispiel 14. Das Verfahren von Beispiel 13, weiter aufweisend: Verfolgen einer ersten Anzahl von Strahlen, die derzeit in der ersten Datenspeicherbank gespeichert sind, und einer zweiten Anzahl von Strahlen, die derzeit in der zweiten Datenspeicherbank gespeichert sind.
  • Beispiel 15. Das Verfahren von Beispiel 14, wobei Verfolgen weiter aufweist: Erhöhen eines ersten Zählers in Reaktion darauf, dass ein Strahl der ersten Datenspeicherbank hinzugefügt wird, und der in Reaktion darauf gesenkt wird, dass ein Strahl aus der ersten Datenspeicherbank gelesen wird; und Erhöhen eines zweiten Zählers in Reaktion darauf, dass ein Strahl der ersten Datenspeicherbank hinzugefügt wird, und der in Reaktion darauf gesenkt wird, dass ein Strahl aus der ersten Datenspeicherbank gelesen wird.
  • Beispiel 16. Das Verfahren von Beispiel 15, wobei der eingehende Strahl entweder zu der ersten Datenspeicherbank oder der zweiten Datenspeicherbank basierend auf relativen Werten des ersten Zählers und des zweiten Zählers verteilt wird.
  • Beispiel 17. Das Verfahren von Beispiel 13, wobei der BVH-Knotenstapel einen ersten BVH-Knotenstapel aufweist, der erste BVH-Knotenstapel eine erste Vielzahl von internen Kindknoten speichert, die mit einem Strahltreffer mit einem Elternknoten der ersten mehreren Kindknoten verknüpft sind, das Verfahren weiter aufweisend: Speichern einer zweiten Vielzahl interner Kindknoten und/oder Blattknoten in einem zweiten BVH-Knotenstapel.
  • Beispiel 18. Das Verfahren von Beispiel 17, wobei die internen Kindknoten auf dem Stapel basierend auf einer Distanz zwischen jedem internen Kindknoten und einem Koordinatenwert, der mit dem nächsten Strahl verknüpft ist, geordnet sind.
  • Beispiel 19. Das Verfahren von Beispiel 17, wobei der erste BVH-Knotenstapel in einem oder mehreren der ersten Vielzahl von Einträgen der ersten Datenspeicherbank gespeichert werden soll und der zweite BVH-Knotenstapel in einem oder mehreren der zweiten Vielzahl von Einträgen der zweiten Datenspeicherbank gespeichert werden soll.
  • Beispiel 20. Das Verfahren von Beispiel 13, wobei der BVH-Knotenstapel N Einträge aufweist, wo N kleiner als eine Anzahl von Knoten der BVH ist.
  • Beispiel 21. Das Verfahren von Beispiel 20, weiter aufweisend: Aktualisieren eines Verfolgungsarrays in Reaktion darauf, dass der nächste Strahl in Bezug auf den nächsten BVH-Knoten verarbeitet wird und jeder zusätzliche BVH-Knoten von der Oberseite des BVH-Knotenstapels gelesen wird.
  • Beispiel 22. Das Verfahren von Beispiel 21, weiter aufweisend: Speichern eines aktuellen Querungszustands im Speicher in Reaktion darauf, dass ein Shader ausgeführt wird, wobei der aktuelle Querungszustand die erste Vielzahl von Einträgen, die zweite Vielzahl von Einträgen und den BVH-Knotenstapel aufweist.
  • Beispiel 23. Das Verfahren von Beispiel 22, weiter aufweisend: Wiederherstellen des aktuellen Querungszustands aus Speicher und Neustarten von Querungsbetrieben, und Lesen des Verfolgungsarrays, um einen Anfangspunkt zu bestimmen, von dem die Querungsbetriebe neu zu starten sind.
  • Beispiel 24. Das Verfahren von Beispiel 23, wobei, wenn der nächste Strahl den nächsten BVH-Knoten kreuzt, mehrere Kindknoten des nächsten BVH-Knotens basierend auf einem Distanzwert sortiert werden, um eine sortierte Reihenfolge zu erzeugen, und die mehreren Kindknoten im BVH-Knotenstapel in der sortieren Reihenfolge gespeichert werden.
  • Beispiel 25. Ein maschinenlesbares Medium, auf dem Programmcode gespeichert ist, der, wenn von einer Maschine ausgeführt, die Maschine veranlasst, die Betriebe durchzuführen: Erzeugen einer Begrenzungsvolumenhierarchie (BVH), aufweisend mehrere hierarchisch angeordnete Knoten, aufweisend einen Wurzelknoten, mehrere interne Knoten und mehrere Blattknoten, aufweisend Primitive, wobei jeder interne Knoten einen Kindknoten an entweder dem Wurzelknoten oder einem anderen internen Knoten aufweist und jeder Blattknoten einen Kindknoten an einem internen Knoten aufweist; Konfigurieren einer ersten Vielzahl von Einträgen in einer ersten Datenspeicherbank; Konfigurieren einer zweiten Vielzahl von Einträgen in einer zweiten Datenspeicherbank, wobei jeder Eintrag der ersten Vielzahl von Einträgen und der zweiten Vielzahl von Einträgen einen Strahl speichern soll, der die BVH durchqueren soll; Verteilen eines eingehenden Strahls zu entweder der ersten Datenspeicherbank oder der zweiten Datenspeicherbank basierend auf einer relativen Anzahl von Strahlen, die derzeit in der ersten und zweiten Datenspeicherbank gespeichert sind; und Auswählen eines nächsten Strahls zur Querungsverarbeitung durch Wechseln zwischen der ersten Datenspeicherbank und der zweiten Datenspeicherbank; Entfernen eines nächsten BVH-Knotens von einer Oberseite eines BVH-Knotenstapels; und Bestimmen, ob der nächste Strahl den nächsten BVH-Knoten kreuzt.
  • Beispiel 26. Das maschinenlesbare Medium von Beispiel 25, weiter aufweisend Programmcode, um die Maschine zu veranlassen, die Betriebe durchzuführen: Verfolgen einer ersten Anzahl von Strahlen, die derzeit in der ersten Datenspeicherbank gespeichert sind, und einer zweiten Anzahl von Strahlen, die derzeit in der zweiten Datenspeicherbank gespeichert sind.
  • Beispiel 27. Das maschinenlesbare Medium von Beispiel 26, wobei Verfolgen weiter aufweist: Erhöhen eines ersten Zählers in Reaktion darauf, dass ein Strahl der ersten Datenspeicherbank hinzugefügt wird und der in Reaktion darauf gesenkt wird, dass ein Strahl aus der ersten Datenspeicherbank gelesen wird; und Erhöhen eines zweiten Zählers in Reaktion darauf, dass ein Strahl der ersten Datenspeicherbank hinzugefügt wird, und der in Reaktion darauf gesenkt wird, dass ein Strahl aus der ersten Datenspeicherbank gelesen wird.
  • Beispiel 28. Das maschinenlesbare Medium von Beispiel 27, wobei der eingehende Strahl entweder zu der ersten Datenspeicherbank oder der zweiten Datenspeicherbank basierend auf relativen Werten des ersten Zählers und des zweiten Zählers verteilt wird.
  • Beispiel 29. Das maschinenlesbare Medium von Beispiel 25 wobei der BVH-Knotenstapel einen ersten BVH-Knotenstapel aufweist, der erste BVH-Knotenstapel eine erste Vielzahl von internen Kindknoten speichert, die mit einem Strahltreffer mit einem Elternknoten der ersten mehreren Kindknoten verknüpft sind, wobei das maschinenlesbare Medium weiter Programmcode aufweist, um die Maschine zu veranlassen, den Betrieb durchzuführen: Speichern einer zweiten Vielzahl interner Kindknoten und/oder Blattknoten in einem zweiten BVH-Knotenstapel.
  • Beispiel 30. Das maschinenlesbare Medium von Beispiel 29, wobei die internen Kindknoten auf dem Stapel basierend auf einer Distanz zwischen jedem internen Kindknoten und einem Koordinatenwert, der mit dem nächsten Strahl verknüpft ist, geordnet sind.
  • Beispiel 31. Das maschinenlesbare Medium von Beispiel 29, wobei der erste BVH-Knotenstapel in einem oder mehreren der ersten Vielzahl von Einträgen der ersten Datenspeicherbank gespeichert werden soll und der zweite BVH-Knotenstapel in einem oder mehreren der zweiten Vielzahl von Einträgen der zweiten Datenspeicherbank gespeichert werden soll.
  • Beispiel 32. Das maschinenlesbare Medium von Beispiel 25, wobei der BVH-Knotenstapel N Einträge aufweist, wo N kleiner als eine Anzahl von Knoten der BVH ist.
  • Beispiel 33. Das maschinenlesbare Medium von Beispiel 32, weiter aufweisend Programmcode, um die Maschine zu veranlassen, die Betriebe durchzuführen: Aktualisieren eines Verfolgungsarrays in Reaktion darauf, dass der nächste Strahl in Bezug auf den nächsten BVH-Knoten verarbeitet wird und jeder zusätzliche BVH-Knoten von der Oberseite des BVH-Knotenstapels gelesen wird.
  • Beispiel 34. Das maschinenlesbare Medium von Beispiel 33, weiter aufweisend Programmcode, um die Maschine zu veranlassen, die Betriebe durchzuführen: Speichern eines aktuellen Querungszustands im Speicher in Reaktion darauf, dass ein Shader ausgeführt wird, wobei der aktuelle Querungszustand die erste Vielzahl von Einträgen, die zweite Vielzahl von Einträgen und den BVH-Knotenstapel aufweist.
  • Beispiel 35. Das maschinenlesbare Medium von Beispiel 34, weiter aufweisend Programmcode, um die Maschine zu veranlassen, die Betriebe durchzuführen: Wiederherstellen des aktuellen Querungszustands aus Speicher und Neustarten von Querungsbetrieben, und Lesen des Verfolgungsarrays, um einen Anfangspunkt zu bestimmen, von dem die Querungsbetriebe neu zu starten sind.
  • Beispiel 36. Das maschinenlesbare Medium von Beispiel 35, wobei, wenn der nächste Strahl den nächsten BVH-Knoten kreuzt, mehrere Kindknoten des nächsten BVH-Knotens basierend auf einem Distanzwert sortiert werden, um eine sortierte Reihenfolge zu erzeugen, und die mehreren Kindknoten im BVH-Knotenstapel in der sortieren Reihenfolge gespeichert werden.
  • Ausführungsformen der Erfindung können verschiedene Schritte aufweisen, die oben beschrieben wurden. Die Schritte können in maschinenausführbaren Anweisungen eingebettet sein, die verwendet werden können, um einen Allzweck- oder Spezialzweckprozessor zu veranlassen, die Schritte durchzuführen. Alternativ können diese Schritte durch spezifische Hardwarekomponenten durchgeführt werden, die hartverdrahtete Logik zur Durchführung der Schritte beinhalten, oder durch eine Kombination programmierter Computerkomponenten und Kunden-Hardwarekomponenten.
  • Wie hier beschrieben, können sich Anweisungen auf spezifische Konfigurationen von Hardware beziehen, wie anwendungsspezifische integrierte Schaltungen (ASICs), die konfiguriert sind, gewisse Betriebe durchzuführen, oder eine vorbestimmte Funktionalität aufweisen, oder Softwareanweisungen, die im Speicher gespeichert sind, der in einem nicht transitorischen computerlesbaren Medium verkörpert ist. Daher können die in den Figuren gezeigten Techniken unter Verwendung von Code und Daten implementiert werden, die auf einer oder mehreren elektronischen Vorrichtungen (z.B. einer Endstation, einem Netzwerkelement usw.) gespeichert sind und ausgeführt werden. Solche elektronischen Vorrichtungen speichern und kommunizieren (intern und/oder mit anderen elektronischen Vorrichtungen über ein Netzwerk) Code und Daten unter Verwendung computermaschinenlesbarer Medien, wie nicht transitorische computermaschinenlesbare Speichermedien (z.B. Magnetplatten; optische Platten; Direktzugriffsspeicher; Nur-Lese-Speicher; Flash-Speichervorrichtungen; Phasenänderungsspeicher) und transitorische computermaschinenlesbare Kommunikationsmedien (z.B. elektrische, optische, akustische oder andere Form von ausgesendeten Signalen - wie Trägerwellen, Infrarotsignale, Digitalsignale usw.).
  • Zusätzlich weisen solche elektronischen Vorrichtungen typischerweise einen Satz von einem oder mehreren Prozessoren auf, der an eine oder mehrere andere Komponenten, wie eine oder mehrere Speichervorrichtungen (nicht transitorische maschinenlesbare Speichermedien), Benutzereingabe-/ausgabevorrichtungen (z.B. eine Tastatur, einen Berührungsschirm und/oder eine Anzeige) und Netzwerkverbindungen gekoppelt ist. Die Kopplung des Satzes von Prozessoren und anderen Komponenten erfolgt typischerweise durch eine(n) oder mehrere Busse oder Brücken (auch als Bussteuerungen bezeichnet). Die Speichervorrichtung und Signale, die den Netzwerkverkehr tragen, stellen eines oder mehrere maschinenlesbare Speichermedien und maschinenlesbare Kommunikationsmedien dar. Daher speichert die Speichervorrichtung einer bestimmten elektronischen Vorrichtung Code und/oder Daten zur Ausführung auf dem Satz von einem oder mehreren Prozessoren dieser elektronischen Vorrichtung.
  • Natürlich können eine oder mehrere Teil einer Ausführungsform der Erfindung unter Verwendung verschiedener Kombinationen von Software, Firmware und/oder Hardware implementiert werden. In dieser ausführlichen Beschreibung wurden durchgehend, zur Erklärung, zahlreiche spezifische Einzelheiten angegeben, um ein umfassendes Verständnis der vorliegenden Erfindung zu ermöglichen. Es ist jedoch für einen Fachmann offensichtlich, dass die Erfindung ohne einige dieser spezifischen Details umgesetzt werden kann. In manchen Fällen wurden allgemein bekannte Strukturen und Funktionen nicht ausführlich beschrieben, um Verschleiern des Gegenstands der vorliegenden Erfindung zu vermeiden. Daher sollen der Umfang und das Wesen der Erfindung im Sinne der 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 Nicht-Patentliteratur
    • Nach der Methode, die in Restart Trailfor Stackless BVH Traversal, High Performance Graphics (2010), S. 107-111 [0308]

    Claims (25)

    1. Vorrichtung, aufweisend: einen Begrenzungsvolumenhierarchie- (BVH) Generator zum Konstruieren einer BVH, aufweisend mehrere hierarchisch angeordnete Knoten, aufweisend einen Wurzelknoten, mehrere interne Knoten und mehrere Blattknoten, aufweisend Primitive, wobei jeder interne Knoten einen Kindknoten an entweder dem Wurzelknoten oder einem anderen internen Knoten aufweist und jeder Blattknoten einen Kindknoten an einem internen Knoten aufweist; eine erste Datenspeicherbank, die als eine erste Vielzahl von Einträgen anzuordnen ist; eine zweite Datenspeicherbank, die als eine zweite Vielzahl von Einträgen anzuordnen ist, wobei jeder Eintrag der ersten Vielzahl von Einträgen und der zweiten Vielzahl von Einträgen einen Strahl speichern soll, der die BVH durchqueren soll; eine Zuordnungsschaltung zum Verteilen eines eingehenden Strahls zu entweder der ersten Datenspeicherbank oder der zweiten Datenspeicherbank basierend auf einer relativen Anzahl von Strahlen, die derzeit in der ersten und zweiten Datenspeicherbank gespeichert sind; und Querungsschaltkreis zum Wechseln zwischen Auswahl eines nächsten Strahls aus der ersten Datenspeicherbank und der zweiten Datenspeicherbank, wobei der Querungsschaltkreis den nächsten Strahl durch die BVH queren lässt, indem er einen nächsten BVH-Knoten von einer Oberseite eines BVH-Knotenstapels liest und bestimmt, ob der nächste Strahl den nächsten BVH-Knoten kreuzt.
    2. Vorrichtung nach Anspruch 1, weiter aufweisend: Banküberwachungsschaltkreis, um eine erste Anzahl von Strahlen zu verfolgen, die derzeit in der ersten Datenspeicherbank gespeichert sind, und eine zweite Anzahl von Strahlen, die derzeit in der zweiten Datenspeicherbank gespeichert sind.
    3. Vorrichtung nach Anspruch 2, wobei der Banküberwachungsschaltkreis weiter aufweist: einen ersten Zähler, der in Reaktion darauf erhöht wird, dass ein Strahl der ersten Datenspeicherbank durch die Zuordnungsschaltung hinzugefügt wird, und der in Reaktion darauf gesenkt wird, dass ein Strahl aus der ersten Datenspeicherbank durch den Querungsschaltkreis gelesen wird; und einen zweiten Zähler, der in Reaktion darauf erhöht wird, dass ein Strahl der zweiten Datenspeicherbank durch die Zuordnungsschaltung hinzugefügt wird, und der in Reaktion darauf gesenkt wird, dass ein Strahl aus der zweiten Datenspeicherbank durch den Querungsschaltkreis gelesen wird.
    4. Vorrichtung nach Anspruch 3, wobei die Zuordnungsschaltung den eingehenden Strahl entweder zu der ersten Datenspeicherbank oder der zweiten Datenspeicherbank basierend auf relativen Werten des ersten Zählers und des zweiten Zählers verteilen soll.
    5. Vorrichtung nach einem der Ansprüche 1 bis 4, wobei der BVH-Knotenstapel einen ersten BVH-Knotenstapel aufweist, der erste BVH-Knotenstapel eine erste Vielzahl von internen Kindknoten speichert, die mit einem Strahltreffer mit einem Elternknoten der ersten mehreren Kindknoten verknüpft sind, die Vorrichtung weiter aufweisend: einen zweiten BVH-Knotenstapel zum Speichern einer zweite Vielzahl von internen Kindknoten und/oder Blattknoten.
    6. Vorrichtung nach Anspruch 5, wobei die internen Kindknoten auf dem Stapel basierend auf einer Distanz zwischen jedem internen Kindknoten und einem Koordinatenwert, der mit dem nächsten Strahl verknüpft ist, geordnet sind.
    7. Vorrichtung nach Anspruch 5, wobei der erste BVH-Knotenstapel in einem oder mehreren der ersten Vielzahl von Einträgen der ersten Datenspeicherbank gespeichert werden soll und der zweite BVH-Knotenstapel in einem oder mehreren der zweiten Vielzahl von Einträgen der zweiten Datenspeicherbank gespeichert werden soll.
    8. Vorrichtung nach einem der Ansprüche 1 bis 7, wobei der BVH-Knotenstapel N Einträge aufweist, wo N kleiner als eine Anzahl von Knoten der BVH ist.
    9. Vorrichtung nach Anspruch 8, weiter aufweisend: Querungsverfolgungsschaltkreis zum Aktualisieren eines Verfolgungsarrays in Reaktion darauf, dass der Querungsschaltkreis den nächsten Strahl in Bezug auf jeden BVH Knoten verarbeitet, der von der Oberseite des BVH-Knotenstapels gelesen wird.
    10. Vorrichtung nach Anspruch 9, wobei der Querungsschaltkreis einen aktuellen Querungszustand im Speicher in Reaktion auf Ausführung eines Shaders speichern soll, wobei der aktuelle Querungszustand die erste Vielzahl von Einträgen, die zweite Vielzahl von Einträgen und den BVH-Knotenstapel aufweist.
    11. Vorrichtung nach Anspruch 10, wobei der Querungsschaltkreis den aktuellen Querungszustand aus Speicher wiederherstellen soll und Querungsbetriebe neustarten soll, der Querungsschaltkreis das Verfolgungsarray lesen soll, um einen Anfangspunkt zu bestimmen, von dem die Querungsbetriebe neu zu starten sind.
    12. Vorrichtung nach Anspruch 11, wobei, wenn der nächste Strahl den nächsten BVH-Knoten kreuzt, mehrere Kindknoten des nächsten BVH-Knotens basierend auf einem Distanzwert sortiert werden, um eine sortierte Reihenfolge zu erzeugen, und die mehreren Kindknoten im BVH-Knotenstapel in der sortieren Reihenfolge gespeichert werden.
    13. Verfahren, aufweisend: Erzeugen einer Begrenzungsvolumenhierarchie (BVH), aufweisend mehrere hierarchisch angeordnete Knoten, aufweisend einen Wurzelknoten, mehrere interne Knoten und mehrere Blattknoten, aufweisend Primitive, wobei jeder interne Knoten einen Kindknoten an entweder dem Wurzelknoten oder einem anderen internen Knoten aufweist und jeder Blattknoten einen Kindknoten an einem internen Knoten aufweist; Konfigurieren einer ersten Vielzahl von Einträgen in einer ersten Datenspeicherbank; Konfigurieren einer zweiten Vielzahl von Einträgen in einer zweiten Datenspeicherbank, wobei jeder Eintrag der ersten Vielzahl von Einträgen und der zweiten Vielzahl von Einträgen einen Strahl speichern soll, der die BVH durchqueren soll; Verteilen eines eingehenden Strahls zu entweder der ersten Datenspeicherbank oder der zweiten Datenspeicherbank basierend auf einer relativen Anzahl von Strahlen, die derzeit in der ersten und zweiten Datenspeicherbank gespeichert sind; und Auswählen eines nächsten Strahls zur Querungsverarbeitung durch Wechseln zwischen der ersten Datenspeicherbank und der zweiten Datenspeicherbank; Entfernen eines nächsten BVH-Knotens von einer Oberseite eines BVH-Knotenstapels; und Bestimmen, ob der nächste Strahl den nächsten BVH-Knoten kreuzt.
    14. Verfahren nach Anspruch 13, weiter aufweisend: Verfolgen einer ersten Anzahl von Strahlen, die derzeit in der ersten Datenspeicherbank gespeichert sind, und einer zweiten Anzahl von Strahlen, die derzeit in der zweiten Datenspeicherbank gespeichert sind.
    15. Verfahren nach Anspruch 14, wobei Verfolgen weiter aufweist: Erhöhen eines ersten Zählers in Reaktion darauf, dass ein Strahl der ersten Datenspeicherbank hinzugefügt wird und der in Reaktion darauf gesenkt wird, dass ein Strahl aus der ersten Datenspeicherbank gelesen wird; und Erhöhen eines zweiten Zählers in Reaktion darauf, dass ein Strahl der ersten Datenspeicherbank hinzugefügt wird, und der in Reaktion darauf gesenkt wird, dass ein Strahl aus der ersten Datenspeicherbank gelesen wird.
    16. Verfahren nach Anspruch 15, wobei der eingehende Strahl entweder zu der ersten Datenspeicherbank oder der zweiten Datenspeicherbank basierend auf relativen Werten des ersten Zählers und des zweiten Zählers verteilt wird.
    17. Verfahren nach einem der Ansprüche 13 bis 16, wobei der BVH-Knotenstapel einen ersten BVH-Knotenstapel aufweist, der erste BVH-Knotenstapel eine erste Vielzahl von internen Kindknoten speichert, die mit einem Strahltreffer mit einem Elternknoten der ersten mehreren Kindknoten verknüpft sind, das Verfahren weiter aufweisend: Speichern einer zweiten Vielzahl interner Kindknoten und/oder Blattknoten in einem zweiten BVH-Knotenstapel.
    18. Verfahren nach Anspruch 17, wobei die internen Kindknoten auf dem Stapel basierend auf einer Distanz zwischen jedem internen Kindknoten und einem Koordinatenwert, der mit dem nächsten Strahl verknüpft ist, geordnet sind.
    19. Verfahren nach Anspruch 17, wobei der erste BVH-Knotenstapel in einem oder mehreren der ersten Vielzahl von Einträgen der ersten Datenspeicherbank gespeichert werden soll und der zweite BVH-Knotenstapel in einem oder mehreren der zweiten Vielzahl von Einträgen der zweiten Datenspeicherbank gespeichert werden soll.
    20. Verfahren nach einem der Ansprüche 13 bis 19, wobei der BVH-Knotenstapel N Einträge aufweist, wo N kleiner als eine Anzahl von Knoten der BVH ist.
    21. Verfahren nach Anspruch 20, weiter aufweisend: Aktualisieren eines Verfolgungsarrays in Reaktion darauf, dass der nächste Strahl in Bezug auf den nächsten BVH-Knoten verarbeitet wird und jeder zusätzliche BVH-Knoten von der Oberseite des BVH-Knotenstapels gelesen wird.
    22. Verfahren nach Anspruch 21, weiter aufweisend: Speichern eines aktuellen Querungszustands im Speicher in Reaktion darauf, dass ein Shader ausgeführt wird, wobei der aktuelle Querungszustand die erste Vielzahl von Einträgen, die zweite Vielzahl von Einträgen und den BVH-Knotenstapel aufweist.
    23. Verfahren nach Anspruch 22, weiter aufweisend: Wiederherstellen des aktuellen Querungszustands aus Speicher und Neustarten von Querungsbetrieben, und Lesen des Verfolgungsarrays, um einen Anfangspunkt zu bestimmen, von dem die Querungsbetriebe neu zu starten sind.
    24. Verfahren nach Anspruch 23, wobei, wenn der nächste Strahl den nächsten BVH-Knoten kreuzt, mehrere Kindknoten des nächsten BVH-Knotens basierend auf einem Distanzwert sortiert werden, um eine sortierte Reihenfolge zu erzeugen, und die mehreren Kindknoten im BVH-Knotenstapel in der sortieren Reihenfolge gespeichert werden.
    25. Maschinenlesbares Medium, auf dem Programmcode gespeichert ist, der, wenn von einer Maschine ausgeführt, die Maschine veranlasst, die Betriebe durchzuführen: Erzeugen einer Begrenzungsvolumenhierarchie (BVH), aufweisend mehrere hierarchisch angeordnete Knoten, aufweisend einen Wurzelknoten, mehrere interne Knoten und mehrere Blattknoten, aufweisend Primitive, wobei jeder interne Knoten einen Kindknoten an entweder dem Wurzelknoten oder einem anderen internen Knoten aufweist und jeder Blattknoten einen Kindknoten an einem internen Knoten aufweist; Konfigurieren einer ersten Vielzahl von Einträgen in einer ersten Datenspeicherbank; Konfigurieren einer zweiten Vielzahl von Einträgen in einer zweiten Datenspeicherbank, wobei jeder Eintrag der ersten Vielzahl von Einträgen und der zweiten Vielzahl von Einträgen einen Strahl speichern soll, der die BVH durchqueren soll; Verteilen eines eingehenden Strahls zu entweder der ersten Datenspeicherbank oder der zweiten Datenspeicherbank basierend auf einer relativen Anzahl von Strahlen, die derzeit in der ersten und zweiten Datenspeicherbank gespeichert sind; und Auswählen eines nächsten Strahls zur Querungsverarbeitung durch Wechseln zwischen der ersten Datenspeicherbank und der zweiten Datenspeicherbank; Entfernen eines nächsten BVH-Knotens von einer Oberseite eines BVH-Knotenstapels; und Bestimmen, ob der nächste Strahl den nächsten BVH-Knoten kreuzt.
    DE102020132557.6A 2020-03-15 2020-12-08 Vorrichtung und verfahren für asynchrones raytracing Pending DE102020132557A1 (de)

    Applications Claiming Priority (2)

    Application Number Priority Date Filing Date Title
    US16/819,121 US11087522B1 (en) 2020-03-15 2020-03-15 Apparatus and method for asynchronous ray tracing
    US16/819,121 2020-03-15

    Publications (1)

    Publication Number Publication Date
    DE102020132557A1 true DE102020132557A1 (de) 2021-09-16

    Family

    ID=77179273

    Family Applications (1)

    Application Number Title Priority Date Filing Date
    DE102020132557.6A Pending DE102020132557A1 (de) 2020-03-15 2020-12-08 Vorrichtung und verfahren für asynchrones raytracing

    Country Status (6)

    Country Link
    US (2) US11087522B1 (de)
    JP (1) JP2021149932A (de)
    KR (1) KR20210116200A (de)
    CN (1) CN113470158A (de)
    DE (1) DE102020132557A1 (de)
    TW (1) TW202207166A (de)

    Families Citing this family (8)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    US11609899B2 (en) * 2020-07-16 2023-03-21 Nvidia Corporation Concurrent hash map updates
    US11704859B2 (en) * 2020-08-20 2023-07-18 Sony Interactive Entertainment LLC System and method for accelerated ray tracing
    US20230081791A1 (en) * 2021-09-16 2023-03-16 Nvidia Corporation Displaced Micro-meshes for Ray and Path Tracing
    CN115908157A (zh) * 2021-09-30 2023-04-04 想象技术有限公司 渲染3d场景的图像
    US11928770B2 (en) 2021-12-27 2024-03-12 Advanced Micro Devices, Inc. BVH node ordering for efficient ray tracing
    US20230359496A1 (en) * 2022-01-31 2023-11-09 Intel Corporation Stack access throttling for synchronous ray tracing
    US20230409337A1 (en) * 2022-06-21 2023-12-21 Advanced Micro Devices, Inc. Partial sorting for coherency recovery
    US11978151B2 (en) * 2022-08-31 2024-05-07 Qualcomm Incorporated Multi-level bounding volume hierarchy coalescing

    Family Cites Families (5)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    KR20150086718A (ko) * 2014-01-20 2015-07-29 삼성전자주식회사 메모리를 이용하여 파이프라인이 데이터를 처리하는 방법 및 장치
    US9552664B2 (en) * 2014-09-04 2017-01-24 Nvidia Corporation Relative encoding for a block-based bounding volume hierarchy
    US9922396B2 (en) * 2016-04-04 2018-03-20 Intel Corporation Reduction of BVH-node bandwidth with incremental traversal
    US10482650B2 (en) * 2017-07-27 2019-11-19 Fraunhofer-Gesellschaft Zur Foerderung Der Angewandten Forschung E. V. Methods, computer program and apparatus for an ordered traversal of a subset of nodes of a tree structure and for determining an occlusion of a point along a ray in a raytracing scene
    US10692270B2 (en) * 2017-08-18 2020-06-23 Microsoft Technology Licensing, Llc Non-divergent parallel traversal of a bounding volume hierarchy

    Non-Patent Citations (1)

    * Cited by examiner, † Cited by third party
    Title
    Nach der Methode, die in Restart Trailfor Stackless BVH Traversal, High Performance Graphics (2010), S. 107-111

    Also Published As

    Publication number Publication date
    US20220130097A1 (en) 2022-04-28
    JP2021149932A (ja) 2021-09-27
    CN113470158A (zh) 2021-10-01
    TW202207166A (zh) 2022-02-16
    US11087522B1 (en) 2021-08-10
    KR20210116200A (ko) 2021-09-27

    Similar Documents

    Publication Publication Date Title
    DE102021118444A1 (de) Einrichtung und Verfahren zum Komprimieren von Strahlverfolgungsbeschleunigungsstrukturaufbaudaten
    DE112020000874T5 (de) Systeme und Methoden zum Aktualisieren von speicherseitigen Caches in einer Multi-GPU-Konfiguration
    DE102020124932A1 (de) Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel
    DE102020130078A1 (de) Systolische arithmetik an spärlichen daten
    DE112020001249T5 (de) Dünnbesetzt-Optimierungen für eine Matrixbeschleunigerarchitektur
    DE102020132557A1 (de) Vorrichtung und verfahren für asynchrones raytracing
    DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
    DE102018110380A1 (de) Tool zum Ermöglichen der Effizienz beim Maschinenlernen
    DE102020131901A1 (de) Vorrichtung und verfahren zum durchführen nicht lokaler mittelwertfilterung unter verwendung eines bewegungsschätzschaltkreises eines grafikprozessors
    DE102020129970A1 (de) Systeme und verfahren zur fehlererkennung und steuerung für eingebettete arbeitsspeicher- und rechenelemente
    DE102020129251A1 (de) Adaptives verformbares kernvorhersagenetzwerk zum bildentrauschen
    DE102020131896A1 (de) Deep learning-basierte auswahl von abtastwerten für adaptives supersampling
    DE102020132544A1 (de) Vorrichtung und verfahren für doppelpräzisionsstrahlquerung in einer raytracing-pipeline
    DE102020129969A1 (de) Verbesserungen der verarbeitung und des caching von graphikverarbeitungseinheiten
    DE102020130073A1 (de) Verbesserung der datenlokalität für grafikprozessoreinheiten
    DE102019135639A1 (de) Auf Echtzeit-Strahlverfolgung (RTRT) basierende adaptive Mehrfrequenzschattierung (AMFS)
    DE112020000464T5 (de) Mehrfachkachel-grafikprozessor-rendering
    DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
    DE102020132377A1 (de) Vorrichtung und Verfahren zur Drosselung einer Raytracing-Pipeline
    DE102019132001A1 (de) Vorrichtung und verfahren für einen hierarchischen beamtracer
    DE102020132272A1 (de) Verfahren und vorrichtung zum codieren basierend auf schattierungsraten
    DE102020131852A1 (de) Vorrichtung und verfahren zum ausführen eines stabilen sortiervorgangs mit kurzer latenz
    CN112085827B (zh) 用于加速数据结构修整的装置和方法
    DE112020000854T5 (de) Thread-gruppen-planung für die grafikverarbeitung
    DE102022124599A1 (de) Vorrichtung und verfahren zur baumstrukturdatenreduzierung