DE112020001249T5 - Dünnbesetzt-Optimierungen für eine Matrixbeschleunigerarchitektur - Google Patents

Dünnbesetzt-Optimierungen für eine Matrixbeschleunigerarchitektur Download PDF

Info

Publication number
DE112020001249T5
DE112020001249T5 DE112020001249.2T DE112020001249T DE112020001249T5 DE 112020001249 T5 DE112020001249 T5 DE 112020001249T5 DE 112020001249 T DE112020001249 T DE 112020001249T DE 112020001249 T5 DE112020001249 T5 DE 112020001249T5
Authority
DE
Germany
Prior art keywords
graphics
matrix
processor
memory
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112020001249.2T
Other languages
English (en)
Inventor
Joydeep Ray
Scott Janus
Varghese George
Subramaniam Maiyuran
Altug Koker
Abhishek Appu
Prasoonkumar Surti
Vasanth Ranganathan
Valentin Andrei
Ashutosh Garg
Yoav Harel
Arthur Hunter Jr.
Sungye Kim
Mike MacPherson
Elmoustapha Ould-Ahmed-Vall
William Sadler
Lakshminarayanan Striramassarma
Vikranth Vemulapalli
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 DE112020001249T5 publication Critical patent/DE112020001249T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8046Systolic arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/048Activation functions
    • 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
    • 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/084Backpropagation, e.g. using gradient descent
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computer Hardware Design (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Neurology (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

Hierin beschriebene Ausführungsformen beinhalten Software, Firmware und Hardwarelogik, die Techniken zum Ausführen von Arithmetik an dünnbesetzten Daten über eine systolische Verarbeitungseinheit bereitstellt. Die hierin beschriebene Ausführungsform stellt Techniken bereit, um Rechenoperationen für mit Nullen gefüllte Matrizen und Submatrizen zu überspringen. Ausführungsformen stellen zusätzlich Techniken bereit, um Datenkomprimierung bis hin zu einer Verarbeitungseinheit aufrechtzuerhalten. Ausführungsformen stellen zusätzlich eine Architektur für eine dünnbesetzte bewusste Logikeinheit bereit.

Description

  • QUERVERWEIS AUF VERWANDTE ANWENDUNGEN
  • Die vorliegende Anmeldung betrifft die vorläufigen US-Anmeldungen 62/819 337 mit dem Titel GRAPHICS PROCESSING, von Abhishek Appu et al., eingereicht am 15. März 2019 (Anwaltsakte AC0271-Z), 62/819 435 , mit dem Titel GRAPHICS DATA PROCESSING, von Lakshminarayanan Striramassarma, et al., eingereicht am 15. März 2019 (Anwaltsakte Nr. AC0285-Z), 62/819 361 , mit dem Titel SYSTEMS AND METHODS FOR PARTITIONING CACHE TO REDUCE CACHE ACCESS LATENCY, von Subramaniam Maiyuran et al., eingereicht am 15. März 2019 (Anwaltsakte Nr. AC0286-Z), und 62/935 670 mit dem Titel SYSTOLIC ARITHMETIC ON SPARSE DATA, von Abhishek Appu et al., eingereicht am 15. November 2019 (Anwaltsakte Nr. AC5197-Z), und beansprucht gemäß 35 USC 119(e) die Priorität, wobei der Inhalt hiermit durch Bezugnahme aufgenommen wird.
  • GEBIET
  • Diese Offenbarung betrifft allgemein Datenverarbeitung und insbesondere die Verarbeitung dünnbesetzter Daten über einen Matrixbeschleuniger einer Allzweck-Grafikverarbeitungseinheit.
  • HINTERGRUND DER OFFENBARUNG
  • Die gegenwärtige parallele Grafikdatenverarbeitung beinhaltet Systeme und Verfahren, die entwickelt wurden, um spezifische Operationen an Grafikdaten auszuführen, wie beispielsweise lineare Interpolation, Tesselation, Rasterung, Texturabbildung, Tiefenprüfung usw. Traditionell verwendeten Grafikprozessoren Recheneinheiten mit fester Funktion, um Grafikdaten zu verarbeiten; in jüngerer Zeit wurden jedoch Teile von Grafikprozessoren programmierbar gemacht, was es solchen Prozessoren ermöglicht, eine breitere Vielfalt von Operationen zum Verarbeiten von Eckpunkt- und Fragmentdaten zu unterstützen.
  • Um die Leistung weiter zu steigern, implementieren Grafikprozessoren typischerweise Verarbeitungstechniken, wie beispielsweise Pipelining, die versuchen, so viele Grafikdaten wie möglich in den unterschiedlichen Teilen der Grafikpipeline parallel zu verarbeiten. Parallele Grafikprozessoren mit SIMT-Architekturen (Single Instruction, Multiple Thread) sind darauf ausgelegt, die Menge an paralleler Verarbeitung in der Grafikpipeline zu maximieren. In einer SIMT-Architektur versuchen Gruppen paralleler Threads, Programmanweisungen so oft wie möglich, synchron gemeinsam auszuführen, um die Verarbeitungseffizienz zu erhöhen. Einen allgemeinen Überblick über Soft- und Hardware für SIMT-Architekturen findet man bei Shane Cook, CUDA-Programmierung Kapitel 3, Seiten 37 bis 51 (2013).
  • Figurenliste
  • Damit die Art und Weise, in der die oben genannten Merkmale der vorliegenden Ausführungsformen im Detail verstanden werden können, kann eine genauere Beschreibung der oben kurz zusammengefassten Ausführungsformen unter Bezugnahme auf Ausführungsformen erfolgen, von denen einige in den beigefügten Zeichnungen dargestellt sind. Es ist jedoch anzumerken, dass die beigefügten Zeichnungen nur typische Ausführungsformen veranschaulichen und daher nicht als ihren Umfang einschränkend anzusehen sind.
    • 1 ist ein Blockschaltbild, das ein Computersystem veranschaulicht, das konfiguriert ist, um einen oder mehrere Aspekte der hierin beschriebenen Ausführungsformen zu implementieren;
    • Die 2A bis 2D veranschaulichen parallele Prozessorkomponenten;
    • Die 3A bis 3C sind Blockschaltbilder von Grafik-Multiprozessoren und Multiprozessor-basierten GPUs;
    • Die 4A bis 4F veranschaulichen eine beispielhafte Architektur, in der mehrere GPUs kommunikativ mit mehreren Mehrkernprozessoren gekoppelt sind;
    • 5 veranschaulicht eine Grafikverarbeitungspipeline;
    • 6 veranschaulicht einen Softwarestack für maschinelles Lernen;
    • 7 veranschaulicht eine Allzweck-Grafikverarbeitungseinheit;
    • 8 veranschaulicht ein Multi-GPU-Rechensystem;
    • Die 9A bis 9B veranschaulichen Schichten beispielhafter tiefer neuronaler Netzwerke;
    • 10 veranschaulicht ein beispielhaftes rekurrentes neuronales Netzwerk;
    • 11 veranschaulicht das Training und den Einsatz eines tiefen neuronalen Netzwerks;
    • 12 ist ein Blockschaltbild, das verteiltes Lernen veranschaulicht;
    • 13 veranschaulicht ein beispielhaftes Inferenzsystem auf einem Chip (SOC), das zum Ausführen einer Inferenz unter Verwenden eines trainierten Modells geeignet ist;
    • 14 ist ein Blockschaltbild eines Verarbeitungssystems;
    • Die 15A bis 15C veranschaulichen Computersysteme und Grafikprozessoren;
    • Die 16A bis 16C veranschaulichen Blockschaltbilder zusätzlicher Grafikprozessor- und Rechenbeschleunigerarchitekturen;
    • 17 ist ein Blockschaltbild einer Grafikverarbeitungsmaschine eines Grafikprozessors;
    • Die 18A bis 18B veranschaulicht Thread-Ausführungslogik, die ein Array von Verarbeitungselementen beinhaltet, die in einem Grafikprozessorkern verwendet werden;
    • 19 veranschaulicht eine zusätzliche Ausführungseinheit;
    • 20 ist ein Blockschaltbild, das die Anweisungsformate eines Grafikprozessors veranschaulicht;
    • 21 ist ein Blockschaltbild einer zusätzlichen Grafikprozessorarchitektur;
    • Die 22A bis 22B veranschaulichen ein Grafikprozessor-Befehlsformat und eine Befehlsfolge;
    • 23 veranschaulicht beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem;
    • 24A ist ein Blockschaltbild, das ein IP-Kern-Entwicklungssystem veranschaulicht;
    • 24B veranschaulicht eine Querschnittseitenansicht einer integrierten Schaltungs-Package-Anordnung;
    • 24C veranschaulicht eine Package-Anordnung, die mehrere Einheiten von Hardware-Logik-Chiplets, die mit einem Substrat (zum Beispiel Basis-Die) verbunden sind, beinhaltet;
    • 24D veranschaulicht eine Package-Baugruppe, die austauschbare Chiplets beinhaltet;
    • 25 ist ein Blockschaltbild, das ein beispielhaftes System auf einer integrierten Schaltung veranschaulicht;
    • Die 26A bis 26B sind Blockschaltbilder, die beispielhafte Grafikprozessoren zur Verwendung in einem SoC veranschaulichen;
    • 27 veranschaulicht eine zusätzliche Ausführungseinheit gemäß einer Ausführungsform,
    • 28 veranschaulicht eine Matrixoperation, die von einer Befehlspipeline ausgeführt wird, gemäß einer Ausführungsform;
    • 29A bis 29B veranschaulichen Details eines hardwarebasierten systolischen Array gemäß einigen Ausführungsformen;
    • 30A-30B veranschaulicht ein System zum Umgehen von Nullwert-Submatrizen gemäß Ausführungsformen;
    • 31A bis 31B veranschaulichen ein Verfahren und ein System zum Ausführen von Matrixmultiplikationsoperationen an dünnbesetzten Daten;
    • 32 ist ein Blockschaltbild eines Grafikverarbeitungssystems, das eine GPGPU-Datenkompressionspipeline beinhaltet;
    • Die 33A bis 33B veranschaulichen Rechenarchitekturen, die konfiguriert sind, um komprimierte Übertragungsdaten an Verarbeitungsressourcen auf einem parallelen Rechenprozessor oder einer Allzweck-Grafikverarbeitungseinheit zu ermöglichen, gemäß einer Ausführungsform,
    • 34 veranschaulicht eine Verarbeitungsressource, die eine Nullerfassungslogik für Ausgabedaten enthält;
    • 35 veranschaulicht ein Verfahren zum Komprimieren und Dekomprimieren von Daten für eine Matrixoperation innerhalb einer Verarbeitungsressource;
    • 36 veranschaulicht ein Verfahren zum Ausführen von Nullerfassungsoperationen an einer Ausgabe, die von einer Verarbeitungsressource erzeugt wird; und
    • 37 ist ein Blockschaltbild einer Rechenvorrichtung mit einem Grafikprozessor gemäß einer Ausführungsform.
  • AUSFÜHIZLICHE BESCHREIBUNG
  • Eine Grafikverarbeitungseinheit (GPU) ist kommunikativ mit Host-/Prozessorkernen gekoppelt, um beispielsweise Grafikoperationen, Operationen für maschinelles Lernen, Musteranalyseoperationen und/oder verschiedene Allzweck-GPU-(GPGPU)-Funktionen zu beschleunigen. Die GPU kann über einen Bus oder eine andere Verbindung (zum Beispiel eine Hochgeschwindigkeitsverbindung, wie etwa PCIe oder NVLink) kommunikativ mit dem/den Host-Prozessor/-Kern(en) gekoppelt sein. Alternativ kann die GPU auf demselben Package oder Chip wie die Kerne integriert sein und über einen internen Prozessorbus/eine interne Prozessorverbindung (das heißt innerhalb des Package oder Chip) kommunikativ mit den Kernen gekoppelt sein. Ungeachtet der Art und Weise wie die GPU verbunden ist, können die Prozessorkerne der GPU Arbeit in der Form von Befehls-/Anweisungsfolgen, die in einem Arbeitsdeskriptor enthalten sind, zuordnen. Die GPU verwendet dann dedizierte Schaltungen/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
  • Hierin beschriebene Ausführungsformen beinhalten Software-, Firmware- und Hardwarelogik, die Techniken zum Ausführen von Arithmetik an dünnbesetzten Daten über eine systolische Verarbeitungseinheit bereitstellen. Die hierin beschriebene Ausführungsform stellte Techniken bereit, um Rechenoperationen für mit Nullen gefüllte Matrizen und Submatrizen zu überspringen. Ausführungsformen stellen zusätzlich Techniken bereit, um Datenkompression bis hin zu einer Verarbeitungseinheit aufrechtzuerhalten. Ausführungsformen stellen zusätzlich eine Architektur für eine dünnbesetzte bewusste Logikeinheit bereit.
  • In der folgenden Beschreibung werden zahlreiche spezifische Details dargelegt, um ein gründlicheres Verstehen bereitzustellen. Für den Fachmann ist jedoch ersichtlich, dass die hierin beschriebenen Ausführungsformen ohne eines oder mehrere dieser spezifischen Details praktiziert werden können. In anderen Fällen wurden wohlbekannte Merkmale nicht beschrieben, um zu vermeiden, dass die Details der vorliegenden Ausführungsformen verschleiert werden.
  • Systemübersicht
  • 1 ist ein Blockschaltbild, das ein Rechensystem 100 veranschaulicht, das konfiguriert ist, um einen oder mehrere Aspekte der hier beschriebenen Ausführungsformen zu implementieren. Das Rechensystem 100 beinhaltet ein Verarbeitungssubsystem 101, das einen oder mehrere Prozessoren 102 und einen Systemspeicher 104, der über einen Verbindungspfad kommuniziert, der einen Speicher-Hub 105 beinhalten kann, aufweist. Der Speicher-Hub 105 kann ein separates Bauelement innerhalb einer Chipsatzbauelements sein oder kann in den einen oder die mehreren Prozessoren 102 integriert sein. Der Speicher-Hub 105 ist über eine Kommunikationsverbindung 106 mit einem E/A-Subsystem 111 gekoppelt. Das E/A-Subsystem 111 beinhaltet einen E/A-Hub 107, der es dem Computersystem 100 ermöglichen kann, Eingabe von einem oder mehreren Eingabegeräten 108 zu empfangen. Zusätzlich kann der E/A-Hub 107 einen Anzeigecontroller, der in dem einen oder mehreren Prozessor(en) 102 enthalten sein kann, aktivieren, um Ausgaben an eine oder mehrere Anzeigevorrichtung(en) 110A bereitzustellen. Bei einer Ausführungsform können die eine oder die mehreren Anzeigevorrichtungen 110A, die mit dem E/A-Hub 107 gekoppelt sind, eine lokale, interne oder eingebettete Anzeigevorrichtung beinhalten.
  • Das Verarbeitungssubsystem 101 beinhaltet zum Beispiel einen oder mehrere parallele Prozessor(en) 112, die über einen Bus oder eine andere Kommunikationsverbindung 113 an den Speicher-Hub 105 gekoppelt sind. Die Kommunikationsverbindung 113 kann eine einer beliebigen Anzahl von auf Standards basierenden Kommunikationsverbindungstechnologien oder -protokollen sein, wie beispielsweise, aber nicht beschränkt auf, PCI Express, oder kann eine herstellerspezifische Kommunikationsschnittstelle oder Kommunikationsstruktur sein. Der eine oder die mehreren parallelen Prozessoren 112 können ein rechenfokussiertes Parallel- oder Vektorverarbeitungssystem bilden, das eine große Anzahl von Verarbeitungskernen und/oder Verarbeitungsclustern beinhalten kann, wie beispielsweise einen Prozessor mit vielen integrierten Kernen (MIC). Zum Beispiel bilden der eine oder die mehreren parallelen Prozessoren 112 ein Grafikverarbeitungssubsystem, das Pixel an eine der einen oder mehreren Anzeigevorrichtungen 110A, die über den E/A-Hub 107 gekoppelt sind, ausgeben kann. Der eine oder die mehreren parallelen Prozessoren 112 können auch einen Anzeigecontroller und eine Anzeigeschnittstelle (nicht gezeigt) beinhalten, um eine direkte Verbindung zu einer oder mehreren Anzeigevorrichtungen 110B zu ermöglichen.
  • Innerhalb des E/A-Subsystems 111 kann sich eine Systemspeichereinheit 114 mit dem E/A-Hub 107 verbinden, um einen Speichermechanismus für das Rechensystem 100 bereitzustellen. Ein E/A-Switch 116 kann verwendet werden, um einen Schnittstellenmechanismus bereitzustellen, um Verbindungen zwischen dem E/A-Hub 107 und anderen Bauelementen, wie etwa einem Netzwerkadapter 118 und/oder einem drahtlosen Netzwerkadapter 119, die in die Plattform integriert sein können, zu ermöglichen, und verschiedene andere Geräte, die über eine oder mehrere Add-In-Vorrichtungen 120 hinzugefügt werden können. Das/die Add-In-Vorrichtung(en) 120 kann/können beispielsweise auch eine oder mehrere externe Grafikprozessorvorrichtungen und/oder Rechenbeschleuniger beinhalten. Der Netzwerkadapter 118 kann ein Ethernet-Adapter oder ein anderer verdrahteter Netzwerkadapter sein. Der drahtlose Netzwerkadapter 119 kann eines oder mehrere von Wi-Fi, Bluetooth, Nahfeldkommunikation (NFC) oder einer anderen Netzwerkvorrichtung beinhalten, die ein oder mehrere drahtlose Funkgeräte beinhaltet.
  • Das Rechensystem 100 kann andere nicht explizit gezeigte Bauelemente beinhalten, einschließlich USB- oder andere Portverbindungen, optische Speicherlaufwerke, Videoaufnahmegeräte und dergleichen, kann auch mit dem E/A-Hub 107 verbunden sein. Kommunikationswege, die die verschiedenen Komponenten in 1 zwischeneinander verbinden, können unter Verwenden beliebiger geeigneter Protokolle, wie zum Beispiel PCI (Peripheral Component Interconnect)-basierte Protokolle (zum Beispiel PCI-Express) oder beliebige andere Bus- oder Punkt-zu-Punkt-Kommunikationsschnittstellen und/oder Protokolle, wie zum Beispiel die NV-Link-Hochgeschwindigkeitsverbindung oder im Stand der Technik bekannte Verbindungsprotokolle implementiert werden.
  • Der eine oder die mehreren parallelen Prozessor(en) 112 können Schaltungen enthalten, die für die Grafik- und Videoverarbeitung optimiert sind, einschließlich beispielsweise Videoausgabeschaltungen, und bilden eine Grafikverarbeitungseinheit (GPU). Alternativ oder zusätzlich können der eine oder die mehreren parallelen Prozessoren 112 Schaltungen enthalten, die für eine universelle Verarbeitung optimiert sind, während die zugrunde liegende Rechenarchitektur, die hier ausführlicher beschrieben wird, beibehalten wird. Bauelemente des Rechensystems 100 können mit einem oder mehreren anderen Systemelementen auf einer einzigen integrierten Schaltung integriert sein. Zum Beispiel können der eine oder die mehreren parallelen Prozessoren 112, der Speicher-Hub 105, der/die Prozessor(en) 102 und der E/A-Hub 107 in eine integrierte System-on-Chip-Schaltung (SoC-Schaltung) integriert sein. Alternativ können die Bauelemente des Rechensystems 100 in ein einzelnes Package integriert werden, um eine Package-Konfiguration (SIP-Konfiguration) zu bilden. Bei einer Ausführungsform kann zumindest ein Teil der Bauelemente des Rechensystems 100 in ein Multi-Chip-Modul (MCM), das mit anderen Multi-Chip-Modulen zu einem modularen Computersystem verbunden werden kann, integriert werden.
  • Es versteht sich, dass das hierin gezeigte Rechensystem 100 veranschaulichend ist, und dass Variationen und Modifikationen möglich sind. Die Verbindungstopologie, einschließlich der Anzahl und Anordnung von Brücken, der Anzahl von Prozessoren 102 und der Anzahl paralleler Prozessoren 112 kann nach Wunsch modifiziert werden. Zum Beispiel kann der Systemspeicher 104 mit dem/den Prozessor(en) 102 direkt anstatt über eine Brücke verbunden sein, während andere Vorrichtungen mit dem Systemspeicher 104 über den Speicher-Hub 105 und den/die Prozessor(en) 102 kommunizieren. Bei anderen alternativen Topologien ist/sind der/die parallelen Prozessoren 112 mit dem E/A-Hub 107 oder direkt mit einem des einen oder der mehreren Prozessoren 102 anstatt mit dem Speicher-Hub 105 verbunden. Bei anderen Ausführungsformen können der E/A-Hub 107 und der Speicher-Hub 105 in einem einzigen Chip integriert sein. Es ist auch möglich, dass zwei oder mehr Sätze von Prozessoren 102 über mehrere Sockel, die mit zwei oder mehr Instanzen des/der parallelen Prozessors(en) 112 koppeln können, angeschlossen sind.
  • Einige der hierin gezeigten speziellen Bauelemente sind optional und sind möglicherweise nicht bei allen Implementierungen des Rechensystem 100 enthalten. Beispielsweise kann eine beliebige Anzahl von Zusatzkarten oder Peripheriegeräten unterstützt werden, oder es können einige Bauelemente weggelassen werden. Darüber hinaus können einige Architekturen eine andere Terminologie für Bauelemente verwenden, die denen ähnlich sind, die in 1 dargestellt sind. Beispielsweise kann der Speicher-Hub 105 in einigen Architekturen als eine Northbridge bezeichnet werden, während der E/A-Hub 107 als Southbridge bezeichnet werden kann.
  • 2A veranschaulicht einen parallelen Prozessor 200. Der parallele Prozessor 200 kann, wie hierin beschrieben, eine GPU, GPGPU oder dergleichen sein. Die verschiedenen Bauelemente des parallelen Prozessors 200 können unter Verwenden einer oder mehrerer integrierter Schaltungsvorrichtungen implementiert werden, wie beispielsweise programmierbare Prozessoren, anwendungsspezifische integrierte Schaltungen (ASICs) oder feldprogrammierbare Gate-Arrays (FPGA). Der veranschaulichte parallele Prozessor 200 kann der oder einer der in 1 gezeigten parallelen Prozessoren 112 sein.
  • Der parallele Prozessor 200 beinhaltet eine parallele Verarbeitungseinheit 202. Die parallele Verarbeitungseinheit beinhaltet eine E/A-Einheit 204, die Kommunikation mit anderen Vorrichtungen ermöglicht, einschließlich anderer Instanzen der parallelen Verarbeitungseinheit 202. Die E/A-Einheit 204 kann direkt mit anderen Vorrichtungen verbunden sein. Zum Beispiel verbindet sich die E/A-Einheit 204 mit anderen Vorrichtungen über die Verwendung einer Hub- oder Switch-Schnittstelle, wie etwa einem Speicher-Hub 105. Die Verbindungen zwischen dem Speicher-Hub 105 und der E/A-Einheit 204 bilden eine Kommunikationsverbindung 113. Innerhalb der parallelen Verarbeitungseinheit 202 ist die E/A-Einheit 204 mit einer Host-Schnittstelle 206 und einer Speicherkreuzschiene 216 verbunden, wobei die Host-Schnittstelle 206 Befehle empfängt, die auf das Ausführen von Verarbeitungsoperationen ausgerichtet sind, und die Speicherkreuzschiene 216 Befehle empfängt, die auf das Ausführen von Speicheroperationen ausgerichtet sind.
  • Wenn die Host-Schnittstelle 206 einen Befehlspuffer über die E/A-Einheit 204 empfängt, kann die Host-Schnittstelle 206 Arbeitsvorgänge anweisen, diese Befehle zu einem Front-End 208 auszuführen. Bei einer Ausführungsform ist das Front-End 208 mit einem Scheduler 210 gekoppelt, der dazu konfiguriert ist, Befehle oder andere Arbeitselemente an ein Verarbeitungscluster-Array 212 zu verteilen. Der Scheduler 210 stellt sicher, dass das Verarbeitungscluster-Array 212 richtig konfiguriert ist und sich in einem gültigen Zustand befindet, bevor Aufgaben an die Verarbeitungscluster des Verarbeitungscluster-Array 212 verteilt werden. Der Scheduler 210 kann über Firmware-Logik, die auf einem Mikrocontroller ausgeführt wird, implementiert werden. Der durch den Mikrocontroller implementierte Scheduler 210 ist konfigurierbar, um komplexe Scheduling- und Arbeitsverteilungsoperationen mit grober und feiner Granularität durchzuführen, was eine schnelle Vorbelegung und Kontextumschaltung von Threads ermöglicht, die auf dem Verarbeitungs-Array 212 ausgeführt werden. Vorzugsweise kann die Host-Software Arbeitslasten zum Planen auf dem Verarbeitungs-Array 212 über eine von mehreren Türklingeln für die Grafikverarbeitung nachweisen. Die Arbeitslasten können dann von der Logik des Schedulers 210 innerhalb des Mikrocontrollers des Schedulers automatisch über das Verarbeitungs-Array 212 verteilt werden.
  • Das Verarbeitungscluster-Array 212 kann bis zu „N“ Verarbeitungscluster beinhalten (zum Beispiel Cluster 214A, Cluster 214B bis Cluster 214N). Jedes Cluster 214A bis 214N des Verarbeitungscluster-Array 212 kann eine große Anzahl gleichzeitiger Threads ausführen. Der Scheduler 210 kann den Clustern 214A bis 214N des Verarbeitungscluster-Array 212 unter Verwenden verschiedener Planungs- und/oder Arbeitsverteilungsalgorithmen Arbeit zuordnen, die in Abhängigkeit von der für jede Art von Programm oder Berechnung entstehenden Arbeitsbelastung variieren können. Die Planung kann von dem Scheduler 210 dynamisch gehandhabt werden oder kann teilweise von der Compilerlogik während der Kompilierung der Programmlogik, die zur Ausführung durch das Verarbeitungscluster-Array 212 konfiguriert ist, unterstützt werden. Optional können unterschiedliche Cluster 214A bis 214N des Verarbeitungscluster-Array 212 zum Verarbeiten unterschiedlicher Arten von Programmen oder zum Ausführen unterschiedlicher Arten von Berechnungen zugeordnet werden.
  • Das Verarbeitungscluster-Array 212 kann konfiguriert sein, um verschiedene Typen paralleler Verarbeitungsoperationen auszuführen. Zum Beispiel ist das Cluster-Array 212 konfiguriert, um parallele Rechenoperationen für allgemeine Zwecke auszuführen. Zum Beispiel kann das Verarbeitungscluster-Array 212 eine Logik zum Ausführen von Verarbeitungsaufgaben beinhalten, einschließlich Filtern von Video- und/oder Audiodaten, Ausführen von Modellierungsoperationen, einschließlich Physikoperationen, und Ausführen von Datentransformationen.
  • Das Verarbeitungscluster-Array 212 ist konfiguriert, um parallele Grafikverarbeitungsoperationen auszuführen. Bei derartigen Ausführungsformen, bei denen der parallele Prozessor 200 dazu konfiguriert ist, Grafikverarbeitungsoperationen auszuführen, kann das Verarbeitungscluster-Array 212 zusätzliche Logik beinhalten, um die Ausführung derartiger Grafikverarbeitungsoperationen zu unterstützen, einschließlich, aber nicht beschränkt auf Texturabtastlogik, um Texturoperationen auszuführen, sowie Tessellationslogik und andere Vertex-Verarbeitungslogik. Zusätzlich kann das Verarbeitungscluster-Array 212 konfiguriert sein, um mit der Grafikverarbeitung zusammenhängende Shader-Programme auszuführen, wie beispielsweise, aber nicht beschränkt auf Vertex-Shader, Tessellation-Shader, Geometrie-Shader und Pixel-Shader. Die parallele Verarbeitungseinheit 202 kann Daten aus dem Systemspeicher über die E/A-Einheit 204 zur Verarbeitung transferieren. Während der Verarbeitung können die transferierten Daten während der Verarbeitung im On-Chip-Speicher (zum Beispiel dem parallelen Prozessorspeicher 222) gespeichert und dann in den Systemspeicher zurückgeschrieben werden.
  • Bei Ausführungsformen, bei denen die parallele Verarbeitungseinheit 202 verwendet wird, um eine Grafikverarbeitung auszuführen, kann der Scheduler 210 konfiguriert sein, um die Verarbeitungsarbeitslast in ungefähr gleich große Aufgaben aufzuteilen, um eine Verteilung der Grafikverarbeitungsoperationen auf mehrere Cluster 214A bis 214N des Verarbeitungs-Cluster-Array 212 besser zu ermöglichen. Bei einigen dieser Ausführungsformen können Teile des Verarbeitungscluster-Array 212 konfiguriert sein, um unterschiedliche Verarbeitungsarten auszuführen. Zum Beispiel kann ein erster Teil konfiguriert sein, um Vertex-Shading und Topologieerzeugung auszuführen, ein zweiter Teil kann konfiguriert sein, um Tessellation und Geometrie-Shading auszuführen, und ein dritter Teil kann konfiguriert sein, um Pixel-Shading oder andere Bildschirmraumoperationen auszuführen, um ein gerendertes Bild zur Anzeige zu erzeugen. Zwischendaten, die von einem oder mehreren der Cluster 214A bis 214N erzeugt werden, können in Puffern gespeichert werden, um zu ermöglichen, dass die Zwischendaten zwischen den Clustern 214A bis 214N zur weiteren Verarbeitung übertragen werden.
  • Während des Betriebs kann das Verarbeitungscluster-Array 212 über den Scheduler 210, der Befehle empfängt, die Verarbeitungsaufgaben definieren, vom Front-End 208 auszuführende Verarbeitungsaufgaben empfangen. Für Grafikverarbeitungsoperationen können Verarbeitungsaufgaben Indizes von zu verarbeitenden Daten umfassen, zum Beispiel Oberflächen-(Patch-)Daten, Grundelementdaten, Eckpunktdaten und/oder Pixeldaten sowie Zustandsparameter und Befehle, die definieren, wie die Daten verarbeitet werden sollen (zum Beispiel welches Programm ausgeführt werden soll). Der Scheduler 210 kann dazu konfiguriert sein, die den Aufgaben entsprechenden Indizes abzurufen oder kann die Indizes vom Front-End 208 empfangen. Das Front-End 208 kann konfiguriert sein, um sicherzustellen, dass das Verarbeitungscluster-Array 212 auf einen gültigen Zustand konfiguriert ist, bevor die durch eingehende Befehlspuffer (zum Beispiel Stapelpuffer, Push-Puffer usw.) spezifizierte Arbeitslast initiiert wird.
  • Jede der einen oder mehreren Instanzen der parallelen Verarbeitungseinheit 202 kann mit dem parallelen Prozessorspeicher 222 koppeln. Auf den parallelen Prozessorspeicher 222 kann über die Speicherkreuzschiene 216 zugegriffen werden, die Speicheranforderungen von dem Verarbeitungscluster-Array 212 sowie von der E/A-Einheit 204 empfangen kann. Die Speicherkreuzschiene 216 kann über eine Speicherschnittstelle 218 auf den parallelen Prozessorspeicher 222 zugreifen. Die Speicherschnittstelle 218 kann mehrere Partitionseinheiten (zum Beispiel Partitionseinheit 220A, Partitionseinheit 220B bis Partitionseinheit 220N) beinhalten, die jeweils mit einem Teil (zum Beispiel einer Speichereinheit) des parallelen Prozessorspeichers 222 koppeln können. Die Anzahl von Partitionseinheiten 220A bis 220N kann derart konfiguriert sein, dass sie gleich der Anzahl von Speichereinheiten ist, so dass eine erste Partitionseinheit 220A eine entsprechende erste Speichereinheit 224A aufweist, eine zweite Partitionseinheit 220B eine entsprechende Speichereinheit 224B aufweist und die N-te Partitionseinheit 220N eine entsprechende N-te Speichereinheit 224N aufweist. Bei anderen Ausführungsformen kann die Anzahl von Partitionseinheiten 220A bis 220N ungleich der Anzahl von Speichervorrichtungen sein.
  • Die Speichereinheiten 224A bis 224N können verschiedene Arten von Speichervorrichtungen beinhalten, einschließlich eines dynamischen Direktzugriffsspeichers (DRAM) oder eines Grafikspeichers mit Direktzugriff, wie eines Grafikspeichers mit doppelter Datenrate (GDDR). Optional können die Speichereinheiten 224A - 224N auch gestapelte 3D-Speicher beinhalten, einschließlich, aber nicht beschränkt auf Speicher mit hoher Bandbreite (HBM). Fachleute werden erkennen, dass die spezifische Implementierung der Speichereinheiten 224A bis 224N variieren kann und aus einem von verschiedenen herkömmlichen Designs ausgewählt werden kann. Renderziele, wie etwa Framepuffer oder Texturabbildungen, können über die Speichereinheiten 224A bis 224N gespeichert werden, was es den Partitionseinheiten 220A bis 220N ermöglicht, Teile jedes Renderziels parallel zu schreiben, um die verfügbare Bandbreite des parallelen Prozessorspeichers 222 effizient zu nutzen. Bei einigen Ausführungsformen kann eine lokale Instanz des parallelen Prozessorspeichers 222 zugunsten eines einheitlichen Speicherdesigns, das Systemspeicher in Verbindung mit lokalem Cache-Speicher verwendet, ausgeschlossen werden.
  • Optional weist jedes der Cluster 214A bis 214N des Verarbeitungscluster-Array 212 die Fähigkeit auf, Daten zu verarbeiten, die in eine der Speichereinheiten 224A bis 224N innerhalb des parallelen Prozessorspeichers 222 geschrieben werden. Die Speicherkreuzschiene 216 kann konfiguriert sein, um die Ausgabe jedes Clusters 214A bis 214N an eine beliebige Partitionseinheit 220A bis 220N oder an ein anderes Cluster 214A bis 214N, die zusätzliche Verarbeitungsoperationen an der Ausgabe ausführen können, zu transferieren. Jedes Cluster 214A bis 214N kann mit der Speicherschnittstelle 218 durch die Speicherkreuzschiene 216 kommunizieren, um von verschiedenen externen Speichervorrichtungen zu lesen oder in sie zu schreiben. Bei einer der Ausführungsformen mit der Speicherkreuzschiene 216 weist die Speicherkreuzschiene 216 eine Verbindung mit der Speicherschnittstelle 218 auf, um mit der E/A-Einheit 204 zu kommunizieren, sowie eine Verbindung mit einer lokalen Instanz des parallelen Prozessorspeichers 222, wodurch es den die Verarbeitungseinheiten innerhalb der unterschiedlichen Verarbeitungscluster 214A bis 214N ermöglicht wird, mit dem Systemspeicher oder einem anderen Speicher der für die parallele Verarbeitungseinheit 202 nicht lokal ist, zu kommunizieren. Im Allgemeinen kann die Speicherkreuzschiene 216 beispielsweise in der Lage sein, virtuelle Kanäle zu verwenden, um Verkehrsströme zwischen den Clustern 214A bis 214N und den Partitionseinheiten 220A bis 220N zu trennen.
  • Während eine einzelne Instanz der parallelen Verarbeitungseinheit 202 innerhalb des parallelen Prozessors 200 veranschaulicht ist, kann eine beliebige Anzahl von Instanzen der parallelen Verarbeitungseinheit 202 enthalten sein. Beispielsweise können mehrere Instanzen der parallelen Verarbeitungseinheit 202 auf einer einzigen Add-In-Karte bereitgestellt werden, oder es können mehrere Add-In-Karten miteinander verbunden werden. Die unterschiedlichen Instanzen der parallelen Verarbeitungseinheit 202 können derart konfiguriert sein, dass sie auch dann zusammenwirken, falls die unterschiedlichen Instanzen unterschiedliche Anzahlen von Verarbeitungskernen, unterschiedliche Mengen an lokalem Parallelprozessorspeicher und/oder andere Konfigurationsunterschiede aufweisen. Optional können einige Instanzen der Parallelverarbeitungseinheit 202 Gleitkommaeinheiten mit höherer Genauigkeit in Bezug auf andere Instanzen beinhalten. Systeme, die eine oder mehrere Instanzen der parallelen Verarbeitungseinheit 202 oder des parallelen Prozessors 200 enthalten, können in einer Vielfalt von Konfigurationen und Formfaktoren implementiert werden, einschließlich, aber nicht beschränkt auf Desktop-, Laptop- oder Handheld-PCs, Server, Workstations, Spielkonsolen, und/oder eingebettete Systeme.
  • 2B ist ein Blockschaltbild einer Partitionseinheit 220. Die Partitionseinheit 220 kann eine Instanz einer der Partitionseinheiten 220A bis 220N der 2A sein. Wie veranschaulicht, beinhaltet die Partitionseinheit 220 einen L2-Cache 221, eine Rahmenpufferschnittstelle 225 und eine ROP 226 (Rasteroperationseinheit). Der L2-Cache 221 ist ein Lese-/Schreib-Cache, der dazu konfiguriert ist, von der Speicherkreuzschiene 216 und der ROP 226 empfangene Lade- und Speicheroperationen auszuführen. Lesefehler und dringende Rückschreibanforderungen werden von dem L2-Cache 221 zur Verarbeitung an die Rahmenpufferschnittstelle 225 ausgegeben. Aktualisierungen können auch über die Bildpufferschnittstelle 225 zur Verarbeitung an den Bildspeicher gesandt werden. Bei einer Ausführungsform ist die Rahmenpufferschnittstelle 225 mit einer der Speichereinheiten im Speicher des parallelen Prozessors, wie beispielsweise den Speichereinheiten 224A bis 224N der 2, verbunden (zum Beispiel innerhalb des Speichers 222 des parallelen Prozessors). Die Partitionseinheit 220 kann zusätzlich oder alternativ auch eine Schnittstelle mit einer der Speichereinheiten in dem Speicher des parallelen Prozessors über einen Speichercontroller (nicht gezeigt) aufweisen.
  • Bei Grafikanwendungen ist die ROP 226 eine Verarbeitungseinheit, die Rasteroperationen, wie etwa Schablone, Z-Test, Mischen und dergleichen ausführt. Die ROP 226 gibt dann verarbeitete Grafikdaten aus, die im Grafikspeicher gespeichert werden. Bei einigen Ausführungsformen beinhaltet die ROP 226 eine Komprimierungslogik zum Komprimieren von Tiefen- oder Farbdaten, die in den Speicher geschrieben werden, und zum Dekomprimieren von Tiefen- oder Farbdaten, die aus dem Speicher gelesen werden. Die Komprimierungslogik kann eine verlustfreie Komprimierungslogik sein, die einen oder mehrere von mehreren Komprimierungsalgorithmen verwendet. Der von der ROP 226 ausgeführte Komprimierungstyp kann basierend auf den statistischen Merkmalen der zu komprimierenden Daten variieren. Beispielsweise wird bei einer Ausführungsform eine Delta-Farbkompression an Tiefen- und Farbdaten pro Tile ausgeführt.
  • Die ROP 226 kann in jedem Verarbeitungscluster (zum Beispiel Cluster 214A bis 214N der 2A) statt innerhalb der Partitionseinheit 220 enthalten sein. Bei einer derartigen Ausführungsform werden Lese- und Schreibanforderungen für Pixeldaten über die Speicherkreuzschiene 216 an Stelle von Pixelfragmentdaten übertragen. Die verarbeiteten Grafikdaten können auf einer Anzeigevorrichtung angezeigt werden, wie beispielsweise einer der einen oder mehreren Anzeigevorrichtungen 110 der 1, zur Weiterverarbeitung durch den/die Prozessor(en) 102 geroutet oder zur Weiterverarbeitung durch eine der Verarbeitungseinheiten innerhalb des parallelen Prozessors 200 der 2A geroutet.
  • 2C ist ein Blockschaltbild eines Verarbeitungsclusters 214 innerhalb einer parallelen Verarbeitungseinheit. Das Verarbeitungscluster ist beispielsweise eine Instanz eines der Verarbeitungsclusters 214A bis 214N der 2A. Das Verarbeitungscluster 214 kann konfiguriert sein, um viele Threads parallel auszuführen, wobei der Begriff „Thread“ eine Instanz eines bestimmten Programms betrifft, das auf einem bestimmten Satz von Eingabedaten ausgeführt wird. Optional können Einzelbefehls-Mehrdaten-(SIMD)-Anweisungsausgabetechniken verwendet werden, um die parallele Ausführung einer großen Anzahl von Threads zu unterstützen, ohne mehrere unabhängige Anweisungseinheiten bereitzustellen. Alternativ können Single-Instruction-Multithread-Techniken (SIMT-Techniken) verwendet werden, um die parallele Ausführung einer großen Anzahl von im Allgemeinen synchronisierten Threads zu unterstützen, wobei eine gemeinsame Befehlseinheit verwendet wird, die konfiguriert ist, um Anweisungen an einen Satz von Verarbeitungsmaschinen innerhalb jedes der Verarbeitungsclusters auszugeben. Im Gegensatz zu einem SIMD-Ausführungssystem, bei dem alle Verarbeitungsmaschinen typischerweise identische Anweisungen ausführen, ermöglicht die SIMT-Ausführung, dass Unterschiede Threads ohne Weiteres abweichenden Ausführungspfaden durch ein gegebenes Threadprogramm folgen. Fachleute werden verstehen, dass ein SIMD-Verarbeitungssystem einen funktionalen Teilsatz eines SIMT-Verarbeitungssystems darstellt.
  • Der Betrieb des Verarbeitungsclusters 214 kann über einen Pipeline-Manager 232 gesteuert werden, der Verarbeitungsaufgaben an SIMT-Parallelprozessoren verteilt. Der Pipeline-Manager 232 empfängt Anweisungen von dem Scheduler 210 der 2A und verwaltet die Ausführung dieser Anweisungen über einen Grafik-Multiprozessor 234 und/oder eine Textureinheit 236. Der veranschaulichte Grafik-Multiprozessor 234 ist eine beispielhafte Instanz eines parallelen SIMT-Prozessors. Jedoch können verschiedene Typen paralleler SIMT-Prozessoren unterschiedlicher Architekturen in dem Verarbeitungscluster 214 enthalten sein. Eine oder mehrere Instanzen des Grafik-Multiprozessors 234 können in einem Verarbeitungscluster 214 enthalten sein. Der Grafik-Multiprozessor 234 kann Daten verarbeiten, und eine Datenkreuzschiene 240 kann verwendet werden, um die verarbeiteten Daten an eines von mehreren möglichen Zielen, einschließlich anderer Shader-Einheiten, zu verteilen. Der Pipeline-Manager 232 kann die Verteilung verarbeiteter Daten erleichtern, indem er Zielorte für verarbeitete Daten, die über die Datenkreuzschiene 240 zu verteilen sind, spezifiziert.
  • Jeder Grafik-Multiprozessor 234 innerhalb des Verarbeitungsclusters 214 kann einen identischen Satz funktionaler Ausführungslogik (zum Beispiel arithmetische Logikeinheiten, Lade-Speicher-Einheiten usw.) beinhalten. Die funktionale Ausführungslogik kann in einer Pipeline-Weise konfiguriert werden, in der neue Anweisungen ausgegeben werden können, bevor vorherige Anweisungen abgeschlossen sind. Die funktionale Ausführungslogik unterstützt eine Vielfalt von Operationen, einschließlich Integer- und Gleitkomma-Arithmetik, Vergleichsoperationen, Boolesche Operationen, Bitverschiebung und Berechnung verschiedener algebraischer Funktionen. Dieselbe Funktionseinheitshardware könnte genutzt werden, um unterschiedliche Operationen auszuführen, und jede Kombination von Funktionseinheiten kann vorhanden sein.
  • Die an das Verarbeitungscluster 214 übertragenen Anweisungen bilden einen Thread. Ein Satz von Threads, der über den Satz paralleler Verarbeitungsmaschinen hinweg ausgeführt wird, ist eine Thread-Gruppe. Eine Thread-Gruppe führt dasselbe Programm mit unterschiedlichen Eingabedaten aus. Jeder Thread innerhalb einer Thread-Gruppe kann einer anderen Verarbeitungsmaschine innerhalb eines Grafik-Multiprozessors 234 zugewiesen werden. Eine Thread-Gruppe kann weniger Threads beinhalten als die Anzahl von Verarbeitungsmaschinen innerhalb des Grafik-Multiprozessors 234. Wenn eine Thread-Gruppe weniger Threads als die Anzahl von Verarbeitungsmaschinen beinhaltet, können eine oder mehrere der Verarbeitungsmaschinen während Zyklen, in denen diese Thread-Gruppe verarbeitet wird, im Leerlauf sein. Eine Thread-Gruppe kann auch mehr Threads beinhalten als die Anzahl von Verarbeitungsmaschinen innerhalb des Grafik-Multiprozessors 234. Wenn die Thread-Gruppe mehr Threads beinhaltet als die Anzahl der Verarbeitungsmaschinen innerhalb des Grafik-Multiprozessors 234, kann die Verarbeitung über aufeinanderfolgende Taktzyklen ausgeführt werden. Optional können mehrere Thread-Gruppen gleichzeitig auf dem Grafik-Multiprozessor 234 ausgeführt werden.
  • Der Grafik-Multiprozessor 234 kann einen internen Cache-Speicher umfassen, um Lade- und Speicheroperationen auszuführen. Optional kann der Grafik-Multiprozessor 234 auf einen internen Cache verzichten und einen Cache-Speicher (zum Beispiel L1-Cache 248) innerhalb des Verarbeitungsclusters 214 verwenden. Jeder Grafik-Multiprozessor 234 hat auch Zugriff auf L2-Caches innerhalb der Partitionseinheiten (zum Beispiel die Partitionseinheiten 220A bis 220N der 2A), die von allen Verarbeitungsclustern 214 gemeinsam genutzt werden und verwendet werden können, um Daten zwischen Threads zu transferieren. Der Grafik-Multiprozessor 234 kann auch auf globalen Speicher außerhalb des Chip zugreifen, der einen oder mehrere von lokalem parallelem Prozessorspeicher und/oder Systemspeicher beinhalten kann. Jeder Speicher außerhalb der parallelen Verarbeitungseinheit 202 kann als globaler Speicher verwendet werden. Ausführungsformen, bei denen das Verarbeitungscluster 214 mehrere Instanzen des Grafik-Multiprozessors 234 beinhaltet, können gemeinsame Anweisungen und Daten teilen, die in dem L1-Cache 248 gespeichert sein können.
  • Jedes Verarbeitungscluster 214 kann eine MMU 245 (Speicherverwaltungseinheit) beinhalten, die konfiguriert ist, um virtuelle Adressen in physische Adressen abzubilden. Bei anderen Ausführungsformen können sich eine oder mehrere Instanzen der MMU 245 in der Speicherschnittstelle 218 der 2A befinden. Die MMU 245 beinhaltet einen Satz von Seitentabelleneinträgen (PTEs), die verwendet werden, um eine virtuelle Adresse auf eine physische Adresse eines Tile und optional einen Cache-Line-Index abzubilden. Die MMU 245 kann Adressübersetzungs-Lookaside-Puffer (TLB) oder Caches beinhalten, die sich innerhalb des Grafik-Multiprozessors 234 oder des L1-Cache oder Verarbeitungsclusters 214 befinden können. Die physische Adresse wird verarbeitet, um die Oberflächendatenzugriffslokalität zu verteilen, um eine effiziente Anforderungsverschachtelung zwischen den Partitionseinheiten zu ermöglichen. Der Cache-Zeilenindex kann verwendet werden, um zu bestimmen, ob eine Anforderung für eine Cache-Zeile ein Treffer oder ein Fehlschlag ist.
  • Bei Grafik- und Rechenanwendungen kann ein Verarbeitungscluster 214 derart konfiguriert sein, dass jeder Grafik-Multiprozessor 234 mit einer Textureinheit 236 zum Ausführen von Texturabbildungsoperationen gekoppelt ist, zum Beispiel zum Bestimmen von Texturabtastpositionen, Lesen von Texturdaten und Filtern der Texturdaten. Texturdaten werden aus einem internen Textur-L1-Cache (nicht gezeigt) oder bei einigen Ausführungsformen aus dem L1-Cache innerhalb des Grafik-Multiprozessors 234 gelesen und nach Bedarf aus einem L2-Cache, einem lokalen parallelen Prozessorspeicher oder Systemspeicher geholt. Jeder Grafik-Multiprozessor 234 gibt verarbeitete Aufgaben an die Datenkreuzschiene 240 aus, um die verarbeitete Aufgabe einem anderen Verarbeitungscluster 214 zur weiteren Verarbeitung bereitzustellen oder die verarbeitete Aufgabe in einem L2-Cache, einem lokalen parallelen Prozessorspeicher oder einem Systemspeicher über die Speicherkreuzschiene 216 zu speichern. Eine preROP 242 (Pre-Raster Operations Unit) ist konfiguriert, um Daten von dem Grafik-Multiprozessor 234 zu empfangen, um Daten an ROP-Einheiten zu lenken, die sich, wie hierin beschrieben, bei Partitionseinheiten befinden können (zum Beispiel Partitionseinheiten 220A bis 220N der 2a). Die preROP-Einheit 242 kann Optimierungen für die Farbmischung ausführen, Pixelfarbdaten organisieren und Adressübersetzungen ausführen.
  • Es versteht sich, dass die hierin beschriebene Kernarchitektur veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Eine beliebige Anzahl von Verarbeitungseinheiten, zum Beispiel Grafik-Multiprozessor 234, Textureinheiten 236, PreROPs 242 usw., kann in einem Verarbeitungscluster 214 enthalten sein. Während weiter nur ein Verarbeitungscluster 214 gezeigt ist, kann eine parallele Verarbeitungseinheit, wie hierin beschrieben, eine beliebige Anzahl von Instanzen des Verarbeitungsclusters 214 beinhalten. Optional kann jedes Verarbeitungscluster 214 dazu konfiguriert sein, unabhängig von anderen Verarbeitungsclustern 214 unter Verwenden separater und unterschiedlicher Verarbeitungseinheiten, L1-Caches usw., zu arbeiten.
  • 2D zeigt ein Beispiel des Grafik-Multiprozessors 234, bei dem der Grafik-Multiprozessor 234 mit dem Pipeline-Manager 232 des Verarbeitungsclusters 214 gekoppelt ist. Der Grafik-Multiprozessor 234 weist eine Ausführungspipeline auf, die einen Befehls-Cache 252, eine Befehlseinheit 254, eine Adressabbildungseinheit 256, eine Registerdatei 258, einen oder mehrere Mehrzweck-Grafikverarbeitungseinheitskerne (GPGPU) 262 beinhaltet, ohne darauf beschränkt zu sein, oder mehr Lade-/Speichereinheiten 266. Die GPGPU-Kerne 262 und die Lade-/Speichereinheiten 266 sind über eine Speicher- und Cache-Verbindung 268 mit dem Cache-Speicher 272 und dem gemeinsam genutzten Speicher 270 gekoppelt. Der Grafik-Multiprozessor 234 kann zusätzlich Tensor- und/oder Raytracing-Kerne 263 beinhalten, die Hardwarelogik beinhalten, um Matrix- und/oder Raytracing-Operationen zu beschleunigen.
  • Der Anweisungs-Cache 252 kann einen Strom von Anweisungen zum Ausführen von dem Pipeline-Manager 232 empfangen. Die Anweisungen werden in dem Anweisungs-Cache 252 zwischengespeichert und zur Ausführung durch die Anweisungseinheit 254 entsendet. Die Anweisungseinheit 254 kann Anweisungen als Thread-Gruppen (zum Beispiel Warps) entsenden, wobei jeder Thread der Thread-Gruppe einer unterschiedlichen Ausführungseinheit innerhalb des GPGPU-Kerns 262 zugewiesen wird. Eine Anweisung kann auf einen lokalen, gemeinsam genutzten oder globalen Adressraum zugreifen, indem sie eine Adresse innerhalb eines einheitlichen Adressraums spezifiziert. Die Adressabbildungseinheit 256 kann verwendet werden, um Adressen in dem einheitlichen Adressraum in eine eindeutige Speicheradresse, auf die die Lade-/Speichereinheiten 266 zugreifen können, zu übersetzen.
  • Die Registerdatei 258 stellt einen Satz von Registern für die Funktionseinheiten des Grafik-Multiprozessors 234 bereit. Die Registerdatei 258 stellt eine temporäre Speicherung für Operanden bereit, die mit den Datenpfaden der Funktionseinheiten (zum Beispiel GPGPU-Kerne 262, Lade-/Speichereinheiten 266) des Grafik-Multiprozessors 234 verbunden sind. Die Registerdatei 258 kann zwischen jeder der Funktionseinheiten derart aufgeteilt werden, dass jeder Funktionseinheit ein dedizierter Abschnitt der Registerdatei 258 zugeordnet wird. Zum Beispiel kann die Registerdatei 258 zwischen den unterschiedlichen Warps, die von dem Grafik-Multiprozessor 234 ausgeführt werden, aufgeteilt werden.
  • Die GPGPU-Kerne 262 können jeweils Gleitkommaeinheiten (FPUs) und/oder Integer-Arithmetic-Logikeinheiten (ALUs) beinhalten, die verwendet werden, um Anweisungen des Grafik-Multiprozessors 234 auszuführen. Bei einigen Implementierungen können die GPGPU-Kerne 262 Hardwarelogik beinhalten, die sich ansonsten in den Tensor- und/oder Raytracing-Kernen 263 befinden kann. Die GPGPU-Kerne 262 können eine ähnliche Architektur aufweisen oder sich in der Architektur unterscheiden. Zum Beispiel und bei einer Ausführungsform beinhaltet ein erster Teil der GPGPU-Kerne 262 eine FPU mit einfacher Präzision und eine Integer-ALU, während ein zweiter Teil der GPGPU-Kerne eine FPU mit doppelter Präzision beinhaltet. Optional können die FPUs den Standard IEEE 754-2008 für Gleitkommaarithmetik implementieren oder Gleitkommaarithmetik mit variabler Präzision aktivieren. Der Grafik-Multiprozessor 234 kann zusätzlich eine oder mehrere Einheiten mit fester Funktion oder Spezialfunktion beinhalten, um spezielle Funktionen, wie etwa Kopierrechteck- oder Pixel-Blending-Operationen auszuführen. Einer oder mehrere der GPGPU-Kerne können auch feste oder spezielle Funktionslogik beinhalten.
  • Die GPGPU-Kerne 262 können eine SIMD-Logik beinhalten, die in der Lage ist, eine einzelne Anweisung an mehreren Datensätzen auszuführen. Optional können die GPGPU-Kerne 262 SIMD4-, SIMD8- und SIMD16-Anweisungen physisch ausführen und SIMD1-, SIMD2- und SIMD32-Anweisungen logisch ausführen. Die SIMD-Anweisungen für die GPGPU-Kerne können zur Kompilierzeit von einem Shader-Compiler oder automatisch generiert werden, wenn Programme ausgeführt und kompiliert werden, die für Single-Program-Multiple-Data- (SPMD) oder SIMT-Architekturen geschrieben und kompiliert wurden. Mehrere Threads eines Programms, das für das SIMT-Ausführungsmodell konfiguriert ist, können über einen einzigen SIMD-Befehl ausgeführt werden. Beispielsweise und bei einer Ausführungsform können acht SIMT-Threads, die dieselben oder ähnliche Operationen ausführen, parallel über eine einzige SIMD8-Logikeinheit ausgeführt werden.
  • Die Speicher- und Cache-Verbindung 268 ist ein Verbindungsnetzwerk, das jede der Funktionseinheiten des Grafik-Multiprozessors 234 mit der Registerdatei 258 und dem gemeinsam genutzten Speicher 270 verbindet. Zum Beispiel ist die Speicher- und Cache-Verbindung 268 eine Kreuzschienenverbindung, die es der Lade-/Speichereinheit 266 erlaubt, Lade- und Speicheroperationen zwischen dem gemeinsam genutzten Speicher 270 und der Registerdatei 258 zu implementieren. Die Registerdatei 258 kann mit der gleichen Frequenz wie die GPGPU-Kerne 262 arbeiten, daher weist der Datentransfer zwischen den GPGPU-Kernen 262 und der Registerdatei 258 eine sehr geringe Latenz auf. Der gemeinsam genutzte Speicher 270 kann verwendet werden, um eine Kommunikation zwischen Threads, die auf den Funktionseinheiten innerhalb des Grafik-Multiprozessors 234 ausgeführt werden, zu ermöglichen. Der Cache-Speicher 272 kann beispielsweise als Daten-Cache verwendet werden, um Texturdaten, die zwischen den Funktionseinheiten und der Textureinheit 236 kommuniziert werden, zwischenzuspeichern. Der gemeinsam genutzte Speicher 270 kann auch als zwischengespeichert gehandhabtes Programm verwendet werden. Auf den GPGPU-Kernen 262 ausgeführte Threads können zusätzlich zu den automatisch zwischengespeicherten Daten, die in dem Cache-Speicher 272 gespeichert sind, programmgesteuert Daten in dem gemeinsam genutzten Speicher speichern.
  • Die 3A bis 3C veranschaulichen zusätzliche Grafik-Multiprozessoren gemäß Ausführungsformen. Die 3A bis 3B veranschaulichen Grafik-Multiprozessoren 325, 350, die sich auf den Grafik-Multiprozessor 234 der 2C beziehen und kann an Stelle eines dieser verwendet werden. Daher offenbart die Offenbarung von Merkmalen in Kombination mit dem Grafik-Multiprozessor 234 hierin auch eine entsprechende Kombination mit dem/den Grafik-Multiprozessor(en) 325, 350, ist aber nicht darauf beschränkt. 3C veranschaulicht eine Grafikverarbeitungseinheit (GPU) 380, die dedizierte Sätze von Grafikverarbeitungsressourcen beinhaltet, die in Mehrkerngruppen 365A bis 365N eingerichtet sind, die den Grafik-Multiprozessoren 325, 350 entsprechen. Die veranschaulichten Grafik-Multiprozessoren 325, 350 und die Multi-Core-Gruppen 365A bis 365N können Streaming-Multiprozessoren (SM) sein, die in der Lage sind, eine große Anzahl von Ausführungs-Threads gleichzeitig auszuführen.
  • Der Grafik-Multiprozessor 325 der 3A beinhaltet mehrere zusätzliche Instanzen von Ausführungsressourceneinheiten in Bezug auf den Grafik-Multiprozessor 234 der 2D. Zum Beispiel kann der Grafik-Multiprozessor 325 mehrere Instanzen der Befehlseinheit 332A-332B, der Registerdatei 334A-334B und der Textureinheit(en) 344A-344B umfassen. Der Grafik-Multiprozessor 325 beinhaltet auch mehrere Sätze von Grafik- oder Rechenausführungseinheiten (zum Beispiel GPGPU-Kern 336A - 336B, Tensor-Kern 337A bis 337B, Raytracing-Kern 338A bis 338B) und mehrere Sätze von Lade-/Speichereinheiten 340A-340B. Die Ausführungsressourceneinheiten weisen einen gemeinsamen Anweisungs-Cache 330, einen Textur- und/oder Daten-Cache-Speicher 342 und einen gemeinsam genutzten Speicher 346 auf.
  • Die verschiedenen Bauelemente können über eine Verbindungsstruktur 327 kommunizieren. Die Verbindungsstruktur 327 kann einen oder mehrere Kreuzschienenschalter beinhalten, um eine Kommunikation zwischen den verschiedenen Bauelementen des Grafik-Multiprozessors 325 zu ermöglichen. Die Verbindungsstruktur 327 kann eine separate Hochgeschwindigkeits-Netzwerkstrukturschicht sein, auf der jedes Bauelement des Grafik-Multiprozessors 325 gestapelt ist. Die Bauelemente des Grafik-Multiprozessors 325 kommunizieren mit entfernten Bauelementen über die Verbindungsstruktur 327. Zum Beispiel können die GPGPU-Kerne 336A-336B, 337A-337B und 3378A-338B jeweils mit dem gemeinsam genutzten Speicher 346 über die Verbindungsstruktur 327 kommunizieren. Die Verbindungsstruktur 327 kann die Kommunikation innerhalb des Grafik-Multiprozessors 325 arbitrieren, um eine faire Bandbreitenzuordnung zwischen Bauelementen sicherzustellen.
  • Der Grafik-Multiprozessor 350 der 3B beinhaltet mehrere Sätze von Ausführungsressourcen 356A bis 356D, wobei jeder Satz von Ausführungsressourcen mehrere Anweisungseinheiten, Registerdateien, GPGPU-Kerne und Lade-/Speichereinheiten beinhaltet, wie in 2D und 3A veranschaulicht. Die Ausführungsressourcen 356A bis 356D können mit Textureinheit(en) 360A bis 360D für Texturoperationen zusammenarbeiten, während sie einen Anweisungs-Cache 354 und einen gemeinsam genutzten Speicher 353 gemeinsam nutzen. Zum Beispiel können sich die Ausführungsressourcen 356A bis 356D einen Anweisungs-Cache 354 und einen gemeinsam genutzten Speicher 353 sowie mehrere Instanzen eines Textur- und/oder Daten-Cache-Speichers 358A bis 358B gemeinsam nutzen. Die verschiedenen Bauelemente können über eine Verbindungsstruktur 352 ähnlich der Verbindungsstruktur 327 der 3A kommunizieren.
  • Fachleute werden verstehen, dass die in den 1, 2A bis 2D und 3A bis 3B beschriebene Architektur beschreibend ist und den Umfang der vorliegenden Ausführungsformen nicht einschränkt. Somit können die hierin beschriebenen Techniken auf jeder ordnungsgemäß konfigurierten Verarbeitungseinheit implementiert werden, einschließlich, ohne Einschränkung, auf einem oder mehreren mobilen Anwendungsprozessoren, einer oder mehreren Desktop- oder Server-Zentralverarbeitungseinheiten (CPUs), einschließlich Mehrkern-CPUs, einer oder mehreren parallelen Verarbeitungseinheiten, wie beispielsweise auf der parallelen Verarbeitungseinheit 202 der 2A, sowie auf einem oder mehreren Grafikprozessoren oder Spezialzweckverarbeitungseinheiten, ohne vom Schutzumfang der hierin beschriebenen Ausführungsformen abzuweichen.
  • Der hierin beschriebene parallele Prozessor oder die GPGPU kann kommunikativ an Host-/Prozessorkerne gekoppelt sein, um Grafikoperationen, Maschinenlernoperationen, Musteranalyseoperationen und verschiedene Allzweck-GPU-(GPGPU)-Funktionen zu beschleunigen. Die GPU kann über einen Bus oder eine andere Verbindung (zum Beispiel eine Hochgeschwindigkeitsverbindung, wie etwa PCIe oder NVLink) kommunikativ mit dem/den Host-Prozessor/-Kernen gekoppelt sein. Bei anderen Ausführungsformen kann die GPU auf demselben Package oder Chip wie die Kerne integriert sein und über einen internen Prozessorbus/eine interne Prozessorverbindung (das heißt innerhalb des Package oder Chips) kommunikativ mit den Kernen gekoppelt sein. Ungeachtet der Art und Weise, in der die GPU verbunden ist, können die Prozessorkerne der GPU Arbeit in Form von Befehls-/Anweisungsfolgen, die in einem Arbeitsdeskriptor enthalten sind, zuordnen. Die GPU verwendet dann dedizierte Schaltungen/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
  • 3C veranschaulicht eine Grafikverarbeitungseinheit (GPU) 380, die dedizierte Sätze von Grafikverarbeitungsressourcen umfasst, die in Mehrkerngruppen 365A bis 365N angeordnet sind. Während die Details nur einer einzelnen Mehrkerngruppe 365A bereitgestellt werden, versteht es sich, dass die anderen Mehrkerngruppen 365B bis 365N mit den gleichen oder ähnlichen Sätzen von Grafikverarbeitungsressourcen ausgestattet sein können. Details, die in Bezug auf die Multi-Core-Gruppen 365A bis 365N beschrieben sind, können auch für jeden hier beschriebenen Grafik-Multiprozessor 234, 325, 350 gelten.
  • Wie veranschaulicht, kann eine Mehrkerngruppe 365A einen Satz von Grafikkernen 370, einen Satz von Tensor-Kernen 371 und einen Satz von Raytracing-Kernen 372 beinhalten. Ein Scheduler/Dispatcher 368 plant und verteilt die Grafik-Threads zur Ausführung auf den verschiedenen Kernen 370, 371, 372. Ein Satz von Registerdateien 369 speichert Operandenwerte, die von den Kernen 370, 371, 372 verwendet werden, wenn die Grafik-Threads ausgeführt werden. Diese können beispielsweise Ganzzahlregister zum Speichern von Ganzzahlwerten, Gleitkommaregister zum Speichern von Gleitkommawerten, Vektorregister zum Speichern von gepackten Datenelementen (Ganzzahl- und/oder Gleitkommadatenelementen) und Tile-Register zum Speichern von Tensor-/Matrixwerten sein. Die Tile-Register können als kombinierte Sätze von Vektorregistern implementiert werden.
  • Ein oder mehrere kombinierte Level-1-Caches (L1-Caches) und gemeinsam genutzte Speichereinheiten 373 speichern Grafikdaten, wie Texturdaten, Eckpunktdaten, Pixeldaten, Strahlendaten, Hüllkörperdaten usw. lokal innerhalb jeder Mehrkerngruppe 365A. Eine oder mehrere Textureinheiten 374 können auch verwendet werden, um Texturierungsoperationen auszuführen, wie beispielsweise Texturabbildung und Sampling. Ein Level-2-Cache 375 (L2-Cache), der von allen oder einer Teilmenge der Multi-Core-Gruppen 365A bis 365N gemeinsam genutzt wird, speichert Grafikdaten und/oder Anweisungen für mehrere gleichzeitige Grafik-Threads. Wie veranschaulicht, kann der L2-Cache 375 von mehreren Multi-Core-Gruppen 365A bis 365N gemeinsam genutzt werden. Ein oder mehrere Speichercontroller 367 koppeln die GPU 380 mit einem Speicher 366, der ein Systemspeicher (zum Beispiel DRAM) und/oder ein dedizierter Grafikspeicher (zum Beispiel GDDR6-Speicher) sein kann.
  • Eingabe/Ausgabe-(E/A)-Schaltungen 363 koppeln die GPU 380 mit einer oder mehreren E/A-Vorrichtungen 362, wie etwa digitalen Signalprozessoren (DSPs), Netzwerkcontrollern oder Benutzereingabegeräten. Eine chipintegrierte Verbindung kann verwendet werden, um die E/A-Geräte 362 mit der GPU 380 und dem Speicher 366 zu koppeln. Eine oder mehrere E/A-Speicherverwaltungseinheiten (IOMMUs) 364 der E/A-Schaltung 363 koppeln die E/A-Vorrichtungen 362 direkt mit dem Systemspeicher 366. Optional verwaltet die IOMMU 364 mehrere Sätze von Seitentabellen, um virtuelle Adressen auf physische Adressen in dem Systemspeicher 366 abzubilden. Die E/A-Vorrichtungen 362, CPU(s) 361 und GPU(s) 380 können sich dann denselben virtuellen Adressraum teilen.
  • Bei einer Implementierung der IOMMU 364 unterstützt die IOMMU 364 die Virtualisierung. In diesem Fall kann sie einen ersten Satz von Seitentabellen verwalten, um virtuelle Gast-/Grafikadressen physischen Gast-/Grafikadressen zuzuordnen, und einen zweiten Satz Seitentabellen, um die physischen Gast-/Grafikadressen physischen System-/Host-Adressen zuzuordnen (zum Beispiel innerhalb des Systemspeichers 366). Die Basisadressen jedes des ersten und des zweiten Satzes von Seitentabellen können in Steuerregistern gespeichert und an einem Kontextschalter ausgelagert werden (zum Beispiel derart, dass der neue Kontext mit Zugriff auf den relevanten Satz von Seitentabellen versehen wird). Obwohl es in 3C nicht veranschaulicht ist, kann jeder der Kerne 370, 371, 372 und/oder können die Multi-Core-Gruppen 365A bis 365N Übersetzungs-Lookaside-Puffer (TLBs) beinhalten, um virtuelle Gastübersetzungen in physische Gastübersetzungen, physische Gastübersetzungen in physische Hostübersetzungen und virtuelle Gastübersetzungen in physische Hostübersetzungen zwischenzuspeichern.
  • Die CPUs 361, GPUs 380 und E/A-Vorrichtungen 362 können auf einem einzelnen Halbleiterchip und/oder-Package integriert sein. Der veranschaulichte Speicher 366 kann auf demselben Chip integriert sein oder kann über eine chipexterne Schnittstelle mit den Speichercontrollern 367 gekoppelt sein. Bei einer Implementierung umfasst der Speicher 366 einen GDDR6-Speicher, der denselben virtuellen Adressraum wie andere physische Speicher auf Systemebene gemeinsam nutzt, obwohl die hierin beschriebenen zugrundeliegenden Prinzipien nicht auf diese spezielle Implementierung beschränkt sind.
  • Die Tensor-Kerne 371 können eine Vielzahl von Ausführungseinheiten beinhalten, die speziell dafür ausgelegt sind, Matrixoperationen auszuführen, die die grundlegenden Rechenoperation sind, die verwendet werden, um Deep-Learning-Operationen auszuführen. Zum Beispiel können simultane Matrixmultiplikationsoperationen für das Training und die Inferenz neuronaler Netzwerke verwendet werden. Die Tensor-Kerne 371 können eine Matrixverarbeitung unter Verwenden einer Vielzahl von Operandenpräzisionen ausführen, einschließlich Gleitkomma mit einfacher Präzision (zum Beispiel 32 Bit), Gleitkomma mit halber Präzision (zum Beispiel 16 Bit), ganzzahligen Wörtern (16 Bit), Bytes (8 Bit) und Halbbytes (4 Bit). Beispielsweise extrahiert eine neuronale Netzwerkimplementierung Merkmale jeder gerenderten Szene, wobei möglicherweise Details aus mehreren Frames kombiniert werden, um ein hochwertiges Endbild zu erstellen.
  • Bei Deep-Learning-Implementierungen kann parallele Matrixmultiplikationsarbeit zur Ausführung auf den Tensor-Kernen 371 geplant werden. Insbesondere erfordert das Training neuronaler Netze eine signifikante Anzahl von Skalarprodukt-Matrix-Operationen. Um eine Innenproduktformulierung einer N × N × N-Matrixmultiplikation zu verarbeiten, können die Tensor-Kerne 371 mindestens N Skalarprodukt-Verarbeitungselemente beinhalten. Bevor die Matrixmultiplikation beginnt, wird eine gesamte Matrix in Tile-Register geladen, und mindestens eine Spalte einer zweiten Matrix wird bei jedem Zyklus für N Zyklen geladen. Bei jedem Zyklus werden N Skalarprodukte verarbeitet.
  • Matrixelemente können in Abhängigkeit von der jeweiligen Implementierung mit unterschiedlichen Präzisionen gespeichert werden, einschließlich 16-Bit-Wörtern, 8-Bit-Bytes (zum Beispiel INT8) und 4-Bit-Halbbytes (zum Beispiel INT4). Für die Tensor-Kerne 371 können unterschiedliche Präzisionsmodi spezifiziert werden, um sicherzustellen, dass die effizienteste Präzision für unterschiedliche Arbeitslasten verwendet wird (zum Beispiel zum Ableiten von Arbeitslasten, die eine Quantisierung in Bytes und Halbbytes tolerieren können).
  • Die Raytracing-Kerne 372 können Raytracing-Operationen sowohl für Echtzeit-Raytracing- als auch für Nicht-Echtzeit-Raytracing-Implementierungen beschleunigen. Insbesondere können die Strahlverfolgungskerne 372 Strahldurchquerungs-/Schnittpunktschaltungen zum Ausführen von Strahlendurchquerung unter Verwenden von Hüllvolumen-Hierarchien (BVHs) und zum Identifizieren von Schnittpunkten zwischen Strahlen und Grundelementen, die in den BVH-Volumina eingeschlossen sind, beinhalten. Die Raytracing-Kerne 372 können auch Schaltungen zum Ausführen von Tiefentests und Culling (zum Beispiel unter Verwenden eines Z-Puffers oder einer ähnlichen Anordnung) beinhalten. Bei einer Implementierung führen die Raytracing-Kerne 372 Durchquerungs- und Schnittoperationen gemeinsam mit den hierin beschriebenen Bildrauschunterdrückungstechniken aus, von denen zumindest ein Teil auf den Tensor-Kernen 371 ausgeführt werden kann. Zum Beispiel können die Tensor-Kerne 371 ein neuronales Deep-Learning-Netzwerk implementieren, um eine Rauschunterdrückung von Frames, die von den Raytracing-Kernen 372 erzeugt werden, auszuführen. Die CPU(s) 361, Grafikkerne 370 und/oder Raytracing-Kerne 372 können jedoch auch alle oder einen Teil der Rauschunterdrückungs- und/oder Deep-Learning-Algorithmen implementieren.
  • Außerdem kann, wie oben beschrieben, ein verteilter Ansatz zur Rauschunterdrückung verwendet werden, bei dem sich die GPU 380 in einer Rechenvorrichtung befindet, die über ein Netzwerk oder eine Hochgeschwindigkeitsverbindung mit anderen Rechenvorrichtungen gekoppelt ist. Bei diesem verteilten Ansatz können die miteinander verbundenen Rechenvorrichtungen Lern-/Trainingsdaten eines neuronalen Netzwerks gemeinsam nutzen, um die Geschwindigkeit zu verbessern, mit der das Gesamtsystem lernt, Rauschunterdrückung für unterschiedliche Typen von Bildrahmen und/oder unterschiedliche Grafikanwendungen auszuführen.
  • Die Raytracing-Kerne 372 können alle BVH-Durchquerungen und/oder Grundelementschnittpunkte verarbeiten, wodurch die Grafikkerne 370 davor bewahrt werden, mit Tausenden von Befehlen pro Strahl überlastet zu werden. Zum Beispiel beinhaltet jeder Strahlverfolgungskern 372 einen ersten Satz spezialisierter Schaltungen zum Ausführen von Begrenzungsrechtecktests (zum Beispiel für Durchquerungsoperationen) und/oder einen zweiten Satz spezialisierter Schaltungen zum Ausführen der Strahlen-Dreieck-Schnitttests (zum Beispiel einander schneidende Strahlen, die durchquert wurden). Somit kann zum Beispiel die Mehrkerngruppe 365A einfach eine Strahlsonde starten, und die Strahlverfolgungskerne 372 führen unabhängig Strahldurchquerung und Schnitt aus und geben Trefferdaten (zum Beispiel ein Treffer, kein Treffer, mehrere Treffer usw.) zu dem Thread-Kontext zurück. Die anderen Kerne 370, 371 werden freigegeben, um andere Grafik- oder Rechenarbeit auszuführen, während die Raytracing-Kerne 372 die Durchquerungs- und Schnittoperationen ausführen.
  • Optional kann jeder Strahlverfolgungskern 372 eine Durchquerungseinheit beinhalten, um BVH-Testoperationen auszuführen, und/oder eine Schnitteinheit, die strahlenprimitive Schnitttests ausführt. Die Kreuzungseinheit erzeugt eine „Treffer“, „kein Treffer“ oder „Mehrfachtreffer“-Antwort, die sie an den entsprechenden Thread liefert. Während der Durchquerungs- und Kreuzungsoperationen werden die Ausführungsressourcen der anderen Kerne (zum Beispiel Grafikkerne 370 und Tensor-Kerne 371) freigegeben, um andere Formen von Grafikarbeit auszuführen.
  • Bei einer unten beschriebenen optionalen Ausführungsform wird ein hybrider Rasterisierungs-/Raytracing-Ansatz verwendet, bei dem Arbeit auf die Grafikkerne 370 und den Raytracing-Kerne 372 verteilt wird.
  • Die Raytracing-Kerne 372 (und/oder andere Kerne 370, 371) können Hardwareunterstützung für einen Raytracing-Befehlssatz, wie Microsofts DirectX Ray Tracing (DXR), das einen DispatchRays-Befehl beinhaltet, sowie Ray-Generation, Nearest-Hit, Any-Hit- und Miss-Shader, beinhalten, die die Zuweisung einzigartiger Shader- und Textursätze für jedes Objekt ermöglichen. Eine andere Raytracing-Plattform, die von den Raytracing-Kernen 372, den Grafikkernen 370 und den Tensor-Kernen 371 unterstützt werden kann, ist Vulkan 1.1.85. Es ist jedoch zu beachten, dass die hierin beschriebenen zugrundeliegenden Prinzipien nicht auf eine bestimmte Raytracing-ISA beschränkt sind.
  • Im Allgemeinen können die verschiedenen Kerne 372, 371, 370 einen Strahlverfolgungsbefehlssatz unterstützen, der Befehle/Funktionen für eine oder mehrere von Strahlerzeugung, nächster Treffer, beliebigen Treffer, Strahl-Grundelement-Schnittpunkt, pro-Grundelemente und hierarchischer Begrenzungsrechteckkonstruktion, Fehlschlag, Besuch und Ausnahmen beinhaltet. Genauer gesagt beinhaltet eine bevorzugte Ausführungsform Raytracing-Anweisungen, um eine oder mehrere der folgenden Funktionen auszuführen:
  • Strahlengeneration - Strahlerzeugungsanweisungen können für jedes Pixel, jede Probe oder jeden anderen benutzerdefinierten Arbeitsauftrag ausgeführt werden.
  • Nächster Treffer - Eine Anweisung für den nächsten Treffer kann ausgeführt werden, um den nächsten Schnittpunkt eines Strahls mit Grundelementen innerhalb einer Szene zu lokalisieren.
  • Jeder Treffer - Eine Any-Hit-Anweisung identifiziert mehrere Schnittpunkte zwischen einem Strahl und Grundelementen innerhalb einer Szene, möglicherweise um einen neuen nächsten Schnittpunkt zu identifizieren.
  • Überschneidung - Ein Schnittbefehl führt einen strahlenprimitiven Schnittpunkttest aus und gibt ein Ergebnis aus.
  • Pro-Grundelement- Begrenzungsrechteckaufbau - Diese Anweisung baut ein Begrenzungsrechteck um ein gegebenes Grundelement oder eine Gruppe von Grundelementen (zum Beispiel beim Erstellen einer neuen BVH- oder einer anderen Beschleunigungsdatenstruktur).
  • Fehlschlag - Zeigt an, dass ein Strahl die gesamte Geometrie innerhalb einer Szene oder eines bestimmten Bereichs einer Szene verfehlt.
  • Besuch - Gibt die untergeordneten Volumina an, die ein Strahl durchquert.
  • Ausnahmen - Beinhaltet verschiedene Arten von Ausnahmebehandlungsroutinen (zum Beispiel für verschiedene Fehlerbedingungen aufgerufen).
  • Techniken für die GPU-zu-Host-Prozessor-Verbindung
  • 4A stellt eine beispielhafte Architektur dar, in der eine Vielzahl von GPUs 410 bis 413, zum Beispiel die in 2A gezeigten parallelen Prozessoren 200 kommunikativ mit einer Vielzahl von Mehrkernprozessoren 405 bis 406 über Hochgeschwindigkeitsverbindungen 440A - 440D (zum Beispiel Busse, Punkt-zu-Punkt-Verbindungen usw.) gekoppelt sind. Die Hochgeschwindigkeitsverbindungen 440A bis 440D können je nach Implementierung einen Kommunikationsdurchsatz von 4 GB/s, 30 GB/s, 80 GB/s oder höher unterstützen. Es können verschiedene Verbindungsprotokolle verwendet werden, einschließlich, aber nicht beschränkt auf PCIe 4.0 oder 5.0 und NVLink 2.0. Die hierin beschriebenen zugrunde liegenden Prinzipien sind jedoch nicht auf ein bestimmtes Kommunikationsprotokoll oder einen bestimmten Durchsatz beschränkt.
  • Zwei oder mehr der GPUs 410 bis 413 können über Hochgeschwindigkeitsverbindungen 442A-442B miteinander verbunden sein, die unter Verwenden der gleichen oder anderer Protokolle/Verbindungen als denen, die für die Hochgeschwindigkeitsverbindungen 440A bis 440D verwendet werden, implementiert werden können. In ähnlicher Weise können zwei oder mehr der Mehrkernprozessoren 405-406 über eine Hochgeschwindigkeitsverbindung 443 verbunden sein, die symmetrische Mehrprozessor-Busse (SMP-Busse) sein können, die mit 20 GB/s, 30 GB/s, 120 GB/s oder höher arbeiten. Alternativ kann die gesamte Kommunikation zwischen den verschiedenen Systemkomponenten in 4A unter Verwenden der gleichen Protokolle/Verbindungen (zum Beispiel über eine gemeinsame Verbindungsstruktur) erreicht werden. Wie erwähnt, sind die hierin beschriebenen zugrundeliegenden Prinzipien jedoch nicht auf eine bestimmte Art von Verbindungstechnologie beschränkt.
  • Jeder Mehrkernprozessor 405 bis 406 kann über Speicherverbindungen 430A-430B jeweils kommunikativ mit einem Prozessorspeicher 401-402 gekoppelt sein, und jede GPU 410 bis 413 ist jeweils über GPU-Speicherverbindungen 450A bis 450D kommunikativ mit dem GPU-Speicher 420 bis 423 gekoppelt. Die Speicherverbindungen 430A-430B und 450A bis 450D können die gleichen oder unterschiedliche Speicherzugriffstechnologien verwenden. Als Beispiel und nicht einschränkend können die Prozessorspeicher 401-402 und die GPU-Speicher 420 bis 423 flüchtige Speicher sein, wie etwa dynamische Speicher mit wahlfreiem Zugriff (DRAMs) (einschließlich gestapelter DRAMs), Grafik-DDR-SDRAM (GDDR) (zum Beispiel GDDR5, GDDR6) oder High Bandwidth Memory (HBM), und/oder können nichtflüchtige Speicher, wie 3D XPoint/Optane oder Nano-Ram, sein. Beispielsweise kann ein Teil der Speicher ein flüchtiger Speicher sein und ein anderer Teil kann ein nichtflüchtiger Speicher sein (zum Beispiel unter Verwenden einer Zwei-Ebenen-Speicher-Hierarchie (2LM-Hierarchie).
  • Wie unten beschrieben, kann, obwohl die verschiedenen Prozessoren 405-406 und GPUs 410 bis 413 physisch mit einem bestimmten Speicher 401-402 bzw. 420 bis 423 gekoppelt sein können, eine einheitliche Speicherarchitektur implementiert werden, in der der gleiche virtuelle Systemadressraum (auch als „effektiver Adressraum“ bezeichnet) auf alle der verschiedenen physischen Speicher verteilt wird. Zum Beispiel können die Prozessorspeicher 401-402 jeweils 64 GB des Adressraums des Systemspeichers umfassen und die GPU-Speicher 420 bis 423 können jeweils 32 GB des Adressraums des Systemspeichers umfassen (was bei diesem Beispiel zu einer Gesamtzahl von 256 GB adressierbarem Speicher führt).
  • 4B veranschaulicht zusätzliche optionale Details für eine Verbindung zwischen einem Mehrkernprozessor 407 und einem Grafikbeschleunigungsmodul 446. Das Grafikbeschleunigungsmodul 446 kann einen oder mehrere GPU-Chips beinhalten, die auf einer Linecard integriert sind, die über die Hochgeschwindigkeitsverbindung 440 mit dem Prozessor 407 gekoppelt ist. Alternativ kann das Grafikbeschleunigungsmodul 446 auf demselben Package oder Chip wie der Prozessor 407 integriert sein.
  • Der veranschaulichte Prozessor 407 beinhaltet mehrere Kerne 460A bis 460D, jeder mit einem Übersetzungs-Lookaside-Puffer 461A bis 461D und einem oder mehreren Caches 462A bis 462D. Die Kerne können verschiedene andere Bauelemente zum Ausführen von Befehlen und zum Verarbeiten von Daten beinhalten, die nicht veranschaulicht sind, um zu vermeiden, dass die zugrunde liegenden Prinzipien der hierin beschriebenen Bauelemente verschleiert werden (zum Beispiel Anweisungsabrufeinheiten, Verzweigungsvorhersageeinheiten, Decoder, Ausführungseinheiten, Neuordnungspuffer usw.). Die Caches 462A bis 462D können Caches der Ebene 1 (L1) und Ebene 2 (L2) umfassen. Außerdem können ein oder mehrere gemeinsam genutzte Caches 456 in der Cache-Hierarchie enthalten sein und von den Sätzen der Kerne 460A bis 460D gemeinsam genutzt werden. Zum Beispiel beinhaltet eine Ausführungsform des Prozessors 407 24 Kerne, jeder mit seinem eigenen L1-Cache, zwölf gemeinsam genutzte L2-Caches und zwölf gemeinsam genutzte L3-Caches. Bei dieser Ausführungsform wird einer der L2- und L3-Caches von zwei benachbarten Kernen gemeinsam genutzt. Der Prozessor 407 und das Grafikbeschleuniger-Integrationsmodul 446 sind mit dem Systemspeicher 441 verbunden, der Prozessorspeicher 401-402 beinhalten kann.
  • Die Kohärenz für Daten und Anweisungen, die in den verschiedenen Caches 462A bis 462D, 456 und dem Systemspeicher 441 gespeichert sind, wird über eine Inter-Kern-Kommunikation über einen Kohärenzbus 464 aufrechterhalten. Zum Beispiel kann jeder Cache Cache-Kohärenz-Logik/-Schaltungen aufweisen, die damit verbunden ist, um als Reaktion auf erfasste Lese- oder Schreibvorgänge in bestimmte Cache-Zeilen über den Kohärenzbus 464 zu kommunizieren. Bei einer Implementierung wird ein Cache-Snooping-Protokoll über den Kohärenzbus 464 implementiert, um Cache-Zugriffe abzuhören. Cache-Snooping/Kohärenz-Techniken werden von Fachleuten gut verstanden und werden hier nicht im Detail beschrieben, um ein Verschleiern der hierin beschriebenen zugrundeliegenden Prinzipien zu vermeiden.
  • Eine Proxy-Schaltung 425, die das Grafikbeschleunigungsmodul 446 kommunikativ mit dem Kohärenzbus 464 koppelt, kann bereitgestellt werden, wodurch es dem Grafikbeschleunigungsmodul 446 erlaubt wird, als ein Peer der Kerne an dem Cache-Kohärenzprotokoll teilzunehmen. Insbesondere stellt eine Schnittstelle 435 Konnektivität zu der Proxy-Schaltung 425 über eine Hochgeschwindigkeitsverbindung 440 (zum Beispiel einen PCIe-Bus, NVLink usw.) bereit, und eine Schnittstelle 437 verbindet das Grafikbeschleunigungsmodul 446 mit der Hochgeschwindigkeitsverbindung 440.
  • Bei einer Implementierung stellt eine Beschleunigerintegrationsschaltung 436 Cache-Verwaltungs-, Speicherzugriffs-, Kontextverwaltungs- und Unterbrechungsverwaltungsdienste im Namen einer Vielzahl von Grafikverarbeitungsmaschinen 431, 432, N des Grafikbeschleunigungsmoduls 446 bereit. Die Grafikverarbeitungsmaschinen 431, 432, N können jeweils eine separate Grafikverarbeitungseinheit (GPU) umfassen. Alternativ können die Grafikverarbeitungsmaschinen 431, 432, N unterschiedliche Typen von Grafikverarbeitungsmaschinen innerhalb einer GPU umfassen, wie beispielsweise Grafikausführungseinheiten, Medienverarbeitungsmaschinen (zum Beispiel Videocodierer/- decodierer), Sampler und Blitmaschinen. Mit anderen Worten kann das Grafikbeschleunigungsmodul eine GPU mit einer Vielzahl von Grafikverarbeitungsmaschinen 431-432, N sein, oder die Grafikverarbeitungsmaschinen 431 bis 432, N können einzelne GPUs sein, die auf einem gemeinsamen Package, einer Linecard oder einem gemeinsamen Chip integriert sind.
  • Die Beschleunigerintegrationsschaltung 436 kann eine Speicherverwaltungseinheit (MMU) 439 zum Ausführen verschiedener Speicherverwaltungsfunktionen beinhalten, wie zum Beispiel Virtuell-zu-Physisch-Speicherübersetzungen (auch als Effektiv-zu-Real-Speicherübersetzungen bezeichnet) und Speicherzugriffsprotokolle zum Zugreifen auf Systemspeicher 441. Die MMU 439 kann auch einen Übersetzungs-Lookaside-Puffer (TLB) (nicht gezeigt) zum Zwischenspeichern der virtuellen/effektiven in physisch/reale Adressübersetzungen beinhalten. Bei einer Implementierung speichert ein Cache 438 Befehle und Daten für einen effizienten Zugriff durch die Grafikverarbeitungsmaschinen 431-432, N. Die im Cache 438 und den Grafikspeichern 433-434, M gespeicherten Daten können mit den Kern-Caches 462A bis 462D, 456 und dem Systemspeicher 411 kohärent gehalten werden. Wie erwähnt, kann dies über die Proxy-Schaltung 425 erreicht werden, die an dem Cache-Kohärenzmechanismus im Namen des Caches 438 und der Speicher 433-434, M teilnimmt (zum Beispiel Senden von Aktualisierungen zu dem Cache 438 im Zusammenhang mit Modifikationen/Zugriffen von Cache-Linien auf den Prozessor-Caches 462A bis 462D, 456 und Empfangen von Aktualisierungen von dem Cache 438).
  • Ein Satz von Registern 445 speichert Kontextdaten für Threads, die von den Grafikverarbeitungsmaschinen 431 bis 432 N ausgeführt werden, und eine Kontextverwaltungsschaltung 448 verwaltet die Thread-Kontexte. Zum Beispiel kann die Kontextverwaltungsschaltung 448 Sicherungs- und Wiederherstellungsoperationen ausführen, um Kontexte der verschiedenen Threads während Kontextwechseln zu sichern und wiederherzustellen (zum Beispiel, wenn ein erster Thread gespeichert und ein zweiter Thread gespeichert wird, so dass der zweite Thread von einer Grafikverarbeitungsmaschine ausgeführt werden kann). Beispielsweise kann die Kontextverwaltungsschaltung 448 bei einem Kontextwechsel aktuelle Registerwerte in einem bestimmten Bereich in dem Speicher speichern (der zum Beispiel von einem Kontextzeiger identifiziert wird). Sie kann dann die Registerwerte wiederherstellen, wenn sie zu dem Kontext zurückkehrt. Eine Interrupt-Verwaltungsschaltung 447 kann beispielsweise Interrupts, die von Systemgeräten empfangen werden, empfangen und verarbeiten.
  • Bei einer Implementierung werden virtuelle/effektive Adressen von einer Grafikverarbeitungsmaschine 431 von der MMU 439 in reale/physische Adressen in dem Systemspeicher 411 übersetzt. Optional unterstützt die Beschleunigerintegrationsschaltung 436 mehrere (zum Beispiel 4, 8, 16) Grafikbeschleunigermodule 446 und/oder andere Beschleunigervorrichtungen. Das Grafikbeschleunigermodul 446 kann einer einzelnen Anwendung gewidmet sein, die auf dem Prozessor 407 ausgeführt wird, oder kann von mehreren Anwendungen gemeinsam genutzt werden. Optional wird eine virtualisierte Grafikausführungsumgebung bereitgestellt, in der die Ressourcen der Grafikverarbeitungsmaschinen 431-432, N mit mehreren Anwendungen oder virtuellen Maschinen (VMs) gemeinsam genutzt werden. Die Ressourcen können in „Slices“ unterteilt werden, die auf der Grundlage der Verarbeitungsanforderungen und Prioritäten, die mit den VMs und/oder Anwendungen assoziiert sind, unterschiedlichen VMs und/oder Anwendungen zugeordnet werden.
  • Somit wirkt die Beschleunigerintegrationsschaltung 436 als eine Brücke zu dem System für das Grafikbeschleunigungsmodul 446 und stellt Adressenübersetzungs- und Systemspeicher-Cache-Dienste bereit. Bei einer Ausführungsform kann die Beschleunigerintegrationsschaltung 436 zur Erleichterung der Überbrückungsfunktionalität auch gemeinsam genutzte E/A 497 (zum Beispiel PCIe, USB) und Hardware beinhalten, um eine Systemsteuerung von Spannung, Takten, Performanz, Temperatur und Sicherheit zu ermöglichen. Der gemeinsam genutzte E/A 497 kann separate physische Verbindungen einsetzen oder kann die Hochgeschwindigkeitsverbindung 440 durchlaufen. Zusätzlich kann die Beschleunigerintegrationsschaltung 436 Virtualisierungseinrichtungen für den Hostprozessor bereitstellen, um die Virtualisierung der Grafikverarbeitungsmaschinen, Interrupts und die Speicherverwaltung zu verwalten.
  • Da Hardwareressourcen der Grafikverarbeitungsmaschinen 431-432, N explizit auf den vom Hostprozessor 407 gesehenen realen Adressraum abgebildet werden, kann jeder Hostprozessor diese Ressourcen direkt unter Verwenden eines effektiven Adresswerts adressieren. Eine optionale Funktion der Beschleunigerintegrationsschaltung 436 ist die physische Trennung der Grafikverarbeitungsmaschinen 431-432, N derart, dass sie dem System als unabhängige Einheiten erscheinen.
  • Ein oder mehrere Grafikspeicher 433-434, M können jeweils mit jeder der Grafikverarbeitungsmaschinen 431-432 bzw. N verbunden sein. Die Grafikspeicher 433-434, M speichern Anweisungen und Daten, die von jeder der Grafikverarbeitungsmaschinen 431-432, N verarbeitet werden. Die Grafikspeicher 433-434, M können flüchtige Speicher sein, wie DRAMs (einschließlich gestapelter DRAMs), GDDR-Speicher (zum Beispiel GDDR5, GDDR6) oder HBM, und/oder können nichtflüchtige Speicher sein, wie beispielsweise 3D XPoint/Optane oder Nano-Ram.
  • Um den Datenverkehr über die Hochgeschwindigkeitsverbindung 440 zu reduzieren, können Bias-Techniken verwendet werden, um sicherzustellen, dass die in den Grafikspeichern 433-434, M gespeicherten Daten Daten sind, die am häufigsten von den Grafikverarbeitungsmaschinen 431-432, N verwendet werden, und bevorzugt nicht von den Kernen 460A bis 460D (zumindest nicht häufig) verwendet werden. In ähnlicher Weise versucht der Bias-Mechanismus, von den Kernen (und bevorzugt nicht von den Grafikverarbeitungsmaschinen 431-432, N) benötigte Daten in den Caches 462A bis 462D, 456 der Kerne und des Systemspeichers 411 zu halten.
  • Gemäß einer in 4C gezeigten Variante ist die Beschleunigerintegrationsschaltung 436 in den Prozessor 407 integriert. Die Grafikverarbeitungsmaschinen 431-432, N kommunizieren direkt über die Hochgeschwindigkeitsverbindung 440 mit der Beschleunigerintegrationsschaltung 436 über die Schnittstelle 437 und die Schnittstelle 435 (die wiederum jede Form von Bus oder Schnittstellenprotokoll verwenden können). Die Beschleuniger-Integrationsschaltung 436 kann die gleichen Operationen wie diejenigen ausführen, die im Zusammenhang mit 4B beschrieben wurden, jedoch möglicherweise bei einem höheren Durchsatz aufgrund ihrer unmittelbaren Nähe zu dem Kohärenzbus 464 und den Caches 462A bis 462D, 456.
  • Die beschriebenen Ausführungsformen können unterschiedliche Programmiermodelle unterstützen, einschließlich eines Programmiermodells für dedizierte Prozesse (keine Virtualisierung des Grafikbeschleunigungsmoduls) und gemeinsam genutzte Programmiermodelle (mit Virtualisierung). Letztere können Programmiermodelle beinhalten, die von der Beschleunigerintegrationsschaltung 436 gesteuert werden, und Programmiermodelle, die von dem Grafikbeschleunigungsmodul 446 gesteuert werden.
  • Bei den Ausführungsformen des dedizierten Prozessmodells können die Grafikverarbeitungsmaschinen 431-432, N einer einzelnen Anwendung oder einem Prozess unter einem einzigen Betriebssystem gewidmet sein. Die einzelne Anwendung kann andere Anwendungsanforderungen an die Grafikmaschinen 431-432 N weiterleiten, wodurch eine Virtualisierung innerhalb einer VM/Partition bereitgestellt wird.
  • In den Programmiermodellen für dedizierte Prozesse können die Grafikverarbeitungsmaschinen 431-432 N von mehreren VM-/Anwendungspartitionen gemeinsam genutzt werden. Die gemeinsam genutzten Modelle erfordern einen Systemhypervisor, um die Grafikverarbeitungsmaschinen 431-432, N zu virtualisieren, um den Zugriff durch jedes Betriebssystem zu erlauben. Bei Einzelpartitionssystemen ohne einen Hypervisor sind die Grafikverarbeitungsmaschinen 431-432, N im Besitz des Betriebssystems. In beiden Fällen kann das Betriebssystem die Grafikverarbeitungsmaschinen 431-432, N virtualisieren, um Zugriff auf jeden Prozess oder jede Anwendung bereitzustellen.
  • Für das gemeinsam genutzte Programmiermodell wählt das Grafikbeschleunigungsmodul 446 oder eine einzelne Grafikverarbeitungsmaschine 431-432, N ein Prozesselement unter Verwenden eines Prozess-Handle aus. Die Prozesselemente können in dem Systemspeicher 411 gespeichert und unter Verwenden der hierin beschriebenen effektiven Adressen-zu-Real-Adressen-Übersetzungstechniken adressierbar sein. Der Prozess-Handle kann ein implementierungsspezifischer Wert sein, der dem Hostprozess bereitgestellt wird, wenn sein Kontext bei der Grafikverarbeitungsmaschine 431-432, N registriert wird (das heißt, die Systemsoftware aufgerufen wird, um das Prozesselement zu der verknüpften Liste der Prozesselemente hinzuzufügen). Die unteren 16 Bits des Prozess-Handle können das Offset des Prozesselements innerhalb der Prozesselement-Linked-List sein.
  • 4D veranschaulicht einen beispielhaften Beschleunigerintegrations-Slice 490. Wie hierin verwendet, umfasst ein „Slice“ einen spezifizierten Teil der Verarbeitungsressourcen der Beschleunigerintegrationsschaltung 436. Der effektive Adressraum 482 der Anwendung innerhalb des Systemspeichers 411 speichert Prozesselemente 483. Die Prozesselemente 483 können als Reaktion auf GPU-Aufrufe 481 von Anwendungen 480, die auf dem Prozessor 407 ausgeführt werden, gespeichert werden. Ein Prozesselement 483 enthält den Prozesszustand für die entsprechende Anwendung 480. Ein im Prozesselement 483 enthaltener Arbeitsdeskriptor (WD) 484 kann ein einzelner Job sein, der von einer Anwendung angefordert wird, oder kann einen Zeiger auf eine Warteschlange von Jobs enthalten. Im letzteren Fall ist der WD 484 ein Zeiger auf die Auftragsanforderungswarteschlange im Adressraum 482 der Anwendung.
  • Das Grafikbeschleunigungsmodul 446 und/oder die einzelnen Grafikverarbeitungsmaschinen 431-432, N können von allen oder einer Teilmenge der Prozesse im System gemeinsam genutzt werden. Die hierin beschriebenen Technologien können beispielsweise eine Infrastruktur zum Einrichten des Prozesszustands und zum Senden eines WD 484 an ein Grafikbeschleunigungsmodul 446 beinhalten, um einen Job in einer virtualisierten Umgebung zu starten.
  • Bei einer Implementierung ist das Programmiermodell für dedizierte Prozesse implementierungsspezifisch. Bei diesem Modell besitzt ein einzelner Prozess das Grafikbeschleunigungsmodul 446 oder eine einzelne Grafikverarbeitungsmaschine 431. Da das Grafikbeschleunigungsmodul 446 einem einzelnen Prozess gehört, initialisiert der Hypervisor die Beschleunigerintegrationsschaltung 436 für die besitzende Partition, und das Betriebssystem initialisiert die Beschleunigerintegrationsschaltung 436 für die besitzende Partition zu dem Zeitpunkt, in dem das Grafikbeschleunigungsmodul 446 zugewiesen wird.
  • Im Betrieb ruft eine WD-Abrufeinheit 491 im Beschleunigerintegrations-Slice 490 den nächsten WD 484 ab, der eine Angabe der von einer der Grafikverarbeitungsmaschinen des Grafikbeschleunigungsmoduls 446 zu erledigenden Arbeit beinhaltet. Daten von dem WD 484 können in den Registern 445 gespeichert und von der MMU 439, der Interrupt-Verwaltungsschaltung 447 und/oder der Kontext-Verwaltungsschaltung 448, wie dargestellt, verwendet werden. Zum Beispiel kann die MMU 439 Segment-/Page-Walk-Schaltungen zum Zugreifen auf Segment-/Page-Tabellen 486 innerhalb des virtuellen Adressraums 485 des Betriebssystems beinhalten. Die Interrupt-Verwaltungsschaltung 447 kann Interrupt-Ereignisse 492 verarbeiten, die von dem Grafikbeschleunigungsmodul 446 empfangen werden. Beim Ausführen von Grafikoperationen wird eine effektive Adresse 493, die von einer Grafikverarbeitungsmaschine 431-432, N erzeugt wird, von der MMU 439 in eine reale Adresse übersetzt.
  • Der gleiche Satz von Registern 445 kann für jede Grafikverarbeitungsmaschine 431-432, N und/oder jedes Grafikbeschleunigungsmodul 446 dupliziert werden und kann durch den Hypervisor oder das Betriebssystem initialisiert werden. Jedes dieser duplizierten Register kann in einem Beschleunigerintegrations-Slice 490 enthalten sein. Beispielhafte Register, die von dem Hypervisor initialisiert werden können, sind in Tabelle 1 dargestellt. Tabelle 1 - Vom Hypervisor initialisierte Register
    1 Slice-Steuerregister
    2 Zeiger für Real Address (RA) Geplanter Prozessbereichs
    3 Autoritätsmasken-Umgehungsregister
    4 Interrupt Vektortabelleneingabe-Offset
    5 Eingabelimit für Interrupt-Vektortabellen
    6 Zustandsregister
    7 Logische Partitions-ID
    8 Pointer für Reale Adresse (RA) Hypervisor Accelerator Utilization Record
    9 Speicherbeschreibungsregister
  • Beispielhafte Register, die von dem Betriebssystem initialisiert werden können, sind in Tabelle 2 gezeigt. Tabelle 2 - Vom Betriebssystem initialisierte Register
    1 Prozess- und Thread-Identifikation
    2 Zeiger für Effektive Adresse (EA) Kontext Sichern/Wiederherstellen
    3 Zeiger für Beschleunigereinsatzaufzeichnung für virtuelle Adresse (VA)
    4 Zeiger für Speichersegmenttabelle der virtuellen Adresse (VA)
    5 Autoritätsmaske
    6 Arbeitsdeskriptor
  • Jeder WD 484 kann für ein bestimmtes Grafikbeschleunigungsmodul 446 und/oder eine Grafikverarbeitungsmaschine 431-432, N spezifisch sein. Er enthält alle Informationen, die eine Grafikverarbeitungsmaschine 431-432, N benötigt, um ihre Arbeit zu erledigen, oder er kann ein Zeiger zu einem Speicherort, an dem die Anwendung eine Befehlswarteschlange mit zu vervollständigenden Arbeiten eingerichtet hat, sein.
  • 4E veranschaulicht zusätzliche optionale Details eines gemeinsam genutzten Modells. Sie beinhaltet einen realen Adressraum 498 des Hypervisors, in dem eine Prozesselementliste 499 gespeichert ist. Auf den realen Adressraum 498 des Hypervisors kann über einen Hypervisor 496 zugegriffen werden, der die Grafikbeschleunigungsmodulmaschinen für das Betriebssystem 495 virtualisiert.
  • Die gemeinsam genutzten Programmiermodelle ermöglichen es allen oder einer Teilmenge von Prozessen aus allen oder einer Teilmenge von Partitionen im System, ein Grafikbeschleunigungsmodul 446 zu verwenden. Es gibt zwei Programmiermodelle, bei denen das Grafikbeschleunigungsmodul 446 von mehreren Prozessen und Partitionen gemeinsam genutzt wird: Time-Sliced-Shared und Graphics-Directed-Shared.
  • Bei diesem Modell besitzt der Systemhypervisor 496 das Grafikbeschleunigungsmodul 446 und stellt seine Funktion allen Betriebssystemen 495 zur Verfügung. Damit ein Grafikbeschleunigungsmodul 446 die Virtualisierung durch den Systemhypervisor 496 unterstützt, kann das Grafikbeschleunigungsmodul 446 die folgenden Anforderungen erfüllen: 1) Eine Auftragsanforderung einer Anwendung muss autonom sein (das heißt der Zustand braucht zwischen Aufträgen nicht aufrechterhalten werden) oder das Grafikbeschleunigungsmodul 446 muss einen Kontextsicherungs- und Wiederherstellungsmechanismus bereitstellen. 2) Einer Auftragsanforderung einer Anwendung wird von dem Grafikbeschleunigungsmodul 446 garantiert, dass sie in einer bestimmten Zeit abgeschlossen wird, einschließlich etwaiger Übersetzungsfehler, oder das Grafikbeschleunigungsmodul 446 bietet die Möglichkeit, der Verarbeitung des Auftrags vorzugreifen. 3) Dem Grafikbeschleunigungsmodul 446 muss Fairness zwischen den Prozessen garantiert werden, wenn es in dem gerichteten gemeinsam genutzten Programmiermodell arbeitet.
  • Für das gemeinsam genutzte Modell ist es eventuell erforderlich, dass die Anwendung 480 einen Systemaufruf des Betriebssystems 495 mit einem Grafikbeschleunigungsmodul 446, einem Arbeitsdeskriptor (WD), einem Autoritätsmaskenregisterwert (AMR) und einem Kontextsicherungs-/Wiederherstellungsbereich-Zeiger ausführen (CSRP-Zeiger) ausführen muss. Der Typ des Grafikbeschleunigungsmoduls 446 beschreibt die angestrebte Beschleunigungsfunktion für den Systemaufruf. Der Typ des Grafikbeschleunigungsmoduls 446 kann ein systemspezifischer Wert sein. Der WD ist speziell für das Grafikbeschleunigungsmodul 446 formatiert und kann in der Form eines Befehls des Grafikbeschleunigungsmoduls 446, eines effektiven Adresszeigers auf eine benutzerdefinierte Struktur, eines effektiven Adresszeigers auf eine Befehlswarteschlange oder anderer Datenstruktur vorliegen, um die von dem Grafikbeschleunigungsmodul 446 zu erledigende Arbeit zu beschreiben. Bei einer Ausführungsform ist der AMR-Wert der AMR-Zustand, der für den aktuellen Prozess zu verwenden ist. Der an das Betriebssystem übergebene Wert ähnelt einer Anwendung, die den AMR festlegt. Wenn die Implementierungen der Beschleunigerintegrationsschaltung 436 und des Grafikbeschleunigungsmoduls 446 kein User Authority Mask Override Register (UAMOR) unterstützen, kann das Betriebssystem den aktuellen UAMOR-Wert auf den AMR-Wert anwenden, bevor der AMR im Hypervisor-Aufruf übergeben wird. Der Hypervisor 496 kann optional den aktuellen Wert des Authority Mask Override Registers (AMOR) anwenden, bevor der AMR in das Prozesselement 483 platziert wird. Das CSRP kann eines der Register 445 sein, das die effektive Adresse eines Bereichs im Adressraum 482 der Anwendung enthält, damit das Grafikbeschleunigungsmodul 446 den Kontextzustand speichert und wiederherstellt. Dieser Zeiger ist optional, wenn kein Status zwischen Jobs gespeichert werden muss, oder wenn ein Job vorweggenommen wird. Der Kontextsicherungs-/Wiederherstellungsbereich kann ein gepinnter Systemspeicher sein.
  • Beim Empfang des Systemaufrufs kann das Betriebssystem 495 verifizieren, dass die Anwendung 480 registriert wurde und die Berechtigung erhalten hat, das Grafikbeschleunigungsmodul 446 zu verwenden. Das Betriebssystem 495 ruft dann den Hypervisor 496 mit den in Tabelle 3 gezeigten Informationen auf. Tabelle 3 - Aufrufparameter vom Betriebssystem zu Hypervisor
    1 Ein Arbeitsdeskriptor (WD)
    2 Ein Wert des Autoritätsmaskenregisters (AMR) (potenziell maskiert).
    3 Eine effektive Adresse (EA) Context Save/Restore Area Pointer (CSRP-Pointer) für eine effektive Adresse
    4 Eine Prozess-ID (PID) und eine optionale Thread-ID (TID)
    5 Ein Beschleunigernutzungsdatenaufzeichnungszeiger (AURP) für virtuelle Adressen (VA)
    6 Die virtuelle Adresse des Speichersegmenttabellenzeigers (SSTP)
    7 Eine logische Interrupt-Service-Nummer (LISN)
  • Beim Empfang des Hypervisor-Aufrufs verifiziert der Hypervisor 496, dass das Betriebssystem 495 registriert wurde und die Berechtigung erhalten hat, das Grafikbeschleunigungsmodul 446 zu verwenden. Der Hypervisor 496 gibt dann das Prozesselement 483 in die Prozesselement-Linked-List für den entsprechenden Typ des Grafikbeschleunigungsmoduls 446. Das Prozesselement kann die Informationen enthalten, die in Tabelle 4 gezeigt sind. Tabelle 4 - Informationen zu Prozesselementen
    1 Eine Arbeitsdeskriptor (WD)
    2 Ein Wert des Autoritätsmaskenregisters (AMR) (potenziell maskiert).
    3 Ein Context Save/Restore Area Pointer (CSRP-Pointer) für effektive Adresse (EA)
    4 Eine Prozess-ID (PID) und eine optionale Thread-ID (TID)
    5 Ein Beschleunigernutzungsdatensatzzeiger (AURP) für virtuelle Adressen (VA)
    6 Die virtuelle Adresse des Speichersegmenttabellenzeigers (SSTP)
    7 Eine logische Interrupt-Service-Nummer (LISN)
    8 Interrupt-Vektortabelle, abgeleitet von den Hypervisor-Aufrufparametern.
    9 Ein Zustandsregisterwert (SR-Wert)
    10 Eine logische Partitions-ID (LPID)
    11 Ein Zeiger für Real Address (RA) Hypervisor Accelerator-Nutzungsdatensatz
    12 Das Speicherdeskriptorregister (SDR)
  • Der Hypervisor kann eine Vielzahl von Beschleunigerintegrations-Slice 490-Registern 445 initialisieren.
  • Wie in 4F abgebildet, wird bei einer optionalen Implementierung ein vereinheitlichter Speicher verwendet, der über einen gemeinsamen virtuellen Speicheradressraum adressierbar ist, der verwendet wird, um auf die physischen Prozessorspeicher 401-402 und die GPU-Speicher 420 bis 423 zuzugreifen. Bei dieser Implementierung verwenden Operationen, die auf den GPUs 410 bis 413 ausgeführt werden, denselben virtuellen/effektiven Speicheradressraum, um auf die Prozessorspeicher 401-402 zuzugreifen und umgekehrt, wodurch die Programmierbarkeit vereinfacht wird. Ein erster Teil des virtuellen/effektiven Adressraums kann dem Prozessorspeicher 401 zugeordnet werden, ein zweiter Teil dem zweiten Prozessorspeicher 402, ein dritter Teil dem GPU-Speicher 420 und so weiter. Der gesamte virtuelle/effektive Speicherraum (manchmal als effektiver Adressraum bezeichnet) kann dadurch auf jeden der Prozessorspeicher 401-402 und GPU-Speicher 420 bis 423 verteilt werden, was es jedem Prozessor oder jeder GPU erlaubt, auf jeden physischen Speicher mit einer virtuellen Adresse, die zu diesem Speicher abgebildet ist, zuzugreifen.
  • Eine Bias/Kohärenz-Verwaltungsschaltung 494A bis 494E innerhalb einer oder mehrerer der MMUs 439A bis 439E kann bereitgestellt werden, die die Cache-Kohärenz zwischen den Caches der Host-Prozessoren (zum Beispiel 405) und den GPUs 410 bis 413 sicherstellt und Bias-Techniken implementiert, die die physischen Speicher, in denen bestimmte Arten von Daten gespeichert werden sollen, angibt. Während mehrere Instanzen der Bias-/Kohärenz-Verwaltungsschaltung 494A bis 494E in 4F veranschaulicht sind, kann die Bias-/Kohärenz-Schaltung innerhalb der MMU eines oder mehrerer Host-Prozessoren 405 und/oder innerhalb der Beschleuniger-Integrationsschaltung 436 implementiert sein.
  • Der an die GPU angeschlossene Speicher 420 bis 423 kann als Teil des Systemspeichers abgebildet werden und unter Verwenden von Shared Virtual Memory-Technologie (SVM-Technologie) darauf zugegriffen werden, ohne jedoch die typischen Leistungsnachteile zu erleiden, die mit der vollständigen System-Cache-Kohärenz assoziiert sind. Die Fähigkeit, auf den an die GPU angeschlossenen Speicher 420 bis 423 als Systemspeicher ohne beschwerlichen Cache-Kohärenz-Overhead zuzugreifen, stellt eine vorteilhafte Betriebsumgebung für die GPU-Auslagerung bereit. Diese Anordnung ermöglicht es der Software des Host-Prozessors 405, Operanden ohne den Overhead herkömmlicher E/A-DMA-Datenkopien einzurichten und auf Berechnungsergebnisse zuzugreifen. Derartige herkömmliche Kopien beinhalten Treiberaufrufe, Interrupts und speicherabgebildete E/A-Zugriffe (MMIO-Zugriffe), die alle im Vergleich zu einfachen Speicherzugriffen ineffizient sind. Gleichzeitig kann die Fähigkeit, ohne Cache-Kohärenz-Overheads auf den an die GPU angeschlossenen Speicher 420 bis 423 zuzugreifen, für die Ausführungszeit einer ausgelagerten Berechnung kritisch sein. In Fällen mit erheblichem Streaming-Schreibspeicherverkehr kann der Cache-Kohärenz-Overhead zum Beispiel die effektive Schreibbandbreite, die von einer GPU 410 bis 413 gesehen wird, erheblich reduzieren. Die Effizienz der Operandeneinrichtung, die Effizienz des Ergebniszugriffs und die Effizienz der GPU-Berechnung spielen alle eine Rolle bei der Bestimmung der Effektivität des GPU-Offload.
  • Eine Auswahl zwischen GPU-Bias und Host-Prozessor-Bias kann durch eine Bias-Tracker-Datenstruktur gesteuert werden. Es kann zum Beispiel eine Bias-Tabelle verwendet werden, die eine seitengranulare Struktur sein kann (das heißt die von der Granularität einer Speicherseite gesteuert wird), die 1 oder 2 Bits pro an die GPU angeschlossener Speicherseite beinhaltet. Die Bias-Tabelle kann in einem gestohlenen Speicherbereich von einem oder mehreren an die GPU angeschlossenen Speichern 420 bis 423 mit oder ohne Bias-Cache in der GPU 410 bis 413 implementiert werden (zum Beispiel um häufig/zuletzt verwendete Einträge der Bias-Tabelle zwischenzuspeichern). Alternativ kann die gesamte Bias-Tabelle innerhalb der GPU verwaltet werden.
  • Bei einer Implementierung wird auf den Bias-Tabelleneintrag, der mit jedem Zugriff auf den an die GPU angeschlossenen Speicher 420-423 assoziiert ist, vor dem tatsächlichen Zugriff auf den GPU-Speicher zugegriffen, was die folgenden Operationen verursacht. Zuerst werden lokale Anfragen von der GPU 410 bis 413, die ihre Seite im GPU-Bias finden, direkt an einen entsprechenden GPU-Speicher 420 bis 423 weitergeleitet. Lokale Anforderungen von der GPU, die ihre Seite in Host-Bias finden, werden an den Prozessor 405 weitergeleitet (zum Beispiel über eine Hochgeschwindigkeitsverbindung, wie oben erörtert). Optional vervollständigen Anforderungen von dem Prozessor 405, die die angeforderte Seite im Host-Prozessor-Bias finden, die Anforderung wie ein normales Lesen des Speichers. Alternativ können Anfragen, die an eine GPU-beeinflusste Seite gerichtet sind, an die GPU 410-413 weitergeleitet werden. Die GPU kann dann die Seite auf einen Host-Prozessor-Bias umstellen, wenn sie die Seite derzeit nicht verwendet.
  • Der Bias-Zustand einer Seite kann entweder durch einen softwarebasierten Mechanismus, einen hardwareunterstützten softwarebasierten Mechanismus oder, für eine begrenzte Anzahl von Fällen durch einen rein hardwarebasierten Mechanismus geändert werden.
  • Ein Mechanismus zum Ändern des Bias-Zustands verwendet einen API-Aufruf (zum Beispiel OpenCL), der wiederum den Gerätetreiber der GPU aufruft, der wiederum eine Meldung (oder einen Befehlsdeskriptor) an die GPU sendet und diese anweist, den Bias-Zustand zu ändern und, für einige Übergängen, in dem Host eine Cache-Flush-Operation auszuführen. Die Cache-Flush-Operation ist für einen Übergang von dem Bias des Host-Prozessors 405 zu dem GPU-Bias erforderlich, ist jedoch für den entgegengesetzten Übergang nicht erforderlich.
  • Cache-Kohärenz kann aufrechterhalten werden, indem beeinflusste Seiten durch den Host-Prozessor 405 vorübergehend nicht zwischenspeicherbar gemacht werden. Um auf diese Seiten zuzugreifen, kann der Prozessor 405 Zugriff von der GPU 410 anfordern, die je nach Implementierung den Zugriff eventuell sofort gewährt oder nicht. Um die Kommunikation zwischen dem Host-Prozessor 405 und der GPU 410 zu reduzieren, ist es daher von Vorteil sicherzustellen, dass beeinflusste Seiten diejenigen sind, die von der GPU benötigt werden, aber nicht von dem Host-Prozessor 405 und umgekehrt.
  • Grafikverarbeitungspipeline
  • 5 veranschaulicht eine Grafikverarbeitungspipeline 500. Ein Grafik-Multiprozessor, wie beispielsweise der Grafik-Multiprozessor 234 wie in 2D, Grafik-Multiprozessor 325 der 3A, Grafik-Multiprozessor 350 der 3B kann die veranschaulichte Grafikverarbeitungspipeline 500 implementieren. Der Grafik-Multiprozessor kann in den hier beschriebenen Parallelverarbeitungs-Subsystemen enthalten sein, wie beispielsweise der parallele Prozessor 200 der 2A, der mit dem/den parallelen Prozessor(en) 112 der 1 zusammenhängen kann und an Stelle eines dieser verwendet werden kann. Die verschiedenen Parallelverarbeitungssysteme können die Grafikverarbeitungspipeline 500 über eine oder mehrere Instanzen der Parallelverarbeitungseinheit (zum Beispiel parallele Verarbeitungseinheit 202 der 2A) wie hierin beschrieben umsetzen. Zum Beispiel kann eine Shader-Einheit (zum Beispiel der Grafik-Multiprozessor 234 der 2C) dazu konfiguriert sein, die Funktionen einer oder mehrerer einer Eckpunkt-Verarbeitungseinheit 504, einer Tessellationssteuerverarbeitungseinheit 508, einer Tessellationsbewertungsverarbeitungseinheit 512, einer Geometrieverarbeitungseinheit 516 und einer Fragment-/Pixelverarbeitungseinheit 524 auszuführen. Die Funktionen des Datenassemblers 502, der Grundelemente-Assembler 506, 514, 518, der Tessellationseinheit 510, des Rasterizers 522 und der Rasteroperationseinheit 526 können auch von anderen Verarbeitungsmaschinen innerhalb eines Verarbeitungsclusters (zum Beispiel dem Verarbeitungscluster 214 der 2A) und einer entsprechenden Partitionseinheit (zum Beispiel in der Partitionseinheit 220A bis 220N der 2a) ausgeführt werden. Die Grafikverarbeitungspipeline 500 kann auch unter Verwenden dedizierter Verarbeitungseinheiten für eine oder mehrere Funktionen implementiert werden. Es ist auch möglich, dass ein oder mehrere Abschnitte der Grafikverarbeitungspipeline 500 von paralleler Verarbeitungslogik innerhalb eines Universalprozessors (zum Beispiel CPU) ausgeführt werden. Optional können ein oder mehrere Abschnitte der Grafikverarbeitungspipeline 500 auf einen chipinternen Speicher (zum Beispiel auf den parallelen Prozessorspeicher 222, wie in 2A) über eine Speicherschnittstelle 528, die eine Instanz der Speicherschnittstelle 218 der 2 sein kann, zugreifen. Die Grafikprozessorpipeline 500 kann auch über eine Multi-Core-Gruppe 365A wie in 3C implementiert werden.
  • Der Datenassembler 502 ist eine Verarbeitungseinheit, die Eckpunktdaten für Oberflächen und Grundelemente sammeln kann. Der Datenassembler 502 gibt dann die Eckpunktdaten, einschließlich der Eckpunktattribute, an die Eckpunktverarbeitungseinheit 504 aus. Die Eckpunktverarbeitungseinheit 504 ist eine programmierbare Ausführungseinheit, die Vertex-Shader-Programme, Ausleuchtungs- und Umwandlungs-Eckpunktdaten, wie von den Vertex-Shader-Programmen spezifiziert, ausführt. Die Eckpunktverarbeitungseinheit 504 liest Daten, die im Cache, lokalen oder Systemspeicher gespeichert sind, zur Verwendung bei der Verarbeitung der Eckpunktdaten und kann programmiert sein, um die Eckpunktdaten von einer objektbasierten Koordinatendarstellung in einen Weltraum-Koordinatenraum oder einem normalisierten Vorrichtungskoordinatenraum umzuwandeln.
  • Eine erste Instanz eines Grundelement-Assemblers 506 empfängt Eckpunktattribute von der Eckpunktverarbeitungseinheit 504. Der Grundelement-Assembler 506 liest gespeicherte Eckpunktattribute nach Bedarf und konstruiert grafische Grundelemente zur Verarbeitung durch die Tessellationssteuerverarbeitungseinheit 508. Die Grafikgrundelemente beinhalten Dreiecke, Liniensegmente, Punkte, Patches und so fort, wie von verschiedenen Grafikverarbeitungs-Anwendungsprogrammierschnittstellen (APIs) unterstützt.
  • Die Tessellationssteuerverarbeitungseinheit 508 behandelt die eingegebenen Eckpunkte als Kontrollpunkte für ein geometrisches Patch. Die Kontrollpunkte werden von einer Eingabedarstellung von dem Patch (zum Beispiel den Basen des Patches) in eine Darstellung, die zur Verwendung bei der Oberflächenbewertung durch die Tessellationsbewertungsverarbeitungseinheit 512 geeignet ist, umgewandelt. Die Tessellationssteuerverarbeitungseinheit 508 kann auch Tessellationsfaktoren für Kanten geometrischer Patches berechnen. Ein Tessellationsfaktor gilt für eine einzelne Kante und quantifiziert einen ansichtsabhängigen Detaillierungsgrad, der mit der Kante assoziiert ist. Eine Tessellationseinheit 510 ist dazu konfiguriert, die Tessellationsfaktoren für Kanten eines Patches zu empfangen und den Patch in mehrere geometrische Grundelemente, wie etwa Linien-, Dreieck- oder Viereckgrundelemente, zu tessellieren, die an eine Tessellationsbewertungsverarbeitungseinheit 512 übertragen werden. Die Tessellationsbewertungsverarbeitungseinheit 512 arbeitet mit parametrisierten Koordinaten des unterteilten Patches, um eine Oberflächendarstellung und Eckpunktattribute für jeden Eckpunkt, der den geometrischen Grundelementen zugeordnet ist, zu erzeugen.
  • Eine zweite Instanz eines Grundelement-Assemblers 514 empfängt Eckpunktattribute von der Tessellationsbewertungsverarbeitungseinheit 512, liest gespeicherte Eckpunktattribute nach Bedarf und konstruiert grafische Grundelemente zur Verarbeitung durch die Geometrieverarbeitungseinheit 516. Die Geometrieverarbeitungseinheit 516 ist eine programmierbare Ausführungseinheit, die Geometrie-Shader-Programme ausführt, um von dem Grundelement-Assembler 514 empfangene Grafikgrundelemente, wie von den Geometrie-Shader-Programmen spezifiziert, umzuwandeln. Die Geometrieverarbeitungseinheit 516 kann dazu programmiert sein, die Grafikgrundelemente in ein oder mehrere neue Grafikgrundelemente zu unterteilen und Parameter zu berechnen, die zum Rastern der neuen Grafikgrundelemente verwendet werden.
  • Die Geometrieverarbeitungseinheit 516 kann in der Lage sein, Elemente im Geometriestrom hinzuzufügen oder zu löschen. Die Geometrieverarbeitungseinheit 516 gibt die Parameter und Eckpunkte, die neue Grafikprimitive spezifizieren, an den Grundelement-Assembler 518 aus. Der Grundelement-Assembler 518 empfängt die Parameter und Eckpunkte von der Geometrieverarbeitungseinheit 516 und konstruiert grafische Grundelemente zur Verarbeitung durch eine Ansichtsfenstermaßstab-, Auslese- und Ausschneideeinheit 520. Die Geometrieverarbeitungseinheit 516 liest Daten, die in dem parallelen Prozessorspeicher oder Systemspeicher zur Verwendung bei der Verarbeitung der Geometriedaten gespeichert sind. Die Ansichtsfensterskalierung-, Cull- und Clip-Einheit 520 führt Clipping, Culling und Ansichtsfensterskalierung aus und gibt verarbeitete Grafikgrundelemente an einen Rasterizer 522 aus.
  • Der Rasterizer 522 kann Tiefen-Culling und andere tiefenbasierte Optimierungen ausführen. Der Rasterizer 522 führt auch eine Scankonvertierung an den neuen Grafikprimitiven aus, um Fragmente zu erzeugen und diese Fragmente und die damit assoziierten Abdeckungsdaten an die Fragment-/Pixel-Verarbeitungseinheit 524 auszugeben. Die Fragment-/Pixel-Verarbeitungseinheit 524 ist eine programmierbare Ausführungseinheit, die konfiguriert ist, um Fragment-Shader-Programme oder Pixel-Shader-Programme auszuführen. Die Fragment-/Pixel-Verarbeitungseinheit 524 wandelt Fragmente oder Pixel, die vom Rasterizer 522 empfangen werden, wie durch die Fragment- oder Pixel-Shader-Programme spezifiziert, um. Zum Beispiel kann die Fragment-/Pixel-Verarbeitungseinheit 524 programmiert sein, um Operationen auszuführen, die Texturabbildung, Schattierung, Mischung, Texturkorrektur und Perspektivenkorrektur beinhalten, aber nicht darauf beschränkt sind, um schattierte Fragmente oder Pixel zu erzeugen, die an eine Rasteroperationseinheit 526 ausgegeben werden. Die Fragment-/Pixel-Verarbeitungseinheit 524 kann Daten lesen, die entweder im parallelen Prozessorspeicher oder im Systemspeicher zur Verwendung beim Verarbeiten der Fragmentdaten gespeichert sind. Fragment- oder Pixel-Shader-Programme können derart konfiguriert sein, dass sie in Abhängigkeit von der für die Verarbeitungseinheiten konfigurierten Samplingrate bei Sampling-, Pixel-, Tile- oder anderen Granularitäten schattieren.
  • Die Rasteroperationseinheit 526 ist eine Verarbeitungseinheit, die Rasteroperationen ausführt, einschließlich, aber nicht beschränkt auf Schablone, Z-Test, Blending und dergleichen, und Pixeldaten als verarbeitete Grafikdaten ausgibt, die im Grafikspeicher (zum Beispiel parallelen Prozessor 222, wie in 2A, und/oder Systemspeicher 104, wie in 1) gespeichert werden sollen, um auf der einen oder mehreren Anzeigevorrichtungen 110 angezeigt zu werden oder zur weiteren Verarbeitung durch einen der einen oder mehreren Prozessor(en) 102 oder parallele Prozessor(en) 112. Die Rasteroperationseinheit 526 kann konfiguriert sein, um z- oder Farbdaten, die in den Speicher geschrieben werden, zu komprimieren und z- oder Farbdaten, die aus dem Speicher gelesen werden, zu dekomprimieren.
  • Übersicht über maschinelles Lernen
  • Die oben beschriebene Architektur kann angewandt werden, um Trainings- und Inferenzoperationen unter Verwenden von Modellen für maschinelles Lernen auszuführen. Maschinelles Lernen ist bei der Lösung vieler Arten von Aufgaben erfolgreich. Die Berechnungen, die beim Trainieren und Verwenden von Algorithmen des maschinellen Lernens (zum Beispiel neuronale Netzwerke) anfallen, eignen sich natürlich für effiziente parallele Implementierungen. Dementsprechend haben parallele Prozessoren, wie Allzweck-Grafikprozessoren (GPGPUs) eine bedeutende Rolle bei der praktischen Implementierung tiefer neuronaler Netzwerke gespielt. Parallele Grafikprozessoren mit SIMT-Architekturen (Single Instruction, Multiple Thread) sind darauf ausgelegt, die Menge der parallelen Verarbeitung in der Grafikpipeline zu maximieren. In einer SIMT-Architektur versuchen Gruppen paralleler Threads, Programmanweisungen so oft wie möglich synchron gemeinsam auszuführen, um die Verarbeitungseffizienz zu erhöhen. Die Effizienz, die durch parallele Algorithmenimplementierungen für maschinelles Lernen bereitgestellt wird, ermöglicht die Verwendung von Netzwerken mit hoher Kapazität und ermöglicht das Trainieren dieser Netzwerke mit größeren Datensätzen.
  • Ein Algorithmus für maschinelles Lernen ist ein Algorithmus, der basierend auf einer Reihe von Daten lernen kann. Beispielsweise können Algorithmen für maschinelles Lernen entworfen werden, um Abstraktionen auf hohem Niveau innerhalb eines Datensatzes zu modellieren. Beispielsweise können Bilderkennungsalgorithmen verwendet werden, um zu bestimmen, zu welcher von mehreren Kategorien eine gegebene Eingabe gehört; Regressionsalgorithmen können bei einer Eingabe einen numerischen Wert ausgeben; und Mustererkennungsalgorithmen können verwendet werden, um übersetzten Text zu erzeugen oder Text-in-Sprache- und/oder Spracherkennung auszuführen.
  • Ein beispielhafter Typ eines Algorithmus für maschinelles Lernen ist ein neuronales Netzwerk. Es gibt viele Arten neuronaler Netzwerke. Ein einfacher Typ eines neuronalen Netzwerks ist ein Feedforward-Netz. Ein Feedforward-Netzwerk kann als azyklischer Graph implementiert sein, in dem die Knoten in Schichten angeordnet sind. Typischerweise beinhaltet eine Feedforward-Netzwerktopologie eine Eingabeschicht und eine Ausgabeschicht, die von mindestens einer verdeckten Schicht getrennt sind. Die verdeckte Schicht wandelt die von der Eingabeschicht empfangene Eingabe in eine Darstellung um, die zum Generieren von Ausgaben in der Ausgabeschicht nützlich ist. Die Netzwerkknoten sind über Kanten vollständig mit den Knoten in angrenzenden Schichten verbunden, aber es gibt keine Kanten zwischen den Knoten innerhalb jeder Schicht. Daten, die an den Knoten einer Eingabeschicht eines Feedforward-Netzwerks empfangen werden, werden über eine Aktivierungsfunktion verbreitet, die die Zustände der Knoten jeder nachfolgenden Schicht im Netzwerk basierend auf Koeffizienten („Gewichten“), die jeweils mit jeder der Kanten assoziiert sind, die die Schichten verbinden, berechnet. Abhängig von dem spezifischen Modell, das von dem ausgeführten Algorithmus repräsentiert wird, kann die Ausgabe des neuronalen Netzalgorithmus verschiedene Formen annehmen.
  • Bevor ein Algorithmus für maschinelles 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 Problem darstellen, das von dem Netzwerk modelliert wird, und das Anpassen der Gewichtungen, bis das Netzwerkmodell mit einem minimalen Fehler für alle Instanzen des Trainingsdatensatzes arbeitet. Beispielsweise wird während eines überwachten Lernprozesses für ein neuronales Netzwerk die Ausgabe, die von dem Netzwerk als Reaktion auf die Eingabe, die eine Instanz in einem Trainingsdatensatz darstellt, erzeugt wird, mit der „richtigen“ gekennzeichneten Ausgabe für diese Instanz verglichen, ein Fehlersignal, das die Differenz zwischen der Ausgabe und der gekennzeichneten Ausgabe darstellt, wird berechnet, und die mit den Verbindungen assoziierten Gewichtungen werden angepasst, um diesen Fehler zu minimieren, wenn sich das Fehlersignal rückwärts durch die Schichten des Netzwerks ausbreitet. Das Netzwerk gilt als „trainiert“, wenn die Fehler für jede der Ausgaben, die aus den Instanzen des Trainingsdatensatzes erzeugt werden, minimiert sind.
  • Die Präzision eines Algorithmus für maschinelles Lernen kann erheblich von der Qualität des Datensatzes beeinflusst werden, der zum Trainieren des Algorithmus verwendet wird. Der Trainingsprozess kann rechenintensiv sein und kann bei einem herkömmlichen Allzweckprozessor eine beträchtliche Zeitdauer erfordern. Dementsprechend wird Parallelverarbeitungshardware verwendet, um viele Arten von Algorithmen für maschinelles Lernen zu trainieren. Dies ist besonders nützlich, um das Training neuronaler Netze zu optimieren, da sich die beim Anpassen der Koeffizienten in neuronalen Netzwerken ausgeführten Berechnungen natürlich für parallele Implementierungen eignen. Insbesondere wurden viele Algorithmen für maschinelles Lernen und Softwareanwendungen angepasst, um die Parallelverarbeitungshardware in Allzweck-Grafikverarbeitungsvorrichtungen zu nutzen.
  • 6 ist ein verallgemeinertes Schaltbild eines Softwarestapels 600 für maschinelles Lernen. Eine Anwendung für maschinelles Lernen 602 kann konfiguriert sein, um ein neuronales Netzwerk unter Verwenden eines Trainingsdatensatzes zu trainieren oder ein trainiertes tiefes neuronales Netzwerk zu verwenden, um maschinelle Intelligenz zu implementieren. Die Anwendung für maschinelles Lernen 602 kann Trainings- und Inferenzfunktionen für ein neuronales Netzwerk und/oder spezialisierte Software beinhalten, die verwendet werden können, um ein neuronales Netzwerk vor der Bereitstellung zu trainieren. Die Anwendung für maschinelles Lernen 602 kann jede Art maschineller Intelligenz implementieren, einschließlich, aber nicht beschränkt auf Bilderkennung, Abbildung und Lokalisierung, autonome Navigation, Sprachsynthese, medizinische Bildgebung oder Sprachübersetzung.
  • Die Hardwarebeschleunigung für die Anwendung für maschinelles Lernen 602 kann über ein Framework für maschinelles Lernen 604 aktiviert werden. Das Framework für maschinelles Lernen 604 kann eine Bibliothek von Grundelementen für maschinelles Lernen bereitstellen. Grundelemente für maschinelles Lernen sind grundlegende Operationen, die üblicherweise von Algorithmen für maschinelles Lernen ausgeführt werden. Ohne das Framework für maschinelles Lernen 604 müssten Entwickler von Algorithmen für maschinelles Lernen die dem Algorithmus für maschinelles Lernen zugeordnete Hauptrechenlogik erstellen und optimieren und dann die Rechenlogik wieder optimieren, wenn neue parallele Prozessoren entwickelt werden. Stattdessen kann die Anwendung für maschinelles Lernen dazu konfiguriert sein, die erforderlichen Berechnungen unter Verwenden der Grundelemente, die vom Rahmen für maschinelles Lernen 604 bereitgestellt werden, auszuführen. Beispielhafte Grundelemente beinhalten Tensorfaltungen, Aktivierungsfunktionen und Pooling, bei denen es sich um Rechenoperationen handelt, die ausgeführt werden, während ein neuronales Faltungsnetzwerk (CNN) trainiert wird. Das Frame für maschinelles Lernen 604 kann auch Grundelemente bereitstellen, um grundlegende Unterprogramme der linearen Algebra zu implementieren, die von vielen Algorithmen für maschinelles Lernen ausgeführt werden, wie etwa Matrix- und Vektoroperationen.
  • Das Framework für maschinelles Lernen 604 kann von der Anwendung für maschinelles Lernen 602 empfangene Eingabedaten verarbeiten und die entsprechende Eingabe in ein Rechen-Framework 606 generieren. Das Rechen-Framework 606 kann die dem GPGPU-Treiber 608 bereitgestellten zugrunde liegenden Anweisungen abstrahieren, um es dem Framework für maschinelles Lernen 604 zu ermöglichen, die Hardwarebeschleunigung über die GPGPU-Hardware 610 zu nutzen, ohne dass das Framework für maschinelles Lernen 604 genaue Kenntnisse der Architektur der GPGPU-Hardware 610 haben muss. Darüber hinaus kann das Rechen-Framework 606 eine Hardwarebeschleunigung für das Framework für maschinelles Lernen 604 über eine Vielzahl von Typen und Generationen der GPGPU-Hardware 610 ermöglichen.
  • Beschleunigung des maschinellen Lernens durch GPGPU
  • 7 veranschaulicht eine Allzweck-Grafikverarbeitungseinheit 700, die der parallele Prozessor 200 der 2A oder der/die parallele(n) Prozessor (en) 112 der 1 sein kann. Die Mehrzweck-Verarbeitungseinheit (GPGPU) 700 kann derart konfiguriert sein, dass sie beim Verarbeiten der Art von Rechenarbeitslasten, die mit dem Training tiefer neuronaler Netze assoziiert sind, besonders effizient ist. Zusätzlich kann die GPGPU 700 direkt mit anderen Instanzen der GPGPU verbunden werden, um ein Multi-GPU-Cluster zu erstellen, um die Trainingsgeschwindigkeit für besonders tiefe neuronale Netzwerke zu verbessern.
  • Die GPGPU 700 beinhaltet eine Host-Schnittstelle 702, um eine Verbindung mit einem Host-Prozessor zu ermöglichen. Die Host-Schnittstelle 702 kann eine PCI-Express-Schnittstelle sein. Die Host-Schnittstelle kann jedoch auch eine herstellerspezifische Kommunikationsschnittstelle oder Kommunikationsstruktur sein. Die GPGPU 700 empfängt Befehle vom Host-Prozessor und verwendet einen globalen Scheduler 704, um mit diesen Befehlen assoziierte Ausführungs-Threads an einen Satz von Verarbeitungsclustern 706A bis 706H zu verteilen. Die Verarbeitungscluster 706A bis 706H nutzen einen Cache-Speicher 708 gemeinsam. Der Cache-Speicher 708 kann als Cache höheren Niveaus für Cache-Speicher innerhalb der Verarbeitungscluster 706A bis 706H dienen. Die veranschaulichten Verarbeitungscluster 706A bis 706H können den Verarbeitungsclustern 214A bis 214N wie in 2A entsprechen.
  • Die GPGPU 700 umfasst einen Speicher 714A-714B, der über einen Satz von Speichercontrollern 712A-712B mit den Verarbeitungsclustern 706A bis H gekoppelt ist. Der Speicher 714A-714B kann verschiedene Arten von Speichervorrichtungen beinhalten, einschließlich eines dynamischen Direktzugriffsspeichers (DRAM) oder Grafikspeichers mit wahlfreiem Zugriff, wie beispielsweise eines synchronen Grafikspeichers mit wahlfreiem Zugriff (SGRAM), einschließlich eines Grafikspeichers mit doppelter Datenrate (GDDR). Die Speicher 714A-714B können auch gestapelten 3D-Speicher umfassen, einschließlich, aber nicht beschränkt auf Speicher mit hoher Bandbreite (HBM).
  • Jedes der Verarbeitungscluster 706A bis 706H kann einen Satz von Grafik-Multiprozessoren, wie beispielsweise den Grafik-Multiprozessor 234 der 2D, den Grafik-Multiprozessor 325 der 3A, den Grafik-Multiprozessor 350 der 3B beinhalten oder kann eine Multi-Core-Gruppe 365A bis 365N, wie in 3C beinhalten. Die Grafik-Multiprozessoren des Rechenclusters beinhalten mehrere Typen von Integer- und Gleitkomma-Logikeinheiten, die Rechenoperationen mit einer Reihe von Präzision ausführen können, einschließlich geeignet für Berechnungen für maschinelles Lernen beinhalten. Zum Beispiel kann mindestens eine Teilmenge der Gleitkommaeinheiten in jedem der Verarbeitungscluster 706A bis 706H konfiguriert sein, um 16-Bit- oder 32-Bit-Gleitkommaoperationen auszuführen, während eine andere Teilmenge der Gleitkommaeinheiten konfiguriert ist, um 64-Bit-Gleitkommaoperationen auszuführen.
  • Mehrere Instanzen der GPGPU 700 können für den Betrieb als ein Rechencluster konfiguriert werden. Der vom Rechencluster für die Synchronisation und den Datenaustausch verwendete Kommunikationsmechanismus variiert je nach Ausführungsform. Zum Beispiel kommunizieren die mehreren Instanzen der GPGPU 700 über die Host-Schnittstelle 702. Bei einer Ausführungsform beinhaltet die GPGPU 700 einen E/A-Hub 709, der die GPGPU 700 mit einer GPU-Verbindung 710 koppelt, die eine direkte Verbindung zu anderen Instanzen der GPGPU ermöglicht. Die GPU-Verbindung 710 kann an eine dedizierte GPU-zu-GPU-Brücke gekoppelt sein, die Kommunikation und Synchronisation zwischen mehreren Instanzen der GPGPU 700 ermöglicht. Optional ist die GPU-Verbindung 710 mit einer Hochgeschwindigkeitsverbindung gekoppelt, um Daten an andere GPGPUs oder parallele Prozessoren zu senden und zu empfangen. Die mehreren Instanzen der GPGPU 700 können sich in separaten Datenverarbeitungssystemen befinden und über eine Netzwerkvorrichtung kommunizieren, auf die über die Host-Schnittstelle 702 zugegriffen werden kann. Die GPU-Verbindung 710 kann konfiguriert sein, um eine Verbindung zu einem Host-Prozessor zusätzlich oder als Alternative zur Hostschnittstelle 702 zu ermöglichen.
  • Während die veranschaulichte Konfiguration der GPGPU 700 konfiguriert werden kann, um neuronale Netzwerke zu trainieren, kann eine alternative Konfiguration der GPGPU 700 für den Einsatz in einer Hochleistungs- oder Niedrigenergie-Inferenzplattform konfiguriert werden. Bei einer Inferenzkonfiguration umfasst die GPGPU 700 weniger der Verarbeitungscluster 706A bis 706H relativ zu der Trainingskonfiguration. Außerdem kann sich die mit dem Speicher 714A-714B assoziierte Speichertechnologie zwischen Inferenz- und Trainingskonfigurationen unterscheiden. Bei einer Ausführungsform kann die Inferenzkonfiguration der GPGPU 700 die Inferenz spezifischer Anweisungen unterstützen. Zum Beispiel kann eine Inferenzkonfiguration Unterstützung für eine oder mehrere 8-Bit-Integer-Skalarproduktanweisungen bereitstellen, die üblicherweise bei Inferenzoperationen für eingesetzte neuronale Netzwerke verwendet werden.
  • 8 veranschaulicht ein Multi-GPU-Rechensystem 800. Das Multi-GPU-Rechensystem 800 kann einen Prozessor 802 beinhalten, der über einen Host-Schnittstellenschalter 804 an mehrere GPGPUs 806A-806D gekoppelt ist. Der Host-Schnittstellenschalter 804 kann eine PCI-Express-Schaltervorrichtung sein, die den Prozessor 802 mit einem PCI-Express-Bus koppelt, über den der Prozessor 802 mit dem Satz von GPGPUs 806A bis 806D kommunizieren kann. Jede der mehreren GPGPUs 806A bis 806D kann eine Instanz der GPGPU 700 der 7 sein. Die GPGPUs 806A bis 806D können über eine Reihe von Hochgeschwindigkeits-Punkt-zu-Punkt-Verbindungen 816 miteinander verbunden werden. Die Hochgeschwindigkeits-GPU-zu-GPU-Verbindungen können mit jeder der GPGPUs 806A bis 806D über eine dedizierte GPU-Verbindung, wie etwa die GPU-Verbindung 710 wie in 7, verbunden werden. Die P2P-GPU-Verbindungen 816 ermöglichen direkte Kommunikation zwischen jeder der GPGPUs 806A bis 806D, ohne eine Kommunikation über den Host-Schnittstellenbus, mit dem der Prozessor 802 verbunden ist, verbunden ist. Mit GPU-zu-GPU-Verkehr, der an die P2P-Verbindungen gerichtet ist, bleibt der Host-Schnittstellenbus zum Systemspeicherzugriff oder zur Kommunikation mit anderen Instanzen des Multi-GPU-Rechensystems 800 beispielsweise über eine oder mehrere Netzwerkvorrichtungen verfügbar. Während in 8 die GPGPUs 806A bis 806D mit dem Prozessor 802 über den Host-Schnittstellenschalter 804 verbunden sind, kann der Prozessor 802 alternativ eine direkte Unterstützung für die P2P-GPU-Verbindungen 816 beinhalten und direkt mit den GPGPUs 806A bis 806D verbunden sein.
  • Implementierungen neuronaler Netzwerke für maschinelles Lernen
  • Die hierin beschriebene Rechenarchitektur kann konfiguriert sein, um die Arten von paralleler Verarbeitung auszuführen, die besonders zum Trainieren und Bereitstellen neuronaler Netzwerke für maschinelles Lernen geeignet sind. Ein neuronales Netzwerk kann als ein Netzwerk von Funktionen mit einer Graphbeziehung verallgemeinert werden. Wie in der Technik bekannt ist, gibt es eine Vielzahl von Typen neuronaler Netzwerkimplementierungen, die beim maschinellen Lernen verwendet werden. Ein beispielhafter Typ eines neuronalen Netzwerks ist das Feedforward-Netzwerk, wie zuvor beschrieben.
  • Ein zweiter beispielhafter Typ eines neuronalen Netzwerks ist das Convolutional Neural Network (CNN). Ein CNN ist ein spezialisiertes neuronales Feedforward-Netzwerk zum Verarbeiten von Daten mit einer bekannten, gitterartigen Topologie, wie beispielsweise Bilddaten. Dementsprechend werden CNNs üblicherweise für Computervisions- und Bilderkennungsanwendungen verwendet, sie können aber auch für andere Arten von Mustererkennung, wie etwa Sprach- und Sprachverarbeitung, verwendet werden. Die Knoten in der CNN-Eingangsschicht sind in einem Satz von „Filtern“ organisiert (Merkmaldetektoren, die von den rezeptiven Feldern der Netzhaut inspiriert sind), und die Ausgabe jedes Filtersatzes wird an Knoten in aufeinanderfolgenden Schichten des Netzwerks weitergegeben. Die Berechnungen für ein CNN beinhalten das Anwenden der mathematischen Faltungsoperation auf jedes Filter, um die Ausgabe dieses Filters zu erzeugen. Faltung ist eine spezielle Art mathematischer Operation, die von zwei Funktionen ausgeführt wird, um eine dritte Funktion zu erzeugen, die eine modifizierte Version einer der beiden ursprünglichen Funktionen ist. In der Terminologie des Faltungsnetzwerks kann die erste Funktion der Faltung als Eingabe bezeichnet werden, während die zweite Funktion als Faltungskern bezeichnet werden kann. Die Ausgabe kann als Merkmalsabbildung bezeichnet werden. Beispielsweise kann die Eingabe in eine Faltungsschicht ein mehrdimensionales Daten-Array sein, das die verschiedenen Farbkomponenten eines Eingabebildes definiert. Der Faltungskern kann ein mehrdimensionales Array von Parametern sein, wobei die Parameter dem Trainingsprozess für das neuronale Netzwerk angepasst werden.
  • Rekurrente neuronale Netzwerke (RNNs) sind eine Familie neuronaler Feedforward-Netzwerke, die Feedback-Verbindungen zwischen Schichten beinhalten. RNNs ermöglichen die Modellierung sequenzieller Daten, indem sie Parameterdaten über unterschiedliche Teile des neuronalen Netzwerks gemeinsam nutzen. Die Architektur für ein RNN beinhaltet Zyklen. Die Zyklen stellen den Einfluss eines gegenwärtigen Wertes einer Variablen auf ihren eigenen Wert zu einem zukünftigen Zeitpunkt dar, da zumindest ein Teil der Ausgabedaten des RNN als Feedback für die Verarbeitung nachfolgender Eingaben in einer Sequenz verwendet wird. Dieses Merkmal macht RNNs aufgrund der variablen Beschaffenheit, in der Sprachdaten erstellt werden können, für die Sprachverarbeitung besonders nützlich.
  • Die unten beschriebenen Figuren stellen beispielhafte Feedforward-, CNN- und RNN-Netzwerke dar und beschreiben einen allgemeinen Prozess zum jeweiligen Trainieren und Bereitstellen jeder dieser Arten von Netzwerken. Es versteht sich, dass diese Beschreibungen in Bezug auf jede hier beschriebenen spezifischen Ausführungsform beispielhaft und nicht einschränkend sind, und die veranschaulichten Konzepte allgemein auf tiefe neuronale Netzwerke und Techniken für maschinelles Lernen im Allgemeinen angewandt werden können.
  • Die oben beschriebenen beispielhaften neuronalen Netzwerke können verwendet werden, um Deep Learning auszuführen. Deep Learning ist maschinelles Lernen mit Hilfe tiefer neuronaler Netzwerke. Die beim Deep Learning verwendeten tiefen neuronalen Netze sind künstliche neuronale Netzwerke, die aus mehreren verdeckten Schichten bestehen, im Gegensatz zu flachen neuronalen Netzwerken, die nur eine einzige verdeckte Schicht beinhalten. Tiefere neuronale Netzwerke sind im Allgemeinen rechenintensiver zu trainieren. Die zusätzlichen verdeckten Schichten des Netzwerks ermöglichen jedoch eine mehrstufige Mustererkennung, die zu reduziertem Ausgabefehler im Vergleich zu Techniken des flachen maschinellen Lernens führt.
  • Tiefe neuronale Netzwerke, die beim Deep Learning verwendet werden, umfassen typischerweise ein Front-End-Netzwerk, um eine Merkmalserkennung auszuführen, das mit einem Back-End-Netzwerk gekoppelt ist, das ein mathematisches Modell darstellt, das Operationen (zum Beispiel Objektklassifizierung, Spracherkennung usw.) basierend auf Merkmaldarstellung, die dem Modell bereitgestellt wird, ausführen kann. Deep Learning ermöglicht die Ausführung maschinellem Lernens, ohne dass für das Modell handgefertigtes Merkmal-Engineering ausgeführt werden muss. Stattdessen können tiefe neuronale Netzwerke Merkmale basierend auf statistischer Struktur oder Korrelation innerhalb der Eingabedaten lernen. Die gelernten Merkmale können einem mathematischen Modell bereitgestellt werden, das erkannte Merkmale zu einem Ausgang abbilden kann. Das vom Netzwerk verwendete mathematische Modell ist im Allgemeinen auf die spezifische auszuführende Aufgabe spezialisiert, und unterschiedliche Modelle werden verwendet, um unterschiedliche Aufgaben auszuführen.
  • Sobald das neuronale Netzwerk strukturiert ist, kann ein Lernmodell auf das Netzwerk angewandt werden, um das Netzwerk zu trainieren, um bestimmte Aufgaben auszuführen. Das Lernmodell beschreibt, wie die Gewichte innerhalb des Modells anzupassen sind, um den Ausgabefehler des Netzwerks zu reduzieren. Die Rückwärtsausbreitung von Fehlern ist ein übliches Verfahren, das verwendet wird, um neuronale Netzwerke zu trainieren. Ein Eingabevektor wird dem Netzwerk zur Verarbeitung präsentiert. Die Ausgabe des Netzwerks wird mit der gewünschten Ausgabe unter Verwenden einer Verlustfunktion verglichen und ein Fehlerwert wird für jedes der Neuronen in der Ausgabeschicht berechnet. Die Fehlerwerte werden dann rückwärts propagiert, bis jedes Neuron einen assoziierten Fehlerwert aufweist, der grob seinen Beitrag zur ursprünglichen Ausgabe darstellt. Das Netzwerk kann dann aus diesen Fehlern mit Hilfe eines Algorithmus, wie dem stochastischen Gradientenverfahrenalgorithmus lernen, um die Gewichte des neuronalen Netzwerks zu aktualisieren.
  • Die 9A-9B veranschaulichen ein beispielhaftes neuronales Faltungsnetzwerk. 9A veranschaulicht verschiedene Schichten innerhalb eines CNN. Wie in 9A gezeigt, kann ein beispielhaftes CNN, das zum Modellieren von Bildverarbeitung verwendet wird, eine Eingabe 902 empfangen, die die Rot-, Grün- und Blau-Komponenten (RGB-Komponenten) eines Eingabebilds beschreibt. Die Eingabe 902 kann von mehreren Faltungsschichten (zum Beispiel Faltungsschicht 904, Faltungsschicht 906) verarbeitet werden. Die Ausgabe aus den mehreren Faltungsschichten kann optional von einem Satz vollständig verbundener Schichten 908 verarbeitet werden. Neuronen in einer vollständig verbundenen Schicht weisen volle Verbindungen zu allen Aktivierungen in der vorherigen Schicht, wie zuvor für ein Feedforward-Netzwerk beschrieben, auf. Die Ausgabe aus den vollständig verbundenen Schichten 908 kann verwendet werden, um ein Ausgabeergebnis aus dem Netzwerk zu erzeugen. Die Aktivierungen innerhalb der vollständig verbundenen Schichten 908 können unter Verwendung von Matrixmultiplikation an Stelle von Faltung berechnet werden. Nicht alle CNN-Implementierungen verwenden vollständig verbundene Schichten 908. Beispielsweise kann die Faltungsschicht 906 bei einigen Implementierungen eine Ausgabe für das CNN erzeugen.
  • Die Faltungsschichten sind dünnbesetzt verbunden, was sich von der herkömmlichen neuronalen Netzwerkkonfiguration, die in den vollständig verbundenen Schichten 908 zu finden ist, unterscheidet. Herkömmliche neuronale Netzwerkschichten sind vollständig derart verbunden, dass jede Ausgabeeinheit mit jeder Eingabeeinheit interagiert. Die Faltungsschichten sind jedoch dünnbesetzt verbunden, weil die Ausgabe der Faltung eines Feldes (an Stelle des jeweiligen Zustandswerts jedes der Knoten in dem Feld) wie veranschaulicht in die Knoten der nachfolgenden Schicht eingegeben wird. Die mit den Faltungsschichten assoziierten Kernel führen Faltungsoperationen aus, deren Ausgabe an die nächste Schicht gesandt wird. Die innerhalb der Faltungsschichtenausgeführt ausgeführte Dimensionsreduktion ist ein Aspekt, der es dem CNN ermöglicht, zu skalieren, um große Bilder zu verarbeiten.
  • 9B veranschaulicht beispielhafte Berechnungsstufen innerhalb einer Faltungsschicht eines CNN. Die Eingabe in eine Faltungsschicht 912 eines CNN kann in drei Stufen einer Faltungsschicht 914 verarbeitet werden. Die drei Stufen können eine Faltungsstufe 916, eine Detektorstufe 918 und eine Pooling-Stufe 920 beinhalten. Die Faltungsschicht 914 kann dann Daten an eine nachfolgende Faltungsschicht ausgeben. Die abschließende Faltungsschicht des Netzwerks kann Ausgabemerkmalsabbildungsdaten erzeugen oder Eingaben für eine vollständig verbundene Schicht bereitstellen, um beispielsweise einen Klassifikationswert für die Eingabe in das CNN zu generieren.
  • Die Faltungsstufe 916 führt mehrere Faltungen parallel aus, um einen Satz linearer Aktivierungen zu erzeugen. Die Faltungsstufe 916 kann eine affine Transformation beinhalten, bei der es sich um eine beliebige Transformation handelt, die als lineare Transformation mit zusätzlich einer Translation spezifiziert werden kann. Affine Transformationen umfassen Rotationen, Translationen, Skalierungen und Kombinationen dieser Transformationen. Die Faltungsstufe berechnet die Ausgabe von Funktionen (zum Beispiel Neuronen), die mit bestimmten Bereichen in der Eingabe verbunden sind, die als der dem Neuron zugeordnete lokale Bereich in dem Bereich bestimmt werden können. Die Neuronen berechnen ein Skalarprodukt zwischen den Gewichten der Neuronen und der Region in der lokalen Eingabe, mit der die Neuronen verbunden sind. Die Ausgabe von der Faltungsstufe 916 definiert einen Satz linearer Aktivierungen, die von aufeinanderfolgenden Stufen der Faltungsschicht 914 verarbeitet werden.
  • Die linearen Aktivierungen können von einer Detektorstufe 918 verarbeitet werden. In der Detektorstufe 918 wird jede lineare Aktivierung von einer nichtlinearen Aktivierungsfunktion verarbeitet. Die nichtlineare Aktivierungsfunktion erhöht die nichtlinearen Eigenschaften des Gesamtnetzwerks, ohne die rezeptiven Felder der Faltungsschicht zu beeinflussen. Es können mehrere Typen nichtlinearer Aktivierungsfunktionen verwendet werden. Ein besonderer Typ ist die rektifizierte Lineareinheit (ReLU), die eine Aktivierungsfunktion verwendet, die als f(x) = max(0, x) derart definiert ist, dass die Aktivierung einen Schwellenwert von Null hat.
  • Die Pooling-Stufe 920 verwendet eine Pooling-Funktion, die die Ausgabe der Faltungsschicht 906 mit einer zusammenfassenden Statistik der nahegelegenen Ausgaben ersetzt. Die Pooling-Funktion kann verwendet werden, um eine Verlagerungsinvarianz in das neuronale Netzwerk derart einzuführen, dass kleine Verlagerungen der Eingabe die gepoolten Ausgaben nicht ändern. Invarianz gegenüber der lokalen Verlagerung kann bei Szenarien nützlich sein, bei denen das Vorhandensein eines Merkmals in den Eingabedaten wichtiger ist als die genaue Position des Merkmals. Während der Pooling-Phase 920 können verschiedene Arten von Pooling-Funktionen verwendet werden, einschließlich Max-Pooling, Average-Pooling und L2-Norm-Pooling. Zusätzlich beinhalten einige CNN-Implementierungen keine Pooling-Phase. Stattdessen ersetzen solche Implementierungen eine zusätzliche Faltungsstufe mit einem erhöhten Schritt im Vergleich zu vorherigen Faltungsstufen.
  • Die Ausgabe von der Faltungsschicht 914 kann dann von der nächsten Schicht 922 verarbeitet werden. Die nächste Schicht 922 kann eine zusätzliche Faltungsschicht oder eine der vollständig verbundenen Schichten 908 sein. Beispielsweise kann die erste Faltungsschicht 904 der 9A an die zweite Faltungsschicht 906 ausgeben, während die zweite Faltungsschicht an eine erste Schicht der vollständig verbundenen Schichten 908 ausgeben kann.
  • 10 veranschaulicht ein beispielhaftes rekurrentes neuronales Netzwerk 1000. Bei einem rekurrenten neuronalen Netzwerk (RNN) beeinflusst der vorherige Zustand des Netzwerks die Ausgabe des aktuellen Zustands des Netzwerks. RNNs können in einer Vielfalt von Arten unter Verwenden einer Vielzahl von Funktionen erstellt werden. Bei Verwendung von RNNs geht es im Allgemeinen um das Verwenden mathematischer Modelle, um die Zukunft basierend auf einer vorherigen Folge von Eingaben vorherzusagen. Beispielsweise kann ein RNN verwendet werden, um eine statistische Sprachmodellierung auszuführen, um ein bevorstehendes Wort bei einer gegebenen vorherigen Wortfolge vorherzusagen. Das veranschaulichte RNN 1000 kann als eine Eingabeschicht 1002, die einen Eingabevektor empfängt, verdeckten Schichten 1004 zum Implementieren einer wiederkehrenden Funktion, einen Rückkopplungsmechanismus 1005, um einen „Speicher“ vorheriger Zustände zu ermöglichen, und eine Ausgabeschicht 1006 zum Ausgeben eines Ergebnisses aufweisend beschrieben werden. Das RNN 1000 arbeitet basierend auf Zeitschritten. Der Zustand des RNN zu einem bestimmten Zeitschritt wird basierend auf dem vorherigen Zeitschritt über den Rückkopplungsmechanismus 1005 beeinflusst. Für einen gegebenen Zeitschritt wird der Zustand der verdeckten Schichten 1004 durch den vorherigen Zustand und die Eingabe zum aktuellen Zeitschritt definiert. Eine anfängliche Eingabe (x1) kann in einem ersten Zeitschritt von der verdeckten Schicht 1004 verarbeitet werden. Eine zweite Eingabe(x2) kann von der verdeckten Schicht 1004 unter Verwenden von Zustandsinformationen, die während der Verarbeitung der anfänglichen Eingabe (x1) bestimmt werden, verarbeitet werden. Ein gegebener Zustand kann berechnet werden als st = f(Uxt + Wst-1), wobei U und W Parametermatrizen sind. Die Funktion f ist im Allgemeinen eine Nichtlinearität, wie die hyperbolische Tangensfunktion (Tanh) oder eine Variante der Gleichrichterfunktion f(x) = max(0, x). Die in den verdeckten Schichten 1004 verwendete spezifische mathematische Funktion kann jedoch in Abhängigkeit von den spezifischen Implementierungsdetails des RNN 1000 variieren.
  • Zusätzlich zu den beschriebenen grundlegenden CNN- und Netzwerken können Variationen dieser Netzwerke aktiviert werden. Eine beispielhafte RNN-Variante ist das Long-Short-Term-Memory-RNN (LSTM-RNN. LSTM-RNNs sind in der Lage, langfristige Abhängigkeiten zu lernen, die für die Verarbeitung längerer Sprachsequenzen erforderlich 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 besteht. DBNs können mit unüberwachtem Greedy-Learning Schicht für Schicht trainiert werden. Die gelernten Gewichtungen des DBN können dann verwendet werden, um neuronale Netzwerke vor dem Training bereitzustellen, indem ein optimaler anfänglicher Satz von Gewichtungen für das neuronale Netzwerk bestimmt wird.
  • 11 veranschaulicht das Training und die Bereitstellung eines tiefen neuronalen Netzwerks. Sobald ein gegebenes Netzwerk für eine Aufgabe strukturiert wurde, wird das neuronale Netzwerk unter Verwenden eines Trainingsdatensatzes 1102 trainiert. Es wurden verschiedene Trainings-Frameworks 1104 entwickelt, um eine Hardwarebeschleunigung des Trainingsprozesses zu ermöglichen. Zum Beispiel kann das Framework für maschinelles Lernen 604 der 6 als Trainings-Framework 604 konfiguriert sein. Das Trainings-Framework 604 kann sich in ein untrainiertes neuronales Netzwerk 1106 einklinken und ermöglichen, dass das untrainierte neuronale Netzwerk unter Verwenden der hierin beschriebenen parallelen Verarbeitungsressourcen trainiert wird, um ein trainiertes neuronales Netzwerk 1108 zu erzeugen.
  • Um den Trainingsprozess zu starten, können die anfänglichen Gewichte zufällig oder durch Vortraining unter Verwenden eines Deep-Belief-Netzwerks ausgewählt werden. Der Trainingszyklus wird dann entweder überwacht oder unüberwacht ausgeführt.
  • Überwachtes Lernen ist ein Lernverfahren, bei dem das Training als vermittelte Operation ausgeführt wird, beispielsweise, wenn der Trainingsdatensatz 1102 eine Eingabe beinhaltet, die mit der gewünschten Ausgabe für die Eingabe gepaart ist, oder wenn der Trainingsdatensatz eine Eingabe beinhaltet, die eine bekannte Ausgabe aufweist und die Ausgabe des neuronalen Netzwerk manuell bewertet wird. Das Netzwerk verarbeitet die Eingaben und vergleicht die resultierenden Ausgaben mit einem Satz erwarteter oder gewünschter Ausgaben. Fehler werden dann durch das System zurück verbreitet. Das Trainings-Framework 1104 kann sich anpassen, um die Gewichte anzupassen, die das untrainierte neuronale Netzwerk 1106 steuern. Das Trainings-Framework 1104 kann Werkzeuge bereitstellen, um zu überwachen, wie gut das untrainierte neuronale Netzwerk 1106 zu einem Modell konvergiert, das geeignet ist, basierend auf bekannten Eingabedaten richtige Antworten zu generieren. Der Trainingsprozess tritt wiederholt auf, wenn die Gewichte des Netzwerks angepasst werden, um die von dem neuronalen Netzwerk erzeugte Ausgabe zu verfeinern. Der Trainingsprozess kann fortgesetzt werden, bis das neuronale Netzwerk eine statistisch gewünschte Präzision erreicht, die mit einem trainierten neuronalen Netzwerk 1108 assoziiert ist. Das trainierte neuronale Netzwerk 1108 kann dann eingesetzt werden, um eine beliebige Anzahl maschineller Lernvorgänge zu implementieren, um ein Inferenzergebnis 1114 basierend auf Eingabe neuer Daten 1112 zu generieren.
  • Unüberwachtes Lernen ist eine Lernmethode, bei der das Netzwerk versucht, sich selbst mit nicht gekennzeichneten Daten zu trainieren. Somit beinhaltet der Trainingsdatensatz 1102 für unüberwachtes Lernen Eingabedaten ohne damit assoziierte Ausgabedaten. Das untrainierte neuronale Netzwerk 1106 kann Gruppierungen innerhalb der nicht gekennzeichneten Eingabe lernen und kann bestimmen, wie einzelne Eingaben mit dem Gesamtdatensatz zusammenhängen. Unüberwachtes Training kann verwendet werden, um eine selbstorganisierende Abbildung zu erzeugen, die eine Art trainiertes neuronales Netzwerk 1108 ist, das in der Lage ist, Operationen auszuführen, die beim Reduzieren der Dimensionalität von Daten nützlich sind. Unüberwachtes Training kann auch verwendet werden, um eine Anomalieerfassung auszuführen, die die Identifizierung von Datenpunkten in einem Eingabedatensatz, die von den normalen Mustern der Daten abweichen, erlaubt.
  • Variationen von überwachtem und unüberwachtem Training können ebenfalls verwendet werden. Halbüberwachtes Lernen ist eine Technik, bei der der Trainingsdatensatz 1102 eine Mischung aus gekennzeichneten und nicht gekennzeichneten Daten derselben Verteilung enthält. Inkrementelles Lernen ist eine Variante des überwachten Lernens, bei der kontinuierlich Eingabedaten verwendet werden, um das Modell weiter zu trainieren. Inkrementelles Lernen ermöglicht es dem trainierten neuronalen Netzwerk 1108, sich an die neuen Daten 1112 anzupassen, ohne das während des anfänglichen Trainings in das Netzwerk eingeflößte Wissen zu vergessen.
  • Ob überwacht oder unüberwacht, kann der Trainingsprozess für besonders tiefe neuronale Netzwerke für einen einzelnen Rechenknoten zu rechenintensiv sein. Anstatt einen einzelnen Rechenknoten zu verwenden, kann ein verteiltes Netzwerk von Rechenknoten verwendet werden, um den Trainingsprozess zu beschleunigen.
  • 12 ist ein Blockschaltbild, das verteiltes Lernen veranschaulicht. Verteiltes Lernen ist ein Trainingsmodell, das mehrere verteilte Rechenknoten verwendet, um ein überwachtes oder unüberwachtes Training eines neuronalen Netzwerks auszuführen. Die verteilten Rechenknoten können jeweils einen oder mehrere Host-Prozessoren und einen oder mehrere der Mehrzweck-Verarbeitungsknoten umfassen, wie etwa die hochgradig parallele Mehrzweck-Grafikverarbeitungseinheit 700 wie in 7. Wie veranschaulicht, kann verteiltes Lernen durch Modellparallelität 1202, Datenparallelität 1204 oder eine Kombination aus Modell- und Datenparallelität 1204 ausgeführt werden.
  • Bei der Modellparallelität 1202 können unterschiedliche Rechenknoten in einem verteilten System Trainingsberechnungen für unterschiedliche Teile eines einzelnen Netzwerks ausführen. Beispielsweise kann jede Schicht eines neuronalen Netzwerks von einem anderen Verarbeitungsknoten des verteilten Systems trainiert werden. Zu den Vorteilen der Modellparallelität gehört die Möglichkeit, auf besonders große Modelle zu skalieren. Das Aufteilen der Berechnungen, die mit unterschiedlichen Schichten des neuronalen Netzwerks assoziiert sind, ermöglicht das Training sehr großer neuronaler Netzwerke, in denen die Gewichte aller Schichten nicht in den Speicher eines einzelnen Rechenknotens passen würden. In einigen Fällen kann Modellparallelität besonders nützlich sein, um ein unüberwachtes Training großer neuronaler Netzwerke auszuführen.
  • Bei Datenparallelität 1204 weisen die unterschiedlichen Knoten des verteilten Netzwerks eine vollständige Instanz des Modells auf, und jeder Knoten empfängt einen unterschiedlichen Teil der Daten. Die Ergebnisse der unterschiedlichen Knoten werden dann kombiniert. Während unterschiedliche Ansätze zur Datenparallelität möglich sind, erfordern datenparallele Trainingsansätze alle eine Technik zum Kombinieren von Ergebnissen und zum Synchronisieren der Modellparameter zwischen jedem Knoten. Beispielhafte Ansätze zum Kombinieren von Daten beinhalten Parametermittelung und aktualisierungsbasierte Datenparallelität. Die Parametermittelung trainiert jeden Knoten auf einer Teilmenge der Trainingsdaten und setzt die globalen Parameter (zum Beispiel Gewichtungen, Bias) auf den Durchschnitt der Parameter jedes Knoten. Die Parametermittelung verwendet einen zentralen Parameterserver, der die Parameterdaten führt. Aktualisierungsbasierte Datenparallelität ähnelt der Parametermittelung, außer
    dass an Stelle des Transferierens von Parametern von den Knoten an den Parameterserver die Aktualisierungen des Modells transferiert werden. Zusätzlich kann eine auf Aktualisierungen basierende Datenparallelität auf dezentrale Weiseausgeführt ausgeführt werden, wobei die Aktualisierungen komprimiert und zwischen Knoten transferiert werden.
  • Die kombinierte Modell- und Datenparallelität 1206 kann beispielsweise in einem verteilten System implementiert werden, in dem jeder Rechenknoten mehrere GPUs enthält. Jeder Knoten kann eine vollständige Instanz des Modells aufweisen, wobei separate GPUs innerhalb jedes Knotens verwendet werden, um unterschiedliche Teile des Modells zu trainieren.
  • Verteiltes Training weist einen überhöhten Overhead im Vergleich zum Training an einer einzelnen Maschine auf. Die hierin beschriebenen parallelen Prozessoren und GPGPUs können jedoch jeweils verschiedene Techniken implementieren, um den Overhead des verteilten Trainings zu reduzieren, einschließlich Techniken, um einen Datentransfer mit hoher Bandbreite und eine beschleunigte Datenfernsynchronisation zu ermöglichen.
  • Beispielhafte Anwendungen für maschinelles Lernen
  • Maschinelles Lernen kann angewandt werden, um eine Vielzahl technologischer Probleme zu lösen, einschließlich, aber nicht beschränkt auf Computervision, autonomes Fahren und Navigation, Spracherkennung und Sprachverarbeitung. Computervision war herkömmlich einer der aktivsten Forschungsbereiche für Anwendungen des maschinellen Lernens. Die Anwendungen von Computervision reichen von der Reproduktion menschlicher Sehfähigkeiten, wie etwa dem Erkennen von Gesichtern, bis hin zur Schaffung neuer Kategorien von Sehfähigkeiten. Zum Beispiel können Computervision-Anwendungen derart konfiguriert werden, dass sie Schallwellen aus den Vibrationen erkennen, die in einem Video sichtbaren Objekten induziert werden. Von parallelen Prozessoren beschleunigtes maschinelles Lernen ermöglicht das Trainieren von Computervision-Anwendungen mit einem erheblich größeren Trainingsdatensatz als bisher möglich und ermöglicht die Bereitstellung von Inferenzsystemen unter Verwenden paralleler Prozessoren mit geringem Stromverbrauch.
  • Von parallelen Prozessoren beschleunigtes maschinelles Lernen bietet Anwendungen zum autonomen Fahren, wie Spur- und Verkehrszeichenerkennung, Hindernisvermeidung, Navigation und Fahrsteuerung. Beschleunigte Techniken für maschinelles Lernen können verwendet werden, um Fahrmodelle basierend auf Datensätzen zu trainieren, die die geeigneten Reaktionen auf spezifische Trainingseingaben definieren. Die hierin beschriebenen parallelen Prozessoren können ein schnelles Training der immer komplexer werdenden neuronalen Netzwerke ermöglichen, die für autonome Fahrlösungen verwendet werden, und ermöglichen den Einsatz von Inferenzprozessoren mit geringer Leistung in einer mobilen Plattform, die für die Integration in autonome Fahrzeuge geeignet ist.
  • Parallelprozessorbeschleunigte tiefe neuronale Netzwerke haben Ansätze für maschinelles Lernen zur automatischen Spracherkennung (ASR) ermöglicht. ASR beinhaltet die Schaffung einer Funktion, die die wahrscheinlichste linguistische Sequenz bei gegebener akustischer Eingabefolge berechnet. Beschleunigtes maschinelles Lernen mit tiefen neuronalen Netzen hat es ermöglicht, die bisher für ASR verwendeten Hidden-Markov-Modelle (HMMs) und Gaussian Mixed Models (GMMs) zu ersetzen.
  • Von parallelen Prozessoren beschleunigtes maschinelles Lernen kann auch verwendet werden, um die Verarbeitung natürlicher Sprache zu beschleunigen. Automatische Lernvorgehensweisen können statistische Inferenzalgorithmen nutzen, um Modelle zu erzeugen, die gegenüber fehlerhaften oder ungewohnten Eingaben robust sind. Beispielhafte Prozessoranwendungen für natürliche Sprache beinhalten automatische maschinelle Übersetzung zwischen menschlichen Sprachen.
  • Die für maschinelles Lernen verwendeten Parallelverarbeitungsplattformen können in Trainingsplattformen und Bereitstellungsplattformen unterteilt werden. Trainingsplattformen sind im Allgemeinen hochgradig parallel und beinhalten Optimierungen zur Beschleunigung des Multi-GPU-Einzelknoten-Trainings und des Multi-Knoten-Multi-GPU-Trainings. Beispielhafte parallele Prozessoren, die für das Training geeignet sind, umfassen die Allzweck-Grafikverarbeitungseinheit 700 der 7 und das Multi-GPU-Rechensystem 800 der 8. Im Gegensatz dazu beinhalten eingesetzte Plattformen für maschinelles Lernen im Allgemeinen parallele Prozessoren mit geringerer Leistung, die für den Einsatz in Produkten wie Kameras, autonomen Robotern und autonomen Fahrzeugen geeignet sind.
  • 13 veranschaulicht ein beispielhaftes Inferenzsystem auf einem Chip (SOC) 1300, das zum Ausführen einer Inferenz unter Verwenden eines trainierten Modells geeignet ist. Das SOC 1300 kann Verarbeitungsbauelemente integrieren, einschließlich eines Medienprozessors 1302, eines Bildverarbeitungsprozessors 1304, einer GPGPU 1306 und eines Mehrkernprozessors 1308. Die GPGPU 1306 kann eine GPGPU wie hierin beschrieben sein, wie etwa die GPGPU 700, und der Mehrkernprozessor 1308 kann ein hierin beschriebener Mehrkernprozessor sein, wie etwa die Mehrkernprozessoren 405-406. Das SOC 1300 kann zusätzlich einen On-Chip-Speicher 1305 umfassen, der einen gemeinsam genutzten On-Chip-Datenpool ermöglichen kann, auf den jedes der Verarbeitungsbauelemente zugreifen kann. Die Verarbeitungsbauelemente können für einen Betrieb mit geringem Stromverbrauch optimiert werden, um den Einsatz auf einer Vielzahl von Plattformen für maschinelles Lernen zu ermöglichen, einschließlich autonomer Fahrzeuge und autonomer Roboter. Beispielsweise kann eine Implementierung des SOC 1300 als Teil des Hauptsteuersystems für ein autonomes Fahrzeug verwendet werden. Wenn das SOC 1300 zur Verwendung in autonomen Fahrzeugen konfiguriert ist, ist das SOC für die Einhaltung der relevanten funktionalen Sicherheitsstandards der Einsatzgerichtsbarkeit ausgelegt und konfiguriert.
  • Während des Betriebs können der Medienprozessor 1302 und der Bildverarbeitungsprozessor 1304 zusammenarbeiten, um Computervisionsvorgänge zu beschleunigen. Der Medienprozessor 1302 kann eine Decodierung mit niedriger Latenzzeit mehrerer hochauflösender (zum Beispiel 4K, 8K) Videostreams ermöglichen. Die decodierten Videostreams können in einen Puffer in den On-Chip-Speicher 1305 geschrieben werden. Der Bildprozessor 1304 kann dann das decodierte Video parsen und vorbereitende Verarbeitungsoperationen an den Frames des decodierten Videos ausführen, um die Verarbeitung der Frames unter Verwenden eines trainierten Bilderkennungsmodells vorzubereiten. Zum Beispiel kann der Bildverarbeitungsprozessor 1304 Faltungsoperationen für ein CNN beschleunigen, das verwendet wird, um eine Bilderkennung an den hochauflösenden Videodaten auszuführen, während Back-End-Modellberechnungen von der GPGPU 1306 ausgeführt werden.
  • Der Mehrkernprozessor 1308 kann eine Steuerlogik beinhalten, um beim Sequenzieren und bei der Synchronisation von Datentransfers und gemeinsam genutzten Speicheroperationen, die von dem Medienprozessor 1302 und dem Bildverarbeitungsprozessor 1304 ausgeführt werden, zu unterstützen. Der Mehrkernprozessor 1308 kann auch als Anwendungsprozessor fungieren, um Softwareanwendungen auszuführen, die die Inferenz-Rechenfähigkeit der GPGPU 1306 nutzen können. Zum Beispiel kann zumindest ein Teil der Navigations- und Fahrlogik in Software, die auf dem Mehrkernprozessor 1308 ausgeführt wird, implementiert sein. Eine derartige Software kann Rechenarbeitslasten direkt an die GPGPU 1306 ausgeben, oder die Rechenarbeitslasten können an den Mehrkernprozessor 1308 ausgegeben werden, der zumindest einen Teil dieser Operationen an die GPGPU 1306 auslagern kann.
  • Die GPGPU 1306 kann Rechencluster beinhalten, wie etwa eine Niedrigenergiekonfiguration der Verarbeitungscluster 706A bis 706H innerhalb der Allzweck-Grafikverarbeitungseinheit 700. Die Rechencluster innerhalb der GPGPU 1306 können Anweisungen unterstützen, die speziell optimiert sind, um Inferenzberechnungen in einem trainierten neuronalen Netzwerk auszuführen. Zum Beispiel kann die GPGPU 1306 Anweisungen unterstützen, um Berechnungen mit niedriger Genauigkeit auszuführen, wie etwa 8-Bit- und 4-Bit-Ganzzahl-Vektoroperationen.
  • Zusätzliche Systemübersicht
  • 14 ist ein Blockschaltbild eines Verarbeitungssystems 1400. Die Elemente der 14, die den gleichen oder einen ähnlichen Namen aufweisen wie die Elemente einer anderen Figur hierin, beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder funktionieren, die gleichen Bauelemente beinhalten und können mit anderen Entitäten verknüpft sein, wie die hierin an anderer Stelle beschriebenen, sind jedoch nicht darauf beschränkt. Das System 1400 kann in einem Einzelprozessor-Desktop-System, einem Mehrprozessor-Workstation-System oder einem Server-System mit einer großen Anzahl von Prozessoren 1402 oder Prozessorkernen 1407 verwendet werden. Das System 1400 kann eine Verarbeitungsplattform sein, die in eine integrierte System-on-a-Chip-(SoC)-Schaltung zur Verwendung in mobilen, tragbaren oder eingebetteten Vorrichtungen, wie zum Beispiel innerhalb von Vorrichtungen des Internets der Dinge (Internet of Things - IoT), mit verdrahteter oder drahtloser Konnektivität mit einem lokalen oder Weitverkehrsnetz eingebaut ist.
  • Das System 1400 kann ein Verarbeitungssystem mit Bauelementen sein, die denen der 1 entsprechen. Beispielsweise können in unterschiedlichen Konfigurationen Prozessor(en) 1402 oder Prozessorkern(e) 1407 dem/den Prozessor(en) 102 der 1 entsprechen. Der/die Grafikprozessor(en) 1408 kann/können dem/den parallelen Prozessor(en) 112 der 1 entsprechen. Der externe Grafikprozessor 1418 kann eines der Add-In-Geräte 120 der 1 sein.
  • Das System 1400 kann beinhalten, gekoppelt mit oder integriert sein in: eine serverbasierte Spielplattform; eine Spielkonsole, einschließlich einer Spiel- und Medienkonsole; eine mobile Spielkonsole, eine Handheld-Spielekonsole oder eine Online-Spielekonsole. Das System 1400 kann Teil eines Mobiltelefons, Smartphones, einer Tablet-Rechenvorrichtung oder einer mobilen mit dem Internet verbundenen Vorrichtung, wie etwa eines Laptops mit geringer interner Speicherkapazität, sein. Das Verarbeitungssystem 1400 kann auch umfassen, gekoppelt mit oder darin integriert sein: ein tragbares Gerät, wie beispielsweise ein tragbares Smartwatch-Gerät; Smart Eyewear oder Kleidung, die mit Augmented Reality (AR)- oder Virtual Reality (VR)-Funktionen ausgestattet sind, um visuelle, akustische oder taktile Ausgaben bereitzustellen, um visuelle, Audio- oder taktile Erfahrungen in der realen Welt zu ergänzen oder anderweitig Text, Audio, Grafiken, Videos, holografische Bilder bereitzustellen oder Video- oder taktiles Feedback; andere Augmented Reality (AR)-Geräte; oder ein anderes Virtual-Reality-Gerät (VR). Das Verarbeitungssystem 1400 kann ein Fernsehgerät oder eine Set-Top-Box-Vorrichtung umfassen oder ein Teil davon sein. Das System 1400 kann ein selbstfahrendes Fahrzeug, wie etwa einen Bus, einen Sattelschlepper, ein PKW, einen Motor oder ein Elektrofahrrad, ein Flugzeug oder ein Segelflugzeug (oder eine beliebige Kombination davon) beinhalten, mit einem selbstfahrenden Fahrzeug koppeln oder darin integriert sein. Das selbstfahrende Fahrzeug kann das System 1400 verwenden, um die um das Fahrzeug erfasste Umgebung zu verarbeiten.
  • Der eine oder die mehreren Prozessoren 1402 können einen oder mehrere Prozessorkerne 1407 beinhalten, um Anweisungen zu verarbeiten, die, wenn sie ausgeführt werden, Operationen für System- oder Benutzersoftware ausführen. Der mindestens eine des einen oder der mehreren Prozessorkerne 1407 kann dazu konfiguriert sein, einen bestimmten Befehlssatz 1409 zu verarbeiten. Der Befehlssatz 1409 kann die Berechnung eines komplexen Befehlssatzes (Complex Instruction Set Computing - CISC), eine Berechnung eines reduzierten Befehlssatzes (Reduced Instruction Set Computing - RISC) oder eine Berechnung über ein sehr langes Befehlswort (Very Long Instruction Word - VLIW) erleichtern. Ein oder mehrere Prozessorkerne 1407 können einen unterschiedlichen Befehlssatz 1409 verarbeiten, der Befehle enthalten kann, um die Emulation anderer Befehlssätze zu erleichtern. Der Prozessorkern 1407 kann auch andere Verarbeitungsvorrichtungen beinhalten, wie beispielsweise einen digitalen Signalprozessor (Digital Signal Processor - DSP).
  • Der Prozessor 1402 kann Cache-Speicher 1404 beinhalten. Abhängig von der Architektur kann der Prozessor 1402 einen einzelnen internen Cache oder mehrere Ebenen des internen Cache aufweisen. Bei einigen Ausführungsformen wird der Cache-Speicher von verschiedenen Bauelementen des Prozessors 1402 gemeinsam genutzt. Bei einigen Ausführungsformen verwendet der Prozessor 1402 auch einen externen Cache (zum Beispiel einen Level-3-Cache (L3-Cache) oder Last Level Cache (LLC)) (nicht gezeigt), der unter Verwenden bekannter Cache-Kohärenztechniken von den Prozessorkernen 1407 gemeinsam genutzt werden kann. Eine Registerdatei 1406 kann zusätzlich im Prozessor 1402 enthalten sein und kann unterschiedliche Arten von Registern zum Speichern unterschiedlicher Arten von Daten enthalten (zum Beispiel Ganzzahlregister, Gleitkommaregister, Statusregister und ein Befehlszeigerregister). Einige Register können Allzweckregister sein, während andere Register für das Design des Prozessors 1402 spezifisch sein können.
  • Der eine oder die mehreren Prozessoren 1402 können mit einem oder mehreren Schnittstellenbussen 1410 gekoppelt sein, um Kommunikationssignale, wie etwa Adressen, Daten oder Steuersignale, zwischen dem Prozessor 1402 und anderen Bauelementen im System 1400 zu übertragen. Der Schnittstellenbus 1410 kann bei einer dieser Ausführungsformen ein Prozessorbus sein, wie beispielsweise eine Version des Direct Media Interface- Busses (DMI-Busses). Prozessorbusse sind jedoch nicht auf den DMI-Bus beschränkt und können einen oder mehrere Peripheral Component Interconnect-Busse (zum Beispiel PCI, PCI Express), Speicherbusse oder andere Typen von Schnittstellenbussen beinhalten. Zum Beispiel können der/die Prozessor(en) 1402 einen integrierten Speichercontroller 1416 und einen Plattformcontroller-Hub 1430 beinhalten. Der Speichercontroller 1416 erleichtert die Kommunikation zwischen einem Speichergerät und anderen Komponenten des Systems 1400, während der Plattformcontroller-Hub (PCH) 1430 Verbindungen zu E/A-Geräten über einen lokalen E/A-Bus bereitstellt.
  • Die Speichervorrichtung 1420 kann eine dynamische Speichervorrichtung mit wahlfreiem Zugriff (DRAM), eine statische Vorrichtung mit wahlfreiem Zugriff (SRAM), eine Flash-Speichervorrichtung, eine Phasenänderungsspeichervorrichtung oder eine andere Speichervorrichtung mit geeigneter Leistung sein, um als Prozessspeicher zu dienen. Die Speichervorrichtung 1420 kann beispielsweise als Systemspeicher für das System 1400 arbeiten, um Daten 1422 und Anweisungen 1421 zur Verwendung zu speichern, wenn der eine oder die mehreren Prozessoren 1402 eine Anwendung oder einen Prozess ausführen. Der Speichercontroller 1416 ist auch mit einem optionalen externen Grafikprozessor 1418 gekoppelt, der mit dem einen oder den mehreren Grafikprozessoren 1408 in den Prozessoren 1402 kommunizieren kann, um Grafik- und Medienoperationen auszuführen. Bei einigen Ausführungsformen können Grafik-, Medien- und/oder Rechenoperationen von einem Beschleuniger 1412 unterstützt werden, der ein Coprozessor ist, der konfiguriert werden kann, um einen spezialisierten Satz von Grafik-, Medien- oder Rechenoperationen auszuführen. Zum Beispiel kann der Beschleuniger 1412 ein Matrixmultiplikationsbeschleuniger sein, der verwendet wird, um maschinelles Lernen oder Rechenoperationen zu optimieren. Der Beschleuniger 1412 kann ein Raytracing-Beschleuniger sein, der verwendet werden kann, um gemeinsam mit dem Grafikprozessor 1408 Raytracing-Operationen auszuführen. Bei einer Ausführungsform kann ein externer Beschleuniger 1419 an Stelle des Beschleunigers 1412 oder gemeinsam mit diesem verwendet werden.
  • Eine Anzeigevorrichtung 1411, die mit dem/den Prozessor(en) 1402 verbunden werden kann, kann bereitgestellt werden. Die Anzeigevorrichtung 1411 kann eine oder mehrere einer internen Anzeigevorrichtung sein, wie in einer mobilen elektronischen Vorrichtung oder einer Laptopvorrichtung oder einer externen Anzeigevorrichtung, die über eine Anzeigeschnittstelle (zum Beispiel DisplayPort usw.) angeschlossen ist. Die Anzeigevorrichtung 1411 kann ein Head-Mounted-Display (HMD) sein, wie beispielsweise eine stereoskopische Anzeigevorrichtung zur Verwendung bei Virtual-Reality-(VR-)Anwendungen oder Augmented-Reality-(AR-)Anwendungen.
  • Der Plattform-Controller-Hub 1430 kann es Peripheriegeräten ermöglichen, sich über einen Hochgeschwindigkeits-E/A-Bus mit der Speichervorrichtung 1420 und dem Prozessor 1402 zu verbinden. Die E/A-Peripheriegeräte umfassen, sind aber nicht beschränkt auf, einen Audiocontroller 1446, einen Netzwerkcontroller 1434, eine Firmware-Schnittstelle 1428, einen drahtlosen Transceiver 1426, Berührungssensoren 1425, eine Datenspeichervorrichtung 1424 (zum Beispiel nichtflüchtiger Speicher, flüchtiger Speicher, Festplatte, Flash-Speicher, NAND, 3D NAND, 3D XPoint/Optane usw.). Die Datenspeichervorrichtung 1424 kann über eine Speicherschnittstelle (zum Beispiel SATA) oder über einen Peripheriebus, wie etwa einen Peripheral Component Interconnect Bus (zum Beispiel PCI, PCI Express) verbunden werden. Die Touch-Sensoren 1425 können Touchscreen-Sensoren, Drucksensoren oder Fingerabdrucksensoren beinhalten. Der drahtlose Transceiver 1426 kann ein Wi-Fi-Transceiver, ein Bluetooth-Transceiver oder ein Mobilfunknetz-Transceiver, wie etwa ein 3G-, 4G-, 5G- oder Long-Term Evolution-Transceiver (LTE-Transceiver) sein. Die Firmware-Schnittstelle 1428 ermöglicht die Kommunikation mit der Systemfirmware und kann beispielsweise eine vereinheitlichte erweiterbare Firmware-Schnittstelle (UEFI) sein. Der Netzwerkcontroller 1434 kann eine Netzwerkverbindung zu einem drahtgebundenen Netzwerk ermöglichen. Bei einigen Ausführungsformen ist ein Hochleistungsnetzwerkcontroller (nicht gezeigt) mit dem Schnittstellenbus 1410 gekoppelt. Der Audiocontroller 1446 kann ein Mehrkanal-High-Definition-Audiocontroller sein. Bei einigen dieser Ausführungsformen beinhaltet das System 1400 einen optionalen Legacy-E/A-Controller 1440 zum Koppeln von Legacy-Geräten (zum Beispiel Personal System 2 (PS/2)) an das System. Der Plattform-Controller-Hub 1430 kann auch mit einem oder mehreren Universal-Serial-Bus-Controllern (USB-Controllern) 1442 verbunden sein, um Eingabegeräte, wie etwa Kombinationen aus Tastatur und Maus 1443, eine Kamera 1444 oder andere USB-Eingabegeräte zu verbinden.
  • Es versteht sich, dass das gezeigte System 1400 beispielhaft und nicht einschränkend ist, da andere Typen von Datenverarbeitungssystemen, die unterschiedlich konfiguriert sind, ebenfalls verwendet werden können. Zum Beispiel kann eine Instanz des Speichercontrollers 1416 und des Plattformcontroller-Hubs 1430 in einen diskreten externen Grafikprozessor, wie etwa den externen Grafikprozessor 1418, integriert sein. Der Plattformcontroller-Hub 1430 und/oder der Speichercontroller 1416 können sich außerhalb des einen oder der mehreren Prozessoren 1402 befinden. Zum Beispiel kann das System 1400 einen externen Speichercontroller 1416 und einen Plattformcontroller-Hub 1430 beinhalten, die als Speichercontroller-Hub und Peripheriecontroller-Hub innerhalb eines Systemchipsatzes konfiguriert sein können, der mit dem/den Prozessor(en) 1402 in Kommunikation steht.
  • Beispielsweise können Leiterplatten („Sleds“) verwendet werden, auf denen Bauelemente wie CPUs, Speicher und andere Bauelemente platziert werden, die für eine erhöhte Wärmeleistung ausgelegt sind. Verarbeitungsbauelemente, wie die Prozessoren, können sich auf einer Oberseite eines Sied befinden, während sich nahe Speicher, wie zum Beispiel DIMMs, auf einer Unterseite des Sied befinden. Als Ergebnis des verbesserten Luftstroms, der durch diese Bauweise bereitgestellt wird, können die Bauelemente bei höheren Frequenzen und Leistungspegeln als in typischen Systemen arbeiten, wodurch die Leistung erhöht wird. Darüber hinaus sind die Sleds derart konfiguriert, dass sie blind mit Strom- und Datenkommunikationskabeln in einem Rack zusammenpassen, wodurch ihre Fähigkeit verbessert wird, schnell entfernt, aufgerüstet, neu installiert und/oder ersetzt zu werden. In ähnlicher Weise sind einzelne Bauelemente, die sich auf den Sied befinden, wie Prozessoren, Beschleuniger, Arbeitsspeicher und Datenspeicherlaufwerke, aufgrund ihres größeren Abstands leicht aufrüstbar. Bei der veranschaulichenden Ausführungsform beinhalten die Bauelemente zusätzlich Hardware-Bestätigungsmerkmale, um ihre Authentizität zu beweisen.
  • Ein Rechenzentrum kann eine einzelne Netzwerkarchitektur („Fabric“) verwenden, die mehrere andere Netzwerkarchitekturen, einschließlich Ethernet und Omni-Path, unterstützt. Die Sleds können über Lichtleitfaser an Switches gekoppelt werden, die eine höhere Bandbreite und geringere Latenz bieten als typische Twisted-Pair-Verkabelung (zum Beispiel Kategorie 5, Kategorie 5e, Kategorie 6 usw.). Aufgrund der hohen Bandbreite, der Verschaltungen mit geringer Latenz und der Netzwerkarchitektur, kann das Rechenzentrum im Einsatz Ressourcen wie Speicher, Beschleuniger (zum Beispiel GPUs, Grafikbeschleuniger, FPGAs, ASICs, neuronale Netze und/oder Beschleuniger für künstliche Intelligenz usw.) und Datenspeicherlaufwerke, die physisch disaggregiert sind, poolen und sie nach Bedarf für Rechenressourcen (zum Beispiel Prozessoren) bereitstellen, wodurch die Rechenressourcen auf die gepoolten Ressourcen zugreifen können, als ob sie lokal wären.
  • Eine Stromversorgung oder -quelle kann dem System 1400 oder jedem hierin beschriebenen Bauelement oder jedem System Spannung und/oder Strom bereitstellen. Bei einem Beispiel beinhaltet die Stromversorgung einen AC-zu-DC-Adapter (Wechselstrom-zu-Gleichstrom-Adapter) zum Anstecken an einer Wandsteckdose. Ein derartige Wechselstrom kann eine erneuerbare Energiequelle (zum Beispiel Solarenergie) sein. Bei einem Beispiel beinhaltet die Stromquelle eine Gleichstromquelle, wie etwa einen externen Wechselstrom-Gleichstrom-Wandler. Eine Stromquelle oder Stromversorgung kann auch drahtlose Ladehardware umfassen, um über Nähe zu einem Ladefeld aufzuladen. Die Stromquelle kann eine interne Batterie, eine Wechselstromversorgung, eine bewegungsbasierte Stromversorgung, eine Solarstromversorgung oder eine Brennstoffzellenquelle umfassen.
  • Die 15A bis15C veranschaulichen Computersysteme und Grafikprozessoren. Die Elemente der 15A bis 15C mit den gleichen oder ähnlichen Namen wie die Elemente einer anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können ähnlich arbeiten oder funktionieren, können die gleichen Bauelemente umfassen und mit anderen Entitäten verknüpft werden, wie diejenigen, die an anderer Stelle hierin beschrieben sind, sind jedoch nicht darauf beschränkt.
  • 15A ist ein Blockschaltbild eines Prozessors 1500, der eine Variante eines der Prozessoren 1402 sein kann und kann an der Stelle eines davon verwendet werden . Daher offenbart die Offenbarung von Merkmalen in Kombination mit den Prozessor 1500 hierin auch eine entsprechende Kombination mit dem/den Prozessor(en) 1402, ist aber nicht darauf beschränkt. Der Prozessor 1500 kann einen oder mehrere Prozessorkerne 1502A bis 1502N, einen integrierten Speichercontroller 1514 und einen integrierten Grafikprozessor 1508 aufweisen. Wenn ein integrierter Grafikprozessor 1508 ausgeschlossen ist, beinhaltet das System, das den Prozessor beinhaltet, eine Grafikprozessorvorrichtung innerhalb eines Systemchipsatzes oder ist über einen Systembus gekoppelt. Der Prozessor 1500 kann zusätzliche Kerne bis einschließlich des zusätzlichen Kerns 1502N beinhalten, der durch die gestrichelten Kästchen dargestellt ist. Jeder der Prozessorkerne 1502A bis 1502N beinhaltet eine oder mehrere interne Cache-Einheiten 1504A bis 1504N. Bei einigen Ausführungsformen weist jeder Prozessorkern 1502A bis 1502N auch Zugriff auf eine oder mehrere gemeinsam genutzte Cache-Einheiten 1506 auf. Die internen Cache-Einheiten 1504A bis 1504N und die gemeinsam genutzten Cache-Einheiten 1506 repräsentieren eine Cache-Speicherhierarchie innerhalb des Prozessors 1500. Die Cachespeicherhierarchie kann mindestens eine Ebene von Befehls- und Daten-Cache innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen gemeinsam genutzter Cache mittlerer Ebene beinhalten, wie beispielsweise Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4) oder andere Cache-Ebenen, wobei die höchste Cache-Ebene vor dem externen Speicher als LLC klassifiziert wird. Bei einigen Ausführungsformen hält die Cache-Kohärenzlogik die Kohärenz zwischen den verschiedenen Cache-Einheiten 1506 und 1504A bis 1504N aufrecht.
  • Der Prozessor 1500 kann auch einen Satz aus einer oder mehreren Buscontrollereinheiten 1516 und einem Systemagentenkern 1510 beinhalten. Die eine oder mehreren Buscontrollereinheiten 1516 verwalten einen Satz von Peripheriebussen, wie beispielsweise einen oder mehrere PCI- oder PCI-Express-Busse. Der Systemagentenkern 1510 stellt Verwaltungsfunktionalität für die verschiedenen Prozessorkomponenten bereit. Der Systemagentenkern 1510 kann einen oder mehrere integrierte Speichercontroller 1514 beinhalten, um den Zugriff auf verschiedene externe Speichervorrichtungen (nicht gezeigt) zu verwalten.
  • Zum Beispiel können ein oder mehrere der Prozessorkerne 1502A bis 1502N Unterstützung für gleichzeitiges Multithreading umfassen. Der Systemagentenkern 1510 beinhaltet Komponenten zum Koordinieren und Betreiben der Kerne 1502A bis 1502N während der Multithread-Verarbeitung. Der Systemagentenkern 1510 kann zusätzlich eine Leistungssteuereinheit (PCU) beinhalten, die Logik und Bauelemente beinhaltet, um den Leistungszustand der Prozessorkerne 1502A und 1502N und des Grafikprozessors 1508 zu regulieren.
  • Der Prozessor 1500 kann zusätzlich einen Grafikprozessor 1508 beinhalten, um Grafikverarbeitungsoperationen auszuführen. Bei einigen dieser Ausführungsformen ist der Grafikprozessor 1508 mit dem Satz gemeinsam genutzter Cache-Einheiten 1506 und dem Systemagentenkern 1510, einschließlich des einen oder der mehreren integrierten Speichercontroller 1514, gekoppelt. Der Systemagentenkern 1510 kann auch einen Anzeigecontroller 1511 beinhalten, um Grafikprozessorausgabe an eine oder mehrere gekoppelte Anzeigen zu treiben. Der Anzeigecontroller 1511 kann auch ein separates Modul sein, das über mindestens eine Verbindung mit dem Grafikprozessor gekoppelt ist, oder kann in den Grafikprozessor 1508 integriert sein.
  • Eine ringbasierte Verbindungseinheit 1512 kann verwendet werden, um die internen Bauelemente des Prozessors 1500 zu koppeln. Es kann jedoch auch eine alternative Verbindungseinheit verwendet werden, wie beispielsweise eine Punkt-zu-Punkt-Verbindung, eine geschaltete Verbindung oder andere Techniken, einschließlich in der Technik wohlbekannter Techniken. Bei einigen dieser Ausführungsformen mit einer ringbasierten Verbindung 1512 koppelt der Grafikprozessor 1508 mit der ringbasierten Verbindung 1512 über eine E/A-Verbindung 1513.
  • Die beispielhafte E/A-Verbindung 1513 stellt mindestens eine von mehreren Arten von E/A-Verbindungen dar, einschließlich einer Package-internen E/A-Verbindung, die die Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 1518, wie etwa einem eDRAM-Modul, erleichtert. Optional können jeder der Prozessorkerne 1502A bis 1502N und der Grafikprozessor 1508 eingebettete Speichermodule 1518 als gemeinsam genutzten Last Level Cache verwenden.
  • Die Prozessorkerne 1502A bis 1502N können beispielsweise homogene Kerne sein, die dieselbe Befehlssatzarchitektur ausführen. Alternativ sind die Prozessorkerne 1502A bis 1502N in Bezug auf die Befehlssatzarchitektur (ISA) heterogen, wobei einer oder mehrere der Prozessorkerne 1502A bis 1502N einen ersten Befehlssatz ausführen, während mindestens einer der anderen Kerne eine Teilmenge des ersten Befehlssatzes oder einen unterschiedlichen Befehlssatz ausführt. Die Prozessorkerne 1502A bis 1502N können hinsichtlich der Mikroarchitektur heterogen sein, wobei ein oder mehrere Kerne mit einem relativ höheren Stromverbrauch mit einem oder mehreren Leistungskernen mit einem geringeren Stromverbrauch gekoppelt sind. Als weiteres Beispiel sind die Prozessorkerne 1502A bis 1502N hinsichtlich der Rechenfähigkeit heterogen. Zusätzlich kann der Prozessor 1500 auf einem oder mehreren Chips oder als integrierte Schaltung mit den veranschaulichten Bauelementen zusätzlich zu anderen Bauelementen implementiert werden.
  • 15B ist ein Blockschaltbild einer Hardwarelogik eines Grafikprozessorkerns 1519 gemäß einigen hierin beschriebenen Ausführungsformen. Der Grafikprozessorkern 1519, der manchmal als Core-Slice bezeichnet wird, kann ein oder mehrere Grafikkerne innerhalb eines modularen Grafikprozessors sein. Der Grafikprozessorkern 1519 ist beispielhaft für einen Grafikkern-Slice, und ein Grafikprozessor, wie hierin beschrieben, kann mehrere Grafikkern-Slices basierend auf Zielleistungs- und Leistungshüllkurven umfassen. Jeder Grafikprozessorkern 1519 kann einen festen Funktionsblock 1530 umfassen, der mit mehreren Teilkernen 1521A-1521F gekoppelt ist, die auch als Teil-Slices bezeichnet werden, die modulare Blöcke von Allzweck- und fester Funktionslogik beinhalten.
  • Der Block mit fester Funktion 1530 kann eine Geometrie-/Festfunktionspipeline 1531 beinhalten, die von allen Sub-Kernen in dem Grafikprozessorkern 1519 gemeinsam genutzt werden kann, zum Beispiel bei Implementierungen von Grafikprozessoren mit niedrigerer Leistung und/oder niedrigerer Leistung. Die Geometrie-/Festfunktionspipeline 1531 kann eine 3D-Festfunktionspipeline (zum Beispiel 16A, unten beschrieben) eine Video-Front-End-Einheit, einen Thread-Spawner und Thread-Dispatcher und einen vereinheitlichten Rückgabepuffer-Manager, der vereinheitlichte Rückgabepuffer verwaltet (zum Beispiel 17, wie unten beschrieben) beinhalten.
  • Der Festfunktionsblock 1530 kann auch eine Grafik-SoC-Schnittstelle 1532, einen Grafik-Mikrocontroller 1533 und eine Medienpipeline 1534 beinhalten. Die Grafik-SoC-Schnittstelle 1532 stellt eine Schnittstelle zwischen dem Grafikprozessorkern 1519 und anderen Prozessorkernen innerhalb eines Systems auf einer integrierten Chip-Schaltung bereit. Der Grafik-Mikrocontroller 1533 ist ein programmierbarer Subprozessor, der konfigurierbar ist, um verschiedene Funktionen des Grafikprozessor-Kerns 1519 zu verwalten, einschließlich Thread-Dispatch, Scheduling und Preemption. Die Medienpipeline 1534 (zum Beispiel die Medienpipeline 1616 der 16A und 17) beinhaltet Logik, um das Decodieren, Codieren, Vorverarbeiten und/oder Nachverarbeiten von Multimediadaten, einschließlich Bild- und Videodaten, zu erleichtern. Die Medienpipeline 1534 implementiert Medienoperationen über Anforderungen zum Berechnen oder Sampling von Logik innerhalb der Sub-Kerne 1521 bis 1521F.
  • Die SoC-Schnittstelle 1532 kann es dem Grafikprozessorkern 1519 ermöglichen, mit Mehrzweckanwendungsprozessorkernen (zum Beispiel CPUs) und/oder anderen Bauelementen innerhalb eines SoC zu kommunizieren, einschließlich Speicherhierarchieelementen, wie einem gemeinsam genutzten Last-Level-Cache-Speicher, dem System-RAM und/oder eingebetteter DRAM auf dem Chip oder auf dem Package. Die SoC-Schnittstelle 1532 kann auch eine Kommunikation mit Geräten mit Festfunktion innerhalb des SoC ermöglichen, wie etwa Kamera-Bildgebungspipelines, und ermöglicht die Verwendung von und/oder implementiert globale Speicher-Atomics, die zwischen dem Grafikprozessorkern 1519 und CPUs innerhalb des SoC gemeinsam genutzt werden können. Die SoC-Schnittstelle 1532 kann auch Energieverwaltungssteuerungen für den Grafikprozessorkern 1519 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Grafikkerns 1519 und anderen Taktdomänen innerhalb des SoC ermöglichen. Optional ermöglicht die SoC-Schnittstelle 1532 den Empfang von Befehlspuffern von einem Befehlsstreamer und einem globalen Thread-Dispatcher, die konfiguriert sind, um Befehle und Anweisungen an jeden eines oder mehrerer Grafikkerne innerhalb eines Grafikprozessors bereitzustellen. Die Befehle und Anweisungen können an die Medienpipeline 1534 versandt werden, wenn Medienoperationen ausgeführt werden sollen, oder an eine Geometrie- und Festfunktionspipeline (zum Beispiel Geometrie- und Festfunktionspipeline 1531, Geometrie- und Festfunktionspipeline 1537), wenn Grafikverarbeitungsoperationen ausgeführt werden sollen.
  • Der Grafikmikrocontroller 1533 kann konfiguriert sein, um verschiedene Planungs- und Verwaltungsaufgaben für den Grafikprozessorkern 1519 auszuführen. Bei einer Konfiguration kann der Grafik-Mikrocontroller 1533 beispielsweise Grafik- und/oder Berechnungs-Workload-Planung auf den verschiedenen Grafik-Parallelmaschinen innerhalb der Ausführungseinheits-(EU)-Arrays 1522A bis 1522F, 1524A bis 1524F innerhalb der Sub-Kerne 1521A bis 1521F ausführen. Bei dieser Arbeitslastplanung kann Host-Software, die auf einem CPU-Kern eines SoCs einschließlich des Grafikprozessorkerns 1519 ausgeführt wird, Arbeitslasten an eine von mehreren Grafikprozessor-Türklingeln senden, was eine Planungsoperation an der entsprechenden Grafikmaschine aufruft. Das Planen von Operationen beinhaltet das Bestimmen, welche Arbeitslast als nächste ausgeführt werden soll, das Senden einer Arbeitslast an einen Befehlsstreamer, das Vorwegnehmen vorhandener Arbeitslasten, die auf einer Maschine laufen, das Überwachen des Fortschritts einer Arbeitslast und das Benachrichtigen der Hostsoftware, wenn eine Arbeitslast abgeschlossen ist. Optional kann der Grafik-Mikrocontroller 1533 auch Niedrigenergie- oder Leerlaufzustände für den Grafikprozessorkern 1519 erleichtern, wodurch der Grafikprozessorkern 1519 die Möglichkeit bekommt, Register innerhalb des Grafikprozessorkerns 1519 über Niedrigenergie-Zustandsübergänge zu speichern und wiederherzustellen, unabhängig von dem Betriebssystem und/oder der Grafiktreibersoftware auf dem System.
  • Der Grafikprozessorkern 1519 kann mehr oder weniger als die veranschaulichten Unterkerne 1521A bis 1521F, bis zu N modulare Sub-Kerne, aufweisen. Für jeden Satz von N Sub-Kernen kann der Grafikprozessorkern 1519 auch eine gemeinsam genutzte Funktionslogik 1535, einen gemeinsam genutzten und/oder Cache-Speicher 1536, eine Geometrie-/Festfunktionspipeline 1537 sowie eine zusätzliche Festfunktionslogik 1538 beinhalten, um verschiedene Grafik- und Rechenverarbeitungsoperationen zu beschleunigen. Die Shared-Function-Logik 1535 kann Logikeinheiten beinhalten, die mit der Shared-Function-Logik 1720 der 17 assoziiert sind, (zum Beispiel Sampler, Mathematik und/oder Inter-Thread-Kommunikationslogik), die von jedem N Sub-Kern innerhalb des Grafikprozessorkerns 1519 gemeinsam genutzt werden können. Der gemeinsam genutzte und/oder Cache-Speicher 1536 kann ein Last-Level-Cache für den Satz von N Sub-Kernen 1521A-1521F innerhalb des Grafikprozessorkerns 1519 sein, und kann auch als gemeinsam genutzter Speicher, auf den mehrere Subkerne zugreifen können, dienen. Die Geometrie-/Festfunktionspipeline 1537 kann an Stelle der Geometrie-/Festfunktionspipeline 1531 innerhalb des Festfunktionsblocks 1530 enthalten sein und kann die gleichen oder ähnliche Logikeinheiten beinhalten.
  • Der Grafikprozessorkern 1519 kann zusätzliche Festfunktionslogik 1538 beinhalten, die verschiedene Festfunktionsbeschleunigungslogik zur Verwendung durch den Grafikprozessorkern 1519 beinhalten kann. Optional beinhaltet die zusätzliche Festfunktionslogik 1538 eine zusätzliche Geometriepipeline zur Verwendung bei der Schattierung nur an der Position. Bei der Nur-Positions-Schattierung existieren zwei Geometriepipelines, die Vollgeometriepipeline innerhalb der Geometrie-/Fixfunktionspipeline 1538, 1531 und eine Cull-Pipeline, die eine zusätzliche Geometriepipeline ist, die in der zusätzlichen Festfunktionslogik 1538 enthalten sein kann. Beispielsweise kann die Cull-Pipeline eine abgespeckte Version der Pipeline mit voller Geometrie sein. Die vollständige Pipeline und die Cull-Pipeline können unterschiedliche Instanzen derselben Anwendung ausführen, wobei jede Instanz einen separaten Kontext aufweist. Schattierung nur in Position kann lange Aussortierungsläufe verworfener Dreiecke verdecken, sodass die Schattierung in einigen Fällen früher abgeschlossen werden kann. Beispielsweise kann die Cull-Pipeline-Logik innerhalb der zusätzlichen Festfunktionslogik 1538 kann Positions-Shader parallel zur Hauptanwendung ausführen und generiert im Allgemeinen kritische Ergebnisse schneller als die vollständige Pipeline, da die Cull-Pipeline nur das Positionsattribut der Eckpunkte abruft und schattiert, ohne eine Rasterisierung und ein Rendern der Pixel in den Bildpuffer auszuführen. Die Cull-Pipeline kann die generierten kritischen Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke zu berechnen, ungeachtet, ob diese Dreiecke aussortiert wurden. Die vollständige Pipeline (die in diesem Fall als Wiedergabepipeline bezeichnet werden kann) kann die Sichtbarkeitsinformationen verbrauchen, um die aussortierten Dreiecke zu überspringen, um nur die sichtbaren Dreiecke zu schattieren, die schließlich zur Rasterisierungsphase weitergeleitet werden.
  • Optional kann die zusätzliche Festfunktionslogik 1538 auch eine Beschleunigungslogik für maschinelles Lernen, wie etwa eine Festfunktions-Matrixmultiplikationslogik, für Implementierungen beinhalten, die Optimierungen für maschinelles Lernen oder Inferenzen umfassen.
  • Innerhalb jedes Grafik-Sub-Kerns 1521A-1521F ist ein Satz von Ausführungsressourcen enthalten, die verwendet werden können, um Grafik-, Medien- und Rechenoperationen als Reaktion auf Anforderungen von Grafikpipeline-, Medienpipeline- oder Shader-Programmen auszuführen. Die Grafik-Sub-Kerne 1521A-1521F beinhalten mehrere EU-Arrays 1522A bis 1522F, 1524A bis 1524F, Thread-Dispatch- und Inter-Thread-Kommunikationslogik (TD/IC) 1523A bis 1523F, einen 3D-Sampler (zum Beispiel Textur-Sampler) 1525A bis 1525F, einen Media-Sampler 1506A bis 1506F, einen Shader-Prozessor 1527A bis 1527F und einen gemeinsam genutzten lokalen Speicher (SLM) 1528A bis 1528F. Die EU-Arrays 1522A bis 1522F, 1524A bis 1524F beinhalten jeweils mehrere Ausführungseinheiten, die Allzweck-Grafikverarbeitungseinheiten sind, die Gleitkomma- und Ganzzahl-/Festkomma-Logikoperationen im Dienste einer Grafik-, Medien- oder Rechenoperation ausführen können, einschließlich Grafik-, Medien- oder Compute-Shader-Programmen. Die TD/IC-Logik 1523A bis 1523F führt lokale Thread-Dispatch- und Thread-Steueroperationen für die Ausführungseinheiten innerhalb eines Sub-Kerns aus und erleichtert die Kommunikation zwischen Threads, die auf den Ausführungseinheiten des Sub-Kerns ausgeführt werden. Der 3D-Sampler 1525A bis 1525F kann Textur- oder andere 3D-Grafikbezogene Daten in den Speicher einlesen. Der 3D-Sampler kann Texturdaten basierend auf einem konfigurierten Sample-Zustand und dem Texturformat, das einer gegebenen Textur zugeordnet ist, unterschiedlich lesen. Der Mediensampler 1506A bis 1506F kann ähnliche Leseoperationen basierend auf dem Typ und Format ausführen, die mit Mediendaten verbunden ist. Zum Beispiel kann jeder Grafik-Sub-Kern 1521A bis 1521F abwechselnd einen einheitlichen 3D- und Medien-Sampler umfassen. Threads, die auf den Ausführungseinheiten in jedem der Sub-Kerne 1521A bis 1521F ausgeführt werden, können den gemeinsam genutzten lokalen Speicher 1528A bis 1528F innerhalb jedes Sub-Kerns nutzen, um es Threads, die innerhalb einer Thread-Gruppe ausführen, zu ermöglichen, unter Verwenden eines gemeinsamen Pools von On-Chip-Speicher auszuführen.
  • 15C ist ein Blockschaltbild einer Allzweck-Grafikverarbeitungseinheit (GPGPU) 1570, die gemäß hierin beschriebenen Ausführungsformen als ein Grafikprozessor, zum Beispiel der Grafikprozessor 1508 und/oder Rechenbeschleuniger, konfiguriert werden kann. Die GPGPU 1570 kann mit Host-Prozessoren (zum Beispiel einer oder mehreren CPU(s) 1546) und Speicher 1571, 1572 über einen oder mehrere System- und/oder Speicherbusse verbunden sein. Der Speicher 1571 kann Systemspeicher sein, der mit der einen oder den mehreren CPU(s) 1546 gemeinsam genutzt werden kann, während der Speicher 1572 Gerätespeicher ist, der der GPGPU 1570 gewidmet ist. Zum Beispiel können Bauelemente innerhalb der GPGPU 1570 und des Gerätespeichers 1572 in Speicheradressen abgebildet werden, auf die die eine oder die mehreren CPU(s) 1546 zugreifen können. Der Zugriff auf die Speicher 1571 und 1572 kann über eine Speichersteuerung 1568 erleichtert werden. Der Speichercontroller 1568 kann einen internen Direktspeicherzugriffs-(DMA)-Controller 1569 beinhalten oder kann eine Logik beinhalten, um Operationen, die ansonsten von einem DMA-Controller ausgeführt würden, auszuführen.
  • Die GPGPU 1570 beinhaltet mehrere Cache-Speicher, einschließlich eines L2-Cache 1553, L1-Cache 1554, eines Befehls-Cache 1555 und eines gemeinsam genutzten Speichers 1556, von denen zumindest ein Teil auch als Cache-Speicher partitioniert werden kann. Die GPGPU 1570 beinhaltet auch mehrere Recheneinheiten 1560A bis 1560N. Jede Recheneinheit 1560A bis 1560N beinhaltet einen Satz von Vektorregistern 1561, Skalarregistern 1562, Vektorlogikeinheiten 1563 sowie Skalarlogikeinheiten 1564. Die Recheneinheiten 1560A bis 1560N können auch einen lokalen gemeinsam genutzten Speicher 1565 und einen Programmzähler 1566 beinhalten. Die Recheneinheiten 1560A bis 1560N können mit einem konstanten Cache 1567 gekoppelt werden, der zum Speichern konstanter Daten verwendet werden kann, nämlich Daten, die sich während der Ausführung des Kernel- oder Shaderprogramms, das auf der GPGPU 1570 ausgeführt wird, nicht ändern. Der konstante Cache 1567 kann ein Skalardaten-Cache sein, und zwischengespeicherte Daten können direkt in die Skalarregister 1562 geholt werden.
  • Während des Betriebs können die eine oder die mehreren CPU(s) 1546 Befehle in Register oder Speicher in der GPGPU 1570 schreiben, die in einen zugänglichen Adressraum abgebildet wurden. Die Befehlsprozessoren 1557 können die Befehle aus Registern oder Speicher lesen und bestimmen, wie diese Befehle innerhalb der GPGPU 1570 verarbeitet werden. Ein Thread-Dispatcher 1558 kann dann verwendet werden, um Threads an die Recheneinheiten 1560A-1560N zu versenden, um diese Befehle auszuführen. Jede Recheneinheit 1560A-1560N kann Threads unabhängig von den anderen Recheneinheiten ausführen. Außerdem kann jede Recheneinheit 1560A bis 1560N unabhängig für eine bedingte Berechnung konfiguriert werden und die Ergebnisse der Berechnung bedingt an den Speicher ausgeben. Die Befehlsprozessoren 1557 können die eine oder die mehreren CPU(s) 1546 unterbrechen, wenn die übermittelten Befehle abgeschlossen sind.
  • Die 16A bis 16C veranschaulichen Blockschaltbilder zusätzlicher Grafikprozessor- und Rechenbeschleunigerarchitekturen, die von hierin beschriebenen Ausführungsformen bereitgestellt werden, zum Beispiel gemäß den 15A bis 15C. Die Elemente der 16A bis 16C, die denselben oder ähnlichen Namen wie die Elemente einer anderen Figur aufweisen, beschreiben hierin die gleichen Elemente wie in den anderen Figuren, arbeiten oder funktionieren ähnlich, können die gleichen Bauelemente umfassen und mit anderen Entitäten verknüpft werden, wie diejenigen, die an anderer Stelle hierin beschrieben sind, sind jedoch nicht darauf beschränkt.
  • 16A ist ein Blockschaltbild eines Grafikprozessors 1600, der eine diskrete Grafikverarbeitungseinheit sein kann oder ein Grafikprozessor sein kann, der in eine Vielzahl von Verarbeitungskernen integriert ist, oder andere Halbleitervorrichtungen, wie beispielsweise, aber nicht beschränkt auf Speichervorrichtungen oder Netzwerkschnittstellen. Der Grafikprozessor 1600 kann eine Variante des Grafikprozessors 1508 sein und kann an Stelle des Grafikprozessors 1508 verwendet werden. Daher offenbart die Offenbarung von Merkmalen in Kombination mit dem Grafikprozessor 1508 hierin auch eine entsprechende Kombination mit dem Grafikprozessor 1600, ist aber nicht darauf beschränkt. Der Grafikprozessor kann über eine speicherabgebildete E/A-Schnittstelle mit Registern auf dem Grafikprozessor und mit Befehlen kommunizieren, die in den Prozessorspeicher platziert werden. Der Grafikprozessor 1600 kann eine Speicherschnittstelle 1614 beinhalten, um auf den Speicher zuzugreifen. Die Speicherschnittstelle 1614 kann eine Schnittstelle zu lokalem Speicher, einem oder mehreren internen Caches, einem oder mehreren gemeinsam genutzten externen Caches und/oder zum Systemspeicher sein.
  • Optional beinhaltet der Grafikprozessor 1600 auch eine Anzeigesteuerung 1602, um Anzeigeausgabedaten zu einer Anzeigevorrichtung 1618 zu treiben. Die Anzeigesteuerung 1602 beinhaltet Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und Zusammensetzung mehrerer Schichten von Video- oder Benutzeroberflächenelementen. Die Anzeigevorrichtung 1618 kann eine interne oder externe Anzeigevorrichtung sein. Bei einer Ausführungsform ist die Anzeigevorrichtung 1618 eine auf dem Kopf angebrachte Anzeigevorrichtung, wie etwa eine Anzeigevorrichtung für virtuelle Realität (VR) oder eine Anzeigevorrichtung für erweiterte Realität (AR). Der Grafikprozessor 1600 kann eine Video-Codec-Maschine 1606 enthalten, um Medien in, von oder zwischen einem oder mehreren Mediencodierungsformaten zu codieren, zu decodieren oder umzucodieren, einschließlich, aber nicht beschränkt auf Formate der Moving Picture Experts Group (MPEG), wie MPEG-2, Advanced Video Coding (AVC)-Formate wie 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.
  • Der Grafikprozessor 1600 kann eine Blockbildtransfermaschine (BLIT-Maschine) 1604 beinhalten, um zweidimensionale (2D) Rasterisierungsoperationen auszuführen, einschließlich beispielsweise Bitgrenzen-Blocktransfers. Alternativ können 2D-Grafikoperationen jedoch unter Verwenden eines oder mehrerer Bauelemente der Grafikverarbeitungsmaschine (GPE) 1610 ausgeführt werden. Bei einigen Ausführungsformen ist die GPE 1610 eine Rechenmaschine zum Ausführen von Grafikoperationen, einschließlich dreidimensionaler (3D) Grafikoperationen und Medienoperationen.
  • Die GPE 1610 kann eine 3D-Pipeline 1612 zum Ausführen von 3D-Operationen umfassen, wie etwa das Rendern dreidimensionaler Bilder und Szenen unter Verwenden von Verarbeitungsfunktionen, die auf 3D-Grundelemente (zum Beispiel Rechteck, Dreieck usw.) einwirken. Die 3D-Pipeline 1612 beinhaltet programmierbare und Festfunktionselemente, die verschiedene Aufgaben innerhalb des Elements ausführen und/oder Ausführungs-Threads für ein 3D/Medien-Subsystem 1615 erzeugen. Während die 3D-Pipeline 1612 verwendet werden kann, um Medienoperationen auszuführen, beinhaltet eine Ausführungsform der GPE 1610 auch eine Medienpipeline 1616, die speziell verwendet wird, um Medienoperationen, wie etwa Videonachbearbeitung und Bildverbesserung, auszuführen.
  • Die Medienpipeline 1616 kann feste Funktions- oder programmierbare Logikeinheiten beinhalten, um eine oder mehrere spezialisierte Medienoperationen, wie etwa Videodecodierungsbeschleunigung, Video-De-Interlacing und Videocodierungsbeschleunigung an Stelle oder im Auftrag der Videocodec-Maschine 1606 auszuführen. Die Medienpipeline 1616 kann zusätzlich eine Thread-Spawn-Einheit beinhalten, um Threads zur Ausführung auf dem 3D/Medien-Subsystem 1615 zu spawnen. Die erzeugten Threads führen Berechnungen für die Medienoperationen an einer oder mehreren Grafikausführungseinheiten, die im 3D/Medien-Subsystem 1615 enthalten sind, aus.
  • Das 3D/Medien-Subsystem 1615 kann Logik zum Ausführen von Threads, die von der 3D-Pipeline 1612 und der Medien-Pipeline 1616 erzeugt werden, beinhalten. Die Pipelines können Thread-Ausführungsanforderungen an das 3D/Medien-Subsystem 1615 senden, das eine Thread-Dispatch-Logik zum Arbitrieren und Senden der verschiedenen Anforderungen an verfügbare Thread-Ausführungsressourcen umfasst. Die Ausführungsressourcen umfassen ein Array von Grafikausführungseinheiten zum Verarbeiten der 3D- und Medien-Threads. Das 3D/Medien-Subsystem 1615 kann einen oder mehrere interne Caches für Thread-Anweisungen und Daten beinhalten. Zusätzlich kann das 3D/Medien-Subsystem 1615 auch gemeinsam genutzten Speicher beinhalten, einschließlich Registern und adressierbarem Speicher, um Daten zwischen Threads gemeinsam zu nutzen und Ausgabedaten zu speichern.
  • 16B veranschaulicht einen Grafikprozessor 1620, der eine Variante des Grafikprozessors 1600 ist und an Stelle des Grafikprozessors 1600 verwendet werden kann und umgekehrt. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit dem Grafikprozessor 1600 hierin auch eine entsprechende Kombination mit dem Grafikprozessor 1620, ist aber nicht darauf beschränkt. Der Grafikprozessor 1620 weist gemäß hierin beschriebenen Ausführungsformen eine Tile-Architektur auf. Der Grafikprozessor 1620 kann einen Grafikverarbeitungsmaschinen-Cluster 1622 mit mehreren Instanzen der Grafikverarbeitungsmaschine 1610 der 16A innerhalb eines Grafikmaschinen-Tile 1610A bis 1610D beinhalten. Jedes Grafik-Maschinen-Tile 1610A bis 1610D kann über einen Satz von Tile-Verbindungen 1623A bis 1623F miteinander verbunden sein. Jedes Grafikmaschinen-Tile 1610A bis 1610D kann auch über Speicherverbindungen 1625A bis 1625D mit einem Speichermodul oder einer Speichervorrichtung 1626A bis 1626D verbunden sein. Die Speichervorrichtungen 1626A bis 1626D können jede Grafikspeichertechnologie verwenden. Zum Beispiel können die Speichervorrichtungen 1626A bis 1626D ein Grafikspeicher mit doppelter Datenrate (GDDR) sein. Die Speichervorrichtungen 1626A bis 1626D können Hochbandbreitenspeicher-(HBM)-Module sein, die sich mit ihrem jeweiligen Grafikmaschinen-Tile 1610A bis 1610D auf dem Die befinden können. Die Speichervorrichtungen 1626A bis 1626D können gestapelte Speichervorrichtungen sein, die auf ihren jeweiligen Grafikmaschinen-Tiles 1610A - 1610D gestapelt werden können. Jedes Grafikmaschinen-Tile 1610A bis 1610D und der assoziierte Speicher 1626A bis 1626D können sich auf separaten Chiplets befinden, die an einen Basis-Die oder ein Basis-Substrat gebondet sind, wie in den 24B bis 24D ausführlicher beschrieben ist.
  • Der Grafikprozessor 1620 kann mit einem nicht einheitlichem Speicherzugriffssystem (NUMA-System), bei dem die Speichervorrichtungen 1626A bis 1626D mit assoziierten Grafikmodul-Tiles 1610A-1610D gekoppelt sind, konfiguriert sein. Auf eine gegebene Speichervorrichtung können andere Grafikmaschinen-Tiles als das Tile, mit dem sie direkt verbunden ist, zugegriffen werden. Jedoch kann die Zugriffslatenz auf die Speichervorrichtungen 1626A bis 1626D am niedrigsten sein, wenn auf ein lokales Tile zugegriffen wird. Bei einer Ausführungsform ist ein kohärentes CacheNUMA-System (ccNUMA-System) aktiviert, das die Tile-Verbindungen 1623A bis 1623F verwendet, um Kommunikation zwischen Cache-Controllern innerhalb der Grafikmaschinen-Tiles 1610A bis 1610D zu ermöglichen, um eine konsistente Speicherabbildung beizubehalten, wenn mehr als ein Cache dieselbe Speicherstelle speichert.
  • Der Grafikverarbeitungsmaschinen-Cluster 1622 kann mit einer auf dem Chip oder auf dem Package befindlichen Verbindungsstruktur 1624 verbunden sein. Die Verbindungsstruktur 1624 kann die Kommunikation zwischen den Grafikmaschinen-Tiles 1610A bis 1610D, und Bauelemente wie dem Video-Codec 1606 und einer oder mehreren Kopiermaschinen 1604 ermöglichen. Die Kopiermaschinen 1604 können verwendet werden, um Daten aus den, in und zwischen den Speichervorrichtungen 1626A bis 1626D und einem Speicher außerhalb des Grafikprozessors 1620 (zum Beispiel Systemspeicher) zu bewegen. Die Verbindungsstruktur 1624 kann auch verwendet werden, um die Grafikmaschinen-Tiles 1610A bis 1610D zu verbinden. Der Grafikprozessor 1620 kann optional eine Anzeigesteuerung 1602 beinhalten, um eine Verbindung mit einer externen Anzeigevorrichtung 1618 zu ermöglichen. Der Grafikprozessor kann auch als Grafik- oder Rechenbeschleuniger konfiguriert sein. Bei der Beschleunigerkonfiguration können der Anzeigecontroller 1602 und die Anzeigevorrichtung 1618 weggelassen werden.
  • Der Grafikprozessor 1620 kann sich über eine Host-Schnittstelle 1628 mit einem Host-System verbinden. Die Host-Schnittstelle 1628 kann eine Kommunikation zwischen dem Grafikprozessor 1620, dem Systemspeicher und/oder anderen Systembauelementen ermöglichen. Die Host-Schnittstelle 1628 kann beispielsweise ein PCI-Express-Bus oder eine andere Art von Host-System-Schnittstelle sein.
  • 16C veranschaulicht einen Rechenbeschleuniger 1630 gemäß hierin beschriebenen Ausführungsformen. Der Rechenbeschleuniger 1630 kann architektonische Ähnlichkeiten mit dem Grafikprozessor 1620 der 16B aufweisen und ist für die Rechenbeschleunigung optimiert. Ein Rechenmaschinen-Cluster 1632 kann einen Satz von Rechenmaschinen-Tiles 1640A bis 1640D beinhalten, die Ausführungslogik, die für parallele oder vektorbasierte Mehrzweck-Rechenoperationen optimiert ist, beinhalten. Die Rechenmaschinen-Tiles 1640A bis 1640D können keine Grafikverarbeitungslogik mit Festfunktion beinhalten, obwohl bei einigen Ausführungsformen ein oder mehrere der Rechenmaschinen-Tiles 1640A bis 1640D eine Logik zum Ausführen einer Medienbeschleunigung beinhalten können. Die Rechenmaschinen-Tiles 1640A bis 1640D können über Speicherverbindungen 1625A bis 1625D mit dem Speicher 1626A bis 1626D verbunden werden. Der Speicher 1626A bis 1626D und die Speicherverbindungen 1625A bis 1625D können eine ähnliche Technologie wie in dem Grafikprozessor 1620 aufweisen oder können unterschiedlich sein. Die Grafik-Rechenmaschinen-Tiles 1640A bis 1640D können auch über einen Satz von Tile-Verbindungen 1623A bis 1623F miteinander verbunden sein und können mit einer Verbindungsstruktur 1624 verbunden und/oder durch diese verbunden sein. Bei einer Ausführungsform beinhaltet der Rechenbeschleuniger 1630 einen großen L3-Cache 1636, der als ein geräteweiter Cache konfiguriert werden kann. Der Rechenbeschleuniger 1630 kann auch über eine Host-Schnittstelle 1628 in ähnlicher Weise wie der Grafikprozessor 1620 der 16B mit einem Hostprozessor und Speicher verbunden sein.
  • Grafikverarbeitungsmaschine
  • 17 ist ein Blockschaltbild einer Grafikverarbeitungsmaschine 1710 eines Grafikprozessors gemäß einigen Ausführungsformen. Die Grafikverarbeitungsmaschine (GPE) 1710 kann eine Version der GPE 1610 sein, die in 16A gezeigt ist, und kann auch ein Grafikmaschinen-Tile 1610A bis 1610D der 16B darstellen. Die Elemente der 17, die den gleichen oder ähnlichen Namen wie die Elemente einer anderen Figur aufweisen, beschreiben hierin die gleichen Elemente wie in den anderen Figuren, arbeiten oder funktionieren ähnlich, können die gleichen Bauelemente umfassen und mit anderen Entitäten verknüpft werden, wie diejenigen, die an anderer Stelle hierin beschrieben sind, sind jedoch nicht darauf beschränkt. Zum Beispiel sind die 3D-Pipeline 1612 und die Medienpipeline 1616 der 16A in 17 veranschaulicht. Die Medienpipeline 1616 ist bei einigen Ausführungsformen der GPE 1710 optional und ist möglicherweise nicht explizit in der GPE 1710 enthalten. Zum Beispiel und bei mindestens einer Ausführungsform ist ein separater Medien- und/oder Bildprozessor mit der GPE 1710 gekoppelt.
  • Die GPE 1710 kann mit einem Befehlsstreamer 1703 koppeln oder diesen beinhalten, der einen Befehlsstream an die 3D-Pipeline 1612 und/oder die Medienpipelines 1616 bereitstellt. Alternativ oder zusätzlich kann der Befehlsstreamer 1703 direkt mit einem vereinheitlichen Rückgabepuffer 1718 gekoppelt sein. Der vereinheitlichte Rückgabepuffer 1718 kann kommunikativ an ein Grafikkern-Array 1714 gekoppelt sein. Optional ist der Befehlsstreamer 1703 mit Speicher gekoppelt, der Systemspeicher oder einer oder mehrere von internem Cache-Speicher und gemeinsam genutztem Cache-Speicher sein kann. Der Befehlsstreamer 1703 kann Befehle von dem Speicher empfangen und die Befehle an die 3D-Pipeline 1612 und/oder die Medienpipeline 1616 senden. Die Befehle sind An, die aus einem Ringpuffer abgerufen werden, der Befehle für die 3D-Pipeline 1612 und die Medienpipeline 1616 speichert. Der Ringpuffer kann zusätzlich Batch-Befehlspuffer beinhalten, die Batches mehrerer Befehle speichern. Die Befehle für die 3D-Pipeline 1612 können auch Verweise auf im Speicher gespeicherte Daten beinhalten, wie etwa unter anderen Eckpunkt- und Geometriedaten für die 3D-Pipeline 1612 und/oder Bilddaten und Speicherobjekte für die Medienpipeline 316. Die 3D-Pipeline 1612 und die Medienpipeline 1616 verarbeiten die Befehle und Daten, indem sie Operationen über eine Logik innerhalb der jeweiligen Pipelines ausführen oder einen oder mehrere Ausführungs-Threads an das Grafikkern-Array 1714 senden. Das Grafikkern-Array 1714 kann einen oder mehrere Blöcke von Grafikkernen beinhalten (zum Beispiel Grafikkern(e) 1715A, Grafikkern(e) 1715B), wobei jeder Block einen oder mehrere Grafikkerne beinhaltet. Jeder Grafikkern beinhaltet einen Satz von Grafikausführungsressourcen, die Allzweck- und grafikspezifische Ausführungslogik zum Ausführen von Grafik- und Rechenoperationen sowie Texturverarbeitung mit fester Funktion und/oder maschinelles Lernen und Beschleunigungslogik für künstliche Intelligenz umfassen.
  • Bei verschiedenen Ausführungsformen kann die 3D-Pipeline 1612 Festfunktionen und programmierbare Logik beinhalten, um ein oder mehrere Shader-Programme zu verarbeiten, wie etwa Vertex-Shader, Geometrie-Shader, Pixel-Shader, Fragment-Shader, Compute-Shader oder andere Shader-Programme, indem die Anweisungen verarbeitet und Ausführungs-Threads zu dem Grafikkern-Array 1714 versandt. Das Grafikkern-Array 1714 stellt einen einheitlichen Block von Ausführungsressourcen zur Verwendung bei der Verarbeitung dieser Shader-Programme bereit. Mehrzweck-Ausführungslogik (zum Beispiel Ausführungseinheiten) innerhalb des/der Grafikkerne 1715A-1714B des Grafikkern-Array 1714 beinhaltet Unterstützung für verschiedene 3D-API-Shader-Sprachen und kann mehrere gleichzeitige Ausführungs-Threads, die mit mehreren Shadern assoziiert sind, ausführen.
  • Das Grafikkern-Array 1714 kann eine Ausführungslogik umfassen, um Medienfunktionen, wie etwa Video- und/oder Bildverarbeitung, auszuführen. Die Ausführungseinheiten können eine Allzwecklogik beinhalten, die zusätzlich zu Grafikverarbeitungsoperationen programmierbar ist, um parallele Allzweck-Rechenoperationen auszuführen. Die Allzwecklogik kann Verarbeitungsoperationen parallel oder in Verbindung mit der Allzwecklogik innerhalb des Prozessorkerns bzw. der Prozessorkerne 1407 der 14 oder des Kerns 1502A bis 1502N, wie in 15A, ausführen.
  • Ausgabedaten, die von Threads erzeugt werden, die auf dem Grafikkern-Array 1714 ausgeführt werden, können Daten an den Speicher in einem vereinheitlichten Rückgabepuffer (URB) 1718 ausgeben. Der URB 1718 kann Daten für mehrere Threads speichern. Der URB 1718 kann verwendet werden, um Daten zwischen unterschiedlichen Threads, die auf dem Grafikkern-Array 1714 ausgeführt werden, zu senden. Der URB 1718 kann zusätzlich zur Synchronisation zwischen Threads auf dem Grafikkern-Array 1714 und Festfunktionslogik innerhalb der Shared-Function-Logik 1720 verwendet werden.
  • Optional kann das Grafikkern-Array 1714 derart skalierbar sein, dass das Array eine variable Anzahl von Grafikkernen beinhaltet, von denen jeder eine variable Anzahl von Ausführungseinheiten basierend auf dem Zielleistungs- und Performanzniveau des GPE 1710 aufweist. Die Ausführungsressourcen können derart dynamisch skalierbar sein, dass Ausführungsressourcen nach Bedarf aktiviert oder deaktiviert werden können.
  • Das Grafikkern-Array 1714 ist mit einer Shared-Function-Logik 1720 gekoppelt, die mehrere Ressourcen beinhaltet, die von den Grafikkernen in dem Grafikkern-Array gemeinsam genutzt werden. Die gemeinsam genutzten Funktionen innerhalb der Shared-Function-Logik 1720 sind Hardware-Logikeinheiten, die dem Grafikkern-Array 1714 spezialisierte Zusatzfunktionen bereitstellen. Bei verschiedenen Ausführungsformen beinhaltet die gemeinsam genutzte Funktionslogik 1720, ohne aber darauf beschränkt zu sein, Sampler 1721, Mathematik 1722 und Inter-Thread-Kommunikationslogik (ITC-Logik) 1723. Zusätzlich können ein oder mehrere Cache(s) 1725 innerhalb der Shared-Function-Logik 1720 implementiert werden.
  • Eine gemeinsame Funktion wird zumindest in einem Fall implementiert, in dem die Nachfrage nach einer bestimmten spezialisierten Funktion für die Aufnahme in das Grafikkern-Array 1714 nicht ausreicht. Stattdessen wird eine einzelne Instanziierung dieser spezialisierten Funktion als eigenständige Einheit in der Shared-Function-Logik 1720 implementiert und von den Ausführungsressourcen innerhalb des Grafikkern-Array 1714 gemeinsam genutzt. Der genaue Satz von Funktionen, die mit dem Grafikkern-Array 1714 gemeinsam genutzt werden und in dem Grafikkern-Array 1714 enthalten sind, variiert je nach Ausführungsform. Spezifische gemeinsam genutzte Funktionen innerhalb der Shared-Function-Logik 1720, die ausgiebig von dem Grafikkern-Array 1714 verwendet werden, können in der Shared-Function-Logik 1716 innerhalb des Grafikkern-Array 1714 enthalten sein. Optional kann die gemeinsam genutzte Funktionslogik 1716 innerhalb des Grafikkern-Array 1714 einige oder die gesamte Logik in der Shared-Function-Logik 1720 beinhalten. Alle Logikelemente innerhalb der Shared-Function-Logik 1720 können innerhalb der Shared-Function-Logik 1716 des Grafikkern-Array 1714 dupliziert werden. Alternativ wird die Shared-Function-Logik 1720 zugunsten der Shared-Function-Logik 1716 innerhalb des Grafikkern-Array 1714 ausgeschlossen.
  • Ausführungseinheiten
  • Die 18A-18B veranschaulichen die Thread-Ausführungslogik 1800 einschließlich eines Array von Verarbeitungselementen, die in einem Grafikprozessorkern gemäß hierin beschriebenen Ausführungsformen verwendet werden. Die Elemente der 18A bis 18B, die den gleichen oder ähnlichen Namen wie die Elemente einer anderen Figur aufweisen, beschreiben hierin die gleichen Elemente wie in den anderen Figuren, arbeiten und funktionieren ähnlich, können die gleichen Bauelemente umfassen und mit anderen Entitäten verknüpft werden, wie diejenigen, die an anderer Stelle hierin beschrieben sind, sind jedoch nicht darauf beschränkt. Die 18A-18B veranschaulicht einen Überblick über die Thread-Ausführungslogik 1800, die für die Hardwarelogik repräsentativ sein kann, die mit jedem Sub-Kern 1521A bis 1521F der 18B dargestellt ist. 18A ist für eine Ausführungseinheit innerhalb eines Allzweck-Grafikprozessors repräsentativ, während 18B für eine Ausführungseinheit, die in einem Rechenbeschleuniger verwendet werden kann, repräsentativ ist.
  • Wie in 18A veranschaulicht, kann die Thread-Ausführungslogik 1800 einen Shader-Prozessor 1802, einen Thread-Dispatcher 1804, einen Befehls-Cache 1806, ein skalierbares Ausführungseinheiten-Array mit mehreren Ausführungseinheiten 1808A bis 1808N, einen Sampler 1810, einen gemeinsam genutzten lokalen Speicher 1811, einen Daten-Cache 1812 und einen Datenport 1814 beinhalten. Optional kann das skalierbare Ausführungseinheiten-Array dynamisch skalieren, indem eine oder mehrere Ausführungseinheiten (zum Beispiel eine der Ausführungseinheiten 1808A, 1808B, 1808C, 1808D bis 1808N-1 und 1808N) basierend auf den Rechenanforderungen einer Arbeitslast aktiviert oder deaktiviert werden. Die enthaltenen Bauelemente können über eine Verbindungsstruktur, die mit jedem der Bauelemente verknüpft ist, verbunden sein. Die Thread-Ausführungslogik 1800 kann eine oder mehrere Verbindungen zu einem Speicher, wie etwa einem Systemspeicher oder einem Cache-Speicher, über einen oder mehrere von Befehls-Cache 1806, Datenport 1814, Sampler 1810 und Ausführungseinheiten 1808A bis 1808N beinhalten. Jede Ausführungseinheit (zum Beispiel 1808A) kann eine eigenständige programmierbare Allzweckrecheneinheit sein, die in der Lage ist, mehrere gleichzeitige Hardware-Threads auszuführen, während mehrere Datenelemente parallel für jeden Thread verarbeitet werden. Bei verschiedenen Ausführungsformen ist das Array von Ausführungseinheiten 1808A bis 1808N skalierbar, um eine beliebige Anzahl einzelner Ausführungseinheiten zu beinhalten.
  • Die Ausführungseinheiten 1808A bis 1808N können hauptsächlich verwendet werden, um Shader-Programme auszuführen. Ein Shader-Prozessor 1802 kann die verschiedenen Shader-Programme verarbeiten und Ausführungs-Threads, die den Shader-Programmen zugeordnet sind, über einen Thread-Dispatcher 1804 verteilen. Der Thread-Dispatcher kann Logik beinhalten, um Thread-Initiierungsanforderungen von den Grafik- und Medienpipelines zu vermitteln und die angeforderten Threads auf einer oder mehreren Ausführungseinheiten 1808A bis 1808N zu instanziieren. Beispielsweise kann ein Geometrie-Pipeline Vertex-, Tessellation- oder Geometrie-Shader zur Verarbeitung an die Thread-Ausführungslogik versenden. Optional kann der Thread-Dispatcher 1804 auch Laufzeit-Thread-Spawning-Anforderungen von den ausführenden Shader-Programmen verarbeiten.
  • Die Ausführungseinheiten 1808A bis 1808N können einen Anweisungssatz unterstützen, der native Unterstützung für viele standardmäßige 3D-Grafik-Shader-Anweisung derart beinhaltet, dass Shader-Programme von Grafikbibliotheken (zum Beispiel Direct 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen Vertex- und Geometrieverarbeitung (zum Beispiel Vertex-Programme, Geometrieprogramme, Vertex-Shader), Pixel-Verarbeitung (zum Beispiel Pixel-Shader, Fragment-Shader) und Allzweck-Verarbeitung (zum Beispiel Rechen- und Medien-Shader). Jede der Ausführungseinheiten 1808A bis 1808N ist in der Lage, Mehrfachausgabe-Einzelbefehl-Mehrfachdaten-Ausführungen (SIMD-Ausführungen) auszuführen, und Multithread-Betrieb ermöglicht eine effiziente Ausführungsumgebung angesichts von Speicherzugriffen mit höherer Latenzzeit. Jeder Hardware-Thread innerhalb jeder Ausführungseinheit weist eine dedizierte Registerdatei mit hoher Bandbreite und einen assoziierten unabhängigen Thread-Zustand auf. Die Ausführung erfolgt mehrfach pro Takt an Pipelines, die Gleitkommaoperationen mit ganzer, einfacher und doppelter Genauigkeit, SIMD-Verzweigungsfähigkeit, logische Operationen, transzendente Operationen und andere diverse Operationen ausführen können. Während auf Daten aus dem Speicher oder einer der gemeinsam genutzten Funktionen gewartet wird, bewirkt die Abhängigkeitslogik innerhalb der Ausführungseinheiten 1808A bis 1808N, dass ein wartender Thread in den Ruhezustand versetzt wird, bis die angeforderten Daten zurückgegeben wurden. Während der wartende Thread schläft, können Hardwareressourcen zur Verarbeitung anderer Threads verwendet werden. Während einer Verzögerung, die mit einer Vertex-Shader-Operation verbunden ist, kann eine Ausführungseinheit beispielsweise Operationen für einen Pixel-Shader, Fragment-Shader oder eine andere Art von Shader-Programm ausführen, einschließlich eines unterschiedlichen Vertex-Shaders, wie der Vertex-Shader 2107, der in 21 veranschaulicht ist. Verschiedene Ausführungsformen können als Alternative zur Verwendung von SIMD oder zusätzlich zur Verwendung von SIMD für die Verwendung der Ausführung unter Verwenden von Single Instruction Multiple Thread (SIMT) gelten. Ein Verweis auf einen SIMD-Kern oder eine SIMD-Operation kann auch für SIMT gelten oder für SIMD in Kombination mit SIMT gelten.
  • Jede Ausführungseinheit in den Ausführungseinheiten 1808A bis 1808N arbeitet mit Arrays von Datenelementen. Die Anzahl der Datenelemente ist die „Ausführungsgröße“, oder die Anzahl der Kanäle für die Anweisung. Ein Ausführungskanal ist eine logische Ausführungseinheit für Datenelementzugriff, Maskieren und Flusskontrolle innerhalb von Anweisungen. Die Anzahl der Kanäle kann unabhängig von der Anzahl der physischen arithmetischen Logikeinheiten (ALUs), Gleitkommaeinheiten (FPUs) oder anderen Logikeinheiten (zum Beispiel Tensor-Kerne, Raytracing-Kerne usw.) für einen bestimmten Grafikprozessor sein. Außerdem können die Ausführungseinheiten 1808A bis 1808N Integer- und Gleitkomma-Datentypen unterstützen.
  • Der Befehlssatz der Ausführungseinheit beinhaltet SIMD-Befehle. Die verschiedenen Datenelemente können als gepackter Datentyp in einem Register gespeichert werden, und die Ausführungseinheit verarbeitet die verschiedenen Elemente basierend auf der Datengröße der Elemente. Wenn beispielsweise an einem 256-Bit breiten Vektor gearbeitet wird, werden die 256 Bit des Vektors in einem Register gespeichert und die Ausführungseinheit arbeitet mit dem Vektor als vier separate 184-Bit-gepackte Datenelemente (Quad-Word (QW)-Größendatenelementen), acht separate gepackte 32-Bit-Datenelemente (Datenelemente mit doppelter Wortgröße (DW), sechzehn separate gepackte 16-Bit-Datenelemente (Datenelemente mit Wortgröße (W)) oder zweiunddreißig separate 8-Bit-Datenelemente (Datenelemente der Größe Byte (B)). Es sind jedoch unterschiedliche Vektorbreiten und Registergrößen möglich.
  • Optional können eine oder mehrere Ausführungseinheiten zu einer fusionierten Ausführungseinheit 1809A bis 1809N mit einer Thread-Steuerlogik (1807A bis 1807N) kombiniert werden, die den fusionierten EUs gemeinsam ist. Mehrere EUs können zu einer EU-Gruppe fusioniert werden. Jede EU in der fusionierten EU-Gruppe kann konfiguriert werden, um einen separaten SIMD-Hardware-Thread auszuführen. Die Anzahl der EUs in einer fusionierten EU-Gruppe kann gemäß Ausführungsformen variieren. Zusätzlich können verschiedene SIMD-Breiten pro EU ausgeführt werden, einschließlich, aber nicht beschränkt auf SIMD8, SIMD16 und SIMD32. Jede fusionierte Grafikausführungseinheit 1809A bis 1809N beinhaltet mindestens zwei Ausführungseinheiten. Zum Beispiel beinhaltet die fusionierte Ausführungseinheit 1809A eine erste EU 1808A, eine zweite EU 1808B und eine Thread-Steuerlogik 1807A, die der ersten EU 1808A und der zweiten EU 1808B gemeinsam ist. Die Thread-Steuerlogik 1807A steuert Threads, die auf der fusionierten Grafikausführungseinheit 1809A ausgeführt werden, was es jeder EU innerhalb der fusionierten Ausführungseinheiten 1809A bis 1809N erlaubt, unter Verwenden eines gemeinsamen Befehlszeigerregisters auszuführen.
  • Ein oder mehrere interne Befehls-Caches (zum Beispiel 1806) sind in der Thread-Ausführungslogik 1800 beinhaltet, um Thread-Befehle für die Ausführungseinheiten zwischenzuspeichern. Ein oder mehrere Daten-Caches (zum Beispiel 1812) können in der Thread-Ausführungslogik 1800 enthalten sein, um Thread-Daten während der Thread-Ausführung zwischenzuspeichern. Threads, die auf der Ausführungslogik 1800 ausgeführt werden, können auch explizit verwaltete Daten in dem gemeinsam genutzten lokalen Speicher 1811 speichern. Ein Sampler 1810 kann enthalten sein, um ein Textur-Sampling für 3D-Operationen und ein Medien-Sampling für Medienoperationen bereitzustellen. Der Sampler 1810 kann eine spezielle Textur- oder Medien-Sampling-Funktion beinhalten, um Textur- oder Mediendaten während des -Sampling-Prozesses, bevor die gesampelten Daten an eine Ausführungseinheit geliefert werden, zu verarbeiten.
  • Während der Ausführung senden die Grafik- und Medienpipelines Thread-Initiierungsanforderungen an die Thread-Ausführungslogik 1800 über die Thread-Spawn- und Dispatch-Logik. Sobald eine Gruppe geometrischer Objekte verarbeitet und in Pixeldaten gerastert wurde, wird die Pixelprozessorlogik (zum Beispiel Pixel-Shader-Logik, Fragment-Shader-Logik usw.) innerhalb des Shader-Prozessors 1802 aufgerufen, um weitere Ausgabeinformationen zu berechnen und zu veranlassen, dass Ergebnisse zu Ausgabeoberflächen (zum Beispiel Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.) geschrieben werden. Ein Pixel-Shader oder Fragment-Shader kann die Werte der verschiedenen Eckpunktattribute, die über das gerasterte Objekt interpoliert werden sollen. Die Pixelprozessorlogik innerhalb des Shader-Prozessors 1802 kann dann ein von der Anwendungsprogrammierschnittstelle (API) bereitgestelltes Pixel- oder Fragment-Shader-Programm ausführen. Um das Shader-Programm auszuführen, versendet der Shader-Prozessor 1802 Threads über den Thread-Dispatcher 1804 an eine Ausführungseinheit (zum Beispiel 1808A). Der Shader-Prozessor 1802 kann Textur-Sampling-Logik in dem Sampler 1810 verwenden, um auf Texturdaten in Texturabbildungen zuzugreifen, die im Speicher gespeichert sind. Arithmetische Operationen an den Texturdaten und den eingegebenen Geometriedaten berechnen Pixelfarbdaten für jedes geometrische Fragment oder verwerfen ein oder mehrere Pixel aus der weiteren Verarbeitung.
  • Zusätzlich kann der Datenport 1814 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 1800 bereitstellen, um verarbeitete Daten an den Speicher zur weiteren Verarbeitung auf einer Grafikprozessor-Ausgabepipeline auszugeben. Der Datenport 1814 kann einen oder mehrere Cache-Speicher (zum Beispiel den Daten-Cache 1812) beinhalten oder damit gekoppelt sein, um Daten für den Speicherzugriff über den Datenport 1814 zwischenzuspeichern.
  • Optional kann die Ausführungslogik 1800 auch einen Raytracer 1805 beinhalten, der eine Raytracing-Beschleunigungsfunktionalität bereitstellen kann. Der Raytracer 1805 kann einen Raytracing-Anweisungssatz unterstützen, der Anweisungen/Funktionen zur Strahlerzeugung enthält. Der Raytracing-Anweisungssatz kann dem Raytracing-Anweisungssatz, der von den Raytracing-Kernen 372 in 3C unterstützt wird, ähnlich oder davon unterschiedlich sein.
  • 18B veranschaulicht beispielhafte interne Details einer Ausführungseinheit 1808. Eine Grafikausführungseinheit 1808 kann eine Anweisungsabrufeinheit 1837, ein allgemeines Registerdatei-Array (GRF) 1824, ein Architekturregisterdatei-Array (ARF) 1826, einen Thread-Arbiter 1822, eine Sendeeinheit 1830, eine Verzweigungseinheit 1832, eine Menge von SIMD-Gleitkommaeinheiten (FPUs) 1834 und optional einen Satz dedizierter ganzzahliger SIMD ALUs 1835 beinhalten. Das GRF 1824 und das ARF 1826 beinhalten den Satz allgemeiner Registerdateien und Architekturregisterdateien, die mit jedem gleichzeitigen Hardware-Thread, der in der Grafikausführungseinheit 1808 aktiv sein kann, assoziiert sind. Der Architekturstatus pro Thread kann in dem ARF 1826 geführt werden, während Daten, die während der Thread-Ausführung verwendet werden, in dem GRF 1824 gespeichert werden. Der Ausführungszustand jedes Threads, einschließlich der Anweisungszeiger für jeden Thread, kann in Thread-spezifischen Registern in dem ARF 1826 geführt werden.
  • Die Grafikausführungseinheit 1808 kann eine Architektur aufweisen, die eine Kombination aus Simultaneous Multi-Threading (SMT) und feinkörnigem Interleaved Multi-Threading (IMT) ist. Die Architektur kann eine modulare Konfiguration aufweisen, die zur Entwurfszeit basierend auf einer Zielanzahl gleichzeitiger Threads und einer Anzahl von Registern pro Ausführungseinheit fein abgestimmt werden kann, wobei die Ressourcen der Ausführungseinheit auf die Logik aufgeteilt werden, die zum Ausführen mehrerer gleichzeitiger Threads verwendet wird. Die Anzahl logischer Threads, die von der Grafikausführungseinheit 1808 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.
  • Optional kann die Grafikausführungseinheit 1808 mehrere Anweisungen gemeinsam ausgeben, die jeweils unterschiedliche Anweisungen sein können. Der Thread-Arbiter 1822 des Grafikausführungseinheit-Thread 1808 kann die Anweisungen zur Ausführung an eine der Sendeeinheit 1830, der Verzweigungseinheit 1832 oder der SIMD-FPU(s) 1834 senden. Jeder Ausführungs-Thread kann auf Universalregister innerhalb des GRF 1824 zugreifen 128, wobei jedes Register 32 Bytes speichern kann, auf die als ein SIMD-8-Element-Vektor von 32-Bit-Datenelementen zugegriffen werden kann. Jeder Ausführungseinheits-Thread kann Zugriff auf 4 KByte innerhalb des GRF 1824 aufweisen, obwohl Ausführungsformen nicht darauf beschränkt sind und bei anderen Ausführungsformen mehr oder weniger Registerressourcen bereitgestellt werden können. Die Grafikausführungseinheit 1808 kann in sieben Hardware-Threads unterteilt sein, die unabhängig Rechenoperationen ausführen können, obwohl die Anzahl von Threads pro Ausführungseinheit auch gemäß Ausführungsformen variieren kann, zum Beispiel können bis zu 16 Hardware-Threads unterstützt werden. Bei einer beispielhaften Ausführungsform, bei der sieben Threads auf 4 KByte zugreifen können, kann das GRF 1824 insgesamt 28 KByte speichern. Bei einer anderen beispielhaften Ausführungsform, bei der 16 Threads auf 4 KB zugreifen können, kann das GRF 1824 insgesamt 64 KB speichern. Die Anzahl der Threads pro Ausführungseinheit ist jedoch nicht auf diese Beispiele beschränkt und kann größer oder kleiner als die angegebenen Zahlen sein. Flexible Adressierungsmodi können erlauben, dass Register gemeinsam adressiert werden, um effektiv breitere Register aufzubauen oder gestaffelte rechteckige Blockdatenstrukturen darzustellen.
  • Zusätzlich oder alternativ können Speicheroperationen, Samplingoperationen und andere Systemkommunikationen mit längerer Latenz über „Sende“-Anweisungen verteilt werden, die von der Meldungsweiterleitungs-Sendeeinheit 1830 ausgeführt werden. Verzweigungsanweisungen können an eine dedizierte Verzweigungseinheit 1832 versandt werden, um die SIMD-Divergenz und eventuelle Konvergenz zu erleichtern.
  • Die Grafikausführungseinheit 1808 kann eine oder mehrere SIMD-Gleitkommaeinheiten (FPU(s)) 1834 beinhalten, um Gleitkommaoperationen auszuführen. Die FPU(s) 1834 können auch Ganzzahlberechnungen unterstützen. In einigen Fällen können die FPU(s) 1834 bis zur Anzahl M von 32-Bit-Gleitkommaoperationen (oder Integer-Operationen) SIMD-ausführen oder bis zu 2 M 16-Bit-Integer- oder 16-Bit-Gleitkommaoperationen SIMD-ausführen. Optional stellt mindestens eine der FPU(s) erweiterte mathematische Fähigkeiten bereit, um transzendentale mathematische Funktionen mit hohem Durchsatz und 184-Bit-Gleitkomma mit doppelter Präzision zu unterstützen. Ein Satz von 8-Bit-Ganzzahl-SIMD-ALUs 1835 kann ebenfalls vorhanden sein und kann speziell optimiert sein, um Operationen, die mit Berechnungen des maschinellen Lernens verbunden sind, auszuführen.
  • Optional können Arrays mehrerer Instanzen der Grafikausführungseinheit 1808 in einer Grafik-Sub-Kerngruppierung (zum Beispiel einer Sub-Slice) instanziiert werden. Aus Gründen der Skalierbarkeit können Produktarchitekten die genaue Anzahl von Ausführungseinheiten pro Sub-Kern-Gruppierung auswählen. Die Ausführungseinheit 1808 kann Anweisungen über eine Vielzahl von Ausführungskanälen ausführen. Außerdem kann jeder auf der Grafikausführungseinheit 1808 ausgeführte Thread auf einem unterschiedlichen Kanal ausgeführt werden.
  • 19 veranschaulicht eine weitere beispielhafte Ausführungseinheit 1900. Die Elemente der 19, die den gleichen oder ähnlichen Namen wie die Elemente einer anderen Figur aufweisen, beschreiben hierin die gleichen Elemente wie in den anderen Figuren, arbeiten und funktionieren ähnlich, können die gleichen Bauelemente umfassen und mit anderen Entitäten verknüpft werden, wie diejenigen, die an anderer Stelle hierin beschrieben sind, sind jedoch nicht darauf beschränkt. Die Ausführungseinheit 1900 kann eine rechenoptimierte Ausführungseinheit zur Verwendung beispielsweise in einem Rechenmaschinen-Tile 1640A bis 1640D, wie in 16C, sein, ist jedoch nicht darauf beschränkt. Die Ausführungseinheit 1900 kann auch in einem Grafikmaschinen-Tile 1610A bis 1610D, wie in 16B, verwendet werden. Die Ausführungseinheit 1900 kann eine Thread-Steuereinheit 1901, eine Thread-Zustandseinheit 1902, eine Anweisungsabruf-/Vorabrufeinheit 1903 und eine Anweisungsdecodiereinheit 1904 beinhalten. Die Ausführungseinheit 1900 kann zusätzlich eine Registerdatei 1906 beinhalten, die Register speichert, die Hardware-Threads innerhalb der Ausführungseinheit zugewiesen werden können. Die Ausführungseinheit 1900 kann zusätzlich eine Sendeeinheit 1907 und eine Verzweigungseinheit 1908 beinhalten. Die Sendeeinheit 1907 und die Verzweigungseinheit 1908 können ähnlich wie die Sendeeinheit 1830 und eine Verzweigungseinheit 1832 der Grafikausführungseinheit 1808 der 18B arbeiten.
  • Die Ausführungseinheit 1900 kann auch eine Recheneinheit 1910 beinhalten, die mehrere unterschiedliche Typen von Funktionseinheiten umfasst. Die Recheneinheit 1910 kann auch eine ALU-Einheit 1911 beinhalten, die ein Array arithmetischer Logikeinheiten enthält. Die ALU-Einheit 1911 kann konfiguriert sein, um 64-Bit-, 32-Bit- und 16-Bit-Ganzzahl- und Gleitkommaoperationen auszuführen. Ganzzahl- und Gleitkommaoperationen können gleichzeitig ausgeführt werden. Die Recheneinheit 1910 kann auch ein systolisches Array 1912 und eine mathematische Einheit 1913 beinhalten. Das systolische Array 1912 beinhaltet ein W breites und D tiefes Netzwerk von Datenverarbeitungseinheiten, die verwendet werden können, um Vektor- oder andere datenparallele Operationen auf systolische Weise auszuführen. Das systolische Array 1912 kann konfiguriert sein, um Matrixoperationen auszuführen, wie beispielsweise Matrix-Skalarproduktoperationen. Das systolische Array 1912 kann 16-Bit-Gleitkommaoperationen sowie 8-Bit- und 4-Bit-Ganzzahloperationen unterstützen. Das systolische Array 1912 kann konfiguriert sein, um Vorgänge zum maschinellen Lernen zu beschleunigen. Das systolische Array 1912 kann mit Unterstützung für bfloat16, einem 16-Bit-Gleitkommaformat, konfiguriert werden. Eine mathematische Einheit 1913 kann enthalten sein, um eine bestimmte Teilmenge mathematischer Operationen auf effiziente Weise und mit geringerer Leistung als die ALU-Einheit 1911 auszuführen. Die mathematische Einheit 1913 kann mathematische Logik beinhalten, die man in einer Logik mit gemeinsam genutzter Funktion einer Grafikverarbeitungsmaschine findet, die von anderen beschriebenen Ausführungsformen bereitgestellt wird, wie zum Beispiel die mathematische Logik 1722 der Schared-Function-Logik 1720 der 17. Die mathematische Einheit 1913 kann konfiguriert sein, um 32-Bit- und 64-Bit-Gleitkommaoperationen auszuführen.
  • Die Thread-Steuereinheit 1901 beinhaltet Logik zum Steuern der Ausführung von Threads innerhalb der Ausführungseinheit. Die Thread-Steuereinheit 1901 kann Thread-Arbitrierungslogik beinhalten, um die Ausführung von Threads innerhalb der Ausführungseinheit 1900 zu starten, zu stoppen und vorwegzunehmen. Die Thread-Zustandseinheit 1902 kann verwendet werden, um den Thread-Zustand für Threads, die der Ausführung auf der Ausführungseinheit 1900 zugewiesen sind, zu speichern. Das Speichern des Thread-Zustands in der Ausführungseinheit 1900 ermöglicht das schnelle Vorwegnehmen von Threads, wenn diese Threads blockiert oder inaktiv werden. Die Anweisungsabruf-/Vorabrufeinheit 1903 kann Befehle aus einem Befehls-Cache einer Ausführungslogik einer höheren Ebene (zum Beispiel Anweisungs-Cache wie in 18A) holen. Die Anweisungsabruf/Vorabruf-Einheit 1903 kann auch Vorabruf-Anfbrderungen für in den Anweisungs-Cache zu ladende Anweisungen auf der Grundlage einer Analyse aktuell ausgeführter Threads ausgeben. Die Anweisungsdecodiereinheit 1904 kann verwendet werden, um von den Recheneinheiten auszuführende Anweisungen zu decodieren. Die Anweisungsdecodiereinheit 1904 kann als sekundärer Decoder verwendet werden, um komplexe Anweisungen in einzelne Mikrooperationen zu decodieren.
  • Die Ausführungseinheit 1900 beinhaltet zusätzlich eine Registerdatei 1906, die von Hardware-Threads verwendet werden kann, die auf der Ausführungseinheit 1900 ausgeführt werden. Register in der Registerdatei 1906 können auf die Logik aufgeteilt werden, die verwendet wird, um mehrere gleichzeitige Threads innerhalb der Recheneinheit 1910 der Ausführungseinheit 1900 auszuführen. Die Anzahl logischer Threads, die von der Grafikausführungseinheit 1900 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 1906 kann zwischen Ausführungsformen basierend auf der Anzahl unterstützter Hardware-Threads variieren. Die Registerumbenennung kann verwendet werden, um Registern Hardware-Threads dynamisch zuzuordnen.
  • 20 ist ein Blockschaltbild, das ein Grafikprozessor-Anweisungsformat 2000 veranschaulicht. Die Ausführungseinheiten des Grafikprozessors unterstützen einen Anweisungssatz mit Anweisungen in mehreren Formaten. Die Kästen mit durchgezogenen Linien veranschaulichen die Bauelemente, die im Allgemeinen in einer Ausführungseinheitsanweisung enthalten sind, während die gestrichelten Linien Bauelemente beinhalten, die optional sind oder die nur in einer Teilmenge der Anweisungen enthalten sind. Die beschriebenen und dargestellten Anweisungsformate 2000 sind Makroanweisungen, da sie der Ausführungseinheit zugeführte Anweisungen sind, im Gegensatz zu Mikrooperationen, die aus der Anweisungsdecodierung resultieren, sobald die Anweisung verarbeitet ist.
  • Die hierin beschriebenen Grafikprozessor-Ausführungseinheiten können Anweisungen in einem 128-Bit-Anweisungsformat 2010 nativ unterstützen. Ein komprimiertes 64-Bit-Anweisungsformat 2030 ist für einige Anweisungen basierend auf der ausgewählten Anweisung, den Anweisungsoptionen und der Anzahl der Operanden verfügbar. Das native 128-Bit-Anweisungsformat 2010 bietet Zugriff auf alle Anweisungsoptionen, während einige Optionen und Operationen in dem 64-Bit-Format 2030 eingeschränkt sind. Die in dem 64-Bit-Format 2030 verfügbaren nativen Anweisungen variieren je nach Ausführungsform. Die Anweisung wird teilweise unter Verwenden eines Satzes von Indexwerten in einem Indexfeld 2013 komprimiert. Die Hardware der Ausführungseinheit referenziert einen Satz von Verdichtungstabellen basierend auf den Indexwerten und verwendet die Ausgaben der Verdichtungstabelle, um eine native Anweisung im 128-Bit-Anweisungsformat 2010 zu rekonstruieren. Andere Anweisungsgrößen und -formate können verwendet werden.
  • Für jedes Format definiert der Befehls-Opcode 2012 die Operation, die die Ausführungseinheit ausführen soll. Die Ausführungseinheiten führen jede Anweisung parallel über die mehreren Datenelemente jedes Operanden aus. Beispielsweise führt die Ausführungseinheit als Reaktion auf eine Addieranweisung eine gleichzeitige Addieroperation über jeden Farbkanal, der ein Texturelement oder Bildelement darstellt, aus. Standardmäßig führt die Ausführungseinheit jede Anweisung über alle Datenkanäle der Operanden aus. Das Anweisungssteuerfeld 2014 kann die Kontrolle über bestimmte Ausführungsoptionen ermöglichen, wie beispielsweise die Kanalauswahl (zum Beispiel Prädikation) und die Datenkanalreihenfolge (zum Beispiel Swizzle). Für Anweisungen im 128-Bit-Anweisungsformat 2010 begrenzt ein Exec-Size-Feld 2016 die Anzahl der Datenkanäle, die parallel ausgeführt werden. Ein Feld der Exec-Größe 2016 ist möglicherweise nicht zur Verwendung im 64-Bit-Kompaktanweisungsformat 2030 verfügbar.
  • Einige Anweisungen der Ausführungseinheit weisen bis zu drei Operanden auf, darunter zwei Quelloperanden, src0 2020, src1 2022 und ein Ziel 2018. Die Ausführungseinheiten können Dual-Destination-Anweisungen unterstützen, wobei eines der Ziele impliziert ist. Datenmanipulationsanweisungen können einen dritten Quelloperanden (zum Beispiel SRC2 2024) aufweisen, wobei der Anweisungs-Opcode 2012 die Anzahl von Quelloperanden bestimmt. Der letzte Quelloperand einer Anweisung kann ein direkter (zum Beispiel hartcodierter) Wert sein, der mit der Anweisung übergeben wird.
  • Das 128-Bit-Anweisungsformat 2010 kann ein Zugriffs-/Adressmodusfeld 2026 beinhalten, das beispielsweise 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.
  • Das 128-Bit-Anweisungsformat 2010 kann auch ein Zugriffs-/Adressmodusfeld 2026 beinhalten, das einen Adressmodus und/oder einen Zugriffsmodus für die Anweisung spezifiziert. Der Zugriffsmodus kann verwendet werden, um eine Datenzugriffsausrichtung für die Anweisung zu definieren. Zugriffsmodi einschließlich eines ausgerichteten 16-Byte-Zugriffsmodus und eines ausgerichteten 1-Byte-Zugriffsmodus können unterstützt werden, wobei die Byte-Ausrichtung des Zugriffsmodus die Zugriffsausrichtung der Anweisungsoperanden bestimmt. Zum Beispiel kann der Befehl bei einem ersten Modus eine Byte-ausgerichtete Adressierung für Quell- und Zieloperanden verwenden, und bei einem zweiten Modus kann der Befehl eine 16-Byte-ausgerichtete Adressierung für alle Quell- und Zieloperanden verwenden.
  • Der Adressmodusabschnitt des Zugriffs-/Adressmodusfelds 2026 kann bestimmen, ob die Anweisung eine direkte oder indirekte Adressierung verwenden soll. Wenn der direkte Registeradressierungsmodus verwendet wird, liefern Bits in der Anweisung direkt die Registeradresse eines oder mehrerer Operanden. Wenn der indirekte Registeradressierungsmodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressregisterwert und einem Direktadressenfeld in der Anweisung berechnet werden.
  • Anweisungen können basierend auf Opcode-2012-Bitfeldern gruppiert werden, um die Opcode-Decodierung 2040 zu vereinfachen. Bei einem 8-Bit-Opcode erlauben es die Bits 4, 5 und 6 der Ausführungseinheit, den Opcode-Typ zu bestimmen. Die gezeigte genaue Opcode-Gruppierung ist lediglich ein Beispiel. Eine Bewegungs- und Logik-Opcode-Gruppe 2042 kann Datenbewegungs- und Logikbefehle beinhalten (zum Beispiel bewegen (mov), vergleichen (cmp)). Die Bewegungs- und Logikgruppe 2042 kann die fünf höchstwertigen Bits (MSB) gemeinsam nutzen, wobei Bewegungsanweisungen (mov) in der Form von 0000xxxxb vorliegen und Logikanweisungen in der Form von 0001xxxxb vorliegen. Eine Flusssteuerungsanweisungsgruppe 2044 (zum Beispiel Aufruf, Sprung (jmp)) enthält Anweisungen in der Form 0010xxxxb (zum Beispiel 0x20). Eine gemischte Anweisungsgruppe 2046 beinhaltet eine Mischung von Anweisungen, einschließlich Synchronisationsanweisungen (zum Beispiel Warten, Senden) in der Form 0011xxxxb (zum Beispiel 0x30). Eine parallele mathematische Anweisungsgruppe 2048 beinhaltet bauelementweise arithmetische Anweisungen (zum Beispiel Addieren, Multiplizieren (mul)) in der Form 0100xxxxb (zum Beispiel 0x40). Die parallele mathematische Gruppe 2048 führt die arithmetischen Operationen parallel über Datenkanäle aus. Die Vektormathematikgruppe 2050 enthält arithmetische Anweisungen (zum Beispiel dp4) in der Form 0101xxxxb (zum Beispiel 0x50). Die Vektormathematikgruppe führt Arithmetik, wie Skalarproduktberechnungen an Vektoroperanden aus. Die veranschaulichte Opcode-Decodierung 2040 kann bei einer Ausführungsform verwendet werden, um zu bestimmen, welcher Teil einer Ausführungseinheit verwendet wird, um einen decodierten Befehl auszuführen. Zum Beispiel können einige Anweisungen als systolische Anweisungen, die von einem systolischen Array ausgeführt werden, bezeichnet werden. Andere Anweisungen, wie beispielsweise Raytracing-Anweisungen (nicht gezeigt) können zu einem Raytracing-Kern oder einer Raytracing-Logik innerhalb eines Abschnitts oder einer Partition der Ausführungslogik geroutet werden.
  • Grafikpipeline
  • 21 ist ein Blockschaltbild des Grafikprozessors 2100 gemäß einer anderen Ausführungsform. Die Elemente der 21, die die gleichen oder ähnlichen Name wie die Elemente einer anderen Figur aufweisen, beschreiben hierin die gleichen Elemente wie in den anderen Figuren, arbeiten oder funktionieren ähnlich, können die gleichen Bauelemente umfassen und mit anderen Entitäten verknüpft werden, wie diejenigen, an anderer Stelle hierin beschrieben sind, sind jedoch nicht darauf beschränkt.
  • Der Grafikprozessor 2100 kann unterschiedliche Arten von Grafikverarbeitungspipelines beinhalten, wie etwa eine Geometriepipeline 2120, eine Medienpipeline 2130, eine Anzeigemaschine 2140, eine Thread-Ausführungslogik 2150 und eine Renderausgabepipeline 2170. Der Grafikprozessor 2100 kann ein Grafikprozessor in einem Mehrkern-Verarbeitungssystem sein, das einen oder mehrere Allzweckverarbeitungskerne beinhaltet. Der Grafikprozessor kann durch Registerschreibvorgänge in ein oder mehrere Steuerregister (nicht gezeigt) oder über Befehle, die an den Grafikprozessor 2100 über eine Ringverbindung 2102 ausgegeben werden, gesteuert werden. Die Ringverbindung 2102 kann den Grafikprozessor 2100 mit anderen Verarbeitungsbauelementen koppeln, wie beispielsweise mit anderen Grafikprozessoren oder Allzweckprozessoren. Befehle von der Ringverbindung 2102 werden von einem Befehlsstreamer 2103 interpretiert, der Anweisungen an einzelne Bauelemente der Geometriepipeline 2120 oder der Medienpipeline 2130 liefert.
  • Der Befehlsstreamer 2103 kann den Betrieb eines Vertex-Abrufers 2105 anweisen, der Eckpunktdaten aus dem Speicher liest und Eckpunktverarbeitungsbefehle ausführt, die von dem Befehlsstreamer 2103 bereitgestellt werden. Der Vertex-Abrufer 2105 kann Eckpunktdaten an einen Vertex-Shader 2107 liefern, der an jedem Eckpunkt eine Koordinatenraumtransformation und Ausleuchtungsoperationen ausführt. Der Vertex-Fetcher 2105 und der Vertex-Shader 2107 können Eckpunktverarbeitungsanweisungen ausführen, indem sie Ausführungs-Threads über einen Thread-Dispatcher 2131 an die Ausführungseinheiten 2152A-2152B verteilen.
  • Die Ausführungseinheiten 2152A-2152B können ein Array von Vektorprozessoren, die einen Anweisungssatz aufweisen, zum Ausführen von Grafik- und Medienoperationen sein. Die Ausführungseinheiten 2152A-2152B können einen angeschlossenen L1-Cache 2151 aufweisen, der für jedes Array spezifisch ist oder von den Arrays gemeinsam genutzt wird. Der Cache kann als Daten-Cache, Befehls-Cache oder einzelner Cache konfiguriert werden, der so partitioniert ist, dass er Daten und Anweisungen in unterschiedlichen Partitionen enthält.
  • Eine Geometriepipeline 2120 kann Tessellationskomponenten umfassen, um hardwarebeschleunigte Tessellation von 3D-Objekten auszuführen. Ein programmierbarer Hull-Shader 2111 kann die Tessellationsoperationen konfigurieren. Ein programmierbarer Domain-Shader 2117 kann eine Back-End-Bewertung der Tessellationsausgabe bereitstellen. Ein Tessellator 2113 kann an der Richtung des Hull-Shaders 2111 arbeiten und Speziallogik enthalten, um einen Satz detaillierter geometrischer Objekte auf Grundlage eines groben geometrischen Modells zu generieren, das als Eingabe an die Geometriepipeline 2120 bereitgestellt wird. Wenn keine Tessellation verwendet wird, können außerdem Tessellationsbauelemente (zum Beispiel Hull-Shader 2111, Tessellator 2113 und Domain-Shader 2117) umgangen werden.
  • Vollständige geometrische Objekte können von einem Geometrie-Shader 2119 über einen oder mehrere Threads verarbeitet werden, die an die Ausführungseinheiten 2152A-2152B versandt werden, oder können direkt an den Clipper 2129 weitergehen. Der Geometrie-Shader kann mit ganzen geometrischen Objekten arbeiten, anstatt mit Eckpunkten oder Eckpunkten wie in früheren Stufen der Grafikpipeline. Falls die Tesselation deaktiviert ist, empfängt der Geometrie-Shader 2119 Eingabe vom Vertex-Shader 2107. Der Geometrie-Shader 2119 kann durch ein Geometrie-Shader-Programm programmierbar sein, um eine Geometrie-Tessellation auszuführen, falls die Tessellationseinheiten deaktiviert sind.
  • Vor der Rasterung verarbeitet ein Clipper 2129 Eckpunktdaten. Der Clipper 2129 kann ein Clipper mit fester Funktion oder ein programmierbarer Clipper mit Clipping- und Geometrie-Shader-Funktionen sein. Ein Rasterisierungs- und Tiefentestbauelement 2173 in der Renderausgabepipeline 2170 kann Pixel-Shader versenden, um die geometrischen Objekte in pixelbezogene Darstellungen umzuwandeln. Die Pixel-Shader-Logik kann in der Thread-Ausführungslogik 2150 enthalten sein. Optional kann eine Anwendung die Rasterisierungs- und Tiefentestkomponente 2173 umgehen und über eine Stream-Out-Einheit 2123 auf nicht gerasterte Eckpunktdaten zugreifen.
  • Der Grafikprozessor 2100 weist einen Verbindungsbus, eine Verbindungsstruktur oder einen anderen Verbindungsmechanismus auf, der den Daten- und Meldungenaustausch zwischen den Hauptkomponenten des Prozessors erlaubt. Bei einigen Ausführungsformen sind die Ausführungseinheiten 2152A-2152B und die assoziierten Logikeinheiten (zum Beispiel L1-Cache 2151, Sampler 2154, Textur-Cache 2158 usw.) über einen Datenport 2156 miteinander verbunden, um einen Speicherzugriff auszuführen und mit Bauelementen des Prozessors zu kommunizieren. Ein Sampler 2154, Caches 2151, 2158 und Ausführungseinheiten 2152A-2152B können jeweils separate Speicherzugriffspfade aufweisen. Optional kann der Textur-Cache 2158 auch als Sampler-Cache konfiguriert werden.
  • Die Renderausgabepipeline 2170 kann ein Rasterisierungs- und Tiefentestbauelement 2173 enthalten, das eckpunktbasierte Objekte in eine assoziierte pixelbasierte Darstellung umwandelt. Die Rasterisierungslogik kann eine Windower-/Maskierer-Einheit beinhalten, um eine Dreiecks- und Linienrasterisierung mit fester Funktion auszuführen. Bei einigen Ausführungsformen sind auch ein assoziierter Render-Cache 2178 und ein Tiefen-Cache 2179 verfügbar. Ein Pixeloperationsbauelement 2177 führt pixelbasierte Operationen an den Daten aus, obwohl in einigen Fällen mit 2D-Operationen verbundene Pixeloperationen (zum Beispiel Bitblockbildtransfers mit Blending) von der 2D-Engine 2141 ausgeführt oder zur Anzeigezeit durch den Anzeigecontroller 2143 unter Verwenden von Overlay-Anzeigeebenen ersetzt werden. Ein gemeinsam genutzter L3-Cache 2175 kann für alle Grafikbauelemente verfügbar sein, was die gemeinsame Nutzung von Daten ohne die Verwendung des Hauptsystemspeichers ermöglicht.
  • Die Grafikprozessor-Medienpipeline 2130 kann eine Medienmaschine 2137 und ein Video-Front-End 2134 beinhalten. Das Video-Front-End 2134 kann Pipelinebefehle vom Befehlsstreamer 2103 empfangen. Die Medienpipeline 2130 kann einen separaten Befehlsstreamer umfassen. Das Video-Front-End 2134 kann Medienbefehle verarbeiten, bevor der Befehl an die Medienmaschine 2137 gesandt wird. Die Medienmaschine 2137 kann eine Thread-Spawning-Funktionalität beinhalten, um Threads zum Versand an die Thread-Ausführungslogik 2150 über den Thread-Dispatcher 2131 zu spawnen.
  • Der Grafikprozessor 2100 kann eine Anzeigemaschine 2140 beinhalten. Diese Anzeigemaschine 2140 kann sich außerhalb des Prozessors 2100 befinden und kann mit dem Grafikprozessor über die Ringverbindung 2102 oder einen anderen Verbindungsbus oder eine andere Struktur verbunden sein. Die Anzeigemaschine 2140 kann eine 2D-Maschine 2141 und eine Anzeigesteuervorrichtung 2143 beinhalten. Die Anzeigemaschine 2140 kann eine Speziallogik enthalten, die unabhängig von der 3D-Pipeline arbeiten kann. Die Anzeigesteuervorrichtung 2143 kann mit einer Anzeigevorrichtung (nicht gezeigt), die eine systemintegrierte Anzeigevorrichtung, wie in einem Laptop-Computer, oder eine externe Anzeigevorrichtung sein kann, die über einen Anzeigevorrichtungsanschluss angeschlossen ist, gekoppelt sein.
  • Die Geometriepipeline 2120 und die Medienpipeline 2130 können konfigurierbar sein, um Operationen basierend auf mehreren Grafik- und Medienprogrammierschnittstellen auszuführen, und sind nicht für irgendeine Anwendungsprogrammierschnittstelle (API) spezifisch. Eine Treibersoftware für den Grafikprozessor kann API-Aufrufe, die für eine bestimmte Grafik- oder Medienbibliothek spezifisch sind, in Befehle übersetzen, die von dem Grafikprozessor verarbeitet werden können. Support kann für die Open Graphics Library (OpenGL), Open Computing Language (OpenCL) und/oder Vulkan Graphics and Compute API, alle von der Khronos Group, bereitgestellt werden. Support kann auch für die Direct3D-Bibliothek der Microsoft Corporation bereitgestellt werden. Eine Kombination dieser Bibliotheken kann unterstützt werden. Auch die Open Source Computer Vision Library (OpenCV) kann unterstützt werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline würde auch unterstützt, falls eine Abbildung von der Pipeline der zukünftigen API auf die Pipeline des Grafikprozessors erfolgen kann.
  • Programmierung der Grafikpipeline
  • 22A ist ein Blockschaltbild, das ein Grafikprozessor-Befehlsformat 2200 veranschaulicht, das zum Programmieren von Grafikverarbeitungspipelines verwendet wird, wie beispielsweise die hierin in Verbindung mit DEN 16A, 17, 21 beschriebenen Pipelines. 22B ist ein Blockschaltbild, das eine Grafikprozessorbefehlsfolge 2210 gemäß einer Ausführungsform veranschaulicht. Die durchgezogenen Kästchen in 22A veranschaulichen die Bauelemente, die im Allgemeinen in einem Grafikbefehl enthalten sind, während die gestrichelten Linien Bauelemente beinhalten, die optional sind oder die nur in einer Teilmenge der Grafikbefehle enthalten sind. Das beispielhafte Grafikprozessor-Befehlsformat 2200 of 22A beinhaltet Datenfelder, um einen Client 2202 zu identifizieren, einen Befehlsoperationscode (Opcode) 2204 und Daten 2206 für den Befehl. Ein Sub-Opcode 2205 und eine Befehlsgröße 2208 sind auch in einigen Befehlen enthalten.
  • Der Client 2202 kann die Client-Einheit des Grafikgeräts spezifizieren, die die Befehlsdaten verarbeitet. Ein Grafikprozessor-Befehlsparser kann das Client-Feld jedes Befehls untersuchen, um die weitere Verarbeitung des Befehls zu konditionieren und die Befehlsdaten an die zweckdienliche Client-Einheit zu leiten. Die Grafikprozessor-Client-Einheiten können eine Speicherschnittstelleneinheit, eine Wiedergabeeinheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit beinhalten. Jede Client-Einheit kann eine entsprechende Verarbeitungspipeline, die die Befehle verarbeitet, aufweisen. Sobald der Befehl von der Client-Einheit empfangen wurde, liest die Client-Einheit den Opcode 2204 und, falls vorhanden, den Sub-Opcode 2205, um die auszuführende Operation zu bestimmen. Die Client-Einheit führt den Befehl unter Verwenden von Informationen in dem Datenfeld 2206 aus. Für einige Befehle wird erwartet, dass eine explizite Befehlsgröße 2208 die Größe des Befehls angibt. Der Befehls-Parser kann die Größe mindestens einiger der Befehle basierend auf dem Befehls-Opcode automatisch bestimmen. Befehle können über Vielfache eines Doppelwortes ausgerichtet werden. Andere Anweisungsformate können ebenfalls verwendet werden.
  • Das Flussschaltbild in 22B veranschaulicht eine beispielhafte Grafikprozessorbefehlsfolge 2210. Software oder Firmware eines Datenverarbeitungssystems, das einen beispielhaften Grafikprozessor aufweist, kann eine Version der gezeigten Befehlsfolge verwenden, um einen Satz von Grafikoperationen einzurichten, auszuführen und zu beenden. Eine beispielhafte Befehlsfolgewird nur zu Beispielszwecken gezeigt und beschrieben und ist nicht auf diese speziellen Befehle oder auf diese Befehlsfolge beschränkt. Darüber hinaus können die Befehle als Stapel von Befehlen in einer Befehlsfolge ausgegeben werden, so dass der Grafikprozessor die Befehlsfolge zumindest teilweise gleichzeitig verarbeitet.
  • Die Grafikprozessor-Befehlsfolge 2210 kann mit einem Pipeline-Flush-Befehl 2212 beginnen, um zu bewirken, dass jede aktive Grafik-Pipeline die aktuell anstehenden Befehle für die Pipeline abschließt. Optional können die 3D-Pipeline 2222 und die Medienpipeline 2224 nicht gleichzeitig arbeiten. Das Leeren der Pipeline wird ausgeführt, um die aktive Grafikpipeline zu veranlassen, alle ausstehenden Befehle abzuschließen. Als Reaktion auf einen Pipeline-Flush unterbricht der Befehlsparser für den Grafikprozessor die Befehlsverarbeitung, bis die aktiven Zeichenmaschinen anstehende Operationen abgeschlossen haben und die relevanten Lese-Caches ungültig gemacht werden. Optional können alle Daten im Render-Cache, die als ,dirty‘ gekennzeichnet sind, in den Arbeitsspeicher geleert werden. Der Pipeline-Flush-Befehl 2212 kann zur Pipeline-Synchronisation verwendet werden oder bevor der Grafikprozessor in einen Niedrigenergiezustand versetzt wird.
  • Ein Pipeline-Auswahlbefehl 2213 kann verwendet werden, wenn eine Befehlsfolge erfordert, dass der Grafikprozessor explizit zwischen Pipelines umschaltet. Ein Pipeline-Auswahlbefehl 2213 kann innerhalb eines Ausführungskontexts nur einmal erforderlich sein, bevor Pipeline-Befehle ausgegeben werden, es sei denn, der Kontext soll Befehle für beide Pipelines ausgeben. Ein Pipeline-Flush-Befehl 2212 kann unmittelbar vor einer Pipeline-Umschaltung über den Pipeline-Auswahlbefehl 2213 erforderlich sein.
  • Ein Pipelinesteuerbefehl 2214 kann eine Grafikpipeline für den Betrieb konfigurieren und kann verwendet werden, um die 3D-Pipeline 2222 und die Medienpipeline 2224 zu programmieren. Der Pipeline-Steuerbefehl 2214 kann den Pipeline-Zustand für die aktive Pipeline konfigurieren. Der Pipeline-Steuerbefehl 2214 kann zur Pipeline-Synchronisation und zum Löschen von Daten aus einem oder mehreren Cache-Speichern innerhalb der aktiven Pipeline verwendet werden, bevor ein Stapel von Befehlen verarbeitet wird.
  • Rückgabepufferzustandsbefehle 2216 können verwendet werden, um einen Satz von Rückgabepuffern für die jeweiligen Pipelines zum Schreiben von Daten zu konfigurieren. Einige Pipeline-Operationen erfordern die Zuordnung, Auswahl oder Konfiguration eines oder mehrerer Rückgabepuffern, in die die Operationen während der Verarbeitung Zwischendaten schreiben. Der Grafikprozessor kann auch einen oder mehrere Rückgabepuffer verwenden, um Ausgabedaten zu speichern und eine Cross-Thread-Kommunikation auszuführen. Der Rückgabepufferzustand 2216 kann das Auswählen der Größe und Anzahl von Rückgabepuffern, die für einen Satz von Pipeline-Operationen zu verwenden sind, beinhalten.
  • Die verbleibenden Befehle in der Befehlsfolge unterscheiden sich basierend auf der aktiven Pipeline für Operationen. Basierend auf einer Pipeline-Bestimmung 2220 wird die Befehlsfolge auf die 3D-Pipeline 2222 zugeschnitten, beginnend mit dem 3D-Pipeline-Zustand 2230 oder die Medien-Pipeline 2224 beginnend mit dem Medien-Pipeline-Zustand 2240.
  • Die Befehle zum Konfigurieren des 3D-Pipelinezustands 2230 beinhalten 3D-Zustandssetzbefehle für den Eckpunktpufferzustand, den Eckpunktelementzustand, den konstanten Farbzustand, den Tiefenpufferzustand und andere Zustandsvariablen, die konfiguriert werden müssen, bevor 3D-Grundelementbefehle verarbeitet werden. Die Werte dieser Befehle werden zumindest teilweise basierend auf der jeweils verwendeten 3D-API bestimmt. Die Befehle des 3D-Pipeline-Zustands 2230 können auch in der Lage sein, bestimmte Pipeline-Elemente selektiv zu deaktivieren oder zu umgehen, falls diese Elemente nicht verwendet werden.
  • Ein 3D-Grundelementbefehl 2232 kann verwendet werden, um 3D-Grundelemente zur Verarbeitung durch die 3D-Pipeline zu unterbreiten. Befehle und assoziierte Parameter, die über den Befehl 3D-Primitive 2232 an den Grafikprozessor übergeben werden, werden an die Vertex-Abruffunktion in der Grafikpipeline weitergeleitet. Die Vertex-Abruffunktion verwendet die Befehlsdaten des 3D-Grundelements 2232, um Eckpunktdatenstrukturen zu erzeugen. Die Eckpunktdatenstrukturen werden in einem oder mehreren Rückgabepuffern gespeichert. Der Befehl des 3D-Grundelements 2232 kann verwendet werden, um Vertex-Operationen an 3D-Grundelementen über Vertex-Shader auszuführen. Um Vertex-Shader zu verarbeiten, versendet die 3D-Pipeline 2222 Shader-Ausführungs-Threads an die Grafikprozessor-Ausführungseinheiten.
  • Die 3D-Pipeline 2222 kann über einen Befehl oder ein Ereignis zum Ausführen 2234 ausgelöst werden. Ein Register kann Auslösebefehlsausführungen schreiben. Eine Ausführung kann über einen ,go‘- oder ,kick‘-Befehl in der Befehlsfolge ausgelöst werden. Die Befehlsausführung kann unter Verwenden eines Pipeline-Synchronisationsbefehls ausgelöst werden, um die Befehlsfolge durch die Grafikpipeline zu entleeren. Die 3D-Pipeline führt eine Geometrieverarbeitung für das 3D-Grundelement aus. Sobald die Operationen abgeschlossen sind, werden die resultierenden geometrischen Objekte gerastert und die Pixel-Maschine färbt die resultierenden Pixel ein. Für diese Operationen können auch zusätzliche Befehle zum Steuern von Pixelschattierung und Pixel-Back-End-Operationen enthalten sein.
  • Die Befehlsfolge 2210 des Grafikprozessors kann dem Pfad der Medienpipeline 2224 folgen, wenn sie Medienoperationen ausführt. Im Allgemeinen hängen die spezifische Verwendung und Art der Programmierung für die Medienpipeline 2224 von den auszuführenden Medien- oder Rechenoperationen ab. Spezifische Mediendecodierungsoperationen können während der Mediendecodierung in die Medienpipeline ausgelagert werden. Die Medienpipeline kann auch umgangen werden, und die Mediendecodierung kann ganz oder teilweise unter Verwenden von Ressourcen , die von einem oder mehreren Universalverarbeitungskernen bereitgestellt werden, ausgeführt werden. Die Medienpipeline kann auch Elemente für Operationen der Allzweck-Grafikprozessoreinheit (GPGPU) beinhalten, wobei der Grafikprozessor verwendet wird, um SIMD-Vektoroperationen unter Verwenden von Rechen-Shader-Programmen, die sich nicht explizit auf das Rendern von Grafikprimitiven beziehen, auszuführen.
  • Die Medienpipeline 2224 kann auf eine ähnliche Weise wie die 3D-Pipeline 2222 konfiguriert sein. Ein Satz von Befehlen zum Konfigurieren des Medienpipelinezustands 2240 wird vor den Medienobjektbefehlen 2242 versandt oder in eine Befehlswarteschlange gestellt. Befehle für den Medienpipeline-Zustand 2240 können Daten enthalten, um die Medienpipeline-Elemente zu konfigurieren, die verwendet werden, um die Medienobjekte zu verarbeiten. Dies beinhaltet Daten zum Konfigurieren der Videodecodierungs- und Videocodierungslogik innerhalb der Medienpipeline, wie zum Beispiel das Codierungs- oder Decodierungsformat. Befehle für den Medienpipeline-Zustand 2240 können auch die Verwendung eines oder mehrerer Zeiger auf „indirekte“ Zustandselemente, die einen Stapel von Zustandseinstellungen enthalten, unterstützen.
  • Medienobjektbefehle 2242 können Zeiger auf Medienobjekte zur Verarbeitung durch die Medienpipeline liefern. Die Medienobjekte umfassen Speicherpuffer, die zu verarbeitende Videodaten enthalten. Optional müssen alle Medienpipeline-Zustände gültig sein, bevor ein Medienobjektbefehl 2242 ausgegeben wird. Sobald der Pipelinezustand konfiguriert ist und die Medienobjektbefehle 2242 in die Warteschlange eingereiht sind, wird die Medienpipeline 2224 über einen Ausführungsbefehl 2244 oder ein äquivalentes Ausführungsereignis (zum Beispiel Registerschreiben) ausgelöst. Ausgabe von der Medienpipeline 2224 kann dann durch Operationen, die von der 3D-Pipeline 2222 oder der Medienpipeline 2224 bereitgestellt werden, nachverarbeitet werden. GPGPU-Operationen können auf ähnliche Weise wie Medienoperationen konfiguriert und ausgeführt werden.
  • Architektur der Grafiksoftware
  • 23 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem 2300. Eine derartige Softwarearchitektur kann eine 3D-Grafikanwendung 2310, ein Betriebssystem 2320 und mindestens einen Prozessor 2330 beinhalten. Der Prozessor 2330 kann einen Grafikprozessor 2332 und einen oder mehrere Allzweck-Prozessorkerne 2334 beinhalten. Der Prozessor 2330 kann eine Variante des Prozessors 1402 oder irgendein anderer der hierin beschriebenen Prozessoren sein. Der Prozessor 2330 kann an Stelle des Prozessors 1402 oder eines anderen der hierin beschriebenen Prozessoren verwendet werden. Daher offenbart die Offenbarung von Merkmalen in Kombination mit den Prozessor 1402 oder einem anderen der hierin beschriebenen Prozessoren auch eine entsprechende Kombination mit der Grafikprozessor 2330, ist aber nicht darauf beschränkt. Darüber hinaus beschreiben die Elemente der 23, die gleiche oder ähnliche Namen wie die Elemente einer anderen Figur aufweisen, hierin die gleichen Elemente wie in den anderen Figuren, arbeiten oder funktionieren ähnlich, können die gleichen Bauelemente umfassen und mit anderen Entitäten verknüpft werden, wie diejenigen, die an anderer Stelle hierin beschrieben sind, sind jedoch nicht darauf beschränkt. Die Grafikanwendung 2310 und das Betriebssystem 2320 werden jeweils im Systemspeicher 2350 des Datenverarbeitungssystems ausgeführt.
  • Die 3D-Grafikanwendung 2310 kann ein oder mehrere Shader-Programme enthalten, einschließlich Shader-Anweisungen 2312. Die Shader-Sprachanweisungen können in einer High-Level-Shader-Sprache vorliegen, wie beispielsweise in der High-Level-Shader-Sprache (HLSL) von Direct3D, der OpenGL-Shader-Sprache (GLSL) und so fort. Die Anwendung kann auch ausführbare Anweisungen 2314 in einer Maschinensprache beinhalten, die zur Ausführung durch den Universalprozessorkern 2334 geeignet ist. Die Anwendung kann auch Grafikobjekte 2316 beinhalten, die durch Eckpunktdaten definiert sind.
  • Das Betriebssystem 2320 kann ein Microsoft® Windows®-Betriebssystem der Microsoft Corporation, ein proprietäres UNIX-ähnliches Betriebssystem oder ein Open-Source-UNIX-ähnliches Betriebssystem sein, das eine Variante des Linux-Kernels verwendet. Das Betriebssystem 2320 kann eine Grafik-API 2322 wie die Direct3D-API, die OpenGL-API oder die Vulkan-API unterstützen. Wenn die Direct3D-API verwendet wird, verwendet das Betriebssystem 2320 einen Front-End-Shader-Compiler 2324, um beliebige Shader-Anweisungen 2312 in HLSL in eine Shader-Sprache niedrigerer Ebene zu kompilieren. Die Kompilierung kann eine Just-in-Time-Kompilierung (JIT) sein, oder die Anwendung kann eine Shader-Vorkompilierung ausführen. High-Level-Shader können während der Kompilierung der 3D-Grafikanwendung 2310 in Low-Level-Shader kompiliert werden. Die Shader-Anweisungen 2312 können in einer Zwischenform bereitgestellt werden, wie etwa in einer Version der Standard Portable Intermediate Representation (SPIR), die von der Vulkan-API verwendet wird.
  • Der Benutzermodus-Grafiktreiber 2326 kann einen Back-End-Shader-Compiler 2327 enthalten, um die Shader-Anweisungen 2312 in eine hardwarespezifische Darstellung umzuwandeln. Wenn die OpenGL-API verwendet wird, werden Shader-Anweisungen 2312 in der GLSL-Hochsprache zum Kompilieren an einen Benutzermodus-Grafiktreiber 2326 weitergegeben. Der Benutzermodus-Grafiktreiber 2326 kann Betriebssystem-Kernelmodusfunktionen 2328 verwenden, um mit einem Kernelmodus-Grafiktreiber 2329 zu kommunizieren. Der Grafiktreiber 2329 im Kernelmodus kann mit dem Grafikprozessor 2332 kommunizieren, um Befehle und Anweisungen zu senden.
  • IP-Core-Implementierungen
  • Ein oder mehrere Aspekte können durch einen repräsentativen Code implementiert werden, der auf einem maschinenlesbaren Medium gespeichert ist und die Logik innerhalb einer integrierten Schaltung wie etwa eines Prozessors darstellt und/oder definiert. Zum Beispiel kann das maschinenlesbare Medium Anweisungen enthalten, die verschiedene Logiken innerhalb des Prozessors darstellen. Wenn sie von einer Maschine gelesen werden, können die Anweisungen bewirken, dass die Maschine die Logik herstellt, um die hierin beschriebenen Techniken auszuführen. Solche Darstellungen, bekannt als „IP-Cores“, sind wiederverwendbare Logikeinheiten für eine integrierten Schaltung, die auf einem materiellen, maschinenlesbaren Medium als Hardwaremodell gespeichert werden können, das die Struktur der integrierten Schaltung beschreibt. Das Hardwaremodell kann an verschiedene Kunden oder Fertigungseinrichtungen geliefert werden, die das Hardwaremodell auf Fertigungsmaschinen laden, die die integrierte Schaltung herstellen. Die integrierte Schaltung kann derart hergestellt werden, dass die Schaltung Operationen ausführt, die in Verbindung mit einer der hier beschriebenen Ausführungsformen beschrieben sind.
  • 24A ist ein Blockschaltbild, das ein IP-Kern-Entwicklungssystem 2400 veranschaulicht, das verwendet werden kann, um eine integrierte Schaltung herzustellen, um Operationen gemäß einer Ausführungsform auszuführen. Das IP-Kern-Entwicklungssystem 2400 kann verwendet werden, um modulare, wiederverwendbare Designs zu erzeugen, die in ein größeres Design integriert oder verwendet werden können, um eine gesamte integrierte Schaltung (zum Beispiel eine integrierte SOC-Schaltung) aufzubauen. Eine Entwurfseinrichtung 2430 kann eine Softwaresimulation 2410 eines IP-Kernentwurfs in einer höheren Programmiersprache (zum Beispiel C/C+++) erzeugen. Die Softwaresimulation 2410 kann verwendet werden, um das Verhalten des IP-Kerns unter Verwenden eines Simulationsmodells 2412 zu entwerfen, zu testen und zu verifizieren. Das Simulationsmodell 2412 kann Funktions-, Verhaltens- und/oder Zeitsimulationen beinhalten. Ein Design auf Registertransferebene (RTL) 2415 kann dann aus dem Simulationsmodell 2412 erstellt oder synthetisiert werden. Der RTL-Entwurf 2415 ist eine Abstraktion des Verhaltens der integrierten Schaltung, die den Fluss digitaler Signale zwischen Hardwareregistern modelliert, einschließlich der zugehörigen Logik, die unter Verwenden der modellierten digitalen Signale ausgeführt wird. Zusätzlich zu einem RTL-Design 2415 können auch Designs niedrigerer Ebene auf Logikebene oder Transistorebene erzeugt, entworfen oder synthetisiert werden. Daher können die besonderen Details des anfänglichen Entwurfs und der Simulation variieren.
  • Das RTL-Design 2415 oder ein Äquivalent kann von der Designeinrichtung weiter in ein Hardwaremodell 2420 synthetisiert werden, das in einer Hardwarebeschreibungssprache (HDL) oder einer anderen Darstellung physischer Designdaten vorliegen kann. Die HDL kann weiter simuliert oder getestet werden, um das IP-Kerndesign zu verifizieren. Das IP-Core-Design kann zur Lieferung an eine Drittpartei-Fertigungseinrichtung 2465 unter Verwenden eines nichtflüchtigen Speichers 2440 (zum Beispiel einer Festplatte, eines Flash-Speichers oder eines beliebigen nichtflüchtigen Speichermediums) gelagert werden. Alternativ kann der IP-Kernentwurf (zum Beispiel über das Internet) über eine drahtgebundene Verbindung 2450 oder eine drahtlose Verbindung 2460 übertragen werden. Die Fertigungseinrichtung 2465 kann dann eine integrierte Schaltung herstellen, die zumindest teilweise auf dem IP-Kerndesign basiert. Die hergestellte integrierte Schaltung kann konfiguriert sein, um Operationen gemäß mindestens einer hierin beschriebenen Ausführungsform auszuführen.
  • 24B veranschaulicht eine Querschnittseitenansicht einer integrierten Schaltungs-Package-Anordnung 2470. Die Package-Anordnung 2470 für integrierte Schaltungen veranschaulicht eine Implementierung einer oder mehrerer Prozessor- oder Beschleunigervorrichtungen, wie hierin beschrieben. Die Package-Anordnung 2470 beinhaltet mehrere Einheiten von Hardwarelogik 2472, 2474, die mit einem Substrat 2480 verbunden sind. Die Logik 2472, 2474 kann zumindest teilweise in konfigurierbarer Logik oder Logikhardware mit fester Funktionalität implementiert sein und kann einen oder mehrere Teile eines oder mehrerer der hierin beschriebenen Prozessorkerne, Grafikprozessoren oder anderen Beschleunigervorrichtungen beinhalten. Jede Logikeinheit 2472, 2474 kann in einem Halbleiterchip implementiert und über eine Verbindungsstruktur 2473 mit dem Substrat 2480 gekoppelt sein. Die Zwischenverbindungsstruktur 2473 kann konfiguriert sein, um elektrische Signale zwischen der Logik 2472, 2474 und dem Substrat 2480 zu leiten, und kann Zwischenverbindungen beinhalten, wie beispielsweise Bumps oder Pillars, ohne aber darauf beschränkt zu sein. Die Verbindungsstruktur 2473 kann dazu konfiguriert sein, elektrische Signale zu leiten, wie zum Beispiel Eingabe-/Ausgabe-(E/A)-Signale und/oder Strom- oder Massesignale, die mit dem Betrieb der Logik 2472, 2474 verbunden sind. Optional kann das Substrat 2480 ein Laminatsubstrat auf Epoxidbasis sein. Das Substrat 2480 kann auch andere geeignete Arten von Substraten beinhalten. Die Package-Anordnung 2470 kann über eine Package-Verbindung 2483 mit anderen elektrischen Geräten verbunden werden. Die Package-Verbindung 2483 kann mit einer Oberfläche des Substrats 2480 gekoppelt sein, um elektrische Signale zu anderen elektrischen Vorrichtungen zu leiten, wie zum Beispiel zu einem Motherboard, einem anderen Chipsatz oder einem Multi-Chip-Modul.
  • Die Logikeinheiten 2472, 2474 können elektrisch mit einer Brücke 2482 gekoppelt sein, die dazu konfiguriert ist, elektrische Signale zwischen den Logiken 2472, 2474 zu leiten. Die Brücke 2482 kann eine dichte Verbindungsstruktur sein, die einen Weg für elektrische Signale bereitstellt. Die Brücke 2482 kann ein Brückensubstrat beinhalten, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Auf dem Brückensubstrat können elektrische Routing-Merkmale gebildet werden, um eine Chip-zu-Chip-Verbindung zwischen der Logik 2472, 2474 bereitzustellen.
  • Obwohl zwei Logikeinheiten 2472, 2474 und eine Brücke 2482 veranschaulicht sind, können hierin beschriebene Ausführungsformen mehr oder weniger Logikeinheiten auf einem oder mehreren Dies beinhalten. Der eine oder die mehreren Dies können durch null oder mehr Brücken verbunden sein, da die Brücke 2482 ausgeschlossen werden kann, wenn die Logik auf einem einzelnen Die enthalten ist. Alternativ können mehrere Dies oder Logikeinheiten durch eine oder mehrere Brücken verbunden werden. Außerdem können mehrere Logikeinheiten, Dies und Brücken in anderen möglichen Konfigurationen, einschließlich dreidimensionaler Konfigurationen, miteinander verbunden werden.
  • 24C veranschaulicht eine Package-Anordnung 2490, die mehrere Einheiten von Hardware-Logik-Chiplets umfasst, die mit einem Substrat 2480 (zum Beispiel Basis-Die) verbunden sind. Eine Grafikverarbeitungseinheit, ein paralleler Prozessor und/oder ein Rechenbeschleuniger, wie hierin beschrieben, können aus diversen Silizium-Chiplets, die separat hergestellt werden, zusammengesetzt sein. In diesem Zusammenhang ist ein Chiplet eine zumindest teilweise verpackte integrierte Schaltung, die getrennte Logikeinheiten umfasst, die mit anderen Chiplets zu einem größeren Package zusammengebaut werden können. Ein vielfältiger Satz von Chiplets mit unterschiedlicher IP-Core-Logik kann zu einem einzigen Gerät zusammengebaut werden. Zusätzlich können die Chiplets unter Verwenden aktiver Interposer-Technologie in einen Basis-Die oder Basis-Chiplet integriert werden. Die hierin beschriebenen Konzepte ermöglichen die Verbindung und Kommunikation zwischen den unterschiedlichen Formen von IP innerhalb der GPU. IP-Cores können unter Verwenden unterschiedlicher Prozesstechnologien hergestellt und während der Herstellung zusammengestellt werden, wodurch die Komplexität des Konvergierens mehrerer IPs, insbesondere auf einem großen SoC mit mehreren IP-Arten für denselben Herstellungsprozess vermieden wird. Das Ermöglichen der Verwendung mehrerer Prozesstechnologien verkürzt die Markteinführungszeit und bietet eine kostengünstige Möglichkeit, mehrere Produkt-SKUs zu erstellen. Zusätzlich sind die disaggregierten IPs für ein unabhängiges Power-Gate besser unabhängig für Power-Gating geeignet, Bauelemente, die bei einer bestimmten Arbeitslast nicht verwendet werden, können ausgeschaltet werden, wodurch der Gesamtstromverbrauch reduziert wird.
  • Die Hardware-Logik-Chiplets können spezielle Hardware-Logik-Chiplets 2472, Logik- oder E/A-Chiplets 2474 und/oder Speicher-Chiplets 2475 beinhalten. Die Hardware-Logik-Chiplets 2472 und die Logik- oder E/A-Chiplets 2474 können zumindest teilweise in konfigurierbarer Logik- oder Logikhardware mit fester Funktionalität implementiert sein und können einen oder mehrere Teile eines oder mehrerer der Prozessorkerne, Grafikprozessoren)., parallele Prozessoren oder andere hierin beschriebene Beschleunigervorrichtungen beinhalten. Die Speicher-Chiplets 2475 können DRAM- Speicher (zum Beispiel GDDR, HBM-Speicher) oder Cache-Speicher (SRAM-Speicher) sein.
  • Jedes Chiplet kann als separater Halbleiter-Die hergestellt und über eine Verbindungsstruktur 2473 mit dem Substrat 2480 gekoppelt werden. Die Verbindungsstruktur 2473 kann dazu konfiguriert sein, elektrische Signale zwischen den verschiedenen Chiplets und der Logik innerhalb des Substrats 2480 zu leiten. Die Verbindungsstruktur 2473 kann Verbindungen umfassen, wie beispielsweise Bumps oder Pillars, ist aber nicht darauf beschränkt. Bei einigen Ausführungsformen kann die Verbindungsstruktur 2473 konfiguriert sein, um elektrische Signale zu leiten, wie zum Beispiel Eingangs-/Ausgangs-(E/A)-Signale und/oder Strom- oder Massesignale, die mit dem Betrieb der Logik, der E/A und des Speichers verbunden sind.
  • Das Substrat 2480 kann ein Laminatsubstrat auf Epoxidbasis sein, ist jedoch nicht darauf beschränkt, und das Substrat 2480 kann auch andere geeignete Arten von Substraten beinhalten. Die Package-Anordnung 2490 kann über eine Package-Verbindung 2483 mit anderen elektrischen Geräten verbunden werden. Die Package-Verbindung 2483 kann mit einer Oberfläche des Substrats 2480 gekoppelt sein, um elektrische Signale zu anderen elektrischen Vorrichtungen zu leiten, wie zum Beispiel einem Motherboard, einem anderen Chipsatz oder einem Multi-Chip-Modul.
  • Ein Logik- oder E/A-Chiplet 2474 und ein Speicher-Chiplet 2475 können über eine Brücke 2487 elektrisch gekoppelt sein, die dazu konfiguriert ist, elektrische Signale zwischen dem Logik- oder E/A-Chiplet 2474 und einem Speicher-Chiplet 2475 zu leiten. Die Brücke 2487 kann eine dichte Verbindungsstruktur sein, die einen Weg für elektrische Signale bereitstellt. Die Brücke 2487 kann ein Brückensubstrat beinhalten, das aus Glas oder einem geeigneten Halbleitermaterial zusammengesetzt ist. Auf dem Brückensubstrat können elektrische Routing-Merkmale gebildet werden, um eine Chip-zu-Chip-Verbindung zwischen dem Logik- oder E/A-Chiplet 2474 und einem Speicher-Chiplet 2475 bereitzustellen. Die Brücke 2487 kann auch als Siliziumbrücke oder Verbindungsbrücke bezeichnet werden. Die Brücke 2487 ist beispielsweise eine eingebettete Multi-Die-Verbindungsbrücke (EMIB). Alternativ kann die Brücke 2487 einfach eine direkte Verbindung von einem Chiplet zu einem anderen Chiplet sein.
  • Das Substrat 2480 kann Hardwarebauelemente für die E/A 2491, den Cache-Speicher 2492 und andere Hardwarelogik 2493 beinhalten. Eine Struktur 2485 kann in das Substrat 2480 eingebettet sein, um eine Kommunikation zwischen den verschiedenen Logikchiplets und der Logik 2491, 2493 innerhalb des Substrats 2480 zu ermöglichen. Optional können die E/A 2491, die Struktur 2485, der Cache, die Brücke und andere Hardwarelogik 2493 in einen Basis-Die integriert werden, der auf das Substrat 2480 geschichtet ist.
  • Darüber hinaus kann eine Package-Anordnung 2490 auch eine kleinere oder größere Anzahl von Bauelementen und Chiplets beinhalten, die durch eine Struktur 2485 oder eine oder mehrere Brücken 2487 miteinander verbunden sind. Die Chiplets innerhalb der Package-Anordnung 2490 können in einer 3D- oder 2,5D-Anordnung angeordnet sein. Im Allgemeinen können Brückenstrukturen 2487 verwendet werden, um eine Punkt-zu-Punkt-Verbindung zwischen beispielsweise Logik- oder E/A-Chiplets und Speicher-Chiplets zu erleichtern. Die Struktur 2485 kann verwendet werden, um die verschiedenen Logik- und/oder E/A-Chiplets (zum Beispiel Chiplets 2472, 2474, 2491, 2493) mit anderen Logik- und/oder E/A-Chiplets zu verbinden. Der Cache-Speicher 2492 innerhalb des Substrats kann als globaler Cache für die Package-Anordnung 2490, als Teil eines verteilten globalen Cache oder als dedizierter Cache für die Struktur 2485 fungieren.
  • 24D veranschaulicht eine Package-Anordnung 2494, die austauschbare Chiplets 2495 gemäß einer Ausführungsform beinhaltet. Die austauschbaren Chiplets 2495 können in standardisierte Steckplätze auf einem oder mehreren Basis-Chiplets 2496, 2498 montiert werden. Die Basis-Chiplets 2496, 2498 können über eine Brückenverbindung 2497 gekoppelt sein, die den anderen hierin beschriebenen Brückenverbindungen ähnlich sein kann und beispielsweise eine EMIB sein kann. Speicher-Chiplets können auch über eine Brückenverbindung mit Logik- oder E/A-Chiplets verbunden werden. E/A- und Logikchiplets können über eine Verbindungsstruktur kommunizieren. Die Basis-Chiplets können jeweils einen oder mehrere Steckplätze in einem standardisierten Format für Logik oder E/A oder Speicher/Cache unterstützen.
  • SRAM- und Leistungsabgabeschaltungen können in einem oder mehreren der Basis-Chiplets 2496, 2498 hergestellt werden, die unter Verwenden einer unterschiedlichen Prozesstechnologie im Vergleich zu den austauschbaren Chiplets 2495 hergestellt werden können, die auf der Oberseite der Basis-Chiplets gestapelt sind. Beispielsweise können die Basis-Chiplets 2496, 2498 unter Verwenden einer größeren Prozesstechnologie hergestellt werden, während die austauschbaren Chiplets unter Verwenden einer kleineren Prozesstechnologie hergestellt werden können. Eines oder mehrere der austauschbaren Chiplets 2495 können Speicher-Chiplets (zum Beispiel DRAM) sein. Für die Package-Anordnung 2494 können unterschiedliche Speicherdichten auf Grundlage der Leistung und/oder Performanz ausgewählt werden, die für das Produkt, das die Package-Anordnung 2494 verwendet, angestrebt wird. Außerdem können Logik-Chiplets mit einer anderen Anzahl von Typen von Funktionseinheiten zum Zeitpunkt des Zusammenbaus basierend auf der Leistung und/oder Performanz ausgewählt werden, die für das Produkt angestrebt wird. Darüber hinaus können Chiplets mit IP-Logikkernen unterschiedlicher Typen in die austauschbaren Chiplet-Steckplätze eingefügt werden, wodurch Hybridprozessordesigns ermöglicht werden, die IP-Blöcke unterschiedlicher Technologie kombinieren und anpassen können.
  • Beispielhaftes System auf einem integrierten Chip-Schaltkreis
  • Die 25-26 veranschaulichen beispielhafte integrierte Schaltungen und zugehörige Grafikprozessoren, die unter Verwenden eines oder mehrerer IP-Kerne hergestellt werden können. Zusätzlich zu dem, was veranschaulicht ist, können andere Logiken und Schaltungen enthalten sein, einschließlich zusätzlicher Grafikprozessoren/-kerne, peripherer Schnittstellencontroller oder Allzweckprozessorkerne. Die Elemente der 25-26, die den gleichen oder ähnlichen Namen aufweisen wie die Elemente einer anderen Figur, beschreiben hierin die gleichen Elemente wie in den anderen Figuren, arbeiten oder funktionieren auf ähnliche Weise, beinhalten die gleichen Bauelemente und können mit anderen Entitäten verknüpft sein, wie sie an anderer Stelle hierin beschrieben sind, sind jedoch nicht darauf beschränkt.
  • 25 ist ein Blockschaltbild, das ein beispielhaftes System auf einer integrierten Chipschaltung 2500 darstellt, das unter Verwenden eines oder mehrerer IP-Kerne hergestellt werden kann. Die beispielhafte integrierte Schaltung 2500 beinhaltet einen oder mehrere Anwendungsprozessor(en) 2505 (zum Beispiel CPUs), mindestens einen Grafikprozessor 2510, der eine Variante des Grafikprozessors 1408, 1508, 2510 oder eines beliebigen hierin beschriebenen Grafikprozessors sein kann, und kann an Stelle jedes beschriebenen Grafikprozessors verwendet werden kann. Daher offenbart die Offenbarung von Merkmalen in Kombination mit einem Grafikprozessor hierin auch eine entsprechende Kombination mit dem Grafikprozessor 2510, ist aber nicht darauf beschränkt. Die integrierte Schaltung 2500 kann zusätzlich einen Bildprozessor 2515 und/oder einen Videoprozessor 2520 beinhalten, von denen jeder ein modularer IP-Kern von derselben oder mehreren unterschiedlichen Konstruktionseinrichtungen sein kann. Die integrierte Schaltung 2500 kann eine Peripherie- oder Buslogik beinhalten, einschließlich eines USB-Controllers 2525, eines UART-Controllers 2530, eines SPI/SDIO-Controllers 2535 und eines I2S/I2C-Controllers 2540. Zusätzlich kann die integrierte Schaltung eine Anzeigevorrichtung 2545 beinhalten, die mit einem oder mehreren eines High-Definition-Multimedia-Schnittstellen-(HDMI)-Controllers 2550 und einer mobilen Industrieprozessor-Schnittstellen-(MIPI)-Anzeigeschnittstelle 2555 gekoppelt ist. Der Speicher kann von einem Flash-Speicher-Subsystem 2560 bereitgestellt werden, das Flash-Speicher und einen Flash-Speicher-Controller beinhaltet. Die Speicherschnittstelle kann über einen Speicher-Controller 2565 für den Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt werden. Einige integrierte Schaltungen beinhalten zusätzlich eine eingebettete Sicherheitsmaschine 2570.
  • Die 26A-26B sind Blockschaltbilder, die beispielhafte Grafikprozessoren zur Verwendung in einem SoC gemäß hierin beschriebenen Ausführungsformen veranschaulichen. Die Grafikprozessoren können Varianten der Grafikprozessoren 1408, 1508, 2510 oder eines beliebigen anderen hierin beschriebenen Grafikprozessors sein. Die Grafikprozessoren können an Stelle des Grafikprozessors 1408, 1508, 2510 oder jedes anderen Grafikprozessors, der hierin beschriebenen ist, verwendet werden. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit dem Grafikprozessor 1408, 1508, 2510 oder einem anderen der hierin beschriebene Grafikprozessoren auch eine entsprechende Kombination mit den Grafikprozessoren der 26A-26B, ist aber nicht darauf beschränkt. 26A veranschaulicht einen beispielhaften Grafikprozessor 2610 eines Systems auf einer integrierten Chip-Schaltung, der gemäß einer Ausführungsform unter Verwenden eines oder mehrerer IP-Kerne hergestellt werden kann. 26B veranschaulicht einen zusätzlichen beispielhaften Grafikprozessor 2640 eines Systems auf einer integrierten Chip-Schaltung, der gemäß einer Ausführungsform unter Verwenden eines oder mehrerer IP-Kerne hergestellt werden kann. Der Grafikprozessor 2610 der 26A ist ein Beispiel für einen Grafikprozessorkern mit niedriger Leistung. Der Grafikprozessor 2640 der 26B ist ein Beispiel für einen Grafikprozessorkern mit höherer Leistung. Beispielsweise kann jeder der Grafikprozessoren 2610, 2640 eine Variante des Grafikprozessors 2510 der 25 sein, wie zu Beginn dieses Absatzes erwähnt.
  • Wie in 26A gezeigt, beinhaltet der Grafikprozessor 2610 einen Eckpunktprozessor 2605 und einen oder mehrere Fragmentprozessoren 2615A bis 2615N (zum Beispiel 2615A, 2615B, 2615C, 2615D bis 2615N-1 und 2615N). Der Grafikprozessor 2610 kann unterschiedliche Shader-Programme über separate Logik ausführen, so dass der Vertex-Prozessor 2605 optimiert ist, um Operationen für Vertex-Shader-Programme auszuführen, während der eine oder die mehreren Fragment-Prozessoren 2615A bis 2615N Fragment- (zum Beispiel Pixel) -Schattierungsoperationen für Fragment- oder Pixel-Shader-Programme ausführen. Der Vertex-Prozessor 2605 führt die Eckpunktverarbeitungsstufe der 3D-Grafikpipeline aus und erzeugt Grundelemente und Eckpunktdaten. Der (die) Fragmentprozessor(en) 2615A-2615N verwenden die Grundelement- und Eckpunktdaten, die von dem Vertex-Prozessor 2605 erzeugt werden, um einen Rahmenpuffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. Der (die) Fragmentprozessor(en) 2615A bis 2615N können optimiert sein, um Fragment-Shader-Programme auszuführen, wie in der OpenGL-API vorgesehen, die verwendet werden können, um ähnliche Operationen wie ein Pixel-Shader-Programm auszuführen, wie es in der Direct 3D-API vorgesehen ist.
  • Der Grafikprozessor 2610 beinhaltet zusätzlich eine oder mehrere Speicherverwaltungseinheiten (MMUs) 2620A-2620B, Cache(s) 2625A-2625B und Schaltungsverbindung(en) 2630A-2630B. Die eine oder mehreren MMU(s) 2620A-2620B stellen eine virtuelle zu einer physischen Adresszuordnung für den Grafikprozessor 2610 bereit, einschließlich für den Eckpunktprozessor 2605 und/oder Fragmentprozessor(en) 2615A bis 2615N, die auf Eckpunkt- oder Bild-/Texturdaten verweisen können, die im Speicher gespeichert sind, zusätzlich zu Eckpunkt- oder Bild-/Texturdaten, die in dem einen oder mehreren Cache(s) 2625A-2625B gespeichert sind. Die eine oder mehreren MMU(s) 2620A-2620B können mit anderen MMUs innerhalb des Systems synchronisiert werden, einschließlich einer oder mehreren MMUs, die mit dem einen oder mehreren Anwendungsprozessor(en) 2505, dem Bildprozessor 2515 und/oder dem Videoprozessor 2520 der 25 assoziiert sind, so dass jeder Prozessor 2505 bis 2520 an einem gemeinsam genutzten oder vereinheitlichten virtuellen Speichersystem teilnehmen kann. Bauelemente des Grafikprozessors 2610 können Bauelemente anderer hierin beschriebener Grafikprozessoren entsprechen. Die eine oder mehreren MMU(s) 2620A-2620B können der MMU 245 der 2C entsprechen. Der Vertex-Prozessor 2605 und Fragment-Prozessor(en) 2615A bis 2615N können dem Grafik-Multiprozessor 234 entsprechen. Die eine oder mehreren Schaltungsverbindungen 2630A-2630B ermöglichen dem Grafikprozessor 2610 gemäß Ausführungsformen eine Schnittstelle mit anderen IP-Kernen innerhalb des SoC entweder über einen internen Bus des SoC oder über eine direkte Verbindung. Die eine oder mehreren Schaltungsverbindungen 2630A-2630B können der Datenkreuzschiene 240 der 2C entsprechen. Eine weitere Entsprechung findet man zwischen analogen Bauelementen des Grafikprozessors 2610 und den verschiedenen hierin beschriebenen Grafikprozessorarchitekturen.
  • Wie in 26B gezeigt, beinhaltet der Grafikprozessor 2640 die eine oder die mehreren MMU(s) 2620A-2620B, Cache(s) 2625A-2625B und Schaltungsverbindung(en) 2630A-2630B des Grafikprozessors 2610 der 26A. Der Grafikprozessor 2640 beinhaltet einen oder mehrere Shader-Kerne 2655A-2655N (zum Beispiel 2655A, 2655B, 2655C, 2655D, 2655E, 2655F bis 2655N-1 und 2655N), was eine vereinheitlichte Shader-Kern-Architektur bereitstellt, in der ein einzelner Kern oder Typ von Kern alle Arten von programmierbarem Shader-Code, einschließlich Shader-Programmcode ausführen kann, um Vertex-Shader, Fragment-Shader und/oder Compute-Shader zu implementieren. Die genaue Anzahl der vorhandenen Shader-Kerne kann zwischen Ausführungsformen und Implementierungen variieren. Zusätzlich beinhaltet der Grafikprozessor 2640 einen Inter-Core-Task-Manager 2645, der als Thread-Dispatcher fungiert, um Ausführungs-Threads an einen oder mehrere Shader-Kerne 2655A bis 2655N zu verteilen, und eine Tile-Einheit 2658, um Tile-Operationen für Tilebasiertes Rendering zu beschleunigen, wobei Rendering-Operationen für eine Szene in Bildraum unterteilt werden, um beispielsweise die lokale räumliche Kohärenz innerhalb einer Szene zu nutzen oder die Nutzung interner Caches zu optimieren. Die Shader-Kerne 2655A bis 2655N können beispielsweise dem Grafik-Multiprozessor 234 wie in 2D oder Grafik-Multiprozessoren 325, 350 der 3A bzw. 3B oder der Mehrkerngruppe 365A der 3C entsprechen.
  • Hierin beschriebene Ausführungsformen beinhalten Software, Firmware und Hardwarelogik, die Techniken zum Ausführen von Arithmetik an dünnbesetzten Daten über eine systolische Verarbeitungseinheit bereitstellt. Die hierin beschriebene Ausführungsform stellte Techniken bereit, um Rechenoperationen für mit Nullen gefüllte Matrizen und Sub-Matrizen zu überspringen. Ausführungsformen stellen zusätzlich Techniken bereit, um Datenkompression bis hin zu einer Verarbeitungseinheit aufrechtzuerhalten. Ausführungsformen stellen zusätzlich eine Architektur für eine dünnbesetzte bewusste Logikeinheit bereit.
  • GPGPU mit Tensor-Beschleunigungslogik und Unified Memory
  • 27 ist ein Blockschaltbild eines Datenverarbeitungssystems 2700 gemäß einer Ausführungsform. Das Datenverarbeitungssystem 2700 ist ein heterogenes Verarbeitungssystem mit einem Prozessor 2702, einem vereinheitlichen Speicher 2710 und einer GPGPU 2720 einschließlich einer Beschleunigungslogik für maschinelles Lernen. Der Prozessor 2702 und die GPGPU 2720 können jeder der hierin beschriebenen Prozessoren und GPGPU/parallelen Prozessoren sein. Der Prozessor 2702 kann Anweisungen für einen Compiler 2715 ausführen, die im Systemspeicher 2712 gespeichert sind. Der Compiler 2715 wird auf dem Prozessor 2702 ausgeführt, um den Quellcode 2714A in den kompilierten Code 2714B zu kompilieren. Der kompilierte Code 2714B kann Anweisungen beinhalten, die von dem Prozessor 2702 ausgeführt werden können, und/oder Anweisungen, die von der GPGPU 2720 ausgeführt werden können. Während der Kompilierung kann der Compiler 2715 Operationen ausführen, um Metadaten einzufügen, einschließlich Hinweise bezüglich des Niveaus der Datenparallelität, die in dem kompilierten Code 2714B vorhanden sind, und/oder Hinweise bezüglich der Datenlokalität, die mit zu verteilenden Threads auf Grundlage des kompilierten Codes 2714B verknüpft ist. Der Compiler 2715 kann die Informationen beinhalten, die zum Ausführen derartiger Operationen erforderlich sind, oder die Operationen können mit Hilfe einer Laufzeitbibliothek 2716 ausgeführt werden. Die Laufzeitbibliothek 2716 kann den Compiler 2715 auch bei der Kompilierung des Quellcodes 2714A unterstützen und kann auch Anweisungen beinhalten, die zur Laufzeit mit dem kompilierten Code 2714B verknüpft sind, um die Ausführung der kompilierten Anweisungen auf der GPGPU 2720 zu erleichtern.
  • Der vereinheitlichte Speicher 2710 stellt einen vereinheitlichten Adressraum dar, auf den der Prozessor 2702 und die GPGPU 2720 zugreifen können. Der vereinheitlichte Speicher kann Systemspeicher 2712 sowie GPGPU-Speicher 2718 beinhalten. Der GPGPU-Speicher 2718 ist ein Speicher innerhalb eines Adressbereichs der GPGPU 2720 und kann einen Teil oder den gesamten Systemspeicher 2712 beinhalten. Bei einer Ausführungsform kann der GPGPU-Speicher 2718 auch mindestens einen Teil eines beliebigen Speichers beinhalten, der ausschließlich für die Verwendung durch die GPGPU 2720 bestimmt ist. Bei einer Ausführungsform kann der im Systemspeicher 2712 gespeicherte kompilierte Code 2714B für den Zugriff durch die GPGPU 2720 in den GPGPU-Speicher 2718 abgebildet werden.
  • Die GPGPU 2720 umfasst mehrere Rechenblöcke 2724A bis 2724N, die eine oder mehrere einer Vielzahl hier beschriebener Verarbeitungsressourcen beinhalten können. Die Verarbeitungsressourcen können eine Vielzahl unterschiedlicher Rechenressourcen sein oder beinhalten, wie beispielsweise Ausführungseinheiten, Recheneinheiten, Streaming-Multiprozessoren, Grafik-Multiprozessoren oder Multi-Core-Gruppen. Bei einer Ausführungsform umfasst die GPGPU 2720 zusätzlich einen Tensor-Beschleuniger (zum Beispiel Matrix-Beschleuniger) 2723, der eine oder mehrere Spezialfunktions-Berechnungseinheiten beinhalten kann, die entworfen sind, um eine Teilmenge von Matrixoperationen (zum Beispiel Skalarprodukt usw.) zu beschleunigen. Der Tensor-Beschleuniger 2723 kann auch als Tensor-Beschleuniger oder Tensor-Kern bezeichnet werden. Bei einer Ausführungsform können Logikbauelemente innerhalb des Tensor-Beschleunigers 2723 über die Verarbeitungsressourcen der mehreren Rechenblöcke 2724A bis 2724N verteilt werden.
  • Die GPGPU 2720 kann auch einen Satz von Ressourcen beinhalten, der von den Rechenblöcken 2724A-2724N und dem Tensor-Beschleuniger 2723 gemeinsam genutzt werden kann, einschließlich, aber nicht beschränkt auf einen Satz von Registern 2725, ein Leistungs- und Performanzmodul 2726 und einen Cache 2727. Bei einer Ausführungsform beinhalten die Register 2725 direkt und indirekt zugängliche Register, wobei die indirekt zugänglichen Register für die Verwendung durch den Tensor-Beschleuniger 2723 optimiert sind. Das Leistungs- und Performanzmodul 2726 kann konfiguriert sein, um Leistungsabgabe und Taktfrequenzen für die Rechenblöcke 2724A bis 2724N anzupassen, um Gate-Leerlaufbauelemente innerhalb der Rechenblöcke 2724A bis 2724N mit Leistung zu versorgen. Bei verschiedenen Ausführungsformen kann der Cache 2727 einen Instruktions-Cache und/oder einen Daten-Cache niedrigerer Ebene beinhalten.
  • Die GPGPU 2720 kann zusätzlich einen L3-Daten-Cache 2730 beinhalten, der verwendet werden kann, um Daten zwischenzuspeichern, auf die von dem Tensor-Beschleuniger 2723 und/oder den Rechenelementen innerhalb der Rechenblöcke 2724A bis 2724N aus dem vereinheitlichten Speicher 2710 zugegriffen wird. Bei einer Ausführungsform beinhaltet der L3-Daten-Cache 2730 einen gemeinsam genutzten lokalen Speicher 2732, der von den Rechenelementen innerhalb der Rechenblöcke 2724A bis 2724N und dem Tensor-Beschleuniger 2723 gemeinsam genutzt werden kann.
  • Bei einer Ausführungsform beinhaltet die GPGPU 2720 eine Befehlshandhabungslogik, wie etwa eine Abruf- und Decodiereinheit 2721 und einen Scheduler-Controller 2722. Die Abruf- und Decodiereinheit 2721 beinhaltet eine Abrufeinheit und eine Decodiereinheit zum Abrufen und Decodieren von Anweisungen zur Ausführung durch einen oder mehrere der Rechenblöcke 2724A bis 2724N oder den Tensor-Beschleuniger 2723. Die Anweisungen können über den Scheduler-Controller 2722 an die entsprechende Funktionseinheit innerhalb des Rechenblocks 2724A bis 2724N oder den Tensor-Beschleuniger eingeplant werden. Bei einer Ausführungsform ist der Scheduler-Controller 2722 eine ASIC, die konfiguriert werden kann, um erweiterte Scheduling-Operationen auszuführen. Bei einer Ausführungsform ist der Scheduler-Controller 2722 ein Mikrocontroller oder ein Prozessorkern mit niedriger Energie pro Anweisung, der in der Lage ist, von einem Firmware-Modul geladene Scheduler-Anweisungen auszuführen.
  • Bei einer Ausführungsform können einige der Rechenblöcke 2724A bis 2724N auszuführende Funktionen direkt auf den Tensor-Beschleuniger 2723 eingeplant oder ausgelagert werden. Bei verschiedenen Ausführungsformen beinhaltet der Tensor-Beschleuniger 2723 eine Verarbeitungselementlogik, die konfiguriert ist, um Matrix-Berechnungsoperationen effizient, wie beispielsweise Multiplikations- und Addieroperationen und Skalarproduktoperationen, die von 3D-Grafik- oder Compute-Shader-Programmen verwendet werden, auszuführen. Bei einer Ausführungsform kann der Tensor-Beschleuniger 2723 konfiguriert sein, um Operationen zu beschleunigen, die von Frameworks für maschinelles Lernen verwendet werden. Bei einer Ausführungsform ist der Tensor-Beschleuniger 2723 eine anwendungsspezifische integrierte Schaltung, die explizit konfiguriert ist, um einen spezifischen Satz von Parallelmatrixmultiplikations- und/oder Additionsoperationen auszuführen. Bei einer Ausführungsform ist der Tensor-Beschleuniger 2723 ein feldprogrammierbares Gate-Array (FPGA), das eine feste Funktionslogik bereitstellt, die zwischen Arbeitslasten aktualisiert werden kann. Der Satz von Matrixoperationen, die von dem Tensor-Beschleuniger 2723 ausgeführt werden können, kann im Vergleich zu den Operationen, die von den Rechenblöcken 2724A bis 2724N ausgeführt werden können, beschränkt sein. Jedoch kann der Tensor-Beschleuniger 2723 diese Operationen mit einem signifikant höheren Durchsatz im Vergleich zu den Rechenblöcken 2724A bis 2724N ausführen.
  • 28 veranschaulicht eine Matrixoperation 2805, die von einer Anweisungspipeline 2800 ausgeführt wird, gemäß einer Ausführungsform. Die Anweisungspipeline 2800 kann konfiguriert sein, um eine Matrixoperation 2805 auszuführen, wie beispielsweise eine Skalarproduktoperation, ist aber nicht darauf beschränkt. 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 DE112020001249T5_0001
  • Das Skalarprodukt kann in einer Faltungsoperation für ein neuronales Faltungsnetzwerk (CNN) verwendet werden. 28 veranschaulicht eine zweidimensionale (2D) Faltung unter Verwenden einer Matrixoperation 2805, einschließlich einer Skalarproduktoperation. Während eine 2D-Faltung veranschaulicht ist, kann eine N-dimensionale Faltung an einem N-dimensionalen Volumen unter Verwenden von N-dimensionalen Filtern ausgeführt werden. Ein rezeptives Feld-Tile 2802 hebt einen Teil eines Eingabevolumens in einem Eingabevolumenpuffer 2804 hervor. Der Eingabevolumenpuffer kann in dem Speicher 2830 gespeichert werden. Eine Skalarproduktmatrixoperation 2805 kann zwischen den Daten innerhalb des rezeptiven Feld-Tile 2802 und eines Faltungsfilters ausgeführt werden, um einen Datenpunkt innerhalb des Ausgabepuffers 2806 zu erzeugen, der auch in dem Speicher 2830 gespeichert werden kann. Der Speicher 2830 kann ein beliebiger der hierin beschriebenen Speicher sein, einschließlich Systemspeicher 2712, GPGPU-Speicher 2718, oder ein oder mehrere Cache-Speicher 2727, 2730 wie in 27.
  • Die Kombination der Datenpunkte innerhalb des Ausgabepuffers 2806 stellt eine Aktivierungsabbildung dar, die durch die Faltungsoperation erzeugt wird. Jeder Punkt innerhalb der Aktivierungsabbildung wird erzeugt, indem das rezeptive Feld-Tile über den Eingabevolumenpuffer 2804 geschoben wird. Die Aktivierungsabbildungsdaten können in eine Aktivierungsfunktion eingegeben werden, um einen Ausgabeaktivierungswert zu bestimmen. Bei einer Ausführungsform kann die Faltung des Eingabevolumenpuffers 2804 innerhalb eines Rahmens als Matrixoperation 2905 auf hoher Ebene definiert werden. Die Matrixoperationen auf hoher Ebene können über primitive Operationen ausgeführt werden, wie beispielsweise eine grundlegende lineare Algebra-Unterprogramm--Operation -(BLAS-Operation). Die primitiven Operationen können über Hardwarebefehle, die von der Anweisungspipeline 2800 ausgeführt werden, beschleunigt werden.
  • Die Anweisungspipeline 2800, die zum Beschleunigen von Hardwareanweisungen verwendet wird, kann die Anweisungsabruf- und -decodiereinheit 2721 beinhalten, die Hardwareanweisungen abrufen und decodieren kann, und die Schedulersteuerung 2722, die decodierte Befehle für eine oder mehrere Verarbeitungsressourcen innerhalb der Rechenblöcke 2724A bis 2724N und/oder des Tensor-Beschleunigers 2723 planen kann. Bei einer Ausführungsform kann eine Hardwareanweisung an die Rechenblöcke 2724A bis 2724N geplant und an den Tensor-Beschleuniger 2723 ausgelagert werden. Die eine oder mehreren Hardwareanweisungen und assoziierten Daten zum Ausführen der Matrixoperation 2805 können im Speicher 2830 gespeichert werden. Die Ausgabe der Hardwareanweisung kann auch im Speicher 2830 gespeichert werden.
  • Bei einer Ausführungsform kann der Tensor-Beschleuniger 2723 eine oder mehrere Hardwareanweisungen ausführen, um die Matrixoperation 2805 unter Verwenden eines integrierten systolischen Array 2808 (DP-Logik) auszuführen. Das systolische Array 2808 kann eine Kombination aus programmierbarer und fester Funktionshardware beinhalten, die konfigurierbar ist, um Skalarproduktoperationen auszuführen. Während Funktionseinheiten innerhalb der Rechenblöcke 2724A bis 2724N auch konfiguriert sein können, um Skalarproduktoperationen auszuführen, kann das systolische Array 2808 konfiguriert sein, um eine begrenzte Teilmenge von Skalarproduktoperationen mit einem signifikant höheren Durchsatz relativ zu dem Rechenblock 2724A bis 2724N auszuführen.
  • Die 29A-29B veranschaulichen Details des hardwarebasierten systolischen Array 2808 gemäß einigen Ausführungsformen. 29A veranschaulicht ein Raster aus mehreren Funktionseinheiten, die konfigurierbar sind, um mehrere Skalarproduktoperationen innerhalb eines einzelnen Taktzyklus auszuführen. 29B veranschaulicht eine einzelne beispielhafte Funktionseinheit. Während einer Berechnung der systolischen Matrix,
  • Wie in 29A gezeigt, ist das systolische Array 2808 bei einer Ausführungsform konfigurierbar, um einen Satz paralleler Skalarproduktoperationen unter Verwenden einer Vielzahl von Funktionseinheiten auszuführen. Die Skalarprodukte können auf „systolische“ Weise ausgeführt werden, bei der SIMD-Daten über mehrere Schichten von Funktionseinheiten gepumpt werden. Wie in 29A gezeigt, ist das systolische Array 2808 bei einer Ausführungsform konfigurierbar, um einen Satz paralleler Skalarproduktoperationen unter Verwenden einer Vielzahl von Funktionseinheiten auszuführen. Die Skalarprodukte können auf „systolische“ Weise ausgeführt werden, bei der SIMD-Daten über mehrere Schichten von Funktionseinheiten gepumpt werden. Das systolische Array 2808 ist eine Sammlung von Funktionseinheiten, die in einem Raster angeordnet sind. Das Raster der Funktionseinheiten arbeitet im Gleichschritt und ist für die Ausführung von Mehrfachakkumulationsoperationen optimiert. Durch das systolische Array 2808 zu bearbeitende Matrizen werden in Submatrizen unterteilt, die über das Raster von Funktionseinheiten gepumpt werden.
  • Bei einer Ausführungsform kann das systolische Array 2808 eine konfigurierbare Anzahl von SIMD-Datenkanälen unter Verwenden einer konfigurierbaren systolischen Tiefe verarbeiten. Für eine gegebene Anweisung können eine SIMD-Breite und eine systolische Tiefe ausgewählt werden, um einen Satz von Quelldaten zu verarbeiten. Die systolische Tiefe definiert die Anzahl der systolischen Schichten der Hardwarelogik, die verwendet werden, um eine Anweisung zu verarbeiten. Eine systolische Schicht ist eine Gruppe von Multiplizierer- und Addiererlogikeinheiten mit einer variablen SIMD-Breite, wobei die systolische Schicht als Eingabe einen anfänglichen Akkumulatorwert empfangen kann und einen Skalarproduktwert zur Ausgabe an eine nachfolgende systolische Schicht oder an ein Ausgaberegister erzeugt.
  • Bei einigen Ausführungsformen können drei Quellen verarbeitet werden, wobei jede Quelle ein Vektorregister oder ein Direktregister sein kann. Bei einer Ausführungsform kann die Quelle 2900 (SRC0) ein oder mehrere anfängliche Akkumulatorwerte sein, die ein einzelner Wert oder ein Vektor von Akkumulatorwerten sein können. Der anfängliche Akkumulatorwert wird zu dem ersten Satz von Skalarprodukten addiert, der von jeder Funktionseinheit innerhalb der ersten systolischen Schicht berechnet wird. Das von einer Funktionseinheit berechnete Skalarprodukt kann der nächsten systolischen Schicht für den gegebenen SIMD-Kanal bereitgestellt werden. Die Skalarprodukte können basierend auf Quelle 2901 (SRC1) und Quelle 2902 (SRC2) berechnet werden, die Vektorregister sind, die einen oder mehrere Kanäle gepackter Daten enthalten können, wobei jeder Kanal einen Vierelementvektor enthält. Bei einer Ausführungsform ist jeder Kanal 32 Bit breit und stellt vier 8-Bit-Vektorelemente bereit. Einige Ausführungsformen sind konfigurierbar, um Skalarprodukte aus Eingangsvektoren mit 8-Bit-Elementen, 4-Bit-Elementen und/oder 2-Bit-Elementen zu berechnen. Bei einer Ausführungsform können Operationen mit gemischter Präzision unter Verwendung einer beliebigen Kombination unterstützter Elementgrößen (zum Beispiel 8-Bit x 2-Bit, 8-Bit x 4-Bit, 4-Bit x 4-Bit usw.) ausgeführt werden. Bei einer Ausführungsform ist das systolische Array 2808 für eine ganzzahlige Berechnung konfiguriert, obwohl bei einigen Ausführungsformen ein automatischer Festkommabetrieb konfigurierbar ist. Obwohl die hierin beschriebene Anweisung ein Skalarprodukt mit vier Elementen ist, kann das systolische Array 2808 bei einigen Ausführungsformen auch derart konfiguriert sein, dass es Gleitkomma-Skalarproduktberechnungen an einer anderen Anzahl von Elementen pro Vektor unterstützt.
  • Bei einer Ausführungsform können mehrere Kanäle von Vierelementvektoren in ein einzelnes Vektorregister verschiedener Breiten (zum Beispiel 64-Bit, 128-Bit, 256-Bit, 512-Bit usw.) gepackt werden. Gleichzeitige Skalarprodukte können über das systolische Array 2808 für mehrere Kanäle von Vektorelementen, die über die Quelle 2901 und die Quelle 2902 bereitgestellt werden, berechnet werden. Die Anzahl der zu verarbeitenden Kanäle von Vektorelementen kann basierend auf einer gewählten Ausführungsgröße und systolischen Tiefe für die Skalarproduktberechnung konfiguriert werden. Bei einer Ausführungsform können Quellenvektoren, die breiter als die angegebene Ausführungsgröße und/oder systolische Tiefe sind, unter Verwenden mehrerer Zyklen des systolischen Array 2808 berechnet werden.
  • Die Anzahl von Berechnungen, die innerhalb eines gegebenen Taktzyklus ausgeführt werden kann, kann basierend auf der Anzahl der SIMD-Bahnen und systolischen Schichten variieren. Das systolische Array 2808 kann, wie veranschaulicht, sechzehn Skalarprodukte pro SIMD-Durchsatzspur unter Verwenden einer systolischen Tiefe von vier ausführen. Wenn sie für acht SIMD-Spuren konfiguriert ist, kann die Logik 128 8-Bit-Ganzzahl-(INT8)-Skalarprodukte innerhalb eines gegebenen Zyklus ausführen. Bei Konfiguration für acht SIMD-Spuren und einer systolischen Tiefe von acht kann jede Spur 32 8-Bit-Integer-(INT8)-Skalarprodukte und insgesamt 256 Skalarprodukte ausführen. Diese spezifische Anzahl von Operationen ist beispielhaft für eine Ausführungsform, und andere Ausführungsformen variieren im Durchsatz. Wenn die Datentypen unterschiedlich sind, wird die Anzahl der Operationen außerdem basierend auf den unterschiedlichen Datentypen skaliert.
  • An jeder Funktionseinheit wird über Multiplizierer- und Addiererlogik ein Skalarprodukt berechnet, und das Skalarprodukt zu einem Akkumulatorwert addiert. Die resultierenden Daten können an ein Zielregister ausgegeben oder an den Akkumulator der nächsten systolischen Schicht geliefert werden. Details einer Funktionseinheit 2912 sind in 29B gezeigt.
  • Wie in 29B gezeigt, kann eine Funktionseinheit 2912 einen Satz von Eingabedatenpuffern 2904, 2906 und einen Akkumulator 2922 beinhalten, die jeweils Eingabedaten akzeptieren können. Bei einer Ausführungsform kann der Datenpuffer 2906 die Quelle 2902 (SRC2) akzeptieren, die ein gepackter Vektor von Eingangsdaten sein kann. Der Eingangsdatenpuffer 2904 kann eine Quelle 2901 (SRC1) aufnehmen, die auch ein gepackter Vektor von Eingangsdaten sein kann. Der Akkumulator 2922 kann eine Quelle 2900 (SRC0) akzeptieren, die einen anfänglichen Akkumulatorwert für die Funktionseinheit 2912 bereitstellt. Der anfängliche Akkumulatorwert wird zu dem Skalarprodukt, das aus den Elementen der Quelle 2901 und der Quelle 2902 berechnet wird, addiert. Das Skalarprodukt wird über eine elementweise Multiplikation der Quellenvektoren unter Verwenden eines Satzes von Multiplizierern 2923A bis 2923D und eines Addierers 2924 berechnet. Die Multiplizierer 2923A bis 2923D werden verwendet, um einen Satz von Produkten zu berechnen. Eine Summe des Satzes von Produkten wird von dem Addierer 2924 berechnet. Die Summe kann mit jedem über die Quelle 2900 bereitgestellten Anfangswert akkumuliert (zum Beispiel addiert) werden. Bei einer Ausführungsform kann dieser akkumulierte Wert als Eingabewert 2926 für den nächsten Akkumulator, der sich in einer nachfolgenden systolischen Schicht befinden kann, bereitgestellt werden. Bei einer Ausführungsform kann die Quelle 2901 mehrere Kanäle von Eingangsdaten beinhalten. Zusätzliche Kanäle der Quelle 2901 können als SRC1-Eingang an zusätzliche SIMD-Bahnen 2928 weitergeleitet werden. Bei einer Ausführungsform kann die Quelle 2902 mehrere Kanäle von Eingangsdaten beinhalten. Zusätzliche Kanäle der Quelle 2902 können als SRC2-Eingangsdaten für Logikeinheiten innerhalb zusätzlicher systolischer Tiefen verwendet werden. Bei einer Ausführungsform kann die Quelle 2900 optional mehrere Kanäle beinhalten, wobei zusätzliche Kanäle als Eingabe für den Akkumulator innerhalb zusätzlicher Funktionseinheiten bereitgestellt werden. Bei einer Ausführungsform kann die Quelle 2900 ein einzelner Wert sein, der zu jedem Akkumulator in jeder Funktionseinheit der anfänglichen systolischen Schicht hinzugefügt wird.
  • Überspringen von Rechenoperationen für mit Null gefüllte Matrizen und Submatrizen
  • Eine Ausführungsform stellt Techniken bereit, um das Training und die Inferenz auf einem systolischen Array zu optimieren, wenn spärliche Daten verwendet werden. Falls eine durch das systolische Tensor-Array 2808 oder das systolische Array 1912 zu verarbeitende Matrix oder Submatrix vollständig null ist, kann ein Dimensionswert für die Matrix oder Submatrix auf null gesetzt werden, und das systolische Tensor-Array 2808 kann eine oder mehrere Rechenphasen die mit der Submatrix assoziiert sind, abhängig von der auszuführenden Operation umgehen. Während der Vorverarbeitung von Matrixdaten können Null-Submatrizen identifiziert werden und eine Submatrix-Abbildung für die Matrix kann erzeugt werden, um anzugeben, welche Submatrizen nur Null-Werte beinhalten. Bei einer Ausführungsform können zumindest einige Operationen für eine Matrix oder Submatrix, die eine ganze Reihe oder Spalte von Nullwerten enthält, umgangen werden. Bei einer Ausführungsform können auch Submatrizen, die auch nur einen Wert ungleich Null enthalten, umgangen werden.
  • Die 30A-30B veranschaulichen ein System zum Umgehen von Nullwert-Submatrizen gemäß Ausführungsformen. Wie in 30A gezeigt, sind Matrix 3002 und Matrix 3004 Matrizen, in denen eine oder mehrere Submatrizen nur Nullwerte enthalten. Die Verarbeitungslogik kann eine Submatrixabbildung 3012 für die Matrix 3002 und eine Submatrixabbildung 3014 für die Matrix 3004 erzeugen, um anzugeben, ob eine Submatrix nur Nullwerte enthält. Die Submatrixabbildungen können unter Verwenden einer Vielzahl von Techniken erzeugt werden, einschließlich der Ausführung eines bitweisen Vergleichs mit Null für jede Submatrix. Die Submatrixabbildungen können durch Rahmen- oder Treiberlogik erzeugt werden, die auf einer Allzweckverarbeitungslogik (zum Beispiel CPUs) ausgeführt werden, oder können durch dedizierte Hardwarelogik innerhalb der Verarbeitungsressourcen erzeugt werden. Bei einer Ausführungsform, wenn eine Submatrix 3005 eine begrenzte Anzahl von Werten ungleich Null enthält, werden systolische Operationen für diese Submatrix ebenfalls umgangen. Stattdessen kann ein Ergebnis einer Matrixoperation an der Submatrix 3005 unter Verwenden einer ALU an Stelle des systolischen Tensor-Array berechnet werden.
  • Wie in 30B gezeigt, kann ein Speicher 3020 die Matrix 3002 und die Matrix 3004 speichern. Das systolische Tensor-Array 2808 kann eine Matrix-A-Ladeeinheit 3026, eine Matrix-B-Ladeeinheit 3022, eine Matrix-A-Zuführeinheit 3028 und eine Matrix-B-Zufuhreinheit 3024 beinhalten. Matrix 3002 kann als Matrix B geladen und zugeführt werden, während Matrix 3004 als Matrix A geladen und zugeführt werden kann. Submatrizen von Matrix A und Matrix B können geladen und durch die Funktionseinheiten 3030 geleitet werden, die als Verarbeitungselemente des systolischen Tensors-Array 2808 arbeiten.
  • Bei einer Ausführungsform können ein Last-B-Filter 3027 und ein Last-A-Filter 3027 einen Puffer beinhalten, um die Submatrixabbildung 3012 für die Matrix 3002 und die Submatrixabbildung 3014 für die Matrix 3004 zu speichern. Das Last-B-Filter 3021 kann die Last von Nullwert-Submatrizen durch die Matrix-B-Ladeeinheit 3022 umgehen. Das Last-A-Filter 3027 kann die Last von Nullwert-Submatrizen durch die Matrix-A-Ladeeinheit 3026 umgehen. Submatrizen, die nicht umgangen werden, können von den Funktionseinheiten 3030 verarbeitet werden. Abhängig von der von dem systolischen Tensor-Array 2808 auszuführenden Operation, wobei eine der Submatrizen null ist, kann die gesamte Operation umgangen werden. Wenn die Submatrix eine einzelne Submatrix mit einem Wert ungleich Null enthält, können die der auszuführenden Operation zugeordneten Submatrizen das systolische Tensor-Array 2808 umgehen, und die Operation kann von einer ALU über ein System 3110 ausgeführt werden, wie unten in 31B gezeigt.
  • Die 31A-31B veranschaulichen ein Verfahren 3100 und ein System 3110 zum Ausführen von Matrixmultiplikationsoperationen an dünnbesetzten Daten. 31A veranschaulicht ein Verfahren 3100 zum Überspringen von Matrixmultiplikationsoperationen für mit Nullen gefüllte Matrizen und Submatrizen. 31B veranschaulicht ein System 3110, in dem Operationen für nahezu dünnbesetzte Matrizen und Submatrizen umgangen werden können. Das Verfahren 3100 kann von einer Verarbeitungsressource ausgeführt werden, die ein systolisches Array oder ein systolisches Tensor-Array, wie hierin beschrieben, beinhaltet, wobei die Verarbeitungsressource zusätzlich eine Komprimierungs- oder Codierungslogik beinhaltet, die eine Nullerfassungs- und/oder Nullsprungschaltung beinhaltet. Eine beispielhafte NullErfassungs- und/oder Nullsprungschaltung beinhaltet zum Beispiel ein Last-B-Filter 3021 und ein Last-A-Filter 3027, wie in 30B gezeigt. Das System 3110 beinhaltet Bauelemente einer Recheneinheit, wie hierin beschrieben, wie etwa, aber nicht beschränkt auf die Recheneinheit 1910.
  • Wie in 31A gezeigt, beinhaltet das Verfahren 3100 für eine Grafikverarbeitungseinheit, einen Grafik-Multiprozessor oder einen Grafikprozessor mit Nullerfassung und/oder Nullsprungschaltung, um Nullwerte für Operanden von Matrizen zu verfolgen, die in ein Verarbeitungselement eines systolischen Array (3102) einzugeben sind. Falls die Schaltung eine als Eingabe bereitzustellende mit Nullen gefüllte Matrix oder eine mit Nullen gefüllte Submatrix erfasst (3104, JA), kann die Schaltung Operationen für die gesamte Matrix oder Submatrix (3109) umgehen. Eine mit Nullen gefüllte Submatrix kann einen mit Nullen gefüllten Block einer Eingabematrix oder eine mit Nullen gefüllte Zeile oder Spalte der Matrix beinhalten. Falls die Schaltungen, die die als Eingabe bereitzustellende Matrix oder Submatrix nicht mit Nullen gefüllt ist (3104, NEIN), können die Schaltungen fortfahren, Operationen für die Matrix oder Submatrix (3106) auszuführen, wie zum Beispiel Matrixmultiplikationsoperationen oder eine oder mehrere vektorisierte Berechnungen, die ein Nullergebnis basierend auf einer Nullwerteingabe haben. Die Verarbeitungsschaltung kann dann nach Bedarf Berechnungsoperationen auf einer Per-Operanden-Ebene umgehen (3107). Selbst falls beispielsweise eine gesamte Matrix oder Submatrix nicht umgangen werden kann, kann die Gesamtzahl von Operationen durch Überspringen der Operation basierend auf individuellen Nullwert-Operanden reduziert werden. Darüber hinaus können nahezu dünnbesetzte Matrizen oder Submatrizen das systolische Array umgehen, und die begrenzte Anzahl erforderlicher Operationen kann von einer herkömmlichen Logikeinheit innerhalb einer Verarbeitungsressource ausgeführt werden, wie in 31B gezeigt.
  • 31B veranschaulicht ein System 3110 mit einer Logik zum Umgehen eines systolischen Tensor-Array für Operationen an einer Submatrix, die eine begrenzte Anzahl von Nicht-Null-Werten beinhalten. Das System 3110 beinhaltet einen Speicher 3020 und eine Recheneinheit 1910 wie in 19 veranschaulicht. Obwohl die Recheneinheit 1910 veranschaulicht ist, kann das System 3110 alternativ oder zusätzlich andere Arten hier beschriebener Recheneinheiten oder Verarbeitungsressourcen beinhalten. Die Recheneinheit 1910 beinhaltet eine Registerdatei 1906, eine ALU 1911, ein systolisches Array 1912 und eine mathematische Einheit 1913, die optimiert ist, um eine spezifische Teilmenge mathematischer Operationen auszuführen. In Bezug auf das systolische Array 1912 beschriebene Techniken können auch auf das systolische Tensor-Array 2808 der 2 angewandt werden.
  • Elemente der Matrix 3002 und der Matrix 3004, die im Speicher 3120 gespeichert sind, können in die Registerdatei 1906 der Recheneinheit 1910 geladen werden. Wenn beispielsweise eine Submatrix der Matrix 3004 eine begrenzte Anzahl von Nicht-Null-Werten beinhaltet (zum Beispiel die Submatrix 3005 der 30A) kann die Logik innerhalb des systolischen Array 1912 eine Submatrix-Umgehungsmeldung 3112 an die ALU 1911 übertragen, die die Register identifiziert, die Operanden für eine umgangene Operation und die auszuführende umgangene Operation speichern. Die ALU 1911 kann dann die umgangenen Submatrixdaten 3114 aus der Registerdatei 1906 lesen und die umgangene Operation unter Verwenden von Vektorverarbeitungslogik ausführen. Die Verarbeitung der umgangenen Operation kann parallel zu den nicht umgangenen Operationen ausgeführt werden, die von dem systolischen Array 1912 ausgeführt werden.
  • Unter Verwenden der obigen Techniken kann ein Fachmann beispielsweise einen Grafikprozessor, der eine Verarbeitungsressource umfasst, die einen Tensor-Beschleuniger beinhaltet, implementieren, wobei der Tensor-Beschleuniger ein Lastfilter umfasst, um eine Last einer dünnbesetzten Submatrix eines Eingabe-Tensors zu umgehen. Der Tensor-Beschleuniger beinhaltet ein systolisches Tensor-Array, um eine oder mehrere Submatrizen eines Satzes von Eingabematrixdaten zu verarbeiten. Die Verarbeitungsressource kann zusätzlich eine Logikeinheit beinhalten, um eine Operation für eine umgangene Submatrix des Eingangs-Tensors auszuführen, wobei die umgangene Submatrix des Eingangs-Tensors nur Nullwerte beinhaltet. Bei einer Ausführungsform beinhaltet die umgangene Submatrix eine begrenzte Anzahl von Nicht-Null-Werten.
  • Unter Verwenden der obigen Techniken kann ein Fachmann eine Vorrichtung implementieren, die eine Verarbeitungsressource mit einem Tensor-Beschleuniger und einem Decoder beinhaltet. Der Tensor-Beschleuniger enthält ein Lastfilter, um eine Last einer spärlichen Submatrix eines Eingangstensors zu umgehen. Der Decoder ist konfiguriert, um einen codierten Datensatz zu decodieren, der mit dem Eingabe-Tensor assoziiert ist, um einen decodierten Datensatz zu erzeugen. Der Decoder kann den codierten Datensatz basierend auf Metadaten, die mit dem codierten Datensatz assoziiert sind, decodieren, wobei das Lastfilter das Laden der dünnbesetzten Submatrix basierend auf den Metadaten, die mit dem codierten Datensatz assoziiert sind, umgehen soll. Bei einer Ausführungsform soll der Decoder die Metadaten, die mit dem codierten Datensatz assoziiert sind, dem Lastfilter bereitstellen. Die mit dem codierten Datensatz assoziierten Metadaten beinhalten eine Signifikanzabbildung, wobei die Signifikanzabbildung einen Null- oder Nicht-Null-Wert für einen Bitstrom des decodierten Datensatzes angibt. Bei einer Ausführungsform ist der Decoder in dem Tensor-Beschleuniger enthalten, und der Tensor-Beschleuniger soll eine oder mehrere codierte Submatrizen als Eingabe lesen.
  • Komprimierte Daten an EU senden
  • Eine GPU kann eine Datenkomprimierungspipeline enthalten, um die Komprimierung von Pixeldaten zu ermöglichen, die von 3D- und Medienanwendungen verwendet werden. Die von 3D- und Medienanwendungen verwendeten Daten werden vom Standpunkt der GPU-Datenkomprimierung als typisierte Daten betrachtet. GPGPU-Rechendaten, wie beispielsweise Daten für maschinelles Lernen und Deep-Learning-Operationen, werden jedoch als nicht typisierte Daten betrachtet, und eine herkömmliche GPGPU-Komprimierungspipeline kann keine typisierten Datenkomprimierungstechniken verwenden, um solche Daten zu komprimieren. Beispielsweise werden typisierte Daten im Allgemeinen nicht sequenziell im Speicher gespeichert und können stattdessen unter Verwenden eines Tile-, planaren oder anderen Datenformats, das für den zu komprimierenden Datentyp spezifisch ist, gespeichert werden. Im Gegensatz dazu werden nicht typisierte Rechendaten sequenziell im Speicher gespeichert.
  • Hierin beschriebene Ausführungsformen ermöglichen die Anpassung von 3D-Kompressionsblöcken innerhalb einer GPGPU, um eine Komprimierung nicht typisierter Rechendaten zu ermöglichen. Bei einigen Ausführungsformen werden aktuelle Grafik-Assets zur Komprimierung von Machine-Learning-(ML)-Daten unter Verwenden einer aktuellen Pipeline für 3D-Daten eingesetzt.
  • Für 3D-Daten gibt es Zustandsmetadaten, die mit den Daten assoziiert sind, die angeben, wie die Daten im Speicher angeordnet sind. Bei einigen Ausführungsformen ist, um die 3D-Kompressionshardware für die Komprimierung nicht typisierter Daten wiederzuverwenden, eine Vorrichtung, ein System oder ein Prozess dazu konfiguriert, die Speicherzuweisung nicht typisierter Daten durch Software zu erfassen und Zustandsmetadaten für die Zuordnung zu erzeugen. Ein der GPGPU zugeordneter Grafiktreiber kann verwendet werden, um zu bestimmen, ob Daten komprimiert werden sollen, und ein komprimierter Status kann innerhalb der Zustandsmetadaten, die mit der Zuordnung assoziiert sind, konfiguriert werden. Die Zustandsmetadaten werden verwendet, um dem System anzugeben, dass eine Komprimierung für eine Speicherzuordnung , die mit nicht typisierten Rechendaten assoziiert ist, ausgeführt werden soll. Die Zustandsmetadaten können eine oder mehrere Datenstrukturen beinhalten, die verwendet werden können, um die für die Datenkomprimierung zu verwendenden Parameter anzugeben. Die Zustandsmetadaten können auch einen Zeiger auf die Daten beinhalten und können Elemente, wie die Größe des Puffers, den Komprimierungstyp beinhalten, und ein Zeiger auf einen Hilfspuffer ist enthalten, um Komprimierungsmetadaten zur Verwendung beim Komprimieren der nicht typisierten Daten zu speichern.
  • Bei einigen Ausführungsformen ermöglicht ein Datenport die Übertragung von DL/ML-Daten ohne Formatkonvertierung. Für das 3D-Datenformat gibt es eine Konvertierung in das Shader-Format für Pixeldaten. Für maschinelles Lernen und Deep-Learning-Daten wird jedoch ein anderer Prozess verwendet, bei dem keine Formatkonvertierung der Daten stattfindet. Bei einigen Ausführungsformen wird der Datenport modifiziert, um eine Übertragung ohne Formatumwandlung zu ermöglichen. Bei einigen Ausführungsformen adressiert Software stattdessen die DL/ML-Daten.
  • 32 ist ein Blockschaltbild eines Grafikverarbeitungssystems 3200 mit einer GPGPU-Datenkomprimierungspipeline. Die Datenkomprimierungspipeline des Grafikverarbeitungssystems 3200 ist konfiguriert, um eine Komprimierung von 3D-Grafik- und Mediendaten sowie nicht typisierter Rechendaten zu ermöglichen. Das Grafikverarbeitungssystem 3200 beinhaltet eine Verarbeitungsressource 3205, die einen Satz von Shader-Kernen 3210, 3212, 3214, einen Datenport 3220 und einen Oberflächenzustands-Cache 3222 beinhaltet. Die Shader-Kerne 3210, 3212, 3214 senden Speicherlese-/Schreibmeldungen an den Datenport 3220, um auf ein Speichersubsystem 3234 des Grafikverarbeitungssystems 3200 zuzugreifen. Zugriffe auf das Speichersubsystem 3234 werden von einer Cache-Hierarchie 3230 zwischengespeichert. Zwischengespeicherte Daten in der Cache-Hierarchie 3230 können über eine GPGPU-Codec-Einheit 3232 komprimiert werden, bevor die Daten in das Speichersubsystem 3234 geschrieben werden. Die GPGPU-Codec-Einheit 3232 kann auch Daten dekomprimieren, die aus dem Speichersubsystem 3234 gelesen werden, bevor die Daten in die Cache-Hierarchie 3230 geschrieben werden.
  • Die Shader-Speicheroberflächen sind mit einem Oberflächenzustand, der im Oberflächenzustands-Cache 3222 gespeichert werden kann, assoziiert. Der Oberflächenzustand weist Informationen über die Oberfläche, wie zum Beispiel Bits pro Pixel, Tile-Modus, Pixellöschstatus, Komprimierungsstatus usw. auf. Diese Informationen werden von der GPGPU-Codec-Einheit verwendet, um die Daten zu komprimieren, bevor sie an das Speichersubsystem gesandt werden. Bei GPGPU-Programmen, die auf der Verarbeitungsressource 3205 ausgeführt werden, wie beispielsweise Deep-Learning- und/oder Machine-Learning-Workloads, sind die Daten typischerweise „untypisiert“ (das heißt, es wird kein Hardwaredatenformat verwendet) und erfolgt nicht in Tiles (das heißt linear im Speicher angeordnet). Während der Speicherzuordnung durch die Software wendet der GPU-Treiber Heuristiken an, um zu bestimmen, ob die Datenkomprimierung für einen Puffer aktiviert wird oder nicht. Falls die Datenkomprimierung aktiviert ist, ordnet der Treiber einen Hilfspuffer zum Speichern der Komprimierungsmetadaten zu und ordnet auch einen Oberflächenzustand zu. Bei einigen Ausführungsformen soll der Compiler sicherstellen, dass alle Zugriffe vom Kernel auf den Puffer mit dem richtigen Oberflächenzustandszeiger erfolgen. Bei einigen Ausführungsformen wird für GPGPU-Anwendungen der Oberflächenzustand ein Pufferspeicher-Layout anzeigen (das heißt ohne Tiles oder in 2D/3D strukturiert). Das Datenformat für diese Oberflächen hängt vom Datentyp der Oberfläche ab. Für die Deep-Learning-Inferenz kann der Datentyp beispielsweise ein 8-Bit-Integer-Datentyp (zum Beispiel INT8) sein. Für Deep Learning-Training kann das Format ein 16-Bit-Floating-Port-Format sein (zum Beispiel FP16, bfloat16).
  • Bei einigen Ausführungsformen führt der Datenport 3220 während des Zugriffs keine Formatumwandlung aus, obwohl die Rechendatenoberflächen ein spezifiziertes Format aufweisen, weil dies für diese Anwendungen nicht erforderlich ist. Stattdessen werden die Formatinformationen nur zum Treiben der Heuristik des Komprimierungs-/Dekomprimierungsalgorithmus verwendet. Ein Kompressionsdaten-„Block“ ist ein Block von Cache-Zeilen (typischerweise 2 oder 4 Cache-Zeilen), die von der Kompressionseinheit gemeinsam komprimiert werden. Bei einer Ausführungsform sind Cache-Zeilenadressen für die GPGPU-Kompression in einem Block immer sequenziell. Deep-Learning-Programme haben in der Regel eine gute sequenzielle Lokalität bei den Zugriffen, und dies bietet gute Leistung, während die Hardware einfach gehalten wird.
  • Die 33A-33B veranschaulichen Rechenarchitekturen 3300, 3320, die konfiguriert sind, um eine komprimierte Übertragung von Daten eines neuronalen Netzwerks an Verarbeitungsressourcen auf einem parallelen Rechenprozessor oder einer Allzweck-Grafikverarbeitungseinheit gemäß einer Ausführungsform zu ermöglichen. 33A veranschaulicht eine Rechenarchitektur 3300, in der eine Datendekomprimierung innerhalb eines Rechenblocks 3302 ausgeführt wird. Der dargestellte Rechenblock 3302 kann einen der Rechenblöcke 2724A bis 2724N wie in 33B darstellen. 33B veranschaulicht eine Rechenarchitektur 3320, in der Datenkomprimierung und -dekomprimierung innerhalb einer Verarbeitungsressource ausgeführt werden.
  • Wie in 33A gezeigt, beinhaltet die Rechenarchitektur 3300 einen Rechenblock 3302 und einen Hardware-Scratch-Puffer 3304, der über einen DMA-Controller 3306 mit dem Speicher 3308 gekoppelt ist. Der Speicher 3308 kann, wie hierin beschrieben, ein Hauptspeicher oder ein Systemspeicher eines Datenverarbeitungssystems sein. Der Rechenblock 3302 umfasst einen Satz von Verarbeitungsressourcen, wie hierin beschrieben, und kann jedem der Rechenblöcke 2724A bis 2724N wie in 27 ähnlich sein. Der Scratch-Puffer 3304 kann ein Hochgeschwindigkeits-On-Chip-Speicher sein, wie beispielsweise ein statischer On-Chip-Direktzugriffsspeicher (SRAM). Bei einer Ausführungsform ist der Scratch-Puffer 3304 optimiert, um Merkmalsblockeinheiten oder Kernelblockeinheiten für neuronale Netzwerkoperationen, die vom Rechenblock 3302 ausgeführt werden, zu speichern.
  • Bei einer Ausführungsform kann der Decoder 3312 eine Hardware-Decoderlogik sein, die in den Rechenblock 3302 integriert ist, um eine komprimierte Übertragung von Daten eines neuronalen Netzwerks über die Rechenarchitektur hinweg zu ermöglichen. Wenn beispielsweise ein CNN verarbeitet wird, kann der Rechenblock 3302 Ausgabe-Feature-Abbildungs-Daten (OFM-Daten) in dem Scratch-Puffer 3304 in einem unkomprimierten Format erzeugen. Einen in den DMA-Controller 3306 integrierten Codierer 3316, um das Schreiben der Ausgabemerkmalsabbildungsdaten in den Speicher 3308 in einem komprimierten Format zu ermöglichen. Wenn die OFM einer Schicht die Eingabemerkmalsabbildung (IFM) der nächsten Schicht werden, werden diese IFMs aus dem Speicher 3306 als komprimierte Daten 3314 gelesen und im Scratch-Puffer 3304 gespeichert. Der Decoder 3312 kann es dem Rechenblock 3302 ermöglichen, die komprimierten Daten 3314 einzulesen, ohne dass die Daten decodiert werden müssen. Alternativ kann eine Codec-Einheit, die sowohl eine Codier- als auch eine Decodierlogik aufweist, in den DMA-Controller 3306 integriert werden, was ermöglicht, komprimierte Daten von dem DMA-Controller 3306 zu übertragen und zu lesen. Die Merkmalsabbildungsdaten können dann von der DMA-Steuerung 3306 dekomprimiert und in einem unkomprimierten Format in den Scratch-Puffer 3304 geschrieben werden, um von dem Rechenblock 3302 gelesen zu werden.
  • Bei den hier beschriebenen Ausführungsformen kann das spezifische Codierungsformat für Kernel- und Merkmalsdaten basierend auf der Statistik der zu codierenden Daten variiert werden. Die Analyse von Merkmalsabbildungsdaten eines neuronalen Netzwerks zeigt, dass viele Merkmalsabbildungen sehr dünn besetzt sein können. Die Analyse der Kerneldaten des neuronalen Netzwerks zeigt, dass, obwohl die Kerneldaten nicht so dünn besetzt sind wie die Merkmalsabbildungsdaten, viele Werte in den Kerneldaten wiederholt werden. Der dynamische Bereich von Kerneldaten ist relativ gering, was darauf hindeutet, dass Rohdaten mehr Bits zuordnen als zum Speichern der Koeffizienten erforderlich sind. Unter Verwenden verschiedenen Codiertechniken können Mermalsabbildungs- und Kernel-Daten mit einer Auswahl verschiedener Codiertechniken verlustfrei um bis zu 80 % komprimiert werden.
  • Mit dem neuronalen Netzwerk zusammenhängende Daten können unter Verwenden einer Vielzahl von Codiertechniken codiert (zum Beispiel komprimiert) werden, wie zum Beispiel einzige Absolutwert-Tabellencodierung (UVA-Tabellencodierung)-, Signifikanzabbildungscodierung (SM-Codierung), Tabellencodierung (TE), Einzelwertkoordinatencodierung (UVC-Codierung)und Durchschnittscodierung (ME). Metadaten für die codierten Daten geben den Typ des für die Daten verwendeten Codierungsformats an. Bei einer Ausführungsform können spezifische Codierungsformate für spezifische Datentypen ausgewählt werden, wie beispielsweise Kerneldaten oder Merkmalsdaten. Bei einer Ausführungsform wird eine statistische Analyse der Daten vor der Codierung ausgeführt, um die Auswahl eines geeigneten Codierers für jeden Datenblock zu ermöglichen.
  • Bei einer Ausführungsform können während der SM-Codierung erzeugte Daten verwendet werden, um eine Submatrix-Umgehung innerhalb eines systolischen Tensor-Array zu erleichtern. Im SM-Codierungsmodus werden nur Werte ungleich Null in einem Block codiert. Die Anzahl der Nicht-Null-Werte in einem Sample-Block wird in der Kopfzeile angegeben, gefolgt von einer Signifikanzabbildung, die eine Abbildung der Nicht-Null-Werte innerhalb des Blocks angibt. Die von Nicht-Null-Werte des Samples werden dann in der Reihenfolge ihres Auftretens innerhalb des Streams codiert.
  • Wie in 33B gezeigt, kann eine Rechenarchitektur 3320 Logik zum Ausführen von Datenkomprimierung und -dekomprimierung innerhalb einer Verarbeitungsressource beinhalten. Die Rechenarchitektur 3320 beinhaltet einen Speicher 3308 und einen DMA-Controller 3306, wie in der Rechenarchitektur 3300 der 33A. Der DMA-Controller 3306 kann jedoch einen Codierer 3316 ausschließen. Stattdessen können komprimierte Daten, die über den DMA-Controller 3306 aus dem Speicher 3308 gelesen werden, in der Cache-Hierarchie (zum Beispiel L3-Cache 3326, L1-Cache 3327) in einem komprimierten Format gespeichert werden. Die Rechenarchitektur 3320 beinhaltet einen Rechenblock 3322, der mehrere Verarbeitungsressourcen 3328A bis 3328N aufweist, wobei jede Verarbeitungsressource Codecs 3334A bis 3334N beinhaltet, die komprimierte Daten aus der Cache-Hierarchie über Ladeoperationen decodieren und komprimierte Daten codieren können, die über Speicheroperationen in die Cache-Hierarchie geschrieben wurden. Daten können von den Codecs 3334A bis 3334N dekomprimiert werden, bevor die Daten an die systolischen Arrays 3332A bis 3332N innerhalb der Verarbeitungsressourcen 33328A bis 3328N geliefert werden. Von den systolischen Arrays 3332A bis 3332N erzeugte Ergebnisse können durch die Codecs 3334A bis 3334N komprimiert werden, bevor die Daten in die Cache-Hierarchie und/oder den Speicher 3308 geschrieben werden.
  • 34 veranschaulicht eine Verarbeitungsressource 3328, die eine Nullerfassungslogik für Ausgabedaten und beinhaltet. Die veranschaulichte Verarbeitungsressource 3328 kann eine der Verarbeitungsressourcen der Verarbeitungsressourcen 3328A bis 3328N der 33B sein. Die Verarbeitungsressource 3328 kann eine ALU 3434 beinhalten, um Verarbeitungsoperationen basierend auf Quelloperanden (zum Beispiel SRC1 3432, SRC2 3433), die in einer Registerdatei der Verarbeitungsressource 3328 gespeichert sind, auszuführen. Die Ausgabe der von der ALU 3434 ausgeführten Operation kann in ein temporäres Zielregister 3436 in der Registerdatei der Verarbeitungsressource 3328 geschrieben werden. Die Verarbeitungsressource 3328 beinhaltet zusätzlich eine Nullerfassungslogik 3438, die eine Nullerfassungsoperation an den Daten in dem temporären Zielregister 3436 ausführen kann, während die Daten von dem temporären Zielregister 3436 zu einem Zielregister 3440 in der Registerdatei fließen. Die Nullerfassungslogik 3438 kann Nullerfassungs-Metadaten 3439 schreiben, die anzeigen, ob der in das Zielregister 3440 geschriebene Wert ein Nullwert ist. Die Nullerfassungslogik 3438 kann eine Hardwareschaltung innerhalb der Verarbeitungsressource sein oder kann eine Logik einer höheren Ebene sein, wie etwa ein Shader-Programm, das von einem Shader-Prozessor der Verarbeitungsressource 3328 ausgeführt wird. Wenn die Register Vektorregister sind, die mehrere Elemente gepackter Daten enthalten, können die Nullerfassungsmetadaten 3439 ein Bitfeld sein, das ein Bit pro Vektorelement beinhaltet.
  • Bei einer Ausführungsform können die Nullerfassungsmetadaten 3439 von einem Codec 3334 innerhalb der Verarbeitungsressource 3328 verwendet werden, um die Zieldaten zu komprimieren, wenn die Datenkomprimierung aktiviert ist. Die Nullerfassungsmetadaten 3439 können vom Codec 3334 verwendet werden, um Metadaten zu erzeugen, die verwendet werden, um komprimierte Daten zu verwalten, wenn die komprimierten Daten in der Cache-Hierarchie und im Speicher gespeichert sind, wie zum Beispiel Oberflächenzustandsdaten, die in einem Oberflächenzustands-Cache 3222 gespeichert sind, wie in 32.
  • Bei verschiedenen Ausführungsformen kann die ALU 3434 eines einer Vielzahl hierin beschriebener Verarbeitungselemente sein und kann konfiguriert sein, um Ganzzahl- und/oder Gleitkommaoperationen , einschließlich paralleler Ganzzahl- und Gleitkommaoperationen, auszuführen. Die ALU 3434 kann auch für ein systolisches Array 3332A bis 3332N wie in 33B repräsentativ sein.
  • 35 veranschaulicht ein Verfahren 3500 zum Komprimieren und Dekomprimieren von Daten für eine Matrixoperation innerhalb einer Verarbeitungsressource. Das Verfahren 3500 kann von einer Verarbeitungsressource ausgeführt werden, die eine Komprimierungs- und Dekomprimierungslogik enthält, wie etwa von der Verarbeitungsressource 3328, wie in 34, oder Verarbeitungsressourcen 3328A BIS 3328N, wie in 33B.
  • Das Verfahren 3500 beinhaltet, dass eine Verarbeitungsressource komprimierte Daten einschließlich Elemente mehrerer Matrizen aus einer Cache-Hierarchie einer GPGPU (3502) liest. Die Verarbeitungsressource kann die komprimierten Daten dekomprimieren und die Elemente der mehreren Matrizen in einer Registerdatei der Verarbeitungsressource (3504) speichern. Die Verarbeitungsressource kann dann die Elemente der mehreren Matrizen in ein systolisches Array innerhalb der Verarbeitungsressource (3506) laden. Zum Beispiel kann die Verarbeitungsressource eine Meldung an das systolische Array mit einer auszuführenden Operation (zum Beispiel Opcode) und den diesen Operationen zugeordneten Quell- und Zielregistern senden. Die Verarbeitungsressource kann dann eine spezifizierte Matrixoperation (zum Beispiel die über den Opcode spezifizierte Operation) über das systolische Array ausführen, wobei das systolische Array die Ausgabe der Matrixoperation in der Registerdatei (3508) speichern kann.
  • Für einige Operationen kann die Verarbeitungsressource eine oder mehrere zusätzliche Operationen an der Ausgabe der Matrixoperation über zusätzliche Funktionseinheiten (zum Beispiel ALUs, FPUs) der Verarbeitungsressource (3510) ausführen. Zum Beispiel können einige Nachverarbeitungsoperationen an der von der systolischen Matrix erzeugten Ausgabe ausgeführt werden, einschließlich der Ausführung eines Satzes von Operationen, die von der systolischen Matrix an nahezu dünn besetzten Matrizen oder Submatrizen umgangen wurden.
  • Die Verarbeitungsressource kann dann die Ausgabe der Matrixoperation oder die eine oder mehreren zusätzlichen Operationen für die Ausgabe von der Verarbeitungsressource komprimieren (3512). Beispielsweise kann die Verarbeitungsressource komprimierte Daten und Komprimierungsmetadaten an die Cache-Hierarchie der GPGPU ausgeben.
  • 36 veranschaulicht ein Verfahren 3600 zum Ausführen von Nullerfassungsoperationen an einer Ausgabe, die von einer Verarbeitungsressource erzeugt wird. Das Verfahren 3600 kann von einer Verarbeitungsressource ausgeführt werden, die eine Nullerfassungslogik beinhaltet, wie etwa die Verarbeitungsressource 3328 wie in 34.
  • Das Verfahren 3600 umfasst für eine Verarbeitungsressource das Lesen von Datenelementen aus einer Cache-Hierarchie einer GPGPU (3602). Die Datenelemente können Vektorelemente, gepackte Datenelemente oder Matrixelemente für eine von der Verarbeitungsressource auszuführende SIMD- oder SIMT-Operation sein. Die Verarbeitungsressource kann dann über eine oder mehrere Funktionseinheiten der Verarbeitungsressource (3604) eine oder mehrere Operationen an den Datenelementen ausführen. Die eine oder mehreren Funktionseinheiten können Ganzzahl- oder Gleitkomma-Funktionseinheiten, Mischpräzisions-Funktionseinheiten oder eine Matrixbeschleunigungseinheit sein. Die Matrixbeschleunigungseinheit kann beispielsweise ein systolisches Array 1912, ein systolisches Tensor-Array 2808 oder eines von systolischen Arrays 3332A bis 3332N, wie hierin beschrieben, sein.
  • Die Verarbeitungsressource kann dann eine Nullerfassungsoperation bei der Ausgabe der einen oder mehreren Operationen ausführen (3606). Die Nullerfassungsoperation wird von einer Nullerfassungslogik innerhalb der Verarbeitungsressource ausgeführt. Die Nullerfassungslogik kann eine dedizierte Hardwareschaltung innerhalb der Verarbeitungsressource sein. Die Nullerfassungslogik kann auch eine Shader-Logik sein, die mit der Verarbeitungsressource ausgeführt wird. Die Nullerfassungsoperation kann ausgeführt werden, wenn die Daten aus einem temporären Zielregister gelesen und in ein Zielregister, das in den Operanden für eine Operation spezifiziert ist, geschrieben werden.
  • Die Verarbeitungsressource kann dann Ausgabe der einen oder mehreren Operationen und Nullerfassungsmetadaten in die Cache-Hierarchie der GPGPU schreiben (3608). Bei einer Ausführungsform können die Nullerfassungsmetadaten von einem Codec verwendet werden, um die Daten zu komprimieren, bevor die Daten in die Cache-Hierarchie geschrieben werden. Die Daten können innerhalb der Cache-Hierarchie und des Speichers der GPGPU komprimiert bleiben. Sollten komprimierte Daten von einer CPU gelesen werden müssen, kann die Dekomprimierungslogik die Daten während eines Schreibvorgangs in den sichtbaren CPU-Speicher dekomprimieren. Bei einer Ausführungsform kann sich die Dekomprimierungslogik in einem DMA-Controller befinden, der verwendet wird, um die Daten in den sichtbaren CPU-Speicher zu schreiben.
  • Unter Verwenden der obigen Techniken kann ein Fachmann beispielsweise einen Allzweck-Grafikprozessor, der eine Verarbeitungsressource umfasst, die einen Tensor-Beschleuniger umfasst, implementieren, um eine oder mehrere Matrixmultiplikationsoperationen auszuführen, und Codec-Hardware, um komprimierte Daten zu dekomprimieren, die über eine von der Verarbeitungsressource auszuführende Ladeoperation empfangen wurden, wobei die komprimierten Daten Elemente von Eingabematrizen beinhalten, die von Operanden der einen oder mehreren Matrixmultiplikationsoperationen identifiziert werden. Der Allzweck-Grafikprozessor kann eine Registerdatei beinhalten und die Codec-Hardware kann die Elemente der Eingabematrizen in Register in der Registerdatei schreiben. Der Tensor-Beschleuniger kann die Elemente der Eingabematrizen aus der Registerdatei lesen. Die Verarbeitungsressource kann die Codec-Hardware und die Registerdatei beinhalten.
  • Unter Verwendung der obigen Techniken kann ein Fachmann beispielsweise ein Verfahren implementieren, das auf einer Allzweck-Grafikverarbeitungseinheit (GPGPU) das Lesen von Datenelementen aus einer Cache-Hierarchie der GPGPU an einer Verarbeitungsressource der GPGPU, das Ausführen einer oder mehrerer Operationen an den Datenelementen über eine oder mehrere Funktionseinheiten der Verarbeitungsressource, das Ausführen über eine Nullerfassungslogik einer Nullerfassungsoperation bei der Ausgabe der einen oder mehreren Operationen innerhalb der Verarbeitungsressource und das Schreiben einer Ausgabe der einen oder mehreren Operationen und Nullerfassungsmetadaten in die Cache-Hierarchie der GPGPU umfasst. Das Verfahren kann weiter das Komprimieren der Ausgabe der einen oder mehreren Operationen unter Verwenden der Nullerfassungsmetadaten über einen Kompressor einer Codec-Einheit umfassen, wobei die Codec-Einheit in der Verarbeitungsressource der GPGPU enthalten ist.
  • Zusätzliche beispielhafte Rechenvorrichtung
  • 37 ist ein Blockschaltbild einer Rechenvorrichtung 3700 mit einem Grafikprozessor 3704 gemäß einer Ausführungsform. Die Rechenvorrichtung 3700 kann eine Rechenvorrichtung sein, die die Funktionalität jeder der oben beschriebenen Ausführungsformen umfasst. Die Rechenvorrichtung 3700 kann eine Kommunikationsvorrichtung wie eine Set-Top-Box (zum Beispiel internetbasierte Kabelfernseh-Set-Top-Boxen usw.), auf einem Global Positioning System (GPS) basierende Vorrichtungen usw. sein oder darin enthalten sein. Die Rechenvorrichtung 3700 kann auch mobile Rechenvorrichtungen, wie Mobiltelefone, Smartphones, Personal Digital Assistants (PDAs), Tablet-Computer, Laptop-Computer, E-Reader, Smart-Fernseher, Fernsehplattformen, tragbare Vorrichtungen (zum Beispiel Brillen, Uhren, Armbänder, Smartcards, Schmuck, Kleidungsstücke usw.), Mediaplayer usw. sein oder darin enthalten sein. Zum Beispiel umfasst die Rechenvorrichtung 3700 bei einer Ausführungsform eine mobile Rechenvorrichtung, die eine integrierte Schaltung („IC“) verwendet, wie zum Beispiel einen Chip („SoC“oder „SOC“), der verschiedene Hardware- und/oder Softwarebauelemente der Rechenvorrichtung 3700 auf einem einzigen Chip integriert.
  • Die Rechenvorrichtung 3700 beinhaltet einen Grafikprozessor 3704. Der Grafikprozessor 3704 repräsentiert einen beliebigen hierin beschriebenen Grafikprozessor. Der Grafikprozessor beinhaltet eine oder mehrere Grafikmaschine(n), Grafikprozessorkerne und andere Grafikausführungsressourcen, wie hierin beschrieben. Derartige Grafikausführungsressourcen können in den Formen, einschließlich, aber nicht beschränkt auf Ausführungseinheiten, Shader-Maschinen, Fragmentprozessoren, Vertex-Prozessoren, Streaming-Multiprozessoren, Grafikprozessor-Cluster oder jede beliebige Sammlung von Rechenressourcen, die für die Verarbeitung von Grafikressourcen oder Bildressourcen geeignet sind, oder Ausführen von Mehrzweck-Rechenoperationen in einem heterogenen Prozessor präsentiert werden.
  • Bei einer Ausführungsform beinhaltet der Grafikprozessor 3704 einen Cache 3714, der ein einzelner Cache sein oder in mehrere Segmente des Cache-Speichers unterteilt sein kann, einschließlich, aber nicht beschränkt auf eine beliebige Anzahl von L1-, L2-, L3- oder L4-Caches, Render-Caches, Tiefe Caches, Sampler-Caches und/oder Shader-Unit-Caches. Der Cache 3714 kann einen Nah- und Fernbereich aufweisen, wie hierin beschrieben. Der Cache 3714 kann auch eine dynamische Hash-Logik beinhalten, die eine dynamische Rekonfiguration eines Speicherbank-Hash-Algorithmus unterstützt. Bei einigen Ausführungsformen beinhaltet der Grafikprozessor 3704 eine GPGPU-Maschine 3744, die gemeinsam genutzten lokalen Speicher (SLM 3734) beinhaltet, sowie eine Registerdatei 3724, die Register zur Verwendung durch die GPGPU-Engine 3744 beinhaltet. Die Registerdatei 3724 kann Universalregister, Architekturregister, Konfigurationsregister und andere Arten von Registern umfassen. Eine Universalregisterdatei (GRF) und/oder Architekturregisterdatei (ARF) kann sich auch innerhalb von Verarbeitungsressourcen innerhalb eines oder mehrerer Blöcke von Recheneinheiten (zum Beispiel Recheneinheit 3750, Recheneinheit 3755) innerhalb der GPGPU-Maschine 3744 befinden. Es kann auch eine gemeinsam genutzte Struktur 3742 vorhanden sein, die eine schnelle Kommunikation zwischen den verschiedenen Bauteilen der GPGPU-Maschine 3744 ermöglicht.
  • Wie veranschaulicht, kann die Rechenvorrichtung 3700 bei einer Ausführungsform und zusätzlich zu dem Grafikprozessor 3704 weiter eine beliebige Anzahl und Art von Hardwarebauelementen und/oder Softwarebauelementen beinhalten, einschließlich, aber nicht beschränkt auf einen Anwendungsprozessor 3706, Speicher 3708, und Eingabe/Ausgabe-Quellen (E/A-Quellen) 3710. Der Anwendungsprozessor 3706 kann mit einer Hardwaregrafikpipeline interagieren, um die Grafikpipelinefunktionalität zu teilen. Verarbeitete Daten werden in einem Puffer in der Hardware-Grafikpipeline gespeichert, und Zustandsinformationen werden im Speicher 3708 gespeichert. Die resultierenden Daten können zur Ausgabe über eine Anzeigevorrichtung, wie hierin beschrieben, an einen Anzeige-Controller übertragen werden. Die Anzeigevorrichtung kann von verschiedenen Typen sein, wie etwa Kathodenstrahlröhre (CRT), Dünnschichttransistor (TFT), Flüssigkristallanzeige (LCD), organische Leuchtdioden-Anordnung (OLED-Anordnung) usw., und kann derart konfiguriert sein, dass sie einem Benutzer Informationen über eine grafische Benutzeroberfläche anzeigt.
  • Der Anwendungsprozessor 3706 kann einen oder mehrere Prozessoren beinhalten und kann die zentrale Verarbeitungseinheit (CPU) sein, die zumindest teilweise verwendet wird, um ein Betriebssystem (OS) 3702 für die Computervorrichtung 3700 auszuführen. Das OS 3702 kann als Schnittstelle zwischen Hardware und/oder physischen Ressourcen der Rechenvorrichtung 3700 und einem oder mehreren Benutzern dienen. Das OS 3702 kann Treiberlogik für verschiedene Hardwaregeräte in der Rechenvorrichtung3700 beinhalten, einschließlich Grafiktreiberlogik 3722, wie etwa den Benutzermodus-Grafiktreiber 2326 und/oder den Kernelmodus-Grafiktreiber 2329 der 23.
  • Es wird erwogen, dass bei einigen Ausführungsformen der Grafikprozessor 3704 als Teil des Anwendungsprozessors 3706 (wie als Teil eines physischen CPU-Package) existieren kann, wobei in diesem Fall zumindest ein Teil des Speichers 3708 von dem Anwendungsprozessor 3706 und dem Grafikprozessor 3704 gemeinsam genutzt werden kann, obwohl zumindest ein Teil des Speichers 3708 exklusiv für den Grafikprozessor 3704 sein kann, oder der Grafikprozessor 3704 einen separaten Speicher aufweisen kann. Der Speicher 3708 kann einen vorab zugeordneten Bereich eines Puffers (zum Beispiel Framebuffer) umfassen; der Durchschnittsfachmann sollte jedoch verstehen, dass die Ausführungsformen nicht darauf beschränkt sind, und dass jeder für die untere Grafikpipeline zugängliche Speicher verwendet werden kann. Der Speicher 3708 kann verschiedene Formen von Direktzugriffsspeicher (RAM) (zum Beispiel SDRAM, SRAM usw.) beinhalten, die eine Anwendung umfassen, die den Grafikprozessor 3704 verwendet, um eine Desktop- oder 3D-Grafikszene zu rendern. Ein Speichercontroller-Hub kann auf Daten in dem Speicher 3708 zugreifen und sie an den Grafikprozessor 3704 zur Grafik-Pipeline-Verarbeitung weiterleiten. Der Speicher 3708 kann anderen Bauelementen innerhalb der Rechenvorrichtung 3700 zur Verfügung gestellt werden. Zum Beispiel können alle Daten (zum Beispiel Eingabegrafikdaten), die von verschiedenen E/A-Quellen 3710 des Computergeräts 3700 empfangen werden, vorübergehend in den Speicher 3708 eingereiht werden, bevor sie von einem oder mehreren Prozessoren (zum Beispiel Anwendungsprozessor 3706) bei der Implementierung eines Softwareprogramms oder einer Anwendung bearbeitet werden. In ähnlicher Weise werden Daten, von denen ein Softwareprogramm bestimmt, dass sie von der Rechenvorrichtung 3700 an eine externe Einheit über eine der Computersystemschnittstellen gesandt oder in einem internen Speicherelement gespeichert werden sollten, oft vorübergehend im Speicher 3708 in eine Warteschlange gestellt, bevor sie übertragen oder gespeichert werden.
  • Die E/A-Quellen können Geräte wie Touchscreens, Touchpanels, Touchpads, virtuelle oder reguläre Tastaturen, virtuelle oder reguläre Mäuse, Ports, Steckverbinder, Netzwerkgeräte oder dergleichen beinhalten und können über einen E/A-Hub 107 wie in 1, eine Eingabe/Ausgabe-(E/A)-Schaltung 363 wie in 3, einen Plattform-Controller-Hub 1430 wie in 14 oder Ähnliches angeschlossen werden. Außerdem können die E/A-Quellen 3710 ein oder mehrere E/A-Geräte beinhalten, die zum Übertragen von Daten an und/oder von der Rechenvorrichtung 3700 (zum Beispiel einen Netzwerkadapter) implementiert werden; oder für einen nichtflüchtigen Speicher in großem Umfang innerhalb der Rechenvorrichtung 3700 (zum Beispiel Festplattenlaufwerk). Benutzereingabegeräte, einschließlich alphanumerischer und anderer Tasten, können verwendet werden, um Informationen und Befehlsauswahlen an den Grafikprozessor 3704 zu übermitteln. Eine andere Art von Benutzereingabegerät ist die Cursorsteuerung, wie etwa eine Maus, ein Trackball, ein Touchscreen, ein Touchpad oder Cursorrichtungstasten, um Richtungsinformationen und Befehlsauswahlen an die GPU zu übermitteln und die Cursorbewegung auf der Anzeigevorrichtung zu steuern. Kamera- und Mikrofon-Arrays des Computergeräts 3700 können verwendet werden, um Gesten zu beobachten, Audio und Video aufzuzeichnen und visuelle und Audiobefehle zu empfangen und zu übertragen.
  • Als Netzwerkschnittstellen konfigurierte E/A-Quellen 3710 können den Zugriff auf ein Netzwerk wie ein LAN, ein Weitverkehrsnetzwerk (WAN), ein Metropolitan Area Network (MAN), ein Personal Area Network (PAN), Bluetooth, ein Cloud-Netzwerk, ein Mobilfunk- oder Mobilfunknetz (zum Beispiel der 3. Generation (3G), 4. Generation (4G), 5. Generation (5G) usw.), ein Satellitennetzwerk, ein Intranet, das Internet usw. bereitstellen. Netzwerkschnittstelle(n) können beispielsweise eine drahtlose Netzwerkschnittstelle mit einer oder mehreren Antenne(n) beinhalten. Netzwerkschnittstelle(n) können beispielsweise auch eine kabelgebundene Netzwerkschnittstelle beinhalten, um mit entfernten Geräten über ein Netzwerkkabel zu kommunizieren, das beispielsweise ein Ethernet-Kabel, ein Koaxialkabel, ein Glasfaserkabel, ein serielles Kabel oder ein Parallelkabel sein kann.
  • (Eine) Netzwerkschnittstelle(n) kann/können Zugriff auf ein LAN bereitstellen, zum Beispiel durch Konformität mit IEEE 802.11-Standards, und/oder die drahtlose Netzwerkschnittstelle kann Zugang zu einem Personal Area Network bereitstellen, indem sie zum Beispiel Bluetooth-Standards entspricht. Andere drahtlose Netzwerkschnittstellen und/oder -protokolle, einschließlich früherer und nachfolgender Versionen der Standards, können ebenfalls unterstützt werden. Zusätzlich oder an Stelle der Kommunikation über die Wireless-LAN-Standards können Netzwerkschnittstellen eine drahtlose Kommunikation bereitstellen, die beispielsweise Time Division, Multiple Access (TDMA)-Protokolle, Global Systems for Mobile Communications (GSM)-Protokolle, Code Division, Multiple Access (CDMA)-Protokolle und/oder jede andere Art von drahtlosen Kommunikationsprotokollen bereitstellen können.
  • 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 Rechenvorrichtung 3700 von Implementierung zu Implementierung variieren, abhängig von zahlreichen Faktoren, wie etwa Preisbeschränkungen, Leistungsanforderungen, technologischen Verbesserungen oder anderen Umständen. Beispiele sind (ohne Einschränkung) ein Mobilgerät, ein persönlicher digitaler Assistent, ein mobiles Computergerät, ein Smartphone, ein Mobiltelefon, ein Handgerät, ein Einweg-Pager, ein Zwei-Wege-Pager, ein Messaging-Gerät, ein Computer, Personalcomputer (PC), Desktop-Computer, Laptop-Computer, Notebook-Computer, Handheld-Computer, Tablet-Computer, Server, Server-Array oder Serverfarm, Webserver, Netzwerkserver, Internetserver, Workstation, ein Mini-Computer, ein Großrechner, ein Supercomputer, eine Netzwerk-Appliance, eine Web-Appliance, ein verteiltes Computersystem, Multiprozessorsysteme, prozessorbasierte Systeme, Unterhaltungselektronik, programmierbare Unterhaltungselektronik, Fernsehen, digitales Fernsehen, Set-Top Box, drahtloser Zugangspunkt, Basisstation, Teilnehmerstation, mobile Teilnehmerzentrale, Funknetzsteuerung, Router, Hub, Gateway, Brücke, Switch, Maschine oder Kombinationen davon.
  • Ausführungsformen können als ein beliebiger oder eine Kombination aus einem oder mehreren Mikrochips oder integrierten Schaltungen implementiert werden, die unter Verwendung einer Hauptplatine, einer fest verdrahteten Logik, von einer Speichervorrichtung gespeicherter und von einem Mikroprozessor ausgeführter Software, einer Firmware, einer anwendungsspezifischen integrierten Schaltung (ASIC) und/oder einem feldprogrammierbaren Gate-Array (FPGA) miteinander verbunden sind. Der Begriff „Logik“ kann beispielsweise Software oder Hardware und/oder Kombinationen von Software und Hardware beinhalten.
  • Ausführungsformen können beispielsweise als Computerprogrammprodukt bereitgestellt werden, das ein oder mehrere maschinenlesbare Medien mit darauf gespeicherten maschinenausführbaren Anweisungen beinhalten kann, die, wenn sie von einer oder mehreren Maschinen, wie einem Computer, einem Computernetzwerk oder anderen elektronischen Geräten 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 Memorys) und magnetooptische Platten, ROMs, RAMs, EPROMs (löschbare programmierbare Nur-Lese-Speicher), EEPROMs (elektrisch löschbare programmierbare Nur-Lese-Speicher), magnetische oder optische Karten, Flash-Speicher oder andere Arten nichtflüchtiger maschinenlesbarer Medien, die zum Speichern maschinenausführbarer Anweisungen geeignet sind, beinhalten.
  • Darüber hinaus können Ausführungsformen als Computerprogrammprodukt heruntergeladen werden, wobei das Programm von einem entfernten Computer (zum Beispiel einem Server) an einen anfordernden Computer (zum Beispiel einen Client) mittels eines oder mehrerer Datensignale übertragen werden kann, die in einer Trägerwelle oder einem anderen Ausbreitungsmedium über eine Kommunikationsverbindung (zum Beispiel ein Modem und/oder eine Netzwerkverbindung) verkörpert und/oder moduliert werden.
  • Eine Bezugnahme hier auf „eine Ausführungsform“ oder „eine Ausführungsform“ bedeutet, dass ein bestimmtes Merkmal, eine Struktur oder ein bestimmtes Merkmal, das in Verbindung mit der Ausführungsform beschrieben wurde, in mindestens einer Ausführungsform der Erfindung enthalten sein kann. Das Auftreten des Ausdrucks „bei einer Ausführungsform“ an verschiedenen Stellen in der Beschreibung betrifft nicht notwendigerweise dieselbe Ausführungsform. Die in den folgenden Abbildungen dargestellten Prozesse können von Verarbeitungslogik ausgeführt werden, die Hardware (zum Beispiel Schaltungen, dedizierte Logik usw.), Software (als Anweisungen auf einem nichtflüchtigen maschinenlesbaren Speichermedium) oder eine Kombination von sowohl Hardware als auch Software umfasst. Es wird detailliert auf verschiedene Ausführungsformen Bezug genommen, von denen Beispiele in den beigefügten Zeichnungen dargestellt sind. In der folgenden detaillierten Beschreibung werden zahlreiche spezifische Details dargelegt, um ein gründliches Verstehen der vorliegenden Erfindung zu ermöglichen. Es ist jedoch für den Durchschnittsfachmann offensichtlich, dass die vorliegende Erfindung ohne diese spezifischen Details praktiziert werden kann. In anderen Fällen wurden wohlbekannte Verfahren, Prozeduren, Komponenten, Schaltungen und Netzwerke nicht im Detail beschrieben, um Aspekte der Ausführungsformen nicht unnötig zu verschleiern.
  • Es versteht sich auch, dass, obwohl die Begriffe erster, zweiter usw. hierin verwendet werden können, um verschiedene Elemente zu beschreiben, diese Elemente nicht durch diese Begriffe eingeschränkt werden sollten. Diese Begriffe werden nur verwendet, um ein Element von einem anderen zu unterscheiden. Beispielsweise könnte ein erster Kontakt als zweiter Kontakt bezeichnet werden, und in ähnlicher Weise könnte ein zweiter Kontakt als erster Kontakt bezeichnet werden, ohne vom Umfang der vorliegenden Erfindung abzuweichen. Der erste Kontakt und der zweite Kontakt sind beide Kontakte, aber sie sind nicht derselbe Kontakt.
  • Die hierin verwendete Terminologie dient nur dem Zweck, bestimmte Ausführungsformen zu beschreiben und soll nicht alle Ausführungsformen einschränken. Wie in der Beschreibung der Erfindung und den beigefügten Ansprüchen verwendet, sollen die Singularformen „ein“, „eine“ und „der“ auch die Pluralformen beinhalten, sofern der Kontext nicht eindeutig etwas Anderes angibt. Es versteht sich auch, dass sich der Begriff „und/oder“, wie er hier verwendet wird, auf alle möglichen Kombinationen eines oder mehrerer der zugehörigen aufgelisteten Elemente bezieht und diese umfasst. Es versteht sich weiter, dass die Begriffe „umfasst“ und/oder „umfassend“, wenn sie in dieser Beschreibung verwendet werden, das Vorhandensein angegebener Merkmaler, von Ganzzahlen, Schritten, Operationen, Elementen und/oder Komponenten spezifizieren, aber das Vorhandensein oder Hinzufügen eines oder mehrerer anderer Merkmale, Ganzzahlen, Schritte, Operationen, Elemente, Komponenten und/oder Gruppen davon nicht ausschließen.
  • Wie hier verwendet, kann der Begriff „falls“ in Abhängigkeit vom Kontext derart ausgelegt werden, dass er „wenn“ oder „bei“ oder „als Reaktion auf das Bestimmen“ oder „als Reaktion auf das Erfassen“ bedeutet. In ähnlicher Weise kann der Ausdruck „falls bestimmt wird“ oder „falls [eine angegebene Bedingung oder ein Ereignis] erkannt wird“ derart ausgelegt wird, dass es „bei Feststellung“ oder „als Reaktion auf eine Feststellung“ oder „bei Feststellung [der angegebenen Bedingung oder des Ereignisses]“ oder „als Reaktion auf das Erfassen [der angegebenen Bedingung oder des Ereignisses]“, je nach Kontext bedeutet.
  • Hierin beschriebene Ausführungsformen beinhalten Software, Firmware und Hardwarelogik, die Techniken zum Ausführen von Arithmetik an dünnbesetzten Daten über eine systolische Verarbeitungseinheit bereitstellen. Die hierin beschriebene Ausführungsform stellen Techniken bereit, um Rechenoperationen für mit Nullen gefüllte Matrizen und Submatrizen zu überspringen. Ausführungsformen stellen zusätzlich Techniken bereit, um Datenkomprimierung bis hin zu einer Verarbeitungseinheit aufrechtzuerhalten. Ausführungsformen stellen zusätzlich eine Architektur für eine dünnbesetzte bewusste Logikeinheit bereit.
  • Eine Ausführungsform stellt einen Allzweck-Grafikprozessor bereit, der eine Verarbeitungsressource beinhaltet, die einen Matrixbeschleuniger und einen Decoder beinhaltet, wobei der Matrixbeschleuniger ein Lastfilter beinhaltet, um eine Belastung einer dünnbesetzten Submatrix einer Eingabematrix zu umgehen, und den Decoder, um einen codierten Datensatz der mit der Eingabematrix assoziiert ist, um einen decodierten Datensatz zu erzeugen. Der Decoder kann den codierten Datensatz basierend auf Metadaten, die dem codierten Datensatz zugeordnet sind, decodieren. Das Lastfilter kann die Last der dünnbesetzten Submatrix basierend auf den Metadaten, die mit dem codierten Datensatz assoziiert sind, umgehen. Der Decoder kann dem Lastfilter die Metadaten bereitstellen, die dem codierten Datensatz zugeordnet sind. Die Metadaten können mit dem codierten Datensatz assoziiert sein, der eine Signifikanzabbildung umfasst, wobei die Signifikanzabbildung einen Null- oder Nicht-Null-Wert für einen Bitstrom des decodierten Datensatzes angibt. Der Decoder kann in dem Matrixbeschleuniger enthalten sein, wobei der Matrixbeschleuniger eine oder mehrere codierte Submatrizen als Eingabe lesen kann. Der Matrixbeschleuniger kann mehrere Verarbeitungselemente beinhalten, wobei die mehreren Verarbeitungselemente als systolisches Array angeordnet und konfiguriert sind, um eine oder mehrere Submatrizen eines Satzes von Eingabematrixdaten zu verarbeiten. Die Verarbeitungsressource kann zusätzlich eine Hardware-Logikeinheit beinhalten, um eine Operation für eine umgangene Submatrix des Eingabetensors auszuführen.
  • Eine Ausführungsform stellt ein Datenverarbeitungssystem bereit, das eine Speichervorrichtung und den Allzweck-Grafikprozessor, wie oben beschrieben, umfasst, wobei die Speichervorrichtung mit dem Allzweck-Grafikprozessor gekoppelt ist.
  • Eine Ausführungsform sieht ein Verfahren vor, das auf einer Allzweck-Grafikverarbeitungseinheit mit einem Matrixbeschleuniger das Verfolgen von Nullwertoperanden von Matrizen, die in einen Matrixbeschleuniger einzugeben sind, über eine Nullerfassungsschaltung und das Umgehen einer Matrixmultiplikationsoperation an dem Matrixbeschleuniger als Reaktion auf das Erfassen eines Nullwertoperanden beinhaltet. Der Nullwert-Operand kann mit einer ersten Submatrix einer Eingabematrix assoziiert sein, wobei die erste Submatrix eine Nullwert-Submatrix ist. Wenn die Eingabematrix eine Nullwertmatrix ist, können alle Matrixoperationen auf dem Matrixbeschleuniger umgangen werden. Bei einer Ausführungsform umfasst das Verfahren zusätzlich das Umgehen eines Matrixbeschleunigers als Reaktion auf das Erfassen einer zweiten Submatrix der Eingabematrix, wobei die zweite Submatrix eine begrenzte Anzahl von Werten ungleich Null aufweist. Die begrenzte Anzahl von Nicht-Null-Werten kann ein vorbestimmter Wert sein, wie beispielsweise ein einzelner Nicht-Null-Wert. Das Verfahren beinhaltet zusätzlich das Senden einer Meldung an eine Verarbeitungsressource außerhalb des Matrixbeschleunigers, wobei die Meldung eine Umgehung der zweiten Submatrix angibt. Die umgangene Operation für die zweite Submatrix kann von der Verarbeitungsressource basierend auf der Meldung ausgeführt werden, wobei die Meldung die umgangene Operation und Operanden für die umgangene Operation identifizieren kann. Bei einer Ausführungsform beinhaltet das Verfolgen von Nullwertoperanden von Matrizen, die in einen Matrixbeschleuniger einzugeben sind, über die Nullerfassungsschaltung das Erzeugen einer Submatrixabbildung für eine erste Eingabematrix, wobei die Submatrixabbildung eine Nullwertsubmatrix für die erste Eingabematrix identifiziert.
  • Die vorstehende Beschreibung und die Zeichnungen sind eher illustrativ als einschränkend zu betrachten. Fachleute werden verstehen, dass verschiedene Modifikationen und Änderungen an den hierin beschriebenen Ausführungsformen vorgenommen werden können, ohne vom breiteren Geist und Schutzumfang der in den beigefügten Ansprüchen dargelegten Merkmale abzuweichen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 62/819337 [0001]
    • WO 62/819435 [0001]
    • WO 62/819361 [0001]
    • WO 62/935670 [0001]
  • Zitierte Nicht-Patentliteratur
    • CUDA-Programmierung Kapitel 3, Seiten 37 bis 51 (2013) [0004]

Claims (20)

  1. Allzweck-Grafikprozessor, der umfasst: eine Verarbeitungsressource mit einem Matrixbeschleuniger und einem Decoder, wobei der Matrixbeschleuniger ein Lastfilter beinhaltet, um eine Last einer dünnbesetzten Submatrix einer Eingabematrix zu umgehen, und der Decoder einen codierten Datensatz decodieren soll, der mit der Eingabematrix assoziiert ist, um einen decodierten Satz von Daten zu erzeugen, wobei der Decoder den codierten Datensatz basierend auf Metadaten, die mit dem codierten Datensatz assoziiert sind, decodieren, wobei das Lastfilter die Last der dünnbesetzten Submatrix basierend auf den Metadaten, die mit dem codierten Datensatz assoziiert sind, umgehen soll.
  2. Allzweck-Grafikprozessor nach Anspruch 1, wobei der Decoder die Metadaten, die mit dem codierten Datensatz assoziiert sind, an das Lastfilter bereitstellen soll.
  3. Allzweck-Grafikprozessor nach Anspruch 2, wobei die Metadaten, die mit dem codierten Datensatz assoziiert sind, eine Signifikanzabbildung beinhalten, wobei die Signifikanzabbildung einen Null- oder Nicht-Null-Wert für einen Bitstrom des decodierten Datensatzes angeben soll.
  4. Allzweck-Grafikprozessor nach Anspruch 3, wobei der Decoder in dem Matrixbeschleuniger enthalten ist, und der Matrixbeschleuniger eine oder mehrere codierte Submatrizen als Eingabe lesen soll.
  5. Allzweck-Grafikprozessor nach Anspruch 1, wobei der Matrixbeschleuniger mehrere Verarbeitungselemente beinhaltet.
  6. Allzweck-Grafikprozessor nach Anspruch 5, wobei die mehreren Verarbeitungselemente als ein systolisches Array angeordnet und konfiguriert sind, um eine oder mehrere Submatrizen eines Satzes von Eingabematrixdaten zu verarbeiten.
  7. Allzweck-Grafikprozessor nach Anspruch 6, wobei die Verarbeitungsressource zusätzlich eine Hardware-Logikeinheit beinhaltet, um eine Operation für eine umgangene Submatrix der Eingabematrix auszuführen.
  8. Verfahren, das umfasst: auf einer Allzweck-Grafikprozessoreinheit mit einem Matrixbeschleuniger: Verfolgen von Nullwertoperanden von Matrizen, die in einen Matrixbeschleuniger einzugeben sind, über eine Nullerfassungsschaltung; und Umgehen einer Matrixmultiplikationsoperation auf dem Matrixbeschleuniger als Reaktion auf das Erfassen eines Nullwertoperanden, wobei der Nullwertoperand mit einer ersten Submatrix einer Eingabematrix assoziiert ist, wobei die erste Submatrix eine Nullwertsubmatrix ist.
  9. Verfahren nach Anspruch 8, wobei die Eingabematrix eine Nullwertmatrix ist, und alle Matrixmultiplikationsoperationen auf dem Matrixbeschleuniger für die Nullwertmatrix umgangen werden.
  10. Verfahren nach Anspruch 8, das zusätzlich umfasst: Umgehen einer Matrixmultiplikationsoperation auf dem Matrixbeschleuniger als Reaktion auf das Erfassen einer zweiten Submatrix der Eingabematrix, wobei die zweite Submatrix eine begrenzte Anzahl von Nicht-Null-Werten aufweist; und Senden einer Meldung an eine Verarbeitungsressource außerhalb des Matrixbeschleunigers, wobei die Meldung eine Umgehung der zweiten Submatrix angeben soll.
  11. Verfahren nach Anspruch 10, das zusätzlich das Ausführen einer umgangenen Operation für die zweite Submatrix über die Verarbeitungsressource basierend auf der Meldung umfasst.
  12. Verfahren nach Anspruch 11, wobei die Meldung die umgangene Operation und Operanden für die umgangene Operation identifiziert.
  13. Verfahren nach Anspruch 8, wobei das Verfolgen von Nullwertoperanden von Matrizen, die in einen Matrixbeschleuniger einzugeben sind, über die Nullerfassungsschaltung das Erzeugen einer Submatrixabbildung für eine erste Eingabematrix umfasst, wobei die Submatrixabbildung eine Nullwertsubmatrix für die erste Eingabematrix identifizieren soll.
  14. Datenverarbeitungssystem, das umfasst: eine Speichervorrichtung; und einen Grafikprozessor, der mit der Speichervorrichtung gekoppelt ist, wobei der Grafikprozessor umfasst: eine Verarbeitungsressource mit einem Matrixbeschleuniger und einem Decoder, wobei der Matrixbeschleuniger ein Lastfilter beinhaltet, um eine Last einer dünnbesetzten Submatrix einer Eingabematrix zu umgehen, und der Decoder einen codierten Datensatz decodieren soll, der Datensatz von Daten zu erzeugen, wobei der Decoder den codierten Datensatz basierend auf Metadaten, die mit dem codierten Datensatz assoziiert sind, decodiert; und wobei das Lastfilter dazu dient, die Last der dünnbesetzten Submatrix basierend auf den Metadaten, die mit dem codierten Datensatz assoziiert sind, zu umgehen.
  15. Datenverarbeitungssystem nach Anspruch 14, wobei der Decoder die Metadaten, die mit dem codierten Datensatz assoziiert sind, an das Lastfilter liefern soll.
  16. Datenverarbeitungssystem nach Anspruch 15, wobei die Metadaten, die mit dem codierten Datensatz assoziiert sind, eine Signifikanzabbildung beinhalten, wobei die Signifikanzabbildung einen Null- oder Nicht-Null-Wert für einen Bitstrom des decodierten Datensatzes angeben soll.
  17. Datenverarbeitungssystem nach Anspruch 16, wobei der Decoder in dem Matrixbeschleuniger enthalten ist, und der Matrixbeschleuniger eine oder mehrere codierte Submatrizen als Eingabe lesen soll.
  18. Datenverarbeitungssystem nach Anspruch 14, wobei der Matrixbeschleuniger mehrere Verarbeitungselemente beinhaltet.
  19. Datenverarbeitungssystem nach Anspruch 18, wobei die mehreren Verarbeitungselemente als ein systolisches Array angeordnet und konfiguriert sind, um eine oder mehrere Submatrizen eines Satzes von Eingabematrixdaten zu verarbeiten.
  20. Datenverarbeitungssystem nach Anspruch 19, wobei die Verarbeitungsressource zusätzlich eine Hardware-Logikeinheit beinhaltet, um eine Operation für eine umgangene Submatrix der Eingabematrix auszuführen.
DE112020001249.2T 2019-03-15 2020-03-14 Dünnbesetzt-Optimierungen für eine Matrixbeschleunigerarchitektur Pending DE112020001249T5 (de)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US201962819337P 2019-03-15 2019-03-15
US201962819435P 2019-03-15 2019-03-15
US201962819361P 2019-03-15 2019-03-15
US62/819,361 2019-03-15
US62/819,435 2019-03-15
US62/819,337 2019-03-15
US201962935670P 2019-11-15 2019-11-15
US62/935,670 2019-11-15
PCT/US2020/022846 WO2020190808A1 (en) 2019-03-15 2020-03-14 Sparse optimizations for a matrix accelerator architecture

Publications (1)

Publication Number Publication Date
DE112020001249T5 true DE112020001249T5 (de) 2021-12-23

Family

ID=70285850

Family Applications (2)

Application Number Title Priority Date Filing Date
DE112020001249.2T Pending DE112020001249T5 (de) 2019-03-15 2020-03-14 Dünnbesetzt-Optimierungen für eine Matrixbeschleunigerarchitektur
DE112020000846.0T Pending DE112020000846T5 (de) 2019-03-15 2020-03-14 Architektur für Block-Sparse-Operationen an einem systolischen Array

Family Applications After (1)

Application Number Title Priority Date Filing Date
DE112020000846.0T Pending DE112020000846T5 (de) 2019-03-15 2020-03-14 Architektur für Block-Sparse-Operationen an einem systolischen Array

Country Status (10)

Country Link
US (5) US11113784B2 (de)
EP (3) EP3938889A1 (de)
JP (4) JP2022523760A (de)
KR (3) KR20210135998A (de)
CN (5) CN112534404A (de)
AU (1) AU2020241262A1 (de)
BR (2) BR112021016106A2 (de)
DE (2) DE112020001249T5 (de)
SG (1) SG11202107290QA (de)
WO (3) WO2020190809A1 (de)

Families Citing this family (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
KR102559581B1 (ko) * 2018-05-23 2023-07-25 삼성전자주식회사 재구성 가능 로직을 포함하는 스토리지 장치 및 상기 스토리지 장치의 동작 방법
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
US20220121421A1 (en) 2019-03-15 2022-04-21 Intel Corporation Multi-tile memory management
DE112020001249T5 (de) 2019-03-15 2021-12-23 Intel Corporation Dünnbesetzt-Optimierungen für eine Matrixbeschleunigerarchitektur
US11392376B2 (en) * 2019-04-11 2022-07-19 Arm Limited Processor for sparse matrix computation
US11222092B2 (en) * 2019-07-16 2022-01-11 Facebook Technologies, Llc Optimization for deconvolution
KR102213258B1 (ko) * 2019-07-29 2021-02-08 한국전자기술연구원 효율적인 명령어 처리를 위한 프로세싱-인-메모리 제어 방법 및 이를 적용한 연산장치
CN112899740B (zh) * 2019-11-15 2022-04-19 源秩科技(上海)有限公司 基于电化学的加工装置和方法
CN111176582A (zh) * 2019-12-31 2020-05-19 北京百度网讯科技有限公司 矩阵存储方法、矩阵访问方法、装置和电子设备
US11586601B2 (en) * 2020-02-05 2023-02-21 Alibaba Group Holding Limited Apparatus and method for representation of a sparse matrix in a neural network
US11687831B1 (en) 2020-06-30 2023-06-27 Cadence Design Systems, Inc. Method, product, and apparatus for a multidimensional processing array for hardware acceleration of convolutional neural network inference
US11823018B1 (en) 2020-06-30 2023-11-21 Cadence Design Systems, Inc. Method, product, and apparatus for a machine learning process using weight sharing within a systolic array having reduced memory bandwidth
US11676068B1 (en) 2020-06-30 2023-06-13 Cadence Design Systems, Inc. Method, product, and apparatus for a machine learning process leveraging input sparsity on a pixel by pixel basis
US11615320B1 (en) 2020-06-30 2023-03-28 Cadence Design Systems, Inc. Method, product, and apparatus for variable precision weight management for neural networks
US11651283B1 (en) * 2020-06-30 2023-05-16 Cadence Design Systems, Inc. Method, product, and apparatus for a machine learning process using dynamic rearrangement of sparse data and corresponding weights
US11848980B2 (en) * 2020-07-09 2023-12-19 Boray Data Technology Co. Ltd. Distributed pipeline configuration in a distributed computing system
US20220164663A1 (en) * 2020-11-24 2022-05-26 Arm Limited Activation Compression Method for Deep Learning Acceleration
US11977885B2 (en) * 2020-11-30 2024-05-07 Intel Corporation Utilizing structured sparsity in systolic arrays
US20220197642A1 (en) * 2020-12-23 2022-06-23 Intel Corporation Processor instructions for data compression and decompression
US20220197799A1 (en) * 2020-12-23 2022-06-23 Intel Corporation Instruction and Micro-Architecture Support for Decompression on Core
US20220222319A1 (en) * 2021-01-14 2022-07-14 Microsoft Technology Licensing, Llc Compressed matrix with sparsity metadata
US20230161479A1 (en) * 2021-02-25 2023-05-25 Alibab Group Holding Limited Zero skipping techniques for reducing data movement
US20220293170A1 (en) * 2021-03-10 2022-09-15 Invention And Collaboration Laboratory Pte. Ltd. Integrated scaling and stretching platform for optimizing monolithic integration and/or heterogeneous integration in a single semiconductor die
US20220300816A1 (en) * 2021-03-19 2022-09-22 Rebellions Inc. Neural processing device and method for pruning thereof
CN113516172B (zh) * 2021-05-19 2023-05-12 电子科技大学 基于随机计算贝叶斯神经网络误差注入的图像分类方法
CN113076521B (zh) * 2021-06-03 2021-09-21 沐曦集成电路(上海)有限公司 一种基于gpgpu可重构架构的方法及计算系统
CN113268270B (zh) * 2021-06-07 2022-10-21 中科计算技术西部研究院 一种针对成对隐马尔可夫模型的加速方法、系统及装置
US11669331B2 (en) * 2021-06-17 2023-06-06 International Business Machines Corporation Neural network processing assist instruction
US20220414053A1 (en) * 2021-06-24 2022-12-29 Intel Corporation Systolic array of arbitrary physical and logical depth
US20220414054A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Dual pipeline parallel systolic array
US20220413803A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Systolic array having support for output sparsity
US20220413924A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Using sparsity metadata to reduce systolic array power consumption
US20220413851A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Register file for systolic array
US11941111B2 (en) 2021-07-31 2024-03-26 International Business Machines Corporation Exploiting fine-grained structured weight sparsity in systolic arrays
US20230079975A1 (en) * 2021-09-10 2023-03-16 Arm Limited Power management for system-on-chip
US20230102279A1 (en) * 2021-09-25 2023-03-30 Intel Corporation Apparatuses, methods, and systems for instructions for structured-sparse tile matrix fma
US11657260B2 (en) * 2021-10-26 2023-05-23 Edgecortix Pte. Ltd. Neural network hardware accelerator data parallelism
CN114218152B (zh) * 2021-12-06 2023-08-15 海飞科(南京)信息技术有限公司 流处理方法、处理电路和电子设备
TWI824392B (zh) * 2022-01-21 2023-12-01 財團法人國家實驗研究院 適用於分散式深度學習計算的隨需即組共用資料快取方法、電腦程式、電腦可讀取媒體
CN115034198B (zh) * 2022-05-16 2023-05-12 北京百度网讯科技有限公司 语言模型中嵌入模块计算优化的方法
KR102548582B1 (ko) * 2022-12-26 2023-06-29 리벨리온 주식회사 뉴럴 프로세서 및 이의 명령어 페치 방법
US11915001B1 (en) 2022-12-26 2024-02-27 Rebellions Inc. Neural processor and method for fetching instructions thereof
TWI831588B (zh) * 2023-01-30 2024-02-01 創鑫智慧股份有限公司 神經網路演算裝置以及在神經網路演算中的數值轉換方法
TWI830669B (zh) * 2023-02-22 2024-01-21 旺宏電子股份有限公司 編碼方法及編碼電路
CN117093816B (zh) * 2023-10-19 2024-01-19 上海登临科技有限公司 矩阵乘运算方法、装置和电子设备

Family Cites Families (325)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2581236B2 (ja) 1989-11-16 1997-02-12 三菱電機株式会社 データ処理装置
JP2682232B2 (ja) 1990-11-21 1997-11-26 松下電器産業株式会社 浮動小数点演算処理装置
US5381539A (en) 1992-06-04 1995-01-10 Emc Corporation System and method for dynamically controlling cache management
GB9307359D0 (en) 1993-04-08 1993-06-02 Int Computers Ltd Cache replacement mechanism
US5450607A (en) 1993-05-17 1995-09-12 Mips Technologies Inc. Unified floating point and integer datapath for a RISC processor
US5574928A (en) 1993-10-29 1996-11-12 Advanced Micro Devices, Inc. Mixed integer/floating point processor core for a superscalar microprocessor with a plurality of operand buses for transferring operand segments
US5623636A (en) 1993-11-09 1997-04-22 Motorola Inc. Data processing system and method for providing memory access protection using transparent translation registers and default attribute bits
US5627985A (en) 1994-01-04 1997-05-06 Intel Corporation Speculative and committed resource files in an out-of-order processor
GB2296155B (en) 1994-06-22 1997-04-23 Microsoft Corp Data decompression circuit
US5805475A (en) 1995-02-10 1998-09-08 International Business Machines Corporation Load-store unit and method of loading and storing single-precision floating-point registers in a double-precision architecture
US5651137A (en) 1995-04-12 1997-07-22 Intel Corporation Scalable cache attributes for an input/output bus
US5940311A (en) 1996-04-30 1999-08-17 Texas Instruments Incorporated Immediate floating-point operand reformatting in a microprocessor
US5917741A (en) 1996-08-29 1999-06-29 Intel Corporation Method and apparatus for performing floating-point rounding operations for multiple precisions using incrementers
US6078940A (en) 1997-01-24 2000-06-20 Texas Instruments Incorporated Microprocessor with an instruction for multiply and left shift with saturate
US5943687A (en) 1997-03-14 1999-08-24 Telefonakiebolaget Lm Ericsson Penalty-based cache storage and replacement techniques
US5926406A (en) 1997-04-30 1999-07-20 Hewlett-Packard, Co. System and method for calculating floating point exponential values in a geometry accelerator
AUPO793897A0 (en) * 1997-07-15 1997-08-07 Silverbrook Research Pty Ltd Image processing method and apparatus (ART25)
SG120064A1 (en) * 1997-07-15 2006-03-28 Silverbrook Res Pty Ltd Thermal actuator
US6856320B1 (en) 1997-11-25 2005-02-15 Nvidia U.S. Investment Company Demand-based memory system for graphics applications
US7102646B1 (en) 1997-11-25 2006-09-05 Nvidia U.S. Investment Company Demand-based memory system for graphics applications
US6253311B1 (en) 1997-11-29 2001-06-26 Jp First Llc Instruction set for bi-directional conversion and transfer of integer and floating point data
US6049865A (en) 1997-12-18 2000-04-11 Motorola, Inc. Method and apparatus for implementing floating point projection instructions
US6260008B1 (en) 1998-01-08 2001-07-10 Sharp Kabushiki Kaisha Method of and system for disambiguating syntactic word multiples
US6480872B1 (en) 1999-01-21 2002-11-12 Sandcraft, Inc. Floating-point and integer multiply-add and multiply-accumulate
US6529928B1 (en) 1999-03-23 2003-03-04 Silicon Graphics, Inc. Floating-point adder performing floating-point and integer operations
US6788738B1 (en) 1999-05-07 2004-09-07 Xilinx, Inc. Filter accelerator for a digital signal processor
US6631437B1 (en) 2000-04-06 2003-10-07 Hewlett-Packard Development Company, L.P. Method and apparatus for promoting memory read commands
US6578102B1 (en) 2000-04-18 2003-06-10 International Business Machines Corporation Tracking and control of prefetch data in a PCI bus system
US6412046B1 (en) 2000-05-01 2002-06-25 Hewlett Packard Company Verification of cache prefetch mechanism
US7499053B2 (en) 2000-06-19 2009-03-03 Mental Images Gmbh Real-time precision ray tracing
US8188997B2 (en) 2000-06-19 2012-05-29 Mental Images Gmbh Accelerated ray tracing using shallow bounding volume hierarchies
US6678806B1 (en) 2000-08-23 2004-01-13 Chipwrights Design, Inc. Apparatus and method for using tagged pointers for extract, insert and format operations
US6792509B2 (en) 2001-04-19 2004-09-14 International Business Machines Corporation Partitioned cache of multiple logical levels with adaptive reconfiguration based on multiple criteria
US6748495B2 (en) 2001-05-15 2004-06-08 Broadcom Corporation Random generator
US6947049B2 (en) 2001-06-01 2005-09-20 Nvidia Corporation Method and system for synchronizing updates of vertex data with a graphics processor that is fetching vertex data
US7127482B2 (en) 2001-11-19 2006-10-24 Intel Corporation Performance optimized approach for efficient downsampling operations
US7197605B2 (en) 2002-12-30 2007-03-27 Intel Corporation Allocating cache lines
US7483031B2 (en) 2003-04-17 2009-01-27 Nvidia Corporation Method for synchronizing graphics processing units
US7373369B2 (en) 2003-06-05 2008-05-13 International Business Machines Corporation Advanced execution of extended floating-point add operations in a narrow dataflow
US7272624B2 (en) 2003-09-30 2007-09-18 International Business Machines Corporation Fused booth encoder multiplexer
JP3807400B2 (ja) 2003-10-30 2006-08-09 ソニー株式会社 記録制御装置および記録制御方法
GB2409068A (en) 2003-12-09 2005-06-15 Advanced Risc Mach Ltd Data element size control within parallel lanes of processing
KR100800468B1 (ko) 2004-01-29 2008-02-01 삼성전자주식회사 저전력 고속 동작을 위한 하드웨어 암호화/복호화 장치 및그 방법
US8253750B1 (en) 2004-02-14 2012-08-28 Nvidia Corporation Digital media processor
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US7548892B2 (en) * 2004-04-30 2009-06-16 Microsoft Corporation Processing machine learning techniques using a graphics processing unit
US7428566B2 (en) 2004-11-10 2008-09-23 Nvidia Corporation Multipurpose functional unit with multiply-add and format conversion pipeline
US20060101244A1 (en) 2004-11-10 2006-05-11 Nvidia Corporation Multipurpose functional unit with combined integer and floating-point multiply-add pipeline
US20060179092A1 (en) 2005-02-10 2006-08-10 Schmookler Martin S System and method for executing fixed point divide operations using a floating point multiply-add pipeline
US20060248279A1 (en) 2005-05-02 2006-11-02 Al-Sukhni Hassan F Prefetching across a page boundary
US7346741B1 (en) 2005-05-10 2008-03-18 Sun Microsystems, Inc. Memory latency of processors with configurable stride based pre-fetching technique
US20090030960A1 (en) 2005-05-13 2009-01-29 Dermot Geraghty Data processing system and method
US8250348B2 (en) 2005-05-19 2012-08-21 International Business Machines Corporation Methods and apparatus for dynamically switching processor mode
US7659899B2 (en) 2005-08-08 2010-02-09 Via Technologies, Inc. System and method to manage data processing stages of a logical graphics pipeline
US20070030277A1 (en) 2005-08-08 2007-02-08 Via Technologies, Inc. Method for processing vertex, triangle, and pixel graphics data packets
US20070074008A1 (en) 2005-09-28 2007-03-29 Donofrio David D Mixed mode floating-point pipeline with extended functions
CN1952979B (zh) 2005-10-14 2012-06-27 威盛电子股份有限公司 多重图形处理器系统及方法
US7616206B1 (en) 2006-06-16 2009-11-10 Nvidia Corporation Efficient multi-chip GPU
US7467280B2 (en) 2006-07-05 2008-12-16 International Business Machines Corporation Method for reconfiguring cache memory based on at least analysis of heat generated during runtime, at least by associating an access bit with a cache line and associating a granularity bit with a cache line in level-2 cache
US20080030510A1 (en) 2006-08-02 2008-02-07 Xgi Technology Inc. Multi-GPU rendering system
US7620793B1 (en) 2006-08-28 2009-11-17 Nvidia Corporation Mapping memory partitions to virtual memory pages
US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US7327289B1 (en) 2006-09-20 2008-02-05 Intel Corporation Data-modifying run length encoder to avoid data expansion
US8122078B2 (en) 2006-10-06 2012-02-21 Calos Fund, LLC Processor with enhanced combined-arithmetic capability
US20080086598A1 (en) 2006-10-10 2008-04-10 Maron William A System and method for establishing cache priority for critical data structures of an application
US20080189487A1 (en) 2007-02-06 2008-08-07 Arm Limited Control of cache transactions
US8781110B2 (en) 2007-06-30 2014-07-15 Intel Corporation Unified system architecture for elliptic-curve cryptography
US7783859B2 (en) 2007-07-12 2010-08-24 Qnx Software Systems Gmbh & Co. Kg Processing system implementing variable page size memory organization
US8990505B1 (en) 2007-09-21 2015-03-24 Marvell International Ltd. Cache memory bank selection
EP2220554A1 (de) 2007-11-17 2010-08-25 Krass, Maren Rekonfiguri erbare fliesskomma- und bit- ebenen datenverarbeitungseinheit
US8106914B2 (en) 2007-12-07 2012-01-31 Nvidia Corporation Fused multiply-add functional unit
US7941633B2 (en) 2007-12-18 2011-05-10 International Business Machines Corporation Hash optimization system and method
US7870339B2 (en) 2008-01-11 2011-01-11 International Business Machines Corporation Extract cache attribute facility and instruction therefore
US20090190432A1 (en) 2008-01-28 2009-07-30 Christoph Bilger DRAM with Page Access
US8429351B1 (en) 2008-03-28 2013-04-23 Emc Corporation Techniques for determining an amount of data to prefetch
US8146064B2 (en) 2008-04-04 2012-03-27 International Business Machines Corporation Dynamically controlling a prefetching range of a software controlled cache
US8078833B2 (en) 2008-05-29 2011-12-13 Axis Semiconductor, Inc. Microprocessor with highly configurable pipeline and executional unit internal hierarchal structures, optimizable for different types of computational functions
US7945768B2 (en) 2008-06-05 2011-05-17 Motorola Mobility, Inc. Method and apparatus for nested instruction looping using implicit predicates
US8340280B2 (en) 2008-06-13 2012-12-25 Intel Corporation Using a single instruction multiple data (SIMD) instruction to speed up galois counter mode (GCM) computations
US8041856B2 (en) * 2008-09-30 2011-10-18 Lsi Corporation Skip based control logic for first in first out buffer
US8219757B2 (en) 2008-09-30 2012-07-10 Intel Corporation Apparatus and method for low touch cache management
US20100162247A1 (en) 2008-12-19 2010-06-24 Adam Welc Methods and systems for transactional nested parallelism
US20100185816A1 (en) 2009-01-21 2010-07-22 Sauber William F Multiple Cache Line Size
US8266409B2 (en) 2009-03-03 2012-09-11 Qualcomm Incorporated Configurable cache and method to configure same
US8108612B2 (en) 2009-05-15 2012-01-31 Microsoft Corporation Location updates for a distributed data store
US8566801B2 (en) 2009-05-22 2013-10-22 International Business Machines Corporation Concurrent static single assignment for general barrier synchronized parallel programs
US8819359B2 (en) 2009-06-29 2014-08-26 Oracle America, Inc. Hybrid interleaving in memory modules by interleaving physical addresses for a page across ranks in a memory module
US8352945B2 (en) 2009-08-11 2013-01-08 International Business Machines Corporation System, method, and apparatus for scan-sharing for business intelligence queries in an in-memory database
US8615637B2 (en) 2009-09-10 2013-12-24 Advanced Micro Devices, Inc. Systems and methods for processing memory requests in a multi-processor system using a probe engine
US8364739B2 (en) 2009-09-30 2013-01-29 International Business Machines Corporation Sparse matrix-vector multiplication on graphics processor units
US8103910B2 (en) 2009-11-13 2012-01-24 International Business Machines Corporation Local rollback for fault-tolerance in parallel computing systems
US8669990B2 (en) 2009-12-31 2014-03-11 Intel Corporation Sharing resources between a CPU and GPU
US8677613B2 (en) 2010-05-20 2014-03-25 International Business Machines Corporation Enhanced modularity in heterogeneous 3D stacks
US8812575B2 (en) 2010-07-06 2014-08-19 Silminds, Llc, Egypt Decimal floating-point square-root unit using Newton-Raphson iterations
US8982140B2 (en) 2010-09-24 2015-03-17 Nvidia Corporation Hierarchical memory addressing
US9965395B2 (en) 2010-09-28 2018-05-08 Texas Instruments Incorporated Memory attribute sharing between differing cache levels of multilevel cache
US8488055B2 (en) 2010-09-30 2013-07-16 Apple Inc. Flash synchronization using image sensor interface timing signal
US8745111B2 (en) 2010-11-16 2014-06-03 Apple Inc. Methods and apparatuses for converting floating point representations
CN102033985A (zh) * 2010-11-24 2011-04-27 南京理工大学 基于*-矩阵算法的高效时域电磁仿真方法
US8847965B2 (en) 2010-12-03 2014-09-30 The University Of North Carolina At Chapel Hill Methods, systems, and computer readable media for fast geometric sound propagation using visibility computations
CN102141976B (zh) * 2011-01-10 2013-08-14 中国科学院软件研究所 稀疏矩阵的对角线数据存储方法及基于该方法的SpMV实现方法
GB2488985A (en) 2011-03-08 2012-09-19 Advanced Risc Mach Ltd Mixed size data processing operation with integrated operand conversion instructions
US8862653B2 (en) * 2011-04-26 2014-10-14 University Of South Carolina System and method for sparse matrix vector multiplication processing
FR2974645A1 (fr) 2011-04-28 2012-11-02 Kalray Operateur de multiplication et addition fusionnees a precision mixte
US9501392B1 (en) 2011-05-12 2016-11-22 Avago Technologies General Ip (Singapore) Pte. Ltd. Management of a non-volatile memory module
JP5813380B2 (ja) 2011-06-03 2015-11-17 株式会社東芝 半導体記憶装置
US9529712B2 (en) 2011-07-26 2016-12-27 Nvidia Corporation Techniques for balancing accesses to memory having different memory types
US9727336B2 (en) 2011-09-16 2017-08-08 International Business Machines Corporation Fine-grained instruction enablement at sub-function granularity based on an indicated subrange of registers
US20130099946A1 (en) 2011-10-21 2013-04-25 International Business Machines Corporation Data Compression Utilizing Variable and Limited Length Codes
US8935478B2 (en) 2011-11-01 2015-01-13 International Business Machines Corporation Variable cache line size management
US20130141442A1 (en) 2011-12-06 2013-06-06 John W. Brothers Method and apparatus for multi-chip processing
US20130148947A1 (en) 2011-12-13 2013-06-13 Ati Technologies Ulc Video player with multiple grpahics processors
WO2013095504A1 (en) 2011-12-22 2013-06-27 Intel Corporation Matrix multiply accumulate instruction
CN104137055B (zh) * 2011-12-29 2018-06-05 英特尔公司 点积处理器、方法、系统和指令
US20130185515A1 (en) 2012-01-16 2013-07-18 Qualcomm Incorporated Utilizing Negative Feedback from Unexpected Miss Addresses in a Hardware Prefetcher
US20140052965A1 (en) 2012-02-08 2014-02-20 Uzi Sarel Dynamic cpu gpu load balancing using power
US20130218938A1 (en) 2012-02-17 2013-08-22 Qualcomm Incorporated Floating-point adder with operand shifting based on a predicted exponent difference
US9036710B2 (en) * 2012-03-08 2015-05-19 Blackberry Limited Unified transform coefficient encoding and decoding
US8775762B2 (en) 2012-05-07 2014-07-08 Advanced Micro Devices, Inc. Method and apparatus for batching memory requests
US8892619B2 (en) 2012-07-24 2014-11-18 The Board Of Trustees Of The Leland Stanford Junior University Floating-point multiply-add unit using cascade design
US9128845B2 (en) 2012-07-30 2015-09-08 Hewlett-Packard Development Company, L.P. Dynamically partition a volatile memory for a cache and a memory partition
CN103581052B (zh) 2012-08-02 2017-07-21 华为技术有限公司 一种数据处理方法、路由器及ndn系统
US9298456B2 (en) 2012-08-21 2016-03-29 Apple Inc. Mechanism for performing speculative predicated instructions
US20140075163A1 (en) 2012-09-07 2014-03-13 Paul N. Loewenstein Load-monitor mwait
US9134954B2 (en) 2012-09-10 2015-09-15 Qualcomm Incorporated GPU memory buffer pre-fetch and pre-back signaling to avoid page-fault
US10742475B2 (en) 2012-12-05 2020-08-11 Origin Wireless, Inc. Method, apparatus, and system for object tracking sensing using broadcasting
US9317482B2 (en) * 2012-10-14 2016-04-19 Microsoft Technology Licensing, Llc Universal FPGA/ASIC matrix-vector multiplication architecture
US9152382B2 (en) 2012-10-31 2015-10-06 Intel Corporation Reducing power consumption in a fused multiply-add (FMA) unit responsive to input data values
US11150721B2 (en) 2012-11-07 2021-10-19 Nvidia Corporation Providing hints to an execution unit to prepare for predicted subsequent arithmetic operations
US9183144B2 (en) 2012-12-14 2015-11-10 Intel Corporation Power gating a portion of a cache memory
US20140173203A1 (en) 2012-12-18 2014-06-19 Andrew T. Forsyth Block Memory Engine
US9317251B2 (en) 2012-12-31 2016-04-19 Nvidia Corporation Efficient correction of normalizer shift amount errors in fused multiply add operations
US9971710B2 (en) 2013-02-07 2018-05-15 Microsoft Technology Licensing, Llc Optimizing data transfers between heterogeneous memory arenas
US9478066B2 (en) 2013-03-14 2016-10-25 Nvidia Corporation Consistent vertex snapping for variable resolution rendering
US10133677B2 (en) 2013-03-14 2018-11-20 Nvidia Corporation Opportunistic migration of memory pages in a unified virtual memory system
US9940286B2 (en) 2013-03-14 2018-04-10 Nvidia Corporation PCIE traffic tracking hardware in a unified virtual memory system
US9525586B2 (en) 2013-03-15 2016-12-20 Intel Corporation QoS based binary translation and application streaming
GB2551291B (en) 2013-05-23 2018-02-14 Linear Algebra Tech Limited Corner detection
US9378127B2 (en) 2013-06-21 2016-06-28 Intel Corporation Dynamic memory page policy
US9264066B2 (en) 2013-07-30 2016-02-16 Apple Inc. Type conversion using floating-point unit
US9946666B2 (en) 2013-08-06 2018-04-17 Nvidia Corporation Coalescing texture access and load/store operations
US9092345B2 (en) 2013-08-08 2015-07-28 Arm Limited Data processing systems
US9710380B2 (en) 2013-08-29 2017-07-18 Intel Corporation Managing shared cache by multi-core processor
TWI676898B (zh) 2013-12-09 2019-11-11 安然國際科技有限公司 分散式記憶體磁碟群集儲存系統運作方法
US9461667B2 (en) 2013-12-30 2016-10-04 Samsung Electronics Co., Ltd. Rounding injection scheme for floating-point to integer conversion
US20150193358A1 (en) 2014-01-06 2015-07-09 Nvidia Corporation Prioritized Memory Reads
US10528357B2 (en) 2014-01-17 2020-01-07 L3 Technologies, Inc. Web-based recorder configuration utility
US20150205724A1 (en) 2014-01-20 2015-07-23 Honeywell International Inc. System and method of cache partitioning for processors with limited cached memory pools
KR102100161B1 (ko) 2014-02-04 2020-04-14 삼성전자주식회사 Gpu 데이터 캐싱 방법 및 그에 따른 데이터 프로세싱 시스템
WO2015119610A1 (en) 2014-02-06 2015-08-13 Empire Technology Development, Llc Server-client secret generation with cached data
US9275429B2 (en) 2014-02-17 2016-03-01 Qualcomm Incorporated Device hang detection and recovery
KR20150106132A (ko) 2014-03-11 2015-09-21 삼성전자주식회사 전자 장치의 캐시 메모리 제어 방법 및 장치
US20150268963A1 (en) 2014-03-23 2015-09-24 Technion Research & Development Foundation Ltd. Execution of data-parallel programs on coarse-grained reconfigurable architecture hardware
US9436972B2 (en) 2014-03-27 2016-09-06 Intel Corporation System coherency in a distributed graphics processor hierarchy
EP2937794B1 (de) 2014-04-22 2016-08-17 DataVard GmbH Verfahren und System zum Archivieren von digitalen Daten
US9673998B2 (en) 2014-05-15 2017-06-06 Futurewei Technologies, Inc. Differential cache for representational state transfer (REST) API
JP6248808B2 (ja) 2014-05-22 2017-12-20 富士通株式会社 情報処理装置、情報処理システム、情報処理装置の制御方法、及び、情報処理装置の制御プログラム
KR102192956B1 (ko) 2014-06-23 2020-12-18 삼성전자주식회사 디스플레이 장치 및 그 제어 방법
US10061592B2 (en) 2014-06-27 2018-08-28 Samsung Electronics Co., Ltd. Architecture and execution for efficient mixed precision computations in single instruction multiple data/thread (SIMD/T) devices
US9520192B2 (en) 2014-06-30 2016-12-13 Intel Corporation Resistive memory write operation with merged reset
US20150378920A1 (en) 2014-06-30 2015-12-31 John G. Gierach Graphics data pre-fetcher for last level caches
US10223333B2 (en) 2014-08-29 2019-03-05 Nvidia Corporation Performing multi-convolution operations in a parallel processing system
KR102263326B1 (ko) 2014-09-18 2021-06-09 삼성전자주식회사 그래픽 프로세싱 유닛 및 이를 이용한 그래픽 데이터 처리 방법
US9928076B2 (en) 2014-09-26 2018-03-27 Intel Corporation Method and apparatus for unstructured control flow for SIMD execution engine
US20160092118A1 (en) 2014-09-26 2016-03-31 Intel Corporation Memory write management in a computer system
JP2016091242A (ja) 2014-10-31 2016-05-23 富士通株式会社 キャッシュメモリ、キャッシュメモリへのアクセス方法及び制御プログラム
US20160124709A1 (en) 2014-11-04 2016-05-05 International Business Machines Corporation Fast, energy-efficient exponential computations in simd architectures
US10282227B2 (en) 2014-11-18 2019-05-07 Intel Corporation Efficient preemption for graphics processors
US9910785B2 (en) 2014-12-14 2018-03-06 Via Alliance Semiconductor Co., Ltd Cache memory budgeted by ways based on memory access type
US9898411B2 (en) 2014-12-14 2018-02-20 Via Alliance Semiconductor Co., Ltd. Cache memory budgeted by chunks based on memory access type
JP6207766B2 (ja) 2014-12-14 2017-10-04 ヴィア アライアンス セミコンダクター カンパニー リミテッド ヘテロジニアス置換ポリシーを用いるセット・アソシエイティブ・キャッシュ・メモリ
FR3030846B1 (fr) * 2014-12-23 2017-12-29 Commissariat Energie Atomique Representation semantique du contenu d'une image
US9304835B1 (en) * 2014-12-31 2016-04-05 International Business Machines Corporation Optimized system for analytics (graphs and sparse matrices) operations
US20160255169A1 (en) 2015-02-27 2016-09-01 Futurewei Technologies, Inc. Method and system for smart object eviction for proxy cache
US10002455B2 (en) 2015-04-20 2018-06-19 Intel Corporation Optimized depth buffer cache apparatus and method
US9626299B2 (en) 2015-05-01 2017-04-18 Intel Corporation Changing a hash function based on a conflict ratio associated with cache sets
US9804666B2 (en) 2015-05-26 2017-10-31 Samsung Electronics Co., Ltd. Warp clustering
US20160378465A1 (en) * 2015-06-23 2016-12-29 Intel Corporation Efficient sparse array handling in a processor
GB2540761B (en) 2015-07-23 2017-12-06 Advanced Risc Mach Ltd Cache usage estimation
US20170039144A1 (en) 2015-08-07 2017-02-09 Intel Corporation Loading data using sub-thread information in a processor
CN105068787A (zh) * 2015-08-28 2015-11-18 华南理工大学 一种稀疏矩阵向量乘法的异构并行计算方法
US10423354B2 (en) 2015-09-23 2019-09-24 Advanced Micro Devices, Inc. Selective data copying between memory modules
US10423411B2 (en) * 2015-09-26 2019-09-24 Intel Corporation Data element comparison processors, methods, systems, and instructions
US10042749B2 (en) 2015-11-10 2018-08-07 International Business Machines Corporation Prefetch insensitive transactional memory
US10387309B2 (en) 2015-10-14 2019-08-20 Elastifile Ltd. High-performance distributed caching
KR101843243B1 (ko) * 2015-10-30 2018-03-29 세종대학교산학협력단 제로값을 피연산자로 갖는 연산자에 대한 연산을 스킵하는 연산 방법 및 연산 장치
US9558156B1 (en) * 2015-11-24 2017-01-31 International Business Machines Corporation Sparse matrix multiplication using a single field programmable gate array module
CN106886429B (zh) 2015-12-16 2020-11-06 华为技术有限公司 一种加载驱动程序的方法和服务器
US20170177336A1 (en) 2015-12-22 2017-06-22 Intel Corporation Hardware cancellation monitor for floating point operations
US9996320B2 (en) 2015-12-23 2018-06-12 Intel Corporation Fused multiply-add (FMA) low functional unit
KR102604737B1 (ko) 2016-01-11 2023-11-22 삼성전자주식회사 가속 구조를 생성하는 방법 및 장치
US10762164B2 (en) * 2016-01-20 2020-09-01 Cambricon Technologies Corporation Limited Vector and matrix computing device
US20170214930A1 (en) 2016-01-26 2017-07-27 Sandia Corporation Gpu-assisted lossless data compression
US9778871B1 (en) 2016-03-27 2017-10-03 Qualcomm Incorporated Power-reducing memory subsystem having a system cache and local resource management
CN107315718B (zh) * 2016-04-26 2020-08-21 中科寒武纪科技股份有限公司 一种用于执行向量内积运算的装置和方法
US20170308800A1 (en) 2016-04-26 2017-10-26 Smokescreen Intelligence, LLC Interchangeable Artificial Intelligence Perception Systems and Methods
US10509732B2 (en) 2016-04-27 2019-12-17 Advanced Micro Devices, Inc. Selecting cache aging policy for prefetches based on cache test regions
CN107346148A (zh) 2016-05-04 2017-11-14 杭州海存信息技术有限公司 基于背面查找表的仿真处理器
US9846579B1 (en) 2016-06-13 2017-12-19 Apple Inc. Unified integer and floating-point compare circuitry
US10176099B2 (en) 2016-07-11 2019-01-08 Intel Corporation Using data pattern to mark cache lines as invalid
JP6665720B2 (ja) 2016-07-14 2020-03-13 富士通株式会社 情報処理装置、コンパイルプログラム、コンパイル方法、およびキャッシュ制御方法
US20180018266A1 (en) 2016-07-18 2018-01-18 Advanced Micro Devices, Inc. Stride prefetcher for inconsistent strides
US10034407B2 (en) 2016-07-22 2018-07-24 Intel Corporation Storage sled for a data center
US10242311B2 (en) * 2016-08-11 2019-03-26 Vivante Corporation Zero coefficient skipping convolution neural network engine
US10891538B2 (en) * 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
US10528864B2 (en) 2016-08-11 2020-01-07 Nvidia Corporation Sparse convolutional neural network accelerator
US10467195B2 (en) 2016-09-06 2019-11-05 Samsung Electronics Co., Ltd. Adaptive caching replacement manager with dynamic updating granulates and partitions for shared flash-based storage system
US20180107602A1 (en) 2016-10-13 2018-04-19 Intel Corporation Latency and Bandwidth Efficiency Improvement for Read Modify Write When a Read Operation is Requested to a Partially Modified Write Only Cacheline
US11315018B2 (en) 2016-10-21 2022-04-26 Nvidia Corporation Systems and methods for pruning neural networks for resource efficient inference
US10216479B2 (en) 2016-12-06 2019-02-26 Arm Limited Apparatus and method for performing arithmetic operations to accumulate floating-point numbers
CN106683036A (zh) 2016-12-12 2017-05-17 中国航空工业集团公司西安航空计算技术研究所 一种面向gpu高效绘制的帧缓冲区存储编码方法
US10452551B2 (en) 2016-12-12 2019-10-22 Intel Corporation Programmable memory prefetcher for prefetching multiple cache lines based on data in a prefetch engine control register
KR20180069461A (ko) 2016-12-15 2018-06-25 삼성전자주식회사 가속 구조를 생성하는 방법 및 장치
US20180173623A1 (en) 2016-12-21 2018-06-21 Qualcomm Incorporated Reducing or avoiding buffering of evicted cache data from an uncompressed cache memory in a compressed memory system to avoid stalling write operations
US20180183577A1 (en) 2016-12-28 2018-06-28 Intel Corporation Techniques for secure message authentication with unified hardware acceleration
US10558575B2 (en) 2016-12-30 2020-02-11 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10146738B2 (en) * 2016-12-31 2018-12-04 Intel Corporation Hardware accelerator architecture for processing very-sparse and hyper-sparse matrix data
DK3812900T3 (da) 2016-12-31 2024-02-12 Intel Corp Systemer, fremgangsmåder og apparater til heterogen beregning
US20180210836A1 (en) 2017-01-24 2018-07-26 Microsoft Technology Licensing, Llc Thermal and reliability based cache slice migration
US10430912B2 (en) 2017-02-14 2019-10-01 Qualcomm Incorporated Dynamic shader instruction nullification for graphics processing
GB2560159B (en) 2017-02-23 2019-12-25 Advanced Risc Mach Ltd Widening arithmetic in a data processing apparatus
US10409887B1 (en) * 2017-02-28 2019-09-10 Ambarella, Inc. Generalized dot product for computer vision applications
KR102499396B1 (ko) * 2017-03-03 2023-02-13 삼성전자 주식회사 뉴럴 네트워크 장치 및 뉴럴 네트워크 장치의 동작 방법
US10229059B2 (en) 2017-03-31 2019-03-12 Intel Corporation Dynamic fill policy for a shared cache
US10303602B2 (en) 2017-03-31 2019-05-28 Advanced Micro Devices, Inc. Preemptive cache management policies for processing units
US10423415B2 (en) 2017-04-01 2019-09-24 Intel Corporation Hierarchical general register file (GRF) for execution block
US10503652B2 (en) 2017-04-01 2019-12-10 Intel Corporation Sector cache for compression
US10304421B2 (en) 2017-04-07 2019-05-28 Intel Corporation Apparatus and method for remote display and content protection in a virtualized graphics processing environment
US10861216B2 (en) 2017-04-07 2020-12-08 Intel Corporation Ray tracing apparatus and method for memory access and register operations
US10346944B2 (en) * 2017-04-09 2019-07-09 Intel Corporation Machine learning sparse computation mechanism
US10824938B2 (en) * 2017-04-24 2020-11-03 Intel Corporation Specialized fixed function hardware for efficient convolution
US10409614B2 (en) 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10403003B2 (en) * 2017-04-24 2019-09-03 Intel Corporation Compression mechanism
US10186011B2 (en) * 2017-04-28 2019-01-22 Intel Corporation Programmable coarse grained and sparse matrix compute hardware with advanced scheduling
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US10726514B2 (en) 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
US11488008B2 (en) 2017-05-05 2022-11-01 Intel Corporation Hardware implemented point to point communication primitives for machine learning
US10776699B2 (en) * 2017-05-05 2020-09-15 Intel Corporation Optimized compute hardware for machine learning operations
US10338919B2 (en) 2017-05-08 2019-07-02 Nvidia Corporation Generalized acceleration of matrix multiply accumulate operations
CN117273096A (zh) 2017-05-17 2023-12-22 谷歌有限责任公司 在硬件中执行矩阵乘法
US20180336136A1 (en) 2017-05-17 2018-11-22 Qualcomm Incorporated Input/output-coherent Look-ahead Cache Access
US10102015B1 (en) 2017-06-22 2018-10-16 Microsoft Technology Licensing, Llc Just in time GPU executed program cross compilation
US10282299B2 (en) 2017-06-23 2019-05-07 Cavium, Llc Managing cache partitions based on cache usage information
US10984049B2 (en) 2017-06-27 2021-04-20 Nvidia Corporation Performing traversal stack compression
US10969740B2 (en) 2017-06-27 2021-04-06 Nvidia Corporation System and method for near-eye light field rendering for wide field of view interactive three-dimensional computer graphics
US10990648B2 (en) 2017-08-07 2021-04-27 Intel Corporation System and method for an optimized winograd convolution accelerator
US10394456B2 (en) 2017-08-23 2019-08-27 Micron Technology, Inc. On demand memory page size
US11232531B2 (en) 2017-08-29 2022-01-25 Intel Corporation Method and apparatus for efficient loop processing in a graphics hardware front end
US10691572B2 (en) 2017-08-30 2020-06-23 Nvidia Corporation Liveness as a factor to evaluate memory vulnerability to soft errors
US10725740B2 (en) * 2017-08-31 2020-07-28 Qualcomm Incorporated Providing efficient multiplication of sparse matrices in matrix-processor-based devices
US10503507B2 (en) * 2017-08-31 2019-12-10 Nvidia Corporation Inline data inspection for workload simplification
US10943171B2 (en) 2017-09-01 2021-03-09 Facebook, Inc. Sparse neural network training optimization
US10503520B2 (en) 2017-09-26 2019-12-10 Intel Corporation Automatic waking of power domains for graphics configuration requests
US10782904B2 (en) 2017-09-28 2020-09-22 Intel Corporation Host computing arrangement, remote server arrangement, storage system and methods thereof
US10692244B2 (en) 2017-10-06 2020-06-23 Nvidia Corporation Learning based camera pose estimation from images of an environment
US11222256B2 (en) * 2017-10-17 2022-01-11 Xilinx, Inc. Neural network processing system having multiple processors and a neural network accelerator
GB2569274B (en) 2017-10-20 2020-07-15 Graphcore Ltd Synchronization amongst processor tiles
GB2569271B (en) 2017-10-20 2020-05-13 Graphcore Ltd Synchronization with a host processor
GB2569844B (en) 2017-10-20 2021-01-06 Graphcore Ltd Sending data off-chip
GB2569098B (en) 2017-10-20 2020-01-08 Graphcore Ltd Combining states of multiple threads in a multi-threaded processor
US11651223B2 (en) * 2017-10-27 2023-05-16 Baidu Usa Llc Systems and methods for block-sparse recurrent neural networks
KR102414047B1 (ko) 2017-10-30 2022-06-29 에스케이하이닉스 주식회사 통합 메모리 디바이스 및 그의 동작 방법
US10762137B1 (en) 2017-11-15 2020-09-01 Amazon Technologies, Inc. Page table search engine
US10762620B2 (en) 2017-11-27 2020-09-01 Nvidia Corporation Deep-learning method for separating reflection and transmission images visible at a semi-reflective surface in a computer image of a real-world scene
US11977974B2 (en) 2017-11-30 2024-05-07 International Business Machines Corporation Compression of fully connected / recurrent layers of deep network(s) through enforcing spatial locality to weight matrices and effecting frequency compression
US10579535B2 (en) 2017-12-15 2020-03-03 Intel Corporation Defragmented and efficient micro-operation cache
EP3783477B1 (de) * 2017-12-27 2021-11-17 Cambricon Technologies Corporation Limited Integrierte schaltungschipvorrichtung
US10482156B2 (en) * 2017-12-29 2019-11-19 Facebook, Inc. Sparsity-aware hardware accelerators
KR102533241B1 (ko) 2018-01-25 2023-05-16 삼성전자주식회사 적응적으로 캐시 일관성을 제어하도록 구성된 이종 컴퓨팅 시스템
US10970080B2 (en) * 2018-02-08 2021-04-06 Marvell Asia Pte, Ltd. Systems and methods for programmable hardware architecture for machine learning
US11693627B2 (en) * 2018-02-09 2023-07-04 Deepmind Technologies Limited Contiguous sparsity pattern neural networks
US10755201B2 (en) 2018-02-14 2020-08-25 Lucid Circuit, Inc. Systems and methods for data collection and analysis at the edge
JP2019148969A (ja) * 2018-02-27 2019-09-05 富士通株式会社 行列演算装置、行列演算方法および行列演算プログラム
US20190278593A1 (en) 2018-03-09 2019-09-12 Nvidia Corporation Accelerating linear algebra kernels for any processor architecture
US20190278600A1 (en) 2018-03-09 2019-09-12 Nvidia Corporation Tiled compressed sparse matrix format
US10678508B2 (en) 2018-03-23 2020-06-09 Amazon Technologies, Inc. Accelerated quantized multiply-and-add operations
US10572568B2 (en) 2018-03-28 2020-02-25 Intel Corporation Accelerator for sparse-dense matrix multiplication
EP3777166A1 (de) 2018-04-13 2021-02-17 Koninklijke KPN N.V. Auf superauflösung basierende videocodierung auf frame-ebene
US11010092B2 (en) 2018-05-09 2021-05-18 Micron Technology, Inc. Prefetch signaling in memory system or sub-system
US10572409B1 (en) * 2018-05-10 2020-02-25 Xilinx, Inc. Sparse matrix processing circuitry
US11269805B2 (en) 2018-05-15 2022-03-08 Intel Corporation Signal pathways in multi-tile processors
GB2574060B (en) * 2018-05-25 2022-11-23 Myrtle Software Ltd Processing matrix vector multiplication
US10838864B2 (en) 2018-05-30 2020-11-17 Advanced Micro Devices, Inc. Prioritizing local and remote memory access in a non-uniform memory access architecture
US10699468B2 (en) 2018-06-09 2020-06-30 Adshir Ltd. Method for non-planar specular reflections in hybrid ray tracing
US10620951B2 (en) 2018-06-22 2020-04-14 Intel Corporation Matrix multiplication acceleration of sparse matrices using column folding and squeezing
US20190392287A1 (en) * 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
CN113190791A (zh) 2018-08-06 2021-07-30 华为技术有限公司 矩阵的处理方法、装置及逻辑电路
EP3608828A1 (de) * 2018-08-09 2020-02-12 Olympus Soft Imaging Solutions GmbH Verfahren zur bereitstellung eines auswertungsmittels für wenigstens ein optisches anwendungssystem einer mikroskopischen anwendungstechnologie
KR20200022118A (ko) 2018-08-22 2020-03-03 에스케이하이닉스 주식회사 데이터 저장 장치 및 그 동작 방법
US20190042457A1 (en) 2018-08-22 2019-02-07 Intel Corporation Cache (partition) size determination method and apparatus
US11833681B2 (en) * 2018-08-24 2023-12-05 Nvidia Corporation Robotic control system
US10846241B2 (en) 2018-08-29 2020-11-24 Vmware, Inc. Score-based cache admission and eviction
US11093248B2 (en) 2018-09-10 2021-08-17 International Business Machines Corporation Prefetch queue allocation protection bubble in a processor
US10817426B2 (en) 2018-09-24 2020-10-27 Arm Limited Prefetching techniques
US10853067B2 (en) 2018-09-27 2020-12-01 Intel Corporation Computer processor for higher precision computations using a mixed-precision decomposition of operations
US11294626B2 (en) 2018-09-27 2022-04-05 Intel Corporation Floating-point dynamic range expansion
CN112384900A (zh) 2018-09-28 2021-02-19 英特尔公司 用于实现自适应页面大小的转换后备缓冲器
GB2578097B (en) 2018-10-15 2021-02-17 Advanced Risc Mach Ltd Cache control circuitry and methods
US10768895B2 (en) * 2018-11-08 2020-09-08 Movidius Limited Dot product calculators and methods of operating the same
US11366663B2 (en) 2018-11-09 2022-06-21 Intel Corporation Systems and methods for performing 16-bit floating-point vector dot product instructions
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US20200175074A1 (en) 2018-12-04 2020-06-04 Vmware, Inc. Tree structure aware cache eviction policy
US20200202195A1 (en) 2018-12-06 2020-06-25 MIPS Tech, LLC Neural network processing using mixed-precision data representation
US11893470B2 (en) 2018-12-06 2024-02-06 MIPS Tech, LLC Neural network processing using specialized data representation
US11615307B2 (en) 2018-12-06 2023-03-28 MIPS Tech, LLC Neural network data computation using mixed-precision
GB2580151B (en) 2018-12-21 2021-02-24 Graphcore Ltd Identifying processing units in a processor
US10909741B2 (en) 2018-12-28 2021-02-02 Intel Corporation Speculative execution of hit and intersection shaders on programmable ray tracing architectures
US10832371B2 (en) 2018-12-28 2020-11-10 Intel Corporation Unified architecture for BVH construction based on hardware pre-sorting and a parallel, reconfigurable clustering array
KR20200091623A (ko) * 2019-01-23 2020-07-31 삼성전자주식회사 위노그라드 변환에 기반한 뉴럴 네트워크의 컨볼루션 연산을 수행하는 방법 및 장치
US11106600B2 (en) 2019-01-24 2021-08-31 Advanced Micro Devices, Inc. Cache replacement based on translation lookaside buffer evictions
US10725923B1 (en) 2019-02-05 2020-07-28 Arm Limited Cache access detection and prediction
US10915461B2 (en) 2019-03-05 2021-02-09 International Business Machines Corporation Multilevel cache eviction management
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
US20220121421A1 (en) 2019-03-15 2022-04-21 Intel Corporation Multi-tile memory management
DE112020001249T5 (de) 2019-03-15 2021-12-23 Intel Corporation Dünnbesetzt-Optimierungen für eine Matrixbeschleunigerarchitektur
WO2020190796A1 (en) 2019-03-15 2020-09-24 Intel Corporation Systems and methods for cache optimization
US11036642B2 (en) 2019-04-26 2021-06-15 Intel Corporation Architectural enhancements for computing systems having artificial intelligence logic disposed locally to memory
US11675998B2 (en) 2019-07-15 2023-06-13 Meta Platforms Technologies, Llc System and method for performing small channel count convolutions in energy-efficient input operand stationary accelerator
US11861761B2 (en) 2019-11-15 2024-01-02 Intel Corporation Graphics processing unit processing and caching improvements
US11663746B2 (en) 2019-11-15 2023-05-30 Intel Corporation Systolic arithmetic on sparse data
US11275561B2 (en) 2019-12-12 2022-03-15 International Business Machines Corporation Mixed precision floating-point multiply-add operation
US11645145B2 (en) 2019-12-16 2023-05-09 Qualcomm Incorporated Methods and apparatus to facilitate speculative page fault handling in a graphics processing unit
US20220100518A1 (en) 2020-09-25 2022-03-31 Advanced Micro Devices, Inc. Compression metadata assisted computation
US20220197975A1 (en) 2020-12-23 2022-06-23 Intel Corporation Apparatus and method for conjugate transpose and multiply
US20220335563A1 (en) 2021-07-06 2022-10-20 Intel Corporation Graphics processing unit with network interfaces

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
CUDA-Programmierung Kapitel 3, Seiten 37 bis 51 (2013)

Also Published As

Publication number Publication date
US20210374897A1 (en) 2021-12-02
JP2022523761A (ja) 2022-04-26
JP7423644B2 (ja) 2024-01-29
US20230351543A1 (en) 2023-11-02
JP2024036383A (ja) 2024-03-15
US11676239B2 (en) 2023-06-13
BR112021016106A2 (pt) 2021-11-09
CN112534404A (zh) 2021-03-19
WO2020190808A1 (en) 2020-09-24
EP3938889A1 (de) 2022-01-19
US20240161227A1 (en) 2024-05-16
AU2020241262A1 (en) 2021-11-04
WO2020190809A1 (en) 2020-09-24
KR20210135998A (ko) 2021-11-16
CN113383310A (zh) 2021-09-10
JP2022523762A (ja) 2022-04-26
EP3938890A1 (de) 2022-01-19
SG11202107290QA (en) 2021-09-29
JP7408671B2 (ja) 2024-01-05
DE112020000846T5 (de) 2021-11-18
US20210035258A1 (en) 2021-02-04
JP2022523760A (ja) 2022-04-26
CN112905241A (zh) 2021-06-04
KR20210135999A (ko) 2021-11-16
CN112905241B (zh) 2024-03-29
EP3938888A1 (de) 2022-01-19
CN112534405A (zh) 2021-03-19
BR112021016138A2 (pt) 2022-01-04
US11842423B2 (en) 2023-12-12
KR20210136994A (ko) 2021-11-17
US11113784B2 (en) 2021-09-07
WO2020190807A1 (en) 2020-09-24
US20210103550A1 (en) 2021-04-08
CN112905240A (zh) 2021-06-04

Similar Documents

Publication Publication Date Title
DE112020001249T5 (de) Dünnbesetzt-Optimierungen für eine Matrixbeschleunigerarchitektur
DE102020130078A1 (de) Systolische arithmetik an spärlichen daten
DE112020001258T5 (de) Grafikprozessoren und Grafikverarbeitungseinheiten mit Skalarproduktakkumulationsanweisungen für ein Hybrid-Gleitkommaformat
DE102018133555A1 (de) Berechnungsoptimierungsmechanismus für tiefe neuronale Netze
DE102020120372A1 (de) Programmierbare wandlungshardware
DE102020129251A1 (de) Adaptives verformbares kernvorhersagenetzwerk zum bildentrauschen
DE102018110380A1 (de) Tool zum Ermöglichen der Effizienz beim Maschinenlernen
DE102020129970A1 (de) Systeme und verfahren zur fehlererkennung und steuerung für eingebettete arbeitsspeicher- und rechenelemente
DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
DE102020130073A1 (de) Verbesserung der datenlokalität für grafikprozessoreinheiten
DE102018110371A1 (de) Intelligente speicherhandhabung und datenmanagement für maschinenlernnetzwerke
DE102020129969A1 (de) Verbesserungen der verarbeitung und des caching von graphikverarbeitungseinheiten
DE112020000464T5 (de) Mehrfachkachel-grafikprozessor-rendering
DE102020131896A1 (de) Deep learning-basierte auswahl von abtastwerten für adaptives supersampling
DE112020000854T5 (de) Thread-gruppen-planung für die grafikverarbeitung
DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
DE102019101118A1 (de) Anweisung und Logik für systolisches Skalarprodukt mit Akkumulation
DE102020132272A1 (de) Verfahren und vorrichtung zum codieren basierend auf schattierungsraten
DE102020108476A1 (de) Mechanismus zum Ausführen nichtlinearer Funktionen in einem Beschleuniger des maschinellen Lernens
DE102020130184A1 (de) Optimierungsmechanismus mit spärlich besetzten matrizen
DE112020000848T5 (de) Skalarkernintegration
DE102020130865A1 (de) Anweisungen und logik für vektor-multiplikation-addition mit zero-skipping
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
DE102020130995A1 (de) Verfahren und vorrichtung zur codierung basierend auf wichtigkeitswerten

Legal Events

Date Code Title Description
R083 Amendment of/additions to inventor(s)
R082 Change of representative

Representative=s name: SAMSON & PARTNER PATENTANWAELTE MBB, DE

R130 Divisional application to

Ref document number: 112020003517

Country of ref document: DE