DE102020124932A1 - Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel - Google Patents

Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel Download PDF

Info

Publication number
DE102020124932A1
DE102020124932A1 DE102020124932.2A DE102020124932A DE102020124932A1 DE 102020124932 A1 DE102020124932 A1 DE 102020124932A1 DE 102020124932 A DE102020124932 A DE 102020124932A DE 102020124932 A1 DE102020124932 A1 DE 102020124932A1
Authority
DE
Germany
Prior art keywords
graphics
threads
processor
local
data
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
DE102020124932.2A
Other languages
English (en)
Inventor
Ravishankar Iyer
Selvakumar Panneer
Carl S. Marshall
John Feit
Venkat R Gokulrangan
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 DE102020124932A1 publication Critical patent/DE102020124932A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5072Grid computing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/25Output arrangements for video game devices
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • A63F13/355Performing operations on behalf of clients with restricted processing capabilities, e.g. servers transform changing game scene into an MPEG-stream for transmitting to a mobile phone or a thin client
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/60Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • 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
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • A63F13/358Adapting the game course according to the network or server load, e.g. for reducing latency due to different connection speeds between clients
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/50Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers
    • A63F2300/53Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers details of basic data processing
    • A63F2300/534Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers details of basic data processing for network load management, e.g. bandwidth optimization, latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5017Task decomposition
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Abstract

Eine Vorrichtung und ein Verfahren zum Planen von Strängen auf lokalen und fernen Verarbeitungsbetriebsmitteln. Beispielsweise umfasst eine Ausführungsform einer Vorrichtung: einen lokalen Grafikprozessor zum Ausführen von Strängen einer Anwendung; eine Grafikprozessorvirtualisierungs-Schaltungsanordnung und/oder -Logik zum Erzeugen einer virtualisierten Repräsentation eines lokalen Prozessors; einen Planer zum Identifizieren einer ersten Teilmenge der Stränge zur Ausführung auf einem lokalen Grafikprozessor und einer zweiten Teilmenge der Stränge zur Ausführung auf einer virtualisierten Repräsentation eines lokalen Prozessors; wobei der Planer die erste Teilmenge von Strängen auf dem lokalen Grafikprozessor und die zweite Teilmenge der Stränge durch Übertragen der Stränge oder einer Repräsentation davon an cloudbasierte Verarbeitungsbetriebsmittel, die der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind, planen soll; und der lokale Grafikprozessor die ersten Ergebnisse des Ausführens der ersten Teilmenge von Strängen auf dem lokalen Grafikprozessor mit den zweiten Ergebnissen des Ausführens der zweiten Teilmenge von Strängen auf den cloudbasierten Verarbeitungsbetriebsmitteln kombinieren soll, um einen Bildframe zu rendern

Description

  • Hintergrund
  • Gebiet der Erfindung
  • Diese Erfindung bezieht sich im Allgemeinen auf das Gebiet der Grafikprozessoren. Insbesondere bezieht sich die Erfindung auf eine Vorrichtung und ein Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und Cloud-basierter Grafikverarbeitungsbetriebsmittel.
  • Beschreibung des Standes der Technik
  • Während Fern-Grafikserver Bildframes viel schneller als die Spielvorrichtung eines typischen Anwenders rendern können, gibt es andere Herausforderungen, die das Echtzeit-Spiel-Anwendererlebnis beeinträchtigen können, wie z. B. die durch das Netz verursachte Latenz und Qualitätsschwankungen aufgrund der Datenkomprimierung. Für bestimmte Arten von Spielen, wie z. B. Spiele mit erweiterter Realität (AR-Spiele) und virtueller Realität (VR-Spiele), sind leistungsstarke Netzplattformen erforderlich, um die benötigte Latenz zu erzielen.
  • Figurenliste
  • Ein besseres Verständnis der vorliegenden Erfindung kann aus der folgenden genauen Beschreibung in Zusammenschau mit den folgenden Zeichnungen erzielt werden:
    • 1 ist ein Blockdiagramm einer Ausführungsform eines Computersystems mit einem Prozessor, der einen oder mehrere Prozessorkerne und Grafikprozessoren aufweist;
    • 2A-D zeigen Rechensysteme und Grafikprozessoren, die von hierin beschriebenen Ausführungsformen bereitgestellt werden;
    • 3A-C sind Blockdiagramme von zusätzlichen Grafikprozessor- und Rechenbeschleunigerarchitekturen, die von hierin beschriebenen Ausführungsformen bereitgestellt werden;
    • 4 ist ein Blockdiagramm einer Ausführungsform einer Grafikverarbeitungsmaschine für einen Grafikprozessor;
    • 5A-B zeigen eine Strangausführungslogik, die eine Anordnung von Verarbeitungselementen aufweist, die in einem Grafikprozessorkern verwendet wird;
    • 6 zeigt eine zusätzliche Ausführungseinheit gemäß einer Ausführungsform;
    • 7 ist ein Blockdiagramm, das ein Grafikprozessorbefehlsformat gemäß einigen Ausführungsformen darstellt;
    • 8 ist ein Blockdiagramm einer weiteren Ausführungsform eines Grafikprozessors, der eine Grafikpipeline, eine Medienpipeline, eine Anzeigemaschine, eine Strangausführungslogik und eine Renderausgabepipeline aufweist;
    • 9A ist ein Blockdiagramm, das ein Grafikprozessorbefehlsformat gemäß einer Ausführungsform darstellt;
    • 9B ist ein Blockdiagramm, das eine Grafikprozessorbefehlsfolge gemäß einer Ausführungsform darstellt;
    • 10 zeigt eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem gemäß einer Ausführungsform;
    • 11A-B zeigen ein beispielhaftes IP-Kern-Entwicklungssystem, das verwendet werden kann, um eine integrierte Schaltung und eine beispielhafte Baugruppenanordnung herzustellen;
    • 11C-D zeigen andere beispielhafte Baugruppenanordnungen;
    • 12 zeigt eine beispielhaftes integrierte Ein-Chip-System-Schaltung, die unter Verwendung eines oder mehrerer IP-Kerne gemäß einer Ausführungsform hergestellt werden kann;
    • 13-14 zeigen beispielhafte Grafikprozessoren und Kerne, die in einem Ein-Chip-System (SoC) integriert sind;
    • 15A-B zeigen Ausführungsformen einer Architektur, die virtualisierte oder „Geister“-GPUs aufweist;
    • 16 zeigt eine weitere Ausführungsform einer Architektur, die virtualisierte oder „Geister“-GPUs aufweist;
    • 17 zeigt die der Ausführung zugeordnete Zeitvorgabe unter Verwendung von drei Geister-GPUs und einer physischen GPU;
    • 18 zeigt eine Ausführungsform zum Erzeugen einer Geister-GPU und zum Aufzählen der Geister-GPU;
    • 19 zeigt ein Verfahren gemäß einer Ausführungsform der Erfindung;
    • 20A-B zeigen Anordnungen von Geister- und physischen GPUs und xPUs;
    • 21 zeigt eine Ausführungsform einer Architektur zum Durchführen eines anfänglichen Trainings einer Maschinenlernarchitektur;
    • 22 zeigt eine Ausführungsform, in der eine maschinell lernende Maschine während der Laufzeit fortlaufend trainiert und aktualisiert wird;
    • 23 zeigt eine weitere Ausführungsform darstellt, bei der eine maschinell lernende Maschine während der Laufzeit fortlaufend trainiert und aktualisiert wird;
    • 24A-B zeigen Ausführungsformen, in denen Maschinenlerndaten in einem Netz gemeinsam genutzt werden; und
    • 25 zeigt eine Ausführungsform eines Verfahrens zum Trainieren einer maschinell lernenden Maschine;
    • 26 zeigt eine Ausführungsform, in der Knoten Geisterbereichsdaten austauschen, um verteilte Entrauschungsoperationen durchzuführen;
    • 27 zeigt eine Ausführungsform einer Architektur, in der Bildrender- und Entrauschungsoperationen über mehrere Knoten verteilt werden;
    • 28 zeigt zusätzliche Einzelheiten einer Architektur zum verteilten Rendern und Entrauschen;
    • 29 zeigt ein Verfahren gemäß einer Ausführungsform der Erfindung;
    • 30 zeigt eine Ausführungsform eines Maschinenlernverfahrens;
    • 31 zeigt mehrere miteinander verbundene Allzweck-Grafikprozessoren;
    • 32 zeigt einen Satz von faltenden Schichten und vollständig verbundenen Schichten für eine Maschinenlernimplementierung;
    • 33 zeigt eine Ausführungsform einer faltenden Schicht;
    • 34 zeigt ein Beispiel eines Satzes miteinander verbundener Knoten in einer Maschinenlernimplementierung;
    • 35 zeigt eine Ausführungsform eines Trainingsrahmens, in dem ein neuronales Netz unter Verwendung eines Trainingsdatensatzes lernt;
    • 36A zeigt Beispiele von Modellparallelität und Datenparallelität;
    • 36B zeigt ein Beispiel eines Ein-Chip-Systems (SoC);
    • 37 zeigt ein Beispiel einer Verarbeitungsarchitektur, die Strahlverfolgungskerne und Tensorkerne umfasst;
    • 38 zeigt ein Beispiel eines Strahlbündels;
    • 39 zeigt eine Ausführungsform einer Vorrichtung zum Durchführen einer Strahlbündelverfolgung;
    • 40 zeigt ein Beispiel einer Strahlbündelhierarchie;
    • 41 zeigt ein Verfahren zum Durchführen einer Strahlbündelverfolgung;
    • 42 zeigt ein Beispiel einer verteilten Strahlverfolgungsmaschine;
    • 43-44 zeigen ein Beispiel einer Komprimierung, die in einem Strahlverfolgungssystem durchgeführt wird;
    • 45 zeigt ein Verfahren gemäß einer Ausführungsform der Erfindung;
    • 46 zeigt eine beispielhafte Hybrid-Strahlverfolgungsvorrichtung;
    • 47 zeigt Beispiele von Stapeln, die für Strahlverfolgungsoperationen verwendet werden;
    • 48 zeigt zusätzliche Einzelheiten für eine Ausführungsform einer Hybrid-Strahlverfolgungsvorrichtung;
    • 49 zeigt ein Beispiel einer Begrenzungsvolumenhierarchie;
    • 50 zeigt ein Beispiel eines Speichers für Aufrufstapel und eines Durchlaufzustände;
    • 51 zeigt eine Ausführungsform eines Verfahrens zum Durchqueren und Schneiden;
    • 52A-B zeigen eine Ausführungsform, in der mehrere Abfertigungszyklen erforderlich sind, um bestimmte Schattierer auszuführen;
    • 53 zeigt eine Ausführungsform, in der ein einzelner Abfertigungszyklus mehrere Schattierer ausführt;
    • 54 zeigt eine weitere Ausführungsform, in der ein einzelner Abfertigungszyklus mehrere Schattierer ausführt;
    • 55 zeigt eine Ausführungsform einer Architektur zum Ausführen von Strahlverfolgungsbefehlen; und
    • 56 zeigt eine Ausführungsform eines Verfahrens zum Ausführen von Strahlverfolgungsbefehlen innerhalb eines Strangs.
  • Genaue Beschreibung
  • In der folgenden Beschreibung werden zu Erklärungszwecken zahlreiche spezifische Einzelheiten dargelegt, um ein gründliches Verständnis der nachfolgend beschriebenen Ausführungsformen der Erfindung zu bieten. Es wird jedoch für Fachleute ersichtlich sein, dass die Ausführungsformen der Erfindung ohne einige dieser spezifischen Einzelheiten praktiziert werden können. In anderen Fällen sind wohlbekannte Strukturen und Vorrichtungen in Blockdiagrammform gezeigt, um eine Verunklarung der zugrundeliegenden Prinzipien der Ausführungsformen der Erfindung zu vermeiden.
  • Beispielhafte Grafikprozessorarchitekturen und Datentypen
  • Systemüberblick
  • 1 ist ein Blockdiagramm eines Verarbeitungssystems 100 gemäß einer Ausführungsform. Das System 100 kann in einem Einzelprozessor-Desktop-System, einem Multiprozessor-Arbeitsplatz-System oder einem Serversystem mit einer großen Anzahl von Prozessoren 102 oder Prozessorkernen 107 verwendet werden. In einer Ausführungsform ist das System 100 eine Verarbeitungsplattform, die in einer integrierten Ein-Chip-System-Schaltung (SoC-Schaltung) zur Verwendung in mobilen, tragbaren oder eingebetteten Vorrichtungen, z. B. in Internet-der-Dinge-Vorrichtungen (IoT-Vorrichtungen) mit drahtgebundener oder drahtloser Verbindungsfähigkeit zu einem lokalen Netz oder Weitbereichsnetz.
  • In einer Ausführungsform kann das System 100 Folgendes umfassen, damit gekoppelt oder darin integriert sein: eine serverbasierte Spielplattform; eine Spielekonsole, einschließlich einer Spiele- und Medienkonsole; eine mobile Spielekonsole, eine tragbare Spielekonsole oder eine Online-Spielekonsole. In einigen Ausführungsformen ist das System 100 Teil eines Mobiltelefons, eines Smartphones, einer Tablet-Rechenvorrichtung oder einer mit dem Internet verbundenen Mobilvorrichtung wie eines Laptops mit geringer interner Speicherkapazität. Das Verarbeitungssystem 100 kann zudem Folgendes umfassen, damit gekoppelt sein oder darin integriert sein: eine am Körper tragbare Vorrichtung wie beispielsweise eine am Körper tragbare Smartwatch-Vorrichtung; intelligente Brillen oder Kleidung, die mit Funktionen erweiterter Realität (AR) oder virtueller Realität (VR) erweitert wurden, um visuelle, hörbare oder taktile Ausgaben zu liefern, um visuelle, hörbare oder taktile Erlebnisse der realen Welt zu ergänzen oder auf andere Weise Text, Audio, Grafik, Video, holographische Bilder oder holographisches Video oder taktile Rückkopplung zu liefern; eine andere Vorrichtung für erweiterte Realität (AR-Vorrichtung); oder eine andere Vorrichtung für virtuelle Realität (VR-Vorrichtung). In einigen Ausführungsformen umfasst das Verarbeitungssystem 100 eine Fernseh- oder Beistellkasten-Vorrichtung oder ist Teil davon. In einer Ausführungsform kann das System 100 ein selbstfahrendes Fahrzeug wie etwa einen Bus, einen Sattelschlepper, ein Auto, ein Motorrad oder ein Elektrorad, ein Flugzeug oder ein Segelflugzeug (oder eine beliebige Kombination davon) umfassen, damit koppeln oder darin integriert sein. Das selbstfahrende Fahrzeug kann das System 100 verwenden, um die um das Fahrzeug herum erfasste Umgebung zu verarbeiten.
  • In einigen Ausführungsformen umfassen der eine oder die mehreren Prozessoren 102 jeweils einen oder mehrere Prozessorkerne 107, um Befehle zu verarbeiten, die, wenn sie ausgeführt werden, Operationen für System- und Anwendersoftware durchführen. In einigen Ausführungsformen ist jeder des einen oder der mehreren Prozessorkerne 107 dazu ausgelegt, einen bestimmten Befehlssatz 109 zu verarbeiten. In einigen Ausführungsformen kann der Befehlssatz 109 eine Datenverarbeitung mit komplexem Befehlssatz (CISC), eine Datenverarbeitung mit reduziertem Befehlssatz (RISC) oder eine Datenverarbeitung mit sehr langem Befehlswort (VLIW) ermöglichen. Ein oder mehrere Prozessorkerne 107 können jeweils einen anderen Befehlssatz 109 verarbeiten, der Befehle enthalten kann, um die Emulation von anderen Befehlssätzen zu ermöglichen. Der Prozessorkern 107 kann zudem andere Verarbeitungsvorrichtungen wie einen Digitalsignalprozessor (DSP) umfassen.
  • In einigen Ausführungsformen umfasst der Prozessor 102 einen Cache-Speicher 104. Abhängig von der Architektur kann der Prozessor 102 einen einzelnen internen Cache oder mehrere Ebenen von internem Cache aufweisen. In einer Ausführungsform wird der Cache-Speicher von den verschiedenen Komponenten des Prozessors 102 gemeinsam verwendet. In einer Ausführungsform verwendet der Prozessor 102 auch einen externen Cache (beispielsweise einen Ebene-3-Cache (L3-Cache) oder einen Cache letzter Ebene (LLC)) (nicht gezeigt), der von den Prozessorkernen 107 unter Verwendung bekannter Cache-Kohärenz-Techniken gemeinsam verwendet werden kann. Zusätzlich kann ein Registersatz 106 in dem Prozessor 102 enthalten sein, der verschiedene Arten von Registern zum Speichern von verschiedenen Arten von Daten enthalten kann (beispielsweise ein Ganzzahlregister, ein Gleitkommaregister, ein Statusregister und ein Befehlszeigerregister). Einige Register können Allzweckregister sein, während andere Register spezifisch für den Entwurf des Prozessors 102 sein können.
  • In einigen Ausführungsformen sind der eine oder die mehreren Prozessoren 102 mit einem oder mehreren Schnittstellenbussen 110 gekoppelt, um Kommunikationssignale wie Adressen, Daten oder Steuersignale zwischen dem Prozessor 102 und anderen Komponenten in dem System 100 zu übertragen. Der Schnittstellenbus 110 kann in einer Ausführungsform ein Prozessorbus sein, beispielsweise eine Version des Direktmedienschnittstellen-Busses (DMI-Busses). Prozessorbusse sind jedoch nicht auf den DMI-Bus beschränkt und können einen oder mehrere Peripheriekomponenten-Zwischenverbindungs-Busse (z. B. PCI, PCI Express), Speicherbusse oder andere Arten von Schnittstellenbussen umfassen. In einer Ausführungsform umfassen der eine oder die mehreren Prozessoren 102 einen integrierten Speichercontroller 116 und einen Plattformcontroller-Hub 130. Der Speichercontroller 116 ermöglicht die Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 100, während der Plattformcontroller-Hub (PCH) 130 Verbindungen zu E/A-Vorrichtungen über einen lokalen E/A-Bus bietet.
  • Die Speichervorrichtung 120 kann eine Vorrichtung mit dynamischem Direktzugriffsspeicher (DRAM), eine Vorrichtung mit statischem Direktzugriffsspeicher (SRAM), eine Flash-Speichervorrichtung, eine Phasenwechsel-Speichervorrichtung oder eine andere Speichervorrichtung mit geeignetem Leistungsvermögen, um als Prozessspeicher zu dienen, sein. In einer Ausführungsform kann die Speichervorrichtung 120 als Systemspeicher für das System 100 fungieren, um Daten 122 und Befehle 121 für die Verwendung beim Ausführen eines Prozesses oder einer Anwendung durch den Prozessor 102 zu speichern. Der Speichercontroller 116 koppelt auch mit einem optionalen externen Grafikprozessor 118, der mit dem einen oder den mehreren Grafikprozessoren 108 in den Prozessoren 102 kommunizieren kann, um Grafik- und Medienoperationen durchzuführen. In einigen Ausführungsformen können Grafik-, Medien- und/oder Rechenoperationen durch einen Beschleuniger 112 unterstützt werden, der ein Koprozessor ist, der dazu ausgelegt sein kann, einen speziellen Satz von Grafik-, Medien- oder Rechenoperationen auszuführen. Beispielsweise ist der Beschleuniger 112 in einer Ausführungsform ein Matrixmultiplikationsbeschleuniger, der verwendet wird, um maschinelles Lernen oder Rechenoperationen zu optimieren. In einer Ausführungsform ist der Beschleuniger 112 ein Strahlverfolgungsbeschleuniger, der verwendet werden kann, um Strahlverfolgungsoperationen zusammen mit dem Grafikprozessor 108 durchzuführen. In einer Ausführungsform kann ein externer Beschleuniger 119 anstelle oder abgestimmt mit dem Beschleuniger 112 verwendet werden.
  • In einigen Ausführungsformen kann eine Anzeigevorrichtung 111 mit dem einen oder mehreren Prozessoren 102 verbunden sein. Die Anzeigevorrichtung 111 kann eine oder mehrere von einer internen Anzeigevorrichtung, wie etwa in einer mobilen elektronischen Vorrichtung oder einer Laptop-Vorrichtung, oder einer externen Anzeigevorrichtung, die über eine Anzeigeschnittstelle (z. B. DisplayPort usw.) angeschlossen ist, sein. In einer Ausführungsform kann die Anzeigevorrichtung 111 eine am Kopf befestigte Anzeige (HMD) wie etwa eine stereoskopische Anzeigevorrichtung zur Verwendung in Anwendungen der virtuellen Realität (VR-Anwendungen) oder Anwendungen der erweiterten Realität (AR-Anwendungen) sein.
  • In einigen Ausführungsformen ermöglicht es der Plattformcontroller-Hub 130 Peripheriegeräten, eine Verbindung zu der Speichervorrichtung 120 und dem Prozessor 102 über einen Hochgeschwindigkeits-E/A-Bus herzustellen. Die E/A-Peripheriegeräte umfassen einen Audiocontroller 146, einen Netzcontroller 134, eine Firmware-Schnittstelle 128, einen drahtlosen Sendeempfänger 126, Berührungssensoren 125, eine Datenspeichervorrichtung 124 (z. B. nichtflüchtigen Speicher, flüchtigen Speicher, ein Festplattenlaufwerk, Flash-Speicher, NAND, 3D-NAND, 3D-XPoint usw.), ohne darauf beschränkt zu sein. Die Datenspeichervorrichtung 124 kann über eine Speicherschnittstelle (z. B. SATA) oder über einen Peripheriekomponentenbus wie einen Peripheriekomponenten-Zwischenverbindungs-Bus (z. B. PCI, PCI Express) verbunden sein. Die Berührungssensoren 125 können Berührungsschirmsensoren, Drucksensoren oder Fingerabdrucksensoren umfassen. Der drahtlose Sendeempfänger 126 kann ein Wi-Fi-Sendeempfänger, ein Bluetooth-Sendeempfänger oder ein Mobilfunknetz-Sendeempfänger wie etwa ein 3G-, 4G- oder 5G-Langzeitzentwicklungs-Sendeempfänger (LTE-Sendeempfänger) sein. Die Firmware-Schnittstelle 128 ermöglicht die Kommunikation mit System-Firmware und kann beispielsweise eine vereinheitlichte erweiterbare Firmware-Schnittstelle (UEFI) sein. Der Netzcontroller 134 kann eine Netzverbindung zu einem drahtgebundenen Netz ermöglichen. In einigen Ausführungsformen koppelt ein Hochleistungs-Netzcontroller (nicht gezeigt) mit dem Schnittstellenbus 110. Der Audiocontroller 146 ist in einer Ausführungsform ein Mehrkanal-Hochdefinitions-Audiocontroller. In einer Ausführungsform umfasst das System 100 einen optionalen Alt-E/A-Controller 140 zum Koppeln von Alt-Vorrichtungen (z. B. Personal-System-2-Vorrichtungen (PS/2-Vorrichtungen)) an das System. Der Plattformcontroller-Hub 130 kann auch mit einem oder mehreren Controllern des universellen seriellen Busses (USB-Controllern) 142 verbunden sein, um Eingabevorrichtungen wie Kombinationen aus Tastatur und Maus 143, eine Kamera 144 oder andere USB-Eingabevorrichtungen anzuschließen.
  • Es versteht sich, dass das gezeigte System 100 beispielhaft und nicht einschränkend ist, weil andere Typen von Datenverarbeitungssystemen, die anders konfiguriert sind, ebenfalls verwendet werden können. Zum Beispiel kann eine Instanz des Speichercontrollers 116 und des Plattformcontroller-Hubs 130 in einen diskreten externen Grafikprozessor wie etwa den externen Grafikprozessor 118 integriert sein. In einer Ausführungsform kann der Plattformcontroller-Hub 130 und/oder der Speichercontroller 116 außerhalb des einen oder der mehreren Prozessoren 102 sein. Zum Beispiel kann das System 100 einen externen Speichercontroller 116 und Plattformcontroller-Hub 130 umfassen, der als ein Speichercontroller-Hub und Peripheriekomponenten-Controller-Hub innerhalb eines System-Chipsatzes, der mit dem einen oder den mehreren Prozessoren 102 in Kommunikation steht, ausgelegt sein kann.
  • Beispielsweise können Leiterplatten („Schlitten“) verwendet werden, auf denen Komponenten wie etwa CPUs, Speicher und andere Komponenten angeordnet sind, für eine erhöhte thermische Leistungsfähigkeit ausgelegt. In einigen Beispielen befinden sich Verarbeitungskomponenten wie beispielsweise die Prozessoren auf einer Oberseite eines Schlittens, während Nahspeicher wie z. B. DIMMs auf einer Unterseite des Schlittens angeordnet ist. Als Ergebnis der verbesserten Luftströmung, die durch diese Gestaltung geboten wird, können die Komponenten bei höheren Frequenzen und Leistungspegeln arbeiten als in typischen Systemen, wodurch die Leistungsfähigkeit erhöht wird. Ferner sind die Schlitten so ausgelegt, dass sie blind mit Leistungs- und Datenkommunikationskabeln in einem Rack zusammenpassen, was ihre Fähigkeit verbessert, schnell entfernt, aufgerüstet, wieder eingebaut und/oder ersetzt zu werden. Ebenso sind einzelne Komponenten, die sich auf den Schlitten befinden, wie etwa Prozessoren, Beschleuniger, Speicher und Datenspeicherlaufwerke, aufgrund ihres erhöhten Abstands voneinander so ausgelegt, dass sie leicht aufgerüstet werden können. In der veranschaulichenden Ausführungsform weisen die Komponenten zudem Hardwarebestätigungsmerkmale auf, um ihre Authentizität nachzuweisen.
  • Ein Datenzentrum kann eine einzelne Netzarchitektur („Fabric“) verwenden, die mehrere andere Netzarchitekturen einschließlich Ethernet und Omni-Path unterstützt. Die Schlitten können über Lichtleitfasern, die eine höhere Bandbreite und eine geringere Latenz als eine typische verdrillte Doppelleitung (z. B. Kategorie 5, Kategorie 5e, Kategorie 6 usw.) bieten, mit Switches gekoppelt sein. Aufgrund der Zwischenverbindungen und der Netzarchitektur mit hoher Bandbreite und niedriger Latenz kann das Datenzentrum im Einsatz Betriebsmittel wie beispielsweise Speicher, Beschleuniger (z. B. GPUs, Grafikbeschleuniger, FPGAs, ASICs, neuronale Netze und/oder Beschleuniger für künstliche Intelligenz usw.) und Datenspeicherlaufwerke, die physisch getrennt sind, zusammenlegen und sie für Rechenbetriebsmittel (z. B. Prozessoren) nach Bedarf bereitstellen, so dass die Rechenbetriebsmittel auf die zusammengelegte Betriebsmitteln so zugreifen können, als wären sie lokal.
  • Eine Leistungsversorgung oder -quelle kann dem System 100 oder einer hierin beschriebenen Komponente oder einem hierin beschriebenen System Spannung und/oder Stromstärke liefern. In einem Beispiel umfasst die Leistungsversorgung einen Wechselstrom-zu-Gleichstrom-Adapter zum Anschließen an eine Wandsteckdose. Solche Wechselstromleistung kann eine Leistungsquelle mit erneuerbarer Energie (z. B. Solarenergie) sein. In einem Beispiel umfasst die Leistungsquelle eine Gleichstromquelle, beispielsweise einen externen Wechselstrom-Gleichstrom-Umsetzer. In einem Beispiel umfasst eine Leistungsquelle oder eine Leistungsversorgung drahtlose Ladehardware zum Laden über die Nähe zu einem Ladefeld. In einem Beispiel kann die Leistungsquelle eine interne Batterie, eine Wechselstromversorgung, eine bewegungsbasierte Leistungsversorgung, eine Solarleistungsversorgung oder eine Brennstoffzellenquelle umfassen.
  • 2A-2D zeigen Rechensysteme und Grafikprozessoren, die von hierin beschriebenen Ausführungsformen bereitgestellt werden. Die Elemente von 2A-2D mit den gleichen Bezugszeichen (oder Namen) wie die Elemente von irgendeiner anderen Figur hierin können auf eine Art und Weise arbeiten oder funktionieren, die der an anderer Stelle hierin beschriebenen ähnlich ist, sind jedoch nicht darauf beschränkt.
  • 2A ist ein Blockdiagramm einer Ausführungsform eines Prozessors 200 mit einem oder mehreren Prozessorkernen 202A-202N, einem integrierten Speichercontroller 214 und einem integrierten Grafikprozessor 208. Der Prozessor 200 kann zusätzliche Kerne bis zu und einschließlich des zusätzlichen Kerns 202N umfassen, die durch die gestrichelten Kästen dargestellt sind. Jeder der Kerne 202A-202N umfasst eine oder mehrere interne Cache-Einheiten 204A-204N. In einer Ausführungsform hat jeder Kern auch auf eine oder mehrere gemeinsam genutzte Cache-Einheiten 206 Zugriff. Die internen Cache-Einheiten 204A-204N und die gemeinsam genutzten Cache-Einheiten 206 stellen eine Cache-Speicherhierarchie innerhalb des Prozessors 200 dar. Die Cache-Speicherhierarchie kann mindestens eine Ebene eines Befehls- und Daten-Caches in jedem Kern und eine oder mehrere Ebenen von mehrere Caches einer mittleren Ebene wie z. B. Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4) oder Caches anderer Ebenen umfassen, wobei die höchste Ebene des Caches vor dem externen Speicher als der LLC klassifiziert ist. In einigen Ausführungsformen hält eine Cache-Kohärenzlogik die Kohärenz zwischen den verschiedenen Cache-Einheiten 206 und 204A-204N aufrecht.
  • In einigen Ausführungsformen kann der Prozessor 200 auch einen Satz von einem oder mehreren Buscontrollereinheiten 216 und einen Systemagentenkern 210 umfassen. Der eine oder die mehreren Buscontrollereinheiten 216 verwalten einen Satz von Peripheriebussen wie etwa einen oder mehrere PCI- oder PCI-Express-Busse. Der Systemagentenkern 210 bietet Verwaltungsfunktionen für die verschiedenen Prozessorkomponenten. In einigen Ausführungsformen umfasst der Systemagentenkern 210 einen oder mehrere integrierte Speichercontroller 214, die den Zugriff auf verschiedene externe Speichervorrichtungen (nicht gezeigt) verwalten.
  • In einigen Ausführungsformen weisen ein oder mehrere der Kerne 202A-202N eine Unterstützung für simultane Mehrsträngigkeit [multi-threading] auf. In solchen Ausführungsformen umfasst der Systemagentenkern 210 Komponenten zum Koordinieren und Betreiben der Kerne 202A-202N während der Mehrstrangverarbeitung. Der Systemagentenkern 210 kann zusätzlich eine Leistungssteuereinheit (PCU) umfassen, die Logik und die Komponenten enthält, um den Leistungsaufnahmezustand der Kerne 202A-202N und des Grafikprozessors 208 zu regulieren.
  • In einigen Ausführungsformen umfasst der Prozessor 200 zusätzlich einen Grafikprozessor 208, um Grafikverarbeitungsoperationen auszuführen. In einigen Ausführungsformen ist der Grafikprozessor 208 mit dem Satz von gemeinsam genutzten Cache-Einheiten 206 und dem Systemagentenkern 210 einschließlich des einen oder der mehreren integrierte Speichercontroller 214 gekoppelt. In einigen Ausführungsformen umfasst der Systemagentenkern 210 einen Anzeigecontroller 211, um die Grafikprozessorausgabe an eine oder mehrere gekoppelte Anzeigen zu auszugeben. In einigen Ausführungsformen kann der Anzeigecontroller 211 zudem ein separates Modul sein, das mit dem Grafikprozessor über mindestens eine Zwischenverbindung gekoppelt ist, oder kann in den Grafikprozessor 208 integriert sein.
  • In einigen Ausführungsformen wird eine ringbasierte Zwischenverbindungseinheit 212 verwendet, um die internen Komponenten des Prozessors 200 zu koppeln. Jedoch kann eine alternative Zwischenverbindungseinheit wie beispielsweise eine Punkt-zu-Punkt-Zwischenverbindung, eine geschaltete Zwischenverbindung oder andere Techniken, einschließlich Techniken, die im Stand der Technik gut bekannt sind, verwendet werden. In einigen Ausführungsformen ist der Grafikprozessor 208 mit der Ringzwischenverbindung 212 über einen E/A-Link 213 gekoppelt.
  • Der beispielhafte E/A-Link 213 stellt mindestens eine von mehreren Arten von E/A-Zwischenverbindungen dar, darunter eine Baugruppen-E/A-Zwischenverbindung, die die Kommunikation zwischen verschiedenen Prozessorkomponenten ermöglicht, und ein eingebettetes Hochleistungs-Speichermodul 218 wie etwa ein eDRAM-Modul. In einigen Ausführungsformen verwenden jeder der Kerne 202A-202N und der Grafikprozessor 208 die eingebetteten Speichermodule 218 als gemeinsamen Cache letzter Ebene.
  • In einigen Ausführungsformen sind die Verarbeitungskerne 202A-202N homogene Kerne, die die gleiche Befehlssatzarchitektur ausführen. In einer weiteren Ausführungsform sind die Verarbeitungskerne 202A-202N heterogen in Bezug auf die Befehlssatzarchitektur (ISA), wobei einer oder mehrere der Kerne 202A-202N einen ersten Befehlssatz ausführen, während mindestens einer der anderen Kerne einen Teilsatz des ersten Befehlssatzes oder einen anderen Befehlssatz ausführt. In einer Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich der Mikroarchitektur heterogen, wobei ein oder mehrere Kerne mit einer relativ höheren Leistungsaufnahme mit einem oder mehreren Leistungskernen mit einer geringeren Leistungsaufnahme gekoppelt sind. In einer Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich der Rechenleistung heterogen. Zusätzlich kann der Prozessor 200 auf einem oder mehreren Chips oder als eine integrierte Ein-Chip-System-Schaltung (SOC-Schaltung) mit den dargestellten Komponenten zusätzlich zu den anderen Komponenten implementiert sein.
  • 2B ist ein Blockdiagramm von Hardwarelogik eines Grafikprozessorkerns 219 gemäß einigen hierin beschriebenen Ausführungsformen. Elemente von 2B, die die gleichen Bezugszeichen (oder Namen) wie die Elemente von irgendeiner anderen Figur hierin aufweisen, können auf eine beliebige Art und Weise, die mit der an einer anderen Stelle hierin beschriebenen vergleichbar ist, wirken oder funktionieren, ohne darauf beschränkt zu sein. Der Grafikprozessorkern 219, der gelegentlich als ein Kern-Slice bezeichnet wird, kann ein oder mehrere Grafikkerne innerhalb eines modularen Grafikprozessors sein. Der Grafikprozessorkern 219 ist beispielhaft für einen Grafikkern-Slice und ein hierin beschriebener Grafikprozessor kann basierend auf gewünschten Leistungsaufnahme- und Rechenleistungshüllkurven mehrere Grafikkern-Slices umfassen. Jeder Grafikprozessorkern 219 kann einen Block mit fester Funktion 230 umfassen, der mit mehreren Teilkernen 221A-221F gekoppelt ist, die auch als Unter-Slices bezeichnet werden, die modulare Blöcke von Allzwecklogik und Logik mit fester Funktion umfassen.
  • In einigen Ausführungsformen umfasst der Block mit fester Funktion 230 eine Geometrie-Pipeline/Pipeline mit fester Funktion 231, die von allen Teilkernen in dem Grafikprozessor 219 gemeinsam genutzt werden kann, beispielsweise in Grafikprozessorimplementierungen mit niedrigerer Rechenleistung und/oder mit niedrigerer Leistungsaufnahme. In verschiedenen Ausführungsformen umfasst die Geometrie-Pipeline/Pipeline mit fester Funktion 231 eine 3D-Pipeline mit fester Funktion (z. B. die 3D-Pipeline 312 wie in 3 und 4 nachstehend beschrieben), eine Video-Frontend-Einheit, einen Strangersteller und Strangabfertiger und einen Verwalter eines vereinheitlichten Rücklaufpuffers, der vereinheitlichte Rücklaufpuffer (wie den vereinheitlichten Rücklaufpuffer 418 von 4 wie nachstehend beschrieben) verwaltet.
  • In einer Ausführungsform umfasst der Block mit fester Funktion 230 zudem eine Grafik-SoC-Schnittstelle 232, einen Grafikmikrocontroller 233 und eine Medienpipeline 234. Die Grafik-SoC-Schnittstelle 232 stellt eine Schnittstelle zwischen dem Grafikprozessorkern 219 und anderen Prozessorkernen innerhalb einer integrierten Ein-Chip-System-Schaltung bereit. Der Grafikmikrocontroller 233 ist ein programmierbarer Unterprozessor, der konfigurierbar ist, um verschiedene Funktionen des Grafikprozessors 219 einschließlich Strangabfertigung, Planung und Vorwegnahme zu verwalten. Die Medienpipeline 234 (z. B. die Medienpipeline 316 von 3 und 4) umfasst Logik zum Unterstützen des Decodierens, Codierens, Vorverarbeitens und/oder Nachverarbeitens von Multimedia-Daten einschließlich Bild- und Videodaten. Die Medienpipeline 234 implementiert Medienoperationen über Anforderungen zum Berechnen oder Abtasten von Logik innerhalb der Teilkerne 221-221F.
  • In einer Ausführungsform ermöglicht es die SoC-Schnittstelle 232 dem Grafikprozessorkern 219, mit Allzweckanwendungsprozessorkernen (z. B. CPUs) und/oder anderen Komponenten innerhalb eines SoC einschließlich Speicherhierarchieelementen wie einem gemeinsam genutzten Cache-Speicher letzter Ebene, dem System-RAM und/oder eingebettetem DRAM auf dem Chip oder in der Baugruppe zu kommunizieren. Die SoC-Schnittstelle 232 kann auch eine Kommunikation mit Vorrichtungen mit fester Funktion innerhalb des SoC wie etwa Kamera-Bildgebungs-Pipelines ermöglichen und ermöglicht die Verwendung von globalen Speicheratomen, die zwischen dem Grafikprozessorkern 219 und CPUs innerhalb des SoC geteilt werden können, und/oder implementiert diese. Die SoC-Schnittstelle 232 kann auch Leistungsverwaltungssteuerungen für den Grafikprozessorkern 219 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Grafikprozessorkerns 219 und anderen Taktdomänen innerhalb des SoC ermöglichen. In einer Ausführungsform ermöglicht die SoC-Schnittstelle 232 den Empfang von Befehlspuffern von einem Befehls-Streamer und globalen Strangabfertiger, die dazu ausgelegt sind, Befehle und Anweisungen zu jedem von einem oder mehreren Grafikkernen innerhalb eines Grafikprozessors zu liefern. Die Befehle und Anweisungen können zu der Medienpipeline 234 gesendet werden, wenn Medienoperationen durchzuführen sind, oder zu einer Geometrie-Pipeline und Pipeline mit fester Funktion (z. B. der Geometrie-Pipeline und Pipeline mit fester Funktion 231, der Geometrie-Pipeline und Pipeline mit fester Funktion 237) gesendet werden, wenn Grafikverarbeitungsoperationen durchzuführen sind.
  • Der Grafikmikrocontroller 233 kann dazu ausgelegt sein, verschiedene Planungs- und Verwaltungsaufgaben für den Grafikprozessorkern 219 durchzuführen. In einer Ausführungsform kann der Grafikmikrocontroller 233 eine Grafik- und/oder Rechenarbeitslastplanung auf den verschiedenen parallelen Grafikmaschinen innerhalb der Ausführungseinheitsanordnungen (EU-Anordnungen) 222A-222F, 224A-224F innerhalb der Teilkerne 221A-221F durchführen. In diesem Planungsmodell kann Host-Software, die auf einem CPU-Kern eines SoC ausgeführt wird, das den Grafikprozessorkern 219 umfasst, Arbeitslasten eine von mehreren Grafikprozessor-Türklingeln übermitteln, wodurch eine Planungsoperation auf der geeigneten Grafikmaschine aufgerufen wird. Planungsoperationen umfassen ein Bestimmen, welche Arbeitslast als Nächstes ausgeführt werden soll, ein Übermitteln einer Arbeitslast an einen Befehls-Streamer, ein Vorwegnehmen vorhandener Arbeitslasten, die auf einer Maschine ausgeführt werden, ein Überwachen des Fortschritts einer Arbeitslast und ein Benachrichtigen von Host-Software, wenn eine Arbeitslast abgeschlossen ist. In einer Ausführungsform kann der Grafikmikrocontroller 233 auch Zustände mit niedriger Leistungsaufnahme oder Ruhezustände für den Grafikprozessorkern 219 unterstützen, wodurch dem Grafikprozessorkern 219 die Fähigkeit gegeben wird, Register innerhalb des Grafikprozessorkerns 219 über Übergänge zu Zuständen mit niedriger Leistungsaufnahme hinweg 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, und zwar bis zu N modulare Teilkerne. Für jeden Satz von N Teilkernen kann der Grafikprozessorkern 219 auch gemeinsam genutzte Funktionslogik 235, gemeinsam genutzten Speicher und/oder Cache-Speicher 236, eine Geometrie-Pipeline/Pipeline mit fester Funktion 237 sowie zusätzliche Logik mit fester Funktion 238 zum Beschleunigen verschiedener Grafik- und Rechenverarbeitungsoperationen umfassen. Die gemeinsam genutzte Funktionslogik 235 kann Logikeinheiten umfassen, die mit der gemeinsam genutzten Funktionslogik 420 von 4 (z. B. Abtaster-, Mathematik- und/oder Zwischenstrangkommunikations-Logik) verbunden sind und die von allen N Teilkernen innerhalb des Grafikprozessorkerns 219 gemeinsam genutzt werden können. Der gemeinsam genutzte und/oder Cache-Speicher 236 kann ein Cache letzter Ebene für den Satz von N Teilkernen 221A-221F innerhalb des Grafikprozessorkerns 219 sein und kann auch als gemeinsam genutzter Speicher dienen, der mehreren Teilkernen zugänglich ist. Die Geometrie-Pipeline/Pipeline mit fester Funktion 237 kann anstelle der Geometrie-Pipeline/Pipeline mit fester Funktion 231 innerhalb des Blocks mit fester Funktion 230 enthalten sein und kann die gleichen oder ähnliche Logikeinheiten umfassen.
  • In einer Ausführungsform umfasst der Grafikprozessorkern 219 eine zusätzliche Logik mit fester Funktion 238, die verschiedene Beschleunigungslogik mit fester Funktion zur Verwendung durch den Grafikprozessorkern 219 umfassen kann. In einer Ausführungsform umfasst die zusätzliche Logik mit fester Funktion 238 eine zusätzliche Geometrie-Pipeline zur Verwendung bei Nur-Positions-Schattierung. Bei Nur-Positions-Schattierung sind zwei Geometrie-Pipelines vorhanden, die vollständige Geometrie-Pipeline innerhalb der Geometrie-Pipeline/Pipeline mit fester Funktion 238, 231 und eine Ausschuss-Pipeline, die eine zusätzliche Geometrie-Pipeline ist, die innerhalb der zusätzlichen Logik mit fester Funktion 238 enthalten sein kann. In einer Ausführungsform ist die Ausschuss-Pipeline eine gekürzte Version der vollständigen Geometrie-Pipeline. Die vollständige Pipeline und die Ausschuss-Pipeline können verschiedene Instanzen der gleichen Anwendung ausführen, wobei jede Instanz einen separaten Kontext aufweist. Nur-Positions-Schattierung kann lange Ausschuss-Läufe von verworfenen Dreiecken verbergen, wodurch es in einigen Fällen ermöglicht wird, dass die Schattierung früher abgeschlossen wird. Zum Beispiel und in einer Ausführungsform kann die Ausschuss-Pipeline-Logik innerhalb der zusätzlichen Logik mit fester Funktion 238 Positionsschattierer parallel zu der Hauptanwendung ausführen und erzeugt im Allgemeinen kritische Ergebnisse schneller als die vollständige Pipeline, da die Ausschuss-Pipeline nur das Positionsattribut der Vertices abruft und schattiert, ohne eine Rasterung und ein Rendern der Pixel in den Frame-Speicher durchzuführen. Die Ausschuss-Pipeline kann die erzeugten kritischen Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke unabhängig davon zu berechnen, ob diese Dreiecke aussortiert werden. Die vollständige Pipeline (die in diesem Fall als eine Replay-Pipeline bezeichnet werden kann) kann die Sichtbarkeitsinformationen verbrauchen, um die aussortierten Dreiecke zu überspringen, um nur die sichtbaren Dreiecke zu schattieren, die letztlich an die Rasterungsphase übergeben werden.
  • In einer Ausführungsform kann die zusätzliche Logik mit fester Funktion 238 auch Beschleunigungslogik für maschinelles Lernen wie Matrixmultiplikationslogik mit fester Funktion für Implementierungen, die Optimierungen für Training und Inferenz für maschinelles Lernen beinhalten, umfassen.
  • Innerhalb jedes Grafikteilkerns 221A-221F ist ein Satz von Ausführungsbetriebsmitteln enthalten, die verwendet werden können, um Grafik-, Medien- und Rechenoperationen als Antwort auf Anforderungen von einer Grafik-Pipeline, einer Medienpipeline oder Schattiererprogrammen durchzuführen. Die Grafikteilkerne 221A-221F umfassen mehrere EU-Anordnungen 222A-222F, 224A-224F, Strangabfertigungs- und Zwischenstrangkommunikations-Logik (TD/IC-Logik) 223A-223F, einen 3D-Abtaster (z. B. Textur-Abtaster) 225A-225F, einen Medienabtaster 206A-206F, einen Schattiererprozessor 227A-227F und einen gemeinsam genutzten lokalen Speicher (SLM) 228A-228F. Die EU-Anordnungen 222A-222F, 224A-224F umfassen jeweils mehrere Ausführungseinheiten, die Universalgrafikverarbeitungseinheiten sind, die dazu in der Lage sind, logische Gleitkomma- und Ganzzahl-/Festkommaoperationen für eine Grafik-, Medien- oder Rechenoperation einschließlich Grafik-, Medien- oder Rechen-Schattiererprogrammen durchzuführen. Die TD/IC-Logik 223A-223F führt lokale Strangabfertigungs- und Strangsteuerungsoperationen für die Ausführungseinheiten innerhalb eines Teilkerns durch und ermöglicht eine Kommunikation zwischen Strängen, die auf den Ausführungseinheiten des Teilkerns ausgeführt werden. Der 3D-Abtaster 225A-225F kann Texturdaten oder andere auf 3D-Grafik bezogene Daten in einen Speicher lesen. Der 3D-Abtaster kann Texturdaten basierend auf einem konfigurierten Abtastzustand und dem Texturformat, das einer gegebenen Textur zugeordnet ist, unterschiedlich lesen. Der Medienabtaster 206A-206F kann ähnliche Leseoperationen basierend auf dem Typ und Format, der bzw. das Mediendaten zugeordnet ist, durchführen. In einer Ausführungsform kann jeder Grafikteilkern 221A-221F abwechselnd einen vereinheitlichten 3D- und Medienabtaster umfassen. Stränge, die auf den Ausführungseinheiten innerhalb jedes der Teilkerne 221A-221F ausgeführt werden, können den gemeinsam genutzten lokalen Speicher 228A-228F innerhalb jedes Teilkerns verwenden, um es zu ermöglichen, dass Stränge, die innerhalb einer Strang-Gruppe ausgeführt werden, unter Verwendung eines gemeinsamen Pools von chipinternem Speicher ausgeführt werden.
  • 2C zeigt eine Grafikverarbeitungseinheit (GPU) 239, die dedizierte Sätze von Grafikverarbeitungsbetriebsmitteln aufweist, die in Mehrkerngruppen 240A-240N angeordnet sind. Obwohl nur die Einzelheiten einer einzelnen Mehrkerngruppe 240A bereitgestellt sind, versteht es sich, dass die anderen Mehrkerngruppen 240B-240N mit denselben oder ähnlichen Sätzen von Grafikverarbeitungsbetriebsmitteln ausgestattet sein können.
  • Wie es dargestellt ist, kann eine Mehrkerngruppe 240A einen Satz von Grafikkernen 243, einen Satz von Tensorkernen 244 und einen Satz von Strahlverfolgungskernen 245 umfassen. Ein Planer/Abfertiger 241 plant die Grafikstränge zur Ausführung auf den verschiedenen Kernen 243, 244, 245 und fertigt sie ab. Ein Satz von Registersätzen 242 speichert Operandenwerte, die von den Kernen 243, 244, 245 beim Ausführen der Grafikstränge verwendet werden. Diese können beispielsweise 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 umfassen. In einer Ausführungsform sind die Kachelregister als kombinierte Sätze von Vektorregistern implementiert.
  • Ein oder mehrere kombinierte Ebene-1-Caches (L1-Caches) und gemeinsam genutzte Speichereinheiten 247 speichern Grafikdaten wie Texturdaten, Vertexdaten, Pixeldaten, Strahldaten, Begrenzungsvolumendaten usw. lokal in jeder Mehrkerngruppe 240A. Eine oder mehrere Textureinheiten 247 können auch verwendet werden, um Texturierungsoperationen wie Texturabbildung und -abtastung durchzuführen. Ein Ebene-2-Cache (L2-Cache) 253, der von allen oder einer Teilmenge der Multikerngruppen 240A-240N gemeinsam genutzt wird, speichert Grafikdaten und/oder Befehle für mehrere gleichzeitige Grafikstränge. Wie es dargestellt ist, kann der L2-Cache 253 über mehreren Mehrkerngruppen 240A-240N gemeinsam genutzt werden. Ein oder mehrere Speichercontroller 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.
  • Die Eingabe/Ausgabe-Schaltungsanordnung (E/A-Schaltungsanordnung) 250 koppelt die GPU 239 mit einem oder mehreren E/A-Vorrichtungen 252 wie beispielsweise Digitalsignalprozessoren (DSPs), Netzcontrollern oder Anwendereingabevorrichtungen. Eine chipinterne Zwischenverbindung kann verwendet werden, um die E/A-Vorrichtungen 252 mit der GPU 239 und dem Speicher 249 zu koppeln. Eine oder mehrere E/A-Speicherverwaltungseinheiten (IOMMUs) 251 der E/A-Schaltungsanordnung 250 koppeln die E/A-Vorrichtungen 252 direkt mit dem Systemspeicher 249. In einer Ausführungsform verwaltet die IOMMU 251 mehrere Sätze von Seitentabellen, um virtuelle Adressen physischen Adressen in dem Systemspeicher 249 zuzuordnen. In dieser Ausführungsform können die E/A-Vorrichtungen 252, CPU(s) 246 und GPU(s) 239 denselben virtuellen Adressraum gemeinsam nutzen.
  • In einer Implementierung unterstützt die IOMMU 251 Virtualisierung. In diesem Fall kann sie einen ersten Satz von Seitentabellen zum Zuordnen von virtuellen Gast-/Grafikadressen zu physischen Gast-/Grafikadressen und einen zweiten Satz von Seitentabellen zum Zuordnen von physischen Gast-/Grafikadressen zu physischen System-/Hostadressen (z. B. in dem Systemspeicher 249) verwalten. Die Basisadressen des ersten und zweiten Satzes von Seitentabellen können jeweils in Steuerregistern gespeichert und bei einem Kontextwechsel ausgetauscht werden (z. B. so, dass der neue Kontext mit Zugriff auf den relevanten Satz von Seitentabellen versehen wird). Obwohl dies in 2C nicht dargestellt ist, kann jede(r) der Kerne 243, 244, 245 und/oder Mehrkerngruppen 240A-240N Übersetzungs-Nachschlagepuffer (TLBs) umfassen, um Übersetzungen von Gast virtuell zu Gast physisch, Übersetzungen von Gast physisch zu Host physisch und Übersetzungen von Gast virtuell zu Host physisch zwischenzuspeichern.
  • In einer Ausführungsform sind die CPUs 246, GPUs 239 und E/A-Vorrichtungen 252 auf einem einzelnen Halbleiterchip und/oder einer Chipbaugruppe integriert. Der dargestellte Speicher 249 kann auf demselben Chip integriert sein oder über eine chipexterne Schnittstelle mit den Speichercontrollern 248 gekoppelt sein. In einer Implementierung umfasst der Speicher 249 einen GDDR6-Speicher, der denselben virtuellen Adressraum wie andere Speicher auf physischer Systemebene teilt, obwohl die zugrundeliegenden Prinzipien der Erfindung nicht auf diese spezifische Implementierung beschränkt sind.
  • In einer Ausführungsform umfassen die Tensorkerne 244 mehrere Ausführungseinheiten, die speziell zum Ausführen von Matrixoperationen ausgelegt sind, die die grundlegende Rechenoperation sind, die zum Ausführen von Operationen tiefen Lernens verwendet wird. Beispielsweise können simultane Matrixmultiplikationsoperationen für das Training und die Inferenz neuronaler Netze verwendet werden. Die Tensorkerne 244 können eine Matrixverarbeitung unter Verwendung einer Vielzahl von Operandengenauigkeiten durchführen, einschließlich Gleitkomma mit einfacher Genauigkeit (z. B. 32 Bit), Gleitkomma mit halber Genauigkeit (z. B. 16 Bit), Ganzzahlwörtern (16 Bit), Bytes (8 Bit) und halben Bytes (4 Bit). In einer Ausführungsform extrahiert eine Implementierung eines neuronalen Netzes Merkmale jeder gerenderten Szene, wobei möglicherweise Details aus mehreren Frames kombiniert werden, um ein qualitativ hochwertiges Endbild zu erstellen.
  • In Implementierungen tiefen Lernens können parallele Matrixmultiplikationsarbeiten zur Ausführung auf den Tensorkernen 244 geplant werden. Das Training neuronaler Netze erfordert insbesondere eine signifikante Anzahl von Matrixpunktproduktoperationen. Um eine Innenproduktformulierung einer N×N×N-MatrixMultiplikation zu verarbeiten, können die Tensorkerne 244 mindestens N Punktprodukt-Verarbeitungselemente aufweisen. Bevor die Matrixmultiplikation beginnt, wird eine gesamte Matrix in Kachelregister geladen und mindestens eine Spalte einer zweiten Matrix wird für N Zyklen in jedem Zyklus geladen. In jedem Zyklus werden N Punktprodukte verarbeitet.
  • Matrixelemente können abhängig von der speziellen Implementierung mit unterschiedlichen Genauigkeiten gespeichert werden, einschließlich 16-Bit-Wörtern, 8-Bit-Bytes (z. B. INT8) und 4-Bit-Halbbytes (z. B. INT4). Für die Tensorkerne 244 können unterschiedliche Genauigkeitsmodi spezifiziert werden, um sicherzustellen, dass die effizienteste Genauigkeit für verschiedene Arbeitslasten verwendet wird (wie z. B. Inferenz-Arbeitslasten, die eine Quantisierung auf Bytes und Halbbytes tolerieren können).
  • In einer Ausführungsform beschleunigen die Strahlverfolgungskerne 245 Strahlverfolgungsoperationen sowohl für Echtzeit-Strahlverfolgungs- als auch für Nicht-Echtzeit-Strahlverfolgungs-Implementierungen. Insbesondere umfassen die Strahlverfolgungskerne 245 eine Strahldurchquerungs-/Strahlschnitt-Schaltungsanordnung zum Durchführen eines Strahldurchquerung unter Verwendung von Begrenzungsvolumenhierarchien (BVHs) und zum Identifizieren von Schnittpunkten zwischen Strahlen und Primitiven, die in den BVH-Volumina eingeschlossen sind. Die Strahlverfolgungskerne 245 können auch eine Schaltungsanordnung zum Durchführen von Tiefentests und Aussortieren (z. B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) umfassen. In einer Implementierung führen die Strahlverfolgungskerne 245 Durchquerungs- und Schnittoperationen gemäß den hierin beschriebenen Bildentrauschungstechniken durch, von denen zumindest ein Teil auf den Tensorkernen 244 ausgeführt werden kann. In einer Ausführungsform implementieren die Tensorkerne 244 beispielsweise ein neuronales Netz für tiefes Lernen zum Durchführen der Entrauschung von durch die Strahlverfolgungskerne 245 erzeugten Frames. Die CPU(s) 246, die Grafikkerne 243 und/oder die Strahlverfolgungskerne 245 können jedoch auch die gesamte Entrauschung oder einen Teil davon und/oder Algorithmen für tiefes Lernen implementieren.
  • Zudem kann wie oben beschrieben ein verteilter Ansatz zum Entrauschen verwendet werden, bei dem sich die GPU 239 in einer Rechenvorrichtung befindet, die über ein Netz oder eine Hochgeschwindigkeitszwischenverbindung mit anderen Rechenvorrichtungen verbunden ist. In dieser Ausführungsform teilen sich die miteinander verbundenen Rechenvorrichtungen Lern-/Trainingsdaten für ein neuronales Netz, um die Geschwindigkeit zu verbessern, mit der das Gesamtsystem lernt, eine Entrauschung für verschiedene Arten von Frames und/oder verschiedene Grafikanwendungen durchzuführen.
  • In einer Ausführungsform verarbeiten die Strahlverfolgungskerne 245 alle BVH-Durchquerungs- und Strahl-Primitiv-Schnittstellen, wodurch vermieden wird, dass die Grafikkerne 243 mit Tausenden von Befehlen pro Strahl überlastet werden. In einer Ausführungsform umfasst jeder Strahlverfolgungskern 245 einen ersten Satz von spezialisierten Schaltungen zum Durchführen von Begrenzungsrahmentests (z. B. für Durchquerungsoperationen) und einen zweiten Satz von spezialisierten Schaltungen zum Durchführen der Strahl-Dreieck-Schnitt-Tests (z. B. schneidende Strahlen, die durchquert worden sind). Somit kann in einer Ausführungsform die Mehrkerngruppe 240A einfach eine Strahlsonde starten und die Strahlverfolgungskerne 245 führen unabhängig eine Strahldurchquerung und eine einen Strahlschnitt durch und geben Trefferdaten (z. B. einen Treffer, keinen Treffer, mehrere Treffer usw.) an den Strangkontext zurück. Die anderen Kerne 243, 244 werden zum Durchführen anderer Grafik- oder Berechnungsarbeit freigegeben, während die Strahlverfolgungskerne 245 die Durchquerungs- und Schnittoperationen durchführen.
  • In einer Ausführungsform umfasst jeder Strahlverfolgungskern 245 eine Durchquerungseinheit zum Durchführen von BVH-Testoperationen und eine Schnitteinheit, die Strahl-Primitiv-Schnitt-Tests durchführt. Die Schnitteinheit erzeugt eine Antwort „Treffer“, „Kein Treffer“ oder „Mehrfacher Treffer“, die sie an den entsprechenden Strang liefert. Während der Durchquerungs- und Schnittoperationen werden die Ausführungsbetriebsmittel der anderen Kerne (z. B. der Grafikkerne 243 und der Tensorkerne 244) freigegeben, um andere Formen der Grafikarbeit auszuführen.
  • In einer speziellen nachstehend beschriebenen Ausführungsform wird ein hybrider Ansatz zur Rasterung/Strahlverfolgung verwendet, bei dem die Arbeit unter den Grafikkernen 243 und den Strahlverfolgungskernen 245 verteilt wird.
  • In einer Ausführungsform umfassen die Strahlverfolgungskerne 245 (und/oder andere Kerne 243, 244) Hardwareunterstützung für einen Strahlverfolgungsbefehlssatz wie etwa Microsofts DirectX-Strahlverfolgung (DXR), der einen DispatchRays-Befehl sowie Strahlerzeugungs-, Nächster-Treffer-, Beliebiger-Treffer- und Fehltreffer-Schattierer, die die Zuweisung eindeutiger Sätze von Schattierern und Texturen für jedes Objekt ermöglichen. Eine weitere Strahlverfolgungsplattform, die von den Strahlverfolgungskernen 245, den Grafikkernen 243 und den Tensorkernen 244 unterstützt werden kann, ist Vulkan 1.1.85. Es ist jedoch zu beachten, dass die der Erfindung zugrundeliegenden Prinzipien nicht auf eine bestimmte Strahlverfolgungs-ISA beschränkt sind.
  • Im Allgemeinen können die verschiedenen Kerne 245, 244, 243 einen Strahlverfolgungsbefehlssatz unterstützen, der Befehle/Funktionen für Strahlerzeugung, nächsten Treffer, beliebigen Treffer, Strahl-Primitiv-Schnitt, pro-Primitiv und hierarchische Begrenzungsrahmenkonstruktion, Fehltreffer, Besuch und Ausnahmen umfasst. Insbesondere umfasst eine Ausführungsform Strahlverfolgungsbefehle, um die folgenden Funktionen auszuführen:
  • Strahlerzeugung - Strahlerzeugungsbefehle können für jedes Pixel, jede Abtastung oder andere anwenderdefinierte Arbeitszuweisungen ausgeführt werden.
  • Nächster Treffer - Ein Nächster-Treffer-Befehl kann ausgeführt werden, um den nächstgelegenen Schnittpunkt eines Strahls mit Primitiven innerhalb einer Szene zu lokalisieren.
  • Beliebiger Treffer - Ein Beliebiger-Treffer-Befehl ermittelt mehrere Schnittpunkte zwischen einem Strahl und Primitiven innerhalb einer Szene, um möglicherweise einen neuen nächstgelegenen Schnittpunkt zu identifizieren.
  • Schnitt - Ein Schnittbefehl führt einen Strahl-Primitiv-Schnitt-Test durch und gibt ein Ergebnis aus.
  • Pro-Primitiv-Begrenzungsrahmenkonstruktion - Dieser Befehl baut einen Begrenzungsrahmen um ein gegebenes Primitiv oder eine gegebene Gruppe von Primitiven (z. B. beim Aufbau einer neuen BVH- oder einer anderen Beschleunigungsdatenstruktur).
  • Fehltreffer - Gibt an, dass ein Strahl die gesamte Geometrie innerhalb einer Szene oder eines bestimmten Bereichs einer Szene verfehlt.
  • Besuch - Gibt die Kindervolumen an, die ein Strahl durchqueren wird.
  • Ausnahmen - Umfasst verschiedene Arten von Ausnahmebehandlern (z. B. aufgerufen für verschiedene Fehlerbedingungen).
  • 2D ist ein Blockdiagramm einer Allzweck-Grafikverarbeitungseinheit (GPGPU) 270, die gemäß den hierin beschriebenen Ausführungsformen als Grafikprozessor und/oder Rechenbeschleuniger ausgelegt werden kann. Die GPGPU 270 kann über einen oder mehrere System- und/oder Speicherbusse mit Host-Prozessoren (z. B. einer oder mehreren CPU(s) 246) und dem Speicher 271, 272 verbunden sein. In einer Ausführungsform ist der Speicher 271 ein Systemspeicher, der mit der einen oder den mehreren CPUs 246 geteilt werden kann, während der Speicher 272 ein Vorrichtungsspeicher ist, der der GPGPU 270 zugeordnet ist. In einer Ausführungsform sind Komponenten innerhalb der GPGPU 270 und der Vorrichtungsspeicher 272 kann auf Speicheradressen abgebildet werden, auf die die eine oder die mehreren CPUs 246 zugreifen können. Der Zugriff auf die Speicher 271 und 272 kann über einen Speichercontroller 268 ermöglicht werden. In einer Ausführungsform umfasst der Speichercontroller 268 einen internen Controller für direkten Speicherzugriff (DMA-Controller) 269 oder kann Logik aufweisen, um Operationen auszuführen, die andernfalls von einem DMA-Controller ausgeführt würden.
  • Die GPGPU 270 weist mehrere Cache-Speicher einschließlich eines L2-Cache 253, eines L1-Cache 254, eines Befehls-Cache 255 und eines gemeinsam genutzten Speichers 256, mindestens ein Teil dessen auch als Cache-Speicher partitioniert sein kann, auf. Die GPGPU 270 weist auch mehrere Recheneinheiten 260A-260N auf. Jede Recheneinheit 260A-260N umfasst einen Satz von Vektorregistern 261, Skalarregistern 262, Vektorlogikeinheiten 263 und Skalarlogikeinheiten 264. Die Recheneinheiten 260A-260N können auch einen lokalen gemeinsam genutzten Speicher 265 und einen Programmzähler 266 umfassen. Die Recheneinheiten 260A-260N können mit einem Konstant-Cache 267 gekoppelt werden, der zum Speichern konstanter Daten verwendet werden kann. Dies sind Daten, die sich während der Ausführung des Kernel- oder Schattiererprogramms, das auf der GPGPU 270 ausgeführt wird, nicht ändern. In einer Ausführungsform ist der Konstant-Cache 267 ein Skalardaten-Cache und zwischengespeicherte Daten können direkt in die Skalarregister 262 abgerufen werden.
  • Während des Betriebs können die eine oder die mehreren CPUs 246 Befehle in Register oder Speicher in der GPGPU 270 schreiben, die einem zugänglichen Adressraum zugeordnet wurden. Die Befehlsprozessoren 257 können die Befehle aus Registern oder dem Speicher lesen und bestimmen, wie diese Befehle innerhalb der GPGPU 270 verarbeitet werden. Ein Strangabfertiger 258 kann dann verwendet werden, um Stränge an die Recheneinheiten 260A-260N zu entsenden, um diese Befehle auszuführen. Jede Recheneinheit 260A-260N kann Stränge unabhängig von den anderen Recheneinheiten ausführen. Zudem kann jede Recheneinheit 260A-260N unabhängig für eine bedingte Berechnung konfiguriert werden und kann die Berechnungsergebnisse bedingt in den Speicher ausgeben. Die Befehlsprozessoren 257 können die eine oder die mehreren CPUs 246 unterbrechen, wenn die übermittelten Befehle abgeschlossen sind.
  • 3A-3C zeigen Blockdiagramme von zusätzlichen Grafikprozessoren und Rechenbeschleunigerarchitekturen, die von hierin beschriebenen Ausführungsformen bereitgestellt werden. Die Elemente von 3A-3C mit den gleichen Bezugszeichen (oder Namen) wie die Elemente von irgendeiner anderen Figur hierin können auf eine Art und Weise arbeiten oder funktionieren, die der an anderer Stelle hierin beschriebenen ähnlich ist, sind jedoch nicht darauf beschränkt
  • 3A ist ein Blockdiagramm eines Grafikprozessors 300, der eine diskrete Grafikverarbeitungseinheit sein kann oder ein Grafikprozessor sein kann, der in mehrere Prozessorkerne oder andere Halleitervorrichtungen wie etwa Speichervorrichtungen oder Netzvorrichtungen integriert ist, ohne darauf beschränkt zu sein. In einigen Ausführungsformen kommuniziert der Grafikprozessor über eine speicherabgebildete E/A-Schnittstelle mit Registern auf dem Grafikprozessor und über Befehle, die in dem Prozessorspeicher platziert sind. In einigen Ausführungsformen umfasst der Grafikprozessor 300 eine Speicherschnittstelle 314, um auf Speicher zuzugreifen. Die Speicherschnittstelle 314 kann eine Schnittstelle zu lokalem Speicher, einem oder mehreren internen Caches, einem oder mehreren gemeinsam genutzten externen Caches und/oder zu Systemspeicher sein.
  • In einigen Ausführungsformen umfasst der Grafikprozessor 300 zudem einen Anzeigecontroller 302, um Anzeigeausgabedaten an eine Anzeigevorrichtung 318 auszugeben. Der Anzeigecontroller 302 umfasst Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und die Komposition von mehreren Schichten von Video- oder Anwenderschnittstellenelementen. Die Anzeigevorrichtung 318 kann eine interne oder externe Anzeigevorrichtung sein. In einer Ausführungsform ist die Anzeigevorrichtung 318 eine am Kopf angebrachte Anzeigevorrichtung wie etwa eine Anzeigevorrichtung für virtuelle Realität (VR-Anzeigevorrichtung) oder eine Anzeigevorrichtung für erweiterte Realität (AR-Anzeigevorrichtung). In einigen Ausführungsform umfasst der Grafikprozessor 300 eine Video-Codec-Maschine 306 zum Codieren, Decodieren oder Transcodieren von Medien in, aus oder zwischen einen oder mehreren Mediencodierungsformaten, einschließlich, aber nicht beschränkt auf, Formate der Expertengruppe für bewegte Bilder (MPEG) wie MPEG-2, Fortgeschrittene Videocodierformate (AVC) wie H.264/MPEG-4 AVC, H.265/HEVC, Allianz für offene Medien (AOMedia) VP8, VP9 sowie Society of Motion Picture & Television Engineers (SMPTE) 421M/VC-1 und Formate der gemeinsamen Fotografieexpertengruppe (JPEG) wie JPEG und Motion JPEG (MJPEG).
  • In einigen Ausführungsformen umfasst der Grafikprozessor 300 eine Blockbildübertragungs-Maschine (BLIT-Maschine) 304, um zweidimensionale Rasterungs-Operationen (2D-Rasterungs-Operationen), die beispielsweise Bitgrenzen-Blockübertragungen umfassen, durchzuführen. Jedoch werden in einer Ausführungsform 2D-Grafikoperationen unter Verwendung einer oder mehrerer Komponenten der Grafikverarbeitungsmaschine (GPE) 310 durchgeführt. In einigen Ausführungsformen ist die GPE 310 eine Rechenmaschine zum Ausführen von Grafikoperationen, die dreidimensionale Grafikoperationen (3D-Grafikoperationen) und Medienoperationen umfassen.
  • In einigen Ausführungsformen umfasst die GPE 310 eine 3D-Pipeline 312 zum Durchführen von 3D-Operationen wie etwa dem Rendern dreidimensionaler Bilder und Szenen unter Verwendung von Verarbeitungsfunktionen, die mit 3D-Grundformen (z. B. Rechteck, Dreieck usw.) arbeiten. Die 3D-Pipeline 312 umfasst programmierbare und feste Funktionselemente, die verschiedene Aufgaben innerhalb des Elements erfüllen und/oder Ausführungsstränge zu einem 3D/Medien-Teilsystem 315 erzeugen. Obwohl die 3D-Pipeline 312 verwendet werden kann, um Medienoperationen auszuführen, umfasst eine Ausführungsform der GPE 310 auch eine Medienpipeline 316, die speziell verwendet wird, um Medienoperationen wie beispielsweise Videonachbearbeitung und Bildverbesserung durchzuführen.
  • In einigen Ausführungsformen umfasst die Medienpipeline 316 Logikeinheiten, die eine feste Funktion aufweisen oder programmierbar sind, zum Durchführen einer oder mehrerer spezialisierter Medienoperationen wie einer Videodecodierbeschleunigung, einer Videoentschachtelung und einer Videocodierbeschleunigung anstelle oder im Auftrag der Video-Codec-Maschine 306. In einigen Ausführungsformen umfasst die Medienpipeline 316 zusätzlich eine Strangerzeugungseinheit zum Erzeugen von Strängen für die Ausführung auf dem 3D/Medien-Teilsystem 315. Die erzeugten Stränge führen Berechnungen für die Medienoperationen auf einer oder mehreren Grafikausführungseinheiten in dem 3D/Medien-Teilsystem 315 aus.
  • In einigen Ausführungsformen umfasst das 3D/Medien-Teilsystem 315 eine Logik zum Ausführen von Strängen, die von der 3D-Pipeline 312 und der Medienpipeline 316 erzeugt werden. In einer Ausführungsform senden die Pipelines Strangausführungsanforderungen an das 3D/Medien-Teilsystem 315, das eine Strangabfertigungslogik zum Zuteilen und Entsenden der verschiedenen Anforderungen an verfügbare Strangausführungsbetriebsmittel umfasst. Die Ausführungsbetriebsmittel umfassen eine Anordnung von Grafikausführungseinheiten, um die 3D- und Medien-Stränge zu verarbeiten. In einigen Ausführungsformen umfasst das 3D/Medien-Teilsystem 315 einen oder mehrere interne Caches für Strangbefehle und -daten. In einigen Ausführungsformen umfasst das Teilsystem zudem einen gemeinsamen Speicher, der Register und adressierbaren Speicher umfasst, um Daten zwischen Strängen zu teilen und Ausgabedaten zu speichern.
  • 3B zeigt einen Grafikprozessor 320 mit einer gekachelten Architektur gemäß den hierin beschriebenen Ausführungsformen. In einer Ausführungsform umfasst der Grafikprozessor 320 einen Grafikverarbeitungsmaschinen-Cluster 322 mit mehreren Instanzen der Grafikverarbeitungsmaschine 310 von 3A innerhalb einer Grafikmaschinenkachel 310A-310D. Jede Grafikmaschinenkachel 310A-310D kann über einen Satz von Kachelzwischenverbindungen 323A-323F angeschlossen sein. Jede Grafikmaschinenkachel 310A-310D kann auch über Speicherzwischenverbindungen 325A-325D mit einem Speichermodul oder einer Speichervorrichtung 326A-326D verbunden sein. Die Speichervorrichtungen 326A-326D können eine beliebige Grafikspeichertechnologie verwenden. Beispielsweise können die Speichervorrichtungen 326A-326D ein Speicher mit doppelter Datenrate (GDDR-Speicher) sein. Die Speichervorrichtungen 326A-326D sind in einer Ausführungsform Speichermodule mit hoher Bandbreite (HBM-Module), die mit ihrer jeweiligen Grafikmaschinenkachel 310A-310D gemeinsam auf einem Chip sein können. In einer Ausführungsform sind die Speichervorrichtungen 326A-326D gestapelte Speichervorrichtungen, die auf ihrer jeweiligen Grafikmaschinenkachel 310A-310D gestapelt sein können. In einer Ausführungsform befinden sich jede Grafikmaschinenkachel 310A-310D und der zugehörige Speicher 326A-326D auf getrennten Chiplets, die mit einem Basis-Chip oder Basissubstrat verbunden sind, wie es in 11B-11D ausführlicher beschrieben ist.
  • Der Grafikverarbeitungsmaschinen-Cluster 322 kann eine Verbindung mit einer chipinternen oder baugruppeninternen Fabric-Zwischenverbindung 324 herstellen. Die Fabric-Zwischenverbindung 324 kann die Kommunikation zwischen den Grafikmaschinenkacheln 310A-310D und Komponenten wie dem Video-Codec 306 und einer oder mehreren Kopiermaschinen 304 ermöglichen. Die Kopiermaschinen 304 können verwendet werden, um Daten aus den, in die und zwischen den Speichervorrichtungen 326A-326D und Speicher außerhalb des Grafikprozessors 320 (z. B. Systemspeicher) zu verschieben. Die Fabric-Zwischenverbindung 324 kann auch verwendet werden, um die Grafikmaschinenkacheln 310A-310D miteinander zu verbinden. Der Grafikprozessor 320 kann optional einen Anzeigecontroller 302 umfassen, um eine Verbindung mit einer externen Anzeigevorrichtung 318 zu ermöglichen. Der Grafikprozessor kann auch als Grafik- oder Rechenbeschleuniger konfiguriert sein. In der Beschleunigerkonfiguration können der Anzeigecontroller 302 und die Anzeigevorrichtung 318 entfallen.
  • Der Grafikprozessor 320 kann über eine Hostschnittstelle 328 eine Verbindung zu einem Hostsystem herstellen. Die Hostschnittstelle 328 kann die Kommunikation zwischen dem Grafikprozessor 320, dem Systemspeicher und/oder anderen Systemkomponenten ermöglichen. Die Hostschnittstelle 328 kann beispielsweise ein PCI-Express-Bus oder eine andere Art von Hostsystemschnittstelle sein.
  • 3C zeigt einen Rechenbeschleuniger 330 gemäß den hierin beschriebenen Ausführungsformen. Der Rechenbeschleuniger 330 kann architektonische Ähnlichkeiten mit dem Grafikprozessor 320 von 3B aufweisen und ist für die Rechenbeschleunigung optimiert. Ein Rechenmaschinen-Cluster 332 kann einen Satz von Rechenmaschinenkacheln 340A-340D umfassen, die eine Ausführungslogik aufweisen, die für parallele oder vektorbasierte Allzweck-Rechenoperationen optimiert ist. In einigen Ausführungsformen umfassen die Rechenmaschinenkacheln 340A-340D keine Grafikverarbeitungslogik mit fester Funktion, obwohl in einer Ausführungsform eine oder mehrere der Rechenmaschinenkacheln 340A-340D eine Logik zum Durchführen einer Medienbeschleunigung aufweisen können. Die Rechenmaschinenkacheln 340A-340D können über Speicherzwischenverbindungen 325A-325D eine Verbindung zu dem Speicher 326A-326D herstellen. Der Speicher 326A-326D und die Speicherzwischenverbindungen 325A-325D können eine ähnliche Technologie wie in dem Grafikprozessor 320 aufweisen oder anders sein. Die Grafik-Rechenmaschinenkacheln 340A-340D können auch über einen Satz von Kachelzwischenverbindungen 323A-323F miteinander verbunden sein und können mit einer Fabric-Zwischenverbindung 324 verbunden sein und/oder durch diese miteinander verbunden sein. In einer Ausführungsform umfasst der Rechenbeschleuniger 330 einen großen L3-Cache 336, der als vorrichtungsweiter Cache ausgelegt sein kann. Der Rechenbeschleuniger 330 kann auf ähnliche Weise wie der Grafikprozessor 320 von 3B auch über eine Hostschnittstelle 328 eine Verbindung zu einem Hostprozessor und Speicher herstellen.
  • Grafikverarbeitungsmaschine
  • 4 ist ein Blockdiagramm einer Grafikverarbeitungsmaschine 410 für einen Grafikprozessor gemäß einigen Ausführungsformen. In einer Ausführungsform ist die Grafikverarbeitungsmaschine (GPE) 410 eine Version der GPE 310, die in 3A gezeigt ist (sentence missing - 27/-7). Elemente von 4 mit den gleichen Bezugszeichen (oder Namen) wie die Elemente irgendeiner anderen Figur hierin können auf eine Art und Weise arbeiten oder funktionieren, die der an anderer Stelle hierin beschriebenen ähnlich ist, sind jedoch nicht darauf beschränkt. Beispielsweise sind die 3D-Pipeline 312 und die Medienpipeline 316 von 3A dargestellt. Die Medienpipeline 316 ist in einigen Ausführungsformen der GPE 410 optional und ist vielleicht nicht explizit in der GPE 410 enthalten. Beispielsweise und in mindestens einer Ausführungsform ist ein separater Medien- und/oder Bildprozessor mit der GPE 410 gekoppelt.
  • In einigen Ausführungsformen ist die GPE 410 mit einem Befehls-Streamer 403 gekoppelt, der einen Befehlsstrom an die 3D-Pipeline 312 und/oder die Medienpipelines 316 liefert. In einigen Ausführungsformen ist der Befehls-Streamer 403 mit einem Speicher, der ein Systemspeicher sein kann, oder einem oder mehreren des internen Cache-Speichers und des gemeinsam genutzten Cache-Speichers gekoppelt. In einigen Ausführungsformen empfängt der Befehls-Streamer 403 Befehle von dem Speicher und sendet die Befehle an die 3D-Pipeline 312 und/oder die Medienpipeline 316. Die Befehle sind Anweisungen, die aus einem Ringpuffer abgerufen werden, der Befehle für die 3D-Pipeline 312 und die Medienpipeline 316 speichert. In einer Ausführungsform kann der Ringpuffer zusätzlich Stapelbefehlspuffer umfassen, die Stapel von mehreren Befehlen speichern. Die Befehle für die 3D-Pipeline 312 können auch Verweise auf Daten enthalten, die im Speicher gespeichert sind, wie beispielsweise Vertex- und Geometriedaten für die 3D-Pipeline 312 und/oder Bilddaten und Speicherobjekte für die Medienpipeline 316, ohne darauf beschränkt zu sein. Die 3D-Pipeline 312 und die Medienpipeline 316 verarbeiten die Befehle und Daten durch Ausführen von Operationen über Logik in den jeweiligen Pipelines oder durch Versenden eines oder mehrerer Ausführungsstränge an eine Grafikkernanordnung 414. In einer Ausführungsform umfasst die Grafikkernanordnung 414 einen oder mehrere Blöcke von Grafikkernen (z. B. Grafikkern(e) 415A, Grafikkern(e) 415B), wobei jeder Block einen oder mehrere Grafikkerne umfasst. Jeder Grafikkern umfasst einen Satz von Grafikausführungsbetriebsmitteln, die allgemeine und grafikspezifische Ausführungslogik zum Ausführen von Grafik- und Rechenoperationen sowie Texturverarbeitung mit festen Funktionen und/oder maschinelles Lernen und Beschleunigungslogik für künstliche Intelligenz umfassen.
  • In verschiedenen Ausführungsformen umfasst die 3D-Pipeline 312 möglicherweise eine Logik mit fester Funktion oder eine programmierbare Logik zum Verarbeiten eines oder mehrerer Schattiererprogramme wie z. B. Vertexschattierer, Geometrieschattierer, Pixelschattierer, Fragmentschattierer, Rechenschattierer oder andere Schattiererprogramme, indem sie die Befehle verarbeitet und Ausführungsstränge an die Grafikkernanordnung 414 absendet. Die Grafikkernanordnung 414 stellt einen vereinheitlichten Block von Ausführungsbetriebsmitteln für die Verarbeitung dieser Schattiererprogramme bereit. Die Mehrzweckausführungslogik (z. B. Ausführungseinheiten) innerhalb des einen oder der mehreren Grafikkerne 415A-414B der Grafikkernanordnung 414 umfasst die Unterstützung verschiedener 3D-API-Schattierer-Sprachen und kann mehrere gleichzeitige Ausführungsstränge, die mehreren Schattierern zugeordnet sind, ausführen.
  • In einigen Ausführungsformen umfasst die Grafikkernanordnung 414 auch eine Ausführungslogik zum Ausführen von Medienfunktionen wie z. B. Video- und/oder Bildverarbeitung. In einer Ausführungsform umfassen die Ausführungseinheiten zusätzlich eine Allzwecklogik, die programmierbar ist, um zusätzlich zu Grafikverarbeitungsoperationen parallele Allzweck-Rechenoperationen durchzuführen. Die Allzwecklogik kann Verarbeitungsoperationen parallel oder in Verbindung mit der Allzwecklogik innerhalb des Prozessorkerns (der Prozessorkerne) 107 von 1 oder des Kerns 202A-202N wie in 2A ausführen.
  • Ausgabedaten, die von Strängen erzeugt werden, die auf der Grafikkernanordnung 414 ausgeführt werden, können Daten an einen Speicher in einem vereinheitlichten Rückgabepuffer (URB) 418 ausgeben. Der URB 418 kann Daten für mehrere Stränge speichern. In einigen Ausführungsformen kann der URB 418 verwendet werden, um Daten zwischen verschiedenen auf der Grafikkernanordnung 414 ausgeführten Strängen zu senden. In einigen Ausführungsformen kann der URB 418 zusätzlich zur Synchronisation zwischen Strängen auf der Grafikkernanordnung und für die Logik fester Funktionen innerhalb der gemeinsam genutzten Funktionslogik 420 verwendet werden.
  • In einigen Ausführungsformen ist die Grafikkernanordnung 414 basierend auf der gewünschten Leistungsaufnahme und Rechenleistung der GPE 410 so skalierbar, dass die Anordnung eine variable Anzahl von Grafikkernen enthält, die jeweils eine variable Anzahl von Ausführungseinheiten aufweisen. Die Ausführungsbetriebsmittel sind in einer Ausführungsform dynamisch skalierbar, so dass Ausführungsbetriebsmittel nach Bedarf aktiviert oder deaktiviert werden können.
  • Die Grafikkernanordnung 414 ist mit einer gemeinsam genutzten Funktionslogik 420 gekoppelt, die mehrere Betriebsmittel enthält, die unter den Grafikkernen in der Grafikkernanordnung gemeinsam genutzt werden. Die gemeinsam genutzten Funktionen innerhalb der gemeinsam genutzten Funktionslogik 420 sind Hardwarelogikeinheiten, die für die Grafikkernanordnung 414 eine spezialisierte Zusatzfunktionalität bereitstellen. In verschiedenen Ausführungsformen umfasst die gemeinsam genutzte Funktionslogik 420 einen Abtaster 421, Mathematik 422 und eine Zwischenstrangkommunikations-Logik (ITC-Logik) 423, ist jedoch nicht darauf beschränkt. Zusätzlich implementieren einige Ausführungsformen einen oder mehrere Caches 425 in der gemeinsam genutzten Funktionslogik 420.
  • Eine gemeinsam genutzte Funktion wird mindestens dann implementiert, wenn der Bedarf an einer bestimmten spezialisierten Funktion für die Aufnahme in die Grafikkernanordnung 414 unzureichend ist. Stattdessen wird eine einzelne Instantiierung der spezialisierten Funktion als eigenständige Einheit in der gemeinsam genutzten Funktionslogik 420 implementiert und wird von den Ausführungsbetriebsmitteln innerhalb der Grafikkernanordnung 414 gemeinsam genutzt. Der genaue Satz von Funktionen, die unter der Grafikkernanordnung 414 gemeinsam genutzt werden und in der Grafikkernanordnung 414 enthalten sind, variiert zwischen Ausführungsformen. In einigen Ausführungsformen können bestimmte gemeinsam genutzte Funktionen in der gemeinsam genutzten Funktionslogik 420, die in großem Umfang von der Grafikkernanordnung 414 verwendet werden, in der gemeinsam genutzten Funktionslogik 416 in der Grafikkernanordnung 414 enthalten sein. In verschiedenen Ausführungsformen kann die gemeinsam genutzte Funktionslogik 416 in der Grafikkernanordnung 414 einen Teil oder die gesamte Logik innerhalb der gemeinsam genutzten Funktionslogik 420 umfassen. In einer Ausführungsform können alle Logikelemente innerhalb der gemeinsam genutzten Funktionslogik 420 innerhalb der gemeinsam genutzten Funktionslogik 416 der Grafikkernanordnung 414 dupliziert sein. In einer Ausführungsform ist die gemeinsam genutzte Funktionslogik 420 zugunsten der gemeinsam genutzten Funktionslogik 416 innerhalb der Grafikkernanordnung 414 weggelassen.
  • Ausführungseinheiten
  • 5A-5B zeigen eine Strangausführungslogik 500, die eine Anordnung von Verarbeitungselementen aufweist, die in einem Grafikprozessorkern eingesetzt werden, gemäß hierin beschriebenen Ausführungsformen. Elemente von 5A-5B, die die gleichen Bezugszeichen (oder Namen) wie die Elemente von irgendeiner anderen Figur hierin aufweisen, können auf eine beliebige Art und Weise, die mit der an einer anderen Stelle hierin beschriebenen vergleichbar ist, wirken oder funktionieren, ohne darauf beschränkt zu sein. 5A-5B zeigen eine Übersicht über die Strangausführungslogik 500, die eine Variante der Hardwarelogik umfassen kann, die mit jedem Teilkern 221A-221F von 2B veranschaulicht ist. 5A ist repräsentativ für eine Ausführungseinheit innerhalb eines Allzweck-Grafikprozessors, während 5B repräsentativ für eine Ausführungseinheit ist, die innerhalb eines Rechenbeschleunigers verwendet werden kann.
  • Wie es in 5A dargestellt ist, umfasst die Strangausführungslogik 500 in einigen Ausführungsformen einen Schattiererprozessor 502, einen Strangabfertiger 504, einen Befehls-Cache 506, eine skalierbare Ausführungseinheitsanordnung, die mehrere Ausführungseinheiten 508A-508N umfasst, einen Abtaster 510, lokalen Speicher 511, einen Daten-Cache 512 und einen Daten-Port 514. In einer Ausführungsform kann die skalierbare Ausführungseinheitsanordnung dynamisch skalieren, indem eine oder mehrere Ausführungseinheiten (z. B. eine 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 enthaltenen Komponenten über eine Zwischenverbindungs-Fabric, die mit jeder der Komponenten verbunden ist, miteinander verbunden. In einigen Ausführungsformen umfasst die Strangausführungslogik 500 eine oder mehrere Verbindungen zu Speicher wie Systemspeicher oder Cache-Speicher durch den Befehls-Cache 506, den Daten-Port 514, den Abtaster 510 und/oder die Ausführungseinheiten 508A-508N. In einigen Ausführungsformen ist jede Ausführungseinheit (z. B. 508A) eine eigenständige programmierbare Universalrecheneinheit, die dazu in der Lage ist, mehrere gleichzeitige Hardwarestränge auszuführen und zugleich für jeden Strang mehrere Datenelemente parallel zu verarbeiten. In verschiedenen Ausführungsformen ist die Anordnung von Ausführungseinheiten 508A-508N so skalierbar, dass sie eine beliebige Anzahl von einzelnen Ausführungseinheiten umfasst.
  • In einigen Ausführungsformen werden die Ausführungseinheiten 508A-508N hauptsächlich verwendet, um Schattiererprogramme auszuführen. Ein Schattiererprozessor 502 kann die verschiedenen Schattiererprogramme verarbeiten und Ausführungsstränge, die den Schattiererprogrammen zugeordnet sind, über einen Strangabfertiger 504 abfertigen. In einer Ausführungsform umfasst der Strangabfertiger Logik zum Vermitteln von Stranginitiierungsanforderungen von den Grafik- und Medien-Pipelines und Instanziieren der angeforderten Stränge auf einer oder mehreren Ausführungseinheiten in den Ausführungseinheiten 508A-508N. Zum Beispiel kann eine Geometrie-Pipeline Vertex-, Tessellations- oder Geometrieschattierer zum Verarbeiten an die Strangausführungslogik senden. In einigen Ausführungsformen kann der Strangabfertiger 504 auch Laufzeit-Strangerstellungsanforderungen aus den ausgeführten Schattiererprogrammen verarbeiten.
  • In einigen Ausführungsformen unterstützen die Ausführungseinheiten 508A-508N einen Befehlssatz, der native Unterstützung für viele Standard-3D-Grafik-Schattiererbefehle umfasst, so dass Schattiererprogramme aus Grafikbibliotheken (z. B. Direct 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen eine Vertex- und Geometrieverarbeitung (z. B. Vertexprogramme, Geometrieprogramme, Vertexschattierer), Pixelverarbeitung (z. B. Pixelschattierer, Fragmentschattierer) und Allzweckverarbeitung (z. B. Rechen- und Medienschattierer). Jede der Ausführungseinheiten 508A-508N ist zur Ausführung mit Anwendung eines Befehls auf mehrere Datenströme (SIMD-Ausführung) mit mehrfacher Ausgabe in der Lage und ein mehrsträngiger Betrieb ermöglicht eine effiziente Ausführungsumgebung angesichts von Speicherzugriffen mit höherer Latenz. Jeder Hardware-Strang innerhalb jeder Ausführungseinheit weist einen dedizierten Registersatz mit hoher Bandbreite und einen zugehörigen unabhängigen Strangzustand auf. Die Ausführung erfolgt durch mehrfaches Ausgeben je Takt an Pipelines, die zu Ganzzahlgleitkommaoperationen mit einfacher und doppelter Genauigkeit, SIMD-Verzweigungsfähigkeit, logischen Operationen, transzendenten Operationen und sonstigen Operationen in der Lage sind. Während des Wartens auf Daten aus Speicher oder von einer der gemeinsam genutzten Funktionen veranlasst eine Abhängigkeitslogik innerhalb der Ausführungseinheiten 508A-508N, dass ein wartender Strang im Ruhezustand bleibt, bis die angeforderten Daten zurückgegeben worden sind. Während sich der wartende Strang im Ruhezustand befindet, können Hardwarebetriebsmittel für die Verarbeitung von anderen Strängen verwendet werden. Zum Beispiel kann eine Ausführungseinheit während einer Verzögerung im Zusammenhang mit einer Vertexschattiereroperation Operationen für einen Pixelschattierer, einen Fragmentschattierer oder einen anderen Typ von Schattiererprogramm einschließlich eines anderen Vertexschattierers durchführen. Verschiedene Ausführungsformen können für die Verwendung der Ausführung unter Verwendung von Einzelbefehl-Mehrstrang (SIMT) als Alternative zur Verwendung von SIMD oder zusätzlich zur Verwendung von SIMD gelten. Die Bezugnahme auf einen SIMD-Kern oder eine SIMD-Operation kann auch für SIMT oder für SIMD in Kombination mit SIMT gelten.
  • Jede Ausführungseinheit in den Ausführungseinheiten 508A-508N arbeitet mit Arrays von Datenelementen. Die Anzahl von Datenelementen ist die „Ausführungsgröße“ oder die Anzahl von Kanälen für den Befehl. Ein Ausführungskanal ist eine logische Ausführungseinheit für Datenelementzugriff, Maskierung und Flusssteuerung innerhalb von Befehlen. Die Anzahl von Kanälen kann von der Anzahl von arithmetischlogischen Einheiten (ALUs) oder Gleitkommaeinheiten (FPUs) für einen bestimmten Grafikprozessor unabhängig sein. In einigen Ausführungsformen unterstützen die Ausführungseinheiten 508A-508N Ganzzahl- und Gleitkommadatentypen.
  • Der Ausführungseinheits-Befehlssatz umfasst SIMD-Befehle. Die verschiedenen Datenelemente können als gepackte Datentypen in einem Register gespeichert sein und die Ausführungseinheit wird die verschiedenen Elemente auf der Basis der Datengröße der Elemente verarbeiten. Beispielsweise sind beim Arbeiten mit einem 256 Bit breiten Vektor die 256 Bit des Vektors in einem Register gespeichert und die Ausführungseinheit arbeitet mit dem Vektor als vier separaten 54-Bit-gepackten Datenelementen (Datenelementen der Größe Vierfachwort (QW)), acht separaten 32-Bit-gepackten Datenelementen (Datenelementen der Größe Doppelwort (DW)), sechzehn separaten 16-Bit-gepackten Datenelementen (Datenelementen der Größe Wort (W)) oder zweiunddreißig separaten 8-Bit-Datenelementen (Datenelementen der Größe Byte (B)). Allerdings sind andere Vektorbreiten und Registergrößen möglich.
  • In einer Ausführungsform können eine oder mehrere Ausführungseinheiten zu einer zusammengeschlossenen Ausführungseinheit 509A-509N kombiniert werden, die eine Strangsteuerlogik (507A-507N) aufweist, die den zusammengeschlossenen EUs gemein ist. Mehrere EUs können in einer EU-Gruppe zusammengeschlossen sein. Jede EU in der zusammengeschlossenen EU-Gruppe kann dazu ausgelegt sein, einen separaten SIMD-Hardware-Strang auszuführen. Die Anzahl von EUs in einer zusammengeschlossenen EU-Gruppe kann gemäß Ausführungsformen variieren. Außerdem können je EU verschiedene SIMD-Breiten durchgeführt werden, einschließlich, ohne darauf beschränkt zu sein, SIMD8, SIMD16 und SIMD32. Jede zusammengeschlossene Grafikausführungseinheit 509A-509N umfasst mindestens zwei Ausführungseinheiten. Zum Beispiel umfasst die zusammengeschlossene Ausführungseinheit 509A eine erste EU 508A, eine zweite EU 508B und die Strangsteuerlogik 507A, die der ersten EU 508A und der zweiten EU 508B gemein ist. Die Strangsteuerlogik 507A steuert Stränge, die auf der zusammengeschlossenen Grafikausführungseinheit 509A ausgeführt werden, wodurch es ermöglicht wird, dass jede EU innerhalb der zusammengeschlossenen Ausführungseinheiten 509A-509N unter Verwendung eines gemeinsamen Befehlszeigerregisters ausgeführt wird.
  • Ein oder mehrere interne Befehls-Caches (z. B. 506) sind in der Strangausführungslogik 500 enthalten, um Strangbefehle für die Ausführungseinheiten zwischenzuspeichern. In einigen Ausführungsformen sind ein oder mehrere Daten-Caches (z. B. 512) enthalten, um Strangdaten während der Strangausführung zwischenzuspeichern. Stränge, die auf der Ausführungslogik 500 ausgeführt werden, können explizit verwaltete Daten auch in dem gemeinsam genutzten lokalen Speicher 511 speichern. In einigen Ausführungsformen ist ein Abtaster 510 enthalten, um eine Texturabtastung für 3D-Operationen und eine Medienabtastung für Medienoperationen bereitzustellen. In einigen Ausführungsformen umfasst der Abtaster 510 eine spezielle Textur- oder Medienabtastfunktionalität, um Textur- oder Mediendaten während des Abtastverfahrens zu verarbeiten, bevor er die abgetasteten Daten an eine Ausführungseinheit liefert.
  • Während der Ausführung senden die Grafik- und Medien-Pipelines Stranginitiierungsanforderungen über Strangerstellungs- und Strangabfertigungslogik an die Strangausführungslogik 500. Sobald eine Gruppe von geometrischen Objekten verarbeitet und in Pixeldaten gerastert wurde, wird Pixelprozessorlogik (z. B. Pixelschattiererlogik, Fragmentschattiererlogik usw.) innerhalb des Schattiererprozessors 502 aufgerufen, um Ausgabeinformationen weiter zu berechnen und zu veranlassen, dass Ergebnisse in Ausgabeoberflächen (z. B. Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.) geschrieben werden. In einigen Ausführungsformen berechnet ein Pixelschattierer oder Fragmentschattierer die Werte der verschiedenen Vertexattribute, die über das gerasterte Objekt hinweg zu interpolieren sind. In einigen Ausführungsformen führt Pixelprozessorlogik innerhalb des Schattiererprozessors 502 dann ein von einer Anwendungsprogrammierschnittstelle (API) geliefertes Pixel- oder Fragmentschattiererprogramm aus. Zum Ausführen des Schattiererprogramms sendet der Schattiererprozessor 502 über den Strangabfertiger 504 Stränge an eine Ausführungseinheit (z. B. 508A). In einigen Ausführungsformen verwendet der Schattiererprozessor 502 Texturabtastlogik in dem Abtaster 510, um auf Texturdaten in Texturkarten zuzugreifen, die im Speicher gespeichert sind. Arithmetische Operationen an den Texturdaten und die eingegebenen Geometriedaten berechnen Pixelfarbdaten für jedes geometrische Fragment oder schließen einen oder mehrere Pixel von einer Weiterverarbeitung aus.
  • In einigen Ausführungsformen bietet der Daten-Port 514 einen Speicherzugriffsmechanismus für die Strangausführungslogik 500 zum Ausgeben von verarbeiteten Daten an Speicher zur Weiterverarbeitung auf einer Grafikprozessorausgabe-Pipeline. In einigen Ausführungsformen umfasst der Daten-Port 514 einen oder mehrere Cache-Speicher (z. B. Daten-Cache 512) oder koppelt mit diesen, um Daten für einen Speicherzugriff über den Daten-Port zwischenzuspeichern.
  • In einer Ausführungsform kann die Ausführungslogik 500 auch einen Strahlverfolger 505 enthalten, der eine Strahlverfolgungsbeschleunigungsfunktionalität bereitstellen kann. Der Strahlverfolger 505 kann einen Strahlverfolgungsbefehlssatz unterstützen, der Befehle/Funktionen zur Strahlerzeugung enthält. Der Strahlverfolgungsbefehlssatz kann dem Strahlverfolgungsbefehlssatz, der von den Strahlverfolgungskernen 245 in 2C unterstützt wird, ähnlich sein oder sich von diesem unterscheiden
  • 5B zeigt beispielhafte interne Einzelheiten einer Ausführungseinheit 508 gemäß Ausführungsformen. Eine Grafikausführungseinheit 508 eine Befehlsabrufeinheit 537, eine Allgemeinregistersatz-Anordnung (GRF-Anordnung) 524, eine Architekturregistersatz-Anordnung (ARF-Anordnung) 526, einen Strangvermittler 522, eine Sendeeinheit 530, eine Verzweigungseinheit 532, einen Satz von SIMD-Gleitkommaeinheiten (SIMD-FPUs) 534 und in einer Ausführungsform einen Satz dedizierter Ganzzahl-SIMD-ALUs 535 umfassen. Die GRF 524 und die ARF 526 umfassen die Menge von Allgemeinregistersätzen und Architekturregistersätzen, die jedem gleichzeitigen Hardware-Strang zugeordnet sind, der in der Grafikausführungseinheit 508 aktiv sein kann. In einer Ausführungsform wird der Per-Strang-Architekturzustand in der ARF 526 gepflegt, während Daten, die während der Strangausführung verwendet werden, in der GRF 524 gespeichert werden. Der Ausführungszustand jedes Strangs einschließlich der Befehlszeiger für jeden Strang kann in strangspezifischen Registern in der ARF 526 gehalten werden.
  • In einer Ausführungsform weist die Grafikausführungseinheit 508 eine Architektur auf, die eine Kombination von gleichzeitiget Mehrsträngigkeit (SMT) und feinkörniger verschachtelter Mehrsträngigkeit (IMT) darstellt. Die Architektur weist eine modulare Konfiguration auf, die zur Designzeit basierend auf einer Zielanzahl von gleichzeitigen Strängen und einer Anzahl von Registern je Ausführungseinheit fein abgestimmt werden kann, wobei Ausführungseinheitsbetriebsmittel auf Logik, die zum Ausführen von mehreren gleichzeitigen Strängen verwendet wird, verteilt wird. Die Anzahl der logischen Stränge, die von der Grafikausführungseinheit 508 ausgeführt werden können, ist nicht auf die Anzahl der Hardware-Stränge beschränkt, und jedem Hardware-Strang können mehrere logische Stränge zugewiesen sein.
  • In einer Ausführungsform kann die Grafikausführungseinheit 508 mehrere Befehle, die jeweils verschiedene Befehle sein können, gemeinsam ausgeben. Der Strangvermittler 522 des Grafikausführungseinheitsstrangs 508 kann die Befehle an die Sendeeinheit 530, die Verzweigungseinheit 532 und/oder die eine oder die mehreren SIMD-FPU(s) 534 zur Ausführung senden. Jeder Ausführungsstrang kann auf 128 Universalregister innerhalb der GRF 524 zugreifen, wobei jedes Register 32 Bytes speichern kann, die als ein 8-Element-Vektor von 32-Bit-Datenelementen zugänglich sind. In einer Ausführungsform hat jeder Ausführungseinheitsstrang Zugriff auf 4 KB innerhalb der GRF 524, wenngleich Ausführungsformen nicht hierauf beschränkt sind und in anderen Ausführungsformen mehr oder weniger Registerbetriebsmittel bereitgestellt sein können. In einer Ausführungsform ist die Grafikausführungseinheit 508 in sieben Hardware-Stränge unterteilt, die unabhängig voneinander Rechenoperationen ausführen können, wenngleich die Anzahl von Strängen pro Ausführungseinheit auch gemäß Ausführungsformen variieren kann. Beispielsweise werden in einer Ausführungsform bis zu 16 Hardware-Stränge unterstützt. In einer Ausführungsform, in der sieben Stränge auf 4 KB zugreifen können, kann die GRF 524 insgesamt 28 KB speichern. Wenn 16 Stränge auf 4 KB zugreifen können, kann die GRF 524 insgesamt 64 KB speichern. Flexible Adressierungsmodi können es ermöglichen, Register zusammen zu adressieren, um effektiv breitere Register aufzubauen oder schrittweise rechteckige Blockdatenstrukturen darzustellen.
  • In einer Ausführungsform werden Speicheroperationen, Abtasteroperationen und andere Systemkommunikation mit längerer Latenz über „Senden“-Befehle gesendet, die durch die Nachrichtenweiterleitungssendeeinheit 530 ausgeführt werden. In einer Ausführungsform werden Verzweigungsbefehle an eine dedizierte Verzweigungseinheit 532 gesendet, um eine SIMD-Divergenz und letztliche Konvergenz zu unterstützen.
  • In einer Ausführungsform umfasst die Grafikausführungseinheit 508 eine oder mehrere SIMD-Gleitkommaeinheiten (SIMD-FPUs) 534 zum Durchführen von Gleitkommaoperationen. In einer Ausführungsform unterstützt/unterstützen die FPU(s) 534 auch eine Ganzzahlberechnung. In einer Ausführungsform kann/können die FPU(s) 534 bis zu M Anzahl von 32-Bit-Gleitkomma-(oder Ganzzahl-) Operationen mit SIMD ausführen oder bis zu 2M 16-Bit-Ganzzahl- oder 16-Bit-Gleitkommaoperationen mit SIMD ausführen. In einer Ausführungsform bietet zumindest eine der FPU(s) erweiterte Mathematikfähigkeit, um transzendente Mathematikfunktionen mit hohem Durchsatz und 54-Bit-Gleitkomma mit doppelter Genauigkeit zu unterstützen. In einigen Ausführungsformen ist auch ein Satz von 8-Bit-Ganzzahl-SIMD-ALUs 535 vorhanden und kann insbesondere optimiert sein, um Operationen in Verbindung mit Maschinenlernberechnungen durchzuführen.
  • In einer Ausführungsform können Anordnungen von mehreren Instanzen der Grafikausführungseinheit 508 in einer Grafikteilkerngruppierung (z. B. einem Unter-Slice) instanziiert werden. Zur Skalierbarkeit können Produktarchitekten die genaue Anzahl von Ausführungseinheiten je Teilkerngruppierung auswählen. In einer Ausführungsform kann die Ausführungseinheit 508 Befehle über mehrere Ausführungskanäle hinweg ausführen. In einer weiteren Ausführungsform wird jeder Strang, der auf der Grafikausführungseinheit 508 ausgeführt wird, auf einem anderen Kanal ausgeführt.
  • 6 zeigt eine zusätzliche Ausführungseinheit 600 gemäß einer Ausführungsform. Die Ausführungseinheit 600 kann eine rechenoptimierte Ausführungseinheit zur beispielsweisen Verwendung in einer Rechenmodulkachel 340A-340D wie in 3C sein, ist jedoch nicht darauf beschränkt. Varianten der Ausführungseinheit 600 können auch in einer Grafikmaschinenkachel 310A-310D wie in 3B verwendet werden. In einer Ausführungsform umfasst die Ausführungseinheit 600 eine Strangsteuereinheit 601, eine Strangzustandseinheit 602, eine Befehlsabruf-/Vorabrufeinheit 603 und eine Befehlsdecodiereinheit 604. Die Ausführungseinheit 600 umfasst zusätzlich einen Registersatz 606, der Register aufnimmt, die Hardware-Strängen innerhalb der Ausführungseinheit zugewiesen werden können. Die Ausführungseinheit 600 umfasst zusätzlich eine Sendeeinheit 607 und eine Verzweigungseinheit 608. In einer Ausführungsform können die Sendeeinheit 607 und die Verzweigungseinheit 608 ähnlich wie die Sendeeinheit 530 und eine Verzweigungseinheit 532 der Grafikausführungseinheit 508 von 5B arbeiten.
  • Die Ausführungseinheit 600 umfasst zudem eine Recheneinheit 610, die mehrere verschiedene Arten von Funktionseinheiten aufweist. In einer Ausführungsform umfasst die Recheneinheit 610 eine ALU-Einheit 611, die eine Anordnung von arithmetischen Logikeinheiten umfasst. Die ALU-Einheit 611 kann dazu ausgelegt sein, Ganzzahl- und Gleitkommaoperationen mit 64 Bit, 32 Bit und 16 Bit auszuführen. Ganzzahl- und Gleitkommaoperationen können gleichzeitig ausgeführt werden. Die Recheneinheit 610 kann auch eine systolische Anordnung 612 und eine Mathematikeinheit 613 umfassen. Die systolische Anordnung 612 umfasst ein W breites und D tiefes Netz von Datenverarbeitungseinheiten, die verwendet werden können, um Vektoroperationen oder andere datenparallele Operationen in einer systolischen Weise durchzuführen. In einer Ausführungsform kann die systolische Anordnung 612 dazu ausgelegt sein, Matrixoperationen wie beispielsweise Matrixpunktproduktoperationen auszuführen. In einer Ausführungsform unterstützt die systolische Anordnung 612 16-Bit-Gleitkommaoperationen sowie 8-Bit- und 4-Bit-Ganzzahloperationen. In einer Ausführungsform kann die systolische Anordnung 612 dazu ausgelegt sein, Maschinenlernoperationen zu beschleunigen. In solchen Ausführungsformen kann die systolische Anordnung 612 mit Unterstützung für das bfloat-16-Bit-Gleitkommaformat ausgelegt sein. In einer Ausführungsform kann eine Mathematikeinheit 613 enthalten sein, um eine bestimmte Teilmenge von mathematischen Operationen auf eine effizientere und energiesparendere Weise als die ALU-Einheit 611 auszuführen. Die Mathematikeinheit 613 kann eine Variante der mathematischen Logik aufweisen, die in der gemeinsam genutzten Funktionslogik einer Grafikverarbeitungsmaschine zu finden ist, die durch andere Ausführungsformen bereitgestellt wird (z. B. mathematische Logik 422 der gemeinsam genutzten Funktionslogik 420 von 4). In einer Ausführungsform kann die mathematische Einheit 613 dazu ausgelegt sein, 32-Bit- und 64-Bit-Gleitkommaoperationen auszuführen.
  • Die Strangsteuereinheit 601 umfasst eine Logik zum Steuern der Ausführung von Strängen innerhalb der Ausführungseinheit. Die Strangsteuereinheit 601 kann eine Strangvermittlungslogik zum Starten, Stoppen und Verhindern der Ausführung von Strängen innerhalb der Ausführungseinheit 600 umfassen. Die Strangzustandseinheit 602 kann zum Speichern des Strangzustands für Stränge verwendet werden, die zur Ausführung auf der Ausführungseinheit 600 zugewiesen sind. Das Speichern des Strangzustands innerhalb der Ausführungseinheit 600 ermöglicht die schnelle Vorwegnahme von Strängen, wenn diese Stränge blockiert werden oder inaktiv sind. Die Befehlsabruf-/Vorabrufeinheit 603 kann Befehle aus einem Befehls-Cache einer Ausführungslogik höherer Ebene (z. B. dem Befehls-Cache 506 wie in 5A) abrufen. Die Befehlsabruf-/Vorabrufeinheit 603 kann auch basierend auf einer Analyse von aktuell ausgeführten Strängen Vorabrufanforderungen für Befehle ausgeben, die in den Befehls-Cache geladen werden sollen. Die Befehlsdecodiereinheit 604 kann verwendet werden, um Befehle zu decodieren, die von den Recheneinheiten ausgeführt werden sollen. In einer Ausführungsform kann die Befehlsdecodiereinheit 604 als sekundärer Decodierer verwendet werden, um komplexe Befehle in konstituierende Mikrooperationen zu decodieren.
  • Die Ausführungseinheit 600 umfasst zusätzlich einen Registersatz 606, der von Hardwaresträngen verwendet werden kann, die auf der Ausführungseinheit 600 ausgeführt werden. Register in dem Registersatz 606 können über die Logik hinweg aufgeteilt werden, die zum Ausführen 600 mehrerer gleichzeitiger Stränge innerhalb der Recheneinheit 610 verwendet wird. Die Anzahl der logischen Stränge, die von der Grafikausführungseinheit 600 ausgeführt werden können, ist nicht auf die Anzahl der Hardwarestränge beschränkt und jedem Hardware-Strang können mehrere logische Stränge zugewiesen werden. Die Größe des Registersatzes 606 kann je nach Anzahl der unterstützten Hardwarestränge zwischen Ausführungsformen variieren. In einer Ausführungsform kann das Umbenennen von Registern verwendet werden, um Register dynamisch Hardwaresträngen zuzuweisen.
  • 7 ist ein Blockdiagramm, das ein Grafikprozessor-Befehlsformat 700 gemäß einigen Ausführungsformen darstellt. In einer oder mehreren Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten einen Befehlssatz mit Befehlen in mehreren Formaten. Die Kästen mit durchgezogenen Linien zeigen die Komponenten, die in der Regel in einem Ausführungseinheitsbefehl enthalten sind, während die gestrichelten Linien Komponenten umfassen, die optional sind oder die nur in einem Teilsatz der Befehle enthalten sind. In einigen Ausführungsformen besteht das Befehlsformat 700, das gezeigt und beschrieben wird, aus Makrobefehlen, die Befehle sind, die an die Ausführungseinheit geliefert werden, im Gegensatz zu Mikrooperationen, die aus der Befehlsdecodierung resultieren, sobald der Befehl verarbeitet wird.
  • In einigen Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten nativ Befehle in einem 128-Bit-Befehlsformat 710. Ein verdichtetes 64-Bit-Befehlsformat 730 steht für einige Befehle basierend auf dem ausgewählten Befehl, den Befehlsoptionen und der Anzahl der Operanden zur Verfügung. Das native 128-Bit-Format 710 bietet Zugriff auf alle Befehlsoptionen, während einige Optionen und Operationen in dem 64-Bit-Format 730 eingeschränkt sind. Die nativen Befehle, die in dem 64-Bit-Format 730 verfügbar sind, variieren je nach Ausführungsform. In einigen Ausführungsformen ist der Befehl unter Verwendung eines Satzes von Indexwerten in einem Indexfeld 713 zum Teil verdichtet. Die Ausführungseinheits-Hardware verweist auf einen Satz von Verdichtungstabellen auf der Grundlage der Indexwerte und verwendet die Verdichtungstabellenausgaben, um einen nativen Befehl in dem 128-Bit-Befehlsformat 710 zu rekonstruieren. Andere Größen und Formate von Befehlen können verwendet werden.
  • Für jedes Format definiert ein Befehls-Opcode 712 die Funktion, die die Ausführungseinheit ausführen soll. Die Ausführungseinheiten führen jeden Befehl parallel über die mehreren Datenelemente jedes Operanden hinweg aus. Zum Beispiel führt die Ausführungseinheit als Antwort auf einen Addierbefehl eine gleichzeitige Additionsoperation für jeden Farbkanal, der ein Texturelement oder Bildelement darstellt, durch. Standardmäßig führt die Ausführungseinheit jeden Befehl über alle Datenkanäle der Operanden hinweg aus. In einigen Ausführungsformen ermöglicht ein Befehlssteuerfeld 714 die Kontrolle über bestimmte Ausführungsoptionen wie beispielsweise die Kanalauswahl (z. B. Prädikation) und Datenkanalreihenfolge (z. B. Umordnen (Swizzle)). Für 128-Bit-Befehle 710 begrenzt ein Feld „exec-size“ 716 die Anzahl von Datenkanälen, die parallel ausgeführt werden. Das Feld „exec-size“ 716 steht in einigen Ausführungsformen nicht für den Einsatz in dem kompakten 64-Bit-Befehlsformat 730 zur Verfügung.
  • Einige Ausführungseinheitsbefehle weisen bis zu drei Operanden auf, darunter zwei Quelloperanden src0 720, srcl 722, und ein Ziel 718. In einigen Ausführungsformen unterstützen die Ausführungseinheiten Doppelziel-Befehle, wobei eines der Ziele impliziert ist. Datenmanipulationsbefehle können einen dritten Quelloperanden (z. B. SRC2 724) aufweisen, wobei der Befehls-Opcode 712 die Anzahl der Quelloperanden bestimmt. Der letzte Quelloperand eines Befehls kann ein direkter (z. B. fest codierter) Wert sein, der mit dem Befehl weitergegeben wird.
  • In einigen Ausführungsformen umfasst das 128-Bit-Befehlsformat 710 ein Zugriffs-/Adressmodusfeld 726, das beispielsweise angibt, ob ein direkter Registeradressierungsmodus oder ein indirekter Registeradressierungsmodus verwendet wird. Wenn der direkte Registeradressierungsmodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden direkt von Bits in dem Befehl bereitgestellt.
  • In einigen Ausführungsformen umfasst das 128-Bit-Befehlsformat 710 ein Zugriffs-/Adressmodusfeld 726, das einen Adressmodus und/oder einen Zugriffsmodus für den Befehl spezifiziert. In einer Ausführungsform wird der Zugriffsmodus verwendet, um eine Datenzugriffsausrichtung für den Befehl zu definieren. Einige Ausführungsformen unterstützen Zugriffsmodi einschließlich eines 16-Byte-Ausrichtungs-Zugriffsmodus und eines 1-Byte-Ausrichtungs-Zugriffsmodus, wobei die Byte-Ausrichtung des Zugriffsmodus die Zugriffsausrichtung der Befehlsoperanden bestimmt. Wenn sich der Befehl beispielsweise in einem ersten Modus befindet, kann er eine Byte-Ausrichtungs-Adressierung für Quell- und Zieloperanden verwenden, und wenn sich der Befehl in einem zweiten Modus befindet, kann er eine 16-Byte-Ausrichtungs-Adressierung für alle Quell- und Zieloperanden verwenden.
  • In einer Ausführungsform bestimmt der Adressmodusabschnitt des Zugriffs-/Adressmodusfelds 726, ob der Befehl eine direkte oder indirekte Adressierung verwenden soll. Wenn der direkte Registeradressierungsmodus verwendet wird, liefern die Bits in dem Befehl direkt die Registeradresse eines oder mehrerer Operanden. Wenn der indirekte Registeradressierungsmodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressregisterwert und einem Adress-Direktwertfeld in dem Befehl berechnet werden.
  • In einigen Ausführungsformen sind Befehle basierend auf Opcode-Bitfeldern 712 gruppiert, um eine Opcode-Decodierung 740 zu vereinfachen. Bei einem 8-Bit-Opcode ermöglichen die Bits 4, 5 und 6 es der Ausführungseinheit, den Typ von Opcode zu bestimmen. Die speziell gezeigte Opcode-Gruppierung ist lediglich beispielhaft. In einigen Ausführungsformen umfasst eine Verschiebungs- und Logik-Opcode-Gruppe 742 Datenverschiebungs- und Logik-Befehle (z. B. Verschieben (mov), Vergleichen (cmp)). In einigen Ausführungsformen nutzt die Verschiebungs- und Logik-Gruppe 742 die fünf höchstwertigen Bits (MSB) gemeinsam, wobei die Verschiebungsbefehle (mov-Befehle) in der Form 0000xxxxb vorliegen und die Logikbefehle in der Form 0001xxxxb vorliegen. Eine Ablaufsteuerungsbefehlsgruppe 744 (z. B. Aufrufen (call), Springen (jmp)) enthält Befehle in der Form 0010xxxxb (z. B. 0x20). Eine gemischte Befehlsgruppe 746 umfasst eine Mischung aus Befehlen, die Synchronisationsbefehle (z. B. Warten (wait), Senden (send)) in der Form 0011xxxxb (z. B. 0x30) umfasst. Eine Parallelmathematik-Befehlsgruppe 748 umfasst komponentenweise arithmetische Befehle (z. B. Addieren (add), Multiplizieren (mul)) in der Form 0100xxxxb (z. B. 0x40). Die Parallelmathematik-Gruppe 748 führt die arithmetischen Operationen parallel über Datenkanäle hinweg aus. Die Vektormathematik-Gruppe 750 umfasst arithmetische Befehle (z. B. dp4) in der Form 0101xxxxb (z. B. 0x50). Die Vektormathematik-Gruppe führt arithmetische Operationen wie Skalarproduktberechnungen an Vektoroperanden aus. Die dargestellte Opcode-Decodierung 740 kann in einer Ausführungsform verwendet werden, um zu bestimmen, welcher Abschnitt einer Ausführungseinheit zum Ausführen eines decodierten Befehls verwendet wird. Beispielsweise können einige Befehle als systolische Befehle festgelegt sein, die von einer systolischen Anordnung ausgeführt werden. Andere Befehle wie beispielsweise Strahlverfolgungsbefehle (nicht gezeigt) können zu einem Strahlverfolgungskern oder einer Strahlverfolgungslogik innerhalb eines Slice oder einer Partition der Ausführungslogik geleitet werden.
  • Grafikpipeline
  • 8 ist ein Blockdiagramm einer weiteren Ausführungsform eines Grafikprozessors 800. Elemente von 8 mit den gleichen Bezugszeichen (oder Namen) wie die Elemente von irgendeiner anderen Figur hierin können auf eine Art und Weise arbeiten oder funktionieren, die der an anderer Stelle hierin beschriebenen ähnlich ist, sind jedoch nicht darauf beschränkt.
  • In einigen Ausführungsformen umfasst der Grafikprozessor 800 eine Geometriepipeline 820, eine Medienpipeline 830, eine Anzeigemaschine 840, eine Strangausführungslogik 850 und eine Renderausgabepipeline 870. In einigen Ausführungsformen ist der Grafikprozessor 800 ein Grafikprozessor innerhalb eines Mehrkern-Verarbeitungssystems, das einen oder mehrere Allzweckverarbeitungskerne aufweist. Der Grafikprozessor wird durch Registerschreibvorgänge in ein oder mehrere Steuerregister (nicht gezeigt) oder über Befehle, die über eine Ringzwischenverbindung 802 an den Grafikprozessor 800 erteilt werden, gesteuert. In einigen Ausführungsformen koppelt die Ringzwischenverbindung 802 den Grafikprozessor 800 mit anderen Verarbeitungskomponenten wie anderen Grafikprozessoren oder Allzweckprozessoren. Befehle aus der Ringzwischenverbindung 802 werden durch einen Befehls-Streamer 803 interpretiert, der Befehle an einzelne Komponenten der Geometriepipeline 820 oder Medienpipeline 830 liefert.
  • In einigen Ausführungsformen lenkt der Befehls-Streamer 803 den Betrieb eines Vertexabrufers 805, der Vertexdaten aus dem Speicher liest und Vertexverarbeitungsbefehle, die von dem Befehls-Streamer 803 geliefert werden, ausführt. In einigen Ausführungsformen liefert der Vertexabrufer 805 Vertexdaten an einen Vertexschattierer 807, der eine Koordinatenraumtransformation und Beleuchtungsoperationen an jedem Vertex ausführt. In einigen Ausführungsformen führen der Vertexabrufer 805 und der Vertexschattierer 807 Vertexverarbeitungsbefehle durch Entsenden von Ausführungssträngen an die Ausführungseinheiten 852A-852B über einen Strangabfertiger 831 aus.
  • In einigen Ausführungsformen sind die Ausführungseinheiten 852A-852B eine Anordnung von Vektorprozessoren mit einem Befehlssatz zum Durchführen von Grafik- und Medienoperationen. In einigen Ausführungsformen weisen die Ausführungseinheiten 852A-852B einen angeschlossenen Ll-Cache 851 auf, der spezifisch für jede Anordnung ist oder von den Anordnungen gemeinsam genutzt wird. Der Cache kann als Daten-Cache, Befehls-Cache oder ein einzelner Cache, der so partitioniert ist, dass er Daten und Befehle in verschiedenen Partitionen enthält, ausgelegt sein.
  • In einigen Ausführungsformen umfasst die Geometriepipeline 820 Tessellationskomponenten zum Durchführen einer hardwarebeschleunigtem Tessellation von 3D-Objekten. In einigen Ausführungsformen konfiguriert ein programmierbarer Mantelschattierer 811 die Tessellationsoperationen. Ein programmierbarer Domain-Schattierer 817 liefert eine Backend-Auswertung der Tessellationsausgabe. Ein Tessellator 813 arbeitet unter der Führung des Mantelschattierers 811 und umfasst Sonderlogik, um einen Satz von detaillierten geometrischen Objekten basierend auf einem groben geometrischen Modell, das als Eingabe in die Geometriepipeline 820 bereitgestellt wird, zu erzeugen. Wenn die Tessellation in einigen Ausführungsformen nicht verwendet wird, können die Tessellationskomponenten (z. B. Mantelschattierer 811, Tessellator 813 und Domain-Schattierer 817) umgangen werden.
  • In einigen Ausführungsformen können die vollständigen geometrischen Objekte durch einen Geometrieschattierer 819 über einen oder mehrere Stränge, die an die Ausführungseinheiten 852A-852B entsendet werden, verarbeitet werden oder können direkt zu dem Clipper 829 gelangen. In einigen Ausführungsformen bearbeitet der Geometrieschattierer gesamte geometrische Objekte anstelle von Vertices oder Flecken von Vertices wie in vorherigen Stufen der Grafik-Pipeline. Wenn die Tessellation deaktiviert ist, empfängt der Geometrieschattierer 819 Eingaben aus dem Vertexschattierer 807. In einigen Ausführungsformen ist der Geometrieschattierer 819 durch ein Geometrieschattiererprogramm programmierbar, um eine Geometrie-Tessellation durchzuführen, wenn die Tessellationseinheiten deaktiviert sind.
  • Vor der Rasterung verarbeitet ein Clipper 829 Vertexdaten. Der Clipper 829 kann entweder ein Clipper mit fester Funktion oder ein programmierbarer Clipper mit Clipping- und Geometrieschattiererfunktionen sein. In einigen Ausführungsformen fertigt eine Raster-und-Tiefentestkomponente 873 in der Renderausgabepipeline 870 Pixelschattierer ab, um die geometrischen Objekte in ihre pixelweisen Darstellungen zu konvertieren. In einigen Ausführungsformen ist die Pixelschattiererlogik in der Strangausführungslogik 850 enthalten. In einigen Ausführungsformen kann eine Anwendung die Raster-und-Tiefentestkomponente 873 umgehen und über eine Stream-Out-Einheit 823 auf nicht gerasterte Vertexdaten zugreifen.
  • Der Grafikprozessor 800 verfügt über einen Zwischenverbindungsbus, eine Zwischenverbindungsstruktur oder irgendeinen anderen Zwischenverbindungsmechanismus, der einen Daten- und Nachrichtenaustausch zwischen den Hauptkomponenten des Prozessors ermöglicht. In einigen Ausführungsformen sind Ausführungseinheiten 852A-852B und zugehörige Logikeinheiten (z. B. Ll-Cache 851, Abtaster 854 und ein Textur-Cache 858 usw.) über einen Daten-Port 856 verbunden, um einen Speicherzugriff durchführen und mit Renderausgabepipeline-Komponenten des Prozessors zu kommunizieren. In einigen Ausführungsformen weisen der Abtaster 854, die Caches 851, 858 und die Ausführungseinheiten 852A-852B jeweils separate Speicherzugriffspfade auf. In einer Ausführungsform kann der Textur-Cache 858 auch als Abtaster-Cache ausgelegt sein.
  • In einigen Ausführungsformen umfasst die Renderausgabepipeline 870 eine Raster-und-Tiefentestkomponente 873, die vertexbasierte Objekte in die ihnen zugeordnete pixelbasierte Darstellung umwandelt. In einigen Ausführungsformen umfasst die Rasterlogik eine Fenster-/Maskier-Einheit, um eine Dreiecks- und Linien-Rasterung mit fester Funktion durchzuführen. Zudem sind ein zugehöriger Render-Cache 878 und Tiefen-Cache 879 in einigen Ausführungsformen verfügbar. Eine Pixeloperationskomponente 877 führt pixelbasierte Operationen an den Daten durch, obwohl in einigen Fällen Pixeloperationen, die 2D-Operationen zugeordnet sind (z. B. Bitblockbildübertragungen mit Überlagerung), von der 2D-Maschine 841 durchgeführt werden oder zu der Anzeigezeit durch den AnzeigeController 843 mit Überlagerungsanzeigeebenen ersetzt werden. In einigen Ausführungsformen ist ein gemeinsam genutzter L3-Cache 875 für alle Grafikkomponenten verfügbar, so dass die gemeinsame Nutzung von Daten ohne den Einsatz des Hauptsystemspeichers ermöglicht wird.
  • In einigen Ausführungsformen umfasst die Grafikprozessor-Medienpipeline 830 eine Medienmaschine 837 und ein Video-Frontend 834. In einigen Ausführungsformen empfängt das Video-Frontend 834 Pipelinebefehle aus dem Befehls-Streamer 803. In einigen Ausführungsformen umfasst die Medien-Pipeline 830 aber einen separaten Befehls-Streamer. In einigen Ausführungsformen verarbeitet das Video-Frontend 834 Medienbefehle, bevor es den Befehl an die Medienmaschine 837 sendet. In einigen Ausführungsformen weist die Medienmaschine 837 eine Strangerzeugungsfunktionalität auf, um Stränge für das Entsenden an die Strangausführungslogik 850 über den Strangabfertiger 831 zu erzeugen.
  • In einigen Ausführungsformen umfasst der Grafikprozessor 800 eine Anzeigemaschine 840. In einigen Ausführungsformen ist die Anzeigemaschine 840 bezüglich des Prozessors 800 extern und ist mit dem Grafikprozessor über die Ringzwischenverbindung 802 oder irgendeinen anderen Zwischenverbindungsbus oder irgendeine andere Zwischenverbindungsstruktur gekoppelt. In einigen Ausführungsformen umfasst die Anzeigemaschine 840 eine 2D-Maschine 841 und einen Anzeigecontroller 843. In einigen Ausführungsformen enthält die Anzeigemaschine 840 eine Sonderlogik, die unabhängig von der 3D-Pipeline arbeiten kann. In einigen Ausführungsformen ist der Anzeigecontroller 843 mit einer Anzeigevorrichtung (nicht dargestellt) gekoppelt, die eine integrierte Systemanzeigevorrichtung wie bei einem Laptop-Computer oder eine externe Anzeigevorrichtung, die über ein Anzeigevorrichtungs-Verbindungselement angeschlossen ist, sein kann.
  • In einigen Ausführungsformen sind die Geometriepipeline 820 und die Medienpipeline 830 konfigurierbar, um Operationen auf der Basis mehrerer Grafik- und Medienprogrammierschnittstellen durchzuführen, und sind nicht speziell für irgendeine Anwendungsprogrammierschnittstelle (API) ausgelegt. In einigen Ausführungsformen übersetzt Treibersoftware für den Grafikprozessor API-Aufrufe, die spezifisch für eine bestimmte Grafik- oder Medienbibliothek sind, in Befehle, die von dem Grafikprozessor verarbeitet werden können. In einigen Ausführungsformen wird Unterstützung für die Open Graphics Library (OpenGL) und die Open Computing Language (OpenCL) und/oder Vulkan-Grafik und Rechen-API geboten, die alle von der Khronos Group stammen. In einigen Ausführungsformen kann auch Unterstützung für die Direct3D-Bibliothek von der Microsoft Corporation geboten werden. In einigen Ausführungsformen kann eine Kombination dieser Bibliotheken unterstützt werden. Es kann auch Unterstützung für die Open Source Computer Vision Library (OpenCV) geboten werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline würde dann auch unterstützt, wenn eine Abbildung von der Pipeline der zukünftigen API auf die Pipeline des Grafikprozessors vorgenommen werden kann.
  • Grafikpipelineprogrammierung
  • 9A ist ein Blockdiagramm, das ein Grafikprozessorbefehlsformat 900 gemäß einigen Ausführungsformen zeigt. 9B ist ein Blockdiagramm, das eine Grafikprozessorbefehlsfolge 910 gemäß einer Ausführungsform zeigt. Die durchgezogenen Kästchen in 9A veranschaulichen die Komponenten, die im Allgemeinen in einem Grafikbefehl enthalten sind, während die gestrichelten Linien Komponenten umfassen, die optional sind oder die nur in einem Teilsatz der Grafikbefehle enthalten sind. Das beispielhafte Grafikprozessorbefehlsformat 900 von 9A umfasst Datenfelder zum Identifizieren eines Clients 902, eines Befehlsoperationscodes (Opcodes) 904 und von Daten 906 für den Befehl. Ein Teil-Opcode 905 und eine Befehlsgröße 908 sind in einigen Befehlen ebenfalls enthalten.
  • In einigen Ausführungsformen spezifiziert der Client 902 die Client-Einheit der Grafikvorrichtung, die die Befehlsdaten verarbeitet. In einigen Ausführungsformen untersucht ein Grafikprozessor-Befehls-Parser das Client-Feld jedes Befehls, um die weitere Verarbeitung des Befehls aufzubereiten und die Befehlsdaten an die geeignete Client-Einheit weiterzuleiten. In einigen 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 hat eine entsprechende Verarbeitungs-Pipeline, die die Befehle verarbeitet. Sobald der Befehl durch die Client-Einheit empfangen wurde, liest die Client-Einheit den Opcode 904 und, falls vorhanden, den Teil-Opcode 905, um die durchzuführende Operation zu bestimmen. Die Client-Einheit führt den Befehl unter Verwendung von Informationen in dem Datenfeld 906 aus. Für einige Befehle wird eine explizite Befehlsgröße 908 erwartet, die die Größe des Befehls angibt. In einigen Ausführungsformen bestimmt der Befehls-Parser automatisch die Größe von mindestens einigen der Befehle basierend auf dem Befehls-Opcode. In einigen Ausführungsformen sind Befehle nach Vielfachen eines Doppelwortes ausgerichtet. Andere Befehlsformate können verwendet werden.
  • Das Ablaufdiagramm in 9B zeigt eine beispielhafte Grafikprozessorbefehlsfolge 910. In einigen Ausführungsformen verwendet Software oder Firmware eines Datenverarbeitungssystems, das eine Ausführungsform eines Grafikprozessors aufweist, eine Version der dargestellten Befehlsfolge, um einen Satz von Grafikoperationen einzurichten, auszuführen und zu beenden. Eine beispielhafte Befehlsfolge ist nur zu Beispielszwecken dargestellt und beschrieben, da Ausführungsformen nicht auf diese spezifischen Befehle oder auf diese Befehlsfolge beschränkt sind. Darüber hinaus können die Befehle als Stapel von Befehlen in einer Befehlsfolge so ausgegeben werden, dass der Grafikprozessor die Folge von Befehlen zumindest teilweise gleichzeitig verarbeitet.
  • In einigen Ausführungsformen kann die Grafikprozessorbefehlsfolge 910 mit einem Pipelinebereinigungsbefehl 912 beginnen, um zu veranlassen, dass eine aktive Grafikpipeline die aktuell ausstehenden Befehle für die Pipeline abschließt. In einigen Ausführungsformen arbeiten die 3D-Pipeline 922 und die Medienpipeline 924 nicht gleichzeitig. Die Pipelinebereinigung wird ausgeführt, um zu veranlassen, dass die aktive Grafikpipeline alle ausstehenden Befehle abschließt. Als Antwort auf eine Pipelinebereinigung unterbricht der Befehls-Parser für den Grafikprozessor die Befehlsverarbeitung, bis die aktiven Zeichenmaschinen ausstehende Operationen abschließen und die relevanten Lese-Caches ungültig gemacht werden. Wahlweise können alle Daten im Render-Cache, die als „schmutzig“ gekennzeichnet sind, in den Speicher geleert werden. In einigen Ausführungsformen kann der Pipelinebereinigungsbefehl 912 für die Pipelinesynchronisation oder vor dem Versetzen des Grafikprozessors in einen Zustand niedriger Leistungsaufnahme verwendet werden.
  • In einigen Ausführungsformen wird ein Pipelineauswahlbefehl 913 verwendet, wenn eine Befehlsfolge erfordert, dass der Grafikprozessor explizit zwischen Pipelines wechselt. In einigen Ausführungsformen wird ein Pipelineauswahlbefehl 913 nur einmal in einem Ausführungskontext vor dem Ausgeben von Pipelinebefehlen benötigt, es sei denn, der Kontext gibt vor, Befehle für beide Pipelines auszugeben. In einigen Ausführungsformen ist ein Pipelinebereinigungsbefehl 912 unmittelbar vor einem Pipelinewechsel mittels des Pipelineauswahlbefehls 913 erforderlich.
  • In einigen Ausführungsformen konfiguriert ein Pipelinesteuerbefehl 914 eine Grafikpipeline für den Betrieb und wird verwendet, um die 3D-Pipeline 922 und die Medienpipeline 924 zu programmieren. In einigen Ausführungsformen konfiguriert der Pipelinesteuerbefehl 914 den Pipelinezustand für die aktive Pipeline. In einer Ausführungsform wird der Pipelinesteuerbefehl 914 für eine Pipelinesynchronisation und zum Löschen von Daten aus einem oder mehreren Cache-Speichern innerhalb der aktiven Pipeline verwendet, bevor ein Stapel von Befehlen verarbeitet wird.
  • In einigen Ausführungsformen werden Rückgabepufferzustandsbefehle 916 verwendet, um einen Satz von Rückgabepuffern für die jeweiligen Pipelines zum Schreiben von Daten zu konfigurieren. Einige Pipelineoperationen erfordern die Zuweisung, Auswahl oder Konfiguration eines oder mehrerer Rückgabepuffer, in die die Operationen während der Verarbeitung Zwischendaten schreiben. In einigen Ausführungsformen verwendet der Grafikprozessor auch einen oder mehrere Rückgabepuffer, um Ausgabedaten zu speichern und eine strangübergreifende Kommunikation durchzuführen. In einigen Ausführungsformen beinhaltet der Rückgabepufferzustand 916 das Auswählen der Größe und Anzahl von Rückgabepuffern, die für einen Satz von Pipelineoperationen verwendet werden sollen.
  • Die verbleibenden Befehle in der Befehlsfolge unterscheiden sich basierend auf der aktiven Pipeline für Operationen. Basierend auf einer Pipelinebestimmung 920 wird die Befehlsfolge auf die 3D-Pipeline 922, beginnend mit dem 3D-Pipeline-Zustand 930, oder die Medienpipeline 924, beginnend mit dem MedienpipelineZustand 940, zugeschnitten.
  • Die Befehle zum Konfigurieren des 3D-Pipelinezustands 930 umfassen 3D-Zustandseinstellungsbefehle für den Vertexpufferzustand, einen Vertexelementzustand, einen Konstantfarbzustand, einen Tiefenpufferzustand und andere Zustandsvariablen, die zu konfigurieren sind, bevor 3D-Primitiv-Befehle verarbeitet werden. Die Werte dieser Befehle werden zumindest teilweise basierend auf der jeweiligen verwendeten 3D-API bestimmt. In einigen Ausführungsformen sind Befehle zum 3D-Pipelinezustand 930 auch in der Lage, bestimmte Pipelineelemente gezielt zu deaktivieren oder zu umgehen, falls diese Elemente nicht verwendet werden.
  • In einigen Ausführungsformen wird der 3D-Primitiv-Befehl 932 verwendet, um 3D-Primitive, die von der 3D-Pipeline verarbeitet werden sollen, zu versenden. Befehle und zugehörige Parameter, die über den 3D-Primitiv-Befehl 932 an den Grafikprozessor geleitet werden, werden an die Vertexabruffunktion in der Grafik-Pipeline weitergeleitet. Die Vertexabruffunktion verwendet die Daten des 3D-Primitiv-Befehls 932, um Vertexdatenstrukturen zu erzeugen. Die Vertexdatenstrukturen werden in einem oder mehreren Rückgabepuffern gespeichert. In einigen Ausführungsformen wird der 3D-Primitiv-Befehl 932 verwendet, um Vertexoperationen an 3D-Primitiven mittels Vertexschattierern durchzuführen. Um Vertexschattierer zu verarbeiten, sendet die 3D-Pipeline 922 Schattiererausführungsstränge an Grafikprozessor-Ausführungseinheiten.
  • In einigen Ausführungsformen wird die 3D-Pipeline 922 über einen Befehl oder ein Ereignis Ausführen 934 ausgelöst. In einigen Ausführungsformen löst ein Registerschreibvorgang eine Befehlsausführung aus. In einigen Ausführungsformen wird die Ausführung über einen „go“- oder „kick“-Befehl in der Befehlsfolge ausgelöst. In einer Ausführungsform wird die Befehlsausführung unter Verwendung eines Pipelinesynchronisationsbefehls ausgelöst, um die Befehlsfolge durch die Grafikpipeline zu bereinigen. Die 3D-Pipeline führt eine Geometrieverarbeitung für die 3D-Primitive aus. Sobald die Operationen abgeschlossen sind, werden die resultierenden geometrischen Objekte gerastert und die Pixelmaschine färbt die resultierenden Pixel. Zusätzliche Befehle zum Steuern von Pixelschattierungs- und Pixel-Backend-Operationen können für diese Operationen ebenfalls enthalten sein.
  • In einigen Ausführungsformen folgt die Grafikprozessorbefehlsfolge 910 dem Pfad der Medienpipeline 924, wenn Medienoperationen ausgeführt werden. Im Allgemeinen hängt die spezifische Verwendung und Art der Programmierung für die Medienpipeline 924 von den durchzuführenden Medien- oder Rechenoperationen ab. Bestimmte Mediendecodieroperationen können während der Mediendecodierung in die Medienpipeline ausgelagert werden. In einigen Ausführungsformen kann die Medienpipeline auch umgangen werden und die Mediendecodierung kann ganz oder teilweise unter Verwendung von Betriebsmitteln durchgeführt werden, die von einem oder mehreren Allzweckverarbeitungskernen bereitgestellt werden. In einer Ausführungsform umfasst die Medienpipeline auch Elemente für Operationen einer Allzweck-Grafikprozessoreinheit (GPGPU), wobei der Grafikprozessor verwendet wird, um SIMD-Vektoroperationen unter Verwendung von Rechenschattiererprogrammen, die nicht explizit mit dem Rendern von Grafikprimitiven in Zusammenhang stehen, durchzuführen.
  • In einigen Ausführungsformen ist die Medienpipeline 924 auf ähnliche Weise wie die 3D-Pipeline 922 konfiguriert. Ein Satz von Befehlen zum Konfigurieren des Medienpipelinezustands 940 wird vor den Medienobjektbefehlen 942 an eine Befehlswarteschlange versendet oder in dieser platziert. In einigen Ausführungsformen umfassen die Befehle für den Medienpipelinezustand 940 Daten zum Konfigurieren der Medienpipelineelemente, die zum Verarbeiten der Medienobjekte verwendet werden. Dies umfasst Daten zum Konfigurieren der Videodecodierungs- und Videocodierungslogik in der Medienpipeline wie beispielsweise ein Codierungs- oder Decodierungsformat. In einigen Ausführungsformen unterstützen die Befehle für den Medienpipelinezustand 940 auch die Verwendung von einem oder mehreren Zeigern auf „indirekte“ Zustandselemente, die einen Stapel von Zustandseinstellungen enthalten.
  • In einigen Ausführungsformen liefern Medienobjektbefehle 942 Zeiger auf Medienobjekte zur Verarbeitung durch die Medienpipeline. Die Medienobjekte weisen Speicherpuffer auf, die zu verarbeitende Videodaten enthalten. In einigen Ausführungsformen müssen alle Medienpipelinezustände gültig sein, bevor ein Medienobjektbefehl 942 ausgegeben wird. Sobald der Pipelinezustand konfiguriert ist und die Medienobjektbefehle 942 in die Warteschlange eingereiht sind, wird die Medienpipeline 924 über einen Ausführungsbefehl 944 oder ein äquivalentes Ausführungsereignis (z. B. Registerschreibvorgang) ausgelöst. Die Ausgabe aus der Medienpipeline 924 kann dann durch Operationen nachbearbeitet werden, die von der 3D-Pipeline 922 oder der Medienpipeline 924 bereitgestellt werden. In einigen Ausführungsformen werden GPGPU-Operationen auf ähnliche Weise wie Medienoperationen konfiguriert und ausgeführt.
  • Grafiksoftwarearchitektur
  • 10 zeigt eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem 1000 gemäß einigen Ausführungsformen. In einigen Ausführungsformen umfasst die Softwarearchitektur eine 3D-Grafikanwendung 1010, ein Betriebssystem 1020 und mindestens einen Prozessor 1030. In einigen Ausführungsformen weist der Prozessor 1030 einen Grafikprozessor 1032 und einen oder mehrere Allzweck-Prozessorkerne 1034 auf. Die Grafikanwendung 1010 und das Betriebssystem 1020 werden jeweils in dem Systemspeicher 1050 des Datenverarbeitungssystems ausgeführt.
  • In einigen Ausführungsformen weist die 3D-Grafikanwendung 1010 ein oder mehrere Schattiererprogramme auf, die Schattiererbefehle 1012 enthalten. Die Schattierersprachenbefehle können in einer Schattiererhochsprache wie der High Level Shader Language (HLSL) von Direct3D oder der OpenGL Shader Language (GLSL) usw. vorliegen. Die Anwendung weist auch ausführbare Befehle 1014 in einer Maschinensprache auf, die zur Ausführung durch den Allzweck-Prozessorkern 1034 geeignet sind. Die Anwendung weist auch Grafikobjekte 1016 auf, die durch Vertexdaten definiert sind.
  • In einigen Ausführungsformen ist das Betriebssystem 1020 das Betriebssystem Microsoft® Windows® der Microsoft Corporation, ein proprietäres UNIX-ähnliches Betriebssystem oder ein UNIX-ähnliches Open-Source-Betriebssystem, das eine Variante des Linux-Kernels verwendet. Das Betriebssystem 1020 kann eine Grafik-API 1022 wie die Direct3D-API, die OpenGL-API oder die Vulkan-API unterstützen. Wenn die Direct3D-API verwendet wird, verwendet das Betriebssystem 1020 einen Frontend-Schattierer-Kompilierer 1024, um jegliche Schattiererbefehle 1012 in HLSL in eine Schattierersprache niedrigerer Ebene zu kompilieren. Die Kompilierung kann eine einsatzsynchrone Kompilierung (JIT-Kompilierung) sein oder die Anwendung kann eine Schattierer-Vorkompilierung ausführen. In einigen Ausführungsformen werden Schattierer hoher Ebene während der Kompilierung der 3D-Grafikanwendung 1010 zu Schattierern niedrigerer Ebene kompiliert. In einigen Ausführungsformen werden die Schattiererbefehle 1012 in einer Zwischenform wie beispielsweise einer Version der von der Vulkan-API verwendeten portierbaren Standard-Zwischendarstellung (SPIR) bereitgestellt.
  • In einigen Ausführungsformen umfasst der Anwendermodus-Grafiktreiber 1026 einen Backend-Schattiererkompilierer 1027, um die Schattiererbefehle 1012 in eine hardwarespezifische Darstellung umzuwandeln. Wenn die OpenGL-API verwendet wird, werden die Schattiererbefehle 1012 in der GLSL-Hochsprache an einen Anwendermodus-Grafiktreiber 1026 zur Kompilierung geleitet. In einigen Ausführungsformen verwendet der Anwendermodus-Grafiktreiber 1026 Betriebssystemkernelmodusfunktionen 1028, um mit einem Kernelmodus-Grafiktreiber 1029 zu kommunizieren. In einigen Ausführungsformen kommuniziert der Kernelmodus-Grafiktreiber 1029 mit dem Grafikprozessor 1032, um Befehle und Anweisungen zu entsenden.
  • IP-Kern-Implementierungen
  • Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch einen repräsentativen Code implementiert werden, der auf einem maschinenlesbaren Medium gespeichert ist und Logik innerhalb einer integrierten Schaltung wie etwa eines Prozessors repräsentiert und/oder definiert. Zum Beispiel kann das maschinenlesbare Medium Befehle enthalten, die verschiedene Logik innerhalb des Prozessors repräsentieren. Wenn sie von einer Maschine gelesen werden, können die Befehle veranlassen, dass die Maschine die Logik zum Ausführen der hierin beschriebenen Techniken herstellt. Solche Darstellungen, die als „IP-Kerne“ bekannt sind, sind wiederverwendbare Logikeinheiten für eine integrierte Schaltung, die auf einem greifbaren, maschinenlesbaren Medium als ein Hardwaremodell gespeichert werden können, das die Struktur der integrierten Schaltung beschreibt. Das Hardwaremodell kann an verschiedene Kunden oder Herstellungseinrichtungen geliefert werden, die das Hardwaremodell auf Herstellungsmaschinen laden, die die integrierte Schaltung herstellen. Die integrierte Schaltung kann derart hergestellt werden, dass die Schaltung Operationen ausführt, die in Verbindung mit irgendeiner der hierin beschriebenen Ausführungsformen beschrieben sind.
  • 11A ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem 1100 zeigt, das zur Herstellung einer integrierten Schaltung zur Ausführung von Operationen gemäß einer Ausführungsform verwendet werden kann. Das IP-Kern-Entwicklungssystem 1100 kann verwendet werden, um modulare, wiederverwendbare Entwürfe zu erzeugen, die in einen größeren Entwurf integriert werden können oder verwendet werden können, um eine gesamte integrierte Schaltung (z. B. eine integrierte SoC-Schaltung) zu konstruieren. Eine Entwurfseinrichtung 1130 kann eine Softwaresimulation 1110 eines IP-Kernentwurfs 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 gestalten, zu testen und zu verifizieren. Das Simulationsmodell 1112 kann Funktions-, Verhaltens- und/oder Zeitvorgabesimulationen beinhalten. Ein Registertransferebenen-Entwurf (RTL-Entwurf) 1115 kann dann aus dem Simulationsmodell 1112 erzeugt oder synthetisiert werden. Der RTL-Entwurf 1115 ist eine Abstraktion des Verhaltens der integrierten Schaltung, die den Fluss digitaler Signale zwischen Hardware-Registern modelliert, einschließlich der zugehörigen Logik, die unter Verwendung der modellierten digitalen Signale ausgeführt wird. Neben einem RTL-Entwurf 1115 können auch Entwürfe auf niedrigerer Ebene auf der Logikebene oder der Transistorebene erzeugt, entworfen oder synthetisiert werden. Daher können die speziellen Einzelheiten des anfänglichen Entwurfs und der Simulation variieren.
  • Der RTL-Entwurf 1115 oder ein Äquivalent kann ferner durch die Entwurfseinrichtung zu einem Hardwaremodell 1120 synthetisiert werden, das in einer Hardwarebeschreibungssprache (HDL) oder einer anderen Darstellung von physischen Entwurfsdaten vorliegen kann. Die HDL kann weiter simuliert oder getestet werden, um den IP-Kern-Entwurf zu verifizieren. Der IP-Kern-Entwurf kann zur Lieferung an eine Drittherstellereinrichtung 1165 unter Verwendung eines nichtflüchtigen Speichers 1140 (z. B. Festplatte, Flash-Speicher oder ein beliebiges nichtflüchtiges Speichermedium) gespeichert werden. Alternativ kann der IP-Kern-Entwurf über eine drahtgebundene Verbindung 1150 oder eine drahtlose Verbindung 1160 (übertragen werden z. B. über das Internet). Die Herstellungseinrichtung 1165 kann dann eine integrierte Schaltung herstellen, die zumindest teilweise auf dem IP-Kern-Entwurf basiert. Die hergestellte integrierte Schaltung kann dazu ausgelegt sein, Operationen gemäß mindestens einer hierin beschriebenen Ausführungsform auszuführen.
  • 11B zeigt eine Querschnittsseitenansicht einer Baugruppenanordnung für integrierte Schaltungen 1170 gemäß einigen hierin beschriebenen Ausführungsformen. Die Baugruppenanordnung für integrierte Schaltungen 1170 veranschaulicht eine Implementierung von einer oder mehreren Prozessor- oder Beschleunigervorrichtungen, wie sie hierin beschrieben sind. Die Baugruppenanordnung 1170 umfasst mehrere Einheiten von Hardwarelogik 1172, 1174, die mit einem Substrat 1180 verbunden sind. Die Logik 1172, 1174 kann zumindest teilweise in konfigurierbarer Logik oder Logikhardware mit fester Funktionalität implementiert sein und kann einen oder mehrere Abschnitte von beliebigen der hierin beschriebenen Prozessorkern(e), Grafikprozessor(en) oder anderen Beschleunigervorrichtungen umfassen. Jede Logikeinheit 1172, 1174 kann innerhalb eines Halbleiter-Chips implementiert und mit dem Substrat 1180 über eine Zwischenverbindungsstruktur 1173 gekoppelt sein. Die Zwischenverbindungsstruktur 1173 kann dazu ausgelegt sein, elektrische Signale zwischen der Logik 1172, 1174 und dem Substrat 1180 weiterzuleiten, und kann Zwischenverbindungen wie Kontakthügel oder Kontaktsäulen umfassen, ohne darauf beschränkt zu sein. In einigen Ausführungsformen kann die Zwischenverbindungsstruktur 1173 dazu ausgelegt sein, elektrische Signale, wie z. B. Eingabe/Ausgabe-Signale (E/A-Signale) und/oder Leistungs- oder Massesignale, die dem Betrieb der Logik 1172, 1174 zugeordnet sind, weiterzuleiten. In einigen Ausführungsformen ist das Substrat 1180 ein Laminatsubstrat auf Epoxidbasis. Das Baugruppensubstrat 1180 kann in anderen Ausführungsformen andere geeignete Typen von Substraten umfassen. Die Baugruppenanordnung 1170 kann über eine Baugruppenzwischenverbindung 1183 mit anderen elektrischen Vorrichtungen verbunden sein. Die Baugruppenzwischenverbindung 1183 kann an eine Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale an andere elektrische Vorrichtungen wie eine Hauptplatine, einen anderen Chipsatz oder ein Mehrchipmodul weiterzuleiten.
  • In einigen Ausführungsformen sind die Logikeinheiten 1172, 1174 mit einer Brücke 1182 elektrisch gekoppelt, die dazu ausgelegt ist, elektrische Signale zwischen der Logik 1172, 1174 weiterzuleiten. Die Brücke 1182 kann eine dichte Zwischenverbindungsstruktur sein, die einen Weg für elektrische Signale bietet. Die Brücke 1182 kann ein Brückensubstrat umfassen, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Merkmale zur elektrischen Weiterleitung können auf dem Brückensubstrat ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen der Logik 1172, 1174 bereitzustellen.
  • Wenngleich zwei Logikeinheiten 1172, 1174 und eine Brücke 1182 veranschaulicht sind, können hierin beschriebene Ausführungsformen mehr oder weniger Logikeinheiten auf einem oder mehreren Chips umfassen. Der eine oder die mehreren Chips können durch null oder mehr Brücken verbunden sein, weil die Brücke 1182 entfallen kann, wenn die Logik auf einem einzelnen Chip enthalten ist. Alternativ dazu können mehrere Chips oder Logikeinheiten durch eine oder mehrere Brücken verbunden sein. Außerdem können mehrere Logikeinheiten, Chips und Brücken in anderen möglichen Konfigurationen einschließlich dreidimensionaler Konfigurationen miteinander verbunden sein.
  • 11C zeigt eine Baugruppenanordnung 1190, die mehrere Einheiten von Hardware-Logik-Chiplets umfasst, die mit einem Substrat 1180 (z. B. einem Basis-Chip) verbunden sind. Eine Grafikverarbeitungseinheit, ein Parallelprozessor und/oder ein Rechenbeschleuniger, wie sie hierin beschrieben sind, können aus verschiedenen Silizium-Chiplets zusammengesetzt sein, die separat hergestellt werden. In diesem Zusammenhang ist ein Chiplet eine zumindest teilweise verpackte integrierte Schaltung, die unterschiedliche Logikeinheiten umfasst, die mit anderen Chiplets zu einer größeren Baugruppe zusammengesetzt werden können. Eine vielfältige Menge von Chiplets mit unterschiedlicher IP-Kern-Logik kann zu einer einzigen Vorrichtung zusammengesetzt werden. Zusätzlich können die Chiplets unter Verwendung der aktiven Interposer-Technologie in einen Basis-Chip oder ein Basis-Chiplet integriert werden. Die hier beschriebenen Konzepte ermöglichen die Verbindung und Kommunikation zwischen den verschiedenen Formen von IP innerhalb der GPU. IP-Kerne können unter Verwendung verschiedener Prozesstechnologien hergestellt und während der Herstellung zusammengesetzt werden, wodurch die Komplexität des Zusammenführens mehrerer IPs, insbesondere auf einem großen SoC mit IPs mehrerer Richtungen, zu demselben Herstellungsprozess vermieden wird. Durch die Verwendung mehrerer Prozesstechnologien wird die Markteinführungszeit verkürzt und eine kostengünstige Möglichkeit zum Erstellen mehrerer Produkt-SKUs bereitgestellt. Darüber hinaus können die verstreuten IPs unabhängig voneinander mit Energie versorgt werden. Komponenten, die für eine bestimmte Arbeitslast nicht verwendet werden, können ausgeschaltet werden, wodurch der Gesamtenergieverbrauch verringert wird.
  • Die Hardware-Logik-Chiplets können spezielle Hardware-Logik-Chiplets 1172, Logik- oder E/A-Chiplets 1174 und/oder Speicher-Chiplets 1175 umfassen. Die Hardware-Logik-Chiplets 1172 und Logik- oder E/A-Chiplets 1174 können zumindest teilweise in konfigurierbarer Logik oder Logik-Hardware mit fester Funktionalität implementiert sein und können einen oder mehrere Teile eines der Prozessorkerne, Grafikprozessoren, Parallelprozessoren oder anderer Beschleunigervorrichtungen, die hierin beschrieben sind, umfassen. Die Speicher-Chiplets 1175 können DRAM-Speicher (z. B. GDDR, HBM) oder Cache-Speicher (SRAM) sein.
  • Jedes Chiplet kann als separater Halbleiterchip hergestellt und über eine Zwischenverbindungsstruktur 1173 mit dem Substrat 1180 gekoppelt werden. Die Zwischenverbindungsstruktur 1173 kann dazu ausgelegt sein, elektrische Signale zwischen den verschiedenen Chiplets und der Logik innerhalb des Substrats 1180 zu leiten. Die Zwischenverbindungsstruktur 1173 kann Zwischenverbindungen wie Kontakthügel oder Kontaktsäulen umfassen, ist aber nicht darauf beschränkt. In einigen Ausführungsformen kann die Zwischenverbindungsstruktur 1173 dazu ausgelegt sein, elektrische Signale wie beispielsweise Eingangs-/Ausgangssignale (E/A-Signale) und/oder Leistungs- oder Massesignale, die dem Betrieb der Logik-, E/A- und Speicher-Chiplets zugeordnet sind, zu leiten.
  • In einigen Ausführungsformen ist das Substrat 1180 ein Laminatsubstrat auf Epoxidbasis. Das Substrat 1180 kann in anderen Ausführungsformen andere geeignete Arten von Substraten umfassen. Die Baugruppenanordnung 1190 kann über eine Baugruppenzwischenverbindung 1183 mit anderen elektrischen Vorrichtungen verbunden sein. Die Baugruppenzwischenverbindung 1183 kann mit einer Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale zu anderen elektrischen Vorrichtungen wie einer Hauptplatine, einem anderen Chipsatz oder einem Mehrchipmodul zu leiten.
  • In einigen Ausführungsformen können ein Logik- oder E/A-Chiplet 1174 und ein Speicher-Chiplet 1175 über eine Brücke 1187 elektrisch gekoppelt sein, die dazu ausgelegt ist, elektrische Signale zwischen dem Logik- oder E/A-Chiplet 1174 und einem Speicher-Chiplet 1175 zu leiten. Die Brücke 1187 kann eine dichte Zwischenverbindungsstruktur sein, die eine Route für elektrische Signale bereitstellt. Die Brücke 1187 kann ein Brückensubstrat aus Glas oder einem geeigneten Halbleitermaterial umfassen. Auf dem Brückensubstrat können elektrische Leitungsmerkmale ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen dem Logik- oder E/A-Chiplet 1174 und einem Speicher-Chiplet 1175 bereitzustellen. Die Brücke 1187 kann auch als Siliziumbrücke oder Zwischenverbindungsbrücke bezeichnet werden. Beispielsweise ist die Brücke 1187 in einigen Ausführungsformen eine eingebettete Mehrchip-Zwischenverbindungsbrücke (EMIB). In einigen Ausführungsformen kann die Brücke 1187 einfach eine direkte Verbindung von einem Chiplet zu einem anderen Chiplet sein.
  • Das Substrat 1180 kann Hardwarekomponenten für E/A 1191, Cache-Speicher 1192 und andere Hardware-Logik 1193 aufwiesen. Eine Struktur 1185 kann in das Substrat 1180 eingebettet sein, um die Kommunikation zwischen den verschiedenen Logik-Chiplets und der Logik 1191, 1193 innerhalb des Substrats 1180 zu ermöglichen. In einer Ausführungsform können die E/A 1191, die Struktur 1185, der Cache, die Brücke und andere Hardware-Logik 1193 in einen Basis-Chip integriert sein, der auf das Substrat 1180 geschichtet ist.
  • In verschiedenen Ausführungsformen kann eine Baugruppenanordnung 1190 eine kleinere oder eine größere Anzahl von Komponenten und Chiplets aufweisen, die durch eine Struktur 1185 oder eine oder mehrere Brücken 1187 miteinander verbunden sind. Die Chiplets innerhalb der Baugruppenanordnung 1190 können in einer 3D- oder 2,5D-Anordnung angeordnet sein. Im Allgemeinen können Brückenstrukturen 1187 verwendet werden, um eine Punkt-zu-Punkt-Zwischenverbindung beispielsweise zwischen Logik- oder E/A-Chiplets und Speicher-Chiplets zu ermöglichen. Die Struktur 1185 kann verwendet werden, um die verschiedenen Logik- und/oder E/A-Chiplets (z. B. Chiplets 1172, 1174, 1191, 1193) mit anderen Logik- und/oder E/A-Chiplets zu verbinden. In einer Ausführungsform kann der Cache-Speicher 1192 innerhalb des Substrats als globaler Cache für die Baugruppenanordnung 1190, als Teil eines verteilten globalen Caches oder als dedizierter Cache für die Struktur 1185 fungieren.
  • 11D zeigt eine Baugruppenanordnung 1194 mit austauschbaren Chiplets 1195 gemäß einer Ausführungsform. Die austauschbaren Chiplets 1195 können zu standardisierten Schlitzen auf einem oder mehreren Basis-Chiplets 1196, 1198 zusammengesetzt werden. Die Basis-Chiplets 1196, 1198 können über eine Brückenzwischenverbindung 1197 gekoppelt werden, die den anderen hier beschriebenen Brückenzwischenverbindungen ähnlich sein kann und beispielsweise eine EMIB sein kann. Speicher-Chiplets können auch über eine Brückenzwischenverbindung mit Logik- oder E/A-Chiplets verbunden sein. E/A- und Logik-Chiplets können über eine Zwischenverbindungsstruktur kommunizieren. Die Basis-Chiplets können jeweils einen oder mehrere Steckplätze in einem standardisierten Format für Logik oder E/A oder Speicher/Cache unterstützen.
  • In einer Ausführungsform können SRAM- und Leistungsabgabeschaltungen in einem oder mehreren der Basis-Chiplets 1196, 1198 hergestellt werden, die im Vergleich zu den austauschbaren Chiplets 1195, die auf den Basis-Chiplets gestapelt werden, unter Verwendung einer anderen Prozesstechnologie hergestellt werden können. Beispielsweise können die Basis-Chiplets 1196, 1198 unter Verwendung einer größeren Prozesstechnologie hergestellt werden, während die austauschbaren Chiplets unter Verwendung einer kleineren Prozesstechnologie hergestellt werden können. Eines oder mehrere der austauschbaren Chiplets 1195 können Speicher-Chiplets (z. B. DRAM-Chiplets) sein. Für die Baugruppenanordnung 1194 können basierend auf der Leistungsaufnahme und/oder Rechenleistung, die für das Produkt angestrebt wird, das die Baugruppenanordnung 1194 verwendet unterschiedliche Speicherdichten ausgewählt werden. Zudem können Logik-Chiplets mit einer anderen Anzahl von Typen von Funktionseinheiten zum Zeitpunkt der Montage basierend auf der Leistungsaufnahme und/oder Rechenleistung des Produkts ausgewählt werden. Zusätzlich können Chiplets, die IP-Logik-Kerne unterschiedlicher Typen enthalten, in die austauschbaren Chiplet-Steckplätze eingefügt werden, wodurch Hybridprozessorentwürfe ermöglicht werden, die IP-Blöcke verschiedener Technologien mischen und angleichen können.
  • Beispielhafte integrierte Ein-Chip-System-Schaltung
  • 12-13 zeigen beispielhafte integrierte Schaltungen und zugeordnete Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne gemäß verschiedenen hierin beschriebenen Ausführungsformen hergestellt werden können. Zusätzlich zu dem Dargestellten können andere Logik und Schaltungen einschließlich zusätzlicher Grafikprozessoren/-kerne, Peripherieschnittstellencontroller oder Allzweck-Prozessorkerne enthalten sein.
  • 12 ist ein Blockdiagramm, das eine beispielhafte integrierte Ein-Chip-System-Schaltung 1200, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform zeigt. Die beispielhafte integrierte Schaltung 1200 weist einen oder mehrere Anwendungsprozessoren 1205 (z. B. CPUs) und mindestens einen Grafikprozessor 1210 auf und kann zusätzlich einen Bildprozessor 1215 und/oder einen Videoprozessor 1220 aufweisen, von denen jeder ein modularer IP-Kern aus derselben oder mehreren verschiedenen Entwurfseinrichtungen sein kann. Die integrierte Schaltung 1200 weist eine Peripherie- oder Buslogik auf, die einen USB-Controller 1225, einen UART-Controller 1230, einen SPI/SDIO-Controller 1235 und einen I2S/I2C-Controller 1240 aufweist. Außerdem kann die integrierte Schaltung eine Anzeigevorrichtung 1245 aufweisen, die mit einem Controller für die hochauflösende Multimedia-Schnittstelle (HDMI-Controller) 1250 und einer Mobilindustrie-Prozessorschnittstellen-Anzeigeschnittstelle (MIPI-Anzeigeschnittstelle) 1255 gekoppelt ist. Die Speicherung kann durch ein Flash-Speicher-Untersystem 1260 bereitgestellt sein, das einen Flash-Speicher und einen Flash-Speichercontroller aufweist. Die Speicherschnittstelle kann über einen Speichercontroller 1265 für den Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt sein. Einige integrierte Schaltungen weisen zusätzlich eine eingebettete Sicherheitsmaschine 1270 auf.
  • 13-14 sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung innerhalb eines SoC gemäß hierin beschriebenen Ausführungsformen zeigen. 13 zeigt einen beispielhaften Grafikprozessor 1310 einer integrierten Ein-Chip-System-Schaltung, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform. 14 zeigt einen zusätzlichen beispielhaften Grafikprozessor 1340 einer integrierten Ein-Chip-System-Schaltung, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform. Der Grafikprozessor 1310 von 13 ist ein Beispiel eines Grafikprozessorkerns mit niedriger Leistungsaufnahme. Der Grafikprozessor 1340 von 14 ist ein Beispiel eines Grafikprozessorkerns mit höherer Rechenleistung. Die Grafikprozessoren 1310, 1340 können jeweils Varianten des Grafikprozessors 1210 von 12 sein.
  • Wie es in 13 gezeigt ist, weist der Grafikprozessor 1310 einen Vertexprozessor 1305 und einen oder mehrere Fragmentprozessoren 1315A-1315N (z. B. 1315A, 1315B, 1315C, 1315D, bis 1315N-1, 1315N) auf. Der Grafikprozessor 1310 kann unterschiedliche Schattiererprogramme über eine separate Logik ausführen, so dass der Vertexprozessor 1305 dazu optimiert ist, Operationen für Vertexschattiererprogramme auszuführen, während der eine oder die mehreren Fragmentprozessoren 1315A-1315N Fragmentschattierungsoperationen (z. B. Pixelschattierungsoperationen) für Fragment- oder Pixelschattiererprogramme ausführen. Der Vertexprozessor 1305 führt die Vertexverarbeitungsstufe der 3D-Grafik-Pipeline durch und erzeugt Primitiv- und Vertexdaten. Der eine oder die mehreren Fragmentprozessoren 1315A-1315N verwenden Primitiv- und Vertexdaten, die durch den Vertexprozessor 1305 erzeugt werden, um einen Frame-Puffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. In einer Ausführungsform sind der eine oder die mehreren Fragmentprozessoren 1315A-1315N dazu optimiert, Fragmentschattiererprogramme auszuführen, die in der OpenGL-API bereitgestellt sind und verwendet werden können, um ähnliche Operationen durchzuführen wie ein Pixelschattiererprogramm, das in der Direct-3D-API bereitgestellt ist.
  • Der Grafikprozessor 1310 weist zusätzlich eine oder mehrere Speicherverwaltungseinheiten (MMUs) 1320A-1320B, Cache(s) 1325A-1325B und Schaltungszwischenverbindung(en) 1330A-1330B auf. Die eine oder mehreren MMUs 1320A-1320B stellen eine Virtuell-zu-Physisch-Adresszuordnung für den Grafikprozessor 1310 einschließlich des Vertexprozessors 1305 und/oder des einen oder der mehreren Fragmentprozessoren 1315A-1315N bereit, die auf Vertex- oder Bild-/Texturdaten, die in dem Speicher gespeichert sind, zusätzlich zu Vertex- oder Bild-/Texturdaten, die in dem einen oder den mehreren Caches 1325A-1325B gespeichert sind, verweisen kann. In einer Ausführungsform können die eine oder mehreren MMU(s) 1320A-1320B mit anderen MMUs innerhalb des Systems einschließlich einer oder mehrerer MMUs, die dem einen oder den mehreren Anwendungsprozessoren 1205, Bildprozessor 1215 und/oder Videoprozessor 1220 von 12 zugeordnet sind, synchronisiert sein, so dass jeder Prozessor 1205-1220 an einem gemeinsam genutzten oder vereinheitlichten virtuellen Speichersystem teilnehmen kann. Die eine oder mehreren Schaltungszwischenverbindungen 1330A-1330B ermöglichen es dem Grafikprozessor 1310 gemäß Ausführungsformen mit anderen IP-Kernen innerhalb des SoC eine Schnittstelle zu bilden, entweder über einen internen Bus des SoC oder über eine direkte Verbindung.
  • Wie es in 14 gezeigt ist, umfasst der Grafikprozessor 1340 die eine oder die mehreren MMU(s) 1320A-1320B, Caches 1325A-1325B und Schaltungszwischenverbindungen 1330A-1330B des Grafikprozessors 1310 von 13A. Der Grafikprozessor 1340 umfasst einen oder mehrere Schattiererkerne 1355A-1355N (z. B. 1455A, 1355B, 1355C, 1355D, 1355E, 1355F bis 1355N-1 und 1355N), was eine vereinheitlichte Schattiererkernarchitektur bietet, in der ein einzelner Kern oder Typ oder Kern alle Typen von programmierbarem Schattierercode einschließlich Schattiererprogrammcode zum Implementieren von Vertexschattierern, Fragmentschattierern und/oder Rechenschattierern ausführen kann. Die genaue Anzahl von vorhandenen Schattiererkernen kann zwischen Ausführungsformen und Implementierungen variieren. Außerdem umfasst der Grafikprozessor 1340 einen Zwischenkernaufgabenverwalter 1345, der als ein Strangabfertiger fungiert, um Ausführungsstränge an einen oder mehrere Schattiererkerne 1355A-1355N zu entsenden, und eine Kachelungseinheit 1358 zum Beschleunigen von Kachelungsoperationen für kachelbasiertes Rendern, wobei Renderoperationen für eine Szene in Bildraum unterteilt werden, um zum Beispiel eine lokale räumliche Kohärenz innerhalb einer Szene zu nutzen oder um die Verwendung von internen Caches zu optimieren.
  • Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel
  • Während Fern-Grafikserver Bildframes viel schneller als die Spielvorrichtung eines typischen Anwenders rendern können, gibt es andere Herausforderungen, die das Echtzeit-Spiel-Anwendererlebnis beeinträchtigen können, wie z. B. die durch das Netz verursachte Latenz und Qualitätsschwankungen aufgrund der Datenkomprimierung. Für bestimmte Arten von Spielen, wie z. B. Spiele mit erweiterter Realität (AR-Spiele) und virtueller Realität (VR-Spiele), sind leistungsstarke Netzplattformen erforderlich, um die benötigte Latenz zu erzielen.
  • Ausführungsformen der Erfindung verbessern die Latenz, indem sie die Arbeitslast zwischen der lokalen GPU (z. B. für Rechenoperationen mit geringer Latenz) und einem Auslagern anderer Arbeiten an Fernverarbeitungsbetriebsmittel aufteilen, ohne dass die Grafikanwendung die Fernverbindung verwalten muss.
  • In einer Ausführungsform wird die Remote-GPU-Unterstützung als virtueller Grafikadapter in dem Betriebssystem dargestellt (z. B. als eine oder mehrere „Geister“-GPUs). Aufgrund dieser Integration können Anwendungen wie bei physischen GPUs die aktuellen Grafik- und Computer-APIs verwenden, um auf die Geister-GPUs zuzugreifen. Lokale GPUs können vollständig ausgenutzt werden, wenn ausreichend lokale Berechnungen verfügbar sind, während in einer Ausführungsform zusätzliche „Geister“-GPUs aktiviert werden, wenn zusätzliche Berechnungen erforderlich sind.
  • 15A zeigt eine spezielle Implementierung, bei der die Grafikverarbeitungsbetriebsmittel 1500 mehrere lokale physische GPUs 1505-1506 und mehrere Geister-GPUs 1515-1517, die den Client 1502 über ein Netz 1592 mit Fernverarbeitungsbetriebsmitteln 1525 koppeln, umfassen. Es ist zu beachten, dass die Geister-GPU 1560 verschiedene Arten von Pipelines repräsentieren kann, einschließlich, aber nicht beschränkt auf Rasterisierungspipelines, Pipelines für maschinelles Lernen, Strahlverfolgungspipelines, Medienpipelines, Kopierpipelines und Rechenpipelines. Obwohl sich bestimmte Beschreibungen nachstehend auf bestimmte Arten von Pipelines konzentrieren, sind die zugrundeliegenden Prinzipien der Erfindung nicht auf eine bestimmte Art von Grafikverarbeitungsbetriebsmitteln beschränkt. Darüber hinaus können die Fernverarbeitungsbetriebsmittel 1525 Allzweckverarbeitungsbetriebsmittel wie CPUs (z. B. Xeon-CPUs, Core-i7-CPUs usw.) und anwendungsspezifische Beschleuniger umfassen. Beispielsweise können die Geister-GPUs 1517-1515 Verarbeitungsfähigkeiten repräsentieren, die die physischen GPUs 1505-1506 nicht nativ unterstützen (z. B. Strahlverfolgungs fähigkeiten).
  • In einer Implementierung sind sowohl die Geister-GPUs 1515-1517 als auch die physischen GPUs 1505-1506 für die Anwendung 1505 und/oder einen Geister-GPU-bewussten Planer 1510 freigelegt. In einer Ausführungsform verwaltet die Anwendung 1505 mehrere Befehlspuffer 1511, die jeweils Arbeit für einen anderen Strang enthalten können. Der Geister-GPU-bewusste Planer 1510 (der eine separate Komponente sein kann, die von mehreren Anwendungen gemeinsam genutzt wird, anstatt in eine Anwendung integriert zu sein, wie es in 15 dargestellt ist) plant die Grafikarbeit für die physischen GPUs 1505-1506 und die Geister-GPUs 1515-1517 basierend auf den Grafikverarbeitungsfähigkeiten und -eigenschaften der Geister-GPUs und physischen GPUs (z. B. Unterschiede in der Latenz, der Grafikverarbeitungsbandbreite usw.) auf intelligente Weise. Wenn beispielsweise die physischen GPUs 1505-1506 über ausreichende Grafikverarbeitungsbetriebsmittel verfügen, um die erforderliche Grafikarbeit angemessen auszuführen, kann der Geister GPU-bewusste Planer alle Arbeiten an die physischen GPUs 1505-1506 senden.
  • In einer Ausführungsform kann mindestens ein Teil der Planung von den Fernverarbeitungsbetriebsmitteln (RPR) 1525 ausgeführt werden. Wie es in 15B dargestellt ist, sendet der lokale Planer 1510 eine Arbeitsanforderung, die einen Stapel verschiedener Typen von Arbeit umfasst, an die Geister-GPU 1560, die die Arbeit an die Fernverarbeitungsbetriebsmittel 1525 weiterleitet. In einer Ausführungsform enthält die Anforderung einen Satz von Parametern und/oder Anforderungen für die Arbeit, wie beispielsweise eine minimale akzeptable Latenz, Auflösung, Genauigkeit usw.
  • Ein Betriebsmittelmanager 1550 sendet eine Bestätigung an die Geister-GPU 1560, die angibt, dass (1) er die gesamte Arbeit gemäß den spezifizierten Parametern/Anforderungen verarbeiten wird; (2) er einen Teil der Arbeit gemäß den angegebenen Parametern/Anforderungen verarbeiten wird; oder (3) er keine der Arbeiten gemäß den Parametern/Anforderungen verarbeiten kann. Für die Arbeit, die angenommen wurde, plant der Betriebsmittelmanager 1550 die Arbeit über einen geeigneten Satz von Verarbeitungspipelines 1551-1556 hinweg (nämlich basierend auf dem Typ der angeforderten Arbeit) und überträgt die Ergebnisse nach Abschluss zurück an die Geister-GPU 1560. In dem in 15B gezeigten Beispiel umfassen die Verarbeitungspipelines Rasterisierungspipelines 1551 zum Durchführen einer Rasterisierung von Grafikobjekten und/oder zugehörigen Operationen; Pipelines für maschinelles Lernen 1552 zum Durchführen von Operationen maschinellen Lernens (z. B. zusammengelegten Multiplikations-Akkumulations-Operationen mit gemischter Genauigkeit); Strahlverfolgungspipelines 1553 zum Durchführen von Strahlverfolgungsoperationen (z. B. Strahldurchquerung, Schnitt, globale Beleuchtung usw.); Medienpipelines 1554 zur Medienverarbeitung (z. B. Videocodierung/-decodierung); Rechenpipelines 1555 für parallele Allzweck-Rechenoperationen; und Kopierpipelines 1556 zum Durchführen von Bitblockübertragungen und anderen Kopieroperationen.
  • Somit wird in der in 15B gezeigten Ausführungsform mindestens ein Teil der Arbeitsplanung auf den RPR 1525 ausgeführt. Obwohl in 15B nur eine einzige Geister-GPU 1560 gezeigt ist, können mehrere solcher Geister-GPUs und zugehörige Fernverarbeitungsbetriebsmittel genutzt werden. Beispielsweise kann jede der Geister-GPUs 1515-1517 in 15A einem anderen Satz von Verarbeitungsbetriebsmitteln in einem anderen (oder demselben) Cloud-Dienst, der RPRs bereitstellt, zugeordnet sein.
  • Unter erneuter Bezugnahme auf 15A lagert der Geister-GPU-bewusste Planer 1510 unter Umständen, unter denen die physischen GPUs 1505-1506 die Grafikarbeit nicht angemessen verarbeiten können, einige Grafikarbeiten 1561 auf die Geister-GPUs aus. In diesem Fall kann der Planer 1510 die Grafikarbeit unterteilen, wobei die latenzempfindliche Arbeit 1560 auf den physischen GPUs 1560 (die, da sie lokal sind, keine netzbedingte Latenz aufweisen) geplant werden und andere Grafikarbeiten auf den Geister-GPUs 1515-1516 geplant werden.
  • In einer Ausführungsform werden die Geister-GPUs 1515-1517 während der Vorrichtungsaufzählungsphase für den Planer 1510/die Anwendung 1505 sichtbar gemacht. Der Planer 1510/die Anwendung 1505 ordnet dann Vorrichtungsinstanzen den Geister-GPUs 1515-1517 zu, und die Auslagerungsarbeit 1561 wird an diese Instanzen gesendet. Somit wird die „Cloud“-Komplexität der Geister-GPUs 1515-1517 von den Anwendungen weg abstrahiert.
  • Neue Entwicklungen in der Grafikverarbeitungstechnologie ermöglichen eine nahtlosere Integration mehrerer GPUs. Beispielsweise legen neue APIs wie DX12 und Vulkan mehrere GPUs auf API-Ebene frei, wodurch die Anwendung 1505 die Flexibilität bekommt, die Arbeitslast mit einer viel feineren Körnigkeit aufzuteilen. Darüber hinaus bieten die neuen APIs Möglichkeiten für die Anwendung 1505, Befehlspuffer effizienter zu verwalten, einschließlich asynchroner Befehlspuffererstellung, Aufzeichnung/Wiedergabe von Befehlspuffern und Bündeln. Diese Funktionen tragen dazu bei, die redundanten Befehlspuffererstellungen in früheren API-Modellen zu reduzieren.
  • 16 zeigt zusätzliche Einzelheiten einer Ausführungsform, bei der die Anwendung 1505 mehrere Stränge verwaltet, von denen jeder einem von mehreren Befehlspuffern 1611A-D zugeordnet ist. Der Geister-GPU-bewusste Planer 1510 weist Befehle aus den Befehlspuffern 1611A-D jeweils Befehlswarteschlangen 1615-1617 der Geister-GPUs 1515-1517 und einer Befehlswarteschlange 1605 einer auf dem Client 1502 installierten physischen GPU 1505 zu. Wie erwähnt versucht der Geister-GPU-bewusste Planer 1510, latenzempfindliche Arbeit an die Befehlswarteschlange 1605 der physischen GPU 1505 zu senden. In einer Ausführungsform wird die an die Geister-GPU-Befehlswarteschlangen 1615-1617 gesendete Arbeit von den Geister-GPUs 1515-1517 an Fernverarbeitungsbetriebsmittel übertragen, bei denen die Arbeitslasten in einer Anordnung von GPUs, CPUs und/oder FPGAs ausgeführt werden können. Die Ergebnisse werden über die Geister-GPUs 1515-1517 auf der Clientseite an die Anwendung 1505 und/oder die physische GPU 1505 zurückgesendet. Die Ergebnisse werden dann verwendet, um den endgültig gerenderten Frame in einem Framepuffer auf der physischen GPU 1505 zusammenzustellen, und sobald dies abgeschlossen ist, wird die physische GPU 1505 angewiesen, den Frame auf der lokalen Anzeige 1590 anzuzeigen.
  • In einer Ausführungsform wird einer Anwendung 1505 die vollständige Sichtbarkeit aller GPUs, einschließlich virtueller oder „Geister“-GPUs während der GPU-Aufzählungsphase gegeben. Die Anwendung kann dann Vorrichtungsobjekte auf diesen Geister-GPUs erstellen und auf diese als reguläre GPUs zugreifen. In einer Ausführungsform sendet die Anwendung Arbeitslasten an die Geister-GPU-Instanzen, um durch Abfragen der Ausführungszeit die Gesamtlatenz zu bewerten. Basierend auf der gemessenen Latenz kann die Anwendung die Arbeitslast auf verschiedene GPUs aufteilen und die lokale GPU 1505 verwenden, um den endgültigen Frame zu erstellen. Die von cloudbasierten Grafikverarbeitungsbetriebsmitteln 1525 erzeugten Ergebnisse werden an die virtuellen Adapter zurückgesendet, die den Geister-GPUs zugeordnet sind. Die Anwendung 1505 kombiniert die Ergebnisse mit Ergebnissen, die von der lokalen GPU 1505 erzeugt werden, auf der der endgültige Frame erstellt wird.
  • Alternativ ist sich die Anwendung 1505 in einer Implementierung der heterogenen Fähigkeiten der physischen und virtuellen GPUs nicht bewusst und ein Geister-GPU-bewusster Planer führt die Planung von Strängen im Namen der Anwendung durch.
  • Unabhängig davon, welche Entität die Planung durchführt, können in einer Ausführungsform bestimmte Arten von latenztoleranten Aufgaben/Strängen auf die Geister-GPUs ausgelagert werden, während latenzunempfindliche Aufgaben/Stränge zur Ausführung auf den physischen GPUs in die Warteschlange gestellt werden. Diese latenztoleranten Aufgaben/Stränge umfassen (ohne darauf beschränkt zu sein) Aufgaben, die nicht Frame für Frame aktualisiert werden. Ein Beispiel ist die Verwendung der Fernverarbeitungsbetriebsmittel zum Rendern der dynamischen Reflexionsabbildung (z. B. Kubusabbildungs-Rendern vom Standort eines Objekts aus), die Spielemaschinen normalerweise nicht Frame für Frame aktualisieren, während die lokale GPU den Rest der Durchgänge rendert, um den endgültigen Frame zusammenzustellen.
  • Das Folgende sind Beispiele für Rendertechniken, die latenztolerant sind und daher gemäß den Ausführungsformen der Erfindung auf Geister-GPUs ausgelagert werden können:
    • • Dynamische Umgebungsabbildung (Reflexionen/Berechnungen)
    • • Indirekte Beleuchtung/globale Beleuchtung (z. B. Szenarien mit festem Licht)
    • • Traditionelle Spielphysik (Kaustik, Partikelsimulationen, Rauch, Stoffsimulation, Haarsimulation)
    • • Hybride Strahlverfolgung
    • • KI-basierte Ansätze (z. B. Charakteranimation, Spielphysik durch Inferenz)
    • • KI-basierte Texturerzeugung, Modellerzeugung, Gelände-/Kartenerzeugung
    • • Echte räumliche Audioverarbeitung
    • • KI-basierte Stilübertragung (z. B. wird eine GPU zum Rendern und eine andere GPU zur Stilübertragung verwendet)
    • • Double-Rendern
  • Das Diagramm in 17 zeigt ein Szenario, in dem Befehlspuffer 1611A-D parallel zu jeder GPU 1515-1517, 1505 separat gesendet und von der lokalen GPU 1505 synchronisiert werden. Die resultierende Frame-Zeit 1700, um den endgültigen Frame unter Verwendung von Ergebnissen aus den Geister-GPUs 1515-1517 zu erzeugen, ist ebenfalls gezeigt.
  • Geister-GPUs, wie sie hierin beschrieben sind, können auch von vorhandenen Anwendungen, Rahmen für tiefes Lernen und Renderanwendungen verwendet werden, um die Fern-GPU-Funktionen zu nutzen, indem die GPU-Arbeitslasten an die virtuellen Grafikadapter der Geister-GPUs gesendet werden.
  • In einer Ausführungsform wird ein Profil erzeugt, das die Anforderungen und Fähigkeiten für die „Geister-GPUs“ spezifiziert, die Latenzwerte (z. B. minimale/maximale Latenzwerte), Bandbreite, Berechnung, Kosten und Leistung umfassen können. Sobald das Profil festgelegt ist, kann der Geister-GPU-bewusste Planer 1510 angesichts der Fähigkeiten und Einschränkungen dieser GPUs Arbeit an edgebasierte bzw. cloudbasierte „Geister-GPUs“ senden.
  • Obwohl eine 1:1-Beziehung von Geister-GPU:Cloud-GPU für viele Arbeitslasten und Programmiermodelle geeignet sein kann, kann die cloudseitige Aufgabenverteilung andere Zuweisungen zum Planen von Arbeiten auf den verfügbaren Computern und Betriebsmitteln in der Cloud vornehmen. Die Zuweisungen können basierend auf den Merkmalen der auszuführenden Arbeit dynamisch durchgeführt werden. Somit kann in einigen Ausführungsformen eine 1:N-Beziehung (Geister-GPU: Cloud-GPU) existieren, wobei N ein beliebiger Wert ist, der Bruchteile einschließt (z. B. um einen virtualisierten Teil einer GPU zuzuweisen).
  • In einer Ausführungsform liefert die Anwendung einen Abhängigkeitsgraphen an die Geister-GPU-Befehlswarteschlange oder einen indirekten Ausführungskernel zum Erzeugen von cloudseitigen Befehlspuffern, die gegen eine Cloud-Warteschlange gesendet werden können. Diese Techniken ermöglichen entweder eine herstellerspezifische Verteilung (basierend auf Kacheln, geteiltem Rendern, Rendern mit abwechselnden Frames usw.) oder ein anwendergeführtes Übermittlungsschema zum Erzeugen und Konsumieren von Arbeiten in der Cloud.
  • 18 zeigt eine Ausführungsform für die Erstellung und Verwendung von Geister-GPUs auf einem Client-Computer. Ein(e) GPU-Konfigurations-und-SteuerModul oder -Anwendung 1801 (z. B. eine Geister-GPU-Erstelleranwendung) ermöglicht es dem Anwender, Geister-GPUs für einen Geister-GPU-Generator 1802 anzugeben, der mit dem Betriebssystem 1803 kommuniziert, um drei Geister-GPUs in dem System zu registrieren. In einer Ausführungsform weist jede Geister-GPU eine Verbindung zu dem Cloud-Dienst auf. Eine registrierte Geister-GPU wird jedoch von dem Vorrichtungsmanager 1810 des Clients als eine weitere physische GPU behandelt. In diesem Beispiel werden drei Geister-GPU-Adapter 1811 in dem Vorrichtungsmanager 1810 angezeigt.
  • Wenn eine Anwendung 1505 Zugriff auf Grafikverarbeitungsbetriebsmittel benötigt, kann die Anwendung alle verfügbaren GPUs einschließlich der Geister-GPUs 1811 während der GPU-Aufzählungsphase 1804 betrachten. Die Anwendung 1505 kann nun Vorrichtungsobjekte auf diesen Geister-GPUs 1811 erstellen und auf diese als reguläre GPUs zugreifen. Die Anwendung kann auch Arbeitslasten an die Geister-GPU-Instanzen senden, um durch Abfragen der Ausführungszeit die Gesamtlatenz zu bewerten.
  • Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in 19 dargestellt. Das Verfahren kann im Zusammenhang mit den oben beschriebenen Architekturen implementiert werden, ist jedoch nicht auf eine bestimmte Systemarchitektur beschränkt.
  • Bei 1901 werden eine oder mehrere Geister-GPUs auf einem System, das eine oder mehrere physische GPUs aufweist, registriert und konfiguriert. Wie es bereits erwähnt wurde, muss möglicherweise ein virtueller Adapter oder Treiber installiert werden, der den Geister-GPUs zugeordnet ist, so dass sie als echte GPUs in dem System erscheinen.
  • Bei 1902 werden die Geister-GPUs und die physischen GPUs in dem System aufgelistet (z. B. als Antwort auf eine Anwendung). Bei 1903 wird eine Anwendung mit mehreren Grafiksträngen ausgeführt. Wie erwähnt kann in einigen Implementierungen jedem Grafikstrang eine eigene Befehlswarteschlange zugewiesen werden, die einer bestimmten GPU zugewiesen werden kann.
  • Bei 1904 werden Ausführungsparameter der Grafikstränge im Hinblick auf Ausführungsmetriken, die den Geister-GPUs zugeordnet sind, bewertet. Beispielsweise können die Ausführungsparameter eine Angabe von Anforderungen der Grafikstränge bezüglich maximaler Latenz und/oder Bandbreite enthalten und die Geister-GPU-Metriken können auch Daten enthalten, die sich auf Latenz und/oder Bandbreite beziehen (z. B. die durchschnittliche Latenz/Bandbreite, die aktuelle Latenz/Bandbreite basierend auf den aktuellen Netzbedingungen usw.).
  • Bei 1905 werden basierend auf dieser Bewertung bestimmte Grafikstränge für die Ausführung auf den Geister-GPUs geplant. Wenn die Geister-GPUs beispielsweise in der Lage sind, Ergebnisse für Stränge mit einer akzeptablen Latenz zu erzeugen, können diese Stränge auf den Geister-GPUs geplant werden, wodurch die Arbeit aus der physischen GPU ausgelagert wird. Die verbleibenden Stränge werden auf der physischen GPU geplant.
  • Bei 1906 werden die Geister-GPU-Stränge in einen bestimmten Cloud-Dienst ausgelagert, wo sie von Grafikverarbeitungsbetriebsmitteln in dem Cloud-Dienst ausgeführt werden. Wie erwähnt können die Grafikverarbeitungsbetriebsmittel spezielle Hardware (z. B. Strahldurchquerungs-/Schnitt-Hardware, Tensorausführungs-Hardware, Hardware für globale Beleuchtung usw.) und CPUs, GPUs und/oder FPGAs umfassen. Die Ergebnisse werden von dem Cloud-Dienst an die Geister-GPUs geliefert, die die Ergebnisse an die Anwendung und/oder die physische GPU weiterleiten. Bei 1907 verwendet die physische GPU die Ergebnisse, um den endgültigen Frame zu erzeugen, der auf der lokalen Anzeigevorrichtung angezeigt wird.
  • Ein Vorteil, den diese Ausführungsformen bieten, besteht darin, dass einige Aufgaben wie Strahlverfolgung, die häufig auf triviale Weise auf Rechenbetriebsmittel aufgeteilt werden können, jetzt eine logische Entität in der Cloud haben, um den Lastausgleich zu erleichtern. In Szenarien mit geteiltem Rendern muss die Anwendung die Fernrenderunterstützung nicht kennen. Vielmehr muss sie nur wissen, dass die Geister-GPUs vorhanden sind, und die Fähigkeiten der Geister-GPUs verstehen (z. B. die Verarbeitungsmetriken, die verschiedenen Arten der Grafikverarbeitung zugeordnet sind, einschließlich der Latenz).
  • In einer Ausführungsform der Erfindung nutzt die Anwendung, die sich mehrerer GPUs bewusst ist, APIs wie DX12 oder Vulkan, um Befehlspuffer asynchron zu erstellen und sie an die jeweiligen GPUs (entweder lokale physische GPUs oder Geister-GPUs) zu senden.
  • Wie es in 20A dargestellt ist, kann eine mehrschichtige Architektur aus Geister-GPUs implementiert werden. Insbesondere greifen Clients 2010 basierend auf den Geister-GPU-Konfigurationen auf Verarbeitungsbetriebsmittel von Edge-Diensten 2020 zu, es oben beschrieben ist. In diesem Beispiel können die Clients 2010 lokale GPUs und Geister-GPUs oder nur Geister-GPUs (d. h. ohne lokale GPU-Hardware) umfassen. Wie sie hierin verwendet werden, umfassen „Edge“-Dienste Ferndienste, die hinsichtlich der Netzlatenz den Clients 2010 am nächsten sind (z. B. direkt innerhalb des Internetdienstanbieternetzes der Clients oder des 5G-Netzes im Fall von Mobilfunkanbietern gehostet werden). In dieser Ausführungsform umfassen die Edge-Dienste 2020 physische GPUs, können jedoch auch Geister-GPUs umfassen, die Fernverarbeitungsbetriebsmitteln innerhalb eines oder mehrerer Cloud-Dienste 2030 zugeordnet sind. Unter Verwendung dieser Architektur kann ein Betriebsmittelmanager innerhalb der Edge-Dienste 2020 eine Client-Anforderung auswerten, um zu bestimmen, ob er die Verarbeitung selbst durchführt oder die Verarbeitung auf Verarbeitungsbetriebsmittel innerhalb der Cloud-Dienste 2030 auslagert.
  • In jeder der oben beschriebenen Ausführungsformen können die „Geister-GPUs“ oder physischen GPUs Geister-xPUs oder physische xPUs sein, wobei xPU jede Form von Prozessor (z. B. CPUs, digitale Signalverarbeitungseinheiten, Tensorverarbeitungseinheiten, Strahlverfolgungsverarbeitungseinheiten, Vektorverarbeitungseinheiten usw.) zum Verarbeiten oder Auslagern jeglicher Art von Datenverarbeitungsarbeit an einen entfernten Prozessor bezeichnet. 20B zeigt eine Ausführungsform, in der Clients 2050 mit einer oder mehreren Geister-xPUs zum Auslagern von Arbeit und optional einer oder mehreren lokalen xPUs ausgestattet sind (d. h. der Client kann die physische Ausstattung zum Ausführen der Verarbeitungsarbeit haben oder auch nicht). In ähnlicher Weise umfassen die Edge-Dienste 2060 lokale xPUs und Geister-xPUs und weiter oben in der Hierarchie können Cloud-Dienste 2070 lokale xPUs und Geister-xPUs aufweisen. Beispielsweise weist in einer Ausführungsform eine Vektorverarbeitungseinheit (VPU) auf dem Client 2010 zusätzliche Geister xPUs zu, um Rechenarbeiten ähnlich wie die VPU auszuführen.
  • In einer Implementierung wird der Betriebsmittelmanager diese Bestimmung basierend auf den Parametern und/oder Latenzanforderungen vornehmen, die der Client-Anforderung zugeordnet sind. Wenn die Edge-Dienste 2020 beispielsweise die Anforderung innerhalb der angegebenen Latenz und gemäß den angegebenen Parametern verarbeiten können, geschieht dies, wenn das Auslagern der Anforderung an die Cloud-Dienste 2030 die Latenz überschreitet. Bestimmte Arten von Arbeiten, für die eine höhere Latenz akzeptabel ist und/oder für die spezielle Plattformen (z. B. Queantenrechenplattformen) erforderlich sind, können jedoch über Geister-GPUs, die auf den Edge-Diensten ausgebildet sind, auf die Cloud-Dienste 2030 ausgelagert werden. Auf diese Weise können mehrere Ebenen von Verarbeitungsbetriebsmitteln und Geister-GPUs ausgebildet werden, um Arbeit lokal zu verarbeiten und Arbeit auszulagern, die ausgelagert werden kann.
  • Zudem können zusätzliche Ebenen innerhalb der Wohnstätte des Anwenders ausgebildet sein. Beispielsweise kann ein leistungsfähiger Server in der Wohnstätte des Anwenders mehrere Clients bedienen. Dieser Server kann eine oder mehrere Geister-GPUs aufweisen, um die Arbeit an den Netzanbieter des Anwenders auszulagern. Der Netzanbieter kann die Gesamtheit oder einen Teil der Arbeit ausführen und bestimmte Arbeiten über seine eigenen Geister-GPUs an Cloud-Dienste auslagern. Schließlich kann jeder Cloud-Dienst selbst Geister-GPUs aufweisen, um die Arbeit auf andere Cloud-Dienste auszulagern.
  • Jeder Auslagerungsanforderung können verschiedene Parameter zugeordnet sein. Beispielsweise können die Kosten für die Verwendung von Fernverarbeitungsbetriebsmitteln in Kombination mit Latenz und/oder Leistungsfähigkeit bewertet werden. Beispielsweise kann die Anforderung eine maximale Latenz, eine minimale Leistungsfähigkeit und einen maximal zulässigen Kostenwert angeben. Der Planer auf dem Client 2010 oder dem Edge-Dienst 2020 kann dann bestimmen, wie die Arbeit verteilt werden soll, um die Latenz- und Leistungsfähigkeitsanforderungen zu erfüllen und gleichzeitig die Kosten zu minimieren.
  • Wie erwähnt können die Ausführungsformen der Erfindung zusätzlich zu Grafikarbeiten andere Arten von Arbeiten einschließlich (aber nicht beschränkt auf) Strahlverfolgungsoperationen und Operationen maschinellen Lernens auslagern. Der Rest dieser Patentanmeldung enthält spezifische Beispiele für diese zusätzlichen Typen von Arbeiten.
  • Strahlverfolgung mit maschinellem Lernen
  • Wie oben erwähnt ist die Strahlverfolgung eine Grafikverarbeitungstechnik, bei der ein Lichttransport durch physikalisch basiertes Rendern simuliert wird. Eine der wichtigsten Operationen bei der Strahlverfolgung ist die Verarbeitung einer Sichtbarkeitsabfrage, die das Durchqueren und Testen von Knoten in einer Begrenzungsvolumenhierarchie (BVH) erfordert.
  • Auf Strahl- und Pfadverfolgung basierte Techniken berechnen Bilder durch Verfolgen von Strahlen und Pfaden durch jedes Pixel und durch Verwenden von Zufallsabtastung, um fortgeschrittene Effekte wie Schatten, Glanz, indirekte Beleuchtung usw. zu berechnen. Das Verwenden von nur wenigen Abtastwerten ist schnell, aber erzeugt verrauschte Bilder, während das Verwenden vieler Abtastwerte Bilder von hoher Qualität erzeugt, jedoch kostenintensiv ist.
  • Maschinelles Lernen umfasst jegliche Schaltung, jeglichen Programmcode oder jegliche Kombination davon, die in der Lage ist, die Durchführung einer bestimmten Aufgabe zunehmend zu verbessern oder zunehmend genauere Vorhersagen oder Entscheidungen zu treffen. Einige maschinell lernende Maschinen können diese Aufgaben ausführen oder diese Vorhersagen/Entscheidungen treffen, ohne explizit dafür programmiert zu werden, die Aufgaben auszuführen oder die Vorhersagen/Entscheidungen zu treffen. Es gibt eine Vielzahl von Techniken des maschinellen Lernens, einschließlich (aber nicht beschränkt auf) beaufsichtigtes und halbbeaufsichtigtes Lernen, unbeaufsichtigtes Lernen und verstärkendes Lernen
  • In den letzten Jahren gab es eine bahnbrechende Lösung für die Strahl- und Pfadverfolgung zur Verwendung in Echtzeit in Form von „Entrauschen“ - dem Prozess der Verwendung von Bildverarbeitungstechniken zum Erzeugen von qualitativ hochwertigen gefilterten/entrauschten Bildern aus verrauschten Eingaben mit geringer Abtastungszahl. Die effektivsten Entrauschungstechniken beruhen auf Maschinenlerntechniken, bei denen eine maschinell lernende Maschine erlernt, wie ein verrauschtes Bild wahrscheinlich aussehen würde, wenn es mit mehr Abtastungen berechnet worden wäre. In einer bestimmten Implementierung wird das maschinelle Lernen durch ein faltendes neuronales Netz (CNN) durchgeführt; die der Erfindung zugrundeliegenden Prinzipien sind jedoch nicht auf eine CNN-Implementierung beschränkt. Bei einer solchen Implementierung werden Trainingsdaten mit Eingaben mit niedriger Abtastzahl und Feldreferenz erzeugt. Das CNN wird trainiert, um das konvergierte Pixel aus einer Nachbarschaft von verrauschten Pixeleingaben um das fragliche Pixel vorherzusagen.
  • Obwohl sie nicht perfekt ist, hat sich diese Entrauschungstechnik auf KI-Basis als überraschend wirksam erwiesen. Die Einschränkung besteht jedoch darin, dass gute Trainingsdaten erforderlich sind, da das Netz ansonsten möglicherweise die falschen Ergebnisse vorhersagt. Wenn ein Animationsfilmstudio beispielsweise ein Entrauschungs-CNN an früheren Filme mit Szenen an Land trainiert und dann versucht, das trainierte CNN zum Entrauschen von Bildern aus einem neuen Film auf dem Wasser zu verwenden, wird die Entrauschungsoperation suboptimal durchgeführt.
  • Um dieses Problem anzugehen, sammelt eine Ausführungsform der Erfindung Lerndaten dynamisch während des Renderns und trainiert fortlaufend eine maschinell lernende Maschine wie beispielsweise ein CNN basierend auf den Daten, auf denen sie aktuell ausgeführt wird, und verbessert somit fortlaufend die maschinell lernende Maschine für die jeweilige Aufgabe. Diese Ausführungsform kann immer noch eine Trainingsphase vor der Laufzeit durchführen, setzt jedoch die Anpassung der Maschinenlerngewichte nach Bedarf während der Laufzeit fort. Zusätzlich vermeidet diese Ausführungsform den hohen Aufwand der Berechnung der Referenzdaten, die für das Training erforderlich sind, indem die Erzeugung von Lerndaten auf einen Unterbereich des Bildes für jeden Frame oder alle N Frames beschränkt wird. Insbesondere werden die verrauschten Eingaben eines Frames erzeugt, um das gesamte Frame mit dem aktuellen Netz zu entrauschen. Zusätzlich wird ein kleiner Bereich von Referenzpixeln erzeugt und für ein fortlaufendes Training verwendet, wie es nachstehend beschrieben wird.
  • Obwohl in Bezug auf bestimmte Ausführungsformen eine CNN-Implementierung beschrieben wird, kann jede Form einer maschinell lernenden Maschine verwendet werden, einschließlich, aber nicht beschränkt auf Systeme, die beaufsichtigtes Lernen (z. B. Erstellen eines mathematischen Modells eines Datensatzes, der sowohl die Eingaben als auch die gewünschten Ausgaben enthält), unbeaufsichtigtes Lernen (z. B. Auswerten der Eingabedaten für bestimmte Arten von Strukturen) und/oder eine Kombination von beaufsichtigtem und unbeaufsichtigtem Lernen durchführen.
  • Bestehende Entrauschungsimplementierungen arbeiten in einer Trainingsphase und einer Laufzeitphase. Während der Trainingsphase wird eine Netztopologie definiert, die einen Bereich von NxN Pixeln mit verschiedenen Datenkanälen pro Pixel wie Pixelfarbe, Tiefe, Normale, Normalabweichung, Primitiv-IDs und Albedo empfängt und eine endgültige Pixelfarbe erzeugt. Ein Satz von „repräsentativen“ Trainingsdaten wird unter Verwendung von Eingaben mit niedriger Abtastungszahl für ein Frame und unter Bezugnahme auf die „gewünschten“ Pixelfarben, die mit einer sehr hohen Abtastungszahl berechnet wurden, erzeugt. Das Netz wird auf diese Eingaben hin trainiert und erzeugt eine Menge von „idealen“ Gewichten für das Netz. In diesen Implementierungen werden die Referenzdaten verwendet, um die Netzgewichte so zu trainieren, dass die Netzausgabe dem gewünschten Ergebnis am besten entspricht.
  • Zur Laufzeit werden die vorgegebenen, vorberechneten idealen Netzgewichte geladen und das Netz initialisiert. Für jedes Frame wird ein Bild mit niedriger Abtastungszahl aus Entrauschungseingaben (d. h. denselben, wie sie für das Training verwendet wird) erzeugt. Für jedes Pixel wird die gegebene Nachbarschaft der Pixeleingaben durch das Netz geleitet, um die „entrauschte“ Pixelfarbe vorherzusagen, wodurch ein entrauschtes Frame erzeugt wird.
  • 21 zeigt eine Ausführungsform einer anfänglichen Trainingsimplementierung. Eine maschinell lernende Maschine 2100 (z. B. ein CNN) empfängt einen Bereich von N×N Pixeln als Bilddaten 1702 mit hoher Abtastungszahl mit verschiedenen Datenkanälen pro Pixel, wie z. B. Pixelfarbe, Tiefe, Normale, Normalabweichung, Primitiv-IDs und Albedo, und erzeugt endgültige Pixelfarben. Repräsentative Trainingsdaten werden unter Verwendung von Eingaben 2101 mit niedriger Abtastungszahl für einen Frame erzeugt. Das Netz wird auf diese Eingaben hin trainiert, wobei ein Satz von „idealen“ Gewichten 2105 erzeugt wird, die die maschinell lernende Maschine 2100 anschließend verwendet, um Bilder mit niedriger Abtastungszahl zur Laufzeit zu entrauschen.
  • Um die obigen Techniken zu verbessern, erweitert eine Ausführungsform der Erfindung die Entrauschungsphase, um für jeden Frame oder eine Teilmenge von Frames (z. B. für je N Frames mit N = 2, 3, 4, 10, 25 usw.) neue Trainingsdaten zu erzeugen. Wie es in 22 dargestellt ist, wählt diese Ausführungsform insbesondere einen oder mehrere Bereiche in jedem Frame aus, die hier als „neue Referenzbereiche“ 2202 bezeichnet werden und mit einer hohen Abtastungszahl in einen separaten Puffer 2204 mit hoher Abtastzahl gerendert werden. Ein Puffer 1603 mit niedriger Abtastungszahl speichert das Eingabeframe 2201 mit niedriger Abtastungszahl (einschließlich des Bereichs 2204 mit niedriger Abtastungszahl, der dem neuen Referenzbereich 2202 entspricht).
  • In einer Ausführungsform wird der Ort des neuen Referenzbereichs 2202 zufällig ausgewählt. Alternativ kann der Ort des neuen Referenzbereichs 2202 für jeden neuen Frame auf eine vorgegebene Weise angepasst werden (z. B. unter Verwendung einer vorgegebenen Bewegung des Bereichs zwischen Frames, die auf einen vorgegebenen Bereich in der Mitte des Frames begrenzt ist usw.).
  • Unabhängig davon, wie der neue Referenzbereich ausgewählt wird, wird er von der maschinell lernenden Maschine 2200 verwendet, um die trainierten Gewichte 2205, die zum Entrauschen verwendet werden, fortlaufend zu verfeinern und zu aktualisieren. Insbesondere werden Referenzpixelfarben aus jedem neuen Referenzbereich 2202 und verrauschte Referenzpixeleingaben aus einem entsprechenden Bereich 2207 mit niedriger Abtastungszahl gerendert. Ein zusätzliches Training wird dann an der maschinell lernenden Maschine 2200 unter Verwendung des Referenzbereichs 2202 mit hoher Abtastungszahl und des entsprechenden Bereichs 2207 mit niedriger Abtastungszahl durchgeführt. Im Gegensatz zum anfänglichen Training wird dieses Training fortlaufend während der Laufzeit für jeden neuen Referenzbereich 2202 durchgeführt - wodurch sichergestellt wird, dass die maschinell lernende Maschine 2200 genau trainiert wird. Beispielsweise können Datenkanäle pro Pixel (z. B. Pixelfarbe, Tiefe, Normale, Normalabweichung usw.) ausgewertet werden, die die maschinell lernende Maschine 2200 verwendet, um Anpassungen an den trainierten Gewichten 2205 vorzunehmen. Wie im Trainingsfall (21) wird die maschinell lernende Maschine 2200 auf einen Satz von Idealgewichten 2205 zum Entfernen von Rauschen aus dem Eingabeframe 2201 mit niedriger Abtastungszahl hin trainiert, um den entrauschten Frame 2220 zu erzeugen. In dieser Ausführungsform werden die trainierten Gewichte 2205 jedoch basierend auf neuen Bildeigenschaften neuer Typen von Eingabeframes 2201 mit niedriger Abtastungszahl fortlaufend aktualisiert.
  • In einer Ausführungsform werden die von der maschinell lernenden Maschine 2200 ausgeführten Neutrainingsoperationen gleichzeitig in einem Hintergrundprozess auf der Grafikprozessoreinheit (GPU) oder dem Hostprozessor ausgeführt. Die Renderschleife, die als eine Treiberkomponente und/oder eine GPU-Hardwarekomponente implementiert sein kann, erzeugt fortlaufend neue Trainingsdaten (z. B. in Form neuer Referenzbereiche 2202), die sie in eine Warteschlange stellt. Der Hintergrund-Trainingsprozess, der auf der GPU oder dem Hostprozessor ausgeführt wird, liest fortlaufend die neuen Trainingsdaten aus dieser Warteschlange, trainiert die maschinell lernende Maschine 2200 neu und aktualisiert sie in geeigneten Intervallen mit neuen Gewichten 2205.
  • 23 zeigt ein Beispiel einer solchen Implementierung, bei der der Hintergrund-Trainingsprozess 2300 durch die Host-CPU 1710 implementiert wird. Insbesondere verwendet der Hintergrund-Trainingsprozess 2300 in dieser Ausführungsform den neuen Referenzbereich 2202 mit hoher Abtastungszahl und entsprechenden den Bereich 2204 mit niedriger Abtastungszahl, um die trainierten Gewichte 2205 fortlaufend zu aktualisieren, wodurch die maschinell lernende Maschine 2200 aktualisiert wird.
  • Wie es in 24A dargestellt ist, erzeugen in einer Implementierung wie etwa in einem Mehrspieler-Online-Spiel verschiedene Hostmaschinen 2420-2422 individuell Referenzbereiche, die ein Hintergrund-Trainingsprozess 1700A-C an einen Server 2400 (z. B. einen Spieleserver) sendet. Der Server 2400 führt dann ein Training an einer maschinellen Lernmaschine 2410 unter Verwendung der neuen Referenzbereiche durch, die von jedem der Hosts 2421-2422 empfangen wurden, wobei die Gewichte 2405 wie zuvor beschrieben aktualisiert werden. Er sendet diese Gewichte 2405 an die Hostmaschinen 2420, die die Gewichte 2205A-C speichern, wodurch jede einzelne maschinell lernende Maschine (nicht gezeigt) aktualisiert wird. Da dem Server 2400 in kurzer Zeit eine große Anzahl von Referenzbereichen geliefert werden, kann er die Gewichte für jegliche gegebene Anwendung (z. B. ein Online-Spiel), die von den Anwendern ausgeführt wird, effizient und präzise aktualisieren.
  • Wie es in 24B dargestellt ist, können die verschiedenen Hostmaschinen neue trainierte Gewichte erzeugen (z. B. basierend auf Trainings-/Referenzbereichen 2202, wie es zuvor beschrieben ist) und die neuen trainierten Gewichte mit einem Server 2400 (z. B. einem Spieleserver) teilen oder alternativ ein Peer-zu-Peer-Freigabe-Protokoll verwenden. Eine Maschinenlernverwaltungskomponente 2410 auf dem Server erzeugt einen Satz kombinierter Gewichte 2405 unter Verwendung der neuen Gewichte, die von jeder der Hostmaschinen empfangen werden. Die kombinierten Gewichte 2405 können beispielsweise ein Durchschnitt sein, der aus den neuen Gewichten erzeugt und fortlaufend aktualisiert wird, wie es hierin beschrieben ist. Nach der Erzeugung können Kopien der kombinierten Gewichte 2205A-C übertragen und auf jeder der Hostmaschinen 2420-2421 gespeichert werden, die dann die hier beschriebenen kombinierten Gewichte verwenden können, um Entrauschungsoperationen durchzuführen.
  • In einer Ausführungsform kann dieser Aktualisierungsmechanismus mit halbgeschlossener Schleife von dem Hardwarehersteller verwendet werden. Beispielsweise kann das Referenznetz als Teil des Treibers enthalten sein, der vom Hardwarehersteller vertrieben wird. Während der Treiber mithilfe der hier beschriebenen Techniken neue Trainingsdaten erzeugt und diese fortlaufend an den Hardwarehersteller zurücksendet, verwendet der Hardwarehersteller diese Informationen, um seine Maschinenlernimplementierungen für die nächste Treiberaktualisierung weiter zu verbessern.
  • In einer Implementierung (z. B. beim stapelweisen Rendern von Filmen in einer Renderfarm) überträgt der Renderer die neu erzeugten Trainingsbereiche an einen dedizierten Server oder eine dedizierte Datenbank (in der Renderfarm dieses Studios), die diese Daten aus mehreren Render-Knoten im Laufe der Zeit ansammelt. Ein separater Prozess auf einer separaten Maschine verbessert fortlaufend das dedizierte Entrauschungsnetz des Studios. Für neue Renderaufträge wird immer das neueste trainierte Netz verwendet.
  • Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in 25 dargestellt. Das Verfahren kann auf den hier beschriebenen Architekturen implementiert werden, ist jedoch nicht auf eine bestimmte System- oder Grafikverarbeitungsarchitektur beschränkt.
  • Bei 2501 werden als Teil der anfänglichen Trainingsphase Bilddaten mit niedriger Abtastungszahl und Bilddaten mit hoher Abtastungszahl für mehrere Frames erzeugt. Bei 2502 wird eine maschinell lernende Entrauschungsmaschine unter Verwendung der Bilddaten mit hoher/niedriger Abtastungszahl trainiert. In einer Ausführungsform kann beispielsweise ein Satz von Pixelmerkmalen zugeordneten Gewichten des faltenden neuronalen Netzes gemäß dem Training aktualisiert werden. Es kann jedoch eine beliebige Maschinenlernarchitektur verwendet werden.
  • Bei 2503 werden zur Laufzeit Frames mit niedriger Abtastungszahl zusammen mit mindestens einem Referenzbereich mit hoher Abtastungszahl erzeugt. Bei 2504 wird der Referenzbereich mit hoher Abtastungszahl von der maschinell lernenden Maschine und/oder einer separaten Trainingslogik (z. B. einem Hintergrundtrainingsmodul 2300) verwendet, um das Training der maschinell lernenden Maschine fortlaufend zu verfeinern. Zum Beispiel wird in einer Ausführungsform der Referenzbereich mit hoher Abtastungszahl in Kombination mit einem entsprechenden Teil des Bildes mit niedriger Abtastungszahl verwendet, um der maschinell lernenden Maschine 1904 weiterhin beizubringen, wie sie das Entrauschen am effektivsten durchführt. In einer CNN-Implementierung kann dies beispielsweise ein Aktualisieren der dem CNN zugeordneten Gewichte umfassen.
  • Es können mehrere Variationen der oben beschriebenen Ausführungsformen implementiert werden, beispielsweise die Weise, in der die Rückkopplungsschleife in die maschinell lernende Maschine konfiguriert ist, die Entitäten, die die Trainingsdaten erzeugen, die Weise, in der die Trainingsdaten in die Trainingsmaschine zurückgekoppelt werden und die Weise, in der das verbesserte Netz an die Rendermaschinen geliefert wird. Obwohl die oben beschriebenen Ausführungsformen ein fortlaufendes Training unter Verwendung eines einzelnen Referenzbereichs durchführen, kann zudem eine beliebige Anzahl von Referenzbereichen verwendet werden. Darüber hinaus können wie zuvor erwähnt die Referenzbereiche unterschiedliche Größen haben, auf unterschiedliche Anzahlen von Frames angewendet werden und können an unterschiedlichen Stellen innerhalb der Frames unter Verwendung unterschiedlicher Techniken (z. B. zufällig, gemäß einem vorbestimmten Muster usw.) positioniert werden.
  • Obwohl ein faltendes neuronales Netz (CNN) als ein Beispiel einer maschinell lernenden Maschine 2200 beschrieben ist, können die zugrundeliegenden Prinzipien der Erfindung unter Verwendung einer beliebigen Form von maschinell lernender Maschine implementiert werden, die in der Lage ist, ihre Ergebnisse mit neuen Trainingsdaten fortlaufend zu verfeinern. Beispielhaft und nicht einschränkend umfassen andere Maschinenlernimplementierungen das Gruppenverfahren der Datenhandhabung (GMDH), Lang-Kurzzeitgedächtnis, Tiefreservoirberechnung, Deep-Belief-Netze, Tensor-Deep-Stacking-Netze und Deep-Predictive-Coding-Netze, um nur einige zu nennen.
  • Vorrichtung und Verfahren zum effizienten verteilten Entrauschen
  • Wie oben beschrieben ist das Entrauschen zu einem kritischen Merkmal der Echtzeitstrahlverfolgung mit glatten, rauschfreien Bildern geworden. Das Rendern kann über ein verteiltes System hinweg auf mehreren Vorrichtungen ausgeführt werden. Bisher werden die vorhandenen Entrauschungsrahmen jedoch alle auf einer einzelnen Instanz auf einer einzelnen Maschine ausgeführt. Wenn über mehrere Vorrichtungen hinweg gerendert wird, sind möglicherweise nicht alle gerenderten Pixel für die Berechnung eines entrauschten Abschnitts des Bildes verfügbar.
  • Eine Ausführungsform der Erfindung umfasst einen Algorithmus zum verteilten Entrauschen, der sowohl mit künstlicher Intelligenz (KI) als auch mit nicht auf KI basierenden Entrauschungstechniken arbeitet. Bildbereiche sind entweder bereits von einer verteilten Renderoperation her auf Knoten verteilt oder sie werden von einem einzelnen Framepuffer aufgeteilt und verteilt. Geisterbereiche benachbarter Bereichen, die zum Berechnen einer ausreichenden Entrauschung benötigt werden, werden bei Bedarf aus benachbarten Knoten gesammelt und die endgültigen resultierenden Kacheln werden zu einem endgültigen Bild zusammengesetzt.
  • Verteilte Verarbeitung
  • 26 zeigt eine Ausführungsform der Erfindung, bei der mehrere Knoten 2621-2623 ein Rendern durchführen. Während der Einfachheit halber nur drei Knoten dargestellt sind, sind die der Erfindung zugrundeliegenden Prinzipien nicht auf eine bestimmte Anzahl von Knoten beschränkt. Tatsächlich kann ein einziger Knoten verwendet werden, um bestimmte Ausführungsformen der Erfindung zu implementieren.
  • Die Knoten 2621-2623 rendern jeweils einen Abschnitt eines Bildes, was in diesem Beispiel in Bereichen 2611-2613 resultiert. Obwohl in 26 rechteckige Bereiche 2611-2613 dargestellt sind, können Bereiche beliebiger Form verwendet werden und jede Vorrichtung kann eine beliebige Anzahl von Bereichen verarbeiten. Die Bereiche, die von einem Knoten benötigt werden, um eine ausreichend glatte Entrauschungsoperation durchzuführen, werden als Geisterbereiche 2611-2613 bezeichnet. Mit anderen Worten stellen die Geisterbereichen 2601-2603 die Gesamtheit der Daten dar, die erforderlich sind, um eine Entrauschung mit einem bestimmten Qualitätsniveau durchzuführen. Ein Verringern des Qualitätsniveaus verringert die Größe des Geisterbereichs und daher die erforderliche Datenmenge und ein Erhöhen des Qualitätsniveaus vergrößert den Geisterbereich und die entsprechenden erforderlichen Daten.
  • In einer Ausführungsform ruft der Knoten dann, wenn ein Knoten wie der Knoten 2621 eine lokale Kopie eines Abschnitts des Geisterbereichs 2601 hat, der erforderlich ist, um seinen Bereich 2611 auf einem bestimmten Qualitätsniveau zu entrauschen, die erforderlichen Daten von einem oder mehreren „benachbarten“ Knoten wie beispielsweise dem Knoten 2622, der einen Abschnitt des Geisterbereichs 2601 besitzt, wie dargestellt ab. In ähnlicher Weise ruft der Knoten 2622 die erforderlichen Geisterbereichsdaten 2632 dann, wenn der Knoten 2622 eine lokale Kopie eines Abschnitts des Geisterbereichs 2602 hat, der erforderlich ist, um seinen Bereich 2612 auf dem angegebenen Qualitätsniveau zu entrauschen, aus dem Knoten 2621 ab. Der Abruf kann über einen Bus, eine Verbindung, eine Hochgeschwindigkeitsspeicher-Fabric, ein Netz (z. B. Hochgeschwindigkeits-Ethernet) oder sogar eine chipinterne Zwischenverbindung in einem Mehrkernchip, der in der Lage ist, Renderarbeit auf mehrere Kerne zu verteilen (z. B. zum Rendern großer Bilder mit extremen Auflösungen oder zeitlich variierenden Auflösungen genutzt) ausgeführt werden. In einer Ausführungsform umfasst jeder Knoten 2621-2623 eine einzelne Ausführungseinheit oder einen spezifizierten Satz von Ausführungseinheiten in einem Grafikprozessor.
  • Die spezifische zu sendende Datenmenge hängt von den verwendeten Entrauschungstechniken ab. Darüber hinaus können die Daten aus dem Geisterbereich jegliche Daten umfassen, die zur Verbesserung der Entrauschung für jeden jeweiligen Bereich benötigt werden. In einer Ausführungsform umfassen die Geisterbereichsdaten beispielsweise Bildfarben/Wellenlängen, Intensitäts-Alphadaten und/oder Normalen. Die der Erfindung zugrundeliegenden Prinzipien sind jedoch nicht auf einen bestimmten Satz von Geisterbereichsdaten beschränkt.
  • Zusätzliche Einzelheiten einer Ausführungsform
  • Für langsamere Netze oder Zwischenverbindungen kann die Komprimierung dieser Daten unter Verwendung einer bestehenden verlustfreien oder verlustbehafteten Allzweckkomprimierung verwendet werden. Beispiele sind unter anderem zlib, gzip und der Lempel-Ziv-Markov-Kettenalgorithmus (LZMA). Weitere inhaltsspezifische Komprimierung kann verwendet werden, wenn erkannt wird, dass das Delta in Strahlentrefferinformationen zwischen Frames ziemlich dünnbesetzt sein kann und nur die Abtastungen, die zu diesem Delta beitragen, gesendet werden müssen, wenn der Knoten bereits die gesammelten Deltas aus vorherigen Frames hat. Diese können selektiv an Knoten übertragen werden, die diese Abtastungen, i, sammeln, oder der Knoten i kann Abtastungen von anderen Knoten anfordern. In einer Ausführungsform wird eine verlustfreie Komprimierung für bestimmte Arten von Daten und Programmcode verwendet, während verlustbehaftete Daten für andere Arten von Daten verwendet werden.
  • 27 zeigt zusätzliche Einzelheiten der Wechselwirkungen zwischen den Knoten 2621-2622 gemäß einer Ausführungsform der Erfindung. Jeder Knoten 2621-2622 weist eine Strahlverfolgungs-Renderschaltung 2681-2682 zum Rendern der jeweiligen Bildbereiche 2611-2612 und der Geisterbereiche 2601-2602 aus. Die Entrauscher 2700-2711 führen jeweils Entrauschungsoperationen in den Bereichen 2611-2012 aus, in denen jeder Knoten 2621-2622 für das Rendern und Entrauschen verantwortlich ist. Die Entrauscher 2621-2622 können beispielsweise eine Schaltung, Software oder irgendeine Kombination davon umfassen, um die entrauschten Bereiche 2721-2722 zu erzeugen. Wie erwähnt müssen sich die Entrauscher 2621-2622 beim Erzeugen von entrauschten Bereichen möglicherweise auf Daten in einem Geisterbereich stützen, der einem anderen Knoten gehört (z. B. benötigt der Entrauscher 2700 möglicherweise Daten aus dem Geisterbereich 2602, der dem Knoten 2622 gehört).
  • Somit erzeugen in einer Ausführungsform die Entrauscher 2700-2711 die entrauschten Bereiche 2721-2722 unter Verwendung von Daten aus Bereichen 2611-2612 bzw. Geisterbereichen 2601-2602, von denen mindestens ein Teil von einem anderen Knoten empfangen werden kann. Die Bereichsdatenverwalter 2701-2702 verwalten die Datenübertragungen aus den Geisterbereichen 2601-2602 wie hierin beschrieben. In einer Ausführungsform führen die Komprimierer/Dekomprimierer-Einheiten 2731-2732 eine Komprimierung und Dekomprimierung der Geisterbereichsdaten, die zwischen den Knoten 2621-2622 ausgetauscht werden, durch.
  • Beispielsweise kann der Bereichsdatenverwalter 2701 des Knotens 2621 auf Anforderung von dem Knoten 2622 Daten aus dem Geisterbereich 2601 an den Komprimierer/Dekomprimierer 2731 senden, der die Daten komprimiert, um komprimierte Daten 2706 zu erzeugen, die er an den Knoten 2622 sendet, wodurch die Bandbreite über die Zwischenverbindung, das Netz, den Bus oder eine andere Datenkommunikationsverbindung verringert wird. Der Komprimierer/Dekomprimierer 2732 des Knotens 2622 dekomprimiert dann die komprimierten Daten 2706 und der Entrauscher 2711 verwendet die dekomprimierten Geisterdaten, um einen entrauschten Bereich 2612 mit höherer Qualität zu erzeugen, als dies nur mit Daten aus dem Bereich 2612 möglich wäre. Der Bereichsdatenverwalter 2702 kann die dekomprimierten Daten aus dem Geisterbereich 2601 in einem Cache, Speicher, einem Registersatz oder einem anderen Speicher speichern, um sie dem Entrauscher 2711 zur Verfügung zu stellen, wenn der entrauschte Bereich 2722 erzeugt wird. Ein ähnlicher Satz von Operationen kann durchgeführt werden, um die Daten aus dem Geisterbereich 2602 an den Entrauscher 2700 auf dem Knoten 2621 zu liefern, der die Daten in Kombination mit Daten aus dem Bereich 2011 verwendet, um einen entrauschten Bereich 2721 mit höherer Qualität zu erzeugen.
  • Daten erfassen oder rendern
  • Wenn die Verbindung zwischen Vorrichtungen wie den Knoten 2621-2622 langsam ist (d. h. niedriger als eine Schwellenlatenz und/oder eine Schwellenbandbreite), kann es schneller sein, Geisterbereiche lokal zu rendern, als die Ergebnisse aus anderen Vorrichtungen anzufordern. Dies kann zur Laufzeit bestimmt werden, indem die Netztransaktionsgeschwindigkeiten und linear extrapolierten Renderzeiten für die Größe des Geisterbereichs überwacht werden. In den Fällen, in denen das Rendern des gesamten Geisterbildbereichs schneller ist, können mehrere Vorrichtungen dieselben Abschnitte des Bildes rendern. Die Auflösung des gerenderten Abschnitts der Geisterbereiche kann basierend auf der Varianz des Basisbereichs und dem bestimmten Unschärfegrad angepasst werden.
  • Lastausgleich
  • In einer Ausführungsform können statische und/oder dynamische Lastausgleichsschemata verwendet werden, um die Verarbeitungslast unter den verschiedenen Knoten 2621-2623 zu verteilen. Für den dynamischen Lastausgleich kann die durch das Entrauschungsfilter bestimmte Varianz sowohl mehr Zeit bei der Entrauschung erfordern als auch die Menge der zum Rendern eines bestimmten Bereichs der Szene verwendeten Abtastungen steuern, wobei eine geringe Varianz und unscharfe Bereiche des Bildes weniger Abtastungen erfordern. Die speziellen Bereiche, die speziellen Knoten zugewiesen sind, können dynamisch basierend auf Daten aus vorherigen Frames angepasst werden oder dynamisch zwischen Vorrichtungen übertragen werden, während sie gerendert werden, so dass alle Vorrichtungen den gleichen Arbeitsaufwand haben.
  • 28 zeigt eine Ausführungsform, bei der ein auf jedem jeweiligen Knoten 2621-2622 ausgeführter Überwacher 2801-2802 Leistungsmetrikdaten sammelt, die ohne Einschränkung darauf die Zeit, die zum Übertragen von Daten über die Netzschnittstelle 2811-2812 benötigt wird, die Zeit, die beim Entrauschen eines Bereichs (mit und ohne Geisterbereichsdaten) benötigt wird, und die Zeit, die zum Rendern jedes Bereichs/Geisterbereichs benötigt wird, umfassen. Die Überwacher 2801-2802 melden diese Leistungsmetriken an einen Verwalter oder einen Lastausgleichsknoten 2801 zurück, der die Daten analysiert, um die aktuelle Arbeitslast auf jedem Knoten 2621-2622 zu ermitteln und möglicherweise einen effizienteren Verarbeitungsmodus für die verschiedenen entrauschten Bereiche 2721-2722 zu bestimmen. Der Verwaltungsknoten 2801 verteilt dann gemäß der detektierten Last neue Arbeitslasten für neue Bereiche an die Knoten 2621-2622. Zum Beispiel kann der Verwalterknoten 2801 mehr Arbeit an diejenigen Knoten, die nicht stark belastet sind, senden und/oder Arbeit von denjenigen Knoten, die überlastet sind, neu zuweisen. Zusätzlich kann der Lastausgleichsknoten 2801 einen Umkonfigurationsbefehl senden, um die spezifische Weise anzupassen, in der das Rendern und/oder Entrauschen durch jeden der Knoten durchgeführt wird (einige Beispiele davon sind oben beschrieben).
  • Bestimmen von Geisterbereichen
  • In einer Ausführungsform werden die Größen und Formen der Geisterbereiche 2601-2602 basierend auf dem Entrauschungsalgorithmus bestimmt, der von den Entrauschern 2700-2711 implementiert wird. Ihre jeweiligen Größen können dann basierend auf der detektierten Varianz der Abtastungen, die entrauscht werden, dynamisch modifiziert werden. Der Lernalgorithmus, der für die KI-Entrauschung selbst verwendet wird, kann zum Bestimmen geeigneter Bereichsgrößen verwendet werden, oder in anderen Fällen, wie beispielsweise einer bilateralen Unschärfe, bestimmt die vorbestimmte Filterbreite die Größe der Geisterbereiche 2601-2602. In einer Implementierung, die einen Lernalgorithmus verwendet, kann die maschinell lernende Maschine auf dem Verwaltungsknoten 2801 ausgeführt werden und/oder Teile des maschinellen Lernens können auf jedem der einzelnen Knoten 2621-2623 ausgeführt werden (siehe z. B. 24A-B und zugehöriger Text oben).
  • Erhalten des endgültigen Bildes
  • In einer Ausführungsform wird das endgültige Bild erzeugt, indem die gerenderten und entrauschten Bereiche aus jedem der Knoten 2621-2623 gesammelt werden, ohne dass die Geisterbereiche oder Normalen benötigt werden. In 28 werden beispielsweise die entrauschten Bereiche 2721-2722 an den Bereichsprozessor 2680 des Verwalterknotens 2601 übertragen, der die Bereiche kombiniert, um das endgültige entrauschte Bild 2690 zu erzeugen, das dann auf einer Anzeige 2690 angezeigt wird. Der Bereichsprozessor 2280 kann die Bereiche mit mehreren von 2D-Zusammenstellungstechniken kombinieren. Obwohl diese als separate Komponenten dargestellt sind, können der Bereichsprozessor 2680 und das entrauschte Bild 2690 in die Anzeige 2690 integriert sein. In dieser Ausführungsform können die verschiedenen Knoten 2621-2622 eine Direktsendetechnik verwenden, um die entrauschten Bereichen 2721-2722 zu übertragen, und möglicherweise verschiedene verlustbehaftete oder verlustfreie Komprimierung der Bereichsdaten verwenden.
  • KI-Entrauschung ist immer noch ein aufwändiger Vorgang, wenn sich das Spielen in die Cloud verschiebt. Daher kann das Verteilen der Entrauschungsverarbeitung auf mehrere Knoten 2621-2622 erforderlich werden, um Echtzeit-Bildraten für traditionelles Spielen oder virtuelle Realität (VR) zu erzielen, die höhere Bildraten erfordern. Filmstudios rendern häufig auch in großen Renderfarmen, die zum schnelleren Entrauschen verwendet werden können.
  • Eine Ausführungsform eines Verfahrens zum Durchführen eines verteilten Renderns und Entrauschens ist in 29 dargestellt. Das Verfahren kann im Kontext der oben beschriebenen Systemarchitekturen implementiert werden, ist jedoch nicht auf eine bestimmte Systemarchitektur beschränkt.
  • Bei 2901 wird Grafikarbeit an mehrere Knoten gesendet, die Strahlverfolgungsoperationen ausführen, um einen Bereich eines Frames zu rendern. In einer Ausführungsform kann jeder Knoten bereits Daten im Speicher haben, die erforderlich sind, um die Operationen auszuführen. Beispielsweise können zwei oder mehr der Knoten einen gemeinsamen Speicher gemeinsam nutzen oder die lokalen Speicher der Knoten können bereits Daten aus früheren Strahlverfolgungsoperationen gespeichert haben. Alternativ oder zusätzlich können bestimmte Daten an jeden Knoten übertragen werden.
  • Bei 2902 wird der „Geisterbereich“ bestimmt, der für einen bestimmten Entrauschungsgrad (d. h. bei einem akzeptablen Leistungsniveau) erforderlich ist. Der Geisterbereich umfasst alle Daten, die zum Durchführen des angegebenen Entrauschungsgrads erforderlich sind, einschließlich Daten, die einem oder mehreren anderen Knoten gehören.
  • Bei 2903 werden Daten, die sich auf die Geisterbereiche (oder Abschnitte davon) beziehen, zwischen Knoten ausgetauscht. Bei 2904 führt jeder Knoten eine Entrauschung in seinem jeweiligen Bereich durch (z. B. unter Verwendung der ausgetauschten Daten) und bei 2905 werden die Ergebnisse kombiniert, um den endgültigen entrauschten Frame zu erzeugen.
  • In einer Ausführungsform sendet ein Verwalterknoten oder ein Primärknoten, wie es in 28 gezeigt ist, die Arbeit an die Knoten und kombiniert dann die von den Knoten ausgeführte Arbeit, um den endgültigen Frame zu erzeugen. In einer weiteren Ausführungsform wird eine auf Peers basierte Architektur verwendet, bei der die Knoten Peers sind, die Daten austauschen, um den endgültigen Frame zu rendern und zu entrauschen.
  • Die hierin beschriebenen Knoten (z. B. die Knoten 2621-2623) können Grafikverarbeitungs-Rechensysteme sein, die über ein Hochgeschwindigkeitsnetz miteinander verbunden sind. Alternativ können die Knoten einzelne Verarbeitungselemente sein, die mit einer Hochgeschwindigkeitsspeicherstruktur gekoppelt sind. In dieser Ausführungsform können sich alle Knoten einen gemeinsamen virtuellen Speicherplatz und/oder einen gemeinsamen physischen Speicher teilen. In einer weiteren Ausführungsform können die Knoten eine Kombination von CPUs und GPUs sein. Beispielsweise kann der oben beschriebene Verwaltungsknoten 2801 eine CPU und/oder Software, die auf der CPU ausgeführt wird, sein und die Knoten 2621-2622 können GPUs und/oder Software, die auf den GPUs ausgeführt wird, sein. Es können unter Einhaltung der der Erfindung zugrundeliegenden Prinzipien verschiedene Arten von Knoten verwendet werden.
  • Beispielhafte Implementierungen neuronaler Netze
  • Es gibt viele Typen von neuronalen Netzen; ein einfacher Typ eines neuronalen Netzes ist ein vorwärtskoppelndes Netz. Ein vorwärtskoppelndes Netz kann als azyklischer Graph implementiert werden, in dem die Knoten in Schichten angeordnet sind. Typischerweise enthält eine vorwärtskoppelnde Netztopologie eine Eingabe- und eine Ausgabeschicht, die durch mindestens eine verborgene Schicht getrennt sind. Die verborgene Schicht wandelt von der Eingabeschicht empfangene Eingaben in eine Darstellung um, die zum Erzeugen von Ausgaben in der Ausgabeschicht nützlich ist. Die Netzknoten sind über Kanten mit den Knoten in benachbarten Schichten vollständig verbunden, es gibt jedoch keine Kanten zwischen Knoten innerhalb jeweiliger Schichten. An den Knoten einer Eingabeschicht eines vorwärtskoppelnden Netzes empfangene Daten werden über eine Aktivierungsfunktion, die die Zustände der Knoten jeder nachfolgenden Schicht in dem Netz basierend auf Koeffizienten („Gewichten“), die jeweils den Kanten zugeordnet sind, die die Schichten verbinden, berechnet, an die Knoten der Ausgabeschicht weitergeleitet (d. h. „vorwärtsgekoppelt“). Abhängig von dem spezifischen Modell, das durch den ausgeführten Algorithmus repräsentiert wird, kann die Ausgabe des Algorithmus des neuronalen Netzes verschiedene Formen annehmen.
  • Bevor ein Maschinenlernalgorithmus verwendet werden kann, um ein bestimmtes Problem zu modellieren, wird der Algorithmus unter Verwendung eines Trainingsdatensatzes trainiert. Das Trainieren eines neuronalen Netzes umfasst ein Auswählen einer Netztopologie, ein Verwenden eines Satzes von Trainingsdaten, die ein von dem Netz modelliertes Problem darstellen, und ein Anpassen der Gewichte, bis das Netzmodell für alle Instanzen des Trainingsdatensatzes mit minimalem Fehler arbeitet. Beispielsweise wird während eines beaufsichtigten Lerntrainingsprozesses für ein neuronales Netz die Ausgabe, die von dem Netz als Antwort auf die Eingabe, die eine Instanz in einem Trainingsdatensatz darstellt, erzeugt wird, mit der als „korrekt“ gekennzeichneten Ausgabe für diese Instanz verglichen, ein Fehlersignal, das die Differenz zwischen der Ausgabe und der gekennzeichneten Ausgabe darstellt, wird berechnet und die den Verbindungen zugeordneten Gewichte werden angepasst, um diesen Fehler zu minimieren, wenn das Fehlersignal rückwärts durch die Schichten des Netzes weitergeleitet wird. Das Netz wird als „trainiert“ betrachtet, wenn die Fehler für jede der Ausgaben, die aus den Instanzen des Trainingsdatensatzes erzeugt werden, minimiert sind.
  • Die Genauigkeit eines Maschinenlernalgorithmus kann erheblich durch die Qualität des Datensatzes beeinflusst werden, der zum Trainieren des Algorithmus verwendet wird. Der Trainingsprozess kann rechenintensiv sein und auf einem herkömmlichen Allzweckprozessor viel Zeit in Anspruch nehmen. Dementsprechend wird Parallelverarbeitungshardware verwendet, um viele Arten von Maschinenlernalgorithmen zu trainieren. Dies ist besonders nützlich für die Optimierung des Trainings von neuronalen Netzen, da sich die beim Anpassen der Koeffizienten in neuronalen Netzen durchgeführten Berechnungen in natürlicher Weise für parallele Implementierungen eignen. Insbesondere sind viele Maschinenlernalgorithmen und Softwareanwendungen angepasst worden, um die Parallelverarbeitungshardware in Allzweck-Grafikverarbeitungsvorrichtungen zu nutzen.
  • 30 ist eine verallgemeinerte Darstellung eines Maschinenlernsoftware-Stapels 3000. Eine Maschinenlernanwendung 3002 kann dazu ausgelegt sein, ein neuronales Netz unter Verwendung eines Trainingsdatensatzes zu trainieren oder ein trainiertes tiefes neuronales Netz zu verwenden, um Maschinenintelligenz zu implementieren. Die Maschinenlernanwendung 3002 kann Trainings- und Inferenzfunktionalität für ein neuronales Netz und/oder spezielle Software, die verwendet werden kann, um ein neuronales Netz vor der Bereitstellung zu trainieren, umfassen. Die Maschinenlernanwendung 3002 kann eine beliebige Art von Maschinenintelligenz implementieren, einschließlich, aber nicht beschränkt auf Bilderkennung, Kartierung und Lokalisierung, autonome Navigation, Sprachsynthese, medizinischer Bildgebung oder Sprachübersetzung.
  • Die Hardwarebeschleunigung für die Maschinenlernanwendung 3002 kann über einen Maschinenlernrahmen 3004 ermöglicht werden. Der Maschinenlernrahmen 3004 kann eine Bibliothek von Maschinenlern-Primitiven bereitstellen. Maschinenlern-Primitive sind grundlegende Operationen, die üblicherweise von Maschinenlernalgorithmen ausgeführt werden. Ohne den Maschinenlernrahmen 3004 müssten Entwickler von Maschinenlernalgorithmen die dem Maschinenlernalgorithmus zugeordnete Hauptrechenlogik erstellen und optimieren und dann die Rechenlogik erneut optimieren, wenn neue Parallelprozessoren entwickelt werden. Stattdessen kann die Maschinenlernanwendung dazu ausgelegt sein, die erforderlichen Berechnungen unter Verwendung der von dem Maschinenlernrahmen 3004 bereitgestellten Primitive durchzuführen. Beispielhafte Primitive umfassen Tensor-Faltungen, Aktivierungsfunktionen und Zusammenlegung, die Rechenoperationen sind, die ausgeführt werden, während ein faltendes neuronales Netz (CNN) trainiert wird. Der Maschinenlernrahmen 3004 kann auch Primitive bereitstellen, um grundlegende Unterprogramme für lineare Algebra zu implementieren, die von vielen Maschinenlernalgorithmen ausgeführt werden, wie etwa Matrix- und Vektoroperationen.
  • Der Maschinenlernrahmen 3004 kann von der Maschinenlernanwendung 3002 empfangene Eingabedaten verarbeiten und die entsprechende Eingabe in einen Rechenrahmen 3006 erzeugen. Der Rechenrahmen 3006 kann die an den GPGPU-Treiber 3008 gelieferten zugrundeliegenden Befehle abstrahieren, um es dem Maschinenlernrahmen 3004 zu ermöglichen, Vorteil aus der Hardwarebeschleunigung über die GPGPU-Hardware 3010 zu ziehen, ohne dass der Maschinenlernrahmen 3004 genaue Kenntnisse über die Architektur der GPGPU-Hardware 3010 haben muss. Zusätzlich kann der Rechenrahmen 3006 die Hardwarebeschleunigung für den Maschinenlernrahmen 3004 über eine Vielzahl von Typen und Generationen der GPGPU-Hardware 3010 hinweg ermöglichen.
  • GPGPU-Maschinenlernbeschleunigung
  • 31 zeigt ein Multi-GPU-Rechensystem 3100 gemäß einer Ausführungsform. Das Multi-GPU-Rechensystem 3100 kann einen Prozessor 3102 umfassen, der über einen Hostschnittstellen-Switch 3104 mit mehreren GPGPUs 3106A-D gekoppelt ist. Der Hostschnittstellen-Switch 3104 ist in einer Ausführungsform eine PCI-Express-Switch-Vorrichtung, die den Prozessor 3102 mit einem PCI-Express-Bus koppelt, über den der Prozessor 3102 mit dem Satz von GPGPUs 3106A-D kommunizieren kann. Jede der mehreren GPGPUs 3106A-D kann eine Instanz der oben beschriebenen GPGPU sein. Die GPGPUs 3106A-D können über einen Satz von Hochgeschwindigkeits-Punktzu-Punkt-GPU-zu-GPU-Verbindungen 3116 miteinander verbunden sein. Die Hochgeschwindigkeits-GPU-zu-GPU-Verbindungen können über eine dedizierte GPU-Verbindung mit jeder der GPGPUs 3106A-D verbunden sein. Die P2P-GPU-Verbindungen 3116 ermöglichen eine direkte Kommunikation zwischen jeder der GPGPUs 3106A-D, ohne dass eine Kommunikation über den Host-Schnittstellenbus erforderlich ist, an den der Prozessor 3102 angeschlossen ist. Wenn GPU-zu-GPU-Verkehr zu den P2P-GPU-Verbindungen geleitet wird, bleibt der Host-Schnittstellenbus für den Systemspeicherzugriff oder für die Kommunikation mit anderen Instanzen des Multi-GPU-Rechensystems 3100, beispielsweise über ein oder mehrere Netzvorrichtungen, verfügbar. Obwohl in der dargestellten Ausführungsform die GPGPUs 3106A-D über den Hostschnittstellen-Switch 3104 mit dem Prozessor 3102 verbunden sind, umfasst der Prozessor 3102 in einer Ausführungsform eine direkte Unterstützung für die P2P-GPU-Verbindungen 3116 und kann eine direkte Verbindung zu den GPGPUs 3106A-D herstellen.
  • Implementierungen neuronaler Netze für maschinelles Lernen
  • Die von den hier beschriebenen Ausführungsformen bereitgestellte Rechenarchitektur kann dazu ausgelegt sein, Arten der Parallelverarbeitung auszuführen, die besonders zum Trainieren und Bereitstellen neuronaler Netze für maschinelles Lernen geeignet sind. Ein neuronales Netz kann als ein Netz von Funktionen mit einer Graphbeziehung verallgemeinert werden. Wie in der Technik bekannt ist, gibt es eine Vielzahl von Arten von Implementierungen neuronaler Netze, die beim maschinellen Lernen verwendet werden. Ein beispielhafter Typ eines neuronalen Netzes ist das zuvor beschriebene vorwärtskoppelnde Netz.
  • Ein zweiter beispielhafter Typ eines neuronalen Netzes ist das faltende neuronale Netz (CNN). Ein CNN ist ein spezialisiertes vorwärtskoppelndes neuronales Netz zum Verarbeiten von Daten mit einer bekannten gitterartigen Topologie wie beispielsweise Bilddaten. Dementsprechend werden CNN üblicherweise für Bildverarbeitungs- und Bilderkennungsanwendungen verwendet, sie können jedoch auch für andere Arten der Mustererkennung wie Rede- und Sprachverarbeitung verwendet werden. Die Knoten in der CNN-Eingangsschicht sind zu einem Satz von „Filtern“ (Merkmalsdetektoren, die von den in der Netzhaut gefundenen Empfangsfeldern inspiriert sind) organisiert, und die Ausgabe jedes Satzes von Filtern wird an Knoten in nachfolgenden Schichten des Netzes weitergegeben. Die Berechnungen für ein CNN umfassen ein Anwenden der mathematischen Faltungsoperation auf jedes Filter, um die Ausgabe dieses Filters zu erzeugen. Faltung ist eine spezielle mathematische Operation, die von zwei Funktionen ausgeführt wird, um eine dritte Funktion zu erzeugen, die eine modifizierte Version einer der beiden ursprünglichen Funktionen ist. In der Terminologie faltender Netze kann die erste Funktion der Faltung als Eingabe bezeichnet werden, während die zweite Funktion als Faltungskern bezeichnet werden kann. Die Ausgabe kann als Merkmalskarte bezeichnet werden. Beispielsweise kann die Eingabe in eine Faltungsschicht ein mehrdimensionales Array von Daten sein, das die verschiedenen Farbkomponenten eines Eingabebildes definiert. Der Faltungskern kann ein mehrdimensionales Array von Parametern sein, wobei die Parameter durch den Trainingsprozess für das neuronale Netz angepasst werden.
  • Rekurrente neuronale Netze (RNN) sind eine Familie von neuronalen vorwärtskoppelnden Netzen, die Rückkopplungsverbindungen zwischen Schichten aufweisen. RNNs ermöglichen die Modellierung sequentieller Daten durch gemeinsame Nutzung von Parameterdaten über verschiedene Teile des neuronalen Netzes hinweg. Die Architektur für ein RNN enthält Zyklen. Die Zyklen stellen den Einfluss eines aktuellen Werts einer Variablen auf ihren eigenen Wert zu einem zukünftigen Zeitpunkt dar, da mindestens ein Teil der Ausgabedaten aus dem RNN als Rückkopplung zur Verarbeitung nachfolgender Eingaben in einer Sequenz verwendet wird. Diese Funktion macht RNN aufgrund der variablen Art, in der Sprachdaten zusammengestellt werden können, besonders nützlich für die Sprachverarbeitung.
  • Die nachstehend beschriebenen Figuren stellen beispielhafte vorwärtskoppelnde Netze, CNN-Netze und RNN-Netze dar und beschreiben einen allgemeinen Prozess zum Trainieren bzw. bereitstellen jedes dieser Netztypen. Es versteht sich, dass diese Beschreibungen beispielhaft und nicht einschränkend für jede hierin beschriebene spezifische Ausführungsform sind und die dargestellten Konzepte allgemein auf tiefe neuronale Netze und Maschinenlerntechniken im Allgemeinen angewendet werden können.
  • Die oben beschriebenen beispielhaften neuronalen Netze können verwendet werden, um tiefes Lernen durchzuführen. Tiefes Lernen ist maschinelles Lernen mit tiefen neuronalen Netzen. Die beim tiefen Lernen verwendeten tiefen neuronalen Netze sind künstliche neuronale Netze, die aus mehreren verborgenen Schichten bestehen, im Gegensatz zu flachen neuronalen Netzen, die nur eine einzige verborgene Schicht aufweisen. Tiefere neuronale Netze sind in der Regel rechenintensiver zu trainieren. Die zusätzlichen verborgenen Schichten des Netzes ermöglichen jedoch eine mehrstufige Mustererkennung, die zu einem verringerten Ausgabefehler im Vergleich zu flachen Maschinenlerntechniken führt.
  • Tiefe neuronale Netze, die beim tiefen Lernen verwendet werden, umfassen typischerweise ein Frontend-Netz zum Durchführen einer Merkmalserkennung, das mit einem Backend-Netz gekoppelt ist, das ein mathematisches Modell darstellt, das Operationen (z. B. Objektklassifizierung, Spracherkennung usw.) basierend auf der Merkmalsdarstellung, die dem Modell bereitgestellt wird, ausführen kann. Tiefes Lernen ermöglicht maschinelles Lernen, ohne dass handgefertigte Merkmalserstellung für das Modell durchgeführt werden muss. Stattdessen können tiefe neuronale Netze Merkmale erlernen, die auf der statistischen Struktur oder Korrelation innerhalb der Eingabedaten basieren. Die erlernten Merkmale können an ein mathematisches Modell geliefert werden, das detektierte Merkmale einer Ausgabe zuordnen kann. Das von dem Netz verwendete mathematische Modell ist im Allgemeinen auf die jeweilige auszuführende Aufgabe spezialisiert und verschiedene Modelle werden verwendet, um verschiedene Aufgaben durchzuführen.
  • Sobald das neuronale Netz strukturiert ist, kann ein Lernmodell auf das Netz angewendet werden, um das Netz für die Ausführung spezifischer Aufgaben zu trainieren. Das Lernmodell beschreibt, wie die Gewichte innerhalb des Modells angepasst werden, um den Ausgabefehler des Netzes zu verringern. Die Rückübertragung von Fehlern ist ein übliches Verfahren, das verwendet wird, um neuronale Netze zu trainieren. Ein Eingabevektor wird dem Netz zur Verarbeitung vorgelegt. Die Ausgabe des Netzes wird unter Verwendung einer Verlustfunktion mit der gewünschten Ausgabe verglichen und für jedes der Neuronen in der Ausgabeschicht wird ein Fehlerwert berechnet. Die Fehlerwerte werden dann rückwärts weitergeleitet, bis jedem Neuron ein Fehlerwert zugeordnet ist, der ungefähr seinen Beitrag zu der ursprünglichen Ausgabe darstellt. Das Netz kann dann aus diesen Fehlern lernen, indem es einen Algorithmus verwendet, beispielsweise den stochastischen Gradientenabstiegsalgorithmus, um die Gewichte des neuronalen Netzes zu aktualisieren.
  • 32-33 zeigen ein beispielhaftes faltendes neuronales Netz. 32 zeigt verschiedene Schichten innerhalb eines CNN. Wie es in 32 gezeigt ist, kann ein beispielhaftes CNN, das zum Modellieren der Bildverarbeitung verwendet wird, eine Eingabe 3202 empfangen, die die rote, grüne und blaue Komponente (RGB-Komponenten) eines Eingangsbildes beschreibt. Die Eingabe 3202 kann durch mehrere Faltungsschichten (z. B. Faltungsschicht 3204, Faltungsschicht 3206) verarbeitet werden. Die Ausgabe aus den mehreren Faltungsschichten kann optional durch einen Satz vollständig verbundener Schichten 3208 verarbeitet werden. Neuronen in einer vollständig verbundenen Schicht haben vollständige Verbindungen zu allen Aktivierungen in der vorherigen Schicht, wie dies zuvor für ein vorwärtskoppelndes Netz beschrieben wurde. Die Ausgabe aus den vollständig verbundenen Schichten 3208 kann verwendet werden, um ein Ausgabeergebnis aus dem Netz zu erzeugen. Die Aktivierungen innerhalb der vollständig verbundenen Schichten 3208 können unter Verwendung von Matrixmultiplikation anstelle von Faltung berechnet werden. Nicht alle CNN-Implementierungen verwenden vollständig verbundene Schichten. Beispielsweise kann in einigen Implementierungen die Faltungsschicht 3206 eine Ausgabe für das CNN erzeugen.
  • Die Faltungsschichten sind spärlich verbunden, was sich von der herkömmlichen Konfiguration neuronaler Netze unterscheidet, die in den vollständig verbundenen Schichten 3208 zu finden ist. Herkömmliche Schichten neuronaler Netze sind vollständig verbunden, so dass jede Ausgabeeinheit mit jeder Eingabeeinheit interagiert. Die Faltungsschichten sind jedoch spärlich verbunden, da die Ausgabe der Faltung eines Feldes (anstelle des jeweiligen Zustandswerts jedes der Knoten in dem Feld) wie dargestellt in die Knoten der nachfolgenden Schicht eingegeben wird. Die den Faltungsschichten zugeordneten Kerne führen Faltungsoperationen aus, deren Ausgabe an die nächste Schicht gesendet wird. Die in den Faltungsschichten durchgeführte Dimensionsreduzierung ist ein Aspekt, der es dem CNN ermöglicht, für die Verarbeitung großer Bilder zu skalieren.
  • 33 zeigt beispielhafte Berechnungsstufen innerhalb einer Faltungsschicht eines CNN. Eine Eingabe in eine Faltungsschicht 3312 eines CNN kann in drei Stufen einer Faltungsschicht 3314 verarbeitet werden. Die drei Stufen können eine Faltungsstufe 3316, eine Detektorstufe 3318 und eine Zusammenlegungsstufe 3320 umfassen. Die Faltungsschicht 3314 kann dann Daten an eine nachfolgende Faltungsschicht ausgeben. Die letzte Faltungsschicht des Netzes kann Ausgabemerkmalskartendaten erzeugen oder einer vollständig verbundenen Schicht eine Eingabe liefern, um beispielsweise einen Klassifizierungswert für die Eingabe in das CNN zu erzeugen.
  • In der Faltungsstufe 3316 werden mehrere Faltungen parallel ausgeführt, um einen Satz linearer Aktivierungen zu erzeugen. Die Faltungsstufe 3316 kann eine affine Transformation umfassen, die eine beliebige Transformation ist, die als lineare Transformation plus Translation spezifiziert werden kann. Affine Transformationen umfassen Drehungen, Translationen, Skalierungen und Kombinationen dieser Transformationen. Die Faltungsstufe berechnet die Ausgabe von Funktionen (z. B. Neuronen), die mit spezifischen Bereichen in der Eingabe verbunden sind, die als der dem Neuron zugeordnete lokale Bereich bestimmt werden können. Die Neuronen berechnen ein Skalarprodukt zwischen den Gewichten der Neuronen und dem Bereich in der lokalen Eingabe, mit dem die Neuronen verbunden sind. Die Ausgabe aus der Faltungsstufe 3316 definiert einen Satz von linearen Aktivierungen, die von nachfolgenden Stufen der Faltungsschicht 3314 verarbeitet werden.
  • Die linearen Aktivierungen können von einer Detektorstufe 3318 verarbeitet werden. In der Detektorstufe 3318 wird jede lineare Aktivierung von einer nichtlinearen Aktivierungsfunktion verarbeitet. Die nichtlineare Aktivierungsfunktion erhöht die nichtlinearen Eigenschaften des gesamten Netzes, ohne die Empfangsfelder der Faltungsschicht zu beeinflussen. Es können verschiedene Arten von nichtlinearen Aktivierungsfunktionen verwendet werden. Ein besonderer Typ ist die gleichgerichtete Lineareinheit (ReLU), die eine Aktivierungsfunktion verwendet, die als f(x)=max(0,x) definiert ist, so dass die Aktivierung auf null begrenzt wird.
  • Die Zusammenlegungsstufe 3320 verwendet eine Zusammenlegungsfunktion, die die Ausgabe der Faltungsschicht 3306 durch eine zusammenfassende Statistik der nahegelegenen Ausgaben ersetzt. Die Zusammenlegungsfunktion kann verwendet werden, um eine Translationsinvarianz in das neuronale Netz einzubringen, so dass kleine Verschiebungen der Eingabe die zusammengelegten Ausgaben nicht verändern. Die Invarianz gegenüber lokaler Translation kann in Szenarien hilfreich sein, in denen das Vorhandensein eines Merkmals in den Eingabedaten wichtiger ist als die genaue Position des Merkmals. Während der Zusammenlegungsphase 3320 können verschiedene Arten von Zusammenlegungsfunktionen verwendet werden, einschließlich Max-Zusammenlegung, Durchschnitts-Zusammenlegung und L2-Norm-Zusammenlegung. Darüber hinaus weisen einige CNN-Implementierungen keine Zusammenlegungsphase auf. Stattdessen setzen solche Implementierungen eine zusätzliche Faltungsstufe mit einer erhöhten Schrittweite im Vergleich zu vorherigen Faltungsstufen ein.
  • Die Ausgabe aus der Faltungsschicht 3314 kann dann von der nächsten Schicht 3322 verarbeitet werden. Die nächste Schicht 3322 kann eine zusätzliche Faltungsschicht oder eine der vollständig verbundenen Schichten 3308 sein. Beispielsweise kann die erste Faltungsschicht 3304 von 33 an die zweite Faltungsschicht 3306 ausgeben, während die zweite Faltungsschicht an eine erste Schicht der vollständig verbundenen Schichten 2808 ausgeben kann.
  • 34 zeigt ein beispielhaftes rekurrentes neuronales Netz 3400. In einem rekurrenten neuronalen Netz (RNN) beeinflusst der vorherige Zustand des Netzes die Ausgabe des aktuellen Zustands des Netzes. RNN können auf verschiedene Arten unter Verwendung verschiedener Funktionen erstellt werden. Die Verwendung von RNN dreht sich im Allgemeinen um die Verwendung mathematischer Modelle zur Vorhersage der Zukunft auf der Basis einer vorherigen Abfolge von Eingaben. Zum Beispiel kann ein RNN verwendet werden, um eine statistische Sprachmodellierung durchzuführen, um ein bevorstehendes Wort unter Vorgabe einer vorherigen Abfolge von Wörtern vorherzusagen. Das dargestellte RNN 3400 kann so beschrieben werden, dass es eine Eingabeschicht 3402, die einen Eingabevektor empfängt, verborgene Schichten 404 zum Implementieren einer rekurrenten Funktion, einen Rückkopplungsmechanismus 3405 zum Freigeben eines „Speichers“ vorheriger Zustände und eine Ausgabeschicht 3406 zum Ausgeben eines Ergebnisses aufweist. Das RNN 3400 arbeitet auf der Basis von Zeitschritten. Der Zustand des RNN zu einem gegebenen Zeitschritt wird über den Rückkopplungsmechanismus 3405 basierend auf dem vorhergehenden Zeitschritt beeinflusst. Für einen gegebenen Zeitschritt wird der Zustand der verborgenen Schichten 3404 durch den vorhergehenden Zustand und die Eingabe zum aktuellen Zeitschritt definiert. Eine anfängliche Eingabe (x1) in einem ersten Zeitschritt kann von der verborgenen Schicht 3404 verarbeitet werden. Eine zweite Eingabe (x2) kann von der verborgenen Schicht 3404 unter Verwendung von Zustandsinformationen verarbeitet werden, die während der Verarbeitung der anfänglichen Eingabe (x1) bestimmt werden. Ein gegebener Zustand kann als s_t=f(Ux_t+Ws (t-1)) berechnet werden, wobei U und W Parametermatrizen sind. Die Funktion f ist im Allgemeinen eine Nichtlinearität wie die Hyperbeltangensfunktion (Tanh) oder eine Variante der Gleichrichterfunktion f(x)=max(0,x). Die in den verborgenen Schichten 3404 verwendete spezifische mathematische Funktion kann jedoch in Abhängigkeit von den spezifischen Implementierungseinzelheiten des RNN 3400 variieren.
  • Zusätzlich zu den beschriebenen grundlegenden CNN- und RNN-Netzen können Variationen dieser Netze ermöglicht werden. Eine beispielhafte RNN-Variante ist das RNN mit langem Kurzzeitgedächtnis (LSTM-RNN). LSTM-RNN sind in der Lage, langfristige Abhängigkeiten zu erlernen, die für die Verarbeitung längerer Sprachsequenzen erforderlich sein können. Eine Variante des CNN ist ein faltendes Deep-Believe-Netz, das eine ähnliche Struktur wie ein CNN aufweist und auf eine ähnliche Weise wie ein Deep-Believe-Netz trainiert wird. Ein Deep-Believe-Netz (DBN) ist ein generatives neuronales Netz, das aus mehreren Schichten stochastischer (zufälliger) Variablen besteht. DBN können mithilfe von unbeaufsichtigtem Lernen Schicht für Schicht trainiert werden. Die erlernten Gewichte des DBN können dann verwendet werden, um neuronale Vortrainings-Netze bereitzustellen, indem ein optimaler Anfangssatz von Gewichten für das neuronale Netz bestimmt wird.
  • 35 zeigt das Training und die Bereitstellung eines tiefen neuronalen Netzes. Sobald ein gegebenes Netz für eine Aufgabe strukturiert wurde, wird das neuronale Netz unter Verwendung eines Trainingsdatensatzes 3502 trainiert. Verschiedene Trainingsrahmen 3504 wurden entwickelt, um eine Hardwarebeschleunigung des Trainingsprozesses zu ermöglichen. Beispielsweise kann der oben beschriebene Maschinenlernrahmen als ein Trainingsrahmen konfiguriert sein. Der Trainingsrahmen 3504 kann sich in ein nicht trainiertes neuronales Netz 3506 einklinken und ermöglichen, dass das nicht trainierte neuronale Netz unter Verwendung der hierin beschriebenen Parallelverarbeitungsbetriebsmittel trainiert wird, um ein trainiertes neuronales Netz 3508 zu erzeugen.
  • Um den Trainingsprozess zu starten, können die anfänglichen Gewichte zufällig oder durch Vortraining unter Verwendung eines Deep-Believe-Netzes ausgewählt werden. Der Trainingszyklus kann dann entweder beaufsichtigt oder unbeaufsichtigt durchgeführt werden.
  • Beaufsichtigtes Lernen ist ein Lernverfahren, bei dem das Training als unterstützte Operation ausgeführt wird, also beispielsweise wenn der Trainingsdatensatz 3502 als Eingabe eine mit der gewünschten Ausgabe gepaarte Eingabe enthält oder wenn der Trainingsdatensatz eine Eingabe mit bekannter Ausgabe enthält und die Ausgabe des neuronalen Netzes manuell eingestuft wird. Das Netz verarbeitet die Eingaben und vergleicht die resultierenden Ausgaben mit einer Menge von erwarteten oder gewünschten Ausgaben. Fehler werden dann durch das System zurückübermittelt. Der Trainingsrahmen 3504 kann sich anpassen, um die Gewichte anzupassen, die das untrainierte neuronale Netz 3506 steuern. Der Trainingsrahmen 3504 kann Werkzeuge bereitstellen, um zu überwachen, wie gut das untrainierte neuronale Netz 3506 zu einem Modell konvergiert, das geeignet ist, basierend auf bekannten Eingabedaten korrekte Antworten zu erzeugen. Der Trainingsprozess findet wiederholt statt, da die Gewichte des Netzes angepasst werden, um die von dem neuronalen Netz erzeugte Ausgabe zu verfeinern. Der Trainingsprozess kann fortgesetzt werden, bis das neuronale Netz eine statistisch gewünschte Genauigkeit erreicht, die einem trainierten neuronalen Netz 3508 zugeordnet ist. Das trainierte neuronale Netz 3508 kann dann eingesetzt werden, um eine beliebige Anzahl von Maschinenlernoperationen zu implementieren.
  • Unbeaufsichtigtes Lernen ist ein Lernverfahren, bei dem das Netz versucht, sich unter Verwendung von nicht gekennzeichneten Daten selbst zu trainieren. Somit enthält der Trainingsdatensatz 3502 für unbeaufsichtigtes Lernen Eingabedaten ohne zugeordnete Ausgabedaten. Das untrainierte neuronale Netz 3506 kann Gruppierungen innerhalb der nicht gekennzeichneten Eingaben erlernen und kann bestimmen, wie einzelne Eingaben mit dem Gesamtdatensatz in Beziehung stehen. Unbeaufsichtigtes Training kann verwendet werden, um eine selbstorganisierende Karte zu erzeugen, die ein Typ eines trainierten neuronalen Netzes 3507 ist, der Operationen ausführen kann, die zum Reduzieren der Dimensionalität von Daten nützlich sind. Unbeaufsichtigtes Training kann auch zur Anomaliendetektion verwendet werden, wodurch Datenpunkte in einem Eingabedatensatz identifiziert werden können, die von den normalen Datenmustern abweichen.
  • Variationen des beaufsichtigten und unbeaufsichtigten Trainings können ebenfalls angewendet werden. Halbbeaufsichtigtes Lernen ist eine Technik, bei der der Trainingsdatensatz 3502 eine Mischung aus gekennzeichneten und nicht gekennzeichneten Daten derselben Verteilung enthält. Inkrementelles Lernen ist eine Variante des beaufsichtigten Lernens, bei der Eingabedaten fortlaufend zum weiteren Trainieren des Modells verwendet werden. Inkrementelles Lernen ermöglicht es dem trainierten neuronalen Netz 3508, sich an die neuen Daten 3512 anzupassen, ohne das in dem Netz während des anfänglichen Trainings gewonnene Wissen zu vergessen.
  • Ob nun beaufsichtigt oder unbeaufsichtigt, der Trainingsprozess für besonders tiefe neuronale Netze kann für einen einzelnen Rechenknoten zu rechenintensiv sein. Anstelle eines einzelnen Rechenknotens kann ein verteiltes Netz von Rechenknoten verwendet werden, um den Trainingsprozess zu beschleunigen.
  • 36A ist ein Blockdiagramm, das verteiltes Lernen darstellt. Das verteilte Lernen ist ein Trainingsmodell, das mehrere verteilte Rechenknoten wie die oben beschriebenen Knoten verwendet, um ein beaufsichtigtes oder unbeaufsichtigtes Training eines neuronalen Netzes durchzuführen. Die verteilten Rechenknoten können jeweils einen oder mehrere Hostprozessoren und einen oder mehrere der Allzweck-Verarbeitungsknoten umfassen, beispielsweise eine hochparallele Allzweck-Grafikverarbeitungseinheit. Wie dargestellt kann verteiltes Lernen mit Modellparallelität 3602, Datenparallelität 3604 oder einer Kombination aus Modell- und Datenparallelität durchgeführt werden.
  • Bei der Modellparallelität 3602 können verschiedene Rechenknoten in einem verteilten System Trainingsberechnungen für verschiedene Teile eines einzelnen Netzes durchführen. Beispielsweise kann jede Schicht eines neuronalen Netzes von einem anderen Verarbeitungsknoten des verteilten Systems trainiert werden. Zu den Vorteilen der Modellparallelität gehört die Möglichkeit, auf besonders große Modelle zu skalieren. Das Aufteilen der verschiedenen Schichten des neuronalen Netzes zugeordneten Berechnungen ermöglicht das Training sehr großer neuronaler Netze, bei denen die Gewichte aller Schichten nicht in den Speicher eines einzelnen Rechenknotens passen würden. In einigen Fällen kann Modellparallelität besonders nützlich sein, um ein unbeaufsichtigtes Training großer neuronaler Netze durchzuführen.
  • Bei der Datenparallelität 3604 haben die verschiedenen Knoten des verteilten Netzes eine vollständige Instanz des Modells und jeder Knoten empfängt einen anderen Teil der Daten. Die Ergebnisse der verschiedenen Knoten werden dann kombiniert. Obwohl verschiedene Ansätze für Datenparallelität möglich sind, erfordern alle Ansätze für datenparalleles Training eine Technik zum Kombinieren von Ergebnissen und zum Synchronisieren der Modellparameter zwischen jeweiligen Knoten. Beispielhafte Ansätze zum Kombinieren von Daten umfassen eine Parametermittelung und eine aktualisierungsbasierte Datenparallelität. Die Parametermittelung trainiert jeden Knoten an einer Teilmenge der Trainingsdaten und setzt die globalen Parameter (z. B. Gewichte, Vorspannungen) auf den Durchschnitt der Parameter aus jedem Knoten. Die Parametermittelung erfolgt über einen zentralen Parameterserver, der die Parameterdaten pflegt. Die aktualisierungsbasierte Datenparallelität ähnelt der Parametermittelung, mit der Ausnahme, dass anstelle der Übertragung von Parametern von den Knoten an den Parameterserver die Aktualisierungen für das Modell übertragen werden. Außerdem kann eine aktualisierungsbasierte Datenparallelität dezentral durchgeführt werden, wobei die Aktualisierungen komprimiert werden und zwischen Knoten übertragen werden.
  • Die kombinierte Modell- und Datenparallelität 3606 kann beispielsweise in einem verteilten System implementiert werden, in dem jeder Rechenknoten mehrere GPUs enthält. Jeder Knoten kann eine vollständige Instanz des Modells haben, wobei separate GPUs in jedem Knoten verwendet werden, um verschiedene Teile des Modells zu trainieren.
  • Das verteilte Training weist im Vergleich zum Training auf einer einzelnen Maschine erhöhten Zusatzaufwand auf. Die hier beschriebenen Parallelprozessoren und GPGPUs können jedoch jeweils verschiedene Techniken implementieren, um den Zusatzaufwand für verteiltes Training zu verringern, einschließlich Techniken zum Ermöglichen einer GPU-zu-GPU-Datenübertragung mit hoher Bandbreite und einer beschleunigten Datenfernsynchronisation.
  • Beispielhafte Maschinenlernanwendungen
  • Maschinelles Lernen kann angewendet werden, um eine Vielzahl von technologischen Problemen zu lösen, einschließlich, aber nicht beschränkt auf, maschinelles Sehen, autonomes Fahren und Navigation, Spracherkennung und Sprachverarbeitung. Maschinelles Sehen ist traditionell eines der aktivsten Forschungsgebiete für Maschinenlernanwendungen. Anwendungen des maschinellen Sehens reichen von der Reproduktion menschlicher Sehfähigkeiten wie der Erkennung von Gesichtern bis zur Schaffung neuer Kategorien von Sehfähigkeiten. Beispielsweise können Bildverarbeitungsanwendungen dazu ausgelegt sein, Schallwellen anhand der Schwingungen erkennen, die in Objekten ausgelöst werden, die in einem Video sichtbar sind. Durch das mit Parallelprozessoren beschleunigte maschinelle Lernen können Anwendungen maschinellen Sehens unter Verwendung eines erheblich größeren Trainingsdatensatzes als bisher möglich trainiert werden und Inferenzsysteme unter Verwendung von Parallelprozessoren mit geringem Energieverbrauch implementiert werden.
  • Das mit parallelen Prozessoren beschleunigte maschinelle Lernen hat Anwendungen beim autonomen Fahren einschließlich Fahrspur- und Verkehrszeichenerkennung, Hindernisvermeidung, Navigation und Fahrsteuerung. Techniken für beschleunigtes maschinelles Lernen können verwendet werden, um basierend auf Datensätzen Fahrmodelle zu trainieren, die die geeigneten Antworten auf bestimmte Trainingseingaben definieren. Die hierin beschriebenen Parallelprozessoren können ein schnelles Training der zunehmend komplexen neuronalen Netze ermöglichen, die für autonome Fahrlösungen verwendet werden, und ermöglichen den Einsatz von Inferenzprozessoren mit geringem Energieverbrauch in einer mobilen Plattform, die für die Integration in autonome Fahrzeuge geeignet ist.
  • Mit Parallelprozessoren beschleunigte tiefe neuronale Netze haben Maschinenlernansätze für die automatische Spracherkennung (ASR) ermöglicht. ASR umfasst die Erstellung einer Funktion, die die wahrscheinlichste Sprachsequenz unter Vorgabe einer eingegebenen akustischen Sequenz berechnet. Durch beschleunigtes maschinelles Lernen mittels tiefen neuronalen Netzen konnten die bisher für ASR verwendeten Hidden-Markov-Modelle (HMM) und Gauß-Mischungsmodelle (GMM) ersetzt werden.
  • Mit Parallelprozessoren beschleunigtes maschinelles Lernen kann auch verwendet werden, um die Verarbeitung natürlicher Sprache zu beschleunigen. Automatische Lernprozeduren können statistische Inferenzalgorithmen verwenden, um Modelle zu erzeugen, die gegenüber fehlerhaften oder nicht vertrauten Eingaben robust sind. Beispielhafte Anwendungen für die Verarbeitung natürlicher Sprachen umfassen eine automatische maschinelle Übersetzung zwischen menschlichen Sprachen.
  • Die zum maschinellen Lernen verwendeten Parallelverarbeitungsplattformen können in Trainingsplattformen und Einsatzplattformen unterteilt werden. Die Trainingsplattformen sind im Allgemeinen hochgradig parallel und umfassen Optimierungen zur Beschleunigung des Trainings eines einzelnen Knotens mit mehreren GPUs und des Trainings mehrerer Knoten mit mehreren GPUs. Beispielhafte Parallelprozessoren, die für das Training geeignet sind, umfassen die hochparallele Allzweck-Grafikverarbeitungseinheit und/oder die hierin beschriebenen Multi-GPU-Rechensysteme. Im Gegensatz dazu umfassen eingesetzte Maschinenlernplattformen im Allgemeinen Parallelprozessoren mit geringerer Leistung, die zur Verwendung in Produkten wie Kameras, autonomen Robotern und autonomen Fahrzeugen geeignet sind.
  • 36B zeigt ein beispielhaftes Inferenz-Ein-Chip-System (Inferenz-SOC) 3700, das zum Durchführen von Inferenz unter Verwendung eines trainierten Modells geeignet ist. Das SOC 3700 kann Verarbeitungskomponenten einschließlich eines Medienprozessors 3702, eines Sichtprozessors 3704, einer GPGPU 3706 und eines Mehrkernprozessors 3708, integrieren. Das SOC 33700 kann zudem einen chipinternen Speicher 3705 aufweisen, der einen gemeinsam genutzten chipinternen Datenpool ermöglichen kann, auf den jede der Verarbeitungskomponenten zugreifen kann. Die Verarbeitungskomponenten können für den Betrieb mit geringem Energieverbrauch optimiert sein, um den Einsatz auf einer Vielzahl von Maschinenlernplattformen einschließlich autonomer Fahrzeuge und autonomer Roboter zu ermöglichen. Beispielsweise kann eine Implementierung des SOC 3700 als Teil des Hauptsteuersystems für ein autonomes Fahrzeug verwendet werden. Wenn das SOC 3700 für die Verwendung in autonomen Fahrzeugen ausgelegt ist, ist das SOC so konzipiert und ausgelegt, dass die relevanten Standards für die funktionale Sicherheit des Rechtssystems des Einsatzlandes eingehalten werden.
  • Während des Betriebs können der Medienprozessor 3702 und der Sichtprozessor 3104 zusammenarbeiten, um Operationen maschinellen Sehens zu beschleunigen. Der Medienprozessor 3702 kann eine Decodierung von mehreren hochauflösenden Videoströmen (z. B. 4K, 8K) mit niedriger Latenz ermöglichen. Die decodierten Videoströme können in einen Puffer im chipinternen Speicher 3705 geschrieben werden. Der Sichtprozessor 3704 kann dann das decodierte Video parsen und vorbereitende Verarbeitungsoperationen an den Frames des decodierten Videos durchführen, um die Verarbeitung der Frames unter Verwendung eines trainierten Bilderkennungsmodells vorzubereiten. Beispielsweise kann der Sichtprozessor 3704 Faltungsoperationen für ein CNN beschleunigen, das zum Ausführen einer Bilderkennung an den hochauflösenden Videodaten verwendet wird, während Backend-Modellberechnungen von der GPGPU 3706 durchgeführt werden.
  • Der Mehrkernprozessor 3708 kann eine Steuerlogik aufweisen, um die Sequenzierung und Synchronisierung von Datenübertragungen und gemeinsamen Speicheroperationen zu unterstützen, die von dem Medienprozessor 3702 und vom Sichtprozessor 3104 ausgeführt werden. Der Mehrkernprozessor 3708 kann auch als Anwendungsprozessor zum Ausführen von Softwareanwendungen, die die Inferenzberechnungsfähigkeit der GPGPU 3706 nutzen können, fungieren. Zum Beispiel kann mindestens ein Teil der Navigations- und Fahrlogik in Software implementiert werden, die auf dem Mehrkernprozessor 3708 ausgeführt wird. Eine solche Software kann Rechenarbeitslasten direkt an die GPGPU 3706 ausgeben oder die Rechenarbeitslasten können an den Mehrkernprozessor 3708 ausgegeben werden, der mindestens einen Teil dieser Operationen auf die GPGPU 3706 auslagern kann.
  • Die GPGPU 3706 kann Rechencluster wie eine Niedrigenergiekonfiguration der Rechencluster DPLAB06A-DPLAB06H in der hochparallelen Allzweck-Grafikverarbeitungseinheit DPLAB00 umfassen. Die Rechencluster in der GPGPU 3706 können Befehle unterstützen, die speziell für die Durchführung von Inferenzberechnungen in einem trainierten neuronalen Netz optimiert sind. Beispielsweise kann die GPGPU 3706 Befehle zum Ausführen von Berechnungen mit geringer Genauigkeit wie 8-Bit- und 4-Bit-Ganzzahlvektoroperationen unterstützen.
  • Strahlverfolgungsarchitektur
  • In einer Implementierung umfasst der Grafikprozessor eine Schaltungsanordnung und/oder Programmcode zum Durchführen einer Echtzeitstrahlverfolgung. In einigen Ausführungsformen ist ein dedizierter Satz von Strahlverfolgungskernen in dem Grafikprozessor enthalten, um die verschiedenen hier beschriebenen Strahlverfolgungsoperationen einschließlich Strahldurchquerungs- und/oder Strahlschnittoperationen durchzuführen. Zusätzlich zu den Strahlverfolgungskernen umfasst eine Ausführungsform mehrere Sätze von Grafikverarbeitungskernen zum Ausführen programmierbarer Schattierungsoperationen und mehrere Sätze von Tensorkernen zum Ausführen von Matrixoperationen an Tensordaten.
  • 37 zeigt einen beispielhaften Abschnitt einer solchen Grafikverarbeitungseinheit (GPU) 3105, die dedizierte Sätze von Grafikverarbeitungsbetriebsmitteln umfasst, die in Mehrkerngruppen 3700A-N angeordnet sind. Obwohl nur die Einzelheiten einer einzelnen Mehrkerngruppe 3700A angegeben sind, versteht es sich, dass die anderen Mehrkerngruppen 3700B-N mit den gleichen oder ähnlichen Sätzen von Grafikverarbeitungsbetriebsmitteln ausgestattet sein können.
  • Wie dargestellt kann eine Mehrkerngruppe 3700A einen Satz von Grafikkernen 3730, einen Satz von Tensorkernen 3740 und einen Satz von Strahlverfolgungskernen 3750 umfassen. Ein Planer/Abfertiger 3710 plant und verteilt die Grafikstränge zur Ausführung auf den verschiedenen Kernen 3730, 3740, 3750. Ein Satz von Registersätzen 3720 speichert Operandenwerte, die von den Kernen 3730, 3740, 3750 beim Ausführen der Grafikstränge verwendet werden. Dabei kann es sich beispielsweise um Ganzzahlregister zum Speichern von Ganzzahlwerten, Gleitkommaregister zum Speichern von Gleitkommawerten, Vektorregister zum Speichern von gepackten Datenelementen (Ganzzahl- und/oder Gleitkommadatenelementen) und Kachelregister zum Speichern von Tensor-/Matrixwerten handeln. In einer Ausführungsform sind die Kachelregister als kombinierte Sätze von Vektorregistern implementiert.
  • Ein oder mehrere Ebene-1-Caches (L1-Caches) und Textureinheiten 3760 speichern Grafikdaten wie Texturdaten, Vertexdaten, Pixeldaten, Strahldaten, Grenzvolumendaten usw. lokal in jeder Mehrkerngruppe 3700A. Ein Level-2--Cache (L2-Cache) 3780, der von allen oder einer Teilmenge der Mehrkerngruppen 3700A-N gemeinsam genutzt wird, speichert Grafikdaten und/oder Befehle für mehrere gleichzeitige Grafikstränge. Wie dargestellt kann der L2-Cache 3780 von mehreren Mehrkerngruppen 3700A-N gemeinsam genutzt werden. Ein oder mehrere Speichercontroller 3770 koppeln die GPU 3705 mit einem Speicher 3798, der ein Systemspeicher (z. B. DRAM) und/oder ein dedizierter Grafikspeicher (z. B. GDDR6-Speicher) sein kann.
  • Die Eingabe/Ausgabe-Schaltungsanordnung (E/A-Schaltungsanordnung) 3795 koppelt die GPU 3705 mit einer oder mehreren E/A-Vorrichtungen 3795 wie etwa Digitalsignalprozessoren (DSPs), Netzcontrollern oder Anwendereingabevorrichtungen. Eine chipinterne Zwischenverbindung kann verwendet werden, um die E/A-Vorrichtungen 3790 mit der GPU 3705 und dem Speicher 3798 zu koppeln. Eine oder mehrere E/A-Speicherverwaltungseinheiten (IOMMUs) 3770 der E/A-Schaltungsanordnung 3795 koppeln die E/A-Vorrichtungen 3790 direkt mit dem Systemspeicher 3798. In einer Ausführungsform verwaltet die IOMMU 3770 mehrere Sätze von Seitentabellen zum Zuordnen von virtuellen Adressen zu physischen Adressen in dem Systemspeicher 3798. In dieser Ausführungsform können sich die E/A-Vorrichtungen 3790, die CPU(s) 3799 und die GPU(s) 3705 den gleichen virtuellen Adressraum teilen.
  • In einer Implementierung unterstützt die IOMMU 3770 Virtualisierung. In diesem Fall kann sie einen ersten Satz von Seitentabellen, um virtuelle Gast-/Grafikadressen auf physische Gast-/Grafikadressen abzubilden, und einen zweiten Satz von Seitentabellen, um die physischen Gast-/Grafikadressen auf physische System-/Hostadressen abzubilden (z. B. innerhalb des Systemspeichers 3798), verwalten. Die Basisadressen von jeweils dem ersten und zweiten Satz von Seitentabellen können in Steuerregistern gespeichert und bei einem Kontextwechsel ausgetauscht werden (z. B. damit der neue Kontext mit Zugriff auf den relevanten Satz von Seitentabellen versehen wird). Obwohl dies in 37 nicht dargestellt ist, kann jeder der Kerne 3730, 3740, 3750 und/oder der Mehrkerngruppen 3700A-N Übersetzungspuffer (TLBs) aufweisen, um Übersetzungen von Gast virtuell zu Gast physisch, Übersetzungen von Gast physisch zu Host physisch und Übersetzungen von Gast virtuell zu Host physisch zwischenzuspeichern.
  • In einer Ausführungsform sind die CPUs 3799, GPUs 3705 und E/A--Vorrichtungen 3790 auf einem einzelnen Halbleiterchip und/oder einer einzelnen Chipbaugruppe integriert. Der dargestellte Speicher 3798 kann auf demselben Chip integriert sein oder kann über eine chipexterne Schnittstelle mit den Speichercontrollern 3770 gekoppelt sein. In einer Implementierung umfasst der Speicher 3798 einen GDDR6-Speicher, der den gleichen virtuellen Adressraum wie andere physische Speicher auf Systemebene teilt, obwohl die zugrundeliegenden Prinzipien der Erfindung nicht auf diese spezifische Implementierung beschränkt sind.
  • In einer Ausführungsform umfassen die Tensorkerne 3740 mehrere Ausführungseinheiten, die speziell zum Ausführen von Matrixoperationen ausgelegt sind, die die grundlegende Rechenoperation sind, die zum Ausführen von Operationen des tiefen Lernens verwendet wird. Zum Beispiel können simultane Matrixmultiplikationsoperationen für Training und Inferenz von neuronalen Netzen verwendet werden. Die Tensorkerne 3740 können eine Matrixverarbeitung unter Verwendung einer Vielzahl von Operandengenauigkeiten durchführen, einschließlich Gleitkommazahlen mit einfacher Genauigkeit (z. B. 32 Bit), Gleitkommazahlen mit halber Genauigkeit (z. B. 16 Bits, Ganzzahlwörter (16 Bit), Bytes (8 Bit) und Halb-Bytes (4 Bit). In einer Ausführungsform extrahiert eine Implementierung neuronaler Netze Merkmale jeder gerenderten Szene, wobei möglicherweise Einzelheiten aus mehreren Frames kombiniert werden, um ein qualitativ hochwertiges endgültiges Bild zu erstellen.
  • In Implementierungen tiefen Lernens kann parallele Matrixmultiplikationsarbeit zur Ausführung auf den Tensorkernen 3740 eingeplant werden. Das Training von neuronalen Netzen erfordert insbesondere eine signifikante Anzahl von Matrixpunktproduktoperationen. Um eine Innenproduktformulierung einer N×N×N-Matrixmultiplikation zu verarbeiten, können die Tensorkerne 3740 mindestens N Punktproduktverarbeitungselemente enthalten. Bevor die Matrixmultiplikation beginnt, wird eine gesamte Matrix in Kachelregister geladen und mindestens eine Spalte einer zweiten Matrix wird für N Zyklen in jedem Zyklus geladen. In jedem Zyklus werden N Punktprodukte verarbeitet.
  • Matrixelemente können in Abhängigkeit von der bestimmten Implementierung mit unterschiedlichen Genauigkeiten gespeichert werden, einschließlich 16-Bit-Wörtern, 8-Bit-Bytes (z. B. INT8) und 4-Bit-Halb-Bytes (z. B. INT4). Für die Tensorkerne 3740 können verschiedene Genauigkeitsmodi spezifiziert werden, um sicherzustellen, dass die effizienteste Genauigkeit für verschiedene Arbeitslasten verwendet wird (z. B. Inferenz-Arbeitslasten, die eine Quantisierung in Bytes und Halb-Bytes tolerieren können).
  • In einer Ausführungsform beschleunigen die Strahlverfolgungskerne 3750 Strahlverfolgungsoperationen sowohl für Echtzeit-Strahlverfolgungs- als auch Nicht-Echtzeit-Strahlverfolgungs-Implementierungen. Insbesondere umfassen die Strahlverfolgungskerne 3750 eine Strahldurchquerungs-/Strahlschnitt-Schaltungsanordnung zum Durchführen einer Strahldurchquerung unter Verwendung von Grenzvolumenhierarchien (BVHs) und zum Identifizieren von Schnittmengen zwischen Strahlen und Primitiven, die in den BVH-Volumina eingeschlossen sind. Die Strahlverfolgungskerne 3750 können auch eine Schaltungsanordnung zum Durchführen von Tiefentests und Aussortieren (z. B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) umfassen. In einer Implementierung führen die Strahlverfolgungskerne 3750 Durchquerungs- und Schnittoperationen gemäß den hierin beschriebenen Bildentrauschungstechniken durch, von denen zumindest ein Teil auf den Tensorkernen 3740 ausgeführt werden kann. In einer Ausführungsform implementieren die Tensorkerne 3740 beispielsweise ein neuronales Netz für tiefes Lernen zum Durchführen der Entrauschung von durch die Strahlverfolgungskerne 3750 erzeugten Frames. Die CPU(s) 3799, die Grafikkerne 3730 und/oder die Strahlverfolgungskerne 3750 können jedoch auch die gesamte Entrauschung oder einen Teil davon und/oder Algorithmen für tiefes Lernen implementieren.
  • Zudem kann wie oben beschrieben ein verteilter Ansatz zum Entrauschen verwendet werden, bei dem sich die GPU 3105 in einer Rechenvorrichtung befindet, die über ein Netz oder eine Hochgeschwindigkeitsverbindung mit anderen Rechenvorrichtungen verbunden ist. In dieser Ausführungsform teilen sich die miteinander verbundenen Rechenvorrichtungen Lern-/Trainingsdaten für ein neuronales Netz, um die Geschwindigkeit zu verbessern, mit der das Gesamtsystem lernt, eine Entrauschung für verschiedene Arten von Frames und/oder verschiedene Grafikanwendungen durchzuführen.
  • In einer Ausführungsform verarbeiten die Strahlverfolgungskerne 3750 alle BVH-Durchquerungs- und Strahl-Primitiv-Schnittstellen, wodurch vermieden wird, dass die Grafikkerne 3730 mit Tausenden von Befehlen pro Strahl überlastet werden. In einer Ausführungsform umfasst jeder Strahlverfolgungskern 3750 einen ersten Satz von spezialisierten Schaltungen zum Durchführen von Begrenzungsrahmentests (z. B. für Durchquerungsoperationen) und einen zweiten Satz von spezialisierten Schaltungen zum Durchführen der Strahl-Dreieck-Schnitt-Tests (z. B. schneidende Strahlen, die durchquert worden sind). Somit kann in einer Ausführungsform die Mehrkerngruppe 3700A einfach eine Strahlsonde starten und die Strahlverfolgungskerne 3750 führen unabhängig eine Strahldurchquerung und eine einen Strahlschnitt durch und geben Trefferdaten (z. B. einen Treffer, keinen Treffer, mehrere Treffer usw.) an den Strangkontext zurück. Die anderen Kerne 3730, 3740 werden zum Durchführen anderer Grafik- oder Berechnungsarbeit freigegeben, während die Strahlverfolgungskerne 3750 die Durchquerungs- und Schnittoperationen durchführen.
  • In einer Ausführungsform umfasst jeder Strahlverfolgungskern 3750 eine Durchquerungseinheit zum Durchführen von BVH-Testoperationen und eine Schnitteinheit, die Strahl-Primitiv-Schnitt-Tests durchführt. Die Schnitteinheit erzeugt eine Antwort „Treffer“, „Kein Treffer“ oder „Mehrfacher Treffer“, die sie an den entsprechenden Strang liefert. Während der Durchquerungs- und Schnittoperationen werden die Ausführungsbetriebsmittel der anderen Kerne (z. B. der Grafikkerne 3730 und der Tensorkerne 3740) freigegeben, um andere Formen der Grafikarbeit auszuführen.
  • In einer speziellen unten beschriebenen Ausführungsform wird ein hybrider Ansatz zur Rasterung/Strahlverfolgung verwendet, bei dem die Arbeit unter den Grafikkernen 3730 und den Strahlverfolgungskernen 3750 verteilt wird.
  • In einer Ausführungsform umfassen die Strahlverfolgungskerne 3150 (und/oder andere Kerne 3730, 3740) Hardwareunterstützung für einen Strahlverfolgungsbefehlssatz wie etwa Microsofts DirectX-Strahlverfolgung (DXR), der einen DispatchRays-Befehl sowie Strahlerzeugungs-, Nächster-Treffer-, Beliebiger-Treffer- und Fehltreffer-Schattierer, die die Zuweisung eindeutiger Sätze von Schattierern und Texturen für jedes Objekt ermöglichen. Eine andere Strahlverfolgungsplattform, die von den Strahlverfolgungskernen 3750, den Grafikkernen 3730 und den Tensorkernen 3740 unterstützt werden kann, ist Vulkan 1.1.85. Es ist jedoch zu beachten, dass die der Erfindung zugrundeliegenden Prinzipien nicht auf eine bestimmte Strahlverfolgungs-ISA beschränkt sind.
  • Im Allgemeinen können die verschiedenen Kerne 3750, 3740, 3730 einen Strahlverfolgungsbefehlssatz unterstützen, der Befehle/Funktionen für Strahlerzeugung, nächsten Treffer, beliebigen Treffer, Strahl-Primitiv-Schnitt, pro-Primitiv und hierarchische Begrenzungsrahmenkonstruktion, Fehltreffer, Besuch und Ausnahmen umfasst. Insbesondere umfasst eine Ausführungsform Strahlverfolgungsbefehle, um die folgenden Funktionen auszuführen:
    • Strahlerzeugung - Strahlerzeugungsbefehle können für jedes Pixel, jede Abtastung oder andere anwenderdefinierte Arbeitszuweisungen ausgeführt werden.
    • Nächster Treffer - Ein Nächster-Treffer-Befehl kann ausgeführt werden, um den nächstgelegenen Schnittpunkt eines Strahls mit Primitiven innerhalb einer Szene zu lokalisieren.
    • Beliebiger Treffer - Ein Beliebiger-Treffer-Befehl ermittelt mehrere Schnittpunkte zwischen einem Strahl und Primitiven innerhalb einer Szene, um möglicherweise einen neuen nächstgelegenen Schnittpunkt zu identifizieren.
    • Schnitt - Ein Schnittbefehl führt einen Strahl-Primitiv-Schnitt-Test durch und gibt ein Ergebnis aus.
    • Pro-Primitiv-Begrenzungsrahmenkonstruktion - Dieser Befehl baut einen Begrenzungsrahmen um ein gegebenes Primitiv oder eine gegebene Gruppe von Primitiven (z. B. beim Aufbau einer neuen BVH- oder einer anderen Beschleunigungsdatenstruktur).
    • Fehltreffer - Gibt an, dass ein Strahl die gesamte Geometrie innerhalb einer Szene oder eines bestimmten Bereichs einer Szene verfehlt.
    • Besuch - Gibt die Kindervolumen an, die ein Strahl durchqueren wird.
    • Ausnahmen - Umfasst verschiedene Arten von Ausnahmebehandlern (z. B. aufgerufen für verschiedene Fehlerbedingungen).
  • Hierarchische Strahlbündelverfolgung
  • Begrenzungsvolumenhierarchien werden üblicherweise verwendet, um die Effizienz zu verbessern, mit der Operationen an Grafikprimitiven und anderen Grafikobjekten ausgeführt werden. Eine BVH ist eine hierarchische Baumstruktur, die auf einer Menge von geometrischen Objekten basiert. Oben in der Baumstruktur befindet sich der Wurzelknoten, der alle geometrischen Objekte in einer bestimmten Szene einschließt. Die einzelnen geometrischen Objekte werden in Begrenzungsvolumina eingehüllt, die die Blattknoten des Baums bilden. Diese Knoten werden dann als kleine Mengen gruppiert und in größere Begrenzungsvolumina eingeschlossen. Diese wiederum werden rekursiv gruppiert und in andere größere Begrenzungsvolumina eingeschlossen, was schließlich zu einer Baumstruktur mit einem einzelnen Begrenzungsvolumen führt, das durch den Wurzelknoten an der Oberseite des Baums dargestellt wird. Begrenzungsvolumenhierarchien werden verwendet, um eine Vielzahl von Operationen an Sätzen von geometrischen Objekten effizient zu unterstützen, z. B. Kollisionsdetektion, Primitiv-Aussortierung und Strahldurchquerungs-/Strahlschnittoperationen, die bei der Strahlverfolgung verwendet werden.
  • In Strahlverfolgungsarchitekturen werden Strahlen durch eine BVH geleitet, um Strahl-Primitiv-Schnittpunkte zu bestimmen. Wenn ein Strahl beispielsweise nicht durch den Wurzelknoten der BVH geht, schneidet der Strahl keines der von der BVH eingeschlossenen Primitive und es ist keine weitere Verarbeitung für den Strahl in Bezug auf diesen Satz von Primitiven erforderlich. Wenn ein Strahl durch einen ersten Kinderknoten der BVH, aber nicht durch den zweiten Kinderknoten geht, muss der Strahl nicht gegen irgendwelche von dem zweiten Kinderknoten eingeschlossenen Primitive getestet werden. Auf diese Weise bietet ein BVH einen effizienten Mechanismus zum Testen auf Strahl-Primitiv-Schnittpunkte.
  • In einer Ausführungsform der Erfindung werden Gruppen von zusammenhängenden Strahlen, die als „Strahlenbündel“ bezeichnet werden, statt einzelne Strahlen gegen die BVH getestet. 38 zeigt ein beispielhaftes Strahlenbündel 3801, der durch vier verschiedene Strahlen umrissen ist. Alle Strahlen, die das durch die vier Strahlen definierte Feld 3800 schneiden, werden als innerhalb desselben Strahlenbündels liegend betrachtet. Obwohl das Strahlenbündel 3801 in 38 durch eine rechteckige Anordnung von Strahlen definiert ist, können Strahlenbündel auf verschiedene andere Arten unter bleibender Einhaltung der zugrundeliegenden Prinzipien der Erfindung (z. B. Kreise, Ellipsen usw.) definiert sein.
  • 39 zeigt eine beispielhafte Ausführungsform, in der eine Strahlverfolgungsmaschine 3910 einer GPU 3920 die hier beschriebenen Strahlenbündelverfolgungstechniken implementiert. Insbesondere erzeugt die Strahlerzeugungsschaltungsanordnung 3904 mehrere Strahlen, für die Durchquerungs- und Schnittoperationen durchzuführen sind. Anstatt jedoch Durchquerungs- und Schnittoperationen an einzelnen Strahlen durchzuführen, führt die dargestellte Ausführungsform Durchquerungs- und Schnittoperationen unter Verwendung einer Hierarchie von Strahlenbündeln 3907 durch, die durch die Strahlenbündelhierarchie-Konstruktionsschaltung 3905 erzeugt wird. In einer Ausführungsform ist die Strahlenbündelhierarchie analog zu der Begrenzungsvolumenhierarchie (BVH). Zum Beispiel liefert 40 ein Beispiel eines Primärstrahlenbündels 4000, das in mehrere verschiedene Komponenten unterteilt sein kann. Insbesondere kann das Primärstrahlenbündel 4000 in die Quadranten 4001 bis 4004 unterteilt sein und jeder Quadrant kann selbst in Unterquadranten wie die Unterquadranten A-D innerhalb des Quadranten 4004 unterteilt sein. Das Primärstrahlenbündel kann auf verschiedene Arten unterteilt sein. Beispielsweise kann in einer Ausführungsform das Primärstrahlenbündel in zwei Hälften (anstelle von Quadranten) geteilt sein und jede Hälfte kann in zwei Hälften geteilt sein und so weiter. Unabhängig davon, wie die Unterteilungen vorgenommen werden, wird in einer Ausführungsform eine hierarchische Struktur auf ähnliche Weise wie eine BVH erzeugt, z. B. mit einem Wurzelknoten, der das Primärstrahlenbündel 4000 darstellt, einer Kindknoten erster Ebene, die jeweils durch einen Quadranten 4001-4004 dargestellt sind, Kindknoten zweiter Ebene für jeden Unterquadranten A-D und so weiter.
  • In einer Ausführungsform führt die Durchquerungs-/Schnittschaltungsanordnung 3906, sobald die Strahlenbündelhierarchie 3907 aufgebaut ist, Durchquerungs-/Schnittoperationen unter Verwendung der Strahlenbündelhierarchie 3907 und der BVH 3908 durch. Insbesondere kann sie das Strahlenbündel gegen die BVH- und Ausschluss-Abschnitte des Strahlenbündels testen, die keine Teile der BVH schneiden. Unter Verwendung der in 40 gezeigten Daten können beispielsweise dann, wenn sich die Unterstrahlenbündel, die den Unterbereichen 4002 und 4003 zugeordnet sind, nicht mit der BVH oder einem bestimmten Zweig der BVH schneiden, in Bezug auf die BVH oder den Zweig aussortiert werden. Die verbleibenden Abschnitte 4001, 4004 können gegen die BVH getestet werden, indem eine Tiefensuche oder ein anderer Suchalgorithmus durchgeführt wird.
  • Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in 41 dargestellt. Das Verfahren kann im Kontext der oben beschriebenen Grafikverarbeitungsarchitekturen implementiert werden, ist jedoch nicht auf eine bestimmte Architektur beschränkt.
  • Bei 4100 wird ein Primärstrahlenbündel konstruiert, das mehrere Strahlen umfasst, und bei 4101 wird das Strahlenbündel unterteilt und hierarchische Datenstrukturen werden erzeugt, um eine Strahlenbündelhierarchie zu erzeugen. In einer Ausführungsform werden die Operationen 4100-4101 als eine einzige integrierte Operation ausgeführt, die eine Strahlenbündelhierarchie aus mehreren Strahlen aufbaut. Bei 4102 wird die Strahlenbündelhierarchie mit einer BVH verwendet, um Strahlen (aus der Strahlenbündelhierarchie) und/oder Knoten/Primitive aus der BVH auszusortieren. Bei 4103 werden Strahl-Primitiv-Schnittpunkte für die verbleibenden Strahlen und Primitive bestimmt.
  • Verlustbehaftete und Verlustfreie Paketkompression in einem verteilten Strahlenverfolgungssystem
  • In einer Ausführungsform werden Strahlverfolgungsoperationen über mehrere Rechenknoten verteilt, die über ein Netz miteinander verbunden sind. 42 zeigt beispielsweise einen Strahlverfolgungs-Cluster 4200, der mehrere Strahlverfolgungsknoten 4210-4213 umfasst, die Strahlverfolgungsoperationen parallel ausführen, wobei möglicherweise die Ergebnisse an einem der Knoten kombiniert werden. In der dargestellten Architektur sind die Strahlverfolgungsknoten 4210-4213 über ein Gateway kommunikationstechnisch mit einer clientseitigen Strahlverfolgungsanwendung 4230 gekoppelt.
  • Eine der Schwierigkeiten bei einer verteilten Architektur ist die große Menge an paketierten Daten, die zwischen jeweiligen der Strahlverfolgungsknoten 4210-4213 übertragen werden müssen. In einer Ausführungsform werden sowohl verlustfreie Komprimierungstechniken als auch verlustbehaftete Komprimierungstechniken verwendet, um die zwischen den Strahlverfolgungsknoten 4210-4213 übertragenen Daten zu reduzieren.
  • Um eine verlustfreie Komprimierung zu implementieren, werden, anstatt mit den Ergebnissen bestimmter Arten von Operationen gefüllte Pakete zu senden, Daten oder Befehle gesendet, die es dem empfangenden Knoten ermöglichen, die Ergebnisse zu rekonstruieren. Beispielsweise benötigen stochastisch abgetastete Flächenbeleuchtungen und Umgebungsverdeckungsoperationen (AO-Operationen) nicht unbedingt Richtungen. Folglich sendet in einer Ausführungsform ein sendender Knoten einfach einen Zufallsstartpunkt, der dann von dem empfangenden Knoten verwendet wird, um eine Zufallsabtastung durchzuführen. Wenn beispielsweise eine Szene über die Knoten 4210-4212 verteilt ist, müssen, um Licht 1 an Punkten p1-p3 abzutasten, nur die Licht-ID und die Ursprünge an die Knoten 4210-4212 gesendet werden. Jeder der Knoten kann dann das Licht unabhängig stochastisch abtasten. In einer Ausführungsform wird der Zufallsstartpunkt durch den empfangenden Knoten erzeugt. In ähnlicher Weise können für Primärstrahl-Trefferpunkte Umgebungsverdeckung (AO) und weiche Schattenabtastung auf den Knoten 4210-4212 berechnet werden, ohne für die ursprünglichen Punkte auf nachfolgende Frames zu warten. Wenn bekannt ist, dass ein Satz von Strahlen zu derselben Punktlichtquelle geht, können zudem Befehle gesendet werden, die die Lichtquelle für den empfangenden Knoten identifizieren, der dies auf den Satz von Strahlen anwendet. Als ein weiteres Beispiel kann dann, wenn N Umgebungsverdeckungsstrahlen an einem einzelnen Punkt gesendet werden, ein Befehl gesendet werden, um von diesem Punkt N Abtastungen zu erzeugen.
  • Verschiedene zusätzliche Techniken können zur verlustbehafteten Komprimierung angewendet werden. Beispielsweise kann in einer Ausführungsform ein Quantisierungsfaktor verwendet werden, um alle Koordinatenwerte zu quantisieren, die der BVH, den Primitiven und den Strahlen zugeordnet sind. Außerdem können 32-Bit-Gleitkommawerte, die für Daten wie BVH-Knoten und Primitive verwendet werden, in 8-Bit-Ganzzahlwerte konvertiert werden. In einer bestimmten Implementierung werden die Begrenzungen von Strahlenpaketen in voller Genauigkeit gespeichert, aber einzelne Strahlenpunkte P1-P3 werden als indexierte Versätze zu den Begrenzungen übertragen. In ähnlicher Weise können mehrere lokale Koordinatensysteme erzeugt werden, die 8-Bit-Ganzzahlwerte als lokale Koordinaten verwenden. Der Ort des Ursprungs jedes dieser lokalen Koordinatensysteme kann unter Verwendung der Werte mit voller Genauigkeit (z. B. 32-Bit-Gleitkommawerte) codiert werden, wodurch das globale und das lokale Koordinatensystem effektiv verbunden werden.
  • Das Folgende ist ein Beispiel einer verlustfreien Komprimierung, die in einer Ausführungsform der Erfindung angewendet wird. Ein Beispiel für ein Strahl-Datenformat, das intern in einem Strahlverfolgungsprogramm 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]; //für Geometrieschnitte
      float u;
      float v;
      float wavelength;
      float phase; //Interferometrie
      float refractedOffset; //schlierenartig
      float amplitude;
      float weight;
};
  • Anstatt die Rohdaten für jeden erzeugten Knoten zu senden, können diese Daten komprimiert werden, indem Werte gruppiert werden und wenn möglich implizite Strahlen unter Verwendung geeigneter Metadaten erzeugt werden.
  • Bündeln und Gruppieren von Strahldaten
  • Eine Ausführungsform verwendet Merker für gemeinsame Daten oder Masken mit Modifikatoren.
  •      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 gepackt, außer dass über alle Strahlen hinweg nur ein einzelner Ursprung gespeichert wird. RayPacket.flags ist auf RAYPACKET-COMMON-ORIGIN gesetzt. Wenn RayPacket beim Empfang entpackt wird, werden die Ursprünge anhand des einzelnen Ursprungswerts aufgefüllt.
  • Ursprünge werden nur von einigen Strahlen geteilt
  • Alle Strahldaten werden gepackt, mit Ausnahme von Strahlen, die denselben Ursprung haben. Für jede Gruppe eindeutiger gemeinsamer Ursprünge wird ein Operator gepackt, der die Operation (gemeinsame Ursprünge) identifiziert, den Ursprung speichert und maskiert, welche Strahlen sich die Informationen teilen. Eine solche Operation kann an beliebigen gemeinsamen Werten zwischen Knoten wie Material-IDs, Primitiv-IDs, Ursprung, Richtung, Normalen usw. durchgeführt werden.
  •      struct RayOperation
         {
    
          uint8 operationID;
          void* value;
    
         } uint64 mask;
  • Senden von impliziten Strahlen
  • Oftmals können Strahldaten auf der Empfangsseite mit minimalen zur Erzeugung verwendeten Metainformationen abgeleitet werden. Ein sehr verbreitetes Beispiel ist die Erzeugung mehrerer Sekundärstrahlen, um einen Bereich stochastisch abzutasten. Anstelle dessen, dass der Sender einen Sekundärstrahl erzeugt, diesen sendet und der Empfänger mit diesem arbeitet, kann der Sender einen Befehl senden, dass ein Strahl mit irgendwelchen abhängigen Informationen erzeugt werden muss, und der Strahl wird auf der Empfangsseite erzeugt. In dem Fall, in dem der Strahl zuerst von dem Sender erzeugt werden muss, um zu bestimmen, an welchen Empfänger er gesendet werden soll, wird der Strahl erzeugt und der zufällige Startpunkt kann gesendet werden, um den exakt gleichen Strahl erneut zu erzeugen.
  • Um beispielsweise einen Trefferpunkt mit 64 Schattenstrahlen abzutasten, die eine Flächenlichtquelle abtasten, schneiden sich alle 64 Strahlen mit Bereichen aus derselben Berechnung N4. Ein Strahlenpaket mit gemeinsamem Ursprung wird erstellt. Es könnten weitere Daten gesendet werden, wenn man wollte, dass der Empfänger den resultierenden Pixelbeitrag schattiert, aber für dieses Beispiel wird angenommen, dass nur zurückgegeben werden soll, ob ein Strahl auf Daten eines weiteren Knotens trifft. Eine Strahloperation wird für eine Operation zum Erzeugen von Schattenstrahlen erstellt und mit dem Wert der abzutastenden Licht-ID und dem Zufallszahlen-Startpunkt versehen. Wenn N4 das Strahlenpaket empfängt, erzeugt sie die vollständig ausgefüllten Strahldaten, indem sie die gemeinsam genutzten Ursprungsdaten für alle Strahlen ausfüllt und die Richtung basierend auf der stochastisch mit dem Zufallszahl-Startpunkt abgetasteten Licht-ID festlegt, um die gleichen Strahlen zu erzeugen, die der ursprüngliche Sender erzeugt hat. Wenn die Ergebnisse zurückgegeben werden, müssen nur binäre Ergebnisse für jeden Strahl zurückgegeben werden, die von einer Maske über die Strahlen gelegt werden können.
  • Das Senden der ursprünglichen 64 Strahlen hätte in diesem Beispiel 104 Bytes * 64 Strahlen = 6656 Bytes verwendet. Wenn die zurückkommenden Strahlen auch in ihrer Rohform gesendet worden wären, hätte sich dies ebenfalls auf 13312 Bytes verdoppelt. Bei Verwendung der verlustfreien Komprimierung, bei der nur der gemeinsame Strahlursprung, die Normale und die Strahlerzeugungsoperation mit Startpunkt und ID gesendet werden, werden nur 29 Bytes gesendet, wobei 8 Bytes für die geschnittene Maske zurückgegeben wurden. Dies führt zu einer Datenkomprimierungsrate von ~360:1, die über das Netz gesendet werden muss. Dies beinhaltet nicht den Zusatzaufwand für die Verarbeitung der Nachricht selbst, der auf irgendeine Weise identifiziert werden müsste. Dies bleibt aber der Implementierung überlassen. Andere Operationen können durchgeführt werden, um den Strahlenursprung und die Richtungen aus der Pixel-ID für Primärstrahlen neu zu berechnen, Pixel-IDs basierend auf den Bereichen in dem Strahlenpaket neu zu berechnen, und es bestehen viele andere mögliche Implementierungen für die Neuberechnung von Werten. Ähnliche Operationen können für jeden einzelnen oder Gruppen von gesendeten Strahlen verwendet werden, einschließlich Schatten, Reflexionen, Brechung, Umgebungsverdeckung, Schnittpunkte, Volumenschnittpunkte, Schattierung, abgeprallte Reflexionen bei der Pfadverfolgung usw.
  • 43 zeigt zusätzliche Einzelheiten für zwei Strahlverfolgungsknoten 4310-4311, die eine Komprimierung und Dekomprimierung von Strahlverfolgungspaketen durchführen. Insbesondere dann, wenn in einer Ausführungsform eine erste Strahlverfolgungsmaschine 4330 bereit ist, um Daten an eine zweite Strahlverfolgungsmaschine 4331 zu übertragen, führt die Strahlkomprimierungsschaltung 4320 eine verlustbehaftete und/oder verlustfreie Komprimierung der Strahlverfolgungsdaten durch, wie es hierin beschrieben ist (z. B. Konvertieren von 32-Bit-Werten in 8-Bit-Werte, Ersetzen von Rohdaten durch Befehle zum Rekonstruieren der Daten usw.). Die komprimierten Strahlenpakete 4301 werden von der Netzschnittstelle 4325 zu der Netzschnittstelle 4326 über ein lokales Netz (z. B. ein Ethernet-Netz mit 10 Gbit/s, 100 Gbit/s) übertragen. Die Strahlendekomprimierungsschaltungsanordnung dekomprimiert dann die Strahlenpakete, wenn dies angebracht ist. Beispielsweise kann sie Befehle ausführen, um die Strahlverfolgungsdaten zu rekonstruieren (z. B. unter Verwendung eines Zufallsstartpunkts, um eine Zufallsabtastung für Beleuchtungsoperationen durchzuführen). Die Strahlverfolgungsmaschine 4331 verwendet dann die empfangenen Daten, um Strahlverfolgungsoperationen durchzuführen.
  • In der umgekehrten Richtung komprimiert die Strahlenkomprimierungsschaltungsanordnung 4341 die Strahldaten, die Netzschnittstelle 326 überträgt die komprimierten Strahldaten über das Netz (z. B. unter Verwendung der hierin beschriebenen Techniken), die Strahlendekomprimierungsschaltungsanordnung 4340 dekomprimiert die Strahldaten, wenn dies erforderlich ist, und Strahlverfolgungsmaschine 4330 verwendet die Daten bei Strahlverfolgungsoperationen. Obwohl sie in 43 als separate Einheit dargestellt ist, kann die Strahlendekomprimierungsschaltungsanordnung 4340-4341 jeweils in die Strahlverfolgungsmaschinen 4330-4331 integriert sein. Zum Beispiel können, sofern die komprimierten Strahldaten Befehle zum Rekonstruieren der Strahldaten umfassen, diese Befehle von jeder jeweiligen Strahlverfolgungsmaschine 4330-4331 ausgeführt werden.
  • Wie es in 44 dargestellt ist, kann die Strahlkomprimierungsschaltungsanordnung 4420 eine verlustbehaftete Komprimierungsschaltungsanordnung 4401 zum Durchführen der hier beschriebenen verlustbehafteten Komprimierungstechniken (z. B. Konvertieren von 32-Bit-Gleitkommakoordinaten in 8-Bit-Ganzzahlkoordinaten) und eine verlustfreie Komprimierungsschaltungsanordnung 4403 zum Durchführen der verlustfreien Komprimierungstechniken (z. B. Übertragen von Befehlen und Daten, damit die Strahlenrekomprimierungsschaltungsanordnung 4421 die Daten rekonstruieren kann) umfassen. Die Strahlendekomprimierungsschaltungsanordnung 34321 umfasst eine verlustbehaftete Dekomprimierungsschaltungsanordnung 4402 und eine verlustfreie Dekomprimierungsschaltungsanordnung 4404 zum Durchführen einer verlustfreien Dekomprimierung.
  • Ein Verfahren gemäß einer Ausführungsform ist in 45 dargestellt. Das Verfahren kann auf den hier beschriebenen Strahlverfolgungsarchitekturen implementiert werden, ist jedoch nicht auf eine bestimmte Architektur beschränkt.
  • Bei 4500 werden Strahldaten empfangen, die von einem ersten Strahlverfolgungsknoten zu einem zweiten Strahlverfolgungsknoten übertragen werden. Bei 4501 führt die verlustbehaftete Komprimierungsschaltungsanordnung eine verlustbehaftete Komprimierung an den ersten Strahlverfolgungsdaten durch und bei 4502 führt die verlustfreie Komprimierungsschaltungsanordnung eine verlustfreie Komprimierung an den zweiten Strahlverfolgungsdaten durch. Bei 4503 werden die komprimierten Strahllaufdaten zu einem zweiten Strahlverfolgungsknoten übertragen. Bei 4504 führt die verlustbehaftete/verlustfreie Dekomprimierungsschaltungsanordnung eine verlustbehaftete/verlustfreie Dekomprimierung der Strahlverfolgungsdaten durch und bei 4505 führt der zweite Strahlverfolgungsknoten Strahlverfolgungsoperationen unter Verwendung der dekomprimierten Daten durch.
  • Grafikprozessor mit hardwarebeschleunigter Hybridstrahlverfolgung
  • Eine Ausführungsform der Erfindung umfasst eine Hybrid-Render-Pipeline, die eine Rasterung auf Grafikkernen 3730 und Strahlverfolgungsoperationen auf den Strahlverfolgungskernen 3750, den Grafikkernen 3730 und/oder den CPU-Kernen 3799 durchführt. Beispielsweise können Raster- und Tiefentests auf den Grafikkernen 3730 anstelle der Primärstrahl-Auswurfstufe durchgeführt werden. Die Strahlverfolgungskerne 3750 können dann Sekundärstrahlen für Strahlreflexionen, Brechungen und Schatten erzeugen. Außerdem können bestimmte Ausführungsformen bestimmte Bereiche einer Szene auswählen, in denen die Strahlverfolgungskerne 3750 Strahlverfolgungsoperationen ausführen (z. B. basierend auf Materialeigenschaftsschwellen wie hohen Reflexionsgraden), während andere Bereiche der Szene mit Rasterung auf den Grafikkernen 3730 gerendert werden. In einer Ausführungsform wird diese Hybrid-Implementierung für Echtzeit-Strahlverfolgungsanwendungen verwendet - wobei Latenz ein kritisches Problem ist.
  • Eine Ausführungsform der nachstehend beschriebenen Strahlendurchquerungsarchitektur führt eine programmierbare Schattierung und Steuerung der Strahlendurchquerung unter Verwendung vorhandener Grafikprozessoren mit Anwendung eines Befehls auf mehrere Datenströme (SIMD) und/oder eines Befehls auf mehreren Stränge (SIMT) durch, während kritische Funktionen wie die BVH-Durchquerung und/oder -Schnitte mit dedizierter Hardware beschleunigt werden. In dieser Ausführungsform wird die SIMD-Belegung für inkohärente Pfade verbessert, indem erzeugte Schattierer an bestimmten Punkten während des Durchlaufs und vor dem Schattieren neu gruppiert werden. Dies wird mit dedizierter Hardware erreicht, die Schattierer dynamisch chipintern sortiert. Die Rekursion wird verwaltet, indem eine Funktion in Fortsetzungen aufgeteilt wird, die bei der Rückgabe ausgeführt werden, und Fortsetzungen vor der Ausführung neu gruppiert werden, um die SIMD-Belegung zu verbessern.
  • Eine programmierbare Steuerung von Strahldurchquerung/-schnitt wird erreicht, indem die Durchquerungsfunktionalität in eine innere Durchquerung, die als Hardware mit fester Funktion implementiert werden kann, und eine äußere Durchquerung, die auf GPU-Prozessoren ausgeführt wird und eine programmierbare Steuerung durch anwenderdefinierte Durchquerungs-Schattierer ermöglicht, zerlegt wird. Der Aufwand für die Übertragung des Durchquerungskontexts zwischen Hardware und Software wird reduziert, indem der innere Durchquerungszustand während des Übergangs zwischen innerer und äußerer Durchquerung konservativ gekürzt wird.
  • Die programmierbare Steuerung der Strahlverfolgung kann durch die verschiedenen Schattierer-Typen ausgedrückt werden, die in der folgenden Tabelle A aufgeführt sind. Es können mehrere Schattierer für jeden Typ vorhanden sein. Beispielsweise kann jedes Material einen anderen Treffer-Schattierer aufweisen. Tabelle A
    Schattierertyp Funktionalität
    Primär Starten von Primärstrahlen
    Treffer Bidirektionale Reflexionsgradverteilungsfunktions -Abtastung (BRDF-Abtastung),
    Starten von Sekundärstrahlen
    Beliebiger Treffer Berechnen der Durchlässigkeit für Alpha-Textur-Geometrie
    Fehltreffer Berechnen der Strahldichte aus einer Lichtquelle
    Schnitt Schneiden von spezifischen Formen
    Durchquerung Instanzauswahl und Transformation
    Aufrufbar Eine Allzweck-Funktion
  • In einer Ausführungsform wird die rekursive Strahlverfolgung durch eine API-Funktion initiiert, die dem Grafikprozessor befiehlt, einen Satz von primären Schattierern oder Schnittschaltungen zu starten, die Strahl-Szenen-Schnitte für Primärstrahlen erzeugen können. Dies wiederum erzeugt andere Schattierer wie Durchquerung, Treffer-Schattierer oder Fehltreffer-Schattierer. Ein Schattierer, der einen Kind-Schattierer erzeugt, kann auch einen Rückgabewert von diesem Kind-Schattierer erhalten. Aufrufbare Schattierer sind Allzweck-Funktionen, die direkt von einem anderen Schattierer erzeugt werden können und auch Werte an den aufrufenden Schattierer zurückgeben können.
  • 46 zeigt eine Ausführungsform einer Grafikverarbeitungsarchitektur, die eine Schattierer-Ausführungsschaltungsanordnung 4600 und eine Festfunktionsschaltungsanordnung 4610 umfasst. Das Allzweck-Ausführungshardware-Untersystem umfasst mehrere Kerne/Ausführungseinheiten (EUs) 4601 mit Anwendung eines Befehls auf mehrere Datenströme (SIMD) und/oder eines Befehls auf mehreren Stränge (SIMT) (d. h. jeder Kern kann mehrere Ausführungseinheiten umfassen), einen oder mehrere Abtaster 4602 und einen Ebene-1-Cache (L1Cache) 4603 oder eine andere Form von lokalem Speicher. Das Festfunktionshardwareuntersystem 4610 umfasst eine Nachrichteneinheit 4604, einen Planer 4607, eine Strahl-BVH-Durchquerungs-/Schnittschaltungsanordnung 4605, eine Sortierschaltungsanordnung 4608 und einen lokalen L1-Cache 4606.
  • Im Betrieb sendet der primäre Abfertiger 4609 einen Satz von Primärstrahlen an den Planer 4607, der die Arbeit für Schattierer plant, die auf den SIMD/SIMT-Kernen/EUs 4601 ausgeführt werden. Die SIMD-Kerne/EUs 4601 können die Strahlverfolgungskerne 3750 und/oder oder die Grafikkerne 3730, die oben beschrieben sind, sein. Die Ausführung der primären Schattierer führt zu zusätzlicher Arbeit, die ausgeführt werden muss (z. B. von einem oder mehreren Kind-Schattierern und/oder Hardware mit fester Funktion). Die Nachrichteneinheit 4604 verteilt die von den SIMD-Kernen/EUs 4601 hervorgebrachte Arbeit auf den Planer 4607, wobei nach Bedarf auf den freien Stapelpool zugegriffen wird, die Sortierschaltungsanordnung 4608 oder die Strahl-BVH-Schnitt-Schaltungsanordnung 4605. Wenn die zusätzliche Arbeit an den Planer 4607 gesendet wird, wird sie zur Ausführung auf den SIMD/SIMT-Kernen/EUs 4601 eingeplant. Vor dem Planen kann die Sortierschaltung 4608 die Strahlen wie hierin beschrieben in Gruppen oder Töpfen sortieren (z. B. Gruppieren von Strahlen mit ähnlichen Eigenschaften). Die Strahl-BVH-Schnitt-Schaltungsanordnung 4605 führt eine Schnittprüfung von Strahlen unter Verwendung von BVH-Volumina durch. Beispielsweise kann die Strahl-BVH-Schnitt-Schaltungsanordnung 4605 Strahlkoordinaten mit jeder Ebene der BVH vergleichen, um Volumina zu identifizieren, die von dem Strahl geschnitten werden.
  • Auf Schattierer kann unter Verwendung einer Schattiereraufzeichnung verwiesen werden, einer von Anwendern zugewiesenen Struktur, die einen Zeiger auf die Eingabefunktion, herstellerspezifische Metadaten und globale Argumente für den Schattierer enthält, der von den SIMD-Kernen/EUs 4601 ausgeführt wird. Jede ausführende Instanz eines Schattierers ist einem Aufrufstapel zugeordnet, der zum Speichern von Argumenten verwendet werden kann, die zwischen einem Eltern-Schattierer und einem Kind-Schattierer übergeben werden. Aufrufstapel können auch Verweise auf die Fortsetzungsfunktionen speichern, die ausgeführt werden, wenn ein Aufruf zurückkehrt.
  • 47 zeigt einen beispielhaften Satz von zugewiesenen Stapeln 4701, der einen primären Schattierer-Stapel, einen Treffer-Schattierer-Stapel, einen Durchquerungs-Schattierer-Stapel, einen Fortsetzungsfunktionsstapel und einen Strahl-BVH-Schnitt-Stapel (der wie beschrieben durch Hardware mit fester Funktion 4610 ausgeführt werden kann) umfasst. Neue Schattierer-Aufrufe können neue Stapel aus einem freien Stapelpool 4702 implementieren. Die Aufrufstapel können in einem lokalen L1-Cache 4603, 4606 zwischengespeichert werden, um die Latenz von Zugriffen zu verringern.
  • In einer Ausführungsform gibt es eine endliche Anzahl von Aufrufstapeln, von denen jeder eine feste maximale Größe „Sstack“ aufweist, die in einem zusammenhängenden Speicherbereich zugewiesen ist. Daher kann die Basisadresse eines Stapels direkt aus einem Stapelindex (SID) als Basisadresse = SID*Sstack berechnet werden. In einer Ausführungsform werden Stapel-IDs von dem Planer 4607 zugewiesen und freigegeben, wenn Arbeit auf den SIMD-Kernen/EUs 4601 geplant wird.
  • In einer Ausführungsform umfasst der primäre Abfertiger 4609 einen Grafikprozessor-Befehlsprozessor, der primäre Schattierer als Antwort auf einen Abfertigungsbefehl von dem Host (z. B. einer CPU) abfertigt. Der Planer 4607 empfängt diese Abfertigungsanforderungen und startet einen primären Schattierer auf einem SIMD-Prozessorstrang, wenn er eine Stapel-ID für jede SIMD-Bahn zuweisen kann. Stapel-IDs werden aus dem freien Stapelpool 4702 zugewiesen, der zu Beginn des Abfertigungsbefehls initialisiert wird.
  • Ein ausführender Schattierer kann einen Kind-Schattierer durch Senden einer Erzeugungsnachricht an die Nachrichteneinheit 4604 erzeugen. Dieser Befehl enthält die dem Schattierer zugeordneten Stapel-IDs und enthält auch einen Zeiger auf die Kind-Schattierer-Aufzeichnung für jede aktive SIMD-Bahn. Ein Eltern-Schattierer kann diese Nachricht für eine aktive Bahn nur einmal ausgeben. In einer Ausführungsform wird der Eltern-Schattierer nach dem Senden von Erzeugungsnachrichten für alle relevanten Bahnen beendet.
  • Ein Schattierer, der auf den SIMD-Kernen/EUs 4601 ausgeführt wird, kann auch Aufgaben mit fester Funktion wie z. B. Strahl-BVH-Schnitte unter Verwendung einer Erzeugungsnachricht mit einem für die Hardware mit fester Funktion reservierten Schattierer-Aufzeichnungszeiger erzeugen. Wie erwähnt sendet die Nachrichtenübermittlungseinheit 4604 erzeugte Strahl-BVH-Schnitt-Arbeit an die Strahl-BVH-Schnitt-Schaltungsanordnung mit fester Funktion 4005 und aufrufbare Schattierer direkt an die Sortierschaltungsanordnung 4608. In einer Ausführungsform gruppiert die Sortierschaltungsanordnung die Schattierer nach Schattierer-Aufzeichnungszeiger, im einer SIMD-Charge mit ähnlichen Eigenschaften abzuleiten. Dementsprechend können Stapel-IDs von verschiedenen übergeordneten Schattierern durch die Sortierschaltungsanordnung 4608 in derselben Charge gruppiert werden. Die Sortierschaltungsanordnung 4608 sendet gruppierte Chargen an den Planer 4607, der auf die Schattierer-Aufzeichnungen aus dem Grafikspeicher 2511 oder dem Cache letzter Ebene (LLC) 4620 zugreift und den Schattierer auf einem Prozessorstrang startet.
  • In einer Ausführungsform werden Fortsetzungen als aufrufbare Schattierer behandelt und können auch durch Schattierer-Datensätze referenziert werden. Wenn ein Kind-Schattierer erzeugt wird und Werte an den Eltern-Schattierer zurückgibt, wird ein Zeiger auf die Fortsetzungs-Schattierer-Aufzeichnung auf den Aufrufstapel 4701 gelegt, wie es in 47 gezeigt ist. Wenn ein Kind-Schattierer zurückgibt, wird die Fortsetzungs-Schattierer-Aufzeichnung aus dem Aufrufstapel 4701 entfernt und ein Fortsetzungs-Schattierer wird erzeugt. Ausgelöste Fortsetzungen durchlaufen die Sortiereinheit ähnlich wie aufrufbare Schattierer und werden auf einem Prozessorstrang gestartet.
  • Wie es in 48 dargestellt ist, gruppiert eine Ausführungsform der Sortierschaltungsanordnung 4008 erzeugte Aufgaben nach Schattierer-Aufzeichnungszeigern 4801A, 4801B, 4801n, um SIMD-Chargen zum Schattieren zu erzeugen. Die Stapel-IDs oder Kontext-IDs in einer sortierten Charge können aus verschiedenen Abfertigungen und verschiedenen Eingabe-SIMD-Bahnen gruppiert werden. In einer Ausführungsform führt die Gruppierungsschaltungsanordnung 4810 ein Sortieren unter Verwendung einer inhaltsadressierbaren Speicherstruktur (CAM-Struktur) 4801 durch, die mehrere Einträge umfasst, wobei jeder Eintrag mit einem Etikett 4801 gekennzeichnet ist. Wie erwähnt, ist in einer Ausführungsform das Etikett 4201 ein entsprechender Schattierer-Aufzeichnungszeiger 4801A, 4801B, 4801n. In einer Ausführungsform speichert die CAM-Struktur 4801 eine begrenzte Anzahl von Etiketten (z. B. 32, 64, 128 usw.), die jeweils einer unvollständigen SIMD-Charge zugeordnet sind, die einem Schattierer-Aufzeichnungszeiger entspricht.
  • Für einen eingehenden Erzeugungsbefehl hat jede SIMD-Bahn eine entsprechende Stapel-ID (gezeigt als 16 Kontext-IDs 0-15 in jedem CAM-Eintrag) und einen Schattierer-Aufzeichnungszeiger 4801A-B, ... n (der als Etikettwert fungiert). In einer Ausführungsform vergleicht die Gruppierungsschaltungsanordnung 4810 den Schattierer-Aufzeichnungszeiger für jede Bahn mit den Etiketten 4801 in der CAM-Struktur 4801, um eine passende Charge zu finden. Wird eine passende Charge gefunden, wird die Stapel-ID/Kontext-ID zu der Charge hinzugefügt. Andernfalls wird ein neuer Eintrag mit einem neuen Schattierer-Aufzeichnungszeiger-Etikett erstellt, wobei möglicherweise ein älterer Eintrag mit einer unvollständigen Charge entfernt wird.
  • Ein ausführender Schattierer kann den Aufrufstapel freigeben, wenn dieser leer ist, indem eine Freigabenachricht an die Nachrichteneinheit gesendet wird. Die Freigabenachricht wird an den Planer weitergeleitet, der Stapel-IDs/Kontext-IDs für aktive SIMD-Bahnen an den freien Pool zurückgibt.
  • Eine Ausführungsform der Erfindung implementiert einen Hybridansatz für Strahlendurchquerungsoperationen unter Verwendung einer Kombination von Festfunktions-Strahlendurchquerung und Software-Strahlendurchquerung. Folglich bietet dieser die Flexibilität der Software-Durchquerung, während die Effizienz der Festfunktions-Durchquerung erhalten bleibt. 49 zeigt eine Beschleunigungsstruktur, die für eine Hybrid-Durchquerung verwendet werden kann, die ein Baum mit zwei Ebenen mit einer einzelnen BVH 4300 auf oberster Ebene und mehreren BVHs 4901 und 4902 auf unterster Ebene ist. Grafische Elemente sind rechts gezeigt, um innere Durchquerungspfade 4903, äußere Durchquerungspfade 4904, Durchquerungsknoten 4905, Blattknoten mit Dreiecken 4906 und Blattknoten mit anwenderdefinierten Primitiven 4907 anzugeben.
  • Die Blattknoten mit Dreiecken 4906 in der BVH 4900 der obersten Ebene können auf Dreiecke, Schnitt-Schattierer-Aufzeichnungen für anwenderdefinierte Primitive oder Durchquerungs-Schattierer-Aufzeichnungen verweisen. Die Blattknoten mit Dreiecken 4906 der BVHs 4901-4902 der unteren Ebene können nur auf Dreiecke und Schnitt-Schattierer-Aufzeichnungen für anwenderdefinierte Primitive verweisen. Die Art des Verweises ist innerhalb des Blattknotens 4306 codiert. Die innere Durchquerung 4303 bezieht sich auf die Durchquerung innerhalb jeder BVH 4900-4902. Innere Durchquerungsoperationen umfassen eine Berechnung von Strahl-BVH-Schnittpunkten und die Durchquerung der BVH-Strukturen 4900-4902 ist als äußere Durchquerung bekannt. Innere Durchquerungsoperationen können effizient in Hardware mit fester Funktion implementiert werden, während äußere Durchquerungsoperationen mit programmierbaren Schattierern mit akzeptabler Leistung ausgeführt werden können. Folglich führt eine Ausführungsform der Erfindung innere Durchquerungsoperationen unter Verwendung einer Schaltungsanordnung mit fester Funktion 4610 durch und führt äußere Durchquerungsoperationen unter Verwendung der Schattierer-Ausführungsschaltungsanordnung 4600 durch, die SIMD/SIMT-Kerne/ EUs 4601 zum Ausführen programmierbarer Schattierer umfasst.
  • Es ist zu beachten, dass die SIMD/SIMT-Kerne/EUs 4601 hier der Einfachheit halber manchmal einfach als „Kerne“, „SIMD-Kerne“, „EUs“ oder „SIMD-Prozessoren“ bezeichnet werden. In ähnlicher Weise wird die Strahl-BVH-Durchquerungs-/Schnittschaltungsanordnung 4605 manchmal einfach als „Durchquerungseinheit“, „Durchquerungs-/Schnitteinheit“ oder „Durchquerungs-/Schnittschaltungsanordnung“ bezeichnet. Wenn ein alternativer Begriff verwendet wird, ändert der bestimmte Name, der zur Bezeichnung der jeweiligen Schaltungsanordnung/Logik verwendet wird, nicht die zugrundeliegenden Funktionen, die die Schaltung/Logik ausführt, wie sie hierin beschrieben sind.
  • Darüber hinaus kann die Durchquerungs-/Schnitteinheit 4605, obwohl sie in 46 zu Erläuterungszwecken als einzelne Komponente dargestellt ist, eine einzelne Durchquerungseinheit und eine separate Schnitteinheit umfassen, von denen jede in einer hierin beschriebenen Schaltungsanordnung und/oder Logik implementiert sein kann.
  • In einer Ausführungsform wird dann, wenn ein Strahl einen Durchquerungsknoten während einer inneren Durchquerung schneidet, ein Durchquerungsschattierer erzeugt. Wie es in 48 dargestellt ist, gruppiert die Sortierschaltungsanordnung 4608 diese Schattierer nach Schattierer-Aufzeichnungszeigern 4801A-B, n, um eine SIMD-Charge zu erstellen, die von dem Planer 4607 für die SIMD-Ausführung auf den Grafik-SIMD-Kernen/EUs 4001 gestartet wird. Durchquerungs-Schattierer können die Durchquerung auf verschiedene Arten modifizieren und ermöglichen eine breite Palette von Anwendungen. Beispielsweise kann der Durchquerungs-Schattierer eine BVH mit einem gröberen Detailgrad (LOD) auswählen oder den Strahl transformieren, um Transformationen starrer Körper zu ermöglichen. Der Durchquerungs-Schattierer erzeugt dann die innere Durchquerung für die ausgewählte BVH.
  • Die innere Durchquerung berechnet die Strahl-BVH-Schnitte durch Durchqueren der BVH und Berechnen der Strahl-Rahmen- und Strahl-Dreieck-Schnitte. Die innere Durchquerung wird auf die gleiche Weise wie Schattierer erzeugt, indem eine Nachricht an die Nachrichtenschaltungsanordnung 4604 gesendet wird, die die entsprechende Erzeugungsnachricht an die Strahl-BVH-Schnitt-Schaltungsanordnung 4605 weiterleitet, die Strahl-BVH-Schnitte berechnet.
  • In einer Ausführungsform wird der Stapel für die innere Durchquerung lokal in der Festfunktionsschaltungsanordnung 4610 (z. B. innerhalb des L1-Cache 4606) gespeichert. Wenn ein Strahl einen Blattknoten schneidet, der einem Durchquerungs-Schattierer oder einem Schnitt-Schattierer entspricht, wird die innere Durchquerung beendet und der innere Stapel wird abgeschnitten. Der abgeschnittene Stapel wird zusammen mit einem Zeiger auf den Strahl und die BVH an einer von dem aufrufenden Schattierer angegebenen Stelle in den Speicher geschrieben und dann wird der entsprechende Durchquerungs-Schattierer oder Schnitt-Schattierer erzeugt. Wenn der Strahl während der inneren Durchquerung Dreiecke schneidet, werden die entsprechenden Trefferinformationen als Eingabeargumente für diese Schattierer bereitgestellt, wie es im folgenden Code gezeigt ist. Diese erzeugten Schattierer werden von der Sortierschaltungsanordnung 4008 gruppiert, um SIMD-Chargen zur Ausführung zu erzeugen.
  •      struct HitInfo {
            float barycentrics[2];
            float tmax;
            bool innerTravComplete; 
    
    
    
    
    
            uint primID;
            uint geomID;
      } ShaderRecord* leafShaderRecord;
  • Ein Abschneiden des inneren Durchquerungsstapels verringert den Aufwand für das Abgeben in den Speicher. Eine Ausführungsform der Erfindung verwendet den in „Restart Trail für Stackless BVH Traversal“, High Performance Graphics (2010), S. 107-111 beschriebenen Ansatz, um den Stapel auf eine kleine Anzahl von Einträgen am oberen Rand des Stapels, einen 42-Bit-Neustartpfad und einen 6-Bit-Tiefenwert zu kürzen. Der Neustartpfad gibt Abzweigungen an, die bereits innerhalb der BVH genommen wurden, und der Tiefenwert gibt die Durchquerungstiefe an, die dem letzten Stapeleintrag entspricht. Dies sind ausreichende Informationen, um die innere Durchquerung zu einem späteren Zeitpunkt fortzusetzen.
  • Die innere Durchquerung ist abgeschlossen, wenn der innere Stapel leer ist und keine BVH-Knoten mehr zu testen sind. In diesem Fall wird ein Außenstapelbehandler erzeugt, der den oberen Bereich des äußeren Stapels entfernt und die Durchquerung wieder aufnimmt, wenn der äußere Stapel nicht leer ist.
  • In einer Ausführungsform führt die äußere Durchquerung die Hauptdurchquerungszustandsmaschine aus und ist in Programmcode implementiert, der von der Schattierer-Ausführungsschaltungsanordnung 4600 ausgeführt wird. Es wird eine innere Durchquerungsabfrage unter den folgenden Bedingungen erzeugt: (1) wenn ein neuer Strahl von einem Treffer-Schattierer oder einem primären Schattierer erzeugt wird; (2) wenn ein Durchquerungs-Schattierer eine BVH zur Durchquerung auswählt; und (3) wenn ein Außenstapelbehandler die innere Durchquerung für eine BVH wieder aufnimmt.
  • Wie es in 50 dargestellt ist, wird auf dem Aufrufstapel 5005 Platz für die Festfunktions-Schaltungsanordnung 4010 zugewiesen, um den abgeschnittenen inneren Stapel 5010 zu speichern, bevor der innere Durchlauf erzeugt wird. Die Versätze 5003-4404 oben auf dem Aufrufstapel und der innere Stapel werden in dem Durchquerungszustand 5000 gepflegt, der ebenfalls in dem Speicher gespeichert ist. Der Durchquerungszustand 5000 umfasst auch den Strahl in dem Weltenraum 5001 und dem Objektraum 5002 sowie Trefferinformationen für das nächste schneidende Primitiv.
  • Der Durchquerungs-Schattierer, der Schnitt-Schattierer und der Außenstapelbehandler werden alle von der Strahl-BVH-Schnitt-Schaltungsanordnung 4605 erzeugt. Der Durchquerungs-Schattierer weist auf dem Aufrufstapel 5005 zu, bevor ein neuer innerer Durchlauf für die BVH zweiter Ebene initiiert wird. Der Außenstapelbehandler ist ein Schattierer, der für die Aktualisierung der Trefferinformationen und die Wiederaufnahme aller anstehenden inneren Durchquerungs-Aufgaben verantwortlich ist. Der Außenstapelbehandler ist auch dafür verantwortlich, getroffene oder verfehlte Schattierer zu erzeugen, wenn die Durchquerung abgeschlossen ist. Die Durchquerung ist abgeschlossen, wenn keine ausstehenden inneren Durchquerungsabfragen zur Erzeugung vorliegen. Wenn die Durchquerung abgeschlossen ist und ein Schnitt gefunden wurde, wird ein Treffer-Schattierer erzeugt. Andernfalls wird ein Fehltreffer-Schattierer erzeugt.
  • Obwohl das oben beschriebene Hybrid-Durchquerungsschema eine zweistufige BVH-Hierarchie verwendet, können die hier beschriebenen Ausführungsformen der Erfindung eine beliebige Anzahl von BVH-Stufen mit einer entsprechenden Änderung in der Implementierung der äußeren Durchquerung verwenden.
  • Obwohl in den obigen Ausführungsformen eine Festfunktionsschaltungsanordnung 4610 zum Durchführen von Strahl-BVH-Schnitten beschrieben ist, können darüber hinaus auch andere Systemkomponenten in Festfunktionsschaltungen implementiert sein. Zum Beispiel kann der oben beschriebene Außenstapelbehandler ein interner (nicht für den Anwender sichtbarer) Schattierer sein, der möglicherweise in der Festfunktions-BVH-Durchquerungs-/Schnitt-Schaltungsanordnung 4605 implementiert sein könnte. Diese Implementierung kann verwendet werden, um die Anzahl der versendeten Schattierer-Stufen und Rundtrips zwischen der Festfunktions-Schnitt-Hardware 4605 und dem Prozessor zu verringern.
  • Die hier beschriebenen Ausführungsformen der Erfindung ermöglichen eine programmierbare Schattierungs- und Strahlendurchquerungssteuerung unter Verwendung anwenderdefinierter Funktionen, die mit größerer SIMD-Effizienz auf vorhandenen und zukünftigen GPU-Prozessoren ausgeführt werden kann. Die programmierbare Steuerung der Strahldurchquerung ermöglicht verschiedene wichtige Funktionen wie die prozedurale Instantiierung, die stochastische Detailgradauswahl, maßgeschneiderte Primitiv-Schnitte und verzögerte BVH-Aktualisierungen.
  • Eine Ausführungsform der Erfindung umfasst eine programmierbare Strahlverfolgungsarchitektur mit Anwendung mehrerer Befehle auf mehrere Datenströme (MIMD-Strahlverfolgungsarchitektur), die die spekulative Ausführung von Treffer- und Schnitt-Schattierern unterstützt. Insbesondere konzentriert sich eine Ausführungsform auf die Reduzierung des Planungs- und Kommunikationsaufwands zwischen den programmierbaren SIMD/SIMT-Kernen/Ausführungseinheiten 4001, die oben in Bezug auf 46 beschrieben wurden, und den Festfunktions-MIMD-Durchquerungs-/Schnitteinheiten 4605 in einer Hybrid-Strahlverfolgungsarchitektur. Im Folgenden werden mehrere spekulative Ausführungsschemata von Treffer- und Schnitt-Schattierern beschrieben, die in einer einzigen Charge von der Durchquerungs-Hardware abgefertigt werden können, wobei mehrere Durchquerungs- und Schattierungs-Umläufe vermieden werden. Eine Ausführungsform umfasst eine dedizierte Schaltungsanordnung zum Implementieren dieser Techniken.
  • Die Ausführungsformen der Erfindung sind besonders vorteilhaft in Anwendungsfällen, in denen die Ausführung von mehreren Treffer- oder Schnitt-Schattierern von einer Strahldurchquerungsabfrage erwünscht ist, die bei Implementierung ohne dedizierte Hardwareunterstützung einen erheblichen Mehraufwand verursachen würde. Dazu gehören, ohne darauf beschränkt zu sein, die Nächste-k-Treffer-Abfrage (Starten eines Treffer-Schattierers für die k nächsten Schnitte) und mehrere programmierbare Schnitt-Schattierer.
  • Die hier beschriebenen Techniken können als Erweiterungen der in 46 dargestellten (und in Bezug auf 46-50 beschriebenen) Architektur implementiert werden. Insbesondere bauen die vorliegenden Ausführungsformen der Erfindung auf dieser Architektur mit Verbesserungen auf, um die Leistungsfähigkeit in den oben erwähnten Anwendungsfällen zu verbessern.
  • Eine Leistungsbeschränkung von Hybrid-Strahlverfolgungs-Durchquerungs-Architekturen ist der Mehraufwand beim Starten von Durchquerungsabfragen aus den Ausführungseinheiten und der Mehraufwand beim Aufrufen programmierbarer Schattierer aus der Strahlverfolgungs-Hardware. Wenn während des Durchlaufs desselben Strahls mehrere Treffer- oder Schnitt-Schattierer aufgerufen werden, erzeugt dieser Mehraufwand „Ausführungsumläufe“ zwischen den programmierbaren Kernen 4601 und der Durchquerungs-/Schnitteinheit 4605. Dies setzt auch zusätzlich die Sortiereinheit 4608 unter Druck, die SIMD/SIMT-Kohärenz aus den einzelnen Schattierer-Aufrufen extrahieren muss.
  • Mehrere Aspekte der Strahlverfolgung erfordern eine programmierbare Steuerung, die durch die verschiedenen in Tabelle A oben aufgeführten Schattierertypen ausgedrückt werden kann (d. h. Primär, Treffer, Beliebiger Treffer, Fehltreffer, Schnitt, Durchquerung und Aufrufbar). Für jeden Typ können mehrere Schattierer vorhanden sein. Zum Beispiel kann jedes Material einen anderen Treffer-Schattierer haben. Einige dieser Schattierer-Typen sind in der aktuellen Strahlverfolgungs-API von Microsoft® definiert.
  • Als kurzer Überblick wird die rekursive Strahlverfolgung durch eine API-Funktion initiiert, die der GPU befiehlt, einen Satz von Primär-Schattierern zu starten, die Strahlen-Szenen-Schnitte (implementiert in Hardware und/oder Software) für Primärstrahlen erzeugen können. Dies kann wiederum andere Schattierer erzeugen, wie z. B. Durchquerungs-, Treffer- oder Fehltreffer-Schattierer. Ein Schattierer, der einen Kind-Schattierer erzeugt, kann auch einen Rückgabewert von diesem Schattierer erhalten. Aufrufbare Schattierer sind universelle Funktionen, die direkt von einem anderen Schattierer erzeugt werden können und auch Werte an den aufrufenden Schattierer zurückgeben können.
  • Strahldurchquerung berechnet Strahl-Szene-Schnitte durch Durchqueren und Schneiden von Knoten in einer Begrenzungsvolumenhierarchie (BVH). Jüngste Forschungen haben gezeigt, dass die Effizienz der Berechnung von Strahl-Szene-Schnitten um mehr als eine Größenordnung verbessert werden kann, indem Techniken verwendet werden, die besser für Hardware mit fester Funktion geeignet sind, wie z. B. Arithmetik mit verringerter Genauigkeit, BVH-Kompression, Pro-Strahl-Zustandsmaschinen, dedizierte Schnitt-Pipelines und maßgeschneiderte Caches.
  • Die in 46 gezeigte Architektur umfasst ein solches System, bei dem eine Anordnung von SIMD/SIMT-Kernen/Ausführungseinheiten 4601 mit einer Festfunktions-Strahlverfolgungs-/Schnitteinheit 4605 zusammenwirkt, um eine programmierbare Strahlverfolgung durchzuführen. Programmierbare Schattierer werden SIMD/SIMT-Strängen auf den Ausführungseinheiten/Kernen 4601 zugeordnet, wobei die Nutzung, Ausführung und Datenkohärenz von SIMD/SIMT für eine optimale Leistung entscheidend sind. Strahlabfragen lösen häufig die Kohärenz aus verschiedenen Gründen auf, z. B.:
    • • Durchquerungsdivergenz: Die Dauer der BVH-Durchquerung variiert unter Strahlen stark, was die asynchrone Strahlenverarbeitung begünstigt.
    • • Ausführungsdivergenz: Strahlen, die von verschiedenen Bahnen desselben SIMD/SIMT-Strangs erzeugt werden, können zu unterschiedlichen Schattierer-Aufrufen führen.
    • • Datenzugriffsdivergenz: Strahlen, die auf verschiedene Oberflächen treffen, tasten unterschiedliche BVH-Knoten und Primitive ab, und Schattierer greifen beispielsweise auf unterschiedliche Texturen zu. Eine Vielzahl anderer Szenarien kann zu Datenzugriffsdivergenz führen.
  • In einer Ausführungsform meistert die Festfunktions-Strahlverfolgungs-/Schnitteinheit 4005 die ersten beiden Herausforderungen, indem jeder Strahl einzeln und nicht reihenfolgetreu verarbeitet wird. Dadurch werden jedoch SIMD/SIMT-Gruppen aufgelöst. Die Sortiereinheit 4608 ist daher dafür verantwortlich, neue, kohärente SIMD/SIMT-Gruppen von Schattierer-Aufrufen zu bilden, die erneut an die Ausführungseinheiten entsendet werden sollen.
  • Es ist leicht zu erkennen, welche Vorteile eine solche Architektur im Vergleich zu einer reinen softwarebasierten Strahlverfolgungsimplementierung direkt auf den SIMD/SIMT-Prozessoren bietet. Mit der Nachrichtenübermittlung zwischen den SIMD/SIMT-Kernen/Ausführungseinheiten 4601 (hier manchmal einfach als SIMD/SIMT-Prozessoren oder -Kerne/EUs bezeichnet) und der MIMD-Durchquerungs-/Schnitteinheit 4605 ist jedoch ein Mehraufwand verbunden. Ferner extrahiert die Sortiereinheit 4608 möglicherweise keine perfekte SIMD/SIMT-Nutzung aus inkohärenten Schattiereraufrufen.
  • Eine Ausführungsform der Erfindung identifiziert Anwendungsfälle, in denen Schattiereraufrufe während des Durchquerung besonders häufig sein können. Für hybride MIMD-Strahlverfolgungs-Prozessoren werden Verbesserungen beschrieben, um den Kommunikationsmehraufwand zwischen den Kernen/EUs 4601 und den Durchquerungs-/Schnitteinheiten 4605 erheblich zu verringern. Diese Ausführungsform kann besonders bei Finden der k-nächsten Schnitte und Implementierung von programmierbaren Schnittschattierern vorteilhaft sein. Es ist jedoch zu beachten, dass die hier beschriebenen Techniken nicht auf ein bestimmtes Verarbeitungsszenario beschränkt sind.
  • Eine Zusammenfassung des hohen Aufwands des Strahlverfolgungs-Kontextwechsels zwischen den Kernen/EUs 4601 und der Festfunktions-Durchquerungs-/Schnitteinheit 4605 ist nachstehend gegeben. Der größte Teil des Leistungsmehraufwands wird durch diese beiden Kontextwechsel immer dann, wenn der Schattiereraufruf während der Einzelstrahldurchquerung erforderlich ist, verursacht.
  • Jede SIMD/SIMT-Bahn, die einen Strahl startet, erzeugt eine Erzeugungsnachricht an die Durchquerungs-/Schnitteinheit 4005, die einer BVH zum Durchqueren zugeordnet ist. Die Daten (Strahldurchquerungskontext) werden über die Erzeugungsnachricht und den (zwischengespeicherten) Speicher an die Durchquerungs-/Schnitteinheit 4605 weitergeleitet. Wenn die Durchquerungs-/Schnitteinheit 4605 bereit ist, der Erzeugungsnachricht einen neuen Hardware-Strang zuzuweisen, lädt sie den Durchquerungszustand und führt eine Durchquerung an der BVH durch. Es gibt auch Einrichtungsaufwand, der vor dem ersten Durchlaufschritt an der BVH durchgeführt werden müssen.
  • 51 zeigt einen Betriebsablauf einer programmierbaren Strahlverfolgungspipeline gemäß einer Ausführungsform der Erfindung. In der dargestellten Ausführungsform sind die schattierten Elemente einschließlich der Durchquerung 5102 und des Schnitts 5103 in einer Festfunktions-Schaltungsanordnung implementiert, während die übrigen Elemente mit programmierbaren Kernen/Ausführungseinheiten implementiert sind.
  • Ein Primärstrahl-Schattierer 5101 sendet bei 4502 Arbeit an die Durchquerungsschaltungsanordnung, die den einen oder die mehreren aktuellen Strahlen durch die BVH (oder eine andere Beschleunigungsstruktur) laufen lässt. Wenn ein Blattknoten erreicht wird, ruft die Durchquerungsschaltungsanordnung bei 5103 die Schnittschaltungsanordnung auf, die bei Identifizieren eines Strahl-Dreieck-Schnitts bei 5104 einen Beliebiger-Treffer-Schattierer aufruft (der wie angegeben Ergebnisse an die Durchquerungsschaltungsanordnung zurückgeben kann).
  • Alternativ kann die Durchquerung beendet werden, bevor ein Blattknoten erreicht wird, und ein Nächster-Treffer-Schattierer wird bei 5107 aufgerufen (wenn ein Treffer registriert wurde) oder ein Fehltreffer-Schattierer wird bei 5106 aufgerufen (im Falle eines Fehltreffers).
  • Wie es bei 5105 angegeben ist, kann ein Schnitt-Schattierer aufgerufen werden, wenn die Durchquerungsschaltungsanordnung einen Spezialprimitiv-Blattknoten erreicht. Ein Spezialprimitiv kann ein beliebiges Nicht-Dreieck-Primitiv sein, beispielsweise ein Polygon oder ein Polyeder (z. B. Tetraeder, Voxel, Hexaeder, Keile, Pyramiden oder ein anderes „unstrukturiertes“ Volumen). Der Schnitt-Schattierer 5105 identifiziert alle Schnitte zwischen dem Strahl und dem Spezialprimitiv für den Beliebiger-Treffer-Schattierer 5104, der eine Beliebiger-Treffer-Verarbeitung implementiert.
  • In einer Ausführungsform erzeugt die Durchquerungs-/Schnitteinheit 5105 dann, wenn die Hardware-Durchquerung 5102 eine programmierbare Stufe erreicht, eine Schattierer-Abfertigungsnachricht an einen relevanten Schattierer 5105-5107, die einer einzelnen SIMD-Bahn der zum Ausführen des Schattierers verwendeten Ausführungseinheit(en) entspricht. Da Abfertigungen in einer beliebigen Reihenfolge von Strahlen erfolgen und sie in den aufgerufenen Programmen divergent sind, akkumuliert eine Ausführungsform der Sortiereinheit 4608 mehrere Abfertigungsaufrufe, um kohärente SIMD-Chargen zu extrahieren. Der aktualisierte Durchlaufzustand und die optionalen Schattierer-Argumente können von der Durchquerungs-/Schnitteinheit 4605 in den Speicher 2511 geschrieben werden.
  • Bei dem Problem des k-nächsten Schnittes wird ein Nächster-Treffer-Schattierer 5107 für die ersten k Schnitte ausgeführt. Bei der herkömmlichen Weise würde dies bedeuten, dass die Strahlendurchquerung endet, wenn der nächstgelegene Schnitt gefunden wird, ein Treffer-Schattierer aufgerufen wird und ein neuer Strahl aus dem Treffer-Schattierer erzeugt wird, um den nächsten nächstgelegenen Schnitt zu finden (mit dem Strahlursprungsversatz, so dass nicht derselbe Schnitt auftritt). Es ist leicht zu erkennen, dass diese Implementierung k Strahlerzeugungen für einen einzelnen Strahl erfordern würde. Eine weitere Implementierung arbeitet mit Beliebiger-Treffer-Schattierern 5104, die für alle Schnitte aufgerufen werden und eine globale Liste von nächstgelegenen Schnitten pflegen, unter Verwendung einer Einfügesortieroperation. Das Hauptproblem bei diesem Ansatz besteht darin, dass es keine Obergrenze für Beliebiger-Treffer-Schattierer-Aufrufe gibt.
  • Wie erwähnt kann ein Schnitt-Schattierer 5105 für Nicht-Dreieck-(Spezial-)Primitive aufgerufen werden. Abhängig vom Ergebnis des Schnitttests und dem Durchquerungszustand (ausstehende Knoten- und Primitiv-Schnitte) kann die Durchquerung desselben Strahls nach der Ausführung des Schnitt-Schattierers 5105 fortgesetzt werden. Daher kann das Finden des nächsten Treffers mehrere Umläufe zu der Ausführungseinheit erfordern.
  • Eine Ausführungsform der Erfindung konzentriert sich auf die Reduzierung von SIMD-MIMD-Kontextwechseln für Schnitt-Schattierer 5105 und Treffer-Schattierer 5104, 5107 durch Änderungen an der Durchquerungs-Hardware und dem Schattierer-Planungsmodell. Zuerst schiebt die Strahldurchquerungsschaltungsanordnung 4605 Schattiereraufrufe auf, indem sie mehrere potenzielle Aufrufe akkumuliert und in einer größeren Charge abfertigt. Darüber hinaus können bestimmte Aufrufe, die sich als unnötig herausstellen, zu diesem Zeitpunkt aussortiert werden. Darüber hinaus sammelt eine Ausführungsform des Schattierer-Planers 4607 mehrere Schattiereraufrufe aus demselben Durchquerungskontext in einer einzelnen SIMD-Charge, was in einer einzelnen Strahlverfolgungsnachricht resultiert. In einer Implementierung unterbricht die Durchquerungs-Hardware 4605 den Durchquerungsstrang und wartet auf die Ergebnisse mehrerer Schattiereraufrufe. Diese Betriebsart wird hier als „spekulative“ Schattiererausführung bezeichnet, da sie die Abfertigung mehrerer Schattierer ermöglicht, von denen einige möglicherweise nicht aufgerufen werden, wenn sequentielle Aufrufe verwendet werden.
  • 52A zeigt ein Beispiel, in dem die Durchquerungsoperation auf mehrere Spezialprimitive 5250 in einem Teilbaum trifft, und 52B zeigt, wie dies mit drei Schnittabfertigungszyklen C1-C3 gelöst werden kann. Insbesondere benötigt der Planer 4607 dieser Ausführungsform drei Zyklen, um die Arbeit an den SIMD-Prozessor 4601 zu senden, und die Durchquerungsschaltungsanordnung 4605 benötigt drei Zyklen, um die Ergebnisse an die Sortiereinheit 4608 zu liefern. Der Durchquerungszustand 5201, der von der Durchquerungsschaltungsanordnung 4605 benötigt wird, ist in einem Speicher wie etwa einem lokalen Cache (z. B. einem L1-Cache und/oder einem L2-Cache) gespeichert.
  • Aufgeschobene Strahlverfolgungsschattiereraufrufe
  • Eine Ausführungsform der Erfindung wandelt die Art und Weise ab, in der der Hardware-Durchquerungszustand 5201 verwaltet wird, um die Ansammlung mehrerer potentieller Schnitt- oder Trefferaufrufe in einer Liste zu ermöglichen. Zu einem bestimmten Zeitpunkt während der Durchquerung kann jeder Eintrag in der Liste verwendet werden, um einen Schattiereraufruf zu erzeugen. Beispielsweise können die k-nächsten Schnittpunkte auf der Durchquerungs-Hardware 4605 und/oder in dem Durchquerungszustand 5201 im Speicher gesammelt werden und Treffer-Schattierer können für jedes Element aufgerufen werden, wenn die Durchquerung abgeschlossen ist. Bei Treffer-Schattierern können für einen Teilbaum in der BVH mehrere potenzielle Schnitte gesammelt werden.
  • Für den Nächste-k-Anwendungsfall besteht der Vorteil dieses Ansatzes darin, dass anstelle von k-1-Umläufen zu dem/r SIMD-Kern/EU 4601 und k-1 neuen Strahlerzeugungsnachrichten alle Treffer-Schattierer während des gleichen Durchquerungsstrangs während einer einzelnen Durchquerungsoperation auf der Durchquerungsschaltungsanordnung 4605 aufgerufen werden. Eine Herausforderung für mögliche Implementierungen besteht darin, dass es nicht trivial ist, die Ausführungsreihenfolge von Treffer-Schattierern zu gewährleisten (der Standard-„Umlauf“-Ansatz garantiert, dass der Treffer-Schattierer des nächstgelegenen Schnitts zuerst ausgeführt wird usw.). In einer Ausführungsform wird dies entweder durch die Synchronisation der Treffer-Schattierer oder durch die Lockerung der Reihenfolge angegangen.
  • Für den Schnitt-Schattierer-Anwendungsfall weiß die Durchquerungsschaltungsanordnung 4605 nicht im Voraus, ob ein gegebener Schattierer einen positiven Schnitttest zurückgeben würde. Es ist jedoch möglich, mehrere Schnitt-Schattierer spekulativ auszuführen. Wenn mindestens einer ein positives Trefferergebnis zurückgibt, wird er mit dem globalen nächsten Treffer zusammengeführt. Bestimmte Implementierungen müssen eine optimale Anzahl aufgeschobener Schnitttests finden, um die Anzahl der Abfertigungsaufrufe zu verringern, aber zu vermeiden, zu viele redundante Schnitt-Schattierer aufzurufen.
  • Zusammengefasste Schattiereraufrufe aus der Durchquerungsschaltungsanordnung
  • Wenn mehrere Schattierer aus demselben Strahlerzeugung auf der Durchquerungsschaltungsanordnung 4605 entsendet werden, erzeugt eine Ausführungsform Verzweigungen in dem Ablauf des Strahldurchquerungsalgorithmus. Dies kann für Schnitt-Schattierer problematisch sein, da der Rest der BVH-Durchquerung vom Ergebnis aller entsendeten Schnitttests abhängt. Dies bedeutet, dass eine Synchronisierungsoperation erforderlich ist, um auf das Ergebnis der Schattiereraufrufe zu warten, was auf asynchroner Hardware eine Herausforderung darstellen kann.
  • Eine Ausführungsform der Erfindung beruht auf zwei Punkten des Zusammenführens der Ergebnisse der Schattiereraufrufe: dem SIMD-Prozessor 4601 und der Durchquerungsschaltungsanordnung 4605. In Bezug auf den SIMD-Prozessor 4601 können mehrere Schattierer ihre Ergebnisse unter Verwendung von Standardprogrammiermodellen synchronisieren und zusammenfassen. Eine relativ einfache Möglichkeit, dies zu tun, besteht darin, globale Atomics zu verwenden und Ergebnisse in einer gemeinsam genutzten Datenstruktur im Speicher zu sammeln, in der Schnittergebnisse mehrerer Schattierer gespeichert werden können. Dann kann der letzte Schattierer die Datenstruktur auflösen und die Durchquerungsschaltungsanordnung 4605 zurückrufen, um die Durchquerung fortzusetzen.
  • Eine Ausführungsform der Erfindung implementiert einen effizienteren Ansatz, der die Ausführung mehrerer Schattiereraufrufe auf Bahnen desselben SIMD-Strangs auf dem SIMD-Prozessor 4601 begrenzt. Die Schnitttests werden dann lokal unter Verwendung von SIMD/SIMT-Reduktionsoperationen reduziert (anstatt unter Zurückgreifen auf globale Atomics). Diese Ausführungsform kann auf einer neuen Schaltungsanordnung innerhalb der Sortiereinheit 4608 beruhen, um eine kleine Charge von Schattiereraufrufen in derselben SIMD-Charge verbleiben zu lassen.
  • Eine Ausführungsform der Erfindung unterbricht die Ausführung des Durchquerungsstrangs auf der Durchquerungsschaltungsanordnung 4605. Unter Verwendung des herkömmlichen Ausführungsmodells wird dann, wenn ein Schattierer während der Durchquerung abgefertigt wird, der Durchquerungsstrang beendet und der Strahldurchquerungszustand im Speicher gespeichert, um die Ausführung anderer Strahlerzeugungsbefehle zu ermöglichen, während die Ausführungseinheiten 4601 die Schattierer verarbeiten. Wenn der Durchquerungsstrang lediglich angehalten wird, muss der Durchquerungszustand nicht gespeichert werden und kann auf jedes Schattiererergebnis separat warten. Diese Ausführungsform kann eine Schaltungsanordnung aufweisen, um Blockaden zu vermeiden und eine ausreichende Hardwareauslastung zu bieten.
  • 53-54 zeigen Ausführungsformen eines aufgeschobenen Modells, das einen einzelnen Schattiereraufruf auf den SIMD-Kernen/Ausführungseinheiten 4601 mit drei Schattierern 5301 aufruft. Bei Aufrechterhaltung werden alle Schnitttests innerhalb derselben SIMD/SIMT-Gruppe ausgewertet. Folglich kann der nächste Schnitt auch auf den programmierbaren Kernen/Ausführungseinheiten 4601 berechnet werden.
  • Wie erwähnt kann die Gesamtheit oder ein Teil der Schattierer-Sammlung und/oder -Aufschiebung von der Durchquerungs-/Schnittschaltungsanordnung 4605 und/oder dem Kern-/EU-Planer 4607 ausgeführt werden. 53 zeigt eine Ausführungsform, in der die Schattierer-Aufschub-/Sammelschaltungsanordnung 5306 innerhalb des Planers 4607 die Planung von Schattierern, die einem bestimmten SIMD/SIMT-Strang bzw. einer bestimmten SIMD/SIMT-Bahn zugeordnet sind, aufschiebt, bis ein bestimmtes auslösendes Ereignis aufgetreten ist. Bei Detektieren des auslösenden Ereignisses entsendet der Planer 4607 die mehreren gesammelten Schattierer in einer einzelnen SIMD/SIMT-Charge an die Kerne/EUs 4601.
  • 54 zeigt eine Ausführungsform, in der die Schattierer-Aufschub-/Sammelschaltungsanordnung 5405 innerhalb der Durchquerungs-/Schnittschaltungsanordnung 4605 die Planung von Schattierern, die einem bestimmten SIMD-Strang bzw. einer bestimmten SIMD-Bahn zugeordnet sind, aufschiebt, bis ein bestimmtes auslösendes Ereignis aufgetreten ist. Bei Detektieren des auslösenden Ereignisses entsendet die Durchquerungs-/Schnittschaltungsanordnung 4605 die gesammelten Schattierer in einer einzelnen SIMD/SIMT-Charge an die Sortiereinheit 4608.
  • Es ist jedoch zu beachten, dass die Schattierer-Aufschub- und Sammeltechniken in verschiedenen anderen Komponenten wie etwa der Sortiereinheit 4608 implementiert oder über mehrere Komponenten verteilt sein können. Beispielsweise kann die Durchquerungs-/Schnittschaltungsanordnung 4605 einen ersten Satz von Schattierer-Sammeloperationen ausführen und der Planer 4607 kann einen zweiten Satz von Schattierer-Sammeloperationen ausführen, um sicherzustellen, dass Schattierer für einen SIMD-Strang effizient auf den Kernen/EUs 4601 eingeplant werden.
  • Das „auslösende Ereignis“, das bewirkt, dass die gesammelten Schattierer an die Kerne/EUs entsendet werden, kann ein Verarbeitungsereignis wie beispielsweise eine bestimmte Anzahl von gesammelten Schattierern oder eine minimale Latenz, die einem bestimmten Strang zugeordnet ist, sein. Alternativ oder zusätzlich kann das auslösende Ereignis ein zeitliches Ereignis wie beispielsweise eine bestimmte Dauer ab dem Aufschieben des ersten Schattierers oder eine bestimmte Anzahl von Prozessorzyklen sein. Andere Variablen wie die aktuelle Arbeitslast auf den Kernen/EUs 4001 und der Durchquerungs-/Schnittschaltungsanordnung 4605 können ebenfalls von dem Planer 4607 bewertet werden, um zu bestimmen, wann die SIMD/SIMT-Charge aus Schattierern entsendet werden soll.
  • Verschiedene Ausführungsformen der Erfindung können unter Verwendung verschiedener Kombinationen der obigen Ansätze basierend auf der speziellen verwendeten Systemarchitektur und den Anforderungen der Anwendung implementiert werden.
  • Strahlverfolgungsbefehle
  • Die nachstehend beschriebenen Strahlverfolgungsbefehle sind in einer Befehlssatzarchitektur (ISA) enthalten, die von einer Ausführungsform der CPU 3799 und/oder der GPU 3705 unterstützt wird. Wenn sie von der CPU ausgeführt werden, können die Einzelbefehl-Mehrfachdaten-Befehle (SIMD-Befehle) Vektor-/gepackte Quell- und Zielregister zum Ausführen der beschriebenen Operationen verwenden, und können von einem CPU-Kern decodiert und ausgeführt werden. Wenn sie von einer GPU 3705 ausgeführt werden, können die Befehle von Grafikkernen 3730 ausgeführt werden. Beispielsweise kann eine beliebige der oben beschriebenen Ausführungseinheiten (EUs) 4601 die Befehle ausführen. Alternativ oder zusätzlich können die Befehle durch eine Ausführungsschaltungsanordnung auf den Strahlverfolgungskernen 3150 und/oder den Tensorkernen 3740 ausgeführt werden.
  • 55 zeigt eine Ausführungsform einer Architektur zum Ausführen der nachstehend beschriebenen Strahlverfolgungsbefehle. Die dargestellte Architektur kann in einen oder mehrere der oben beschriebenen Kerne 3730, 3740, 3750 integriert sein (siehe z. B. 37 und zugehörigen Text) oder in einer anderen Prozessorarchitektur enthalten sein.
  • Im Betrieb ruft eine Befehlsabrufeinheit 5503 die Strahlverfolgungsbefehle 5500 aus dem Speicher 3798 ab und ein Decodierer 5595 decodiert die Befehle. In einer Implementierung decodiert der Decodierer 5595 Befehle, um ausführbare Operationen (z. B. Mikrooperationen oder uops in einem mikrocodierten Kern) zu erzeugen. Alternativ können einige oder alle der Strahlverfolgungsbefehle 5500 ohne Decodierung ausgeführt werden und an sich ist ein Decodierer 5504 nicht erforderlich.
  • In jeder Implementierung plant und entsendet ein Planer/Abfertiger 5505 die Befehle (oder Operationen) über einen Satz von Funktionseinheiten (FUs) 5510-5512. Die dargestellte Ausführungsform umfasst eine Vektor-FU 5510 zum Ausführen von Einzelbefehl-Mehrfachdaten-Befehlen (SIMD-Befehlen), die gleichzeitig an mehreren gepackten Datenelementen arbeiten, die in Vektorregistern 5515 gespeichert sind, und eine Skalar-FU 5511 zum Arbeiten an Skalarwerten, die in einem oder mehreren Skalarregistern 5516 gespeichert sind. Eine optionale Strahlverfolgungs-FU 5512 kann mit gepackten Datenwerten, die in den Vektorregistern 515 gespeichert sind, und/oder Skalarwerten, die in den Skalarregistern 5516 gespeichert sind, arbeiten. In einer Ausführungsform ohne eine dedizierte FU 5512 führen die Vektor-FU 5510 und möglicherweise die Skalar-FU 5511 die unten beschriebenen Strahlverfolgungsbefehle durch.
  • Die verschiedenen FUs 5510-5512 greifen auf Strahlverfolgungsdaten 5502 (z. B. Durchquerungs-/Schnittdaten), die zum Ausführen der Strahlverfolgungsbefehle 5500 notwendig sind, aus den Vektorregistern 5515, dem Skalarregister 5516 und/oder dem lokalen Cache-Untersystem 5508 (z. B. einem L1-Cache) zu. In einer Ausführungsform können die FUs 5510-5512 auch über Lade- und Speicheroperationen Zugriffe auf den Speicher 3798 durchführen und das Cache-Untersystem 5508 kann unabhängig arbeiten, um die Daten lokal zwischenzuspeichern.
  • Während die Strahlverfolgungsbefehle verwendet werden können, um die Leistungsfähigkeit für Strahldurchquerungs-/Schnitt- und BVH-Builds zu erhöhen, können sie auch auf andere Bereiche anwendbar sein, wie beispielsweise Implementierungen von Hochleistungsrechnen (HPC) und Allzweck-GPUs (GPGPUs).
  • In den folgenden Beschreibungen wird der Begriff Doppelwort manchmal mit dw abgekürzt und das vorzeichenlose Byte wird mit ub abgekürzt. Zusätzlich können sich die nachstehend genannten Quell- und Zielregister (z. B. src0, src1, dest usw.) auf Vektorregister 5515 oder in einigen Fällen auf eine Kombination von Vektorregistern 5515 und Skalarregistern 5516 beziehen. Typischerweise werden dann, wenn ein von einem Befehl verwendeter Quell- oder Zielwert gepackte Datenelemente umfasst (wenn z. B. eine Quelle oder ein Ziel N Datenelemente speichert), Vektorregister 5515 verwendet. Andere Werte können Skalarregister 5516 oder Vektorregister 5515 verwenden.
  • Dequantisieren
  • Eine Ausführungsform des Dequantisierungsbefehls „dequantisiert“ zuvor quantisierte Werte. Beispielsweise können in einer Strahlverfolgungsimplementierung bestimmte BVH-Teilbäume quantisiert werden, um die Speicher- und Bandbreitenanforderungen zu reduzieren. Eine Ausführungsform des Dequantisierungsbefehls hat die Form dequantize dest src0 src1 src2, wobei das Quellregister src0 N vorzeichenlose Bytes speichert, das Quellregister src1 1 vorzeichenloses Byte speichert, das Quellregister src2 1 Gleitkommawert speichert und das Zielregister dest N Gleitkommawerte speichert. Alle diese Register können Vektorregister 5515 sein. Alternativ können src0 und dest Vektorregister 4915 sein und src 1 und src2 können Skalarregister 5516 sein.
  • Die folgende Codesequenz definiert eine bestimmte Implementierung des Dequantisierungsbefehls:
  •      for (int i = 0; i < SIMD_WIDTH) {
             if (execMask[i]) {
                  dst [i] = src2[i] +
             ldexp(convert_to_float(src0[i]),src1);
    
              }
         }
  • In diesem Beispiel multipliziert ldexp einen Gleitkommawert mit doppelter Genauigkeit mit einer spezifizierten ganzzahligen Potenz von zwei (d. h. ldexp (x, exp) = x * 2exp) . Wenn im obigen Code der dem aktuellen SIMD-Datenelement (execMask [i]) zugeordnete Ausführungsmaskenwert auf 1 gesetzt ist, wird das SIMD-Datenelement an Position i in src0 in einen Gleitkommawert konvertiert und mit der ganzzahligen Potenz des Wertes in src1 (2src1-Wert) multipliziert und dieser Wert wird zu dem entsprechenden SIMD-Datenelement in src2 addiert.
  • Selektives Min oder Max
  • Eine Ausführungsform eines selektiven Min- oder Max-Befehls führt entweder eine Min- oder eine Max-Operation pro Bahn aus (d. h. Rückgabe des Minimums oder Maximums einer Menge von Werten), wie es durch ein Bit in einer Bitmaske angegeben ist. Die Bitmaske kann die Vektorregister 5515, Skalarregister 5516 oder einen separaten Satz von Maskenregistern (nicht gezeigt) verwenden. Die folgende Codesequenz definiert eine bestimmte Implementierung des Min/Max-Befehls: sel_min_max dest src0 src1 src2, wobei src0 N Doppelwörter speichert, src1 N Doppelwörter speichert, src2 ein Doppelwort speichert und das Zielregister N Doppelwörter speichert.
  • Die folgende Codesequenz definiert eine bestimmte Implementierung des selektiven Min/Max-Befehls:
  •      for (int i = 0; i < SIMD_WIDTH) {
             if (execMask[i]) {
             dst[i] = (1 << i) & src2 ?
             min(src0[i],src1[i]) : max(src0[i],src1[i]);
             }
         }
  • In diesem Beispiel wird der Wert von (1 << i) & src2 (eine um i linksverschobene 1 UND-verknüpft mit src2) verwendet, um entweder das Minimum des i-ten Datenelements in src0 und src1 oder das Maximum des i-ten Datenelements in src0 und src1 auszuwählen. Die Operation wird für das i-te Datenelement nur ausgeführt, wenn der dem aktuellen SIMD-Datenelement (execMask [i]) zugeordnete Ausführungsmaskenwert auf 1 gesetzt ist.
  • Indexmischbefehl
  • Eine Ausführungsform eines Indexmischbefehls kann einen beliebigen Satz von Eingabebahnen auf die Ausgabebahnen kopieren. Bei einer SIMD-Breite von 32 kann dieser Befehl mit einem geringeren Durchsatz ausgeführt werden. Diese Ausführungsform hat die Form: shuffle_index dest src0 src1 <optionaler Merker>, wobei src0 N Doppelwörter speichert, src1 N vorzeichenlose Bytes (d. h. den Indexwert) speichert und dest N Doppelwörter speichert.
  • Die folgende Codesequenz definiert eine bestimmte Implementierung des Indexmischbefehls:
  •       for (int i = 0; i < SIMD_WIDTH) {
            uint8_t srcLane = src1.index[i];
            if (execMask[i]) {
    
             bool invalidLane = srcLane < 0 | | srcLane >=
          SIMD_WIDTH | | !execMask[srcLaneMod];
             if (FLAG) {
    
              } invalidLane |= flag[srcLaneMod];
    
             if (invalidLane) {
               dst[i] = src0[i];
    
              }
    
             else {
               dst[i] = src0[srcLane];
          } } }
  • In dem obigen Code identifiziert der Index in src1 die aktuelle Bahn. Wenn der i-te Wert in der Ausführungsmaske auf 1 gesetzt ist, wird überprüft, ob die Quellbahn im Bereich von 0 bis zu der SIMD-Breite liegt. Wenn ja, wird der Merker gesetzt (srcLaneMod) und das Datenelement i des Ziels wird gleich dem Datenelement i von src0 gesetzt. Wenn sich die Bahn innerhalb des Bereichs befindet (d. h. gültig ist), wird der Indexwert von src1 (srcLane0) als Index für src0 verwendet (dst [i] = src0 [srcLane]).
  • Direkter Misch-Up/Dn/XOR-Befehl
  • In einer Ausführungsform mischt ein Direkter Mischbefehl Eingabedatenelemente/Bahnen basierend auf einem Direktwert des Befehls. In einer Implementierung kann der Direktwert das Verschieben der Eingabebahnen um 1, 2, 4, 8 oder 16 Positionen basierend auf dem Wert des Direktwerts spezifizieren. Optional kann ein zusätzliches skalares Quellregister als Füllwert angegeben werden. Wenn der Quellbahnindex ungültig ist, wird der Füllwert (falls angegeben) an der Datenelementposition in dem Ziel gespeichert. Wenn kein Füllwert angegeben ist, wird die Datenelementposition auf nur Nullen gesetzt.
  • In einer Ausführungsform wird ein Merkerregister als Quellmaske verwendet. Wenn das Merkerbit für eine Quellbahn auf 1 gesetzt ist, ist die Quellbahn als ungültig markiert und der Befehl wird fortgesetzt.
  • Das Folgende sind Beispiele für verschiedene Implementierungen des direkten Mischbefehls:
    • shuffle_<up/dn/xor>_<1/2/4/8/16> dest src0 <optional src1> <optional Merker>
    • shuffle_<up/dn/xor>_<1/2/4/8/16> dest src0 <optional src1> <optional Merker>
  • 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 bestimmte Implementierung des direkten Mischbefehls:
  • for (int i = 0; i < SIMD_WIDTH) {
            int8_t srcLane;
            switch(SHUFFLE_TYPE) {
            case UP:
    
             srcLane = i - SHIFT;
    
            case DN:
    
             srcLane = i + SHIFT;
    
            case XOR:
            } srcLane = i ^ SHIFT;
            if (execMask[i]) {
    
             bool invalidLane = srcLane < 0 || srcLane >=
          SIMD_WIDTH | | !execMask[srcLane];
             if (FLAG) {
    
              } invalidLane |= flag[srcLane];
    
             if (invalidLane) {
               if (SRC1)
                 dst[i] = src1;
               else
    
              } dst [i] = 0;
    
             else {
               dst[i] = src0[srcLane];
    
              } 
    
    
            }
         }
  • Hier werden die Eingabedatenelemente/-bahnen um 1, 2, 4, 8 oder 16 Positionen verschoben, basierend auf dem Wert des Direktwerts. Das Register src1 ist ein zusätzliches skalares Quellregister, das als Füllwert verwendet wird und an der Datenelementposition in dem Ziel gespeichert wird, wenn der Quellbahnindex ungültig ist. Wenn kein Füllwert angegeben ist und der Quellbahnindex ungültig ist, wird die Datenelementposition in dem Ziel auf 0 gesetzt. Das Merkerregister (FLAG) wird als Quellmaske verwendet. Wenn das Merkerbit für eine Quellbahn auf 1 gesetzt ist, ist die Quellbahn als ungültig markiert und der Befehl wird wie oben beschrieben fortgesetzt.
  • Indirekter Misch-Up/Dn/XOR-Befehl
  • Der indirekte Mischbefehl hat einen Quelloperanden (src1), der die Zuordnung von Quellbahnen zu Zielbahnen steuert. Eine Ausführungsform des indirekten Mischbefehls hat die Form: shuffle_<up/dn/xor> dest src0 src1 <optionaler Merker> Dabei speichert src0 N Doppelwörter, src1 1 Doppelwort und dest N Doppelwörter.
  • Die folgende Codesequenz definiert eine bestimmte Implementierung des direkten Mischbefehls:
  •      for (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;
    
          if (execMask[i]) {
            bool invalidLane = srcLane < 0 || srcLane >=
         SIMD_WIDTH | | !execMask[srcLane];
            if (FLAG) {
            } invalidLane |= flag[srcLane];
            if (invalidLane) {
              dst [i] = 0;
            }
            else {
              dst[i] = src0[srcLane];
              }
          } 
        }
  • Somit arbeitet der indirekte Mischbefehl auf ähnliche Weise wie der oben beschriebene direkte Mischbefehl, aber die Zuordnung von Quellbahnen zu Zielbahnen wird durch das Quellregister src1 anstatt durch den Direktwert gesteuert.
  • Bahnübergreifender Min/Max-Befehl
  • Ausführungsformen eines bahnübergreifenden Minimum/Maximum-Befehls werden für Gleitkomma- und Ganzzahl-Datentypen unterstützt. Der bahnübergreifenden Minimum-Befehl hat die Form lane min Dest src0 und der bahnübergreifenden Maximum-Befehl hat die Form lane_max dest src0, wobei src0 N Doppelwörter und dest 1 Doppelwort speichert.
  • Beispielsweise definiert die folgende Codesequenz eine bestimmte Implementierung des bahnübergreifenden Minimums:
  •      dst = src[0];
         for (int i = 1; i < SIMD_WIDTH) {
    
          if (execMask[i]) {
    
           } dst = min(dst, src[i]);
         }
  • In dieser Ausführungsform wird der Doppelwortwert an der Datenelementposition i des Quellregisters mit dem Datenelement in dem Zielregister verglichen und das Minimum der beiden Werte wird in das Zielregister kopiert. Der bahnübergreifende Maximum-Befehl arbeitet im Wesentlichen auf die gleiche Weise, wobei der einzige Unterschied darin besteht, dass das Maximum des Datenelements an Position i und der Zielwert ausgewählt werden.
  • Bahnübergreifender Min/Max-Index-Befehl
  • Ausführungsformen eines bahnübergreifenden Minimum-Index-Befehls haben die Form lane_min_index dest src0 und eines bahnübergreifenden Maximum-Befehls haben die Form lane _max_index dest src0, wobei src0 N Doppelwörter und dest 1 Doppelwort speichert.
  • Beispielsweise definiert die folgende Codesequenz eine bestimmte Implementierung des bahnübergreifenden Minimum-Index-Befehls:
  •      dst_index = 0;
         tmp = src[0]
         for (int i = 1; i < SIMD_WIDTH) {
    
          if (src[i] < tmp && execMask[i]) 
    
    
           {
             tmp = src[i];
           } dst_index = i;
         }
  • In dieser Ausführungsform wird der Zielindex von 0 auf die SIMD-Breite inkrementiert, wobei das Zielregister umspannt wird. Wenn das Ausführungsmaskenbit gesetzt ist, wird das Datenelement an Position i in dem Quellregister an eine temporäre Speicherposition (tmp) kopiert und der Zielindex wird auf Datenelementposition i gesetzt.
  • Bahnübergreifender Sortiernetz-Befehl
  • In einer Ausführungsform sortiert ein bahnübergreifender Sortiernetzbefehl alle N Eingabeelemente unter Verwendung eines N-breiten (stabilen) Sortiernetzes entweder in aufsteigender Reihenfolge (sortnet_min) oder in absteigender Reihenfolge (sortnet max). Die Min/Max-Versionen des Befehls haben die Form sortnet _min dest src0 bzw. sortnet _max dest src0. In einer Implementierung speichern src0 und dest N Doppelwörter. Die Min/Max-Sortierung wird für die N Doppelwörter von src0 durchgeführt und die aufsteigend geordneten Elemente (für Min) oder absteigend geordneten Elemente (für Max) werden in ihrer jeweiligen sortierten Reihenfolge in dest gespeichert. Ein Beispiel für eine Codesequenz, die den Befehl definiert, ist: dst = apply_N_wide_sorting_network_min/max (src0).
  • Bahnübergreifender Sortiernetz-Index-Befehl
  • In einer Ausführungsform sortiert ein bahnübergreifender Sortiernetz-Index-Befehl alle N Eingabeelemente unter Verwendung eines N-breiten (stabilen) Sortiernetzes, gibt jedoch den Permutationsindex entweder in aufsteigender Reihenfolge (sortnet min) oder in absteigender Reihenfolge (sortnet_max) zurück. Die Min/Max-Versionen des Befehls haben die Formen sortnet_min_index dest src0 und sortnet _max_index dest src0, wobei src0 und dest jeweils N Doppelwörter speichern. Ein Beispiel für eine Codesequenz, die den Befehl definiert, ist dst = apply_N_wide_sorting_network_min / max_index (src0).
  • Eine Ausführungsform eines Verfahrens zum Ausführen beliebiger der obigen Befehle ist in 56 dargestellt. Das Verfahren kann auf den oben beschriebenen spezifischen Prozessorarchitekturen implementiert werden, ist jedoch nicht auf eine bestimmte Prozessor- oder Systemarchitektur beschränkt.
  • Bei 5601 werden Befehle eines primären Grafik-Strangs auf Prozessorkernen ausgeführt. Dies kann beispielsweise einen beliebigen der oben beschriebenen Kerne (z. B. Grafikkerne 3730) einbeziehen. Wenn die Strahlverfolgungsarbeit innerhalb des primären Grafik-Strangs erreicht ist, der bei 5602 bestimmt wurde, werden die Strahlverfolgungsbefehle an die Strahlverfolgungsausführungsschaltungsanordnung ausgelagert, die die Form einer Funktionseinheit (FU) haben kann, wie sie oben in Bezug auf 55 beschrieben ist, oder die sich in einem dedizierten Strahlverfolgungskern 3150 befinden kann, wie es in Bezug auf 37 beschrieben ist.
  • Bei 5603 werden die Strahlverfolgungsbefehle decodiert und aus dem Speicher abgerufen, und bei 5605 werden die Befehle in ausführbare Operationen decodiert (in einer Ausführungsform, die einen Decodierer erfordert). Bei 5604 werden die Strahlverfolgungsbefehle geplant und zur Ausführung durch eine Strahlverfolgungsschaltungsanordnung abgefertigt. Bei 5605 werden die Strahlverfolgungsbefehle von der Strahlverfolgungsschaltungsanordnung ausgeführt. Beispielsweise können die Befehle auf den oben beschriebenen FUs (z. B. Vektor-FU 5510, Strahlverfolgungs-FU 4912 usw.) und/oder den Grafikkernen 3730 oder Strahlverfolgungskernen 3750 abgefertigt und ausgeführt.
  • Wenn die Ausführung für einen Strahlverfolgungsbefehl abgeschlossen ist, werden die Ergebnisse bei 5606 gespeichert (z. B. zurück in den Speicher 3798 gespeichert) und bei 5607 wird der primäre Grafik-Strang benachrichtigt. Bei 5608 werden die Strahlverfolgungsergebnisse im Kontext des primären Strangs verarbeitet (z. B. aus dem Speicher gelesen und in Grafikrenderergebnisse integriert).
  • In hierin beschriebenen Ausführungsformen kann sich der Begriff „Maschine“, „Modul“ oder „Logik“ auf eine anwendungsspezifische integrierte Schaltung (ASIC), eine elektronische Schaltung, einen Prozessor (gemeinsam genutzt, dediziert oder Gruppe) und/oder Speicher (gemeinsam genutzt, dediziert oder Gruppe), die ein oder mehrere Software- oder Firmware-Programme ausführen, eine kombinatorische Logikschaltung und/oder andere geeignete Komponenten, die die beschriebene Funktionalität bereitstellen, beziehen, ein Teil davon sein oder diese umfassen. In Ausführungsformen kann eine Maschine, ein Modul oder eine Logik in Firmware, Hardware, Software oder einer beliebigen Kombination von Firmware, Hardware und Software implementiert sein.
  • Ausführungsformen der Erfindung können verschiedene Schritte umfassen, die oben beschrieben wurden. Die Schritte können in maschinenausführbaren Befehlen verkörpert sein, die verwendet werden können, um einen Allzweck- oder Spezialprozessor zu veranlassen, die Schritte auszuführen. Alternativ können diese Schritte von bestimmten Hardwarekomponenten, die festverdrahtete Logik zum Ausführen der Schritte aufweisen, oder von einer beliebigen Kombination aus programmierten Computerkomponenten und maßgeschneiderten Hardwarekomponenten ausgeführt werden.
  • Wie hierin beschrieben können sich Befehle auf bestimmte Hardwarekonfigurationen wie beispielsweise anwendungsspezifische integrierte Schaltungen (ASICs), die dazu ausgelegt sind, bestimmte Operationen auszuführen, oder die eine vorbestimmte Funktionalität aufweisen, oder Softwarebefehle, die in einem Speicher gespeichert sind, der in einem nichttransitorischen computerlesbaren Medium verkörpert ist, beziehen. Somit 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 Netzelement usw.) gespeichert und ausgeführt werden. Solche elektronischen Vorrichtungen speichern und kommunizieren (intern und/oder mit anderen elektronischen Vorrichtungen über ein Netz) Code und Daten unter Verwendung von maschinenlesbaren Computermedien wie nichttransitorischen maschinenlesbaren Speichermedien (z. B. Magnetplatten; optischen Platten; Direktzugriffsspeicher, Nur-LeseSpeicher, Flash-Speichervorrichtungen, Phasenwechselspeicher) und transitorische computerlesbare Kommunikationsmedien (z. B. elektrische, optische, akustische Signale oder andere Formen von sich ausbreitenden Signalen wie etwa Trägerwellen, Infrarotsignale, digitale Signale, usw.).
  • Zusätzlich umfassen solche elektronischen Vorrichtungen typischerweise einen Satz von einem oder mehreren Prozessoren, die mit einer oder mehreren anderen Komponenten, wie einer oder mehreren Speichervorrichtungen (nichttransitorischen maschinenlesbaren Speichermedien), Anwender-Eingabe/Ausgabe-Vorrichtungen (z. B. einer Tastatur, einem Berührungsbildschirm und/oder einer Anzeige) und Netzanschlüssen gekoppelt sind. Die Kopplung des Satzes von Prozessoren und anderen Komponenten erfolgt typischerweise über einen oder mehrere Busse und Brücken (auch als Bus-Controller bezeichnet). Die Speichervorrichtung und die Signale, die den Netzverkehr tragen, repräsentieren jeweils ein oder mehrere maschinenlesbare Speichermedien und maschinenlesbare Kommunikationsmedien. Somit speichert die Speichervorrichtung einer gegebenen elektronischen Vorrichtung typischerweise Code und/oder Daten zur Ausführung auf dem Satz eines oder mehrerer Prozessoren dieser elektronischen Vorrichtung. Natürlich können ein oder mehrere Teile einer Ausführungsform der Erfindung unter Verwendung verschiedener Kombinationen von Software, Firmware und/oder Hardware implementiert werden. In dieser genauen Beschreibung wurden zum Zwecke der Erläuterung zahlreiche spezifische Einzelheiten dargelegt, um ein gründliches Verständnis der vorliegenden Erfindung zu ermöglichen. Fachleuten wird jedoch klar sein, dass die Erfindung auch ohne einige dieser spezifischen Einzelheiten praktiziert werden kann. In bestimmten Fällen wurden bekannte Strukturen und Funktionen nicht genaue beschrieben, um zu vermeiden, dass der Gegenstand der vorliegenden Erfindung verunklart wird. Dementsprechend sollten Umfang und Gedanke der Erfindung anhand der folgenden Ansprüche beurteilt werden
  • Claims (25)

    1. Verfahren, das Folgendes umfasst: Ausführen einer Anwendung mit mehreren Strängen; Identifizieren einer ersten Teilmenge der Stränge zur Ausführung auf einem lokalen Grafikprozessor und einer zweiten Teilmenge der Stränge zur Ausführung auf einer virtualisierten Repräsentation eines lokalen Prozessors; Planen der ersten Teilmenge von Strängen auf dem lokalen Grafikprozessor; Planen der zweiten Teilmenge der Stränge durch Übertragen der Stränge oder einer Repräsentation davon an cloudbasierte Verarbeitungsbetriebsmittel, die der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind; und Kombinieren der ersten Ergebnisse des Ausführens der ersten Teilmenge von Strängen auf dem lokalen Grafikprozessor mit den zweiten Ergebnissen des Ausführens der zweiten Teilmenge von Strängen auf den cloudbasierten Verarbeitungsbetriebsmitteln, um einen Bildframe zu rendern.
    2. Verfahren nach Anspruch 1, das ferner Folgendes umfasst: Auswerten der mehreren Stränge, um die erste und zweite Teilmenge von Strängen zu identifizieren.
    3. Verfahren nach Anspruch 2, wobei das Auswerten der mehreren Stränge ferner ein Auswerten von Ausführungsanforderungen, die den mehreren Strängen zugeordnet sind, im Hinblick auf Metriken, die der Ausführung auf der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind, umfasst.
    4. Verfahren nach Anspruch 3, wobei die Ausführungsanforderungen Latenz- und/oder Bandbreitenschwellen umfassen und wobei die Metriken Latenz- und/oder Bandbreitenstatistiken umfassen, die der Ausführung auf der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind.
    5. Verfahren nach Anspruch 1 oder 4, das ferner Folgendes umfasst: Installieren und/oder Aufzählen des lokalen Grafikprozessors und der virtualisierten Repräsentation des lokalen Prozessors.
    6. Verfahren nach Anspruch 1 oder 5, wobei erste Befehle, die einem ersten Grafikstrang in der ersten Teilmenge von Strängen zugeordnet sind, in einem ersten Befehlspuffer gespeichert werden sollen und zweite Befehle, die einem zweiten Grafikstrang in der zweiten Teilmenge von Strängen zugeordnet sind, in einem zweiten Befehlspuffer gespeichert werden sollen.
    7. Verfahren nach Anspruch 6, das ferner Folgendes umfasst: Planen des ersten Grafikstrangs auf dem lokalen Grafikprozessor durch Übertragen der ersten Befehle in eine erste Befehlswarteschlange des lokalen Grafikprozessors, wobei der lokale Grafikprozessor die ersten Befehle aus der ersten Befehlswarteschlange verarbeiten soll.
    8. Verfahren nach Anspruch 7, das ferner Folgendes umfasst: Planen des zweiten Grafikstrangs in der virtualisierten Repräsentation des zweiten lokalen Grafikprozessors durch Übertragen der zweiten Befehle in eine zweite Befehlswarteschlange, wobei die cloudbasierten Grafikausführungsbetriebsmittel die zweiten Befehle aus der zweiten Befehlswarteschlange verarbeiten sollen.
    9. Verfahren nach Anspruch 1 oder 8, wobei jeder Strang der mehreren Stränge ein Arbeitselement innerhalb einer Grafikarbeitsgruppe umfasst.
    10. Maschinenlesbares Medium, auf dem Programmcode gespeichert ist, der, wenn er von einer Maschine ausgeführt wird, die Maschine dazu veranlasst, die folgenden Operationen auszuführen: Ausführen einer Anwendung mit mehreren Strängen; Identifizieren einer ersten Teilmenge der Stränge zur Ausführung auf einem lokalen Grafikprozessor und einer zweiten Teilmenge der Stränge zur Ausführung auf einer virtualisierten Repräsentation eines lokalen Prozessors; Planen der ersten Teilmenge von Strängen auf dem lokalen Grafikprozessor; Planen der zweiten Teilmenge der Stränge durch Übertragen der Stränge oder einer Repräsentation davon an cloudbasierte Verarbeitungsbetriebsmittel, die der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind; und Kombinieren der ersten Ergebnisse des Ausführens der ersten Teilmenge von Strängen auf dem lokalen Grafikprozessor mit den zweiten Ergebnissen des Ausführens der zweiten Teilmenge von Strängen auf den cloudbasierten Verarbeitungsbetriebsmitteln, um einen Bildframe zu rendern.
    11. Maschinenlesbares Medium nach Anspruch 10, das ferner Programmcode enthält, um die Maschine dazu zu veranlassen, die folgenden Operationen auszuführen: Auswerten der mehreren Stränge, um die erste und zweite Teilmenge von Strängen zu identifizieren.
    12. Maschinenlesbares Medium nach Anspruch 11, wobei das Auswerten der mehreren Stränge ferner ein Auswerten von Ausführungsanforderungen, die den mehreren Strängen zugeordnet sind, im Hinblick auf Metriken, die der Ausführung auf der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind, umfasst.
    13. Maschinenlesbares Medium nach Anspruch 12, wobei die Ausführungsanforderungen Latenz- und/oder Bandbreitenschwellen umfassen und wobei die Metriken Latenz- und/oder Bandbreitenstatistiken umfassen, die der Ausführung auf der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind.
    14. Maschinenlesbares Medium nach Anspruch 10 oder 13, das ferner Programmcode enthält, um die Maschine dazu zu veranlassen, die folgenden Operationen auszuführen: Installieren und/oder Aufzählen des lokalen Grafikprozessors und der virtualisierten Repräsentation des lokalen Prozessors.
    15. Maschinenlesbares Medium nach Anspruch 10 oder 14, wobei erste Befehle, die einem ersten Grafikstrang in der ersten Teilmenge von Strängen zugeordnet sind, in einem ersten Befehlspuffer gespeichert werden sollen und zweite Befehle, die einem zweiten Grafikstrang in der zweiten Teilmenge von Strängen zugeordnet sind, in einem zweiten Befehlspuffer gespeichert werden sollen.
    16. Maschinenlesbares Medium nach Anspruch 15, das ferner Programmcode enthält, um die Maschine dazu zu veranlassen, die folgenden Operationen auszuführen: Planen des ersten Grafikstrangs auf dem lokalen Grafikprozessor durch Übertragen der ersten Befehle in eine erste Befehlswarteschlange des lokalen Grafikprozessors, wobei der lokale Grafikprozessor die ersten Befehle aus der ersten Befehlswarteschlange verarbeiten soll.
    17. Maschinenlesbares Medium nach Anspruch 16, das ferner Programmcode enthält, um die Maschine dazu zu veranlassen, die folgenden Operationen auszuführen: Planen des zweiten Grafikstrangs auf der virtualisierten Repräsentation des zweiten lokalen Grafikprozessors durch Übertragen der zweiten Befehle in eine zweite Befehlswarteschlange, wobei die cloudbasierten Grafikausführungsbetriebsmittel die zweiten Befehle aus der zweiten Befehlswarteschlange verarbeiten sollen.
    18. Maschinenlesbares Medium nach Anspruch 10 oder 17, wobei jeder Strang der mehreren Stränge ein Arbeitselement innerhalb einer Grafikarbeitsgruppe umfasst.
    19. Vorrichtung, die Folgendes umfasst: einen lokalen Grafikprozessor zum Ausführen von Strängen einer Anwendung; eine Grafikprozessorvirtualisierungs-Schaltungsanordnung und/oder -Logik zum Erzeugen einer virtualisierten Repräsentation eines lokalen Prozessors; einen Planer zum Identifizieren einer ersten Teilmenge der Stränge zur Ausführung auf einem lokalen Grafikprozessor und einer zweiten Teilmenge der Stränge zur Ausführung auf einer virtualisierten Repräsentation eines lokalen Prozessors; wobei der Planer die erste Teilmenge von Strängen auf dem lokalen Grafikprozessor und die zweite Teilmenge der Stränge durch Übertragen der Stränge oder einer Repräsentation davon an cloudbasierte Verarbeitungsbetriebsmittel, die der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind, planen soll; und wobei der lokale Grafikprozessor die ersten Ergebnisse des Ausführens der ersten Teilmenge von Strängen auf dem lokalen Grafikprozessor mit den zweiten Ergebnissen des Ausführens der zweiten Teilmenge von Strängen auf den cloudbasierten Verarbeitungsbetriebsmitteln kombinieren soll, um einen Bildframe zu rendern.
    20. Vorrichtung nach Anspruch 19, wobei der Planer eine Auswertungsschaltungsanordnung/-logik zum Auswerten der mehreren Stränge umfasst, um die erste und zweite Teilmenge von Strängen zu identifizieren.
    21. Vorrichtung nach Anspruch 20, wobei das Auswerten der mehreren Stränge ferner ein Auswerten von Ausführungsanforderungen, die den mehreren Strängen zugeordnet sind, im Hinblick auf Metriken, die der Ausführung auf der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind, umfasst.
    22. Vorrichtung nach Anspruch 21, wobei die Ausführungsanforderungen Latenz- und/oder Bandbreitenschwellen umfassen und wobei die Metriken Latenz- und/oder Bandbreitenstatistiken umfassen, die der Ausführung auf der virtualisierten Repräsentation des lokalen Prozessors zugeordnet sind.
    23. Vorrichtung nach Anspruch 19 oder 22, die ferner eine Schaltungsanordnung und/oder Logik zum Installieren und/oder Aufzählen des lokalen Grafikprozessors und der virtualisierten Repräsentation des lokalen Prozessors umfasst.
    24. Vorrichtung nach Anspruch 19 oder 23, wobei erste Befehle, die einem ersten Grafikstrang in der ersten Teilmenge von Strängen zugeordnet sind, in einem ersten Befehlspuffer gespeichert werden sollen und zweite Befehle, die einem zweiten Grafikstrang in der zweiten Teilmenge von Strängen zugeordnet sind, in einem zweiten Befehlspuffer gespeichert werden sollen.
    25. Vorrichtung nach Anspruch 24, wobei der Planer den ersten Grafikstrang auf dem lokalen Grafikprozessor planen soll, indem er die ersten Befehle in eine erste Befehlswarteschlange des lokalen Grafikprozessors überträgt, wobei der lokale Grafikprozessor die ersten Befehle aus der ersten Befehlswarteschlange verarbeiten soll.
    DE102020124932.2A 2019-09-30 2020-09-24 Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel Pending DE102020124932A1 (de)

    Applications Claiming Priority (2)

    Application Number Priority Date Filing Date Title
    US16/588,855 2019-09-30
    US16/588,855 US11127107B2 (en) 2019-09-30 2019-09-30 Apparatus and method for real time graphics processing using local and cloud-based graphics processing resources

    Publications (1)

    Publication Number Publication Date
    DE102020124932A1 true DE102020124932A1 (de) 2021-04-01

    Family

    ID=74872779

    Family Applications (1)

    Application Number Title Priority Date Filing Date
    DE102020124932.2A Pending DE102020124932A1 (de) 2019-09-30 2020-09-24 Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel

    Country Status (5)

    Country Link
    US (2) US11127107B2 (de)
    JP (1) JP2021057011A (de)
    KR (1) KR20210038294A (de)
    CN (1) CN112669193A (de)
    DE (1) DE102020124932A1 (de)

    Families Citing this family (16)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    CN113853796A (zh) * 2019-05-22 2021-12-28 诺基亚技术有限公司 用于体积视频编码和解码的方法、装置和计算机程序产品
    US11579929B2 (en) * 2020-01-31 2023-02-14 Salesforce. Inc. Cross platform application flow orchestration by transmitting the application flow including a transition rule to a plurality of computation layers
    CN114787775A (zh) * 2020-02-03 2022-07-22 索尼互动娱乐股份有限公司 数据处理系统、数据转发装置以及上下文切换方法
    US11568021B2 (en) 2020-02-21 2023-01-31 Alibaba Group Holding Limited Vector-vector multiplication techniques for processing systems
    US11252226B2 (en) * 2020-03-05 2022-02-15 Qualcomm Incorporated Methods and apparatus for distribution of application computations
    US11500680B2 (en) * 2020-04-24 2022-11-15 Alibaba Group Holding Limited Systolic array-friendly data placement and control based on masked write
    CN111709870B (zh) * 2020-05-28 2023-10-03 钟杰东 一种zjd应用处理器架构
    US11409839B2 (en) * 2020-08-21 2022-08-09 Alibaba Group Holding Limited Programmable and hierarchical control of execution of GEMM operation on accelerator
    CN113343813B (zh) * 2021-05-31 2022-05-10 太原理工大学 一种基于单节点光子储备池计算的动作视频识别方法
    CN113343814B (zh) * 2021-05-31 2022-06-14 太原理工大学 一种基于单节点光子储备池计算的手写数字图像识别方法
    CN113918249B (zh) * 2021-09-14 2023-11-21 北京房江湖科技有限公司 一种背景模糊控件的实现方法及装置
    US11663759B1 (en) 2022-04-04 2023-05-30 Cloudstream Medical Imaging, Inc. System and method for processing multi-dimensional and time-overlapping imaging data in real time with cloud computing
    US11690601B1 (en) 2022-04-04 2023-07-04 Cloudstream Medical Imaging, Inc. System and method for processing multi-dimensional ultrasound imaging data on real-time cloud computers
    CN114723601B (zh) * 2022-04-08 2023-05-09 山东翰林科技有限公司 一种虚拟场景下的模型结构化建模及快速渲染方法
    US20230394739A1 (en) * 2022-06-06 2023-12-07 William USHER Apparatus and Method for Approximate Puzzlepiece Compositing
    WO2024010125A1 (ko) * 2022-07-08 2024-01-11 엘지전자 주식회사 사이니지 제공을 위한 에지 및 클라우드 간 협업 플랫폼

    Family Cites Families (2)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    US9280375B1 (en) * 2014-04-30 2016-03-08 Google Inc. Dynamically adjustable virtual machine
    EP3180691A1 (de) * 2014-08-15 2017-06-21 Intel Corporation Ermöglichung von dynamischen thread-sicheren operationen für transaktionen mit variabler bitlänge auf rechnervorrichtungen

    Also Published As

    Publication number Publication date
    US20220148123A1 (en) 2022-05-12
    US11127107B2 (en) 2021-09-21
    US20210097641A1 (en) 2021-04-01
    KR20210038294A (ko) 2021-04-07
    CN112669193A (zh) 2021-04-16
    US11593909B2 (en) 2023-02-28
    JP2021057011A (ja) 2021-04-08

    Similar Documents

    Publication Publication Date Title
    DE102020124932A1 (de) Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel
    DE102020108218A1 (de) Vorrichtung und Verfahren zur Konstruktion von Begrenzungsvolumenhierarchien mit reduzierter Genauigkeit
    DE102021118444A1 (de) Einrichtung und Verfahren zum Komprimieren von Strahlverfolgungsbeschleunigungsstrukturaufbaudaten
    DE112020000874T5 (de) Systeme und Methoden zum Aktualisieren von speicherseitigen Caches in einer Multi-GPU-Konfiguration
    DE102020130078A1 (de) Systolische arithmetik an spärlichen daten
    DE102021121187A1 (de) EINRICHTUNG UND VERFAHREN ZUR EFFIZIENTEN GRAFIKVERARBEITUNG EINSCHLIEßLICH STRAHLVERFOLGUNG
    DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
    DE102019102279A1 (de) Erzeugung von synthetischen Bildern zum Trainieren eines Neuronal-Netzwerkmodells
    DE102020120372A1 (de) Programmierbare wandlungshardware
    DE102018110380A1 (de) Tool zum Ermöglichen der Effizienz beim Maschinenlernen
    DE102019135639A1 (de) Auf Echtzeit-Strahlverfolgung (RTRT) basierende adaptive Mehrfrequenzschattierung (AMFS)
    DE102020129251A1 (de) Adaptives verformbares kernvorhersagenetzwerk zum bildentrauschen
    DE102020129970A1 (de) Systeme und verfahren zur fehlererkennung und steuerung für eingebettete arbeitsspeicher- und rechenelemente
    DE102020132557A1 (de) Vorrichtung und verfahren für asynchrones raytracing
    DE102020130073A1 (de) Verbesserung der datenlokalität für grafikprozessoreinheiten
    DE112020000464T5 (de) Mehrfachkachel-grafikprozessor-rendering
    DE102020131896A1 (de) Deep learning-basierte auswahl von abtastwerten für adaptives supersampling
    DE102020129003A1 (de) Vorrichtung und verfahren zum verwenden von alpha-werten zum verbessern einer strahlverfolgungseffizienz
    DE102019103310A1 (de) Schätzer for einen optimalen betriebspunkt für hardware, die unter einer beschränkung der gemeinsam genutzten leistung/wärme arbeitet
    DE102020131901A1 (de) Vorrichtung und verfahren zum durchführen nicht lokaler mittelwertfilterung unter verwendung eines bewegungsschätzschaltkreises eines grafikprozessors
    DE102020132544A1 (de) Vorrichtung und verfahren für doppelpräzisionsstrahlquerung in einer raytracing-pipeline
    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