DE102022125600A1 - Eingabefilterung und abtaster-beschleunigung für supersampling - Google Patents

Eingabefilterung und abtaster-beschleunigung für supersampling Download PDF

Info

Publication number
DE102022125600A1
DE102022125600A1 DE102022125600.6A DE102022125600A DE102022125600A1 DE 102022125600 A1 DE102022125600 A1 DE 102022125600A1 DE 102022125600 A DE102022125600 A DE 102022125600A DE 102022125600 A1 DE102022125600 A1 DE 102022125600A1
Authority
DE
Germany
Prior art keywords
graphics
data
processing
memory
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102022125600.6A
Other languages
English (en)
Inventor
Gabor Liktor
Karthik Vaidyanathan
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE102022125600A1 publication Critical patent/DE102022125600A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformations in the plane of the image
    • G06T3/40Scaling of whole images or parts thereof, e.g. expanding or contracting
    • G06T3/4053Scaling of whole images or parts thereof, e.g. expanding or contracting based on super-resolution, i.e. the output image resolution being higher than the sensor resolution
    • 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/088Non-supervised learning, e.g. competitive learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformations in the plane of the image
    • G06T3/40Scaling of whole images or parts thereof, e.g. expanding or contracting
    • G06T3/4046Scaling of whole images or parts thereof, e.g. expanding or contracting using neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/20Image enhancement or restoration using local operators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20016Hierarchical, coarse-to-fine, multiscale or multiresolution image processing; Pyramid transform
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20024Filtering details

Landscapes

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

Abstract

Es wird eine Eingabefilterung und Abtaster-Beschleunigung für Supersampling beschrieben. Ein Beispiel für einen Grafikprozessor umfasst einen Satz von Verarbeitungsressourcen, der ausgelegt ist, eine Supersampling-Operation über ein faltendes neuronales Netz durchzuführen, wobei der Satz von Verarbeitungsressourcen eine Schaltungsanordnung beinhaltet, die ausgelegt ist, Eingabedaten für eine Supersampling-Verarbeitung zu empfangen, wobei die Eingabedaten Daten beinhalten, die gemäß einem Jitter-Muster abgetastet werden, das Positionen für Datenabtastwerte variiertem Bildfilter auf die empfangenen Eingangsdaten anzuwenden, wobei das Bildfilter Gewichten für Pixel beinhaltet, die zumindest teilweise auf dem Jitter-Muster basieren; die Eingabedaten zu verarbeiten, um hochgetastete Daten zu generieren; und Supersampling-Verarbeitung auf die hochgetastete Daten anzuwenden.

Description

  • VERWANDTE ANMELDUNGEN
  • Diese Anmeldung bezieht sich auf und beansprucht die Priorität der vorläufigen US-Patentanmeldung 63/276,291 mit dem Titel „INPUT FILTERING AND SAMPLER ACCELERATOR FOR SUPERSAMPLING“, eingereicht am 5. November 2021.
  • GEBIET
  • Diese Offenbarung bezieht sich allgemein auf Eingabefilterung und Abtaster-Beschleunigung für Supersampling.
  • HINTERGRUND DER OFFENBARUNG
  • Temporale Kantenglättung (TAA) ist eine Kantenglättungstechnik, bei der der Renderer die Kamera bei jedem Frame zittern lässt, um unterschiedliche Koordinaten im Bildschirmraum abzutasten. Die TAA-Stufe akkumuliert diese Abtastungen zeitlich, um ein überabgetastetes Bild zu erzeugen. Der zuvor akkumulierte Frame wird unter Verwendung von vom Renderer erzeugten Geschwindigkeits-Bewegungsvektoren verformt, um ihn vor der Akkumulation mit dem aktuellen Frame auszurichten. Obwohl TAA eine weit verbreitete Technik zum Generieren eines zeitlich stabilen kantengeglätteten Bildes ist, kann der verformte Abtastverlauf aufgrund von Sichtbarkeits- oder Schattierungs-Änderungen von Frame zu Frame oder Fehlern in den Bewegungsvektoren an das aktuelle Pixel fehlangepasst sein. Dies führt typischerweise zu Geisterbild-Artefakten um Grenzen von sich bewegenden Objekten herum.
  • Bei Supersampling-Abtastoperationen kann die Verarbeitung zu durch Aliasing erzeugten zackigen, gerasterten Bildern führen, die als Ergebnis der begrenzten Abtastung von Pixeln in einer Netzwerkeingabe bereitgestellt werden. Das Aliasing muss im Laufe der Zeit durch Supersampling entfernt werden, das durch das Jittering der Kamera in einer Supersampling-Implementierung bereitgestellt wird.
  • Figurenliste
  • Die vorliegende Erfindung wird in den Figuren der beiliegenden Zeichnungen beispielhaft, jedoch nicht einschränkend illustriert, in denen gleiche Referenzen ähnliche Elemente anzeigen und in denen gilt:
    • 1 ist ein Blockdiagramm, das ein Computersystem veranschaulicht, das zum Implementieren eines oder mehrerer Aspekte der hierin beschriebenen Ausführungsformen ausgelegt ist;
    • 2A-2D veranschaulichen parallele Prozessorkomponenten;
    • 3A-3C sind Blockdiagramme von Grafikmultiprozessoren und Multiprozessorbasierten GPUs;
    • 4A-4F veranschaulichen eine beispielhafte Architektur, in der mehrere GPUs kommunikativ mit einer Vielzahl von Mehrkernprozessoren gekoppelt sind;
    • 5 veranschaulicht eine Grafikverarbeitungs-Pipeline;
    • 6 veranschaulicht einen Software-Stack für maschinelles Lernen;
    • 7 veranschaulicht eine Universal-Grafikverarbeitungseinheit;
    • 8 veranschaulicht ein Multi-GPU-Rechensystem;
    • 9A-9B veranschaulichen Schichten beispielhafter tiefer neuronaler Netze;
    • 10 veranschaulicht ein beispielhaftes rekurrentes neuronales Netz;
    • 11 veranschaulicht Training und Einsatz eines tiefen neuronalen Netzes;
    • 12A ist ein Blockdiagramm, das verteiltes Lernen veranschaulicht;
    • 12B ist ein Blockdiagramm, das eine programmierbare Netzwerkschnittstelle und eine Datenverarbeitungseinheit veranschaulicht;
    • 13 veranschaulicht ein beispielhaftes inferenzierendes Ein-Chip-System (SOC), das zum Durchführen von Inferenzieren unter Verwendung eines trainierten Modells geeignet ist;
    • 14 ist ein Blockdiagramm eines Verarbeitungssystems;
    • 15A-15C veranschaulichen Datenverarbeitungssysteme und Grafikprozessoren;
    • 16A-16C veranschaulichen Blockdiagramme von zusätzlichen Grafikprozessor- und Rechenbeschleunigerarchitekturen;
    • 17 ist ein Blockdiagramm einer Grafikverarbeitungsengine eines Grafikprozessors;
    • 18A-18B veranschaulichen eine Threadausführungslogik, die ein Array von Verarbeitungselementen enthält, das in einem Grafikprozessorkern eingesetzt wird;
    • 19 veranschaulicht eine zusätzliche Ausführungseinheit;
    • 20 ist ein Blockdiagramm, das Grafikprozessor-Anweisungsformate veranschaulicht;
    • 21 ist ein Blockdiagramm einer weiteren Grafikprozessorarchitektur;
    • 22A-22B veranschaulichen ein Grafikprozessor-Befehlsformat und eine Grafikprozessor-Befehlssequenz;
    • 23 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem;
    • 24A ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem veranschaulicht;
    • 24B veranschaulicht eine seitliche Querschnittsansicht einer integrierten Schalkreisgehäuseanordnung;
    • 24C veranschaulicht eine Gehäuseanordnung, die mehrere Einheiten von Hardwarelogik-Einzelchips enthält, die mit einem Substrat (z. B. einem Basischip) verbunden sind;
    • 24D veranschaulicht eine Gehäuseanordnung, die austauschbare Einzelchips enthält;
    • 25 ist ein Blockdiagramm, das eine beispielhafte integrierte Ein-Chip-System-Schaltung veranschaulicht;
    • 26A-26B sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung innerhalb eines SoC veranschaulichen;
    • 27 ist ein Blockdiagramm eines Datenverarbeitungssystems nach einer Ausführungsform;
    • 28A-28B veranschaulichen eine Matrixoperation, die von einer Anweisungspipeline ausgeführt wird, gemäß einer Ausführungsform;
    • 29 veranschaulicht ein systolisches Array einschließlich Multiplikator- und Addiererschaltungen, die pipelineartig organisiert sind;
    • 30A-30B veranschaulichen die Verwendung eines systolischen Arrays, das dazu ausgelegt sein kann, Operationen mit einer beliebigen systolischen Tiefe auszuführen;
    • 31 veranschaulicht einen Zweipfad-Matrixmultiplikationsbeschleuniger, bei dem jeder Pfad eine Tiefe von vier Stufen aufweist;
    • 32 veranschaulicht einen Vierpfad-Matrixmultiplikationsbeschleuniger, bei dem jeder Pfad eine Tiefe von zwei Stufen aufweist;
    • 33 veranschaulicht einen skalierbaren Beschleuniger für die Multiplikation von dünn besetzten Matrizen unter Verwendung von systolischen Arrays mit Feedbackeingängen;
    • 34 zeigt einen skalierbaren Beschleuniger für die Multiplikation von dünn besetzten Matrizen unter Verwendung von systolischen Arrays mit Feedbackeingängen und -ausgängen in jeder Stufe;
    • 35 veranschaulicht ein paralleles systolisches Doppelpipeline-Array für einen Matrixbeschleuniger gemäß einer Ausführungsform;
    • 36 veranschaulicht ein Stufenpaar für einen Kanal eines systolischen Arrays;
    • 37 veranschaulicht ein systolisches Array, das ein Teilsummen-Loopback und eine Schaltungsanordnung zum Beschleunigen der Multiplikation von dünn besetzten Matrizen enthält;
    • 38A-38B veranschaulichen eine Matrixbeschleunigungsschaltungsanordnung einschließlich Codecs zum Ermöglichen des Lesens von dünn besetzten Daten in einem komprimierten Format;
    • 39 veranschaulicht einen herkömmlichen Renderer mit temporaler Kantenglättung (TAA);
    • 40 veranschaulicht einen Renderer, der die TAA-Stufe durch eine zeitlich amortisierte Supersampling-Stufe ersetzt;
    • 41 veranschaulicht Komponenten des neuronalen Netzmodells gemäß einer Ausführungsform;
    • 42 veranschaulicht den Eingabeblock des neuronalen Netzmodells gemäß einer Ausführungsform;
    • 43A-43B veranschaulichen Ausgabeblockvarianten für das neuronale Netzmodell gemäß Ausführungsformen;
    • 44 veranschaulicht ein Verfahren zum Durchführen von zeitlich amortisiertem Supersampling;
    • 45 veranschaulicht beispielhafte Rendering-Leistungsvergleiche für mehrere hierin beschriebene Rendering-Techniken; und
    • 46 ist ein Blockdiagramm einer Rechenvorrichtung, die einen Grafikprozessor enthält, nach einer Ausführungsform.
    • 47 ist eine Veranschaulichung einer Eingabefilterung und Abtaster-Beschleunigung für zeitlich amortisiertes Supersampling gemäß einigen Ausführungsformen;
    • 48A-48C sind Diagramme zum Veranschaulichen des Abtastens von Pixeln einschließlich Jittering gemäß einer Ausführungsform;
    • 49 ist eine Veranschaulichung eines Prozesses für Supersampling unter Verwendung eines Bildfilters, das zumindest teilweise basierend auf Jittering und Abtasten eines Bildes erzeugt wird, gemäß manchen Ausführungsformen; und
    • 50 ist eine Veranschaulichung eines Prozesses zum Erzeugen eines Bildfilters zumindest teilweise basierend auf Jittering und Abtasten eines Bildes gemäß manchen Ausführungsformen.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Eine Grafikverarbeitungseinheit (GPU) ist kommunikativ mit Host-/Prozessorkernen gekoppelt, um beispielsweise Grafikoperationen, Maschinenlernoperationen, Musteranalyseoperationen und/oder verschiedene Universal-GPU(GPGPU)-Funktionen zu beschleunigen. Die GPU kann über einen Bus oder eine andere Zwischenverbindung (z. B. eine Hochgeschwindigkeits-Zwischenverbindung wie etwa PCIe oder NVLink) kommunikativ an den Hostprozessor/die Kerne gekoppelt sein. Alternativ kann die GPU auf demselben Gehäuse oder Chip wie die Kerne integriert sein und über eine(n) interne(n) Prozessorbus/Zwischenverbindung (d. h. innerhalb des Gehäuses oder Chips) kommunikativ mit den Kernen gekoppelt sein. Unabhängig von der Art und Weise, in der die GPU verbunden ist, können die Prozessorkerne der GPU Arbeit in Form von in einem Arbeitsdeskriptor enthaltenen Sequenzen von Befehlen/Anweisungen zuweisen. Die GPU verwendet dann eine dedizierte Schaltungsanordnung/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
  • Die aktuelle parallele Grafikdatenverarbeitung beinhaltet Systeme und Verfahren, die entwickelt wurden, um spezifische Operationen an Grafikdaten auszuführen, wie beispielsweise lineare Interpolation, Tessellation, Rasterisierung, Texturabbildung, Tiefentest usw. Herkömmlicherweise verwenden Grafikprozessoren Festfunktions-Recheneinheiten, um Grafikdaten zu verarbeiten. In jüngster Zeit wurden Teile von Grafikprozessoren jedoch programmierbar gemacht, wodurch ermöglicht wurde, dass solche Prozessoren eine größere Vielfalt an Operationen zur Verarbeitung von Vertex- und Fragmentdaten unterstützen.
  • Zur weiteren Erhöhung der Leistungsfähigkeit implementieren Grafikprozessoren typischerweise Verarbeitungstechniken wie etwa Pipelineverarbeitung, die versuchen, so viele Grafikdaten wie möglich, parallel, über die unterschiedlichen Teile der Grafikpipeline hinweg zu verarbeiten. Parallele Grafikprozessoren mit Einzelanweisungs-Multithread-Architektur (SIMT) sind konzipiert, um die Menge von Parallelverarbeitung in der Grafikpipeline zu maximieren. In einer SIMT-Architektur versuchen Gruppen paralleler Threads, Programmanweisungen so oft wie möglich synchron zusammen auszuführen, um eine Verarbeitungseffizienz zu erhöhen. Eine allgemeine Übersicht über Software und Hardware für SIMT-Architekturen findet sich in Shane Cook, CUDA Programming Kapitel 3, Seiten 37-51 (2013).
  • Zeitliche Abtastratenerhöhung kann mit TAA kombiniert werden, um die räumliche Auflösung gleichzeitig aufwärtszuskalieren, sodass Frames mit niedrigerer räumlicher Auflösung gerendert werden, um Renderzeit zu sparen. Nachverarbeitungsstufen nach der zeitlichen Kantenglättungs-Abtastratenerhöhung können dann mit einer Zielanzeigeauflösung laufen. Dies ermöglicht die Erzeugung schärferer Bilder, als unter Verwendung von rein räumlichen Aufwärtsskalierungstechniken erzeugt werden können, und reduziert effektiv die Renderzeit im Vergleich zum Rendern von Frames mit nativer Anzeigeauflösung.
  • Beim Supersampling werden zackige, gerasterte Bilder in einer Netzwerkeingabe als Ergebnis davon bereitgestellt, dass eine einzige Abtastung pro Pixel während der Rasterisierung erfolgt. Das Aliasing muss im Laufe der Zeit durch Supersampling entfernt werden, das durch das Jittering der Kamera in einer Supersampling-Implementierung bereitgestellt wird.
  • Vorherige Lösungen können auf die Erzeugung mehrerer gerenderter Bilder angewiesen sein, wobei jedes Bild mehr Daten bereitstellt, um die Eingabedaten zu verbessern. Das Rendern vieler Bilder ist jedoch teuer und kann beim Bildrendern unpraktisch zu implementieren sein.
  • In einigen Ausführungsformen wird eine Bildfilterung bereitgestellt, um Informationen bezüglich des Orts von Abtastungen, die aus dem Kamera-Jitter resultieren, in die Eingabedaten einzubauen. In einigen Ausführungsformen wird die Abtaster-Beschleunigung weiter unter Verwendung vorhandener Texturbeschleunigungshardware angewendet, um die Eingabefilterung bereitzustellen.
  • In der folgenden detaillierten Beschreibung werden zahlreiche spezifische Details dargelegt, um ein gründlicheres Verständnis zu vermitteln. Es wird jedoch Fachleuten klar sein, dass die hierin beschriebenen Ausführungsformen ohne eines oder mehrere dieser spezifischen Details ausgebildet werden können. In anderen Fällen wurden wohlbekannte Merkmale nicht beschrieben, um die Einzelheiten der vorliegenden Ausführungsformen nicht zu verschleiern.
  • Systemüberblick
  • 1 ist ein Blockdiagramm, das ein Rechensystem 100 veranschaulicht, das zum Implementieren eines oder mehrerer Aspekte der hierin beschriebenen Ausführungsformen ausgelegt ist. Das Rechensystem 100 beinhaltet ein Verarbeitungssubsystem 101 mit einem oder mehreren Prozessoren 102 und einem Systemspeicher 104, der über einen Zwischenverbindungspfad kommuniziert, der einen Speicherhub 105 beinhalten kann. Der Speicherhub 105 kann eine separate Komponente innerhalb einer Chipsatzkomponente sein oder kann in dem einen oder den mehreren Prozessoren 102 integriert sein. Der Speicherhub 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 ermöglichen kann, dass das Rechensystem 100 eine Eingabe von einer oder mehreren Eingabevorrichtungen 108 empfängt. Der E/A-Hub 107 kann zusätzlich einer Anzeigesteuerung, die in dem einem oder den mehreren Prozessoren 102 beinhaltet sein kann, ermöglichen, einer oder mehreren Anzeigevorrichtungen 110A Ausgaben bereitzustellen. In 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 beispielsweise einen oder mehrere Parallelprozessoren 112, die über einen Bus oder eine andere Kommunikationsverbindung 113 mit dem Speicherhub 105 gekoppelt sind. Die Kommunikationsverbindung 113 kann eine von einer beliebigen Anzahl von auf Standards basierenden Kommunikationsverbindungstechnologien oder - protokollen sein, wie etwa, aber nicht beschränkt auf PCI Express, oder kann eine herstellerspezifische Kommunikationsschnittstelle oder Kommunikationsfabric sein. Der eine oder die mehreren Parallelprozessoren 112 können ein rechenfokussiertes Parallel- oder Vektorverarbeitungssystem bilden, das eine große Anzahl von Verarbeitungskernen und/oder Verarbeitungsclustern beinhalten kann, wie etwa einen Prozessor mit vielen integrierten Kernen (MIC-Prozessor). Der eine oder die mehreren Parallelprozessoren 112 bilden beispielsweise ein Grafikverarbeitungssubsystem, das Pixel an eine oder mehrere Anzeigevorrichtungen 110A ausgeben kann, die über den E/A-Hub 107 gekoppelt sind. Der eine oder die mehreren Parallelprozessoren 112 können auch eine Anzeigesteuerung und eine Anzeigeschnittstelle (nicht dargestellt) 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 Speicherungsmechanismus 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 Komponenten zu ermöglichen, wie etwa einem Netzwerkadapter 118 und/oder einem drahtlosen Netzwerkadapter 119, die in die Plattform integriert sein können, und verschiedenen anderen Vorrichtungen, die über eine oder mehrere Erweiterungsvorrichtungen 120 hinzugefügt werden können. Die eine oder die mehreren Erweiterungsvorrichtungen 120 können beispielsweise auch eine oder mehrere externe Grafikprozessorvorrichtungen, Grafikkarten und/oder Rechenbeschleuniger beinhalten. Der Netzwerkadapter 118 kann ein Ethernet-Adapter oder ein anderer drahtgebundener Netzwerkadapter sein. Der drahtlose Netzwerkadapter 119 kann eine oder mehrere von einer Wi-Fi-, Bluetooth-, Nahfeldkommunikations(NFC-) oder anderen Netzwerkvorrichtung beinhalten, die ein oder mehrere drahtlose Funkvorrichtungen beinhaltet.
  • Das Rechensystem 100 kann andere Komponenten beinhalten, die nicht ausdrücklich dargestellt sind, die USB- oder andere Port-Verbindungen, optische Speicherlaufwerke, Videoaufnahmevorrichtungen und dergleichen beinhalten, die auch mit dem E/A-Hub 107 verbunden sein können. Kommunikationspfade, die die verschiedenen Komponenten in 1 miteinander verbinden, können unter Verwendung beliebiger geeigneter Protokolle implementiert werden, wie etwa PCI (Peripheral Component Interconnect)-basierter Protokolle (z. B. PCI-Express) oder beliebiger anderer Bus- oder Punkt-zu-Punkt-Kommunikationsschnittstellen und/oder -Protokoll(e), wie etwa das NVLink-Hochgeschwindigkeits-Interconnect, Compute Express Link™ (CXL™) (z. B. CXL.mem), Infinity Fabric (IF), Ethernet (IEEE 802.3), Remote Direct Memory Access (RDMA), InfiniBand, Internet Wide Area RDMA Protocol (iWARP), Transmission Control Protocol (TCP), User Datagram Protocol (UDP), Quick UDP Internet Connections (QUIC), RDMA over Converged Ethernet (RoCE), Intel QuickPath Interconnect (QPI), Intel Ultra Path Interconnect (UPI), Intel On-Chip System Fabric (IOSF), Omnipath, HyperTransport, Advanced-Microcontroller-Bus-Architecture(AMBA)-Interconnect, OpenCAPI, Gen-Z, Cache Coherent Interconnect for Accelerators (CCIX), 3GPP Long Term Evolution (LTE) (4G), 3GPP 5G und Variationen davon oder drahtgebundene oder drahtlose Zwischenverbindungsprotokolle, die in der Technik bekannt sind. In manchen Beispielen können Daten unter Verwendung eines Protokolls, wie etwa Non-Volatile-Memory-Express(NVMe)-over-Fabrics (NVMe-oF) oder NVMe, in virtualisierte Speicherungsknoten kopiert oder gespeichert werden.
  • Der eine oder die mehreren Parallelprozessoren 112 können eine Schaltungsanordnung einbinden, die für Grafik- und Videoverarbeitung optimiert ist, darunter beispielsweise eine Videoausgabeschaltungsanordnung, und eine Grafikverarbeitungseinheit (GPU) bildet. Alternativ oder zusätzlich können der eine oder die mehreren Parallelprozessoren 112 eine Schaltungsanordnung einbinden, die zur Allzweckverarbeitung optimiert ist, während die zugrundeliegende Rechenarchitektur erhalten bleibt, die hierin ausführlicher beschrieben wird. Komponenten des Rechensystems 100 können mit einem oder mehreren anderen Systemelementen auf einer einzelnen integrierten Schaltung integriert sein. Zum Beispiel können der eine oder die mehreren Parallelprozessoren 112, der Speicherhub 105, der eine oder die mehreren Prozessoren 102 und der E/A-Hub 107 in einer integrierten Ein-Chip-System(SoC)-Schaltung integriert sein. Alternativ dazu können die Komponenten des Rechensystems 100 in ein einziges Gehäuse integriert sein, um eine System-in-Package(SIP)-Konfiguration zu bilden. In einer Ausführungsform kann mindestens ein Teil der Komponenten des Rechensystems 100 in ein Mehrchipmodul („MCM“) integriert sein, das mit anderen Mehrchipmodulen zu einem modularen Rechensystem verbunden werden kann.
  • Es versteht sich, dass das hier 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 an einem oder mehreren Prozessoren 102 und der Anzahl an einem oder mehreren Parallelprozessoren 112, kann nach Wunsch modifiziert werden. Zum Beispiel kann der Systemspeicher 104 direkt mit dem einen oder den mehreren Prozessoren 102 statt über eine Brücke verbunden sein, während andere Vorrichtungen über den Speicherhub 105 und den einen bzw. die mehreren Prozessoren 102 mit dem Systemspeicher 104 kommunizieren. Bei anderen alternativen Topologien sind der eine oder die mehreren Parallelprozessoren 112 mit dem E/A-Hub 107 oder direkt mit einem des einen oder der mehreren Prozessoren 102 anstatt mit dem Speicherhub 105 verbunden. Bei anderen Ausführungsformen können der E/A-Hub 107 und der Speicherhub 105 in einen einzigen Chip integriert sein. Es ist auch möglich, dass zwei oder mehr Sätze von Prozessor(en) 102 über mehrere Sockets angeschlossen sind, die mit zwei oder mehr Instanzen des einen oder der mehreren Parallelprozessoren 112 koppeln können.
  • Manche der hier gezeigten speziellen Komponenten sind optional und müssen nicht in allen Implementierungen des Rechensystems 100 enthalten sein. Zum Beispiel kann eine beliebige Anzahl von Erweiterungskarten oder Peripheriegeräten unterstützt werden, oder einige Komponenten können entfernt sein. Darüber hinaus können einige Architekturen eine andere Terminologie für Komponenten verwenden, die denen ähnlich sind, die in 1 veranschaulicht sind. Zum Beispiel kann der Speicherhub 105 in einigen Architekturen als eine Northbridge bezeichnet werden, während der E/A-Hub 107 als eine Southbridge bezeichnet werden kann.
  • 2A veranschaulicht einen Parallelprozessor 200. Der Parallelprozessor 200 kann eine GPU, GPGPU oder dergleichen sein, wie hierin beschrieben. Die verschiedenen Komponenten des Parallelprozessors 200 können unter Verwendung einer oder mehrerer integrierter Schaltungsvorrichtungen implementiert sein, wie etwa programmierbarer Prozessoren, anwendungsspezifischer integrierter Schaltungen (ASICs) oder feldprogrammierbarer Gatearrays (FPGA). Der veranschaulichte Parallelprozessor 200 kann einer oder mehrere des einen oder der mehreren in 1 gezeigten Parallelprozessoren 112 sein.
  • Der Parallelprozessor 200 beinhaltet eine Parallelverarbeitungseinheit 202. Die Parallelverarbeitungseinheit beinhaltet eine E/A-Einheit 204, die die Kommunikation mit anderen Vorrichtungen ermöglicht, was andere Instanzen der Parallelverarbeitungseinheit 202 beinhaltet. Die E/A-Einheit 204 kann direkt mit anderen Vorrichtungen verbunden sein. Die E/A-Einheit 204 ist beispielsweise mit anderen Vorrichtungen über die Verwendung einer Hub- oder Switch-Schnittstelle verbunden, wie etwa dem Speicherhub 105. Die Verbindungen zwischen dem Speicherhub 105 und der E/A-Einheit 204 bilden eine Kommunikationsverbindung 113. Innerhalb der Parallelverarbeitungseinheit 202 ist die E/A-Einheit 204 mit einer Hostschnittstelle 206 und einer Speicher-Crossbar 216 verbunden, wobei die Hostschnittstelle 206 Befehle empfängt, die auf das Durchführen von Verarbeitungsoperationen gerichtet sind, und die Speicher-Crossbar 216 Befehle empfängt, die auf das Durchführen von Speicheroperationen gerichtet sind.
  • Wenn die Hostschnittstelle 206 einen Befehlspuffer über die E/A-Einheit 204 empfängt, kann die Hostschnittstelle 206 Arbeitsoperationen anweisen, um diese Befehle an einem Frontend 208 auszuführen. In einer Ausführungsform ist das Frontend 208 mit einem Planer 210 gekoppelt, der dazu ausgelegt ist, Befehle oder andere Arbeitselemente an ein Verarbeitungsclusterarray 212 zu verteilen. Der Planer 210 stellt sicher, dass das Verarbeitungsclusterarray 212 richtig konfiguriert ist und sich in einem gültigen Zustand befindet, bevor Aufgaben an die Verarbeitungscluster des Verarbeitungsclusterarrays 212 verteilt werden. Der Planer 210 kann über Firmware-Logik implementiert werden, die auf einem Mikrocontroller ausgeführt wird. Der durch eine Mikrosteuerung implementierte Planer 210 konfigurierbar, um komplexe Planungs- und Arbeitsverteilungsoperationen mit grober und feiner Granularität durchzuführen, was eine schnelle Vorbelegung und Kontextumschaltung von Threads ermöglicht, die auf dem Verarbeitungsclusterarray 212 ausgeführt werden. Vorzugsweise kann die Hostsoftware Arbeitslasten zum Planen auf dem Verarbeitungsclusterarray 212 über eine von mehreren Grafikverarbeitungs-Doorbells nachweisen. In anderen Beispielen kann das Abfragen nach neuen Arbeitslasten oder Interrupts verwendet werden, um die Verfügbarkeit von durchzuführender Arbeit zu identifizieren oder anzugeben. Die Arbeitslasten können dann automatisch durch die Logik des Planers 210 innerhalb des Planer-Mikrocontrollers über das Verarbeitungsclusterarray 212 hinweg verteilt werden.
  • Das Verarbeitungsclusterarray 212 kann bis zu „N“ Verarbeitungscluster (z. B. Cluster 214A, Cluster 214B bis Cluster 214N) beinhalten. Jeder Cluster 214A-214N des Verarbeitungsclusterarrays 212 kann eine große Anzahl gleichzeitiger Threads ausführen. Der Planer 210 kann den Clustern 214A-214N des Verarbeitungsclusterarrays 212 unter Verwendung verschiedener Planungs- und/oder Arbeitsverteilungsalgorithmen Arbeit zuweisen, die abhängig von den für jede Art von Programm oder Berechnung entstehenden Arbeitslasten variieren können. Die Planung kann dynamisch durch den Planer 210 gehandhabt werden oder kann teilweise durch die Compilerlogik während der Kompilierung der Programmlogik unterstützt werden, die für die Ausführung durch das Verarbeitungsclusterarray 212 konfiguriert ist. Optional können unterschiedliche Cluster 214A-214N des Verarbeitungsclusterarrays 212 zum Verarbeiten unterschiedlicher Arten von Programmen oder zum Durchführen unterschiedlicher Arten von Berechnungen zugewiesen werden.
  • Das Verarbeitungsclusterarray 212 kann ausgelegt sein, verschiedene Arten von parallelen Verarbeitungsoperationen durchzuführen. Zum Beispiel ist das Verarbeitungsclusterarray 212 dazu ausgelegt, parallele Universal-Rechenoperationen durchzuführen. Beispielsweise kann das Verarbeitungsclusterarray 212 Logik zum Ausführen von Verarbeitungstasks beinhalten, was das Filtern von Video- und/oder Audiodaten, das Durchführen von Modellierungsoperationen, einschließlich Physikoperationen, und das Durchführen von Datentransformationen beinhaltet.
  • Das Verarbeitungsclusterarray 212 ist dazu ausgelegt, parallele Grafikverarbeitungsoperationen durchzuführen. In solchen Ausführungsformen, in denen der Parallelprozessor 200 zum Ausführen von Grafikverarbeitungsoperationen ausgelegt ist, kann das Verarbeitungsclusterarray 212 zusätzliche Logik beinhalten, um die Ausführung derartiger Grafikverarbeitungsoperationen zu unterstützen, was Texturabtastlogik, um Texturoperationen durchzuführen, sowie Tessellationslogik und andere Vertexverarbeitungslogik beinhaltet, ohne darauf beschränkt zu sein. Zusätzlich kann das Verarbeitungsclusterarray 212 konfiguriert sein, um grafikverarbeitungsbezogene Shaderprogramme auszuführen, wie etwa Vertexshader, Tessellationsshader, Geometrieshader und Pixelshader, ohne darauf beschränkt zu sein. Die Parallelverarbeitungseinheit 202 kann Daten vom Systemspeicher zur Verarbeitung über die E/A-Einheit 204 übertragen. Während der Verarbeitung können übertragene Daten während der Verarbeitung im On-Chip-Speicher (z. B. Parallelprozessorspeicher 222) gespeichert und dann in den Systemspeicher zurückgeschrieben werden.
  • In Ausführungsformen, in denen die Parallelverarbeitungseinheit 202 verwendet wird, um eine Grafikverarbeitung durchzuführen, kann der Planer 210 ausgelegt sein, die Verarbeitungsarbeitslast in ungefähr gleich große Aufgaben aufzuteilen, um eine bessere Verteilung der Grafikverarbeitungsoperationen auf mehrere Cluster 214A-214N des Verarbeitungsclusterarrays 212 zu ermöglichen. Bei manchen dieser Ausführungsformen können Teile des Verarbeitungsclusterarrays 212 dazu ausgelegt sein, unterschiedliche Verarbeitungsarten durchzuführen. Beispielsweise kann ein erster Teil konfiguriert sein, um Vertex-Shading und Topologieerzeugung durchzuführen, kann ein zweiter Teil konfiguriert sein, um Tessellation und Geometrie-Shading durchzuführen, und kann ein dritter Teil konfiguriert sein, um Pixel-Shading oder andere Bildschirmraumoperationen durchzuführen, um ein gerendertes Bild zur Anzeige zu erzeugen. Zwischendaten, die durch einen oder mehrere der Cluster 214A-214N erzeugt werden, können in Puffern gespeichert werden, um zu ermöglichen, dass die Zwischendaten zwischen den Clustern 214A-214N zur weiteren Verarbeitung übertragen werden.
  • Während des Betriebs kann das Verarbeitungsclusterarray 212 auszuführende Verarbeitungsaufgaben über den Planer 210 empfangen, der Befehle, die Verarbeitungsaufgaben definieren, vom Frontend 208 empfängt. Für Grafikverarbeitungsoperationen können Verarbeitungsaufgaben Indizes von zu verarbeitenden Daten beinhalten, z. B. Oberflächen-(Patch-)Daten, Primitivdaten, Vertex-Daten und/oder Pixeldaten sowie Zustandsparameter und Befehle, die definieren, wie die Daten verarbeitet werden sollen (z. B. welches Programm ausgeführt werden soll). Der Planer 210 kann dazu ausgelegt sein, die den Aufgaben entsprechenden Indizes abzurufen, oder kann die Indizes von dem Frontend 208 empfangen. Das Frontend 208 kann ausgelegt sein, sicherzustellen, dass das Verarbeitungsclusterarray 212 in einen gültigen Zustand konfiguriert ist, bevor die durch eingehende Befehlspuffer (z. B. Stapelpuffer, Push-Puffer usw.) spezifizierte Arbeitslast initiiert wird.
  • Jede der einen oder mehreren Instanzen der Parallelverarbeitungseinheit 202 kann mit dem Parallelprozessorspeicher 222 gekoppelt sein. Auf den Parallelprozessorspeicher 222 kann über die Speicher-Crossbar 216 zugegriffen werden, die Speicheranfragen von dem Verarbeitungsclusterarray 212 sowie der E/A-Einheit 204 empfangen kann. Die Speicher-Crossbar 216 kann über eine Speicherschnittstelle 218 auf den Parallelprozessorspeicher 222 zugreifen. Die Speicherschnittstelle 218 kann mehrere Partitionseinheiten (z. B. Partitionseinheit 220A, Partitionseinheit 220B bis Partitionseinheit 220N) beinhalten, die jeweils an einen Teil (z. B. Speichereinheit) des Parallelprozessorspeichers 222 koppeln können. Die Anzahl an Partitionseinheiten 220A-220N kann ausgelegt sein, gleich der Anzahl an Speichereinheiten zu sein, sodass eine erste Partitionseinheit 220A eine entsprechende erste Speichereinheit 224A aufweist, eine zweite Partitionseinheit 220B eine entsprechende zweite Speichereinheit 224B aufweist und eine N-te Partitionseinheit 220N eine entsprechende N-te Speichereinheit 224N aufweist. In anderen Ausführungsformen ist die Anzahl an Partitionseinheiten 220A-220N möglicherweise nicht gleich der Anzahl an Speichervorrichtungen.
  • Die Speichereinheiten 224A-224N können verschiedene Arten von Speichervorrichtungen enthalten, einschließlich dynamischem Speicher mit wahlfreiem Zugriff (DRAM) oder Grafikspeicher mit wahlfreiem Zugriff, wie synchronen Grafikspeicher mit wahlfreiem Zugriff (SGRAM), einschließlich Grafikspeicher mit doppelter Datenrate (GDDR). Optional können die Speichereinheiten 224A-224N auch 3D-Stapelspeicher beinhalten, einschließlich unter anderem Speicher mit hoher Bandbreite (HBM). Fachleuten ist klar, dass die spezifische Implementierung der Speichereinheiten 224A-224N variieren kann und aus einem von verschiedenen herkömmlichen Designs ausgewählt werden kann. Renderziele, wie etwa Bildspeicher oder Texturkarten, können über die Speichereinheiten 224A-224N gespeichert sein, was es den Partitionseinheiten 220A-220N ermöglicht, Teile jedes Renderziels parallel zu schreiben, um die verfügbare Bandbreite des Parallelprozessorspeichers 222 effizient zu nutzen. In einigen Ausführungsformen kann eine lokale Instanz des Parallelprozessorspeichers 222 zugunsten eines einheitlichen Speicherdesigns ausgeschlossen werden, das Systemspeicher in Verbindung mit lokalem Zwischenspeicher nutzt.
  • Optional hat jeder beliebige der Cluster 214A-214N des Verarbeitungsclusterarrays 212 die Fähigkeit, Daten zu verarbeiten, die in eine der Speichereinheiten 224A-224N innerhalb des Parallelprozessorspeichers 222 geschrieben werden. Die Speicher-Crossbar 216 kann dazu ausgelegt sein, die Ausgabe jedes Clusters 214A-214N an eine beliebige Partitionseinheit 220A-220N oder an einen anderen Cluster 214A-214N zu übertragen, die zusätzliche Verarbeitungsoperationen an der Ausgabe ausführen können. Jeder Cluster 214A-214N kann mit der Speicherschnittstelle 218 über die Speicher-Crossbar 216 kommunizieren, um von verschiedenen externen Speichervorrichtungen zu lesen oder in sie zu schreiben. In einer der Ausführungsformen mit der Speicher-Crossbar 216 weist die Speicher-Crossbar 216 eine Verbindung zur Speicherschnittstelle 218, um mit der E/A-Einheit 204 zu kommunizieren, sowie eine Verbindung zu einer lokalen Instanz des Parallelprozessorspeichers 222 auf, wodurch den Verarbeitungseinheiten innerhalb der verschiedenen Verarbeitungscluster 214A-214N ermöglicht wird, mit dem Systemspeicher oder einem anderen Speicher zu kommunizieren, der nicht lokal an der Parallelverarbeitungseinheit 202 ist. Allgemein kann die Speicher-Crossbar 216 beispielsweise dazu in der Lage sein, virtuelle Kanäle zu verwenden, um Verkehrsströme zwischen den Clustern 214A-214N und den Partitionseinheiten 220A-220N zu trennen.
  • Obgleich eine einzige Instanz der Parallelverarbeitungseinheit 202 innerhalb des Parallelprozessors 200 veranschaulicht ist, kann eine beliebige Anzahl an Instanzen der Parallelverarbeitungseinheit 202 enthalten sein. Beispielsweise können mehrere Instanzen der Parallelverarbeitungseinheit 202 auf einer einzelnen Erweiterungskarte bereitgestellt sein oder mehrere Erweiterungskarten zusammengeschaltet sein. Zum Beispiel kann der Parallelprozessor 200 eine Erweiterungsvorrichtung sein, wie etwa die Erweiterungsvorrichtung 120 von 1, die eine Grafikkarte, wie etwa eine diskrete Grafikkarte, sein kann, die eine oder mehrere GPUs, eine oder mehrere Speichervorrichtungen und Vorrichtung-zu-Vorrichtung- oder Netzwerk- oder Fabric-Schnittstellen beinhaltet. Die verschiedenen Instanzen der Parallelverarbeitungseinheit 202 konfiguriert sein, um zusammenzuarbeiten, selbst wenn die verschiedenen 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 im Vergleich zu anderen Instanzen beinhalten. Systeme, die eine oder mehrere Instanzen der Parallelverarbeitungseinheit 202 oder des Parallelprozessors 200 einschließen, können in einer Reihe von Konfigurationen und Formfaktoren implementiert sein, was Desktop-, Laptop- oder Handheld-Personalcomputer, Server, Workstations, Spielekonsolen und/oder eingebettete Systeme beinhaltet, ohne darauf beschränkt zu sein. Ein Orchestrator kann Verbundknoten für Arbeitslastleistungsfähigkeit unter Verwendung eines oder mehrerer von Folgendem bilden: disaggregierter Prozessorressourcen, Zwischenspeicherressourcen, Speicherressourcen, Speicherungsressourcen und Vernetzungsressourcen.
  • 2B ist ein Blockdiagramm einer Partitionseinheit 220. Die Partitionseinheit 220 kann eine Instanz einer der Partitionseinheiten 220A-220N von 2A sein. Wie veranschaulicht, weist die Partitionseinheit 220 einen L2-Zwischenspeicher 221, eine Framepufferschnittstelle 225 und eine ROP 226 (Rasteroperationseinheit) auf. Der L2-Zwischenspeicher 221 ist ein Lese/Schreib-Zwischenspeicher, der zum Durchführen von Lade- und Speicheroperationen ausgelegt ist, die von der Speicher-Crossbar 216 und der ROP 226 empfangen werden. Lesefehler und dringende Rückschreibanforderungen werden durch den L2-Zwischenspeicher 221 an die Framepufferschnittstelle 225 zur Verarbeitung ausgegeben. Aktualisierungen können auch über die Framepufferschnittstelle 225 zur Verarbeitung an den Framepuffer gesendet werden. In einer Ausführungsform ist die Framepufferschnittstelle 225 über eine Schnittstelle mit einer der Speichereinheiten im Parallelprozessorspeicher verbunden, wie etwa den Speichereinheiten 224A-224N aus 2A (z. B. innerhalb des Parallelprozessorspeichers 222). Die Partitionseinheit 220 kann zusätzlich oder alternativ auch über eine Speichersteuerung (nicht gezeigt) mit einer der Speichereinheiten im Parallelprozessorspeicher verbunden sein.
  • In Grafikanwendungen ist die ROP 226 eine Verarbeitungseinheit, die Rasteroperationen wie Schablonen-, z-Test-, Mischoperationen und dergleichen ausführt. Die ROP 226 gibt dann verarbeitete Grafikdaten aus, die im Grafikspeicher gespeichert werden. In manchen Ausführungsformen beinhaltet die ROP 226 einen CODEC 227 oder ist mit diesem gekoppelt, der eine Komprimierungslogik zum Komprimieren von Tiefen- oder Farbdaten, die in den Speicher oder L2-Zwischenspeicher 221 geschrieben werden, und zum Dekomprimieren von Tiefen- oder Farbdaten, die aus dem Speicher oder dem L2-Zwischenspeicher 221 gelesen werden, beinhaltet. Die Komprimierungslogik kann eine verlustfreie Komprimierungslogik sein, die einen oder mehrere Komprimierungsalgorithmen verwendet. Die Art der Komprimierung, die durch den CODEC 227 ausgeführt wird, kann basierend auf den statistischen Eigenschaften der zu komprimierenden Daten variieren. Zum Beispiel wird in einer Ausführungsform eine Delta-Farbkomprimierung an Tiefen- und Farbdaten auf Pro-Kachel-Basis ausgeführt. In einer Ausführungsform beinhaltet der CODEC 227 eine Komprimierungs-und-Dekomprimierungs-Logik, die Rechendaten, die mit Maschinenlernoperationen assoziiert sind, komprimieren und dekomprimieren kann. Der CODEC 227 kann zum Beispiel dünn besetzte Matrixdaten für dünn besetzte Maschinenlernoperationen komprimieren. Der CODEC 227 kann auch dünn besetzte Matrixdaten komprimieren, die in einem Format einer dünn besetzten Matrix codiert sind (z. B. Coordinate List Encoding (COO), Compressed Sparse Row (CSR), Compress Sparse Column (CSC) usw.), um komprimierte und codierte dünn besetzte Matrixdaten zu erzeugen. Die komprimierten und codierten dünn besetzten Matrixdaten können dekomprimiert und/oder decodiert werden, bevor sie durch Verarbeitungselemente verarbeitet werden, oder die Verarbeitungselemente können dazu ausgelegt sein, komprimierte, codierte oder komprimierte und codierte Daten zur Verarbeitung zu konsumieren.
  • Die ROP 226 kann in jedem Verarbeitungscluster enthalten sein (z. B. Cluster 214A-214N von 2A) anstelle innerhalb der Partitionseinheit 220. In einer solchen Ausführungsform werden Lese- und Schreibanfragen nach Pixeldaten über die Speicher-Crossbar 216 anstelle von Pixelfragmentdaten übertragen. Die verarbeiteten Grafikdaten können auf einer Anzeigevorrichtung angezeigt werden, wie beispielsweise einer der einen oder mehreren Anzeigevorrichtungen 110A-110B aus 1, zur weiteren Verarbeitung durch den einen oder die mehreren Prozessoren 102 geleitet oder zur weiteren Verarbeitung durch eine der Verarbeitungseinheiten innerhalb des Parallelprozessors 200 von 2A geleitet werden.
  • 2C ist ein Blockdiagramm eines Verarbeitungsclusters 214 innerhalb einer Parallelverarbeitungseinheit. Der Verarbeitungscluster ist zum Beispiel eine Instanz eines der Verarbeitungscluster 214A-214N von 2A. Der Verarbeitungscluster 214 kann ausgelegt sein, viele Threads parallel auszuführen, wobei sich der Begriff „Thread“ auf eine Instanz eines bestimmten Programms bezieht, das an einem konkreten Satz von Eingabedaten ausgeführt wird. Optional können Einzelanweisung-Mehrfachdaten(SIMD)-Anweisungsausgabetechniken verwendet werden, um eine parallele Ausführung einer großen Anzahl von Threads zu unterstützen, ohne mehrere unabhängige Anweisungseinheiten bereitzustellen. Alternativ können Einzelanweisung-Mehrfachthread(SIMT)-Techniken verwendet werden, um die parallele Ausführung einer großen Anzahl von im Allgemeinen synchronisierten Threads zu unterstützen, die eine gemeinsame Anweisungseinheit verwenden, die dazu ausgelegt ist, Anweisungen an einen Satz von Verarbeitungs-Engines innerhalb jedes der Verarbeitungscluster auszugeben. Im Gegensatz zu einem SIMD-Ausführungsregime, bei dem alle Verarbeitungs-Engines typischerweise identische Anweisungen ausführen, ermöglicht die SIMT-Ausführung, dass verschiedene Threads divergenten Ausführungspfaden durch ein gegebenes Thread-Programm leichter folgen. Fachleute werden verstehen, dass ein SIMD-Verarbeitungsregime eine funktionelle Teilmenge eines SIMT-Verarbeitungsregimes darstellt.
  • Der Betrieb des Verarbeitungsclusters 214 kann über einen Pipeline-Manager 232 gesteuert werden, der Verarbeitungstasks an SIMT-Parallelprozessoren verteilt. Der Pipeline-Manager 232 empfängt Anweisungen von dem Planer 210 von 2A und verwaltet die Ausführung dieser Anweisungen über einen Grafikmultiprozessor 234 und/oder eine Textureinheit 236. Der veranschaulichte Grafikmultiprozessor 234 ist eine beispielhafte Instanz eines SIMT-Parallelprozessors. Es können jedoch verschiedene Arten von SIMT-Parallelprozessoren unterschiedlicher Architekturen in dem Verarbeitungscluster 214 enthalten sein. Eine oder mehrere Instanzen des Grafikmultiprozessors 234 können in einem Verarbeitungscluster 214 enthalten sein. Der Grafikmultiprozessor 234 kann Daten verarbeiten und kann eine Daten-Crossbar 240 verwendet werden, um die verarbeiteten Daten an eines von mehreren möglichen Zielen zu verteilen, was andere Shader-Einheiten beinhaltet. Der Pipeline-Manager 232 kann die Verteilung verarbeiteter Daten durch das Festlegen von Zielen für zu verteilende verarbeitete Daten über die Daten-Crossbar 240 ermöglichen.
  • Jeder Grafikmultiprozessor 234 innerhalb des Verarbeitungsclusters 214 kann einen identischen Satz von Funktionsausführungslogik (z. B. arithmetische Logikeinheiten, Lade-Speicher-Einheiten usw.) beinhalten. Die Funktionsausführungslogik kann in einer Pipeline-Weise konfiguriert sein, in der neue Anweisungen ausgegeben werden können, bevor vorherige Anweisungen abgeschlossen sind. Die Funktionsausführungslogik unterstützt eine Vielfalt von Operationen, einschließlich Integer- und Gleitkommaarithmetik, Vergleichsoperationen, Boolescher Operationen, Bitverschiebung und Berechnung verschiedener algebraischer Funktionen. Dieselbe Funktionseinheit-Hardware könnte eingesetzt werden, um unterschiedliche Operationen durchzuführen, und es kann eine beliebige Kombination von Funktionseinheiten vorhanden sein.
  • Die an den Verarbeitungscluster 214 übertragenen Anweisungen bilden einen Thread. Ein Satz von Threads, die über den Satz von Parallelverarbeitungs-Engines ausgeführt werden, ist eine Thread-Gruppe. Eine Thread-Gruppe führt dasselbe Programm an unterschiedlichen Eingabedaten aus. Jeder Thread innerhalb einer Thread-Gruppe kann einer anderen Verarbeitungs-Engine innerhalb eines Grafikmultiprozessors 234 zugewiesen sein. Eine Thread-Gruppe kann weniger Threads als die Anzahl von Verarbeitungs-Engines innerhalb des Grafikmultiprozessors 234 beinhalten. Wenn eine Thread-Gruppe weniger Threads als die Anzahl von Verarbeitungs-Engines beinhaltet, können eine oder mehrere der Verarbeitungs-Engines während Zyklen, in denen diese Thread-Gruppe verarbeitet wird, im Leerlauf sein. Eine Thread-Gruppe kann außerdem mehr Threads als die Anzahl von Verarbeitungs-Engines innerhalb des Grafikmultiprozessors 234 beinhalten. Wenn die Thread-Gruppe mehr Threads als die Anzahl der Verarbeitungs-Engines innerhalb des Grafikmultiprozessors 234 beinhaltet, kann die Verarbeitung über aufeinanderfolgende Taktzyklen durchgeführt werden. Optional können mehrere Thread-Gruppen gleichzeitig auf dem Grafikmultiprozessor 234 ausgeführt werden.
  • Der Grafikmultiprozessor 234 kann einen internen Zwischenspeicher beinhalten, um Lade- und Speicheroperationen durchzuführen. Optional kann der Grafikmultiprozessor 234 auf einen internen Zwischenspeicher verzichten und einen Zwischenspeicher (z. B. Level-1(L1)-Zwischenspeicher 248) innerhalb des Verarbeitungsclusters 214 verwenden. Jeder Grafikmultiprozessor 234 hat auch Zugriff auf Level-2-Zwischenspeicher („L2“) innerhalb der Partitionseinheiten (z. B. die Partitionseinheiten 220A-220N aus 2A), die von allen Verarbeitungsclustern 214 gemeinsam genutzt werden, und kann verwendet werden, um Daten zwischen Threads zu übertragen. Der Grafikmultiprozessor 234 kann auch auf den chipexternen globalen Speicher zugreifen, der einen oder mehrere von dem lokalen Parallelprozessorspeicher und/oder dem Systemspeicher beinhalten kann. Ein beliebiger Speicher außerhalb der Parallelverarbeitungseinheit 202 kann als globaler Speicher verwendet werden. Ausführungsformen, in denen der Verarbeitungscluster 214 mehrere Instanzen des Grafikmultiprozessors 234 beinhaltet, können gemeinsame Anweisungen und Daten, die in dem L1-Zwischenspeicher 248 gespeichert sein können, gemeinsam nutzen.
  • Jeder Verarbeitungscluster 214 kann eine MMU 245 (Speicherverwaltungseinheit) aufweisen, die dazu ausgelegt ist, virtuelle Adressen auf physische Adressen abzubilden. In anderen Ausführungsformen können sich eine oder mehrere Instanzen der MMU 245 in der Speicherschnittstelle 218 von 2A befinden. Die MMU 245 beinhaltet einen Satz von Seitentabelleneinträgen (PTEs), die verwendet werden, um eine virtuelle Adresse auf eine physische Adresse einer Kachel und optional einem Zwischenspeicherzeilenindex abzubilden. Die MMU 245 kann Adressübersetzungspuffer (TLB) oder Zwischenspeicher beinhalten, die sich innerhalb des Grafikmultiprozessors 234 oder des L1-Zwischenspeichers oder des Verarbeitungsclusters 214 befinden können. Die physische Adresse wird verarbeitet, um den Oberflächendatenzugriffsstandort zu verteilen, um eine effiziente Anforderungsverschachtelung zwischen Partitionseinheiten zu ermöglichen. Der Zwischenspeicherzeilenindex kann verwendet werden, um zu ermitteln, ob eine Anforderung für eine Zwischenspeicherzeile ein Treffer oder ein Fehltreffer ist.
  • In Grafik- und Rechenanwendungen kann ein Verarbeitungscluster 214 konfiguriert sein, sodass jeder Grafikmultiprozessor 234 an eine Textureinheit 236 zum Durchführen von Texturabbildungsoperationen gekoppelt ist, z. B. zum Bestimmen von Texturabtastpositionen, Lesen von Texturdaten und Filtern der Texturdaten. Texturdaten werden aus einem internen Textur-L1-Zwischenspeicher (nicht dargestellt) oder in einigen Ausführungsformen aus einem L1-Zwischenspeicher innerhalb des Grafikmultiprozessors 234 gelesen und nach Bedarf aus einem L2-Zwischenspeicher, einem lokalen Parallelprozessorspeicher oder dem Systemspeicher abgerufen. Jeder Grafikmultiprozessor 234 gibt verarbeitete Aufgaben an die Daten-Crossbar 240 aus, um die verarbeiteten Aufgaben einem anderen Verarbeitungscluster 214 zur weiteren Verarbeitung bereitzustellen oder die verarbeitete Aufgabe über die Speicher-Crossbar 216 in einem L2-Zwischenspeicher, einem lokalen Parallelprozessorspeicher oder einem Systemspeicher zu speichern. Eine preROP 242 (Pre-Raster-Operationseinheit) ist dazu ausgelegt, Daten von dem Grafikmultiprozessor 234 zu empfangen und Daten zu ROP-Einheiten zu leiten, die sich bei Partitionseinheiten befinden können, wie hierin beschrieben (z. B. Partitionseinheiten 220A-220N von 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 hier beschriebene Kernarchitektur veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Eine beliebige Anzahl von Verarbeitungseinheiten, z. B. der Grafikmultiprozessor 234, die Textureinheiten 236, die preROPs 242 usw., kann innerhalb eines Verarbeitungsclusters 214 enthalten sein. Wenngleich nur ein Verarbeitungscluster 214 dargestellt ist, kann ferner eine Parallelverarbeitungseinheit wie hierin beschrieben eine beliebige Anzahl von Instanzen des Verarbeitungsclusters 214 beinhalten. Optional kann jeder Verarbeitungscluster 214 dazu ausgelegt sein, unabhängig von anderen Verarbeitungsclustern 214 unter Verwendung separater und individueller Verarbeitungseinheiten, L1-Zwischenspeicher, L2-Zwischenspeicher usw. zu arbeiten.
  • 2D zeigt ein Beispiel für den Grafikmultiprozessor 234, in dem der Grafikmultiprozessor 234 mit dem Pipeline-Manager 232 des Verarbeitungsclusters 214 gekoppelt ist. Der Grafikmultiprozessor 234 weist eine Ausführungs-Pipeline auf, die einen Anweisungszwischenspeicher 252, eine Anweisungseinheit 254, eine Adressenabbildungseinheit 256, eine Registerdatei 258, eine oder mehrere Universal-Grafikverarbeitungseinheits(GPGPU)-Kerne 262 und eine oder mehrere Lade-/Speichereinheiten 266 beinhaltet, ohne darauf beschränkt zu sein. Die GPGPU-Kerne 262 und Lade-/Speicher-Einheiten 266 sind über eine Speicher-und-Zwischenspeicher-Zwischenverbindung 268 mit dem Zwischenspeicher 272 und dem gemeinsam genutzten Speicher 270 gekoppelt. Der Grafikmultiprozessor 234 kann zusätzlich Tensor- und/oder Raytracingkerne 263 beinhalten, die eine Hardwarelogik beinhalten, um Matrix- und/oder Raytracingoperationen zu beschleunigen.
  • Der Anweisungszwischenspeicher 252 kann einen Strom von Anweisungen zur Ausführung von dem Pipeline-Manager 232 empfangen. Die Anweisungen werden in dem Anweisungszwischenspeicher 252 zwischengespeichert und zur Ausführung durch die Anweisungseinheit 254 versandt. Die Anweisungseinheit 254 kann Anweisungen als Thread-Gruppen (z. B. Verzerrungen) versenden, wobei jeder Thread der Thread-Gruppe einer anderen Ausführungseinheit innerhalb des GPGPU-Kerns 262 zugewiesen ist. Eine Anweisung kann durch das Festlegen einer Adresse innerhalb eines vereinheitlichten Adressbereichs auf einen lokalen, gemeinsam genutzten oder globalen Adressbereich zugreifen. Die Adressenabbildungseinheit 256 kann verwendet werden, um Adressen in dem vereinheitlichten Adressraum in eine eindeutige Speicheradresse zu übersetzen, auf die durch die Lade-/Speicher-Einheiten 266 zugegriffen werden kann.
  • Die Registerdatei 258 stellt einen Satz von Registern für die Funktionseinheiten des Grafikmultiprozessors 234 bereit. Die Registerdatei 258 stellt eine temporäre Speicherung für Operanden bereit, die mit den Datenpfaden der Funktionseinheiten (z. B. GPGPU-Kerne 262, Lade-/Speicher-Einheiten 266) des Grafikmultiprozessors 234 verbunden sind. Die Registerdatei 258 kann zwischen jeder der Funktionseinheiten aufgeteilt werden, sodass jeder Funktionseinheit ein dedizierter Abschnitt der Registerdatei 258 zugewiesen wird. Zum Beispiel kann die Registerdatei 258 zwischen den verschiedenen Verzerrungen aufgeteilt werden, die durch den Grafikmultiprozessor 234 ausgeführt werden.
  • Die GPGPU-Kerne 262 können jeweils Gleitkommaeinheiten (FPUs) und/oder arithmetische Ganzzahl-Logikeinheiten (Ganzzahl-ALUs) aufweisen, die zum Ausführen von Anweisungen des Grafikmultiprozessors 234 verwendet werden. Bei manchen Implementierungen können die GPGPU-Kerne 262 eine Hardwarelogik beinhalten, die sich ansonsten in den Tensor- und/oder Raytracingkernen 263 befinden kann. Die GPGPU-Kerne 262 können eine ähnliche Architektur aufweisen oder sich in der Architektur unterscheiden. Zum Beispiel und in einer Ausführungsform beinhaltet ein erster Teil der GPGPU-Kerne 262 eine FPU mit einfacher Genauigkeit und eine Ganzzahl-ALU, während ein zweiter Teil der GPGPU-Kerne eine FPU mit doppelter Genauigkeit beinhaltet. Optional können die FPUs den IEEE-Standard 754-2008 für Gleitkommaarithmetik implementieren oder Gleitkommaarithmetik mit variabler Genauigkeit ermöglichen. Der Grafikmultiprozessor 234 kann zusätzlich eine oder mehrere feste Funktions- oder Spezialfunktionseinheiten beinhalten, um spezifische Funktionen, wie etwa Rechteckkopier- oder Pixelmischoperationen, durchzuführen. Einer oder mehrere der GPGPU-Kerne können auch Fest- oder Spezialfunktionslogik enthalten.
  • Die GPGPU-Kerne 262 können SIMD-Logik beinhalten, die dazu 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 erzeugt werden oder automatisch erzeugt werden, wenn Programme ausgeführt und kompiliert werden, die für Einzelprogramm-Mehrfachdaten(SPMD)- oder SIMT-Architekturen geschrieben und kompiliert wurden. Mehrere Threads eines Programms, das für das SIMT-Ausführungsmodell konfiguriert ist, können über eine einzelne SIMD-Anweisung ausgeführt werden. Beispielsweise und in einer Ausführungsform können acht SIMT-Threads, die gleiche oder ähnliche Operationen ausführen, über eine einzelne SΠVID8-Logikeinheit parallel ausgeführt werden.
  • Die Speicher- und Cache-Zwischenverbindung 268 ist ein Zwischenverbindungsnetzwerk, das jede der Funktionseinheiten des Grafikmultiprozessors 234 mit der Registerdatei 258 und mit dem gemeinsam genutzten Speicher 270 verbindet. Zum Beispiel ist die Speicher- und Cache-Zwischenverbindung 268 eine Crossbar-Zwischenverbindung, die es der Lade-/Speichereinheit 266 ermöglicht, Lade- und Speicheroperationen zwischen dem gemeinsam genutzten Speicher 270 und der Registerdatei 258 zu implementieren. Die Registerdatei 258 kann mit derselben Frequenz wie die GPGPU-Kerne 262 arbeiten, wodurch die Datenübertragung zwischen den GPGPU-Kernen 262 und der Registerdatei 258 eine sehr geringe Latenz aufweist. Der gemeinsam genutzte Speicher 270 kann verwendet werden, um eine Kommunikation zwischen Threads zu ermöglichen, die auf den Funktionseinheiten innerhalb des Grafikmultiprozessors 234 ausgeführt werden. Der Zwischenspeicher 272 zum Beispiel als Datenzwischenspeicher verwendet werden, um zwischen den Funktionseinheiten und der Textureinheit 236 kommunizierte Texturdaten zwischenzuspeichern. Der gemeinsam genutzte Speicher 270 kann auch als programmverwalteter Zwischenspeicher verwendet werden. Der gemeinsam genutzte Speicher 270 und der Zwischenspeicher 272 können mit der Daten-Crossbar 240 gekoppelt sein, um eine Kommunikation mit anderen Komponenten des Verarbeitungsclusters zu ermöglichen. Threads, die auf den GPGPU-Kernen 262 ausgeführt werden, können zusätzlich zu den automatisch zwischengespeicherten Daten, die im Zwischenspeicher 272 gespeichert sind, programmgesteuert Daten innerhalb des gemeinsam genutzten Speichers speichern.
  • 3A-3C veranschaulichen weitere Grafikmultiprozessoren gemäß Ausführungsformen. 3A-3B veranschaulichen Grafikmultiprozessoren 325, 350, die mit dem Grafikmultiprozessor 234 von 2C verwandt sind und anstelle von einem von diesen verwendet werden können. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit dem Grafikmultiprozessor 234 hierin auch eine entsprechende Kombination mit dem einen oder den mehreren Grafikmultiprozessoren 325, 350, ist aber nicht darauf beschränkt. 3C veranschaulicht eine Grafikverarbeitungseinheit (GPU) 380, die dedizierte Sätze von Grafikverarbeitungsressourcen enthält, die in Mehrkerngruppen 365A-365N angeordnet sind, die den Grafikmultiprozessoren 325, 350 entsprechen. Die veranschaulichten Grafikmultiprozessoren 325, 350 und die Mehrkerngruppen 365A-365N können Streaming-Multiprozessoren (SM) sein, die dazu in der Lage sind, gleichzeitig eine große Anzahl an Ausführungs-Threads auszuführen.
  • Der Grafikmultiprozessor 325 aus 3A beinhaltet mehrere zusätzliche Instanzen von Ausführungsressourceneinheiten relativ zu dem Grafikmultiprozessor 234 aus 2D. Zum Beispiel kann der Grafikmultiprozessor 325 mehrere Instanzen der Anweisungseinheit 332A-332B, der Registerdatei 334A-334B und der einen oder den mehreren Textureinheiten 344A-344B beinhalten. Der Grafikmultiprozessor 325 beinhaltet auch mehrere Sätze von Grafik- oder Rechenausführungseinheiten (z. B. GPGPU-Kern 336A-336B, Tensorkern 337A 337B, Raytracingkern 338A-338B) und mehrere Sätze von Lade-/Speichereinheiten 340A-340B. Die Ausführungsressourceneinheiten weisen einen gemeinsamen Anweisungszwischenspeicher 330, einen Textur- und/oder Datenzwischenspeicher 342 und einen gemeinsam genutzten Speicher 346 auf.
  • Die verschiedenen Komponenten können über ein Zwischenverbindungsfabric 327 kommunizieren. Das Zwischenverbindungsfabric 327 kann einen oder mehrere Crossbar-Schalter beinhalten, um eine Kommunikation zwischen den verschiedenen Komponenten des Grafikmultiprozessors 325 zu ermöglichen. Das Zwischenverbindungsfabric 327 kann eine separate Hochgeschwindigkeits-Netzwerkfabric-Schicht sein, auf der jede Komponente des Grafikmultiprozessors 325 gestapelt ist. Die Komponenten des Grafikmultiprozessors 325 kommunizieren mit entfernten Komponenten über das Zwischenverbindungsfabric 327. Zum Beispiel können die Kerne 336A-336B, 337A-337B und 338A-338B jeweils mit dem gemeinsam genutzten Speicher 346 über das Zwischenverbindungsfabric 327 kommunizieren. Das Zwischenverbindungsfabric 327 kann die Kommunikation innerhalb des Grafikmultiprozessors 325 vermitteln, um eine faire Bandbreitenzuordnung zwischen den Komponenten sicherzustellen.
  • Der Grafikmultiprozessor 350 aus 3B beinhaltet mehrere Sätze von Ausführungsressourcen 356A-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-356D können mit einer oder mehreren Textureinheiten 360A-360D für Texturoperationen zusammenarbeiten, während sie einen Anweisungszwischenspeicher 354 und einen gemeinsam genutzten Speicher 353 gemeinsam nutzen. Zum Beispiel können die Ausführungsressourcen 356A-356D einen Anweisungszwischenspeicher 354 und einen gemeinsam genutzten Speicher 353 sowie mehrere Instanzen eines Textur- und/oder Datenzwischenspeichers 358A-358B gemeinsam nutzen. Die verschiedenen Komponenten können über ein Zwischenverbindungsfabric 352 kommunizieren, ähnlich dem Zwischenverbindungsfabric 327 von 3A.
  • Fachleute werden verstehen, dass die in 1, 2A-2D und 3A-3B beschriebenen Architekturen beschreibend sind und den Umfang der vorliegenden Ausführungsformen nicht einschränken. Somit können die hierin beschriebenen Techniken auf jeder richtig konfigurierten Verarbeitungseinheit implementiert werden, einschließlich unter anderem eines oder mehrerer mobiler Anwendungsprozessoren, einer oder mehrerer Desktop- oder Server-Zentralverarbeitungseinheiten (CPUs), einschließlich Mehrkern-CPUs, einer oder mehrerer parallelen Verarbeitungseinheiten, wie zum Beispiel der Parallelverarbeitungseinheit 202 aus 2A, sowie einer oder mehrerer Grafikprozessoren oder Spezialverarbeitungseinheiten, ohne von dem Umfang der hierin beschriebenen Ausführungsformen abzuweichen.
  • Der Parallelprozessor oder die GPGPU, wie hierin beschrieben, kann kommunikativ an Host-/Prozessorkerne gekoppelt sein, um Grafikoperationen, Maschinenlernoperationen, Musteranalyseoperationen und verschiedene Universal-GPU(GPGPU)-Funktionen zu beschleunigen. Die GPU kann über einen Bus oder eine andere Zwischenverbindung (z. B. eine Hochgeschwindigkeits-Zwischenverbindung wie PCIe, NVLink oder andere bekannte Protokolle, standardisierte Protokolle oder proprietäre Protokolle) kommunikativ an den Hostprozessor/die Kerne gekoppelt sein. In anderen Ausführungsformen kann die GPU auf demselben Gehäuse oder Chip wie die Kerne integriert sein und über eine(n) interne(n) Prozessorbus/Zwischenverbindung
    (d. h. innerhalb des Gehäuses oder Chips) kommunikativ mit den Kernen gekoppelt sein. Unabhängig von der Art und Weise, in der die GPU verbunden ist, können die Prozessorkerne der GPU Arbeit in Form von in einem Arbeitsdeskriptor enthaltenen Sequenzen von Befehlen/Anweisungen zuweisen. Die GPU verwendet dann eine dedizierte Schaltungsanordnung/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
  • 3C veranschaulicht eine Grafikverarbeitungseinheit (GPU) 380, die dedizierte Sätze von Grafikverarbeitungsressourcen enthält, die in Mehrkerngruppen 365A-365N angeordnet sind. Während nur die Details von einer einzigen Mehrkerngruppe 365A bereitgestellt werden, ist klar, dass die anderen Mehrkerngruppen 365B-365N mit den gleichen oder ähnlichen Sätzen von Grafikverarbeitungsressourcen ausgestattet sein können. Einzelheiten, die in Bezug auf die Mehrkerngruppen 365A-365N beschrieben sind, können auch für jeden beliebigen hierin beschriebenen Grafikmultiprozessor 234, 325, 350 gelten.
  • Wie veranschaulicht, kann eine Mehrkerngruppe 365A einen Satz von Grafikkernen 370, einen Satz von Tensorkernen 371 und einen Satz von Raytracingkernen 372 enthalten. Ein Planer/Dispatcher 368 plant und verteilt die Grafikthreads zur Ausführung auf den verschiedenen Kernen 370, 371, 372. Ein Satz von Registerdateien 369 speichert Operandenwerte, die von den Kernen 370, 371, 372 beim Ausführen der Grafikthreads verwendet werden. Diese können zum Beispiel Ganzzahlregister zum Speichern von ganzzahligen Werten, Gleitkommaregister zum Speichern von Gleitkommawerten, Vektorregister zum Speichern von gepackten Datenelementen (ganzzahligen und/oder Gleitkomma-Datenelementen) und Kachelregister zum Speichern von Tensor-/Matrixwerten enthalten. Die Kachelregister können als kombinierte Sätze von Vektorregistern implementiert sein.
  • Ein oder mehrere kombinierte Level-1(L1)-Zwischenspeicher und gemeinsam genutzte Speichereinheiten 373 speichern Grafikdaten wie Texturdaten, Vertexdaten, Pixeldaten, Strahldaten, Hüllkörperdaten usw. lokal innerhalb jeder Mehrkerngruppe 365A. Eine oder mehrere Textureinheiten 374 können auch verwendet werden, um Texturoperationen durchzuführen, wie Texturabbildung und Abtastung. Ein von allen oder einer Teilmenge der Mehrkerngruppen 365A-365N gemeinsam genutzter Level-2(L2)-Zwischenspeicher 375 speichert Grafikdaten und/oder Anweisungen für mehrere gleichzeitige Grafikthreads. Wie veranschaulicht kann der L2-Zwischenspeicher 375 über eine Vielzahl von Mehrkerngruppen 365A-365N hinweg gemeinsam genutzt werden. Eine oder mehrere Speichersteuerungen 367 koppeln die GPU 380 an einen Speicher 366, der ein Systemspeicher (z. B. DRAM) und/oder ein dedizierter Grafikspeicher (z. B. GDDR6-Speicher) sein kann.
  • Eingabe-/Ausgabe(E/A)-Schaltungsanordnung 363 koppelt die GPU 380 an eine oder mehrere E/A-Vorrichtungen 362, wie digitale Signalprozessoren (DSPs), Netzwerksteuerungen oder Benutzereingabevorrichtungen. Eine chipinterne Zwischenverbindung kann verwendet werden, um die E/A-Vorrichtungen 362 an die GPU 380 und den Speicher 366 zu koppeln. Eine oder mehrere E/A-Speicherverwaltungseinheiten (IOMMUs) 364 der E/A-Schaltungsanordnung 363 koppeln die E/A-Vorrichtungen 362 direkt an den Systemspeicher 366. Optional verwaltet die IOMMU 364 mehrere Sätze von Seitentabellen, um virtuelle Adressen auf physische Adressen im Systemspeicher 366 abzubilden. Die E/A-Vorrichtungen 362, CPU(s) 361 und GPU(s) 380 können dann den gleichen virtuellen Adressraum gemeinsam nutzen.
  • In einer Implementierung der IOMMU 364 unterstützt die IOMMU 364 Virtualisierung. In diesem Fall kann sie einen ersten Satz von Seitentabellen, um virtuelle Gast-/Grafikadressen auf physische Gast-/Grafikadressen abzubilden, und einen zweiten Satz von Seitentabellen verwalten, um die physischen Gast-/Grafikadressen auf physische System-/Hostadressen (z. B. innerhalb des Systemspeichers 366) abzubilden. Die Basisadressen jedes des ersten und des zweiten Satzes von Seitentabellen können in Steuerregistern gespeichert sein und bei einem Kontextwechsel ausgetauscht werden (sodass z. B. dem neuen Kontext Zugriff auf den relevanten Satz von Seitentabellen bereitgestellt wird). Obwohl in 3C nicht veranschaulicht, kann jeder der Kerne 370, 371, 372 und/oder der Mehrkerngruppen 365A-365N Übersetzungspuffer (TLBs) enthalten, um Übersetzungen von virtuellen Gast- auf physische Gastadressen, Übersetzungen von physischen Gast- auf physische Hostadressen und Übersetzungen von virtuellen Gast- auf physische Hostadressen zwischenzuspeichern.
  • Die eine oder die mehreren CPUs 361, die GPUs 380 und die E/A-Vorrichtungen 362 können auf einem einzigen Halbleiterchip und/oder Chipgehäuse integriert sein. Der veranschaulichte Speicher 366 kann auf demselben Chip integriert sein oder kann über eine chipexterne Schnittstelle an die Speichersteuerungen 367 gekoppelt sein. In einer Implementierung umfasst der Speicher 366 GDDR6-Speicher, der den gleichen virtuellen Adressraum wie andere physische Speicher auf Systemebene nutzt, obwohl die hierin beschriebenen, zugrunde liegenden Prinzipien nicht auf diese spezifische Implementierung beschränkt sind.
  • Die Tensorkerne 371 können eine Vielzahl von Ausführungseinheiten beinhalten, die spezifisch konstruiert sind, um Matrixoperationen durchzuführen, die die grundlegenden Rechenoperationen sind, die verwendet werden, um Operationen für tiefes Lernen durchzuführen. Beispielsweise können gleichzeitige Matrixmultiplikationsoperationen für Training von neuronalen Netzen und Schlussfolgerungen verwendet werden. Die Tensorkerne 371 können eine Matrixverarbeitung unter Verwendung einer Vielfalt von Operandengenauigkeiten durchführen, einschließlich Gleitkomma mit einfacher Genauigkeit (z. B. 32 Bits), Gleitkomma mit halber Genauigkeit (z. B. 16 Bits), ganzzahliger Wörter (16 Bits), Bytes (8 Bits) und Halbbytes (4 Bits). Beispielsweise extrahiert eine Implementierung eines neuronalen Netzes Merkmale jeder gerenderten Szene, wobei sie möglicherweise Details aus mehreren Frames kombiniert, um ein hochwertiges endgültiges Bild zu konstruieren.
  • In Implementierungen von tiefem Lernen kann parallele Matrixmultiplikationsarbeit zur Ausführung auf den Tensorkernen 371 eingeplant werden. Insbesondere erfordert das Training von neuronalen Netzen eine wesentliche Anzahl von Matrix-Skalarproduktoperationen. Um eine Formulierung eines inneren Produktes einer N-mal-N-mal-N-Matrixmultiplikation zu verarbeiten, können die Tensorkerne 371 mindestens N Skalarprodukt-Verarbeitungselemente enthalten. Bevor die Matrixmultiplikation beginnt, wird eine gesamte Matrix in Kachelregister geladen und mindestens eine Spalte einer zweiten Matrix wird in jedem Zyklus für N Zyklen geladen. In jedem Zyklus gibt es N Skalarprodukte, die verarbeitet werden.
  • Matrixelemente können abhängig von der bestimmten Implementierung mit unterschiedlichen Genauigkeiten gespeichert werden, einschließlich von 16-Bit-Wörtern, 8-Bit-Bytes (z. B. INT8) und 4-Bit-Halbbytes (z. B. INT4). Unterschiedliche Genauigkeitsmodi können für die Tensorkerne 371 angegeben werden, um sicherzustellen, dass die effizienteste Genauigkeit für unterschiedliche Arbeitslasten verwendet wird (wie z. B. Schlussfolgerungsarbeitslasten, die eine Quantisierung in Bytes und Halbbytes tolerieren können). Unterstützte Formate beinhalten zusätzlich 64-Bit-Gleitkomma (FP64) und Nicht-IEEE-Gleitkommaformate, wie etwa das bfloat16-Format (z. B. Brain-Gleitkomma), ein 16-Bit-Gleitkommaformat mit einem Vorzeichenbit, acht Exponentenbits und acht Signifikandenbits, von denen sieben explizit gespeichert sind. Eine Ausführungsform beinhaltet Unterstützung für ein Tensor-Gleitkommaformat (TF32) mit reduzierter Genauigkeit, das den Bereich von FP32 (8 Bit) mit der Genauigkeit von FP16 (10 Bit) aufweist. TF32-Operationen mit reduzierter Genauigkeit können an FP32-Eingaben durchgeführt werden und erzeugen FP32-Ausgaben mit höherer Leistungsfähigkeit relativ zu FP32 und erhöhter Genauigkeit relativ zu FP16.
  • In einer Ausführungsform unterstützen die Tensorkerne 371 einen dünn besetzten Betriebsmodus für Matrizen, in denen die überwiegende Mehrheit von Werten null ist. Die Tensorkerne 371 beinhalten Unterstützung für dünn besetzte Eingabematrizen, die in einer dünn besetzten Matrixrepräsentation (z. B. Coordinate List Encoding (COO), Compressed Sparse Row (CSR), Compress Sparse Column (CSC) usw.) codiert sind. Die Tensorkerne 371 beinhalten auch Unterstützung für komprimierte dünn besetzte Matrixrepräsentationen, falls die dünn besetzte Matrixrepräsentation weiter komprimiert sein kann. Komprimierte, codierte und/oder komprimierte und codierte Matrixdaten zusammen mit zugehörigen Komprimierungs- und/oder Codierungsmetadaten können durch die Tensorkerne 371 gelesen werden und die von null verschiedenen Werte können extrahiert werden. Zum Beispiel kann für eine gegebene Eingabematrix A ein von null verschiedener Wert aus der komprimierten und/oder codierten Repräsentation von mindestens einem Abschnitt der Matrix A geladen werden. Basierend auf der Position in der Matrix A für den von null verschiedenen Wert, der aus Index- oder Koordinatenmetadaten ermittelt werden kann, die mit dem von null verschiedenen Wert assoziiert sind, kann ein entsprechender Wert in einer Eingabematrix B geladen werden. In Abhängigkeit von der durchzuführenden Operation (z. B. Multiplizieren) kann das Laden des Werts aus der Eingabematrix B umgangen werden, falls der entsprechende Wert ein Nullwert ist. In einer Ausführungsform können die Paarungen von Werten für bestimmte Operationen, wie etwa Multiplikationsoperationen, durch Planungslogik vorabgetastet werden und nur Operationen zwischen Eingaben ungleich Null werden geplant. In Abhängigkeit von den Dimensionen der Matrix A und der Matrix B und der durchzuführenden Operation kann die Ausgabematrix C dicht oder dünn besetzt sein. Wenn die Ausgabematrix C dünn besetzt ist und in Abhängigkeit von der Konfiguration der Tensorkerne 371, kann die Ausgabematrix C in einem komprimierten Format, einer dünn besetzten Codierung oder einer komprimierten dünn besetzten Codierung ausgegeben werden.
  • Die Raytracingkerne 372 beschleunigen Raytracing-Operationen sowohl für Echzeit-Raytracing- als auch Nicht-Echtzeit-Raytracing-Implementierungen. Insbesondere können die Raytracingkerne 372 Strahltraversierungs-/Schnittschaltungsanordnung zum Durchführen einer Strahltraversierung unter Verwendung von Hüllkörperhierarchien (BVHs) und zum Identifizieren von Schnittpunkten zwischen Strahlen und Primitiven enthalten, die innerhalb der BVH-Volumina eingeschlossen sind. Die Raytracingkerne 372 können auch eine Schaltungsanordnung zum Durchführen einer Tiefenprüfung und Aussonderung (z. B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) enthalten. In einer Implementierung führen die Raytracingkerne 372 Traversierungs- und Schnittoperationen zusammen mit den hierin beschriebenen Bildrauschunterdrückungstechniken durch, von denen zumindest ein Teil auf den Tensorkernen 371 ausgeführt werden kann. Die Tensorkerne 371 können zum Beispiel ein neuronales Netz für tiefes Lernen implementieren, um eine Rauschunterdrückung von Frames durchzuführen, die von den Raytracingkernen 372 generiert wurden. Die CPU(s) 361, die Grafikkerne 370 und/oder die Raytracingkerne 372 können jedoch auch die Gesamtheit oder einen Teil der Rauschunterdrückung und/oder Algorithmen für tiefes Lernen implementieren.
  • Darüber hinaus, wie oben beschrieben, kann ein verteilter Ansatz für Rauschunterdrückung eingesetzt werden, bei dem sich die GPU 380 in einer Rechenvorrichtung befindet, die über ein Netzwerk oder eine Hochgeschwindigkeits-Zwischenverbindung an andere Rechenvorrichtungen gekoppelt ist. In diesem verteilten Ansatz können die miteinander verbundenen Rechenvorrichtungen neuronale Netz-Lern-/Trainingsdaten gemeinsam nutzen, um die Geschwindigkeit zu verbessern, mit der das Gesamtsystem lernt, um eine Rauschunterdrückung für unterschiedliche Arten von Bildframes und/oder unterschiedliche Grafikanwendungen durchzuführen.
  • Die Raytracingkerne 372 können alle BVH-Traversierungs- und Strahl-Primitiven-Schnittpunkte verarbeiten, was die Grafikkerne 370 vor einem Überlasten mit Tausenden von Anweisungen pro Strahl schützt. Beispielsweise beinhaltet jeder Raytracingkern 372 einen ersten Satz von Sonderverschaltung zum Durchführen von Begrenzungsrahmenprüfungen (z. B. für Traversierungsoperationen) und/oder einen zweiten Satz einer Sonderschaltungsanordnung zum Durchführen der Strahl-Dreieck-Schnittprüfungen (z. B. sich schneidende Strahlen, die durchlaufen wurden). Deshalb kann die Mehrkerngruppe 365A beispielsweise einfach eine Strahlabtastung starten und die Raytracingkerne 372 unabhängig eine Strahltraversierung und Schnittpunktbestimmung durchführen und Trefferdaten (z. B. ein Treffer, keine Treffer, mehrere Treffer usw.) an den Threadkontext zurückgeben. Die anderen Kerne 370, 371 sind freigegeben, um eine andere Grafik- oder Rechenarbeit durchzuführen, während die Raytracingkerne 372 die Traversierungs- und Schnittoperationen durchführen.
  • Optional kann jeder Raytracingkern 372 eine Traversierungseinheit beinhalten, um BVH-Testoperationen durchzuführen, und/oder eine Schnitteinheit, die Strahl-Primitiven-Schnittpunkttests durchführt. Die Schnitteinheit generiert eine Antwort mit „Treffer“, „kein Treffer“ oder „mehrere Treffer“, die sie dem passenden Thread bereitstellt. Während der Traversierungs- und Schnittoperationen sind die Ausführungsressourcen der anderen Kerne (z. B. der Grafikkerne 370 und der Tensorkerne 371) freigegeben, um andere Formen von Grafikarbeit durchzuführen.
  • In einer optionalen Ausführungsform, die unten beschrieben ist, wird ein hybrider Rasterungs-/Raytracing-Ansatz verwendet, bei dem Arbeit auf die Grafikkerne 370 und die Raytracingkerne 372 verteilt ist.
  • Die Raytracingkerne 372 (und/oder andere Kerne 370, 371) können Hardwareunterstützung für einen Raytracing-Anweisungssatz beinhalten, wie DirectX Ray Tracing (DXR) von Microsoft, der einen DispatchRays-Befehl sowie Strahlengenerierungs-, Nächstliegender-Treffer-, Beliebiger-Treffer- und Verfehlungsshader enthält, was die Zuweisung eindeutiger Sätze von Shadern und Texturen für jedes Objekt ermöglicht. Eine weitere Raytracing-Plattform, die von den Raytracingkernen 372, Grafikkernen 370 und Tensorkernen 371 unterstützt werden kann, ist Vulkan 1.1.85. Es ist jedoch anzumerken, dass die hierin beschriebenen zugrunde liegenden Prinzipien nicht auf eine bestimmte Raytracing-ISA beschränkt sind.
  • Im Allgemeinen können verschiedene Kerne 372, 371, 370 einen Raytracing-Anweisungssatz unterstützen, der Anweisungen/Funktionen für eines oder mehrere zur Strahlengenerierung, für den nächstgelegenen Treffer, einen beliebigen Treffer, einen Strahl-Primitiven-Schnitt, eine Konstruktion von Begrenzungsrahmen pro Primitiv und/oder eine hierarchische Konstruktion von Begrenzungsrahmen, Verfehlung, Besuch und Ausnahmen enthält. Genauer enthält eine bevorzugte Ausführungsform Raytracinganweisungen, um eine oder mehrere der folgenden Funktionen durchzuführen:
    • Strahlgenerierung - Strahlgenerierungsanweisungen können für jedes Pixel, jede Abtastung oder eine andere benutzerdefinierte Arbeitszuweisung ausgeführt werden.
    • Nächstgelegener Treffer - Eine Anweisung für den nächstgelegenen Treffer kann ausgeführt werden, um den nächstgelegenen Schnittpunkt eines Strahls mit Primitiven innerhalb einer Szene aufzufinden.
    • Beliebiger Treffer - Eine Anweisung für einen beliebigen Treffer identifiziert mehrere Schnitte zwischen einem Strahl und Primitiven innerhalb einer Szene, um möglicherweise einen neuen nächstgelegenen Schnittpunkt zu identifizieren.
    • Schnitt - Eine Schnittanweisung führt einen Schnitttest zwischen Strahl und Primitivem durch und gibt ein Ergebnis aus.
    • Begrenzungsrahmenkonstruktion pro Primitivem - Diese Anweisung baut einen Begrenzungsrahmen um einen bestimmten Primitiven oder eine Gruppe von Primitiven auf (z. B. beim Aufbauen einer neuen BVH oder anderen Beschleunigungsdatenstruktur).
    • Verfehlung - Zeigt an, dass ein Strahl die gesamte Geometrie innerhalb einer Szene oder einem angegebenen Bereich einer Szene verfehlt.
    • Besuch - Zeigt die untergeordneten Volumina an, die ein Strahl durchläuft.
    • Ausnahmen - Enthält verschiedene Arten von Ausnahmehandlern (die z. B. für verschiedene Fehlerbedingungen aufgerufen werden).
  • In einer Ausführungsform können die Raytracingkerne 372 ausgelegt sein, Universal-Rechenoperationen zu beschleunigen, die unter Verwendung von Rechentechniken beschleunigt werden können, die analog zu Strahlschnitttests sind. Ein Rechen-Framework kann bereitgestellt werden, das ermöglicht, dass Shaderprogramme in Anweisungen auf niedriger Ebene und/oder Primitive compiliert werden, die Universal-Rechenoperationen über die Raytracingkerne durchführen. Beispielhafte Rechenaufgaben, die von Rechenoperationen profitieren können, die an den Raytracingkernen 372 durchgeführt werden, beinhalten Berechnungen, die Strahlbündel-, Wellen-, Strahl- oder Teilchenpropagation innerhalb eines Koordinatenraums involvieren. Interaktionen, die mit dieser Propagation assoziiert sind, können relativ zu einer Geometrie oder einem Gitter innerhalb des Koordinatenraums berechnet werden. Berechnungen, die mit der Ausbreitung elektromagnetischer Signale durch eine Umgebung assoziiert sind, können zum Beispiel über die Verwendung von Anweisungen oder Primitiven beschleunigt werden, die über die Raytracingkerne ausgeführt werden. Beugung und Spiegelung der Signale durch Objekte in der Umgebung können als direkte Raytracinganalogien berechnet werden.
  • Die Raytracingkerne 372 können auch verwendet werden, um Berechnungen durchzuführen, die nicht direkt analog zum Raytracing sind. Zum Beispiel können Gitter-Projektions-, Gitter-Verfeinerungs- und Volumenabtastberechnungen unter Verwendung der Raytracingkerne 372 beschleunigt werden. Generische Koordinatenraumberechnungen, wie etwa Berechnungen nächster Nachbarn, können ebenfalls durchgeführt werden. Zum Beispiel kann der Satz von Punkten nahe einem gegebenen Punkt entdeckt werden, indem ein Begrenzungsrahmen in dem Koordinatenraum um den Punkt herum definiert wird. BVH- und Strahlsondenlogik innerhalb der Raytracingkerne 372 können dann verwendet werden, um den Satz von Punktschnittpunkten innerhalb des Begrenzungsrahmens zu bestimmen. Die Schnittpunkte bilden den Ursprungspunkt und die nächsten Nachbarn zu diesem Ursprungspunkt. Berechnungen, die unter Verwendung der Raytracingkerne 372 durchgeführt werden, können parallel zu Berechnungen durchgeführt werden, die auf den Grafikkernen 372 und den Tensorkernen 371 durchgeführt werden. Ein Shader-Compiler kann dazu ausgelegt sein, einen Rechenshader oder ein anderes Universal-Grafikverarbeitungsprogramm in Primitive niedriger Ebene zu kompilieren, die über die Grafikkerne 370, die Tensorkerne 371 und die Raytracingkerne 372 parallelisiert werden können.
  • Techniken zur Verbindung zwischen GPU und Hostprozessor
  • 4A veranschaulicht eine beispielhafte Architektur, in der eine Vielzahl von GPUs 410-413, wie z. B. die in 2A gezeigten Parallelprozessoren 200, kommunikativ mit einer Vielzahl von Mehrkernprozessoren 405-406 über Hochgeschwindigkeitsverbindungen 440A-440D (z. B. Busse, Punkt-zu-Punkt-Zwischenverbindungen usw.) gekoppelt sind. Die Hochgeschwindigkeitsverbindungen 440A-440D können je nach Implementierung einen Kommunikationsdurchsatz von 4 GB/s, 30 GB/s, 80 GB/s oder höher unterstützen. Verschiedene Zwischenverbindungs-Protokolle können verwendet werden, einschließlich unter anderem PCIe 4.0 oder 5.0 und NVLink 2.0. Die hier beschriebenen zugrunde liegenden Prinzipien sind jedoch nicht auf irgendein bestimmtes Kommunikationsprotokoll oder irgendeinen bestimmten Durchsatz beschränkt.
  • Zwei oder mehr der GPUs 410-413 können über Hochgeschwindigkeitsverbindungen 442A-442B miteinander verbunden sein, die unter Verwendung der gleichen oder anderer Protokolle/Verbindungen als denen, die für die Hochgeschwindigkeitsverbindungen 440A-440D verwendet werden, implementiert werden können. In ähnlicher Weise können zwei oder mehrere der Mehrkernprozessoren 405-406 über eine Hochgeschwindigkeitsverbindung 443 verbunden sein, die symmetrische Multiprozessor(SMP)-Busse sein können, die mit 20 GB/s, 30 GB/s, 120 GB/s oder niedrigeren oder höheren Geschwindigkeiten arbeiten. Alternativ kann die gesamte Kommunikation zwischen den verschiedenen, in 4A gezeigten Systemkomponenten unter Verwendung der gleichen Protokolle/Verbindungen (z. B. über einen gemeinsamen Zwischenverbindungsfabric) erreicht werden. Wie erwähnt, sind die hierin beschriebenen zugrunde liegenden Prinzipien jedoch nicht auf eine bestimmte Art von Zwischenverbindungstechnologie beschränkt.
  • Jeder Mehrkernprozessor 405-406 kann jeweils über Speicherzwischenverbindungen 430A-430B kommunikativ mit einem Prozessorspeicher 401-402 gekoppelt sein, und jede GPU 410-413 ist jeweils über GPU-Speicherzwischenverbindungen 450A-450D kommunikativ mit GPU-Speicher 420-423 gekoppelt. Die Speicherzwischenverbindungen 430A-430B und 450A-450D können die gleiche oder unterschiedliche Speicherzugriffstechnologien nutzen. Beispielhaft und nicht einschränkend können die Prozessorspeicher 401-402 und die GPU-Speicher 420-423 flüchtige Speicher wie dynamische Direktzugriffsspeicher (DRAMs) (einschließlich gestapelter DRAMs), Grafik-DDR-SDRAM (GDDR) (z. B. GDDR5, GDDR6) oder Hochbandbreitenspeicher (HBM) sein 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 (z. B. unter Verwendung einer Speicherhierarchie mit zwei Levels (2LM-Hierarchie)). Ein Speichersubsystem, wie hierin beschrieben, kann mit einer Anzahl von Speichertechnologien kompatibel sein, wie etwa Versionen mit doppelter Datenrate, die durch JEDEC (Joint Electronic Device Engineering Council) veröffentlicht sind.
  • Wie nachstehend beschrieben, kann, obwohl die verschiedenen Prozessoren 405-406 und GPUs 410-413 physisch jeweils mit einem bestimmten Speicher 401-402, 420-423 gekoppelt sein können, eine vereinheitlichte Speicherarchitektur implementiert sein, in der derselbe virtuelle Systemadressraum (auch als der „effektive Adressraum“ bezeichnet) unter allen verschiedenen physischen Speichern verteilt ist. Zum Beispiel können die Prozessorspeicher 401-402 jeweils 64 GB des Systemspeicheradressraums umfassen, und die GPU-Speicher 420-423 können jeweils 32 GB des Systemspeicheradressraums umfassen (was in diesem Beispiel zu insgesamt 256 GB adressierbaren Speichers führt).
  • 4B veranschaulicht zusätzliche optionale Einzelheiten 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 Leitungskarte integriert sind, die über die Hochgeschwindigkeitsverbindung 440 mit dem Prozessor 407 gekoppelt ist. Alternativ kann das Grafikbeschleunigungsmodul 446 auf dem gleichen Gehäuse oder Chip wie der Prozessor 407 integriert sein.
  • Der veranschaulichte Prozessor 407 beinhaltet eine Vielzahl von Kernen 460A-460D auf, jeweils mit einem Übersetzungspuffer 461A-461D und einem oder mehreren Zwischenspeicher 462A-462D. Die Kerne können verschiedene andere Komponenten zum Ausführen von Anweisungen und zum Verarbeiten von Daten beinhalten, die nicht veranschaulicht sind, um zu vermeiden, dass die zugrundeliegenden Prinzipien der hierin beschriebenen Komponenten (z. B. Anweisungsabrufeinheiten, Verzweigungsvorhersageeinheiten, Decodierer, Ausführungseinheiten, Neuordnungspuffer usw.) verschleiert werden. Die Zwischenspeicher 462A-462D können Level-1(L1)- und Level-2(L2)-Zwischenspeicher umfassen. Außerdem können ein oder mehrere gemeinsam genutzte Zwischenspeicher 456 in der Zwischenspeicherhierarchie enthalten sein und von Sätzen der Kerne 460A-460D gemeinsam genutzt werden. Zum Beispiel weist eine Ausführungsform des Prozessors 407 24 Kerne auf, jeder mit seinem eigenen L1-Zwischenspeicher, zwölf gemeinsam genutzten L2-Zwischenspeichern und zwölf gemeinsam genutzten L3-Zwischenspeichern. In dieser Ausführungsform wird einer der L2- und L3-Zwischenspeicher 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 wird für Daten und Anweisungen, die in den verschiedenen Zwischenspeichern 462A-462D, 456 und dem Systemspeicher 441 gespeichert sind, über eine Inter-Kern-Kommunikation über einen Kohärenzbus 464 aufrechterhalten. Zum Beispiel kann jeder Zwischenspeicher eine mit diesem assoziierte Zwischenspeicherkohärenzlogik/- Schaltungsanordnung aufweisen, um als Reaktion auf detektierte Lese- oder Schreibvorgänge in bestimmte Zwischenspeicherzeilen über den Kohärenzbus 464 zu kommunizieren. In einer Implementierung wird ein Zwischenspeicher-Snooping-Protokoll über den Kohärenzbus 464 implementiert, um Zwischenspeicherzugriffe zu snoopen. Zwischenspeicher-Snooping-/Kohärenztechniken sind Fachleuten wohlbekannt und werden hier nicht im Detail beschrieben, um ein Verschleiern der hierin beschriebenen zugrundeliegenden Prinzipien zu vermeiden.
  • Eine Proxyschaltung 425 kann bereitgestellt sein, die das Grafikbeschleunigungsmodul 446 kommunikativ mit dem Kohärenzbus 464 koppelt, wodurch ermöglicht wird, dass das Grafikbeschleunigungsmodul 446 als ein Peer der Kerne am Zwischenspeicher-Kohärenzprotokoll teilnimmt. Insbesondere stellt eine Schnittstelle 435 eine Konnektivität zu der Proxyschaltung 425 über eine Hochgeschwindigkeitsverbindung 440 (z. B. 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 Zwischenspeicher-Verwaltungs-, Speicherzugriffs-, Kontextverwaltungs- und Interrupt-Verwaltungsdienste für eine Vielzahl von Grafikverarbeitungsengines 431, 432, N des Grafikbeschleunigungsmoduls 446 bereit. Die Grafikverarbeitungsengines 431, 432, N können jeweils eine separate Grafikverarbeitungseinheit (GPU) umfassen. Alternativ können die Grafikverarbeitungsengines 431, 432, N unterschiedliche Arten von Grafikverarbeitungsengines innerhalb einer GPU umfassen, wie etwa Grafikausführungseinheiten, Medienverarbeitungs-Engines (z. B. Videocodierer/-decodierer), Abtaster und Blit-Engines. Mit anderen Worten kann das Grafikbeschleunigungsmodul eine GPU mit einer Vielzahl von Grafikverarbeitungsengines 431-432, N sein oder die Grafikverarbeitungsengines 431-432, N können einzelne GPUs sein, die in einem gemeinsamen Gehäuse, einer Leitungskarte oder einem Chip integriert sind.
  • Die Beschleunigerintegrationsschaltung 436 kann eine Speicherverwaltungseinheit (MMU) 439 zum Durchführen verschiedener Speicherverwaltungsfunktionen wie etwa Übersetzungen von virtuellem in physischen Speicher (auch als Übersetzungen von effektivem in realen Speicher bezeichnet) und Speicherzugriffsprotokolle zum Zugriff auf den Systemspeicher 441 beinhalten. Die MMU 439 kann auch einen Übersetzungspuffer (TLB) (nicht gezeigt) zum Zwischenspeichern der Übersetzungen von virtuellen/effektiven in physische/reale Adressen aufweisen. In einer Implementierung speichert ein Zwischenspeicher 438 Befehle und Daten für einen effizienten Zugriff durch die Grafikverarbeitungsengines 431, 432, N. Die im Zwischenspeicher 438 und den Grafikspeichern 433-434, M gespeicherten Daten können mit den Kern-Zwischenspeichern 462A-462D, 456 und dem Systemspeicher 441 kohärent gehalten werden. Wie erwähnt, kann dies über die Proxyschaltung 425 erreicht werden, die am Zwischenspeicherkohärenzmechanismus für den Zwischenspeicher 438 und die Speicher 433-434, M teilnimmt (z. B. Senden von Aktualisierungen an den Zwischenspeicher 438 in Bezug auf Modifikationen/Zugriffe auf Zwischenspeicherzeilen in den Prozessor-Zwischenspeichern 462A-462D, 456 und Empfangen von Aktualisierungen von dem Zwischenspeicher 438).
  • Ein Satz von Registern 445 speichert Kontextdaten für Threads, die durch die Grafikprozessor-Engines 431-432, N ausgeführt werden, und eine Kontextverwaltungsschaltung 448 verwaltet die Thread-Kontexte. Zum Beispiel kann die Kontextverwaltungsschaltung 448 Speicher- und Wiederherstellungsoperationen zum Speichern und Wiederherstellen von Kontexten der verschiedenen Threads während Kontextwechseln durchführen (z. B. wenn ein erster Thread gespeichert wird und ein zweiter Thread wiederhergestellt wird, sodass der zweite Thread durch eine Grafikverarbeitungsengine ausgeführt werden kann). Zum Beispiel kann die Kontextverwaltungsschaltung 448 bei einem Kontextwechsel aktuelle Registerwerte in einem designierten Bereich im Speicher (z. B. durch einen Kontextzeiger identifiziert) speichern. Sie kann dann die Registerwerte bei Rückkehr zu dem Kontext wiederherstellen. Eine Interrupt-Verwaltungsschaltung 447 kann beispielsweise Interrupts empfangen und verarbeiten, die von Systemvorrichtungen empfangen werden.
  • In einer Implementierung werden virtuelle/effektive Adressen von einer Grafikverarbeitungsengine 431 durch die MMU 439 in reale/physische Adressen im Systemspeicher 441 übersetzt. Optional unterstützt die Beschleunigerintegrationsschaltung 436 mehrere (z. B. 4, 8, 16) Grafikbeschleunigungsmodule 446 und/oder andere Beschleunigervorrichtungen. Das Grafikbeschleunigungsmodul 446 kann für eine einzelne Anwendung dediziert 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 Grafikverarbeitungsengines 431-432, N von mehreren Anwendungen, virtuellen Maschinen (VMs) oder Containern gemeinsam genutzt werden. Die Ressourcen können in „Slices“ unterteilt sein, die verschiedenen VMs und/oder Anwendungen auf der Grundlage der mit den VMs und/oder den Anwendungen assoziierten Verarbeitungsanforderungen und -prioritäten zugewiesen sind. VMs und Container können hierin austauschbar verwendet werden.
  • Eine virtuelle Maschine (VM) kann Software sein, die ein Betriebssystem und eine oder mehrere Anwendungen ausführt. Eine VM kann durch eine Spezifikation, Konfigurationsdateien, eine virtuelle Plattendatei, eine Einstellungsdatei für nichtflüchtigen Speicher mit wahlfreiem Zugriff (NVRAM) und die Protokolldatei definiert sein und wird von den physischen Ressourcen einer Hostrechenplattform gestützt. Eine VM kann ein Betriebssystem (OS) oder eine Anwendungsumgebung beinhalten, die auf Software installiert ist, die dedizierte Hardware imitiert. Der Endbenutzer hat das gleiche Erlebnis auf einer virtuellen Maschine, wie er auf dedizierter Hardware haben würde. Spezialisierte Software, als Hypervisor bezeichnet, emuliert den PC-Client oder die CPU des Servers, Speicher, Festplatte, Netzwerk und andere Hardwareressourcen vollständig, was virtuellen Maschinen ermöglicht, die Ressourcen gemeinsam zu nutzen. Der Hypervisor kann mehrere virtuelle Hardwareplattformen emulieren, die voneinander isoliert sind, was virtuellen Maschinen ermöglicht, Linux®-, Windows® Server-, VMware ESXi- und andere Betriebssysteme auf demselben zugrunde liegenden physischen Host auszuführen.
  • Ein Container kann ein Softwarepaket von Anwendungen, Konfigurationen und Abhängigkeiten sein, sodass die Anwendungen von einer Rechenumgebung zu einer anderen zuverlässig laufen. Container können ein Betriebssystem gemeinsam nutzen, das auf der Serverplattform installiert ist, und als isolierte Prozesse laufen. Ein Container kann ein Softwarepaket sein, das alles beinhaltet, das die Software benötigt, um zu laufen, wie Systemwerkzeuge, Bibliotheken und Einstellungen. Container werden nicht wie herkömmliche Softwareprogramme installiert, was ihnen ermöglicht, von der anderen Software und dem Betriebssystem selbst isoliert zu sein. Die isolierte Natur von Containern bietet mehrere Vorteile. Erstens läuft die Software in einem Container in unterschiedlichen Umgebungen auf die gleiche Weise. Ein Container, der zum Beispiel PHP und MySQL enthält, kann auf sowohl einem Linux®-Computer als auch einer Windows®-Maschine identisch laufen. Zweitens bieten Container zusätzliche Sicherheit, da die Software das Hostbetriebssystem nicht beeinflusst. Während eine installierte Anwendung Systemeinstellungen ändern kann und Ressourcen modifizieren kann, wie die Windows-Registrierungsdatenbank, kann ein Container nur Einstellungen innerhalb des Containers modifizieren.
  • Somit wirkt die Beschleunigerintegrationsschaltung 436 als Brücke zum System für das Grafikbeschleunigungsmodul 446 und stellt Adressübersetzungs- und Systemspeicherzwischenspeicherdienste bereit. In einer Ausführungsform kann die Beschleunigerintegrationsschaltung 436 zur Erleichterung der Überbrückungsfunktionalität auch gemeinsam genutzte E/A 497 (z. B. PCIe, USB oder andere) und Hardware beinhalten, um eine Systemsteuerung von Spannung, Taktung, Leistungsfähigkeit, Temperatur und Sicherheit zu ermöglichen. Die gemeinsam genutzte E/A 497 kann separate physische Verbindungen verwenden oder kann die Hochgeschwindigkeitsverbindung 440 durchlaufen. Außerdem kann die Beschleunigerintegrationsschaltung 436 Virtualisierungseinrichtungen für den Hostprozessor bereitstellen, um die Virtualisierung der Grafikverarbeitungsengines, Interrupts und Speicherverwaltung zu verwalten.
  • Da Hardwareressourcen der Grafikverarbeitungsengines 431-432, N explizit auf den realen Adressraum abgebildet werden, den der Hostprozessor 407 sieht, kann jeder Hostprozessor diese Ressourcen direkt unter Verwendung eines effektiven Adresswerts adressieren. Eine optionale Funktion der Beschleunigerintegrationsschaltung 436 ist die physische Trennung der Grafikverarbeitungsengines 431-432, N, sodass sie dem System als unabhängige Einheiten erscheinen.
  • Ein oder mehrere Grafikspeicher 433-434, M können jeweils mit jeder der Grafikverarbeitungsengines 431-432, N gekoppelt sein. Die Grafikspeicher 433-434, M speichern Anweisungen und Daten, die durch jede der Grafikverarbeitungsengines 431-432, N verarbeitet werden. Die Grafikspeicher 433-434, M können flüchtige Speicher sein, wie DRAMs (einschließlich gestapelter DRAMs), GDDR-Speicher (z. B. GDDR5, GDDR6) oder HBM, und/oder können nichtflüchtige Speicher sein, wie etwa 3D XPoint/Optane, Samsung Z-NAND oder Nano-Ram.
  • Um den Datenverkehr über die Hochgeschwindigkeitsverbindung 440 zu reduzieren, können Biasing-Techniken verwendet werden, um sicherzustellen, dass die in den Grafikspeichern 433-434, M gespeicherten Daten Daten sind, die am häufigsten von den Grafikverarbeitungsengines 431-432, N verwendet werden und vorzugsweise nicht von den Kernen 460A-460D verwendet werden (zumindest nicht häufig). In ähnlicher Weise versucht der Biasing-Mechanismus, Daten, die von den Kernen (und vorzugsweise nicht den Grafikverarbeitungsengines 431-432, N) benötigt werden, in den Zwischenspeichern 462A-462D, 456 der Kerne und im Systemspeicher 441 zu halten.
  • Gemäß einer in 4C gezeigten Variante ist die Beschleunigerintegrationsschaltung 436 in dem Prozessor 407 integriert. Die Grafikverarbeitungsengines 431-432, N kommunizieren direkt über die Hochgeschwindigkeitsverbindung 440 mit der Beschleunigerintegrationsschaltung 436 über die Schnittstelle 437 und die Schnittstelle 435 (die wiederum eine beliebige Form von Bus- oder Schnittstellenprotokoll verwenden können). Die Beschleunigerintegrationsschaltung 436 kann die gleichen Operationen wie die unter Bezugnahme auf 4B beschriebenen ausführen, jedoch möglicherweise mit einem höheren Durchsatz aufgrund ihrer unmittelbaren Nähe zu dem Kohärenzbus 464 und den Zwischenspeichern 462A-462D, 456.
  • Die beschriebenen Ausführungsformen können verschiedene Programmiermodelle unterstützen, einschließlich eines Programmiermodells mit dedizierten Prozessen (keine Virtualisierung des Grafikbeschleunigungsmoduls) und gemeinsam genutzten Programmiermodellen (mit Virtualisierung). Letzteres kann Programmiermodelle, die von der Beschleunigerintegrationsschaltung 436 gesteuert werden, und Programmiermodelle, die von dem Grafikbeschleunigungsmodul 446 gesteuert werden, beinhalten.
  • In den Ausführungsformen des dedizierten Prozessmodells können die Grafikverarbeitungsengines 431, 432, ... N für eine einzelne Anwendung oder einen einzelnen Prozess unter einem einzigen Betriebssystem dediziert sein. Die Einzelanwendung kann andere Anwendungsanfragen an die Grafik-Engines 431, 432, ... N leiten und eine Virtualisierung innerhalb einer VM/Partition bereitstellen.
  • In den Programmiermodellen mit dedizierten Prozessen können die Grafikverarbeitungsengines 431, 432, N durch mehrere VM/Anwendungspartitionen gemeinsam genutzt werden. Die gemeinsam genutzten Modelle erfordern einen Systemhypervisor zur Virtualisierung der Grafikverarbeitungsengines 431-432, N, um einen Zugriff durch jedes Betriebssystem zu ermöglichen. Für Einzelpartitionssysteme ohne Hypervisor gehören die Grafikverarbeitungsengines 431-432, N dem Betriebssystem. In beiden Fällen kann das Betriebssystem die Grafikverarbeitungsengines 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 Grafikverarbeitungsengine 431-432, N ein Prozesselement unter Verwendung eines Prozess-Handles aus. Die Prozesselemente können in dem Systemspeicher 441 gespeichert werden und unter Verwendung der hierin beschriebenen Techniken zur Übersetzung von effektiven Adressen in reale Adressen adressierbar sein. Das Prozess-Handle kann ein implementierungsspezifischer Wert sein, der dem Hostprozess bereitgestellt wird, wenn sein Kontext bei der Grafikverarbeitungsengine 431-432, N registriert wird (das heißt, Systemsoftware aufgerufen wird, um das Prozesselement zu der mit dem Prozesselement verknüpften Liste hinzuzufügen). Die unteren 16 Bits des Prozess-Handles können der Versatz des Prozesselements innerhalb der mit dem Prozesselement verknüpften Liste sein.
  • 4D veranschaulicht ein beispielhaftes Beschleunigerintegrations-Slice 490. Im hierin verwendeten Sinne umfasst ein „Slice“ einen spezifizierten Teil der Verarbeitungsressourcen der Beschleunigerintegrationsschaltung 436. Ein effektiver Anwendungs-Adressraum 482 innerhalb eines Systemspeichers 441 speichert Prozesselemente 483. Die Prozesselemente 483 können als Reaktion auf GPU-Aufrufe 481 von Anwendungen 480 gespeichert werden, die auf dem Prozessor 407 ausgeführt werden. Ein Prozesselement 483 enthält den Prozesszustand für die entsprechende Anwendung 480. Ein im Prozesselement 483 enthaltener Arbeitsdeskriptor (WD) 484 kann eine einzelne Aufgabe sein, die durch eine Anwendung angefordert wird, oder kann einen Zeiger auf eine Warteschlange von Aufgaben enthalten. Im letzteren Fall ist der WD 484 ein Zeiger auf die Arbeitsauftragsanforderungswarteschlange in dem Adressraum 482 der Anwendung.
  • Das Grafikbeschleunigungsmodul 446 und/oder die einzelnen Grafikverarbeitungsengines 431-432, N können von allen oder einer Teilmenge der Prozesse in dem System gemeinsam genutzt werden. Beispielsweise können die hierin beschriebenen Technologien eine Infrastruktur zum Einrichten des Prozesszustands und zum Senden eines WD 484 an ein Grafikbeschleunigungsmodul 446 zum Starten eines Arbeitsauftrags in einer virtualisierten Umgebung beinhalten.
  • In einer Implementierung ist das Programmiermodell mit dedizierten Prozessen implementationsspezifisch. In diesem Modell besitzt ein einzelner Prozess das Grafikbeschleunigungsmodul 446 oder eine einzelne Grafikverarbeitungsengine 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 den besitzenden Prozess zu dem Zeitpunkt, zu dem das Grafikbeschleunigungsmodul 446 zugewiesen wird.
  • Während des Betriebs ruft eine WD-Abrufeinheit 491 in dem Beschleunigerintegrations-Slice 490 den nächsten WD 484 ab, der eine Angabe der Arbeit beinhaltet, die durch eine oder mehrere der Grafikverarbeitungsengines des Grafikbeschleunigungsmoduls 446 zu erledigen ist. Daten von dem WD 484 können in den Registern 445 gespeichert und durch die MMLJ 439, die Unterbrechungsverwaltungsschaltung 447 und/oder die Kontextverwaltungsschaltung 448 wie veranschaulicht verwendet werden. Zum Beispiel kann die MMU 439 eine Segment-/Seitenlauf-Schaltungsanordnung zum Zugreifen auf Segment-/Seitentabellen 486 innerhalb des virtuellen Adressbereichs 485 des OS beinhalten. Die Interrupt-Verwaltungsschaltung 447 kann von dem Grafikbeschleunigungsmodul 446 empfangene Interrupt-Ereignisse 492 verarbeiten. Beim Durchführen von Grafikoperationen wird eine effektive Adresse 493, die durch eine Grafikverarbeitungsengine 431-432, N erzeugt wird, durch die MMLJ 439 in eine reale Adresse übersetzt.
  • Der gleiche Satz von Registern 445 kann für jede Grafikverarbeitungsengine 431-432, N und/oder das Grafikbeschleunigungsmodul 446 dupliziert werden und kann durch den Hypervisor oder das Betriebssystem initialisiert werden. Jedes dieser duplizierten Register kann in einem Beschleunigerintegrations-Slice 490 beinhaltet sein. In einer Ausführungsform kann jede Grafikverarbeitungsengine 431-432, N dem Hypervisor 496 als eine individuelle Grafikprozessorvorrichtung präsentiert werden. QoS-Einstellungen können für Clients einer spezifischen Grafikverarbeitungsengine 431-432, N konfiguriert werden und eine Datenisolation zwischen den Clients jeder Engine kann ermöglicht werden. Tabelle 1 zeigt beispielhafte Register, die durch den Hypervisor initialisiert werden können. Tabelle 1 - durch Hypervisor initialisierte Register
    1 Slice-Steuerregister
    2 Geplanter Prozessbereichszeiger für reale Adresse (RA)
    3 Autoritätsmasken-Überschreibungsregister
    4 Unterbrechungsvektor-Tabelleneintragsversatz
    5 Unterbrechungsvektor-Tabelleneintragsbegrenzung
    6 Zustandsregister
    7 Logische Partitions-ID
    8 Hypervisor-Beschleunigernutzungsaufzeichnungszeiger für reale Adresse (RA)
    9 Speicherdeskriptorregister (SDR)
  • Tabelle 2 zeigt beispielhafte Register, die durch das Betriebssystem initialisiert werden können. Tabelle 2 - durch Betriebssystem initialisierte Register
    1 Prozess- und Thread-Identifikation
    2 Kontextspeicherungs-/Wiederherstellungszeiger für effektive Adresse (EA)
    3 Beschleunigernutzungsaufzeichnungszeiger für virtuelle Adresse (VA)
    4 Speichersegmenttabellenzeiger für virtuelle Adresse (VA)
    5 Autoritätsmaske
    6 Arbeitsdeskriptor
  • Jeder WD 484 kann spezifisch für ein bestimmtes Grafikbeschleunigungsmodul 446 und/oder eine Grafikverarbeitungsengine 431-432, N sein. Er enthält alle Informationen, die eine Grafikverarbeitungsengine 431-432, N benötigt, um ihre Arbeit zu erledigen, oder er kann ein Zeiger auf einen Speicherort sein, an dem die Anwendung eine Befehlswarteschlange mit zu erledigender Arbeit eingerichtet hat.
  • 4E veranschaulicht zusätzliche optionale Einzelheiten eines gemeinsam genutzten Modells. Es enthält einen Hypervisor-Realadressraum 498, in dem eine Prozesselementliste 499 gespeichert ist. Der Hypervisor-Realadressraum 498 ist über einen Hypervisor 496 zugänglich, der die Grafikbeschleunigungsmodul-Engines für das Betriebssystem 495 virtualisiert.
  • Die gemeinsam genutzten Programmiermodelle ermöglichen, dass alle oder eine Teilmenge von Prozessen von allen oder einer Teilmenge von Partitionen in dem System ein Grafikbeschleunigungsmodul 446 verwenden. Es gibt zwei Programmiermodelle, bei denen das Grafikbeschleunigungsmodul 446 durch mehrere Prozesse und Partitionen gemeinsam genutzt wird: eine gemeinsame Nutzung nach Zeit-Slices und eine grafikgerichtete gemeinsame Nutzung.
  • In diesem Modell ist der Systemhypervisor 496 der Eigentümer des Grafikbeschleunigungsmoduls 446 und stellt dessen Funktion allen Betriebssystemen 495 zur Verfügung. Damit ein Grafikbeschleunigungsmodul 446 eine Virtualisierung durch den Systemhypervisor 496 unterstützt, kann das Grafikbeschleunigungsmodul 446 die folgenden Anforderungen erfüllen: 1) Eine Arbeitsauftragsanforderung einer Anwendung muss autonom sein (das heißt, der Zustand muss nicht zwischen Arbeitsaufträgen aufrechterhalten werden), oder das Grafikbeschleunigungsmodul 446 muss einen Kontextspeicherungs- und -wiederherstellungsmechanismus bereitstellen. 2) Das Grafikbeschleunigungsmodul 446 garantiert, dass eine Arbeitsauftragsanforderung einer Anwendung innerhalb einer spezifizierten Zeitdauer abgeschlossen wird, einschließlich etwaiger Übersetzungsfehler, oder das Grafikbeschleunigungsmodul 446 stellt die Fähigkeit bereit, die Verarbeitung des Arbeitsauftrags zurückzustellen. 3) Dem Grafikbeschleunigungsmodul 446 muss Fairness zwischen Prozessen garantiert werden, wenn es in dem gerichteten gemeinsam genutzten Programmiermodell arbeitet.
  • Für das gemeinsam genutzte Modell muss die Anwendung 480 möglicherweise einen Systemsystemaufruf des Betriebssystems 495 mit einem Typ des Grafikbeschleunigungsmoduls 446, einem Arbeitsdeskriptor (WD), einem Autoritätsmaskenregister(AMR)-Wert und einem Kontextspeicherungs-/-wiederherstellungsbereichszeiger (CSRP) durchführen. Der Typ des Grafikbeschleunigungsmoduls 446 beschreibt die anvisierte Beschleunigungsfunktion für den Systemaufruf. Der Typ des Grafikbeschleunigungsmoduls 446 kann ein systemspezifischer Wert sein. Der WD ist spezifisch für das Grafikbeschleunigungsmodul 446 formatiert und kann in Form eines Befehls des Grafikbeschleunigungsmoduls 446, eines Effektivadresszeigers auf eine benutzerdefinierte Struktur, eines Effektivadresszeigers auf eine Warteschlange von Befehlen oder eine beliebige andere Datenstruktur zum Beschreiben der durch das Grafikbeschleunigungsmodul 446 zu verrichtenden Arbeit sein. In einer Ausführungsform ist der AMR-Wert der AMR-Zustand, der für den aktuellen Prozess zu verwenden ist. Der an das Betriebssystem weitergegebene Wert ähnelt einer Anwendung, die das AMR festlegt. Falls die Implementierungen der Beschleunigerintegrationsschaltung 436 und des Grafikbeschleunigungsmoduls 446 kein Benutzerautoritätsmaskenüberschreibungsregister (UAMOR) unterstützen, kann das Betriebssystem den aktuellen UAMOR-Wert auf den AMR-Wert anwenden, bevor das AMR in dem Hypervisor-Aufruf übergeben wird. Der Hypervisor 496 kann den aktuellen Autoritätsmaskenüberschreibungsregister(AMOR)-Wert anwenden, bevor das AMR in das Prozesselement 483 platziert wird. Der CSRP kann eines der Register 445 sein, das die effektive Adresse eines Bereichs im Adressraum 482 der Anwendung für das Grafikbeschleunigungsmodul 446 zum Speichern und Wiederherstellen des Kontextzustands enthält. Dieser Zeiger ist optional, falls kein Status zwischen Arbeitsaufträgen gespeichert werden muss oder wenn ein Arbeitsauftrag zurückgestellt wird. Der Kontextspeicherungs-/-wiederherstellungsbereich kann ein festgelegter Systemspeicher sein.
  • Beim Empfangen des Systemaufrufs kann das Betriebssystem 495 verifizieren, dass die Anwendung 480 registriert wurde und die Berechtigung zur Verwendung des Grafikbeschleunigungsmoduls 446 erhalten hat. Das Betriebssystem 495 ruft dann den Hypervisor 496 mit den in Tabelle 3 gezeigten Informationen auf. Tabelle 3 - Parameter von OS-an-Hypervisor-Aufrufen
    1 Ein Arbeitsdeskriptor (WD)
    2 Ein Autoritätsmaskenregister(AMR)-Wert (möglicherweise maskiert).
    3 Ein Kontextspeicherungs-/-wiederherstellungsbereichszeiger (CSRP) für effektive Adresse (EA)
    4 Eine Prozess-ID (PID) und optionale Thread-ID (TID)
    5 Ein Beschleunigernutzungsaufzeichnungszeiger (AURP) für virtuelle Adresse (VA)
    6 Die virtuelle Adresse des Speichersegmenttabellenzeigers (SSTP)
    7 Eine logische Interrupt-Dienstnummer (LISN)
  • Nach Empfang des Hypervisor-Aufrufs verifiziert der Hypervisor 496, dass das Betriebssystem 495 registriert wurde und die Berechtigung zur Verwendung des Grafikbeschleunigungsmoduls 446 erhalten hat. Der Hypervisor 496 fügt dann das Prozesselement 483 in die verknüpfte Prozesselementliste für den entsprechenden Typ des Grafikbeschleunigungsmoduls 446 ein. Das Prozesselement kann die in Tabelle 4 gezeigten Informationen enthalten. Tabelle 4 - Prozesselementinformationen
    1 Ein Arbeitsdeskriptor (WD)
    2 Ein Autoritätsmaskenregister(AMR)-Wert (möglicherweise maskiert).
    3 Ein Kontextspeicherungs-/-wiederherstellungsbereichszeiger (CSRP) für effektive Adresse (EA)
    4 Eine Prozess-ID (PID) und optionale Thread-ID (TID)
    5 Ein Beschleunigernutzungsaufzeichnungszeiger (AURP) für virtuelle Adresse (VA)
    6 Die virtuelle Adresse des Speichersegmenttabellenzeigers (SSTP)
    7 Eine logische Interrupt-Dienstnummer (LISN)
    8 Interrupt-Vektortabelle, abgeleitet von den Hypervisoraufrufparametern.
    9 Einen Zustandsregister(SR)-Wert
    10 Eine logische Partitions-ID (LPID)
    11 Ein Hypervisor-Beschleunigernutzungsaufzeichnungszeiger für reale Adresse (RA)
    12 Das Speicherungsdeskriptorregister (SDR)
  • Der Hypervisor kann eine Vielzahl von Registern 445 des Beschleunigerintegrations-Slice 490 initialisieren.
  • Wie in 4F veranschaulicht, wird in einer optionalen Implementierung ein vereinheitlichter Speicher eingesetzt, der über einen gemeinsamen virtuellen Speicheradressraum adressierbar ist, der zum Zugriff auf die physischen Prozessorspeicher 401-402 und GPU-Speicher 420-423 verwendet wird. Bei dieser Implementierung verwenden auf den GPUs 410-413 ausgeführte Operationen den gleichen virtuellen/effektiven Speicheradressraum, um auf die Prozessorspeicher 401-402 zuzugreifen und umgekehrt, wodurch die Programmierbarkeit vereinfacht wird. Ein erster Abschnitt des virtuellen/effektiven Speicheradressraums kann dem Prozessorspeicher 401, ein zweiter Abschnitt dem zweiten Prozessorspeicher 402, ein dritter Abschnitt dem GPU-Speicher 420 usw. zugewiesen sein. Der gesamte virtuelle/effektive Speicherraum (manchmal als effektiver Adressraum bezeichnet) kann dadurch auf jeden der Prozessorspeicher 401-402 und GPU-Speicher 420-423 verteilt werden, wodurch ermöglicht wird, dass jeder Prozessor oder jede GPU auf einen beliebigen physischen Speicher mit einer auf diesen Speicher abgebildeten virtuellen Adresse zugreifen kann.
  • Eine Bias-/Kohärenz-Verwaltungsschaltungsanordnung 494A-494E kann innerhalb einer oder mehrerer der MMUs 439A-439E bereitgestellt sein, die die Zwischenspeicherkohärenz zwischen den Zwischenspeichern der Hostprozessoren (z. B. 405) und den GPUs 410-413 sicherstellt und Biasing-Techniken implementiert, die die physischen Speicher anzeigen, in denen bestimmte Arten von Daten gespeichert werden sollten. Obgleich mehrere Instanzen der Bias-/Kohärenz-Verwaltungsschaltungsanordnung 494A-494E in 4F veranschaulicht sind, kann die Bias-/Kohärenz-Schaltungsanordnung innerhalb der MMU eines oder mehrerer Hostprozessoren 405 und/oder innerhalb der Beschleunigerintegrationsschaltung 436 implementiert sein.
  • Der an die GPU angeschlossene Speicher 420-423 kann als Teil des Systemspeichers abgebildet werden und es kann auf ihn unter Verwendung einer gemeinsam genutzten Speichertechnologie (SVM-Technologie) zugegriffen werden, ohne jedoch die typischen Leistungsnachteile zu erleiden, die mit vollständiger System-Zwischenspeicherkohärenz verbunden sind. Die Möglichkeit, auf den an die GPU angeschlossenen Speicher 420-423 als Systemspeicher ohne lästigen Zwischenspeicherkohärenz-Overhead zuzugreifen, bietet eine vorteilhafte Betriebsumgebung für GPU-Auslagerung. Diese Anordnung ermöglicht es der Software des Hostprozessors 405, Operanden einzurichten und auf Rechenergebnisse ohne den Overhead herkömmlicher E/A-DMA-Datenkopien zuzugreifen. Solche herkömmlichen Kopien beinhalten Treiberaufrufe, Interrupts und speicherabgebildete E/A(MMIO)-Zugriffe, die alle in Bezug auf einfache Speicherzugriffe ineffizient sind. Gleichzeitig kann die Fähigkeit, ohne Zwischenspeicherkohärenz-Overheads auf den GPU-angeschlossenen Speicher 420-423 zuzugreifen, für die Ausführungszeit einer ausgelagerten Berechnung entscheidend sein. In Fällen mit erheblichem Streaming-Schreibspeicherverkehr kann beispielsweise der Zwischenspeicherkohärenz-Overhead die effektive Schreibbandbreite, die eine GPU 410-413 sieht, erheblich reduzieren. Die Effizienz der Operandeneinrichtung, die Effizienz des Ergebniszugriffs und die Effizienz der GPU-Berechnung spielen alle eine Rolle bei der Ermittlung der Effektivität der GPU-Auslagerung.
  • Eine Wahl zwischen GPU-Bias und Hostprozessor-Bias kann durch eine Bias-Tracker-Datenstruktur gesteuert werden. Beispielsweise kann eine Bias-Tabelle verwendet werden, die eine seitengranulare Struktur sein kann (d. h. mit der Granularität einer Speicherseite gesteuert werden kann), die 1 oder 2 Bits pro GPU-angeschlossener Speicherseite aufweist. Die Bias-Tabelle kann in einem gestohlenen Speicherbereich eines oder mehrerer an die GPU angeschlossener Speicher 420-423 mit oder ohne Bias-Zwischenspeicher in der GPU 410-413 implementiert sein (z. B. um häufig/kürzlich verwendete Einträge der Bias-Tabelle zu zwischenspeichern). Alternativ kann die gesamte Bias-Tabelle in der GPU gepflegt werden.
  • In einer Implementierung wird auf den Bias-Tabelleneintrag, der mit jedem Zugriff auf den an die GPU angeschlossenen Speicher 420-423 assoziiert ist, vor dem eigentlichen Zugriff auf den GPU-Speicher zugegriffen, was die folgenden Operationen veranlasst. Zunächst werden lokale Anforderungen von der GPU 420-423, deren Seite im GPU-Bias liegt, direkt an einen entsprechenden GPU-Speicher 410-413 weitergeleitet. Lokale Anforderungen von der GPU, deren Seite im Host-Bias liegt, werden an den Prozessor 405 weitergeleitet (z. B. über eine Hochgeschwindigkeitsverbindung, wie oben erläutert). Optional schließen Anforderungen von dem Prozessor 405, bei denen die angeforderte Seite im Hostprozessor-Bias liegt, die Anforderung wie einen normalen Speicherlesevorgang ab. Alternativ dazu können Anforderungen, die an eine Seite mit GPU-Bias gerichtet sind, an die GPU 410-413 weitergeleitet werden. Die GPU kann dann die Seite zu einem Hostprozessor-Bias überführen, wenn sie die Seite derzeit nicht verwendet.
  • Der Bias-Zustand einer Seite kann entweder durch einen softwarebasierten Mechanismus, einen hardwaregestützten softwarebasierten Mechanismus oder für einen begrenzten Satz von Fällen einen rein hardwarebasierten Mechanismus geändert werden.
  • Ein Mechanismus zum Ändern des Bias-Zustands verwendet einen API-Aufruf (z. B. OpenCL), der wiederum den Vorrichtungstreiber der GPU aufruft, der wiederum eine Nachricht an die GPU sendet (oder einen Befehlsdeskriptor in eine Warteschlange einreiht), die sie anweist, den Bias-Zustand zu ändern und für manche Übergänge eine Zwischenspeicher-Entleerungsoperation im Host durchzuführen. Die Zwischenspeicher-Entleerungsoperation ist für einen Übergang vom Bias des Hostprozessors 405 zum GPU-Bias erforderlich, ist jedoch für den umgekehrten Übergang nicht erforderlich.
  • Die Zwischenspeicherkohärenz kann dadurch aufrechterhalten werden, dass bewirkt wird, dass Seiten mit GPU-Bias durch den Hostprozessor 405 vorübergehend nicht zwischengespeichert werden können. Um auf diese Seiten zuzugreifen, kann der Prozessor 405 Zugriff von der GPU 410 anfordern, die je nach der Implementierung einen sofortigen Zugriff gewähren kann oder nicht. Somit ist es zur Reduzierung einer Kommunikation zwischen dem Hostprozessor 405 und der GPU 410 vorteilhaft, sicherzustellen, dass Seiten mit GPU-Bias jene sind, die von der GPU, jedoch nicht vom Hostprozessor 405 benötigt werden, und umgekehrt.
  • Grafikverarbeitungs-Pipeline
  • 5 veranschaulicht eine Grafikverarbeitungs-Pipeline 500. Ein Grafikmultiprozessor, wie etwa der Grafikmultiprozessor 234 von 2D, der Grafikmultiprozessor 325 von 3A, der Grafikmultiprozessor 350 von 3B, kann die veranschaulichte Grafikverarbeitungs-Pipeline 500 implementieren. Der Grafikmultiprozessor kann in den hierin beschriebenen Parallelverarbeitungssubsystemen enthalten sein, wie beispielsweise dem Parallelprozessor 200 von 2A, die mit dem einen oder den mehreren Parallelprozessoren 112 von 1 verwandt sind, und kann anstelle von einem von diesen verwendet werden. Die verschiedenen Parallelverarbeitungssysteme können die Grafikverarbeitungs-Pipeline 500 über eine oder mehrere Instanzen der Parallelverarbeitungseinheit (z. B. Parallelverarbeitungseinheit 202 aus 2A) implementieren, wie hierin beschrieben. Zum Beispiel kann eine Shader-Einheit (z. B. Grafikmultiprozessor 234 aus 2C) dazu ausgelegt sein, die Funktionen einer oder mehrerer von einer Vertex-Verarbeitungseinheit 504, einer Tessellationssteuerverarbeitungseinheit 508, einer Tessellationsauswertungsverarbeitungseinheit 512, einer Geometrieverarbeitungseinheit 516 und einer Fragment-/Pixelverarbeitungseinheit 524 auszuführen. Die Funktionen des Daten-Assemblers 502, der Primitiven-Assembler 506, 514, 518, der Tessellationseinheit 510, des Rasterisierers 522 und der Rasteroperationseinheit 526 können auch durch andere Verarbeitungs-Engines innerhalb eines Verarbeitungsclusters (z. B. Verarbeitungscluster 214 aus 2A) und einer entsprechenden Partitionseinheit (z. B. Partitionseinheit 220A-220N aus 2A) durchgeführt werden. Die Grafikverarbeitungs-Pipeline 500 kann auch unter Verwendung dedizierter Verarbeitungseinheiten für eine oder mehrere Funktionen implementiert werden. Es ist auch möglich, dass ein oder mehrere Abschnitte der Grafikverarbeitungs-Pipeline 500 von einer Parallelverarbeitungslogik in einem Allzweckprozessor (z. B. CPU) ausgeführt werden. Optional können ein oder mehrere Abschnitte der Grafikverarbeitungs-Pipeline 500 über eine Speicherschnittstelle 528, die eine Instanz der Speicherschnittstelle 218 aus 2A sein kann, auf einen chipinternen Speicher (z. B. den Parallelprozessorspeicher 222 wie in 2A) zugreifen. Die Grafikprozessor-Pipeline 500 kann auch über eine Mehrkerngruppe 365A wie in 3C implementiert werden.
  • Der Daten-Assembler 502 ist eine Verarbeitungseinheit, die Vertexdaten für Oberflächen und Primitive sammelt. Der Daten-Assembler 502 gibt dann die Vertexdaten einschließlich der Vertexattribute an die Vertexverarbeitungseinheit 504 aus. Die Vertexverarbeitungseinheit 504 ist eine programmierbare Ausführungseinheit, die Vertexshaderprogramme ausführt und Vertexdaten wie durch die Vertexshaderprogramme spezifiziert beleuchtet und transformiert. Die Vertexverarbeitungseinheit 504 liest Daten, die im Zwischenspeicher-, Lokal- oder Systemspeicher gespeichert sind, zur Verwendung bei der Verarbeitung der Vertexdaten und kann so programmiert sein, dass sie die Vertexdaten von einer objektbasierten Koordinatendarstellung in einen Weltkoordinatenraum oder einen normalisierten Vorrichtungskoordinatenraum transformiert.
  • Eine erste Instanz eines Primitiven-Assemblers 506 empfängt Vertexattribute von der Vertexverarbeitungseinheit 504. Der Primitiven-Assembler 506 liest gespeicherte Vertexattribute bei Bedarf und konstruiert Grafikprimitive zur Verarbeitung durch die Tessellationssteuerverarbeitungseinheit 508. Die Grafikprimitive beinhalten Dreiecke, Liniensegmente, Punkte, Patches und so weiter, wie sie von verschiedenen Grafikverarbeitungs-Anwendungsprogrammierschnittstellen (APIs) unterstützt werden.
  • Die Tessellationssteuerverarbeitungseinheit 508 behandelt die Eingabe-Vertices als Kontrollpunkte für einen geometrischen Patch. Die Kontrollpunkte werden von einer Eingabedarstellung von dem Patch (z. B. den Grundflächen des Patch) in eine Repräsentation transformiert, die zur Verwendung bei der Oberflächenauswertung durch die Tessellationsauswertungsverarbeitungseinheit 512 geeignet ist. Die Tessellationssteuerverarbeitungseinheit 508 kann auch Tessellationsfaktoren für Kanten geometrischer Patches berechnen. Ein Tessellationsfaktor gilt für eine einzige Kante und quantifiziert einen mit der Kante assoziierten ansichtsabhängigen Detailgrad. Eine Tessellationseinheit 510 ist ausgelegt, die Tessellationsfaktoren für Kanten eines Patches zu empfangen und den Patch in mehrere geometrische Primitive wie Linien-, Dreieck- oder Viereck-Primitive zu tessellieren, die an eine Tessellationsauswertungsverarbeitungseinheit 512 übertragen werden. Die Tessellationsauswertungsverarbeitungseinheit 512 bearbeitet parametrisierte Koordinaten des unterteilten Patches, um eine Oberflächendarstellung und Vertexattribute für jeden mit den geometrischen Primitiven assoziierten Vertex zu erzeugen.
  • Eine zweite Instanz eines Primitven-Assemblers 514 empfängt Vertexattribute von der Tessellationsauswertungsverarbeitungseinheit 512, liest bei Bedarf gespeicherte Vertexattribute und konstruiert Grafikprimitive zur Verarbeitung durch die Geometrieverarbeitungseinheit 516. Die Geometrieverarbeitungseinheit 516 ist eine programmierbare Ausführungseinheit, die Geometrieshaderprogramme ausführt, um Grafikprimitive, die von dem Primitiven-Assembler 514 empfangen werden, wie durch die Geometrieshaderprogramme spezifiziert zu transformieren. Die Geometrieverarbeitungseinheit 516 kann dazu programmiert sein, die Grafikprimitive in ein oder mehrere neue Grafikprimitive zu unterteilen und Parameter zu berechnen, die zum Rasterisieren der neuen Grafikprimitive 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 Vertices, die neue Grafikprimitive spezifizieren, an den Primitiven-Assembler 518 aus. Der Primitiven-Assembler 518 empfängt die Parameter und Vertices von der Geometrieverarbeitungseinheit 516 und konstruiert Grafikprimitive zur Verarbeitung durch eine Ansichtsfeld-Skalierungs-, Auslese- und Abschneideeinheit 520. Die Geometrieverarbeitungseinheit 516 liest Daten, die im Parallelprozessorspeicher oder Systemspeicher gespeichert sind, zur Verwendung bei der Verarbeitung der Geometriedaten. Die Ansichtsfeld-Skalierungs-, Auslese- und Abschneideeinheit 520 führt eine Abschneidung, Auslesung und Ansichtsfeldskalierung aus und gibt verarbeitete Grafikprimitive an einen Rasterisierer 522 aus.
  • Der Rasterisierer 522 kann Tiefen-Auslesen und andere tiefenbasierte Optimierungen durchführen. Der Rasterisierer 522 führt auch eine Abtastumwandlung an den neuen Grafikprimitiven aus, um Fragmente zu generieren, und gibt diese Fragmente und die zugehörigen Abdeckungsdaten an die Fragment/Pixelverarbeitungseinheit 524 aus. Die Fragment-/Pixelverarbeitungseinheit 524 ist eine programmierbare Ausführungseinheit, die dazu ausgelegt ist, Fragmentshaderprogramme oder Pixelshaderprogramme auszuführen. Die Fragment/Pixelverarbeitungseinheit 524 transformiert Fragmente oder Pixel, die von dem Rasterisierer 522 empfangen werden, wie durch die Fragment- oder Pixelshaderprogramme spezifiziert. Zum Beispiel kann die Fragment/Pixelverarbeitungseinheit 524 programmiert sein, Operationen auszuführen, die unter anderem Texturabbildung, Schattieren, Mischen, Texturkorrektur und Perspektivenkorrektur beinhalten, um schattierte Fragmente oder Pixel zu erzeugen, die an eine Rasteroperationseinheit 526 ausgegeben werden. Die Fragment/Pixelverarbeitungseinheit 524 kann Daten lesen, die entweder im Parallelprozessorspeicher oder im Systemspeicher zur Verwendung bei der Verarbeitung der Fragmentdaten gespeichert sind. Fragment- oder Pixelshaderprogramme können ausgelegt sein, je nach der Abtastrate, die für die Verarbeitungseinheiten konfiguriert ist, auf Abtast-, Pixel-, Kachel-Niveau oder anderen Granularitäten zu schattieren.
  • Die Rasteroperationseinheit 526 ist eine Verarbeitungseinheit, die Rasteroperationen durchführt, einschließlich, jedoch nicht beschränkt auf Schablonieren, z-Test, Blending und dergleichen, und Pixeldaten als verarbeitete Grafikdaten ausgibt, die im Grafikspeicher (z. B. Parallelprozessorspeicher 222 wie in 2A und/oder Systemspeicher 104 wie in 1) zu speichern sind, um auf der einen oder den mehreren Anzeigevorrichtungen 1 10A-110B angezeigt zu werden, oder zur weiteren Verarbeitung durch einen des einen oder der mehreren Prozessoren 102 oder Parallelprozessoren 112. Die Rasteroperationseinheit 526 kann dazu konfiguriert sein, z- oder Farbdaten, die in den Speicher geschrieben werden, zu komprimieren und z- oder Farbdaten, die aus dem Speicher gelesen werden, zu dekomprimieren.
  • Überblick über maschinelles Lernen
  • Die oben beschriebene Architektur kann angewendet werden, um Trainings- und Inferenzoperationen unter Verwendung von Maschinenlernmodellen durchzuführen. Maschinelles Lernen hat sich bei der Lösung vieler Arten von Aufgaben bewährt. Die Berechnungen, die beim Trainieren und Verwenden von Maschinenlernalgorithmen (z. B. neuronalen Netzen) entstehen, eignen sich auf natürliche Weise für effiziente parallele Implementierungen. Dementsprechend haben Parallelprozessoren wie Universal-Grafikprozessoren (GPGPUs) eine bedeutende Rolle bei der praktischen Implementierung von tiefen neuronalen Netzen gespielt. Parallele Grafikprozessoren mit Einzelanweisungs-Multithread-Architektur (SIMT) sind konzipiert, um die Menge von Parallelverarbeitung in der Grafikpipeline zu maximieren. In einer SIMT-Architektur versuchen Gruppen paralleler Threads, Programmanweisungen so oft wie möglich synchron zusammen auszuführen, um eine Verarbeitungseffizienz zu erhöhen. Die Effizienz, die durch parallele Maschinenlernalgorithmusimplementierungen bereitgestellt wird, ermöglicht die Verwendung von Netzen mit hoher Kapazität und erlaubt es, diese Netze an größeren Datensätzen zu trainieren.
  • Ein Maschinenlernalgorithmus ist ein Algorithmus, der basierend auf einem Datensatz lernen kann. Beispielsweise können Maschinenlernalgorithmen dafür ausgelegt sein, hochgradige Abstraktionen innerhalb eines Datensatzes zu modellieren. Zum Beispiel können Bilderkennungsalgorithmen verwendet werden, um zu ermitteln, welche von mehreren Kategorien zu welcher gegebenen Eingabe gehören; Regressionsalgorithmen können bei einer Eingabe einen numerischen Wert ausgeben werden; und Mustererkennungsalgorithmen können verwendet werden, um übersetzten Text zu erzeugen oder eine Text-zu-Sprache- und/oder Spracherkennung durchzuführen.
  • Ein beispielhafter Typ eines Maschinenlernalgorithmus ist ein neuronales Netz. Es gibt viele Arten von neuronalen Netzen; ein einfacher Typ eines neuronalen Netzes ist ein vorwärtsgekoppeltes Netz. Ein vorwärtsgekoppeltes Netz kann als ein azyklischer Graph implementiert sein, in dem die Knoten in Schichten angeordnet sind. Typischerweise weist eine vorwärtsgekoppelte Netzwerktopologie eine Eingabeschicht und eine Ausgabeschicht auf, die durch mindestens eine verborgene Schicht getrennt sind. Die verborgene Schicht transformiert von der Eingabeschicht empfangene Eingaben in eine Repräsentation, die zum Erzeugen von Ausgaben in der Ausgabeschicht nützlich ist. Die Netzknoten sind vollständig über Kanten mit den Knoten in angrenzenden Schichten verbunden, aber es gibt keine Kanten zwischen Knoten innerhalb jeder Schicht. Daten, die an den Knoten einer Eingabeschicht eines vorwärtsgekoppelten Netzwerks empfangen werden, werden zu den Knoten der Ausgabeschicht über eine Aktivierungsfunktion propagiert (das heißt, „vorwärtsgekoppelt“), die die Zustände der Knoten jeder nachfolgenden Schicht in dem Netzwerk basierend auf Koeffizienten („Gewichtungen“) berechnet, die jeweils mit jeder der Kanten verbunden sind, die die Schichten verbinden. In Abhängigkeit von dem spezifischen Modell, das durch den ausgeführten Algorithmus repräsentiert wird, kann die Ausgabe von dem neuronalen Netzalgorithmus verschiedene Formen annehmen.
  • Bevor ein Maschinenlernalgorithmus verwendet werden kann, um ein bestimmtes Problem zu modellieren, wird der Algorithmus unter Verwendung eines Trainingsdatensatzes trainiert. Das Trainieren eines neuronalen Netzes beinhaltet das Auswählen einer Netztopologie, das Verwenden eines Satzes von Trainingsdaten, die ein vom Netz modelliertes Problem repräsentieren, und das Anpassen der Gewichtungen, bis das Netzmodell für alle Instanzen des Trainingsdatensatzes mit einem minimalen Fehler arbeitet. Zum Beispiel wird während eines Trainingsprozesses mit überwachtem Lernen für ein neuronales Netz die Ausgabe, die durch das Netz als Reaktion auf die eine Instanz in einem Trainingsdatensatz darstellende Eingabe erzeugt wird, mit der als „korrekt“ gekennzeichneten Ausgabe für diese Instanz verglichen, ein Fehlersignal, das die Differenz zwischen der Ausgabe und der gekennzeichneten Ausgabe darstellt, wird berechnet, und die Gewichtungen, die den Verbindungen zugeordnet sind, werden angepasst, um diesen Fehler zu minimieren, während das Fehlersignal rückwärts durch die Schichten des Netzes propagiert wird. Das Netzwerk wird als „trainiert“ betrachtet, wenn die Fehler für jede der aus den Instanzen des Trainingsdatensatzes erzeugten Ausgaben minimiert sind.
  • Die Genauigkeit eines Maschinenlernalgorithmus kann durch die Qualität des zum Trainieren des Algorithmus verwendeten Datensatzes erheblich beeinflusst werden. Der Trainingsprozess kann rechenintensiv sein und kann einen erheblichen Zeitaufwand auf einem herkömmlichen Universalprozessor erfordern. Dementsprechend wird eine Parallelverarbeitungshardware verwendet, um viele Arten von Maschinenlernalgorithmen zu trainieren. Dies ist besonders zum Optimieren des Trainings neuronaler Netze nützlich, da sich die Berechnungen, die beim Anpassen der Koeffizienten in neuronalen Netzen durchgeführt werden, auf natürliche Weise für parallele Implementierungen eignen. Insbesondere wurden viele Maschinenlernalgorithmen und Softwareanwendungen angepasst, um die Parallelverarbeitungshardware in Universalgrafikverarbeitungsvorrichtungen zu verwenden.
  • 6 ist ein verallgemeinertes Diagramm eines Softwarestapels 600 für maschinelles Lernen. Eine Maschinenlernanwendung 602 ist eine beliebige Logik, die dazu konfiguriert werden kann, ein neuronales Netz unter Verwendung eines Trainingsdatensatzes zu trainieren oder ein trainiertes tiefes neuronales Netz zu verwenden, um Maschinenintelligenz zu implementieren. Die Maschinenlernanwendung 602 kann eine Trainings- und Inferenzfunktionalität für ein neuronales Netz und/oder spezialisierte Software beinhalten, die verwendet werden kann, um ein neuronales Netz vor dem Einsatz zu trainieren. Die Maschinenlernanwendung 602 kann eine beliebige Art von Maschinenintelligenz implementieren, einschließlich unter anderem Bilderkennung, Kartierung und Lokalisierung, autonome Navigation, Sprachsynthese, medizinische Bildgebung oder Sprachübersetzung. Beispielhafte Maschinenlernanwendungen 602 beinhalten unter anderem sprachbasierte virtuelle Assistenten, Bild- oder Gesichtserkennungsalgorithmen, autonome Navigation und die Softwarewerkzeuge, die verwendet werden, um die durch die Maschinenlernanwendungen 602 verwendeten Maschinenlernmodelle zu trainieren.
  • Die Hardwarebeschleunigung für die Maschinenlernanwendung 602 kann über ein Maschinenlern-Framework 604 ermöglicht werden. Das Maschinenlern-Framework 604 kann eine Bibliothek von Maschinenlernprimitiven bereitstellen. Maschinenlernprimitive sind grundlegende Operationen, die üblicherweise von Maschinenlernalgorithmen durchgeführt werden. Ohne das Maschinenlern-Framework 604 müssten Entwickler von Maschinenlernalgorithmen die mit dem Maschinenlernalgorithmus assoziierte Hauptrechenlogik erzeugen und optimieren und dann die Rechenlogik immer dann erneut optimieren, wenn neue Parallelprozessoren entwickelt werden. Stattdessen kann die Maschinenlernanwendung dazu ausgelegt sein, die notwendigen Berechnungen unter Verwendung der Primitive durchzuführen, die von dem Maschinenlern-Framework 604 bereitgestellt werden. Zu beispielhaften Primitiven gehören Tensorfaltungen, Aktivierungsfunktionen und Pooling, bei denen es sich um Rechenoperationen handelt, die während des Trainierens eines faltenden neuronalen Netzes (CNN) ausgeführt werden. Das Maschinenlern-Framework 604 kann auch Primitive bereitstellen, um grundlegende Unterprogramme für lineare Algebra zu implementieren, die von vielen Maschinenlernalgorithmen durchgeführt werden, wie etwa Matrix- und Vektoroperationen. Beispiele für ein Maschinenlern-Framework 604 beinhalten unter anderem TensorFlow, TensorRT, PyTorch, MXNet, Caffee und andere Maschinenlern-Frameworks auf hoher Ebene.
  • Das Maschinenlern-Framework 604 kann Eingabedaten verarbeiten, die von der Maschinenlernanwendung 602 empfangen werden, und die geeignete Eingabe in ein Rechen-Framework 606 erzeugen. Das Rechen-Framework 606 kann die dem GPGPU-Treiber 608 bereitgestellten zugrundeliegenden Anweisungen abstrahieren, um zu ermöglichen, dass das Maschinenlern-Framework 604 eine Hardwarebeschleunigung über die GPGPU-Hardware 610 nutzt, ohne dass das Maschinenlern-Framework 604 genaue Kenntnisse über die Architektur der GPGPU-Hardware 610 haben muss. Außerdem kann das Rechen-Framework 606 eine Hardwarebeschleunigung für das Maschinenlern-Framework 604 über eine Vielfalt von Arten und Generationen der GPGPU-Hardware 610 hinweg ermöglichen. Beispielhafte Rechen-Frameworks 606 beinhalten das CUDA-Rechen-Framework und assoziierte Maschinenlernbibliotheken, wie etwa die Bibliothek CUDA Deep Neural Network (cuDNN). Der Softwarestapel 600 für maschinelles Lernen kann auch Kommunikationsbibliotheken oder Frameworks beinhalten, um Multi-GPU- und Multiknotenrechnen zu ermöglichen.
  • GPGPU-Beschleunigung für maschinelles Lernen
  • 7 veranschaulicht eine Universalgrafikverarbeitungseinheit 700, die der Parallelprozessor 200 von 2A oder der eine oder die mehreren Parallelprozessoren 112 von 1 sein kann. Die Universalverarbeitungseinheit (GPGPU) 700 kann dazu ausgelegt sein, eine Unterstützung für Hardwarebeschleunigung von Primitiven bereitzustellen, die durch ein Maschinenlern-Framework bereitgestellt werden, um die Verarbeitung der Art von Rechenarbeitslasten, die mit dem Trainieren tiefer neuronaler Netze assoziiert sind, zu beschleunigen. Zusätzlich kann die GPGPU 700 direkt mit anderen Instanzen der GPGPU verknüpft werden, um ein Mehr-GPU-Cluster zu erzeugen, um eine Trainingsgeschwindigkeit für besonders tiefe neuronale Netze zu verbessern. Primitive werden auch unterstützt, um Inferenzoperationen für eingesetzte neuronale Netze zu beschleunigen.
  • Die GPGPU 700 enthält eine Hostschnittstelle 702, um eine Verbindung mit einem Hostprozessor zu ermöglichen. Die Hostschnittstelle 702 kann eine PCI-Express-Schnittstelle sein. Die Hostschnittstelle kann jedoch auch eine anbieterspezifische Kommunikationsschnittstelle oder eine Kommunikationsfabric sein. Die GPGPU 700 empfängt Befehle vom Hostprozessor und verwendet einen globalen Planer 704, um Ausführungsthreads, die mit diesen Befehlen verbunden sind, an einen Satz von Verarbeitungsclustern 706A-706H zu verteilen. Die Verarbeitungscluster 706A-706H nutzen einen Zwischenspeicher 708 gemeinsam. Der Zwischenspeicher 708 kann für Zwischenspeicher in den Verarbeitungsclustern 706A-706H als ein Zwischenspeicher einer höheren Ebene fungieren. Die veranschaulichten Verarbeitungscluster 706A-706H können den Verarbeitungsclustern 214A-214N wie in 2A entsprechen.
  • Die GPGPU 700 beinhaltet Speicher 714A-714B, der über einen Satz von Speichersteuerungen 712A 712B mit den Verarbeitungsclustern 706A-706H gekoppelt ist. Der Speicher 714A-714B verschiedene Arten von Speichervorrichtungen enthalten, einschließlich dynamischem Speicher mit wahlfreiem Zugriff (DRAM) oder Grafikspeicher mit wahlfreiem Zugriff, wie synchronen Grafikspeicher mit wahlfreiem Zugriff (SGRAM), einschließlich Grafikspeicher mit doppelter Datenrate (GDDR). Die Speichereinheiten 714A-714B können auch 3D-Stapelspeicher beinhalten, einschließlich unter anderem Speicher mit hoher Bandbreite (HBM).
  • Jeder der Verarbeitungscluster 706A-706H kann einen Satz von Grafikmultiprozessoren beinhalten, wie etwa den Grafikmultiprozessor 234 aus 2D, den Grafikmultiprozessor 325 aus 3A, den Grafikmultiprozessor 350 aus 3B, oder kann eine Mehrkerngruppe 365A-365N wie in 3C beinhalten. Die Grafikmultiprozessoren des Rechenclusters beinhalten mehrere Arten von Ganzzahl- und Gleitkommalogikeinheiten, die Rechenoperationen mit einer Reihe von Genauigkeiten durchführen können, einschließlich solcher, die sich für Berechnungen für Maschinenlernen eignen. Zum Beispiel kann zumindest eine Teilmenge der Gleitkommaeinheiten in jedem der Verarbeitungscluster 706A-706H ausgelegt sein, 16-Bit- oder 32-Bit-Gleitkommaoperationen durchzuführen, während eine andere Teilmenge der Gleitkommaeinheiten ausgelegt sein kann, 64-Bit-Gleitkommaoperationen durchzuführen.
  • Mehrere Instanzen der GPGPU 700 können konfiguriert sein, als ein Rechencluster zu arbeiten. Der vom Rechencluster verwendete Kommunikationsmechanismus zur Synchronisierung und zum Datenaustausch variiert über Ausführungsformen hinweg. Zum Beispiel kommunizieren die mehreren Instanzen der GPGPU 700 über die Hostschnittstelle 702. In einer Ausführungsform enthält die GPGPU 700 einen E/A-Hub 709, der die GPGPU 700 an eine GPU-Verbindung 710 koppelt, die eine direkte Verbindung mit anderen Instanzen der GPGPU ermöglicht. Die GPU-Verbindung 710 kann an eine dedizierte GPU-zu-GPU-Brücke gekoppelt sein, die eine Kommunikation und Synchronisierung zwischen mehreren Instanzen der GPGPU 700 ermöglicht. Optional koppelt die GPU-Verbindung 710 an eine Hochgeschwindigkeits-Zwischenverbindung, um Daten an andere GPGPUs oder Parallelprozessoren zu senden und empfangen. Die mehreren Instanzen der GPGPU 700 können sich in separaten Datenverarbeitungssystemen befinden und über eine Netzwerkvorrichtung kommunizieren, die über die Hostschnittstelle 702 zugänglich ist. Die GPU-Verbindung 710 kann ausgelegt sein, eine Verbindung mit einem Hostprozessor zusätzlich zu oder als Alternative zur Hostschnittstelle 702 zu ermöglichen.
  • Während die illustrierte Konfiguration der GPGPU 700 ausgelegt sein kann, neuronale Netze zu trainieren, kann eine alternative Konfiguration der GPGPU 700 um Einsatz in einer Hochleistungs- oder Niedrigenergie-Inferenzplattform ausgelegt sein. In einer Inferenzkonfiguration enthält die GPGPU 700 weniger der Verarbeitungscluster 706A-706H relativ zur Trainingskonfiguration. Zusätzlich dazu kann sich die Speichertechnologie, die mit dem Speicher 714A-714B assoziiert ist, zwischen Inferenz- und Trainingskonfigurationen unterscheiden. In einer Ausführungsform kann die Inferenzkonfiguration der GPGPU 700 eine Inferenz bestimmter Anweisungen unterstützen. Eine Inferenzkonfiguration kann zum Beispiel Unterstützung für eine oder mehrere 8-Bit-Ganzzahl-Skalarprodukt-Anweisungen bereitstellen, die üblicherweise während Inferenzoperationen für eingesetzte neuronale Netze verwendet werden.
  • 8 veranschaulicht ein Multi-GPU-Rechensystem 800. Das Multi-GPU-Rechensystem 800 kann einen Prozessor 802 beinhalten, der über einen Hostschnittstellen-Switch 804 mit mehreren GPGPUs 806A-806D gekoppelt ist. Der Hostschnittstellen-Switch 804 kann eine PCI-Express-Switchvorrichtung sein, die den Prozessor 802 mit einem PCI-Express-Bus koppelt, über den der Prozessor 802 mit dem Satz von GPGPUs 806A-806D kommunizieren kann. Jede der mehreren GPGPUs 806A-806D kann eine Instanz der GPGPU 700 von 7 sein. Die GPGPUs 806A-806D können über einen Satz von Hochgeschwindigkeits-Punkt-zu-Punkt-GPU-zu-GPU-Verbindungen 816 verbunden sein. Die Hochgeschwindigkeits-GPU-zu-GPU-Verbindungen können mit jeder der GPGPUs 806A-806D über eine dedizierte GPU-Verbindung wie die GPU-Verbindung 710 wie in 7 verbunden sein. Die P2P-GPU-Verbindungen 816 ermöglichen eine direkte Kommunikation zwischen jeder der GPGPUs 806A-806D, ohne dass eine Kommunikation über den Hostschnittstellenbus erforderlich ist, mit dem der Prozessor 802 verbunden ist. Wenn der GPU-zu-GPU-Verkehr zu den P2P-GPU-Verbindungen geleitet wird, bleibt der Hostschnittstellenbus für einen Systemspeicherzugriff oder zur Kommunikation mit anderen Instanzen des Multi-GPU-Rechensystems 800 verfügbar, beispielsweise über eine oder mehrere Netzwerkvorrichtungen. Während in 8 die GPGPUs 806A-806D über den Hostschnittstellen-Switch 804 mit dem Prozessor 802 verbunden sind, kann der Prozessor 802 alternativ dazu eine direkte Unterstützung für die P2P GPU-Verbindungen 816 beinhalten und direkt mit den GPGPUs 806A-806D verbunden sein. In einer Ausführungsform ermöglicht die P2P-GPU-Verbindung 816, dass das Multi-GPU-Rechensystem 800 als eine einzige logische GPU arbeitet.
  • Implementierungen neuronaler Netze für maschinelles Lernen
  • Die hierin beschriebene Rechenarchitektur kann dazu ausgelegt sein, die Arten von paralleler Verarbeitung durchzuführen, die insbesondere zum Trainieren und Einsetzen von neuronalen Netzen für maschinelles Lernen geeignet sind. Ein neuronales Netz kann als ein Netz von Funktionen, die in einer Graphenbeziehung stehen, verallgemeinert werden. Wie im Stand der Technik bekannt, gibt es viele verschiedene Arten von Implementierungen neuronaler Netze, die beim maschinellen Lernen verwendet werden. Ein beispielhafter Typ eines neuronalen Netzes ist das vorwärtsgekoppelte Netz, wie zuvor beschrieben.
  • Ein zweiter beispielhafter Typ eines neuronalen Netzes ist das faltende neuronale Netz (CNN). Ein CNN ist ein spezialisiertes vorwärtsgekoppeltes neuronales Netz zum Verarbeiten von Daten, die eine bekannte rasterartige Topologie haben, wie zum Beispiel Bilddaten. Dementsprechend werden CNNs üblicherweise für Computer-Vision- und Bilderkennungsanwendungen verwendet, können aber auch für andere Arten von Mustererkennung, wie etwa Sprache und Sprachverarbeitung, verwendet werden. Die Knoten in der CNN-Eingabeschicht sind in einen Satz von „Filtern“ organisiert (Merkmalsdetektoren, die von den Aufnahmefeldern in der Netzhaut inspiriert sind), und die Ausgabe jedes Filtersatzes wird an Knoten in aufeinanderfolgenden Schichten des Netzes propagiert. 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 von 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 Faltungsnetzwerk-Terminologie kann die erste Funktion zu der Faltung als die Eingabe bezeichnet werden, während die zweite Funktion als der Faltungskern bezeichnet werden kann. Die Ausgabe kann als die Merkmalsabbildung bezeichnet werden. Zum Beispiel kann die Eingabe in eine Faltungsschicht ein mehrdimensionales Array von Daten sein, das die verschiedenen Farbkomponenten eines Eingabebildes definiert. Der Faltungskern kann ein mehrdimensionales Array von Parametern sein, wobei die Parameter durch den Trainingsprozess für das neuronale Netz angepasst werden.
  • Rekurrente neuronale Netze (RNNs) sind eine Familie von vorwärtsgekoppelten neuronalen Netzen, die Feedbackverbindungen zwischen Schichten enthalten. RNNs ermöglichen eine Modellierung sequenzieller Daten durch den Austausch von Parameterdaten über verschiedene Teile des neuronalen Netzes hinweg. Die Architektur für ein RNN beinhaltet Zyklen. Die Zyklen stellen den Einfluss eines gegenwärtigen Werts einer Variablen auf ihren eigenen Wert zu einem zukünftigen Zeitpunkt dar, da zumindest ein Teil der Ausgangsdaten von dem RNN als Feedback zum Verarbeiten einer nachfolgenden Eingabe in einer Sequenz verwendet wird. Diese Eigenschaft macht RNNs aufgrund der variablen Natur, in der Sprachdaten zusammengesetzt werden können, besonders nützlich für die Sprachverarbeitung.
  • Die unten beschriebenen Figuren präsentieren beispielhafte Vorwärtskopplungs-, CNN- und RNN-Netze und beschreiben einen allgemeinen Prozess zum Trainieren bzw. Einsetzen jedes dieser Typen von Netzen. Es versteht sich, dass diese Beschreibungen beispielhaft und nicht einschränkend für eine beliebige spezifische hierin beschriebene Ausführungsform sind und die veranschaulichten Konzepte allgemein auf tiefe neuronale Netze und Maschinenlerntechniken im Allgemeinen angewendet werden können.
  • Die oben beschriebenen beispielhaften neuronalen Netze können zum Durchführen von tiefem Lernen verwendet werden. Tiefes Lernen ist maschinelles Lernen unter Verwendung von tiefen neuronalen Netzen. Die tiefen neuronalen Netze, die beim tiefen Lernen verwendet werden, sind künstliche neuronale Netze, die aus mehreren verborgenen Schichten bestehen, im Gegensatz zu flachen neuronalen Netzen, die nur eine einzige verborgene Schicht aufweisen. Tiefere neuronale Netze sind im Allgemeinen rechenintensiver zu trainieren. Die zusätzlichen verborgenen Schichten des Netzwerks ermöglichen jedoch eine mehrstufige Mustererkennung, die verglichen mit flachen Maschinenlerntechniken zu geringeren Ausgabefehlern führt.
  • Tiefe neuronale Netze, die beim tiefen Lernen verwendet werden, beinhalten typischerweise ein Frontend-Netz zum Ausführen einer Merkmalserkennung, das mit einem Backend-Netz gekoppelt ist, das ein mathematisches Modell darstellt, das Operationen (zum Beispiel Objektklassifzierung, Spracherkennung usw.) basierend auf der dem Modell bereitgestellten Merkmaldarstellung ausführen kann. Tiefes Lernen ermöglicht ein Durchführen von maschinellem Lernen, ohne dass für das Modell eine manuelle Merkmalskonstruktion durchgeführt werden muss. Stattdessen können tiefe neuronale Netze Merkmale basierend auf statistischer Struktur oder Korrelation innerhalb der Eingabedaten lernen. Die erlernten Merkmale können einem mathematischen Modell bereitgestellt werden, das detektierte Merkmale auf eine Ausgabe abbilden kann. Das vom Netzwerk verwendete mathematische Modell ist im Allgemeinen für die spezifische durchzuführende Aufgabe spezialisiert, und andere Modelle werden verwendet, um andere Aufgaben durchzuführen.
  • Sobald das neuronale Netz strukturiert ist, kann ein Lernmodell auf das Netz angewendet werden, um das Netz dahingehend zu trainieren, spezifische Aufgaben durchzuführen. Das Lernmodell beschreibt, wie die Gewichtungen innerhalb des Modells anzupassen sind, um den Ausgabefehler des Netzwerks zu reduzieren. Rückwärtspropagierung von Fehlern ist ein übliches Verfahren zum Trainieren neuronaler Netze. Ein Eingabevektor wird dem Netzwerk zur Verarbeitung präsentiert. Die Ausgabe des Netzwerks wird unter Verwendung einer Verlustfunktion mit der gewünschten Ausgabe verglichen, und für jedes der Neuronen in der Ausgabeschicht wird ein Fehlerwert berechnet. Die Fehlerwerte werden dann rückwärts propagiert, bis jedem Neuron ein Fehlerwert zugeordnet ist, der grob seinen Beitrag zur ursprünglichen Ausgabe repräsentiert. Das Netz kann dann von diesen Fehlern unter Verwenden eines Algorithmus, wie des stochastischen Gradientenabstiegsalgorithmus, lernen, um die Gewichtungen des neuronalen Netzes zu aktualisieren.
  • 9A-9B veranschaulichen ein beispielhaftes faltendes neuronales Netz. 9A veranschaulicht verschiedene Schichten innerhalb eines CNN. Wie in 9A gezeigt kann ein beispielhaftes CNN, das zum Modellieren der Bildverarbeitung verwendet wird, eine Eingabe 902 empfangen, die die Rot-, Grün- und Blau(RGB)-Komponenten eines Eingabebildes beschreibt. Die Eingabe 902 kann durch mehrere Faltungsschichten (z. B. Faltungsschicht 904, Faltungsschicht 906) verarbeitet werden. Die Ausgabe von den mehreren Faltungsschichten kann optional von einem Satz vollständig verbundener Schichten 908 verarbeitet werden. Neuronen in einer vollständig verbundenen Schicht weisen vollständige Verbindungen mit allen Aktivierungen in der vorherigen Schicht auf, wie zuvor für ein vorwärtsgekoppeltes Netzwerk beschrieben wurde. Die Ausgabe von den vollständig verbundenen Schichten 908 kann dazu verwendet werden, ein Ausgabeergebnis von dem Netzwerk zu erzeugen. Die Aktivierungen innerhalb der vollständig verbundenen Schichten 908 können unter Verwendung einer Matrixmultiplikation anstelle einer Faltung berechnet werden. Nicht alle CNN-Implementierungen verwenden vollständig verbundene Schichten 908. Bei manchen Implementierungen kann die Faltungsschicht 906 zum Beispiel eine Ausgabe für das CNN erzeugen.
  • Die Faltungsschichten sind spärlich verbunden, was sich von der herkömmlichen Neuronalnetzkonfiguration unterscheidet, die in den vollständig verbundenen Schichten 908 zu finden ist. Herkömmliche neuronale Netzschichten sind vollständig verbunden, sodass jede Ausgabeeinheit mit jeder Eingabeeinheit interagiert. Die Faltungsschichten sind jedoch spärlich verbunden, da die Ausgabe der Faltung eines Feldes (statt des jeweiligen Zustandswertes jedes der Knoten in dem Feld) in die Knoten der nachfolgenden Schicht wie dargestellt eingegeben wird. Die mit den Faltungsschichten assoziierten Kerne führen Faltungsoperationen durch, deren Ausgabe an die nächste Schicht gesendet wird. Die Dimensionalitätsreduktion, die in den Faltungsschichten ausgeführt wird, ist ein Aspekt, der dem CNN ermöglicht, skaliert zu werden, um große Bilder zu verarbeiten.
  • 9B zeigt beispielhafte Rechenstufen 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 Poolingstufe 920 einschließen. Die Faltungsschicht 914 kann dann Daten an eine nachfolgende Faltungsschicht ausgeben. Die letzte Faltungsschicht des Netzwerks kann Ausgabemerkmalskartendaten erzeugen oder eine Eingabe in eine vollständig verbundene Schicht bereitstellen, um beispielsweise einen Klassifizierungswert für die Eingabe in das CNN zu erzeugen.
  • In der Faltungsstufe 916 werden mehrere Faltungen parallel durchgeführt, um einen Satz linearer Aktivierungen zu erzeugen. Die Faltungsstufe 916 kann eine affine Transformation enthalten, die eine beliebige Transformation ist, die als eine lineare Transformation plus eine Translation spezifiziert werden kann. Affine Transformationen beinhalten Rotationen, Translationen, Skalierung und Kombinationen dieser Transformationen. Die Faltungsstufe berechnet die Ausgabe von Funktionen (z. B. Neuronen), die mit bestimmten Regionen in der Eingabe verbunden sind, die als die dem Neuron zugeordnete lokale Region ermittelt werden können. Die Neuronen berechnen ein Skalarprodukt zwischen den Gewichtungen der Neuronen und der Region in der lokalen Eingabe, mit der die Neuronen verbunden sind. Die Ausgabe aus 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 durch eine nichtlineare Aktivierungsfunktion verarbeitet. Die nichtlineare Aktivierungsfunktion erhöht die nichtlinearen Eigenschaften des Gesamtnetzes, ohne die Aufnahmefelder der Faltungsschicht zu beeinflussen. Es können verschiedene Arten von nichtlinearen Aktivierungsfunktionen verwendet werden. Eine bestimmte Art ist die rektifizierte lineare Einheit (ReLU), die eine Aktivierungsfunktion verwendet, die als f(x) = max (0, x) definiert ist, sodass die Aktivierung einen Schwellenwert von null aufweist.
  • Die Poolingstufe 920 verwendet eine Poolingfunktion, die die Ausgabe der Faltungsschicht 906 durch eine Zusammenfassungsstatistik der nahegelegenen Ausgaben ersetzt. Die Poolingfunktion kann verwendet werden, um eine Translationsinvarianz in das neuronale Netz einzuführen, sodass kleine Translationen der Eingabe die gepoolten Ausgaben nicht ändern. Invarianz gegenüber lokaler Translation kann bei Szenarien nützlich sein, bei denen das Vorhandensein eines Merkmals in den Eingabedaten wichtiger als die genaue Lage des Merkmals ist. Verschiedene Arten von Poolingfunktionen können während der Poolingstufe 920 verwendet werden, einschließlich Max-Pooling, Durchschnitts-Pooling und l2-Norm-Pooling. Darüber hinaus weisen einige CNN-Implementierungen keine Poolingstufe auf. Stattdessen wird bei derartigen Implementierungen eine zusätzliche Faltungsstufe mit einer gesteigerten Schrittweite im Vergleich zu vorhergehenden Faltungsstufen substituiert.
  • Die Ausgabe der Faltungsschicht 914 kann dann durch die nächste Schicht 922 verarbeitet werden. Die nächste Schicht 922 kann eine zusätzliche Faltungsschicht oder eine der vollständig verbundenen Schichten 908 sein. Zum Beispiel kann die erste Faltungsschicht 904 von 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 Netz 1000. In einem rekurrenten neuronalen Netz (RNN) beeinflusst der vorherige Zustand des Netzes die Ausgabe des aktuellen Zustands des Netzes. RNNs können auf vielfältige Weise unter Verwendung einer Vielfalt von Funktionen konstruiert werden. Bei der Verwendung von RNNs geht es im Allgemeinen darum, mathematische Modelle zu verwenden, um die Zukunft basierend auf einer vorherigen Sequenz von Eingaben vorherzusagen. Ein RNN kann zum Beispiel zum Ausführen einer statistischen Sprachmodellierung verwendet werden, um ein bevorstehendes Wort anhand einer vorherigen Sequenz von Wörtern vorherzusagen. Das veranschaulichte RNN 1000 kann als eine Eingabeschicht 1002, die einen Eingabevektor empfängt, verborgene Schichten 1004 zum Implementieren einer rekurrenten Funktion, einen Feedbackmechanismus 1005 zum Ermöglichen eines ,Gedächtnisses' mit vorherigen Zuständen und eine Ausgabeschicht 1006 zum Ausgeben eines Ergebnisses aufweisend beschrieben werden. Das RNN 1000 arbeitet auf Grundlage von Zeitschritten. Der Zustand des RNN zu einem gegebenen Zeitschritt wird basierend auf dem vorherigen Zeitschritt über den Feedbackmechanismus 1005 beeinflusst. Für einen gegebenen Zeitschritt wird der Zustand der verborgenen Schichten 1004 durch den vorherigen Zustand und die Eingabe zum aktuellen Zeitschritt definiert. Eine anfängliche Eingabe (x1) in einem ersten Zeitschritt kann von der verborgenen Schicht 1004 verarbeitet werden. Eine zweite Eingabe (x2) kann von der verborgenen Schicht 1004 unter Verwendung von Zustandsinformationen verarbeitet werden, die während der Verarbeitung der anfänglichen Eingabe (x1) ermittelt wurden. Ein gegebener Zustand kann als st = f(Uxt + Wst-1) berechnet werden, wobei U und W Parametermatrizen sind. Die Funktion f ist im Allgemeinen eine Nichtlinearität, wie etwa die hyperbolische Tangensfunktion (Tanh) oder eine Variante der Gleichrichterfunktion f (x) = max(0, x). Die spezifische mathematische Funktion, die in den verborgenen Schichten 1004 verwendet wird, kann jedoch abhängig von den spezifischen Implementierungsdetails des RNN 1000 variieren.
  • Zusätzlich zu den beschriebenen grundlegenden CNN- und RNN-Netzen kann eine Beschleunigung für Variationen dieser Netze ermöglicht werden. Eine beispielhafte RNN-Variante ist das Long-Short-Term-Memory-RNN (LSTM-RNN). LSTM-RNNs sind dazu in der Lage, langfristige Abhängigkeiten zu lernen, die für die Verarbeitung längerer Sprachsequenzen notwendig sein können. Eine Variante des CNN ist ein faltendes Deep-Belief-Netz, das eine ähnliche Struktur wie ein CNN aufweist und ähnlich wie ein Deep-Belief-Netz trainiert wird. Ein Deep-Belief-Netz (DBN) ist ein generatives neuronales Netz, das aus mehreren Schichten stochastischer (zufälliger) Variablen besteht. DBNs können Schicht für Schicht mittels unüberwachtem Lernen mit Greedy-Ansatz trainiert werden. Die gelernten Gewichtungen des DBN können dann verwendet werden, um vorab trainierte neuronale Netze bereitzustellen, indem ein optimaler anfänglicher Satz von Gewichtungen für das neuronale Netz ermittelt wird. In weiteren Ausführungsformen wird eine Beschleunigung zum bestärkenden Lernen ermöglicht. Beim bestärkenden Lernen lernt ein künstlicher Agent, indem er mit seiner Umgebung interagiert. Der Agent ist dazu ausgelegt, gewisse Ziele zu optimieren, um kumulative Belohnungen zu maximieren.
  • 11 veranschaulicht Training und Einsatz eines tiefen neuronalen Netzes. Sobald ein gegebenes Netz für eine Aufgabe strukturiert wurde, wird das neuronale Netz unter Verwendung eines Trainingsdatensatzes 1102 trainiert. Verschiedene Trainings-Frameworks 1104 wurden entwickelt, um eine Hardwarebeschleunigung des Trainingsprozesses zu ermöglichen. Zum Beispiel kann das Maschinenlern-Framework 604 aus 6 kann als Trainings-Framework 1104 konfiguriert sein. Das Trainings-Framework 1104 kann sich in ein untrainiertes neuronales Netz 1106 einklinken und ermöglichen, dass das untrainierte neuronale Netz unter Verwendung der hierin beschriebenen Parallelverarbeitungsressourcen trainiert wird, um ein trainiertes neuronales Netz 1108 zu erzeugen.
  • Um den Trainingsprozess zu beginnen, können die anfänglichen Gewichtungen zufällig oder durch Vortraining unter Verwendung eines Deep-Belief-Netzwerks gewählt werden. Der Trainingszyklus kann dann entweder auf überwachte oder auf unüberwachte Weise durchgeführt werden.
  • Überwachtes Lernen ist eine Lernmethode, bei der das Training als vermittelte Operation durchgeführt wird, z. B. wenn der Trainingsdatensatz 1102 Eingaben enthält, die mit der gewünschten Ausgabe für die Eingabe gepaart sind, oder wenn der Trainingsdatensatz eine Eingabe mit bekannter Ausgabe beinhaltet und die Ausgabe des neuronalen Netzes manuell bewertet wird. Das Netzwerk verarbeitet die Eingaben und vergleicht die resultierenden Ausgaben mit einem Satz von erwarteten oder gewünschten Ausgaben. Fehler werden dann zurück durch das System propagiert. Das Trainings-Framework 1104 kann die Gewichtungen anpassen, die das untrainierte neuronale Netz 1106 steuern. Das Trainings-Framework 1104 kann Werkzeuge bereitstellen, um zu überwachen, wie gut das untrainierte neuronale Netz 1106 zu einem Modell hin konvergiert, das zum Erzeugen korrekter Antworten auf der Grundlage bekannter Eingabedaten geeignet ist. Der Trainingsprozess findet wiederholt statt, während die Gewichtungen des Netzes angepasst werden, um die durch das neuronale Netz erzeugte Ausgabe zu verbessern. Der Trainingsprozess kann fortgesetzt werden, bis das neuronale Netz eine mit einem trainierten neuronalen Netz 1108 assoziierte statistisch gewünschte Genauigkeit erreicht. Das trainierte neuronale Netz 1108 kann dann eingesetzt werden, um eine beliebige Anzahl von Maschinenlernoperationen zu implementieren, um ein Inferenzergebnis 1114 basierend auf einer Eingabe neuer Daten 1112 zu erzeugen.
  • Unüberwachtes Lernen ist ein Lernverfahren, bei dem das Netz versucht, sich selbst unter Verwendung nicht gekennzeichneter Daten zu trainieren. Somit wird der Trainingsdatensatz 1102 für unüberwachtes Lernen Eingabedaten ohne zugehörige Ausgabedaten enthalten. Das untrainierte neuronale Netz 1106 kann Gruppierungen innerhalb der nicht gekennzeichneten Eingabe lernen und kann ermitteln, wie individuelle Eingaben mit dem Gesamtdatensatz in Beziehung stehen. Unüberwachtes Training kann verwendet werden, um eine selbstorganisierende Karte zu erzeugen, die eine Art trainiertes neuronales Netz 1108 ist, das dazu in der Lage ist, Operationen durchzuführen, die nützlich sind, um die Dimensionalität von Daten zu reduzieren. Unüberwachtes Training kann auch verwendet werden, um eine Anomalieerkennung auszuführen, die die Identifizierung von Datenpunkten in einem Eingabedatensatz ermöglicht, die von den normalen Mustern der Daten abweichen.
  • Es können auch Variationen von überwachtem und unüberwachtem Training eingesetzt werden. Semi-überwachtes Lernen ist eine Technik, bei der der Trainingsdatensatz 1102 eine Mischung aus gekennzeichneten und nicht gekennzeichneten Daten mit gleicher Verteilung beinhaltet. Inkrementelles Lernen ist eine Variante des überwachten Lernens, bei der Eingabedaten kontinuierlich verwendet werden, um das Modell weiter zu trainieren. Inkrementelles Lernen ermöglicht es dem trainierten neuronalen Netz 1108, sich an neue Daten 1112 anzupassen, ohne das Wissen zu vergessen, das dem Netz während eines anfänglichen Trainings vermittelt wurde.
  • Unabhängig davon, ob er überwacht oder unüberwacht ist, kann der Trainingsprozess für besonders tiefe neuronale Netze 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.
  • 12A ist ein Blockdiagramm, das verteiltes Lernen veranschaulicht. Verteiltes Lernen ist ein Trainingsmodell, das mehrere verteilte Rechenknoten verwendet, um ein überwachtes oder unüberwachtes Training eines neuronalen Netzes auszuführen. Die verteilten Rechenknoten können jeweils einen oder mehrere Hostprozessoren und einen oder mehrere der Universalverarbeitungsknoten beinhalten, wie etwa die hochparallele Universalgrafikverarbeitungseinheit 700 wie in 7. Wie veranschaulicht, kann verteiltes Lernen mit Modellparallelität 1202, Datenparallelität 1204 oder einer Kombination aus Modell- und Datenparallelität 1206 durchgeführt werden.
  • Bei der Modellparallelität 1202 können verschiedene Rechenknoten in einem verteilten System Trainingsberechnungen für verschiedene Teile eines einzelnen Netzwerks durchführen. Zum Beispiel kann jede Schicht eines neuronalen Netzes durch einen 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 verschiedenen Schichten des neuronalen Netzes zugeordnet sind, ermöglicht das Trainieren sehr großer neuronaler Netze, bei denen die Gewichtungen aller Schichten nicht in den Speicher eines einzelnen Rechenknotens passen würden. In einigen Fällen kann die Modellparallelität besonders nützlich sein, um ein unüberwachtes Training großer neuronaler Netze durchzuführen.
  • Bei der Datenparallelität 1204 weisen die verschiedenen Knoten des verteilten Netzwerks eine vollständige Instanz des Modells auf, und jeder Knoten empfängt einen anderen Teil der Daten. Die Ergebnisse von den verschiedenen Knoten werden dann kombiniert. Obgleich verschiedene Ansätze zur Datenparallelität möglich sind, erfordern alle Ansätze für datenparalleles Training eine Technik zur Kombination von Ergebnissen und zur Synchronisierung der Modellparameter zwischen den einzelnen Knoten. Beispielhafte Ansätze zum Kombinieren von Daten beinhalten eine Parametermittelung und einen aktualisierungsbasierten Datenparallelismus. Die Parametermittelung trainiert jeden Knoten an einer Teilmenge der Trainingsdaten und setzt die globalen Parameter (z. B. Gewichtungen, Bias) auf den Mittelwert der Parameter von jedem Knoten. Die Parametermittelung verwendet einen zentralen Parameterserver, der die Parameterdaten pflegt. Die aktualisierungsbasierte Datenparallelität ist der Parametermittelung ähnlich, abgesehen davon, dass anstatt von Parametern von den Knoten an den Parameterserver die Aktualisierungen am Modell transferiert werden. Zusätzlich dazu kann die aktualisierungsbasierte Datenparallelität dezentral durchgeführt werden, wobei die Aktualisierungen komprimiert und zwischen Knoten transferiert werden.
  • Kombinierte Modell- und Datenparallelität 1206 kann zum Beispiel in einem verteilten System implementiert werden, in dem jeder Rechenknoten mehrere GPUs aufweist. Jeder Knoten kann eine vollständige Instanz des Modells aufweisen, wobei separate GPUs innerhalb jedes Knotens dazu verwendet werden, verschiedene Abschnitte des Modells zu trainieren.
  • Verteiltes Training hat einen erhöhten Mehraufwand im Vergleich zum Training auf einer einzelnen Maschine. Die hierin beschriebenen Parallelprozessoren und GPGPUs können jedoch jeweils verschiedene Techniken implementieren, um den Overhead des verteilten Trainings zu reduzieren, einschließlich Techniken zum Ermöglichen eines GPU-zu-GPU-Datentransfers mit hoher Bandbreite und einer beschleunigten Ferndatensynchronisation.
  • 12B ist ein Blockdiagramm, das eine programmierbare Netzwerkschnittstelle 1210 und eine Datenverarbeitungseinheit veranschaulicht. Die programmierbare Netzwerkschnittstelle 1210 ist eine programmierbare Netzwerk-Engine, die verwendet werden kann, um netzwerkbasierte Rechenaufgaben innerhalb einer verteilten Umgebung zu beschleunigen. Die programmierbare Netzwerkschnittstelle 1210 kann über eine Hostschnittstelle 1270 mit einem Hostsystem gekoppelt sein. Die programmierbare Netzwerkschnittstelle 1210 kann verwendet werden, um Netzwerk- oder Speicherungsoperationen für CPUs oder GPUs des Hostsystems zu beschleunigen. Das Hostsystem kann zum Beispiel ein Knoten eines verteilten Lernsystems sein, das zum Durchführen eines verteilten Trainings verwendet wird, wie zum Beispiel in 12A gezeigt ist. Das Hostsystem kann auch ein Rechenzentrumsknoten innerhalb eines Rechenzentrums sein.
  • In einer Ausführungsform kann der Zugriff auf eine entfernte Speicherung, die Modelldaten enthält, durch die programmierbare Netzwerkschnittstelle 1210 beschleunigt werden. Zum Beispiel kann die programmierbare Netzwerkschnittstelle 1210 dazu ausgelegt sein, dem Hostsystem entfernte Speicherungsvorrichtungen als lokale Speicherungsvorrichtungen zu präsentieren. Die programmierbare Netzwerkschnittstelle 1210 kann auch Remote-Direct-Memory-Access(RDMA)-Operationen beschleunigen, die zwischen GPUs des Hostsystems mit GPUs von entfernten Systemen durchgeführt werden. In einer Ausführungsform kann die programmierbare Netzwerkschnittstelle 1210 eine Speicherungsfunktionalität, wie etwa unter anderem NVME-oF, ermöglichen. Die programmierbare Netzwerkschnittstelle 1210 kann auch Verschlüsselung, Datenintegrität, Komprimierung und andere Operationen zur entfernten Speicherung für das Hostsystem beschleunigen, wodurch ermöglicht wird, dass sich die entfernte Speicherung den Latenzen von Speicherungsvorrichtungen annähert, die direkt an das Hostsystem angeschlossen sind.
  • Die programmierbare Netzwerkschnittstelle 1210 kann auch Ressourcenzuweisung und -verwaltung für das Hostsystem durchführen. Speicherungssicherheitsoperationen können an die programmierbare Netzwerkschnittstelle 1210 abgegeben und in Übereinstimmung mit der Zuweisung und Verwaltung von entfernten Speicherungsressourcen durchgeführt werden. Netzwerkbasierte Operationen zum Verwalten von Zugriff auf die entfernte Speicherung, die ansonsten durch einen Prozessor des Hostsystems durchgeführt würden, können stattdessen durch die programmierbare Netzwerkschnittstelle 1210 durchgeführt werden.
  • In einer Ausführungsform können Netzwerk- und/oder Datensicherheitsoperationen von dem Hostsystem an die programmierbare Netzwerkschnittstelle 1210 abgegeben werden. Datenzentrumssicherheitsrichtlinien für einen Datenzentrumsknoten können von der programmierbaren Netzwerkschnittstelle 1210 anstelle der Prozessoren des Hostsystems gehandhabt werden. Zum Beispiel kann die programmierbare Netzwerkschnittstelle 1210 einen versuchten netzwerkbasierten Angriff (z. B. DDoS) auf das Hostsystem detektieren und diesen eindämmen, wodurch verhindert wird, dass der Angriff die Verfügbarkeit des Hostsystems beeinträchtigt.
  • Die programmierbare Netzwerkschnittstelle 1210 kann ein Ein-Chip-System (SoC 1220) beinhalten, das ein Betriebssystem über mehrere Prozessorkerne 1222 ausführt. Die Prozessorkerne 1222 können Universalprozessor(z. B. CPU)-Kerne beinhalten. In einer Ausführungsform können die Prozessorkerne 1222 auch einen oder mehrere GPU-Kerne beinhalten. Das SoC 1220 kann Anweisungen ausführen, die in einer Speichervorrichtung 1240 gespeichert sind. Eine Speicherungsvorrichtung 1250 kann lokale Betriebssystemdaten speichern. Die Speicherungsvorrichtung 1250 und Speichervorrichtung 1240 können auch verwendet werden, um Ferndaten für das Hostsystem zwischenzuspeichern. Netzwerkanschlüsse 1260A-1260B ermöglichen eine Verbindung mit einem Netzwerk oder einem Fabric und ermöglichen einen Netzwerkzugriff für das SoC 1220 und über die Hostschnittstelle 1270 für das Hostsystem. Die programmierbare Netzwerkschnittstelle 1210 kann auch eine E/A-Schnittstelle 1275, wie etwa eine USB-Schnittstelle, beinhalten. Die E/A-Schnittstelle 1275 kann verwendet werden, um externe Vorrichtungen mit der programmierbaren Netzwerkschnittstelle 1210 oder als eine Debug-Schnittstelle zu koppeln. Die programmierbare Netzwerkschnittstelle 1210 beinhaltet auch eine Verwaltungsschnittstelle 1230, die ermöglicht, dass Software auf der Hostvorrichtung die programmierbare Netzwerkschnittstelle 1210 und/oder das SoC 1220 verwaltet und konfiguriert. In einer Ausführungsform kann die programmierbare Netzwerkschnittstelle 1210 auch eine oder mehrere Beschleuniger oder eine oder mehrere GPUs 1245 beinhalten, um das Auslagern von parallelen Rechenaufgaben von dem SoC 1220, dem Hostsystem oder den Fernsystemen, die über die Netzwerkanschlüsse 1260A-1260B gekoppelt sind, zu akzeptieren.
  • Beispielhafte Maschinenlernanwendungen
  • Maschinelles Lernen kann zur Lösung einer Vielzahl von technologischen Problemen eingesetzt werden, darunter unter anderem Computer Vision, autonomes Fahren und Navigation, Spracherkennung und Sprachverarbeitung. Computer Vision ist traditionell eines der aktivsten Forschungsgebiete für Maschinenlernanwendungen. Anwendungen von Computer Vision reichen von der Reproduktion menschlicher visueller Fähigkeiten, wie zum Beispiel dem Erkennen von Gesichtern, bis hin zu der Erzeugung neuer Kategorien visueller Fähigkeiten. Zum Beispiel können Computer-Vision-Anwendungen dazu ausgelegt sein, Schallwellen aus den Vibrationen zu erkennen, die in den in einem Video sichtbaren Objekten induziert werden. Parallelprozessorbeschleunigtes maschinelles Lernen ermöglicht es, Computer-Vision-Anwendungen durch Verwenden erheblich größerer Trainingsdatensätze zu trainieren, als dies bisher möglich war, und ermöglicht es, Inferenzierungssysteme durch Verwenden von Parallelprozessoren mit niedriger Leistung einzusetzen.
  • Parallelprozessorbeschleunigtes maschinelles Lernen hat Anwendungen für autonomes Fahren, die Spur- und Verkehrszeichenerkennung, Hindernisvermeidung, Navigation und Fahrsteuerung beinhalten. Beschleunigte Maschinenlerntechniken können verwendet werden, um Fahrmodelle basierend auf Datensätzen zu trainieren, die die geeigneten Antworten auf spezifische Trainingseingaben definieren. Die hierin beschriebenen Parallelprozessoren können ein schnelles Training der zunehmend komplexen neuronalen Netze, die für Lösungen zum autonomen Fahren verwendet werden, ermöglichen, und ermöglichen den Einsatz von Inferenzierungsprozessoren mit niedriger Leistung in einer mobilen Plattform, die zur Integration in autonome Fahrzeuge geeignet ist.
  • Parallelprozessorbeschleunigte tiefe neuronale Netze haben Ansätze für maschinelles Lernen zur automatischen Spracherkennung (ASR) ermöglicht. ASR beinhaltet das Erstellen einer Funktion, die bei einer eingegebenen akustischen Sequenz die wahrscheinlichste linguistische Sequenz berechnet. Beschleunigtes maschinelles Lernen unter Verwendung tiefer neuronaler Netze hat es ermöglicht, die bisher für ASR verwendeten Hidden-Markov-Modelle (HMM) und Gaußschen Mischmodelle (GMM) zu ersetzen.
  • Parallelprozessorbeschleunigtes maschinelles Lernen kann auch zur Beschleunigung der Verarbeitung natürlicher Sprache verwendet werden. Prozeduren für automatisches Lernen können statistische Inferenzalgorithmen verwenden, 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 zum maschinellen Lernen verwendeten parallelen Verarbeitungsplattformen können in Trainingsplattformen und Einsatzplattformen unterteilt werden. Trainingsplattformen sind im Allgemeinen stark parallel und beinhalten Optimierungen zum Beschleunigen von Multi-GPU-Einzelknoten-Training und Multi-Knoten-Multi-GPU-Training. Zu beispielhaften Parallelprozessoren, die sich für das Training eignen, gehören die Universalgrafikverarbeitungseinheit 700 von 7 und das Multi-GPU-Rechensystem 800 von 8. Eingesetzte Maschinenlernpattformen beinhalten dagegen im Allgemeinen Niederleistungs-Parallelprozessoren, die zur Verwendung in Produkten wie Kameras, autonomen Robotern und autonomen Fahrzeugen geeignet sind.
  • Außerdem können Maschinenlerntechniken angewendet werden, um Grafikverarbeitungsaktivitäten zu beschleunigen oder zu verbessern. Zum Beispiel kann ein Maschinenlernmodell dazu trainiert werden, eine Ausgabe zu erkennen, die durch eine GPUbeschleunigte Anwendung erzeugt wird, und eine aufwärtsskalierte Version dieser Ausgabe zu erzeugen. Solche Techniken können angewendet werden, um die Erzeugung hochauflösender Bilder für eine Gaming-Anwendung zu beschleunigen. Verschiedene andere Grafik-Pipeline-Aktivitäten können von der Verwendung von maschinellem Lernen profitieren. Zum Beispiel können Maschinenlernmodelle dazu trainiert werden, Tessellationsoperationen an Geometriedaten durchzuführen, um die Komplexität geometrischer Modelle zu erhöhen, wodurch ermöglicht wird, dass eine Geometrie mit feinem Detail automatisch aus einer Geometrie mit relativ geringerem Detail erzeugt wird.
  • 13 veranschaulicht ein beispielhaftes inferenzierendes Ein-Chip-System (SOC) 1300, das zum Durchführen von Inferenzieren unter Verwendung eines trainierten Modells geeignet ist. Das SOC 1300 kann Verarbeitungskomponenten integrieren, darunter einen Medienprozessor 1302, einen Bildverarbeitungsprozessor 1304, eine GPGPU 1306 und einen Mehrkernprozessor 1308. Die GPGPU 1306 kann eine hierin beschriebene GPGPU 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 chipinternen Speicher 1305 beinhalten, der einen gemeinsam genutzten chipinternen Datenpool ermöglichen kann, auf den jede der Verarbeitungskomponenten zugreifen kann. Die Verarbeitungskomponenten können für einen Niedrigleistungsbetrieb optimiert sein, um den Einsatz auf einer Vielfalt von Maschinenlernplattformen zu ermöglichen, einschließlich autonomer Fahrzeuge und autonomer Roboter. Eine Implementierung des SOC 1300 kann zum Beispiel 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 dahingehend ausgelegt und konfiguriert, die relevanten Standards funktionaler Sicherheit der Gerichtsbarkeit des Einsatzortes zu erfüllen.
  • Während des Betriebs können der Medienprozessor 1302 und der Bildverarbeitungsprozessor 1304 zusammenarbeiten, um Computer-Vision-Operationen zu beschleunigen. Der Medienprozessor 1302 kann eine latenzarme Decodierung mehrerer hochauflösender Videoströme (z. B. 4K, 8K) ermöglichen. Die decodierten Videoströme können in einen Puffer in dem chipinternen Speicher 1305 geschrieben werden. Der Bildverarbeitungsprozessor 1304 kann dann das decodierte Video parsen und vorläufige Verarbeitungsoperationen an den Frames des decodierten Videos als Vorbereitung der Verarbeitung der Frames unter Verwendung eines trainierten Bilderkennungsmodells durchführen. Beispielsweise kann der Bildverarbeitungsprozessor 1304 die Faltungsoperationen für ein CNN beschleunigen, das zur Durchführung von Bilderkennung an den hochauflösenden Videodaten verwendet wird, während die Backend-Modellberechnungen durch die GPGPU 1306 durchgeführt werden.
  • Der Mehrkernprozessor 1308 kann eine Steuerlogik beinhalten, die bei der Sequenzierung und Synchronisierung von Datenübertragungen und gemeinsamen Speicheroperationen hilft, die durch den Medienprozessor 1302 und den Bilderkennungsprozessor 1304 durchgeführt werden. Der Mehrkernprozessor 1308 kann zudem als Anwendungsprozessor fungieren, um Softwareanwendungen auszuführen, die die Inferenzrechenfähigkeit der GPGPU 1306 nutzen können. Zum Beispiel kann zumindest ein Teil der Navigations- und Fahrlogik in Software implementiert sein, die auf dem Mehrkernprozessor 1308 ausgeführt wird. Derartige Software kann direkt Rechenarbeitslasten 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 Niederleistungskonfiguration der Verarbeitungscluster 706A-706H innerhalb der Universalgrafikverarbeitungseinheit 700. Die Rechencluster innerhalb der GPGPU 1306 können Anweisungen unterstützen, die spezifisch zur Durchführung von Inferenzberechnungen an einem trainierten neuronalen Netz optimiert sind. Zum Beispiel kann die GPGPU 1306 Anweisungen zum Durchführen von Berechnungen mit niedriger Genauigkeit unterstützen, wie etwa 8-Bit- und 4-Bit-Ganzzahlvektoroperationen.
  • Überblick über Zusatzsystem
  • 14 ist ein Blockdiagramm eines Verarbeitungssystems 1400. Die Elemente von 14 mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder funktionieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt. Das System 1400 kann in einem Einzelprozessor-Desktopsystem, einem Mehrprozessor-Arbeitsplatzsystem oder einem Serversystem mit einer großen Anzahl von Prozessoren 1402 oder Prozessorkernen 1407 verwendet werden. Das System 1400 kann eine Verarbeitungsplattform sein, die in eine integrierte Ein-Chip-System-Schaltung (SoC-Schaltung) zur Verwendung in mobilen, tragbaren oder eingebetteten Vorrichtungen, wie zum Beispiel in Internet-der-Dinge(IoT)-Vorrichtungen mit verkabelter oder kabelloser Konnektivität mit einem lokalen oder Weitverkehrsnetz, eingebunden ist.
  • Das System 1400 kann ein Verarbeitungssystem mit Komponenten sein, die denen von 1 entsprechen. Beispielsweise können in unterschiedlichen Konfigurationen ein oder mehrere Prozessoren 1402 oder ein oder mehrere Prozessorkerne 1407 dem einen bzw. den mehreren Prozessoren 102 von 1 entsprechen. Ein oder mehrere Grafikprozessoren 1408 können dem einen oder den mehreren Parallelprozessoren 112 von 1 entsprechen. Ein externer Grafikprozessor 1418 kann eine der einen oder der mehreren Erweiterungsvorrichtungen 120 von 1 sein.
  • Das Verarbeitungssystem 1400 kann eine serverbasierte Spieleplattform, eine Spielekonsole, einschließlich einer Spiele- und Medienkonsole, einer mobilen Spielekonsole, einer tragbaren Spielekonsole oder einer Online-Spielekonsole, enthalten oder mit einer solchen koppeln. Das System 1400 kann Teil eines Mobiltelefons, Smartphones, einer Tablet-Rechenvorrichtung oder mobilen, mit dem Internet verbundenen Vorrichtung sein, wie eines Laptops mit geringer interner Speicherkapazität. Das Verarbeitungssystem 1400 kann auch eine tragbare Vorrichtung enthalten, an eine solche koppeln oder in eine solche integriert sein, wie eine tragbare Smartwatch-Vorrichtung; Smart-Brillen oder Kleidung, die mit Funktionen erweiterter Realität (AR) oder virtueller Realität (VR) erweitert ist bzw. sind, um visuelle, Audio- oder taktile Ausgaben bereitzustellen, um reale visuelle, Audio- oder taktile Erfahrungen zu ergänzen oder anderweitig Text, Audio, Grafik, Video, holografische Bilder oder holografisches Video oder eine taktile Rückmeldung bereitzustellen; eine andere Vorrichtung für erweiterte Realität (AR); oder eine andere Vorrichtung für virtuelle Realität (VR). Das Verarbeitungssystem 1400 kann ein Fernsehgerät oder eine Set-Top-Box-Vorrichtung beinhalten oder ein Teil davon sein. Das System 1400 kann enthalten, koppeln mit oder integriert sein in ein selbstfahrendes Fahrzeug, wie einem Bus, Traktoranhänger, Auto, Motorrad oder elektrisch angetriebenen Fahrrad, einem Flugzeug oder Gleitflieger (oder einer beliebigen Kombination daraus). Das selbstfahrende Fahrzeug kann das System 1400 verwenden, um die um das Fahrzeug herum erfasste Umgebung zu verarbeiten.
  • Der eine oder die mehreren Prozessoren 1402 können einen oder mehrere Prozessorkerne 1407 beinhalten, um Anweisungen zu verarbeiten, die bei Ausführung Operationen für System- oder Benutzersoftware durchführen. Der mindestens eine des einen oder der mehreren Prozessorkerne 1407 kann dazu ausgelegt sein, einen spezifischen Anweisungssatz 1409 zu verarbeiten. Der Anweisungssatz 1409 kann ein Rechnen mit komplexem Anweisungssatz (CISC), ein Rechnen mit reduziertem Anweisungssatz (RISC) oder ein Rechnen über ein Very Long Instruction Word (VLIW) ermöglichen. Ein oder mehrere Prozessorkerne 1407 können einen anderen Anweisungssatz 1409 verarbeiten, der Anweisungen enthalten kann, um die Emulation anderer Anweisungssätze zu ermöglichen. Der Prozessorkern 1407 kann auch andere Verarbeitungsvorrichtungen wie einen digitalen Signalprozessor (DSP) enthalten.
  • Der Prozessor 1402 kann einen Zwischenspeicherspeicher 1404 beinhalten. Abhängig von der Architektur kann der Prozessor 1402 einen einzelnen internen Zwischenspeicher oder mehrere Ebenen von internen Zwischenspeichern aufweisen. In einigen Ausführungsformen wird der Zwischenspeicher unter verschiedenen Komponenten des Prozessors 1402 gemeinsam genutzt. In einigen Ausführungsformen verwendet der Prozessor 1402 auch einen externen Zwischenspeicher (z. B. einen Level-3(L3)-Zwischenspeicher oder einen Last-Level-Zwischenspeicher (LLC)) (nicht gezeigt), der von den Prozessorkernen 1407 unter Verwendung bekannter Zwischenspeicherkohärenztechniken gemeinsam genutzt werden kann. Eine Registerdatei 1406 kann zusätzlich im Prozessor 1402 enthalten sein und kann unterschiedliche Arten von Registern zum Speichern unterschiedlicher Datentypen enthalten (z. B. Ganzzahlregister, Gleitkommaregister, Statusregister und ein Anweisungszeigerregister). Einige Register können Universalregister 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 zum Übertragen von Kommunikationssignalen, wie etwa Adress-, Daten- oder Steuersignalen, zwischen dem Prozessor 1402 und anderen Komponenten in dem System 1400 gekoppelt sein. Der Schnittstellenbus 1410 kann in einer dieser Ausführungsformen ein Prozessorbus sein, wie etwa eine Version eines Mediendirektschnittstellen(DMI)-Busses. Prozessorbusse sind jedoch nicht auf einen DMI-Bus beschränkt und können einen oder mehrere Peripheral-Component-Interconnect-Busse (z. B. PCI, PCI Express) Speicherbusse oder andere Arten von Schnittstellenbussen beinhalten. Beispielsweise kann bzw. können der Prozessor bzw. die Prozessoren 1402 eine integrierte Speichersteuerung 1416 und einen Plattformsteuerungshub 1430 beinhalten. Die Speichersteuerung 1416 ermöglicht eine Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 1400, während der Plattformsteuerungshub (PCH) 1430 Verbindungen mit E/A-Vorrichtungen über einen lokalen E/A-Bus bereitstellt.
  • Die Speichervorrichtung 1420 kann eine dynamische Speichervorrichtung mit wahlfreiem Zugriff (DRAM-Vorrichtung), eine statische Speichervorrichtung mit wahlfreiem Zugriff (SRAM-Vorrichtung), eine Flashspeichervorrichtung, eine Phasenwechselspeichervorrichtung 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 zu speichern, die verwendet werden, wenn der eine oder die mehreren Prozessoren 1402 eine Anwendung oder einen Prozess ausführen. Die Speichersteuerung 1416 koppelt auch an einen optionalen externen Grafikprozessor 1418, der mit dem einen oder den mehreren Grafikprozessoren 1408 in den Prozessoren 1402 kommunizieren kann, um Grafik- und Medienoperationen durchzuführen. In einigen Ausführungsformen können Grafik-, Medien- oder Rechenoperationen durch einen Beschleuniger 1412 unterstützt werden, der ein Coprozessor ist, der ausgelegt sein kann, einen Sondersatz von Grafik-, Medien- oder Rechenoperationen durchzuführen. Beispielsweise kann der Beschleuniger 1412 ein Matrixmultiplikationsbeschleuniger sein, der verwendet wird, um Maschinenlern- oder Rechenoperationen zu optimieren. Der Beschleuniger 1412 kann ein Raytracingbeschleuniger sein, der verwendet werden kann, um zusammen mit dem Grafikprozessor 1408 Raytracingoperationen durchzuführen. In einer Ausführungsform kann ein externer Beschleuniger 1419 anstelle des Beschleunigers 1412 oder zusammen mit diesem verwendet werden.
  • Eine Anzeigevorrichtung 1411 kann vorgesehen sein, die an den einen oder die mehreren Prozessoren 1402 anbinden kann. Die Anzeigevorrichtung 1411 kann eine oder mehrere von einer internen Anzeigevorrichtung, wie zum Beispiel in einer mobilen elektronischen Vorrichtung oder einer Laptopvorrichtung, oder eine externe Anzeigevorrichtung sein, die über eine Anzeigeschnittstelle (z. B. DisplayPort usw.) angebunden ist. Die Anzeigevorrichtung 1411 kann eine am Kopf montierte Anzeige (HMD) wie eine stereoskopische Anzeigevorrichtung zur Verwendung in Anwendungen mit virtueller Realität (VR) oder Anwendungen mit erweiterter Realität (AR) sein.
  • Der Plattformsteuerungs-Hub 1430 kann den 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 beinhalten, ohne darauf beschränkt zu sein, eine Audiosteuerung 1446, eine Netzwerksteuerung 1434, eine Firmware-Schnittstelle 1428, einen drahtlosen Transceiver 1426, Berührungssensoren 1425, eine Datenspeichervorrichtung 1424 (z. B. nichtflüchtigen, Speicher, flüchtigen Speicher, Festplatte, Flashspeicher, NAND, 3D-NAND, 3D XPoint/Optane usw.). Die Datenspeichervorrichtung 1424 kann über eine Speicherschnittstelle (z. B. SATA) oder über einen peripheren Bus, wie einen Peripheral-Component-Interconnect-Bus (z. B. PCI, PCI Express) verbunden sein. Die Berührungssensoren 1425 können Berührungsbildschirmsensoren, Drucksensoren oder Fingerabdrucksensoren enthalten. Der drahtlose Sende-Empfänger 1426 kann ein WiFi-Sende-Empfänger, ein Bluetooth-Sende-Empfänger oder ein Sende-Empfänger für mobile Netzwerke sein, wie ein 3G-, 4G-, 5G- oder Long-Term-Evolution(LTE)-Sende-Empfänger. Die Firmwareschnittstelle 1428 ermöglicht eine Kommunikation mit Systemfirmware und kann beispielsweise eine Unified Extensible Firmware Interface (UEFI) sein. Die Netzwerksteuerung 1434 kann eine Netzwerkverbindung mit einem verdrahteten Netzwerk ermöglichen. In einigen Ausführungsformen koppelt eine Hochleistungsnetzwerksteuerung (nicht gezeigt) an den Schnittstellenbus 1410. Die Audiosteuerung 1446 kann eine Mehrkanal-High-Definition-Audiosteuerung sein. In einigen dieser Ausführungsformen enthält das System 1400 eine optionale Alt-E/A-Steuerung 1440, um Alt-Vorrichtungen (z. B. Personal System 2 (PS/2) an das System zu koppeln. Der Plattformsteuerungshub 1430 kann auch an eine oder mehrere Universal-Serial-Bus(USB)-Steuerungen 1442 anbinden, um Eingabevorrichtungen wie Tastatur- und Mauskombinationen 1443, eine Kamera 1444 oder andere USB-Eingabevorrichtungen anzubinden.
  • Es ist klar, dass das gezeigte System 1400 beispielhaft und nicht einschränkend ist, da andere Arten von Datenverarbeitungssystemen, die unterschiedlich konfiguriert sind, ebenfalls verwendet werden können. Eine Instanz der Speichersteuerung 1416 und des Plattformsteuerungshubs 1430 kann zum Beispiel in einen diskreten externen Grafikprozessor, wie den externen Grafikprozessor 1418 integriert sein. Der Plattformsteuerungshub 1430 und/oder die Speichersteuerung 1416 können zum einen oder zu den mehreren Prozessoren 1402 extern sein. Das System 1400 kann zum Beispiel eine externe Speichersteuerung 1416 und einen externen Plattformsteuerungshub 1430 enthalten, die als ein Speichersteuerungshub und ein peripherer Steuerungshub innerhalb eines Systemchipsatzes konfiguriert sein können, der in Kommunikation mit dem bzw. den Prozessor(en) 1402 steht.
  • Beispielsweise können Leiterplatten („Schlitten“) verwendet werden, auf denen Komponenten wie CPUs, Speicher und andere Komponenten platziert sind und die für erhöhte Wärmeleistung konstruiert sind. Verarbeitungskomponenten wie die Prozessoren können auf einer Oberseite eines Schlittens angeordnet sein, wohingegen naher Speicher, wie DIMMs, auf einer Unterseite des Schlittens angeordnet ist. Als Ergebnis des verbesserten Luftstroms, der von diesem Design geboten wird, können die Komponenten mit höheren Frequenzen und Energiepegeln als in typischen Systemen arbeiten, wodurch die Leistung verbessert wird. Darüber hinaus sind die Schlitten ausgelegt, blind mit Energie- und Datenkommunikationskabeln in einem Rack zusammenzupassen, wodurch ihre Fähigkeit verbessert wird, schnell entfernt, nachgerüstet, neu installiert und/oder ausgetauscht zu werden. Gleichermaßen sind individuelle Komponenten, die sich auf den Schlitten befinden, wie Prozessoren, Beschleuniger, Speicher und Datenspeicherungslaufwerke, ausgelegt, aufgrund ihrer erhöhten Beabstandung voneinander leicht hochgerüstet zu werden. In der veranschaulichenden Ausführungsform enthalten die Komponenten zusätzlich Hardwarebestätigungsmerkmale, um ihre Echtheit zu beweisen.
  • Ein Rechenzentrum kann eine einzelne Netzwerkarchitektur („Fabric“) einsetzen, die mehrere andere Netzwerkarchitekturen einschließlich Ethernet und Omni-Path unterstützt. Die Schlitten können über Lichtwellenleiter, die eine höhere Bandbreite und geringere Latenz als übliche verdrillte Leitungskabel (z. B. Kategorie 5, Kategorie 5e, Kategorie 6 usw.) bieten, an Switches gekoppelt sein. Aufgrund der hohen Bandbreite, Zwischenverbindungen mit geringer Latenz und Netzarchitektur kann das Rechenzentrum in Verwendung Ressourcen wie Speicher, Beschleuniger (z. B. GPUs, Grafikbeschleuniger, FPGAs, ASICs, neuronale Netze und/oder Beschleuniger mit künstlicher Intelligenz usw.) und Datenspeicherlaufwerke, die physisch getrennt sind, zusammenlegen und diese Rechenressourcen (z. B. Prozessoren) bei Bedarf bereitstellen, was den Rechenressourcen ermöglicht, auf die zusammengelegten Ressourcen zuzugreifen, als ob sie lokal wären.
  • Eine Energieversorgung oder -quelle kann das System 1400 oder eine beliebige Komponente oder ein beliebiges System, die bzw. das hierin beschrieben ist, mit Spannung und/oder Strom versorgen. In einem Beispiel enthält die Energieversorgung einen Wechselstrom-auf-Gleichstrom(AC-DC)-Adapter, der in eine Wandsteckdose zu stecken ist. Eine derartige Wechselstromversorgung kann eine Energiequelle erneuerbarer Energie (z. B. Sonnenenergie) sein. In einem Beispiel enthält die Energiequelle eine Gleichstromquelle, wie einen externen AC-DC-Wandler. Eine Leistungsquelle oder Leistungsversorgung kann auch Drahtlosladehardware zum Laden über die Nähe zu einem Ladefeld beinhalten. Die Leistungsquelle kann eine interne Batterie, eine Wechselstromversorgung, eine bewegungsbasierte Leistungsversorgung, eine Solarenergieversorgung oder eine Brennstoffzellenquelle beinhalten.
  • 15A-15C veranschaulichen Datenverarbeitungssysteme und Grafikprozessoren. Die Elemente von 15A-15C mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder funktionieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt.
  • 15A ist ein Blockdiagramm eines Prozessors 1500, der eine Variante eines der Prozessoren 1402 sein kann und anstelle eines dieser verwendet werden kann. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit dem Prozessor 1500 hierin auch eine entsprechende Kombination mit dem einen oder den mehreren Prozessoren 1402, ist aber nicht darauf beschränkt. Der Prozessor 1500 kann einen oder mehrere Prozessorkerne 1502A-1502N, eine integrierte Speichersteuerung 1514 und einen integrierten Grafikprozessor 1508 aufweisen. Wenn ein integrierter Grafikprozessor 1508 ausgeschlossen ist, enthält das System, das den Prozessor enthält, eine Grafikprozessorvorrichtung innerhalb eines Systemchipsatzes oder ist über einen Systembus gekoppelt. Der Prozessor 1500 kann zusätzliche Kerne bis zu und enthaltend einen zusätzlichen Kern 1502N enthalten, die durch die gestrichelt umrandeten Kästchen dargestellt sind. Jeder der Prozessorkerne 1502A-1502N enthält eine oder mehrere interne Zwischenspeichereinheiten 1504A-1504N. In einigen Ausführungsformen weist jeder Prozessorkern 1502A-1502N auch Zugriff auf eine oder mehrere gemeinsam genutzte Zwischenspeichereinheiten 1506 auf. Die internen Zwischenspeichereinheiten 1504A-1504N und die gemeinsam genutzten Zwischenspeichereinheiten 1506 stellen innerhalb des Prozessors 1500 eine Zwischenspeicherhierarchie dar. Die Zwischenspeicherhierarchie kann mindestens eine Ebene von Anweisungs- und Datenzwischenspeicher innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen von gemeinsam genutztem Zwischenspeicher einer mittleren Ebene, wie einen Level-2(L2)-, Level-3(L3)-, Level-4(L4)-Zwischenspeicher oder einen Zwischenspeicher anderer Ebenen, wobei die höchste Zwischenspeicherebene vor dem externen Speicher als LLC klassifiziert ist. In einigen Ausführungsformen hält Zwischenspeicherkohärenzlogik eine Kohärenz zwischen den verschiedenen Zwischenspeichereinheiten 1506 und 1504A-1504N aufrecht.
  • Der Prozessor 1500 kann zudem einen Satz aus einer oder mehreren Bussteuerungseinheiten 1516 und einen Systemagentenkern 1510 beinhalten. Die eine oder die mehreren Bussteuereinheiten 1516 verwalten einen Satz von peripheren Bussen, wie einen oder mehrere PCI- oder PCI-Express-Busse. Der Systemagentenkern 1510 bietet Verwaltungsfunktionalität für die verschiedenen Prozessorkomponenten. Der Systemagentenkern 1510 kann eine oder mehrere integrierte Speichersteuerungen 1514 beinhalten, um den Zugriff auf verschiedene externe Speichervorrichtungen (nicht gezeigt) zu verwalten.
  • Beispielsweise können einer oder mehrere der Kerne 1502A-1502N Unterstützung für gleichzeitiges Multithreading beinhalten. Der Systemagentenkern 1510 beinhaltet Komponenten zum Koordinieren und Betreiben der Kerne 1502A-1502N während einer Multithreading-Verarbeitung. Der Systemagentenkern 1510 kann zusätzlich eine Leistungssteuereinheit (PCU) enthalten, die Logik und Komponenten enthält, um den Leistungszustand der Prozessorkerne 1502A-1502N und des Grafikprozessors 1508 zu regeln.
  • Der Prozessor 1500 kann zusätzlich einen Grafikprozessor 1508 zum Ausführen von Grafikverarbeitungsoperationen beinhalten. In einigen dieser Ausführungsformen koppelt der Grafikprozessor 1508 an den Satz von gemeinsam genutzten Zwischenspeichereinheiten 1506 und den Systemagentenkern 1510, einschließlich des einen oder der mehreren integrierten Speichersteuerungen 1514. Der Systemagentenkern 1510 kann auch eine Anzeigesteuerung 1511 zum Lenken der Grafikprozessorausgabe an eine oder mehrere gekoppelte Anzeigen beinhalten. Die Anzeigesteuerung 1511 kann auch ein separates Modul sein, das über mindestens eine Zwischenverbindung an den Grafikprozessor gekoppelt ist, oder kann innerhalb des Grafikprozessors 1508 integriert sein.
  • Eine Zwischenverbindungseinheit auf Ringbasis 1512 kann verwendet werden, um die internen Komponenten des Prozessors 1500 zu koppeln. Es kann jedoch eine alternative Zwischenverbindungseinheit verwendet werden, wie zum Beispiel eine Punkt-zu-Punkt-Zwischenverbindung, eine geschaltete Zwischenverbindung oder andere Techniken, einschließlich von Techniken, wie sie auf dem Fachgebiet wohlbekannt sind. In einigen dieser Ausführungsformen mit einer ringbasierten Zwischenverbindung 1512 ist der Grafikprozessor 1508 mit der ringbasierten Zwischenverbindung 1512 über eine E/A-Verbindung 1513 gekoppelt.
  • Die beispielhafte E/A-Verknüpfung 1513 stellt mindestens eine von mehreren Varianten von E/A-Zwischenverbindungen dar, einschließlich einer gehäuseinternen E/A-Zwischenverbindung, die eine Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 1518 ermöglicht, wie einem eDRAM-Modul. Optional kann jeder der Prozessorkerne 1502A-1502N und der Grafikprozessor 1508 eingebettete Speichermodule 1518 als einen gemeinsam genutzten Last-Level-Zwischenspeicher verwenden.
  • Die Prozessorkerne 1502A-1502N können zum Beispiel homogene Kerne sein, die dieselbe Anweisungssatzarchitektur ausführen. Alternativ sind die Prozessorkerne 1502A-1502N in Bezug auf die Anweisungssatzarchitektur (ISA) heterogen, wobei einer oder mehrere der Prozessorkerne 1502A-1502N einen ersten Anweisungssatz ausführen, während mindestens einer der anderen Kerne eine Teilmenge des ersten Anweisungssatzes oder einen anderen Anweisungssatz ausführt. Die Prozessorkerne 1502A-1502N können in Bezug auf die Mikroarchitektur heterogen sein, wobei ein oder mehrere Kerne mit einem relativ hohen Leistungsverbrauch an einen oder mehrere Leistungskerne mit einem niedrigeren Leistungsverbrauch koppeln. Als weiteres Beispiel sind die Prozessorkerne 1502A-1502N hinsichtlich der Rechenfähigkeit heterogen. Zusätzlich kann der Prozessor 1500 auf einem oder mehreren Chips oder als eine integrierte SoC-Schaltung implementiert werden, der zusätzlich zu anderen Komponenten die illustrierten Komponenten aufweist.
  • 15B ist ein Blockdiagramm von Hardwarelogik eines Grafikprozessorkerns 1519 nach einigen hierin beschriebenen Ausführungsformen. Der Grafikprozessorkern 1519, manchmal als ein Kernsegment bezeichnet, kann ein oder mehrere Grafikkerne in einem modularen Grafikprozessor sein. Der Grafikprozessorkern 1519 ist beispielhaft für ein Grafikkernsegment, und ein Grafikprozessor wie hierin beschrieben kann mehrere Grafikkernsegmente auf Grundlage von Zielleistung und Leistungsprofil enthalten. Jeder Grafikprozessorkern 1519 kann einen festen Funktionsblock 1530 enthalten, der an mehrere Subkerne 1521A-1521F gekoppelt ist, auch als Teilsegmente bezeichnet, die modulare Blöcke von Universal- und fester Funktionslogik enthalten. In einer Konfiguration ist ein Subkern (Sub-Slice) der mehreren Subkerne 1521A-1521F ein architektonisches Äquivalent zu einem Grafik-Multiprozessor 234 von 2D, Grafikmultiprozessor 325 von 3A und/oder eine Mehrkerngruppe der Mehrkerngruppen 365A-365N von 3C.
  • Der feste Funktionsblock 1530 kann eine Geometrie-/feste Funktionspipeline 1531 beinhalten, die von allen Subkernen im Grafikprozessorkern 1519 gemeinsam genutzt werden kann, zum Beispiel in Grafikprozessorimplementierungen mit niedrigerer Leistungsfähigkeit und/oder niedrigerer Leistung. Die Geometrie-/feste Funktionspipeline 1531 kann eine feste 3D-Funktionspipeline (z. B. die 3D-Pipeline 1612 in 16A, wie unten beschrieben), eine Video-Frontend-Einheit, einen Threaderzeuger und einen Thread-Dispatcher und eine vereinheitlichte Rückgabepufferverwaltung beinhalten, die vereinheitlichte Rückgabepuffer verwaltet (z. B. den vereinheitlichten Rückgabepuffer 1718 in 17, wie unten beschrieben).
  • Der feste Funktionsblock 1530 kann auch eine Grafik-SoC-Schnittstelle 1532, einen Grafikmikrocontroller 1533 und eine Medienpipeline 1534 beinhalten. Die Grafik-SoC-Schnittstelle 1532 bietet eine Schnittstelle zwischen dem Grafikprozessorkern 1519 und anderen Prozessorkernen innerhalb einer integrierten Ein-Chip-System-Schaltung. Der Grafikmikrocontroller 1533 ist ein programmierbarer Subprozessor, der konfigurierbar ist, um verschiedene Funktionen des Grafikprozessorkerns 1519, einschließlich von Threadversand, Planung und Vorwegnahme zu verwalten. Die Medienpipeline 1534 (z. B. die Medienpipeline 1616 von 16A und 17) enthält Logik, um das Decodieren, Codieren, Vorverarbeiten und/oder Nachbearbeiten von Multimediadaten, einschließlich Bild- und Videodaten zu ermöglichen. Die Medienpipeline 1534 implementiert Medienoperationen über Anforderungen an Rechen- oder Abtastlogik in den Subkernen 1521-1521F.
  • Die SoC-Schnittstelle 1532 kann dem Grafikprozessorkern 1519 ermöglichen, mit Universalanwendungsprozessorkernen (z. B. CPUs) und/oder anderen Komponenten innerhalb eines SoC, einschließlich Speicherhierarchieelementen wie eines gemeinsam genutzten Last-Level-Zwischenspeichers, des System-RAM und/oder eingebettetem chipinternem oder paketinternem DRAM, zu kommunizieren. Die SoC-Schnittstelle 1532 kann auch eine Kommunikation mit festen Funktionsvorrichtungen im SoC, wie Kameraabbildungspipelines ermöglichen und ermöglicht die Verwendung von und/oder implementiert globale Speicheratomik, die unter dem Grafikprozessorkern 1519 und CPUs innerhalb des SoC gemeinsam genutzt werden kann. Die SoC-Schnittstelle 1532 kann auch Energieverwaltungssteuerungen für den Grafikprozessorkern 1519 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Grafikprozessorkerns 1519 und anderen Taktdomänen innerhalb des SoC ermöglichen. Optional ermöglicht die SoC-Schnittstelle 1532 einen Empfang von Befehlspuffern von einer Befehlsstreamingeinheit und einem globalen Thread-Dispatcher, die ausgelegt sind, jedem von einem oder mehreren Grafikkernen innerhalb eines Grafikprozessors Befehle und Anweisungen bereitzustellen. Die Befehle und Anweisungen können an die Medienpipeline 1534 vergeben werden, wenn Medienoperationen durchzuführen sind, oder an eine Geometrie- und feste Funktionspipeline (z. B. die Geometrie- und feste Funktionspipeline 1531, die Geometrie- und feste Funktionspipeline 1537), wenn Grafikverarbeitungsoperationen durchzuführen sind.
  • Der Grafikmikrocontroller 1533 kann ausgelegt sein, verschiedene Planungs- und Verwaltungsaufgaben für den Grafikprozessorkern 1519 durchzuführen. In einer Konfiguration kann der Grafikmikrocontroller 1533 beispielsweise eine Grafik- und/oder Rechenarbeitslastplanung an den verschiedenen parallelen Grafikengines innerhalb der Ausführungseinheitsarrays (EU-Arrays) 1522A-1522F, 1524A-1524F innerhalb der Subkerne 1521A-1521F durchführen. Bei dieser Arbeitslastplanung kann Hostsoftware, die auf einem CPU-Kern eines SoC ausgeführt wird, das den Grafikprozessorkern 1519 enthält, Arbeitslasten an eine von mehreren Grafikprozessordoorbells schicken, die eine Planungsoperation auf der jeweiligen Grafikengine aufruft. Planungsoperationen enthalten ein Ermitteln, welche Arbeitslast als Nächstes auszuführen ist, Übermitteln einer Arbeitslast an eine Befehlsstreamingeinheit, Vorbelegen von bestehenden Arbeitslasten, die auf einer Engine laufen, Überwachen eines Fortschritts einer Arbeitslast und Benachrichtigen einer Hostsoftware, wenn eine Arbeitslast abgeschlossen ist. Optional kann der Grafikmikrocontroller 1533 auch Niedrigenergie- oder Leerlaufzustände für den Grafikprozessorkern 1519 ermöglichen, was dem Grafikprozessorkern 1519 die Fähigkeit gibt, Register innerhalb des Grafikprozessorkerns 1519 über Niedrigenergie-Übergänge hinweg unabhängig vom Betriebssystem und/oder der Grafiktreibersoftware auf dem System Register zu speichern und wiederherzustellen.
  • Der Grafikprozessorkern 1519 kann mehr oder weniger als die veranschaulichten Subkerne 1521A-1521F aufweisen, bis zu N modulare Subkerne. Für jeden Satz von N Subkernen kann der Grafikprozessorkern 1519 auch gemeinsam genutzte Funktionslogik 1535, gemeinsam genutzten Speicher und/oder Zwischenspeicher 1536, eine Geometrie-/feste Funktionspipeline 1537 sowie zusätzliche feste Funktionslogik 1538 enthalten, um verschiedene Grafik- und Rechenverarbeitungsoperationen zu beschleunigen. Die gemeinsam genutzte Funktionslogik 1535 kann mit der gemeinsam genutzten Funktionslogik 1720 von 17 assoziierte Logikeinheiten enthalten (z. B. Abtast-, Mathematik- und/oder Kommunikationslogik zwischen Threads), die von jedem der N Subkerne innerhalb des Grafikprozessorkerns 1519 gemeinsam genutzt werden können. Der gemeinsam genutzte Speicher und/oder Zwischenspeicher 1536 kann ein Last-Level-Zwischenspeicher für den Satz der N Subkerne 1521A-1521F innerhalb des Grafikprozessorkerns 1519 sein und kann auch als gemeinsam genutzter Speicher dienen, auf den von mehreren Subkernen zugegriffen werden kann. Die Geometrie-/feste Funktionspipeline 1537 kann anstatt der Geometrie-/festen Funktionspipeline 1531 innerhalb des festen Funktionsblocks 1530 enthalten sein und kann die gleichen oder ähnliche Logikeinheiten enthalten.
  • Der Grafikprozessorkern 1519 kann eine zusätzliche feste Funktionslogik 1538 beinhalten, die verschiedene feste Funktionsbeschleunigungslogik zur Verwendung durch den Grafikprozessorkern 1519 enthalten kann. Optional beinhaltet die zusätzliche feste Funktionslogik 1538 eine zusätzliche Geometriepipeline zur Verwendung bei Schattierung nur nach Position. Bei Schattierung nur nach Position gibt es zwei Geometriepipelines, die vollständige Geometriepipeline innerhalb der Geometrie-/festen Funktionspipeline 1538, 1531 und eine Auswahlpipeline, die eine zusätzliche Geometriepipeline ist, die in der zusätzlichen festen Funktionslogik 1538 enthalten sein kann. Zum Beispiel kann die Auswahlpipeline eine abgespeckte Version der vollständigen Geometriepipeline sein. Die vollständige Pipeline und die Auswahlpipeline können unterschiedliche Instanzen der gleichen Anwendung ausführen, wobei jede Instanz einen separaten Kontext aufweist. Schattierung nur nach Position kann lange Auswahlläufe verworfener Dreiecke verbergen, was in einigen Fällen ermöglicht, dass die Schattierung früher abgeschlossen wird. Beispielsweise kann die Auswahlpipeline innerhalb der zusätzlichen festen Funktionslogik 1538 Positionsshader parallel zur Hauptanwendung ausführen und erzeugt allgemein wichtige Ergebnisse schneller als die vollständige Pipeline, da die Auswahlpipeline nur das Positionsattribut der Vertices abruft und schattiert, ohne eine Rasterung und ein Rendern der Pixel im Framepuffer durchzuführen. Die Auswahlpipeline kann die erzeugten kritischen Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke unabhängig davon zu berechnen, ob diese Dreiecke ausgewählt sind. Die vollständige Pipeline (die in diesem Fall als eine Wiederholungspipeline bezeichnet werden kann) kann die Sichtbarkeitsinformationen verwenden, um die ausgewählten Dreiecke zu überspringen und nur die sichtbaren Dreiecke zu schattieren, die schließlich an die Rasterungsphase weitergegeben werden.
  • Optional kann die zusätzliche feste Funktionslogik 1538 auch Beschleunigungslogik für maschinelles Lernen enthalten, wie eine feste Funktionsmatrixmultiplikationslogik, für Implementierungen, die Optimierungen zum Training bei maschinellem Lernen oder Schlussfolgerungen enthalten.
  • Innerhalb jedes Grafik-Subkerns 1521A-1521F ist ein Satz von Ausführungsressourcen enthalten, die verwendet werden können, um Grafik-, Medien- und Rechenoperationen als Reaktion auf Anforderungen von einer Grafikpipeline, einer Medienpipeline oder Shaderprogrammen durchzuführen. Die Grafik-Subkerne 1521A-1521F enthalten mehrere EU-Arrays 1522A-1522F, 1524A-1524F, Thread-Dispatch- und Logik zur Kommunikation zwischen Threads (TD/IC) 1523A-1523F, einen 3D-Abtaster (z. B. Texturabtaster) 1525A-1525F, einen Medienabtaster 1526A-1526F, einen Shader-Prozessor 1527A-1527F und gemeinsam genutzten lokalen Speicher (SLM) 1528A-1528F. Die EU-Arrays 1522A-1522F, 1524A-1524F enthalten jeweils mehrere Ausführungseinheiten, die Universalgrafikverarbeitungseinheiten sind, die fähig sind, Gleitkomma- und Ganzzahl-/Fixpunktlogikoperationen im Dienst einer Grafik-, Medien- oder Rechenoperation durchzuführen, einschließlich Grafik-, Medien- oder Rechenshaderprogramme. Die TD/IC-Logik 1523A-1523F führt lokale Thread-Dispatch- und Threadsteueroperationen für die Ausführungseinheiten innerhalb eines Subkerns durch und ermöglichen eine Kommunikation zwischen Threads, die auf den Ausführungseinheiten des Subkerns ausgeführt werden. Der 3D-Abtaster 1525A-1525F kann eine Textur oder andere 3D-Grafik-bezogene Daten in einen Speicher lesen. Der 3D-Abtaster kann Texturdaten auf Grundlage eines konfigurierten Abtastzustands und dem mit einer bestimmten Textur assoziierten Texturformat unterschiedlich lesen. Der Medienabtaster 1526A-1526F kann ähnliche Leseoperationen auf Grundlage des mit Mediendaten assoziierten Typs und Formats durchführen. Beispielsweise kann jeder Grafik-Subkern 1521A-1521F alternativ einen vereinheitlichten 3D- und Medienabtaster enthalten. Threads, die auf den Ausführungseinheiten in jedem der Subkerne 1521A-1521F ausgeführt werden, können den gemeinsam genutzten Speicher 1528A-1528F in jedem Subkern verwenden, um zu ermöglichen, dass Threads, die in einer Thread-Gruppe ausgeführt werden, unter Verwendung eines gemeinsamen chipinternen Speicherbestands ausgeführt werden.
  • 15C ist ein Blockdiagramm einer Universal-Grafikprozessoreinheit (GPGPU) 1570, die als ein Grafikprozessor, z. B. der Grafikprozessor 1508, und/oder Rechenbeschleuniger konfiguriert werden kann, nach hierin beschriebenen Ausführungsformen. Die GPGPU 1570 kann über einen oder mehrere System- und/oder Speicherbusse mit Hostprozessoren (z. B. einer oder mehreren CPU(s) 1546) und Speicher 1571, 1572 verbunden sein. Der Speicher 1571 kann Systemspeicher sein, der mit der einen oder den mehreren CPUs 1546 gemeinsam genutzt werden kann, während der Speicher 1572 Vorrichtungsspeicher ist, der für die GPGPU 1570 dediziert ist. Beispielsweise können Komponenten innerhalb der GPGPU 1570 und des Speichers 1572 in Speicheradressen abgebildet werden, die für die eine oder die mehreren CPUs 1546 zugänglich sind. Ein Zugriff auf die Speicher 1571 und 1572 kann über eine Speichersteuerung 1568 ermöglicht werden. Die Speichersteuerung 1568 kann eine interne Steuerung für direkten Speicherzugriff (DMA) 1569 beinhalten oder kann Logik beinhalten, um Operationen durchzuführen, die andernfalls von einer DMA-Steuerung durchgeführt würden.
  • Die GPGPU 1570 enthält mehrere Zwischenspeicher, einschließlich eines L2-Zwischenspeichers 1553, eines L1-Zwischenspeichers 1554, eines Anweisungszwischenspeichers 1555 und eines gemeinsam genutzten Speichers 1556, von dem zumindest ein Abschnitt auch als ein Zwischenspeicher partitioniert sein kann. Die GPGPU 1570 enthält auch mehrere Recheneinheiten 1560A-1560N. Jede Recheneinheit 1560A-1560N enthält einen Satz von Vektorregistern 1561, Skalarregistern 1562, Vektorlogikeinheiten 1563 und Skalarlogikeinheiten 1564. Die Recheneinheiten 1560A-1560N können auch lokalen gemeinsam genutzten Speicher 1565 und einen Programmzähler 1566 enthalten. Die Recheneinheiten 1560A-1560N können an einen Konstantzwischenspeicher 1567 koppeln, der verwendet werden kann, um konstante Daten zu speichern, die Daten sind, die sich während des Ablaufs des Kernel- oder Shaderprogramms nicht ändern, das auf der GPGPU 1570 ausgeführt wird. Der Konstantzwischenspeicher 1567 kann ein skalarer Datenzwischenspeicher sein und zwischengespeicherte Daten können direkt in die Skalarregister 1562 abgerufen 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 bzw. der auf einen zugänglichen Adressraum abgebildet wurden bzw. wurde. Die Befehlsprozessoren 1557 können die Befehle aus Registern oder Speicher lesen und ermitteln, 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 verteilen, um diese Befehle durchzuführen. Jede Recheneinheit 1560A-1560N kann Threads unabhängig von anderen Recheneinheiten ausführen. Zusätzlich kann jede Recheneinheit 1560A-1560N unabhängig für eine bedingte Berechnung konfiguriert sein und kann bedingt die Ergebnisse der Berechnung an einen Speicher ausgeben. Die Befehlsprozessoren 1557 können die eine oder die mehreren CPUs 1546 unterbrechen, wenn die vorgelegten Befehle abgeschlossen sind.
  • 16A-16C veranschaulichen Blockdiagramme von zusätzlichen Grafikprozessor- und Rechenbeschleunigerarchitekturen, die von hierin beschriebenen Ausführungsformen bereitgestellt werden, z. B. gemäß 15A-15C. Die Elemente von 16A-16C mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder funktionieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt.
  • 16A ist ein Blockdiagramm eines Grafikprozessors 1600, der eine diskrete Grafikverarbeitungseinheit sein kann oder ein Grafikprozessor sein kann, der in eine Vielzahl von Verarbeitungskernen oder anderen Halbleitervorrichtungen, wie unter anderem Speichervorrichtungen oder Netzwerkschnittstellen, integriert ist. Der Grafikprozessor 1600 kann eine Variante des Grafikprozessors 1508 sein und kann anstelle des Grafikprozessors 1508 verwendet werden. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit dem Grafikprozessor 1508 hierin auch eine entsprechende Kombination mit dem einen Grafikprozessor 1600, ist aber nicht darauf beschränkt. Der Grafikprozessor kann über eine in den Speicher abgebildete E/A-Schnittstelle mit Registern auf dem Grafikprozessor und mit in den Prozessorspeicher platzierten Befehlen kommunizieren. Der Grafikprozessor 1600 kann eine Speicherschnittstelle 1614 zum Zugreifen auf Speicher beinhalten. Die Speicherschnittstelle 1614 kann eine Schnittstelle zu einem lokalen Speicher, einem oder mehreren internen Zwischenspeichern, einem oder mehreren gemeinsam genutzten externen Zwischenspeichern und/oder Systemspeicher sein.
  • Optional beinhaltet der Grafikprozessor 1600 auch eine Anzeigesteuerung 1602, um eine Anzeigevorrichtung 1618 mit Anzeigedaten anzusteuern. Die Anzeigesteuerung 1602 enthält Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und für eine Zusammensetzung mehrerer Schichten von Video oder Benutzerschnittstellenelementen. Die Anzeigevorrichtung 1618 kann eine interne oder externe Anzeigevorrichtung sein. In einer Ausführungsform kann die Anzeigevorrichtung 1618 eine am Kopf montierte Anzeigevorrichtung wie eine Anzeigevorrichtung mit virtueller Realität (VR) oder eine Anzeigevorrichtung mit erweiterter Realität (AR) sein. Der Grafikprozessor 1600 kann eine Videocodecengine 1606 beinhalten, um Medien in ein oder mehrere Mediencodierformate zu codieren, aus diesen zu decodieren oder zwischen diesen transcodieren, einschließlich unter anderem Formaten der Moving Picture Experts Group (MPEG) wie MGEG-2, Advanced-Video-Coding(AVC)-Formaten wie H.264/MPEG-4 AVC, H.265/HEVC, VP8, VP9 der Alliance for Open Media (AOMedia) sowie 421M/VC-1 der Society of Motion Picture & Television Engineers (SMPTE) und Formaten der Joint Photographic Experts Group (JPEG) wie JPEG- und Motion-JPEG(MJPEG)-Formate.
  • Der Grafikprozessor 1600 kann eine Blockbildtransfer(BLIT)-Engine 1603 beinhalten, um zweidimensionale (2D) Rasteroperationen einschließlich beispielsweise Bitgrenzen-Blocktransfers durchzuführen. Alternativ können 2D-Grafikoperationen jedoch unter Verwendung einer oder mehrerer Komponenten der Grafikverarbeitungsengine (GPE) 1610 durchgeführt werden. In einigen Ausführungsformen ist GPE 1610 eine Rechenengine zum Durchführen von Grafikoperationen, einschließlich von dreidimensionalen (3D) Grafikoperationen und Medienoperationen.
  • Die GPE 1610 kann eine 3D-Pipeline 1612 zum Durchführen von 3D-Operationen beinhalten, wie Rendern von dreidimensionalen Bildern und Szenen unter Verwendung von Verarbeitungsfunktionen, die primitive 3D-Formen (z. B. Rechteck, Dreieck usw.) bearbeiten. Die 3D-Pipeline 1612 enthält programmierbare und feste Funktionselemente, die verschiedene Aufgaben innerhalb des Elements durchführen und/oder Ausführungsthreads in einem 3D/Medien-Subsystem 1615 zu erzeugen. Während die 3D-Pipeline 1612 verwendet werden kann, um Medienoperationen durchzuführen, enthält eine Ausführungsform der GPE 1610 auch eine Medienpipeline 1616, die spezifisch verwendet wird, um Medienoperationen wie eine Video-Nachbearbeitung und Bildverbesserung durchzuführen.
  • Die Medienpipeline 1616 kann feste Funktions- oder programmierbare Logikeinheiten beinhalten, um statt der oder im Auftrag der Videocodecengine 1606 eine oder mehrere spezialisierte Medienoperationen durchzuführen, wie eine Videocodecbeschleunigung, Videozeilenentflechtung und Videocodierbeschleunigung. Die Medienpipeline 1616 kann zusätzlich eine Threaderzeugungseinheit beinhalten, um Threads zur Ausführung im 3D-/Medien-Subsystem 1615 zu erzeugen. Die erzeugten Threads führen Berechnungen für die Medienoperationen auf einer oder mehreren Grafikausführungseinheiten durch, die im 3D/Medien-Subsystem 1615 enthalten sind.
  • Das 3D/Medien-Subsystem 1615 kann Logik zum Ausführen von Threads beinhalten, die von der 3D-Pipeline 1612 und der Medienpipeline 1616 erzeugt wurden. Die Pipelines können Threadausführungsanforderungen an das 3D/Medien-Subsystem 1615 senden, das Threadversandlogik zum Vermitteln und Versenden der verschiedenen Anforderungen an verfügbare Threadausführungsressourcen enthält. Die Ausführungsressourcen enthalten ein Array von Grafikausführungseinheiten, um die 3D- und Medienthreads zu verarbeiten. Das 3D/Medien-Subsystem 1615 kann einen oder mehrere interne Zwischenspeicher für Threadanweisungen und Daten beinhalten. Zusätzlich kann das 3D/Medien-Subsystem 1615 auch gemeinsam genutzten Speicher beinhalten, einschließlich von Registern und adressierbarem Speicher, um Daten zwischen Threads zu übermitteln und Ausgabedaten zu speichern.
  • 16B veranschaulicht einen Grafikprozessor 1620, der eine Variante des Grafikprozessors 1600 ist und anstelle 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 einen Grafikprozessor 1620, ist aber nicht darauf beschränkt. Der Grafikprozessor 1620 weist gemäß hierin beschriebenen Ausführungsformen eine gekachelte Architektur auf. Der Grafikprozessor 1620 kann ein Grafikverarbeitungsengine-Cluster 1622 mit mehreren Instanzen der Grafikverarbeitungsengine 1610 von 16A innerhalb einer Grafikenginekachel 1610A-1610D beinhalten. Jede Grafikenginekachel 1610A-1610D kann über einen Satz von Kachelzwischenverbindungen 1623A-1623F miteinander verbunden werden. Jede Grafikenginekachel 1610A-1610D kann auch über Speicherzwischenverbindungen 1625A-1625D mit einem Speichermodul oder einer Speichervorrichtung 1626A-1626D verbunden sein. Die Speichervorrichtungen 1626A-1626D können eine beliebige Grafikspeichertechnologie verwenden. Die Speichervorrichtungen 1626A-1626D können beispielsweise Grafikspeicher mit doppelter Datenrate (GDDR) sein. Die Speichervorrichtungen 1626A-1626D können Speichermodule mit hoher Bandbreite (HBM-Module) sein, die zu ihrer jeweiligen Grafikenginekachel 1610A-1610D chipintern sein können. Die Speichervorrichtungen 1626A-1626D können gestapelte Speichervorrichtungen sein, die oben auf ihrer jeweiligen Grafikenginekachel 1610A-1610D gestapelt sein können. Jede Grafikenginekachel 1610A-1610D und zugehöriger Speicher 1626A-1626D kann auf separaten Einzelchips residieren, die auf einen Basischip oder ein Basissubstrat gebondet sind, wie ausführlicher in 24B-24D beschrieben wird.
  • Der Grafikprozessor 1620 kann mit einem Non-Uniform-Memory-Access(NUMA)-System konfiguriert sein, bei dem die Speichervorrichtungen 1626A-1626D mit assoziierten Grafikenginekacheln 1610A-1610D gekoppelt sind. Auf eine gegebene Speichervorrichtung kann durch andere Grafikenginekacheln als die Kachel zugegriffen werden, mit der sie direkt verbunden ist. Jedoch kann die Zugriffslatenz auf die Speichervorrichtungen 1626A-1626D am niedrigsten sein, wenn auf eine lokale Kachel zugegriffen wird. In einer Ausführungsform wird ein zwischenspeicherkohärentes NUMA-System (ccNUMA-System) aktiviert, das die KachelZwischenverbindungen 1623A-1623F verwendet, um eine Kommunikation zwischen Zwischenspeichersteuerungen innerhalb der Grafikenginekacheln 1610A-1610D zu ermöglichen, um ein konsistentes Speicherabbild beizubehalten, wenn mehr als ein Zwischenspeicher denselben Speicherort speichert.
  • Das Grafikverarbeitungsengine-Cluster 1622 kann mit einer chipinternen oder gehäuseinternen Fabric-Zwischenverbindung 1624 verbunden sein. In einer Ausführungsform beinhaltet die Fabric-Zwischenverbindung 1624 einen Netzwerkprozessor, ein Netzwerk-on-Chip (NoC) oder einen anderen Schaltprozessor, um der Fabric-Zwischenverbindung 1624 zu ermöglichen, als eine paketvermittelte Fabric-Zwischenverbindung zu fungieren, die Datenpakete zwischen Komponenten des Grafikprozessors 1620 vermittelt. Die Fabric-Zwischenverbindung 1624 kann eine Kommunikation zwischen Grafikenginekacheln 1610A-1610D und Komponenten wie der Videocodecengine 1606 und einer oder mehreren Kopierengines 1604 ermöglichen. Die Kopierengines 1604 können verwendet werden, um Daten aus den, in die und zwischen den Speichervorrichtungen 1626A-1626D und Speicher zu bewegen, der zum Grafikprozessor 1620 extern ist (z. B. Systemspeicher). Die Fabric-Zwischenverbindung 1624 kann auch verwendet werden, um die Grafikenginekacheln 1610A-1610D miteinander zu verbinden. Der Grafikprozessor 1620 kann optional eine Anzeigesteuerung 1602 enthalten, um eine Verbindung mit einer externen Anzeigevorrichtung 1618 zu ermöglichen. Der Grafikprozessor kann auch als ein Grafik- oder Rechenbeschleuniger konfiguriert sein. In der Beschleunigerkonfiguration können die Anzeigesteuerung 1602 und die Anzeigevorrichtung 1618 weggelassen sein.
  • Der Grafikprozessor 1620 kann über eine Hostschnittstelle 1628 an ein Hostsystem anbinden. Die Hostschnittstelle 1628 kann eine Kommunikation zwischen dem Grafikprozessor 1620, Systemspeicher und/oder anderen Systemkomponenten ermöglichen. Die Hostschnittstelle 1628 kann beispielsweise ein PCI-Express-Bus oder ein anderer Typ von Hostsystemschnittstelle sein. Die Hostschnittstelle 1628 kann zum Beispiel eine NVLink- oder NVSwitch-Schnittstelle sein. Die Hostschnittstelle 1628 und die Fabric-Zwischenverbindung 1624 können zusammenwirken, um mehreren Instanzen des Grafikprozessors 1620 zu ermöglichen, als eine einzige logische Vorrichtung zu fungieren. Die Zusammenarbeit zwischen der Hostschnittstelle 1628 und der Fabric-Zwischenverbindung 1624 kann auch ermöglichen, dass die einzelnen Grafikenginekacheln 1610A-1610D dem Hostsystem als unterschiedliche logische Grafikvorrichtungen präsentiert werden.
  • 16C veranschaulicht einen Rechenbeschleuniger 1630 nach hierin beschriebenen Ausführungsformen. Der Rechenbeschleuniger 1630 kann architekturelle Ähnlichkeiten mit dem Grafikprozessor 1620 von 16B enthalten und ist für eine Rechenbeschleunigung optimiert. Ein Rechenenginecluster 1632 kann einen Satz von Rechenenginekacheln 1640A-1640D enthalten, die Ausführungslogik enthalten, die für parallele oder vektorbasierte Universal-Rechenoperationen optimiert ist. Die Rechenenginekacheln 1640A-1640D beinhalten möglicherweise keine feste Funktionsgrafikverarbeitungslogik, obwohl eine oder mehrere der Rechenenginekacheln 1640A-1640D in einigen Ausführungsformen Logik beinhalten kann, um eine Medienbeschleunigung durchzuführen. Die Rechenenginekacheln 1640A-1640D können über Speicherzwischenverbindungen 1625A-1625D an Speicher 1626A-1626D anbinden. Der Speicher 1626A-1626D und Speicherzwischenverbindungen 1625A-1625D können eine ähnliche Technologie wie im Grafikprozessor 1620 sein oder können unterschiedlich sein. Die Grafikrechenenginekacheln 1640A-1640D können auch über einen Satz von Kachelzwischenverbindungen 1623A-1623F miteinander verbunden sein und können mit und/oder miteinander durch eine Fabric-Zwischenverbindung 1624 verbunden sein. In einer Ausführungsform enthält der Rechenbeschleuniger 1630 enthält einen großen L3-Zwischenspeicher 1636, der als ein vorrichtungsweiter Zwischenspeicher konfiguriert sein kann. Der Rechenbeschleuniger 1630 kann auch über eine Hostschnittstelle 1628 auf eine ähnliche Weise wie der Grafikprozessor 1620 von 16B an einen Hostprozessor und einem Speicher anbinden.
  • Der Rechenbeschleuniger 1630 kann auch eine integrierte Netzwerkschnittstelle 1642 beinhalten. In einer Ausführungsform beinhaltet die integrierte Netzwerkschnittstelle 1642 einen Netzwerkprozessor und eine Steuerlogik, die dem Rechenenginecluster 1632 ermöglichen, über eine Bitübertragungsschicht-Zwischenverbindung 1644 zu kommunizieren, ohne dass Daten einen Speicher eines Hostsystems durchqueren müssen. In einer Ausführungsform wird eine der Rechenenginekacheln 1640A-1640D durch Netzwerkprozessorlogik ersetzt, und Daten, die über die Bitübertragungsschicht-Zwischenverbindung 1644 zu übertragen oder zu empfangen sind, können direkt an den oder vom Speicher 1626A-1626D übertragen werden. Mehrere Instanzen des Rechenbeschleunigers 1630 können über die Bitübertragungsschicht-Zwischenverbindung 1644 zu einer einzigen logischen Vorrichtung verbunden sein. Alternativ dazu können die verschiedenen Rechenenginekacheln 1640A-1640D als individuelle netzwerkzugängliche Rechenbeschleunigervorrichtungen präsentiert werden.
  • Grafikverarbeitungsengine
  • 17 ist ein Blockdiagramm einer Grafikverarbeitungsengine 1710 eines Grafikprozessors in Übereinstimmung mit einigen Ausführungsformen. Die Grafikverarbeitungsengine (GPE) 1710 kann eine Version der in 16A gezeigten GPE 1610 sein und kann auch eine Grafikenginekachel 1610A-1610D von 16B repräsentieren. Die Elemente von 17 mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder funktionieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt. Zum Beispiel sind die 3D-Pipeline 1612 und die Medienpipeline 1616 von 16A auch in 17 veranschaulicht. Die Medienpipeline 1616 ist in einigen Ausführungsformen der GPE 1710 optional und ist möglicherweise nicht explizit in der GPE 1710 enthalten. In mindestens einer Ausführungsform ist ein separater Medien- und/oder Bildprozessor an die GPE 1710 gekoppelt.
  • Die GPE 1710 kann an eine Befehlsstreamingeinheit 1703, die der 3D-Pipeline 1612 und/oder den Medienpipelines 1616 einen Befehlsstrom bereitstellt, koppeln oder eine solche beinhalten. Alternativ oder zusätzlich kann die Befehlsstreamingeinheit 1703 direkt mit einem vereinheitlichten Rückgabepuffer 1718 gekoppelt sein. Der vereinheitlichte Rückgabepuffer 1718 kann kommunikativ mit einem Grafikkernarray 1714 gekoppelt sein. Optional ist die Befehlsstreamingeinheit 1703 an Speicher gekoppelt, der Systemspeicher oder einer oder mehrerer von einem internen Zwischenspeicher und einem gemeinsam genutzten Zwischenspeicher sein kann. Die Befehlsstreamingeinheit 1703 kann Befehle vom Speicher empfangen und sendet die Befehle an die 3D-Pipeline 1612 und/oder die Medienpipeline 1616. Die Befehle sind Direktiven, die von einem Ringpuffer abgerufen wurden, der Befehle für die 3D-Pipeline 1612 und die Medienpipeline 1616 speichert. Der Ringpuffer kann zusätzlich Batchbefehlspuffer beinhalten, die Batches mehrerer Befehle speichern. Die Befehle für die 3D-Pipeline 1612 können auch Bezüge auf im Speicher gespeicherte Daten enthalten, wie zum Beispiel unter anderem Vertex- und Geometriedaten für die 3D-Pipeline 1612 und/oder Bilddaten und Speicherobjekte für die Medienpipeline 1616. Die 3D-Pipeline 1612 und die Medienpipeline 1616 verarbeiten die Befehle und Daten durch Durchführen von Operationen durch Logik in den jeweiligen Pipelines oder durch Vergeben eines oder mehrerer Ausführungsthreads an das Grafikkernarray 1714. Das Grafikkernarray 1714 kann einen oder mehrere Blöcke von Grafikkernen (z. B. Grafikkern(e) 1715A, Grafikkern(e) 1715B) beinhalten, wobei jeder Block einen oder mehrere Grafikkerne beinhaltet. Jeder Grafikkern enthält einen Satz von Grafikausführungsressourcen, die Universal- und grafikspezifische Ausführungslogik enthalten, um Grafik- und Rechenoperationen durchzuführen, sowie feste Funktionslogik zur Texturverarbeitung und/oder für maschinelles Lernen und Beschleunigung künstlicher Intelligenz.
  • In verschiedenen Ausführungsformen kann die 3D-Pipeline 1612 feste Funktions- und programmierbare Logik enthalten, um ein oder mehrere Shaderprogramme zu verarbeiten, wie Vertexshadern, Geometrieshadern, Pixelshadern, Fragmentshadern, Rechenshadern oder andere Shaderprogramme, durch Verarbeiten der Anweisungen und Vergeben von Ausführungsthreads an das Grafikkernarray 1714. Das Grafikkernarray 1714 stellt einen einheitlichen Block mit Ausführungsressourcen zur Verwendung bei der Verarbeitung dieser Shaderprogramme bereit. Mehrzweckausführungslogik (z. B. Ausführungseinheiten) innerhalb des Grafikkerns bzw. der Grafikkerne 1715A-1715B des Grafikkernarrays 1714 enthält Unterstützung für verschiedene 3D-API-Shadersprachen und kann mehrere gleichzeitige Ausführungsthreads ausführen, die mit mehreren Shadern assoziiert sind.
  • Das Grafikkernarray 1714 kann Ausführungslogik beinhalten, um Medienfunktionen durchzuführen, wie Video- und/oder Bildverarbeitung. Die Ausführungseinheiten können zusätzlich Universallogik beinhalten, die programmierbar ist, um zusätzlich zu Grafikverarbeitungsoperationen parallele Universal-Rechenoperationen durchzuführen. Die Universallogik kann Verarbeitungsoperationen parallel oder zusammen mit Universallogik im Prozessorkern bzw. in den Prozessorkernen 1407 von 14 oder im Kern 1502A-1502N wie in 15A durchführen.
  • Ausgabedaten, die von Threads generiert werden, die auf dem Grafikkernarray 1714 ausgeführt werden, können Daten in den Speicher in einen 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 verschiedenen Threads zu senden, die auf dem Grafikkernarray 1714 ausgeführt werden. Der URB 1718 kann zusätzlich zur Synchronisierung zwischen Threads auf dem Grafikkernarray 1714 und fester Funktionslogik in der gemeinsam genutzten Funktionslogik 1720 verwendet werden.
  • Optional kann das Grafikkernarray 1714 skalierbar sein, sodass die Anordnung eine variable Anzahl von Grafikkernen enthält, die jeweils eine variable Anzahl von Ausführungseinheiten auf Grundlage der Zielleistung und des Leistungspegels der GEP 1710 aufweisen. Die Ausführungsressourcen können dynamisch skalierbar sein, sodass Ausführungsressourcen je nach Bedarf aktiviert oder deaktiviert werden können.
  • Das Grafikkernarray 1714 koppelt an die gemeinsam genutzte Funktionslogik 1720, die mehrere Ressourcen enthält, die unter den Grafikkernen in dem Grafikkernarray gemeinsam genutzt werden. Die gemeinsam genutzten Funktionen in der gemeinsam genutzten Funktionslogik 1720 sind Hardwarelogikeinheiten, die dem Grafikkernarray 1714 spezialisierte ergänzende Funktionalität bereitstellen. In verschiedenen Ausführungsformen enthält die gemeinsam genutzte Funktionslogik 1720 unter anderem Abtaster 1721, Mathematik- 1722 und Zwischenthreadkommunikationslogik (ITC-Logik) 1723. Zusätzlich können ein oder mehrere Zwischenspeicher 1725 in der gemeinsam genutzten Funktionslogik 1720 implementiert sein.
  • Eine gemeinsam genutzte Funktion ist zumindest in einem Fall implementiert, in dem der Bedarf an einer bestimmten spezialisierten Funktion zur Aufnahme in das Grafikkernarray 1714 unzureichend ist. Stattdessen ist eine einzelne Instantiierung dieser spezialisierten Funktion als eine eigenständige Entität in der gemeinsam genutzten Funktionslogik 1720 implementiert und wird von den Ausführungsressourcen in dem Grafikkernarray 1714 gemeinsam genutzt. Die genaue Funktionsgruppe, die in dem Grafikkernarray 1714 gemeinsam genutzt ist und in dem Grafikkernarray 1714 enthalten ist, variiert über Ausführungsformen. Bestimmte gemeinsam genutzte Funktionen in der gemeinsam genutzten Funktionslogik 1720, die von dem Grafikkernarray 1714 umfangreich genutzt werden, können in der gemeinsam genutzten Funktionslogik 1716 in dem Grafikkernarray 1714 enthalten sein. Optional kann die gemeinsam genutzte Funktionslogik 1716 in dem Grafikkernarray 1714 einige der oder die gesamte Logik in der gemeinsam genutzten Funktionslogik 1720 enthalten. Alle Logikelemente in der gemeinsam genutzten Funktionslogik 1720 können in der gemeinsam genutzten Funktionslogik 1716 dem Grafikkernarray 1714 dupliziert sein. Alternativ ist die gemeinsam genutzte Funktionslogik 1720 zugunsten der gemeinsam genutzten Funktionslogik 1716 in dem Grafikkernarray 1714 ausgeschlossen.
  • Ausführungseinheiten
  • 18A-18B veranschaulichen eine Threadausführungslogik 1800, die eine Anordnung von Verarbeitungselementen enthalten, die in einem Grafikprozessorkern nach hierin beschriebenen Ausführungsformen eingesetzt werden. Die Elemente von 18A-18C mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder funktionieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt. 18A-18B veranschaulichen eine Übersicht von Threadausführungslogik 1800, die für Hardwarelogik repräsentativ sein kann, die mit jedem Subkern 1521A-1521F von 15B veranschaulicht ist. 18A ist für eine Ausführungseinheit innerhalb eines Universal-Grafikprozessors repräsentativ, während 18B für eine Ausführungseinheit repräsentativ ist, die innerhalb einer Rechenarchitektur verwendet werden kann.
  • Wie in 18A veranschaulicht, kann die Threadausführungslogik 1800 einen Shaderprozessor 1802, einen Thread-Dispatcher 1804, einen Anweisungszwischenspeicher 1806, ein skalierbares Ausführungseinheitsarray, das eine Vielzahl von Grafikausführungseinheiten 1808A-1808N enthält, einen Abtaster 1810, einen gemeinsam genutzten Speicher 1811, einen Datenzwischenspeicher 1812 und einen Datenanschluss 1814 beinhalten. Optional kann das skalierbare Ausführungseinheitsarray dynamisch durch Aktivieren oder Deaktivieren einer oder mehrerer Ausführungseinheiten (z. B. beliebige der Grafikausführungseinheiten 1808A, 1808B, 1808C, 1808D bis 1808N-1 und 1808N) auf Grundlage der rechnerischen Anforderungen einer Arbeitslast skaliert werden. Die enthaltenen Komponenten können über ein Zwischenverbindungsfabric, das mit jeder der Komponenten verknüpft ist, miteinander verbunden sein. Die Threadausführungslogik 1800 kann eine oder mehrere Verbindungen mit einem Speicher beinhalten, wie einem Systemspeicher oder einem Zwischenspeicher, über eines oder mehrere vom Anweisungszwischenspeicher 1806, dem Datenanschluss 1814, dem Abtaster 1810 und den Grafikausführungseinheiten 1808A-1808N. Jede Ausführungseinheit (z. B. 1808A) kann eine eigenständige programmierbare Universalrecheneinheit sein, die fähig ist, mehrere gleichzeitige Hardwarethreads auszuführen, während mehrere Datenelemente parallel für jeden Thread verarbeitet werden. In verschiedenen Ausführungsformen ist das Array von Ausführungseinheiten 1808A-1808N skalierbar, um eine beliebige Anzahl individueller Ausführungseinheiten aufzunehmen.
  • In einigen Ausführungsformen können die Grafikausführungseinheiten 1808A-1808N hauptsächlich verwendet werden, um Shaderprogramme auszuführen. Ein Shaderprozessor 1802 kann die verschiedenen Shaderprogramme verarbeiten und Ausführungsthreads, die mit den Shaderprogrammen assoziiert sind, über einen Thread-Dispatcher 1804 versenden. Der Thread-Dispatcher kann eine Logik beinhalten, um Thread-Initiierungsanforderungen von den Grafik- und Medienpipelines zu vermitteln und die angeforderten Threads auf einer oder mehreren Ausführungseinheiten in den Grafikausführungseinheiten 1808A-1808N zu instanziieren. Eine Geometriepipeline kann zum Beispiel Vertex-, Tessellations- oder Geometrieshader an die Threadausführungslogik zur Verarbeitung vergeben. Optional kann der Thread-Dispatcher 1804 auch Laufzeit-Threaderzeugungsanforderungen von den ausgeführten Shaderprogrammen verarbeiten.
  • In einigen Ausführungsformen unterstützen die Grafikausführungseinheiten 1808A-1808N einen Anweisungssatz, der native Unterstützung für viele Standard-3D-Grafikshaderanweisungen enthält, sodass Shaderprogamme von Grafikbibliotheken (z. B. Direct 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen eine Vertex- und Geometrieverarbeitung (z. B. Vertexprogramme, Geometrieprogramme, Vertexshader), eine Pixelverarbeitung (z. B. Pixelshader, Fragmentshader) und eine Universalverarbeitung (z. B. Rechen- und Medienshader). Jede der Grafikausführungseinheiten 1808A-1808N ist zu einer mehrfach erteilten Einzelanweisungs-Mehrfachdaten(SIMD)-Ausführung fähig, und eine Operation mit mehreren Threads ermöglicht eine effiziente Ausführungsumgebung angesichts Speicherzugriffe mit höherer Latenz. Jeder Hardwarethread in jeder Ausführungseinheit weist eine dedizierte Registerdatei mit hoher Bandbreite und einen zugehörigen unabhängigen Threadzustand auf. Die Ausführung erfolgt in mehrfacher Erteilung pro Takt an Pipelines, die zu Ganzzahl- und Gleitkommaoperationen mit einfacher und doppelter Genauigkeit, SIMD-Verzweigungsfähigkeit, logischen Operationen, transzendenten Operationen und anderen sonstigen Operationen fähig sind. Während des Wartens auf Daten aus dem Speicher oder von einer der gemeinsam genutzten Funktionen verursacht Abhängigkeitslogik in den Ausführungseinheiten 1808A-1808N, dass ein wartender Thread im Ruhezustand ist, bis die angeforderten Daten zurückgegeben wurden. Während sich der wartende Thread im Ruhezustand befindet, können Hardwareressourcen dem Verarbeiten anderer Threads gewidmet werden. Während einer mit einer Vertexshaderoperation assoziierten Verzögerung kann eine Ausführungseinheit beispielsweise Operationen für einen Pixelshader, Fragmentshader oder einen anderen Typ von Shaderprogramm durchführen, einschließlich eines anderen Vertexshaders, wie zum Beispiel des Vertexshaders 2107, der in 21 veranschaulicht ist. Verschiedene Ausführungsformen können anwenden, eine Ausführung durch Verwendung von Einzelanweisung-Mehrfachthreads (SIMT) als eine Alternative zur Verwendung von SIMD oder zusätzlich zur Verwendung von SIMD zu verwenden. Eine Bezugnahme auf einen SIMD-Kern oder eine SIMD-Operation kann auch für SIMT gelten oder für SIMD in Kombination mit SIMT gelten.
  • Jede Ausführungseinheit in den Grafikausführungseinheiten 1808A-1808N arbeitet an 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 Einheit der Ausführung zum Zugriff auf Datenelemente, zur Maskierung und Ablaufsteuerung innerhalb von Anweisungen. Die Anzahl von Kanälen kann von der Anzahl von physischen arithmetisch-logischen Einheiten (ALUs), Gleitkommaeinheiten (FPUs) oder anderen Logikeinheiten (z. B. Tensorkernen, Raytracingkernen usw.) für einen bestimmten Grafikprozessor unabhängig sein. Außerdem können die Grafikausführungseinheiten 1808A-1808N Ganzzahl- und Gleitkomma-Datentypen unterstützen.
  • Der Anweisungssatz der Ausführungseinheiten enthält SIMD-Anweisungen. Die verschiedenen Datenelemente können als ein gepackter Datentyp in einem Register gespeichert sein und die Ausführungseinheit verarbeitet die verschiedenen Elemente auf Grundlage der Datengröße der Elemente. Beim Arbeiten an einem 256-Bit breiten Vektor werden die 256 Bits des Vektors zum Beispiel in einem Register gespeichert und die Ausführungseinheit bearbeitet den Vektor als vier separate gepackte 64-Bit-Datenelemente (Datenelemente von Quadwort(QW)-Größe), acht separate gepackte 32-Bit-Datenelemente (Datenelemente von Doppelwort(DW)-Datengröße), sechzehn separate gepackte 16-Bit-Datenelemente (Datenelemente von Wort(W)-Größe) oder zweiunddreißig separate 8-Bit-Datenelemente (Datenelemente von Byte(B)-Größe). Unterschiedliche Vektorbreiten und Registergrößen sind jedoch möglich.
  • Optional können eine oder mehrere Ausführungseinheiten zu einer fusionierten Grafikausführungseinheit 1809A-1809N mit einer Threadsteuerlogik (1807A-1807N) kombiniert werden, die den fusionierten EUs gemein ist. Mehrere EUs können in eine EU-Gruppe fusioniert werden. Jede EU in der fusionierten EU-Gruppe kann ausgelegt sein, einen separaten SIMD-Hardwarethread auszuführen. Die Anzahl der EUs in einer fusionierten EU-Gruppe kann je nach Ausführungsformen variieren. Darüber hinaus können verschiedene SIMD-Breiten pro EU durchgeführt werden, einschließlich unter anderem SIMD8, SIMD16 und SIMD32. Jede fusionierte Grafikausführungseinheit 1809A-1809N enthält mindestens zwei Ausführungseinheiten. Die fusionierte Ausführungseinheit 1809A enthält zum Beispiel eine erste EU 1808A, eine zweite EU 1808B und Threadsteuerlogik 1807A, die der ersten EU 1808A und der zweiten EU 1808B gemeinsam ist. Die Threadsteuerlogik 1807A steuert Threads, die auf der fusionierten Grafikausführungseinheit 1809A ausgeführt werden, was jeder EU innerhalb der fusionierten Ausführungseinheiten 1809A-1809N ermöglicht, unter Verwendung eines gemeinsamen Anweisungszeigerregisters ausgeführt zu werden.
  • Ein oder mehrere interne Anweisungszwischenspeicher (z. B. 1806) sind in der Threadausführungslogik 1800 enthalten, um Threadanweisungen für die Ausführungseinheiten zwischenzuspeichern. Ein oder mehrere Datenzwischenspeicher (z. B. 1812) können in der Threadausführungslogik 1800 enthalten sein, um Threaddaten während der Threadausführung zwischenzuspeichern. Threads, die auf der Ausführungslogik 1800 ausgeführt werden, können auch explizit verwaltete Daten im gemeinsam genutzten Speicher 1811 speichern. Ein Abtaster 1810 kann enthalten sein, um eine Texturabtastung für 3D-Operationen und Medienabtastung für Medienoperationen bereitzustellen. Der Abtaster 1810 kann spezialisierte Textur- oder Medienabtastfunktionalität beinhalten, um Textur- oder Mediendaten während des Abtastprozesses vor dem Bereitstellen der abgetasteten Daten an eine Ausführungseinheit zu verarbeiten.
  • Während der Ausführung senden die Grafik- und Medienpipelines Threadinitiierungsanforderungen über Threaderzeugungs- und Dispatch-Logik an die Threadausführungslogik 1800. Sobald eine Gruppe geometrischer Objekte verarbeitet und in Pixeldaten rasterisiert worden ist, wird Pixelprozessorlogik (z. B. Pixelshaderlogik, Fragmentshaderlogik usw.) im Shaderprozessor 1802 aufgerufen, um Ausgabeinformationen weiter zu berechnen und zu bewirken, dass Ergebnisse in Ausgabeflächen (z. B. Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.) geschrieben werden. Ein Pixelshader oder Fragmentshader kann die Werte der verschiedenen Vertexattribute berechnen, die über das rasterisierte Objekt zu interpolieren sind. Die Pixelprozessorlogik im Shaderprozessor 1802 kann dann ein von einer Anwendungsprogrammierschnittstelle (API) geliefertes Pixel- oder Fragmentshaderprogramm ausführen. Um das Shaderprogramm auszuführen, vergibt der Shaderprozessor 1802 Threads über den Thread-Dispatcher 1804 an eine Ausführungseinheit (z. B. 1808A). Der Shaderprozessor 1802 kann Texturabtastlogik im Abtaster 1810 verwenden, um auf Texturdaten in im Speicher gespeicherten Texturabbildungen zuzugreifen. Arithmetische Operationen an den Texturdaten und den Eingabegeometriedaten berechnen Pixelfarbdaten für jedes geometrische Fragment oder verwerfen ein oder mehrere Pixel von einer weiteren Verarbeitung.
  • Außerdem kann der Datenanschluss 1814 einen Speicherzugriffsmechanismus für die Threadausführungslogik 1800 bereitstellen, um verarbeitete Daten in den Speicher zur weiteren Verarbeitung in einer Grafikprozessorausgabepipeline auszugeben. Der Datenanschluss 1814 kann einen oder mehrere Zwischenspeicher (z. B. den Datenzwischenspeicher 1812) beinhalten oder an diese koppeln, um Daten für einen Speicherzugriff über den Datenanschluss 1814 zwischenzuspeichern.
  • Optional kann die Ausführungslogik 1800 auch eine Raytracing-Einheit 1805 enthalten, die Raytracing-Beschleunigungsfunktionalität bereitstellen kann. Die Raytracing-Einheit 1805 kann einen Raytracing-Anweisungssatz unterstützen, der Anweisungen/Funktionen zur Strahlengenerierung enthält. Der Raytracing-Anweisungssatz kann dem Raytracing-Anweisungssatz ähnlich sein, der von den Raytracingkernen 372 in 3C unterstützt wird, oder von diesem verschieden sein.
  • 18B veranschaulicht beispielhafte interne Einzelheiten einer Ausführungseinheit 1808. Eine Grafikausführungseinheit 1808 kann eine Anweisungsabrufeinheit 1837, eine allgemeine Registerdateianordnung (GRF-Anordnung) 1824, eine Architekturregisterdateianordnung (ARF-Anordnung) 1826, einen Threadarbiter 1822, eine Sendeeinheit 1830, eine Verzweigungseinheit 1832, einen Satz von SIMD-Gleitkommaeinheiten (FPUs) 1834 und optional einen Satz von dedizierten Ganzzahl-SIMD-ALUs 1835 enthalten. Die GRF 1824 und ARF 1826 enthalten den Satz von allgemeinen Registerdateien und Architekturregisterdateien, die mit jedem gleichzeitigen Hardwarethread assoziiert sind, die in der Grafikausführungseinheit 1808 aktiv sein können. Ein architektonischer Zustand pro Thread kann in der ARF 1826 gepflegt werden, während Daten, die während der Threadausführung verwendet werden, in der GRF 1824 gespeichert sind. Der Ausführungszustand jedes Threads, einschließlich der Anweisungszeiger für jeden Thread, kann in threadspezifischen Registern in der ARF 1826 gehalten werden.
  • Die Grafikausführungseinheit 1808 kann eine Architektur aufweisen, die eine Kombination von simultanem Multithreading (SMT) und feinkörnigem verschachteltem Multithreading (IMT) ist. Die Architektur kann eine modulare Konfiguration aufweisen, die zum Zeitpunkt des Designs auf Grundlage einer Zielanzahl gleichzeitiger Threads und einer Anzahl von Registern pro Ausführungseinheit feinabgestimmt werden kann, wobei Ausführungseinheitsressourcen über Logik aufgeteilt werden, die verwendet wird, um mehrere gleichzeitige Threads auszuführen. Die Anzahl von logischen Threads, die von der Grafikausführungseinheit 1808 ausgeführt werden kann, ist nicht auf die Anzahl von Hardwarethreads beschränkt, und mehrere logische Threads können jedem Hardwarethread zugewiesen werden.
  • Optional kann die Grafikausführungseinheit 1808 gemeinsam mehrere Anweisungen erteilen, die jeweils unterschiedliche Anweisungen sein können. Der Threadarbiter 1822 der Grafikausführungseinheit 1808 kann die Anweisungen an eine der Sendeinheit 1830, Verzweigungseinheit 1832 oder SIMD-FPU(s) 1834 zur Ausführung vergeben. Jeder Ausführungsthread kann auf 128 Universalregister in der GRF 1824 zugreifen, wobei jedes Register 32 Bytes speichern kann, auf die als ein SIMD-8-Element-Vektor aus 32-Bit-Datenelementen zugegriffen werden kann. Jeder Ausführungseinheitsthread kann Zugriff auf 4 kBytes innerhalb der GRF 1824 aufweisen, obwohl Ausführungsformen derart nicht eingeschränkt sind und in anderen Ausführungsformen mehr oder weniger Registerressourcen bereitgestellt werden können. Die Grafikausführungseinheit 1808 kann in sieben Hardwarethreads partitioniert sein, die unabhängig rechnerische Operationen durchführen können, obwohl die Anzahl von Threads pro Ausführungseinheit auch nach Ausführungsformen variieren kann, zum Beispiel können bis zu 16 Hardwarethreads unterstützt werden. In einem Ausführungsbeispiel, in dem sieben Threads auf 4 kBytes zugreifen können, kann die GRF 1824 insgesamt 28 kBytes speichern. In einem anderen Ausführungsbeispiel, in dem 16 Threads auf 4 kBytes zugreifen können, kann die GRF 1824 insgesamt 64 kBytes speichern. Die Anzahl an 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 ermöglichen, dass Register gemeinsam adressiert werden, um effektiv breitere Register zu bilden oder schrittweise rechteckige Blockdatenstrukturen zu repräsentieren.
  • Zusätzlich oder alternativ können Speicheroperationen, Abtastoperationen und andere Systemkommunikationen mit längerer Latenz über „Sende“-Anweisungen versandt werden, die von der Nachrichten übermittelnden Sendeeinheit 1830 ausgeführt werden. Verzweigungsanweisungen können an eine dedizierte Verzweigungseinheit 1832 versandt werden, um eine SIMD-Divergenz und letztendliche Konvergenz zu ermöglichen.
  • Die Grafikausführungseinheit 1808 kann eine oder mehrere SIMD-Gleitkommaeinheiten (FPU(s)) 1834 beinhalten, um Gleitkommaoperationen durchzuführen. Die eine oder die mehreren FPUs 1834 können auch Ganzzahlberechnungen unterstützen. In einigen Fällen kann bzw. können die FPU(s) 1834 bis zu M 32-Bit-Gleitkomma- (oder Ganzzahl-)Operationen via SIMD ausführen oder bis zu 2M 16-Bit-Ganzzahl- oder 16-Bit-Gleitkommaoperationen via SIMD ausführen. Optional bietet mindestens eine der FPU(s) erweiterte Mathematikfähigkeiten, um transzendente Mathematikfunktionen mit hohem Durchsatz und 64-Bit-Gleitkomma mit doppelter Genauigkeit zu unterstützen. Eine Gruppe von 8-Bit-Ganzzahl-SIMD-ALUs 1835 kann auch vorhanden sein und diese kann spezifisch optimiert sein, um Operationen durchzuführen, die mit Berechnungen für maschinelles Lernen assoziiert sind.
  • Optional können Anordnungen mehrerer Instanzen der Grafikausführungseinheit 1808 in einer Grafik-Subkerngruppierung (z. B. eines Teilsegments) instanziiert sein. Zur Skalierbarkeit können Produktarchitekten die genaue Anzahl der Ausführungseinheiten pro Subkerngruppierung wählen. Die Ausführungseinheit 1808 kann Anweisungen über eine Vielzahl von Ausführungskanälen ausführen. Außerdem kann jeder Thread, der auf der Grafikausführungseinheit 1808 ausgeführt wird, in einem anderen Kanal ausgeführt werden.
  • 19 veranschaulicht eine weitere beispielhafte Ausführungseinheit 1900. Die Elemente von 19 mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder funktionieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt. Die Ausführungseinheit 1900 kann eine rechenoptimierte Ausführungseinheit beispielsweise zur Verwendung in einer Rechenenginekachel 1640A-1640D wie in 16C sein, aber ist derartig nicht eingeschränkt. Die Ausführungseinheit 1900 kann auch in einer Grafikenginekachel 1610A-1610D wie in 16B verwendet werden. Die Ausführungseinheit 1900 kann eine Threadsteuereinheit 1901, eine Threadzustandseinheit 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 Hardwarethreads 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 von 18B arbeiten.
  • Die Ausführungseinheit 1900 kann auch eine Recheneinheit 1910 beinhalten, die mehrere verschiedene Arten von funktionalen Einheiten enthält. Die Recheneinheit 1910 kann auch eine ALU 1911, ein systolisches Array 1912 und eine Mathematikeinheit 1913 beinhalten. Die ALU 1911 beinhaltet eine Anordnung von arithmetisch-logischen Einheiten. Die ALU 1911 kann dazu ausgelegt sein, 64-Bit-, 32-Bit- und 16-Bit-Ganzzahl- und Gleitkommaoperationen über mehrere Verarbeitungsspuren und Datenkanäle und für mehrere Hardware- und/oder Software-Threads durchzuführen. Die ALU 1911 kann Ganzzahl- und Gleitkommaoperationen gleichzeitig durchführen (z. B. innerhalb desselben Taktzyklus).
  • Das systolische Array 1912 enthält ein Netzwerk von Datenverarbeitungseinheiten der Breite W und Tiefe D, die verwendet werden können, um Vektor- oder andere datenparallele Operationen auf systolische Weise durchzuführen. Das systolische Array 1912 kann ausgelegt sein, verschiedene Matrixoperationen durchzuführen, einschließlich Skalarprodukt-, Kreuzprodukt und allgemeine Matrix-Matrix-Multiplikations(GEMM)-Operationen. Das systolische Array 1912 kann 16-Bit-Gleitkommaoperationen sowie 8-Bit-, 4-Bit-, 2-Bit- und binäre Ganzzahloperationen unterstützen. Das systolische Array 1912 kann ausgelegt sein, Operationen für maschinelles Lernen zu beschleunigen. Das systolische Array 1912 kann mit Unterstützung für das bfloat16-16-Bit-Gleitkommaformat (Brain-Gleitkomma) oder ein Tensor-32-Bit-Gleitkommaformat (TF32) konfiguriert sein, die unterschiedliche Anzahlen von Mantissen- und Exponentenbits relativ zu Formaten des Institute of Electrical and Electronics Engineers (IEEE) 754 aufweisen. FP64-Formate können ebenfalls unterstützt werden.
  • In einer Ausführungsform beinhaltet das systolische Array 1912 Hardware zum Beschleunigen von Operationen mit dünn besetzten Matrizen. Multiplikationsoperationen für dünn besetzte Gebiete von Eingabedaten können übersprungen werden, ohne den Durchsatz zu opfern. Eine blockweise Dünnbesetzung innerhalb von Eingabematrizen kann detektiert werden und Operationen mit bekannten Ausgabewerten können übersprungen werden. In einer Ausführungsform beinhaltet das systolische Array 1912 Hardware, um Operationen an dünn besetzten Daten mit einer komprimierten Repräsentation zu ermöglichen. Eine komprimierte Repräsentation einer dünn besetzten Matrix speichert Werte ungleich null und Metadaten, die eine Position der von null verschiedenen Werte innerhalb der Matrix definiert. Beispielhafte komprimierte Repräsentationen beinhalten unter anderem komprimierte Tensorrepräsentationen, wie etwa Compressed-Sparse-Row(CSR)- , Compressed-Sparse-Column(CSC)-, Compressed-Sparse-Fiber(CSF)-Repräsentationen. Eine Unterstützung komprimierter Repräsentationen ermöglicht, dass Operationen bei der Eingabe in einem komprimierten Tensorformat durchgeführt werden, ohne dass die komprimierte Repräsentation dekomprimiert oder decodiert werden muss. In einer solchen Ausführungsform können Operationen nur an von null verschiedenen Eingabewerten durchgeführt werden und die resultierenden von null verschiedenen Ausgabewerte können in eine Ausgangsmatrix abgebildet werden. In einigen Ausführungsformen wird Hardwareunterstützung auch für maschinenspezifische verlustfreie Datenkomprimierungsformate bereitgestellt, die verwendet werden, wenn Daten innerhalb von Hardware oder über Systembusse hinweg übertragen werden. Derartige Daten können in einem komprimierten Format für dünn besetzte Eingabedaten beibehalten werden, und das systolische Array 1912 kann die Komprimierungsmetadaten für die komprimierten Daten verwenden, um zu ermöglichen, dass Operationen nur an von null verschiedenen Werten durchgeführt werden, oder um zu ermöglichen, dass Blöcke von Nulldateneingaben für Multiplikationsoperationen umgangen werden.
  • Die Mathematikeinheit 1913 kann ausgelegt sein, eine bestimmte Teilmenge von mathematischen Operationen auf effiziente Weise und mit niedriger Energie als die ALU-Einheit 1911 durchzuführen. Die Mathematikeinheit 1913 kann Mathematiklogik enthalten, wie sie in gemeinsam genutzter Funktionslogik einer Grafikverarbeitungsengine gefunden wird, die von anderen beschriebenen Ausführungsformen (z. B. die Mathematiklogik 1722 der gemeinsam genutzten Funktionslogik 1720 von 17) bereitgestellt wird. Die Mathematikeinheit 1913 kann ausgelegt sein, 32-Bit- und 64-Bit-Gleitkommaoperationen durchzuführen.
  • Die Threadsteuereinheit 1901 enthält Logik, um die Ausführung von Threads innerhalb der Ausführungseinheit zu steuern. Die Threadsteuereinheit 1901 kann Threadvermittlungslogik enthalten, um eine Ausführung von Threads innerhalb der Ausführungseinheit 1900 zu starten, zu stoppen und vorwegzunehmen. Die Threadzustandseinheit 1902 kann verwendet werden, um einen Threadzustand für Threads zu speichern, die zur Ausführung auf der Ausführungseinheit 1900 zugewiesen wurden. Das Speichern des Threadzustands innerhalb der Ausführungseinheit 1900 ermöglicht die rasche Vorwegnahme von Threads, wenn diese Threads blockiert werden oder im Leerlauf sind. Die Anweisungsabruf-/-vorabrufeinheit 1903 kann Anweisungen aus einem Anweisungszwischenspeicher einer Ausführungslogik auf höherer Ebene (z. B. dem Anweisungszwischenspeicher 1806 wie in 18A) abrufen. Die Anweisungsabruf-/- vorabrufeinheit 1903 kann auch Vorabrufanforderungen für Anweisungen erteilen, die auf Grundlage einer Analyse von Threads, die derzeit ausgeführt werden, in den Anweisungszwischenspeicher zu laden sind. Die Anweisungsdecodiereinheit 1904 kann verwendet werden, um Anweisungen zu decodieren, die von den Recheneinheiten auszuführen sind. Die Anweisungsdecodiereinheit 1904 kann als ein sekundärer Decodierer verwendet werden, um komplexe Anweisungen in Mikrooperationsbestandteile zu decodieren.
  • Die Ausführungseinheit 1900 enthält zusätzlich eine Registerdatei 1906, die von Hardwarethreads verwendet werden kann, die auf der Ausführungseinheit 1900 ausgeführt werden. Register in der Registerdatei 1906 können über die Logik verteilt werden, die verwendet wird, um mehrere simultane Threads innerhalb der Recheneinheit 1910 der Ausführungseinheit 1900 auszuführen. Die Anzahl von logischen Threads, die von der Grafikausführungseinheit 1900 ausgeführt werden kann, ist nicht auf die Anzahl von Hardwarethreads beschränkt, und mehrere logische Threads können jedem Hardwarethread zugewiesen werden. Die Größe der Registerdatei 1906 kann über Ausführungsformen auf Grundlage der Anzahl von unterstützten Hardwarethreads variieren. Eine Registerumbenennung kann verwendet werden, um dynamisch Register zu Hardwarethreads zuzuteilen.
  • 20 ist ein Blockdiagramm, das Grafikprozessor-Anweisungsformate 2000 veranschaulicht. Die Grafikprozessor-Ausführungseinheiten unterstützen einen Anweisungssatz mit Anweisungen in mehreren Formaten. Die durchgezogen umrandeten Kästchen veranschaulichen die Komponenten, die allgemein in einer Ausführungseinheitsanweisung enthalten sind, während die gestrichelten Linien Komponenten enthalten, die optional sind oder die nur in einer Teilmenge der Anweisungen enthalten sind. In einigen Ausführungsformen der Grafikprozessor-Anweisungsformate 2000 sind Makroanweisungen beschrieben und veranschaulicht, dahingehend, dass sie Anweisungen sind, die der Ausführungseinheit geliefert werden, im Gegensatz zu Mikrooperationen, die sich aus einer Decodierung der Anweisung ergeben, sobald die Anweisung verarbeitet wurde. Somit kann eine einzelne Anweisung bewirken, dass Hardware mehrere Mikrooperationen durchführt.
  • Die hierin beschriebenen Grafikprozessor-Ausführungseinheiten können Anweisungen in einem 128-Bit-Anweisungsformat 2010 nativ unterstützen. Ein kompaktes 64-Bit-Anweisungsformat 2030 ist für einige Anweisungen verfügbar, auf Grundlage der ausgewählten Anweisung, der Anweisungsoptionen und der Anzahl der Operanden. Das native 128-Bit-Anweisungsformat 2010 bietet Zugriff auf alle Anweisungsoptionen, während einige Optionen und Operationen im 64-Bit-Format 2030 eingeschränkt sind. Die nativen Anweisungen, die im 64-Bit-Format 2030 verfügbar sind, variieren nach Ausführungsform. Die Anweisung wird teilweise unter Verwendung eines Satzes von Indexwerten in einem Indexfeld 2013 verdichtet. Die Hardware der Ausführungseinheit nimmt auf Grundlage der Indexwerte auf einen Satz von Komprimierungstabellen Bezug und verwendet die Ausgaben der Komprimierungstabelle, um eine native Anweisung im 128-Bit-Anweisungsformat 2010 zu rekonstruieren. Andere Größen und Formate von Anweisungen können verwendet werden.
  • Für jedes Format definiert der Anweisungsopcode 2012 die Operation, die die Ausführungseinheit durchzuführen hat. 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 Additionsanweisung eine gleichzeitige Additionsoperation über jeden Farbkanal durch, der ein Texturelement oder Bildelement repräsentiert. Standardmäßig führt die Ausführungseinheit jede Anweisung über alle Datenkanäle der Operanden durch. Das Anweisungsteuerungsfeld 2014 kann eine Steuerung bestimmter Ausführungsoptionen ermöglichen, wie eine Kanalauswahl (z. B. Prädikation) und Datenkanalreihenfolge (z. B. Swizzeln). Für Anweisungen im 128-Bit-Anweisungsformat 2010 schränkt ein Ausführungsgrößenfeld 2016 die Anzahl der Datenkanäle ein, die parallel ausgeführt werden. Ein Ausführungsgrößenfeld 2016 steht möglicherweise nicht zur Verwendung im kompakten 64-Bit-Anweisungsformat 2030 zur Verfügung.
  • Einige Ausführungseinheitsanweisungen weisen bis zu drei Operanden einschließlich zweier Quelloperanden src0 2020, src1 2022 und eines Zieloperanden (dest 2018) auf. Andere Anweisungen, wie beispielsweise Datenmanipulationsanweisungen, Skalarproduktanweisungen, Multiplikations-Additionsanweisungen oder Multiplikations-Akkumulationsanweisungen können einen dritten Quelloperanden (z. B. SRC2 2024) aufweisen. Der Anweisungs-Opcode 2012 bestimmt die Anzahl von Quelloperanden. Ein letzter Quelloperand einer Anweisung kann ein unmittelbarer (z. B. fest codierter) Wert sein, der mit der Anweisung übergeben wird. Die Ausführungseinheiten können auch mehrere Zielanweisungen unterstützen, wobei eines oder mehrere der Ziele basierend auf der Anweisung und/oder dem spezifizierten Ziel impliziert werden oder implizit sind.
  • Das 128-Bit-Anweisungsformat 2010 kann ein Zugriffs-/Adressmodusfeld 2026 beinhalten, das beispielsweise angibt, ob ein direkter Registeradressierungsmodus oder ein indirekter Registeradressierungsmodus verwendet wird. Wenn ein direkter 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-/Adressmodus-Feld 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 können unterstützt werden, die einen ausgerichteten 16-Byte-Zugriffsmodus und einen ausgerichteten 1-Byte-Zugriffsmodus enthalten, wobei die Byteausrichtung des Zugriffsmodus die Zugriffsausrichtung der Anweisungsoperanden bestimmt. In einem ersten Modus kann die Anweisung zum Beispiel Byte-ausgerichtete Adressierung für Quell- und Zieloperanden verwenden und in einem zweiten Modus kann die Anweisung eine 16-Byte-ausgerichtete Adressierung für alle Quell- und Zieloperanden verwenden.
  • Der Adressmodusabschnitt des Zugriffs-/Adressmodus-Feldes 2026 kann bestimmen, ob die Anweisung eine direkte oder eine indirekte Adressierung verwenden soll. Wenn ein direkter Registeradressierungsmodus verwendet wird, stellen Bits in der Anweisung direkt die Registeradresse eines oder mehrerer Operanden bereit. Wenn ein indirekter Registeradressierungsmodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden auf Grundlage eines Adressregisterwerts und eines Adressen-Direktfelds in der Anweisung berechnet werden.
  • Anweisungen können basierend auf Bitfeldern des Opcodes 2012 gruppiert werden, um die Opcode-Decodierung 2040 zu vereinfachen. Für einen 8-Bit-Opcode ermöglichen Bits 4, 5 und 6 der Ausführungseinheit, den Typ von Opcode zu ermitteln. Die präzise gezeigte Opcodegruppierung ist nur ein Beispiel. Eine Bewegung-und-Logik-Opcode-Gruppe 2042 kann Datenbewegungs- und Logikanweisungen (z. B. Bewegen (mov), Vergleichen (cmp)) beinhalten. Die Bewegungs- und Logikgruppe 2042 kann die fünf niederwertigsten Bits (LSB) gemeinsam nutzen, wobei Bewegungsanweisungen (mov) die Form von 0000xxxxb haben und Logikanweisungen die Form von 0001xxxxb haben. Eine Ablaufsteuerungsanweisungsgruppe 2044 (z. B. Aufruf, Springen (jmp)) enthält Anweisungen in der Form von 0010xxxxb (z. B. 0x20). Eine Gruppe für sonstige Anweisungen 2046 enthält eine Mischung von Anweisungen, einschließlich Synchronisierungsanweisungen (z. B. Warten, Senden) in Form von 0011xxxxb (z. B. 0x30). Eine Parallelmathematikanweisungsgruppe 2048 enthält komponentenweise arithmetische Anweisungen (z. B. Addieren, Multiplizieren (mul)) in Form von 0100xxxxb (z. B. 0x40). Die Parallelmathematikanweisungsgruppe 2048 führt die arithmetischen Operationen parallel über Datenkanäle hinweg durch. Die Vektormathematikgruppe 2050 enthält arithmetische Anweisungen (z. B. dp4) in Form von 0101xxxxb (z. B. 0x50). Die Vektormathematikgruppe führt Arithmetik wie Skalarproduktberechnungen an Vektoroperanden durch. Die veranschaulichte Opcode-Decodierung 2040 kann in einer Ausführungsform verwendet werden, um zu ermitteln, welcher Abschnitt einer Ausführungseinheit verwendet werden wird, um eine decodierte Anweisung auszuführen. Einige Anweisungen können zum Beispiel als systolische Anweisungen designiert sein, die von einem systolischen Array durchgeführt werden. Andere Anweisungen, wie Raytracing-Anweisungen (nicht gezeigt), können zu einem Raytracingkern oder Raytracinglogik innerhalb eines Segments oder einer Partition von Ausführungslogik geleitet werden.
  • Grafikpipeline
  • 21 ist ein Blockdiagramm eines Grafikprozessors 2100 gemäß einer anderen Ausführungsform. Die Elemente von 21 mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder funktionieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt.
  • Der Grafikprozessor 2100 kann verschiedene Arten von Grafikverarbeitungs-Pipelines beinhalten, wie etwa eine Geometriepipeline 2120, eine Medienpipeline 2130, eine Anzeigeengine 2140, eine Threadausführungslogik 2150 und eine Rendering-Ausgabe-Pipeline 2170. Der Grafikprozessor 2100 kann ein Grafikprozessor in einem Mehrkernverarbeitungssystem sein, das einen oder mehrere Universalverarbeitungskerne beinhaltet. Der Grafikprozessor kann durch Registerschreibvorgänge in ein oder mehrere Steuerregister (nicht gezeigt) oder durch Befehle gesteuert werden, die über eine Ringzwischenverbindung 2102 an den Grafikprozessor 2100 ausgegeben werden. Die Ringzwischenverbindung 2102 kann den Grafikprozessor 2100 an andere Verarbeitungskomponenten koppeln, wie andere Grafikprozessoren oder Universalprozessoren. Befehle von der Ringverbindung 2102 werden durch eine Befehlsstreamingeinheit 2103 interpretiert, die Anweisungen an individuelle Komponenten der Geometriepipeline 2120 oder der Medienpipeline 2130 liefert.
  • Die Befehlsstreamingeinheit 2103 kann die Operation einer Vertexabrufeinheit 2105 lenken, die Vertexdaten aus dem Speicher liest und Vertexverarbeitungsbefehle ausführt, die von der Befehlsstreamingeinheit 2103 bereitgestellt werden. Die Vertexabrufeinheit 2105 kann einem Vertexshader 2107, der an jedem Vertex eine Koordinatenraumtransformation und Beleuchtungsoperationen durchführt, Vertexdaten bereitstellen. Die Vertexabrufeinheit 2105 und der Vertexshader 2107 können Vertexverarbeitungsanweisungen durch Vergeben von Ausführungsthreads über einen Thread-Dispatcher 2131 an die Ausführungseinheiten 2152A-2152B ausführen.
  • Die Ausführungseinheiten 2152A-2152B können eine Anordnung von Vektorprozessoren mit einem Anweisungssatz zum Durchführen von Grafik- und Medienoperationen sein. Die Ausführungseinheiten 2152A-2152B können einen zugehörigen L1-Zwischenspeicher 2151 aufweisen, der für jede Anordnung spezifisch ist oder unter den Anordnungen gemeinsam genutzt wird. Der Zwischenspeicher kann als ein Datenzwischenspeicher, ein Anweisungszwischenspeicher oder ein einzelner Zwischenspeicher konfiguriert sein, der partitioniert ist, um Daten und Anweisungen in unterschiedlichen Partitionen zu enthalten.
  • Eine Geometriepipeline 2120 kann Tessellationskomponenten beinhalten, um eine hardwarebeschleunigte Tessellation von 3D-Objekten durchzuführen. Ein programmierbarer Hüllenshader 2111 kann diese Tessellationsoperationen konfigurieren. Ein programmierbarer Domänenshader 2117 kann eine Backend-Auswertung der Tessellationsausgabe bereitstellen. Eine Tessellationseinheit 2113 kann auf Anweisung des Hüllenshaders 2111 arbeiten und Sonderlogik beinhalten, um auf Grundlage eines groben geometrischen Modells, das als Eingabe in die Geometriepipeline 2120 bereitgestellt wurde, einen Satz von detaillierten geometrischen Objekten zu erzeugen. Falls darüber hinaus keine Tessellation verwendet wird, können Tessellationskomponenten (z. B. der Hüllenshader 2111, die Tessellationseinheit 2113 und der Domänenshader 2117) umgangen werden. Die Tessellationskomponenten können basierend auf Daten arbeiten, die vom Vertexshader 2107 empfangen werden.
  • Vollständige geometrische Objekte können durch einen Geometrieshader 2119 über einen oder mehrere Threads verarbeitet werden, die an die Ausführungseinheiten 2152A-2152B vergeben werden, oder können direkt zum Clipper 2129 weitergehen. Der Geometrieshader kann geometrische Gesamtobjekte anstatt Vertices oder Gruppen von Vertices bearbeiten, wie in vorangehenden Stufen der Grafikpipeline. Falls die Parkettierung deaktiviert ist, empfängt der Geometrieshader 2119 eine Eingabe vom Vertexshader 2107. Der Geometrieshader 2119 kann durch ein Geometrieshaderprogramm programmierbar sein, um Geometrietessellationen durchzuführen, falls die Tessellationseinheiten deaktiviert sind.
  • Vor einer Rasterung verarbeitet ein Clipper 2129 Vertexdaten. Der Clipper 2129 kann ein fester Funktionsclipper oder ein programmierbarer Clipper mit Clipping- und Geometrieshaderfunktionen sein. Eine Rasterungs- und Tiefentestkomponente 2173 in der Ausgaberenderpipeline 2170 kann Pixelshader abfertigen, um die geometrischen Objekte in Darstellungen pro Pixel umzuwandeln. Die Pixelshader-Logik kann in der Threadausführungslogik 2150 enthalten sein. Optional kann eine Anwendung die Rasterungs- und Tiefentestkomponente 2173 umgehen und über eine Ausgabestreamingeinheit 2123 auf nicht gerasterte Vertexdaten zugreifen.
  • Der Grafikprozessor 2100 weist einen Zwischenverbindungsbus, ein Zwischenverbindungsfabric oder einen anderen Zwischenverbindungsmechanismus auf, der ermöglicht, dass Daten und Nachrichten zwischen den Hauptkomponenten des Prozessors übermittelt werden. In einigen Ausführungsformen sind die Ausführungseinheiten 2152A-2152B und zugehörige Logikeinheiten (z. B. der L1-Zwischenspeicher 2151, der Abtaster 2154, der Texturzwischenspeicher 2158 usw.) über einen Datenanschluss 2156 verbunden, um auf Speicher zuzugreifen und mit Ausgaberenderpipelinekomponenten des Prozessors zu kommunizieren. Ein Abtaster 2154, die Zwischenspeicher 2151, 2158 und die Ausführungseinheiten 2152A-2152B können jeweils separate Speicherzugriffspfade aufweisen. Optional kann der Texturzwischenspeicher 2158 auch als ein Abtastzwischenspeicher konfiguriert sein.
  • Die Ausgaberenderpipeline 2170 kann eine Rasterungs- und Tiefentestkomponente 2173 beinhalten, die vertexbasierte Objekte in eine assoziierte pixelbasierte Darstellung umwandelt. Die Rasterungslogik kann eine Fenster-/Maskierungseinheit beinhalten, um eine feste Funktions-Dreieck- und Linien-Rasterung durchzuführen. Ein assoziierter Renderzwischenspeicher 2178 und Tiefenzwischenspeicher 2179 sind ebenfalls in einigen Ausführungsformen verfügbar. Eine Pixeloperationskomponente 2177 führt pixelbasierte Operationen an den Daten durch, obwohl mit 2D-Operationen assoziierte Pixeloperationen (z. B. Bitblockbildtransfers mit Mischen) in einigen Fällen von der 2D-Engine 2141 durchgeführt werden oder zum Zeitpunkt der Anzeige von der Anzeigesteuerung 2143 unter Verwendung von Überlagerungsanzeigeebenen substituiert werden. Ein gemeinsam genutzter L3-Zwischenspeicher 2175 kann allen Grafikkomponenten zur Verfügung stehen, was das gemeinsame Nutzen von Daten ohne die Verwendung von Hauptsystemspeicher ermöglicht.
  • Die Medienpipeline 2130 kann eine Medienengine 2137 und ein Video-Frontend 2134 beinhalten. Das Video-Frontend 2134 kann Pipelinebefehle von der Befehlsstreamingeinheit 2103 empfangen. Die Medienpipeline 2130 kann eine separate Befehlsstreamingeinheit beinhalten. Das Video-Frontend 2134 kann Medienbefehle verarbeiten, bevor der Befehl an die Medienengine 2137 gesendet wird. Die Medienengine 2137 kann Threaderzeugungsfunktionalität beinhalten, um Threads zum Versand über den Thread-Dispatcher 2131 an die Threadausführungslogik 2150 zu erzeugen.
  • Der Grafikprozessor 2100 kann eine Anzeigeengine 2140 beinhalten. Die Anzeigeengine 2140 kann zum Prozessor 2100 extern sein und koppelt die Ringzwischenverbindung 2102 oder einen anderen Zwischenverbindungsbus oder eine andere Zwischenverbindungsfabric an den Grafikprozessor koppeln. Die Anzeigeengine 2140 kann eine 2D-Engine 2141 und eine Anzeigesteuerung 2143 beinhalten. Die Anzeigeengine 2140 kann eine Sonderlogik enthalten, die dazu in der Lage ist, unabhängig von der 3D-Pipeline zu arbeiten. Die Anzeigesteuerung 2143 kann an eine Anzeigevorrichtung (nicht gezeigt) koppeln, die eine in das System integrierte Anzeigevorrichtung sein kann, wie in einem Laptopcomputer, oder eine externe Anzeigevorrichtung sein kann, die über einen Anzeigevorrichtungsanschluss angebunden ist.
  • Die Geometriepipeline 2120 und die Medienpipeline 2130 können konfigurierbar sein, um Operationen auf Grundlage mehrerer Grafik- und Medienprogrammierschnittstellen durchzuführen, und sind nicht für eine bestimmte Anwendungsprogrammierschnittstelle (API) spezifisch. Treibersoftware für den Grafikprozessor kann API-Aufrufe, die für eine bestimmte Grafik- oder Medienbibliothek spezifisch sind, in Befehle übersetzen, die vom Grafikprozessor verarbeitet werden können. Unterstützung für die Open Graphics Library (OpenGL), Open Computing Language (OpenCL) und/oder Vulkan-Grafik- und Rechen-API, alle von der Khronos-Gruppe, kann bereitgestellt werden. Unterstützung kann auch für die Direct3D-Bibliothek von der Microsoft Corporation bereitgestellt werden. Eine Kombination dieser Bibliotheken kann unterstützt werden. Unterstützung kann auch für die Open Source Computer Vision Library (OpenCV) bereitgestellt werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline würde ebenfalls unterstützt werden, falls eine Abbildung von der Pipeline der zukünftigen API auf die Pipeline des Grafikprozessors erstellt werden kann.
  • Programmierung der Grafikpipeline
  • 22A ist ein Blockdiagramm, das ein Grafikprozessor-Befehlsformat 2200 veranschaulicht, das zum Programmieren von Grafikverarbeitungspipelines verwendet wird, wie beispielsweise die hierin in Verbindung mit 16A, 17, 21 beschriebenen Pipelines. 22B ist ein Blockdiagramm, das eine Grafikprozessor-Befehlsfolge 2210 nach einer Ausführungsform veranschaulicht. Die durchgezogen umrandeten Kästchen in 22A veranschaulichen die Komponenten, die allgemein in einem Grafikbefehl enthalten sind, während die gestrichelten Linien Komponenten enthalten, die optional sind oder die nur in einer Teilmenge der Grafikbefehle enthalten sind. Das beispielhafte Grafikprozessor-Befehlsformat 2200 von 22A enthält 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 in einigen Befehlen ebenfalls enthalten.
  • Der Client 2202 kann die Clienteinheit der Grafikvorrichtung spezifizieren, die die Befehlsdaten verarbeitet. Ein Grafikprozessor-Befehlsparser kann das Clientfeld jedes Befehls untersuchen, um die weitere Verarbeitung des Befehls aufzubereiten und die Befehlsdaten an die passende Clienteinheit zu leiten. Die Grafikprozessor-Clienteinheiten können eine Speicherschnittstelleneinheit, eine Rendereinheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit beinhalten. Jede Clienteinheit kann eine entsprechende Verarbeitungspipeline aufweisen, die die Befehle verarbeitet. Sobald der Befehl von der Clienteinheit empfangen wurde, liest die Clienteinheit den Opcode 2204 und den Sub-Opcode 2205, falls vorhanden, um die durchzuführende Operation zu ermitteln. Die Clienteinheit führt den Befehl unter Verwendung von Informationen im Datenfeld 2206 durch. Für einige Befehle wird erwartet, dass eine explizite Befehlsgröße 2208 die Größe des Befehls angibt. Der Befehlsparser kann die Größe von mindestens einigen der Befehle auf Grundlage des Befehlsopcodes automatisch ermitteln. Befehle können über Mehrfache eines Doppelwortes ausgerichtet werden. Andere Befehlsformate können auch verwendet werden.
  • Das Ablaufdiagramm in 22B veranschaulicht eine beispielhafte Grafikprozessor-Befehlsfolge 2210. Software oder Firmware eines Datenverarbeitungssystems, das einen beispielhaften Grafikprozessor umfasst, kann eine Version der gezeigten Befehlsfolge verwenden, um einen Satz von Grafikoperationen einzurichten, auszuführen und abzuschließen. Eine beispielhafte Befehlsfolge wird nur zu Beispielzwecken gezeigt und ist nicht auf diese spezifischen Befehle oder auf diese Befehlsfolge beschränkt. Darüber hinaus können die Befehle als ein Batch von Befehlen in einer Befehlsfolge erteilt werden, sodass der Grafikprozessor die Befehlsfolge zumindest teilweise gleichzeitig verarbeitet.
  • Die Grafikprozessor-Befehlsfolge 2210 kann mit einem Pipelineleerungsbefehl 2212 beginnen, um zu bewirken, dass alle aktiven Grafikpipelines die aktuell anstehenden Befehle für die Pipeline abschließen. Optional können die 3D-Pipeline 2222 und die Medienpipeline 2224 nicht gleichzeitig arbeiten. Die Pipelineleerung wird durchgeführt, um zu veranlassen, dass die aktive Grafikpipeline alle anstehenden Befehle abschließt. Als Reaktion auf eine Pipelineleerung hält der Befehlsparser für den Grafikprozessor eine Befehlsverarbeitung an, bis die aktiven Zeichenengines anstehende Operationen abschließen und die relevanten Lesezwischenspeicher ungültig gemacht sind. Optional können alle Daten im Renderzwischenspeicher, die als verändert' markiert sind, in den Speicher geleert werden. Der Pipelineleerungsbefehl 2212 kann zur Pipelinesynchronisierung oder vor dem Platzieren des Grafikprozessors in einen Ruhezustand verwendet werden.
  • Ein Pipelineauswahlbefehl 2213 kann verwendet werden, wenn eine Befehlsfolge erfordert, dass der Grafikprozessor explizit zwischen Pipelines wechselt. Ein Pipelineauswahlbefehl 2213 kann nur einmal innerhalb eines Ausführungskontexts erforderlich sein, bevor Pipelinebefehle erteilt werden, es sei denn, der Kontext hat Befehle für beide Pipelines auszugeben. Ein Pipelineleerungsbefehl 2212 kann unmittelbar vor einem Pipelinewechsel über den Pipelineauswahlbefehl 2213 erforderlich sein.
  • Ein Pipelinesteuerbefehl 2214 kann eine Grafikpipeline zum Betrieb konfigurieren und kann verwendet werden, um die 3D-Pipeline 2222 und die Medienpipeline 2224 zu programmieren. Der Pipelinesteuerbefehl 2214 kann den Pipelinezustand für die aktive Pipeline konfigurieren. Der Pipelinesteuerbefehl 2214 kann zur Pipelinesynchronisierung und dazu verwendet werden, vor dem Verarbeiten eines Batchs von Befehlen Daten aus einem oder mehreren Zwischenspeichern in der aktiven Pipeline zu löschen.
  • Mit dem Rückgabepufferzustand 2216 verbundene Befehle können verwendet werden, um einen Satz von Rückgabepuffern für die jeweiligen Pipelines zum Schreiben von Daten zu konfigurieren. Einige Pipelineoperationen erfordern die Zuordnung, Auswahl oder Konfiguration eines oder mehrerer Rückgabepuffer, 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 threadübergreifende Kommunikation durchzuführen. Der Rückgabepufferzustand 2216 kann ein Auswählen der Größe und Anzahl der Rückgabepuffer beinhalten, die für einen Satz von Pipelineoperationen zu verwenden sind.
  • Die verbleibenden Befehle in der Befehlsfolge unterscheiden sich auf Grundlage der aktiven Pipeline für Operationen. Auf Grundlage einer Pipelineermittlung 2220 ist die Befehlsfolge auf die 3D-Pipeline 2222, beginnend mit dem 3D-Pipelinezustand 2230, oder die Medienpipeline 2224, beginnend mit dem Medienpipelinezustand 2240, zugeschnitten.
  • Die Befehle, um den 3D-Pipelinezustand 2230 zu konfigurieren, enthalten Festlegungsbefehle für den 3D-Zustand für den Vertexpufferzustand, Vertexelementzustand, konstanten Farbzustand, Tiefenpufferzustand und andere Zustandsvariablen, die zu konfigurieren sind, bevor 3D-Primitiven-Befehle verarbeitet werden. Die Werte dieser Befehle werden zumindest teilweise auf Basis der bestimmten 3D-API in Verwendung ermittelt. Die 3D-Pipelinezustandsbefehle 2230 können auch fähig sein, bestimmte Pipelineelemente selektiv zu deaktivieren oder zu umgehen, falls diese Elemente nicht verwendet werden.
  • Ein 3D-Primitiven-Befehl 2232 kann verwendet werden, um 3D-Primitiven zu übermitteln, die von der 3D-Pipeline zu verarbeiten sind. Befehle und zugehörige Parameter, die an den Grafikprozessor über den 3D-Primitiven-Befehl 2232 übermittelt werden, werden an die Vertexabruffunktion in der Grafikpipeline weitergeleitet. Die Vertexabruffunktion verwendet die Daten des 3D-Primitiven-Befehls 2232, um Vertexdatenstrukturen zu generieren. Die Vertexdatenstrukturen werden in einem oder mehreren Rückgabepuffern gespeichert. Der 3D-Primitiven-Befehl 2232 kann verwendet werden, um über Vertexshader Vertexoperationen an 3D-Primitiven durchzuführen. Um Vertexshader zu verarbeiten, verteilt die 3D-Pipeline 2222 Shaderausführungsthreads an Grafikprozessor-Ausführungseinheiten.
  • Die 3D-Pipeline 2222 kann über einen Ausführungsbefehl 2234 oder ein Ausführungsereignis ausgelöst werden. Ein Register kann Auslösebefehlsausführungen schreiben. Eine Ausführung kann über einen „Los‟- oder „Anstoß‟-Befehl in der Befehlsfolge ausgelöst werden. In einer Ausführungsform kann die Befehlsausführung unter Verwendung eines Pipelinesynchronisationsbefehls ausgelöst werden, um die Befehlsfolge durch die Grafikpipeline zu spülen. Die 3D-Pipeline führt eine Geometrieverarbeitung für die 3D-Primitiven aus. Sobald die Vorgänge abgeschlossen sind, werden die resultierenden geometrischen Objekte gerastert und die Pixelengine färbt die resultierenden Pixel ein. Zusätzliche Befehle, um eine Pixelschattierung und Pixel-Hintergrundoperationen zu steuern, können für diese Operationen auch enthalten sein.
  • Die Grafikprozessor-Befehlsfolge 2210 kann beim Durchführen von Medienoperationen dem Pfad der Medienpipeline 2224 folgen. Im Allgemeinen hängen die bestimmte Verwendung und die Art der Programmierung für die Medienpipeline 2224 von den durchzuführenden Medien- oder Rechenoperationen ab. Spezifische Mediendecodieroperationen können während der Mediendecodierung an die Medienpipeline ausgelagert werden. Die Medienpipeline kann auch umgangen werden und eine Mediendecodierung kann gänzlich oder teilweise unter Verwendung von Ressourcen durchgeführt werden, die von einem oder mehreren Universalverarbeitungskernen bereitgestellt werden. Die Medienpipeline kann auch Elemente für Operationen einer Universalgrafikprozessoreinheit (GPGPU) beinhalten, wobei der Grafikprozessor verwendet wird, um SIMD-Vektoroperationen unter Verwendung von rechnerischen Shaderprogrammen durchzuführen, die nicht explizit mit dem Rendern von Grafikgrundtypen verbunden sind.
  • Die Medienpipeline 2224 kann auf ähnliche Weise wie die 3D-Pipeline 2222 konfiguriert sein. Ein Befehlssatz, um den Zustand der Medienpipeline 2240 zu konfigurieren, wird vor den Medienobjektbefehlen 2242 in eine Befehlswarteschlange verteilt oder platziert. Befehle für den Medienpipelinezustand 2240 können Daten beinhalten, um die Medienpipelineelemente zu konfigurieren, die verwendet werden, um die Medienobjekte zu verarbeiten. Dies enthält Daten, um die Videodecodier- und Videocodierlogik in der Medienpipeline zu konfigurieren, wie ein Codier- oder Decodierformat. Befehle für den Medienpipelinezustand 2240 können auch die Verwendung von einem oder mehreren Zeigern auf „indirekte“ Zustandselemente unterstützen, die eine Gruppe von Zustandseinstellungen enthalten.
  • Medienobjektbefehle 2242 können Zeiger auf Medienobjekte zur Verarbeitung durch die Medienpipeline liefern. Die Medienobjekte enthalten Speicherpuffer, die zu verarbeitende Videodaten enthalten. Optional müssen alle Medienpipelinezustände gültig sein, bevor ein Medienobjektbefehl 2242 erteilt wird. Sobald der Pipelinezustand konfiguriert ist und die Medienobjektbefehle 2242 in die Warteschlange gereiht sind, wird die Medienpipeline 2224 über einen Ausführungsbefehl 2244 oder ein äquivalentes Ausführungsereignis (z. B. einen Registerschreibvorgang) ausgelöst. Eine Ausgabe von der Medienpipeline 2224 kann dann durch von der 3D-Pipeline 2222 oder der Medienpipeline 2224 bereitgestellte Operationen nachbearbeitet werden. GPGPU-Operationen können auf ähnliche Weise wie Medienoperationen konfiguriert und ausgeführt werden.
  • Grafiksoftwarearchitektur
  • 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 Universalprozessorkerne 2334 beinhalten. Der Prozessor 2330 kann eine Variante des Prozessors 1402 oder ein beliebiger anderer der hierin beschriebenen Prozessoren sein. Der Prozessor 2330 kann anstelle des Prozessors 1402 oder eines beliebigen anderen der hierin beschriebenen Prozessoren verwendet werden. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit dem Prozessor 1402 oder einem beliebigen anderen der hierin beschriebenen Prozessoren auch eine entsprechende Kombination mit dem Grafikprozessor 2332, ist aber nicht darauf beschränkt. Zudem beschreiben die Elemente von 23 mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder funktionieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, 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 Shaderprogramme beinhalten, die Shader-Anweisungen 2312 beinhalten. Die Shader-Sprachanweisungen können in einer höheren Shadersprache, wie der High Level Shader Language (HLSL) von Direct3D oder der OpenGL Shader Language (GLSL) und so weiter sein. Die Anwendung kann auch ausführbare Anweisungen 2314 in einer zur Ausführung durch den Universalprozessorkern 2334 geeigneten Maschinensprache beinhalten. Die Anwendung kann auch Grafikobjekte 2316 beinhalten, die durch Vertexdaten definiert sind.
  • Das Betriebssystem 2320 kann ein Microsoft® Windows®-Betriebssystem von der Microsoft Corporation, ein proprietäres UNIX-ähnliches Betriebssystem oder ein quelloffenes 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 in Verwendung ist, verwendet das Betriebssystem 2320 einen Frontend-Shader-Compiler 2324, um eine Shaderanweisung 2312 in HLSL in eine niedrigere Shadersprache zu compilieren. Die Compilierung kann eine einsatzsynchrone (JIT) Compilierung sein oder die Anwendung kann eine Shader-Vorcompilierung durchführen. Shader auf hoher Ebene können während der Compilierung der 3D-Grafikanwendung 2310 in Shader auf niedriger Ebene compiliert werden. Die Shaderanweisungen 2312 können in einer Zwischenform bereitgestellt sein, wie einer Version der von der Vulkan-API verwendeten Standard Portable Intermediate Representation (SPIR).
  • Ein Benutzermodus-Grafiktreiber 2326 kann einen Backend-Shader-Compiler 2327 enthalten, um die Shaderanweisungen 2312 in eine hardwarespezifische Repräsentation umzuwandeln. Wenn die OpenGL-API in Verwendung ist, werden Shaderanweisungen 2312 in der GLSL-Sprache auf hoher Ebene an einen Benutzermodus-Grafiktreiber 2326 zur Compilierung weitergeleitet. Der Benutzermodus-Grafiktreiber 2326 kann Betriebssystemkernelmodus-Funktionen 2328 verwenden, um mit einem Kernelmodus-Grafiktreiber 2329 zu kommunizieren. Der Kernelmodus-Grafiktreiber 2329 kann mit dem Grafikprozessor 2332 kommunizieren, um Befehle und Anweisungen zu versenden.
  • IP-Kern-Implementierungen
  • Ein oder mehrere Gesichtspunkte können durch repräsentativen Code implementiert sein, der auf einem maschinenlesbaren Medium gespeichert ist, das Logik in einer integrierten Schaltung wie einem Prozessor repräsentiert und/oder definiert. Das maschinenlesbare Medium kann zum Beispiel Anweisungen enthalten, die verschiedene Logik im Prozessor repräsentiert. Wenn sie von einer Maschine gelesen werden, können die Anweisungen die Maschine veranlassen, die Logik zu erzeugen, um die hierin beschriebenen Techniken durchzuführen. Derartige Darstellungen, als „IP-Kerne“ bekannt, sind wiederverwendbare Logikeinheiten für eine integrierte Schaltung, die auf einem greifbaren, maschinenlesbaren Medium als ein Hardwaremodell gespeichert sein können, das die Struktur der integrierten Schaltung beschreibt. Das Hardwaremodell kann an verschiedene Kunden oder Fertigungsanlagen geliefert werden, die das Hardwaremodell in Fertigungsmaschinen laden, die die integrierten Schaltung herstellen. Die integrierte Schaltung kann so gefertigt werden, dass die Schaltung Operationen durchführt, die im Zusammenhang mit beliebigen der hierin beschriebenen Ausführungsformen beschrieben wurden.
  • 24A ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem 2400 veranschaulicht, das verwendet werden kann, um eine integrierte Schaltung herzustellen, um Operationen nach einer Ausführungsform durchzuführen. Das IP-Kern-Entwicklungssystem 2400 kann verwendet werden, um modulare, wiederverwendbare Designs zu erstellen, die in ein größeres Design eingebunden werden können oder verwendet werden können, um eine gesamte integrierte Schaltung (z. B. eine integrierte SoC-Schaltung) zu konstruieren. Eine Designanlage 2430 kann eine Softwaresimulation 2410 eines IP-Kern-Designs in einer höheren Programmiersprache (z. B. C/C++) generieren. Die Softwaresimulation 2410 kann verwendet werden, um das Verhalten des IP-Kerns unter Verwendung eines Simulationsmodells 2412 zu konstruieren, testen und zu verifizieren. Das Simulationsmodell 2412 kann funktionale, Verhaltens- und/oder Zeitgebungssimulationen enthalten. Ein Design auf Registertransferebene (RTL) 2415 kann dann erstellt oder aus dem Simulationsmodell 2412 zusammengesetzt werden. Das RTL-Design 2415 ist eine Abstraktion des Verhaltens der integrierten Schaltung, das den Fluss digitaler Signale zwischen Hardwareregistern modelliert, einschließlich der assoziierten Logik, die unter Verwendung der modellierten digitalen Signale durchgeführt wird. Zusätzlich zu einem RTL-Design 2415 können auch Designs niedrigerer Ebenen auf Logikebene oder Transistorebene erstellt, konstruiert oder zusammengesetzt werden. Deshalb können die bestimmten Details des anfänglichen Designs und der Simulation variieren.
  • Das RTL-Design 2415 oder ein äquivalentes können weiter von der Designanlage in ein Hardwaremodell 2420 zusammengesetzt werden, das in einer Hardwarebeschreibungssprache (HDL) oder einer anderen Darstellung von physikalischen Designdaten sein kann. Die HDL kann weiter simuliert oder getestet werden, um das IP-Kern-Design zu verifizieren. Das IP-Kern-Design kann zur Lieferung an eine Fertigungsanlage von Dritten 2465 unter Verwendung von nichtflüchtigem Speicher 2440 (z. B. einer Festplatte, Flashspeicher oder einem beliebigen nichtflüchtigen Speicherungsmedium) gespeichert werden. Alternativ kann das IP-Kern-Design über eine verdrahtete Verbindung 2450 oder drahtlose Verbindung 2460 (z. B. über das Internet) gesendet werden. Die Fertigungsanlage 2465 kann dann eine integrierte Schaltung fertigen, die zumindest teilweise auf dem IP-Kern-Design basiert. Die gefertigte integrierte Schaltung kann konfiguriert sein, Operationen nach mindestens einer hierin beschriebenen Ausführungsform durchzuführen.
  • 24B veranschaulicht eine seitliche Querschnittsansicht einer integrierten Schalkreisgehäuseanordnung 2470. Die integrierte Schaltungsgehäuseanordnung 2470 veranschaulicht eine Implementierung eines oder mehrerer Prozessor- oder Beschleunigervorrichtungen, wie sie hierin beschrieben sind. Die Gehäuseanordnung 2470 enthält 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 Abschnitte eines der Prozessoren(e), Grafikprozessor(en) oder anderer hierin beschriebenen Beschleunigervorrichtungen enthalten. Jede Logikeinheit 2472, 2474 kann in einem Halbleiterchip implementiert sein und über eine Zwischenverbindungsstruktur 2473 an das Substrat 2480 gekoppelt sein. Die Zwischenverbindungsstruktur 2473 kann konfiguriert sein, elektrische Signale zwischen der Logik 2472, 2474 und dem Substrat 2480 zu leiten und kann Zwischenverbindungen wie unter anderem Lötperlen oder Säulen enthalten. Die Zwischenverbindungsstruktur 2473 kann ausgelegt sein, elektrische Signale wie beispielsweise Eingabe/Ausgabe(E/A)-Signale und/oder Energie- oder Erdungssignale zu leiten, die mit dem Betrieb der Logik 2472, 2474 assoziiert sind. Optional kann das Substrat 2480 ein Laminatsubstrat auf Epoxidbasis sein. Das Substrat 2480 kann auch andere geeignete Arten von Substraten beinhalten. Die Gehäuseanordnung 2470 kann über eine Gehäusezwischenverbindung 2483 mit anderen elektrischen Vorrichtungen verbunden sein. Die Gehäusezwischenverbindung 2483 kann an eine Oberfläche des Substrats 2480 gekoppelt sein, um elektrische Signale an andere elektrische Vorrichtungen zu leiten, wie eine Hauptplatine, einen anderen Chipsatz oder ein Mehrchipmodul.
  • Die Logikeinheiten 2472, 2474 können elektrisch mit einer Brücke 2482 gekoppelt sein, die dazu ausgelegt ist, elektrische Signale zwischen der Logik 2472, 2474 zu leiten. Die Brücke 2482 kann eine dichte Zwischenverbindungsstruktur sein, die eine Route für elektrische Signale bietet. Die Brücke 2482 kann ein Brückensubstrat enthalten, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Elektrische Leitungselemente können auf dem Brückensubstrat 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 Chips enthalten. Der eine oder die mehreren Chips können durch null oder mehr Brücken verbunden sein, da die Brücke 2482 ausgeschlossen sein kann, wenn die Logik auf einem einzelnen Chip enthalten ist. Alternativ können mehrere Chips oder Logikeinheiten durch eine oder mehrere Brücken verbunden sein. Zusätzlich können mehrere Logikeinheiten, Chips und Brücken zusammen in anderen möglichen Konfigurationen verbunden sein, einschließlich dreidimensionaler Konfigurationen.
  • 24C veranschaulicht eine Gehäuseanordnung 2490, die mehrere Einheiten von Hardwarelogik-Einzelchips enthält, die mit einem Substrat 2480 (z. B. einem Basischip) verbunden sind. Eine Grafikverarbeitungseinheit, Parallelprozessor und/oder Rechenbeschleuniger wie hierin beschrieben kann bzw. können aus verschiedenen Silizium-Einzelchips bestehen, die getrennt hergestellt werden. In diesem Kontext ist ein Einzelchip eine zumindest teilweise eingehauste integrierte Schaltung, die individuelle Logikeinheiten enthält, die mit anderen Einzelchips in ein größeres Gehäusepaket zusammengesetzt werden können. Ein verschiedenartiger Satz von Einzelchips mit unterschiedlicher IP-Kernlogik kann in eine einzige Vorrichtung zusammengesetzt werden. Zusätzlich können die Einzelchips unter Verwendung von aktiver Zwischenschaltungstechnologie in einen Basischip oder Basis-Einzelchip integriert werden. Die hierin beschriebenen Konzepte ermöglichen die Zwischenverbindung und Kommunikation zwischen den verschiedenen Formen von IP innerhalb der GPU. IP-Kerne können unter Verwendung verschiedener Prozesstechnologien hergestellt sein und während der Herstellung zusammengesetzt werden, was die Komplexität eines Zusammenlegens mehrerer IPs, insbesondere auf einem großen SoC mit mehreren Arten von IPs, auf den gleichen Herstellungsprozess vermeidet. Eine Ermöglichung der Verwendung mehrerer Prozesstechnologien verbessert die Produkteinführungszeit und bietet einen kostengünstigen Weg, mehrere Produkt-SKUs zu erzeugen. Darüber hinaus sind die getrennten IPs besser geeignet, unabhängig mit Energie angesteuert zu werden, Komponenten, die bei einer bestimmten Arbeitslast nicht in Verwendung sind, können ausgeschaltet werden, was den Gesamtenergieverbrauch reduziert.
  • In verschiedenen Ausführungsformen kann eine Gehäuseanordnung 2490 weniger oder mehr Komponenten und Einzelkomponenten enthalten, die durch eine Fabric 2485 oder eine oder mehrere Brücken 2487 miteinander verbunden sind. Die Einzelchips innerhalb der Gehäuseanordnung 2490 können eine 2,5D-Anordnung unter Verwendung einer Chip-auf-Waferauf-Substrat-Stapelung aufweisen, bei der mehrere Chips nebeneinander auf einem Siliziuminterposer gestapelt sind, der Siliziumdurchkontaktierungen (TSVs) beinhaltet, um die Einzelchips mit dem Substrat 2480 zu koppeln, das elektrische Verbindungen mit der Gehäusezwischenverbindung 2483 beinhaltet.
  • Bei einer Ausführungsform ist der Siliziuminterposer ein aktiver Interposer 2489, der zusätzlich zu TSVs eingebettete Logik beinhaltet. Bei einer solchen Ausführungsform sind die Einzelchips innerhalb der Gehäuseanordnung 2490 unter Verwendung einer 3D-Fläche-an-Fläche-Chip-Stapelung auf dem aktiven Interposer 2489 angeordnet. Der aktive Interposer 2489 kann Hardwarelogik für die E/A 2491, den Zwischenspeicher 2492 und andere Hardwarelogik 2493 zusätzlich zur Zwischenverbindungsfabric 2485 und einer Siliziumbrücke 2487 beinhalten. Die Fabric 2485 ermöglicht eine Kommunikation zwischen den verschiedenen Logik-Einzelchips 2472, 2474 und der Logik 2491, 2493 innerhalb des aktiven Interposers 2489. Die Fabric 2485 kann eine NoC-Zwischenverbindung oder eine andere Form einer paketvermittelten Fabric sein, die Datenpakete zwischen Komponenten der Gehäuseanordnung vermittelt. Für komplexe Baugruppen kann die Fabric 2485 ein dedizierter Einzelchip sein, der eine Kommunikation zwischen den verschiedenen Hardwarelogiken der Gehäuseanordnung 2490 ermöglicht.
  • Brückenstrukturen 2487 innerhalb des aktiven Interposers 2489 können verwendet werden, um eine Punkt-zu-Punkt-Zwischenverbindung beispielsweise zwischen Logik- oder E/A-Einzelchips 2474 und Speicher-Einzelchips 2475 zu ermöglichen. Bei manchen Implementierungen können die Brückenstrukturen 2487 auch innerhalb des Substrats 2480 eingebettet sein.
  • Die Hardwarelogik-Einzelchips können Sonder-Hardwarelogik-Einzelchips 2472, Logik- oder E/A-Einzelchips 2474 und/oder Speicher-Einzelchips 2475 enthalten. Die Hardwarelogik-Einzelchips 2472 und Logik- oder E/A-Einzelchips 2474 können zumindest teilweise in konfigurierbarer Logik oder Logikhardware mit fester Funktionalität implementiert sein und können einen oder mehrere Abschnitte eines der Prozessoren(e), Grafikprozessor(en), Parallelprozessoren oder anderer hierin beschriebenen Beschleunigervorrichtungen enthalten. Die Speicher-Einzelchips 2475 können DRAM-Speicher (z. B. GDDR, HBM) oder Zwischenspeicher (SRAM) sein. Der Zwischenspeicher 2492 innerhalb des aktiven Interposers 2489 (oder des Substrats 2480) kann als ein globaler Zwischenspeicher für die Gehäuseanordnung 2490, als Teil eines verteilten globalen Zwischenspeichers oder als ein dedizierter Zwischenspeicher für die Fabric 2485 fungieren.
  • Jeder Einzelchip kann als separates Halbleiterchip gefertigt und mit einem Basischip gekoppelt sein, der innerhalb des Substrats 2480 eingebettet oder mit diesem gekoppelt ist. Die Kopplung mit dem Substrat 2480 kann über eine Zwischenverbindungsstruktur 2473 durchgeführt werden. Die Zwischenverbindungsstruktur 2473 kann ausgelegt sein, um elektrische Signale zwischen den verschiedenen Einzelchips und Logik innerhalb des Substrats 2480 zu leiten. Die Zwischenverbindungsstruktur 2473 kann Zwischenverbindungen wie unter anderem Lötperlen oder Säulen enthalten. In einigen Ausführungsformen kann die Zwischenverbindungsstruktur 2473 konfiguriert sein, elektrische Signale wie beispielsweise Eingabe/Ausgabe(E/A)-Signale und/oder Energie- oder Erdungssignale zu leiten, die mit dem Betrieb der Logik-, E/A- und Speicher-Einzelchips assoziiert sind. Bei einer Ausführungsform koppelt eine zusätzliche Zwischenverbindungsstruktur den aktiven Interposer 2489 mit dem Substrat 2480.
  • 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 Gehäuseanordnung 2490 kann über eine Gehäusezwischenverbindung 2483 mit anderen elektrischen Vorrichtungen verbunden sein. Die Gehäusezwischenverbindung 2483 kann an eine Oberfläche des Substrats 2480 gekoppelt sein, um elektrische Signale an andere elektrische Vorrichtungen zu leiten, wie eine Hauptplatine, einen anderen Chipsatz oder ein Mehrchipmodul.
  • Ein Logik- oder E/A-Einzelchip 2474 und ein Speicher-Einzelchip 2475 können elektrisch über eine Brücke 2487 gekoppelt sein, die ausgelegt ist, elektrische Signale zwischen dem Logik- oder E/A-Einzelchip 2474 und einem Speicher-Einzelchip 2475 zu lenken. Die Brücke 2487 kann eine dichte Zwischenverbindungsstruktur sein, die eine Route für elektrische Signale bietet. Die Brücke 2487 kann ein Brückensubstrat enthalten, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Elektrische Leitungselemente können auf dem Brückensubstrat gebildet werden, um eine Chip-zu-Chip-Verbindung zwischen der Logik oder dem E/A-Einzelchip 2474 und einem Speicher-Einzelchip 2475 bereitzustellen. Die Brücke 2487 kann auch als eine Siliziumbrücke oder eine Zwischenverbindungsbrücke bezeichnet werden. Die Brücke 2487 ist zum Beispiel eine Embedded Multi-Die Interconnect Bridge (EMIB). Alternativ kann die Brücke 2487 einfach eine direkte Verbindung von einem Einzelchip zu einem anderen Einzelchip sein.
  • 24D veranschaulicht eine Gehäuseanordnung 2494, die austauschbare Einzelchips 2495 enthält, nach einer Ausführungsform. Die austauschbaren Einzelchips 2495 können in standardisierte Schlitze auf einem oder mehreren Basis-Einzelchips 2496, 2498 zusammengesetzt werden. Die Basis-Einzelchips 2496, 2498 können über eine Brücken-Zwischenverbindung 2497 gekoppelt sein, die den anderen hierin beschriebenen Brücken-Zwischenverbindungen ähnlich sein kann und beispielsweise eine EMIB sein kann. Speicher-Einzelchips können auch über eine Brücken-Zwischenverbindung mit Logik- oder E/A-Einzelchips verbunden sein. E/A- und Logik-Einzelchips können über eine Zwischenverbindungsfabric kommunizieren. Die Basis-Einzelchips können jeweils einen oder mehrere Schlitze in einem standardisierten Format für entweder Logik oder E/A oder Speicher/Zwischenspeicher unterstützen.
  • SRAM- und Energieversorgungsschaltungen können in einen oder mehrere der Basis-Einzelchips 2496, 2498 gefertigt sein, die unter Verwendung einer relativ zu den austauschbaren Einzelchips 2495, die auf den Basis-Einzelchips gestapelt sind, verschiedenen Prozesstechnologie gefertigt sein können. Beispielsweise können die Basis-Einzelchips 2496, 2498 unter Verwendung einer größeren Prozesstechnologie gefertigt sein, während die austauschbaren Einzelchips unter Verwendung einer kleineren Prozesstechnologie hergestellt sein können. Einer oder mehrere der austauschbaren Einzelchips 2495 können Speicher-Einzelchips (z. B. DRAM-Einzelchips) sein. Unterschiedliche Speicherdichten können für die Gehäuseanordnung 2494 auf Grundlage der Energie und/oder Leistung ausgewählt werden, auf die für das Produkt abgezielt wird, das die Gehäuseanordnung 2494 verwendet. Darüber hinaus können Logik-Einzelchips mit einer unterschiedlichen Anzahl von Typen von funktionalen Einheiten zum Zeitpunkt des Zusammenbaus auf Grundlage der Energie und/oder Leistung ausgewählt werden, auf die für das Produkt abgezielt wird. Darüber hinaus können Einzelchips, die IP-Logikkerne verschiedener Typen beinhalten, in die austauschbaren Einzelchipschlitze eingesetzt werden, was Hybrid-Prozessordesigns ermöglicht, die IP-Blöcke unterschiedlicher Technologien frei kombinieren können.
  • Beispielhafte integrierte Ein-Chip-System-Schaltung
  • 25-26B veranschaulichen beispielhafte integrierte Schaltungen und zugehörige Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt werden können. Zusätzlich zu den veranschaulichten können andere Logik und Schaltungen enthalten sein, einschließlich zusätzlicher Grafikprozessoren/Kerne, peripherer Schnittstellensteuerungen oder Universalprozessorkerne. Die Elemente von 25-26B mit den gleichen oder ähnlichen Namen wie die Elemente einer beliebigen anderen Figur hierin beschreiben die gleichen Elemente wie in den anderen Figuren, können auf ähnliche Weise arbeiten oder funktionieren, können die gleichen Komponenten umfassen und können mit anderen Entitäten wie jene, die an anderer Stelle hierin beschrieben sind, verknüpft sein, sind jedoch nicht darauf beschränkt.
  • 25 ist ein Blockdiagramm, das eine beispielhafte integrierte Ein-Chip-System-Schaltung 2500 veranschaulicht, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt werden kann. Die beispielhafte integrierte Schaltung 2500 beinhaltet einen oder mehrere Anwendungsprozessoren 2505 (z. B. CPUs), mindestens einen Grafikprozessor 2510, der eine Variante des Grafikprozessors 1408, 1508, 2510 oder eines beliebigen hierin beschriebenen Grafikprozessors sein kann, und kann anstelle beliebiger beschriebenen Grafikprozessoren verwendet werden. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit einem Grafikprozessor hierin auch eine entsprechende Kombination mit dem einen Grafikprozessor 2510, ist aber nicht darauf beschränkt. Die integrierte Schaltung 2500 kann zusätzlich einen Bildprozessor 2515 und/oder einen Videoprozessor 2520 enthalten, von denen beliebige ein modularer IP-Kern von der gleichen oder mehreren verschiedenen Designanlagen sein können. Die integrierte Schaltung 2500 kann periphere oder Buslogik beinhalten, die eine USB-Steuerung 2525, eine UART-Steuerung 2530, eine SPI/SDIO-Steuerung 2535 und eine I2S/I2C-Steuerung 2540 beinhaltet. Zusätzlich kann die integrierte Schaltung eine Anzeigevorrichtung 2545 enthalten, die entweder an eine High-Definition-Multimedia-Interface(HDMI)-Steuerung 2550 und/oder eine Mobile-Industry-Processor-Interface(MIPI)-Anzeigeschnittstelle 2555 gekoppelt ist. Speicherung kann durch ein Flashspeicher-Subsystem 2560 bereitgestellt werden, das Flashspeicher und eine Flashspeichersteuerung enthält. Eine Speicherschnittstelle kann über eine Speichersteuerung 2565 zum Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt werden. Einige integrierte Schaltungen enthalten zusätzlich eine eingebettete Sicherheitsengine 2570.
  • 26A-26B sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung innerhalb eines SoC nach hierin beschriebenen Ausführungsformen veranschaulichen. Die Grafikprozessoren können Varianten des Grafikprozessors 1408, 1508, 2510 oder eines beliebigen anderen hierin beschriebenen Grafikprozessors sein. Der Grafikprozessor kann anstelle des Grafikprozessors 1408, 1508, 2510 oder eines beliebigen anderen der hierin beschriebenen Grafikprozessoren verwendet werden. Daher offenbart die Offenbarung jeglicher Merkmale in Kombination mit dem Grafikprozessor 1408, 1508, 2510, oder einem beliebigen anderen der hierin beschriebenen Grafikprozessoren auch eine entsprechende Kombination mit den Grafikprozessoren von 26A-26B, ist aber nicht darauf beschränkt. 26A veranschaulicht einen beispielhaften Grafikprozessor 2610 einer integrierten Ein-Chip-System-Schaltung nach einer Ausführungsform, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt werden kann. 26B veranschaulicht einen weiteren beispielhaften Grafikprozessor 2640 einer integrierten Ein-Chip-System-Schaltung nach einer Ausführungsform, die unter Verwendung eines oder mehrerer IP-Kerne gefertigt werden kann. Der Grafikprozessor 2610 von 26A ist ein Beispiel eines Niedrigenergie-Grafikprozessorkerns. Der Grafikprozessor 2640 von 26B ist ein Beispiel eines Grafikprozessorkerns mit höherer Leistung. Beispielsweise kann jeder des Grafikprozessors 2610 und des Grafikprozessors 2640 eine Variante des Grafikprozessors 2510 von 25 sein, wie zu Beginn dieses Absatzes erwähnt.
  • Wie in 26A gezeigt, enthält der Grafikprozessor 2610 einen Vertexprozessor 2605 und einen oder mehrere Fragmentprozessoren 2615A-2615N (z. B. 2615A, 2615B, 2615C, 2615D bis 2615N-1 und 2615N). Der Grafikprozessor 2610 kann über separate Logik unterschiedliche Shaderprogramme ausführen, sodass der Vertexprozessor 2605 optimiert ist, um Operationen für Vertexshaderprogramme auszuführen, während der eine oder die mehreren Fragmentprozessoren 2615A-2615N Fragmentschattierungsoperationen (z. B. Pixelschattierungsoperationen) für Fragment- oder Pixelshaderprogramme ausführen. Der Vertexprozessor 2605 führt die Vertexverarbeitungsphase der 3D-Grafikpipeline durch und erzeugt Primitive und Vertexdaten. Der bzw. die Fragmentprozessoren 2615A-2615N verwendet bzw. verwenden die vom Vertexprozessor 2605 generierten Primitiven- und Vertexdaten, um einen Framepuffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. Der eine bzw. die mehreren Fragmentprozessoren 2615A-2615N können optimiert sein, um Fragmentshaderprogramme auszuführen, wie sie in der OpenGL-API vorgesehen sind, die verwendet werden können, um ähnliche Operationen wie ein Pixelshaderprogramm durchzuführen, wie es in der Direct3D-API vorgesehen ist.
  • Der Grafikprozessor 2610 enthält zusätzlich eine oder mehrere Speicherverwaltungseinheiten (MMUs) 2620A-2620B, Zwischenspeicher 2625A-2625B und Schaltungszwischenverbindung(en) 2630A-2630B. Die eine oder die mehreren MMUs 2620A-2620B stellen eine virtuelle auf physische Adressenabbildung für den Grafikprozessor 2610 bereit, einschließlich für den Vertexprozessor 2605 und/oder den bzw. die Fragmentprozessoren 2615A-2615N, die auf im Speicher gespeicherte Vertex- oder Bild-/Texturdaten Bezug nehmen können, zusätzlich zu in dem einen oder den mehreren Zwischenspeichern 2625A-2625B gespeicherten Vertex- oder Bild-/Texturdaten. Die eine oder die mehreren MMUs 2620A-2620B können mit anderen MMUs im System synchronisiert sein, einschließlich einer oder mehreren MMLJs, die mit dem einen oder den mehreren Anwendungsprozessoren 2505, dem Bildprozessor 2515 und/oder dem Videoprozessor 2520 von 25 assoziiert sind, sodass jeder Prozessor 2505-2520 an einem gemeinsam genutzten oder vereinheitlichten virtuellen Speichersystem teilnehmen kann. Komponenten des Grafikprozessors 2610 können Komponenten anderer hierin beschriebener Grafikprozessoren entsprechen. Die eine oder die mehreren MMUs 2620A-2620B können der MMU 245 von 2C entsprechen. Der Vertexprozessor 2605 und der Fragmentprozessor 2615A-2615N können dem Grafikmultiprozessor 234 entsprechen. Der eine oder die mehreren Schaltungszwischenverbindungen 2630A-2630B ermöglichen dem Grafikprozessor 2610, an andere IP-Kerne im SoC anzubinden, entweder über einen internen Bus des SoC oder über eine direkte Verbindung, nach Ausführungsformen. Die eine oder die mehreren Schaltungszwischenverbindungen 2630A-2630B können der Daten-Crossbar 240 aus 2C entsprechen. Eine weitere Entsprechung kann zwischen analogen Komponenten des Grafikprozessors 2610 und den verschiedenen hierin beschriebenen Grafikprozessorarchitekturen gefunden werden.
  • Wie in 26B gezeigt, enthält der Grafikprozessor 2640 eine oder mehrere MMUs 2620A-2620B, Zwischenspeicher 2625A-2625B und Schaltungszwischenverbindungen 2630A-2630B des Grafikprozessors 2610 von 26A. Der Grafikprozessor 2640 enthält einen oder mehrere Shaderkerne 2655A-2655N (z. B. 2655A, 2655B, 2655C, 2655D, 2655E, 2655F bis 2655N-1 und 2655N), was eine einheitliche Shaderkernarchitektur bereitstellt, in der ein einzelner Kern oder Typ oder Kern alle Arten von programmierbarem Shadercode ausführen kann, einschließlich Shaderprogrammcode, um Vertexshader, Fragmentshader und/oder Rechenshader zu implementieren. Die genaue Anzahl der vorhandenen Shaderkerne kann zwischen Ausführungsformen und Implementierungen variieren. Zusätzlich enthält der Grafikprozessor 2640 eine Zwischenkern-Aufgabenverwaltung 2645, die als ein Thread-Dispatcher fungiert, um Ausführungsthreads an einen oder mehrere Shaderkerne 2655A-2655N und eine Kacheleinheit 2658 zur Beschleunigung von Kacheloperationen für kachelbasiertes Rendering zu verteilen, wobei Renderoperationen für eine Szene im Bildraum aufgeteilt werden, zum Beispiel, um eine lokale räumliche Kohärenz innerhalb einer Szene auszunutzen oder eine Verwendung von internen Zwischenspeichern zu optimieren. Die Shader-Kerne 2655A-2655N können beispielsweise dem Grafikmultiprozessor 234 wie in 2D oder den Grafikmultiprozessoren 325, 350 von 3A bzw. 3B oder der Mehrkerngruppe 365A von 3C entsprechen.
  • Tensorbeschleunigungslogik für Grafik- und Maschinenlernarbeitslasten
  • 27 ist ein Blockdiagramm eines Datenverarbeitungssystems 2700 nach einer Ausführungsform. Das Datenverarbeitungssystem 2700 ist ein heterogenes Verarbeitungssystem mit einem Prozessor 2702, einem vereinheitlichten Speicher 2710 und einer GPGPU 2720, die Beschleunigungslogik für maschinelles Lernen enthält. Der Prozessor 2702 und die GPGPU 2720 können beliebige der hierin beschriebenen Prozessoren und GPGPU/Parallelprozessoren sein. Zum Beispiel unter zusätzlicher Bezugnahme auf 1 kann der Prozessor 2702 eine Variante einer Architektur des einen oder der mehreren veranschaulichten Prozessoren 102 sein und/oder diese gemeinsam nutzen, und die GPGPU 2720 kann eine Variante einer Architektur des einen oder der mehreren veranschaulichten Parallelprozessoren 112 sein und/oder diese gemeinsam nutzen. Unter zusätzlicher Bezugnahme auf 14 kann der Prozessor 2702 eine Variante einer Architektur des einen oder der mehreren veranschaulichten Prozessoren 1402 sein und/oder diese gemeinsam nutzen, und die GPGPU 2720 kann eine Variante einer Architektur des einen oder der mehreren veranschaulichten Grafikprozessoren 1408 sein und/oder diese gemeinsam nutzen.
  • Der Prozessor 2702 kann Anweisungen für einen Compiler 2715 ausführen, der in einem Systemspeicher 2712 gespeichert ist. Der Compiler 2715 wird auf dem Prozessor 2702 ausgeführt, um Quellcode 2714A in compilierten Code 2714B zu compilieren. Der compilierte Code 2714B kann Anweisungen, die vom Prozessor 2702 ausgeführt werden können, und/oder Anweisungen enthalten, die von der GPGPU 2720 ausgeführt werden können. Die Compilierung von Anweisungen, die von der GPGPU ausgeführt werden sollen, kann unter Verwendung von Shader- oder Rechenprogrammcompilern wie dem Shader-Compiler 2327 und/oder dem Shader-Compiler 2324 wie in 23 ermöglicht werden. Während einer Compilierung kann der Compiler 2715 Operationen durchführen, um Metadaten einzufügen, einschließlich von Hinweisen auf das Niveau an Datenparallelismus, der im compilierten Code 2714B vorhanden ist, und/oder von Hinweisen in Bezug auf die Datenlokalität, die mit Threads assoziiert ist, die auf Grundlage des compilierten Codes 2714B zu verteilen sind. Der Compiler 2715 kann die Informationen enthalten, die notwendig sind, um derartige Operationen durchzuführen, oder die Operationen können mithilfe einer Laufzeitbibliothek 2716 durchgeführt werden. Die Laufzeitbibliothek 2716 kann auch den Compiler 2715 bei der Compilierung des Quellcodes 2714A unterstützen und kann auch Anweisungen enthalten, die zur Laufzeit mit dem compilierten Code 2714B verknüpft werden, um eine Ausführung der compilierten Anweisungen auf der GPGPU 2720 zu ermöglichen. Der Compiler 2715 kann auch eine Registerzuweisung für Variablen über einen Registerzuweiser (RA) ermöglichen und Lade- und Speicheranweisungen zum Bewegen von Daten für Variablen zwischen Speicher und dem Register generieren, das für die Variable zugewiesen ist.
  • Der vereinheitlichte Speicher 2710 repräsentiert einen vereinheitlichten Adressraum, auf den vom Prozessor 2702 und der GPGPU 2720 zugegriffen werden kann. Der vereinheitlichte Speicher kann Systemspeicher 2712 sowie GPGPU-Speicher 2718 enthalten. Der GPGPU-Speicher 2718 ist Speicher innerhalb eines Adressraums der GPGPU 2720 und kann einiges oder alles vom Systemspeicher 2712 enthalten. In einer Ausführungsform kann der GPGPU-Speicher 2718 auch zumindest einen Abschnitt eines beliebigen Speichers enthalten, der zur ausschließlichen Verwendung durch die GPGPU 2720 dediziert ist. In einer Ausführungsform kann im Systemspeicher 2712 gespeicherter compilierter Code 2714B in den GPGPU-Speicher 2718 zum Zugriff durch die GPGPU 2720 abgebildet sein.
  • Die GPGPU 2720 beinhaltet mehrere Rechenblöcke 2724A 2724N, die eine oder mehrere einer Vielfalt von hierin beschriebenen Verarbeitungsressourcen beinhalten können. Die Verarbeitungsressourcen können eine Vielfalt unterschiedlicher Rechenressourcen sein oder beinhalten, wie etwa zum Beispiel Ausführungseinheiten, Recheneinheiten, Streaming-Multiprozessoren, Grafikmultiprozessoren oder Mehrkerngruppen. In einer Ausführungsform enthält die GPGPU 2720 zusätzlich einen Tensorbeschleuniger 2723 (z. B. einen Matrixbeschleuniger), der eine oder mehrere Sonderfunktions-Recheneinheiten enthalten kann, die konstruiert sind, eine Teilmenge von Matrixoperationen (z. B. Skalarprodukt usw.) zu beschleunigen. Der Tensorbeschleuniger 2723 kann auch als Tensorbeschleuniger oder Tensorkern bezeichnet werden. In einer Ausführungsform können Logikkomponenten innerhalb des Tensorbeschleunigers 2723 über die Verarbeitungsressourcen der mehreren Rechenblöcke 2724A-2724N verteilt sein.
  • Die GPGPU 2720 kann auch einen Satz von Ressourcen beinhalten, der von den Rechenblöcken 2724A-2724N und dem Tensorbeschleuniger 2723 gemeinsam genutzt werden kann, einschließlich unter anderem eines Satzes von Registern 2725, eines Leistungs- und Leistungsfähigkeitsmoduls 2726 und eines Zwischenspeichers 2727. In 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 Tensorbeschleuniger 2723 optimiert sind. Das Leistungs- und Leistungsfähigkeitsmodul 2726 kann dazu ausgelegt sein, Leistungsabgabe und Taktfrequenzen für die Rechenblöcke 2724A-2724N anzupassen, um Gate-Leerlaufkomponenten innerhalb der Rechenblöcke 2724A-2724N mit Leistung zu versorgen. In verschiedenen Ausführungsformen kann der Zwischenspeicher 2727 einen Anweisungszwischenspeicher und/oder einen Datenzwischenspeicher einer niedrigeren Ebene enthalten.
  • Die GPGPU 2720 kann zusätzlich einen L3-Datenzwischenspeicher 2730 beinhalten, der verwendet werden kann, um Daten zwischenzuspeichern, auf die vom vereinigten Speicher 2710 durch den Tensorbeschleuniger 2723 und/oder die Rechenelemente innerhalb der Rechenblöcke 2724A-2724N zugegriffen wird. In einer Ausführungsform beinhaltet der L3-Datenzwischenspeicher 2730 einen gemeinsam genutzten lokalen Speicher 2732, der von den Berechnungselementen innerhalb der Rechenblöcke 2724A-2724N und dem Tensorbeschleuniger 2723 gemeinsam genutzt werden kann.
  • In einer Ausführungsform beinhaltet die GPGPU 2720 eine Anweisungshandhabungslogik, wie etwa eine Abruf-und-Decodier-Einheit 2721 und eine Planer-Steuerung 2722. Die Abruf-und-Decodier-Einheit 2721 beinhaltet eine Abrufeinheit und eine Decodiereinheit zum Abrufen und Decodieren von Anweisungen zur Ausführung durch einen oder mehrere der Rechenblöcke 2724A-2724N oder den Tensorbeschleuniger 2723. Die Anweisungen können über die Planer-Steuerung 2722 für die entsprechende Funktionseinheit innerhalb des Rechenblocks 2724A-2724N oder des Tensorbeschleunigers geplant werden. In einer Ausführungsform ist die Planer-Steuerung 2722 eine ASIC, die ausgelegt werden kann, um erweiterte Planungsoperationen durchzuführen. In einer Ausführungsform ist die Planer-Steuerung 2722 ein Mikrocontroller oder ein Verarbeitungskern mit niedriger Energie pro Anweisung, der in der Lage ist, von einem Firmware-Modul geladene Planer-Anweisungen auszuführen.
  • In einer Ausführungsform können einige von den Rechenblöcken 2724A-2724N durchzuführende Funktionen direkt für den Tensorbeschleuniger 2723 geplant oder zu diesem ausgelagert werden. In verschiedenen Ausführungsformen beinhaltet der Tensorbeschleuniger 2723 eine Verarbeitungselementlogik, die dazu ausgelegt ist, Matrixrechenoperationen effizient durchzuführen, wie etwa Multiplikations- und Addieroperationen und Skalarproduktoperationen, die von 3D-Grafik- oder Rechenshaderprogrammen verwendet werden. In einer Ausführungsform kann der Tensorbeschleuniger 2723 dazu ausgelegt sein, Operationen zu beschleunigen, die von Maschinenlern-Frameworks verwendet werden. In einer Ausführungsform ist der Tensorbeschleuniger 2723 eine anwendungsspezifische integrierte Schaltung, die explizit dazu ausgelegt ist, einen spezifischen Satz von parallelen Matrixmultiplikations- und/oder -additionsoperationen durchzuführen. In einer Ausführungsform ist der Tensorbeschleuniger 2723 ein feldprogrammierbares Gatearray (FPGA), das eine Festfunktionslogik bereitstellt, die zwischen Arbeitslasten aktualisiert werden kann. In einer Ausführungsform kann der Satz von Rechenoperationen, die vom Tensorbeschleuniger 2723 durchgeführt werden können, relativ zu den Operationen beschränkt sein, die vom Rechenblock 2724A-2724N durchgeführt werden können. Der Tensorbeschleuniger 2723 kann jedoch parallele Tensoroperationen mit einem wesentlich höheren Durchsatz im Vergleich zu dem Rechenblock 2724A-2724N durchführen.
  • 28A-28B veranschaulichen eine Matrixoperation 2805, die von einer Anweisungspipeline 2800 ausgeführt wird, gemäß Ausführungsformen. 28A veranschaulicht die Anweisungspipeline 2800, wenn sie mit einem systolischen Array 2808 innerhalb des Tensorbeschleunigers 2723 konfiguriert ist. 28B veranschaulicht die Anweisungspipeline, wenn sie mit einer Ausführungseinheit 1900 konfiguriert ist, die ein systolisches Array 1912 beinhaltet.
  • Wie in 28A gezeigt, kann die Anweisungspipeline 2800 dazu ausgelegt sein, eine Matrixoperation 2805 durchzuführen, wie etwa unter anderem eine Skalarproduktoperation. Das Skalarprodukt zweier Vektoren ist ein skalarer Wert, 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 DE102022125600A1_0001
  • Das Skalarprodukt kann in einer Faltungsoperation für ein faltendes neuronales Netz (CNN) verwendet werden. Während eine 2D-Faltung veranschaulicht ist, kann eine N-dimensionale Faltung an einem N-dimensionalen Volumen unter Verwendung von N-dimensionalen Filtern durchgeführt werden. Eine rezeptive Feldkachel 2802 hebt einen Abschnitt eines Eingabevolumens in einem Eingabevolumenpuffer 2804 hervor. Der Eingabevolumenpuffer kann im Speicher 2830 gespeichert werden. Eine Skalarproduktmatrixoperation 2805 kann zwischen den Daten innerhalb der rezeptiven Feldkachel 2802 und einem Faltungsfilter ausgeführt werden, um einen Datenpunkt innerhalb des Ausgabepuffers 2806 zu erzeugen, der auch im 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 Zwischenspeicher 2727, 2730 wie in 27.
  • Die Kombination der Datenpunkte innerhalb des Ausgabepuffers 2806 stellt eine Aktivierungskarte dar, die durch die Faltungsoperation generiert wird. Jeder Punkt innerhalb der Aktivierungskarte wird generiert, indem die rezeptive Feldkachel über den Eingabevolumenpuffer 2804 geschoben wird. Die Aktivierungskartendaten können in eine Aktivierungsfunktion eingegeben werden, um einen Ausgabeaktivierungswert zu ermitteln. In einer Ausführungsform kann die Faltung des Eingabevolumenpuffers 2804 innerhalb eines Frameworks als Matrixoperation 2805 hoher Ebene definiert werden. Die Matrixoperationen hoher Ebene können über Primitiv-Operationen durchgeführt werden, wie beispielsweise eine Basic-Linear-Algebra-Subprogram(BLAS)-Operation. Die Primitiv-Operationen können über Hardwareanweisungen beschleunigt werden, die durch die Anweisungspipeline 2800 ausgeführt werden.
  • Die Anweisungspipeline 2800, die zum Beschleunigen von Hardwareanweisungen verwendet wird, kann die Anweisungsabruf- und -decodiereinheit 2721, die Hardwareanweisungen abrufen und decodieren kann, und die Planer-Steuerung 2722, die decodierte Anweisungen für eine oder mehrere Verarbeitungsressourcen innerhalb der Rechenblöcke 2724A-2724N und/oder des Tensorbeschleunigers 2723 planen kann, beinhalten. In einer Ausführungsform kann eine Hardwareanweisung für die Rechenblöcke 2724A-2724N geplant und an den Tensorbeschleuniger 2723 ausgelagert werden. Die eine oder die mehreren Hardwareanweisungen und assoziierten Daten zum Durchführen der Matrixoperation 2805 können im Speicher 2830 gespeichert werden. Die Ausgabe der Hardwareanweisung kann auch im Speicher 2830 gespeichert werden.
  • In einer Ausführungsform kann der Tensorbeschleuniger 2723 eine oder mehrere Hardwareanweisungen ausführen, um die Matrixoperation 2805 unter Verwendung eines systolischen Arrays 2808 von Verarbeitungselementen durchzuführen. Das systolische Array 2808 beinhaltet eine Kombination aus programmierbarer und fester Funktionshardware, die konfigurierbar ist, um Matrix-Matrix- und Matrix-Vektor-Skalarproduktoperationen sowie andere Operationen durchzuführen, wie etwa Matrix-Matrix- und Matrix-Vektor-Fused-Multipy-Add-Operationen.
  • In verschiedenen Ausführungsformen kann als Alternative oder zusätzlich zu dem Tensorbeschleuniger 2723 eine Matrixbeschleunigungslogik auch in den Verarbeitungsressourcen der Rechenblöcke 2724A-2724N enthalten sein. Wie zum Beispiel in 28B beinhaltet in einer Ausführungsform jeder Rechenblock (z.-B. Rechenblock 2724N) ein Array von Ausführungseinheiten 1900A-1900N. In einer Ausführungsform kann jede Ausführungseinheit in dem Array von Ausführungseinheiten 1900A-1900N systolische Arrays 1912A-1912N beinhalten. In einer Ausführungsform sind eine oder mehrere einer Teilmenge der Ausführungseinheiten mit einem systolischen Array konfiguriert. Die Anzahl der systolischen Arrays und der Durchsatz der verfügbaren systolischen Arrays können basierend auf den Leistungs- und Leistungsfähigkeitszielen für eine Vorrichtung variieren. Die Planer-Steuerung 2722 kann systolische Matrixoperationen (Skalarprodukte, Fused-Multiply-Adds usw.) für verfügbare systolische Arrays 1912A-1912N innerhalb der Ausführungseinheiten 1900A-1900N der verschiedenen Rechenblöcke 2724A-2724N planen.
  • Während in einer Ausführungsform jeder der Rechenblöcke 2724A-2724N ein Array von Ausführungseinheiten 1900A-1900N beinhaltet, nutzen die Rechenblöcke 2724A-2724N in einer anderen Ausführungsform eine Architektur mit den Verarbeitungsclustern 214A-214N des Verarbeitungsclusterarrays in 2A gemeinsam. In einer solchen Ausführungsform beinhalten die Rechenblöcke 2724A-2724N mehrere Grafikmultiprozessoren 234 wie in 2C, die interne Komponenten beinhalten, wie in 2D veranschaulicht. Somit können die Grafikmultiprozessoren innerhalb der Rechenblöcke eine Lade/Speicher-Einheit 266, GPGPU-Kerne 262 und Tensor/RT-Kerne 263 beinhalten. In einer Ausführungsform können die Rechenblöcke 2724A-2724N eine Mehrkerngruppe 365A-365N der GPU 380 von 3C beinhalten und beinhalten mehrere Sätze von GFX-Kernen 370, Tensorkernen 371 und Raytracingkernen 372. In einer solchen Ausführungsform kann die Planer-Steuerung 2722 Anweisungen zum Durchführen von Matrixoperationen an die Tensor-/RT-Kerne 263 und/oder die Tensorkerne 371 innerhalb der Rechenblöcke 2724A-2724N planen. Beschleunigte Matrixoperationen beinhalten Skalarproduktoperationen, Matrixmultiplikationsoperationen und/oder Fused-Multiply-Add-Operationen, die an Ganzzahl- oder Gleitkomma-Matrixelementen und mit verschiedenen Genauigkeitsniveaus ausgeführt werden können. Zusätzlich können in einer Ausführungsform die Rechenblöcke 2724A-2724N eine Variante der Recheneinheiten 1560A-1560N von 15C beinhalten, wobei solche Varianten eine Matrixbeschleunigungslogik beinhalten, wie hierin beschrieben (z. B. ein systolisches Array, einen Tensorkern, einen systolischen Tensorkern), die Ganzzahl- oder Gleitkomma-Matrixbeschleunigungsanweisungen ausführen kann.
  • 29 veranschaulicht ein systolisches Array 2900, das Multiplikator- und Addiererschaltungen beinhaltet, die pipelineartig organisiert sind. In einer Ausführungsform repräsentiert das systolische Array 2900 die physischen Pipelinestufen, die in dem systolischen Array 1912 enthalten sind, und beinhaltet Fähigkeiten, die in Bezug auf dieses systolische Array 1912 beschrieben sind, einschließlich Unterstützung für Dünnbesetzungs- und Block-Dünnbesetzungs-Operationen, und kann zusätzlich dazu ausgelegt sein, strukturierte Dünnbesetzung innerhalb eines Vektors von Elementen oder über einen Satz von Kanälen hinweg zu unterstützen. Die Eingaben 2912A-2912H für die erste Eingabematrix werden durch die Datenelemente dargestellt, die in den mit Src1 und Src1+1 bis Src1+7 gekennzeichneten Eingaben enthalten sind. Die Eingaben 2910A-2910H entsprechen der zweiten Eingabematrix und sind mit Src2 gekennzeichnet. Eingaben 2902A-2902B, die anfängliche Akkumulatorwerte beinhalten können, können als Src0 bereitgestellt werden. Ein Array von Verarbeitungselementen bildet die physischen Pipelinestufen 2911A-2911H des systolischen Arrays 2900. Matrix-Matrix- oder Matrix-VektorOperationen, einschließlich Fused-Multiply-Add- und/oder Skalarproduktoperationen, können in jeder Pipelinestufe 2911A-2911H während jedes Taktzyklus durchgeführt werden. In jedem Zyklus kann jede Pipelinestufe eine neue Src2-Eingabe empfangen, die von den Verarbeitungselementen der Pipelinestufe verwendet werden kann, um einen Wert entweder unter Verwendung der neuen Src1-Eingabe oder einer älteren Srcl-Eingabe, die zuvor gelesen wurde, zu berechnen, obwohl es während des anfänglichen Startens mehrere Zyklen dauern kann, bis alle Pipelinestufen 2911A-2911H aktiv werden, während der anfängliche Satz von berechneten Werten durch die Stufen propagiert.
  • Die Eingabe 2902A kann dem Verarbeitungselement der Pipelinestufe 2911A einen Wert von Src0 zur Verwendung als einen anfänglichen Akkumulatorwert bereitstellen. Alternativ dazu kann die Eingabe 2902B den Wert Src0 bereitstellen, der zu den Werten zu addieren ist, die von der Pipelinestufe 2911H des systolischen Arrays berechnet werden, was eine Teildurchlaufoperation für das systolische Array 2900 unter Verwendung der unteren Stufen des Arrays ermöglicht, während die unbenutzten oberen Stufen leistungsgattergesteuert sind. Während des Betriebs werden die Datenelemente eines ausgewählten Kanals der Eingabe Src2 über alle Kanäle der Verarbeitungselemente der Pipelinestufen 2911A-2911H ausgesandt, wobei jeder Kanal einen Vektor aus mehreren Elementen repräsentiert. Die Anzahl an Elementen pro Kanal kann basierend auf der Größe der Elemente variieren. Die Verarbeitungselemente einer Stufe führen dann Operationen unter Verwendung des ausgewählten Src2-Kanals und aller Kanäle einer gegebenen Src1-Eingabe durch. Eine Eingabe Src2 arbeitet mit acht Src1-Eingaben (zum Beispiel einer Src1-Eingabe pro Stufe). Die Datenelemente eines Kanals der Eingabe Src2 werden über alle Kanäle der Verarbeitungselemente 2911A-2911H ausgesandt. Die Verarbeitungselemente bearbeiten dann den Src2-Kanal mit allen Kanälen einer Src1-Eingabe. In einem ersten Taktzyklus wird eine Src1-Eingabe mit Datenelementen des ersten Kanals von Src2 bearbeitet. In dem nächsten Zyklus bearbeitet ein zweiter Src1 (als Src1+1 gekennzeichnet) mit den Datenelementen des zweiten Kanals von Src2. Diese Sequenz wiederholt sich in den acht Stufen der Pipeline. Jede Stufe fügt ihre Operation zur Ausgabe der vorherigen Stufe hinzu. Über die Pipelinestufen hinweg werden mehrere Src2-Eingaben zeitverschachtelt bearbeitet. Wenn aufeinanderfolgende Kanäle einer ersten Src2-Eingabe durch die Pipelinestufen geschoben werden, kann in der ersten Stufe eine neue Src2-Eingabe bereitgestellt werden.
  • Die Ausgabe 2922 aus der Endstufe ist mit Dst gekennzeichnet. Wenn d = die systolische Tiefe und e = die Anzahl an Datenelementen pro Kanal, wird die Ausgabe eines Kanals durch die folgende Gleichung (2) beschrieben: D s t i = S r c 0 i + j = 0 d k = 0 a ( S r c 1 + j ) e l e m e n t   k   o f   c h a n n   i S c r 2 e l e m e n t   k   o f   c h a n n   j
    Figure DE102022125600A1_0002
  • Wie in Gleichung (2) gezeigt, kann jeder Kanal mehrere Datenelemente beinhalten, an denen Operationen parallel durchgeführt werden. In einer Ausführungsform repräsentiert jeder Kanal einen Datenvektor mit vier Elementen, obwohl eine unterschiedliche Anzahl von Elementen für jeden Kanal konfiguriert werden kann. Bei einer Ausführungsform kann die Anzahl an Datenelementen innerhalb eines Kanals basierend auf der Größe jedes Datenelements variieren. Skalarprodukte können zum Beispiel unter Verwendung von Vektoren mit vier Elementen mit 8-Bit-Datentypen pro Element, Vektoren mit zwei Elementen mit 16-Bit-Datentypen, Vektoren mit acht Elementen mit 4-Bit-Datentypen (z. B. INT4) oder Vektoren mit 16 Elementen mit 2-Bit-Datentypen (z. B. INT2) durchgeführt werden. Die Anzahl der Kanäle kann abhängig vom Datentyp von Src1 und Src2 automatisch angepasst werden. Eine Anweisung kann auch eine erforderliche systolische Tiefe spezifizieren, die für die Anweisung verwendet werden soll.
  • In einer Ausführungsform können die Verarbeitungselemente 2911A-2911H Eingaben 2910A-2910H, 2912A-2912H direkt aus der Universalregisterdatei lesen. In einer Ausführungsform weist das systolische Array 2900 Logik auf, um die Eingaben 2910A-2910H, 2912A-2912H aus der Allzweckregisterdatei zu lesen und Eingabedaten in Registern, Puffern oder einem Speicher zu speichern, der sich innerhalb des systolischen Arrays befindet. Eine interne Logik kann dann die Eingabedatenelemente den Verarbeitungselementen 2911A-2911H zur Verarbeitung zuzuführen. Die Ausgabe 2922 kann in interne Register oder Speicher des systolischen Arrays 2900 geschrieben und/oder direkt in die Universalregisterdatei geschrieben werden.
  • 30A-30B veranschaulichen die Verwendung eines systolischen Arrays 3000, das dazu ausgelegt sein kann, Operationen mit einer beliebigen systolischen Tiefe auszuführen. In dem veranschaulichten Beispiel weist das systolische Array 3000 eine physische Tiefe von vier auf, die vier physischen Pipelinestufen entspricht. Das systolische Array kann dazu ausgelegt sein, unter Verwendung einer beliebigen Anzahl von logischen Stufen zu arbeiten, einschließlich vier, acht, zwölf oder sechzehn logischen Stufen oder einer anderen Anzahl von logischen Stufen, die nicht durch die Anzahl von physischen Stufen unter Verwendung von Teildurchgangsoperationen teilbar sind, wie in 31 unten beschrieben. 30A zeigt, dass das Array Src0-Eingaben von einer externen Quelle empfängt und die ersten vier Stufen mit Src1- und Src2-Eingaben verarbeitet. Die Ausgabe dieses Arrays wird in den zweiten Schritt zurückgespeist, der in 30B gezeigt ist. 30B zeigt, dass die nächsten vier Stufen unter Verwendung der Loopback-Daten berechnet werden, die die bereits verarbeiteten Werte und die Src1- und Src2-Eingaben beinhalten.
  • Wie in 30A gezeigt, kann das systolische Array 3000 die Eingabe 2902 als Eingabe Src0 annehmen, die über den Datenselektor 3004 gelesen wird (3002). Der Datenselektor 3004 wählt zwischen der Eingabe 2902 und der Loopback-Eingabe 3006 aus. Die Verarbeitungselemente 2911A-2911D können die Eingaben 2910A-2910D und 2912A-2912D auf eine ähnliche Weise wie das systolische Array 2900 verarbeiten. Falls vier Stufen ausreichen, um eine Operation abzuschließen, kann die Pipelinestufe 2911D die Ausgabe 2922 über den Datenselektor 3024 in ein angegebenes DST-Register oder einen angegebenen Speicher schreiben (3022). Wenn weitere Stufen erforderlich sind, kann der Datenselektor 3024 die Loopback-Ausgabe 3026 schreiben, die als Loopback-Eingabe 3006 an Verarbeitungselemente der Pipelinestufe 2911A geliefert wird.
  • Wie in 30B dargestellt ist, kann in einer Ausführungsform die Loopback-Eingabe 3006 durch die Verarbeitungselemente 2911A-2911D weiter verarbeitet werden. Die Loopback-Eingabe 3006 enthält die bereits verarbeiteten Werte. In einer Ausführungsform kann die Loopback-Eingabe 3006 auch die Eingabe 2910E-2910H, die Eingabe 2912E-2912H beinhalten, die vorab abgerufen werden können, während die ersten vier Stufen verarbeitet werden. Der Datenselektor 3004 wählt die Loopback-Eingabe 3006 zur Eingabe durch die Pipelinestufe 2911A aus. Verarbeitungselemente der Pipelinestufen 2911A-2911D können dann die Eingaben 2910E-2910H und 2912E-2912H verarbeiten. Der Datenselektor 3024 kann dann das achte Stufenergebnis als Ausgabe 2922 in das spezifizierte DST-Register schreiben (3022).
  • In einer Ausführungsform wird das systolische Array 3000 modifiziert, sodass es die Loopback-Ausgabe 3026 und die Loopback-Eingabe 3006 nicht beinhaltet und stattdessen eine Zwischenspeicherung 3025 beinhaltet, wie in 30A-30B gezeigt. Die Zwischenspeicherung 3025 kann eine Speichervorrichtung oder ein Register sein, die/das innerhalb des systolischen Arrays 3000 angeordnet ist, oder kann ein Register in einer Registerdatei sein, die sich außerhalb des systolischen Arrays 3000 befindet. Während der in 30A gezeigten Operationen kann die Ausgabe von der Pipelinestufe 2911D in der Zwischenspeicherung 3025 gespeichert werden, anstatt durch die Loopback-Ausgabe 3026 ausgegeben und durch die Loopback-Eingabe 3006 vor den in 30B gezeigten Operationen gelesen zu werden. Während der in 30B gezeigten Operationen kann die Ausgabe von der Pipelinestufe 2911D zu den Daten hinzugefügt werden, die in der Zwischenspeicherung 3025 gespeichert sind, und in die Ausgabe 2922 geschrieben werden. Das systolische Array 3000 kann auch dazu ausgelegt sein, Mehrfachdurchgangsoperationen unter Verwendung mindestens eines Teildurchlaufs durchzuführen, wie unten beschrieben, um logische Tiefen zu ermöglichen, die durch die physische Tiefe des Arrays nicht teilbar sind.
  • Skalierbarer Matrixmultiplikationsbeschleuniger mit Feedbackeingängen
  • Eine zweite Ausführungsform ermöglicht einen erhöhten Durchsatz unter Verwendung von gleichzeitigen Anweisungen, die unter Verwendung von parallelen Einheiten ausgeführt werden. Mehrere Instanzen oder Pfade des Multiplikationsbeschleunigers werden parallel ausgeführt. Diese Instanzen können Src1 gemeinsam nutzen oder sie können unabhängige Srcl-Eingänge aufweisen. Jeder Pfad weist seine eigenen Src2- und SrcO-Eingang auf. Diese Instanzen werden ihre eigenen src2- und src0-Eingaben aufweisen. Eine Version, die zwei Pfade mit einer Tiefe von vier Stufen zeigt, ist in 31 gezeigt. Alternativ ist in 32 eine Version gezeigt, die vier Pfade mit einer Tiefe von zwei Stufen verwendet.
  • 31 veranschaulicht einen Zwei-Pfad-Matrixmultiplikationsbeschleuniger 3100, bei dem jeder Pfad eine Tiefe von vier Stufen aufweist. Der Zwei-Pfad-Matrixmultiplikationsbeschleuniger 3100 beinhaltet eine Eingabelogik 3102A-3102B für Src0-Eingaben, Eingabepuffer 3111A-3111B zum Speichern von Datenelementen, die von der Eingabelogik 3110A-3110B empfangen werden, und Eingabepuffer 3113A-3113B zum Speichern von Datenelementen, die von der gemeinsam genutzten Eingabelogik 3112 für Src1 empfangen werden. Jede Stufe beinhaltet ein Paar von Verarbeitungselementen, die parallel arbeiten können. Stufe eins beinhaltet Verarbeitungselemente 3131A-3131B, Stufe zwei beinhaltet Verarbeitungselemente 3132A-3132B, Stufe drei beinhaltet Verarbeitungselemente 3133A-3133B, Stufe vier beinhaltet Verarbeitungselemente 3134A-3134B. Die Hardwarelogik jedes der Verarbeitungselemente 3131A-3131B, 3132A-3132B, 3131A-3133B, 3134A-3134B kann die gleiche wie die Hardwarelogik von Verarbeitungselementen des systolischen Arrays 2900 oder des systolischen Arrays 3000 sein oder dieser ähnlich sein und kann mit der gleichen Prozesstechnologie oder einer fortschrittlicheren Prozesstechnologie hergestellt werden. Die Verarbeitungselemente des Zwei-Pfad-Matrixmultiplikationsbeschleunigers 3100 können im Vergleich zu Implementierungen des systolischen Arrays 2900 auch mit einer höheren Frequenz arbeiten. Die Verarbeitungselemente können unter Verwendung einer fortschrittlicheren Prozesstechnologie hergestellt werden.
  • Feedback kann unter Verwendung von Datenselektoren implementiert werden, die gleich oder ähnlich den Datenselektoren 3004, 3024 sind. Abhängig von der Konfiguration der Leselogik können Eingabedaten im Voraus vorab in den Eingabepuffer abgerufen oder aus Registern oder einem Zwischenspeicher innerhalb des Zwei-Pfad-Matrixmultiplikationsbeschleunigers 3100 einen oder mehrere Zyklen vor der Eingabe in die Verarbeitungselemente 3131A-3131B gelesen werden. Die Verarbeitungselemente 3134A-3134B der Stufe vier können in die entsprechenden Verarbeitungselemente 3131A-3131B der Stufe eins rückgekoppelt werden. Eine dynamische logische Tiefe kann in Vielfachen von vier ermöglicht werden. Nach einer konfigurierten Anzahl logischer Stufen können Ergebnisse durch die Ausgabelogik 3122A-3122B in ein spezifiziertes Ziel geschrieben werden.
  • 32 veranschaulicht einen Vier-Pfad-Matrixmultiplikationsbeschleuniger 3200, bei dem jeder Pfad eine Tiefe von zwei Stufen aufweist. Der Vier-Pfad-Matrixmultiplikationsbeschleuniger 3200 weist die gleiche Anzahl von Verarbeitungselementen wie der Zwei-Pfad-Matrixmultiplikationsbeschleuniger 3100 auf, wobei die Verarbeitungselemente mit doppelt so vielen Pfaden konfiguriert sind, aber jeder Pfad halb so tief ist. Der Vier-Pfad-Matrixmultiplikationsbeschleuniger 3200 beinhaltet eine Eingabelogik 3202A-3202B für Src0n, Eingabepuffer 3211A-3211B zum Speichern von Eingabeelementen, die von der Eingabelogik 3210A-3210B für Src2 gelesen werden, und Eingabepuffer 3213A-3213B zum Speichern von Eingabeelementen, die von der gemeinsam genutzten Eingabelogik 3212 für Src1 gelesen werden. Die Verarbeitungselemente 3231A-3231B ermöglichen eine parallele Verarbeitung für Stufe 1. Die Verarbeitungselemente 3232A-3232B ermöglichen eine parallele Verarbeitung für Stufe 2. Die Stufe 2 jedes Pfades kann in die Stufe 1 rückgekoppelt werden oder Ergebnisse über die Ausgabelogik 3222A-3222D in ein spezifiziertes Ziel schreiben. Die Verarbeitungselemente 3231A-3231B, 3232A-3232B können eine Hardwarelogik aufweisen, die jener der Verarbeitungselemente 3131A-3131B, 3132A-3132B, 3131A-3133B, 3134A-3134B ähnlich ist, und können eine Loopback-Funktionalität unter Verwendung ähnlicher Hardwarelogik implementieren.
  • Die Vorteile eines Zwei-Pfad-Matrixmultiplikationsbeschleunigers 3100 oder eines Vier-Pfad-Matrixmultiplikationsbeschleunigers 3200 beinhalten Skalierbarkeit, Softwarekompatibilität und Durchsatz. Die modulare Architektur dieser Beschleuniger ermöglicht eine effizientere Skalierung relativ zu einem 8-tiefen systolischen Array. Unterschiedliche Konfigurationen eines Matrixmultiplikationsbeschleunigers können auf unterschiedliche Produktanforderungen oder Anwendungsfälle ohne Neudesign angepasst werden. Außerdem ist dasselbe Softwaremodell, das verwendet wird, unabhängig von der Hardwareimplementierung. Algorithmen, die für eine Anweisung ausgelegt sind, die durch eine systolische Pipeline von acht Stufen ausgeführt werden soll, können in einer Implementierung unter Verwendung eines Matrixmultiplikationsbeschleunigers von vier Stufen verwendet werden. Hardware verwendet Feedback, um eine Pipeline von acht Stufen auf eine Weise zu simulieren, die für die Software transparent ist. Bei einem Design, das einen hohen DPAS-Anweisungsdurchsatz erfordert, können mehrere Pfade verwendet werden. Implementierungen mit einer größeren Anzahl von Pfaden können mit einer Eingangslogik und einer Ausgangslogik mit höheren Bandbreiten gekoppelt werden. In einer Ausführungsform sind der Zwei-Pfad-Matrixmultiplikationsbeschleuniger 3100 und ein Vier-Pfad-Matrixmultiplikationsbeschleuniger 3200 dazu ausgelegt, Eingaben mit dünn besetzten Blöcken mit einer größeren Effizienz und/oder feineren Granularität zu umgehen, als mit einem 8-tiefen systolischen Array möglich ist.
  • Multiplikationen bei Dünnbesetzung auf dem skalierbaren Matrixmultiplikationsbeschleuniger
  • Eine dritte Ausführungsform ermöglicht einen erhöhten Anweisungsdurchsatz bei der Verarbeitung für Daten mit unregelmäßiger Dünnbesetzung. Elemente von Src1- und Src2-Eingaben können individuell über Eingangsmultiplexlogik ausgewählt werden und die Verarbeitung kann nur unter Verwenden von von null verschiedenen Werten ausgeführt werden.
  • 33 veranschaulicht einen skalierbaren Beschleuniger 3300 für die Multiplikation von dünn besetzten Matrizen unter Verwendung von systolischen Arrays mit Feedbackeingängen. Der skalierbare Multiplikationsbeschleuniger für dünn besetzte Matrizen 3300 kann Verarbeitungselemente 3231A-3231D wie in dem Vier-Pfad-Matrixmultiplikationsbeschleuniger 3200 oder beliebige andere hierin beschriebene Verarbeitungselemente aufweisen. Die Verarbeitungselemente 3231A-3221B zu Beginn jedes Pfades beinhalten eine Eingabelogik für Src0. Jede Stufe jedes Pfades des skalierbaren Multiplikationsbeschleuniger für dünn besetzte Matrizen 3300 kann ein beliebiges Element eines unabhängigen oder gemeinsam genutzten Src1 über die Eingabeselektoren 3312A-3312D empfangen. Jede Stufe jedes Pfads kann auch ein beliebiges Element einer Src2 empfangen. Unabhängige Src2-Eingaben werden über separate Eingabeelementselektoren (z. B. Src2A über den Eingabeselektor 3310A und den Eingabeselektor 3311A, Src2B über den Eingabeselektor 3310B und den Eingabeselektor 3311B) bereitgestellt. Die separate Src2-Eingabe ermöglicht den separaten Pfaden, unterschiedliche Anweisungen zu berechnen. Separate Ausgabelogik 3322A-3322B ist für jeden Pfad vorhanden, um eine Ausgabe für die unterschiedlichen Anweisungen zu ermöglichen.
  • 34 zeigt einen skalierbaren Beschleuniger 3400 für die Multiplikation von dünn besetzten Matrizen unter Verwendung von systolischen Arrays mit Feedbackeingängen und - ausgängen in jeder Stufe. Der skalierbare Multiplikationsbeschleuniger für dünn besetzte Matrizen 3400 weist eine ähnliche Hardwarelogik wie der skalierbare Multiplikationsbeschleuniger für dünn besetzte Matrizen 3300 zusammen mit zusätzlicher Eingabe- und Ausgabelogik auf, um zu ermöglichen, dass SrcO-Elemente für jede Stufe jedes Pfades bereitgestellt werden und separate Ausgaben für jede Stufe jedes Pfades bereitgestellt werden. Zusätzlich zu den Eingabeselektoren 3310A und 3 311 A zum Auswählen von Src2A-Elementen für den ersten Pfad und die Eingabeselektoren 3310A und 3311B zum Auswählen einer Src2B-Eingabe für den zweiten Pfad wird ein Eingangsteiler 3403A-3403B für jeden Pfad für eine Src0-Eingabe hinzugefügt. Jeder Eingangsteiler 340A-3402B kann einen Demultiplexer oder eine ähnliche Hardwarelogik beinhalten, um zu ermöglichen, dass SrcO-Eingabeelemente, die durch die Eingabelogik 3402A-3402B gelesen werden, zu jeder Stufe gesendet werden. Eingabeselektoren 3312A-3312D sind auch enthalten, um zu ermöglichen, dass Src1-Eingaben von jeder Stufe jedes Pfads ausgewählt werden. Zusätzlich zu der Ausgabelogik 3322A-3322B von der zweiten Stufe jedes Pfades (Verarbeitungselement 3431C-3431D) wird zusätzliche Ausgabelogik 3422A-3422B bereitgestellt, um die Ausgabe von der ersten Stufe jedes Pfades (3431A-3431B) zu ermöglichen. Die Verarbeitungselemente 3431A-3431C können ansonsten anderen hier beschriebenen Verarbeitungselementen ähnlich sein.
  • Während des Betriebs ist der skalierbare Multiplikationsbeschleuniger für dünn besetzte Matrizen 3400 zum Annehmen von Gruppen mit nur einem Element konfigurierbar. Wenn eine Src2-Eingabe {B0, 0, B2, B3, 0, 0, 0, 0} gegeben ist, werden zwei Gruppen ([B0,B2], [B3,0]) werden für die von null verschiedenen Elemente in Src2 für die dritte Ausführungsform (z. B. skalierbarer Multiplikationsbeschleuniger für dünn besetzte Matrizen 3300) erstellt, wobei die zweite Gruppe eine Null-Auffüllung beinhaltet. Die in 34 gezeigten Optimierungen ermöglichen, dass die Gruppen als [B0,B2], [B3] gebildet werden. B0 und B2 werden der ersten und zweiten Stufe eines Pfades zugewiesen (z. B. entweder eines ersten Satzes, der das Verarbeitungselement 3431A und das Verarbeitungselement 3431C beinhaltet, oder eines zweiten Satzes, der das Verarbeitungselement 3431B und das Verarbeitungselement 3431D beinhaltet). Nach dem Feedback wird B3 der ersten Stufe dieses Pfades zugewiesen. Da die erste Stufe eines Pfades eine Ausgabe bereitstellen kann (z. B. entweder über Ausgangslogik 3422A oder 3422B), besteht keine Notwendigkeit, die zweite Stufe des Pfades zu verbrauchen (entweder Verarbeitungselement 3431C oder Verarbeitungselement 3431D). Darüber hinaus kann die nächste Src2-Eingabe, die für diesen Pfad akzeptiert wurde, von der zweiten Stufe starten, sodass eine Gruppe von zwei Elementen der zweiten bzw. ersten Stufe zugewiesen wird. Src0 zum Verarbeiten der neuen Src2-Eingabe kann der zweiten Stufe des Pfades zugewiesen werden (zum Beispiel über entweder Ausgangslogik 3422A oder 3422B).
  • Zusätzlich zu der Hardwarelogik des skalierbaren Multiplikationsbeschleunigers für dünn besetzte Matrizen 3300, der in 33 veranschaulicht ist, und des skalierbaren Multiplikationsbeschleunigers für dünn besetzte Matrizen 3400, der in 34 veranschaulicht ist, enthalten einige Ausführungsformen zusätzlich Eingabe- und Ausgabehardwarespeicherpuffer. Eingabespeicherpuffer können verwendet werden, um Gruppen von Src0 und Src2-Eingaben zu speichern und bereit zu halten, was den Bedarf an Eingabelogik mit hoher Bandbreite reduziert. Der Ausgabepufferspeicher ermöglicht, dass Dst-Ausgaben, die in einem gleichen Zyklus erzeugt werden, kontinuierlich mit einer langsameren Rate in den Speicher geschrieben werden, was den Bedarf an Ausgabelogik mit hoher Bandbreite reduziert.
  • Zusätzlich beinhalten einige Ausführungsformen einen Bypass für Eingaben, bei denen alle Elemente null sind. Der Bypass ermöglicht ein direktes Schreiben von Src0 wie durch Ausgabelogik, ohne das systolische Array zu durchlaufen. Dieser Bypass wird in Übereinstimmung mit einer Datenabhängigkeitsstrategie verwendet, um Lesen-nach-Schreiben(RAW)-Risiken zwischen Anweisungen zu verhindern, die der Integrität der Daten schaden können.
  • Matrixbeschleuniger mit einem parallelen systolischen Doppelpipeline-Array
  • 35 veranschaulicht ein paralleles systolisches Doppelpipeline-Array 3500 für einen Matrixbeschleuniger gemäß einer Ausführungsform. Einen Matrixbeschleuniger, wie hierin beschrieben (z. B. Tensorbeschleuniger 2723, Tensor-/RT-Kerne 263, Tensorkerne 371), oder eine Ausführungseinheit (z. B. die Ausführungseinheit 1900) kann ein paralleles systolisches Doppelpipeline-Array 3500 beinhalten, das zwei systolische Array-Pipelines (systolische Pipeline 3502, systolische Pipeline 3504) beinhaltet, die parallel arbeiten, um Anweisungen auszuführen. Das parallele systolische Doppelpipeline-Array 3500 ermöglicht, dass die Zeilendaten, die als Src2-Eingabe bereitgestellt werden, partitioniert werden, wobei die Partitionen parallel unter Verwendung einer gemeinsamen Src1-Eingabe verarbeitet werden. Eine solche Konfiguration ermöglicht einen erhöhten Durchsatz für Matrixoperationen, ohne die Leistungs- und Flächenkosten zu verursachen, die mit zwei getrennten und vollständig unabhängigen systolischen Arrays assoziiert sind.
  • Eine Eingabe für Matrixoperationen kann aus einer Registerdatei (z. B. Registerdatei(en) 258, 334A-334B, 369, Vektorregistern 1561, GRF 1821, Registerdatei 1906 usw.) gelesen werden, die mit dem Matrixbeschleuniger assoziiert ist. Das parallele systolische Doppelpipeline-Array 3500 beinhaltet einen Eingang 3521 für einen Operanden Src1, der von den beiden systolischen Array-Pipelines gemeinsam genutzt wird. Der Src1-Eingang gibt Spaltendaten ein, die von den beiden systolischen Array-Pipelines verwendet werden, um Matrixmultiplikationsoperationen durchzuführen, bei denen zwei Sätze von Matrixzeilendaten (Src2-Eingang 3522A-3522B) mit einem einzigen Satz von Spaltendaten multipliziert werden. Ein einziges Src2-Register kann eine Eingabe für zwei Betriebsstufen speichern. Zum Beispiel können Daten aus den Eingängen 3522A-3522B in 64-Bit-Blöcken gelesen werden, wobei die unteren 32 Bits für Operationen in einer Stufe des systolischen Arrays verwendet werden und die oberen 32 Bits für Operationen in der nächsten nachfolgenden Stufe des systolischen Arrays verwendet werden. Da ein Src2-Lesevorgang für zwei Operationen an einem Array verwendet werden kann, kann der zweite Zyklus eines Paares von Src2 Lesezyklen verwendet werden, um ein neues Src2 für das zweite Array zu lesen. Der gemeinsame Eingang 3521 für Src1-Daten und die Verwendung von Src2-Registerdaten für mehrere Operationen reduziert den Lesebedarf auf dem GRF relativ zu zwei vollständig unabhängigen systolischen Arrays. Die Reduzieren des Registerlesebedarfs relativ zur Verwendung unabhängiger systolischer Arrays kann die potenzielle negative Auswirkung auf die Leistungsfähigkeit reduzieren, die für andere Verarbeitungselemente verursacht wird, die die Registerdatei mit dem systolischen Array gemeinsam nutzen, wenn diese Verarbeitungselemente gleichzeitig mit den systolischen Arrays arbeiten.
  • Für Src0-Eingaben (Akkumulatorwert) werden separate Eingänge 3520A-3520B bereitgestellt. Die Daten von den Eingängen 3520A-2020B werden in einem SrcO-Datenpuffer 3530A-3530B gespeichert und zur Ausgabe von den systolischen Array-Pipelines hinzugefügt, anstatt in der Stufe 0 wie in anderen systolischen Array-Designs hinzugefügt zu werden. Eine Ausgabe von jedem Array kann in Akkumulator-/Addiererschaltungen gespeichert werden, die Speicher (z. B. ein Akkumulatorregister) und eine Addiererschaltung enthalten. Die Akkumulator-/Addiererschaltung 3532 kann eine Ausgabe von der systolischen Pipeline 3502 speichern und die Ausgabe zu Daten hinzufügen, die in dem SrcO-Datenpuffer 3530A gespeichert sind. Die Akkumulator-/Addiererschaltung 3534 kann eine Ausgabe von der systolischen Pipeline 3504 speichern und die Ausgabe zu Daten hinzufügen, die in dem SrcO-Datenpuffer 3530B gespeichert sind.
  • In einer Ausführungsform ist eine Mehrfachdurchgangsoperation aktiviert, sodass die acht physischen Stufen des Arrays als sechzehn logische Zustände arbeiten. Die acht Stufen der systolischen Pipeline 3502 und der systolischen Pipeline 3504 können als sechzehn logische Stufen arbeiten, indem die Ausgabe eines ersten Durchlaufs in die erste Akkumulator-/Addiererschaltung 3532 bzw. die zweite Akkumulator-/Addiererschaltung 3534 gespeichert wird. Die in den Schaltungen gespeicherten Werte können mit einer Ausgabe akkumuliert werden, die durch einen zweiten Durchgang durch die systolische Pipeline 3502 sowie die systolische Pipeline 3504 erzeugt wird. Für eine gegebene Stufe i arbeitet die Stufe als Stufe i während eines ersten Durchlaufs und als Stufe i + 8 während eines zweiten Durchlaufs. Die geeigneten Eingabedaten werden den Arrays in Abhängigkeit davon bereitgestellt, ob das Array erste Durchlaufoperationen oder eine zweite Durchlaufoperation durchführt. In einer Ausführungsform können Operationen für Anweisungen einer beliebigen Anzahl von logischen Stufen über eine Einzeldurchlauf- und/oder Mehrdurchlauf- oder Teildurchlaufoperation unterstützt werden. Eine Selektorschaltung 3536 ermöglicht, dass Daten innerhalb der ersten Akkumulator-/Addiererschaltung 3532 und der zweiten Akkumulator-/Addiererschaltung 3534 an ein Zielregister ausgegeben werden.
  • 36 veranschaulicht ein Stufenpaar 3600 für einen Kanal eines systolischen Arrays. In einer Ausführungsform sind die physischen Pipelinestufen für jedes Array des parallelen systolischen Doppelpipeline-Arrays 3500 von 35 als ein Stufenpaar 3600 gruppiert. Ein Stufenpaar 3600 für Stufe 0 (3610) und Stufe 1 (3611) ist veranschaulicht, wobei andere Paare von Stufen (z. B. [2,3], [4,5], [6,7]) ähnlich konfiguriert sind. Jeder Kanal jeder Stufe enthält ein Paar von Multiplizierern (z. B. Multiplizierer 3612A-3612B für Stufe 0, Multiplizierer 3613A-3613B für Stufe 1) und einen gemeinsamen Addierer 3604. Die Akkumulatoreingabe 3620 (SrcO) wird zu dem SrcO-Datenpuffer 3530A-3530B weitergeleitet, der in 35 gezeigt ist, und wird nicht vom Stufenpaar 3600 bearbeitet. Die entsprechenden Src1-Registerdaten werden als Eingabe in die geeignete Stufe bereitgestellt. Ein einzelner Src2-Register-Lesevorgang kann Daten für beide Stufen in dem Stufenpaar 3600 speichern.
  • 37 veranschaulicht ein systolisches Array 3700, das ein Teilsummen-Loopback und eine Schaltungsanordnung zum Beschleunigen der Multiplikation von dünn besetzten Matrizen enthält. In dem oben beschriebenen systolischen Array 2808 können Operanden, die Gewichtungsdaten enthalten, innerhalb des Arrays stationär sein, und eine Teilsumme wird durch die Array-Struktur propagiert. Während andere Einzelheiten in Bezug auf das systolische Array 2808 anwendbar sein können, wird im systolischen Array 3700 eine Teilsumme rezirkuliert, anstatt an eine nächste systolische Schicht propagiert zu werden. In einer Ausführungsform kann ein systolisches Array 3700 mit M Zeilen und N Spalten mit Verarbeitungselementen (PE 3712AA-PE 3712MN) konfiguriert sein. Die Verarbeitungselemente können auf Register zugreifen, die Eingabedaten in Form von Zeilen- und Spaltendaten für Eingabematrizen speichern. Die Register können in einer Registerdatei, die lokal zum systolischen Array 3700 ist, oder in einer Registerdatei einer Verarbeitungsressource, die mit dem systolischen Array 3700 gekoppelt ist oder dieses beinhaltet, gespeichert sein. Die Register können Zeilenelemente der Matrix A 3702A-3702M speichern, die mit Spaltenelementen der Matrix B 3701A-3702N zu multiplizieren sind.
  • In einer Ausführungsform kann bei jedem Verarbeitungselement PE 3712AA-PE 3712MN in jedem Taktzyklus ein Fused-Multiply-Add (FMA) durchgeführt werden. Ein Element der Matrix A wird mit einem entsprechenden Element der Matrix B multipliziert und dann zu einem Akkumulatorwert oder für den ersten Zyklus einem optionalen anfänglichen Eingabewert (z. B. SRC0) addiert. An jedem Verarbeitungselement kann ein Teilsummen-Loopback konfiguriert werden. Nach jedem Zyklus kann der Akkumulatorwert innerhalb des Verarbeitungselements zurückgeführt und als Eingabe für den nächsten Zyklus verwendet werden. Sobald Operationen für eine ganze Zeile durchgeführt wurden, kann das Ergebnis in einer Registerdatei gespeichert werden. Die Datenbewegung zwischen den Verarbeitungselementen PE 3712AA-PE 3712MN nach einem Satz von Rechenzyklen kann basierend auf der ausgeführten Anweisung oder Makrooperation variieren.
  • Datengesteuerte Dünnbesetzung mit Komprimierung
  • Hierin beschriebene Ausführungsformen stellen ein Codierungslayout bereit, das es ermöglicht, Abtastblöcke mit dünn besetzten neuronalen Netzdaten in einem reduzierten Bit-Format zu codieren, das die Datenmenge reduziert, die beim Verarbeiten von neuronalen Netzen, die mit den Daten assoziiert sind, übertragen oder gespeichert werden muss. Die Anzahl von Werten ungleich null in einem Abtastblock wird in einem Header angegeben, gefolgt von einer Signifikanzkarte, die eine Karte der von null verschiedenen Werte innerhalb des Blocks angibt. Die von null verschiedenen Werte der Abtastung werden in der Reihenfolge ihres Auftretens innerhalb des Stroms codiert. In einer Ausführungsform kann die Komprimierung auf anderen Werten neben Nullwerten basieren. Beispielsweise kann ein spezifizierter Wert innerhalb eines Datensatzes codiert und von einem komprimierten Datenstrom ausgeschlossen werden, wodurch eine Komprimierung basierend auf Einsen, Zweien oder anderen spezifizierten Werten ermöglicht wird. In einer Ausführungsform wird die Komprimierung basierend auf Nahe-Werten aktiviert. Werte innerhalb eines Datensatzes, die innerhalb einer Schwelle von null oder innerhalb einer Schwelle eines spezifizierten Werts liegen, können komprimiert werden, als ob diese Werte null oder innerhalb einer Schwelle des spezifizierten Werts wären. Datengesteuerte Dünnbesetzung mit Komprimierung kann über Codec-Logik aktiviert werden, die mit oder innerhalb der Matrixbeschleunigerlogik gekoppelt ist.
  • 38A-38B veranschaulichen eine Matrixbeschleunigungsschaltungsanordnung einschließlich Codecs zum Ermöglichen des Lesens von dünn besetzten Daten in einem komprimierten Format. 38A veranschaulicht einen Rechenblock 3800, der Code-aktivierte disaggregierte systolische Logik beinhaltet. 38B veranschaulicht Verarbeitungselemente innerhalb eines systolischen Arrays, die mit Codecs gekoppelt sind, um Eingabedaten zu dekomprimieren.
  • Wie in 38A gezeigt, anstatt ein systolisches Array 2808 in einen separaten Tensorbeschleuniger 2723 aufzunehmen, wie in 28A gezeigt, oder ein systolisches Array 1912 in jede Ausführungseinheit 1900 aufzunehmen, wie in 19 gezeigt, kann ein disaggregierter Satz von systolischen Arrays 3812A-3812B in einem Rechenblock 3800 enthalten sein, der analog zu einem der Rechenblöcke 2724A-2724N von 27 ist. Der Rechenblock 3800 kann auch Komponenten der Ausführungslogik 1800 von 18A enthalten, einschließlich mehrerer miteinander verbundener Verarbeitungsressourcen (PR 3808A-3808O), die der EU 1808A-1808N oder einer beliebigen anderen hierin beschriebenen Verarbeitungsressource ähneln können. In einer Ausführungsform beinhalten die systolischen Arrays 3812A-3812B Codecs 3824A-3824B, die das Codieren und Decodieren von Eingabe- und Ausgabedaten ermöglichen, die zur Verarbeitung empfangen werden.
  • Die systolischen Arrays 3812A-3812B beinhalten ein Netzwerk von Datenverarbeitungseinheiten der Breite W und Tiefe D, die verwendet werden können, um Vektor- oder andere datenparallele Operationen auf systolische Weise durchzuführen, ähnlich den anderen hierin beschriebenen systolischen Anordnungen. In einer Ausführungsform können die systolischen Arrays 3812A-3812B ausgelegt sein, Matrixoperationen durchzuführen, wie Matrix-SkalarproduktOperationen. In einer Ausführungsform unterstützen die systolischen Arrays 3812A-3812B 16-Bit-Gleitkomma-Operationen sowie 8-Bit- und 4-Bit-Ganzzahl-Operationen. In einer Ausführungsform können die systolischen Arrays 3812A-3812B ausgelegt sein, Operationen für maschinelles Lernen zu beschleunigen. In derartigen Ausführungsformen können die systolischen Arrays 3812A-3812B mit Unterstützung für das bfloat-16-Bit-Gleitkomma-Format konfiguriert sein. Durch das Aufnehmen der systolischen Arrays 3812A-3812B innerhalb des Rechenblocks 3800, aber außerhalb der PRs 3808A-3808O können die Größe und Anzahl der systolischen Arrays 3812A-3812B unabhängig von der Anzahl der PRs 3808A-3808O skaliert werden. Außerdem kann Kommunikationsbandbreite innerhalb einer PR, die ansonsten durch die Aktivität des systolischen Arrays verbraucht würde, bewahrt werden. Des Weiteren können die systolischen Arrays 3812A-3812B takt-/leistungsgesteuert sein, wenn keine Matrixarbeitslasten durchgeführt werden.
  • Die Kommunikation zwischen den systolischen Arrays 3812A-3812B und den PRs 3808A-3808O kann über einen Zwischenspeicher oder gemeinsam genutzten lokalen Speicher (Zwischenspeicher/SLM 3810) und/oder eine gemeinsam genutzte Registerdatei 3814 durchgeführt werden. In einer Ausführungsform kann der Zwischenspeicher/SLM 3810 anstelle einer individuellen gemeinsam genutzten Registerdatei 3814 zur Verwendung als gemeinsam genutzte Registerdatei partitioniert werden. Die gemeinsam genutzte Registerdatei 3814 kann ähnlich wie andere GPGPU-Registerdateien, wie etwa die Registerdatei 1906 wie in 19, strukturiert sein. Die gemeinsam genutzte Registerdatei kann auch einen Satz von Spezialregistern beinhalten, die verwendet werden, um die Interaktion zwischen den systolischen Arrays 3812A-3812B und den PRs 3808A-3808O zu konfigurieren. Der Zwischenspeicher/SLM 3810 kann ein L1-Zwischenspeicher, ein L2-Zwischenspeicher und/oder ein Block von explizit adressierbarem chipinternem Speicher sein.
  • Matrixdaten zur Verarbeitung durch die systolischen Arrays 3812A-3812B können im Zwischenspeicher/SLM 3810 gespeichert werden. Verarbeitungsbefehle oder Anweisungen können über die gemeinsam genutzte Registerdatei 3814 an die systolischen Arrays 3812A-3812B geliefert werden. Verarbeitungsergebnisse können aus dem Zwischenspeicher/SLM 3810 durch die PRs 3808A-3808O oder aus Ziel-/Ausgaberegistern innerhalb der gemeinsam genutzten Registerdatei gelesen werden. Während des Betriebs kann der Kommunikationsverkehr auf die systolischen Arrays 3812A-3812B, den Zwischenspeicher/SLM 3810 und/oder die gemeinsam genutzte Registerdatei 3814 lokalisiert werden, anstatt Bus-/Fabric-Bandbreite innerhalb der PRs 3808A-38080 zu verbrauchen. Jede der PRs 3808A-3808O innerhalb des Rechenblocks 3800 kann eine Matrixarbeitslast auf ein oder beide systolische Arrays 3812A-3812B auslagern. Eine Nachricht kann von einer PR an ein systolisches Array mit einem Befehl gesendet werden, der eine auszuführende Operation und Operanden für die Operation spezifiziert. Die systolischen Arrays 3812A-3812B können die angeforderten Operationen (Multiplizieren/Addieren, Fused-Multiply/Add, Multiplizieren/Akkumulieren, Skalarprodukt usw.) durchführen und die Ergebnisse an die gemeinsam genutzte Registerdatei 3814 ausgeben. Eingabe-, Zwischen- und/oder Ausgabedaten für angeforderte Operationen können im Zwischenspeicher/SLM 3810 gespeichert werden und mehrere abhängige Operationen können verkettet werden. In einer Ausführungsform können, wenn Verarbeitungsoperationen zum Training oder zur Inferenz für ein neuronales Netz durchgeführt werden, können die systolischen Arrays 3828A-3828B auch Aktivierungsfunktionen durchführen, einschließlich unter anderem Sigmoid-, ReLU- und Hyperbeltangensaktivierungen (TanH-Aktivierungen). In einer solchen Ausführungsform können Operationen für neuronale Netze mit grober Granularität in die systolischen Arrays 3812A-3812B ausgelagert werden.
  • Die PRs 3808A-3808O können den systolischen Arrays 3812A-3812B Eingabedaten in einem komprimierten Format bereitstellen, und die Codecs 3824A-3824B können zum Dekomprimieren der Daten verwendet werden. Wenn Ausgabedaten bereit sind, den PRs 3808A-38080 zur Verfügung gestellt zu werden, können die Daten dekomprimiert bleiben, falls die PRs Operationen an den Daten durchführen und das direkte Lesen komprimierter Daten nicht unterstützen. Falls die PRs 3808A-3808O das Lesen komprimierter Daten unterstützen oder keine zusätzlichen Operationen an den Daten durchführen, können die Ausgabedaten erneut codiert werden. Es kann eine Null-basierte Codierung verwendet werden und die Komprimierung kann basierend auf dem Grad der Dünnbesetzung der Daten aktiviert oder deaktiviert werden. Alternativ können andere Formen von Codierung basierend auf der Verteilung des zu verarbeitenden oder auszugebenden Datensatzes verwendet werden. Beispielsweise können die Codecs 3824A-3824B dazu ausgelegt sein, dünn besetzte Daten zu decodieren, die basierend auf einer Null-basierten Komprimierung oder unter Verwendung einer anderen hierin beschriebenen Form von Komprimierung (z. B. Eins-basiert, Zwei-basiert, nahe Null, nahe Eins, nahe Zwei usw.) codiert sind.
  • Wie in 38B gezeigt, veranschaulicht das System 3850 Verarbeitungselemente des systolischen Arrays 3700, wobei das systolische Array dazu ausgelegt ist, komprimierte dünn besetzte Daten zu decodieren. Wie mit Bezug auf 37 beschrieben, enthält jedes PE 3712AA-3713MN Hardwarelogik, um Berechnungen für Matrixoperationen durchzuführen. A (A0, A1 bis AM) und B (B0, B1, bis BN) sind Elemente von Eingabematrizen mit assoziierten Skalarprodukt-, Matrixmultiplikation-, Multiplikation-/Addition- oder Multiplikationsakkumulationsoperationen. In einer Ausführungsform ist jedes PE 3712AA-3713MN mit Codecs (3851a, 3851b, ... ,3851m; 3852a, 3852b,... ,3852n) assoziiert, um komprimierte Eingabeoperanden zu decodieren, die mit durchzuführenden Operationen assoziiert sind. Die Codecs können dazu ausgelegt sein, dünn besetzte Daten zu decodieren, die basierend auf einer Null-basierten Komprimierung oder unter Verwendung einer anderen hierin beschriebenen Form von Komprimierung codiert sind.
  • Dünn besetzte Daten eines neuronalen Netzes können unter Verwendung einer Vielzahl von Codiertechniken codiert (z. B. komprimiert) werden, wie etwa unter anderem Tabellencodierung mit eindeutigem Absolutwert (UAV), Signifikanzkarten(SM)-Codierung, Tabellencodierung (TE), Koordinatencodierung mit eindeutigem Wert (UVC-Codierung) und Mittelwertcodierung (ME). Metadaten für die codierten Daten geben den Typ des für die Daten verwendeten Codierungsformats an. In einer Ausführungsform können spezifische Codierungsformate für spezifische Datentypen, wie etwa Kerneldaten oder Merkmalsdaten, ausgewählt werden. In einer Ausführungsform wird eine statistische Analyse der Daten vor der Codierung durchgeführt, um die Auswahl eines geeigneten Codierers für jeden Datenblock zu ermöglichen. Die Codierung kann eine Null-basierte Codierung, eine Nahe-Null-Codierung oder basierend auf anderen Werten (Einsen, Zweien usw.) sein.
  • In einer Ausführungsform können während der SM-Codierung erzeugte Daten verwendet werden, um die Bereitstellung komprimierter Daten an ein systolisches Tensor-Array zu ermöglichen. Im Null-basierten SM-Codierungsmodus werden nur Werte ungleich null in einem Block codiert. Die Anzahl von Werten ungleich null in einem Abtastblock wird in dem Header angegeben, gefolgt von einer Signifikanzkarte, die eine Karte der von null verschiedenen Werte innerhalb des Blocks angibt. Die von null verschiedenen Werte der Abtastung werden dann in der Reihenfolge ihres Auftretens innerhalb des Stroms codiert.
  • Zeitlich amortisiertes Supersampling unter Verwendung eines faltenden neuronalen Netzes mit gemischter Genauigkeit
  • Hierin sind Ausführungsformen beschrieben, die eine auf maschinellem Lernen basierende zeitlich amortisierte Supersampling-Technik bereitstellen, die temporale Kantenglättung (TAA) ersetzt. Ein gemischtes neuronales Faltungsnetzwerk mit niedriger Genauigkeit wird verwendet, das unterschiedliche Rechengenauigkeiten in verschiedenen Stufen anwendet, um die Hochleistungs-Generierung von qualitativ hochwertigen Bildern basierend auf Quellbildern zu ermöglichen, die mit einer relativ niedrigeren Auflösung als die Zielausgabeauflösung gerendert werden. Das Netzmodell ermöglicht Kantenglättung und Aufwärtsskalierung mit Unterstützung für mehrere Skalierungsfaktoren, einschließlich unter anderem 1,3-fach, 1,5-fach, 1,7-fach, 2-fach oder 2,2-fach. Andere Skalierungsfaktoren sind ebenfalls möglich. Eine zeitlich stabile aufwärtsskalierte Ausgabe kann erzeugt werden, die eine Bildqualität aufweist, die besser oder gleich dem nativen Rendern mit der Zielauflösung ist. In verschiedenen Ausführungsformen sind unterschiedliche Versionen bereitgestellt, die auf einer Vielzahl unterschiedlicher Grafikverarbeitungsarchitekturen implementiert werden können, einschließlich Architekturen mit Matrixbeschleunigungshardware, wie oben in 28A bis 34 beschrieben, sowie Grafikprozessorarchitekturen ohne dedizierte Matrixbeschleunigungshardware.
  • 39 veranschaulicht einen herkömmlichen Renderer 3900 mit temporaler Kantenglättung (TAA). Der Renderer innerhalb der Rasterisierungs- und Beleuchtungsstufe 3910 kann die Kamera 3902 während des Renderns für jeden Frame einem Jittern unterwerfen (3905), um unterschiedliche Koordinaten im Bildschirmraum 3904 abzutasten. Unterschiedliche Pixel können von unterschiedlichen Frames mit der Zeit abgetastet werden. Die TAA-Stufe 3916 akkumuliert diese Abtastungen zeitlich, um ein überabgetastetes Bild zu erzeugen. Eine Verzerrungsoperation 3924 wird unter Verwendung von vom Renderer generierten Geschwindigkeits-Bewegungsvektoren 3922 auf den zuvor akkumulierten Frame (Verlauf 3923) angewendet, um den zuvor akkumulierten Frame vor der Akkumulation am aktuellen Frame 3912 (Frame N) auszurichten. Die optionale Aufwärtsskalierung 3914 kann an dem aktuellen Frame vor der Eingabe in die TAA-Stufe 3916 durchgeführt werden, sodass der aktuelle Frame mit einer niedrigeren Auflösung als die Zielauflösung gerendert werden kann. Der Ausgabeframe kann dann zum Verlauf 3923 zur Verwendung bei der Verarbeitung des nächsten Frames hinzugefügt werden. Die Nachverarbeitungsoperationen 3918 können dann mit der aufwärtsskalierten Zielauflösung durchgeführt werden. Während das Anwenden von Aufwärtsskalierung mit TAA die Rendering-Leistungsfähigkeit verbessern kann, weisen die Ausgabebilder eine geringere Qualität auf als Bilder, die nativ mit der Zielauflösung gerendert werden. Einige TAA-Implementierungen können Heuristiken 3915 verwenden, wie etwa unter anderem Nachbarschaftsfarbklemmung, Objektkennungsvergleiche und Tiefenwertvergleiche, um Fehlanpassungen zwischen aktuellen und Frames im Verlauf zu detektieren und die Verlaufspixel zu abzulehnen. Diese Heuristiken scheitern jedoch häufig und erzeugen eine wahrnehmbare Menge an Geisterbildern, Überunschärfe und/oder Flackern.
  • 40 veranschaulicht einen Renderer 4000, der die TAA-Stufe durch eine zeitlich amortisierte Supersampling-Stufe ersetzt, nach hierin bereitgestellten Ausführungsformen. Der Renderer 4000 unterscheidet sich vom Renderer 3900 aus 39 insofern, dass in dem Renderer 4000 ein zeitlich amortisiertes Supersampling unter Verwendung eines gemischten neuronalen Faltungsnetzwerks 4050 mit niedriger Genauigkeit durchgeführt wird, das die TAA-Stufe in dem Game-Renderer ersetzt, wodurch eine wesentlich bessere Bildqualität als herkömmliche TAAbasierte Techniken erreicht wird und eine Leistungssteigerung erreicht wird, indem ermöglicht wird, dass das Rendern mit niedrigerer Auflösung durchgeführt wird. Der Renderer 4000 kann den aktuellen Frame 3912 mit einer niedrigeren als der Zielauflösung rendern. Ein Aufwärtsskalierungsfilter 4014 wird auf das gerenderte Bild angewendet, um das Bild auf die Zielauflösung aufwärtszuskalieren. In einer Ausführungsform wird das Aufwärtsskalierungsfilter 4014 durch den Renderer 4000 angewendet, bevor der aktuelle Frame 3912 der Supersampling-Stufe bereitgestellt wird. In einer Ausführungsform wird das Aufwärtsskalierungsfilter durch das neuronale Netzmodell 4050 während Vorverarbeitungsoperationen durchgeführt. Das Aufwärtsskalierungsfilter 4014 kann Optimierungen beinhalten, um die Bildqualität der zeitlichen Stabilität von Bildern zu verbessern, die sich aus der durch das neuronale Netzmodell 4050 durchgeführten Verarbeitung ergeben. Verzerrungsoperationen 4024 am Verlauf 3923 können durch einen Eingabeblock des neuronalen Netzmodells 4050 durchgeführt werden. In einer Ausführungsform ist der Verlauf 3923 ein Multi-Frame-Verlauf, die Daten von mehreren vorherigen Frames beinhaltet.
  • Das gemischte neuronale Faltungsnetzwerk mit geringer Genauigkeit wird über ein neuronales Netzmodell 4050 implementiert, das aus mehreren Faltungsschichten besteht, sowie andere Operationen, die mit niedrigen Genauigkeiten durchgeführt werden, wie etwa INT8, gemischt mit Operationen, die mit einer höheren Genauigkeit durchgeführt werden, wie etwa FP16. Die Mischung von Genauigkeiten ermöglicht dem Netzwerk, eine schnelle Rechengeschwindigkeit zu erreichen, während Ausgabebilder hoher Qualität erzeugt werden. Die Werte mit geringerer Genauigkeit sind nicht auf INT8 beschränkt, und unterschiedliche Datenformate mit niedriger Genauigkeit (z. B. INT4, binär, bipolar binär, ternär usw.) können für Variationen verwendet werden. Der Großteil des neuronalen Netzmodells 4050 und die mit dem neuronalen Netzmodell assoziierten Operationen werden mit der niedrigeren Genauigkeit durchgeführt, um eine hohe Inferenzleistungsfähigkeit zu ermöglichen. Ein rechnerisch kleinerer Teil wird mit einer relativ höheren Genauigkeit ausgeführt, um die Ausgabequalität zu bewahren. Zusätzlich zur Verwendung von FP16 für Operationen mit höherer Genauigkeit können auch andere Gleitkommagenauigkeiten verwendet werden, wie etwa FP8, BF16 oder TF32. Außerdem befindet sich die Mehrheit des neuronalen Netzmodells 4050 auch in einer reduzierten räumlichen Dimension, um eine schnelle Inferenzleistungsfähigkeit durch Verschieben von Eingangspixeln von der räumlichen (Breite, Höhe) Dimension in eine Tiefen- oder Merkmalskartenkanaldimension ohne Pixelinformationsverlust bereitzustellen. Die räumliche Dimension wird während der Generierung eines Ausgabebildes aus der Kanaldimension zurück verschoben.
  • Zeitlich amortisiertes Supersampling wird durch Kombinieren des aktuellen Frames und des vorherigen Ausgabeframes durchgeführt, der mit den aktuellen Bewegungsvektoren verzerrt ist. Das neuronale Netzmodell 4050 ermittelt die Art und Weise, auf die der aufwärtsskalierte aktuelle Frame 3912 und der Verlauf 3923 kombiniert werden sollen. In verschiedenen Ausführungsformen werden mehrere unterschiedliche Ansätze angewendet, um die Ausgangsqualität zu bewahren. In einer Ausführungsform wird eine hochpräzise Kombination des aufwärtsskalierten aktuellen Frames 3912 und des Verlaufs unter Verwendung einer 1x1- oder 3x3-Ausgabefaltung durchgeführt. In einer anderen Ausführungsform werden Pixelvorhersage und hochpräzises Filtern des aufwärtsskalierten Bildes durchgeführt, um ein aufwärtsskaliertes Bild hoher Qualität zu generieren. Das neuronale Netzmodell 4050 wird verwendet, um eine Eingabe zu generieren, die den Kernelvorhersage- und Filteroperationen bereitgestellt wird.
  • Während des Trainings des neuronalen Netzmodells 4050 werden sowohl Wahrnehmungs- als auch Zeitverlustfunktionen optimiert, um sowohl die Bildqualität als auch die zeitliche Stabilität der Abtastratenerhöhung und Kantenglättung zu verbessern. In einer Ausführungsform reicht verallgemeinertes Training aus, um eine qualitativ hochwertige Ausgabe über eine Vielzahl von Spielen zu ermöglichen, ohne ein umfassendes Pro-Spiel-, Pro-Aufwärtsskalierungs-Faktor- oder Pro-Ziel-Auflösungstraining zu erfordern.
  • 41 veranschaulicht eine Implementierung eines neuronalen Netzmodells 4100 gemäß einer Ausführungsform. Das neuronale Netzmodell 4100 ist eine Implementierung des neuronalen Netzmodells 4050 von 40. In einer Ausführungsform besteht das neuronale Netzmodell 4100 aus drei Komponenten: einem Eingabeblock 4108, einem Merkmalsextrahierungsnetz 4110 und einem Ausgabeblock 4120. Operationen mit niedrigerer Genauigkeit (z. B. Ganzzahl) werden für den Großteil des neuronalen Netzmodells verwendet, um eine schnelle Inferenzleistungsfähigkeit zu erreichen. Die Ausgabe des neuronalen Netzmodells wird unter Verwendung von Operationen mit höherer Genauigkeit (z. B. Gleitkomma) erzeugt, um die Generierung von qualitativ hochwertigen Ausgangsbildern zu ermöglichen. Zum Beispiel werden die Codierer (Codiererblock 1 bis Codiererblock N), der Engpassblock und die Decodiererblöcke (Decodiererblock 1 bis Decodiererblock N) in dem Merkmalsextrahierungsnetz 4110 mit relativ niedrigerer Genauigkeit (z. B. INT8) im Vergleich zu dem Ausgabeblock 4120 ausgeführt, der mit einer relativ höheren Genauigkeit (z. B. FP16) ausgeführt wird. Die Verwendung einer geringeren Genauigkeit in dem Merkmalsextrahierungsnetz 4110 reduziert die Komplexität der Berechnung erheblich und verbessert die Speicherbandbreite für eine schnelle Inferenzleistungsfähigkeit. Die Nutzung einer höheren Genauigkeit in dem Ausgabeblock 4120 ermöglicht die Generierung von Ausgabebildern mit einer Bildqualität, die so gut wie, oder in manchen Fällen besser als Bilder ist, die nativ mit der Zielauflösung gerendert werden. Wie oben angemerkt, können andere Genauigkeiten oder Datentypen zusätzlich zu INT8 und FP16 verwendet werden, wie etwa unter anderem INT4 für Operationen mit niedrigerer Genauigkeit und BF16 oder TF32 für Operationen mit höherer Genauigkeit.
  • Der Eingabeblock 4108 empfängt als Eingabe Verlaufsdaten 4102, Geschwindigkeitsdaten 4104, den aktuellen Frame 4106 und einen Jitter-Offset 4107 für die Kamera. Die Verlaufsdaten 4102 beinhalten eine zuvor erzeugte Ausgabe. Die zuvor erzeugte Ausgabe beinhaltet zumindest den unmittelbar vorhergehenden Frame (Frame N-1), der unter Verwendung der Geschwindigkeitsdaten 4104 verformt wird, um den Frame zur zeitlichen Akkumulation am aktuellen Frame 4106 auszurichten. Bei verschiedenen Ausführungsformen können die Verlaufsdaten 4102 zusätzlich zu dem vorherigen Frame auch ein oder mehrere zusätzliche Frames einer vorherigen erzeugten Ausgabe (z. B. Frame N-2 usw.) beinhalten, die auch als Eingabe in das Merkmalsextrahierungsnetz 4110 bereitgestellt werden können. Der Jitter-Offset 4107 ist der Kamera-Offset, der angewendet wird, um Jittern auf die Szene anzuwenden, wobei unterschiedliche Jitter-Werte für aufeinanderfolgende Frames verwendet werden. Der Jitter-Offset 4107 ist in einer Ausführungsform ein Subpixel-Offset. Der Eingabeblock erzeugt sowohl Tensoren mit geringerer als auch höherer Genauigkeit. Tensoren mit geringerer Genauigkeit werden dem Merkmalsextrahierungsnetz 4110 bereitgestellt. Tensoren mit höherer Genauigkeit werden dem Ausgabeblock 4120 bereitgestellt. Weitere Details zum Eingabeblock 4108 sind in 42 gezeigt.
  • Das Merkmalsextrahierungsnetz 4110 ist auf einer U-förmigen Netzwerkarchitektur aufgebaut, wie etwa zum Beispiel der U-Net-Architektur. Das Merkmalsextrahierungsnetz 4110 unterscheidet sich von der herkömmlichen U-Net-Architektur darin, dass das Merkmalsextrahierungsnetz 4110 eine asymmetrische Struktur in dem Codierer 4112 und dem Decodierer 4116 beinhaltet. Der Codierer 4112 des Merkmalsextrahierungsnetzes 4110 beinhaltet eine Reihe von Codiererblöcken, die die räumliche Dimension eines Eingabetensors heruntertasten, während die Anzahl von Kanälen (Tiefen- oder Merkmalskarten) bis zur Erzeugung einer latenten Repräsentation 4114 an einem Engpassblock in der Mitte des Netzwerks erhöht wird. Die latente Repräsentation 4114 ist der abstrakte multidimensionale Raum, der die bedeutungsvollen Merkmale der Eingabedaten codiert. Die Decodiererblöcke des Decodierers 4116 kehren diesen Prozess durch Abtastratenerhöhung der räumlichen Dimension und Verringern der Anzahl von Kanälen um. Die Codiererblöcke weisen eine Sprungverbindung zu einem entsprechenden Decodiererblock auf, der ermöglicht, dass Hochfrequenzdetails zwischen dem Codierer 4112 und dem Decodierer 4116 weitergeleitet werden. Die Ausgabe von Codiererblock 1 wird dem Decodiererblock 2 zur Verarbeitung in Verbindung mit der Ausgabe vom Decodiererblock 3 bereitgestellt. Die Ausgabe von Codiererblock 2 wird dem Codiererblock 3 bereitgestellt, um in Verbindung mit einer Ausgabe von dem vorherigen Decodiererblock in dem Netzwerk verarbeitet zu werden. Die Eingabe für den Codiererblock N wird dem Decodiererblock N bereitgestellt. Der Decodiererblock 1, der abschließende Decodiererblock, empfängt eine Eingabe von dem Eingabeblock 4108 und dem Decodiererblock 2. Der Decodierer 4116, von Decodiererblock 1, stellt dem Ausgabeblock 4120 in Abhängigkeit von dem Implementierungsansatz, der für den Ausgabeblock 4120 verwendet wird, Daten entweder in einem Format mit höherer Genauigkeit oder einem Format mit geringerer Genauigkeit bereit. Weitere Details zum Ausgabeblock sind in 43A und 43B gezeigt.
  • 42 veranschaulicht weitere Details für den Eingabeblock 4108 des neuronalen Netzmodells 4100 gemäß Ausführungsformen. Der Eingabeblock 4108 empfängt eine Eingabe, die Verlaufsdaten 4102, Geschwindigkeitsdaten 4104, den aktuellen Frame 4106 und den Jitter-Offset 4107 beinhaltet. Der Eingabeblock 4108 beinhaltet eine Verzerrungseinheit 4202 zum Verzerren der vorherigen Ausgabe innerhalb der Verlaufsdaten 4102 unter Verwendung von Bewegungsvektoren innerhalb der Geschwindigkeitsdaten 4104. Der Eingabeblock 4108 beinhaltet auch eine Aufwärtsskalierungseinheit 4203 zum Aufwärtsskalieren des aktuellen Frames 4106. In einer Ausführungsform ist das von der Aufwärtsskalierungseinheit 4203 angewandte Aufwärtsskalierungsfilter ein adaptives Filter, das die Aufwärtsskalierung basierend auf dem Jitter-Offset 4107 anpasst. Eine Raum-zu-Kanal-/Tiefen-Shuffle-Einheit 4204 verschiebt Pixel von der räumlichen Dimension (Breite, Höhe) in einen Kanal (z. B. Merkmalskarte) oder eine Tiefendimension, was eine Inferenzfindung mit hoher Leistungsfähigkeit durch eine Reduzierung der numerischen Genauigkeit und räumlichen Dimension während der Merkmalsextrahierung ermöglicht. Zum Beispiel können für ein Eingabebild mit (Kanal, Höhe, Breite)-Pixeln von Daten in der räumlichen Dimension die Pixeldaten in ( c h a n n e l   ×  r 2 , h e i g h t r , w i d t r )
    Figure DE102022125600A1_0003
    verschoben werden, was die räumliche Dimension reduziert, in der die Merkmalsextrahierung durchgeführt wird, was die Leistungsfähigkeit des Merkmalsextrahierungsnetzes 4110 verbessert. Der Eingabeblock 4108 erzeugt sowohl Tensoren mit geringerer Genauigkeit (z. B. INT8) als auch höherer Genauigkeit (z. B. FP16). Die Tensoren mit geringerer Genauigkeit werden als Eingabe in das Merkmalsextrahierungsnetz 4110 bereitgestellt, während die Tensoren mit höherer Genauigkeit an den Ausgabeblock 4120, 4320A-4320B weitergeleitet werden. Der Eingabeblock 4108 beinhaltet auch eine optionale Faltungs-/Aktivierungsschicht 4206, die angewendet werden kann, bevor Daten an das Merkmalsextrahierungsnetz ausgegeben werden.
  • 43A-43B veranschaulichen Ausgabeblockvarianten für das neuronale Netzmodell gemäß Ausführungsformen. 43A veranschaulicht einen Decodiererblock 4320 und eine Variante des Ausgabeblocks 4320A, die dazu ausgelegt ist, eine direkte Generierung von Pixeldaten für das Ausgabebild durchzuführen. 43B veranschaulicht einen Decodiererblock 4320 und eine Variante des Ausgabeblocks 4320B, der als ein Kernelvorhersagenetzwerk konfiguriert ist, das Kernelpixelvorhersage und -Filterung anwendet, um das Ausgabebild zu erzeugen. In 43A-43B ist ein Decodiererblock 4320 (Decodiererblock 1) als ein Beispiel dargestellt. Während jeder Codiererblock des Codierers 4112 einen Abtastratenreduktions-Block und eine oder mehrere Faltungs-/Aktivierungsschichten beinhaltet, die eine Merkmalsextrahierung ermöglichen, beinhaltet jeder Decodiererblock des Decodierers 4116 einen Abtastratenerhöhungs-Block 4322 zum Erhöhen der räumlichen Dimension und eine oder mehrere Faltungs-/Aktivierungsschichten 4324, 4326 zum Wiederherstellen von Merkmalen. Der Decodiererblock 1 empfängt Daten vom Decodiererblock 2 sowie Sprungverbindungsdaten vom Eingabeblock. Für den Ausgabeblock 4320A-4320B können zwei unterschiedliche Ansätze getroffen werden, um die Qualität mit höherer Genauigkeit zu bewahren. Eine Ausführungsform stellt einen Ausgabeblock 4320A bereit, wie in 43A gezeigt, der das neuronale Netz 4100 derart konfiguriert, dass es als ein Direktrekonstruktionsnetzwerk arbeitet. Eine Ausführungsform stellt einen Ausgabeblock 4320B bereit, wie in 43B gezeigt, der das neuronale Netz 4100 derart konfiguriert, dass es als ein Kernelvorhersagenetz arbeitet.
  • Für Ausgabeblock 4320A aus 43A werden Daten von dem Eingabeblock 4108 und dem Merkmalsextrahierungsnetz 4110 unter Verwendung einer 1x1- oder 3x3-Ausgabefaltungsschicht 4330 kombiniert, um direkt Daten für das Ausgabebild zu erzeugen. Die Ausgabefaltungsschicht 4330 empfängt als Eingabe eine Ausgabe mit höherer Genauigkeit (z. B. FP16) von der einen oder den mehreren Faltungs-/Aktivierungsschichten 4326 des abschließenden Decodiererblocks 4320 sowie eine Eingabe mit höherer Genauigkeit von dem Eingabeblock 4108. Durch die Ausgabefaltungsschicht 4330 generierte Daten werden der Tiefen-/Kanal-zu-Raum-Shuffle-Einheit 4332 bereitgestellt, die die Daten zurück in die räumliche Dimension verschiebt, um ein Ausgabebild 4340 zu erzeugen. Das Ausgabebild 4340 kann über eine Anzeige ausgegeben oder vor der Ausgabe über die Anzeige weiter nachbearbeitet werden.
  • Für Ausgabeblock 4320B aus 43B werden Kernelvorhersage und Filterung durchgeführt. Anstatt direkt ein Ausgabebild zu erzeugen, werden Kernelwerte (z. B. Gewichtungen) pro Pixel durch eine Kernelvorhersageschicht 4334 vorhergesagt. Tensoren mit niedrigerer Genauigkeit (INT8) werden vom Decodiererblock 4320 zur Verwendung durch die Kernelvorhersageschicht 4334 ausgegeben, die die Tensoren mit niedrigerer Genauigkeit in Kombination mit den Tensoren mit höherer Genauigkeit verwendet, die vom Eingabeblock 4108 bereitgestellt werden. Die Tiefen-/Kanal-zu-Raum-Shuffle-Einheit 4332 verschiebt Framedaten zurück in die räumliche Dimension, um ein Zwischenausgabebild zu erzeugen. Das Zwischenausgabebild wird dann von der Filter-/Vermischungsschicht 4346 unter Verwendung der von der Kernelvorhersageschicht 4334 generierten Kernelwerte pro Pixel und Mischen mit der vorherigen Ausgabe unter Verwendung von von der Kernelvorhersageschicht 4334 generierten Vermischungsgewichtungen gefiltert. Das gefilterte und gemischte Bild wird dann als das Ausgangsbild 4340 bereitgestellt.
  • 44 veranschaulicht ein Verfahren 4400 zum Durchführen von zeitlich amortisiertem Supersampling. Das Verfahren 4400 beinhaltet Empfangen, an einem Eingabeblock eines hierin beschriebenen neuronalen Netzmodells (z. B. eines neuronalen Netzmodells 4050), von Verlaufsdaten, Geschwindigkeitsdaten und aktuellen Framedaten (4402). Die Verlaufsdaten beinhalten einen oder mehrere zuvor erzeugte Frames. Die Geschwindigkeitsdaten beinhalten vom Renderer generierte Bewegungsvektoren, die verwendet werden, um den einen oder die mehreren zuvor erzeugten Frames an den Pixeldaten des aktuellen Frames auszurichten. Die aktuellen Framedaten beinhalten einen Frame eines 3D-Grafikprogramms, wie etwa einer 3D-Spielanwendung, der durch eine Raster- und Beleuchtungsstufe der Renderpipeline des Grafikprozessors ausgegeben wird. In einer Ausführungsform ist der aktuelle Frame ein aufwärtsskalierter Frame, der durch ein Aufwärtsskalierungsfilter von einer anfänglichen Renderauflösung auf eine Zielauflösung aufwärtsskaliert wurde. In einer Ausführungsform wird der aktuelle Frame während der Vorverarbeitung auf die Zielauflösung aufwärtsskaliert. Der Eingabeblock stellt eine Ausgabe mit mehreren Genauigkeiten bereit, wobei ein erster Ausgabesatz dem Ausgabeblock mit hoher Genauigkeit bereitgestellt wird und ein zweiter Ausgabesatz dem Merkmalsextrahierungsnetz mit einer relativ geringeren Genauigkeit bereitgestellt wird. In einer Ausführungsform wird der erste Satz von Ausgaben als Gleitkommadaten (z. B. FP16, BF16) bereitgestellt, während der zweite Satz von Ausgaben als Ganzzahldaten (z. B. INT4, INT8) bereitgestellt wird.
  • Das neuronale Netzmodell kann dann die Verlaufsdaten, Geschwindigkeitsdaten und aktuellen Framedaten am Eingabeblock vorverarbeiten und die vorverarbeiteten Daten einem Merkmalsextrahierungsnetz bereitstellen (4404). Die vorverarbeiteten Daten, die dem Merkmalsextrahierungsnetz bereitgestellt werden, beinhalten ausgerichtete Verlaufsdaten und aktuelle Framedaten. Die Verlaufsdaten werden unter Verwendung der Geschwindigkeitsdaten verzerrt, um verzerrte Verlaufsdaten zu generieren. Die verzerrten Verlaufsdaten werden dann an den aktuellen Framedaten ausgerichtet, um ausgerichtete Verlaufsdaten zu erzeugen. Die ausgerichteten Verlaufsdaten stellen zusätzliche Abtastdaten bereit, die verwendet werden können, um ein superabgetastetes kantengeglättetes Ausgangsbild durch zeitliche Akkumulation zu erzeugen. In einer Ausführungsform umfasst die Vorverarbeitung Aufwärtsskalieren der aktuellen Einzelbilddaten von der Auflösungsausgabe durch die Raster- und Beleuchtungsstufe auf die Zielauflösung.
  • Das neuronale Netzmodell verarbeitet die vorverarbeiteten Daten an dem Merkmalsextrahierungsnetz über eine oder mehrere Codiererstufen und eine oder mehrere Decodiererstufen (4406). Die Codiererstufen reduzieren die räumliche Auflösung der Eingabedaten und extrahieren die wichtigsten Merkmale innerhalb der Eingabedaten. Die räumliche Auflösung wird dann über die Decodiererstufen erweitert, um Tensordaten zu erzeugen, die verwendet werden, um den aktuellen aufwärtsskalierten Frame angesichts des ausgerichteten Verlaufs zu verarbeiten, um einen aufwärtsskalierten Frame mit hoher Qualität zu erzeugen, der eine Bildqualität aufweist, die zumindest die gleiche wie in einem Bild ist, das nativ mit der Zielauflösung gerendert wird. Die extrahierten Merkmale werden verwendet, um eine optimierte Kombination des aktuellen und vorherigen Frames während der zeitlichen Akkumulation zu ermitteln.
  • Das neuronale Netzmodell kann dann einen Ausgabeframe über einen Ausgabeblock des neuronalen Netzmodells durch zeitliche Akkumulation unter Verwendung einer direkten Rekonstruktion oder Kernelvorhersage erzeugen (4408). Der Ausgabeframe ist ein kantengeglättetes Bild, das eine höhere Auflösung als die Rendering-Auflösung der Renderpipeline aufweist, wobei zusätzlich erzeugte Pixel die Bildqualität über die des ursprünglich aufwärtsskalierten Bildes hinaus verbessern. In einer Ausführungsform ist das neuronale Netzmodell als ein Direktrekonstruktionsnetzwerk konfiguriert, das über eine oder mehrere Faltungsschichten ein qualitativ hochwertiges Ausgabebild zur Anzeige erzeugt. Wenn es als ein Direktrekonstruktionsnetzwerk konfiguriert ist, stellt das Merkmalsextrahierungsnetz Tensoren mit höherer Genauigkeit (z. B. FP16, BF16) als Eingabe in den Ausgabeblock bereit. Der Ausgabeblock verwendet die Ausgabe mit höherer Genauigkeit aus dem Merkmalsextrahierungsnetz in Kombination mit der Ausgabe von dem Eingabeblock mit höherer Genauigkeit, um das Ausgabebild zu erzeugen. In einer Ausführungsform ist das neuronale Netzmodell als ein Kernelvorhersagemodell konfiguriert, das Kernelwerte pro Pixel erzeugt, die auf ein Hochpräzisionsfilter angewendet werden. Wenn es als ein Kernelvorhersagenetzwerk konfiguriert ist, stellt das Merkmalsextrahierungsnetz dem Ausgabeblock Leistungspräzisionstensoren (z. B. INT4, INT8) bereit. Der Ausgabeblock verwendet die Ausgabe mit geringerer Genauigkeit von dem Merkmalsextrahierungsnetz in Kombination mit der Ausgabe mit höherer Genauigkeit von dem Eingabeblock, um die Vorpixelkernel/Vermischungsgewichtungen vorherzusagen, die zum Filtern der aufwärtsskalierten Eingabe und zum Vermischen der gefilterten Eingabe mit der vorherigen Ausgabe verwendet werden.
  • 45 veranschaulicht beispielhafte Rendering-Leistungsvergleiche für mehrere hierin beschriebene Rendering-Techniken. Die Rendering-Zeit für ein Rendern niedriger Qualität 4505, zum Beispiel bei einer Auflösung von 1080p, ist deutlich niedriger als die Rendering-Zeit für ein hochwertiges Rendern 4501, zum Beispiel bei einer Auflösung von 4K. Herkömmliche Aufwärtsskalierung 4504 (TAA-Abtastratenerhöhung, zeitliche Superauflösung, FidelityFX-Superauflösung) rendert Frames mit niedriger Auflösung und das Bild mit niedriger Auflösung wird auf die Zielanzeigeauflösung hochgetastet, um eine Leistungsverbesserung und möglicherweise eine Bildqualitätsverbesserung gegenüber dem Rendern mit niedriger Qualität 4505 zu erreichen.
  • Eine Implementierung eines zeitlich amortisierten Supersampling unter Verwendung eines faltenden neuronalen Netzes mit gemischter Genauigkeit wird Xe SS von Intel® Incorporated bereitgestellt. Xe 55 kann durch die Verwendung von Intel Xe Matrix Extensions (XMX) auf Hardware durchgeführt werden, die einen Matrixbeschleuniger (z. B. den Tensorbeschleuniger 2723) beinhaltet. Das Rendern durch Xe SS + XMX 4502 kann ein Bild erzeugen, das eine wesentlich höhere Qualität als das Rendern mit niedriger Qualität 4505 oder das herkömmliche Aufwärtsskalieren 4504 und bei signifikant niedrigeren Renderzeiten als das Rendern 4501 mit nativen 4K-Auflösungen aufweist. Das Rendern durch Xe 55 + DP4a 4503 ersetzt XMX durch eine Skalarprodukt-Anweisung (DP4a), die durch eine Vielfalt von Grafikprozessorarchitekturen von einer Vielfalt von Anbietern ausgeführt werden kann und zu einem qualitativ hochwertigen Bild und einer Rendering-Zeit führt, die immer noch deutlich niedriger als das Rendern mit hoher Qualität 4501 bei nativen 4K-Auflösungen ist. In einer Ausführungsform wird Xe SS + XMX 4502 unter Verwendung einer direkten Rekonstruktion über den Ausgabeblock 4320A aus 43A durchgeführt, während Xe 55 + DP4a 4503 unter Verwendung von Kernelvorhersage und Filterung über den Ausgabeblock 4320B aus 43B durchgeführt wird.
  • Zusätzliche beispielhafte Rechenvorrichtung
  • 46 ist ein Blockdiagramm einer Rechenvorrichtung 4600, die einen Grafikprozessor 4604 enthält, nach einer Ausführungsform. Versionen der Rechenvorrichtung 4600 können auch in einer Kommunikationsvorrichtung wie einer Set-Top-Box (z. B. internetbasierter Kabelfernseh-Set-Top-Box usw.), Vorrichtungen auf Grundlage des globalen Positionierungssystems (GPS) usw. enthalten sein oder eine solche sein. Die Rechenvorrichtung 4600 kann auch in mobilen Rechenvorrichtungen wie Mobiltelefonen, Smartphones, Organizern (PDAs), Tabletcomputern, Laptopcomputern, E-Lesegeräten, Smart-Fernsehern, Fernsehplattformen, tragbaren Vorrichtungen (z. B. Brillen, Uhren, Armbändern, Smart-Karten, Schmuck, Kleidungsstücken usw.), Medienplayern usw. enthalten sein oder eine solche sein. In einer Ausführungsform enthält die Rechenvorrichtung 4600 zum Beispiel eine mobile Rechenvorrichtung, die eine integrierte Schaltung („IC“), wie ein Ein-Chip-System („SoC“ oder „SOC“) einsetzt, die verschiedene Hardware- und/oder Software-Komponenten der Rechenvorrichtung 4600 auf einem einzigen Chip integriert. Die Rechenvorrichtung 4600 kann eine Rechenvorrichtung sein, die Komponenten wie im Rechensystem 2700 von 27 veranschaulicht beinhaltet.
  • Die Recheneinrichtung 4600 enthält einen Grafikprozessor 4604. Der Grafikprozessor 4604 repräsentiert einen beliebigen hierin beschriebenen Grafikprozessor. In einer Ausführungsform enthält der Grafikprozessor 4604 einen Zwischenspeicher 4614, der ein einzelner Zwischenspeicher oder in mehrere Segmente von Zwischenspeicher aufgeteilt ist, einschließlich unter anderem eine beliebige Anzahl von L1-, L2-, L3- oder L4-Zwischenspeichern, Renderzwischenspeichern, Tiefenzwischenspeichern, Abtastzwischenspeichern und/oder Zwischenspeichern für Shadereinheiten. In einer Ausführungsform kann der Zwischenspeicher 4614 ein Last-Level-Zwischenspeicher sein, der mit dem Anwendungsprozessor 4606 gemeinsam genutzt wird.
  • In einer Ausführungsform weist der Grafikprozessor 4604 einen Grafikmikrocontroller auf, der Steuer- und Planungslogik für den Grafikprozessor implementiert. Die Steuer- und Planungslogik kann Firmware sein, die durch den Grafikmikrocontroller 4615 ausgeführt wird. Die Firmware kann beim Booten durch die Grafiktreiberlogik 4622 geladen werden. Die Firmware kann auch auf einen elektronisch löschbaren programmierbaren Nurlesespeicher programmiert sein oder von einer Flash-Speichervorrichtung innerhalb des Grafikmikrocontrollers 4615 geladen werden. Die Firmware kann ein GPU-OS 4616 aktivieren, das eine Vorrichtungsverwaltungslogik 4617 und eine Treiberlogik 4618 und einen Planer 4619 beinhaltet. Das GPU-OS 4616 kann auch einen Grafikspeichermanager 4620 beinhalten, der den Grafikspeichermanager 4621 innerhalb der Grafiktreiberlogik 4622 ergänzen oder ersetzen kann.
  • Der Grafikprozessor 4604 beinhaltet auch eine GPGPU-Engine 4644, die eine oder mehrere Grafikengines, Grafikprozessorkerne und andere Grafikausführungsressourcen, wie hierin beschrieben, beinhaltet. Derartige Grafikausführungsressourcen können in den Formen dargestellt werden, die unter anderem Ausführungseinheiten, Shaderengines, Fragmentprozessoren, Vertexprozessoren, Streaming-Multiprozesoren, Grafikprozessorcluster oder eine beliebige Sammlung von Rechenressourcen enthalten, die für die Verarbeitung von Grafikressourcen oder Bildressourcen oder zum Durchführen von Universal-Rechenoperationen in einem heterogenen Prozessor geeignet sind. Die Verarbeitungsressourcen der GPGPU-Engine 4644 können innerhalb mehrerer Kacheln einer Hardwarelogik enthalten sein, die mit einem Substrat verbunden ist, wie in 24B-24D veranschaulicht. Die GPGPU-Engine 4644 kann GPU-Kacheln 4645 beinhalten, die Grafikverarbeitungs- und Ausführungsressourcen, Zwischenspeicher, Abtaster usw. beinhalten. Die GPU-Kacheln 4645 können auch lokalen flüchtigen Speicher beinhalten oder können mit einer oder mehreren Speicherkacheln gekoppelt sein, wie etwa den Speicherkacheln 1626A-1626D wie in 16B-16C.
  • Die GPGPU-Engine 4644 kann auch eine oder mehrere spezielle Kacheln 4646 beinhalten, die zum Beispiel eine nichtflüchtige Speicherkachel 4656, eine Netzwerkprozessor-Kachel 4657 und/oder eine Universal-Rechenkachel 4658 beinhalten. Die GPGPU-Engine 4644 weist außerdem einen Matrixmultiplikationsbeschleuniger 4660 auf. Die Universal-Rechenkachel 4658 kann auch Logik zum Beschleunigen von Matrixmultiplikationsoperationen beinhalten. Die nichtflüchtige Speicherkachel 4656 kann nichtflüchtige Speicherzellen und eine Steuerlogik beinhalten. Die Steuerlogik der nichtflüchtigen Speicherkachel 4656 kann von der Vorrichtungsverwaltungslogik 4617 oder der Treiberlogik 4618 verwaltet werden. Die Netzwerkprozessor-Kachel 4657 kann Netzwerkverarbeitungsressourcen beinhalten, die mit einer physischen Schnittstelle innerhalb der Eingabe/Ausgabe(E/A)-Quellen 4610 der Rechenvorrichtung 4600 gekoppelt sind. Die Netzwerkprozessor-Kachel 4657 kann von der Vorrichtungsverwaltungslogik 4617 und/oder der Treiberlogik 4618 verwaltet werden.
  • In einer Ausführungsform ist der Matrixmultiplikationsbeschleuniger 4660 ein modularer skalierbarer Multiplikationsbeschleuniger für dünn besetzte Matrizen. Der Matrixmultiplikationsbeschleuniger 4660 kann mehrere Verarbeitungspfade beinhalten, wobei jeder Verarbeitungspfad mehrere Pipelinestufen beinhaltet. Jeder Verarbeitungspfad kann eine separate Anweisung ausführen. In verschiedenen Ausführungsformen kann der Matrixmultiplikationsbeschleuniger 4660 Architekturmerkmale von einem beliebigen von mehreren der hierin beschriebenen Matrixmultiplikationsbeschleuniger aufweisen. In einer Ausführungsform ist der Matrixmultiplikationsbeschleuniger 4660 zum Beispiel ein systolisches Array 3000, das dazu konfigurierbar ist, mit einem Vielfachen von vier logischen Stufen (z. B. vier, acht, zwölf, sechzehn usw.) zu arbeiten. In einer Ausführungsform beinhaltet der Matrixmultiplikationsbeschleuniger 4660 eine oder mehrere Instanzen eines Zwei-Pfad-Matrixmultiplikationsbeschleunigers 3100 mit einer vierstufigen Pipeline oder eines Vier-Pfad-Matrixmultiplikationsbeschleunigers 3200 mit einer zweistufigen Pipeline. In einer Ausführungsform beinhaltet der Matrixmultiplikationsbeschleuniger 4660 Verarbeitungselemente, die als ein skalierbarer Multiplikationsbeschleuniger für dünn besetzte Matrizen konfiguriert sind. Der Matrixmultiplikationsbeschleuniger 4660 kann verwendet werden, um Matrixoperationen zu beschleunigen, die über XMX-Erweiterungen oder eine andere Rechenbibliothek durchgeführt werden, die die Beschleunigung von Matrixrechenoperationen unterstützt. Zum Beispiel kann der Matrixmultiplikationsbeschleuniger 4660 Tensorberechnungen zum Trainieren oder Inferenz der hierin beschriebenen Neuronalnetzwerkmodelle 4050, 4100 durchführen.
  • Wie veranschaulicht, kann die Rechenvorrichtung 4600 in einer Ausführungsform und zusätzlich zum Grafikprozessor 4604 ferner eine beliebige Anzahl und einen beliebigen Typ von Hardwarekomponenten und/oder Softwarekomponenten enthalten, einschließlich unter anderem einen Anwendungsprozessor 4606, Speicher 4608 und Eingabe/Ausgabe(E/A)-Quellen 4610. Der Anwendungsprozessor 4606 kann mit einer Hardwaregrafikpipeline wechselwirken, um Grafikpipelinefunktionalität gemeinsam zu nutzen. Verarbeitete Daten werden in einem Puffer in der Hardwaregrafikpipeline gespeichert und Zustandsinformationen werden im Speicher 4608 gespeichert. Die resultierenden Daten können an eine Anzeigesteuerung zur Ausgabe über eine Anzeigevorrichtung transferiert werden. Die Anzeigevorrichtung kann von verschiedenen Typen sein, wie eine Kathodenstrahlröhre (CRT), ein Dünnschichttransistor (TFT), eine Flüssigkristallanzeige (LCD), eine Anordnung aus organischen Licht emittierenden Dioden (OLED) usw. und kann ausgelegt sein, einem Benutzer Informationen über eine grafische Benutzerschnittstelle anzuzeigen.
  • Der Anwendungsprozessor 4606 kann einen oder mehrere Prozessoren wie den Prozessor bzw. die Prozessoren 102 von 1 enthalten und kann die Zentralverarbeitungseinheit (CPU) sein, die zumindest teilweise zum Ausführen eines Betriebssystems (OS) 4602 für die Rechenvorrichtung 4600 verwendet wird. Das OS 4602 kann als eine Schnittstelle zwischen Hardware und/oder physischen Ressourcen der Rechenvorrichtung 4600 und einem oder mehreren Benutzern fungieren. Das OS 4602 kann Treiberlogik für verschiedene Hardwarevorrichtungen in der Rechenvorrichtung 4600 beinhalten. Die Treiberlogik kann eine Grafiktreiberlogik 4622 beinhalten, die den Benutzermodus-Grafiktreiber 2326 und/oder den Kernelmodus-Grafiktreiber 2329 aus 23 beinhalten kann. Die Grafiktreiberlogik kann einen Grafikspeichermanager 4621 zum Verwalten eines virtuellen Speicheradressraums für den Grafikprozessor 4604 beinhalten. Der Grafikspeichermanager 4621 kann einen vereinheitlichten virtuellen Adressraum ermöglichen, auf den der Anwendungsprozessor 4606 und der Grafikprozessor 4604 zugreifen können.
  • Es wird erwogen, dass der Grafikprozessor 4604 in einigen Ausführungsformen als ein Teil des Anwendungsprozessors 4606 (wie als ein Teil eines physischen CPU-Pakets) existieren kann, wobei zumindest ein Teil des Speichers 4608 gemeinsam vom Anwendungsprozessor 4606 und vom Grafikprozessor 4604 gemeinsam genutzt werden kann, obwohl zumindest ein Teil des Speichers 4608 für den Grafikprozessor 4604 exklusiv sein kann oder der Grafikprozessor 4604 einen separaten Speicher aufweisen kann. Der Speicher 4608 kann einen vorab zugeteilten Bereich eines Puffers (z. B. Bildspeicher) umfassen; es sollte Fachleuten jedoch klar sein, dass die Ausführungsformen nicht derart eingeschränkt sein können und dass ein beliebiger Speicher, der für die untere Grafikpipeline zugänglich ist, verwendet werden kann. Der Speicher 4608 kann verschiedene Formen von Direktzugriffsspeicher (RAM) (z. B. SDRAM, SRAM usw.) enthalten, die eine Anwendung umfassen, die den Grafikprozessor 4604 verwendet, um eine Desktop- oder 3D-Grafikszene zu rendern. Ein Speichersteuerungshub, wie die Speichersteuerung 1416 von 14 kann auf Daten im Speicher 4608 zugreifen und diese an den Grafikprozessor 4604 zur Verarbeitung durch die Grafikpipeline weiterleiten. Der Speicher 4608 kann anderen Komponenten in der Rechenvorrichtung 4600 verfügbar gemacht werden. Alle Daten (z. B. Eingabegrafikdaten), die von verschiedenen E/A-Quellen 4610 der Rechenvorrichtung 4600 empfangen wurden, können zum Beispiel zeitweilig in eine Warteschlange im Speicher 4608 gereiht werden, bevor sie von dem einen oder den mehreren Prozessor(en) (z. B. dem Anwendungsprozessor 4606) in der Implementierung eines Softwareprogramms oder einer Anwendung bearbeitet werden. Gleichermaßen werden Daten, bei denen ein Softwareprogramm ermittelt, dass sie von der Rechenvorrichtung 4600 an eine Außenentität über eine der Rechensystemschnittstellen gesendet werden oder in ein internes Speicherungselement gespeichert werden sollen, oft temporär in eine Warteschlange im Speicher 4608 gereiht, bevor sie gesendet oder gespeichert werden.
  • Die E/A-Quellen können Vorrichtungen wie Berührungsbildschirme, Berührungsfelder, Touchpads, virtuelle oder normale Tastaturen, virtuelle oder normale Mäuse, Anschlüsse, Verbindungsstücke, Netzwerkvorrichtungen oder Ähnliches enthalten und können über einen Plattformsteuerungshub 1430 angebunden werden, wie er in 14 referenziert ist. Zusätzlich können die E/A-Quellen 4610 eine oder mehrere E/A-Vorrichtungen enthalten, die zum Transferieren von Daten zu und/oder von der Rechenvorrichtung 4600 implementiert sind (z. B. einen Netzwerkadapter); oder für einen großen nichtflüchtigen Speicher innerhalb der Rechenvorrichtung 4600 (z. B. SSD/HDD). Benutzereingabevorrichtungen, einschließlich alphanumerischer und anderer Tasten, können verwendet werden, um Informationen und Befehlsauswahlen an den Grafikprozessor 4604 zu kommunizieren. Eine weitere Art von Benutzereingabevorrichtung ist eine Cursorsteuerung, wie eine Maus, ein Trackball, ein Berührungsbildschirm, ein Touchpad oder Cursor-Richtungstasten, um Richtungsinformationen und Befehlsauswahlen an die GPU zu kommunizieren und eine Cursorbewegung auf der Anzeigevorrichtung zu steuern. Kamera- und Mikrofonanordnungen der Rechenvorrichtung 4600 können eingesetzt werden, um Gesten zu beobachten, Audio und Video aufzuzeichnen und um visuelle und Audio-Befehle zu senden.
  • Die E/A-Quellen 4610 können eine oder mehrere Netzwerkschnittstellen beinhalten. Die Netzwerkschnittstellen können assoziierte Netzwerkverarbeitungslogik beinhalten und/oder mit der Netzwerkprozessor-Kachel 4657 gekoppelt sein. Die eine oder die mehreren Netzwerkschnittstellen können Zugang zu einem LAN, einem Weitverkehrsnetz (WAN), einem innerstädtischen Netzwerk (MAN), einem persönlichen Netzwerk (PAN), Bluetooth, einem Cloudnetzwerk, einem Mobilfunk- oder mobilen Netzwerk (z. B. der 3. Generation (3G), der 4. Generation (4G), der 5. Generation (5G) usw.), einem Intranetz, dem Internet usw. bieten. Die Netzwerkschnittstelle(n) kann bzw. können zum Beispiel eine drahtlose Netzwerkschnittstelle mit einer oder mehreren Antennen enthalten. Die Netzwerkschnittstelle(n) kann bzw. können beispielsweise auch eine verdrahtete Netzwerkschnittstelle enthalten, um mit entfernten Vorrichtungen über ein Netzwerkkabel zu kommunizieren, das zum Beispiel ein Ethernetkabel, ein Koaxialkabel, ein Lichtwellenleiterkabel, ein serielles Kabel oder ein paralleles Kabel sein kann.
  • Die Netzwerkschnittstelle(n) kann bzw. können auch Zugang zu einem LAN bereitstellen, zum Beispiel, indem sie mit IEEE-802.11-Standards konform sind, und/oder die drahtlose Netzwerkschnittstelle kann Zugang zu einem persönlichen Netzwerk bieten, zum Beispiel, indem sie mit Bluetooth-Standards konform sind. Andere drahtlose Netzwerkschnittstellen und/oder Protokolle, einschließlich vorangehender und nachfolgender Versionen der Standards, können ebenfalls unterstützt werden. Über eine Kommunikation über die drahtlosen LAN-Standards hinaus oder statt dieser kann eine bzw. können Netzwerkschnittstelle(n) eine drahtlose Kommunikation beispielsweise unter Verwendung von Zeitmultiplexprotokollen (TDMA-Protokollen), Global-Systems-for-Mobile-Communications(GSM)-Protokollen, Codemultiplexprotokollen (CDMA-Protokollen) und/oder eines beliebigen anderen Typs von drahtlosen Kommunikationsprotokollen bereitstellen.
  • Eingabefilterung und Abstaster-Beschleunigung für zeitlich amortisiertes Supersampling
  • Zeitlich amortisiertes Supersampling wird durch Kombinieren des aktuellen Frames und des vorherigen Ausgabeframes durchgeführt, der mit den aktuellen Bewegungsvektoren verzerrt ist. Wie oben beschrieben ist temporale Kantenglättung (TAA) eine Kantenglättungstechnik, bei der der Renderer die Kamera bei jedem Frame zittern lässt, um unterschiedliche Koordinaten im Bildschirmraum abzutasten. Die TAA-Stufe akkumuliert diese Abtastungen zeitlich, um ein überabgetastetes Bild zu erzeugen. Eine zeitlich amortisierte Supersampling-Stufe kann wie in 40 veranschaulicht sein, wobei zeitlich amortisiertes Supersampling unter Verwendung eines gemischten neuronalen Faltungsnetzwerks mit niedriger Genauigkeit durchgeführt wird.
  • Die zeitliche Jitter-Sequenz (hier auch als Jitter-Muster bezeichnet) beschreibt, wie die Kamera von Frame zu Frame versetzt ist. In der Eingabe in eine Bildverarbeitungspipeline gibt es bestimmte gezackten Kanten, die aufgrund der einzelnen Abtastung pro Pixel während der Rasterisierung generiert werden. Die Erzeugung eines glatten Bildes mit Rasterung würde im Allgemeinen ein N-maliges Rendern erfordern, mit einem Kameraversatz und zunehmendes Erfassen von mehr vom Bild durch Supersampling. Diese Operation ist jedoch aufwendig und kann in der Anwendung unpraktisch sein.
  • In einigen Ausführungsformen stellt eine Einrichtung, ein System oder ein Prozess eine Eingabefilterung und Abstaster-Beschleunigung für zeitlich amortisiertes Supersampling bereit. Durch die Anwendung der Eingabefilterung und der Abtaster-Beschleunigung ist ein System in der Lage, eine Gewichtung anzuwenden, die das Jitter-Muster widerspiegelt, und unterstützt dadurch die Verbesserung der Bildqualität.
  • In einer Supersampling-Abtastoperation gibt es Aufwärtskalieren und Verzerren beim Erzeugen der Eingaben des Netzwerks. In einer solchen Operation ist die Ausgabe des Rasters und der Beleuchtung ein gezacktes rasterisiertes Bild als Ergebnis der eingeschränkten Abtastung, die in Supersampling-Abtastung implementiert ist. Der Kameraversatz, der durch das Jittering erzeugt wird, das für das Supersampling verwendet wird, ist vergleichsweise klein, viel kleiner als die Größe eines Pixels. Die Informationen bezüglich des Jittering (der zeitlichen Jitter-Sequenz), die angewendet werden, könnten angewendet werden, um den Bildprozess zu verbessern, aber diese Informationen gehen im Allgemeinen in der Eingabe verloren. Infolgedessen sieht das Netzwerk nur das gezackte rasterisierte Bild, das als Ausgabe erzeugt wird. Bei einer herkömmlichen Operation kennt das Netzwerk die Jittering- und Abtastinformationen nicht.
  • In einigen Ausführungsformen werden Jitter-Informationen durch Eingabefilterung auf Eingabedaten angewendet. Die Qualität einer Bildausgabe kann verbessert werden, falls bekannt wäre, wie die Abtastungen des Bildes basierend auf der Abtastposition gewichtet werden sollen. Zumindest ein Teil der Abtast-/Jitter-Informationen kann in dem Aufwärtsskalierungsprozess durch die Anwendung eines Eingangsfilters zurückgegeben werden. Basierend auf den empfangenen Eingabedaten soll das Bild von einer ursprünglichen Eingangsauflösung auf eine höhere Zielauflösung aufwärtsskaliert werden. In einem bestimmten Beispiel kann dies Skalieren von einer Eingangsauflösung von 1280 x 720 auf eine Zielauflösung von 2560 x 1440 umfassen. Ausführungsformen sind jedoch nicht auf bestimmte Auflösungswerte oder Aufwärtsskalierungsfaktoren beschränkt. Während des Aufwärtsskalierens ist der Prozess nicht notwendigerweise auf das Vergrößern eines Bildes beschränkt. Stattdessen ist es auch möglich, ein Pixelfilter anzuwenden, das die tatsächliche Position der Abtastungen, die gerastert werden, kennt, und die aufwärtsskalierten Eingabedaten entsprechend zu gewichten. Auf diese Weise kann das Aufwärtsskalieren bewirken, dass wenigstens ein Teil der Abtastinformationen wieder zum Bild hinzugefügt werden. Ein System hat somit Eingabedaten auf eine Weise hochzuwandeln, sodass Kenntnis der Jitterposition in die Eingabe in das Netzwerk aufgenommen wird.
  • In einigen Ausführungsformen wird ein Eingangsfilter (hier auch als ein Pixelfilter bezeichnet) basierend auf den Jitter-Informationen erzeugt, die die Eingabe in das Netzwerk derart codieren, dass die Eingabe von dem wahren Kamera-Jitter und davon abhängt, wo sich die resultierenden Abtastungen befinden. Die Einbindung des Eingangsfilters kann somit eine Beschleunigung bei der Verarbeitung und die Bereitstellung von Supersampling höherer Qualität in einem Netzwerk ermöglichen.
  • Der Typ der Filtertechnologie, die in einem Eingangsfilter verwendet wird, und die Art und Weise, auf die das Filter erzeugt wird, können in Abhängigkeit von der Implementierung und von der Hardwareunterstützung, die verfügbar ist, variieren. Zum Beispiel kann in einigen Implementierungen die Erzeugung eines Eingangsfilters unter anderem die Implementierung eines Gauß-Filters zum Aufwärtsskalieren in einer Verarbeitungspipeline beinhalten. Das Gauß-Filter ist ein Pixelfilter hoher Qualität, das effektiv zur Bildgebung implementiert werden kann. Allerdings ist das Gauß-Filter, obwohl es sich bei dem Betrieb um ein „weiches“ Filter handelt, d. h. ein Filter, das keine scharfe Abgrenzung dahingehend liefert, wie Daten gefiltert werden. In einigen Ausführungsformen kann eine andere Filtertechnologie implementiert werden, um eine weitere Optimierung bereitzustellen. Zum Beispiel kann eine Optimierung in dem Eingangsfilter basierend auf Testen und Experimentieren vorgenommen werden, um eine Filterung zu identifizieren, die schärfer und empfindlicher gegenüber der Position einer Abtastung ist, die beim Supersampling zu verwenden ist.
  • In manchen Ausführungsformen kann eine zusätzliche Optimierung in einer Einrichtung oder einem System hinsichtlich der Verzerrung des Verlaufs unter Verwendung des Bewegungsvektors bei der Verarbeitung bereitgestellt werden. Die Verzerrung des vorherigen Bildes unter Verwendung des Bewegungsvektors liefert ein ähnliches Resampling-Problem wie das Aufwärtsskalieren, während das verwendete Bildfilter sehr unterschiedlich sein kann. Beim Kombinieren der Bewegungsvektoren und des zu verzerrenden Bildes können neue Gewichtungen für jede Abtastung unter Verwendung eines Pixelfilters ausgewertet werden, um das verzerrte Bild zu erhalten. In solch einem Betrieb kann die Textur-Sampling-Hardware auf die gleiche Weise wie bei der Abtastratenerhöhung genutzt werden. Testen kann angewendet werden, um ein verbessertes Filter zur Verzerrung zu identifizieren und auszuwählen, um den Beschleunigungsbetrieb zu unterstützen.
  • 47 ist eine Veranschaulichung einer Eingabefilterung und Abtaster-Beschleunigung für zeitlich amortisiertes Supersampling gemäß einigen Ausführungsformen. 47 veranschaulicht einen Renderer 4700 mit temporaler Kantenglättung (TAA) innerhalb eines Grafiksystems, wie ferner in Bezug auf 40 veranschaulicht und beschrieben, einschließlich Anwendung einer zeitlichen Jitter-Sequenz bei der Erzeugung der Eingabedaten 4720. Der Renderer innerhalb der Rasterisierungs- und Beleuchtungsstufe 4735 in einer Verarbeitungspipeline 4730 kann die Kamera 4705 während des Renderns für jeden Frame einem Jittern unterwerfen 4715, um unterschiedliche Koordinaten im Bildschirmraum 4710 abzutasten. Zeitlich amortisiertes Supersampling wird unter Verwendung eines gemischten neuronalen Faltungsnetzwerks (NN) mit niedriger Genauigkeit 4750 durchgeführt. Eine Verzerrungsoperation 4745 wird unter Verwendung von vom Renderer generierten Geschwindigkeits-Bewegungsvektoren auf den zuvor akkumulierten Frame angewendet, um den zuvor akkumulierten Frame vor der Akkumulation am aktuellen Frame auszurichten. Ein Aufwärtsskalierungsfilter 4740 wird auf das gerenderte Bild angewendet, um das Bild auf die Zielauflösung aufwärtszuskalieren. Die Nachverarbeitungsoperationen 4755 können dann mit der aufwärtsskalierten Zielauflösung durchgeführt werden.
  • In einigen Ausführungsformen werden zeitliche Jitter-Sequenzdaten 4760, die den Jitter 4715 repräsentieren, der auf die Kamera 4705 angewendet wird, bei der Erzeugung eines Pixelfilters 4765 angewendet. Das Pixelfilter 4765 stellt eine Gewichtung für Eingabedaten bereit, um das Jittering und das Abtasten von Bildern in dem System widerzuspiegeln. Die Gewichtung der Eingabedaten kann angewendet werden, wie in 48A-48C veranschaulicht. In manchen Ausführungsformen kann das erzeugte Pixelfilter 4765 bei der Abtastratenerhöhung 4740 empfangener Daten implementiert werden. In manchen Ausführungsformen kann die Erzeugung des Pixelfilters 4765 Prozesse beinhalten, wie in 50 veranschaulicht.
  • In einigen Ausführungsformen wird das Pixelfilter 4765 basierend auf den Jitter-Informationen in der Form der zeitlichen Jitter-Sequenzdaten 4760 erzeugt, wodurch die Eingabe in das Netzwerk derart codiert wird, dass die Eingabe von dem wahren Kamera-Jitter und davon abhängt, wo sich die resultierenden Abtastungen befinden. In einigen Ausführungsformen kann eine Implementierung unter anderem die Implementierung eines Gauß-Filters zum Aufwärtsskalieren in einer Verarbeitungspipeline beinhalten.
  • Komplexe Filter, die mehrere Abtastungen erfordern, sind aufwendig und können daher bei gewissen Implementierungen, wie etwa bei Spieloperationen, für die Eingabefilterung schwierig oder unpraktisch sein. In manchen Ausführungsformen beinhaltet eine Einrichtung, ein System oder ein Prozess ein Abschätzen des Filters, das erforderlich ist, um effizienteres Filtern bereitzustellen. Bei 3D-Computergrafiken beschreibt eine anisotrope Filterung einen Prozess oder eine Einrichtung zum Verbessern der Bildqualität von Texturen auf Oberflächen von Computergrafiken, die in Bezug auf die Kamera unter schrägen Betrachtungswinkeln liegen, wo die Projektion der Textur nicht orthogonal erscheint. Beispielsweise ist ein Bild eine Punktabtastung mit einem zugehörigen Rekonstruktionsfilter, und qualitativ hochwertige Rekonstruktionsfilter weisen eine kreisförmige Grundfläche auf. Die Projektion einer kreisförmigen Grundfläche auf einem Bildschirm ist jedoch eine Ellipse. Ein Texturfilteralgorithmus sollte die projizierte Pixelgrundfläche mit den Texeln, die von der Grundfläche abgedeckt werden, zurückgeben. Eine stark exzentrische Ellipse kann mit mehreren Ellipsen mit niedrigerer Zentralität approximiert werden, wie durch GPU-Hardware unterstützt. Die Approximation bei der Erzeugung eines Filters kann die Kosten und Schwierigkeit des Filters stark reduzieren.
  • In einer bestimmten Implementierung kann ein System oder eine Operation Beschleunigen der Kompensation beinhalten, die ansonsten komplexe Filter erfordern würde, durch Verwendung von Texturabtaster-Hardware beinhalten, die in einem Grafiksystem bereitgestellt wird, um Filterung bereitzustellen. Die Texturabtaster-Hardware kann als Filter Einschränkungen aufweisen, aber diese Filterhardware existiert üblicherweise in einer Grafikinfrastruktur und ist zu einem schnelleren Betrieb als viele andere Arten von Filtern fähig, wodurch die Gesamtleistungsfähigkeit des Systems oder Betriebs verbessert wird. In manchen Ausführungsformen beinhaltet das Filtern Anwenden von bilinearen/trilinearen Approximierern mit mehreren Tiefen.
  • In Bezug auf die Anwendung von Texturabtaster-Hardware zur Beschleunigung des Filterns kann die Effizienz des Hardware-Texturabtasters genutzt werden, um die Approximation eines Filters zu beschleunigen, dessen Auswertung unter Verwendung von direkten Pixelabrufen aufwendig wäre. Der Sampler kann bilineare oder anisotrope Nachschlagevorgänge von den Texturen effizient zwischenspeichern und auswerten, die als „Bausteine“ für ein komplexeres Filter verwendet werden können.
  • In manchen Ausführungsformen beinhaltet die Generierung des Pixelfilters ein Approximieren des Filters, das erforderlich ist, um effizienteres Filtern bereitzustellen. In einigen Ausführungsformen kann das Pixelfilter 4765 Beschleunigen der Kompensation beinhalten, die ansonsten komplexe Filter erfordern würde, und kann durch Verwendung von Texturabtaster-Hardware 4770 implementiert werden, die in dem Grafiksystem bereitgestellt wird, um Filterung bereitzustellen. Die Texturabtaster-Hardware kann als Filter Einschränkungen aufweisen, aber diese Filterhardware existiert üblicherweise in einer Grafikinfrastruktur und ist zu einem schnelleren Betrieb als viele andere Arten von Filtern fähig, wodurch die Gesamtleistungsfähigkeit des Systems oder Betriebs verbessert wird. In manchen Ausführungsformen beinhaltet das Filtern Anwenden von bilinearen/trilinearen Approximierern mit mehreren Tiefen.
  • 48A-48C sind Diagramme zum Veranschaulichen des Abtastens von Pixeln einschließlich Jittering gemäß einer Ausführungsform. Falls Kamera-Jitter bekannt ist, ist die Position der Abtastung beim Verbessern der Bildqualität wichtig. In manchen Ausführungsformen wird der Kamera-Jitter bei der Erzeugung eines Pixelfilters angewendet, wie etwa des in 47 veranschaulichten generierten Pixelfilters 4765. Schärfere Bilder sind gegenüber der Position der Abtastung empfindlicher, die als Ergebnis des Jitters variiert. Dies kann wie in 48A und 48B veranschaulicht sein. Diese vereinfachten Figuren stellen mögliche Beispiele für zweifache Aufwärtsskalierung bereit, wobei ein Pixel auf vier Pixel aufwärtsskaliert wird.
  • Beispielsweise veranschaulicht 48A ein Pixel 4805, das abgetastet wird, mit einer Abtastratenerhöhung, um den veranschaulichten Satz von vier Pixeln 4810 zu erzeugen. Falls sich eine Abtastposition 4815 im Zentrum des Pixels befindet, wie in 48A veranschaulicht, dann wäre die Replikation der Abtastung korrekt, wie in 48A gezeigt, mit gleicher Gewichtung 4820 in jedem der hochgetasteten Pixel. Die Gewichtung jedes Pixels wird durch relative dunkle Schattierung der Schattierung in jedem Pixel in 48A-48C repräsentiert, wobei eine dunklere Schattierung eine größere Gewichtung anzeigt. Zum Beispiel kann eine dunkelste Schattierung (schwarz) eine Gewichtung von 1,0 für ein Pixel darstellen, und eine hellste Schattierung (weiß) kann eine Gewichtung von 0,0 für ein Pixel darstellen, wobei die Gesamtgewichtung gleich 1,0 ist.
  • Falls der angewendete Jitter jedoch zu einer Abtastposition führt, die von der Mitte des Abtastpixels versetzt ist, dann kann die beim Filtern bereitgestellte Gewichtung so modifiziert werden, dass die Gewichtung jedes Pixels zumindest teilweise die Positionierung der Abtastung repräsentiert. Die Gewichtung der hochgetasteten Pixel kann daher ungleich sein, wobei diese relative Gewichtung angewendet werden kann, um die Qualität der Eingabedaten zu verbessern.
  • Beispielsweise veranschaulicht 48B ein Pixel 4825, das abgetastet wird, mit einer Abtastratenerhöhung, um den veranschaulichten Satz von vier Pixeln 4830 zu erzeugen. Falls eine Abtastposition 4835 aufgrund von Jitter versetzt ist, wie zum Beispiel in 48B veranschaulicht, wird die ungleiche Gewichtung 4840 für die hochgetasteten Pixel 4830 angewendet. Wie gezeigt, variiert die Gewichtung basierend darauf, wie nahe die hochgetasteten Pixel zur Abtastposition angeordnet sind.
  • Es wird angemerkt, dass 48A und 48B vereinfachte Darstellungen sind und Gewichtung ohne Berücksichtigung anderer Pixel darstellen. Beim tatsächlichen Betrieb können andere benachbarte Pixel beim Bereitstellen der Gewichtung bei der Erzeugung des Ergebnisses berücksichtigt werden. Beispielsweise veranschaulicht 48C eine Pixelfilterung unter Nutzung benachbarter Pixel 4850, wobei die benachbarten Pixel bei der Ermittlung einer Abtastgewichtung berücksichtigt werden können, die auf jedes der hochgetasteten Pixel anzuwenden ist. In dem veranschaulichten Beispiel werden vier nächste Nachbarpixel in bilinearer Interpolation betrachtet. Ausführungsformen sind jedoch auf dieses Beispiel beschränkt, und andere Pixelfilter können auch beim Festlegen von Gewichtungen verwendet werden. Abtastratenerhöhungs-Filter höherer Ordnung können auch von der Verwendung einer hardwarebeschleunigten Texturabtastung profitieren.
  • In einigen Ausführungsformen beschreibt die in den 48A-48C veranschaulichte Gewichtung ein Pixelfilter, das die Eingabe für das Netzwerk derart codiert, dass die Eingabe zumindest teilweise von dem wahren Kamera-Jitter und davon abhängt, wo sich die resultierenden Abtastungen befinden. Die Einbindung eines solchen Pixelfilters kann angewendet werden, um eine Beschleunigung bei der Verarbeitung und die Bereitstellung von Supersampling höherer Qualität in einem Netzwerk zu unterstützen.
  • 49 ist eine Veranschaulichung eines Prozesses für Supersampling unter Verwendung eines Bildfilters, das zumindest teilweise basierend auf Jittering und Abtasten eines Bildes erzeugt wird, gemäß manchen Ausführungsformen. Wie veranschaulicht, beinhaltet ein Prozess 4900 eine Durchführung von temporaler Kantenglättung, bei der auf jeden Frame Jitter angewandt wird, um unterschiedliche Koordinaten 4905 abzutasten. In manchen Ausführungsformen wird der Jitter gemäß einer zeitlichen Jitter-Sequenz angewendet, die repräsentiert, wie die Kamera mit der Zeit verschoben wird.
  • In manchen Ausführungsformen werden die assoziierten zeitlichen Jitter-Sequenzdaten an einer Einrichtung oder einem System zur Filtererzeugung 4907 empfangen. In manchen Ausführungsformen beinhaltet die Filtererzeugung die Erzeugung eines Eingangsfilters, das zumindest teilweise auf den zeitlichen Jitter-Sequenzdaten basiert, um eine Gewichtung zu codieren, die die Jitter-Sequenz und die resultierende Abtastposition repräsentiert, die bei der Abtastung der Frames bei der Erzeugung der Eingabedaten angewendet wurde. Wie veranschaulicht, wird ein Eingangsfilter mit Gewichtung erzeugt, die zumindest teilweise auf den Abtastpositionen basiert, die durch den angewandten Jitter 4910 veranlasst werden. Die Gewichtung, die bei der Erzeugung des Eingangsfilters eingesetzt wird, kann unter anderem die Gewichtung beinhalten, die in den 48A-48C gezeigt ist. Die Erzeugung des Eingangsfilters kann unter anderem Prozesse beinhalten, wie in 50 veranschaulicht.
  • In manchen Ausführungsformen kann das erzeugte Eingangsfilter in der Verarbeitungspipeline 4915 implementiert sein, wie etwa innerhalb der Abtastratenerhöhung in der Verarbeitungspipeline (z. B. innerhalb der in 47 veranschaulichten Abtastratenerhöhung 4740). Das Eingangsfilter kann jedoch in Abhängigkeit von einer bestimmten Implementierung an anderen Positionen innerhalb der Verarbeitungspipeline implementiert werden. Der Prozess 4900 beinhaltet ferner das Empfangen der Eingabedaten für die Supersampling-Verarbeitung 4920. Die Eingabedaten können Daten mit einer niedrigeren Auflösung sein, die in eine Zielauflösung umgewandelt werden soll. Auf die empfangenen Eingabedaten wird eine Abtastratenerhöhung angewandt, um hochgetastete Daten mit der relevanten Zielauflösung 4925 zu erzeugen. In einigen Ausführungsformen wird ein Eingangsfilter auf die hochgetasteten Daten angewendet, um die Daten bezüglich des Kamera-Jitters und der Abtastposition 4930 zu codieren. Auf diese Weise werden die verarbeiteten Daten die Abtastung widerspiegeln, die bei der Erzeugung der Eingabedaten genutzt wurde.
  • Der Prozess kann dann damit fortfahren, dass die Supersampling-Verarbeitung unter Verwendung der gefilterten Daten 4935 verwendet wird.
  • 50 ist eine Veranschaulichung eines Prozesses zum Erzeugen eines Bildfilters zumindest teilweise basierend auf Jittering und Abtasten eines Bildes gemäß manchen Ausführungsformen. Ein Prozess 5000 beinhaltet eine zeitliche Jitter-Sequenz, die bei der Erzeugung eines Satzes von Eingangsdaten angewendet wurde. Wie unter Bezugnahme auf 47 weiter beschrieben, repräsentiert die zeitliche Jitter-Sequenz, wie eine Kamera im Laufe der Zeit verschoben wird, um die Koordinaten von Abtastungen zu variieren, die in jedem einer Reihe von Frames gesammelt werden.
  • In manchen Ausführungsformen wird die Gewichtung von Pixeln basierend auf der Position jeder Abtastung in den Eingabedaten ermittelt 5010. Das Ermittelte kann zum Beispiel durch die in 48A-48C veranschaulichte Gewichtung repräsentiert sein. Die Gewichtung wird zu Zwecken der Filtererzeugung für Supersampling-Verarbeitung ermittelt.
  • Ein Eingangsfilter kann unter anderem eine Implementierung eines Gauß-Filters oder eines verwandten Filters beinhalten. In einigen Ausführungsformen kann zum Reduzieren der Verarbeitung, die bei der Erzeugung und Operation des Eingangsfilters erforderlich ist, eine Approximation der Filterung erzeugt werden 5015. Beispielsweise kann die Approximation eine Approximation einer elliptischen Texturfilterung beinhalten.
  • In einigen Ausführungsformen umfasst der Prozess Implementieren des Eingangsfilters in der Verarbeitungspipeline 5020. Zum Beispiel kann das Filtern in Verbindung mit der Abtastratenerhöhung von Eingabedaten von einer Eingangsauflösung zu einer Zielauflösung implementiert werden. In einigen Ausführungsformen kann das Beschleunigen der Kompensation beinhalten, die ansonsten komplexe Filter erfordern würde, durch Verwendung von Texturabtaster-Hardware, die in dem Grafiksystem bereitgestellt wird. In manchen Ausführungsformen beinhaltet das Filtern Anwenden von bi-/trilinearen Approximierern mit mehreren Tiefen.
  • Die folgenden Beispiele betreffen bestimmte Ausführungsformen:
  • In Beispiel 1 beinhaltet ein Grafikprozessor einen Satz von Verarbeitungsressourcen, der ausgelegt ist, eine Supersampling-Operation über ein faltendes neuronales Netz durchzuführen, wobei der Satz von Verarbeitungsressourcen eine Schaltungsanordnung beinhaltet, die ausgelegt ist, Eingabedaten für eine Supersampling-Verarbeitung zu empfangen, wobei die Eingabedaten Daten beinhalten, die gemäß einem Jitter-Muster abgetastet werden, das Positionen für Datenabtastwerte variiert; ein Bildfilter auf die empfangenen Eingangsdaten anzuwenden, wobei das Bildfilter Gewichten für Pixel beinhaltet, die zumindest teilweise auf dem Jitter-Muster basieren; die Eingabedaten zu verarbeiten, um hochgetastete Daten zu generieren; und Supersampling-Verarbeitung auf die hochgetastete Daten anzuwenden.
  • In Beispiel 2 ist die Schaltungsanordnung ferner dazu ausgelegt, die Eingabedaten mit einer ersten Auflösung zu empfangen und die empfangenen Eingabedaten auf eine zweite Auflösung hochzutasten, wobei die zweite Auflösung höher als die erste Auflösung ist.
  • In Beispiel 3 ist das Bildfilter ein Filter, das unter Verwendung einer Approximation von Filterung erzeugt wird, die für die Bildverarbeitung erforderlich ist.
  • In Beispiel 4 beinhaltet der Grafikprozessor ferner Texturabtasthardware, wobei das Bildfilter eine Anwendung der Texturabtasthardware beinhaltet.
  • In Beispiel 5 erfolgt die Anwendung der Eingabefilterung bei der Abtastratenerhöhung der Eingangsdaten.
  • In Beispiel 6 basiert das Gewichten für ein Pixel ferner auf einem Abtasten benachbarter Pixel.
  • In Beispiel 7 ist das Bildfilter ein Gauß-Filter.
  • In Beispiel 8 beinhaltet ein Verfahren Empfangen von Eingabedaten für eine Supersampling-Verarbeitung durch einen Grafikprozessor, wobei die Eingabedaten Daten beinhalten, die gemäß einem Jitter-Muster abgetastet werden, das Positionen für Datenabtastwerte variiert; Anwenden eines Bildfilters auf die empfangenen Eingangsdaten, wobei das Bildfilter Gewichten für Pixel beinhaltet, die zumindest teilweise auf dem Jitter-Muster basieren; Verarbeiten der Eingabedaten, um hochgetastete Daten zu generieren; und Anwenden einer Supersampling-Verarbeitung auf die hochgetastete Daten.
  • In Beispiel 9 beinhaltet das Empfangen der Eingabedaten Empfangen der Eingabedaten mit einer ersten Auflösung; und das Generieren der hochgetastete Daten Generieren der hochgetastete Daten mit einer zweiten Auflösung beinhaltet, wobei die zweite Auflösung größer als die erste Auflösung ist.
  • In Beispiel 10 ist das Bildfilter ein Filter, das unter Verwendung einer Approximation von Filterung erzeugt wird, die für die Bildverarbeitung erforderlich ist.
  • In Beispiel 11 beinhaltet das Bildfilter Anwendung von Texturabtaster-Hardware des Grafikprozessors.
  • In Beispiel 12 beinhaltet das Anwenden der Eingabefilterung Anwenden der Filterung bei der Abtastratenerhöhung der Eingabedaten.
  • In Beispiel 13 basiert das Gewichten für ein Pixel ferner auf einem Abtasten benachbarter Pixel.
  • In Beispiel 14 ist das Bildfilter ein Gauß-Filter.
  • In Beispiel 15, ein oder mehrere nicht-transitorische computerlesbare Speicherungsmedien mit darauf gespeicherten ausführbaren Computerprogrammanweisungen, die bewirken, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, dass der eine oder die mehreren Prozessoren Operationen durchführen, enthaltend: Empfangen von Eingabedaten für eine Supersampling-Verarbeitung durch einen Grafikprozessor, wobei die Eingabedaten Daten beinhalten, die gemäß einem Jitter-Muster abgetastet werden, das Positionen für Datenabtastwerte variiert; Anwenden eines Bildfilters auf die empfangenen Eingangsdaten, wobei das Bildfilter Gewichten für Pixel beinhaltet, die zumindest teilweise auf dem Jitter-Muster basieren; Verarbeiten der Eingabedaten, um hochgetastete Daten zu generieren; und Anwenden einer Supersampling-Verarbeitung auf die hochgetastete Daten.
  • In Beispiel 16 beinhaltet das Empfangen der Eingabedaten Empfangen der Eingabedaten mit einer ersten Auflösung; und das Generieren der hochgetastete Daten Generieren der hochgetastete Daten mit einer zweiten Auflösung beinhaltet, wobei die zweite Auflösung größer als die erste Auflösung ist.
  • In Beispiel 17 ist das Bildfilter ein Filter, das unter Verwendung einer Approximation von Filterung erzeugt wird, die für die Bildverarbeitung erforderlich ist.
  • In Beispiel 18 beinhaltet das Bildfilter Anwendung von Texturabtaster-Hardware des Grafikprozessors.
  • In Beispiel 19 beinhaltet das Anwenden der Eingabefilterung Anwenden der Filterung bei der Abtastratenerhöhung der Eingabedaten.
  • In Beispiel 20 basiert das Gewichten für ein Pixel ferner auf einem Abtasten benachbarter Pixel.
  • In Beispiel 21 beinhaltet eine Einrichtung Mittel zum Empfangen von Eingabedaten für eine Supersampling-Verarbeitung durch einen Grafikprozessor, wobei die Eingabedaten Daten beinhalten, die gemäß einem Jitter-Muster abgetastet werden, das Positionen für Datenabtastwerte variiert; Mittel zum Anwenden eines Bildfilters auf die empfangenen Eingangsdaten, wobei das Bildfilter Gewichten für Pixel beinhaltet, die zumindest teilweise auf dem Jitter-Muster basieren; Mittel zum Verarbeiten der Eingabedaten, um hochgetastete Daten zu generieren; und Mittel zum Anwenden einer Supersampling-Verarbeitung auf die hochgetastete Daten.
  • In Beispiel 22 beinhaltet das Mittel zum Empfangen der Eingabedaten Mittel zum Empfangen der Eingabedaten mit einer ersten Auflösung; und das Mittel zum Generieren der hochgetastete Daten beinhaltet Mittel zum Generieren der hochgetastete Daten mit einer zweiten Auflösung, wobei die zweite Auflösung größer als die erste Auflösung ist.
  • In Beispiel 23 ist das Bildfilter ein Filter, das unter Verwendung einer Approximation von Filterung erzeugt wird, die für die Bildverarbeitung erforderlich ist.
  • In Beispiel 24 beinhaltet das Bildfilter Anwendung von Texturabtaster-Hardware des Grafikprozessors.
  • In Beispiel 25 beinhaltet das Mittel zum Anwenden der Eingabefilterung Mittel zum Anwenden der Filterung bei der Abtastratenerhöhung der Eingabedaten.
  • In Beispiel 26 basiert das Gewichten für ein Pixel ferner auf einem Abtasten benachbarter Pixel.
  • Es muss klar sein, dass ein weniger oder mehr ausgestattetes System als das oben beschriebene Beispiel für bestimmte Implementierungen bevorzugt werden kann. Deshalb kann die Konfiguration der hierin beschriebenen Rechenvorrichtungen von Implementierung zu Implementierung abhängig von zahlreichen Faktoren variieren, wie preisbedingte Einschränkungen, Leistungsanforderungen, technologischen Verbesserungen und anderen Umständen. Beispiele enthalten (ohne Einschränkung) eine mobile Vorrichtung, einen Organizer, eine mobile Rechenvorrichtung, ein Smartphone, ein Mobiltelefon, einen Handapparat, einen Einweg-Funkrufempfänger, einen Zweiweg-Funkrufempfänger, eine Nachrichtensendevorrichtung, einen Computer, einen Personalcomputer (PC), einen Desktopcomputer, einen Laptopcomputer, einen Notebookcomputer, einen tragbaren Computer, einen Tabletcomputer, einen Server, ein Serverarray oder eine Serverfarm, einen Webserver, einen Netzwerkserver, einen Internet-Server, eine Arbeitsstation, einen Minicomputer, einen Mainframecomputer, einen Supercomputer, ein Netzwerkgerät, ein Webgerät, ein verteiltes Rechensystem, Mehrprozessorsysteme, prozessorbasierte Systeme, Endverbraucherelektronik, programmierbare Endverbraucherelektronik, Fernseher, Digitalfernseher, eine Set-Top-Box, einen drahtlosen Zugangspunkt, eine Basisstation, eine Teilnehmerstation, ein mobiles Teilnehmerzentrum, eine Funknetzsteuerung, einen Router, einen Hub, ein Gateway, eine Brücke, einen Switch, eine Maschine oder Kombinationen davon.
  • Eine Ausführungsform stellt einen Grafikprozessor bereit, der einen Satz von Verarbeitungsressourcen umfasst, der dazu ausgelegt ist, eine Supersampling-Kantenglättungs-Operation über ein faltendes neuronales Netz mit gemischter Genauigkeit durchzuführen. Der Satz von Verarbeitungsressourcen beinhaltet eine Schaltungsanordnung, die dazu ausgelegt ist, an einem Eingabeblock eines neuronalen Netzmodells einen Satz von Daten zu empfangen, der vorherige Framedaten, aktuelle Framedaten und Geschwindigkeitsdaten beinhaltet. Die vorherigen Framedaten beinhalten einen oder mehrere zuvor erzeugte Ausgabeframes. Die aktuellen Framedaten beinhalten eine Ausgabe einer Raster- und Beleuchtungsstufe einer Renderpipeline. Die Geschwindigkeitsdaten beinhalten Bewegungsvektoren, die von der Renderpipeline erzeugt sind. Die Schaltungsanordnung kann den Satz von Daten vorverarbeiten, um vorverarbeitete Daten zu erzeugen, erste vorverarbeitete Daten an ein Merkmalsextrahierungsnetz des neuronalen Netzmodells zu liefern und zweite verarbeitete Daten an einen Ausgabeblock des neuronalen Netzmodells zu liefern. Die ersten vorverarbeiteten Daten werden mit einer ersten Genauigkeit bereitgestellt, wie etwa einer Zwei-Bit-, Vier-Bit- oder Acht-Bit-Ganzzahlgenauigkeit. Die zweiten vorverarbeiteten Daten werden mit einer zweiten Genauigkeit bereitgestellt, die höher als die erste Genauigkeit ist, wie etwa eine 16-Bit-Gleitkommagenauigkeit.
  • Die Schaltungsanordnung kann die ersten vorverarbeiteten Daten im Merkmalsextrahierungsnetz über eine oder mehrere Codiererstufen und eine oder mehrere Decodiererstufen verarbeiten, Tensordaten vom Merkmalsextrahierungsnetz an den Ausgabeblock ausgeben und einen Ausgabeframe über den Ausgabeblock basierend auf den zweiten vorverarbeiteten Daten aus dem Eingabeblock und den Tensordaten generieren, die von dem Merkmalsextrahierungsnetz ausgegeben wurden. Der erzeugte Ausgabeframe ist ein kantengeglätteter Frame. Das Erzeugen der vorverarbeiteten Daten beinhaltet Verzerren der vorherigen Framedaten basierend auf den Geschwindigkeitsdaten, um verzerrte Verlaufsdaten zu erzeugen, Ausrichten der verzerrten Verlaufsdaten an den aktuellen Framedaten, um ausgerichtete Verlaufsdaten zu erzeugen, und Verschieben der ausgerichteten Verlaufsdaten und der aktuellen Framedaten von einer räumlichen Dimension in eine Kanaldimension. Die Kanaldimension beinhaltet einen Tiefenkanal oder mehrere Merkmalskartenkanäle.
  • In einer Ausführungsform beinhaltet das Erzeugen eines Ausgabeframes über den Ausgabeblock das Erzeugen des Ausgabeframes über eine oder mehrere Faltungsschichten des Ausgabeblocks. In einer Ausführungsform beinhaltet das Erzeugen eines Ausgabeframes über den Ausgabeblock Vorhersagen eines Satzes von Kernelwerten pro Pixel und Vermischungsgewichtungen, Filtern der aktuellen Framedaten über die Kernelwerte pro Pixel und Vermischen der ausgerichteten Verlaufsdaten mit gefilterten aktuellen Framedaten. In einer Ausführungsform ist die Schaltungsanordnung dazu ausgelegt, die Ausgabe der Raster- und Beleuchtungsstufe von einer ersten Auflösung auf eine zweite Auflösung hochzuskalieren, die höher als die erste Auflösung ist, bevor die aktuellen Framedaten dem Eingabeblock des neuronalen Netzmodells bereitgestellt werden. In einer Ausführungsform wird die Ausgabe der Raster- und Beleuchtungsstufe während der Vorverarbeitung aufwärtsskaliert.
  • Eine zusätzliche Ausführungsform stellt ein Verfahren zum Durchführen der Operationen des oben beschriebenen Grafikprozessors bereit. Eine weitere Ausführungsform stellt ein Datenverarbeitungssystem bereit, das den oben beschriebenen Grafikprozessor beinhaltet.
  • Die vorstehende Beschreibung und die vorstehenden Zeichnungen sollen in einem veranschaulichenden Sinn statt in einem einschränkenden Sinn betrachtet werden. Fachleuten ist klar, dass verschiedene Modifikationen und Änderungen an den hierin beschriebenen Ausführungsformen vorgenommen werden können, ohne vom allgemeinen Gedanken und Umfang der Merkmale abzuweichen, die in den beigefügten Ansprüchen dargelegt sind.
  • 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 63276291 [0001]

Claims (24)

  1. Grafikprozessor, umfassend: einen Satz von Verarbeitungsressourcen, der ausgelegt ist, eine Supersampling-Operation über ein faltendes neuronales Netz durchzuführen, wobei der Satz von Verarbeitungsressourcen eine Schaltungsanordnung beinhaltet, die ausgelegt ist: Eingabedaten für eine Supersampling-Verarbeitung zu empfangen, wobei die Eingabedaten Daten beinhalten, die gemäß einem Jitter-Muster abgetastet werden, das Positionen für Datenabtastwerte variiert; ein Bildfilter auf die empfangenen Eingangsdaten anzuwenden, wobei das Bildfilter Gewichten für Pixel beinhaltet, die zumindest teilweise auf dem Jitter-Muster basieren; die Eingabedaten zu verarbeiten, um hochgetastete Daten zu generieren; und Supersampling-Verarbeitung auf die hochgetastete Daten anzuwenden.
  2. Grafikprozessor nach Anspruch 1, wobei die Schaltungsanordnung ferner dazu ausgelegt ist, die Eingabedaten mit einer ersten Auflösung zu empfangen und die empfangenen Eingabedaten auf eine zweite Auflösung hochzutasten, wobei die zweite Auflösung höher als die erste Auflösung ist.
  3. Grafikprozessor nach Anspruch 1 oder 2, wobei das Bildfilter ein Filter ist, das unter Verwendung einer Approximation von Filterung erzeugt wird, die für die Bildverarbeitung erforderlich ist.
  4. Grafikprozessor nach einem der Ansprüche 1 bis 3, ferner umfassend: Texturabtaster-Hardware; wobei das Bildfilter eine Anwendung der Texturabtaster-Hardware beinhaltet.
  5. Grafikprozessor nach einem der Ansprüche 1 bis 4, wobei eine Anwendung der Eingabefilterung bei der Abtastratenerhöhung der Eingabedaten erfolgt.
  6. Grafikprozessor nach einem der Ansprüche 1 bis 5, wobei das Gewichten für ein Pixel ferner auf einem Abtasten benachbarter Pixel basiert.
  7. Grafikprozessor nach einem der Ansprüche 1 bis 6, wobei das Bildfilter ein Gauß-Filter ist.
  8. Verfahren, umfassend: Empfangen von Eingabedaten für eine Supersampling-Verarbeitung durch einen Grafikprozessor, wobei die Eingabedaten Daten beinhalten, die gemäß einem Jitter-Muster abgetastet werden, das Positionen für Datenabtastwerte variiert; Anwenden eines Bildfilters auf die empfangenen Eingangsdaten, wobei das Bildfilter Gewichten für Pixel beinhaltet, die zumindest teilweise auf dem Jitter-Muster basieren; Verarbeiten der Eingabedaten, um hochgetastete Daten zu generieren; und Anwenden einer Supersampling-Verarbeitung auf die hochgetastete Daten.
  9. Verfahren nach Anspruch 8, wobei: das Empfangen der Eingabedaten Empfangen der Eingabedaten mit einer ersten Auflösung beinhaltet; und das Generieren der hochgetastete Daten Generieren der hochgetastete Daten mit einer zweiten Auflösung beinhaltet, wobei die zweite Auflösung größer als die erste Auflösung ist.
  10. Verfahren nach Anspruch 8 oder 9, wobei das Bildfilter ein Filter ist, das unter Verwendung einer Approximation von Filterung erzeugt wird, die für die Bildverarbeitung erforderlich ist.
  11. Verfahren nach einem der Ansprüche 8 bis 10, wobei das Bildfilter Anwendung von Texturabtaster-Hardware des Grafikprozessors beinhaltet.
  12. Verfahren nach einem der Ansprüche 8 bis 11, wobei das Anwenden der Eingabefilterung Anwenden der Filterung bei der Abtastratenerhöhung der Eingabedaten beinhaltet.
  13. Verfahren nach einem der Ansprüche 8 bis 12, wobei das Gewichten für ein Pixel ferner auf einem Abtasten benachbarter Pixel basiert.
  14. Verfahren nach einem der Ansprüche 8 bis 13, wobei das Bildfilter ein Gauß-Filter ist.
  15. Nicht-transitorisches computerlesbares Speicherungsmedium oder mehrere nicht-transitorische computerlesbare Speicherungsmedien mit darauf gespeicherten ausführbaren Computerprogrammanweisungen, die bewirken, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, dass der eine oder die mehreren Prozessoren Operationen durchführen, umfassend: Empfangen von Eingabedaten für eine Supersampling-Verarbeitung durch einen Grafikprozessor, wobei die Eingabedaten Daten beinhalten, die gemäß einem Jitter-Muster abgetastet werden, das Positionen für Datenabtastwerte variiert; Anwenden eines Bildfilters auf die empfangenen Eingangsdaten, wobei das Bildfilter Gewichten für Pixel beinhaltet, die zumindest teilweise auf dem Jitter-Muster basieren; Verarbeiten der Eingabedaten, um hochgetastete Daten zu generieren; und Anwenden einer Supersampling-Verarbeitung auf die hochgetastete Daten.
  16. Nichtflüchtiges computerlesbares Speicherungsmedium oder mehrere nichtflüchtige computerlesbare Speicherungsmedien nach Anspruch 15, wobei: das Empfangen der Eingabedaten Empfangen der Eingabedaten mit einer ersten Auflösung beinhaltet; und das Generieren der hochgetastete Daten Generieren der hochgetastete Daten mit einer zweiten Auflösung beinhaltet, wobei die zweite Auflösung größer als die erste Auflösung ist.
  17. Nichtflüchtiges computerlesbares Speicherungsmedium oder mehrere nichtflüchtige computerlesbare Speicherungsmedien nach Anspruch 15 oder 16, wobei das Bildfilter ein Filter ist, das unter Verwendung einer Approximation von Filterung erzeugt wird, die für die Bildverarbeitung erforderlich ist.
  18. Nichtflüchtiges computerlesbares Speicherungsmedium oder mehrere nichtflüchtige computerlesbare Speicherungsmedien nach einem der Ansprüche 15 bis 17, wobei das Bildfilter Anwendung von Texturabtaster-Hardware des Grafikprozessors beinhaltet.
  19. Nichtflüchtiges computerlesbares Speicherungsmedium oder mehrere nichtflüchtige computerlesbare Speicherungsmedien nach einem der Ansprüche 15 bis 18, wobei das Anwenden der Eingabefilterung Anwenden der Filterung bei der Abtastratenerhöhung der Eingabedaten beinhaltet.
  20. Nichtflüchtiges computerlesbares Speicherungsmedium oder mehrere nichtflüchtige computerlesbare Speicherungsmedien nach einem der Ansprüche 15 bis 19, wobei das Gewichten für ein Pixel ferner auf einem Abtasten benachbarter Pixel basiert.
  21. Einrichtung, umfassend: Mittel zum Empfangen von Eingabedaten für eine Supersampling-Verarbeitung durch einen Grafikprozessor, wobei die Eingabedaten Daten beinhalten, die gemäß einem Jitter-Muster abgetastet werden, das Positionen für Datenabtastwerte variiert; Mittel zum Anwenden eines Bildfilters auf die empfangenen Eingangsdaten, wobei das Bildfilter Gewichten für Pixel beinhaltet, die zumindest teilweise auf dem Jitter-Muster basieren; Mittel zum Verarbeiten der Eingabedaten, um hochgetastete Daten zu generieren; und Mittel zum Anwenden einer Supersampling-Verarbeitung auf die hochgetastete Daten.
  22. Einrichtung nach Anspruch 21, wobei das Bildfilter ein Filter ist, das unter Verwendung einer Approximation von Filterung erzeugt wird, die für die Bildverarbeitung erforderlich ist.
  23. Einrichtung nach Anspruch 21 oder 22, wobei das Bildfilter Anwendung von Texturabtaster-Hardware des Grafikprozessors beinhaltet.
  24. Einrichtung nach einem der Ansprüche 21 bis 23, wobei das Mittel zum Anwenden der Eingabefilterung Mittel zum Anwenden der Filterung bei der Abtastratenerhöhung der Eingabedaten beinhaltet.
DE102022125600.6A 2021-11-05 2022-10-05 Eingabefilterung und abtaster-beschleunigung für supersampling Pending DE102022125600A1 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202163276291P 2021-11-05 2021-11-05
US63/276,291 2021-11-05
US17/952,628 2022-09-26
US17/952,628 US20230143192A1 (en) 2021-11-05 2022-09-26 Input filtering and sampler acceleration for supersampling

Publications (1)

Publication Number Publication Date
DE102022125600A1 true DE102022125600A1 (de) 2023-05-11

Family

ID=86053138

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102022125600.6A Pending DE102022125600A1 (de) 2021-11-05 2022-10-05 Eingabefilterung und abtaster-beschleunigung für supersampling

Country Status (3)

Country Link
US (1) US20230143192A1 (de)
CN (1) CN116091680A (de)
DE (1) DE102022125600A1 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2602686B (en) * 2021-06-25 2022-12-28 Imagination Tech Ltd Efficient convolution operations
CN116681575B (zh) * 2023-07-27 2023-12-19 南京砺算科技有限公司 图形处理单元、图形渲染方法、存储介质、终端设备

Also Published As

Publication number Publication date
CN116091680A (zh) 2023-05-09
US20230143192A1 (en) 2023-05-11

Similar Documents

Publication Publication Date Title
DE112020000846T5 (de) Architektur für Block-Sparse-Operationen an einem systolischen Array
DE112020001258T5 (de) Grafikprozessoren und Grafikverarbeitungseinheiten mit Skalarproduktakkumulationsanweisungen für ein Hybrid-Gleitkommaformat
DE102020130078A1 (de) Systolische arithmetik an spärlichen daten
DE102018133555A1 (de) Berechnungsoptimierungsmechanismus für tiefe neuronale Netze
DE102018110380A1 (de) Tool zum Ermöglichen der Effizienz beim Maschinenlernen
DE102018110687A1 (de) Dynamisches Genauigkeitsmanagement für Deep-Learning-Ganzzahlprimitive
DE102020129251A1 (de) Adaptives verformbares kernvorhersagenetzwerk zum bildentrauschen
DE102018110371A1 (de) Intelligente speicherhandhabung und datenmanagement für maschinenlernnetzwerke
DE102020129969A1 (de) Verbesserungen der verarbeitung und des caching von graphikverarbeitungseinheiten
US20230146259A1 (en) Sampling across multiple views in supersampling operation
DE112020000464T5 (de) Mehrfachkachel-grafikprozessor-rendering
DE112020000854T5 (de) Thread-gruppen-planung für die grafikverarbeitung
US20230066626A1 (en) Temporally amortized supersampling using a mixed precision convolutional neural network
DE102022125600A1 (de) Eingabefilterung und abtaster-beschleunigung für supersampling
DE112020000848T5 (de) Skalarkernintegration
DE102018110719A1 (de) Hardwareimplementierte Punkt-zu-Punkt-Kommunikationsprimitive zum Maschinenlernen
DE102020129409A1 (de) Dynamisches unterteilen von aktivierungen und kernels zum verbessern von speichereffizienz
EP4138028A1 (de) Rauschunterdrückung und rendering auf der grundlage von stichprobenverteilungen
DE102022119733A1 (de) Sammeln von nutzdaten aus beliebigen registern für sende-nachrichten in einer grafikumgebung
DE102022130536A1 (de) Sich selbst abstimmende thread-verteilungsrichtlinie
US20240119558A1 (en) Temporally amortized supersampling using a kernel splatting network
DE102021116364A1 (de) Vorrichtung und verfahren für strahlverfolgungs-detaillierungsgradübergänge von hoher qualität
DE102020130081A1 (de) Erweiterte prozessorfunktionen für berechnungen
DE112020000902T5 (de) Datenvorabruf für die grafikdatenverarbeitung
US20230146390A1 (en) Trainable visual quality metrics for measuring rendering quality in a graphics environment