DE102022130862A1 - Niederleistungs-inferenz-engine-pipeline in einer grafikverarbeitungseinheit - Google Patents

Niederleistungs-inferenz-engine-pipeline in einer grafikverarbeitungseinheit Download PDF

Info

Publication number
DE102022130862A1
DE102022130862A1 DE102022130862.6A DE102022130862A DE102022130862A1 DE 102022130862 A1 DE102022130862 A1 DE 102022130862A1 DE 102022130862 A DE102022130862 A DE 102022130862A DE 102022130862 A1 DE102022130862 A1 DE 102022130862A1
Authority
DE
Germany
Prior art keywords
engine
graphics
memory
compute
processor
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
DE102022130862.6A
Other languages
English (en)
Inventor
Vidhya Krishnan
Chien-Wei Li
Ben J. Ashbaugh
Durgaprasad Bilagi
Pattabhiraman K
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 DE102022130862A1 publication Critical patent/DE102022130862A1/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/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
    • G06F9/4893Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues taking into account power or heat criteria
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/04Inference or reasoning models
    • G06N5/041Abduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3206Monitoring of events, devices or parameters that trigger a change in power modality
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/324Power saving characterised by the action undertaken by lowering clock frequency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3243Power saving in microcontroller unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/329Power saving characterised by the action undertaken by task scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3293Power saving characterised by the action undertaken by switching to a less power-consuming processor, e.g. sub-CPU
    • 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
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • 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
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/098Distributed learning, e.g. federated 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

Eine Ausführungsform stellt eine Einrichtung bereit, die eine Grafikprozessorvorrichtung umfasst, die eine erste Rechen-Engine und eine zweite Rechen-Engine beinhaltet, wobei die zweite Rechen-Engine eine Teilmenge der Funktionalität, die von der ersten Rechen-Engine bereitgestellt wird, und einen niedrigeren Leistungsverbrauch relativ zu der ersten Rechen-Engine beinhaltet.

Description

  • GEBIET
  • Hierin beschriebene Ausführungsformen beziehen sich im Allgemeinen auf Computer. Insbesondere sind Ausführungsformen beschrieben, um eine Niederleistungs-Inferencing über eine Grafikprozessorvorrichtung zu ermöglichen.
  • HINTERGRUND DER OFFENBARUNG
  • Die zunehmend weit verbreitete Verwendung von künstlicher Intelligenz (KI) in elektronischen Anwendungen führt zu neuen Arten von Leistungsherausforderungen. Zusätzlich gibt es ein zunehmendes Interesse am Migrieren von Maschinenlern-Inferenzanwendungen von cloudbasierter Berechnung zu edgebasierter Berechnung. Das Durchführen von Rechenoperationen für die KI-Inferenz auf Grafikverarbeitungsvorrichtungen kann jedoch einen größeren Leistungsgrad verbrauchen, als unter bestimmten Umständen akzeptabel sein kann. Eine dedizierte Inferenzvorrichtung kann als eine unabhängige E/A-Vorrichtung instanziiert werden, die von den GPU-Engines entkoppelt ist, die den Grafik-, Rechen- und Medien-Pipelines zugeordnet sind. Diese unabhängige E/A-Vorrichtung kann separaten Speicher und/oder einen separaten Adressraum aufweisen. Diese Konfiguration führt zu mehreren Systemarchitekturineffizienzen, einschließlich Leistung, Leistungsfähigkeit und Sicherheit. Da KI-Inferenz auf PC häufig ein integraler Bestandteil von Medien oder 3D Anwendungen ist, erfordert dies einen Datenfluss und eine Synchronisation zwischen KI-Inferenz und anderen Medien oder 3D-Verarbeitungsaufgaben.
  • Figurenliste
  • Die vorliegenden Erfindung wird beispielhaft und nicht einschränkend in den Figuren der beigefügten Zeichnungen veranschaulicht, in denen gleiche Bezugszeichen gleiche Elemente bezeichnen und in denen:
    • 1 ein Blockdiagramm eines Verarbeitungssystems gemäß einer Ausführungsform ist;
    • 2A-2D veranschaulichen Rechensysteme und Grafikprozessoren, die durch hierin beschriebene Ausführungsformen bereitgestellt werden;
    • 3A-3C veranschaulichen Blockdiagramme zusätzlicher Grafikprozessor- und Rechenbeschleunigerarchitekturen, die durch Ausführungsformen bereitgestellt werden;
    • 4 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine eines Grafikprozessors gemäß einigen Ausführungsformen;
    • 5A-5B veranschaulichen eine Thread-Ausführungslogik mit einem Array von Verarbeitungselementen, die in einem Grafikprozessorkern eingesetzt werden, gemäß Ausführungsformen;
    • 6 veranschaulicht eine zusätzliche Ausführungseinheit, gemäß einer Ausführungsform;
    • 7 ist ein Blockdiagramm, das ein Grafikprozessoranweisungsformat gemäß einigen Ausführungsformen veranschaulicht;
    • 8 ist ein Blockdiagramm eines Grafikprozessors gemäß einer anderen Ausführungsform;
    • 9A-9B veranschaulichen ein Grafikprozessorbefehlsformat und eine Befehlssequenz gemäß einigen Ausführungsformen;
    • 10 veranschaulicht eine beispielhafte Grafik-Software-Architektur für ein Datenverarbeitungssystem gemäß einigen Ausführungsformen;
    • 11A-11D veranschaulichen eine Package-Baugruppe einer integrierten Schaltung gemäß einer Ausführungsform;
    • 12 ist ein Blockdiagramm, das eine beispielhafte integrierte System-on-Chip-Schaltung gemäß einer Ausführungsform veranschaulicht;
    • 13A-13B sind ein Blockdiagramm, das einen zusätzlichen beispielhaften Grafikprozessor veranschaulicht;
    • 14 veranschaulicht einen Maschinenlern-Softwarestapel gemäß einer Ausführungsform;
    • 15A-15B veranschaulichen Schichten beispielhafter tiefer neuronaler Netzwerke;
    • 16 veranschaulicht ein beispielhaftes rekurrentes neuronales Netzwerk;
    • 17 veranschaulicht Training und Einsatz eines tiefen neuronalen Netzwerks;
    • 18 ist ein Blockdiagramm, das verteiltes Lernen veranschaulicht;
    • 19 veranschaulicht ein Datenverarbeitungssystem, gemäß einer Ausführungsform;
    • 20A-20B veranschaulichen Architekturen zum Beschleunigen von Matrixoperationen, die durch eine Anweisung-Pipeline durchgeführt werden, gemäß Ausführungsformen;
    • 21 veranschaulicht ein Grafikprozessor-Subsystem, das eine Niederleistungs-Rechen-Engine beinhaltet, gemäß einer Ausführungsform;
    • 22A-22B veranschaulicht Architekturen, um der Niederleistungs-Rechen-Engine Software offenzulegen, gemäß Ausführungsformen;
    • 23A-23B veranschaulichen Verfahren zum Übermitteln von Rechenarbeitslasten auf einem Grafikprozessor mit einer Niederleistungs-Rechen-Engine, gemäß Ausführungsformen;
    • 24A-24C veranschaulichen eine disaggregierte 3D-strukturierte SoC-Architektur eines Grafikprozessor-SoC, gemäß verschiedenen Ausführungsformen; und
    • 25 ist ein Blockdiagramm einer Rechenvorrichtung einschließlich eines Grafikprozessors, gemäß einer Ausführungsform.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Eine Grafikverarbeitungseinheit (GPU) ist kommunikativ mit Host-/Prozessorkernen gekoppelt, um zum Beispiel Grafikoperationen, Maschinenlernoperationen, Musteranalyseoperationen und/oder verschiedene Universal-GPU (GPGPU)-Funktionen zu beschleunigen. Die GPU kann über einen Bus oder ein anderes Interconnect (z. B. ein Hochgeschwindigkeits-Interconnect wie Peripheral Component Interconnect Express (PCIe) oder NVLink) kommunikativ mit dem Hostprozessor/-kernen verbunden sein. Alternativ kann die GPU auf demselben Package oder Chip wie die Kerne integriert sein und über einen internen Prozessorbus/Interconnect (d. h. innerhalb des Package oder Chips) kommunikativ mit den Kernen gekoppelt sein. Unabhängig von der Art und Weise, auf welche die GPU verbunden ist, können die Prozessorkerne der GPU Arbeit in Form von in einem Arbeitsdeskriptor enthaltenen Sequenzen von Befehlen/Anweisungen zuweisen. Die GPU verwendet dann eine dedizierte Schaltungsanordnung/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
  • Die aktuelle parallele Grafikdatenverarbeitung beinhaltet Systeme und Verfahren, die entwickelt wurden, um spezifische Operationen auf Grafikdaten durchzuführen, wie zum Beispiel lineare Interpolation, Tessellation, Rasterisierung, Texturkartierung, Tiefenprüfung usw. Herkömmlicherweise haben Grafikprozessoren Festfunktions-Berechnungseinheiten zum Verarbeiten von Grafikdaten verwendet. In jüngster Zeit wurden Teile von Grafikprozessoren jedoch programmierbar gemacht, wodurch ermöglicht wurde, dass solche Prozessoren eine größere Vielfalt an Operationen zur Verarbeitung von Vertex- und Fragmentdaten unterstützen.
  • Die Verwendung einer dedizierten Inferenzvorrichtung, die von den 3D- und Medien-Pipelines entkoppelt ist, führt zu ungewollten zusätzlichen Speicherkopien und langem Synchronisationsaufwand, der die Host-Software involvieren würde. Um dieses Problem anzugehen, wird eine GPU-integrierte Niederleistungs-Rechen (LPC) -Pipeline durch hierin beschriebene Ausführungsformen bereitgestellt. Die LPC-Pipeline kann als ein Basisbaublock verwendet werden, um eine Grafik-Niederleistungs-KI-Engine für Client-PC-Plattformen bereitzustellen. Die Grafik-Niederleistungs-KI-Engine ist eine programmierbare Rechen-Engine, die sich auf Niederleistungs-KI-Inferenznutzungen konzentriert.
  • In der folgenden Beschreibung werden zahlreiche spezifische Details dargelegt. Allerdings können Ausführungsformen wie hierin beschrieben ohne diese spezifischen Details umgesetzt werden. In anderen Fällen wurden hinlänglich bekannte Schaltungen, Strukturen und Techniken nicht im Detail gezeigt, um das Verständnis dieser Beschreibung nicht zu verschleiern.
  • Es wird in Betracht gezogen, dass Begriffe wie „Anfrage“, „Abfrage“, „Job“, „Arbeit“, „Arbeitselement“ und „Arbeitslast“ in diesem Dokument austauschbar verwendet sein können. Gleichermaßen kann sich eine „Anwendung“ oder ein „Agent“ auf ein Computerprogramm, eine Softwareanwendung, ein Spiel, eine Arbeitsstationsanwendung usw. beziehen oder dieses beinhalten, die durch eine Anwendungsprogrammierschnittstelle (API), wie eine freie Rendering-API, wie Open Graphics Library (OpenGL®), Open Computing Language (OpenCL®), CUDA®, DirectX® 11, DirectX® 12 usw. angeboten werden, wobei „Dispatch“ austauschbar als „Arbeitseinheit“ oder „Draw“ bezeichnet werden kann, und gleichermaßen kann „Anwendung“ austauschbar als „Workflow“ oder einfach „Agent“ bezeichnet werden. Zum Beispiel kann eine Arbeitslast, wie die eines dreidimensionalen (3D) Spiels, eine beliebige Anzahl und Art von „Frames“ beinhalten und ausgeben, wobei jedes Frame ein Bild (z. B. Segelboot, menschliches Gesicht) repräsentieren kann. Ferner kann jeder Frame eine beliebige Anzahl und Typ von Arbeitseinheiten beinhalten und anbieten, wobei jede Arbeitseinheit einen Teil (z. B. Mast des Segelbootes, Stirn des menschlichen Gesichts) des Bildes (z. B. Segelboot, menschliches Gesicht) darstellen kann, das durch seinen entsprechenden Frame dargestellt wird. Allerdings kann der Konsistenz halber in diesem Dokument durchweg auf jeden Gegenstand durch einen einzigen Begriff (z. B. „Dispatch“, „Agent“ usw.) Bezug genommen werden.
  • In einigen Ausführungsformen können Begriffe wie „Anzeigebildschirm“ und „Anzeigeoberfläche“ austauschbar unter Bezugnahme auf den sichtbaren Teil einer Anzeigevorrichtung verwendet werden, während der Rest der Anzeigevorrichtung in eine Rechenvorrichtung, wie ein Smartphone, eine tragbare Vorrichtung usw., eingebettet sein kann. Es wird in Erwägung gezogen und angemerkt, dass Ausführungsformen nicht auf irgendeine spezifische Rechenvorrichtung, Softwareanwendung, Hardwarekomponente, Anzeigevorrichtung, Anzeigebildschirm oder Oberfläche, Protokoll, Standard usw. eingeschränkt sind. Ausführungsformen können zum Beispiel auf eine beliebige Anzahl und Art von Echtzeitanwendungen auf einer beliebigen Anzahl und Art von Computern, wie etwa Desktops, Laptops, Tablet-Computern, Smartphones, Head-Mounted Displays und anderen tragbaren Vorrichtungen und/oder dergleichen, angewendet und mit diesen verwendet werden. Ferner können zum Beispiel Rendering-Szenarien für eine effiziente Leistungsfähigkeit unter Verwendung dieser neuartigen Technik von einfachen Szenarien, wie Desktop-Gestaltung, bis hin zu komplexen Szenarien, wie 3D-Spielen, Augmented Reality-Anwendungen usw., reichen.
  • Systemüberblick
  • 1 ist ein Blockdiagramm eines Verarbeitungssystems 100 gemäß einer Ausführungsform. Das Verarbeitungssystem 100 kann in einem Einzelprozessor-Desktopsystem, einem Mehrprozessor-Arbeitsplatzsystem oder einem Serversystem mit einer großen Anzahl von Prozessoren 102 oder Prozessorkernen 107 verwendet werden. In einer Ausführungsform ist das Verarbeitungssystem 100 eine Verarbeitungsplattform, die innerhalb einer integrierten System-on-Chip- bzw. SoC-Schaltung zur Verwendung in mobilen, handgeführten oder eingebetteten Vorrichtungen integriert ist, wie etwa innerhalb von Internet-der-Dinge- bzw. IoT-Vorrichtungen mit drahtgebundener oder drahtloser Konnektivität zu einem lokalen oder Weitbereichsnetzwerk.
  • In einer Ausführungsform kann das System 100 eine serverbasierte Spielplattform; eine Spielkonsole, einschließlich einer Spiel- und Medienkonsole; eine mobile Spielkonsole, eine handgehaltene Spielkonsole oder eine Online-Spielkonsole beinhalten, mit dieser gekoppelt oder darin integriert sein. In einigen Ausführungsformen ist das Verarbeitungssystem 100 ein Teil eines Mobiltelefons, Smartphones, einer Tablet-Rechenvorrichtung oder mobilen, mit dem Internet verbundenen Vorrichtung, wie eines Laptops mit geringer interner Speicherkapazität. Das Verarbeitungssystem 100 kann außerdem einschließen, gekoppelt sein mit oder integriert sein in: eine(r) am Körper tragbare(n) Vorrichtung, wie eine(r) am Körper tragbare(n) Smartwatch-Vorrichtung; eine(r) intelligente(n) Brille oder Kleidung, die mit Augmented Reality- oder Virtual Reality-Merkmalen (AR- oder VR-Merkmalen) verbessert ist, um visuelle, Audio- oder taktile Ausgaben bereitzustellen, um reale visuelle, Audio- oder taktile Erfahrungen zu ergänzen oder anderweitig Text, Audio, Grafiken, Video, holografische Bilder oder Video oder taktiles Feedback bereitzustellen; eine(r) andere(n) Augmented Reality-Vorrichtung (AR-Vorrichtung) oder eine(r) andere(n) Virtual Reality-Vorrichtung (VR-Vorrichtung). In einigen Ausführungsformen beinhaltet das Verarbeitungssystem 100 einen Fernseher oder eine Set-Top-Box-Vorrichtung oder ist Teil davon. In einer Ausführungsform kann das System 100 ein selbstfahrendes Fahrzeug, wie einen Bus, einen Zugmaschinenanhänger, ein Auto, ein Motorrad oder ein E-Bike, ein Flugzeug oder Segelflugzeug (oder eine beliebige Kombination davon), beinhalten, damit gekoppelt oder darin integriert sein. Das selbstfahrende Fahrzeug kann das Verarbeitungssystem 100 verwenden, um die um das Fahrzeug herum erfasste Umgebung zu verarbeiten.
  • In einigen Ausführungsformen beinhalten der eine oder die mehreren Prozessoren 102 jeweils einen oder mehrere Prozessorkerne 107 zum Verarbeiten von Anweisungen, die, wenn sie ausgeführt werden, Operationen für System- oder Benutzersoftware durchführen. In einigen Ausführungsformen ist mindestens einer des einen oder der mehreren Prozessorkerne 107 konfiguriert, um einen bestimmten Befehlssatz 109 zu verarbeiten. In einigen Ausführungsformen kann der Anweisungssatz 109 Berechnungen mit komplexem Anweisungssatz (CISC), Berechnung mit reduziertem Anweisungssatz (RISC) oder Berechnungen über ein sehr langes Befehlswort (VLIW) unterstützen. Ein oder mehrere Prozessorkerne 107 können einen anderen Anweisungssatz 109 verarbeiten, der Befehle zum Erleichtern der Emulation anderer Anweisungssätze beinhalten kann. Der Prozessorkern 107 kann auch andere Verarbeitungsvorrichtungen beinhalten, wie einen digitalen Signalprozessor (DSP).
  • In einigen Ausführungsformen beinhaltet der Prozessor 102 Cache-Speicher 104. Abhängig von der Architektur kann der Prozessor 102 einen einzelnen internen Cache oder mehrere Ebenen von internen Caches aufweisen. In einigen Ausführungsformen wird der Cache-Speicher von verschiedenen Komponenten des Prozessors 102 gemeinsam genutzt. In einigen Ausführungsformen verwendet der Prozessor 102 auch einen externen Cache (z. B. einen Level-3 (L3)-Cache oder Last Level-Cache (LLC)) (nicht gezeigt), der unter Verwendung bekannter Cache-Kohärenztechniken von Prozessorkernen 107 gemeinsam genutzt werden kann. Eine Registerdatei 106 kann zusätzlich in dem Prozessor 102 enthalten sein und kann unterschiedliche Arten von Registern zum Speichern unterschiedlicher Arten von Daten (z. B. Ganzzahlregister, Gleitkommaregister, Statusregister und ein Befehlszeigerregister) beinhalten. Einige Register können Universal-Register sein, während andere Register spezifisch für die Konstruktion des Prozessors 102 sein können.
  • In einigen Ausführungsformen sind einer oder mehrere Prozessoren 102 mit einem oder mehreren Schnittstellenbussen 110 gekoppelt sein, um Kommunikationssignale wie Adress-, Daten- oder Steuersignale zwischen dem Prozessor 102 und anderen Komponenten in dem Verarbeitungssystem 100 zu übertragen. Der Schnittstellenbus 110 kann bei einer Ausführungsform ein Prozessorbus sein, wie eine Version des DMI-Busses (DMI: Direct Media Interface). Prozessorbusse sind jedoch nicht auf den DMI-Bus beschränkt und können einen oder mehrere Peripheral Component Interconnect-Busse (z. B. PCI, PCI-Express), Speicherbusse oder andere Arten von Schnittstellenbussen beinhalten. In einer Ausführungsform beinhalten der eine oder die mehreren Prozessoren 102 eine integrierte Speichersteuerung 116 und einen Plattform-Steuerungshub 130. Die Speichersteuerung 116 eleichtert eine Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Verarbeitungssystems 100, während der Plattform-Steuerungshub (PCH) 130 Verbindungen zu E/A-Vorrichtungen über einen lokalen E/A-Bus bereitstellt.
  • Die Speichervorrichtung 120 kann eine dynamische Speichervorrichtung mit wahlfreiem Zugriff (DRAM-Vorrichtung), eine statische Speichervorrichtung mit wahlfreiem Zugriff (SRAM-Vorrichtung), eine Flash-Speichervorrichtung, eine Phasenwechselspeichervorrichtung oder eine andere Speichervorrichtung mit geeigneter Leistung sein, um als Prozessspeicher zu dienen. In einer Ausführungsform kann die Speichervorrichtung 120 als Systemspeicher für das Verarbeitungssystem 100 arbeiten, um Daten 122 und Anweisungen 121 zur Verwendung zu speichern, wenn der eine oder die mehreren Prozessoren 102 eine Anwendung oder einen Prozess ausführen. Die Speichersteuerung 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 Coprozessor ist, der konfiguriert sein kann, um einen spezialisierten Satz von Grafik-, Medien- oder Rechenoperationen durchzuführen. Zum Beispiel ist in einer Ausführungsform der Beschleuniger 112 ein Matrix-Multiplikationsbeschleuniger, der verwendet wird, um Operationen für maschinelles Lernen oder Rechenoperationen zu optimieren. In einer Ausführungsform ist der Beschleuniger 112 ein Strahlverfolgungsbeschleuniger, der verwendet werden kann, um Strahlverfolgungsoperationen gemeinsam mit dem Grafikprozessor 108 durchzuführen. In einer Ausführungsform kann ein externer Beschleuniger 119 anstelle des Beschleunigers 112 oder gemeinsam mit diesem verwendet werden.
  • In einigen Ausführungsformen kann eine Anzeigevorrichtung 111 mit dem bzw. den Prozessor(en) 102 verbunden sein. Die Anzeigevorrichtung 111 kann eines oder mehrere von einer internen Anzeigevorrichtung, wie in einer mobilen elektronischen Vorrichtung und/oder einer Laptopvorrichtung, 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 montierte Anzeige (HMD: Head Mounted Device) sein, wie eine stereoskopische Anzeigevorrichtung zur Verwendung in Virtual-Reality (VR)-Anwendungen oder Augmented Reality (AR)-Anwendungen.
  • In einigen Ausführungsformen ermöglicht der Plattform-Steuerungshub 130 es Peripheriegeräten, sich über einen Hochgeschwindigkeits-E/A-Bus mit der Speichervorrichtung 120 und dem Prozessor 102 zu verbinden. Die E/A-Peripheriegeräte schließen eine Audiosteuerung 146, eine Netzwerksteuerung 134, eine Firmware-Schnittstelle 128, einen drahtlosen Sendeempfänger 126, Berührungssensoren 125, eine Datenspeicherungsvorrichtung 124 (z. B. nichtflüchtigen Speicher, flüchtigen Speicher, Festplattenlaufwerk, Flash-Speicher, NAND, 3D-NAND, 3D-XPoint usw.) ein, sind aber nicht darauf beschränkt. Die Datenspeicherungsvorrichtung 124 kann über eine Speicherungsschnittstelle (z. B. SATA) oder über einen Peripheriebus, wie etwa einen Peripheral-Component-Interconnect-Bus (z. B. PCI, PCI express), verbunden sein. Die Berührungssensoren 125 können Touchscreen-Sensoren, Drucksensoren oder Fingerabdrucksensoren beinhalten. Der drahtlose Sendeempfänger 126 kann ein WiFi-Sendeempfänger, ein Bluetooth-Sendeempfänger oder ein Mobilnetz-Sendeempfänger, wie ein 3G-, 4G-, 5G-oder Long-Term Evolution (LTE)-Sendeempfänger, sein. Die Firmware-Schnittstelle 128 ermöglicht eine Kommunikation mit System-Firmware, und kann zum Beispiel eine vereinheitlichte erweiterbare Firmware-Schnittstelle (UEFI: Unified Extensible Firmware Interface) sein. Die Netzwerksteuerung 134 kann eine Netzwerkverbindung mit einem drahtgebundenen Netzwerk ermöglichen. In einigen Ausführungsformen koppelt eine Hochleistungsnetzwerksteuerung (nicht gezeigt) mit dem Schnittstellenbus 110. Die Audiosteuerung 146 ist in einer Ausführungsform eine Mehrkanal-High-Definition-Audiosteuerung. In einer Ausführungsform beinhaltet das Verarbeitungssystem 100 eine optionale Legacy-E/A-Steuerung 140 zum Koppeln von Legacy-Vorrichtungen (z. B. Personal System 2 (PS/2)) mit dem System. Der Plattform-Steuerungshub 130 kann auch an einer oder mehreren USB-Steuerungen 142 (USB: Universal Serial Bus) angeschlossen sein, die Eingabevorrichtungen, wie Kombinationen aus Tastatur und Maus 143, Kamera 144 oder andere USB-Eingabevorrichtungen, verbinden.
  • Es ist klar, dass das gezeigte Verarbeitungssystem 100 beispielhaft und nicht einschränkend ist, da andere Arten von Datenverarbeitungssystemen, die unterschiedlich konfiguriert sind, ebenfalls verwendet werden können. Zum Beispiel kann ein Fall der Speichersteuerung 116 und des Plattform-Steuerungshubs 130 in einen diskreten externen Grafikprozessor, wie den externen Grafikprozessor 118, integriert sein. In einer Ausführungsform können sich der Plattform-Steuerungshub 130 und/oder die Speichersteuerung 116 außerhalb des einen oder der mehreren Prozessor(en) 102 befinden. Das System 100 kann zum Beispiel eine externe Speichersteuerung 116 und einen Plattform-Steuerungshub 130 einschließen, die als ein Speicher-Steuerungshub und ein Peripherie-Steuerungshub innerhalb eines System-Chiplets konfiguriert sein können, das mit dem einen oder den mehreren Prozessor(en) 102 kommuniziert.
  • Zum Beispiel können Leiterplatten („Sleds“) verwendet werden, auf denen Komponenten, wie CPUs, Speicher und andere Komponenten, platziert sind, die für eine erhöhte thermische Leistungsfähigkeit konstruiert sind. In einigen Beispielen befinden sich Verarbeitungskomponenten, wie die Prozessoren, auf einer Oberseite einer Sled, während sich Nahspeicher wie DIMMs auf einer Unterseite der Sled befinden. Infolge des verbesserten Luftstroms, der durch diese Konstruktion bereitgestellt wird, können die Komponenten bei höheren Frequenzen und auf höheren Leistungsebenen als in typischen Systemen arbeiten, wodurch die Leistungsfähigkeit erhöht wird. Darüber hinaus sind die Sleds konfiguriert, um blind mit Energie- und Datenkommunikationskabeln in einem Rack zusammenzupassen, wodurch ihre Fähigkeit verbessert wird, schnell entfernt, aufgerüstet, neu installiert und/oder ausgetauscht zu werden. Gleichermaßen sind einzelne auf den Sleds befindliche Komponenten wie Prozessoren, Beschleuniger, Speicher und Datenspeicherungslaufwerke derart konfiguriert, dass sie sich dank ihrer größeren Beabstandung zueinander leicht aufrüsten lassen. In der veranschaulichenden Ausführungsform beinhalten die Komponenten zusätzlich Hardware-Attestierungsmerkmale, um ihre Authentizität nachzuweisen.
  • Ein Datenzentrum kann eine einzige Netzwerkarchitektur („Fabric“) nutzen, die mehrere andere Netzwerkarchitekturen, einschließlich Ethernet und Omni-Path, unterstützt. Die Sleds können über optische Fasern mit Schaltern gekoppelt sein, die eine höhere Bandbreite und eine niedrigere Latenz als eine typische Twisted-Pair-Verkabelung (z. B. Kategorie 5, Kategorie 5e, Kategorie 6 usw.) bereitstellen. Aufgrund der Zwischenverbindungen mit hoher Bandbreite und niedriger Latenz und der Netzwerkarchitektur kann das Datenzentrum im Gebrauch Ressourcen, wie Speicher, Beschleuniger (z. B. GPUs, Grafikbeschleuniger, FPGAs, ASICs, Neuronale-Netzwerk- und/oder Künstliche-Intelligenz-Beschleuniger usw.) und Datenspeicherungslaufwerke, die physisch getrennt sind, zusammenschließen und sie Rechenressourcen (z. B. Prozessoren) nach Bedarf bereitstellen, wodurch ermöglicht wird, dass die Rechenressourcen auf die zusammengeschlossenen Ressourcen zugreifen, als wären sie lokal.
  • Eine Energieversorgung oder -quelle kann das Verarbeitungssystem 100 oder eine beliebige Komponente oder ein beliebiges System, die bzw. das hierin beschrieben ist, mit Spannung und/oder Strom versorgen. In einem Beispiel beinhaltet die Leistungsversorgung einen AC/DC-(Wechselstrom zu Gleichstrom)-Adapter zum Einstecken in eine Wandsteckdose. Eine derartige Wechselstromversorgung kann eine Leistungsquelle erneuerbarer Energie (zum Beispiel Solarenergie) sein. In einem Beispiel beinhaltet die Stromquelle eine DC-Stromquelle, wie etwa einen externen AC-DC-Wandler. Bei einem Beispiel beinhaltet die Energiequelle bzw. die Energieversorgung drahtlose Ladehardware zum Laden über die Nähe zu einem Ladefeld. In einem Beispiel kann die Energiequelle eine interne Batterie, eine Wechselstromversorgung, eine bewegungsbasierte Energieversorgung, eine Solarenergieversorgung oder eine Brennstoffzellenquelle beinhalten.
  • 2A-2D veranschaulichen Rechensysteme und Grafikprozessoren, die durch hierin beschriebene Ausführungsformen bereitgestellt werden. Die Elemente von 2A-2D mit den gleichen Bezugsziffern (oder Namen) wie die Elemente einer beliebigen anderen Figur hierin können auf eine beliebige ähnliche Weise wie jene arbeiten oder funktionieren, die an anderer Stelle hier beschrieben ist, sind aber nicht darauf beschränkt.
  • 2A ist ein Blockdiagramm einer Ausführungsform eines Prozessors 200, der einen oder mehrere Prozessorkerne 202A-202N, eine integrierte Speichersteuerung 214 und einen integrierten Grafikprozessor 208 aufweist. Der Prozessor 200 kann zusätzliche Kerne bis zu und einschließlich des zusätzlichen Kerns 202N beinhalten, die durch die gestrichelten Kästen repräsentiert sind. Jeder der Prozessorkerne 202A-202N beinhaltet eine oder mehrere interne Cache-Einheiten 204A-204N. In einigen Ausführungsformen hat jeder Prozessorkern auch Zugriff auf eine oder mehrere gemeinsam genutzte Cache-Einheiten 206. Die internen Cache-Einheiten 204A-204N und die gemeinsam genutzten Cache-Einheiten 206 repräsentieren eine Cache-Speicherhierarchie innerhalb des Prozessors 200. Die Cache-Speicherhierarchie kann mindestens eine Ebene von Anweisungs- und Daten-Cache innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen von gemeinsam genutztem Mittelebenen-Cache, wie etwa eine Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4) oder andere Cache-Ebenen, beinhalten, wobei die höchste Cache-Ebene vor dem externen Speicher als der LLC klassifiziert wird. In einigen Ausführungsformen bewahrt eine Cache-Kohärenzlogik die Kohärenz zwischen den verschiedenen Cache-Einheiten 206 und 204A-204N.
  • In einigen Ausführungsformen kann der Prozessor 200 auch einen Satz von einer oder mehreren Bussteuerungseinheiten 216 und einen Systemagentenkern 210 beinhalten. Die eine oder die mehreren Bussteuerungseinheiten 216 verwalten einen Satz von Peripheriebussen, wie etwa einen oder mehrere PCI- oder PCI Express-Busse. Der Systemagentenkern 210 stellt Verwaltungsfunktionalität für die verschiedenen Prozessorkomponenten bereit. In einigen Ausführungsformen weist der Systemagentenkern 210 eine oder mehrere integrierte Speichersteuerungen 214 auf, um den Zugriff auf verschiedene externe Speichervorrichtungen (nicht gezeigt) zu verwalten.
  • In einigen Ausführungsformen beinhalten einer oder mehrere der Prozessorkerne 202A-202N Unterstützung für simultanes Multi-Threading. In einer solchen Ausführungsform beinhaltet der Systemagentenkern 210 Komponenten zum Koordinieren und Betreiben der Kerne 202A-202N während der Multi-Threading-Verarbeitung. Der Systemagentenkern 210 kann zusätzlich eine Leistungssteuereinheit (PCU) beinhalten, die Logik und Komponenten zum Regeln des Leistungszustands der Prozessorkerne 202A-202N und des Grafikprozessors 208 beinhaltet.
  • In einigen Ausführungsformen beinhaltet der Prozessor 200 zusätzlich den Grafikprozessor 208, um Grafikverarbeitungsoperationen auszuführen. In einigen Ausführungsformen ist der Grafikprozessor 208 mit dem Satz gemeinsam genutzter Cache-Einheiten 206 und dem Systemagentenkern 210, der die eine oder die mehreren integrierten Speichersteuerungen 214 beinhaltet, gekoppelt. In einigen Ausführungsformen beinhaltet der Systemagentenkern 210 auch eine Anzeigesteuerung 211 zum Ansteuern einer Grafikprozessorausgabe zu einer oder mehreren gekoppelten Anzeigen. In einigen Ausführungsformen kann die Anzeigesteuerung 211 auch ein separates Modul sein, das über mindestens ein Interconnect mit dem Grafikprozessor gekoppelt ist, oder kann in den Grafikprozessor 208 integriert sein.
  • In einigen Ausführungsformen wird ein ringbasiertes Interconnect 212 verwendet, um die internen Komponenten des Prozessors 200 zu koppeln. Es kann jedoch auch eine alternative Interconnect-Einheit verwendet werden, wie etwa ein Punkt-zu-Punkt-Interconnect, ein geschaltetes Interconnect oder andere Techniken, einschließlich nach dem Stand der Technik bekannter Techniken. In einigen Ausführungsformen ist der Grafikprozessor 208 über eine E/A-Verbindung 213 mit dem ringbasierten Interconnect 212 gekoppelt.
  • Die beispielhafte E/A-Verknüpfung 213 repräsentiert mindestens eine von mehreren Varianten von E/A-Interconnects, einschließlich eines Package-E/A-Interconnects, das eine Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 218, wie etwa einem eDRAM-Modul, ermöglicht. In einigen Ausführungsformen kann jeder der Prozessorkerne 202A-202N und der Grafikprozessor 208 eingebettete Speichermodule 218 als einen gemeinsam genutzten Last-Level-Cache verwenden.
  • In einigen Ausführungsformen sind die Prozessorkerne 202A-202N homogene Kerne, die dieselbe Anweisungssatzarchitektur ausführen. In einer weiteren Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich der Anweisungssatzarchitektur (ISA: Instruction Set Architecture) heterogen, wobei einer oder mehrere der Prozessorkerne 202A-202N einen ersten Anweisungssatz ausführen, während mindestens einer der anderen Kerne einen Teilsatz des ersten Anweisungssatzes oder einen anderen Anweisungssatz ausführt. In einer Ausführungsform sind die Prozessorkerne 202A-202N heterogen im Hinblick auf die Mikroarchitektur, wobei ein oder mehrere Kerne, die einen relativ höheren Leistungsverbrauch aufweisen, mit einem oder mehreren Leistungskernen koppeln, die einen niedrigeren Leistungsverbrauch aufweisen. In einer Ausführungsform sind die Prozessorkerne 202A-202N hinsichtlich der Berechnungskapazität heterogen. Außerdem kann der Prozessor 200 auf einem oder mehreren Chips oder als eine integrierte SoC-Schaltung mit den veranschaulichten Komponenten zusätzlich zu anderen Komponenten implementiert werden.
  • 2B ist ein Blockdiagramm einer Hardware-Logik eines Grafikprozessorkerns 219 gemäß einigen hierin beschriebenen Ausführungsformen. Elemente von 2B weisen die gleichen Bezugsziffern (oder Namen) wie die Elemente einer beliebigen anderen Figur hierin auf, die auf eine beliebige ähnliche Weise wie jene arbeiten oder funktionieren, die an anderer Stelle hierin beschrieben ist, sind aber nicht darauf beschränkt. Der Grafikprozessorkern 219, manchmal als Kern-Slice bezeichnet, kann ein oder mehrere Grafikkerne innerhalb eines modularen Grafikprozessors sein. Der Grafikprozessorkern 219 ist beispielhaft für einen Grafik-Core-Slice, und ein wie hier beschriebener Grafikprozessor kann mehrere Grafik-Core-Slices basierend auf Zielleistungs- und -leistungsfähigkeitshüllkurven einschließen. Jeder Grafikprozessorkern 219 kann Festfunktionsblock 230 beinhalten, der mit mehreren Unterkernen 221A-221F, auch als Sub-Slices bezeichnet, gekoppelt ist, die modulare Blöcke von Universal- und Festfunktionslogik beinhalten.
  • In einigen Ausführungsformen beinhaltet der Festfunktionsblock 230 eine Geometrie/Festfunktions-Pipeline 231, die von allen Unterkernen in dem Grafikprozessorkern 219 gemeinsam genutzt werden kann, zum Beispiel bei Grafikprozessorimplementierungen mit niedrigerer Leistungsfähigkeit und/oder niedrigerer Leistung. In verschiedenen Ausführungsformen beinhaltet die Geometrie/Festfunktions-Pipeline 231 eine 3D-Festfunktions-Pipeline (z. B. 3D-Pipeline 312 wie in 3 und 4, unten beschrieben), eine Video-Frontend-Einheit, einen Thread-Spawner und Thread-Dispatcher und einen vereinheitlichten Rückgabepuffer-Manager, der vereinheitliche Rückgabepuffer (z. B. vereinheitliche Rückgabepuffer 418 in 4, unten beschrieben) verwaltet.
  • In einer Ausführungsform schließt der Festfunktionsblock 230 auch eine Grafik-SoC-Schnittstelle 232, einen Grafik-Mikrocontroller 233 und eine Medien-Pipeline 234 ein. Die Grafik-SoC-Schnittstelle 232 stellt eine Schnittstelle zwischen dem Grafikprozessorkern 219 und anderen Prozessorkernen innerhalb einer integrierten System-on-Chip-Schaltung bereit. Der Grafik-Mikrocontroller 233 ist ein programmierbarer Subprozessor, der konfigurierbar ist, um verschiedene Funktionen des Grafikprozessorkerns 219 zu verwalten, einschließlich Thread-Dispatch, Planung und Präemption. Die Medien-Pipeline 234 (z. B. die Medien-Pipeline 316 von 3A und 4) beinhaltet Logik, um das Decodieren, Codieren, Vorverarbeiten und/oder Nachverarbeiten von Multimediadaten, einschließlich Bild- und Videodaten, zu ermöglichen. Die Medien-Pipeline 234 implementiert Medienoperationen über Anforderungen zum Berechnen oder Abtasten von Logik innerhalb der Unterkerne 221 bis 221F.
  • In einer Ausführungsform ermöglicht die SoC-Schnittstelle 232 dem Grafikprozessorkern 219, mit Universalanwendungsprozessorkernen (z. B. CPUs) und/oder anderen Komponenten innerhalb eines SoC zu kommunizieren, einschließlich Speicherhierarchieelementen, wie einem gemeinsam genutzten Last-Level-Cache-Speicher, dem System-RAM und/oder eingebettetem On-Chip- oder On-Package-DRAM. Die SoC-Schnittstelle 232 kann auch eine Kommunikation mit Festfunktionsvorrichtungen innerhalb des SoC ermöglichen, wie Kameraabbildungs-Pipelines, und ermöglicht die Verwendung und/oder implementiert globale Speicheratomik, die zwischen dem Grafikprozessorkern 219 und CPUs innerhalb des SoC gemeinsam genutzt werden kann. Die SoC-Schnittstelle 232 kann auch Energieverwaltungssteuerungen 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 einen Empfang von Befehlspuffern von einer Befehls-Streaming-Einheit und einem globalen Thread-Dispatcher, die konfiguriert sind, um jedem von einem oder mehreren Grafikkernen innerhalb eines Grafikprozessors Befehle und Anweisungen bereitzustellen. Die Befehle und Anweisungen können an die Media-Pipeline 234 gesendet werden, wenn Medienoperationen durchzuführen sind, oder eine Geometrie- und Festfunktions-Pipeline (z. B. Geometrie- und Festfunktions-Pipeline 231, Geometrie- und Festfunktions-Pipeline 237), wenn Grafikverarbeitungsoperationen durchzuführen sind.
  • Die Grafikmikrosteuerung 233 kann konfiguriert sein, um verschiedene Planungs- und Verwaltungsaufgaben für den Grafikprozessorkern 219 durchzuführen. In einer Ausführungsform kann der Grafik-Mikrocontroller 233 Grafik- und/oder Rechenarbeitslastplanung auf den verschiedenen parallelen Grafik-Engines innerhalb von Ausführungseinheit (EU)-Arrays 222A-222F, 224A-224F innerhalb der Unterkerne 221A-221F durchführen. In diesem Planungsmodell kann Host-Software, die auf einem CPU-Kern eines SoC einschließlich des Grafikprozessorkerns 219 ausgeführt wird, Arbeitslasten einer von mehreren Grafikprozessor-DoorBells einreichen, was eine Planungsoperation auf der geeigneten Grafik-Engine aufruft. Planungsoperationen beinhalten das Bestimmen, welche Arbeitslast als nächstes ausgeführt werden soll, das Übermitteln einer Arbeitslast an einen Befehls-Streamer, das Bevorrechtigen bestehender Arbeitslasten, die auf einer Engine ausgeführt werden, das Überwachen des Fortschritts einer Arbeitslast und das Benachrichtigen von Host-Software, wenn eine Arbeitslast abgeschlossen ist. In einer Ausführungsform kann der Grafik-Mikrocontroller 233 auch Niederleistungs- oder Ruhezustände für den Grafikprozessorkern 219 ermöglichen, wodurch dem Grafikprozessorkern 219 die Fähigkeit bereitgestellt wird, Register innerhalb des Grafikprozessorkerns 219 über Niederleistungszustandsübergänge unabhängig von dem Betriebssystem und/oder der Grafiktreibersoftware auf dem System zu speichern und wiederherzustellen.
  • Der Grafikprozessorkern 219 kann mehr oder weniger als die veranschaulichten Unterkerne 221A bis 221F aufweisen, bis zu N modulare Unterkerne. Für jeden Satz von N Unterkernen kann der Grafikprozessorkern 219 auch Logik 235 mit gemeinsam genutzter Funktion, gemeinsam genutzter und/oder Cache-Speicher 236, eine Geometrie/Festfunktions-Pipeline 237 sowie zusätzliche Festfunktions-Logik 238 zum Beschleunigen verschiedener Grafik- und Rechenverarbeitungsoperationen beinhalten. Die Logik 235 mit gemeinsam genutzter Funktion kann Logikeinheiten beinhalten, die mit der Logik 420 mit gemeinsam genutzter Funktion aus 4 (z. B. Sampler-, Mathematik-und/oder Inter-Thread-Kommunikationslogik) assoziiert sind, die von jedem NUnterkern innerhalb des Grafikprozessor-Kerns 219 gemeinsam genutzt werden können. Der gemeinsam genutzte Speicher und/oder Cache-Speicher 236 kann ein Last-Level-Zwischenspeicher für den Satz der N Unterkerne 221A-221F innerhalb des Grafikprozessorkerns 219 sein und kann auch als gemeinsam genutzter Speicher dienen, auf den von mehreren Unterkernen zugegriffen werden kann. Die Geometrie-/Festfunktions-Pipeline 237 kann anstelle der Geometrie-/Festfunktions-Pipeline 231 innerhalb des Festfunktionsblocks 230 enthalten sein und die gleichen oder ähnliche Logikeinheiten einschließen.
  • In einer Ausführungsform beinhaltet der Grafikprozessorkern 219 zusätzliche Festfunktionslogik 238, die verschiedene Festfunktionsbeschleunigungslogik zur Verwendung durch den Grafikprozessorkern 219 beinhalten kann. In einer Ausführungsform beinhaltet die zusätzliche Festfunktionslogik 238 eine zusätzliche Geometrie-Pipeline zur Verwendung beim Nur-Positions-Shading. Beim Nur-Position-Shading gibt es zwei Geometrie-Pipelines, die Vollgeometrie-Pipeline innerhalb der Geometrie/Festfunktions-Pipeline 238, 231 und eine Cull-Pipeline, die eine zusätzliche Geometrie-Pipeline ist, die in der zusätzlichen Festfunktionslogik 238 enthalten sein kann. In einer Ausführungsform ist die Cull-Pipeline eine abgespeckte Version der vollständigen Geometrie-Pipeline. Die vollständige Pipeline und die Cull-Pipeline können unterschiedliche Instanzen derselben Anwendung ausführen, wobei jede Instanz einen separaten Kontext hat. Nur-Position-Shading kann lange Cull-Läufe von verworfenen Dreiecken verdecken, wodurch das frühere Abschließen von Shading ermöglicht wird. Zum Beispiel und in einer Ausführungsform kann die Cull-Pipeline-Logik innerhalb der zusätzlichen Festfunktionslogik 238 Positions-Shader parallel zu der Hauptanwendung ausführen, und sie generiert im Allgemeinen kritische Ergebnisse schneller als die vollständige Pipeline, da die Cull-Pipeline nur das Positionsattribut der Vertices abruft und schattiert, ohne eine Rasterisierung und ein Rendern der Pixel in den Frame-Puffer durchzuführen. Die Cull-Pipeline kann die generierten kritischen Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke zu berechnen, unabhängig davon, ob die Dreiecke ausgesondert werden. Die vollständige Pipeline (die in dieser Instanz als eine Wiedergabe-Pipeline bezeichnet werden kann) kann die Sichtbarkeitsinformationen verbrauchen, um die ausgesonderten Dreiecke zu überspringen, um nur die sichtbaren Dreiecke zu schattieren, die schließlich an die Rasterisierungsphase weitergegeben werden.
  • In einer Ausführungsform kann die zusätzliche Festfunktionslogik 238 auch Beschleunigungslogik für maschinelles Lernen, wie zum Beispiel Festfunktionsmatrixmultiplikationslogik, für Implementierungen beinhalten, die Optimierungen für Training oder Inferenzieren für maschinelles Lernen beinhalten.
  • Innerhalb jedes Grafik-Unterkerns 221A-221F beinhaltet ein Satz von Ausführungsressourcen, die verwendet werden können, um Grafik-, Medien- und Rechenoperationen als Antwort auf Anforderungen durch Grafik-Pipeline, Media-Pipeline oder Shader-Programme durchzuführen. Die Grafik-Unterkerne 221A-221F beinhalten mehrere EU-Arrays 222A-222F, 224A-224F, Thread-Dispatch- und Inter-Thread-Kommunikations (TD/IC)-Logik 223A-223F, 3D (z. B. Textur)-Sampler 225A-225F, Medien-Sampler 226A-226F, Shader-Prozessor 227A-227F und gemeinsam genutzten lokalen Speicher (SLM) 228A-228F. Die EU-Arrays 222A-222F, 224A-224F beinhalten jeweils mehrere Ausführungseinheiten, die Universal-Grafikverarbeitungseinheiten sind, die in der Lage sind, Gleitkomma- und Ganzzahl-/Festkomma-Logikoperationen beim Dienst einer Grafik-, Medien- oder Rechenoperation durchzuführen, einschließlich Grafik-, Medien- oder Rechen-Shader-Programmen. Die TD/IC-Logik 223A-223F führt lokale Thread-Dispatch- und Thread-Steueroperationen für die Ausführungseinheiten innerhalb eines Unterkerns durch und ermöglicht die Kommunikation zwischen Threads, die auf den Ausführungseinheiten des Unterkerns ausgeführt werden. Der 3D-Sampler 225A-225F kann Textur- oder andere 3D-grafikbezogene Daten in den Speicher lesen. Der 3D-Sampler kann Texturdaten anders auslesen, basierend auf einem konfigurierten Abtastzustand und dem Texturformat, das einer gegebenen Textur zugeordnet ist. Der Medien-Sampler 226A-226F kann ähnliche Leseoperationen basierend auf der Art und dem Format durchführen, die den Mediendaten zugeordnet sind. In einer Ausführungsform kann jeder Grafik-Unterkern 221A-221F abwechselnd einen vereinheitlichten 3D- und Medien-Sampler beinhalten. Threads, die auf den Ausführungseinheiten innerhalb jedes der Unterkerne 221A-221F ausgeführt werden, können geteilten lokalen Speicher 228A-228F innerhalb jedes Unterkerns verwenden, um es Threads, die innerhalb einer Thread-Gruppe ausgeführt werden, zu ermöglichen, unter Verwendung eines gemeinsamen Pools von On-Chip-Speicher ausgeführt zu werden.
  • 2C veranschaulicht eine Grafikverarbeitungseinheit (GPU) 239, die dedizierte Sätze von Grafikverarbeitungsressourcen beinhaltet, die in Mehrkerngruppen 240A-240N angeordnet sind. Die Details der Mehrkerngruppe 240A sind veranschaulicht. Die Mehrkerngruppen 240B-240N können mit den gleichen oder ähnlichen Gruppen von Grafikverarbeitungsressourcen ausgestattet sein.
  • Wie veranschaulicht, kann eine Mehrkerngruppe 240A einen Satz von Grafikkernen 243, einen Satz von Tensorkernen 244 und einen Satz von Strahlverfolgungskernen 245 beinhalten. Ein Scheduler/Dispatcher 241 plant und versendet die Grafik-Threads zur Ausführung auf den verschiedenen Kernen 243, 244, 245. In einer Ausführungsform sind die Tensorkerne 244 Sparse-Tensorkerne mit Hardware, um zu ermöglichen, dass Multiplikationsoperationen mit einer Nullwerteingabe umgangen werden.
  • Ein Satz von Registerdateien 242 kann Operandenwerte speichern, die von den Kernen 243, 244, 245 beim Ausführen der Grafik-Threads verwendet werden. Diese können zum Beispiel Ganzzahlregister zum Speichern von ganzzahligen Werten, Gleitkommaregister zum Speichern von Gleitkommawerten, Vektorregister zum Speichern von gepackten Datenelementen (ganzzahligen und/oder Gleitkomma-Datenelementen) und Kachelregister zum Speichern von Tensor-/Matrixwerten beinhalten. In einer Ausführungsform sind die Kachelregister als kombinierte Sätze von Vektorregistern implementiert.
  • Eines oder mehrere kombinierte Level 1 (L1)-Caches und gemeinsam genutzte Speichereinheiten 247 speichern Grafikdaten wie Texturdaten, Vertexdaten, Pixeldaten, Strahlendaten, Begrenzungsvolumendaten usw. lokal innerhalb jeder Mehrkerngruppe 240A. Eine oder mehrere Textureinheiten 247 können auch verwendet werden, um Texturieroperationen wie Texturabbildung und Abtastung durchzuführen. Level-2 (L2)-Cache 253, der durch alle oder einen Untersatz der Mehrkerngruppen 240A-240N gemeinsam genutzt wird, speichert Grafikdaten und/oder Anweisungen für mehrere gleichzeitige Grafik-Threads. Wie veranschaulicht, kann der L2-Cache 253 über eine Vielzahl von Mehrkerngruppen 365A - 365N hinweg gemeinsam genutzt werden. Eine oder mehrere Speichersteuerungen 248 koppeln die GPU 239 mit einem Speicher 249, der ein Systemspeicher (z. B. DRAM) und/oder ein dedizierter Grafikspeicher (z. B. GDDR6-Speicher) sein kann.
  • Eine Eingabe/Ausgabe-(E/A)-Schaltungsanordnung 250 koppelt die GPU 239 mit einer oder mehreren E/A-Vorrichtungen 252, wie Digitalsignalprozessoren (DSPs), Netzwerksteuerungen oder Benutzereingabevorrichtungen. Ein On-Chip-Interconnect 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 (IOMMLJs) 251 der E/A-Schaltungsanordnung 250 koppeln die E/A-Vorrichtungen 252 direkt an den Speicher 249. In einer Ausführungsform verwaltet die IOMMLJ 251 mehrere Sätze von Seitentabellen, um virtuelle Adressen auf physische Adressen im Speicher 249 abzubilden. In dieser Ausführungsform können die E/A-Vorrichtungen 252, CPU(s) 246 und GPU 239 den gleichen virtuellen Adressraum gemeinsam nutzen.
  • In einer Implementierung unterstützt die IOMMU 251 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 verwalten, um die physischen Gast-/Grafikadressen auf physische System-/Hostadressen (z. B. innerhalb des Speichers 249) abzubilden. Die Basisadressen von jeder von dem ersten und dem zweiten Satz von Seitentabellen können in Steuerregistern gespeichert und bei einem Kontextwechsel ausgetauscht werden (sodass z. B. der neue Kontext mit Zugriff auf den relevanten Satz von Seitentabellen bereitgestellt wird). Obwohl in 2C nicht veranschaulicht, kann jeder der Kerne 243, 244, 245 und/oder der Mehrkerngruppen 240A-240N Translation Lookaside-Puffer (TLBs: Translation Lookaside Buffer) einschließen, um virtuelle Gast-zu physische Gast-Übersetzungen, physische Gast-zu-physische Host-Übersetzungen und virtuelle Gast-zu-physische-Host-Übersetzungen zwischenzuspeichern.
  • In einer Ausführungsform sind die CPUs 246, GPU 239 und E/A-Vorrichtungen 252 auf einem einzigen Halbleiterchip und/oder Chipgehäuse integriert. Der Speicher 249 kann auf demselben Chip integriert sein oder kann über eine chipexterne Schnittstelle mit den Speichersteuerungen 248 gekoppelt sein. In einer Implementierung umfasst der Speicher 249 GDDR6-Speicher, der den gleichen virtuellen Adressraum wie andere physische Speicher auf Systemebene nutzt, wenngleich die zugrundeliegenden Prinzipien der Erfindung nicht auf diese spezifische Implementierung beschränkt sind.
  • In einer Ausführungsform beinhalten die Tensorkerne 244 eine Vielzahl von Ausführungseinheiten, die speziell zum Durchführen von Matrixoperationen konfiguriert sind, welche die grundlegende Rechenoperation sind, die zum Durchführen von Deep-Learning-Operationen verwendet wird. Zum Beispiel können simultane Matrixmultiplikationsoperationen für Training und Inferenzieren eines neuronalen Netzwerks verwendet werden. Die Tensorkerne 244 können eine Matrixverarbeitung unter Verwendung einer Vielfalt von Operandenpräzisionen durchführen, einschließlich einfachgenaues Gleitkomma (z. B. 32 Bits), halbgenaues Gleitkomma (z. B. 16 Bits), ganzzahliger Wörter (16 Bits), Bytes (8 Bits) und Halbbytes (4 Bits). In einer Ausführungsform extrahiert eine Implementierung eines neuronalen Netzwerks Merkmale jeder gerenderten Szene, wobei potenziell Details von mehreren Frames kombiniert werden, um ein qualitativ hochwertiges endgültiges Bild aufzubauen.
  • In Deep-Learning-Implementierungen kann Parallelmatrixmultiplikationsarbeit zur Ausführung auf den Tensorkernen 244 geplant werden. Insbesondere erfordert das Training neuronaler Netzwerke eine erhebliche Anzahl von Matrixskalarproduktoperationen. Um eine Innenproduktformulierung einer N × N × N-Matrixmultiplikation zu verarbeiten, können die Tensorkerne 244 mindestens N Skalarproduktverarbeitungselemente beinhalten. Bevor die Matrixmultiplikation beginnt, wird eine vollständige Matrix in Kachelregister geladen und mindestens eine Spalte pro Zyklus für N Zyklen einer zweiten Matrix wird geladen. In jedem Zyklus gibt es N Skalarprodukte, die verarbeitet werden.
  • Matrixelemente können in Abhängigkeit von der speziellen Implementierung mit unterschiedlichen Präzisionen gespeichert werden, einschließlich 16-Bit-Wörtern, 8-Bit-Bytes (z. B. INT8) und 4-Bit-Halbbytes (z. B. INT4). Unterschiedliche Präzisionsmodi können für die Tensorkerne 244 angegeben werden, um sicherzustellen, dass die effizienteste Präzision für unterschiedliche Arbeitslasten verwendet wird (wie z. B. Inferenzierungsarbeitslasten, die eine Quantisierung in Bytes und Halbbytes tolerieren können).
  • In einer Ausführungsform beschleunigen die Strahlverfolgungskerne 245 Strahlverfolgungsoperationen sowohl für Echtzeit-Strahlverfolgung als auch für Nicht-Echtzeit-Strahlverfolgungsimplementierungen. Insbesondere beinhalten die Strahlverfolgungskerne 245 eine Strahltraversierungs-/-kreuzungsschaltungsanordnung zum Durchführen einer Strahltraversierung durch Verwenden von Hüllkörperhierarchien (BVHs: Bounding Volume Hierarchies) und Identifizieren von Überschneidungen zwischen Strahlen und Primitiven, die innerhalb der BVH-Volumina umfasst sind. Die Strahlverfolgungskerne 245 können auch Schaltungsanordnungen zum Durchführen von Tiefentestung und Aussonderung beinhalten (z. B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung). In einer Implementierung führen die Strahlverfolgungskerne 245 Traversierungs- und Überschneidungsoperationen zusammen mit den hierin beschriebenen Bildentrauschungstechniken durch, von denen mindestens ein Teil auf den Tensorkernen 244 ausgeführt werden kann. In einer Ausführungsform implementieren die Tensorkerne 244 zum Beispiel ein neuronales Tiefenlernnetzwerk, um eine Entrauschung von Frames durchzuführen, die durch die Stahlenverfolgungskerne 245 generiert werden. Die CPU(s) 246, Grafikkerne 243 und/oder Strahlenverfolgungskerne 245 können jedoch auch alle oder einen Teil der Entrauschungs- und/oder Tiefenlernalgorithmen implementieren.
  • Außerdem kann, wie oben beschrieben, ein verteilter Ansatz zum Entrauschen eingesetzt werden, bei dem sich die GPU 239 in einer Rechenvorrichtung befindet, die über ein Netzwerk oder ein Hochgeschwindigkeits-Interconnect mit anderen Rechenvorrichtungen gekoppelt ist. In dieser Ausführungsform nutzen die miteinander verbundenen Rechenvorrichtungen neuronale Netzwerk-Lern-/Trainingsdaten gemeinsam, um die Geschwindigkeit zu verbessern, mit der das Gesamtsystem lernt, um eine Entrauschung für unterschiedliche Arten von Bild-Frames und/oder unterschiedliche Grafikanwendungen durchzuführen.
  • In einer Ausführungsform verarbeiten die Strahlverfolgungskerne 245 alle BVH-Traversierungen und Strahl-Primitiv-Überschneidungen, wodurch verhindert wird, dass die Grafikkerne 243 mit tausenden Anweisungen pro Strahl überlastet werden. In einer Ausführungsform beinhaltet jeder Strahlverfolgungskern 245 einen ersten Satz von spezialisierter Schaltungsanordnung zum Durchführen von Begrenzungsrahmenprüfungen (z. B. für Traversierungsoperationen), und einen zweiten Satz von spezialisierter Schaltungsanordnung zum Durchführen der Strahl-Dreieck-Überschneidungsprüfungen (z. B. sich überschneidender Strahlen, die traversiert wurden). Deshalb kann die Mehrkerngruppe 240A in einer Ausführungsform einfach eine Strahlabtastung starten, und die Strahlverfolgungskerne 245 führen selbstständig eine Strahltraversierung und -überschneidung aus, und geben Trefferdaten (z. B. ein Treffer, kein Treffer, mehrere Treffer usw.) an den Thread-Kontext zurück Die anderen Kerne 243, 244 werden freigegeben, um andere Grafik- oder Rechenarbeit durchzuführen, während die Strahlverfolgungskerne 245 die Traversierungs- und Überschneidungsoperationen durchführen.
  • In einer Ausführungsform beinhaltet jeder Strahlverfolgungskern 245 eine Traversierungseinheit zum Durchführen von BVH-Testoperationen und eine Überschneidungseinheit, die Strahl-Primitiv-Überschneidungsprüfungen durchführt. Die Überschneidungseinheit generiert eine Antwort „Treffer“, „kein Treffer“ oder „mehrere Treffer“, die sie dem geeigneten Thread bereitstellt. Während der Traversierungs- und Überschneidungsoperationen werden die Ausführungsressourcen der anderen Kerne (z. B. Grafikkerne 243 und Tensorkerne 244) freigegeben, um andere Formen von Grafikarbeit durchzuführen.
  • In einer speziellen Ausführungsform, die unten beschrieben ist, wird ein hybrider Rasterisierungs-/Strahlverfolgungsansatz verwendet, bei dem Arbeit zwischen den Grafikkernen 243 und Strahlverfolgungskernen 245 verteilt wird.
  • In einer Ausführungsform beinhalten die Strahlverfolgungskerne 245 (und/oder andere Kerne 243, 244) Hardware-Unterstützung für einen Strahlverfolgungs-Anweisungssatz, wie DirectX Ray Tracing (DXR) von Microsoft, der einen DispatchRays-Befehl beinhaltet, sowie Strahlerzeugung, Nächster-Treffer-, Beliebiger-Treffer- und Fehltreffer-Shader, welche die Zuweisung eindeutiger Sätze von Shadern und Texturen für jedes Objekt ermöglichen. Eine andere Strahlverfolgungsplattform, die durch die Strahlverfolgungskerne 245, Grafikkerne 243 und Tensorkerne 244 unterstützt werden kann, ist Vulkan 1.1.85. Es ist jedoch anzumerken, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf eine bestimmte Strahlverfolgungs-ISA beschränkt ist.
  • Im Allgemeinen können die verschiedenen Kerne 245, 244, 243 einen Strahlverfolgungs-Anweisungssatz unterstützen, der Anweisungen/Funktionen für Strahlerzeugung, Nächster-Treffer, Beliebiger-Treffer, Strahl-Primitiv-Überschneidung, Per-Primitiv- und hierarchische Begrenzungsrahmenkonstruktion, Fehltreffer, Visit und Ausnahmen beinhaltet. Spezieller umfasst eine Ausführungsform Strahlverfolgungsanweisungen zum Durchführen der folgenden Funktionen:
    • Strahlengenerierung - Strahlengenerierungsanweisungen können für jedes Pixel, jede Probe oder jede andere benutzerdefinierte Arbeitszuweisung ausgeführt werden.
    • Nächster Treffer - Eine Nächster-Treffer-Anweisung kann ausgeführt werden, um die nächste Überschneidung eines Strahls mit Primitiven innerhalb einer Szene zu finden.
    • Beliebiger Treffer - Eine Beliebiger-Treffer-Anweisung identifiziert mehrere Überschneidungen zwischen einem Strahl und Primitiven innerhalb einer Szene, um potenziell einen neuen nächsten Schnittpunkt zu identifizieren.
    • Überschneidung - Eine Überschneidungsanweisung führt eine strahlprimitive Überschneidungsprüfung durch und gibt ein Ergebnis aus.
    • Primitivenweise Hüllkörperkonstruktion - Diese Anweisung baut einen Hüllkörper um eine gegebene Primitive oder Gruppe von Primitiven (z. B. beim Bauen einer neuen BVH oder einer anderen Beschleunigungsdatenstruktur).
    • Nicht-Treffer - Zeigt an, dass ein Strahl die gesamte Geometrie innerhalb einer Szene oder einer spezifischen Region einer Szene verfehlt.
    • Visit - Gibt die untergeordneten Volumina an, die ein Strahl durchlaufen wird.
    • Ausnahmen - Beinhaltet verschiedene Arten von Ausnahme-Handlern (die z. B. für verschiedene Fehlerbedingungen aufgerufen werden).
  • In einer Ausführungsform können die Strahlverfolgungskerne 245 konfiguriert sein, um Universal-Rechenoperationen zu beschleunigen, die unter Verwendung von Berechnungstechniken beschleunigt werden können, die analog zu Strahlüberschneidungsprüfungen sind. Ein Rechen-Framework kann bereitgestellt werden, das ermöglicht, dass Shader-Programme in Anweisungen niedriger Ebene und/oder Primitive kompiliert werden, die Universal-Rechenoperationen über die Strahlverfolgungskerne durchführen. Beispielhafte Berechnungsprobleme, die von Rechenoperationen profitieren können, die auf den Strahlverfolgungskernen 245 durchgeführt werden, beinhalten Berechnungen, die Strahl-, Wellen-, Strahl- oder Partikelausbreitung innerhalb eines Koordinatenraums involvieren. Interaktionen, die dieser Ausbreitung zugeordnet sind, können relativ zu einer Geometrie oder einem Mesh innerhalb des Koordinatenraums berechnet werden. Berechnungen, die der Ausbreitung elektromagnetischer Signale durch eine Umgebung zugeordnet sind, können zum Beispiel über die Verwendung von Anweisungen oder Primitiven beschleunigt werden, die über die Strahlverfolgungskerne ausgeführt werden. Diffraktion und Spiegelung der Signale durch Objekte in der Umgebung können als direkte Strahlverfolgungsanalogien berechnet werden.
  • Strahlverfolgungskerne 245 können auch verwendet werden, um Berechnungen durchzuführen, die nicht direkt zur Strahlverfolgung analog sind. Zum Beispiel können Mesh-Projektions-, Mesh-Verfeinerung- und Volumenabtastberechnungen unter Verwendung der Strahlverfolgungskerne 245 beschleunigt werden. Generische Koordinatenraumberechnungen, wie Nächster-Nachbar-Berechnungen, können ebenfalls durchgeführt werden. Zum Beispiel kann der Satz von Punkten nahe einem gegebenen Punkt entdeckt werden, indem ein Begrenzungsrahmen im Koordinatenraum um den Punkt herum definiert wird. BVH- und Strahlsondenlogik innerhalb der Strahlverfolgungskerne 245 können dann verwendet werden, um den Satz von Punktüberschneidungen innerhalb des Begrenzungsrahmens zu bestimmen. Die Überschneidungen bilden den Ursprungspunkt und die nächsten Nachbarn zu diesem Ursprungspunkt. Berechnungen, die unter Verwendung der Strahlverfolgungskerne 245 durchgeführt werden, können parallel mit Berechnungen durchgeführt werden, die auf den Grafikkernen 243 und den Tensorkernen 244 durchgeführt werden. Ein Shader-Kompilierer kann konfiguriert sein, um einen Rechen-Shader oder ein anderes Universal-Grafikverarbeitungsprogramm in Primitive auf niedriger Ebene zu kompilieren, die über die Grafikkerne 243, die Tensorkerne 244 und die Strahlverfolgungskerne 245 parallelisiert werden können.
  • 2D ist ein Blockdiagramm einer Universal-Grafikverarbeitungseinheit (GPGPU) 270, die als ein Grafikprozessor und/oder Rechenbeschleuniger konfiguriert sein kann, gemäß hierin beschriebenen Ausführungsformen. Die GPGPU 270 kann über einen oder mehrere System- und/oder Speicherbusse mit Hostprozessoren (z. B. einer oder mehreren CPU(s) 246) und Speicher 271, 272 verbunden sein. In einer Ausführungsform ist der Speicher 271 der Systemspeicher, der mit der einen oder den mehreren CPUs 246 gemeinsam genutzt werden kann, während der Speicher 272 der Vorrichtungsspeicher ist, welcher der GPGPU 270 dediziert ist. In einer Ausführungsform können Komponenten innerhalb der GPGPU 270 und des Speichers 272 in Speicheradressen abgebildet sein, die für die eine oder die mehreren CPUs 246 zugänglich sind. Ein Zugriff auf die Speicher 271 und 272 kann über eine Speichersteuerung 268 erleichtert werden. In einer Ausführungsform beinhaltet die Speichersteuerung 268 eine interne Direktspeicherzugriff (DMA Direct Memory Access)-Steuerung 269, oder kann Logik zum Durchführen von Operationen beinhalten, die anderenfalls durch eine DMA-Steuerung durchgeführt würden.
  • Die GPGPU 270 beinhaltet mehrere Cache-Speicher, einschließlich L2-Cache 253, L1-Cache 254, Anweisungs-Cache 255 und gemeinsam genutzter Speicher 256, von dem mindestens ein Teil auch als ein Cache-Speicher partitioniert sein kann. Die GPGPU 270 beinhaltet auch mehrere Berechnungseinheiten 260A-260N. Jede Berechnungseinheit 260A-260N beinhaltet einen Satz von Vektorregistern 261, Skalarregistern 262, Vektorlogikeinheiten 263 und Skalarlogikeinheiten 264. Die Berechnungseinheiten 260A-260N können auch lokalen gemeinsam genutzten Speicher 265 und Programmzähler 266 beinhalten. Die Recheneinheiten 260A-260N können mit einem konstanten Cache 267 koppeln, der verwendet werden kann, um konstante Daten zu speichern, die Daten sind, die sich während der Ausführung des Kernel- oder Shader-Programms, das auf der GPGPU 270 ausgeführt wird, nicht ändern. In einer Ausführungsform ist der konstante 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 CPU 246 Befehle in Register oder den Speicher in der GPGPU 270 schreiben, die in einen zugänglichen Adressraum abgebildet wurde. Befehlsprozessoren 257 können die Befehle von Registern oder von Speicher lesen und bestimmen, wie diese Befehle innerhalb der GPGPU 270 verarbeitet werden. Thread-Dispatcher 258 können dann verwendet werden, um Threads an die Berechnungseinheiten 260A-260N zu verteilen, um diese Befehle durchzuführen. Jede Recheneinheit 260A-260N kann Threads unabhängig von anderen Recheneinheiten ausführen. Zusätzlich kann jede Recheneinheit 260A-260N unabhängig für eine bedingte Berechnung konfiguriert sein und kann bedingt die Ergebnisse der Berechnung an einen Speicher ausgeben. Die Befehlsprozessoren 257 können die eine oder die mehreren CPU 246 unterbrechen, wenn die übermittelten Befehle abgeschlossen sind.
  • 3A bis 3C veranschaulichen Blockdiagramme zusätzlicher Grafikprozessor- und Rechenbeschleunigerarchitekturen, die durch hierin beschriebene Ausführungsformen bereitgestellt werden. Die Elemente aus den 3A-3C, die die gleichen Bezugsziffern (oder Namen) wie die Elemente einer beliebigen anderen Figur hier aufweisen, können auf eine beliebige ähnliche Weise wie jene arbeiten oder funktionieren, die an anderer Stelle hier beschrieben ist, sind aber nicht darauf beschränkt.
  • 3A ist ein Blockdiagramm eines Grafikprozessors 300, der eine diskrete Grafikverarbeitungseinheit sein kann oder ein Grafikprozessor sein kann, der mit einer Vielzahl von Verarbeitungskernen integriert ist, oder anderen Halbleitervorrichtungen, wie, ohne darauf beschränkt zu sein, Speichervorrichtungen oder Netzwerkschnittstellen. In einigen Ausführungsformen kommuniziert der Grafikprozessor über eine speicherabgebildete E/A-Schnittstelle mit Registern auf dem Grafikprozessor und mit Befehlen, die in dem Prozessorspeicher platziert sind. In einigen Ausführungsformen beinhaltet 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 beinhaltet der Grafikprozessor 300 auch eine Anzeigesteuerung 302, um Anzeigeausgabedaten zu einer Anzeigevorrichtung 318 zu steuern. Die Anzeigesteuerung 302 beinhaltet Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und Zusammensetzung mehrerer Schichten von Video- oder Benutzerschnittstellenelementen. Die Anzeigevorrichtung 318 kann eine interne oder externe Anzeigevorrichtung sein. In einer Ausführungsform ist die Anzeigevorrichtung 318 eine am Kopf montierte Anzeigevorrichtung, wie etwa eine Virtual-Reality (VR)-Anzeigevorrichtung oder eine Augmented Reality (AR)-Anzeigevorrichtung. In einigen Ausführungsformen beinhaltet der Grafikprozessor 300 eine Video-Codec-Engine 306 zum Codieren, Decodieren oder Transcodieren von Medien zu, von oder zwischen einem oder mehreren Medien-Codierformaten, einschließlich, jedoch nicht beschränkt auf, Moving Picture Experts Group (MPEG)-Formate, wie MPEG-2, Advanced Video Coding (AVC)-Formate, wie zum Beispiel H.264/MPEG-4 AVC, H.265/HEVC, Alliance for Open Media (AOMedia) VP8, VP9, sowie die Society of Motion Picture & Television Engineers (SMPTE) 421M/VC-1 und Joint Photographic Experts Group (JPEG)-Formate, wie JPEG- und Motion-JPEG (MJPEG)-Formate.
  • In einigen Ausführungsformen beinhaltet der Grafikprozessor 300 eine Blockbildübertragungs (BLIT)-Kopier-Engine 304, um zweidimensionale (2D) Rasterisiereroperationen durchzuführen, einschließlich zum Beispiel Bitgrenzblockübertragungen. In einer Ausführungsform werden jedoch 2D-Grafikoperationen unter Verwendung einer oder mehrerer Komponenten der Grafikverarbeitungs-Engine (GPE) 310 durchgeführt. In einigen Ausführungsformen ist die GPE 310 eine Rechen-Engine zum Durchführen von Grafikoperationen, einschließlich dreidimensionaler (3D) Grafikoperationen und Medienoperationen.
  • In einigen Ausführungsformen beinhaltet die GPE 310 eine 3D-Pipeline 312 zum Durchführen von 3D-Operationen, wie Rendern dreidimensionaler Bilder und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 3D-Primitivformen (z. B. Rechteck, Dreieck usw.) einwirken. Die 3D-Pipeline 312 beinhaltet programmierbare und Festfunktionselemente, die verschiedene Aufgaben in dem Element durchführen und/oder Ausführungs-Threads an ein 3D/Medien-Subsystem 315 erzeugen. Während die 3D-Pipeline 312 zum Durchführen von Medienoperationen verwendet werden kann, schließt eine Ausführungsform der GPE 310 auch eine Medien-Pipeline 316 ein, die insbesondere zum Durchführen von Medienoperationen, wie einer Videonachverarbeitung und Bildverbesserung, verwendet wird.
  • In einigen Ausführungsformen beinhaltet die Medien-Pipeline 316 Festfunktions- oder programmierbare Logikeinheiten, um eine oder mehrere spezialisierte Medienoperationen, wie etwa Videodecodierungsbeschleunigung, Videoentschachtelung und Videocodierungsbeschleunigung, anstelle oder im Auftrag der Video-Codec-Engine 306 durchzuführen. In einigen Ausführungsformen beinhaltet die Medien-Pipeline 316 zusätzlich eine Thread-Erstelleinheit zum Erstellen von Threads zur Ausführung auf dem 3D-/Medien-Subsystem 315 ein. Die erstellten Threads führen Berechnungen für die Medienoperationen auf einer oder mehreren Grafikausführungseinheiten, die in dem 3D-/Medien-Subsystem 315 enthalten sind, durch.
  • In einigen Ausführungsformen enthält das 3D/Medien-Subsystem 315 Logik zum Ausführen von Threads, die von der 3D-Pipeline 312 und der Medien-Pipeline 316 erstellt wurden. In einer Ausführungsform senden die Pipelines Threadausführungsanforderungen an das 3D/Medien-Subsystem 315, das Thread-Dispatch-Logik zum Vermitteln und Versenden der verschiedenen Anforderungen an verfügbare Threadausführungsressourcen beinhaltet. Die Ausführungsressourcen beinhalten ein Array von Grafikausführungseinheiten zum Verarbeiten der 3D-Threads und Medien-Threads. In einigen Ausführungsformen beinhaltet das 3D/Medien-Subsystem 315 einen oder mehrere interne Caches für Thread-Anweisungen und Daten. In einigen Ausführungsformen beinhaltet das Subsystem auch gemeinsam genutzten Speicher, der Register und adressierbaren Speicher beinhaltet, um Daten zwischen Threads gemeinsam zu nutzen, und Ausgabedaten zu speichern.
  • 3B veranschaulicht einen Grafikprozessor 320 mit einer gekachelten Architektur gemäß hierin beschriebenen Ausführungsformen. In einer Ausführungsform beinhaltet der Grafikprozessor 320 einen Grafikverarbeitungs-Engine-Cluster 322, der mehrere Instanzen der Grafikverarbeitungs-Engine 310 von 3A innerhalb einer Grafik-Engine-Kachel 310A-310D aufweist. Jede Grafik-Engine-Kachel 310A-310D kann über einen Satz von Kachel-Interconnects 323A-323F miteinander verbunden sein. Jede Grafik-Engine-Kachel 310A-310D kann auch über Speicher-Interconnects 325A-325D mit einem Speichermodul oder einer Speichervorrichtung 326A-326D verbunden sein. Die Speichervorrichtungen 326A-326D können eine beliebige Grafikspeichertechnologie verwenden. Die Speichervorrichtungen 326A-326D können zum Beispiel Grafikspeicher mit doppelter Datenrate (GDDR: Graphics Double Data Rate) sein. Die Speichervorrichtungen 326A-326D sind in einer Ausführungsform Speichermodule mit hoher Bandbreite (HBM-Module), die sich auf einem Die mit ihrer jeweiligen Grafik-Engine-Kachel 310A-310D befinden können. In einer Ausführungsform sind die Speichervorrichtungen 326A-326D gestapelte Speichervorrichtungen, die auf ihrer jeweiligen Grafik-Engine-Kachel 310A-310D gestapelt sein können. In einer Ausführungsform befinden sich jede Grafik-Engine-Kachel 310A-310D und der zugeordnete Speicher 326A-326D auf separaten Chiplets, die an ein Basis-Die oder ein Basissubstrat gebondet sind, wie ausführlicher in 11B-11D beschrieben.
  • Der Grafikprozessor 320 kann mit einem Non-Uniform-Memory-Access (NUMA ungleichförmiger Speicherzugriff)-System konfiguriert sein, bei dem die Speichervorrichtungen 326A-326D mit assoziierten Grafik-Engine-Kacheln 310A-310D gekoppelt sind. Auf eine gegebene Speichervorrichtung kann durch andere Grafik-Engine-Kacheln als die Kachel zugegriffen werden, mit der sie direkt verbunden ist. Jedoch kann die Zugriffslatenz auf die Speichervorrichtungen 326A-326D am niedrigsten sein, wenn auf eine lokale Kachel zugegriffen wird. In einer Ausführungsform wird ein Cache-kohärentes NUMA-System (ccNUMA-System) unterstützt, das die Kachel-Interconnects 323A-323F verwendet, um eine Kommunikation zwischen Cache-Steuerungen innerhalb der Grafik-Engine-Kacheln 310A-310D zu unterstützen, um ein konsistentes Speicherbild beizubehalten, wenn mehr als ein Cache den gleichen Speicherort speichert.
  • Der Grafikverarbeitungs-Engine-Cluster 322 kann mit einer On-Chip- oder On-Package-Fabric-Interconnect 324 verbunden sein. In einer Ausführungsform beinhaltet das Fabric-Interconnect 324 einen Netzwerkprozessor, ein Netzwerk-on-Chip (NoC) oder einen anderen Switch-Prozessor, um zu ermöglichen, dass das Fabric-Interconnect 324 als ein paketvermitteltes Fabric-Interconnect fungiert, das Datenpakete zwischen Komponenten des Grafikprozessors 320 schaltet. Das Fabric-Interconnect 324 kann Kommunikation zwischen den Grafik-Engine-Kacheln 1610A-1610D und Komponenten, wie Video-Codec-Engine 306, und einer oder mehreren Kopier-Engines 304 ermöglichen. Die Kopier-Engines 304 können verwendet werden, um Daten aus den, in die und zwischen den Speichervorrichtungen 326A-326D und aus, in und zwischen Speicher, der sich außerhalb des Grafikprozessors 320 befindet, (z. B. Systemspeicher) zu verschieben. Das Fabric-Interconnect 324 kann auch mit einer oder mehreren der Kachel-Interconnects 323A-323F koppeln, um die Zwischernverbindung zwischen den Grafik-Engine-Kacheln 310A-310D zu ermöglichen oder zu verbessern. Das Fabric-Interconnect 324 kann auch konfiguriert sein, um mehrere Instanzen des Grafikprozessors 320 (z. B. über die Host-Schnittstelle 328) miteinander zu verbinden, wodurch eine Kachel-zu-Kachel-Kommunikation zwischen den Grafik-Engine-Kacheln 310A-310D mehrerer GPUs ermöglicht wird. In einer Ausführungsform können die Grafik-Engine-Kacheln 310A-310D mehrerer GPUs einem Host-System als eine einzige logische Vorrichtung dargestellt werden.
  • Der Grafikprozessor 320 kann optional eine Anzeigesteuerung 302 beinhalten, um eine Verbindung mit der Anzeigevorrichtung 318 zu ermöglichen. Der Grafikprozessor kann auch als ein Grafik- oder Rechenbeschleuniger konfiguriert sein. In der Beschleunigerkonfiguration können die Anzeigesteuerung 302 und die Anzeigevorrichtung 318 weggelassen werden.
  • Der Grafikprozessor 320 kann über eine Host-Schnittstelle 328 mit einem Host-System verbunden sein. Die Host-Schnittstelle 328 kann eine Kommunikation zwischen dem Grafikprozessor 320, dem Systemspeicher und/oder anderen Systemkomponenten ermöglichen. Die Host-Schnittstelle 328 kann zum Beispiel ein PCI-Express-Bus oder eine andere Art von Host-Systemschnittstelle sein. Die Host-Schnittstelle 328 kann zum Beispiel eine NVLink- oder NVSwitch-Schnittstelle sein. Die Host-Schnittstelle 328 und das Fabric-Interconnect 324 können zusammenwirken, um es mehreren Instanzen des Grafikprozessors 320 zu ermöglichen, als eine einzige logische Vorrichtung zu wirken. Die Zusammenarbeit zwischen der Host-Schnittstelle 328 und dem Fabric-Interconnect 324 kann es auch ermöglichen, dass die einzelnen Grafik-Engine-Kacheln 310A-310D dem Host-System als unterschiedliche logische Grafikvorrichtungen dargestellt werden.
  • 3C veranschaulicht einen Rechenbeschleuniger 330 gemäß hierin beschriebenen Ausführungsformen. Der Rechenbeschleuniger 330 kann architektonische Ähnlichkeiten mit dem Grafikprozessor 320 von 3B beinhalten und ist für die Rechenbeschleunigung optimiert. Ein Rechen-Engine-Cluster 332 kann einen Satz von Rechen-Engine-Kacheln 340A-340D beinhalten, die Ausführungslogik beinhalten, die für parallele oder vektorbasierte Universal-Rechenoperationen optimiert ist. In einigen Ausführungsformen beinhalten die Rechen-Engine-Kacheln 340A-340D keine Grafikverarbeitungslogik mit fester Funktion, obwohl in einer Ausführungsform eine oder mehrere der Rechen-Engine-Kacheln 340A-340D Logik zum Durchführen einer Medienbeschleunigung beinhalten können. Die Rechen-Engine-Kacheln 340A-340D können über Speicher-Interconnects 325A-325D mit dem Speicher 326A-326D verbunden werden. Der Speicher 326A-326D und die Speicher-Interconnects 325A-325D können eine ähnliche Technologie wie in dem Grafikprozessor 320 sein oder können anders sein. Die Grafik-Rechen-Engine-Kacheln 340A-340D können auch über einen Satz von Kachel-Interconnects 323A-323F miteinander verbunden sein und können mit einem Fabric-Interconnect 324 verbunden werden und/oder durch diesen miteinander verbunden sein. Kachelübergreifende Kommunikationen können über das Fabric-Interconnect 324 ermöglicht werden. Das Fabric-Interconnect 324 (z. B. über die Host-Schnittstelle 328) kann auch eine Kommunikation zwischen den Rechen-Engine-Kacheln 340A-340D mehrerer Instanzen des Rechenbeschleunigers 330 ermöglichen. In einer Ausführungsform beinhaltet der Rechenbeschleuniger 330 einen großen L3-Cache 336, der als ein vorrichtungsumfassender Cache konfiguriert sein kann. Der Rechenbeschleuniger 330 kann auch in ähnlicher Weise wie der Grafikprozessor 320 von 3B mit einem Host-Prozessor und Speicher über eine Host-Schnittstelle 328 verbunden sein.
  • Der Rechenbeschleuniger 330 kann auch eine integrierte Netzwerkschnittstelle 342 beinhalten. In einer Ausführungsform beinhaltet die Netzwerkschnittstelle 342 einen Netzwerkprozessor und eine Steuerlogik, die dem Rechen-Engine-Cluster 332 ermöglichen, über ein Bitübertragungsschicht-Interconnect 344 zu kommunizieren, ohne dass Daten einen Speicher eines Host-Systems traversieren müssen. In einer Ausführungsform wird eine der Rechen-Engine-Kacheln 340A-340D durch Netzwerkprozessorlogik ersetzt, und die über das physische Schicht-Interconnect 344 zu übertragenden oder zu empfangenden Daten können direkt an den oder vom Speicher 326A-326D übertragen werden. Mehrere Instanzen des Rechenbeschleunigers 330 können über das physische Schicht-Interconnect 344 zu einer einzigen logischen Vorrichtung zusammengefügt werden. Alternativ dazu können die verschiedenen Rechen-Engine-Kacheln 340A-340D als voneinander getrennte netzwerkzugängliche Rechenbeschleunigervorrichtungen dargestellt werden.
  • Grafikverarbeitungs-Engine
  • 4 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine 410 eines Grafikprozessors, gemäß einigen Ausführungsformen. In einer Ausführungsform ist die Grafikverarbeitungs-Engine (GPE) 410 eine Version der GPE 310, die in 3A gezeigt ist, und kann auch eine Grafik-Engine-Kachel 310A-310D von 3B repräsentieren. Elemente von 4, welche die gleichen Bezugsziffern (oder Namen) wie die Elemente einer 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. Zum Beispiel sind die 3D-Pipeline 312 und die Medien-Pipeline 316 von 3A veranschaulicht. Die Medien-Pipeline 316 ist in einigen Ausführungsformen der GPE 410 optional und ist möglicherweise nicht explizit innerhalb der GPE 410 enthalten. Zum Beispiel und in mindestens einer Ausführungsform ist ein separater Medien- und/oder Bildprozessor an die GPE 410 gekoppelt.
  • In einigen Ausführungsformen ist die GPE 410 mit einem Befehls-Streamer 403 gekoppelt oder beinhaltet diesen, welcher der 3D-Pipeline 312 und/oder den Medien-Pipelines 316 einen Befehls-Stream bereitstellt. Alternativ oder zusätzlich kann der Befehls-Streamer 403 direkt mit einem vereinheitlichten Rückgabepuffer 418 gekoppelt sein. Der vereinheitlichte Rücklaufpuffer 418 kann kommunikativ mit einem Grafikkern-Array 414 gekoppelt sein. In einigen Ausführungsformen ist der Befehls-Streamer 403 mit Speicher gekoppelt, der Systemspeicher oder eines oder mehrere von internem Cache-Speicher und gemeinsam genutztem Cache-Speicher sein kann. 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 Medien-Pipeline 316. Die Befehle sind Direktiven, die von einem Ringpuffer abgerufen wurden, der Befehle für die 3D-Pipeline 312 und die Medien-Pipeline 316 speichert. In einer Ausführungsform kann der Ringpuffer zusätzlich Batch-Befehlspuffer beinhalten, die Batches von mehreren Befehlen speichern. Die Befehle für die 3D-Pipeline 312 können auch Bezüge auf die in Speicher gespeicherten Daten beinhalten, wie zum Beispiel, jedoch nicht beschränkt auf, Vertex- und Geometriedaten für die 3D-Pipeline 312 und/oder Bilddaten und Speicherobjekte für die Medien-Pipeline 316. Die 3D-Pipeline 312 und die Medien-Pipeline 316 verarbeiten die Befehle und Daten durch Durchführen von Operationen über Logik innerhalb der jeweiligen Pipelines, oder durch Versenden eines oder mehrerer Ausführungs-Threads zu einem Grafikkern-Array 414. In einer Ausführungsform beinhaltet das Grafikkern-Array 414 einen oder mehrere Blöcke von Grafikkernen (zum Beispiel Grafikkern(e) 415A, Grafikkern(e) 415B), wobei jeder Block einen oder mehrere Grafikkerne beinhaltet. Jeder Grafikkern beinhaltet einen Satz von Grafikausführungsressourcen, die Universal- und grafikspezifische Ausführungslogik beinhalten, um Grafik- und Rechenoperationen sowie Festfunktionstexturverarbeitung und/oder Beschleunigungslogik und künstliche Intelligenz für maschinelles Lernen durchzuführen.
  • In verschiedenen Ausführungsformen kann die 3D-Pipeline 312 feste Funktions- und programmierbare Logik enthalten, um ein oder mehrere Shader-Programme zu verarbeiten, wie Vertex-Shader, Geometrie-Shader, Pixel-Shader, Fragment-Shader, Rechen-Shader oder andere Shader- und/oder GPGPU-Programme, durch Verarbeiten der Anweisungen und Versenden von Ausführungsthreads an das Grafikkern-Array 414. Das Grafikkern-Array 414 stellt einen vereinheitlichten Block mit Ausführungsressourcen zur Verwendung bei der Verarbeitung dieser Shader-Programme bereit. Mehrzweck-Ausführungslogik (z. B., Ausführungseinheiten) innerhalb des einen oder der mehreren Grafikkerne 415 A-414 B des Grafikkern-Arrays 414 beinhaltet Unterstützung für verschiedene 3D-API-SHADER-SPRACHEN und kann mehrere gleichzeitige Ausführungs-Threads ausführen, die mehreren Shadern zugeordnet sind.
  • In einigen Ausführungsformen beinhaltet das Grafikkern-Array 414 Ausführungslogik zum Durchführen von Medienfunktionen, wie Video- und/oder Bildverarbeitung. In einer Ausführungsform beinhalten die Ausführungseinheiten Universallogik, die programmierbar ist, um parallele Universal-Berechnungsoperationen zusätzlich zu Grafikverarbeitungsoperationen durchzuführen. Die Universallogik kann Verarbeitungsoperationen parallel oder in Verbindung mit Universallogik innerhalb des Prozessorkerns/der Prozessorkerne 107 von 1 oder des Kerns 202A-202N wie in 2A durchführen.
  • Ausgabedaten, die durch Threads generiert werden, die auf dem Grafikkern-Array 414 ausgeführt werden, können Daten in einen Speicher in einem vereinheitlichten Rückgabepuffer (URB) 418 ausgeben. Der URB 418 kann Daten für mehrere Threads speichern. In einigen Ausführungsformen kann der URB 418 verwendet werden, um Daten zwischen unterschiedlichen Threads zu senden, die auf dem Grafikkern-Array 414 ausgeführt werden. In einigen Ausführungsformen kann der URB 418 zusätzlich zur Synchronisierung zwischen Threads auf dem Grafikkern-Array und Festfunktionslogik innerhalb der gemeinsam genutzten Funktionslogik 420 verwendet werden.
  • In einigen Ausführungsformen ist das Grafikkern-Array 414 skalierbar, sodass das Array eine variable Anzahl von Grafikkernen beinhaltet, die jeweils eine variable Anzahl von Ausführungseinheiten basierend auf der Zielleistung und dem Leistungsfähigkeitsniveau der GPE 410 haben. In einer Ausführungsform sind die Ausführungsressourcen dynamisch skalierbar, sodass Ausführungsressourcen nach Bedarf aktiviert oder deaktiviert werden können.
  • Das Grafikkern-Array 414 ist mit der gemeinsam genutzten Funktionslogik 420 gekoppelt, die mehrere Ressourcen beinhaltet, die zwischen den Grafikkernen in dem Grafikkern-Array gemeinsam genutzt werden. Die gemeinsam genutzten Funktionen innerhalb der gemeinsam genutzten Funktionslogik 420 sind Hardware-Logikeinheiten, die spezialisierte ergänzende Funktionalität für das Grafikkern-Array 414 bereitstellen. In verschiedenen Ausführungsformen beinhaltet die Logik 420 mit gemeinsam genutzter Funktion, ohne darauf beschränkt zu sein, eine Sampler-Logik 421, eine Mathematik-Logik 422 und eine Inter-Thread-Kommunikations (ITC: Inter-Thread Communication)-Logik 423. Zusätzlich implementieren einige Ausführungsformen einen oder mehrere Caches 425 innerhalb der Logik 420 mit gemeinsam genutzter Funktion.
  • Eine gemeinsam genutzte Funktion wird mindestens in einem Fall implementiert, in dem die Anforderung für eine gegebene spezialisierte Funktion für die Aufnahme in das Grafikkern-Array 414 unzureichend ist. Stattdessen wird eine einzige Instanziierung dieser spezialisierten Funktion als eine eigenständige Entität in der gemeinsam genutzten Funktionslogik 420 implementiert und von den Ausführungsressourcen innerhalb des Grafikkern-Arrays 414 gemeinsam genutzt. Der genaue Satz von Funktionen, die von dem Grafikkern-Array 414 gemeinsam genutzt werden und im Grafikkern-Array 414 beinhaltet sind, variiert zwischen den Ausführungsformen. In einigen Ausführungsformen können spezifische gemeinsam genutzte Funktionen innerhalb der gemeinsam genutzten Funktionslogik 420, die extensiv durch das Grafikkern-Array 414 verwendet wird, innerhalb gemeinsam genutzter Funktionslogik 416 innerhalb des Grafikkern-Arrays 414 enthalten sein. In verschiedenen Ausführungsformen kann die gemeinsam genutzte Funktionslogik 416 innerhalb des Grafikkern-Arrays 414 einige oder die gesamte Logik innerhalb der gemeinsam genutzten Funktionslogik 420 beinhalten. In einer Ausführungsform können alle Logikelemente innerhalb der gemeinsam genutzten Funktionslogik 420 innerhalb der gemeinsam genutzten Funktionslogik 416 des Grafikkern-Arrays 414 dupliziert werden. In einer Ausführungsform ist die gemeinsam genutzte Funktionslogik 420 ausgeschlossen, zugunsten der gemeinsam genutzten Funktionslogik 416 innerhalb des Grafikkern-Arrays 414.
  • Ausführungseinheiten
  • Die 5A-5B veranschaulichen eine Thread-Ausführungslogik 500, die ein Array von Verarbeitungselementen beinhaltet, die in einem Grafikprozessorkern gemäß hierin beschriebenen Ausführungsformen eingesetzt werden. Elemente von 5A-5B mit den gleichen Bezugszeichen (oder Namen) wie die Elemente einer beliebigen anderen Figur hierin können auf eine beliebige ähnliche Weise wie der an anderer Stelle hierin beschriebenen arbeiten oder funktionieren, sind aber nicht darauf beschränkt. 5A-5B veranschaulichen einen Überblick über die Thread-Ausführungslogik 500, die Hardware-Logik repräsentieren kann, die mit jedem Unterkern 221A-221F von 2B veranschaulicht ist. 5A repräsentiert eine Ausführungseinheit innerhalb eines Universal-Grafikprozessors, während 5B eine Ausführungseinheit repräsentiert, die innerhalb eines Rechenbeschleunigers verwendet werden kann.
  • Wie in 5A beinhaltet die Thread-Ausführungslogik 500 in einigen Ausführungsformen einen Shader-Prozessor 502, einen Thread-Dispatcher 504, einen Anweisungscache 506, ein skalierbares Ausführungseinheits-Array mit einer Vielzahl an Grafikausführungseinheiten 508A-508N, einen Sampler 510, einen gemeinsam genutzten lokalen Speicher 511, einen Datencache 512 und einen Datenport 514. In einer Ausführungsform kann das skalierbare Ausführungseinheits-Array dynamisch skalieren, indem eine oder mehrere Ausführungseinheiten (z. B. eine beliebige der Grafikausführungseinheiten 508A, 508B, 508C, 508Dbis 508N-1 und 508N) basierend auf den Berechnungsanforderungen einer Arbeitslast aktiviert oder deaktiviert werden. In einer Ausführungsform sind die enthaltenen Komponenten über eine Interconnect-Fabric miteinander verbunden, die mit jeder der Komponenten verknüpft ist. In einigen Ausführungsformen beinhaltet die Thread-Ausführungslogik 500 eine oder mehrere Verbindungen zu Speicher, wie Systemspeicher oder Cache-Speicher, durch eines oder mehrere von dem Anweisungs-Cache 506, dem Daten-Port 514, dem Sampler 510 und den Grafikausführungseinheiten 508A-508N. In einigen Ausführungsformen ist jede Ausführungseinheit (z. B. 508A) eine eigenständige programmierbare Universal-Berechnungseinheit, die in der Lage ist, mehrere gleichzeitige Hardware-Threads auszuführen, während mehrere Datenelemente für jeden Thread parallel verarbeitet werden. In verschiedenen Ausführungsformen ist das Array von Grafikausführungseinheiten 508A-508N skalierbar, um eine beliebige Anzahl einzelner Ausführungseinheiten zu beinhalten.
  • In einigen Ausführungsformen werden die Grafikausführungseinheiten 508A-508N hauptsächlich verwendet, um Shader-Programme auszuführen. Ein Shader-Prozessor 502 kann die verschiedenen Shader-Programme verarbeiten und Ausführungs-Threads, die den Shader-Programmen zugeordnet sind, über einen Thread-Dispatcher 504 versenden. In einer Ausführungsform beinhaltet der Thread-Dispatcher Logik zum Vermitteln von Thread-Initiierungs-Anforderungen von den Grafik- und Medien-Pipelines und Instanziieren der angeforderten Threads auf einer oder mehreren Ausführungseinheit in den Grafikausführungseinheiten 508A-508N. Zum Beispiel kann eine Geometrie-Pipeline Eckpunkt-, Tessellations- oder Geometrie-Shader zum Verarbeiten zu der Thread-Ausführungslogik versenden. In einigen Ausführungsformen kann der Thread-Dispatcher 504 auch Laufzeit-Thread-Erstellungs-Anforderungen von den ausgeführten Shader-Programmen verarbeiten.
  • In einigen Ausführungsformen unterstützen die Ausführungseinheiten 508A-508N einen Anweisungssatz, der native Unterstützung für viele Standard-3D-Grafik-Shader-Anweisungen beinhaltet, so dass Shader-Programme aus Grafikbibliotheken (z. B. Direct 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen Vertex- und Geometrieverarbeitung (z. B. Vertex-Programme, Geometrieprogramme, Vertex-Shader), Pixelverarbeitung (z. B. Pixel-Shader, Fragment-Shader) und Universal-Verarbeitung (z. B. Rechen- und Medien-Shader). Jede der Ausführungseinheiten 508A-508N ist zu einer Mehrfachausgabe von Einzelanweisungs-Mehrfachdaten (SIMD: Single Instruction Multiple Data)-Ausführung fähig und eine Multithread-Operation ermöglicht eine effiziente Ausführungsumgebung in Anbetracht von Speicherzugriffen mit höherer Latenz. Jeder Hardware-Thread innerhalb jeder Ausführungseinheit weist eine dedizierte Registerdatei mit hoher Bandbreite und einen zugeordneten unabhängigen Thread-Zustand auf. Ausführung erfolgt über Mehrfachausgabe pro Takt zu Pipelines, die in der Lage sind zu ganzzahligen Operationen, Gleitkommaoperationen mit einfacher und doppelter Präzision, SIMD-Verzweigungsfähigkeit, logischen Operationen, transzendentalen Operationen und anderen sonstigen Operationen. Während des Wartens auf Daten aus Speicher oder von einer der gemeinsam genutzten Funktionen bewirkt eine Abhängigkeitslogik innerhalb der Ausführungseinheiten 508A-508N, dass ein wartender Thread im Ruhezustand bleibt, bis die angeforderten Daten zurückgegeben wurden. Während sich der wartende Thread im Ruhezustand befindet, können Hardware-Ressourcen für die Verarbeitung von anderen Threads verwendet werden. Zum Beispiel kann eine Ausführungseinheit während einer Verzögerung in Verbindung mit einer Vertex-Shader-Operation Operationen für einen Pixel-Shader, einen Fragment-Shader oder einen anderen Typ von Shader-Programm, einschließlich eines verschiedenen Vertex-Shaders, durchführen. Verschiedene Ausführungsformen können angewendet werden, um eine Ausführung durch Verwendung von Single Instruction Multiple Thread (SIMT) als eine Alternative zur Verwendung von SIMD oder zusätzlich zur Verwendung von SIMD zu verwenden. Eine Bezugnahme auf einen SIMD-Kern oder eine SIMD-Operation kann auch für SIMT gelten, oder kann für SIMD in Kombination mit SIMT gelten.
  • Jede Ausführungseinheit in den Grafikausführungseinheiten 508A-508N arbeitet an Arrays von Datenelementen. Die Anzahl an Datenelementen ist die „Ausführungsgröße“ oder die Anzahl an Kanälen für die Anweisung. Ein Ausführungskanal ist eine logische Einheit der Ausführung für Datenelementzugriff, Maskierung und Ablaufsteuerung innerhalb von Anweisungen. Die Anzahl von Kanälen kann unabhängig von der Anzahl von physischen arithmetischen Logikeinheiten (ALUs), Gleitkommaeinheiten (FPUs) oder anderen Logikeinheiten (z. B. Tensorkerne, Strahlverfolgungskerne usw.) für einen bestimmten Grafikprozessor sein. In einigen Ausführungsformen unterstützen die Grafikausführungseinheiten 508A-508N Ganzzahl- und Gleitkomma-Datentypen.
  • Der Ausführungseinheits-Anweisungssatz beinhaltet SIMD-Anweisungen. Die verschiedenen Datenelemente können als ein gepackter Datentyp in einem Register gespeichert sein, und die Ausführungseinheit verarbeitet die verschiedenen Elemente basierend auf der Datengröße der Elemente. Wenn zum Beispiel an einem 256-Bit breiten Vektor gearbeitet wird, werden die 256 Bits des Vektors in einem Register gespeichert und die Ausführungseinheit arbeitet an dem Vektor als vier separate gepackte 54-Bit-Datenelemente (Datenelemente mit Quad-Word (QW)-Größe), acht separate gepackte 32-Bit-Datenelemente (Datenelemente mit Doppelwort (DW)-Größe), sechzehn separate gepackte 16-Bit-Datenelemente (Datenelemente mit Wort (W)-Größe) oder zweiunddreißig separate 8-Bit-Datenelemente (Datenelemente mit Byte (B)-Größe). Es sind jedoch unterschiedliche Vektorbreiten und Registergrößen möglich.
  • In einer Ausführungsform können eine oder mehrere Ausführungseinheiten zu einer vereinigten Ausführungseinheit 509A-509N mit einer Thread-Steuerlogik (507A-507N) kombiniert werden, die den vereinigten EUs gemein ist. Mehrere EU können zu einer EU-Gruppe vereinigt werden. Jede EU in der vereinigten EU-Gruppe kann konfiguriert sein, um einen separaten SIMD-Hardware-Thread auszuführen. Die Anzahl von EUs in einer vereinigten EU-Gruppe kann je nach Ausführungsformen variieren. Außerdem können verschiedene SIMD-Breiten pro EU durchgeführt werden, einschließlich unter anderem SIMD8, SIMD16 und SIMD32. Jede vereinigte Grafikausführungseinheit 509A-509N beinhaltet mindestens zwei Ausführungseinheiten. Zum Beispiel beinhaltet die vereinigte Ausführungseinheit 509A eine erste EU 1808A, eine zweite EU 1808B und eine Thread-Steuerlogik 507A, die der ersten EU 1808A und der zweiten EU 1808B gemein ist. Die Thread-Steuerlogik 507A steuert Threads, die auf der vereinigten Grafikausführungseinheit 509A ausgeführt werden, wodurch jeder EU innerhalb der vereinigten Ausführungseinheiten 509A-509N ermöglicht wird, unter Verwendung eines gemeinsamen Anweisungszeigerregisters ausgeführt zu werden.
  • Ein oder mehrere interne Anweisungscaches (z. B. 506) sind in der Thread-Ausführungslogik 500 enthalten, um Thread-Anweisungen für die Ausführungseinheiten zwischenzuspeichern. In einigen Ausführungsformen sind ein oder mehrere Daten-Caches (zum Beispiel 512) enthalten, um Thread-Daten während der Thread-Ausführung zwischenzuspeichern. Threads, die auf der Ausführungslogik 500 ausgeführt werden, können auch explizit verwaltete Daten in dem gemeinsam genutzten lokalen Speicher 511 speichern. In einigen Ausführungsformen ist ein Sampler 510 enthalten, um eine Texturabtastung für 3D-Operationen und Medienabtastung für Medienoperationen bereitzustellen. In einigen Ausführungsformen beinhaltet der Sampler 510 spezialisierte Textur- oder Medienabtastfunktionalität, um Textur- oder Mediendaten während des Abtastprozesses zu verarbeiten, bevor die abgetasteten Daten einer Ausführungseinheit bereitgestellt werden.
  • Während der Ausführung senden die Grafik- und Medien-Pipelines Thread-Initiierungsanforderungen an die Thread-Ausführungslogik 500 über Thread-Erstellungs- und - Dispatch-Logik. Sobald eine Gruppe geometrischer Objekte verarbeitet und zu Pixeldaten rasterisiert wurde, wird Pixelprozessorlogik (z. B. Pixel-Shader-Logik, Fragment-Shader-Logik usw.) innerhalb des Shader-Prozessors 502 aufgerufen, um Ausgabeinformationen weiter zu berechnen und zu bewirken, dass Ergebnisse auf Ausgaberoberflächen (z. B. Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.) geschrieben werden. In einigen Ausführungsformen berechnet ein Pixel-Shader oder Fragment-Shader die Werte der verschiedenen Vertex-Attribute, die über das rasterisierte Objekt interpoliert werden sollen. In einigen Ausführungsformen führt die Pixelprozessorlogik innerhalb des Shader-Prozessors 502 dann ein von einer Anwendungsprogrammierungsschnittstelle (API) geliefertes Pixel- oder Fragment-Shader-Programm aus. Um das Shader-Programm auszuführen, versendet der Shader-Prozessor 502 Threads über den Thread-Dispatcher 504 an eine Ausführungseinheit (z. B. 508 A). In einigen Ausführungsformen verwendet der Shader-Prozessor 502 Texturabtastlogik in dem Sampler 510, um auf Texturdaten in Texturabbildungen zuzugreifen, die in dem Speicher gespeichert sind. Arithmetische Operationen an den Texturdaten und den Eingabegeometriedaten berechnen Pixelfarbdaten für jedes geometrische Fragment oder verwerfen ein oder mehrere Pixel von einer weiteren Verarbeitung.
  • In einigen Ausführungsformen stellt der Daten-Port 514 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 500 bereit, um verarbeitete Daten an den Speicher zur weiteren Verarbeitung auf einer Grafikprozessorausgabe-Pipeline auszugeben. In einigen Ausführungsformen beinhaltet der Daten-Port 514 einen oder mehrere Cache-Speicher (zum Beispiel Daten-Cache 512) oder ist mit diesen gekoppelt, um Daten für Speicherzugriff über den Daten-Port zwischenzuspeichern.
  • In einer Ausführungsform kann die Ausführungslogik 500 auch Strahlverfolger 505 beinhalten, die Strahlverfolgungsbeschleunigungsfunktionalität bereitstellen können. Der Strahlverfolger 505 kann einen Strahlverfolgungs-Anweisungssatz unterstützen, der Anweisungen/Funktionen für die Strahlerzeugung beinhaltet. Der Strahlverfolgungs-Anweisungssatz kann dem Strahlverfolgungs-Anweisungssatz, der von den Strahlverfolgungskernen 245 in 2C unterstützt wird, ähneln oder von diesem verschieden sein.
  • 5b veranschaulicht beispielhafte interne Details einer Ausführungseinheit 508 gemäß Ausführungsformen. Eine Grafikausführungseinheit 508 kann eine Anweisungsabrufeinheit 537, ein Allgemeinregisterbank-Array (GRF) 524, ein Architekturregisterbank-Array (ARF) 526, einen Thread-Arbiter 522, eine Sendeeinheit 530, eine Verzweigungseinheit 532, einen Satz von SIMD-Gleitkommaeinheiten (FPUs) 534 und in einer Ausführungsform einen Satz von dedizierten Ganzzahl-SIMD-ALUS 535 beinhalten. Die GRF 524 und die ARF 526 beinhalten den Satz von Allgemeinregisterdateien und Architekturregisterdateien, die mit jedem simultanen Hardware-Thread assoziiert sind, der in der Grafikausführungseinheit 508 aktiv sein kann. In einer Ausführungsform wird der Architekturzustand pro Thread in der ARF 526 beibehalten, während Daten, die während der Thread-Ausführung verwendet werden, in der GRF 524 gespeichert werden. Der Ausführungszustand jedes Threads, einschließlich der Anweisungszeiger für jeden Thread, kann in Thread-spezifischen Registern im ARF 526 gehalten werden.
  • In einer Ausführungsform weist die Grafikausführungseinheit 508 eine Architektur auf, die eine Kombination von Simultaneous Multi-Threading (SMT) und feinkörnigem Interleaved Multi-Threading (IMT) ist. Die Architektur hat eine modulare Konfiguration, die zur Gestaltungszeit basierend auf einer Zielanzahl von simultanen Threads und einer Anzahl von Registern pro Ausführungseinheit fein abgestimmt werden kann, wobei Ressourcen der Ausführungseinheit über die zum Ausführen mehrerer simultaner Threads verwendete Logik hinweg aufgeteilt werden. Die Anzahl von logischen Threads, die durch die Grafikausführungseinheit 508 ausgeführt werden können, ist nicht auf die Anzahl von Hardware-Threads beschränkt, und jedem Hardware-Thread können mehrere logische Threads zugewiesen werden.
  • In einer Ausführungsform kann die Grafikausführungseinheit 508 mehrere Anweisungen gemeinsam ausgeben, die jeweils unterschiedliche Anweisungen sein können. Der Thread-Arbiter 522 der Grafikausführungseinheit 508 kann die Anweisungen an entweder die Sendeeinheit 530, die Verzweigungseinheit 532 oder die SIMD-FPU(s) 534 zur Ausführung versenden. Jeder Ausführungs-Thread kann auf 128 Universal-Register innerhalb des GRF 524 zugreifen, wobei jedes Register 32 Bytes speichern kann, auf die als ein SIMD-8-Element-Vektor von 32-Bit-Datenelementen zugegriffen werden kann. In einer Ausführungsform hat jeder Ausführungseinheits-Thread Zugriff auf 4 KBytes innerhalb der GRF 524, obwohl Ausführungsformen nicht darauf beschränkt sind, und mehr oder weniger Registerressourcen in anderen Ausführungsformen bereitgestellt werden können. In einer Ausführungsform wird die Grafikausführungseinheit 508 in sieben Hardware-Threads partitioniert, die unabhängig Berechnungsoperationen ausführen können, obwohl die Anzahl der Threads pro Ausführungseinheit auch gemäß Ausführungsformen variieren kann. Zum Beispiel werden in einer Ausführungsform bis zu 16 Hardware-Threads unterstützt. In einer Ausführungsform, in der sieben Threads auf 4 KBytes zugreifen können, kann die GRF 524 insgesamt 28 KBytes speichern. Wo 16 Threads auf 4KBytes zugreifen können, kann die GRF 524 insgesamt 64KBytes speichern. Flexible Adressierungsmodi können es ermöglichen, dass Register zusammen adressiert werden, um effektiv breitere Register zu erzeugen, oder gleichmäßig beabstandete rechteckige Blockdatenstrukturen darzustellen.
  • In einer Ausführungsform werden Speicheroperationen, Sampleroperationen und andere Systemkommunikationen mit längerer Latenz über „Send‟-Anweisungen verteilt, die von der Nachrichtenweiterleitungs-Sendeeinheit 530 ausgeführt werden. In einer Ausführungsform werden Verzweigungsanweisungen an eine dedizierte Verzweigungseinheit 532 verteilt, um SIMD-Divergenz und eventuelle Konvergenz zu ermöglichen.
  • In einer Ausführungsform beinhaltet die Grafikausführungseinheit 508 eine oder mehrere SIMD-Gleitkommaeinheiten (FPU(s)) 534, um Gleitkommaoperationen durchzuführen. In einer Ausführungsform unterstützen die FPU(s) 534 auch Ganzzahlberechnung. In einer Ausführungsform können die FPU(s) 534 SIMD bis zu einer Anzahl M 32-Bit-Gleitkomma (oder Ganzzahl)-Operationen ausführen oder SIMD bis zu 2M von 16-Bit-Ganzzahl- oder 16-Bit-Gleitkommaoperationen ausführen. In einer Ausführungsform bietet mindestens eine der FPU(s) erweiterte Mathefähigkeiten, um transzendente Mathefunktionen mit hohem Durchsatz und 54-Bit-Gleitkomma mit doppelter Präzision zu unterstützen. In einigen Ausführungsformen ist auch eine Gruppe von 8-Bit-Ganzzahl-SIMD-ALUs 535 vorhanden und diese kann spezifisch optimiert sein, um Operationen durchzuführen, die Berechnungen für maschinelles Lernen zugeordnet sind.
  • In einer Ausführungsform können Arrays mehrerer Instanzen der Grafikausführungseinheit 508 in einer Grafik-Unterkerngruppierung (z. B. eines Sub-Slice) instanziiert sein. Zur Skalierbarkeit können Produktarchitekten die exakte Anzahl an Ausführungseinheiten pro Unterkerngruppierung wählen. In einer Ausführungsform kann die Ausführungseinheit 508 Anweisungen über eine Vielzahl von Ausführungskanälen ausführen. In einer weiteren Ausführungsform wird jeder Thread, der auf der Grafikausführungseinheit 508 ausgeführt wird, auf einem anderen Kanal ausgeführt.
  • 6 veranschaulicht eine zusätzliche Ausführungseinheit 600 gemäß einer Ausführungsform. Die Ausführungseinheit 600 kann eine rechenoptimierte Ausführungseinheit zur Verwendung in zum Beispiel einer Rechen-Engine-Kachel 340A-340D wie in 3C sein, ist aber als solche nicht beschränkt. Varianten der Ausführungseinheit 600 können auch in einer Grafik-Engine-Kachel 310A-310D wie in 3B verwendet werden. In einer Ausführungsform beinhaltet die Ausführungseinheit 600 eine Thread-Steuereinheit 601, eine Thread-Zustandseinheit 602, eine Anweisungsabruf-/-vorabrufeinheit 603 und eine Anweisungsdecodiereinheit 604. Die Ausführungseinheit 600 beinhaltet zusätzlich eine Registerdatei 606, die Register speichert, die Hardware-Threads innerhalb der Ausführungseinheit zugewiesen sein können. Die Ausführungseinheit 600 beinhaltet zusätzlich eine Sendeeinheit 607 und eine Verzweigungseinheit 608. Bei einer Ausführungsform können die Sendeeinheit 607 und die Verzweigungseinheit 608 ähnlich wie die Sendeeinheit 530 und eine Verzweigungseinheit 532 des Grafikausführungseinheit 508 aus 5B arbeiten.
  • Die Ausführungseinheit 600 beinhaltet auch eine Recheneinheit 610, die mehrere unterschiedliche Arten von Funktionseinheiten beinhaltet. Die Recheneinheit 610 kann eine ALU 611, ein systolisches Array 612 und eine Mathematikeinheit 613 einschließen. Die ALU 611 schließt ein Array von arithmetischen Logikeinheiten ein. Die ALU 611 kann konfiguriert sein, um 64-Bit-, 32-Bit- und 16-Bit-Ganzzahl- und Gleitkommaoperationen über mehrere Verarbeitungsspuren und Datenkanäle und für mehrere Hardware- und/oder Software-Threads durchzuführen. Die ALU 611 kann Ganzzahl- und Gleitkommaoperationen gleichzeitig durchführen (z. B. innerhalb desselben Taktzyklus).
  • Das systolische Array 612 beinhaltet ein W breites und D tiefes Netzwerk von Datenverarbeitungseinheiten, die verwendet werden können, um Vektor- oder andere datenparallele Operationen auf eine systolische Weise durchzuführen. In einer Ausführungsform kann das systolische Array 612 konfiguriert sein, um verschiedene Matrixoperationen durchzuführen, einschließlich Operationen für ein Skalarprodukt, ein Außenprodukt und eine allgemeine Matrix-Matrix-Multiplikation (GEMM). In einer Ausführungsform unterstützt das systolische Array 612 16-Bit-Gleitkommaoperationen sowie 8-Bit-, 4-Bit-, 2-Bit- und binäre Ganzzahloperationen. Das systolische Array 612 kann konfiguriert sein, spezifische Maschinenlernoperationen zusätzlich zu Matrixmultiplikationsoperationen zu beschleunigen. In solchen Ausführungsformen kann das systolische Array 612 mit Unterstützung für das bfloat-16-Bit-Gleitkommaformat (Brain-Gleitkomma-16-Bit-Gleitkommaformat) oder ein Tensor-Gleit-32-Bit-Gleitkommaformat (TF32) konfiguriert sein, die unterschiedliche Anzahlen von Mantissen- und Exponentenbits in Bezug auf Formate des Institute of Electrical and Electronics Engineers (IEEE) 754 aufweisen.
  • Das systolische Array 612 weist Hardware auf, um Sparse-Matrixoperationen zu beschleunigen. In einer Ausführungsform können Multiplikationsoperationen für Sparse-Gebiete von Eingabedaten auf der Verarbeitungselementebene umgangen werden, indem Multiplikationsoperationen übersprungen werden, die einen Nullwertoperanden aufweisen. In einer Ausführungsform kann eine Dünnbesetzung innerhalb von Eingabematrizen detektiert werden, und Operationen mit bekannten Ausgabewerten können umgangen werden, bevor sie an die Verarbeitungselemente des systolischen Arrays 612 übermittelt werden. Zusätzlich dazu kann das Laden von Nullwertoperanden in die Verarbeitungselemente umgangen werden und die Verarbeitungselemente können konfiguriert sein, um Multiplikationen an den Eingabeelementen ungleich Null durchzuführen. Die Ausgabe kann in einem komprimierten (z. B. dichten) Format mit zugeordneten Dekomprimierungs- oder Decodierungsmetadaten generiert werden. Die Ausgabe kann im komprimierten Format zwischengespeichert werden. Die Ausgabe kann im komprimierten Format beibehalten werden, wenn sie in lokalen Speicher oder Hostsystemspeicher geschrieben wird. Die Ausgabe kann auch dekomprimiert werden, bevor sie in lokalen Speicher oder Hostsystemspeicher geschrieben wird.
  • In einer Ausführungsform beinhaltet das systolische Array 612 Hardware, um Operationen auf Sparse-Daten mit einer komprimierten Repräsentation zu ermöglichen. Eine komprimierte Repräsentation einer Sparse-Matrix speichert Werte ungleich null und Metadaten, welche die Positionen der Werte ungleich null innerhalb der Matrix identifizieren. Beispielhafte komprimierte Repräsentationen beinhalten unter anderem komprimierte Tensorrepräsentationen, wie etwa Compressed-Sparse-Row (CSR)-, Compressed-Sparse-Column(CSC)-, Compressed-Sparse-Fiber(CSF)-Repräsentationen. Eine Unterstützung für komprimierte Repräsentationen ermöglicht, dass Operationen ein einer Eingabe in einem komprimierten Tensorformat durchgeführt werden, ohne dass die komprimierte Repräsentation dekomprimiert oder decodiert werden muss. In einer solchen Ausführungsform können Operationen nur an Eingabewerten ungleich null durchgeführt werden und die resultierenden Ausgabewerte ungleich null können in eine Ausgabematrix abgebildet werden. In einigen Ausführungsformen wird Hardwareunterstützung auch für maschinenspezifische verlustfreie Datenkomprimierungsformate bereitgestellt, die verwendet werden, wenn Daten innerhalb von Hardware oder über Systembusse hinweg übertragen werden. Solche Daten können in einem komprimierten Format für Sparse-Eingabedaten beibehalten werden, und das systolische Array 612 kann die komprimierten Metadaten für die komprimierten Daten verwenden, um zu ermöglichen, dass Operationen nur auf Werten ungleich null durchgeführt werden, oder um zu ermöglichen, dass Blöcke von Nulldateneingaben für Multiplikationsoperationen übersprungen werden.
  • In einer Ausführungsform kann eine Mathematikeinheit 613 enthalten sein, um einen bestimmten Teilsatz von mathematischen Operationen auf effiziente Weise und mit niedrigerer Energie als die ALU 611 durchzuführen. Die Mathematikeinheit 613 kann eine Variante einer Mathematik-Logik beinhalten, die in einer Logik mit gemeinsam genutzter Funktion einer Grafikverarbeitungs-Engine gefunden werden kann, die durch andere Ausführungsformen bereitgestellt wird (z. B. Mathematik-Logik 422 der Logik mit gemeinsam genutzter Funktion 420 von 4). In einer Ausführungsform kann die Mathematikeinheit 613 konfiguriert sein, um 32-Bit- und 64-Bit-Gleitkommaoperationen durchzuführen.
  • Die Thread-Steuereinheit 601 beinhaltet Logik zum Steuern der Ausführung von Threads innerhalb der Ausführungseinheit. Die Thread-Steuereinheit 601 kann Thread-Arbitrierungslogik beinhalten, um die Ausführung von Threads innerhalb der Ausführungseinheit 600 zu starten, zu stoppen und zu präemptieren. Die Thread-Zustandseinheit 602 kann verwendet werden, um Thread-Zustand für Threads zu speichern, die zugewiesen sind, um auf der Ausführungseinheit 600 ausgeführt zu werden. Das Speichern des Thread-Zustands in der Ausführungseinheit 600 ermöglicht die schnelle Präemption von Threads, wenn diese Threads blockiert oder inaktiv werden. Die Anweisungsabruf-/-vorabrufeinheit 603 kann Anweisungen von einem Anweisungs-Cache von Ausführungslogik einer höheren Ebene (z. B. dem Anweisungs-Cache 506, wie in 5A) abrufen. Die Anweisungsabruf-/-vorabrufeinheit 603 kann auch Vorabrufanforderungen für Anweisungen, die in den Anweisungs-Cache geladen werden sollen, basierend auf einer Analyse von aktuell ausgeführten Threads ausgeben. Die Anweisungsdecodiereinheit 604 kann zum Decodieren von Anweisungen verwendet werden, die durch die Recheneinheiten ausgeführt werden sollen. In einer Ausführungsform kann die Anweisungsdecodiereinheit 604 als ein sekundärer Decoder zum Decodieren komplexer Anweisungen in zugehörige Mikrooperationen verwendet werden.
  • Die Ausführungseinheit 600 beinhaltet zusätzlich eine Registerdatei 606, die von Hardware-Threads verwendet werden kann, die auf der Ausführungseinheit 600 ausgeführt werden. Register in der Registerdatei 606 können über die Logik verteilt werden, die verwendet wird, um mehrere gleichzeitige Threads innerhalb der Recheneinheit 610 der Ausführungseinheit 600 auszuführen. Die Anzahl von logischen Threads, die durch die Grafikausführungseinheit 600 ausgeführt werden können, ist nicht auf die Anzahl von Hardware-Threads beschränkt, und jedem Hardware-Thread können mehrere logische Threads zugewiesen werden. Die Größe der Registerdatei 606 kann zwischen Ausführungsformen basierend auf der Anzahl von unterstützten Hardware-Threads variieren. In einer Ausführungsform kann eine Registerumbenennung verwendet werden, um dynamisch Register zu Hardwarethreads zuzuteilen.
  • 7 ist ein Blockdiagramm, das die Grafikprozessoranweisungsformate 700 gemäß einigen Ausführungsformen veranschaulicht. In einer oder mehreren Ausführungsformen unterstützen die Grafikprozessorausführungseinheiten einen Anweisungssatz mit Befehlen in mehreren Formaten. Die Kästchen mit durchgezogenen Linien veranschaulichen die Komponenten, die allgemein in einer Ausführungseinheitsanweisung enthalten sind, während die gestrichelten Linien Komponenten beinhalten, die optional sind, oder die nur in einem Untersatz der Anweisungen enthalten sind. In einigen Ausführungsformen besteht das beschriebene und veranschaulichte Grafikprozessoranweisungsformat 700 in Makroanweisungen, insofern, als es sich um Anweisungen handelt, die an die Ausführungseinheit geliefert werden, im Gegensatz zu Mikrooperationen, die aus einer Anweisungsdecodierung resultieren, sobald die Anweisung verarbeitet wird. Somit kann eine einzelne Anweisung bewirken, dass Hardware mehrere Mikrooperationen durchführt.
  • In einigen Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten nativ Anweisungen in einem 128-Bit-Anweisungsformat 710. Ein kompaktes 64-Bit-Anweisungsformat 730 ist für einige Anweisungen verfügbar, basierend auf der ausgewählten Anweisung, der Anweisungsoptionen und der Anzahl der Operanden. Das native 128-Bit-Anweisungsformat 710 stellt Zugriff auf alle Anweisungsoptionen bereit, während einige Optionen und Operationen in dem 64-Bit-Format 730 beschränkt sind. Die nativen Anweisungen, die in dem 64-Bit-Format 730 verfügbar sind, variieren je nach Ausführungsform. In einigen Ausführungsformen wird die Anweisung teilweise durch Verwenden eines Satzes von Indexwerten in Indexfeld 713 komprimiert. Die Ausführungseinheits-Hardware bezieht sich auf einen Satz von Komprimierungstabellen basierend auf den Indexwerten, und verwendet die Ausgaben der Komprimierungstabellen zum Rekonstruieren einer nativen Anweisung in dem 128-Bit-Anweisungsformat 710. Andere Größen und Formate von Anweisungen können verwendet werden.
  • Für jedes Format definiert der Anweisungs-Opcode 712 die Operation, die Ausführungseinheit durchführen soll. Die Ausführungseinheiten führen jede Anweisung parallel über die mehreren Datenelemente jedes Operanden hinweg aus. Zum Beispiel führt die Ausführungseinheit in Reaktion auf eine Additionsanweisung eine simultane Additionsoperation über jeden Farbkanal hinweg durch, der ein Texturelement oder ein Bildelement repräsentiert. Standardmäßig führt die Ausführungseinheit jede Anweisung über alle Datenkanäle der Operanden hinweg durch. In einigen Ausführungsformen ermöglicht das Anweisungssteuerfeld 714 die Kontrolle über bestimmte Ausführungsoptionen, wie Kanalauswahl (z. B. Prädikation) und Datenkanalreihenfolge (z. B. Swizzeln). Für Anweisungen im 128-Bit-Anweisungsformat 710 beschränkt ein exec-Größen-Feld 716 die Anzahl von Datenkanälen, die parallel ausgeführt werden. In einigen Ausführungsformen ist das exec-Größen-Feld 716 nicht zur Verwendung in dem kompakten 64-Bit-Anweisungsformat 730 verfügbar.
  • Einige Ausführungseinheitsanweisungen weisen bis zu drei Operanden einschließlich zwei Quelloperanden src0 720, src1 722 und einem Ziel 718 auf. In einigen Ausführungsformen unterstützen die Ausführungseinheiten Anweisungen mit doppeltem Ziel, wobei eines der Ziele impliziert ist. Datenmanipulationsanweisungen können einen dritten Quelloperanden (z. B. SRC2 724) aufweisen, wobei der Anweisungs-Opcode 712 die Anzahl von Quelloperanden bestimmt. Ein letzter Quelloperand eines Anweisungs kann ein sofortiger (z. B. fest codierter) Wert sein, der mit der Anweisung weitergegeben wird.
  • In einigen Ausführungsformen beinhaltet das 128-Bit-Anweisungsformat 710 Zugriffs-/Adressmodusfeld 726, das zum Beispiel spezifiziert, ob ein direkter Registeradressierungsmodus oder ein indirekter Registeradressierungsmodus verwendet wird. Wenn der direkte Registeradressierungsmodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden direkt durch Bits in der Anweisung bereitgestellt.
  • In einigen Ausführungsformen beinhaltet das 128-Bit-Anweisungsformat 710 ein Zugriff/Adressmodusfeld 726, das einen Adressmodus und/oder einen Zugriffsmodus für die Anweisung spezifiziert. In einer Ausführungsform wird der Zugriffsmodus verwendet, um eine Datenzugriffsausrichtung für die Anweisung zu definieren. Einige Ausführungsformen unterstützen Zugriffsmodi einschließlich eines ausgerichteten 16-Byte-Zugriffsmodus und eines ausgerichteten 1-Byte-Zugriffsmodus, wobei die Byteausrichtung des Zugriffsmodus die Zugriffsausrichtung der Anweisungsoperanden bestimmt. Beispielsweise kann der Befehl, wenn er sich in einem ersten Modus befindet, eine byteausgerichtete Adressierung für Quell- und Zieloperanden verwenden, und wenn er sich in einem zweiten Modus befindet, kann der Befehl eine 16-byteausgerichtete Adressierung für alle Quell- und Zieloperanden verwenden.
  • In einer Ausführungsform bestimmt der Adressmodusabschnitt des Zugriffs-/Adressmodusfelds 726, ob die Anweisung direkte oder indirekte Adressierung verwenden soll. Wenn der direkte Registeradressierungsmodus verwendet wird, stellen Bits in der Anweisung die Registeradresse eines oder mehrerer Operanden direkt bereit. Wenn der indirekte Registeradressierungsmodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressregisterwert und einem Adress-Immediate-Feld in der Anweisung berechnet werden.
  • In einigen Ausführungsformen werden Anweisungen basierend auf Bitfeldern des Opcodes 712 gruppiert, um die Opcode-Decodierung 740 zu vereinfachen. Für einen 8-Bit-Opcode ermöglichen Bits 4, 5 und 6 der Ausführungseinheit, den Typ von Opcode zu bestimmen. Die gezeigte genaue Opcode-Gruppierung ist lediglich ein Beispiel. In einigen Ausführungsformen beinhaltet eine Verschiebungs- und Logik-Opcode-Gruppe 742 Datenverschiebungs- und Logikbefehle (z. B. Verschieben (mov), Vergleichen (cmp)). In einigen Ausführungsformen nutzt die Bewegungs- und -Logikgruppe 742 die fünf höchstwertigen Bits (Most Significant Bits - MSB) gemeinsam, wobei Bewegungsanweisungen (mov) die Form von 0000xxxxb haben, und Logikanweisungen die Form von 0001xxxxb haben. Eine Flusssteueranweisungsgruppe 744 (z. B. Aufrufen, Springen (jmp)) beinhaltet Anweisungen in der Form von 0010xxxxb (z. B. 0x20). Eine Gruppe für sonstige Anweisungen 746 beinhaltet eine Mischung von Anweisungen, einschließlich Synchronisierungsanweisungen (z. B. Warten, Senden) in Form von 0011xxxxb (z. B. 0x30). Eine Parallelmathematik-Anweisungsgruppe 748 beinhaltet komponentenweise arithmetische Anweisungen (z. B. Addieren, Multiplizieren (mul)) in Form von 0100xxxxb (z. B. 0x40). Die Parallelmathematik-Anweisungsgruppe 748 führt die arithmetischen Operationen parallel über Datenkanäle hinweg durch. Die vektormathematische Gruppe 750 beinhaltet arithmetische Anweisungen (z. B. dp4) in der Form 0101xxxxb (z. B. 0x50). Die Vektormathematische Gruppe führt Arithmetik, wie zum Beispiel Skalarproduktberechnungen, an Vektoroperanden aus. Die veranschaulichte Opcode-Decodierung 740 kann in einer Ausführungsform verwendet werden, um zu bestimmen, welcher Teil einer Ausführungseinheit verwendet wird, um eine decodierte Anweisung auszuführen. Zum Beispiel können einige Anweisungen als systolische Anweisungen bestimmt werden, die durch ein systolisches Array durchgeführt werden. Andere Anweisungen, wie Strahlverfolgungsanweisungen (nicht gezeigt), können an einen Strahlverfolgungskern oder eine Strahlverfolgungslogik innerhalb eines Slice oder einer Partition von Ausführungslogik weitergeleitet werden.
  • Grafik-Pipeline
  • 8 ist ein Blockdiagramm einer anderen Ausführungsform eines Grafikprozessors 800. Elemente aus 8, welche die gleichen Bezugsziffern (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin aufweisen, können auf eine beliebige Art und Weise, die der hier an anderer Stelle beschriebenen ähnelt, arbeiten oder funktionieren, sind jedoch nicht darauf beschränkt.
  • In einigen Ausführungsformen beinhaltet der Grafikprozessor 800 eine Geometrie-Pipeline 820, eine Medien-Pipeline 830, eine Anzeige-Engine 840, eine Thread-Ausführungslogik 850 und eine Renderausgabe-Pipeline 870. In einigen Ausführungsformen ist der Grafikprozessor 800 ein Grafikprozessor innerhalb eines Mehrkernverarbeitungssystems, das einen oder mehrere Universal-Verarbeitungskerne beinhaltet. Der Grafikprozessor wird durch Registerschreibungen in ein oder mehrere Steuerregister (nicht gezeigt) oder über Befehle gesteuert, die über ein Ring-Interconnect 802 an den Grafikprozessor 800 ausgegeben werden. In einigen Ausführungsformen koppelt das Ring-Interconnect 802 den Grafikprozessor 800 mit anderen Verarbeitungskomponenten, wie zum Beispiel anderen Grafikprozessoren oder Universalprozessoren. Befehle von dem Ring-Interconnect 802 werden durch Befehls-Streamer 803 interpretiert, der Anweisungen an individuelle Komponenten der Geometrie-Pipeline 820 oder der Medien-Pipeline 830 liefert.
  • In einigen Ausführungsformen weist der Befehls-Streamer 803 die Operation von Vertex-Abrufer 805 an, der Vertex-Daten von dem Speicher liest und Vertex-Verarbeitungsbefehle ausführt, die durch den Befehl-Streamer 803 bereitgestellt werden. In einigen Ausführungsformen stellt der Vertex-Abrufer 805 Vertex-Daten an Vertex-Shader 807 bereit, der Koordinatenraumtransformationen und Beleuchtungsoperationen an jedem Vertex durchführt. In einigen Ausführungsformen führen der Vertex-Abrufer 805 und der Vertex-Shader 807 Vertex-Verarbeitungsanweisungen aus, indem sie Ausführungs-Threads über Thread-Verteiler 831 an Ausführungseinheiten 852A-852B verteilen.
  • In einigen Ausführungsformen sind die Ausführungseinheiten 852A-852B ein Array von Vektorprozessoren, die einen Anweisungssatz zum Durchführen von Grafik- und Medienoperationen aufweisen. In einigen Ausführungsformen haben die Ausführungseinheiten 852A-852B angehängten L1-Cache 851, der für jedes Array spezifisch ist, oder zwischen den Arrays gemeinsam genutzt wird. Der Cache kann als ein Daten-Cache, ein Anweisungs-Cache oder ein einzelner Cache konfiguriert sein, der partitioniert ist, um Daten und Anweisungen in unterschiedlichen Partitionen zu enthalten.
  • In einigen Ausführungsformen beinhaltet die Geometrie-Pipeline 820 Tessellationskomponenten zum Durchführen von hardware-beschleunigter Tessellation von 3D-Objekten. In einigen Ausführungsformen konfiguriert programmierbarer Hüllen-Shader 811 die Tessellationsoperationen. Ein programmierbarer Domänen-Shader 817 stellt eine Backend-Bewertung der Tessellationsausgabe bereit. Ein Tessellator 813 arbeitet in Richtung des Hull-Shaders 811 und enthält eine Speziallogik zum Generieren eines Satzes detaillierter geometrischer Objekte basierend auf einem groben geometrischen Modell, das als Eingabe in die Geometrie-Pipeline 820 bereitgestellt wird. Falls keine Tessellation verwendet wird, können bei einigen Ausführungsformen Tessellationskomponenten (z. B. Hull-Shader 811, Tesselator 813 und Domänen-Shader 817) umgangen werden. Die Tessellationskomponenten können basierend auf Daten arbeiten, die von dem Vertex-Shader 807 empfangen werden.
  • In einigen Ausführungsformen können vollständige geometrische Objekte durch einen Geometrie-Shader 819 über einen oder mehrere Threads verarbeitet werden, die an die Ausführungseinheiten 852A-852B vergeben werden, oder können direkt zum Clipper 829 weitergehen. In einigen Ausführungsformen arbeitet der Geometrie-Shader an ganzen geometrischen Objekten anstatt an Vertices oder Patches von Vertices wie in vorherigen Stufen der Grafik-Pipeline. Falls die Tessellation deaktiviert ist, empfängt der Geometrie-Shader 819 eine Eingabe vom Vertex-Shader 807. In einigen Ausführungsformen ist der Geometrie-Shader 819 durch ein Geometrie-Shader-Programm dafür programmierbar, eine Geometrietessellation durchzuführen, falls die Tessellationseinheiten deaktiviert sind.
  • Vor der Rasterisierung verarbeitet ein Clipper 829 Vertexdaten. Der Clipper 829 kann ein Festfunktions-Clipper oder ein programmierbarer Clipper sein, der Clipping- und Geometrie-Shader-Funktionen hat. In einigen Ausführungsformen verteilt Rasterisierungs- und Tiefenprüfungskomponente 873 in der Render-Ausgabe-Pipeline 870 Pixel-Shader, um die geometrischen Objekte in Darstellungen pro Pixel umzuwandeln. In einigen Ausführungsformen ist Pixel-Shader-Logik in der Thread-Ausführungslogik 850 enthalten. In einigen Ausführungsformen kann eine Anwendung die Rasterisierungs- und Tiefenprüfungskomponente 873 umgehen, und über Ausgabe-Streaming-Einheit 823 auf nicht rasterisierte Vertex-Daten zugreifen.
  • Der Grafikprozessor 800 weist einen Interconnect-Bus, eine Interconnect-Fabric oder einen anderen Interconnect-Mechanismus auf, der eine Daten- und Nachrichtenweiterleitung zwischen den Hauptkomponenten des Prozessors ermöglicht. In einigen Ausführungsformen verbinden sich die Ausführungseinheiten 852A-852B und die zugehörigen Logikeinheiten (zum Beispiel der L1-Cache 851, Sampler 854, Textur-Cache 858 usw.) über Daten-Port 856, um Speicherzugriff durchzuführen und mit Render-Ausgabe-Pipeline-Komponenten des Prozessors zu kommunizieren. In einigen Ausführungsformen haben der Sampler 854, die Caches 851, 858 und die Ausführungseinheiten 852A-852B jeweils separate Speicherzugriffspfade. In einer Ausführungsform kann der Textur-Cache 858 auch als Sampler-Cache konfiguriert sein.
  • In einigen Ausführungsformen enthält die Render-Ausgabe-Pipeline 870 eine Rasterisierungs- und Tiefenprüfungskomponente 873, die vertexbasierte Objekte in eine zugehörige pixelbasierte Darstellung umwandelt. In einigen Ausführungsformen beinhaltet die Rasterisierungslogik eine Fenster-/Maskiereinheit zum Ausführen einer Dreiecks- und Linienrasterisierung mit fester Funktion. Zugehöriger Render-Cache 878 und Tiefen-Cache 879 sind in einigen Ausführungsformen ebenfalls verfügbar. Pixeloperationskomponente 877 führt pixelbasierte Operationen an den Daten aus, obwohl in einigen Fällen Pixeloperationen, die mit 2D-Operationen assoziiert sind (zum Beispiel Bitblockbildübertragungen mit Mischen), von 2D-Engine 841 ausgeführt werden, oder zur Anzeigezeit durch Anzeigesteuerung 843 durch Verwenden von Overlay-Anzeigeebenen ersetzt werden. In einigen Ausführungsformen ist gemeinsam genutzter L3-Cache 875 für alle Grafikkomponenten verfügbar, wobei das gemeinsame Nutzen von Daten ohne die Verwendung von Hauptsystemspeicher ermöglicht wird.
  • In einigen Ausführungsformen beinhaltet die Medien-Pipeline 830 eine Medien-Engine 837 und ein Video-Front-End 834. In einigen Ausführungsformen empfängt das Video-Frontend 834 Pipeline-Befehle vom Befehls-Streamer 803. In einigen Ausführungsformen beinhaltet die Medien-Pipeline 830 einen separaten Befehls-Streamer. In einigen Ausführungsformen verarbeitet das Video-Frontend 834 Medienbefehle, bevor der Befehl an die Medien-Engine 837 gesendet wird. In einigen Ausführungsformen beinhaltet die Medien-Engine 837 eine Thread-Erstell-Funktionalität, um Threads zum Versenden an die Thread-Ausführungslogik 850 über den Thread-Verteiler 831 zu erstellen.
  • In einigen Ausführungsformen beinhaltet der Grafikprozessor 800 eine Anzeige-Engine 840. In manchen Ausführungsformen befindet sich die Anzeige-Engine 840 außerhalb des Prozessors 800 und ist mit dem Grafikprozessor über das Ring-Interconnect 802 oder einen anderen Interconnect-Bus oder -Fabric gekoppelt. In einigen Ausführungsformen beinhaltet die Anzeige-Engine 840 eine 2D-Engine 841 und eine Anzeigesteuerung 843. In einigen Ausführungsformen beinhaltet die Anzeige-Engine 840 Speziallogik, die in der Lage ist, unabhängig von der 3D-Pipeline zu arbeiten. In manchen Ausführungsformen ist die Anzeigesteuerung 843 mit einer Anzeigevorrichtung (nicht gezeigt) gekoppelt, die eine systemintegrierte Anzeigevorrichtung, wie in einem Laptop-Computer, oder eine externe Anzeigevorrichtung, die über einen Anzeigevorrichtungsverbinder angebracht ist, sein kann.
  • In einigen Ausführungsformen sind die Geometrie-Pipeline 820 und die Medien-Pipeline 830 konfigurierbar, um Operationen basierend auf mehreren Grafik- und Medienprogrammierschnittstellen durchzuführen, und sind für keine Anwendungsprogrammierschnittstelle (API) spezifisch. In einigen Ausführungsformen übersetzt Treibersoftware für den Grafikprozessor API-Aufrufe, die für eine bestimmte Grafik- oder Medienbibliothek spezifisch sind, in Befehle, die vom Grafikprozessor verarbeitet werden können. In einigen Ausführungsformen wird Unterstützung für die Open Graphics Library (OpenGL), Open Computing Language (OpenCL) und/oder Vulkan Graphics und Computing API, alle von der Khronos Group, bereitgestellt. In einigen Ausführungsformen kann Unterstützung auch für die Direc3D-Bibliothek von der Microsoft Corporation bereitgestellt werden. In einigen Ausführungsformen kann eine Kombination dieser Bibliotheken unterstützt werden. Unterstützung kann auch für die Open Source Computer Vision Library (OpenCV) bereitgestellt werden. Eine zukünftige API mit kompatibler 3D-Pipeline würde auch unterstützt werden, wenn eine Abbildung von der Pipeline der zukünftigen API auf die Pipeline des Grafikprozessors erfolgen kann.
  • Grafik-Pipeline-Programmierung
  • 9A ist ein Blockdiagramm, das ein Grafikprozessor-Befehlsformat 900, das zum Programmieren von Grafikverarbeitungspipelines verwendet werden kann, gemäß einigen Ausführungsformen veranschaulicht. 9B ist ein Blockdiagramm, das eine Grafikprozessor-Befehlssequenz 910 gemäß einer Ausführungsform veranschaulicht. Die Kästchen mit durchgezogenen Linien in 9A veranschaulichen die Komponenten, die im Allgemeinen in einem Grafikbefehl enthalten sind, während die gestrichelten Linien Komponenten enthalten, die optional sind oder die nur in einem Teilsatz der Grafikbefehle enthalten sind. Das beispielhafte Grafikprozessorbefehlsformat 900 von 9A beinhaltet Datenfelder zum Identifizieren eines Clients 902, einen Befehls-Operationencode (Opcode) 904 und ein Datenfeld 906 für den Befehl. Ein Sub-Opcode 905 und eine Befehlsgröße 908 sind ebenfalls in einigen Befehlen enthalten.
  • In einigen Ausführungsformen gibt der Client 902 die Client-Einheit der Grafikvorrichtung an, welche die Befehlsdaten verarbeitet. In manchen Ausführungsformen untersucht ein Grafikprozessor-Befehls-Parser das Client-Feld jedes Befehls, um die weitere Verarbeitung des Befehls zu konditionieren und die Befehlsdaten an die geeignete Client-Einheit zu leiten. In einigen Ausführungsformen beinhalten die Grafikprozessor-Client-Einheiten eine Speicherschnittstelleneinheit, eine Render-Einheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit. Jede Client-Einheit hat eine entsprechende Verarbeitungs-Pipeline, welche die Befehle verarbeitet. Sobald der Befehl von der Client-Einheit empfangen wird, liest die Client-Einheit den Opcode 904 und, falls vorhanden, den Sub-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 erwartet, dass eine explizite Befehlsgröße 908 die Größe des Befehls spezifiziert. 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 werden Befehle über Vielfache eines Doppelwortes ausgerichtet. Andere Befehlsformate können verwendet werden.
  • Das Flussdiagramm in 9B veranschaulicht eine beispielhafte Grafikprozessor-Befehlssequenz 910. In einigen Ausführungsformen verwendet Software oder Firmware eines Datenverarbeitungssystems, das eine Ausführungsform eines Grafikprozessors aufweist, eine Version der gezeigten Befehlssequenz, um einen Satz von Grafikoperationen einzurichten, auszuführen und zu beenden. Eine beispielhafte Befehlssequenz wird nur für Beispielszwecke gezeigt und beschrieben, da Ausführungsformen nicht auf diese spezifischen Befehle oder auf diese Befehlssequenz beschränkt sind. Außerdem können die Befehle als Batch von Befehlen in einer Befehlssequenz ausgegeben werden, sodass der Grafikprozessor die Sequenz von Befehlen in einer mindestens teilweisen Gleichzeitigkeit verarbeitet.
  • In einigen Ausführungsformen kann die Grafikprozessor-Befehlssequenz 910 mit einem Pipeline-Entleerungs-Befehl 912 beginnen, um zu bewirken, dass jede aktive Grafik-Pipeline die gegenwärtig anstehenden Befehle für die Pipeline abschließt. In einigen Ausführungsformen arbeiten 3D-Pipeline 922 und Medien-Pipeline 924 nicht gleichzeitig. Die Pipeline-Entleerung wird durchgeführt, um die aktive Grafik-Pipeline dazu zu veranlassen, jegliche anstehenden Befehle abzuschließen. Als Reaktion auf eine Pipeline-Entleerung unterbricht der Befehls-Parser für den Grafikprozessor die Befehlsverarbeitung, bis die aktiven Zeichnungs-Engines anstehende Operationen abschließen, und die relevanten Lese-Caches ungültig gemacht sind. Optional können beliebige Daten in dem Render-Cache, die als ,dirty` (schmutzig) markiert sind, in den Speicher geleert werden. In einigen Ausführungsformen kann der Pipeline-Entleerungsbefehl 912 zur Pipeline-Synchronisation oder vor dem Versetzen des Grafikprozessors in einen Niederleistungszustand verwendet werden.
  • In einigen Ausführungsformen wird ein Pipeline-Auswahlbefehl 913 verwendet, wenn eine Befehlssequenz erfordert, dass der Grafikprozessor explizit zwischen Pipelines wechselt. In einigen Ausführungsformen wird ein Pipeline-Auswahlbefehl 913 nur einmal innerhalb eines Ausführungskontextes benötigt, bevor Pipeline-Befehle ausgegeben werden, es sei denn, der Kontext soll Befehle für beide Pipelines ausgeben. In einigen Ausführungsformen wird ein Pipeline-Entleerungsbefehl 912 unmittelbar vor einem Pipeline-Umschalten über den Pipeline-Auswahlbefehl 913 erfordert.
  • In einigen Ausführungsformen legt ein Pipeline-Steuerbefehl 914 eine Grafikpipeline für Operation aus und wird verwendet, um die 3D-Pipeline 922 und die Medienpipeline 924 zu programmieren. In einigen Ausführungsformen konfiguriert der Pipeline-Steuerbefehl 914 den Pipeline-Zustand für die aktive Pipeline. In einer Ausführungsform wird der Pipeline-Steuerbefehl 914 zur Pipeline-Synchronisation 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 mit dem Rückgabepufferzustand 916 verbundene Befehle verwendet, um einen Satz von Rückgabepuffern für die jeweiligen Pipelines zum Schreiben von Daten zu konfigurieren. Manche Pipeline-Operationen erfordern die Zuweisung, Auswahl oder Konfiguration von einem oder mehreren Rückgabepuffern, in welche 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 threadü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 Pipeline-Operationen zu verwenden sind.
  • Die verbleibenden Befehle in der Befehlsfolge unterscheiden sich auf Grundlage der aktiven Pipeline für Operationen. Basierend auf einer Pipeline-Bestimmung 920 wird die Befehlssequenz auf die 3D-Pipeline 922 beginnend mit dem 3D-Pipeline-Zustand 930 oder die Medien-Pipeline 924 beginnend mit dem Medien-Pipeline-Zustand 940 zugeschnitten.
  • Die Befehle zum Konfigurieren des 3D-Pipeline-Zustands 930 beinhalten 3D-Zustandseinstellungsbefehle für Vertex-Pufferzustand, Vertex-Elementzustand, konstanten Farbzustand, Tiefenpufferzustand und andere Zustandsvariablen, die konfiguriert werden sollen, bevor 3D-Primitivenbefehle verarbeitet werden. Die Werte dieser Befehle werden mindestens teilweise basierend auf der bestimmten 3D- API-Bibliothek in Gebrauch bestimmt. In einigen Ausführungsformen sind die 3D-Pipeline-Zustand 930-Befehle auch in der Lage, bestimmte Pipeline-Elemente selektiv 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 zu übermitteln, die durch die 3D-Pipeline verarbeitet werden sollen. Befehle und zugehörige Parameter, die über den 3D-Primitiv-Befehl 932 an den Grafikprozessor weitergeleitet werden, werden an die Vertex-Abruffunktion in der Grafik-Pipeline weitergeleitet. Die Vertex-Abruffunktion verwendet die 3D-Primitiv-Befehlsdaten 932, um Vertex-Datenstrukturen zu erzeugen. Die Vertex-Datenstrukturen werden in einem oder mehreren Rückgabepuffern gespeichert. In einigen Ausführungsformen wird der 3D-Primitiv-Befehl 932 verwendet, um Vertex-Operationen an 3D-Primitiven über Vertex-Shader durchzuführen. Um Vertex-Shader zu verarbeiten, sendet die 3D-Pipeline 922 Shader-Ausführungs-Threads an Grafikprozessor-Ausführungseinheiten.
  • In einigen Ausführungsformen wird die 3D-Pipeline 922 über Ausführungsbefehl 934 oder -Ereignis ausgelöst. In einigen Ausführungsformen löst ein Registerschreibvorgang eine Befehlsausführung aus. In einigen Ausführungsformen wird die Ausführung über einen Befehl „go“ oder „kick“ in der Befehlssequenz ausgelöst. In einer Ausführungsform wird die Befehlsausführung unter Verwendung eines Pipeline-Synchronisierungs-Befehls zum Leeren der Befehlssequenz durch die Grafik-Pipeline ausgelöst. Die 3D-Pipeline führt eine Geometrieverarbeitung für die 3D-Primitiven durch. Sobald Operationen abgeschlossen sind, werden die resultierenden geometrischen Objekte rasterisiert, und die Pixel-Engine färbt die resultierenden Pixel. Zusätzliche Befehle zum Steuern von Pixel-Shading und Pixel-Backend-Operationen können ebenfalls für diese Operationen enthalten sein.
  • In einigen Ausführungsformen folgt die Grafikprozessorbefehlssequenz 910 dem Pfad der Medien-Pipeline 924, wenn Medienoperationen durchgeführt werden. Allgemein hängt die spezifische Verwendung und Art der Programmierung für die Medien-Pipeline 924 von den durchzuführenden Medien oder Rechenoperationen ab. Spezifische Medien-Decodieroperationen können während der Medien-Decodierung auf die Medien-Pipeline ausgelagert werden. In einigen Ausführungsformen kann die Medien-Pipeline auch umgangen werden, und eine Medien-Decodierung kann ganz oder teilweise durch Verwenden von Ressourcen durchgeführt werden, die durch einen oder mehrere Universal-Verarbeitungskerne bereitgestellt werden. In einer Ausführungsform beinhaltet die Medien-Pipeline auch Elemente für Operationen einer Universal-Grafikprozessoreinheit (GPGPU: General-Purpose Graphics Processor Unit), wobei der Grafikprozessor verwendet wird, um SIMD-Vektoroperationen unter Verwendung von Berechnungs-Shader-Programmen, die nicht explizit mit dem Rendering von Grafikprimitiven in Zusammenhang stehen, durchzuführen.
  • In einigen Ausführungsformen ist die Medien-Pipeline 924 auf eine ähnliche Weise wie die 3D-Pipeline 922 konfiguriert. Ein Satz von Befehlen zum Konfigurieren des Medien-Pipeline-Zustands 940 wird verteilt oder in einer Befehlswarteschlange vor Medienobjektbefehlen 942 platziert. In einigen Ausführungsformen beinhalten Befehle für den Medien-Pipeline-Zustand 940 Daten zum Konfigurieren der Medien-Pipeline-Elemente, die zum Verarbeiten der Medienobjekte verwendet werden. Dies beinhaltet Daten zum Konfigurieren der Videodecodier- und Videocodierlogik innerhalb der Medien-Pipeline, wie Codier- oder Decodierformat. In einigen Ausführungsformen unterstützen Befehle für den Medien-Pipeline-Zustand 940 auch die Verwendung eines oder mehrerer Zeiger auf „indirekte“ Zustandselemente, die einen Stapel von Zustandseinstellungen enthalten.
  • In einigen Ausführungsformen liefern Medienobjektbefehle 942 Zeiger zu Medienobjekten zur Verarbeitung durch die Medien-Pipeline. Die Medienobjekte beinhalten Speicherpuffer, die zu verarbeitende Videodaten enthalten. In einigen Ausführungsformen müssen alle Medien-Pipeline-Zustände gültig sein, bevor ein Medienobjektbefehl 942 ausgegeben wird. Sobald der Pipeline-Zustand konfiguriert ist und die Medienobjektbefehle 942 in die Warteschlange eingereiht sind, wird die Medien-Pipeline 924 über einen Ausführungsbefehl 944 oder ein äquivalentes Ausführungsereignis (z. B. Registerschreibvorgang) ausgelöst. Die Ausgabe von der Medien-Pipeline 924 kann dann durch Operationen nachverarbeitet werden, die von der 3D-Pipeline 922 oder der Medien-Pipeline 924 bereitgestellt werden. In einigen Ausführungsformen werden GPGPU-Operationen auf ähnliche Weise wie Medienoperationen konfiguriert und ausgeführt.
  • Grafik-Software-Architektur
  • 10 veranschaulicht eine beispielhafte Grafik-Software-Architektur für ein Datenverarbeitungssystem 1000 gemäß einigen Ausführungsformen. In einigen Ausführungsformen schließt die Software-Architektur eine 3D-Grafikanwendung 1010, ein Betriebssystem 1020 und mindestens einen Prozessor 1030 ein. In einigen Ausführungsformen beinhaltet der Prozessor 1030 einen Grafikprozessor 1032 und einen oder mehrere Universalprozessorkerne 1034. Die Grafikanwendung 1010 und das Betriebssystem 1020 werden jeweils in Systemspeicher 1050 des Datenverarbeitungssystems ausgeführt.
  • In einigen Ausführungsformen enthält die 3D-Grafikanwendung 1010 eines oder mehrere Shader-Programme, die Shader-Anweisungen 1012 beinhalten. Die Shader-Sprachanweisungen können in einer High-Level-Shader-Sprache sein, wie High-Level Shader Language (HLSL) von Direct3D, OpenGL Shader Language (GLSL), und so weiter. Die Anwendung beinhaltet auch ausführbare Anweisungen 1014 in einer Maschinensprache, die für Ausführung durch den Universalprozessorkern 1034 geeignet ist. Die Anwendung beinhaltet auch Grafikobjekte 1016, definiert durch Vertex-Daten.
  • In einigen Ausführungsformen ist das Betriebssystem 1020 ein Microsoft® Windows® Betriebssystem von der Microsoft Corporation, ein proprietäres UNIX-artiges Betriebssystem oder ein UNIX-artiges Open-Source-Betriebssystem, das eine Variante des Linux-Kernels verwendet. Das Betriebssystem 1020 kann 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 Frontend-Shader-Kompilierer 1024 zum Kompilieren jeglicher Shader-Anweisungen 1012 in HLSL in eine Lower-Level-Shader-Sprache. Die Kompilierung kann eine Just-in-Time (JIT)-Kompilierung sein, oder die Anwendung kann eine Shader-Vorabkompilierung durchführen. In einigen Ausführungsformen werden High-Level-Shader während der Kompilierung der 3D-Grafikanwendung 1010 in Low-Level-Shader kompiliert. In einigen Ausführungsformen werden die Shader-Anweisungen 1012 in einer Zwischenform bereitgestellt, wie einer Version der standardmäßigen tragbaren Zwischendarstellung (SPIR: Standard Portable Intermediate Representation), die von der Vulkan-API verwendet wird.
  • In einigen Ausführungsformen enthält der Benutzermodus-Grafiktreiber 1026 einen Backend-Shader-Kompilierer 1027 zum Umwandeln der Shader-Anweisungen 1012 in eine hardwarespezifische Darstellung. Wenn die OpenGL-API in Verwendung ist, werden Shader-Anweisungen 1012 in der GLSL-High-Level-Sprache an einen Benutzermodus-Grafiktreiber 1026 zur Kompilierung weitergeleitet. In einigen Ausführungsformen verwendet der Benutzermodus-Grafiktreiber 1026 Betriebssystem-Kernmodus-Funktionen 1028, um mit Kernmodus-Grafiktreiber 1029 zu kommunizieren. In einigen Ausführungsformen kommuniziert der Kernmodus-Grafiktreiber 1029 mit dem Grafikprozessor 1032, um Befehle und Anweisungen zu versenden.
  • IP-Kernimplementierungen
  • Einer oder mehrere Aspekte von mindestens einer Ausführungsform können durch repräsentativen Code implementiert werden, der auf einem maschinenlesbaren Medium gespeichert ist, das Logik innerhalb einer integrierten Schaltung, wie eines Prozessors, repräsentiert und/oder definiert. Das maschinenlesbare Medium kann zum Beispiel Anweisungen beinhalten, die verschiedene Logik innerhalb des Prozessors repräsentieren. Wenn sie durch eine Maschine gelesen werden, können die Anweisungen die Maschine dazu veranlassen, die Logik herzustellen, um die hierin beschriebenen Techniken durchzuführen. Solche Repräsentationen, die als „IP-Kerne“ bekannt sind, sind wiederverwendbare Logikeinheiten für eine integrierte Schaltung, die auf einem greifbaren, maschinenlesbaren Medium als ein Hardware-Modell gespeichert werden können, das die Struktur der integrierten Schaltung beschreibt. Das Hardware-Modell kann an verschiedene Kunden oder Fertigungsanlagen geliefert werden, die das Hardware-Modell auf Fertigungsmaschinen laden, welche die integrierte Schaltung herstellen. Der integrierte Schaltkreis kann so gefertigt werden, dass die Schaltung Operationen durchführt, die im Zusammenhang mit beliebigen der hierin beschriebenen Ausführungsformen beschrieben wurden.
  • 11A ist ein Blockdiagramm, das ein IP-Kernentwicklungssystem 1100 veranschaulicht, das zum Fertigung einer integrierten Schaltung zum Durchführen von Operationen gemäß einer Ausführungsform verwendet werden kann. Das IP-Kernentwicklungssystem 1100 kann verwendet werden, um modulare, wiederverwendbare Designs zu generieren, die in ein größeres Design integriert werden können oder verwendet werden können, um eine vollständige integrierte Schaltung (z. B. eine integrierte SOC-Schaltung) zu konstruieren. Eine Design-Anlage 1130 kann Software-Simulation 1110 eines IP-Kern-Designs in einer High-Level-Programmiersprache (zum Beispiel C/C++) generieren. Die Software-Simulation 1110 kann verwendet werden, um das Verhalten des IP-Kerns durch Verwenden von Simulationsmodell 1112 zu entwerfen, zu testen und zu verifizieren. Das Simulationsmodell 1112 kann Funktions-, Verhaltens- und/oder Zeitablaufsimulationen beinhalten. Ein Registertransferebenen (RTL)-Design 1115 kann dann von dem Simulationsmodell 1112 erzeugt oder synthetisiert werden. Das RTL-Design 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 durch Verwenden der modellierten digitalen Signale durchgeführt wird. Neben einem RTL-Design 1115 können auch Low-Level-Designs auf der Logikebene oder der Transistorebene erzeugt, entworfen oder synthetisiert werden. Somit können die speziellen Details des anfänglichen Designs und der Simulation variieren.
  • Das RTL-Design 1115 oder ein Äquivalent kann ferner durch die Design-Anlage in Hardware-Modell 1120 synthetisiert werden, das in einer Hardware-Beschreibungssprache (HDL: Hardware Description Language) oder einer anderen Repräsentation von physischen Design-Daten vorliegen kann. Die HDL kann weiter simuliert oder getestet werden, um das IP-Kern-Design zu verifizieren. Das IP-Kern-Design kann zur Lieferung an eine Fertigungsanlage 1165 Dritter unter Verwendung eines nichtflüchtigen Speichers 1140 (z. B. Festplatte, Flash-Speicher oder ein beliebiges nichtflüchtiges Speicherungsmedium) gespeichert werden. Alternativ kann das IP-Kern-Design über eine verdrahtete Verbindung 1150 oder drahtlose Verbindung 1160 (z. B. über das Internet) übertragen werden. Die Fertigungsanlage 1165 kann dann eine integrierte Schaltung fertigen, die mindestens teilweise auf dem IP-Kern-Design basiert. Die gefertigte integrierte Schaltung kann konfiguriert sein, um Operationen gemäß mindestens einer hierin beschriebenen Ausführungsform durchzuführen.
  • 11B veranschaulicht eine Querschnittsseitenansicht einer Package-Baugruppe 1170 mit integrierter Schaltung gemäß einigen hierin beschriebenen Ausführungsformen. Die Integrierte-Schaltungs-Package-Baugruppe 1170 veranschaulicht eine Implementierung einer oder mehrerer Prozessor- oder Beschleunigervorrichtungen, wie hierin beschrieben. Die Package-Baugruppe 1170 beinhaltet mehrere Einheiten von Hardware-Logik 1172, 1174, die mit einem Substrat 1180 verbunden sind. Die Logik 1172, 1174 kann mindestens teilweise in konfigurierbarer Logik oder Logik-Hardware mit fester Funktionalität implementiert sein, und kann einen oder mehrere Abschnitte des einen oder der mehreren Prozessorkerne und/oder des einen oder der mehreren Grafikprozessoren und/oder anderer hierin beschriebener Beschleunigervorrichtungen beinhalten. Jede Einheit von Logik 1172, 1174 kann innerhalb eines Halbleiter-Dies implementiert und mit dem Substrat 1180 über eine Interconnect-Struktur 1173 gekoppelt sein. Die Interconnect-Struktur 1173 kann konfiguriert sein, um elektrische Signale zwischen der Logik 1172, 1174 und dem Substrat 1180 zu leiten und kann Interconnects, wie Bumps oder Pillars zu beinhalten, ohne darauf beschränkt zu sein. In einigen Ausführungsformen kann die Interconnect-Struktur 1173 konfiguriert sein, um elektrische Signale zu leiten, wie, zum Beispiel, Eingabe/Ausgabe (E/A)-Signale und/oder Leistungs- oder Massesignale in Verbindung mit dem Betrieb der Logik 1172, 1174. In einigen Ausführungsformen ist das Substrat 1180 ein epoxidbasiertes Laminatsubstrat. Das Substrat 1180 kann in anderen Ausführungsformen andere geeignete Arten von Substraten beinhalten. Die Package-Baugruppe 1170 kann über ein Package-Interconnect 1183 mit anderen elektrischen Vorrichtungen verbunden sein. Das Package-Interconnect 1183 kann mit einer Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale zu anderen elektrischen Vorrichtungen, wie zum Beispiel einem Motherboard, einem anderen Chipsatz oder einem Multichip-Modul, zu leiten.
  • In einigen Ausführungsformen sind die Einheiten der Logik 1172, 1174 elektrisch mit einer Bridge 1182 gekoppelt, die konfiguriert ist, um elektrische Signale zwischen der Logik 1172, 1174 zu leiten. Die Bridge 1182 kann eine dichte Interconnect-Struktur sein, die eine Route für elektrische Signale bereitstellt. Die Bridge 1182 kann ein Bridge-Substrat beinhalten, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Elektrische Routing-Merkmale können auf dem Bridge-Substrat ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen der Logik 1172, 1174 bereitzustellen.
  • Obwohl zwei Einheiten der Logik 1172, 1174 und eine Bridge 1182 veranschaulicht sind, können hierin beschriebene Ausführungsformen mehr oder weniger Logikeinheiten auf einem oder mehreren Dies einschließen. Der eine oder die mehreren Dies können durch null oder mehr Bridges verbunden sein, da die Bridge 1182 ausgeschlossen werden kann, wenn die Logik auf einem einzelnen Die enthalten ist. Alternativ dazu können mehrere Dies oder Logikeinheiten durch eine oder mehrere Bridges verbunden sein. Außerdem können mehrere Logikeinheiten, Dies und Bridges in anderen möglichen Konfigurationen, einschließlich dreidimensionaler Konfigurationen, miteinander verbunden sein.
  • 11C veranschaulicht eine Package-Baugruppe 1190, die mehrere Einheiten von Hardwarelogik-Chiplets beinhaltet, die mit einem Substrat 1180 verbunden sind. Eine Grafikverarbeitungseinheit, ein Parallelprozessor und/oder ein Rechenbeschleuniger, wie hierin beschrieben, können aus diversen Silicium-Chiplets zusammengesetzt sein, die separat hergestellt werden. In diesem Zusammenhang ist ein Chiplet eine mindestens teilweise gehäuste integrierte Schaltung, die unterschiedliche Logikeinheiten beinhaltet, die mit anderen Chiplets zu einem größeren Package zusammengebaut werden können. Ein diverser Satz von Chiplets mit unterschiedlicher IP-Kernlogik kann zu einer einzelnen Vorrichtung zusammengebaut werden. Außerdem können die Chiplets in ein Basis-Die oder Basis-Chiplet unter Verwendung einer Technologie mit einem aktiven Interposer integriert werden. Die hierin beschriebenen Konzepte ermöglichen die Zwischenverbindung und Kommunikation zwischen unterschiedlichen IP-Formen innerhalb der GPU. IP-Kerne können durch Verwenden von unterschiedlichen Prozesstechnologien hergestellt und während der Fertigung zusammengesetzt werden, was die Komplexität des Zusammenführens mehrerer IP, insbesondere auf einem großen SoC mit mehreren IPs, in denselben Fertigungsprozess vermeidet. Das Ermöglichen der Verwendung mehrerer Prozesstechnologien verbessert die Markteinführungszeit, und bietet eine kostengünstige Möglichkeit, mehrere Produkt-SKU zu erzeugen. Zusätzlich sind die disaggregierten IPs für ein unabhängiges Power-Gate besser geeignet, Komponenten, die bei einer gegebenen Arbeitslast nicht verwendet werden, können ausgeschaltet werden, wodurch der Gesamtstromverbrauch reduziert wird.
  • In verschiedenen Ausführungsformen kann eine Package-Baugruppe 1190 Komponenten und Chiplets beinhalten, die durch ein Fabric 1185 und/oder eine oder mehrere Bridges 1187 miteinander verbunden sind. Die Chiplets innerhalb der Package-Baugruppe 1190 können eine 2,5D-Anordnung unter Verwendung einer Chip-auf-Wafer-auf-Substrat-Stapelung aufweisen, bei der mehrere Dies nebeneinander auf einem Silicium-Interposer 1189 gestapelt sind, der die Chiplets mit dem Substrat 1180 koppelt. Das Substrat 1180 beinhaltet elektrische Verbindungen zum Package-Interconnect 1183. In einer Ausführungsform ist der Silicium-Interposer 1189 ein passiver Interposer, der Siliciumdurchkontaktierungen (TSVs) beinhaltet, um Chiplets innerhalb der Package-Baugruppe 1190 elektrisch mit dem Substrat 1180 zu koppeln. In einer Ausführungsform ist der Silicium-Interposer 1189 ein aktiver Interposer, der zusätzlich zu TSVs eingebettete Logik einschließt. In einer solchen Ausführungsform sind die Chiplets innerhalb der Package-Baugruppe 1190 unter Verwendung einer 3D-Fläche-an-Fläche-Die-Stapelung auf dem aktiven Interposer 1189 angeordnet. Der aktive Interposer 1189 kann Hardwarelogik für einen E/A 1191, einen Cache-Speicher 1192 und andere Hardwarelogik 1193 zusätzlich zu einer Interconnect-Fabric 1185 und einer Siliciumbrücke 1187 beinhalten. Die Fabric 1185 ermöglicht eine Kommunikation zwischen den verschiedenen Logik-Chiplets 1172, 1174 und der Logik 1191, 1193 innerhalb des aktiven Interposers 1189. Die Fabric 1185 kann ein NoC-Interconnect oder eine andere Form einer paketvermittelten Fabric sein, die Datenpakete zwischen Komponenten der Package-Baugruppe vermittelt. Für komplexe Anordnungen kann das Fabric 1185 ein dediziertes Chiplet sein, das eine Kommunikation zwischen der verschiedenen Hardwarelogik der Package-Baugruppe 1190 ermöglicht.
  • Bridge-Strukturen 1187 innerhalb des aktiven Interposers 1189 können verwendet werden, um ein Punkt-zu-Punkt-Interconnect zwischen zum Beispiel Logik- oder E/A-Chiplets 1174 und Speicher-Chiplets 1175 zu erleichtern. In einigen Implementierungen können die Bridge-Strukturen 1187 auch innerhalb des Substrats 1180 eingebettet sein. Die Hardwarelogik-Chiplets können spezielle Hardwarelogik-Chiplets 1172, Logik- oder E/A-Chiplets 1174 und/oder Speicher-Chiplets 1175 beinhalten. Die Hardwarelogik-Chiplets 1172 und Logik- oder E/A-Chiplets 1174 können zumindest teilweise in konfigurierbarer Logik oder Festfunktionalitätslogikhardware implementiert sein und können einen oder mehrere Abschnitte von beliebigen der hierin beschriebenen Prozessorkern(e), Grafikprozessor(en), parallelen Prozessoren oder anderen Beschleunigervorrichtungen beinhalten. Die Speicher-Chiplets 1175 können DRAM-Speicher (z. B. GDDR-Speicher, HBM-Speicher) oder Cache-Speicher (SRAM-Speicher) sein. Der Cache-Speicher 1192 innerhalb des aktiven Interposers 1189 (oder des Substrats 1180) kann als ein globaler Cache für die Package-Baugruppe 1190, als Teil eines verteilten globalen Caches oder als ein dedizierter Cache für die Fabric 1185 wirken.
  • Jedes Chiplet kann als separater Halbleiter-Die hergestellt und mit einem Basis-Die gekoppelt werden, der innerhalb des Substrats 1180 eingebettet oder mit diesem gekoppelt ist. Die Kopplung mit dem Substrat 1180 kann über eine Interconnect-Struktur 1173 durchgeführt werden. Die Interconnect-Struktur 1173 kann zum Leiten von elektrischen Signalen zwischen den verschiedenen Chiplets und Logik innerhalb des Substrats 1180 konfiguriert sein. Die Interconnect-Struktur 1173 kann Interconnects, wie Bumps oder Pillars, beinhalten, ohne darauf beschränkt zu sein. In einigen Ausführungsformen kann die Interconnect-Struktur 1173 konfiguriert sein, um elektrische Signale, wie zum Beispiel Eingabe/Ausgabe (E/A)-Signale und/oder Leistungs- oder Massesignale in Verbindung mit dem Betrieb der Logik, E/A- und Speicher-Chiplets, zu leiten. In einer Ausführungsform koppelt eine zusätzliche Interconnect-Struktur den aktiven Interposer 1189 mit dem Substrat 1180.
  • 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 beinhalten. Die Package-Baugruppe 1190 kann über ein Package-Interconnect 1183 mit anderen elektrischen Vorrichtungen verbunden sein. Das Package-Interconnect 1183 kann an eine Oberfläche des Substrats 1180 gekoppelt sein, um elektrische Signale an andere elektrische Vorrichtungen zu leiten, wie eine Hauptplatine, einen anderen Chipsatz oder ein Mehrchipmodul.
  • In einigen Ausführungsformen können ein Logik- oder E/A-Chiplet 1174 und ein Speicher-Chiplet 1175 elektrisch über eine Bridge 1187 gekoppelt sein, die konfiguriert ist, um elektrische Signale zwischen dem Logik- oder E/A-Chiplet 1174 und einem Speicher-Chiplet 1175 zu leiten. Die Bridge 1187 kann eine dichte Interconnect-Struktur sein, die eine Route für elektrische Signale bereitstellt. Die Bridge 1187 kann ein Bridge-Substrat beinhalten, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Elektrische Routing-Merkmale können auf dem Bridge-Substrat gebildet sein, um eine Chip-zu-Chip-Verbindung zwischen Logik- oder E/A-Chiplet 1174 und einen Speicher-Chiplet 1175 bereitzustellen. Die Bridge 1187 kann auch als eine Siliziumbrücke oder eine Interconnect-Bridge bezeichnet werden. Zum Beispiel ist die Bridge 1187 in einigen Ausführungsformen eine eingebettete Multi-Die-Interconnect-Bridge (EMIB). In einigen Ausführungsformen kann die Bridge 1187 einfach eine direkte Verbindung von einem Chiplet zu einem anderen Chiplet sein.
  • 11D veranschaulicht eine Package-Baugruppe 1194 einschließlich austauschbarer Chiplets 1195 gemäß einer Ausführungsform. Die austauschbaren Chiplets 1195 können zu standardisierten Slots auf einem oder mehreren Basis-Chiplets 1196, 1198 zusammengebaut werden. Die Basis-Chiplets 1196, 1198 können über ein Bridge-Interconnect 1197 gekoppelt sein, die ähnlich den anderen hierin beschriebenen Bridge-Interconnects, wie zum Beispiel eine EMIB, sein kann. Speicher-Chiplets können auch über ein Bridge-Interconnect mit Logik- oder E/A-Chiplets verbunden sein. E/A- und Logik-Chiplets können über eine Interconnect-Fabric kommunizieren. Die Basis-Chiplets können jeweils einen oder mehrere Slots in einem standardisierten Format für eins aus Logik oder E/A oder Speicher/Cache unterstützen.
  • In einer Ausführungsform können SRAM- und Leistungslieferungsschaltungen in einem oder mehreren der Basis-Chiplets 1196, 1198 gefertigt werden, die durch Verwenden einer anderen Prozesstechnologie relativ zu den austauschbaren Chiplets 1195, die auf den Basis-Chiplets gestapelt sind, gefertigt werden können. Zum Beispiel können die Basis-Chiplets 1196, 1198 durch Verwenden einer größeren Prozesstechnologie gefertigt werden, während die austauschbaren Chiplets durch Verwenden einer kleineren Prozesstechnologie gefertigt werden können. Einer oder mehrere der austauschbaren Chiplets 1195 können Speicher (z. B. DRAM)-Chiplets sein. Unterschiedliche Speicherdichten können für die Package-Baugruppe 1194 basierend auf der für das Produkt, das die Package-Baugruppe 1194 verwendet, beabsichtigten Leistung und/oder Leistungsfähigkeit ausgewählt werden. Zusätzlich können Logik-Chiplets mit einer anderen Anzahl von Arten von Funktionseinheiten zum Zeitpunkt der Montage basierend auf der Leistung und/oder Leistungsfähigkeit, die für das Produkt angestrebt wird, ausgewählt werden. Zusätzlich können Chiplets, die IP-Logikkerne unterschiedlicher Arten enthalten, in die Slots für austauschbare Chiplet-Slots eingesetzt werden, was hybride Prozessorendesigns ermöglicht, die IP-Blöcke unterschiedlicher Technologien mischen und abstimmen können.
  • Beispielhafte integrierte System-on-a-Chip-Schaltung
  • 12 bis 13B veranschaulichen beispielhafte integrierte Schaltungen und zugehörige Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden können, gemäß verschiedenen hierin beschriebenen Ausführungsformen. Zusätzlich zu dem, was veranschaulicht ist, können andere Logiken und Schaltungen integriert werden, einschließlich zusätzlicher Grafikprozessoren/-kerne, Peripherieschnittstellensteuerungen oder Universalprozessorkerne.
  • 12 ist ein Blockdiagramm, das eine beispielhafte integrierte System-on-Chip-Schaltung 1200 veranschaulicht, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt werden kann, gemäß einer Ausführungsform. Die beispielhafte integrierte Schaltung 1200 beinhaltet einen oder mehrere Anwendungsprozessoren 1205 (z. B. CPU), mindestens einen Grafikprozessor 1210 und kann zusätzlich Bildprozessor 1215 und/oder Videoprozessor 1220 beinhalten, von denen jeder ein modularer IP-Kern von derselben oder mehreren unterschiedlichen Design-Anlagen sein kann. Die integrierte Schaltung 1200 beinhaltet Peripheriegerät- oder Buslogik einschließlich einer USB-Steuerung 1225, einer UART-Steuerung 1230, einer SPI/SDIO-Steuerung 1235 und einer I2S/I2C-Steuerung 1240. Zusätzlich dazu kann die integrierte Schaltung eine Anzeigevorrichtung 1245 beinhalten, die mit einer High-Definition-Multimedia-Schnittstellen (HDMI)-Steuerung 1250 und/oder einer Mobilindustrie-Prozessorschnittstellen (MIPI)-Anzeigeschnittstelle 1255 gekoppelt ist. Speicher kann durch ein Flashspeicher-Subsystem 1260 bereitgestellt werden, das Flashspeicher und eine Flashspeichersteuerung beinhaltet. Eine Speicherschnittstelle kann über eine Speichersteuerung 1265 für Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt werden. Einige integrierte Schaltungen beinhalten zusätzlich eine eingebettete Sicherheits-Engine 1270.
  • 13A-13B sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung in einem SoC veranschaulichen, gemäß hierin beschriebenen Ausführungsformen. 13A veranschaulicht einen beispielhaften Grafikprozessor 1310 einer integrierten System-on-Chip-Schaltung, die unter Verwendung eines oder mehrerer IP-Kerne gerfertigt werden kann, gemäß einer Ausführungsform. 13B veranschaulicht einen weiteren beispielhaften Grafikprozessor 1340 einer integrierten System-on-Chip-Schaltung, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt werden kann, gemäß einer Ausführungsform. Der Grafikprozessor 1310 von 13A ist ein Beispiel für einen Niederleistungs-Grafikprozessorkern. Der Grafikprozessor 1340 von 13B ist ein Beispiel für einen Grafikprozessorkern mit höherer Leistungsfähigkeit. Sowohl Grafikprozessor 1310 als auch Grafikprozessor 1340 können Varianten des Grafikprozessors 1210 von 12 sein.
  • Wie in 13A gezeigt, beinhaltet der Grafikprozessor 1310 einen Vertex-Prozessor 1305 und einen oder mehrere Fragment-Prozessoren 1315A-1315N (z. B. 1315A, 1315B, 1315C, 1315D bis 1315N1 und 1315N). Der Grafikprozessor 1310 kann unterschiedliche Shader-Programme über separate Logik ausführen, so dass der Vertex-Prozessor 1305 zum Ausführen von Operationen für Vertex-Shader-Programme optimiert ist, während der eine oder die mehreren Fragment-Prozessoren 1315A-1315N Fragment (z. B. Pixel)-Shading-Operationen für Fragment- oder Pixel-Shader-Programme ausführen. Der Vertex-Prozessor 1305 führt die Vertex-Verarbeitungsstufe der 3D-Grafik-Pipeline durch und generiert Primitive und Vertex-Daten. Der eine oder die mehreren Fragmentprozessor(en) 1315A-1315N verwenden die Primitiv- und Vertex-Daten, die vom Vertex-Prozessor 1305 generiert werden, um einen Rahmenpuffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. In einer Ausführungsform ist/sind der/die Fragment-Prozessoren) 1315A-1315N dazu optimiert, Fragment-Shader-Programme, wie sie in der OpenGL-API bereitgestellt werden, auszuführen, die verwendet werden können, um ähnliche Operationen wie ein Pixel-Shader-Programm durchzuführen, wie es in der Direct-3D-API bereitgestellt wird.
  • Der Grafikprozessor 1310 beinhaltet zusätzlich eine oder mehrere Speicherverwaltungseinheiten (MMUs: Memory Management Units) 1320A-1320B, einen oder mehrere Caches 1325A-1325B und eine oder mehrere Schaltungs-Interconnects 1330A-1330B. Die eine oder die mehreren MMUs 1320A-1320B stellen eine Abbildung von virtuellen auf physische Adressen für den Grafikprozessor 1310 bereit, einschließlich für den Vertex-Prozessor 1305 und/oder den/die Fragment-Prozessor(en) 1315A-1315N, die zusätzlich zu Vertex- oder Bild-/Texturdaten, die in dem einen oder den mehreren Caches 1325A-1325B gespeichert sind, Vertex- oder Bild-/Texturdaten referenzieren können, die im Speicher gespeichert sind. In einer Ausführungsform können die eine oder die mehreren MMUs 1320A-1320B mit anderen MMUs innerhalb des Systems synchronisiert sein, einschließlich einer oder mehrerer MMUs, die dem einen oder den mehreren Anwendungsprozessoren 1205, dem Bildprozessor 1215 und/oder dem Videoprozessor 1220 von 12 zugeordnet sind, so dass jeder Prozessor 1205-1220 an einem gemeinsam genutzten oder vereinheitlichten virtuellen Speichersystem teilnehmen kann. Die eine oder die mehreren Schaltungs-Interconnects 1330A-1330B ermöglichen gemäß Ausführungsformen, dass der Grafikprozessor 1310 mit anderen IP-Kernen innerhalb des SoC eine Schnittstelle bildet, entweder über einen internen Bus des SoC oder über eine direkte Verbindung.
  • Wie in 13B gezeigt, beinhaltet der Grafikprozessor 1340 eine oder mehrere MMLJs 1320A-1320B, Caches 1325A-1325B und Schaltungs-Interconnects 1330A-1330B des Grafikprozessors 1310 von 13A. Der Grafikprozessor 1340 beinhaltet einen oder mehrere Shader-Kerne 1355A-1355N (z. B. 1455A, 1355B, 1355C, 1355D, 1355E, 1355F bis 1355N-1 und 1355N), die eine vereinheitlichte Shader-Kern-Architektur bereitstellen, in der ein einziger Kern oder Art von Kern alle Arten von programmierbarem Shader-Code ausführen kann, einschließlich Shader-Programmcode, um Vertex-Shader, Fragment-Shader und/oder Rechen-Shader zu implementieren. Die vereinheitlichte Shader-Kern-Architektur ist auch konfigurierbar, um direkt kompilierte GPGPU-Programme hoher Ebene (z. B. CUDA) auszuführen. Die genaue Anzahl von vorhandenen Shader-Kernen kann zwischen Ausführungsformen und Implementierungen variieren. Außerdem beinhaltet der Grafikprozessor 1340 einen Inter-Kern-Aufgabenmanager 1345, der als ein Thread-Dispatcher zum Versenden von Ausführungs-Threads an einen oder mehrere Shader-Kerne 1355A-1355N und eine Kachelungseinheit 1358 zum Beschleunigen von Kacheloperationen für kachelbasiertes Rendering agiert, wobei die Rendering-Operationen für eine Szene in einen Bildraum unterteilt sind, um sich zum Beispiel lokale räumliche Kohärenz innerhalb einer Szene zunutze zu machen oder um die Verwendung von internen Caches zu optimieren.
  • Überblick Über Maschinelles Lernen
  • Ein Maschinenlernalgorithmus ist ein Algorithmus, der basierend auf einem Satz von Daten lernen kann. Ausführungsformen von Maschinenlernalgorithmen können konfiguriert sein, hohe Abstraktionen innerhalb eines Datensatzes zu modellieren. Zum Beispiel können Bilderkennungsalgorithmen verwendet werden, um zu bestimmen, welche von mehreren Kategorien zu welcher gegebenen Eingabe gehören; Regressionsalgorithmen können bei einer Eingabe einen numerischen Wert ausgeben; und Mustererkennungsalgorithmen können verwendet werden, um übersetzten Text zu generieren oder eine Text-zu-Sprache- und/oder Spracherkennung durchzuführen.
  • Eine beispielhafte Art eines Maschinenlernalgorithmus ist ein neuronales Netz. Es gibt viele Arten von neuronalen Netzen; ein einfacher Typ eines neuronalen Netzes ist ein vorwärtsgekoppeltes Netzwerk. Ein vorwärtsgekoppeltes Netzwerk kann als ein azyklischer Graph implementiert sein, in dem die Knoten in Schichten angeordnet sind. In der Regel beinhaltet die Topologie eines vorwärtsgekoppelten Netzwerks eine Eingabeschicht und eine Ausgabeschicht, die durch mindestens eine verborgene Schicht getrennt sind. Die verborgene Schicht transformiert durch die Eingabeschicht empfangene Eingaben in eine Repräsentation, die zum Generieren von Ausgaben in der Ausgabeschicht nützlich ist. Die Netzwerkknoten sind vollständig über Edges mit den Knoten in angrenzenden Schichten verbunden, es gibt aber keine Edges zwischen Knoten innerhalb jeder Schicht. Daten, die an den Knoten einer Eingabeschicht eines vorwärtsgekoppelten Netzwerks empfangen werden, werden zu den Knoten der Ausgabeschicht über eine Aktivierungsfunktion ausgebreitet (das heißt „vorwärtsgekoppelt“), welche die Zustände der Knoten jeder nachfolgenden Schicht in dem Netzwerk basierend auf Koeffizienten („Gewichtungen“) berechnet, die jeweils mit jedem der Edges, welche die Schichten verbinden, assoziiert sind. In Abhängigkeit von dem spezifischen Modell, das von dem Algorithmus repräsentiert wird, der ausgeführt wird, kann die Ausgabe von dem neuronalen Netzwerkalgorithmus verschiedene Formen annehmen.
  • Bevor ein Algorithmus zum maschinellen Lernen verwendet werden kann, um ein bestimmtes Problem zu modellieren, wird der Algorithmus unter Verwenden eines Trainingsdatensatzes trainiert. Das Trainieren eines neuronalen Netzwerks beinhaltet das Auswählen einer Netzwerktopologie, das Verwenden eines Satzes von Trainingsdaten, die ein von dem Netzwerk modelliertes Problem darstellen, und das Anpassen der Gewichtungen, bis das Netzwerkmodell für alle Instanzen des Trainingsdatensatzes mit einem minimalen Fehler arbeitet. Zum Beispiel wird während eines Trainingsprozesses mit überwachtem Lernen für ein neuronales Netzwerk die Ausgabe, die von dem Netzwerk als Reaktion auf die eine Instanz in einem Trainingsdatensatz repräsentierende Eingabe produziert 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 Gewichtungen, die den Verbindungen zugeordnet sind, werden angepasst, um diesen Fehler zu minimieren, während das Fehlersignal rückwärts durch die Schichten des Netzwerks ausgebreitet wird. Das Netzwerk wird als „trainiert“ betrachtet, wenn die Fehler für jede der aus den Instanzen des Trainingsdatensatzes generierten Ausgaben minimiert sind.
  • Die Präzision eines Algorithmus zum maschinellen Lernen kann von der Qualität des zum Trainieren des Algorithmus verwendeten Datensatzes erheblich beeinflusst werden. Der Trainingsprozess kann berechnungsintensiv sein und kann einen erheblichen Zeitaufwand auf einem herkömmlichen Universalprozessor erfordern. Dementsprechend wird eine Parallelverarbeitungshardware verwendet, um viele Arten von Maschinenlernalgorithmen zu trainieren. Dies ist besonders zum Optimieren des Trainings von neuronalen Netzwerken nützlich, weil sich die Berechnungen, die beim Anpassen der Koeffizienten in neuronalen Netzwerken durchgeführt werden, auf natürliche Weise für parallele Implementierungen eignen. Insbesondere wurden viele Maschinenlernalgorithmen und Softwareanwendungen angepasst, um die Parallelverarbeitungshardware in Universalgrafikverarbeitungsvorrichtungen zu verwenden.
  • 14 ist ein verallgemeinertes Diagramm eines Maschinenlern-Softwarestapels 1400. Eine Maschinenlernanwendung 1402 kann konfiguriert sein, um ein neuronales Netzwerk durch Verwenden eines Trainingsdatensatzes zu trainieren, oder ein trainiertes tiefes neuronales Netzwerk zu verwenden, um Maschinenintelligenz zu implementieren. Die Maschinenlernanwendung 1402 kann Trainings- und Inferenzfunktionalität für ein neuronales Netzwerk und/oder spezialisierte Software aufweisen, die verwendet werden kann, um ein neuronales Netzwerk vor dem Einsatz zu trainieren. Die Maschinenlernanwendung 1402 kann eine beliebige Art von Maschinenintelligenz implementieren, einschließlich unter anderem Bilderkennung, Mapping und Lokalisierung, autonome Navigation, Sprachsynthese, medizinische Bildgebung oder Sprachübersetzung.
  • Die Hardware-Beschleunigung für die Maschinenlernanwendung 1402 kann über ein Maschinenlern-Framework 1404 aktiviert werden. Das Maschinenlern-Framework 1404 kann eine Bibliothek von Maschinenlernprimitiven bereitstellen. Maschinenlernprimitive sind grundlegende Operationen, die üblicherweise von Maschinenlernalgorithmen durchgeführt werden. Ohne das Maschinenlern-Framework 1404 wäre es erforderlich, dass Entwickler von Maschinenlernalgorithmen die Hauptberechnungslogik, die dem Maschinenlernalgorithmus zugeordnet ist, erzeugen und optimieren, und dann die Berechnungslogik reoptimieren, während neue Parallelprozessoren entwickelt werden. Stattdessen kann die Maschinenlernanwendung dazu konfiguriert sein, die notwendigen Berechnungen unter Verwendung der Primitive durchzuführen, die von dem Maschinenlern-Framework 1404 bereitgestellt werden. Zu beispielhaften Primitiven gehören Tensorfaltungen, Aktivierungsfunktionen und Pooling, bei denen es sich um Berechnungsoperationen handelt, die während des Trainierens eines faltenden neuronalen Netzwerks (CNN) ausgeführt werden. Das Maschinenlern-Framework 1404 kann auch Primitive bereitstellen, um grundlegende Unterprogramme für lineare Algebra zu implementieren, die von vielen Maschinenlernalgorithmen durchgeführt werden, wie etwa Matrix- und Vektoroperationen.
  • Das Maschinenlern-Framework 1404 kann Eingabedaten verarbeiten, die von der Maschinenlernanwendung 1402 empfangen werden, und die geeignete Eingabe in ein Rechen-Framework 1406 erzeugen. Das Berechnungs-Framework 1406 kann die an GPGPU-Treiber 1408 bereitgestellten zugrundeliegenden Anweisungen abstrahieren, um es dem Maschinenlern-Framework 1404 zu ermöglichen, sich eine Hardware-Beschleunigung über GPGPU-Hardware 1410 zunutze zu machen, ohne dass das Maschinenlern-Framework 1404 genaue Kenntnisse über die Architektur der GPGPU-Hardware 1410 haben muss. Zusätzlich kann das Rechen-Framework 1406 eine Hardware-Beschleunigung für das Maschinenlern-Framework 1404 über viele verschiedene Arten und Generationen der GPGPU-Hardware 1410ermöglichen.
  • Implementierungen Neuronaler Maschinenlern-Netzwerke
  • Die Rechenarchitektur, die durch hierin beschriebene Ausführungsformen bereitgestellt wird, kann konfiguriert sein, um die Arten von Parallelverarbeitung durchzuführen, die insbesondere zum Trainieren und Einsetzen neuronaler Netzwerke für Maschinenlernen geeignet ist. Ein neuronales Netzwerk kann als ein Netzwerk von Funktionen, die in einer Graphenbeziehung stehen, verallgemeinert werden. Wie in der Technik bekannt ist, gibt es eine Vielzahl von Arten von Implementierungen neuronaler Netzwerke, die beim maschinellen Lernen verwendet werden. Ein beispielhafter Typ eines neuronalen Netzwerks ist, wie vorstehend beschrieben, das vorwärtsgekoppelte Netzwerk.
  • Ein zweiter beispielhafter Typ eines neuronalen Netzwerks ist das faltende neuronale Netzwerk (CNN: Convolutional Neural Network). Ein CNN ist ein spezialisiertes vorwärtsgekoppeltes neuronales Netzwerk zum Verarbeiten von Daten, die eine bekannte gitterartige Topologie aufweisen, wie Bilddaten. Dementsprechend werden CNNs üblicherweise für Anwendungen des maschinellen Sehens und der Bilderkennung verwendet, aber sie können auch für andere Arten von Mustererkennung, wie etwa Sprech- und Sprachverarbeitung, verwendet werden. Die Knoten in der CNN-Eingabeschicht sind in einem Satz von „Filtern“ organisiert (Merkmalsdetektoren, die von den rezeptiven Feldern in der Netzhaut inspiriert sind), und die Ausgabe jedes Filtersatzes wird an Knoten in aufeinanderfolgenden Schichten des Netzwerks ausgebreitet. Die Berechnungen für ein CNN beinhalten das Anwenden der mathematischen Faltungsoperation auf jeden Filter, um die Ausgabe dieses Filters zu erzeugen. Faltung ist eine spezielle Art von mathematischer Operation, die durch zwei Funktionen durchgeführt wird, um eine dritte Funktion zu erzeugen, die eine modifizierte Version einer der zwei ursprünglichen Funktionen ist. In der Terminologie eines Faltungsnetzwerks kann die erste Funktion zu der Faltung als die Eingabe bezeichnet werden, während die zweite Funktion als der Faltungskernel bezeichnet werden kann. Die Ausgabe kann als die Merkmalsabbildung bezeichnet werden. Zum Beispiel kann die Eingabe in eine Faltungsschicht ein mehrdimensionales Array von Daten sein, das die verschiedenen Farbkomponenten eines Eingabebilds definiert. Der Faltungskern kann ein mehrdimensionales Array von Parametern sein, wobei die Parameter durch den Trainingsprozess für das neuronale Netzwerk angepasst werden.
  • Rekurrente neuronale Netzwerke (RNNs) sind eine Familie von vorwärtsgekoppelten neuronalen Netzwerken, die Rückmeldungsverbindungen zwischen Schichten beinhalten. RNNs ermöglichen das Modellieren von sequenziellen Daten durch das gemeinsame Nutzen von Parameterdaten über unterschiedliche Teile des neuronalen Netzwerks hinweg. Die Architektur für ein RNN beinhaltet Zyklen. Die Zyklen repräsentieren den Einfluss eines gegenwärtigen Werts einer Variablen auf ihren eigenen Wert zu einem zukünftigen Zeitpunkt, da mindestens ein Abschnitt der Ausgabedaten von dem RNN als eine Rückkopplung zum Verarbeiten einer nachfolgenden Eingabe in einer Sequenz verwendet wird. Diese Eigenschaft macht RNN aufgrund der variablen Natur, in der Sprachdaten zusammengesetzt werden können, besonders nützlich für die Sprachverarbeitung.
  • Die unten beschriebenen Figuren stellen beispielhafte vorwärtsgekoppelte, CNN- und RNN-Netzwerke dar und beschreiben einen allgemeinen Prozess zum jeweils Trainieren und Einsetzen jedes dieser Arten von Netzwerken. Es versteht sich, dass diese Beschreibungen beispielhaft und nicht einschränkend für eine beliebige spezifische hier beschriebene Ausführungsform sind und die veranschaulichten Konzepte allgemein auf tiefe neuronale Netzwerke und Maschinenlerntechniken im Allgemeinen angewendet werden können.
  • Die vorstehend beschriebenen beispielhaften neuronalen Netzwerke können zum Durchführen von Deep Learning (tiefes Lernen) verwendet werden. Deep Learning ist maschinelles Lernen unter Verwendung tiefer neuronaler Netzwerke. Die tiefen neuronalen Netzwerke, die beim Deep Learning verwendet werden, sind künstliche neuronale Netzwerke, die aus mehreren verborgenen Schichten bestehen, im Gegensatz zu flachen neuronalen Netzwerken, die nur eine einzige verborgene Schicht beinhalten. Tiefere neuronale Netzwerke sind im Allgemeinen berechnungsintensiver zu trainieren. Die zusätzlichen verborgenen Schichten des Netzwerks ermöglichen jedoch eine mehrstufige Mustererkennung, die verglichen mit flachen Maschinenlerntechniken zu geringeren Ausgabefehlern führt.
  • Tiefe neuronale Netzwerke, die beim Deep Learning verwendet werden, beinhalten üblicherweise ein Front-End-Netzwerk zum Durchführen einer Merkmalserkennung, das mit einem Back-End-Netzwerk gekoppelt ist, das ein mathematisches Modell darstellt, das Operationen (z. B. Objektklassifizierung, Spracherkennung usw.) basierend auf der dem Modell bereitgestellten Merkmalsdarstellung durchführen kann. Deep Learning ermöglicht ein Durchführen von maschinellem Lernen, ohne dass für das Modell eine manuelle Merkmalskonstruktion durchgeführt werden muss. Stattdessen können tiefe neuronale Netzwerke Merkmale basierend auf einer statistischen Struktur oder Korrelation innerhalb der Eingabedaten lernen. Die erlernten Merkmale können einem mathematischen Modell bereitgestellt werden, das detektierte Merkmale auf einer Ausgabe abbilden kann. Das von dem Netzwerk verwendete mathematische Modell ist im Allgemeinen für die spezifische durchzuführende Aufgabe spezialisiert, und andere Modelle werden verwendet, um andere Aufgaben durchzuführen.
  • Sobald das neuronale Netzwerk strukturiert ist, kann ein Lernmodell auf das Netzwerk angewendet werden, um das Netzwerk dahingehend zu trainieren, spezifische Aufgaben durchzuführen. Das Lernmodell beschreibt, wie die Gewichtungen innerhalb des Modells anzupassen sind, um den Ausgabefehler des Netzwerks zu reduzieren. Fehlerrückpropagation ist ein herkömmliches Verfahren zum Trainieren neuronaler Netzwerke. Ein Eingabevektor wird dem Netzwerk zur Verarbeitung dargestellt. Die Ausgabe des Netzwerks wird unter Verwendung einer Verlustfunktion mit der gewünschten Ausgabe verglichen, und für jedes der Neuronen in der Ausgabeschicht wird ein Fehlerwert berechnet. Die Fehlerwerte werden dann rückwärts verbreitet, bis jedes Neuron einen zugeordneten Fehlerwert aufweist, der grob dessen Beitrag zur ursprünglichen Ausgabe repräsentiert. Das Netzwerk kann dann von diesen Fehlern unter Verwendung eines Algorithmus lernen, wie des stochastischen Gradientenabstiegsalgorithmus, um die Gewichtungen des neuronalen Netzwerks zu aktualisieren.
  • 15A-15B veranschaulichen ein beispielhaftes neuronales Faltungsnetzwerk. 15A veranschaulicht verschiedene Schichten innerhalb eines CNN. Wie in 15A gezeigt, kann ein beispielhaftes CNN, das zum Modellieren einer Bildverarbeitung verwendet wird, eine Eingabe 1502 empfangen, welche die Rot-, Grün- und Blau (RGB)-Komponenten eines Eingabebildes beschreibt. Die Eingabe 1502 kann durch mehrere Faltungsschichten (z. B. erste Faltungsschicht 1504, zweite Faltungsschicht 1506) verarbeitet werden. Die Ausgabe von den mehreren Faltungsschichten kann wahlweise von einem Satz von vollständig verbundenen Schichten 1508 verarbeitet werden. Neuronen in einer vollständig verbundenen Schicht haben volle Verbindungen zu allen Aktivierungen in der vorherigen Schicht, wie zuvor für ein Vorwärtskopplungsnetzwerk beschrieben. Die Ausgabe von den vollständig verbundenen Schichten 1508 kann dazu verwendet werden, ein Ausgabeergebnis von dem Netzwerk zu generieren. Die Aktivierungen innerhalb der vollständig verbundenen Schichten 1508 können unter Verwendung von Matrixmultiplikation anstelle von Faltung berechnet werden. Nicht alle CNN-Implementierungen verwenden vollständig verbundene Schichten 1508. Zum Beispiel kann in einigen Implementierungen die zweite Faltungsschicht 1506 eine Ausgabe für das CNN erzeugen.
  • Die Faltungsschichten sind dünn besetzt verbunden, was sich von der herkömmlichen Konfiguration des neuronalen Netzwerks unterscheidet, die in den vollständig verbundenen Schichten 1508 zu finden ist. Herkömmliche Schichten neuronaler Netzwerke sind vollständig verbunden, sodass jede Ausgabeeinheit mit jeder Eingabeeinheit interagiert. Die Faltungsschichten sind jedoch dünn besetzt verbunden, da die Ausgabe der Faltung eines Feldes (anstelle des jeweiligen Zustandswertes jedes der Knoten in dem Feld) in die Knoten der nachfolgenden Schicht eingegeben wird, wie veranschaulicht. Die den Faltungsschichten zugeordneten Kernels führen Faltungsoperationen durch, deren Ausgabe an die nächste Schicht gesendet wird. Die Dimensionalitätsreduzierung, die in den Faltungsschichten durchgeführt wird, ist ein Aspekt, der dem CNN ermöglicht, zum Verarbeiten großer Bilder skaliert zu werden.
  • 15B veranschaulicht beispielhafte Berechnungsstufen innerhalb einer Faltungsschicht eines CNN. Eine Eingabe in eine Faltungsschicht 1512 eines CNN kann in drei Stufen einer Faltungsschicht 1514 verarbeitet werden. Die drei Stufen können eine Faltungsstufe 1516, eine Detektorstufe 1518 und eine Pooling-Stufe 1520 beinhalten. Die Faltungsschicht 1514 kann dann Daten an eine nachfolgende Faltungsschicht ausgeben. Die letzte Faltungsschicht des Netzwerks kann Ausgabemerkmalsabbildungsdaten erzeugen oder eine Eingabe für eine vollständig verbundene Schicht bereitstellen, um zum Beispiel einen Klassifizierungswert für die Eingabe in das CNN zu generieren.
  • In der Faltungsstufe 1516 werden mehrere Faltungen parallel durchgeführt, um einen Satz linearer Aktivierungen zu erzeugen. Die Faltungsstufe 1516 kann eine affine Transformation beinhalten, die eine beliebige Transformation ist, die als eine lineare Transformation plus eine Umwandlung spezifiziert werden kann. Affine Transformationen beinhalten Rotationen, Übersetzungen, Skalieren 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 Gewichtungen der Neuronen und dem Bereich in der lokalen Eingabe, mit dem die Neuronen verbunden sind. Die Ausgabe aus der Faltungsstufe 1516 definiert einen Satz linearer Aktivierungen, die von aufeinanderfolgenden Stufen der Faltungsschicht 1514 verarbeitet werden.
  • Die linearen Aktivierungen können von einer Detektorstufe 1518 verarbeitet werden. In der Detektorstufe 1518 wird jede lineare Aktivierung durch eine nichtlineare Aktivierungsfunktion verarbeitet. Die nichtlineare Aktivierungsfunktion erhöht die nichtlinearen Eigenschaften des Gesamtnetzwerks, ohne die rezeptiven Felder der Faltungsschicht zu beeinflussen. Es können verschiedene Arten von nichtlinearen Aktivierungsfunktionen verwendet werden. Eine spezielle Art ist die gleichgerichtete lineare Einheit (ReLU: Rectified Linear Unit), die eine Aktivierungsfunktion verwendet, die als f(x) = max (0, x)definiert ist, sodass die Aktivierung bei Null als Schwellenwert verwendet wird.
  • Die Pooling-Stufe 1520 verwendet eine Pooling-Funktion, welche die Ausgabe der zweiten Faltungsschicht 1506 durch eine Zusammenfassungsstatistik der nahegelegenen Ausgaben ersetzt. Die Pooling-Funktion kann dazu verwendet werden, eine Übersetzungsinvarianz in das neuronale Netzwerk einzuführen, so dass kleine Übersetzungen der Eingabe die gepoolten Ausgaben nicht verändern. Invarianz gegenüber lokaler Übersetzung kann in Szenarien nützlich sein, in denen das Vorhandensein eines Merkmals in den Eingabedaten wichtiger als die genaue Stelle des Merkmals ist. Verschiedene Arten von Pooling-Funktionen können während der Pooling-Stufe 1520 verwendet werden, einschließlich Max-Pooling, Durchschnitts-Pooling und 12-Norm-Pooling. Zusätzlichen beinhalten einige CNN-Implementierungen keine Pooling-Stufe. Stattdessen ersetzen solche Implementierungen eine zusätzliche Faltungsstufe, die eine erhöhte Stufenweite im Vergleich zu vorherigen Faltungsstufen aufweist.
  • Die Ausgabe der Faltungsschicht 1514 kann dann durch die nächste Schicht 1522 verarbeitet werden. Die nächste Schicht 1522 kann eine zusätzliche Faltungsschicht oder eine der vollständig verbundenen Schichten 1508 sein. Zum Beispiel kann die erste Faltungsschicht 1504 von 15A zu der zweiten Faltungsschicht 1506 ausgegeben werden, während die zweite Faltungsschicht zu einer ersten Schicht der vollständig verbundenen Schichten 1508 ausgegeben werden kann.
  • 16 veranschaulicht ein beispielhaftes rekurrentes neuronales Netzwerk. In einem rekurrenten neuronalen Netzwerk (RNN) beeinflusst der vorherige Zustand des Netzwerks die Ausgabe des aktuellen Zustands des Netzwerks. RNNs können auf vielfältige Weise unter Verwendung einer Vielfalt von Funktionen konstruiert werden. Bei der Verwendung von RNNs geht es im Allgemeinen darum, mathematische Modelle zu verwenden, um die Zukunft basierend auf einer vorherigen Sequenz von Eingaben vorherzusagen. Ein RNN kann zum Beispiel zum Durchführen einer statistischen Sprachmodellierung verwendet werden, um ein bevorstehendes Wort anhand einer vorherigen Sequenz von Wörtern vorherzusagen. Das veranschaulichte RNN 1600 kann so beschrieben werden, dass es eine Eingabeschicht 1602, die einen Eingabevektor empfängt, verborgene Schichten 1604 zum Implementieren einer rekurrenten Funktion, einen Rückkopplungsmechanismus 1605 zum Ermöglichen eines „Gedächtnisses“ von vorherigen Zuständen und eine Ausgabeschicht 1606 zum Ausgeben eines Ergebnisses aufweist. Das RNN 1600 arbeitet basierend auf Zeitschritten. Der Zustand des RNN zu einem gegebenen Zeitschritt wird basierend auf dem vorherigen Zeitschritt über den Rückkopplungsmechanismus 1605 beeinflusst. Für einen gegebenen Zeitschritt wird der Zustand der verborgenen Schichten 1604 durch den vorherigen Zustand und die Eingabe am aktuellen Zeitschritt definiert. Eine Anfangseingabe (x1) in einem ersten Zeitschritt kann durch die verborgene Schicht 1604 verarbeitet werden. Eine zweite Eingabe (x2) kann von der verborgenen Schicht 1604 unter Verwendung von Zustandsinformationen verarbeitet werden, die während der Verarbeitung der Anfangseingabe (x1) ermittelt wurden. Ein gegebener Zustand kann als st = f(Uxt + Wst-1) berechnet werden, wobei U und W Parametermatrizen sind. Die Funktion f ist im Allgemeinen eine Nichtlinearität, wie die Tangens-Hyperbelfunktion (Tanh) oder eine Variante der Gleichrichterfunktion f(x) = max(0, x). Die spezifische mathematische Funktion, die in den verborgenen Schichten 1604 verwendet wird, kann jedoch abhängig von den spezifischen Implementierungsdetails des RNN 1600 variieren.
  • Zusätzlich zu den beschriebenen grundlegenden CNN- und RNN-Netzwerken können Variationen in diesen Netzwerken ermöglicht werden. Eine beispielhafte RNN-Variante ist das LSTM-RNN (LSTM: Long Short Term Memory - langer Kurzzeitspeicher). LSTM-RNNs sind in der Lage, langfristige Abhängigkeiten zu lernen, die für die Verarbeitung längerer Sprachsequenzen notwendig sein können. Eine Variante des CNN ist ein Deep-Belief-Faltungsnetzwerk, das eine ähnliche Struktur wie ein CNN aufweist und ähnlich wie ein Deep-Belief-Netzwerk trainiert wird. Ein Deep-Belief-Netzwerk (DBN) ist ein generatives neuronales Netzwerk, das aus mehreren Schichten stochastischer (zufälliger) Variablen zusammengesetzt ist. DBNs können Schicht für Schicht unter Verwendung von unüberwachtem Greedy-Lernen trainiert werden. Die gelernten Gewichtungen des DBN können dann verwendet werden, um neuronale Vortrainingsnetzwerke bereitzustellen, indem ein optimaler anfänglicher Satz von Gewichtungen für das neuronale Netzwerk bestimmt wird.
  • 17 veranschaulicht das Training und den Einsatz eines tiefen neuronalen Netzwerks. Sobald ein gegebenes Netzwerk für eine Aufgabe strukturiert wurde, wird das neuronale Netzwerk unter Verwendung eines Trainingsdatensatzes 1702 trainiert. Verschiedene Trainings-Frameworks wurden entwickelt, um eine Hardware-Beschleunigung des Trainingsprozesses zu ermöglichen. Zum Beispiel kann das Maschinenlern-Framework 1404 von 14 als ein Trainings-Framework 1704 konfiguriert sein. Das Trainings-Framework 1704 kann sich in ein untrainiertes neuronales Netzwerk 1706 einklinken und ermöglichen, dass das untrainierte neuronale Netzwerk unter Verwendung der hierin beschriebenen Parallelverarbeitungsressourcen trainiert wird, um ein trainiertes neuronales Netzwerk 1708 zu generieren. Um den Trainingsprozess zu beginnen, können die anfänglichen Gewichtungen zufällig oder durch Vortraining unter Verwendung eines Deep-Belief-Netzwerks gewählt werden. Der Trainingszyklus kann dann entweder auf überwachte oder auf unüberwachte Weise durchgeführt werden.
  • Überwachtes Lernen ist ein Lernverfahren, bei dem das Training in einer vermittelten Operation durchgeführt wird, wie, wenn der Trainingsdatensatz 1702 eine Eingabe beinhaltet, die mit der gewünschten Ausgabe für die Eingabe gepaart ist, oder wenn der Trainingsdatensatz eine Eingabe mit einer bekannten Ausgabe beinhaltet und die Ausgabe des neuronalen Netzwerks manuell eingestuft wird. Das Netzwerk verarbeitet die Eingaben und vergleicht die resultierenden Ausgaben mit einem Satz von erwarteten oder gewünschten Ausgaben. Fehler werden dann zurück durch das System ausgebreitet. Das Trainings-Framework 1704 kann die Gewichtungen anpassen, die das untrainierte neuronale Netzwerk 1706 steuern. Das Trainings-Framework 1704 kann Werkzeuge bereitstellen, um zu überwachen, wie gut das untrainierte neuronale Netzwerk 1706 zu einem Modell konvergiert, das zum Generieren korrekter Antworten basierend auf bekannten Eingabedaten geeignet ist. Der Trainingsprozess findet wiederholt statt, weil die Gewichtungen des Netzwerks angepasst werden, um die durch das neuronale Netzwerk generierte Ausgabe zu verfeinern. Der Trainingsprozess kann fortgesetzt werden, bis das neuronale Netzwerk eine statisch gewünschte Genauigkeit erreicht, die einem trainierten neuronalen Netzwerk 1708 zugeordnet ist. Das trainierte neuronale Netz 1708 kann dann eingesetzt werden, um eine beliebige Anzahl von Maschinenlernoperationen zu implementieren, um ein Inferenzergebnis 1714 basierend auf einer Eingabe neuer Daten 1712 zu generieren.
  • Unüberwachtes Lernen ist ein Lernverfahren, bei dem das Netzwerk versucht, sich selbst unter Verwendung nicht markierter Daten zu trainieren. Somit beinhaltet der Trainingsdatensatz 1702 beim unüberwachten Lernen Eingabedaten ohne jegliche zugeordnete Ausgabedaten. Das untrainierte neuronale Netzwerk 1706 kann Gruppierungen innerhalb der unmarkierten Eingabe lernen und kann bestimmen, wie individuelle Eingaben mit der Gesamtdatenmenge in Beziehung stehen. Unüberwachtes Training kann verwendet werden, um eine selbstorganisierende Abbildung zu erzeugen, die ein Typ des trainierten neuronalen Netzwerks 1708 ist, das in der Lage ist, Operationen durchzuführen, die beim Reduzieren der Dimensionalität von Daten nützlich sind. Unüberwachtes Training kann auch verwendet werden, um eine Anomaliedetektion durchzuführen, welche die Identifizierung von Datenpunkten in einem Eingabedatensatz ermöglicht, der von den normalen Mustern der Daten abweicht.
  • Es können auch Variationen von überwachtem und unüberwachtem Training eingesetzt werden. Semi-überwachtes Lernen ist eine Technik, bei welcher der Trainingsdatensatz 1702 eine Mischung aus markierten und nicht markierten Daten mit gleicher Verteilung beinhaltet. Inkrementelles Lernen ist eine Variante des überwachten Lernens, bei der Eingabedaten kontinuierlich verwendet werden, um das Modell weiter zu trainieren. Inkrementelles Lernen ermöglicht es dem trainierten neuronalen Netzwerk 1708, sich an neue Daten 1712 anzupassen, ohne die Kenntnisse zu vergessen, die dem Netzwerk während eines anfänglichen Trainings vermittelt wurden.
  • Unabhängig, ob überwacht oder unüberwacht, kann der Trainingsprozess für besonders tiefe neuronale Netzwerke für einen einzelnen Rechenknoten zu berechnungsintensiv sein. Anstatt einen einzigen Rechenknoten zu verwenden, kann ein verteiltes Netzwerk von Berechnungsknoten verwendet werden, um den Trainingsprozess zu beschleunigen.
  • 18 ist ein Bockdiagramm, das ein verteiltes Lernen veranschaulicht. Verteiltes Lernen ist ein Trainingsmodell, das mehrere verteilte Rechenknoten verwendet, um ein überwachtes oder unüberwachtes Training eines neuronalen Netzwerks durchzuführen. Die verteilten Berechnungsknoten können jeweils einen oder mehrere Host-Prozessoren und einen oder mehrere der Universal-Verarbeitungsknoten beinhalten. Wie veranschaulicht, kann verteiltes Lernen mit Modellparallelität 1802, Datenparallelität 1804 oder einer Kombination aus Modell- und Datenparallelität 1804 durchgeführt werden.
  • Bei der Modellparallelität 1802 können unterschiedliche Berechnungsknoten in einem verteilten System Trainingsberechnungen für unterschiedliche Teile eines einzelnen Netzwerks durchführen. Zum Beispiel kann jede Schicht eines neuronalen Netzwerks durch einen unterschiedlichen Verarbeitungsknoten des verteilten Systems trainiert werden. Die Vorteile der Modellparallelität beinhalten die Fähigkeit, auf besonders große Modelle zu skalieren. Teilen der Berechnungen in Verbindung mit unterschiedlichen Schichten des neuronalen Netzwerks ermöglicht das Training von sehr großen neuronalen Netzwerken, in denen die Gewichtungen aller Schichten nicht in den Speicher eines einzelnen Berechnungsknotens passen würden. In einigen Fällen kann Modellparallelität insbesondere hilfreich beim Durchführen von unüberwachtem Training von großen neuronalen Netzwerken sein.
  • Bei der Datenparallelität 1804 weisen die verschiedenen Knoten des verteilten Netzes eine vollständige Instanz des Modells auf, und jeder Knoten empfängt einen anderen Teil der Daten. Die Ergebnisse von den unterschiedlichen Knoten werden dann kombiniert. Obgleich unterschiedliche Ansätze zur Datenparallelität möglich sind, erfordern alle datenparallele Trainingsansätze eine Technik zur Kombination von Ergebnissen und zur Synchronisierung der Modellparameter zwischen den einzelnen Knoten. Beispielhafte Ansätzen zum Kombinieren von Daten beinhalten Parametermittelwertbildung und aktualisierungsbasierte Datenparallelität. Die Parametermittelwertbildung trainiert jeden Knoten an einem Untersatz der Trainingsdaten und setzt die globalen Parameter (z. B. Gewichtungen, Biases) auf den Mittelwert der Parameter von jedem Knoten. Die Parametermittelwertbildung verwendet einen zentralen Parameter-Server, der die Parameterdaten beibehält. Die aktualisierungsbasierte Datenparallelität ist ähnlich wie die Parametermittelwertbildung, außer dass anstelle des Parameter-Transfers von den Knoten zu dem Parameter-Server die Aktualisierungen des Modells übertragen werden. Zusätzlich kann eine aktualisierungsbasierte Datenparallelität auf eine dezentrale Weise durchgeführt werden, wobei die Aktualisierungen komprimiert und zwischen Knoten übertragen werden.
  • Die kombinierte Modell- und Datenparallelität 1806 kann zum Beispiel in einem verteilten System implementiert werden, in dem jeder Berechnungsknoten mehrere GPUs beinhaltet. Jeder Knoten kann eine vollständige Instanz des Modells aufweisen, wobei separate GPUs innerhalb jedes Knotens dazu verwendet werden, unterschiedliche Teile des Modells zu trainieren.
  • Verteiltes Training weist einen erhöhten Overhead im Vergleich zum Training auf einer Einzelmaschine auf. Die hier beschriebenen Parallelprozessoren und GPGPUs können jedoch jeweils verschiedene Techniken implementieren, um den Overhead des verteilten Trainings zu reduzieren, darunter Techniken zum Ermöglichen einer GPU-zu-GPU-Datenübertragung mit hoher Bandbreite und einer beschleunigten Synchronisation entfernter Daten.
  • Beispielhafte Maschinenlernanwendungen
  • Maschinenlernen kann angewendet werden, um eine Vielfalt von technologischen Problemen zu lösen, einschließlich Computer-Vision, autonomes Fahren und Navigation, Spracherkennung und Sprachverarbeitung, ohne darauf beschränkt zu sein. Computer-Vision ist traditionell eines der aktivsten Forschungsgebiete für Maschinenlernanwendungen. Anwendungen von Computer-Vision reichen von der Reproduktion menschlicher visueller Fähigkeiten, wie dem Erkennen von Gesichtern, bis hin zur Erzeugung neuer Kategorien visueller Fähigkeiten. Zum Beispiel können Computer-Vision-Anwendungen konfiguriert sein, um Schallwellen aus den Vibrationen zu erkennen, die in den in einem Video sichtbaren Objekten induziert werden. Parallelprozessorbeschleunigtes Maschinenlernen ermöglicht, dass Computer-Vision-Anwendungen unter Verwendung beträchtlich größerer Trainingsdatensätze als früher möglich trainiert werden und ermöglicht, dass Inferenzsysteme unter Verwendung von Niederleistungs-Parallelprozessoren eingesetzt werden.
  • Parallelprozessorbeschleunigtes Maschinenlernen hat Anwendungen für autonomes Fahren, einschließlich Fahrspur- und Verkehrszeichenerkennung, Hindernisvermeidung, Navigation und Fahrkontrolle. Beschleunigte Maschinenlerntechniken können zum Trainieren von Fahrmodellen basierend auf Datensätzen verwendet werden, welche die geeigneten Reaktionen auf bestimmte Trainingseingaben definieren. Die hierin beschriebenen Parallelprozessoren können schnelles Training der zunehmend komplexeren neuronalen Netzwerke ermöglichen, die für autonome Fahrlösungen verwendet werden, und ermöglichen den Einsatz von Niederleistungs-Inferenzierungsprozessoren in einer mobilen Plattform, die für die Integration in autonome Fahrzeuge geeignet ist.
  • Parallelprozessorbeschleunigte tiefe neuronale Netzwerke haben Maschinenlernansätze für automatische Spracherkennung (ASR) ermöglicht. ASR umfasst die Erzeugung einer Funktion, welche die wahrscheinlichste linguistische Sequenz bei einer gegebenen akustischen Eingangssequenz berechnet. Beschleunigtes Maschinenlernen unter Verwendung tiefer neuronaler Netzwerke hat die Ersetzung der verborgenen Markowmodelle (HMMs) und Gaußschen Mischmodelle (GMMs) ermöglicht, die vorher für ASR eingesetzt wurden.
  • Parallelprozessorbeschleunigtes Maschinenlernen kann auch zur Beschleunigung der Verarbeitung natürlicher Sprache verwendet werden. Automatische Lernprozeduren können statistische Inferenzalgorithmen nutzen, um Modelle zu erzeugen, die robust gegenüber fehlerhaften oder ungewohnten Eingaben sind. Beispielhafte Prozessoranwendungen für natürliche Sprache beinhalten automatische maschinelle Übersetzung zwischen menschlichen Sprachen.
  • Die Parallelverarbeitungsplattformen, die für Maschinenlernen verwendet werden, können in Trainingsplattformen und Einsatzplattformen unterteilt werden. Trainingsplattformen sind im Allgemeinen stark parallel und beinhalten Optimierungen zum Beschleunigen von Mehrfach-GPU-Einzelknoten-Training und Mehrfach-Knoten-Mehrfach-GPU-Training, während eingesetzte Maschinenlernplattformen (z. B. Inferenzplattformen) im Allgemeinen Parallelprozessoren mit geringerer Leistung beinhalten, die zur Verwendung in Produkten, wie etwa Kameras, autonomen Robotern und autonomen Fahrzeugen, geeignet sind.
  • Tensorbeschleunigungslogik für Grafik- und Maschinenlernarbeitslasten
  • 19 ist ein Blockdiagramm eines Datenverarbeitungssystems 1900 gemäß einer Ausführungsform. Das Datenverarbeitungssystem 1900 ist ein heterogenes Verarbeitungssystem mit einem Prozessor 1902, einem vereinheitlichten Speicher 1910 und einer GPGPU 1920 einschließlich einer Maschinenlernbeschleunigungslogik. Der Prozessor 1902 und die GPGPU 1920 können beliebige der hierin beschriebenen Prozessoren und GPGPU/Parallelprozessoren sein. Zum Beispiel kann mit zusätzlicher Bezugnahme auf 1 der Prozessor 1902 eine Variante eines oder mehrerer Prozessoren 102 sein und/oder eine Architektur mit diesem bzw. diesen teilen, und die GPGPU 1920 kann eine Variante eines oder mehrerer Grafikprozessoren 108 sein und/oder eine Architektur mit diesem bzw. diesen teilen.
  • Der Prozessor 1902 kann Anweisungen für einen Kompilierer 1915 ausführen, die im Systemspeicher 1912 gespeichert sind. Der Kompilierer 1915 wird auf dem Prozessor 1902 ausgeführt, um Quellcode 1914A in kompilierten Code 1914B zu kompilieren. Der kompilierte Code 1914B kann Anweisungen, die vom Prozessor 1902 ausgeführt werden können, und/oder Anweisungen beinhalten, die von der GPGPU 1920 ausgeführt werden können. Die Kompilierung von Anweisungen, die durch die GPGPU ausgeführt werden sollen, kann unter Verwendung von Shader- oder Rechenprogramm-Kompilierern ermöglicht werden, wie etwa dem Shader-Kompilierer 1027 und/oder dem Shader-Kompilierer 1024 wie in 10. Während des Kompilierens kann der Compiler 1915 Operationen zum Einfügen von Metadaten durchführen, einschließlich Hinweisen bezüglich des Grades an Datenparallelität, die in dem kompilierten Code 1914B vorhanden ist, und/oder Hinweise bezüglich der Datenlokalität, die zu versendenden Threads zugeordnet ist, basierend auf dem kompilierten Code 1914B. Es können auch Hinweise bereitgestellt werden, welche Verarbeitungsressourcen der GPGPU 1920 (oder des Anwendungsprozessors 1902) verwendet werden sollten, um einen gegebenen Satz von Anweisungen innerhalb des kompilierten Codes 1914B auszuführen. In einer Ausführungsform können API-Hinweise hinsichtlich eines Durchsatzes, einer Latenz oder eines Leistungsziels für Anweisungen innerhalb des kompilierten Codes 1914B bereitgestellt werden. In einer Ausführungsform werden spezifische Anweisungen zur Ausführung durch spezifische Verarbeitungsressourcen gerichtet. Der Kompilierer 1915 kann die Informationen beinhalten, die zum Durchführen solcher Operationen erforderlich sind, oder die Operationen können mithilfe einer Laufzeitbibliothek 1916 durchgeführt werden. Die Laufzeitbibliothek 1916 kann den Kompilierer 1915 auch bei der Kompilierung des Quellcodes 1914A unterstützen und kann auch Anweisungen beinhalten, die zur Laufzeit mit dem kompilierten Code 1914B verknüpft sind, um die Ausführung der kompilierten Anweisungen auf der GPGPU 1920 zu ermöglichen. Der Kompilierer 1915 kann auch Registerzuweisung für Variablen über einen Registerzuweiser (RA) ermöglichen und Lade- und Speicherungsanweisungen zum Bewegen von Daten für Variablen zwischen Speicher und dem Register, das für die Variable zugewiesen ist, generieren.
  • Der vereinheitlichte Speicher 1910 repräsentiert einen vereinheitlichten Adressraum, auf den der Prozessor 1902 und die GPGPU 1920 zugreifen können. Der vereinheitlichte Speicher kann Systemspeicher 1912 sowie GPGPU-Speicher 1918 beinhalten. Der GPGPU-Speicher 1918 ist ein Speicher innerhalb eines Adressraums der GPGPU 1920 und kann einen Teil oder den gesamten Systemspeicher 1912 und den lokalen Speicher 1934 der GPGPU 1920 beinhalten. In einer Ausführungsform kann der GPGPU-Speicher 1918 auch mindestens einen Teil eines beliebigen Speichers beinhalten, auf den die GPGPU 1920 zugreifen kann, wie Speicher in anderen Vorrichtungen, auf welche die GPGPU 1920 zugreifen kann. In einer Ausführungsform kann der Anwendungsprozessor 1902 den im Systemspeicher 1912 gespeicherten kompilierten Code 1914B in den GPGPU-Speicher 1918 für den Zugriff durch die GPGPU 1920 abbilden. In einer Ausführungsform sind Zugriffe auf den vereinheitlichten Speicher 1910 kohärente Zugriffe, bei denen Kohärenz über ein kohärente Interconnect, wie etwa Compute Express Link (CXL), beibehalten wird.
  • Die GPGPU 1920 beinhaltet mehrere Rechenblöcke 1924A-1924N, die eine oder mehrere einer Vielzahl von hier beschriebenen Verarbeitungsressourcen beinhalten können. Die Verarbeitungsressourcen können eine Vielfalt unterschiedlicher Berechnungsressourcen sein oder beinhalten, wie zum Beispiel Ausführungseinheiten, Recheneinheiten, Streaming-Multiprozessoren, Grafikmultiprozessoren oder Mehrkerngruppen, wie zum Beispiel in den verschiedenen hierin beschriebenen Grafikprozessorarchitekturen gezeigt. In einer Ausführungsform beinhaltet die GPGPU 1920 zusätzlich einen Tensorbeschleuniger 1923 (z. B. Matrixbeschleuniger), der eine oder mehrere Spezialfunktions-Recheneinheiten beinhalten kann, die dazu ausgestaltet ist, einen Teilsatz von Matrixoperationen (z. B. Skalarprodukt usw.) zu beschleunigen. Der Tensorbeschleuniger 1923 kann auch als Tensorbeschleuniger oder Tensorkern bezeichnet werden. In einer Ausführungsform können Logikkomponenten innerhalb des Tensorbeschleunigers 1923 über die Verarbeitungsressourcen der mehreren Rechenblöcke 1924A-1924N verteilt sein.
  • Die GPGPU 1920 kann auch einen Satz von Ressourcen beinhalten, die durch die Rechenblöcke 1924A-1924N und den Tensorbeschleuniger 1923 gemeinsam genutzt werden können, einschließlich unter anderem eines Satzes von Registern 1925, eines Leistungs- und Leistungsfähigkeitsmoduls 1926 und eines Caches 1927. In einer Ausführungsform beinhalten die Register 1925 direkt und indirekt zugriffsfähige Register, wobei die indirekt zugriffsfähigen Register für die Verwendung durch den Tensorbeschleuniger 1923 optimiert sind. Die Register 1925 können auch globale oder Konfigurationsregister der GPGPU 1920 sein, wobei zusätzliche Universal- und Architekturregister in den Rechenblöcken 1924A-1924N und dem Tensorbeschleuniger 1923 enthalten sind. Das Leistungs- und Leistungsfähigkeitsmodul 1926 kann konfiguriert sein, um eine Leistungsabgabe und Taktfrequenzen für die Rechenblöcke 1924A-1924N anzupassen, um Gate-Leerlaufkomponenten innerhalb der Rechenblöcke 1924A-1924N mit Leistung zu versorgen. In verschiedenen Ausführungsformen kann der Cache 1927 einen Anweisungscache und/oder einen Datencache einer niedrigeren Ebene beinhalten.
  • Die GPGPU 1920 kann zusätzlich einen L3-Datencache 1930 beinhalten, der verwendet werden kann, um Daten zwischenzuspeichern, auf die aus vereinheitlichten Speicher 1910 durch den Tensorbeschleuniger 1923 und/oder die Rechenelemente innerhalb der Rechenblöcke 1924A-1924N zugegriffen wird. In einer Ausführungsform beinhaltet der L3-Datencache 1930 einen gemeinsam genutzten lokalen Speicher 1932, der durch die Rechenelemente innerhalb der Rechenblöcke 1924A-1924N und den Tensorbeschleuniger 1923 gemeinsam genutzt werden kann. Die GPGPU 1920 kann auch einen lokalen Speicher 1934 beinhalten, der pr ist
  • In einer Ausführungsform beinhaltet die GPGPU 1920 eine Anweisungshandhabungslogik, wie eine Abruf- und Decodiereinheit 1921, und eine Scheduler-Steuerung 1922. Die Abruf- und Decodiereinheit 1921 beinhaltet eine Abrufeinheit und eine Decodiereinheit zum Abrufen und Decodieren von Anweisungen zur Ausführung durch einen oder mehrere der Rechenblöcke 1924A-1924N oder den Tensorbeschleuniger 1923. Die Anweisungen können über die Scheduler-Steuerung 1922 für die geeignete Funktionseinheit innerhalb des Rechenblocks 1924A-1924N oder des Tensorbeschleunigers geplant werden. In einer Ausführungsform ist die Planer-Steuerung 1922 eine ASIC, die konfiguriert werden kann, um erweiterte Planungs-Operationen durchzuführen. In einer Ausführungsform ist die Scheduler-Steuerung 1922 ein Mikrocontroller oder ein Verarbeitungskern mit geringer Leistungsaufnahme pro Anweisung, der in der Lage ist, aus einem Firmwaremodul geladene Scheduler-Anweisungen auszuführen.
  • In einer Ausführungsform können einige von den Rechenblöcken 1924A-1924N durchzuführende Funktionen direkt für den Tensorbeschleuniger 1923 geplant oder zu diesem ausgelagert werden. In verschiedenen Ausführungsformen beinhaltet der Tensorbeschleuniger 1923 Verarbeitungselementlogik, die konfiguriert ist, um Matrixrechenoperationen effizient durchzuführen, wie Multiplikations- und Addieroperationen und Skalarproduktoperationen, die von 3D-Grafik- oder Rechen-Shader-Programmen verwendet werden. In einer Ausführungsform kann der Tensorbeschleuniger 1923 konfiguriert sein, um Operationen zu beschleunigen, die von Maschinenlern-Frameworks verwendet werden. In einer Ausführungsform ist der Tensorbeschleuniger 1923 eine anwendungsspezifische integrierte Schaltung, die explizit dazu konfiguriert ist, einen spezifischen Satz von parallelen Matrixmultiplikations- und/oder - additionsoperationen durchzuführen. In einer Ausführungsform ist der Tensorbeschleuniger 1923 ein feldprogrammierbares Gate-Array (FPGA), das Hardware-Logik bereitstellt, die zwischen Arbeitslasten aktualisiert werden kann. In einer Ausführungsform kann der Satz von Rechenoperationen, die durch den Tensorbeschleuniger 1923 durchgeführt werden können, im Vergleich zu den Operationen beschränkt sein, die durch den Rechenblock 1924A-1924N durchgeführt werden können. Der Tensorbeschleuniger 1923 kann jedoch parallele Tensoroperationen mit einem signifikant höheren Durchsatz relativ zu dem Rechenblock 1924A-1924N durchführen.
  • 20A-20B veranschaulichen Architekturen zum Beschleunigen von Matrixoperationen, die durch eine Anweisungs-Pipeline 2000 durchgeführt werden, gemäß Ausführungsformen. 20A veranschaulicht die Anweisungs-Pipeline 2000, wenn sie mit einem systolischen Array 2008 innerhalb des Tensorbeschleunigers 1923 konfiguriert ist. 20B veranschaulicht die Anweisungs-Pipeline 2000, wenn sie mit Ausführungseinheiten 600A-600N konfiguriert ist, die systolische Arrays 612A-612N beinhalten.
  • Wie in 20A gezeigt, kann die Anweisungs-Pipeline 2000 dazu konfiguriert sein, um eine Matrixoperation 2005 durchzuführen, wie unter anderem eine Skalarproduktoperation. Das Skalarprodukt zweier Vektoren ist ein Skalarwert, der gleich der Summe der Produkte entsprechender Komponenten der Vektoren ist. Das Skalarprodukt kann wie in Gleichung (1) unten gezeigt berechnet werden. a b = i = 1 n a i b i = a 1 b 1 + a n b n
    Figure DE102022130862A1_0001
  • Das Skalarprodukt kann in einer Faltungsoperation für ein neuronales Faltungsnetzwerk (CNN) verwendet werden. Während eine 2D-Faltung veranschaulicht ist, kann eine N-dimensionale Faltung an einem N-dimensionalen Volumen unter Verwendung von N-dimensionalen Filtern durchgeführt werden. Eine rezeptive Feldkachel 2002 hebt einen Teil eines Eingabevolumens in einem Eingabevolumenpuffer 2004 hervor. Der Eingabevolumenpuffer kann im Speicher 2010 gespeichert werden. Eine Skalarproduktmatrixoperation 2005 kann zwischen den Daten innerhalb der rezeptiven Feldkachel 2002 und einem Faltungsfilter durchgeführt werden, um einen Datenpunkt innerhalb des Ausgabepuffers 2006 zu generieren, der ebenfalls im Speicher 2010 gespeichert werden kann. In einer Ausführungsform ist der Speicher 2010 ein lokaler Speicher 1934 wie in 19. In verschiedenen Ausführungsformen kann der Speicher 2010 jedoch auch ein vereinheitlichter Speicher 1910 von 19 sein. Der Speicher 2010 kann auch einen oder mehrere Cache-Speicher 1927, 1930 wie in 19 beinhalten.
  • Die Kombination der Datenpunkte innerhalb des Ausgabepuffers 2006 repräsentiert eine Aktivierungsabbildung, die durch die Faltungsoperation generiert wird. Jeder Punkt innerhalb der Aktivierungsabbildung wird generiert, indem die rezeptive Feldkachel über den Eingabevolumenpuffer 2004 geschoben wird. Die Aktivierungsabbildungsdaten können in eine Aktivierungsfunktion eingegeben werden, um einen Ausgabeaktivierungswert zu bestimmen. In einer Ausführungsform kann die Faltung des Eingabevolumenpuffers 2004 innerhalb eines Frameworks als Matrixoperation 2005 hoher Ebene definiert werden. Die Matrixoperationen hoher Ebene können über Primitiv-Operationen durchgeführt werden, wie eine Basic-Linear-Algebra-Subprogram (BLAS)-Operation. Die Primitiv-Operationen können über Hardwareanweisungen beschleunigt werden, die durch die Anweisungs-Pipeline 2000 ausgeführt werden.
  • Die Anweisung-Pipeline 2000, die zum Beschleunigen von Hardwareanweisungen verwendet wird, kann die Anweisungsabruf- und -decodiereinheit 1921, die Hardwareanweisungen abrufen und decodieren kann, und die Scheduler-Steuerung 1922, die decodierte Anweisungen für eine oder mehrere Verarbeitungsressourcen innerhalb der Rechenblöcke 1924A-1924N und/oder des Tensorbeschleunigers 1923 planen kann, beinhalten. In einer Ausführungsform kann eine HardwareAnweisung für die Rechenblöcke 1924A-1924N geplant und dann durch die Rechenblöcke 1924A-1924N an den Tensorbeschleuniger 1923 ausgelagert werden. Die eine oder die mehreren Hardwareanweisungen und assoziierte Daten zum Durchführen der Matrixoperation 2005 können im Speicher 2010 gespeichert werden. Die Ausgabe der Hardwareanweisung kann ebenfalls im Speicher 2010 gespeichert werden.
  • In einer Ausführungsform kann der Tensorbeschleuniger 1923 eine oder mehrere Hardwareanweisungen ausführen, um die Matrixoperation 2005 unter Verwendung eines systolischen Arrays 2008 von Verarbeitungselementen durchzuführen. Das systolische Array 2008 beinhaltet eine Kombination aus programmierbarer und Festfunktions-Hardware, die konfigurierbar ist, um Matrix-Matrix- und Matrix-Vektor-Skalarproduktoperationen sowie andere Operationen durchzuführen, wie Matrix-Matrix- und vereinigte Matrix-Vektor-Multiplikations-Additions-Operationen. In einer Ausführungsform kann der Tensorbeschleuniger 1923 als eine separate E/A-Vorrichtung konfiguriert sein, wie eine Inferenz-Engine oder eine Vision-Verarbeitungseinheit (VPU), eine Neuronalverarbeitungseinheit (NPU) oder ein anderer KI-Inferenzbeschleuniger. In einer solchen Ausführungsform beinhaltet der Tensorbeschleuniger 1923 separaten Speicher und Register und Daten und Anweisungen werden zwischen dem internen Speicher des Tensorbeschleunigers 1923 und dem Speicher 2010 synchronisiert.
  • In verschiedenen Ausführungsformen kann als Alternative oder zusätzlich zu dem Tensorbeschleuniger 1923 eine Matrixbeschleunigungslogik auch in den Verarbeitungsressourcen der Rechenblöcke 1924A-1924N enthalten sein. Wie zum Beispiel in 20B gezeigt, beinhaltet in einer Ausführungsform jeder Rechenblock (z. B. Rechenblock 1924N) ein Array von Ausführungseinheiten 600A-600N. In einer Ausführungsform kann jede Ausführungseinheit in dem Array von Ausführungseinheiten 600A-600N systolische Arrays 612A-612N beinhalten. In einer Ausführungsform sind eine oder mehrere eines Teilsatz der Ausführungseinheiten mit einem systolischen Array konfiguriert. Die Anzahl der systolischen Arrays und der Durchsatz der verfügbaren systolischen Arrays können basierend auf den Leistungs- und Leistungsfähigkeitszielen für eine Vorrichtung variieren. Die Scheduler-Steuerung 1922 kann systolische Matrixoperationen (Skalarprodukte, vereinigte Multiplikation-Additionen usw.) für verfügbare systolische Arrays 612A-612N innerhalb der Ausführungseinheiten 600A-600N der verschiedenen Rechenblöcke 1924A-1924N planen.
  • Während in einer Ausführungsform jeder der Rechenblöcke 1924A-1924N ein Array von Ausführungseinheiten 600A-600N beinhaltet, nutzen die Rechenblöcke 1924A-1924N in einer anderen Ausführungsform eine Architektur mit der Mehrkerngruppe 240A-240N von 2C oder Recheneinheit 260A-260N von 2D gemeinsam. In einer solchen Ausführungsform kann die Scheduler-Steuerung 1922 Anweisungen zum Durchführen von Matrixoperationen an den Tensorkernen 244 von 2 oder Vektorlogikeinheiten 263 von 2D planen. Beschleunigte Matrixoperationen beinhalten Skalarproduktoperationen, Matrixmultiplikationsoperationen und/oder Fused-Multiply-Add-Operationen, die an Ganzzahl- oder Gleitkomma-Matrixelementen und mit verschiedenen Präzisionsniveaus durchgeführt werden können.
  • Tensorbeschleunigung über eine Niederleistungs-Rechen-Engine
  • Die Anweisungs-Pipeline 2000 von 20A-20B ist eine Universal-Grafik- und Rechen-Pipeline, die Grafikoperationen und Rechenoperationen durchführen kann. Die Rechenfähigkeit der Anweisungs-Pipeline 2000 ist für verschiedene Rechenoperationen nützlich, wie für Universal-Berechnung, Hochleistungs-Berechnung, Maschinenlern-/Deep-Learning-Training und Maschinenlern-/Deep-Learning-Inferenz. Der Leistungsverbrauch der Hardware-Ressourcen der Anweisungs-Pipeline 2000 kann jedoch für einige Anwendungsfälle eine Fehlanpassung sein.
  • Hierin ist eine Niederleistungs-Rechen-Engine beschrieben, die in einem Grafikprozessor-SoC enthalten sein kann. Die Niederleistungs-Rechen-Engine stellt eine Lösung bereit, die für Niederleistungs-Client-KI-Anwendungsfälle besser geeignet ist als die primäre Grafik- und Rechen-Engine. Die Niederleistungs-Rechen-Engine ist für die kleinen Modelle und niedrigen Stapelgrößen konfiguriert, die in Client-KI-Anwendungsfällen verwendet werden, wie Instanzsegmentierung für Videokonferenz-Hintergrundunschärfe oder -Ersetzung, KI-basierte Medien-Superauflösung oder KI-basierte zeitliches Anti-Aliasing, ohne darauf beschränkt zu sein. Während die Niederleistungs-Rechen-Engine eine physisch getrennte Engine des Grafik-SoC ist, kann die Niederleistungs-Rechen-Engine Operationen gleichzeitig mit der primären Grafik- und Rechen-Engine ausführen, während Ressourcen, wie Vorrichtungsspeicher, Adresskachelung und Speicherkomprimierung, die der primären Grafik- und Rechen-Engine zur Verfügung stehen, gemeinsam genutzt werden. Die Niederleistungs-Rechen-Engine kann auch die Grafiksoftwareinfrastruktur der primären Grafik- und Rechen-Engine, wie den Grafiktreiber, die Werkzeuge und Bibliotheken, ausschöpfen. Die Niederleistungs-Rechen-Engine stellt Vorteile gegenüber einer separaten Inferenzbeschleuniger-E/A-Vorrichtung bereit, indem die Notwendigkeit vermieden wird, Daten aus dem Speicher der GPU in den Speicher der Inferenzbeschleuniger-E/A-Vorrichtung zu kopieren. Das Vorhandensein der Niederleistungs-Rechen-Engine auf einem Grafik-SoC schließt jedoch nicht die Verwendung einer separaten Inferenzbeschleuniger-E/A-Vorrichtung innerhalb eines Datenverarbeitungssystems oder innerhalb eines integrierten Grafikprozessor-SoC aus.
  • 21 veranschaulicht ein Grafikprozessor-Subsystem 2100, das eine Niederleistungs-Rechen-Engine 2140 beinhaltet, gemäß einer Ausführungsform. In einer Ausführungsform befindet sich das Grafikprozessor-Subsystem 2100 innerhalb eines Niederleistungskomplexes 2134 eines Grafikprozessor-SoC (z. B. des Grafikprozessor-SoC 2400 von 24A). Das Grafikprozessor-SoC kann mehrere Bereiche oder Hardwarekomplexe beinhalten, die sich innerhalb separater Leistungsdomänen des Grafikprozessor-SoC befinden und dazu konfiguriert sein, mit unterschiedlichen Leistungsverbrauchsniveaus zu arbeiten. Der Hochleistungskomplex des Grafikprozessor-SoC kann den lokalen Speicher 1934 und die primären Grafik- und Rechenressourcen des Grafikprozessors beinhalten, wie zum Beispiel den Rechenblock 1924A-1924N, die Geometrie-Pipeline 820 und die Ausführungslogik 850, oder andere primäre Grafik- und Rechenverarbeitungsressourcen der verschiedenen hierin beschriebenen Architekturen, zum Beispiel wie in 2A-2D, 3A bis 3C und 4 beschrieben ist.
  • Der Niederleistungskomplex 2134 des Grafikprozessor-SoC befindet sich in einer separaten Leistungsdomäne als der Hochleistungskomplex und arbeitet unter Verwendung separater Leistungsschienen, die andere Spannungen liefern können, als sie dem Hochleistungskomplex geliefert werden. In einer Ausführungsform wird der Niederleistungskomplex 2134 durch Leistungsschienen geliefert, die auch andere Komplexe, die mit derselben Spannung arbeiten, mit Spannung versorgen. Der Niederleistungskomplex 2134 kann relativ zu anderen Grafikprozessor-SoC-Komponenten separat leistungs- und taktgesteuert sein. Leistungsschalter können das Power-Gating einzelner Komponenten des Niederleistungskomplexes 2134 ermöglichen. Im Allgemeinen wird der dynamische Leistungsverbrauch der Komponenten innerhalb des Niederleistungskomplexes 2134 niedriger als der dynamische Leistungsverbrauch der Komponenten innerhalb von Hochleistungskomplexen sein, welche die primäre Grafik- und Rechenfähigkeit des Grafikprozessor-SoC beinhalten.
  • In einer Ausführungsform repräsentiert der Niederleistungskomplex 2134 ein eigenständiges Untermodul, das in einen Die des Grafikprozessor-SoC integriert sein kann, wie ein eigenständiges Medienmodul, das Medienverarbeitung und KI-Inferenz in einem einzigen Modul bereitstellt. In einer solchen Ausführungsform kann die Schaltungsanordnung des Niederleistungskomplexes 2134 dem Grafikprozessor-SoC ermöglichen, eine Hardware-Beschleunigung für KI-erweiterte Ende-zu-Ende-Videokonferenz oder KI-erweiterte Medienfunktionalität, wie KI-Hochskalierung und -Entrauschung, durchzuführen. In verschiedenen Ausführungsformen kann der Niederleistungskomplex 2134 Vorrichtungslogik 2131, ein Speicher-Fabric 2132, eine Medien-Engine 2136, einen Mikrocontroller 2138 und eine Niederleistungs-Rechen-Engine 2140 beinhalten. In anderen Ausführungsformen kann die Niederleistungs-Rechen-Engine 2140 ein eigenständiges Modul sein, anstatt in die Medien-Engine 2136 integriert zu sein, kann aber auch einen oder mehrere von dem Mikrocontroller 2138, des Speicher-Fabric 2132, des Komprimierers 2133 und/oder der Vorrichtungslogik 2131 beinhalten. Die Niederleistungs-Rechen-Engine 2140 kann auch in andere Beschleunigervorrichtungen, wie ASIC- oder FPGA-Beschleuniger, integriert sein.
  • Die Vorrichtungslogik 2131 ermöglicht eine Nachrichtenübermittlungsschnittstelle 2124, die zum Empfangen von Anweisungen und Befehlen von einem Host-Prozessor und/oder von anderen Komponenten des Grafik-SoC verwendet wird. In einer Ausführungsform ist die Vorrichtungslogik 2131 mit der Vorrichtungslogik des Grafik-SoC integriert und beinhaltet SoC-Fabrics, Systemschnittstellen und E/A-Vorrichtungs-Fabric-Endpunkte. In einer Ausführungsform beinhaltet die Vorrichtungslogik 2131 eine Untervorrichtungslogik, die eine Schnittstelle zwischen der Medien-Engine 2136, der Niederleistungs-Rechen-Engine 2140 und dem Mikrocontroller 2138 und dem Rest des Grafik-SoC bereitstellt.
  • Das Speicher-Fabric 2132 erleichtert eine Kommunikation zwischen den verschiedenen Komponenten des Niederleistungskomplexes 2134 und dem lokalen Speicher 1934. Das Speicher-Fabric 2132 kann ein integriertes Speicher-Fabric des Niederleistungskomplexes 2134 oder eine Komponente eines größeren Speicher-Fabric des Grafik-SoC sein. Das Speicher-Fabric 2132 kann über ein oder mehrere Interconnect-Protokolle, wie ein CXL-Protokoll 2122, mit Speicher und anderen Komponenten des Grafik-SoC kommunizieren. In einer Ausführungsform beinhaltet die Speicherstruktur 2132 einen Komprimierer 2133, um einen verlustlosen Komprimierungsalgorithmus auf Daten anzuwenden, welche die Speicherstruktur 2132 transversieren.
  • Der Mikrocontroller 2138 ist konfiguriert, um Initialisierungs- und Scheduling-Operationen für die Medien-Engine 2136 und die Niederleistungs-Rechen-Engine 2140 zu verwalten. Firmware, die durch den 2138 ausgeführt wird, kann Parameter validieren, die durch einen Kernel-Modus-Grafiktreiber (z. B. Kernel-Modus-Grafiktreiber 1029 von 10), wie Kontextregistrierung und Engine-Rücksetzschnittstellen, um die Gültigkeit der Engines sicherzustellen. Die Firmware des Mikrocontrollers 2138 kann die Medien-Engine 2136 und die Niederleistungs-Rechen-Engine 2140 basierend auf Firmware-Ladeparametern, Vereinigungseinstellungen und speicherabgebildetem E/A (MMIO) initialisieren, dann ein Scheduling auf unterstützten Engines ermöglichen.
  • Die Niederleistungs-Rechen-Engine 2140 ist als eine Niederleistungs-Inferenz-Engine konfiguriert und beinhaltet Hardware zum Beschleunigen der vorherrschenden Edge-Inferenzoperationen für Maschinenlernmodelle, wie Matrixmultiplikation und -faltung. In verschiedenen Ausführungsformen beinhaltet die Niederleistungs-Rechen-Engine 2140 einen Rechen-Befehls-Streamer (CCS 2141), einen Dekomprimierer 2144, einen Cache-Speicher 2145, einen TLB 2147, eine Niederleistungsvektor-Engine 2148 und einen Niederleistungs-Matrixbeschleuniger 2149. Das CCS 2141 streamt Befehle an die Niederleistungsvektor-Engine 2148 und den Niederleistungs-Matrixbeschleuniger 2149. Der Dekomprimierer 2144 ist konfiguriert, um alle komprimierten Daten, die über das Speicher-Fabric 2132 empfangen werden, zu dekomprimieren. Der Cache-Speicher 2145 speichert Daten für Operationen zwischen, die durch die Niederleistungsvektor-Engine 2148 und den Niederleistungs-Matrixbeschleuniger 2149 durchgeführt werden, die auch internen Cache-Speicher beinhalten können. In einer Ausführungsform ist der Cache-Speicher 2145 ein privater physischer Cache, der durch den Grafiktreiber als ein virtueller Cache behandelt werden kann. Der TLB 2147 speichert Adressübersetzungen von virtuell zu physisch zwischen und ermöglicht der Niederleistungsvektor-Engine 2148 und dem Niederleistungs-Matrixbeschleuniger 2149, auf virtuellen Speicheradressen zu arbeiten.
  • Die Niederleistungsvektor-Engine 2148 und der Niederleistungs-Matrixbeschleuniger 2149 sind mit dem Schwerpunkt auf Datentypen mit geringer Präzision, wie FP16, BF16 und INT8, konstruiert. In einer Ausführungsform werden auch Ganzzahlformate mit geringerer Präzision unterstützt, wie INT4, INT2, ternäre, bipolar-binäre oder binäre Präzisionen. In verschiedenen Ausführungsformen beinhalten die Niederleistungsvektor-Engine 2148 und der Niederleistungs-Matrixbeschleuniger 2149 Instanzen der ALU 611 und des systolischen Arrays 612 von 6. Die Niederleistungsvektor-Engine 2148 kann auch Instanzen der Grafikkerne 243 von 2C oder die Vektorlogikeinheiten 263 von 2D beinhalten. Der Niederleistungs-Matrixbeschleuniger 2149 kann Instanzen der Tensorkerne 244 von 2C beinhalten.
  • Die Niederleistungs-Rechen-Engine 2140 kann betrieben werden, während sich der Grafikprozessor in weniger als den maximalen verfügbaren Leistungszuständen befindet, und während die primären Grafik- und Rechenressourcen inaktiv oder ausgeschaltet sind. Beispielhafte Anwendungen, die von der Niederleistungs-Rechen-Engine 2140 profitieren können, beinhalten: Videokonferenzanwendungen (z. B. als Instanz-/Hintergrundsegmentierung, Hochskalierung, Reframing, Rauschunterdrückung, KI-basierte Komprimierung); Videowiedergabe und Cloud-Spielanwendung (z. B. Superauflösung, KI-basiertes zeitliches Anti-Aliasing); und Video- und Fotobearbeitungsanwendungen (z. B. Gesichtserkennung, Foto-Tagging, Style-Transfer). Obwohl die hierin beschriebene Niederleistungs-Rechen-Engine 2140 für Rechenfälle mit niedrigerer Leistung genutzt werden kann, wie etwa KI-Inferenzverwendungsfälle mit niedrigerer Leistung und Mediennachverarbeitung, ist die Niederleistungs-Rechen-Engine 2140 nicht für Universal-Rechenoperationen gedacht und kann funktionale Unterschiede von anderen GPU-Rechenressourcen aufweisen. Zum Beispiel beinhaltet die Niederleistungs-Rechen-Engine 2140 in einer Ausführungsform keinen Textur-Sampler und wird nicht für Operationen verwendet, die einen Textur-Sampler anwenden. Andere Ausführungsformen können die gleiche Funktionalität wie die primären Grafikprozessorressourcen zeigen, aber mit der Erwartung, dass die Leistungsfähigkeit aufgrund der niedrigeren Leistungseinhüllkurven der Niederleistungs-Rechen-Engine 2140 geringer sein wird.
  • In einer Ausführungsform kann der Leistungsverbrauch der Niederleistungsvektor-Engine 2148 und/oder des Niederleistungs-Matrixbeschleunigers 2149 reduziert werden, indem eine explizite Hardwareunterstützung für Gleitkomma (FP32)-Operationen mit einfacher Präzision ausgeschlossen wird. Obwohl Maschinenlernarbeitslasten FP32-Operationen aufweisen können, sind Inferenzoperationen im Vergleich zu 3D-Rendering- und Maschinenlern-Trainingsoperationen weniger von der FP32-Leistungsfähigkeit abhängig. In einer Ausführungsform können mehrere FP16 Funktionseinheiten kombiniert werden, um FP32-Operationen bei reduzierter Leistungsfähigkeit im Vergleich zu der Verwendung von FP16 durchzuführen. In einer Ausführungsform können Inferenzoperationen für Modelle mit FP32-Operationen über die Verwendung dynamischer Quantisierung zu Datentypen mit geringerer Präzision, wie FP16, BF16 oder INT8, ermöglicht werden.
  • 22A-22B veranschaulichen Architekturen 2200, 2250 zum Verbinden der Niederleistungs-Rechen-Engine 2140 mit Software, gemäß Ausführungsformen. 22A veranschaulicht eine Architektur 2200, in der implizit auf die Niederleistungs-Rechen-Engine 2140 über eine private Schnittstelle 2203 der GPU-Vorrichtung 2202 zugegriffen wird. 22B veranschaulicht eine Architektur 2250, in der explizit auf die Niederleistungs-Rechen-Engine 2140 als eine Niederleistungs-Rechen-Untervorrichtung 2206 der GPU-Vorrichtung 2202 zugegriffen werden kann.
  • Wie in 22A gezeigt, kann ein Grafikprozessor als eine GPU-Vorrichtung 2202 auf einem Host-Schnittstellenbus, wie PCIe und/oder CXL, dargestellt werden. Die GPU-Vorrichtung 2202 kann mehrere Befehls-Streamer für die 3D-Engines 2208, eine Rechen-Engine 2210 und Kopier-Engines 2212 beinhalten. Die 3D-Engines 2208 beinhalten einen Render-Befehls-Streamer (RCS 2216), der Render-Befehle verarbeitet, die an die GPU-Vorrichtung 2202 übermittelt werden. Die Rechen-Engines 2210 beinhaltet einen Satz von Rechen-Befehls-Streamern (CCSn 2218), die Rechenbefehle verarbeiten, der an die GPU-Vorrichtung 2202 übermittelt wird. Die Kopier-Engines 2212 beinhaltet einen Satz von Blitter-Befehls-Streamern (BCSn 2219), die Kopierbefehle verarbeiten, der an die GPU-Vorrichtung 2202 übermittelt wird. In einer Ausführungsform wird der Rechen-Befehls-Streamer (CCS 2141) nicht explizit Software-APIs exponiert. Stattdessen kann der Grafiktreiber Befehle an die Niederleistungs-Rechen-Engine 2140 über eine private Schnittstelle 2203 übermitteln, die nicht explizit durch Grafik-, Rechen- und Maschinenlern-APIs anvisiert werden kann.
  • Für die Architektur 2200 von 22A bestimmt der Grafiktreiber, ob eine Aufgabe an die Niederleistungs-Rechen-Engine 2140 übermittelt werden soll. Diese Bestimmung kann autonom durch den Grafiktreiber oder basierend auf Befehls- oder Arbeitslasthinweisen durchgeführt werden, die durch eine API bereitgestellt werden. In einer Ausführungsform kann die Grafiktreibersoftware Heuristik beinhalten, um Arbeitslasten zu klassifizieren und solche Arbeitslasten entweder zu den GPU-Komponenten mit höherer Leistung oder zu der Rechen-Engine 2140 mit niedriger Leistung zu streamen. In einer Ausführungsform können spezifische Befehle von spezifischen APIs explizit als eine Niederleistungs-Rechen- oder KI-Inferenzarbeitslast bezeichnet werden, die zur Übermittlung an die Niederleistungs-Rechen-Engine 2140 vorgesehen ist. In einer Ausführungsform können Arbeitslasten, die über spezifische APIs übermittelt werden, zu der Niederleistungs-Rechen-Engine 2140 zur Ausführung geleitet werden, während andere APIs andere Ressourcen der GPU-Vorrichtung 2202 verwenden.
  • WinML/DirectML ist ein beispielhafter API-Satz, der verwendet werden kann, um KI-Inferenzoperationen durchzuführen. In einer Ausführungsform können unterstützte WinML/DirectML-Metabfehle von dem Treiber über die private Schnittstelle 2203 zu der Niederleistungs-Rechen-Engine 2140 geleitet werden. Metabefehle zeigen für DirectML eine Funktionalitäts-Blackbox mit anbieterspezifischen und architekturspezifischen Optimierungen. Für Instanzen der Niederleistungs-Rechen-Engine 2140, die in ihrer Funktionalität mit mindestens den Rechen-Engines 2210 homogen sind, können HLSL-Programme für WinML/DirectML über die Rechen-Engines 2210 oder die Niederleistungs-Rechen-Engine 2140 ausgeführt werden. Wenn die Rechen-Engines 2210 und die Niederleistungs-Rechen-Engine 2140 in ihrer Funktionalität heterogen sind, werden HLSL-Programme für WinML/DirectML über die Rechen-Engines 2210 ausgeführt. In einer Ausführungsform kann der Grafiktreiber für einige APIs und Arbeitslasten bestimmten, eine Arbeitslast zur gleichzeitigen Ausführung auf der Niederleistungs-Rechen-Engine 2140 sowie einer der 3D Engines 2208, Rechen-Engines 2210, Kopier-Engines 2212 zu partitionieren. Medienverarbeitung über die Medien-Engine 2136 von 21 kann auch gleichzeitig mit Inferenzoperationen durchgeführt werden, die über die Niederleistungs-Rechen-Engine 2140 durchgeführt werden. Da die APIs keinen direkten Zugriff auf die Niederleistungs-Rechen-Engine 2140 haben, wird diese Partitionierung aus der Perspektive der API transparent ausgeführt.
  • Wie in 22B gezeigt, kann die GPU-Vorrichtung 2202 konfiguriert sein, um dem Host-Schnittstellenbus mehrere Untervorrichtungen darzustellen. In einer Ausführungsform ist die GPU-Vorrichtung 2202 konfiguriert, um eine Grafik- und Rechen-Untervorrichtung 2204 für den Hochleistungs-Rechenaspekt der Vorrichtung und eine Niederleistungs-Rechen-Untervorrichtung 2206 für den Niederleistungs-Rechenaspekt der Vorrichtung darzustellen. Ein einziger Grafiktreiber kann verwendet werden, um die Grafik- und Rechen-Untervorrichtung 2204 und die Niederleistungs-Rechen-Untervorrichtung 2206 zu steuern. Die Niederleistungs-Rechen-Untervorrichtung 2206 kann verwendet werden, um explizit auf die Niederleistungs-Rechen-Engine 2140 und ihre zugeordnete CCS 2141 zuzugreifen.
  • Die Verwendung einer separaten Untervorrichtung ermöglicht es den APIs, die Niederleistungs-Rechen-Untervorrichtung 2206 zur Befehlsübermittlung explizit anzuvisieren. Während Operationen, die auf nur Niederleistungsoperationen beschränkt sind (z. B. Medien- und/oder Niederleistungsberechnung), kann jedoch ein größerer Teil der GPU und der Rechen-Untervorrichtung 2204 in einem Niederleistungszustand verbleiben, was den Gesamtvorrichtungsleistungsverbrauch reduziert. In einer Ausführungsform können in Abhängigkeit von der API einige Rechenarbeitslasten partitioniert und an sowohl die Grafik- als auch die Rechen-Untervorrichtung 2204 und die Niederleistungs-Rechen-Untervorrichtung 2206 verteilt werden, und diese Arbeitslasten können gleichzeitig ausgeführt werden. Die Niederleistungs-Rechen-Untervorrichtung 2206 kann auch gleichzeitig mit der Medien-Engine 2136 arbeiten. In einer Ausführungsform können die Niederleistungs-Rechen-Untervorrichtung 2206 und die Rechen-Untervorrichtung 2204 Speicherzuteilungen nahtlos gemeinsam nutzen, ohne dass Datenkopien, eine Umwandlung von einem gekachelten in ein lineares Speicherlayout oder eine Deaktivierung der Komprimierung für gemeinsam genutzte Daten benötigt werden. Einige APIs, die von der GPU-Vorrichtung 2202 unterstützt werden, können mit der Erwartung einer separaten Niederleistungs-Rechen-Untervorrichtung 2206 konfiguriert sein. In einer Ausführungsform sind Niederleistungs-Rechen-Operationen für KI-Inferenz, die über die OpenVINO-API durchgeführt werden, explizit auf die Niederleistungs-Rechen-Untervorrichtung 2206 gerichtet.
  • Das explizite Präsentieren einer Niederleistungs-Rechen-Untervorrichtung 2206 ermöglicht es APIs, die Niederleistungs-Rechen-Engine 2140 intelligenter für Arbeitslasten im Vergleich zu einer impliziten Arbeitslastrichtung über den Grafiktreiber anzuvisieren. In einigen Ausführungsformen ist sich der Grafiktreiber keiner QoS-Überlegungen, Durchsatzanforderungen (z. B. TOPS/TFLOPS) oder Leistungs-versus- Leistungsfähigkeitsanforderungen für eine gegebene Arbeitslast bewusst, während solche Anforderungen auf der API-Ebene bekannt sein können. Dementsprechend können APIs intelligent die Niederleistungs-Rechen-Engine 2140 für Niederleistungs-Rechenarbeitslasten anvisieren. Verschiedene Maschinenlern-Frameworks oder Laufzeitbibliotheken können Heuristik zum Versenden von Rechenaufträgen an entweder die Niederleistungs-Rechen-Untervorrichtung 2206 oder die Rechen-Untervorrichtung 2204 entwickeln, mit einer weiteren Unterscheidung zwischen Vektor-Engines und Matrixbeschleunigern oder systolischen Arrays, die der Rechen-Untervorrichtung 2204 zugeordnet sind, und wobei einige APIs auch die Fähigkeit aufweisen, Arbeitslasten an Host-Prozessoren des Datenverarbeitungssystems, das den 2202 beinhaltet, zu versenden. In einer Ausführungsform ist die Niederleistungs-Rechen-Untervorrichtung 2206 konfiguriert, um eine Funktionalität zu unterstützen, die auch durch Vision-Prozessoreinheiten (VPUs), eine Neuronalverarbeitungseinheit (NPU) oder andere KI-Inferenzbeschleuniger bereitgestellt wird, die im Allgemeinen von GPU-Vorrichtungen getrennte und unabhängige E/A-Vorrichtungen sind. In einer solchen Ausführungsform können Arbeitslasten für VPUs, NPUs oder andere E/A-Vorrichtungen, die konfiguriert sind, um Inferenzoperationen für neuronale Netzwerke zu beschleunigen, zu der Niederleistungs-Rechen-Untervorrichtung 2206 geleitet werden, was die Anforderung von separaten E/A-Vorrichtungen zum Verarbeiten solcher Arbeitslasten beseitigt. In einer Ausführungsform kann ein Grafikprozessor-SoC die Niederleistungs-Rechen-Untervorrichtung 2206 sowie eine VPU, NPU oder ähnliche Inferenzbeschleunigervorrichtungen beinhalten. In einer solchen Ausführungsform können Arbeitslasten über die Niederleistungs-Rechen-Untervorrichtung 2206 und die zusätzliche Inferenzbeschleuniger-E/A-Vorrichtung partitioniert werden. Alternativ dazu können die Niederleistungs-Rechen-Untervorrichtung 2206 und die zusätzliche Inferenzbeschleuniger-E/A-Vorrichtung gleichzeitig separate Arbeitslasten ausführen oder können separaten APIs dediziert sein.
  • 23A-23B veranschaulichen Verfahren 2300, 2320 zum Übermitteln von Rechenarbeitslasten auf einem Grafikprozessoren mit einer Niederleistungs-Rechen-Engine gemäß Ausführungsformen. 23A veranschaulicht ein Verfahren 2300 zum Übermitteln einer Rechenarbeitslast an eine Niederleistungs-Rechen-Engine, die für impliziten Zugriff konfiguriert ist. 23b veranschaulicht ein Verfahren 2320 zum Übermitteln einer Rechenarbeitslast an eine Niederleistungs-Rechen-Engine, die für expliziten Zugriff konfiguriert ist.
  • Wie in 23A gezeigt, beinhaltet Verfahren 2300 ein Empfangen einer Rechenarbeitslast an einer Softwareschnittstelle für einen Grafikprozessor, der mehrere Hardware-Verarbeitungs-Engines (2302) beinhaltet. In einer Ausführungsform ist die Softwareschnittstelle ein Grafiktreiber, der dem Grafikprozessor zugeordnet ist, und die mehreren Hardware-Verarbeitungs-Engines weisen eine Rechen-Engine und eine Niederleistungs-Rechen-Engine auf. Der Grafikprozessor kann zusätzlich eine Grafik-Engine und eine Medien-Engine zum Ausführen von Grafik- und Medienarbeitslasten beinhalten. Anwendungen, die der Grafik-Engine und der Medien-Engine zugeordnet sind, können auch Rechenarbeitslasten zur Ausführung durch die Rechen-Engine und/oder die Niederleistungs-Rechen-Engine übermitteln. Die Rechenarbeitslast kann einen Befehl oder einen Satz von Befehlen beinhalten, die von einer Rechen- oder Maschinenlernbibliothek über ein API-Modul, das von dem Grafiktreiber bereitgestellt wird, an die Softwareschnittstelle übermittelt werden. In einer Ausführungsform ist die Rechenarbeitslast einem API-Primitiv zugeordnet, das der Ziel-Engine befiehlt, mehrere Operationen durchzuführen.
  • Die Softwareschnittstelle kann dann bestimmen, an welche der mehreren Hardware-Verarbeitungs-Engines (z. B. eine Ziel-Engine) die Rechenarbeitslast zu versenden ist (2304). Die Ziel-Engine-Bestimmung kann basierend auf der API, die der Rechenarbeitslast zugeordnet ist, einem Befehl oder Befehlen, die der Arbeitslast zugeordnet sind, und Leistung, Leistungsfähigkeit, Effizienzcharakteristiken, die für die Arbeitslast durch die API angefordert werden, durchgeführt werden. Die Ziel-Engine-Bestimmung kann auch basierend auf den aktuellen Ausführungsmetriken der mehreren Verarbeitungs-Engines durchgeführt werden. Befehle, die bestimmten APIs zugeordnet sind, werden Hardware-Verarbeitungs-Engines bereitgestellt, die diese APIs unterstützen. Wenn mehrere Hardware-Verarbeitungs-Engines eine API unterstützen, kann die Engine, die zum Ausführen der Rechenarbeitslast ausgewählt ist, basierend auf der API, die der Rechenarbeitslast zugeordnet ist, oder dem Befehl oder dem Satz von Befehlen, die der Arbeitslast zugeordnet sind, bestimmt werden. Einige APIs können zum Beispiel der Niederleistungs-Rechen-Engine zugeordnet sein und andere APIs können der Rechen-Engine zugeordnet sein. Zum Beispiel können Arbeitslasten, die von einer Maschinenlerninferenz-API empfangen werden, der Niederleistungs-Rechen-Engine bereitgestellt werden. Wenn die Rechen-Engine und die Niederleistungs-Rechen-Engine beide eine API unterstützen, kann die Ziel-Engine basierend auf der Funktionalität bestimmt werden, die zum Ausführen der Befehle erforderlich ist. Obwohl zum Beispiel die Niederleistungs-Rechen-Engine und die Rechen-Engine beide eine API unterstützen können, fehlt der Niederleistungs-Rechen-Engine möglicherweise einige Funktionalität, die zum Ausführen gewisser Befehle der Rechenarbeitslast erforderlich ist. In diesem Szenario kann die Rechen-Engine zum Durchführen der Arbeitslast verwendet werden. Die Ziel-Engine-Bestimmung kann auch basierend auf Leistungs-, Leistungsfähigkeits- und/oder Effizienzcharakteristiken der verschiedenen Engines vorgenommen werden. In einer Ausführungsform ist die Rechenarbeitslast einem Satz von Hinweisen zugeordnet, der über die API bereitgestellt wird. Diese Hinweise können verwendet werden, um zwischen Hardware-Verarbeitungs-Engines mit ähnlicher oder überlappender Funktionalität auszuwählen. Zum Beispiel können Rechenarbeitslasten, die angefordert werden, um mit niedriger Leistung oder höherer Effizienz durchgeführt zu werden, durch die Niederleistungs-Rechen-Engine durchgeführt werden, während andere Rechenarbeitslasten durch die Rechen-Engine durchgeführt werden können. In einer Ausführungsform kann, falls die Rechenarbeitslast entweder durch die Rechen-Engine oder die Niederleistungs-Rechen-Engine durchgeführt werden kann und die Rechen-Engine belegt ist, die Arbeitslast durch die Niederleistungs-Rechen-Engine ausgeführt werden.
  • Sobald eine Bestimmung erfolgt, zu welcher der Hardware-Verarbeitungs-Engines die Rechenarbeitslast übermittelt werden soll, kann die Softwareschnittstelle eine Liste von Hardware-Befehlen generieren, um an die Ziel-Engine versendet zu werden, die zum Ausführen der Rechenarbeitslast verwendet wird (2306). Die Softwareschnittstelle kann dann die generierte Liste von Hardware-Befehlen mit einem Indikator (z. B. einer Kennung) der Ziel-Engine markieren (2308). Die Softwareschnittstelle kann dann die Liste von Hardware-Befehlen an die markierte Engine übermitteln, um die Ausführung der Rechenarbeitslast zu ermöglichen (2310). In einigen Ausführungsformen kann die Rechenarbeitslast auf mehreren Hardware-Verarbeitungs-Engines partitioniert und ausgeführt werden. Zum Beispiel kann ein Teil der Rechenarbeitslast durch die Rechen-Engine ausgeführt werden und ein anderer Teil der Rechenarbeitslast kann durch die Niederleistungs-Rechen-Engine ausgeführt werden. In solchen Ausführungsformen können mehrere Listen von Hardware-Befehlen generiert und markiert werden, oder eine einzige Liste von Hardware-Befehlen kann mit unterschiedlichen Gruppen von Befehlen generiert werden, die unterschiedliche Tags aufweisen. In einer Ausführungsform kann eine erste Befehlsliste zur Übermittlung an die Rechen-Engine markiert werden und eine zweite Befehlsliste kann zur Übermittlung an die Niederleistungs-Rechen-Engine markiert werden. In einer Ausführungsform kann eine einzige Befehlsliste generiert und an mehrere Engines übermittelt werden, wobei Engines Befehle ausführen oder Befehle basierend auf dem Tag umgehen, das dem Befehl oder der Gruppe von Befehlen zugeordnet ist.
  • Die Partitionierung kann in Szenarien durchgeführt werden, bei denen die Rechen-Engine und die Niederleistungs-Rechen-Engine jeweils Unterstützung für die durchzuführenden Operationen beinhalten und jede Engine ausreichend Ressourcen zum Ausführen der Arbeitslast aufweist. In einer Ausführungsform kann eine heterogene Partitionierung für eine Rechenarbeitslast durchgeführt werden, wobei die unterschiedlichen Kapazitäten der Rechen-Engine und der Niederleistungs-Rechen-Engine bei der Partitionierung der Arbeitslast berücksichtigt werden. Zum Beispiel kann ein Teil der Arbeitslast, der die Verwendung eines Textur-Sampler beinhaltet, durch die Rechen-Engine durchgeführt werden und andere Teile der Arbeitslast können durch die Niederleistungs-Rechen-Engine durchgeführt werden. Während der Ausführung einer partitionierten Arbeitslast können die Rechen-Engine und die Niederleistungs-Rechen-Engine jeweils in einen gemeinsam genutzten Speicherpool im lokalen Speicher abgebildet werden.
  • Wie in 23B beinhaltet das Verfahren 2320 das Initialisieren, auf einer Grafikvorrichtung, einer Grafik- und Rechen-Untervorrichtung und einer Niederleistungs-Rechen-Untervorrichtung (2322). In einer Ausführungsform ist die Grafikvorrichtung eine E/A-Vorrichtung, die an einem Host-Interconnect, wie etwa PCIe oder CXL, angebracht ist. Die Grafik- und Rechen-Untervorrichtung und die Niederleistungs-Rechen-Untervorrichtung können als separate Untervorrichtungen derselben Grafikvorrichtung dargestellt werden, wobei beide Untervorrichtungen von demselben Treiber unterstützt werden. Das Verfahren 2320 beinhaltet zusätzlich das Initialisieren einer Rechenwarteschlange und einer Niederleistungs-Rechenwarteschlange an einer Softwareschnittstelle eines Grafikprozessors (2324). Die Rechenwarteschlange kann Befehle zur Übermittlung an einen Rechen-Befehls-Streamer der Grafik- und Rechenvorrichtung empfangen und die Niederleistungs-Rechenwarteschlange kann Befehle zur Übermittlung an einen Rechen-Befehls-Streamer der Niederleistungs-Rechenvorrichtung empfangen. Wenn die Softwareschnittstelle eine Rechenarbeitslast empfängt (2326), kann die Softwareschnittstelle eine angegebene Untervorrichtung für die Rechenarbeitslast bestimmen (2328). Die Softwareschnittstelle kann dann die Liste von Hardware-Befehlen an die angegebene Untervorrichtung übermitteln (2330). Rechenarbeitslasten, die zur Ausführung auf der Grafik- und Rechen-Untervorrichtung empfangen werden, können gleichzeitig mit Arbeitslasten ausgeführt werden, die zur Ausführung durch die Niederleistungs-Rechen-Untervorrichtung empfangen werden. Arbeitslasten, die durch die Grafik- und Rechen-Untervorrichtung ausgeführt werden, können auch Hardware-Ressourcen und Speicherzuteilungen mit Arbeitslasten gemeinsam nutzen, die durch die Niederleistungs-Rechenvorrichtung ausgeführt werden. Zum Beispiel kann auf einen Zeiger auf Speicher, der durch die Grafik- und Rechen-Untervorrichtung zugeordnet wird, durch die Niederleistungs-Rechen-Untervorrichtung wirksam zugegriffen werden. Arbeitslasten, die durch die Niederleistungs-Rechen-Untervorrichtung ausgeführt werden, können auch mit Arbeitslasten zusammenarbeiten, die durch eine Medien-Engine der Grafikvorrichtung ausgeführt werden, um KIunterstützte Medienoperationen, wie hierin beschrieben, zu ermöglichen. Zum Beispiel können eine Medien-Engine der Grafik- und Rechen-Untervorrichtung und die Niederleistungs-Rechen-Untervorrichtung jeweils auf ein Video-Frame im Speicher zugreifen, ohne eine Kopieroperation durchzuführen.
  • 24A-24C veranschaulichen eine disaggregierte 3D-strukturierte SoC-Architektur eines Grafikprozessor-SoC 2400 gemäß verschiedenen Ausführungsformen. 24A veranschaulicht Komponenten eines Grafikprozessor-SoC 2400 gemäß hierin beschriebenen Ausführungsformen. 24B veranschaulicht eine Implementierung des Grafikprozessor-SoC 2400, bei der die hierin beschriebene Niederleistungs-Rechen-Engine in einem System-Die 2306 enthalten ist. 24C veranschaulicht eine Implementierung des Grafikprozessor-SoC 2400, bei der die hierin beschriebene Niederleistungs-Rechen-Engine in dem Rechen-Die enthalten ist.
  • Wie in 24A beinhaltet das Grafikprozessor-SoC 2400 ein Gehäusesubstrat 2402 mit einem aktiven Basis-Die 2404, der einen Level-4 (L4)-Cache-Speicher beinhaltet. Der aktive Basis-Die 2404 verbindet sich mit einem Rechen-Die 2407 und einem System-Die 2406, die auf der Oberseite des aktiven Basis-Die 2404 positioniert sind. Das Grafikprozessor-SoC 2400 beinhaltet Speicher-Interconnects 2408A-2408B, die lokalen Vorrichtungsspeicher mit dem aktiven Basis-Die 2404 und dem System-Die 2406 koppeln. Der lokale Vorrichtungsspeicher kann ein Niederleistungs-Doppeldatenraten (LPDDR: Low Power Double Data Rate)- oder Grafik-DDR (GDDR)-Speicher sein. In einigen Ausführungsformen kann der lokale Vorrichtungsspeicher auch ein Speicher mit hoher Bandbreite (HBM) sein.
  • 24B zeigt zusätzliche Architekturdetails für den aktiven Basis-Die 2404, den System-Die 2406 und den Rechen-Die 2407 gemäß einer Ausführungsform. In einer Ausführungsform beinhaltet der aktive Basis-Die 2404 einen Satz von Die-Interconnects 2411A-2411D, die eine Schaltungsanordnung innerhalb des aktiven Basis-Die 2404 mit dem System-Die 2406 und dem Rechen-Die 2407 koppeln. Der aktive Basis-Die 2404 beinhaltet auch einen L4-Cache mit einem Satz von L4- Cache-Blöcken 2412A-2412F und einer L4-Cache-Steuerung 2413. Die L4-Cache-Steuerung 2413 speichert Daten zwischen, die Speicherzugriffen auf den lokalen Vorrichtungsspeicher innerhalb der L4-Cache-Blöcke 412A-2412F zugeordnet sind. Die Anzahl von L4-Cache-Blöcken 2412A-2412F kann basierend auf der Größe des L4-Cache variieren und L4-Cache kann proportional zur Größe des lokalen Vorrichtungsspeichers bemessen werden. In einer Ausführungsform werden lokale Speicherzugriffe, die durch die Rechen-Engine 2414, die Niederleistungs-Rechen-Engine 2140 und die Medien-Engine 2136 durchgeführt werden, über den L4-Cache bedient, wobei die L4-Cache-Steuerung 2413 im Fall eines Cache-Fehltreffers auf den lokalen Vorrichtungsspeicher zugreift. Die L4-Cache-Steuerung 2413 greift über eine Speicherschnittstelle 2430, die mit dem lokalen Vorrichtungsspeicher über Speicher-Interconnects 2408A-2408B verbunden ist, auf den lokalen Vorrichtungsspeicher zu.
  • Der Rechen-Die 2407 beinhaltet eine Rechen-Engine 2414, eine L4-Schnittstelle 2415 und mehrere CXL-Kanäle 2416A-2416B. Die Rechen-Engine 2414 beinhaltet Universalgrafikverarbeitungselemente in Form einer oder mehrerer Instanzen der Rechenblöcke 1924A-1924N von 19. Die Rechen-Engine 2414 ist von anderen Komponenten des Grafikprozessor-SoC 2400 disaggregiert, was eine modulare Architektur ermöglicht, in der die Verarbeitungsfähigkeit des Grafikprozessor-SoC 2400 leicht über die Verwendung unterschiedlicher Implementierungen des Rechen-Die 2407 angepasst werden kann. Außerdem können unterschiedliche Prozesstechnologien und/oder unterschiedliche Hersteller verwendet werden, um unterschiedliche Implementierungen des Rechen-Die 2407 zu fertigen, ohne dass signifikante Anpassungen an dem aktiven Basis-Die 2404 oder dem System-Die 2406 erforderlich sind. Die L4-Schnittstelle 2415 ermöglicht einen Zugriff der Rechen-Engine 2414 auf den L4-Cache. Zwischengespeicherte Speicherzugriffe, die durch die Rechen-Engine 2414 auf einen lokalen Vorrichtungsspeicher durchgeführt werden, können über die L4-Schnittstelle 2415 bedient werden. Die CXL-Kanäle 2416A-2416B ermöglichen kohärenten Zugriff auf einen gemeinsamen Speicherraum, der sowohl lokalen Vorrichtungsspeicher als auch Systemspeicher beinhaltet.
  • Der System-Die 2406 beinhaltet mehrere CXL-Kanäle für verschiedene CXL-Protokolle, einschließlich CXL.io, CXL.cache und/oder CXL.memory, und beinhaltet die CXL-Kanäle 2416A-2416B. Der System-Die 2406 beinhaltet auch eine Systemschnittstelle 2420, eine Anzeige-Engine 2421 und ein System-Fabric 2425. Das System-Fabric 2425 beinhaltet primäre Switch-Fabrics für das Grafik-SoC 2400. Der System-Die 2406 beinhaltet auch die Medien-Engine 2136, die Funktionseinheiten zum Durchführen von Medien-Codierungs- und -Decodierungsoperationen und die hierin beschriebene Niederleistungs-Rechen-Engine 2140 beinhaltet. Es können mehrere Instanzen der Medien-Engine 2136 vorhanden sein. In einer Ausführungsform kann die Medien-Engine 2136, die Niederleistungs-Rechen-Engine 2140 teilweise zu einem eigenständigen Medienmodul disaggregiert werden. Die Anzeige-Engine 2421 erleichtert die Darstellung eines Frame-Pufferspeichers und ermöglicht die Steuerung von Anzeigevorrichtungen, die über verschiedene physische Anzeigeschnittstellen gekoppelt sind.
  • 24C zeigt zusätzliche Architekturdetails für den aktiven Basis-Die 2404, den System-Die 2406 und den Rechen-Die 2407 gemäß einer anderen Ausführungsform. In einer Ausführungsform können, anstatt die Medien-Engine 2136 und die Niederleistungs-Rechen-Engine 2140 in dem System-Die 2406 aufzunehmen, diese Komponenten in einem Niederleistungskomplex innerhalb des Rechen-Die 2407 enthalten sein. In verschiedenen anderen Ausführungsformen kann die Anzeige-Engine 2421 auch in dem Rechen-Die 2407 enthalten sein.
  • Zusätzliche Beispielhafte Rechenvorrichtung
  • 25 ist ein Blockdiagramm einer Rechenvorrichtung 2500 einschließlich eines Grafikprozessors 2504 gemäß einer Ausführungsform. Versionen der Rechenvorrichtung 2500 können eine Kommunikationsvorrichtung, wie eine Set-Top-Box (z. B. internetbasierte Kabelfernsehen-Set-Top-Boxen usw.), GPS (Global Positioning System)-basierte Vorrichtungen usw., sein oder darin integriert sein. Die Rechenvorrichtung 2500 kann auch mobile Rechenvorrichtungen, wie Mobiltelefone, Smartphones, PDAs (Personal Digital Assistants), Tablet-Computer, Laptop-Computer, E-Reader, Smart-Fernseher, Fernsehplattformen, am Körper tragbare Vorrichtungen (z. B. Brillen, Armbanduhren, Armbänder, Smartcards, Schmuck, Kleidungsstücke usw.), Medienabspieler, usw., sein oder darin integriert sein. Zum Beispiel beinhaltet die Rechenvorrichtung 2500 in einer Ausführungsform eine mobile Rechenvorrichtung, die eine integrierte Schaltung einsetzt, wie eine integrierte System-on-Chip-Schaltung, die verschiedene Hardware- und/oder Firmwarekomponenten der Rechenvorrichtung 2500 auf einem einzigen Chip integriert. Die Rechenvorrichtung 2500 kann eine Rechenvorrichtung wie das Verarbeitungssystem 100 von 1 sein.
  • Die Rechenvorrichtung 2500 beinhaltet einen Grafikprozessor 2504. Der Grafikprozessor 2504 repräsentiert einen beliebigen hierin beschriebenen Grafikprozessor. In einer Ausführungsform beinhaltet der Grafikprozessor 2504 einen Cache 2514, der ein einziger Cache sein kann oder in mehrere Segmente eines Cache-Speichers unterteilt sein kann, einschließlich einer beliebigen Anzahl von L1-, L2-, L3- oder L4-Caches, Rendering-Caches, Tiefencaches, Sampler-Caches und/oder Shader-Einheiten-Caches, ohne darauf beschränkt zu sein. In einer Ausführungsform kann der Cache 2514 ein Last-Level-Cache sein, der mit dem Anwendungsprozessor 2506 gemeinsam genutzt wird.
  • In einer Ausführungsform beinhaltet der Grafikprozessor 2504 einen Grafikmikrocontroller, der Steuer- und Scheduling-Logik für den Grafikprozessor implementiert. Die Steuer- und Scheduling-Logik kann Firmware sein, die durch den Grafikmikrocontroller 2515 ausgeführt wird. Die Firmware kann beim Booten durch die Grafiktreiberlogik 2522 geladen werden. Die Firmware kann auch auf einen elektronisch löschbaren programmierbaren Nurlesespeicher programmiert sein oder von einer Flash-Speichervorrichtung innerhalb des Grafikmikrocontrollers 2515 geladen werden. Die Firmware kann ein GPU-OS 2516 ermöglichen, das eine Vorrichtungsverwaltungslogik 2517, eine Vorrichtungstreiberlogik 2518 und einen Scheduler 2519 beinhaltet. Das GPU-OS 2516 kann auch einen Grafikspeichermanager 2520 beinhalten, der den Grafikspeichermanager 2521 innerhalb der Grafiktreiberlogik 2522 ergänzen oder ersetzen kann.
  • Der Grafikprozessor 2504 beinhaltet auch eine GPGPU-Engine 2544, die eine oder mehrere Grafik-Engines, Grafikprozessorkerne und andere Grafikausführungsressourcen, wie hierin beschrieben, beinhaltet. Derartige Grafikausführungsressourcen können in den Formen dargestellt werden, die unter anderem Ausführungseinheiten, Shader-Engines, Fragmentprozessoren, Vertexprozessoren, Streaming-Multiprozessoren, Grafikprozessor-Cluster oder eine beliebige Sammlung von Rechenressourcen beinhalten, die für die Verarbeitung von Grafikressourcen oder Bildressourcen oder zum Durchführen von Universal-Berechnungsoperationen in einem heterogenen Prozessor geeignet sind. Die Verarbeitungsressourcen der GPGPU-Engine 2544 können innerhalb mehrerer Kacheln einer Hardwarelogik enthalten sein, die mit einem Substrat verbunden ist, wie in 11B bis 11D veranschaulicht. Die GPGPU-Engine 2544 kann GPU-Kacheln 2545 beinhalten, die Grafikverarbeitungs- und Ausführungsressourcen, Caches, Sampler usw. beinhalten. Die GPU-Kacheln 2545 können auch lokalen flüchtigen Speicher beinhalten oder können zum Beispiel mit einer oder mehreren Speicherkacheln gekoppelt sein, wie in 3B bis 3C gezeigt.
  • Die GPGPU-Engine 2544 kann auch eine oder mehrere Spezialkacheln 2546 beinhalten, die zum Beispiel eine nichtflüchtige Speicherkachel 2556, eine Netzwerkprozessor-Kachel 2557 und/oder eine Universal-Rechenkachel 2558 beinhalten. Die GPGPU-Engine 2544 beinhaltet außerdem eine Niederleistungs-Rechen-Engine 2559 und einen Matrix-Multiplikationsbeschleuniger 2560. Die Universal-Rechenkachel 2558 kann auch Logik zum Beschleunigen von Matrixmultiplikationsoperationen beinhalten, und/oder die Universal-Rechenkachel 2558 kann die Niederleistungs-Rechen-Engine 2559 und den Matrix-Multiplikationsbeschleuniger 2560 beinhalten. Die Niederleistungs-Rechen-Engine 2559 kann die hierin beschriebene Niederleistungs-Rechen-Engine 2140 sein und beinhaltet in einer Ausführungsform Niederleistungsversionen der Logikeinheiten innerhalb der Universal-Rechenkachel 2558 und des Matrix-Multiplikationsbeschleunigers 2560. Die Universal-Rechenkachel 2558, die Niederleistungs-Rechen-Engine 2559 und der Matrix-Multiplikationsbeschleuniger 2560 können Operationen durchführen, um Primitive zu beschleunigen, die durch eines oder mehrere Maschinenlern-Frameworks 2512 bereitgestellt werden. Das eine oder die mehreren Maschinenlern-Frameworks 2512 können Instanzen des Maschinenlern-Frameworks 1404 von 14 beinhalten.
  • Die nichtflüchtige Speicher-Kachel 2556 kann nichtflüchtige Speicherzellen und eine Steuerlogik beinhalten. Die Steuerlogik der nichtflüchtigen Speicher-Kachel 2556 kann von einer der Vorrichtungsverwaltungslogik 2517 oder der Vorrichtungstreiberlogik 2518 verwaltet werden. Die Netzwerkprozessor-Kachel 2557 kann Netzwerkverarbeitungsressourcen beinhalten, die mit einer physischen Schnittstelle innerhalb der Eingabe/Ausgabe(E/A)-Quellen 2510 der Rechenvorrichtung 2500 gekoppelt sind. Die Netzwerkprozessor-Kachel 2557 kann von der Vorrichtungsverwaltungslogik 2517 und/oder der Vorrichtungstreiberlogik 2518 verwaltet werden.
  • Der Matrix-Multiplikationsbeschleuniger 2560 ist ein modularer skalierbarer Sparse-Matrix-Multiplikationsbeschleuniger, wie hierin beschrieben. Der Matrix-Multiplikationsbeschleuniger 2560 kann mehrere Verarbeitungspfade beinhalten, wobei jeder Verarbeitungspfad mehrere Pipeline-Stufen beinhaltet. Jeder Verarbeitungspfad kann eine separate Anweisung ausführen. In verschiedenen Ausführungsformen kann der Matrix-Multiplikationsbeschleuniger 2560 Architekturmerkmale von einem beliebigen von mehreren der hierin beschriebenen Matrix-Multiplikationsbeschleuniger aufweisen. In einer Ausführungsform ist der Matrix-Multiplikationsbeschleuniger 2560 zum Beispiel ein vier-tiefes systolisches Array mit einer Rückkopplungsschleife, die konfigurierbar ist, um mit einem Vielfachen von vier logischen Stufen (z. B. vier, acht, zwölf, sechzehn, usw.) zu arbeiten. In einer Ausführungsform beinhaltet der Matrix-Multiplikationsbeschleuniger 2560 eine oder mehrere Instanzen eines Zwei-Pfad-Matrix-Multiplikationsbeschleunigers mit einer Vier-Stufen-Pipeline oder eines Vier-Pfad-Matrix-Multiplikationsbeschleunigers mit einer Zwei-Stufen-Pipeline. In einer Ausführungsform beinhaltet der Matrix-Multiplikationsbeschleuniger 2560 Verarbeitungselemente, die als ein skalierbarer Sparse-Matrix-Multiplikationsbeschleuniger konfiguriert sind, der konfiguriert ist, um nur auf Werten ungleich Null von mindestens einer Eingabematrix zu arbeiten. Operationen an ganzen Spalten oder Untermatrizen können umgangen werden, wenn eine Block-Dünnbesetzung vorhanden ist. Der Matrix-Multiplikationsbeschleuniger 2560 kann auch eine beliebige Logik beinhalten, die auf einer beliebigen Kombination dieser Ausführungsformen basiert. Der Matrix-Multiplikationsbeschleuniger 2560 ist auch konfigurierbar, um Matrixberechnungen für die hierin beschriebenen Maschinenlernmodelle durchzuführen, einschließlich Modelle, die konfiguriert sind, um eine Instanzsegmentierung und einen Style-Transfer durchzuführen. In verschiedenen Ausführungsformen kann der Matrix-Multiplikationsbeschleuniger 2560 Matrixoperationen beschleunigen, die während des Trainings und der Inferenz durchgeführt werden.
  • Wie veranschaulicht, kann die Rechenvorrichtung 2500 in einer Ausführungsform und zusätzlich zu dem Grafikprozessor 2504 ferner eine beliebige Anzahl und Art von Hardwarekomponenten und/oder Softwarekomponenten beinhalten, einschließlich eines Anwendungsprozessors 2506, eines Speichers 2508 und Eingabe/Ausgabe(E/A)-Quellen 2510, ohne darauf beschränkt zu sein. Der Anwendungsprozessor 2506 kann mit einer Hardware-Grafik-Pipeline, wie unter Bezugnahme auf 3A veranschaulicht, zum gemeinsamen Nutzen der Grafik-Pipeline-Funktionalität interagieren. Verarbeitete Daten werden in einem Puffer in der Hardware-Grafik-Pipeline gespeichert und Zustandsinformationen werden in dem Speicher 2508 gespeichert. Die resultierenden Daten können an eine Anzeigesteuerung zur Ausgabe über eine Anzeigevorrichtung, wie die Anzeigevorrichtung 318 von 3A, übertragen werden. Die Anzeigevorrichtung kann von verschiedenen Arten sein, wie ein Kathodenstrahlröhren (CRT: Cathode Ray Tube)-, eine Dünnschichttransistor (TFT: Thin Film Transistor)-, Flüssigkristallanzeige (LCD: Liquid Crystal Display)-, Organische-Leuchtdioden (OLED: Organic Light Emitting Diode)-Array usw., und kann konfiguriert sein, um einem Benutzer über eine grafische Benutzeroberfläche Informationen anzuzeigen.
  • Die Anwendungsprozessoren 2506 können einen oder Prozessoren, wie den (die) Prozessor(en) 102 von 1, beinhalten und können die zentrale Verarbeitungseinheit (CPU) sein, die mindestens teilweise zum Ausführen eines Betriebssystems (OS: Operating System) 2502 für die Rechenvorrichtung 2500 verwendet wird. Das OS 2502 kann als eine Schnittstelle zwischen Hardware und/oder physischen Ressourcen der Rechenvorrichtung 2500 und einem oder mehreren Benutzern dienen. Das OS 2502 kann Treiberlogik für verschiedene Hardwarevorrichtungen in der Rechenvorrichtung 2500 beinhalten. Die Treiberlogik kann eine Grafiktreiberlogik 2522 beinhalten, die den Benutzermodus-Grafiktreiber 1026 und/oder den Kernelmodus-Grafiktreiber 1029 von 10 beinhalten kann. Die Grafiktreiberlogik kann einen Grafikspeichermanager 2521 zum Verwalten eines virtuellen Speicheradressraums für den Grafikprozessor 2504 beinhalten.
  • Es wird in Betracht gezogen, dass in einigen Ausführungsformen der Grafikprozessor 2504 als Teil des Anwendungsprozessors 2506 (wie als Teil eines physischen CPU-Package) vorhanden sein kann, wobei in diesem Fall mindestens ein Teil des Speichers 2508 von dem Anwendungsprozessor 2506 und dem Grafikprozessor 2504 gemeinsam genutzt werden kann, obwohl mindestens ein Teil des Speichers 2508 für den Grafikprozessor 2504 exklusiv sein kann, oder der Grafikprozessor 2504 kann eine separate Speicherung des Speichers aufweisen. Der Speicher 2508 kann ein vorab zugewiesenes Gebiet eines Puffers (z. B. Frame-Puffers) umfassen; jedoch versteht es sich für einen Durchschnittsfachmann, dass die Ausführungsformen nicht darauf beschränkt sind und dass ein beliebiger Speicher, auf den die niedrigere Grafik-Pipeline zugreifen kann, verwendet werden kann. Der Speicher 2508 kann verschiedene Formen von Direktzugriffsspeicher (RAM) (z. B. SDRAM, SRAM usw.) beinhalten, der eine Anwendung umfasst, die den Grafikprozessor 2504 nutzt, um einen Desktop oder eine 3D-Grafikszene zu rendern. Ein Speichersteuerungshub, wie die Speichersteuerung 116 von 1, kann auf Daten im Speicher 2508 zugreifen und diese an den Grafikprozessor 2504 zur Verarbeitung durch die Grafik-Pipeline weiterleiten. Der Speicher 2508 kann anderen Komponenten innerhalb der Rechenvorrichtung 2500 verfügbar gemacht werden. Alle Daten (z. B. Eingabegrafikdaten), die von verschiedenen E/A-Quellen 2510 der Rechenvorrichtung 2500 empfangen wurden, können zum Beispiel temporär in eine Warteschlange im Speicher 2508 eingereiht werden, bevor sie von dem einen oder den mehreren Prozessoren (z. B. dem Anwendungsprozessor 2506) in der Implementierung eines Softwareprogramms oder -anwendung bearbeitet werden. Gleichermaßen werden Daten, für die ein Softwareprogramm bestimmt, dass sie von der Rechenvorrichtung 2500 über eine der Rechensystemschnittstellen an eine äußere Entität gesendet oder in einem internen Speicherungselement gespeichert werden sollen, oft temporär in eine Warteschlange des Speichers 2508 eingereiht, bevor sie übertragen oder gespeichert werden.
  • Die E/A-Quellen können Vorrichtungen beinhalten, wie etwa Touchscreens, Berührungsfelder, Touchpads, virtuelle oder normale Tastaturen, virtuelle oder normale Mäuse, Ports, Verbinder, Netzwerkvorrichtungen oder dergleichen, und können über einen Plattformsteuerungs-Hub 130, wie in 1 referenziert, angebracht werden. Zusätzlich dazu können die E/A-Quellen 2510 eine oder mehrere E/A-Vorrichtungen beinhalten, die für ein Übertragen von Daten zu und/oder von der Rechenvorrichtung 2500 (z. B. einem Netzwerkadapter); oder für eine großskalige nichtflüchtige Speicherung innerhalb der Rechenvorrichtung 2500 (z. B. SSD/HDD) implementiert sind. Benutzereingabevorrichtungen, einschließlich alphanumerischer und anderer Tasten, können verwendet werden, um Informationen und Befehlsauswahlen an den Grafikprozessor 2504 zu kommunizieren. Ein anderer Typ von Benutzereingabevorrichtung ist eine Cursor-Steuerung, wie eine Maus, ein Trackball, ein Touchscreen, ein Touchpad oder Cursor-Richtungstasten, um Richtungsinformationen und Befehlsauswahlen an die GPU zu kommunizieren und eine Cursor-Bewegung auf der Anzeigevorrichtung zu steuern. Kamera- und Mikrofonarrays der Rechenvorrichtung 2500 können eingesetzt werden, um Gesten zu beobachten, Audio und Video aufzuzeichnen und visuelle und auditive Befehle zu empfangen und zu übertragen.
  • Die E/A-Quellen 2510 können eine oder mehrere Netzwerkschnittstellen beinhalten. Die Netzwerkschnittstellen können assoziierte Netzwerkverarbeitungslogik beinhalten und/oder mit der Netzwerkprozessorkachel 2557 gekoppelt sein. Die eine oder die mehreren Netzwerkschnittstellen können Zugriff auf ein LAN, ein Weitbereichsnetzwerk (WAN), ein Metropolitan Area Network (MAN), ein Personal Area Network (PAN), Bluetooth, ein Cloud-Netzwerk, ein zellulares oder mobiles Netzwerk (z. B. der 3. Generation (3G), 4. Generation (4G), 5. Generation (5G) usw.), ein Intranet, das Internet usw. bereitstellen. Die eine oder die mehreren Netzwerkschnittstellen können zum Beispiel eine drahtlose Netzwerkschnittstelle mit einer oder mehreren Antennen beinhalten. Die eine oder die mehreren Netzwerkschnittstellen können auch zum Beispiel eine drahtgebundene Netzwerkschnittstelle zum Kommunizieren mit entfernten Vorrichtungen über Netzwerkkabel beinhalten, das zum Beispiel ein Ethernet-Kabel, ein Koaxkabel, ein Lichtwellenleiterkabel, ein serielles Kabel oder ein Parallelkabel sein kann.
  • Die eine oder die mehreren Netzwerkschnittstellen können Zugriff auf ein LAN bereitstellen, indem zum Beispiel die Standards IEEE 802.11 erfüllt werden, und/oder die drahtlose Netzwerkschnittstelle kann Zugriff auf ein Personal Area Network bereitstellen, indem zum Beispiel die Bluetooth-Standards erfüllt werden. Andere drahtlose Netzwerkschnittstellen und/oder - protokolle, einschließlich vorhergehender und nachfolgender Versionen der Standards, können ebenfalls unterstützt werden. Zusätzlich zu oder anstelle der Kommunikation über die Drahtlos-LAN-Standards können die eine oder die mehreren Netzwerkschnittstellen drahtlose Kommunikation unter Verwendung von zum Beispiel Time Division Multiple Access (TDMA)-Protokollen, Global Systems for Mobile Communications (GSM)-Protokollen, Code Division Multiple Access (CDMA)-Protokollen und/oder einer beliebigen anderen Art von Drahtlos-Kommunikationsprotokollen bereitstellen.
  • Es versteht sich, dass für bestimmte Implementierungen ein weniger oder besser ausgestattetes System als das oben beschriebene Beispiel bevorzugt werden kann. Daher kann die Konfiguration der hierin beschriebenen Datenverarbeitungsvorrichtungen von Implementierung zu Implementierung in Abhängigkeit von zahlreichen Faktoren variieren, wie Preisbeschränkungen, Leistungsfähigkeitsanforderungen, technologischen Verbesserungen oder anderen Umständen. Beispiele beinhalten (ohne Einschränkung) eine Mobilvorrichtung, einen persönlichen digitalen Assistenten, eine mobile Rechenvorrichtung, ein Smartphone, ein Mobiltelefon, ein Handset, einen Ein-Weg-Pager, einen Zwei-Wege-Pager, eine Messaging-Vorrichtung, einen Computer, einen Personal Computer (PC), einen Desktop-Computer, einen Laptop-Computer, einen Notebook-Computer, einen tragbaren Computer, einen Tablet-Computer, einen Server, ein Server-Array oder eine Serverfarm, einen Webserver, einen Netzwerkserver, einen Internetserver, eine Workstation, einen Minicomputer, einen Mainframe-Computer, einen Supercomputer, ein Netzwerkgerät, ein Web-Gerät, ein verteiltes Rechensystem, Mehrprozessorsysteme, prozessorbasierte Systeme, Verbraucherelektronik, programmierbare Verbraucherelektronik, einen Fernseher, einen Digitalfernseher, eine Set-Top-Box, einen drahtlosen Zugriffspunkt, eine Basisstation, eine Teilnehmerstation, ein Mobilteilnehmercenter, eine Funknetzwerksteuerung, einen Router, ein Hub, ein Gateway, eine Bridge, einen Switch, eine Maschine oder Kombinationen davon.
  • Es sei anzumerken, dass Begriffe wie „Knoten“, „Rechenknoten“, „Server“, „Servervorrichtung“, „Cloud-Computer“, „Cloud-Server“, „Cloud-Servercomputer“, „Maschine“, „Host-Maschine“, „Vorrichtung“, „Rechenvorrichtung“, „Computer“, „Rechensystem“ und dergleichen in diesem Dokument austauschbar verwendet werden können. Es ist ferner darauf hinzuweisen, dass Begriffe wie „Anwendung“, „Softwareanwendung“, „Programm“, „Softwareprogramm“, „Package“, „Software-Package“ und dergleichen über dieses gesamte Dokument hinweg austauschbar verwendet werden können. Auch können Begriffe wie „Auftrag“, „Eingabe“, „Anforderung“, „Nachricht“ und dergleichen über dieses gesamte Dokument hinweg austauschbar verwendet werden.
  • Ausführungsformen können zum Beispiel als ein Computerprogrammprodukt bereitgestellt werden, das ein oder mehrere maschinenlesbare Medien mit darauf gespeicherten maschinenausführbaren Anweisungen beinhalten kann, die, wenn sie durch eine oder mehrere Maschinen, wie einen Computer, ein Computernetzwerk oder andere elektronische Vorrichtungen, ausgeführt werden, dazu führen können, dass die eine oder die mehreren Maschinen Operationen gemäß hierin beschriebenen Ausführungsformen ausführen. Ein maschinenlesbares Medium kann unter anderem Disketten, optische Platten, CD-ROMs (Compact Disc-Read Only Memories) und magnetooptische Platten, ROMs, RAMs, EPROMs (Erasable Programmable Read Only Memories), EEPROMs (Electrically Erasable Programmable Read Only Memories), magnetische oder optische Karten, Flash-Speicher oder andere Typen von Medien/maschinenlesbaren Medien, die zum Speichern von maschinenausführbaren Anweisungen geeignet sind, beinhalten.
  • Darüber hinaus können Ausführungsformen als ein Computerprogrammprodukt heruntergeladen werden, wobei das Programm von einem entfernten Computer (z. B. einem Server) zu einem anfordernden Computer (z. B. einem Client) mittels eines oder mehrerer Datensignale, die in einer Trägerwelle oder einem anderen Ausbreitungsmedium realisiert sind und/oder dadurch moduliert werden, über einen Kommunikationslink (z. B. eine Modem- und/oder eine Netzwerkverbindung) übertragen werden kann.
  • Im gesamten Dokument kann der Ausdruck „Benutzer“ austauschbar als „Betrachter“, „Beobachter“, „Person“, „Individuum“, „Endbenutzer“ und/oder dergleichen bezeichnet werden. Es ist zu beachten, dass in diesem Dokument Begriffe wie „Grafikdomäne“ austauschbar mit „Grafikverarbeitungseinheit“, „Grafikprozessor“ oder einfach „GPU“ bezeichnet werden können und in ähnlicher Weise „CPU-Domäne“ oder „Host-Domäne“ austauschbar mit „Computerverarbeitungseinheit“, „Anwendungsprozessor“ oder einfach „CPU“ bezeichnet werden können.
  • Es ist anzumerken, dass Begriffe wie „Knoten“, „Rechenknoten“, „Server“, „Servervorrichtung“, „Cloud-Computer“, „Cloud-Server“, „Cloud-Server-Computer“, „Maschine“, „Host-Maschine“ „Vorrichtung“, „Rechenvorrichtung“, „Computer“, „Rechensystem“ und dergleichen in diesem Dokument austauschbar verwendet werden können. Es ist ferner darauf hinzuweisen, dass Begriffe wie „Anwendung“, „Softwareanwendung“, „Programm“, „Softwareprogramm“, „Package“, „Software-Package“ und dergleichen über dieses gesamte Dokument hinweg austauschbar verwendet werden können. Auch können Begriffe wie „Auftrag“, „Eingabe“, „Anforderung“, „Nachricht“ und dergleichen über dieses gesamte Dokument hinweg austauschbar verwendet werden.
  • Bezugnahmen hierin auf „eine Ausführungsform“, „ein Ausführungsbeispiel“ usw. zeigen an, dass die beschriebene Ausführungsform ein bestimmtes Merkmal, eine Struktur oder Charakteristik umfassen kann, aber nicht jede Ausführungsform muss notwendigerweise das spezielle Merkmal, die Struktur oder Charakteristik beinhalten. Darüber hinaus beziehen sich derartige Formulierungen nicht notwendigerweise auf dieselbe Ausführungsform. Ferner wird, wenn ein bestimmtes Merkmal, eine bestimmte Struktur oder Charakteristik in Verbindung mit einer Ausführungsform beschrieben wird, davon ausgegangen, dass dies innerhalb der Kenntnis eines Fachmannes liegt, ein solches Merkmal, eine solche Struktur oder Charakteristik in Verbindung mit anderen Ausführungsformen in Verbindung zu setzen, unabhängig davon, ob explizit beschrieben oder nicht.
  • In den verschiedenen oben beschriebenen Ausführungsformen soll, sofern nicht ausdrücklich anders angegeben, eine disjunktive Sprache, wie etwa die Formulierung „mindestens eines von A, B oder C“, als entweder A, B oder C oder eine beliebige Kombination davon (z. B. A, B und/oder C) bedeuten. Von daher soll disjunktive Sprache weder implizieren noch so verstanden werden, dass eine gegebene Ausführungsform erfordert, dass zumindest ein A, zumindest ein B oder zumindest ein C vorhanden sind.
  • Eine Ausführungsform stellt eine Einrichtung bereit, die eine Grafikprozessorvorrichtung umfasst, die eine erste Rechen-Engine und eine zweite Rechen-Engine beinhaltet, wobei die zweite Rechen-Engine einen Untersatz der Funktionalität, die von der ersten Rechen-Engine bereitgestellt wird, und einen niedrigeren Leistungsverbrauch relativ zu der ersten Rechen-Engine beinhaltet. In einer Ausführungsform ist die erste Rechen-Engine konfiguriert, um Berechnungen durchzuführen, die einer ersten Arbeitslast zugeordnet sind, die eine Grafikoperation oder eine Universal-Rechenoperation beinhaltet, und die zweite Rechen-Engine ist konfiguriert, um gleichzeitig Berechnungen durchzuführen, die einer zweiten Arbeitslast zugeordnet sind, die eine Inferenzoperation für ein Maschinenlernmodell beinhaltet. In einer Ausführungsform beinhalten die erste Rechen-Engine und die zweite Rechen-Engine jeweils eine Vektor-Engine und einen Matrixbeschleuniger. In einer Ausführungsform ist der Matrixbeschleuniger ein systolisches Array aus Verarbeitungselementen, und das systolische Array aus Verarbeitungselementen ist konfiguriert, um eine Matrix-Multiplikationsoperation durchzuführen. In einer Ausführungsform ist der Grafikprozessor für die Darstellung als eine Eingabe/Ausgabe (E/A)-Vorrichtung für das Host-Interconnect konfiguriert, wobei das Host-Interconnect die Grafikprozessorvorrichtung mit einem Host-Prozessor koppeln soll, wobei die erste Rechen-Engine konfiguriert ist, um als eine erste Untervorrichtung der E/A-Vorrichtung dargestellt zu werden, wobei die zweite Rechen-Engine konfiguriert ist, um als eine zweite Untervorrichtung der E/A-Vorrichtung dargestellt zu werden.
  • In einer Ausführungsform beinhaltet der Grafikprozessor eine erste Leistungsdomäne, welche die erste Rechen-Engine beinhaltet, und eine zweite Leistungsdomäne, welche die zweite Rechen-Engine beinhaltet, wobei die erste Leistungsdomäne einen höheren Leistungsverbrauch im Vergleich zu der zweiten Leistungsdomäne aufweist. Die zweite Leistungsdomäne kann eine Medien-Engine und ein Speicher-Fabric beinhalten, wobei die Medien-Engine und die zweite Rechen-Engine jeweils mit dem Speicher-Fabric verbunden sind. Die zweite Rechen-Engine kann konfiguriert sein, um Berechnungen durchzuführen, die einer zweiten Arbeitslast zugeordnet sind, die eine Inferenzoperation für ein Maschinenlernmodell beinhalten. Die Medien-Engine kann dann konfiguriert werden, um Berechnungen durchzuführen, die einer dritten Arbeitslast, einschließlich einer Medien-Codieroperation oder einer Medien-Decodieroperation, zugeordnet sind. Die Inferenzoperation kann einer Operation künstlicher Intelligenz (KI) zugeordnet sein, die für ein Videoframe durchgeführt wird, das der Medien-Codieroperation der Medien-Decodieroperation zugeordnet ist. Die KI-Operation kann Instanzsegmentierung und eines oder mehrere von Style-Transfer und/oder KI-Hochskalierung und/oder KI-Entrauschung beinhalten.
  • Eine Ausführungsform stellt ein Verfahren bereit, einschließlich Empfangen einer Rechenarbeitslast an einer Softwareschnittstelle für einen Grafikprozessor, wobei der Grafikprozessor mehrere Hardware-Verarbeitungs-Engines beinhaltet, wobei die mehreren Hardware-Verarbeitungs-Engines eine erste Rechen-Engine und eine zweite Rechen-Engine beinhalten, wobei die zweite Rechen-Engine einen niedrigeren Leistungsverbrauch relativ zu der ersten Rechen-Engine aufweist; Bestimmen einer Ziel-Engine der mehreren Hardware-Verarbeitungs-Engines, an welche die Rechenarbeitslast versendet werden soll; Generieren einer Liste von Hardware-Befehlen zum Versenden an die Ziel-Engine; Markieren der Liste von Hardware-Befehlen mit einem Indikator der Ziel-Engine; und Übermitteln einer markierten Liste von Hardware-Befehlen an die Ziel-Engine, um die Ausführung der Rechenarbeitslast zu ermöglichen.
  • In einer Ausführungsform beinhaltet das Verfahren zusätzlich ein Empfangen der Rechenarbeitslast an einem Anwendungsprogrammierschnittstellen (API)-Modul, das der Softwareschnittstelle zugeordnet ist. In einer Ausführungsform beinhaltet das Verfahren zusätzlich ein Bestimmen der Ziel-Engine basierend auf der API, die dem API-Modul zugeordnet ist, an dem die Rechenarbeitslast empfangen wird, und einer Liste von APIs, die durch jeweilige Hardware-Verarbeitungs-Engines der mehreren Hardware-Verarbeitungs-Engines unterstützt werden. Die Ziel-Engine kann auch basierend auf einem oder mehreren Hinweisen bestimmt werden, die durch die API bereitgestellt werden. Der eine oder die mehreren Hinweise, die durch die API bereitgestellt werden, können einen Leistungshinweis oder einen Effizienzhinweis beinhalten und das Verfahren kann ferner das Bestimmen der zweiten Rechen-Engine als die Ziel-Engine basierend auf dem Leistungshinweis beinhalten. Der eine oder die mehreren Hinweise, die durch die API bereitgestellt werden, können einen Leistungsfähigkeitshinweis beinhalten und die erste Rechen-Engine kann basierend auf dem Leistungsfähigkeitshinweis als die Ziel-Engine bestimmt werden.
  • In einer Ausführungsform beinhaltet das Verfahren zusätzlich ein Konfigurieren des Grafikprozessors als eine Eingabe/Ausgabe (E/A)-Vorrichtung für das Host-Interconnect, wobei das Host-Interconnect konfiguriert ist, um die Grafikprozessorvorrichtung mit einem Host-Prozessor zu koppeln, Konfigurieren der ersten Rechen-Engine als eine erste Untervorrichtung der E/A-Vorrichtung, wobei die erste Untervorrichtung eine Unterstützung für einen ersten Satz von APIs aufweist, und Konfigurieren der zweiten Rechen-Engine als eine zweite Untervorrichtung der E/A-Vorrichtung, wobei die zweite Untervorrichtung eine Unterstützung für einen zweiten Satz von APIs aufweist. Das Verfahren kann zusätzlich das Empfangen der Rechenarbeitslast an einem API-Modul der Softwareschnittstelle beinhalten, wobei das API-Modul einer ersten API zugeordnet ist, und das Bestimmen der Ziel-Engine basierend darauf, ob die erste API in dem ersten Satz von APIs oder dem zweiten Satz von APIs enthalten ist, beinhalten. Als Reaktion auf das Bestimmen, dass der erste Satz von APIs und der zweite Satz von APIs jeweils die erste API beinhalten, kann die Ziel-Engine basierend auf einem Befehl oder einer Anweisung bestimmt werden, die der Rechenarbeitslast zugeordnet ist. In einer weiteren Ausführungsform beinhaltet das Verfahren das Generieren der Liste von Hardware-Befehlen, Markieren eines ersten Befehls in der Liste von Hardware-Befehlen mit dem Indikator der ersten Rechen-Engine und Markieren eines zweiten Befehls in der Liste von Hardware-Befehlen mit dem Indikator der zweiten Rechen-Engine.
  • Eine Ausführungsform stellt ein nicht-transitorisches maschinenlesbares Medium bereit, das Anweisungen zum Durchführen von Operationen eines hierin beschriebenen Verfahrens speichert. Eine Ausführungsform stellt ein Datenverarbeitungssystem einschließlich Mitteln zum Durchführen eines hierin beschriebenen Verfahrens bereit. Eine Ausführungsform stellt ein System und ein Verfahren bereit, die in einer Laufzeitbibliothek, die von einem Prozessor eines Datenverarbeitungssystems ausgeführt wird, das Empfangen eines Eingabe-Frames mit Objekten umfasst, die über ein Style-Transfer-Netzwerk, das der Laufzeitbibliothek zugeordnet ist, stilisiert werden, wobei das Style-Transfernetzwerk ein neuronales Netzwerkmodell ist, das trainiert wird, um einen oder mehrere visuelle Styles an einen Eingabe-Frame anzuwenden, wobei eine Instanzsegmentierung an dem Eingabe-Frame unter Verwendung der hierin beschriebenen Niederleistungs-Rechen-Engine durchgeführt wird.
  • Die Patentschrift und die Zeichnungen sind dementsprechend in einem veranschaulichenden und nicht in einem einschränkenden Sinne zu betrachten. Der Fachmann wird erkennen, dass die breit angelegten Techniken der hierin beschriebenen Ausführungsformen in einer Vielfalt von Formen implementiert werden können. Wenngleich also die Ausführungsformen in Verbindung mit Beispielen davon beschrieben wurden, sollte der wahre Schutzumfang der Ausführungsformen nicht auf diese beschränkt sein, da weitere Modifikationen für den Fachmann bei einer Untersuchung der Zeichnungen, der Patentschrift und der folgenden Ansprüche offensichtlich werden.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Nicht-Patentliteratur
    • Hull-Shader 811, Tesselator 813 [0120]
    • Domänen-Shader 817 [0120]
    • systolischen Arrays 2008 [0217]

Claims (23)

  1. Grafikprozessor, der Folgendes beinhaltet: eine erste Rechen-Engine und eine zweite Rechen-Engine, wobei die zweite Rechen-Engine mindestens einen Teilsatz einer Funktionalität beinhaltet, der von der ersten Rechen-Engine bereitgestellt wird, und einen niedrigeren Leistungsverbrauch relativ zu der ersten Rechen-Engine aufweist.
  2. Grafikprozessor nach Anspruch 1, wobei die erste Rechen-Engine konfiguriert ist, um Berechnungen durchzuführen, die einer ersten Arbeitslast zugeordnet sind, die eine Grafikoperation oder eine Universal-Rechenoperation beinhaltet, und wobei die zweite Rechen-Engine konfiguriert ist, um gleichzeitig Berechnungen durchzuführen, die einer zweiten Arbeitslast zugeordnet sind, die eine Inferenzoperation für ein Maschinenlernmodell beinhaltet.
  3. Grafikprozessor nach Anspruch 2, wobei die erste Rechen-Engine und die zweite Rechen-Engine jeweils eine Vektor-Engine und einen Matrixbeschleuniger beinhalten.
  4. Grafikprozessor nach Anspruch 3, wobei der Matrixbeschleuniger ein systolisches Array von Verarbeitungselementen ist und das systolische Array von Verarbeitungselementen konfiguriert ist, um eine Matrixmultiplikationsoperation durchzuführen.
  5. Grafikprozessor nach einem der Ansprüche 1 bis 4, wobei der Grafikprozessor für die Darstellung als eine Eingabe/Ausgabe (E/A)-Vorrichtung für das Host-Interconnect konfiguriert ist, wobei das Host-Interconnect die Grafikprozessorvorrichtung mit einem Host-Prozessor koppeln soll, wobei die erste Rechen-Engine konfiguriert ist, um als eine erste Untervorrichtung der E/A-Vorrichtung dargestellt zu werden, wobei die zweite Rechen-Engine konfiguriert ist, um als eine zweite Untervorrichtung der E/A-Vorrichtung dargestellt zu werden.
  6. Grafikprozessor nach einem der Ansprüche 1 bis 4, ferner umfassend eine erste Leistungsdomäne, welche die erste Rechen-Engine beinhaltet, und eine zweite Leistungsdomäne, welche die zweite Rechen-Engine beinhaltet, wobei die erste Leistungsdomäne einen höheren Leistungsverbrauch relativ zu der zweiten Leistungsdomäne aufweist.
  7. Grafikprozessor nach Anspruch 6, wobei die zweite Leistungsdomäne eine Medien-Engine und eine Speicher-Fabric beinhaltet und die Medien-Engine und die zweite Rechen-Engine mit der Speicher-Fabric verbunden sind.
  8. Grafikprozessor nach Anspruch 7, wobei die zweite Rechen-Engine konfiguriert ist, um Berechnungen durchzuführen, die einer zweiten Arbeitslast zugeordnet sind, die eine Inferenzoperation für ein Maschinenlernmodell beinhaltet, und die Medien-Engine konfiguriert ist, um Berechnungen durchzuführen, die einer dritten Arbeitslast zugeordnet sind, einschließlich einer Medien-Codieroperation oder einer Medien-Decodieroperation.
  9. Grafikprozessor nach Anspruch 8, wobei die Inferenzoperation einer Operation künstlicher Intelligenz (KI) zugeordnet ist, die für ein Videoframe durchgeführt wird, das der Medien-Codieroperation der Medien-Decodieroperation zugeordnet ist.
  10. Grafikprozessor nach Anspruch 9, wobei die KI-Operation eine oder mehrere von einer Instanzsegmentierung, Style-Transfer und/oder KI-Hochskalierung und KI-Entrauschung beinhaltet.
  11. Verfahren, umfassend: Empfangen einer Rechenarbeitslast an einer Softwareschnittstelle für einen Grafikprozessor, wobei der Grafikprozessor mehrere Hardware-Verarbeitungs-Engines beinhaltet, wobei die mehreren Hardware-Verarbeitungs-Engines eine erste Rechen-Engine und eine zweite Rechen-Engine beinhalten, wobei die zweite Rechen-Engine einen niedrigeren Leistungsverbrauch relativ zu der ersten Rechen-Engine aufweist; Bestimmen einer Ziel-Engine der mehreren Hardware-Verarbeitungs-Engines, an welche die Rechenarbeitslast zu versenden ist; Generieren einer Liste von Hardware-Befehlen zum Versenden an die Ziel-Engine; Markieren der Liste von Hardware-Befehlen mit einem Indikator der Ziel-Engine; und Übermitteln einer markierten Liste von Hardware-Befehlen an die Ziel-Engine, um die Ausführung der Rechenarbeitslast zu ermöglichen.
  12. Verfahren nach Anspruch 11, ferner umfassend das Empfangen der Rechenarbeitslast an einem Anwendungsprogrammierschnittstellen-Modul (API-Modul), das der Softwareschnittstelle zugeordnet ist.
  13. Verfahren nach Anspruch 12, ferner umfassend das Bestimmen der Ziel-Engine basierend auf der API, die dem API-Modul zugeordnet ist, an dem die Rechenarbeitslast empfangen wird, und einer Liste von APIs, die durch jeweilige Hardware-Verarbeitungs-Engines der mehreren Hardware-Verarbeitungs-Engines unterstützt werden.
  14. Verfahren nach Anspruch 12, ferner umfassend das Bestimmen der Ziel-Engine der mehreren Hardware-Verarbeitungs-Engines basierend auf einem oder mehreren Hinweisen, die durch die API bereitgestellt werden.
  15. Verfahren nach Anspruch 14, wobei der eine oder die mehreren Hinweise, die durch die API bereitgestellt werden, einen Leistungshinweis oder einen Effizienzhinweis beinhalten und das Verfahren ferner umfasst, dass die zweite Rechen-Engine als die Ziel-Engine basierend auf dem Leistungshinweis bestimmt wird.
  16. Verfahren nach Anspruch 14, wobei der eine oder die mehreren Hinweise, die durch die API bereitgestellt werden, einen Leistungshinweis beinhalten und die erste Rechen-Engine basierend auf dem Leistungshinweis als die Ziel-Engine bestimmt wird.
  17. Verfahren nach einem der Ansprüche 11 bis 16, das ferner Folgendes umfasst: Konfigurieren des Grafikprozessors als eine Eingabe/Ausgabe (E/A)-Vorrichtung für das Host-Interconnect, wobei das Host-Interconnect die Grafikprozessorvorrichtung mit einem Host-Prozessor zwischenverbinden soll; Konfigurieren der ersten Rechen-Engine als eine erste Untervorrichtung der E/A-Vorrichtung, wobei die erste Untervorrichtung Unterstützung für einen ersten Satz von APIs aufweist; und Konfigurieren der zweiten Rechen-Engine als eine zweite Untervorrichtung der E/A-Vorrichtung, wobei die zweite Untervorrichtung Unterstützung für einen zweiten Satz von APIs aufweist.
  18. Verfahren nach Anspruch 17, das ferner Folgendes umfasst: Empfangen der Rechenarbeitslast an einem API-Modul der Softwareschnittstelle, wobei das API-Modul einer ersten API zugeordnet ist; und Bestimmen der Ziel-Engine basierend darauf, ob die erste API in dem ersten Satz von APIs oder dem zweiten Satz von APIs enthalten ist.
  19. Verfahren nach Anspruch 18, ferner umfassend, als Reaktion auf das Bestimmen, dass der erste Satz von APIs und der zweite Satz von APIs jeweils die erste API beinhalten, das Bestimmen der Ziel-Engine der mehreren Hardware-Verarbeitungs-Engines basierend auf einem Befehl oder einer Anweisung, der bzw. die der Rechenarbeitslast zugeordnet ist.
  20. Verfahren nach Anspruch 19, das ferner Folgendes umfasst: Generieren der Liste von Hardware-Befehlen; Markieren eines ersten Befehls in der Liste von Hardware-Befehlen mit dem Indikator der ersten Rechen-Engine; und Markieren eines zweiten Befehls in der Liste von Hardware-Befehlen mit dem Indikator der zweiten Rechen-Engine.
  21. Nicht-transitorisches maschinenlesbares Medium, das Anweisungen speichert, die, wenn sie durch einen oder mehrere Prozessoren ausgeführt werden, bewirken, dass der eine oder die mehreren Prozessoren Operationen durchführen, die ein Verfahren nach einem der Ansprüche 11 bis 20 umfassen.
  22. Nicht-transitorisches maschinenlesbares Medium, das Daten speichert, die, wenn sie durch eine oder mehrere Maschinen ausgeführt werden, bewirken, dass die eine oder die mehreren Maschinen eine integrierte Schaltung fertigen, um Operationen durchzuführen, die ein Verfahren nach einem der Ansprüche 11 bis 20 umfassen.
  23. System, das Mittel zum Durchführen eines Verfahrens nach einem der Ansprüche 11 bis 20 umfasst.
DE102022130862.6A 2021-12-22 2022-11-22 Niederleistungs-inferenz-engine-pipeline in einer grafikverarbeitungseinheit Pending DE102022130862A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/559,352 US20230195519A1 (en) 2021-12-22 2021-12-22 Low power inference engine pipeline in a graphics processing unit
US17/559,352 2021-12-22

Publications (1)

Publication Number Publication Date
DE102022130862A1 true DE102022130862A1 (de) 2023-06-22

Family

ID=86606631

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102022130862.6A Pending DE102022130862A1 (de) 2021-12-22 2022-11-22 Niederleistungs-inferenz-engine-pipeline in einer grafikverarbeitungseinheit

Country Status (3)

Country Link
US (1) US20230195519A1 (de)
CN (1) CN116341661A (de)
DE (1) DE102022130862A1 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11544113B2 (en) * 2019-11-20 2023-01-03 Google Llc Task scheduling for machine-learning workloads

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Domänen-Shader 817
Hull-Shader 811, Tesselator 813
systolischen Arrays 2008

Also Published As

Publication number Publication date
CN116341661A (zh) 2023-06-27
US20230195519A1 (en) 2023-06-22

Similar Documents

Publication Publication Date Title
US11676239B2 (en) Sparse optimizations for a matrix accelerator architecture
DE112020001258T5 (de) Grafikprozessoren und Grafikverarbeitungseinheiten mit Skalarproduktakkumulationsanweisungen für ein Hybrid-Gleitkommaformat
DE102020130078A1 (de) Systolische arithmetik an spärlichen daten
DE102020120372A1 (de) Programmierbare wandlungshardware
DE102018133555A1 (de) Berechnungsoptimierungsmechanismus für tiefe neuronale Netze
DE102020129251A1 (de) Adaptives verformbares kernvorhersagenetzwerk zum bildentrauschen
DE112020000464T5 (de) Mehrfachkachel-grafikprozessor-rendering
DE102019101118A1 (de) Anweisung und Logik für systolisches Skalarprodukt mit Akkumulation
DE102020132272A1 (de) Verfahren und vorrichtung zum codieren basierend auf schattierungsraten
DE102020115680A1 (de) LESEZUSAMMENFüGUNG UND M ULTICAST-RÜCKFÜHRUNG FÜR EINEN GETEILTEN LOKALEN SPEICHER
DE102020130184A1 (de) Optimierungsmechanismus mit spärlich besetzten matrizen
DE112020000854T5 (de) Thread-gruppen-planung für die grafikverarbeitung
DE102020130865A1 (de) Anweisungen und logik für vektor-multiplikation-addition mit zero-skipping
DE112020000848T5 (de) Skalarkernintegration
DE102020129409A1 (de) Dynamisches unterteilen von aktivierungen und kernels zum verbessern von speichereffizienz
DE102020129432A1 (de) System und Verfahren zum Anpassen eines ausführbaren Objekts an eine Verarbeitungseinheit
DE102022125600A1 (de) Eingabefilterung und abtaster-beschleunigung für supersampling
DE102022119733A1 (de) Sammeln von nutzdaten aus beliebigen registern für sende-nachrichten in einer grafikumgebung
DE102020130081A1 (de) Erweiterte prozessorfunktionen für berechnungen
DE102020131666A1 (de) Skalierbare Multiplikationsbeschleunigung dünnbesetzter Matrizen unter Verwendung systolischer Arrays mit Rückkopplungseingaben
DE102020130847A1 (de) Dynamischer aktualisierungsmechanismus für konstanten
DE102022130862A1 (de) Niederleistungs-inferenz-engine-pipeline in einer grafikverarbeitungseinheit
DE102020126551A1 (de) Paralleler dekomprimierungsmechanismus
DE112020000902T5 (de) Datenvorabruf für die grafikdatenverarbeitung
DE102022130536A1 (de) Sich selbst abstimmende thread-verteilungsrichtlinie