DE102020132272A1 - Verfahren und vorrichtung zum codieren basierend auf schattierungsraten - Google Patents

Verfahren und vorrichtung zum codieren basierend auf schattierungsraten Download PDF

Info

Publication number
DE102020132272A1
DE102020132272A1 DE102020132272.0A DE102020132272A DE102020132272A1 DE 102020132272 A1 DE102020132272 A1 DE 102020132272A1 DE 102020132272 A DE102020132272 A DE 102020132272A DE 102020132272 A1 DE102020132272 A1 DE 102020132272A1
Authority
DE
Germany
Prior art keywords
graphics
memory
processor
data
processing
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
DE102020132272.0A
Other languages
English (en)
Inventor
Yejun Guo
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 DE102020132272A1 publication Critical patent/DE102020132272A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/001Model-based coding, e.g. wire frame
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/363Graphics controllers
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/39Control of the bit-mapped memory
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/39Control of the bit-mapped memory
    • G09G5/393Arrangements for updating the contents of the bit-mapped memory
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/39Control of the bit-mapped memory
    • G09G5/395Arrangements specially adapted for transferring the contents of the bit-mapped memory to the screen
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2350/00Solving problems of bandwidth in display systems
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/08Power processing, i.e. workload management for processors involved in display operations, such as CPUs or GPUs
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/12Frame memory handling
    • G09G2360/125Frame memory handling using unified memory architecture [UMA]

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

Ausführungsformen betreffen im Allgemeinen Verfahren und Vorrichtungen zum Codieren basierend auf Schattierungsraten. Eine Ausführungsform eines Rechensystems umfasst: einen Speicher; eine Grafikverarbeitungseinheit (GPU), die mit dem Speicher gekoppelt ist, wobei die GPU ausgelegt ist, um eine Szene einer Grafikanwendung in einen Farbspeicher innerhalb eines Bildspeichers des Speichers zu rendern; und einen Codierer, der mit dem Speicher gekoppelt ist, wobei der Codierer ausgelegt ist, um den Inhalt des Farbspeichers basierend auf mehreren Schattierungsraten, die jeweils einem Pixel in dem Farbspeicher entsprechen, in einen Videobitstrom zu codieren.

Description

  • GEBIET
  • Ausführungsformen betreffen im Allgemeinen eine Datenverarbeitung und insbesondere eine Codierung für eine Grafikanwendung.
  • ALLGEMEINER STAND DER TECHNIK
  • Eine derzeitige parallele Grafikdatenverarbeitung umfasst Systeme und Verfahren, die entwickelt wurden, um spezifische Operationen an Grafikdaten durchzuführen, wie etwa eine lineare Interpolation, eine Tesselation, eine Rasterisierung, eine Texturabbildung, ein Tiefentesten usw. Herkömmlicherweise verwendeten Grafikprozessoren Recheneinheiten mit Festfunktion, um Grafikdaten zu verarbeiten. Erst kürzlich wurden jedoch Abschnitte von Grafikprozessoren programmierbar gemacht, was es diesen Prozessoren ermöglicht, eine größere Vielfalt von Operationen zur Verarbeitung von Vertex- und Fragmentdaten zu unterstützen.
  • Um die Leistung weiter zu erhöhen, implementieren Grafikprozessoren in der Regel Verarbeitungstechniken, wie etwa eine Pipeline-Verarbeitung, welche versuchen, so viele Grafikdaten wie möglich in den unterschiedlichen Teilen der Grafik-Pipeline parallel zu verarbeiten. Parallele Grafikprozessoren, die eine Architektur mit Einzelanweisung und mehreren Threads (SIMT für Single Instruction, Multiple Thread) aufweisen, sind ausgelegt, um den Parallelverarbeitungsbetrag in der Grafik-Pipeline zu maximieren. In einer SIMT-Architektur versuchen Gruppen von parallelen Threads, Programmanweisungen so oft wie möglich synchron auszuführen, um die Verarbeitungseffizienz zu erhöhen. Für einen allgemeinen Überblick über Software und Hardware für SIMT-Architekturen siehe Shane Cook, CUDA Programming Kapitel 3, Seite 37-51 (2013).
  • Figurenliste
  • Für ein detaillierteres Verständnis der vorangehend erwähnten Merkmale der vorliegenden Ausführungsformen wird eine ausführlichere Beschreibung der Ausführungsformen, die vorangehend kurz zusammengefasst wurden, unter Bezugnahme auf Ausführungsformen gegeben, von denen einige in den beigefügten Zeichnungen veranschaulicht sind. Man beachte jedoch, dass die beigefügten Zeichnungen nur typische Ausführungsformen darstellen und daher nicht auszulegen sind, um ihren Umfang zu begrenzen.
    • 1 ist ein Blockdiagramm, das ein Computersystem darstellt, das konfiguriert ist, um einen oder mehrere Aspekte der hierin beschriebenen Ausführungsformen zu implementieren;
    • 2A-2D stellen parallele Prozessorkomponenten gemäß einer Ausführungsform dar;
    • 3A-3C sind Blockdiagramme von Grafik-Multiprozessoren und auf Multiprozessor basierenden GPUs gemäß Ausführungsformen;
    • 4A-4F stellen eine beispielhafte Architektur dar, in welcher mehrere GPUs mit mehreren Mehrkernprozessoren kommunikativ gekoppelt sind;
    • 5 stellt eine Grafikverarbeitungs-Pipeline gemäß einer Ausführungsform dar;
    • 6 stellt einen Maschinenlern-Software-Stack gemäß einer Ausführungsform dar;
    • 7 stellt einen Allzweck-Grafikprozessor gemäß einer Ausführungsform dar;
    • 8 stellt ein Multi-GPU-Rechensystem gemäß einer Ausführungsform dar;
    • 9A-9B stellen Schichten beispielhafter tiefer neuronaler Netze dar;
    • 10 stellt ein beispielhaftes rekurrentes neuronales Netz dar;
    • 11 stellt ein Training und eine Bereitstellung eines tiefen neuronalen Netzes dar;
    • 12 ist ein Blockdiagramm, das ein verteiltes Lernen darstellt;
    • 13 stellt ein beispielhaftes Inferenzsystem auf einem Chip (SOC) dar, das geeignet ist, um eine Inferenz unter Verwendung eines trainierten Modells durchzuführen;
    • 14 ist ein Blockdiagramm eines Verarbeitungssystems gemäß einer Ausführungsform;
    • 15A-15C stellen Rechensysteme und Grafikprozessoren dar, die durch die hierin beschriebenen Ausführungsformen bereitgestellt werden;
    • 16A-16C stellen Blockdiagramme zusätzlicher Grafikprozessoren und Rechenbeschleuniger-Architekturen dar, die durch hierin beschriebene Ausführungsformen bereitgestellt werden;
    • 17 ist ein Blockdiagramm einer Grafikverarbeitungsmaschine eines Grafikprozessors gemäß einigen Ausführungsformen;
    • 18A-18B stellen eine Thread-Ausführungslogik dar, die einen Array von Verarbeitungselementen aufweist, die in einem Grafikprozessorkern gemäß hierin beschriebenen Ausführungsformen eingesetzt werden;
    • 19 stellt eine zusätzliche Ausführungseinheit gemäß einer Ausführungsform dar;
    • 20 ist ein Blockdiagramm, das Grafikprozessoranweisungsformate gemäß einigen Ausführungsformen darstellt;
    • 21 ist ein Blockdiagramm eines Grafikprozessors gemäß einer anderen Ausführungsform;
    • 22A-22B stellen ein Grafikprozessorbefehlsformat und eine Befehlsabfolge gemäß einigen Ausführungsformen dar;
    • 23 stellt eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem gemäß einigen Ausführungsformen dar;
    • 24A ist ein Blockdiagramm, das ein IP-Kernentwicklungssystem gemäß einer Ausführungsform darstellt;
    • 24B stellt eine Querschnitt-Seitenansicht einer Integrierte-Schaltung-Package-Anordnung gemäß einigen hierin beschriebenen Ausführungsformen dar;
    • 24C stellt eine Package-Anordnung dar, die mehrere Einheiten aus Hardwarelogik-Chiplets aufweist, welche mit einem Substrat (z. B. einem Basis-Die) verbunden sind;
    • 24D stellt eine Package-Anordnung, die austauschbare Chiplets aufweist, gemäß einer Ausführungsform dar;
    • 25 ist ein Blockdiagramm, das eine beispielhafte integrierte SoC-Schaltung gemäß einer Ausführungsform darstellt;
    • 26A-26B sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung innerhalb eines SoC gemäß hierin beschriebenen Ausführungsformen darstellen;
    • 27A stellt mehrere variierte Schattierungsraten für einen Frame gemäß einer Ausführungsform dar;
    • 27B ist ein Blockdiagramm eines Cloud-Rendering-Systems gemäß einer Ausführungsform;
    • 27C ist ein Blockdiagramm eines Cloud-Rendering-Systems gemäß einer Ausführungsform; und
    • 28 stellt ein Verfahren zum Codieren basierend auf Schattierungsraten gemäß einer Ausführungsform dar.
  • AUSFÜHRLICHE BESCHREIBUNG
  • In einigen Ausführungsformen ist die Grafikverarbeitungseinheit (GPU für Graphics Processing Unit) mit Host-/Prozessorkernen kommunikativ gekoppelt, um Grafikoperationen, Maschinenlemoperationen, Musteranalyseoperationen und verschiedene Funktionen einer Mehrzweck-GPU (GPGPU für General-Purpose GPU) zu beschleunigen. Die GPU kann mit dem Host-Prozessor bzw. den Host-Kernen über einen Bus oder eine andere Verbindung (z. B. eine Hochgeschwindigkeitsverbindung wie etwa PCIe oder NVLink) kommunikativ gekoppelt sein. In anderen Ausführungsformen kann die GPU auf demselben Package oder Chip wie die Kerne integriert und mit den Kernen über einen internen Prozessorbus bzw. eine interne Prozessorverbindung (z. B. in dem Package oder Chip) kommunikativ gekoppelt sein. Unabhängig davon, wie die GPU verbunden ist, können die Prozessorkerne der GPU Arbeit in Form von Abfolgen von Befehlen/Anweisungen zuweisen, die in einem Arbeitsdeskriptor enthalten sind. Die GPU verwendet daraufhin eine dedizierte Schaltungsanordnung/Logik, um diese Befehle/Anweisungen effizient zu verarbeiten.
  • In der folgenden Beschreibung werden für ein tiefgreifenderes Verständnis zahlreiche spezifische Einzelheiten dargelegt. Es ist jedoch für Fachleute auf dem Gebiet offensichtlich, dass die hierin beschriebenen Ausführungsformen ohne eine oder mehrere dieser spezifischen Einzelheiten ausgeführt werden können. An anderer Stelle wurden allgemein bekannte Merkmale nicht beschrieben, um ein Verschleiern der Einzelheiten der vorliegenden Ausführungsformen zu vermeiden.
  • Systemüberblick
  • 1 ist ein Blockdiagramm, das ein Computersystem 100 darstellt, das konfiguriert ist, um einen oder mehrere Aspekte der hierin beschriebenen Ausführungsformen zu implementieren. Das Rechensystem 100 umfasst ein Verarbeitungsuntersystem 101, das einen oder mehrere Prozessoren 102 und einen Systemspeicher 104 aufweist, die über einen Verbindungsweg kommunizieren, welcher einen Speicherhub 105 umfassen kann. Der Speicherhub 105 kann eine separate Komponente innerhalb einer Chipsatzkomponente oder innerhalb des einen oder der mehreren Prozessoren 102 integriert sein. Der Speicherhub 105 ist mit einem I/O-Untersystem 111 über eine Kommunikationsverbindung 106 gekoppelt. Das I/O-Untersystem 111 umfasst einen I/O-Hub 107, der es dem Rechensystem 100 ermöglicht, eine Eingabe von einer oder mehreren Eingabevorrichtungen 108 zu empfangen. Zudem kann der I/O-Hub 107 es einer Anzeigesteuerung ermöglichen, die in dem einen oder den mehreren Prozessoren 102 enthalten sein kann, um Ausgaben an eine oder mehrere Anzeigevorrichtungen 110A bereitzustellen. In einer Ausführungsform können die eine oder mehreren Anzeigevorrichtungen 110A, die mit dem I/O-Hub 107 gekoppelt sind, eine lokale, interne oder eingebettete Anzeigevorrichtung umfassen.
  • In einer Ausführungsform umfasst das Verarbeitungsuntersystem 101 einen oder mehrere parallele Prozessoren 112, die mit dem Speicherhub 105 über einen Bus oder eine andere Kommunikationsverbindung 113 gekoppelt sind. Die Kommunikationsverbindung 113 kann eine beliebige/ein beliebiges von vielen auf Standard basierenden Kommunikationsverbindungstechnologien oder -protokollen sein, wie etwa unter anderem PCI Express, oder sie kann eine herstellerspezifische Kommunikationsschnittstelle oder ein herstellerspezifischer Kommunikations-Fabric sein. In einer Ausführungsform bilden der eine oder die mehreren parallelen Prozessoren 112 ein rechnerisch fokussiertes Parallel- oder Vektorverarbeitungssystem, das eine Vielzahl von Verarbeitungskernen und/oder Verarbeitungs-Clustern, wie etwa einen Prozessor mit vielen integrierten Kernen (MIC für Many Integrated Core), umfassen kann. In einer Ausführungsform bilden der eine oder die mehreren parallelen Prozessoren 112 ein Grafikverarbeitungsuntersystem, das Pixel an eine der einen oder mehreren Anzeigevorrichtungen 110A, die über den I/O-Hub 107 gekoppelt sind, ausgegeben kann. Der eine oder die mehreren parallelen Prozessoren 112 können auch eine Anzeigesteuerung und eine Anzeigeschnittstelle (nicht gezeigt) umfassen, um eine direkte Verbindung mit einer oder mehreren Anzeigevorrichtungen 110B zu ermöglichen.
  • Innerhalb des I/O-Untersystems 111 kann eine Systemspeichereinheit 114 mit dem I/O-Hub 107 verbunden sein, um einen Speichermechanismus für das Rechensystem 100 bereitzustellen. Ein I/O-Switch 116 kann verwendet werden, um einen Schnittstellenmechanismus bereitzustellen, um Verbindungen zwischen dem I/O-Hub 107 und anderen Komponenten, wie etwa einem Netzwerkadapter 118 und/oder einem Drahtlosnetzwerkadapter 119, die in der Plattform integriert sein können, und verschiedenen anderen Vorrichtungen, die über eine oder mehrere Add-In-Vorrichtungen 120 hinzugefügt werden können, zu ermöglichen. Der Netzwerkadapter 118 kann ein Ethernet-Adapter oder ein anderer drahtgebundener Netzwerkadapter sein. Der Drahtlosnetzwerkadapter 119 kann ein oder mehrere Elemente von WLAN, Bluetooth, Nahfeldkommunikation (NFC für Near Field Communication) oder eine andere Netzwerkvorrichtung umfassen, die ein oder mehrere Drahtlosfunkvorrichtungen aufweisen.
  • Das Rechensystem 100 kann andere Komponenten umfassen, die nicht explizit gezeigt sind, einschließlich USB- oder andere Anschlussverbindungen, optische Speicherlaufwerke, Videoaufnahmevorrichtungen und dergleichen, die auch über den I/O-Hub 107 verbunden sein können. Kommunikationspfade, welche die verschiedenen Komponenten in 1 verbinden, können unter Verwendung geeigneter Protokolle, wie etwa auf PCI (für Peripheral Component Interconnect) basierenden Protokollen (z. B. PCI-Express), oder eines beliebigen anderen Buses oder beliebiger anderer Punkt-zu-Punkt-Kommunikationsschnittstellen und/oder Protokoll(e), wie etwa der NV-Link-Hochgeschwindigkeitsverbindung, oder im Stand der Technik bekannter Verbindungsprotokolle implementiert werden.
  • In einer Ausführungsform integrieren der eine oder die mehreren parallelen Prozessoren 112 eine Schaltungsanordnung, die für eine Grafik- und Videoverarbeitung optimiert ist, zum Beispiel eine Videoausgabe-Schaltungsanordnung, und sie bilden eine Grafikverarbeitungseinheit (GPU für Graphics Processing Unit). In einer anderen Ausführungsform integrieren der eine oder die mehreren parallelen Prozessoren 112 eine Schaltungsanordnung, die für eine Mehrzweck-Verarbeitung optimiert ist, während sie die zugrunde liegende Rechenarchitektur wahrt, die hierin ausführlich beschrieben wird. In noch einer anderen Ausführungsform können die Komponenten des Rechensystems 100 mit einem oder mehreren anderen Systemelementen auf einer einzigen integrierten Schaltung integriert sein. Zum Beispiel können der eine oder die mehreren parallelen Prozessoren 112, der Speicherhub 105, der Prozessor (die Prozessoren) 102 und der I/O-Hub 107 in einer integrierten Schaltung eines Systems auf einem Chip (SoC für System On Chip) integriert sein. Alternativ können die Komponenten des Rechensystems 100 in einem Einzel-Package integriert sein, um eine Konfiguration eines Systems in einem Package (SIP für System in Package) zu bilden. In einer Ausführungsform kann mindestens ein Abschnitt der Komponenten des Rechensystems 100 in einem Mehrchip-Modul (MCM für Multi-Chip Module) integriert sein, welches mit anderen Mehrchip-Modulen in einem modularen Rechensystem verbunden sein kann.
  • Es wird darauf hingewiesen, dass das hierin gezeigte Rechensystem 100 veranschaulichend ist und dass Abwandlungen und Modifizierungen möglich sind. Die Verbindungsstruktur, einschließlich der Anzahl und Anordnung von Brücken, der Anzahl von Prozessoren 102 und der Anzahl von parallelen Prozessoren 112, kann beliebig modifiziert werden. Beispielsweise ist der Systemspeicher 104 in einigen Ausführungsformen mit dem Prozessor 102 (den Prozessoren) direkt, anstatt über eine Brücke, verbunden, während andere Vorrichtungen mit dem Systemspeicher 104 über den Speicherhub 105 und den Prozessor 102 (die Prozessoren) kommunizieren. In anderen alternativen Netzstrukturen ist der parallele Prozessor 112 (sind die parallelen Prozessoren) mit dem I/O-Hub 107 oder direkt mit einem des einen oder der mehreren Prozessoren 102, anstatt mit dem Speicherhub 105, verbunden. In anderen Ausführungsformen können der I/O-Hub 107 und der Speicherhub 105 in einem einzigen Chip integriert sein. Einige Ausführungsformen können zwei oder mehr Sätze Prozessoren 102 umfassen, die über mehrere Sockel angeschlossen sind, welche mit zwei oder mehreren Instanzen des parallelen Prozessors 112 (der parallelen Prozessoren) koppeln können.
  • Einige der hierin gezeigten bestimmten Komponenten sind optional und könnten nicht in allen Implementierungen des Rechensystems 100 enthalten sein. Zum Beispiel kann eine beliebige Zahl von Add-In-Karten oder Peripheriegeräten unterstützt werden oder einige Komponenten können weggelassen werden. Darüber hinaus können manche Architekturen eine andere Terminologie für Komponenten benutzen, die den in 1 dargestellten ähneln. Zum Beispiel kann der Speicherhub 105 in einigen Architekturen als Northbridge bezeichnet werden, während der I/O-Hub 107 als Southbridge bezeichnet werden kann.
  • 2A stellt einen parallelen Prozessor 200 gemäß einer Ausführungsform dar. Die verschiedenen Komponenten des parallelen Prozessors 200 können unter Verwendung einer oder mehrerer Vorrichtungen einer integrierten Schaltung, wie etwa programmierbarer Prozessoren, anwendungsspezifischer integrierter Schaltungen (ASICs für Application Specific Integrated Circuits) oder feldprogrammierbarer Gate-Arrays (FPGA für Field Programmable Gate Arrays) implementiert sein. Der dargestellte parallele Prozessor 200 ist eine Variante des einen oder der mehreren parallelen Prozessoren 112, die in 1 gezeigt sind, gemäß einer Ausführungsform.
  • In einer Ausführungsform weist der parallele Prozessor 200 eine Parallelverarbeitungseinheit 202 auf. Die Parallelverarbeitungseinheit umfasst eine I/O-Einheit 204, die eine Kommunikation mit anderen Vorrichtungen, einschließlich anderen Instanzen der Parallelverarbeitungseinheit 202, ermöglicht. Die I/O-Einheit 204 kann direkt mit anderen Vorrichtungen verbunden sein. In einer Ausführungsform ist die I/O-Einheit 204 mit anderen Vorrichtungen durch die Verwendung eines Hubs oder einer Switch-Schnittstelle, wie etwa eines Speicherhubs 105, verbunden. Die Verbindungen zwischen dem Speicherhub 105 und der I/O-Einheit 204 bilden eine Kommunikationsverbindung 113. Innerhalb der Parallelverarbeitungseinheit 202 ist die I/O-Einheit 204 mit einer Host-Schnittstelle 206 und einer Speicher-Kreuzschiene 216 verbunden, wobei die Host-Schnittstelle 206 Befehle empfängt, die darauf ausgerichtet sind, Verarbeitungsvorgänge durchzuführen, und die Speicher-Kreuzschiene 216 Befehle empfängt, die darauf ausgerichtet sind, Speichervorgänge durchzuführen.
  • Wenn die Host-Schnittstelle 206 einen Befehlsspeicher über die I/O-Einheit 204 empfängt, kann die Host-Schnittstelle 206 Operationen an ein Frontend 208 leiten, um diese Befehle durchzuführen. In einer Ausführungsform ist das Frontend 208 mit einer Planungseinrichtung 210 gekoppelt, welche konfiguriert ist, um Befehle oder andere Arbeitselemente auf einen Verarbeitungs-Cluster-Array 212 zu verteilen. In einer Ausführungsform stellt die Planungseinrichtung 210 sicher, dass der Verarbeitungs-Cluster-Array 212 ordnungsgemäß konfiguriert ist und sich in einem gültigen Zustand befindet, bevor Aufgaben auf die Verarbeitungs-Cluster des Verarbeitungs-Cluster-Arrays 212 verteilt werden. In einer Ausführungsform ist die Planungseinrichtung 210 über eine Firmware-Logik implementiert, die eine Mikrosteuerung ausführt. Die durch die Mikrosteuerung implementierte Planungseinrichtung 210 ist konfigurierbar, um komplexe Planungs- und Arbeitsverteilungsoperationen mit grober und feiner Granularität durchzuführen, wodurch eine schnelle Präemption und Kontextumschaltung von Threads ermöglicht wird, die auf dem Verarbeitungs-Array 212 ausgeführt werden. In einer Ausführungsform kann die Host-Software Arbeitslasten zur Einplanung auf dem Verarbeitungs-Array 212 über eine von mehreren Grafikverarbeitungs-Doorbells bestätigen. Die Arbeitslasten können dann durch die Logik der Planungseinrichtung 210 innerhalb der Planungseinrichtung-Mikrosteuerung automatisch über den Verarbeitungs-Array 212 verteilt werden.
  • Der Verarbeitungs-Cluster-Array 212 kann bis zu „N“ Verarbeitungs-Cluster umfassen (z. B. Cluster 214A, Cluster 214B bis Cluster 214N). Jedes Cluster 214A-214N des Verarbeitungs-Cluster-Arrays 212 kann eine Vielzahl von gleichzeitigen Threads ausführen. Die Planungseinrichtung 210 kann den Clustern 214A-214N des Verarbeitungs-Cluster-Arrays 212 unter Verwendung verschiedener Planungs- und/oder Arbeitsverteilungsalgorithmen, die in Abhängigkeit von der für jede Art von Programm oder Rechenvorgang entstehende Arbeitslast variieren können, Arbeit zuweisen. Die Planung kann durch die Planungseinrichtung 210 dynamisch erfolgen oder sie kann durch eine Übersetzerlogik während einer Übersetzung einer zur Ausführung durch den Verarbeitungs-Cluster-Array 212 konfigurierten Programmlogik unterstützt werden. In einer Ausführungsform können unterschiedliche Cluster 214A-214N des Verarbeitungs-Cluster-Arrays 212 zur Verarbeitung unterschiedlicher Arten von Programmen oder zur Durchführung unterschiedlicher Arten von Rechenvorgängen zugewiesen werden.
  • Der Verarbeitungs-Cluster-Array 212 kann konfiguriert sein, um verschiedene Arten von parallelen Verarbeitungsvorgängen durchzuführen. In einer Ausführungsform ist der Verarbeitungs-Cluster-Array 212 konfiguriert, um parallele Allzweck-Rechenoperationen durchzuführen. Zum Beispiel kann der Verarbeitungs-Cluster-Array 212 eine Logik aufweisen, um Verarbeitungsaufgaben, einschließlich eines Filterns von Video- und/oder Audiodaten, eines Durchführens von Modellierungsoperationen, einschließlich physikalischer Operationen, und Durchführens von Datentransformationen, auszuführen.
  • In einer Ausführungsform ist der Verarbeitungs-Cluster-Array 212 konfiguriert, um parallele Grafikverarbeitungsoperationen durchzuführen. In Ausführungsformen, in denen der parallele Prozessor 200 konfiguriert ist, um Grafikverarbeitungsoperationen durchzuführen, kann der Verarbeitungs-Cluster-Array 212 eine zusätzliche Logik umfassen, um die Ausführung derartiger Grafikverarbeitungsoperationen zu unterstützen, einschließlich unter anderem eine Texturabtastlogik zur Durchführung von Texturoperationen, sowie eine Tesselationslogik und andere Vertex-Verarbeitungslogiken. Zudem kann der Verarbeitungs-Cluster-Array 212 konfiguriert sein, um eine Grafikverarbeitung betreffende Shader-Programme auszuführen, wie etwa unter anderem Vertex-Shader-Programme, Tesselations-Shader-Programme, Geometrie-Shader-Programme und Pixel-Shader-Programme. Die Parallelverarbeitungseinheit 202 kann Daten von einem Systemspeicher über die I/O-Einheit 204 zur Verarbeitung übertragen. Während der Verarbeitung können die übertragenen Daten in einem Speicher auf einem Chip (z. B. einem Parallelprozessorspeicher 222) gespeichert werden und anschließend auf den Systemspeicher zurückgeschrieben werden.
  • In einer Ausführungsform kann, wenn die Parallelverarbeitungseinheit 202 verwendet wird, um eine Grafikverarbeitung durchzuführen, die Planungseinrichtung 210 konfiguriert sein, um die Verarbeitungsarbeitslast in ungefähr gleichgroße Aufgaben zu teilen, um eine bessere Verteilung der Grafikverarbeitungsoperationen auf mehrere Cluster 214A-214N des Verarbeitungs-Cluster-Arrays 212 zu ermöglichen. In einigen Ausführungsformen können die Abschnitte des Verarbeitungs-Cluster-Arrays 212 konfiguriert sein, um unterschiedliche Arten einer Verarbeitung durchzuführen. Zum Beispiel kann ein erster Abschnitt konfiguriert sein, um eine Vertex-Schattierung und Strukturerzeugung durchzuführen, ein zweiter Abschnitt kann konfiguriert sein, um eine Tesselation und Geometrieschattierung durchzuführen und ein dritter Abschnitt kann konfiguriert sein, um eine Pixelschattierung oder andere Bildschirmraum-Operationen durchzuführen, um ein gerendertes Bild zur Anzeige zu erzeugen. Durch das eine oder die mehreren Cluster 214A-214N erzeugten Zwischendaten können in Speichern gespeichert werden, um zu ermöglichen, dass Zwischendaten zwischen Clustern 214A-214N für eine Weiterverarbeitung übertragen werden.
  • Während einer Operation kann der Verarbeitungs-Cluster-Array 212 auszuführende Verarbeitungsaufgaben über die Planungseinrichtung 210 empfangen, welche Verarbeitungsaufgaben definierende Befehle von dem Frontend 208 empfängt. Für Grafikverarbeitungsoperationen können die Verarbeitungsaufgaben Indizes von zu verarbeitenden Daten, z. B. Flächendaten (Patch-Daten), Primitive-Daten, Vertex-Daten und/oder Pixeldaten, sowie Zustandsparameter und Befehle, welche definieren, wie die Daten zu verarbeiten sind (z. B. welches Programm auszuführen ist), umfassen. Die Planungseinrichtung 210 kann konfiguriert sein, um die Indizes, welche den Aufgaben entsprechen, abzurufen und sie kann die Indizes von dem Frontend 208 empfangen. Das Frontend 208 kann konfiguriert sein, um sicherzustellen, dass der Verarbeitungs-Cluster-Array 212 auf einen gültigen Zustand konfiguriert wird, bevor die durch eingehende Befehlsspeicher (z. B. Batch-Speicher, Push-Speicher usw.) spezifizierte Arbeitslast initiiert wird.
  • Jede der einen oder mehreren Instanzen der Parallelverarbeitungseinheit 202 kann mit einem Parallelprozessorspeicher 222 gekoppelt sein. Auf den Parallelprozessorspeicher 222 kann über die Speicher-Kreuzschiene 216 zugegriffen werden, welche Speicheranfragen von dem Verarbeitungs-Cluster-Array 212 sowie der I/O-Einheit 204 empfangen kann. Die Speicher-Kreuzschiene 216 kann auf den Parallelprozessorspeicher 222 über eine Speicherschnittstelle 218 zugreifen. Die Speicherschnittstelle 218 kann mehrere Partitionierungseinheiten (z. B. Partitionierungseinheit 220A, Partitionierungseinheit 220B bis Partitionierungseinheit 220N) umfassen, die jeweils mit einem Abschnitt (z. B. einer Speichereinheit) des Parallelprozessorspeichers 222 gekoppelt werden können. In einer Implementierung ist die Zahl von Partitionierungseinheiten 220A-220N konfiguriert, sodass sie gleich der Zahl von Speichereinheiten ist, sodass eine erste Partitionierungseinheit 220A eine entsprechende erste Speichereinheit 224A aufweist, eine zweite Partitionierungseinheit 220B eine entsprechende Speichereinheit 224B aufweist und eine N-te Partitionierungseinheit 220N eine entsprechende N-te Speichereinheit 224N aufweist. In anderen Ausführungsformen kann die Zahl von Partitionierungseinheiten 220A-220N ungleich der Zahl von Speichervorrichtungen sein.
  • In verschiedenen Ausführungsformen können die Speichereinheiten 224A-224N verschiedene Arten von Speichervorrichtungen umfassen, einschließlich einen dynamischen Direktzugriffspeicher (DRAM für Dynamic Random Access Memory) oder einen Grafik-Direktzugriffspeicher, wie etwa einen synchronen Grafik-Direktzugriffspeicher (SGRAM für Synchronous Graphics Random Access Memory), einschließlich eines Speichers mit Grafik-Doppeldatenraten (GDDR für Graphics Double Data Rate). In einer Ausführungsform können die Speichereinheiten 224A-224N auch einen 3D-Stack-Speicher umfassen, einschließlich, jedoch nicht beschränkt auf einen Speicher mit hoher Bandbreite (HBM für High Bandwidth Memory). Fachleute auf dem Gebiet werden erkennen, dass die spezifische Implementierung der Speichereinheiten 224A-224N variieren kann und aus einem von verschiedenen herkömmlichen Entwürfen ausgewählt werden kann. Renderziele, wie etwa Bildspeicher oder Texturabbildungen können von den Speichereinheiten 224A-224N gespeichert werden, was es den Partitionierungseinheiten 220A-220N ermöglicht, Abschnitte jedes Renderziels parallel zu schreiben, um so die verfügbare Bandbreite des Parallelprozessorspeichers 222 effizient zu nutzen. In einigen Ausführungsformen kann eine lokale Instanz des Parallelprozessorspeichers 222 ausgeschlossen werden, um einen einheitlichen Speicherentwurf zu erzielen, der den Systemspeicher in Verbindung mit dem lokalen Cache-Speicher verwendet.
  • In einer Ausführungsform kann ein beliebiger der Cluster 214A-214N des Verarbeitungs-Cluster-Arrays 212 Daten verarbeiten, die auf eine beliebige der Speichereinheiten 224A-224N innerhalb des Parallelprozessorspeichers 222 geschrieben werden. Die Speicher-Kreuzschiene 216 kann konfiguriert sein, um die Ausgabe jedes Clusters 214A-214N an eine beliebige Partitionierungseinheit 220A-220N oder an ein anderes Cluster 214A-214N zu übertragen, die/das zusätzliche Verarbeitungsvorgänge an der Ausgabe durchführen kann. Jedes Cluster 214A-214N kann mit der Speicherschnittstelle 218 über die Speicher-Kreuzschiene 216 kommunizieren, um aus verschiedenen externen Speichervorrichtungen zu lesen oder darauf zu schreiben. In einer Ausführungsform hat die Speicher-Kreuzschiene 216 eine Verbindung mit der Speicherschnittstelle 218, um mit der I/O-Einheit 204 zu kommunizieren, sowie eine Verbindung mit einer lokalen Instanz des Parallelprozessorspeichers 222, welche es den Verarbeitungseinheiten innerhalb der unterschiedlichen Verarbeitungs-Cluster 214A-214N ermöglichen, mit dem Systemspeicher oder einem anderen Speicher zu kommunizieren, der sich nicht lokal bei der Parallelverarbeitungseinheit 202 befindet. In einer Ausführungsform kann die Speicher-Kreuzschiene 216 virtuelle Kanäle verwenden, um Verkehrsströme zwischen den Clustern 214A-214N und den Partitionierungseinheiten 220A-220N zu trennen.
  • Obgleich innerhalb des parallelen Prozessors 200 eine einzige Instanz der Parallelverarbeitungseinheit 202 veranschaulicht ist, kann eine beliebige Zahl von Instanzen der Parallelverarbeitungseinheit 202 enthalten sein. Zum Beispiel können mehrere Instanzen der Parallelverarbeitungseinheit 202 auf einer einzigen Add-In-Karte vorgesehen sein oder es können mehrere Add-In-Karten angeschlossen sein. Die unterschiedlichen Instanzen der Parallelverarbeitungseinheit 202 können konfiguriert sein, um sogar zusammenzuarbeiten, wenn die unterschiedlichen Instanzen unterschiedlich viele Verarbeitungskerne, unterschiedlich viele lokale Parallelprozessorspeicher und/oder andere Konfigurationsdifferenzen aufweisen. Zum Beispiel können in einer Ausführungsform einige Instanzen der Parallelverarbeitungseinheit 202 Gleitkomma-Einheiten mit höherer Genauigkeit als andere Instanzen aufweisen. Systeme, die eine oder mehrere Instanzen der Parallelverarbeitungseinheit 202 oder des parallelen Prozessors 200 integrieren, können in einer Vielzahl von Konfigurationen und Formfaktoren implementiert werden, einschließlich unter anderem als Desktop, Laptop oder tragbare persönliche Computer, Server, Arbeitsstationen, Spielkonsolen und/oder eingebettete Systeme.
  • 2B ist ein Blockdiagramm einer Partitionierungseinheit 220 gemäß einer Ausführungsform. In einer Ausführungsform ist die Partitionierungseinheit 220 eine Instanz einer der Partitionierungseinheiten 220A-220N von 2A. Wie veranschaulicht, umfasst die Partitionierungseinheit 220 einen L2-Cache 221, eine Bildspeicher-Schnittstelle 225 und eine ROP 226 (Rasteroperationseinheit). Der L2-Cache 221 ist ein Lese-/Schreib-Cache, der konfiguriert ist, um Lasten durchzuführen und Operationen zu speichern, die von der Speicher-Kreuzschiene 216 und der ROP 226 empfangen werden. Verpasste Lesungen und dringende Rückschreibanfragen werden durch den L2-Cache 221 an die Bildspeicher-Schnittstelle 225 zur Verarbeitung ausgegeben. Auch Aktualisierungen können an den Bildspeicher über die Bildspeicher-Schnittstelle 225 zur Verarbeitung gesendet werden. In einer Ausführungsform hat die Bildspeicher-Schnittstelle 225 eine Schnittstelle mit einer der Speichereinheiten in dem Parallelprozessorspeicher, wie etwa den Speichereinheiten 224A-224N von 2A (z. B. innerhalb des Parallelprozessorspeichers 222).
  • In Grafikanwendungen ist die ROP 226 eine Verarbeitungseinheit, die Rasteroperationen durchführt, wie etwa Schablonen, Z-Test, Mischen und dergleichen. Die ROP 226 gibt dann verarbeitete Grafikdaten aus, die in dem Grafikspeicher gespeichert werden. In einigen Ausführungsformen umfasst die ROP 226 eine Komprimierungslogik, um Tiefen- oder Farbdaten zu komprimieren, die in einen Speicher geschrieben werden, oder um Tiefen- oder Farbdaten zu dekomprimieren, die aus dem Speicher gelesen werden. Die Kompressionslogik kann eine verlustlose Komprimierungslogik sein, die von einem oder mehreren Komprimierungsalgorithmen Gebrauch macht. Die Art der Komprimierung, die durch die ROP 226 durchgeführt wird, kann basierend auf den statistischen Eigenschaften der zu komprimierenden Daten variieren. Beispielsweise kann in einer Ausführungsform eine Delta-Farbkomprimierung auf Tiefen- und Farbdaten auf Kachelbasis durchgeführt werden.
  • In einigen Ausführungsformen ist die ROP 226 innerhalb jedes Verarbeitungs-Clusters (z. B. Cluster 214A-214N von 2A) anstatt innerhalb der Partitionierungseinheit 220 enthalten. In einer derartigen Ausführungsform werden Lese- und Schreibanfragen für Pixeldaten über die Speicher-Kreuzschiene 216 anstelle von Pixelfragmentdaten übertragen. Die verarbeiteten Grafikdaten können auf einer Anzeigevorrichtung, wie etwa einer von der einen oder den mehreren Anzeigevorrichtungen 110 von 1, angezeigt, zur Weiterverarbeitung durch den (die) Prozessor(en) 102 geroutet oder zur Weiterverarbeitung durch eine der Verarbeitungsentitäten innerhalb des parallelen Prozessors 200 von 2A geroutet werden.
  • 2C ist ein Blockdiagramm eines Verarbeitungs-Clusters 214 innerhalb einer Parallelverarbeitungseinheit gemäß einer Ausführungsform. In einer Ausführungsform ist das Verarbeitungs-Cluster eine Instanz einer der Verarbeitungs-Cluster 214A-214N von 2A. Das Verarbeitungs-Cluster 214 kann konfiguriert sein, um viele Threads parallel auszuführen, wenn sich der Begriff „Thread“ auf eine Instanz eines bestimmten Programms bezieht, welches auf einem bestimmten Satz Eingangsdaten ausgeführt wird. In einigen Ausführungsformen werden Anweisungseinreichungstechniken mit Einzelanweisung und mehreren Daten (SMID für Single-Instruction, Multiple-Data) verwendet, um die parallele Ausführung einer Vielzahl von Threads zu unterstützen, ohne mehrere unabhängige Anweisungseinheiten vorzusehen. In einigen Ausführungsformen werden Techniken mit Einzelanweisung und mehreren Threads (SIMT für Single-Instruction, Multiple-Thread) verwendet, um die parallele Ausführung einer Vielzahl von in der Regel synchronisierten Threads zu unterstützen, wobei eine gemeinsame Anweisungseinheit verwendet wird, die konfiguriert ist, um Anweisungen bei einem Satz von Verarbeitungsmaschinen innerhalb eines der Verarbeitungs-Cluster einzureichen. Im Gegensatz zu einem SIMD-Ausführungssystem, bei dem alle Verarbeitungsmaschinen normalerweise identische Anweisungen ausführen, ermöglicht die SIMT-Ausführung, dass unterschiedliche Threads leichter divergierenden Ausführungspfaden durch ein gegebenes Thread-Programm folgen. Fachleute auf dem Gebiet werden verstehen, dass ein SIMD-Verarbeitungssystem einen funktionellen Untersatz eines SIMT-Verarbeitungssystems darstellt.
  • Eine Operation des Verarbeitungs-Clusters 214 kann über eine Pipeline-Verwaltungseinrichtung 232 gesteuert werden, welche Verarbeitungsaufgaben auf parallele SIMT-Prozessoren verteilt. Die Pipeline-Verwaltungseinrichtung 232 empfängt Anweisungen von der Planungseinrichtung 210 von 2A und verwaltet die Ausführung dieser Anweisungen über einen Grafik-Multiprozessor 234 und/oder eine Textureinheit 236. Der dargestellte Grafik-Multiprozessor 234 ist eine beispielhafte Instanz eines parallelen SIMT-Prozessors. Es können jedoch verschiedene Arten von parallelen SIMT-Prozessoren unterschiedlicher Architekturen innerhalb des Verarbeitungs-Clusters 214 enthalten sein. Eine oder mehrere Instanzen des Grafik-Multiprozessors 234 können innerhalb eines Verarbeitungs-Clusters 214 enthalten sein. Der Grafik-Multiprozessor 234 kann Daten verarbeiten und eine Daten-Kreuzschiene 240 kann verwendet werden, um die verarbeiteten Daten auf eines von mehreren möglichen Zielen einschließlich auf andere Shader-Einheiten zu verteilen. Die Pipeline-Verwaltungseinrichtung 232 kann die Verteilung verarbeiteter Daten erleichtern, indem sie Ziele für verarbeitete Daten spezifiziert, welche über die Daten-Kreuzschiene 240 zu verteilen sind.
  • Jeder Grafik-Multiprozessor 234 innerhalb des Verarbeitungs-Clusters 214 kann einen identischen Satz einer funktionellen Ausführungslogik (z. B. arithmetischer Logikeinheiten, Lastspeichereinheiten usw.) aufweisen. Die funktionelle Ausführungslogik kann in Pipelineanordnungsweise konfiguriert sein, in welcher neue Anweisungen eingereicht werden können, bevor vorherige Anweisungen abgeschlossen sind. Die funktionelle Ausführungslogik unterstützt eine Palette von Operationen einschließlich Ganzzahl- und Gleitkomma-arithmetische Vergleichsoperationen, Boolescher Operationen, Bitverschiebung und Rechenvorgänge verschiedener Algebrafunktionen. In einer Ausführungsform kann die gleiche Funktionseinheits-Hardware genutzt werden, um unterschiedliche Operationen durchzuführen und eine beliebige Kombination aus Funktionseinheiten kann vorhanden sein.
  • Die an das Verarbeitungs-Cluster 214 übertragenen Anweisungen bilden einen Thread. Ein Satz Threads, welcher den Satz Verarbeitungsmaschinen ausführt, ist eine Thread-Gruppe. Eine Thread-Gruppe führt das gleiche Programm auf unterschiedlichen Eingangsdaten aus. Jeder Thread innerhalb einer Thread-Gruppe kann einer anderen Verarbeitungsmaschine innerhalb eines Grafik-Multiprozessors 234 zugeordnet werden. Eine Thread-Gruppe kann weniger Threads aufweisen als die Anzahl von Verarbeitungsmaschinen innerhalb des Grafik-Multiprozessors 234. Wenn eine Thread-Gruppe weniger Threads aufweist als die Anzahl von Verarbeitungsmaschinen, können eine oder mehrere der Verarbeitungsmaschinen während Zyklen, in denen diese Thread-Gruppe verarbeitet wird, im Bereitschaftsmodus sein. Eine Thread-Gruppe kann auch mehr Threads aufweisen als die Anzahl von Verarbeitungsmaschinen innerhalb des Grafik-Multiprozessors 234. Wenn die Thread-Gruppe mehr Threads aufweist als die Anzahl von Verarbeitungsmaschinen innerhalb des Grafik-Multiprozessors 234, kann eine Verarbeitung über aufeinanderfolgende Taktzyklen durchgeführt werden. In einer Ausführungsform können mehrere Thread-Gruppen gleichzeitig auf einem Grafik-Multiprozessor 234 ausgeführt werden.
  • In einer Ausführungsform umfasst der Grafik-Multiprozessor 234 einen internen Cache-Speicher, um Operationen zu laden und zu speichern. In einer Ausführungsform kann der Grafik-Multiprozessor 234 auf einen internen Cache verzichten und einen Cache-Speicher (z. B. L1-Cache 248) innerhalb des Verarbeitungs-Clusters 214 verwenden. Jeder Grafik-Multiprozessor 234 hat auch Zugriff auf L2-Caches innerhalb der Partitionierungseinheiten (z. B. Partitionierungseinheit 220A-220N von 2A), die von allen Verarbeitungs-Clustern 214 gemeinsam genutzt werden und verwendet werden können, um Daten zwischen Threads zu übertragen. Der Grafik-Multiprozessor 234 kann auch auf einen globalen Speicher außerhalb des Chips zugreifen, der einen lokalen Parallelprozessorspeicher und/oder Systemspeicher umfassen kann. Ein beliebiger Speicher, der zu der Parallelverarbeitungseinheit 202 extern liegt, kann als globaler Speicher verwendet werden. Ausführungsformen, in denen das Verarbeitungs-Cluster 214 mehrere Instanzen des Grafik-Multiprozessors 234 aufweist, kann gemeinsame Anweisungen und Daten gemeinsam nutzen, die in dem L1-Cache 248 gespeichert werden können.
  • Jedes Verarbeitungs-Cluster 214 kann eine Speicherverwaltungseinheit 245 (MMU für Memory Management Unit) umfassen, die konfiguriert ist, um virtuelle Adressen auf physikalische Adressen abzubilden. In anderen Ausführungsformen können eine oder mehrere Instanzen der MMU 245 innerhalb der Speicherschnittstelle 218 von 2A liegen. Die MMU 245 umfasst einen Satz Seitentabelleneinträge (PTEs für Page Table Entries), die verwendet werden, um eine virtuelle Adresse auf eine physikalische Adresse einer Kachel und optional eines Cachelinienindexes abzubilden. Die MMU 245 kann Übersetzungspuffer (TLB für Translation Lookaside Buffers) oder Caches umfassen, die innerhalb des Grafik-Multiprozessors 234 oder des L1-Cache oder des Verarbeitungs-Clusters 214 liegen. Die physikalische Adresse wird verarbeitet, um einen Flächendaten-Zugriffsort zu verteilen, um eine effiziente Anfragenverschachtelung unter Partitionierungseinheiten zu ermöglichen. Der Cachelinienindex kann verwendet werden, um zu bestimmen, ob eine Anfrage für eine Cachelinie ein Treffer oder kein Treffer („Hit“ oder „Miss“) ist.
  • In Grafik- und Rechenanwendungen kann ein Verarbeitungs-Cluster 214 derart konfiguriert sein, dass jeder Grafik-Multiprozessor 234 mit einer Textureinheit 236 gekoppelt ist, um Texturabbildungsoperationen durchzuführen, z. B. Texturabtastpositionen zu bestimmen, Texturdaten zu lesen und die Texturdaten zu filtern. Die Texturdaten werden aus einem internen Textur-L1-Cache (nicht gezeigt) oder in einigen Ausführungsformen aus dem L1-Cache innerhalb des Grafik-Multiprozessors 234 gelesen und, falls nötig, aus einem L2-Cache, einem lokalen Parallelprozessorspeicher oder einem Systemspeicher abgerufen. Jeder Grafik-Multiprozessor 234 gibt verarbeitete Aufgaben an die Daten-Kreuzschiene 240 aus, um die verarbeitete Aufgabe einem anderen Verarbeitungs-Cluster 214 zur Weiterverarbeitung bereitzustellen oder um die verarbeitete Aufgabe in einem L2-Cache, einem lokalen Parallelprozessorspeicher oder einem Systemspeicher über die Speicher-Kreuzschiene 216 zu speichern. Eine Vor-ROP 242 (Vor-Rasteroperationseinheit) ist konfiguriert, um Daten von dem Grafik-Multiprozessor 234 zu empfangen, Daten an ROP-Einheiten zu leiten, die sich, wie hierin beschrieben, bei Partitionierungseinheiten befinden können (z. B. Partitionierungseinheiten 220A-220N von 2A). Die Einheit einer Vor-ROP 242 kann Optimierungen für ein Farbmischen durchführen, Pixel-Farbdaten organisieren und Adressübersetzungen durchführen.
  • Es wird darauf hingewiesen, dass die hierin beschriebene Kernarchitektur veranschaulichend ist und dass Abwandlungen und Modifizierungen möglich sind. Es kann eine beliebige Anzahl von Verarbeitungseinheiten, z. B. Grafik-Multiprozessor 234, Textureinheiten 236, Vor-ROPs 242 usw., innerhalb eines Verarbeitungs-Clusters 214 enthalten sein. Darüber hinaus kann, obgleich nur ein Verarbeitungs-Cluster 214 gezeigt ist, eine Parallelverarbeitungseinheit, wie hierin beschrieben, eine beliebige Anzahl von Instanzen des Verarbeitungs-Clusters 214 enthalten. In einer Ausführungsform kann jedes Verarbeitungs-Cluster 214 konfiguriert sein, um unabhängig von anderen Verarbeitungs-Clustern 214 unter Verwendung separater und unterschiedlicher Verarbeitungseinheiten, L1-Caches usw. zu arbeiten.
  • 2D zeigt einen Grafik-Multiprozessor 234 gemäß einer Ausführungsform. In einer derartigen Ausführungsform ist der Grafik-Multiprozessor 234 mit der Pipeline-Verwaltungseinrichtung 232 des Verarbeitungs-Clusters 214 gekoppelt. Der Grafik-Multiprozessor 234 weist eine Ausführungs-Pipeline einschließlich unter anderem eines Anweisungs-Cache 252, einer Anweisungseinheit 254, einer Adressabbildungseinheit 256, einer Registerdatei 258, eines oder mehrerer Allzweck-Grafikprozessorkerne 262 (GPGPU-Kerne) und einer oder mehrerer Lade-/Speicher-Einheiten 266 auf. Die GPGPU-Kerne 262 und die Lade-/Speicher-Einheiten 266 sind mit einem Cache-Speicher 272 und einem gemeinsam genutzten Speicher 270 über einen Speicher und eine Cache-Verbindung 268 gekoppelt. In einer Ausführungsform umfasst der Grafik-Multiprozessor 234 zusätzlich Tensor- und/oder Raytracing-Kerne 263, die eine Hardwarelogik aufweisen, um Matrix- und/oder Raytracing-Operationen zu beschleunigen.
  • In einer Ausführungsform empfängt der Anweisungs-Cache 252 einen Strom von Anweisungen zur Ausführung von der Pipeline-Verwaltungseinrichtung 232. Die Anweisungen werden in dem Anweisungs-Cache 252 zwischengespeichert und zur Ausführung durch die Anweisungseinheit 254 verteilt. Die Anweisungseinheit 254 kann Anweisungen als Thread-Gruppen (z. B. Verpackungen) verteilen, wobei jeder Thread der Thread-Gruppe einer anderen Ausführungseinheit innerhalb des GPGPU-Kerns 262 zugeordnet wird. Eine Anweisung kann auf einen beliebigen aus einem lokalen, gemeinsam genutzten oder globalen Adressraum zugreifen, indem eine Adresse innerhalb eines einheitlichen Adressraums spezifiziert wird. Die Adressabbildungseinheit 256 kann verwendet werden, um Adressen in dem einheitlichen Adressraum in eine eindeutige Speicheradresse zu übersetzen, auf die durch die Lade-/Speicher-Einheiten 266 zugegriffen werden kann.
  • Die Registerdatei 258 sieht einen Satz Register für die Funktionseinheiten des Grafik-Multiprozessors 234 vor. Die Registerdatei 258 stellt einen vorübergehenden Speicher für Operanden bereit, die mit den Datenpfaden der Funktionseinheiten (z. B. GPGPU-Kernen 262, Lade-/Speicher-Einheiten 266) des Grafik-Multiprozessors 234 verbunden sind. In einer Ausführungsform ist die Registerdatei 258 zwischen jeder der Funktionseinheiten so aufgeteilt, dass jeder Funktionseinheit ein dedizierter Abschnitt der Registerdatei 258 zugewiesen ist. In einer Ausführungsform ist die Registerdatei 258 zwischen den unterschiedlichen Verpackungen (Wraps) aufgeteilt, die durch den Grafik-Multiprozessor 234 auszuführen sind.
  • Die GPGPU-Kerne 262 können jeweils Gleitkomma-Einheiten (FPUs für Floating Point Units) und/oder arithmetische Ganzzahl-Logikeinheiten (ALUs für Arithmetic Logic Units) aufweisen, die verwendet werden, um Anweisungen des Grafik-Multiprozessors 234 auszuführen. Die GPGPU-Kerne 262 können gemäß Ausführungsformen in ihrer Architektur ähnlich oder unterschiedlich sein. Zum Beispiel und in einer Ausführungsform umfasst ein Teil der GPGPU-Kerne 262 eine Einzelpräzisions-FPU und eine Ganzzahl-ALU, während ein zweiter Teil der GPGPU-Kerne eine Doppelpräzisions-FPU umfasst. In einer Ausführungsform können die FPUs den Standard IEEE 754-2008 für eine Gleitkomma-Arithmetik implementieren oder eine Gleitkomma-Arithmetik mit variabler Präzision ermöglichen. Der Grafik-Multiprozessor 234 kann zudem eine oder mehrere Einheiten mit Festfunktion oder Spezialfunktion umfassen, um spezifische Funktionen durchzuführen, wie etwa Rechteckkopier- oder Pixelmischoperationen. In einer Ausführungsform können ein oder mehrere GPGPU-Kerne auch eine Funktionslogik mit Fest- oder Spezialfunktion umfassen.
  • In einer Ausführungsform umfassen die GPGPU-Kerne 262 eine SIMD-Logik, die in der Lage ist, eine Einzelanweisung auf mehreren Sätzen Daten durchzuführen. In einer Ausführungsform können die GPGPU-Kerne 262 SIMD4-, SIMD8- und SIMD16-Anweisungen physikalisch ausführen und SIMD1-, SIMD2- und SIMD32-Anweisungen logisch ausführen. Die SIMD-Anweisungen für die GPGPU-Kerne können zu Übersetzungszeiten durch einen Shader-Übersetzer erzeugt oder automatisch erzeugt werden, wenn Programme ausgeführt werden, die für Architekturen mit Einzelprogramm und mehreren Daten (SPMD für Single Program Multiple Data) oder SIMT geschrieben und übersetzt sind. Mehrere Threads eines Programms, die für das SIMT-Ausführungsmodell konfiguriert sind, können über eine einzige SIMD-Anweisung ausgeführt werden. Zum Beispiel und in einer Ausführungsform können acht SIMT-Threads, welche die gleichen oder ähnliche Operationen durchführen, parallel über eine einzige SIMD8-Logikeinheit ausgeführt werden.
  • Die Speicher- und Cache-Verbindung 268 ist ein Verbindungsnetzwerk, das jede der Funktionseinheiten des Grafik-Multiprozessors 234 mit der Registerdatei 258 und mit dem gemeinsam genutzten Speicher 270 verbindet. In einer Ausführungsform ist die Speicher- und Cache-Verbindung 268 eine Kreuzschienenverbindung, die es der Lade-/Speicher-Einheit 266 ermöglicht, Last- und Speicheroperationen zwischen dem gemeinsam genutzten Speicher 270 und der Registerdatei 258 zu implementieren. Die Registerdatei 258 kann auf der gleichen Frequenz wie die GPGPU-Kerne 262 arbeiten, wodurch eine 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 Grafik-Multiprozessors 234 ausgeführt werden. Der Cache-Speicher 272 kann als Daten-Cache verwendet werden, um zum Beispiel Texturdaten zwischenzuspeichern, die zwischen den Funktionseinheiten und der Textureinheit 236 kommuniziert werden. Der gemeinsam genutzte Speicher 270 kann außerdem als ein verwaltetes zwischengespeichertes Programm verwendet werden. Threads, die auf den GPGPU-Kernen 262 ausgeführt werden, können Daten innerhalb des gemeinsam genutzten Speichers zusätzlich zu den automatisch zwischengespeicherten Daten, die innerhalb des Cache-Speichers 272 gespeichert werden, programmatisch speichern.
  • 3A-3C stellen zusätzliche Grafik-Multiprozessoren gemäß Ausführungsformen dar. 3A-3B stellen Grafik-Multiprozessoren 325, 350 dar, welche Varianten des Grafik-Multiprozessors 234 von 2C sind. 3C stellt eine Grafikverarbeitungseinheit (GPU) 380 dar, die dedizierte Sätze von Grafikverarbeitungsressourcen aufweist, die in Mehrkern-Gruppen 365A-365N angeordnet sind. Die dargestellten Grafik-Multiprozessoren 325, 350 und die Mehrkern-Gruppen 365A-365N können SM-fähig (SM für Streaming Multiprocessor) für eine gleichzeitige Ausführung einer Vielzahl von Ausführungs-Threads sein.
  • 3A zeigt einen Grafik-Multiprozessor 325 gemäß einer zusätzlichen Ausführungsform. Der Grafik-Multiprozessor 325 umfasst im Vergleich zu dem Grafik-Multiprozessor 234 von 2D mehrere zusätzliche Instanzen von Ausführungsressourceneinheiten. Zum Beispiel kann der Grafik-Multiprozessor 325 mehrere Instanzen der Anweisungseinheit 332A-332B, der Registerdatei 334A-334B und der Textureinheit(en) 344A-344B umfassen. Der Grafik-Multiprozessor 325 umfasst zudem mehrere Sätze von Grafik- oder Rechenausführungseinheiten (z. B. GPGPU-Kern 336A-336B, Tensor-Kern 337A-337B, Raytracing-Kern 338A-338B) und mehrere Sätze Lade-/Speicher-Einheiten 340A-340B. In einer Ausführungsform weisen die Ausführungsressourceneinheiten einen gemeinsamen Anweisungs-Cache 330, einen Textur- und/oder Daten-Cache-Speicher 342 und einen gemeinsam genutzten Speicher 346 auf.
  • Die verschiedenen Komponenten können über eine Verbindungsstruktur 327 (Interconnect Fabric) kommunizieren. In einer Ausführungsform umfasst die Verbindungsstruktur 327 einen oder mehrere Kreuzschiene-Switches, um eine Kommunikation zwischen den verschiedenen Komponenten des Grafik-Multiprozessors 325 zu ermöglichen. In einer Ausführungsform ist die Verbindungsstruktur 327 eine separate Hochgeschwindigkeits-Netzwerkstrukturschicht, auf die jede Komponente des Grafik-Multiprozessors 325 gestapelt ist. Die Komponenten des Grafik-Multiprozessors 325 kommunizieren mit entfernten Komponenten über die Verbindungsstruktur 327. Zum Beispiel können die GPGPU-Kerne 336A-336B, 337A-337B und 3378A-338B jeweils mit einem gemeinsam genutzten Speicher 346 über die Verbindungsstruktur 327 kommunizieren. Die Verbindungsstruktur 327 kann eine Kommunikation innerhalb des Grafik-Multiprozessors 325 regeln, um eine ausgewogene Bandbreitenzuweisung zwischen Komponenten sicherzustellen.
  • 3B zeigt einen Grafik-Multiprozessor 350 gemäß einer zusätzlichen Ausführungsform. Der Grafikprozessor weist mehrere Sätze Ausführungsressourcen 356A-356D auf, wobei jeder Satz Ausführungsressourcen mehrere Anweisungseinheiten, Registerdateien, GPGPU-Kerne und Lade-/Speicher-Einheiten umfasst, wie in 2D und 3A veranschaulicht. Die Ausführungsressourcen 356A-356D können bei Texturoperationen gemeinsam mit (einer) Textureinheit(en) 360A-360D arbeiten, während sie einen Anweisungs-Cache 354 und einen gemeinsam genutzten Speicher 353 teilen. In einer Ausführungsform können die Ausführungsressourcen 356A-356D einen Anweisungs-Cache 354 und einen gemeinsam genutzten Speicher 353 sowie mehrere Instanzen eines Textur- und/oder Daten-Cache-Speichers 358A-358B teilen. Die verschiedenen Komponenten können über eine Verbindungsstruktur 352 kommunizieren, die der Verbindungsstruktur 327 von 3A ähnelt.
  • Fachleute auf dem Gebiet werden verstehen, dass die in 1, 2A-2D und 3A-3D beschriebene Architektur beschreibend und nicht den Umfang der vorliegenden Ausführungsformen begrenzend ist. Daher können hierin beschriebene Techniken auch auf einer beliebigen ordnungsgemäß konfigurierten Verarbeitungseinheit implementiert werden, einschließlich, jedoch ohne Beschränkung auf einem oder mehreren Mobilanwendungsprozessoren, einer oder mehreren zentralen Desktop- oder Server-Verarbeitungseinheiten (CPUs für Central Processing Units), einschließlich Mehrkern-CPUs, einer oder mehreren Parallelverarbeitungseinheiten, wie etwa der Parallelverarbeitungseinheit 202 von 2A, sowie einem oder mehreren Grafikprozessoren oder Spezialzweck-Verarbeitungseinheiten, ohne den Umfang der hierin beschriebenen Ausführungsformen zu verlassen.
  • In einigen Ausführungsformen ist ein paralleler Prozessor oder ein GPGPU mit Host-/Prozessorkernen kommunikativ gekoppelt, um Grafikoperationen, Maschinenlemoperationen, Musteranalyseoperationen und verschiedene Funktionen einer Mehrzweck-GPU (GPGPU) zu beschleunigen. Die GPU kann mit dem Host-Prozessor bzw. den Host-Kernen über einen Bus oder eine andere Verbindung (z. B. eine Hochgeschwindigkeitsverbindung wie etwa PCIe oder NVLink) kommunikativ gekoppelt sein. In anderen Ausführungsformen kann die GPU auf demselben Package oder Chip wie die Kerne integriert und mit den Kernen über einen internen Prozessorbus bzw. eine interne Prozessorverbindung (z. B. in dem Package oder Chip) kommunikativ gekoppelt sein. Unabhängig davon, wie die GPU verbunden ist, können die Prozessorkerne der GPU Arbeit in Form von Abfolgen von Befehlen/Anweisungen zuweisen, die in einem Arbeitsdeskriptor enthalten sind. Die GPU verwendet daraufhin eine dedizierte Schaltungsanordnung/Logik, um diese Befehle/Anweisungen effizient zu verarbeiten.
  • 3C stellt eine Grafikverarbeitungseinheit (GPU) 380 dar, die dedizierte Sätze Grafikverarbeitungsressourcen aufweist, welche in Mehrkern-Gruppen 365A-N angeordnet sind. Obgleich die Einzelheiten von nur einer einzigen Mehrkern-Gruppe 365A dargelegt werden, versteht sich jedoch, dass auch andere Mehrkern-Gruppen 365B-365N mit den gleichen oder ähnlichen Sätzen Grafikverarbeitungsressourcen ausgestattet sein können.
  • Wie veranschaulicht, kann eine Mehrkern-Gruppe 365A einen Satz Grafikkerne 370, einen Satz Tensor-Kerne 371 und einen Satz Raytracing-Kerne 372 umfassen. Eine Planungs-/Verteilungseinrichtung 368 plant und verteilt die Grafik-Threads zur Ausführung auf den verschiedenen Kernen 370, 371, 372. Ein Satz Registerdateien 369 speichert Operandenwerte, die durch die Kerne 370, 371, 372 verwendet werden, wenn sie die Grafik-Threads ausführen. Diese können zum Beispiel Ganzzahlregister zum Speichern von Ganzzahlwerten, Gleitkommaregister zum Speichern von Gleitkommawerten, Vektorregister zum Speichern von verpackten Datenelementen (Ganzzahl- und/oder Gleitkomma-Datenelemente) und Kachelregister zum Speichern von Tensor-/Matrixwerten aufweisen. In einer Ausführungsform sind die Kachelregister als kombinierte Sätze von Vektorregistern implementiert.
  • Ein oder mehrere kombinierte Level-1 (L1)-Caches und gemeinsam genutzte Speichereinheiten 373 speichern Grafikdaten, wie etwa Texturdaten, Vertexdaten, Pixeldaten, Raydaten, Eingrenzungsvolumendaten usw. lokal innerhalb jeder Mehrkern-Gruppe 365A. Eine oder mehrere Textureinheiten 374 können auch verwendet werden, um Texturoperationen, wie etwa Texturabbildung und -abtastung, durchzuführen. Ein Level-2(L2)-Cache 375, der von allen oder einem Untersatz der Mehrkern-Gruppen 365A-365N gemeinsam genutzt wird, speichert Grafikdaten und/oder Anweisungen für mehrere gleichzeitige Grafik-Threads. Wie veranschaulicht, kann der L2-Cache 375 von mehreren Mehrkern-Gruppen 365A-365N gemeinsam genutzt werden. Eine oder mehrere Speichersteuerungen 367 koppeln die GPU 380 mit einem Speicher 366, welcher ein Systemspeicher (z. B. DRAM) und/oder ein dedizierter Grafikspeicher (z. B. GDDR6-Speicher) sein kann.
  • Eine Eingabe/Ausgabe(I/O für Input/Output)-Schaltungsanordnung 363 koppelt die GPU 380 mit einer oder mehreren I/O-Vorrichtungen 362, wie etwa digitalen Signalprozessoren (DSPs für Digital Signal Processors), Netzwerksteuerungen oder Benutzer-Eingabevorrichtungen. Eine Verbindung auf einem Chip kann verwendet werden, um die I/O-Vorrichtungen 362 mit der GPU 380 und dem Speicher 366 zu koppeln. Eine oder mehrere I/O-Speicherverwaltungseinheiten (IOMMUs für I/O Memory Management Units) 364 der I/O-Schaltungsanordnung 363 koppeln die I/O-Vorrichtungen 362 direkt mit dem Systemspeicher 366. In einer Ausführungsform verwaltet die IOMMU 364 mehrere Sätze Seitentabellen, um virtuelle Adressen auf physikalische Adressen in dem Systemspeicher 366 abzubilden. In dieser Ausführungsform können die I/O-Vorrichtungen 362, die CPU(s) 361 und die GPU(s) 380 den gleichen virtuellen Adressraum teilen.
  • In einer Implementierung unterstützt die IOMMU 364 eine Virtualisierung. In diesem Fall kann sie einen ersten Satz Seitentabellen verwalten, um virtuelle Gäste/Grafik-Adressen auf physikalische Gäste/Grafik-Adressen abzubilden, und einen zweiten Satz Seitentabellen, um die physikalischen Gäste/Grafik-Adressen auf physikalische System/Host-Adressen (z. B. innerhalb des Systemspeichers 366) abzubilden. Die Basisadressen jedes des ersten und zweiten Satzes Seitentabellen kann in Steuerregistern gespeichert und auf einem Kontext-Switch ausgetauscht werden (sodass z. B. neuer Kontext mit einem Zugriff auf den relevanten Satz Seitentabellen bereitgestellt wird). Obgleich in 3C nicht veranschaulicht, kann jeder der Kerne 370, 371, 372 und/oder jede der Mehrkern-Gruppen 365A-365N Übersetzungspuffer (TLBs) umfassen, um Übersetzungen von virtuellen Gästen in physikalische Gäste, Übersetzungen von physikalischen Gästen in physikalische Hosts und Übersetzungen von virtuellen Gästen in physikalische Hosts zwischenzuspeichern.
  • In einer Ausführungsform werden die CPUs 361, GPUs 380 und I/O-Vorrichtungen 362 auf einem einzigen Halbleiterchip und/oder Halbleiterchippackage integriert. Der dargestellte Speicher 366 kann auf demselben Chip integriert oder mit den Speichersteuerungen 367 über eine Off-Chip-Schnittstelle gekoppelt sein. In einer Implementierung umfasst der Speicher 366 einen GDDR6-Speicher, der denselben virtuellen Adressraum wie andere physikalische Speicher auf Systemebene teilt, obgleich zugrunde liegende Prinzipien der Erfindung nicht auf diese spezifische Implementierung beschränkt sind.
  • In einer Ausführungsform weisen die Tensor-Kerne 371 mehrere Ausführungseinheiten auf, die speziell ausgelegt sind, um Matrixoperationen durchzuführen, welche die grundlegenden Rechenoperationen sind, die verwendet werden, um Operationen des maschinellen Lernens (Deep Learning) durchzuführen. Zum Beispiel können simultane Matrixmultiplikationsoperationen für Trainings und Inferenzen von neuronalen Netzen verwendet werden. Die Tensor-Kerne 371 können ein Matrixverarbeiten unter Verwendung verschiedener Genauigkeiten von Operanden durchführen, einschließlich Gleitkomma von einfacher Genauigkeit (z. B. 32 Bits), Gleitkomma von halber Genauigkeit (z. B. 16 Bits), Ganzzahldatenwörter (16 Bits), Bytes (8 Bits) und Halbbytes (4 Bits). In einer Ausführungsform extrahiert eine Implementierung eines neuronalen Netzes Merkmale jeder gerenderten Szene, wobei sie potentiell Details aus mehreren Frames kombiniert, um ein Endbild von hoher Qualität zu erstellen.
  • In Implementierungen des maschinellen Lernens kann eine parallele Matrixmultiplikationsarbeit zur Ausführung an den Tensor-Kernen 371 geplant werden. Das Training neuronaler Netze erfordert insbesondere eine erhebliche Zahl von Matrix-Skalarprodukt-Operationen. Um einen Skalarprodukt-Ansatz einer Matrixmultiplikation von N x N x N zu verarbeiten, können die Tensor-Kerne 371 mindestens N Skalarprodukt-Verarbeitungselemente umfassen. Bevor die Matrixmultiplikation beginnt, wird eine gesamte Matrix in Kachelregister geladen und mindestens eine Spalte einer zweiten Matrix wird für jeden Zyklus von N Zyklen geladen. In jedem Zyklus werden N Skalarprodukte verarbeitet.
  • Matrixelemente können mit unterschiedlichen Genauigkeiten in Abhängigkeit von der bestimmten Implementierung gespeichert werden, einschließlich 16-Bit-Datenworte, 8-Bit-Bytes (z. B. INT8) und 4-Bit-Halbbytes (z. B. INT4). Modi unterschiedlicher Genauigkeiten können für die Tensor-Kerne 371 spezifiziert sein, um sicherzustellen, dass für unterschiedliche Arbeitslasten (z. B. Inferenz-Arbeitslasten, die eine Quantisierung auf Bytes und Halbbytes tolerieren können) die effizienteste Genauigkeit verwendet wird.
  • In einer Ausführungsform beschleunigen die Raytracing-Kerne 372 Raytracing-Operationen für sowohl Echtzeit-Raytracing- als auch Nicht-Echtzeit-Raytracing-Implementierungen. Die Raytracing-Kerne 372 können insbesondere eine Ray-Traversal/Intersection-Schaltungsanordnung zum Durchführen eines Ray Traversal (einer Strahlendurchquerung) unter Verwendung von Eingrenzungsvolumenhierarchien (BVHs für Bounding Volume Hierarchies) und zum Identifizieren von Schnittpunkten (intersections) zwischen Strahlen und Primitiven, die in den BVH-Volumen enthalten sind, aufweisen. Die Raytracing-Kerne 372 können zudem eine Schaltungsanordnung zum Durchführen eines Tiefentestens und Aussortierens (z. B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) aufweisen. In einer Implementierung führen die Raytracing-Kerne 372 Traversal- und Intersection-Operationen gemeinsam mit den Bild-Rauschunterdrückungstechniken durch, die hierin beschrieben werden, von denen zumindest ein Teil an den Tensor-Kernen 371 ausgeführt werden kann. Zum Beispiel implementieren die Tensor-Kerne 371 in einer Ausführungsform ein neuronales Netz für maschinelles Lernen, um ein Rauschunterdrücken von Frames durchzuführen, die durch die Raytracing-Kerne 372 erzeugt werden. Die CPU(s) 361, die Grafikkerne 370 und/oder die Raytracing-Kerne 372 können jedoch auch alle oder einen Teil der Algorithmen der Rauschunterdrückung und/oder des maschinellen Lernens implementieren.
  • Außerdem kann, wie vorangehend beschrieben, ein verteilter Ansatz zum Rauschunterdrücken eingesetzt werden, bei dem sich die GPU 380 in einer Rechenvorrichtung befindet, die mit anderen Rechenvorrichtungen über ein Netzwerk oder eine Hochgeschwindigkeitsverbindung gekoppelt ist. In dieser Ausführungsform teilen die miteinander verbundenen Rechenvorrichtungen Lern-/Trainingsdaten des neuronalen Netzes, um die Geschwindigkeit zu verbessern, mit der das Gesamtsystem lernt, um eine Rauschunterdrückung für unterschiedliche Arten von Bild-Frames und/oder unterschiedliche Grafikanwendungen durchzuführen.
  • In einer Ausführungsform verarbeiten die Raytracing-Kerne 372 alle BVH-Traversal- und Ray-Primitive-Schnittpunkte, wodurch sie verhindern, dass die Grafikkerne 370 mit tausenden Anweisungen pro Strahl (Ray) überlastet werden. In einer Ausführungsform umfasst jeder Raytracing-Kern 372 einen ersten Satz spezialisierter Schaltungsanordnungen zum Durchführen von Begrenzungsrahmentests (z. B. für Traversal-Operationen) und einen zweiten Satz spezialisierter Schaltungsanordnungen zum Durchführen der Ray-Dreieck-Schnittpunkttests (z. B. sich schneidende Strahlen, die durchquert wurden). In einer Ausführungsform kann die Mehrkern-Gruppe 365A daher eine Ray-Untersuchung starten und die Raytracing-Kerne 372 führen unabhängig ein Ray-Traversal und eine Ray-Intersection durch und führen Trefferdaten (z. B. einen Treffer, keinen Treffer, mehrere Treffer usw.) zu dem Thread-Kontext zurück. Die anderen Kerne 370, 371 werden freigesetzt, um andere Grafik- und Rechenarbeiten zu leisten, während die Raytracing-Kerne 372 die Traversal- und Intersection-Operationen durchführen.
  • In einer Ausführungsform weist jeder Raytracing-Kern 372 eine Traversal-Einheit, um BVH-Testoperationen durchzuführen, und eine Intersection-Einheit, welche Ray-Primitive-Schnittpunkttests durchführt, auf. Die Intersection-Einheit erzeugt eine „Treffer“-, „keinen Treffer“- oder „mehrere Treffer“-Antwort, die sie dem angemessenen Thread bereitstellt. Während der Traversal- und Intersection-Operationen, werden die Ausführungsressourcen der anderen Kerne (z. B. Grafikkerne 370 und Tensor-Kerne 371) freigesetzt, um andere Formen von Grafikarbeit zu leisten.
  • In einer bestimmten Ausführungsform, die im Folgenden beschrieben wird, wird ein hybrider Rasterisierungs-/Raytracing-Ansatz verwendet, bei dem die Arbeit zwischen den Grafikkernen 370 und den Raytracing-Kernen 372 verteilt wird.
  • In einer Ausführungsform umfassen die Raytracing-Kerne 372 (und/oder andere Kerne 370, 371) eine Hardware-Unterstützung für einen Raytracing-Anweisungssatz, wie etwa DirectX Ray Tracing (DXR) von Microsoft, das einen DispatchRays-Befehl umfasst, sowie eine Shaders für „ray-generation“, „closest-hit“, „any-hit“ und „miss“, welche die Zuweisung eindeutiger Sätze von Shadern und Texturen für jedes Objekt ermöglichen. Eine weitere Raytracing-Plattform, die durch die Raytracing-Kerne 372, die Grafikkerne 370 und die Tensor-Kerne 371 unterstützt wird, ist Vulkan 1.1.85. Man beachte jedoch, dass die zugrunde liegenden Prinzipien der Erfindung nicht auf eine bestimmte Raytracing-ISA beschränkt sind.
  • Im Allgemeinen können die verschiedenen Kerne 372, 371, 370 einen Raytracing-Anweisungssatz unterstützen, der Anweisungen/Funktionen für „ray generation“, „closest hit“, „any hit“, „ray-primitve intersection“, „per-primitive and hierarchical bounding box construction“, „miss“ „visit“ und „exceptions“ umfasst. Genauer gesagt, umfasst eine Ausführungsform Raytracing-Anweisungen zur Durchführung folgender Funktionen:
  • Ray Generation - Ray-Generation-Anweisungen können für jeden Pixel, Abtastwert oder andere benutzerdefinierte Arbeitszuweisung ausgeführt werden.
  • Closest Hit - Eine Closest-Hit-Anweisung kann ausgeführt werden, um den am nächsten liegenden Schnittpunkt eines Strahls mit Primitiven innerhalb einer Szene zu lokalisieren.
  • Any Hit - Eine Any-Hit-Anweisung identifiziert mehrere Schnittpunkte zwischen einem Strahl und Primitiven innerhalb einer Szene, um potentiell einen neuen am nächsten liegenden Schnittpunkt zu identifizieren.
  • Intersection - Eine Intersection-Anweisung führt einen Strahl-Primitive-Schnittpunkttest durch und gibt ein Ergebnis aus.
  • Per-Primitive Bounding Box Construction - Diese Anweisung erstellt einen Begrenzungsrahmen (Bounding Box) um eine gegebene Primitive oder Gruppe von Primitiven (z. B. wenn eine neue BVH oder eine andere Beschleunigungsdatenstruktur erstellt wird).
  • Miss - Angabe, dass einem Strahl jegliche Geometrie innerhalb einer Szene oder eines spezifizierten Bereichs einer Szene fehlt.
  • Visit - Angabe der Children Volumes, die ein Strahl durchqueren wird.
  • Excpetions - Ausnahmen: Dazu gehören verschiedene Arten von Ausnahme-Handhabungseinrichtungen (die z. B. für verschiedene Fehlerbedingungen aufgerufen werden).
  • Techniken für eine Verbindung einer GPU mit einem Host-Prozessor
  • 4A stellt eine beispielhafte Architektur dar, in welcher mehrere GPUs 410-413 mit mehreren Mehrkernprozessoren 405-406 über Hochgeschwindigkeitsverbindungen 440A-440D (z. B. Busse, Punkt-zu-Punkt-Verbindungen usw.) kommunikativ gekoppelt sind. In einer Ausführungsform unterstützen die Hochgeschwindigkeitsverbindungen 440A-440D einen Kommunikationsdurchsatz von 4GB/s, 30GB/s, 80GB/s oder höher in Abhängigkeit von der Implementierung. Es können verschiedene Verbindungsprotokolle verwendet werden, einschließlich, jedoch nicht beschränkt auf PCIe 4.0 oder 5.0 und NVLink 2.0. Die zugrunde liegenden Prinzipien der Erfindung sind jedoch nicht auf ein bestimmtes Kommunikationsprotokoll oder einen bestimmten Durchsatz beschränkt.
  • Zudem sind in einer Ausführungsform zwei oder mehr der GPUs 410-413 über Hochgeschwindigkeitsverbindungen 442A-442B verbunden, die unter Verwendung der gleichen oder unterschiedlicher Protokolle/Verbindungen als diejenigen, die für Hochgeschwindigkeitsverbindungen 440A-440D verwendet werden, implementiert sein können. Ähnlich können zwei oder mehr der Mehrkernprozessoren 405-406 über eine Hochgeschwindigkeitsverbindung 443 verbunden sein, die Bussen symmetrischer Mehrprozessoren (SMP für Symmetrie Multi-Processor) entsprechen kann, die mit 20GB/s, 30GB/s, 120GB/s oder höher arbeiten. Alternativ kann die gesamte Kommunikation zwischen den verschiedenen Systemkomponenten, die in 4A gezeigt sind, unter Verwendung der gleichen Protokolle/Verbindungen (z. B. über eine gemeinsame Verbindungsstruktur) erzielt werden. Wie erwähnt wurde, sind die zugrunde liegenden Prinzipien der Erfindung jedoch nicht auf eine bestimmte Art von Verbindungstechnologie beschränkt.
  • In einer Ausführungsform ist jeder Mehrkernprozessor 405-406 mit jeweils einem Prozessorspeicher 401-402 über Speicherverbindungen 430A-430B kommunikativ gekoppelt und jede GPU 410-413 ist mit jeweils einem GPU-Speicher 420-423 über GPU-Speicher-Verbindungen 450A-450D kommunikativ gekoppelt. Die Speicherverbindungen 430A-430B und 450A-450D können die gleiche oder unterschiedliche Speicherzugriffstechnologien einsetzen. Beispielsweise und ohne darauf beschränkt zu sein, können die Prozessorspeicher 401-402 und die GPU-Speicher 420-423 flüchtige Speicher sein, wie etwa dynamische Direktzugriffsspeicher (DRAMs für Dynamic Random Access Memories) (einschließlich gestapelter DRAMs), Grafik-DDR-SDRAM (GDDR) (z. B. GDDR5, GDDR6) oder Speicher mit hoher Bandbreite (HBM für High Bandwidth Memory), und/oder sie können nichtflüchtige Speicher sein, wie etwa 3D XPoint oder Nano-Ram. In einer Ausführungsform kann mancher Teil der Speicher ein flüchtiger Speicher sein und ein anderer Teil kann ein nichtflüchtiger Speicher sein (z. B. unter Verwendung einer zweistufigen Speicherhierarchie (2LM für Two-Level Memory)).
  • Obwohl, wie im Folgenden beschrieben, die verschiedenen Prozessoren 405-406 und GPUs 410-413 jeweils mit einem bestimmten Speicher 401-402, 420-423 physikalisch gekoppelt sein können, kann eine vereinheitlichte Speicherarchitektur implementiert werden, in welcher der gleiche virtuelle System-Adressraum (auch als der Raum einer „effektiven Adresse“ bezeichnet) über alle der verschiedenen physikalischen Speicher verteilt ist. Beispielsweise können die Prozessorspeicher 401-402 jeweils 64GB des Systemspeicher-Adressraums umfassen und die GPU-Speicher 420-423 können jeweils 32GB des Systemspeicher-Adressraums umfassen (was in diesem Beispiel zu insgesamt 256GB adressierbarem Speicher führt).
  • 4B stellt zusätzliche Einzelheiten für eine Verbindung zwischen einem Mehrkernprozessor 407 und einem Grafikbeschleunigungsmodul 446 gemäß einer Ausführungsform dar. Das Grafikbeschleunigungsmodul 446 kann einen oder mehrere GPU-Chips umfassen, die auf einer Leitungskarte integriert sind, welche mit dem Prozessor 407 über die Hochgeschwindigkeitsverbindung 440 gekoppelt ist. Alternativ kann das Grafikbeschleunigungsmodul 446 auf demselben Package oder Chip wie der Prozessor 407 integriert sein.
  • Der dargestellte Prozessor 407 umfasst mehrere Kerne 460A-460D, die jeweils einen Übersetzungspuffer 461A-461D und einen oder mehrere Caches 462A-462D aufweisen. Die Kerne können verschiedene andere Komponenten zur Ausführung von Anweisungen und Verarbeitung von Daten umfassen, die nicht dargestellt sind, um die zugrunde liegenden Prinzipien der Erfindung nicht zu verschleiern (z. B. Anweisungsabrufeinheiten, Verzweigungsvorhersageeinheiten, Decoder, Ausführungseinheiten, Neuordnungspuffer usw.). Die Caches 462A-462D können Level-1(L1)- und Level-2(L2)-Caches umfassen. Zudem können ein oder mehrere gemeinsam genutzte Caches 456 in der Zwischenspeicherhierarchie enthalten und durch Sätze der Kerne 460A-460D gemeinsam genutzt werden. Zum Beispiel umfasst eine Ausführungsform des Prozessors 407 24 Kerne, wobei jeder seinen eigenen L1-Cache, zwölf gemeinsam genutzte L2-Caches und zwölf gemeinsam genutzte L3-Caches aufweist. In dieser Ausführungsform wird einer des L2- und L3-Caches durch zwei benachbarte Kerne gemeinsam genutzt. Der Prozessor 407 und das Grafikbeschleuniger-Integrationsmodul 446 sind mit dem Systemspeicher 441 verbunden, welcher Prozessorspeicher 401-402 umfassen kann.
  • Die Kohärenz wird für die in den verschiedenen Caches 462A-462D, 456 und dem Systemspeicher 441 über eine Kommunikation zwischen Kernen gespeicherten Daten und Anweisungen über einen Kohärenzbus 464 aufrechterhalten. Zum Beispiel kann jeder Cache eine Cache-Kohärenzlogik/Schaltungsanordnung aufweisen, die ihm zugeordnet ist, um über den Kohärenz-Bus 464 zu kommunizieren, wenn erfasst wird, dass auf bestimmten Cache-Leitungen gelesen oder geschrieben wird. In einer Implementierung ist ein Cache-Snooping-Protokoll über den Kohärenz-Bus 464 implementiert, um nach Cache-Zugriffen zu suchen. Cache-Snooping/Kohärenz-Techniken sind Fachleuten auf dem Gebiet allgemein bekannt und werden hier nicht ausführlich beschrieben, um die zugrunde liegenden Prinzipien der Erfindung nicht zu verschleiern.
  • In einer Ausführungsform koppelt eine Proxy-Schaltung 425 das Grafikbeschleunigungsmodul 446 kommunikativ mit dem Kohärenz-Bus 464, wodurch es dem Grafikbeschleunigungsmodul 446 ermöglicht wird, in dem Cache-Kohärenz-Protokoll als Peer der Kerne teilzunehmen. Insbesondere eine Schnittstelle 435 stellt eine Konnektivität mit der Proxy-Schaltung 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.
  • In einer Implementierung stellt eine Beschleuniger-Integrationsschaltung 436 eine Cache-Verwaltungs-, Speicherzugriffs-, Kontextverwaltungs- und Unterbrechungsverwaltungsdienste im Namen mehrerer Grafikverarbeitungsmaschinen 431, 432, N des Grafikbeschleunigungsmoduls 446 bereit. Die Grafikverarbeitungsmaschinen 431, 432, N können jeweils eine separate Grafikverarbeitungseinheit (GPU) umfassen. Alternativ können die Grafikverarbeitungsmaschinen 431, 432, N unterschiedliche Arten von Grafikverarbeitungsmaschinen innerhalb einer GPU umfassen, wie etwa Grafikausführungseinheiten, Medienverarbeitungsmaschinen (z. B. Videocodierer/- decodierer), Abtaster und Blit-Maschinen. Mit anderen Worten kann das Grafikbeschleunigungsmodul eine GPU mit mehreren Grafikverarbeitungsmaschinen 431-432, N sein oder die Grafikverarbeitungsmaschinen 431-432, N können einzelne GPUs sein, die auf einem gemeinsamen Package, einer gemeinsamen Leitungskarte oder einem gemeinsamen Chip integriert sind.
  • In einer Ausführungsform umfasst die Beschleuniger-Integrationsschaltung 436 eine Speicherverwaltungseinheit (MMU) 439 zum Durchführen verschiedener Speicherverwaltungsfunktionen, wie etwa Virtuell-zu-Physikalisch-Übersetzungen (auch als Effektiv-zu-Real-Speicherübersetzungen) und Speicherzugriffsprotokolle zum Zugreifen auf den Systemspeicher 441. Die MMU 439 kann auch einen Übersetzungspuffer (TLB) (nicht gezeigt) zum Zwischenspeichern der Adressübersetzungen virtuell/effektiv in physikalisch/real umfassen. In einer Implementierung speichert ein Cache 438 Befehle und Daten für einen effizienten Zugriff durch die Grafikverarbeitungsmaschinen 431-432, N. In einer Ausführungsform werden die in dem Cache 438 und den Grafikspeichern 433-434, M gespeicherten Daten zu den Kern-Caches 462A-462D, 456 und dem Systemspeicher 411 kohärent gehalten. Dies kann, wie erwähnt, über eine Proxy-Schaltung 425 erzielt werden, welche im Namen des Cache 438 und der Speicher 433-434, M an dem Cache-Kohärenzmechanismus teilnimmt (z. B. Aktualisierungen bezüglich Modifizierungen/Zugriffe von Cache-Leitungen auf Prozessor-Caches 462A-462D, 456 an den Cache 438 sendet und Aktualisierungen von dem Cache 438 empfängt).
  • Ein Satz Register 445 speichert Kontextdaten für Threads, die durch die Grafikverarbeitungsmaschinen 431-432, N ausgeführt werden, und eine Kontextverwaltungsschaltung 448 verwaltet die Threadkontexte. Zum Beispiel kann die Kontextverwaltungsschaltung 448 Sicherungs- und Wiederherstellungsoperationen durchführen, um Kontexte der verschiedenen Threads während Kontextumschaltungen zu sichern und wiederherzustellen (z. B. wenn ein erster Thread gesichert wird und ein zweiter Thread gesichert wird, sodass der zweite Thread durch eine Grafikverarbeitungsmaschine ausgeführt werden kann). Zum Beispiel kann bei einer Kontextumschaltung die Kontextverwaltungsschaltung 448 aktuelle Registerwerte in einem bezeichneten Bereich in einem Speicher speichern (der z. B. durch einen Kontextzeiger identifiziert wird). Anschließend kann sie die Registerwerte wiederherstellen, wenn wieder zu dem Kontext zurückgekehrt wird. In einer Ausführungsform empfängt und verarbeitet eine Unterbrechungsverwaltungsschaltung 447 Unterbrechungen, die von den Systemvorrichtungen empfangen werden.
  • In einer Implementierung werden virtuelle/effektive Adressen von einer Grafikverarbeitungsmaschine 431 in reale/physikalische Adressen in dem Systemspeicher 411 durch die MMU 439 übersetzt. Eine Ausführungsform der Beschleuniger-Integrationsschaltung 436 unterstützt mehrere (z. B. 4, 8, 16) Grafikbeschleunigermodule 446 und/oder andere Beschleunigervorrichtungen. Das Grafikbeschleunigermodul 446 kann einer einzigen Anwendung zugewiesen sein, die auf dem Prozessor 407 ausgeführt wird, oder es kann von mehreren Anwendungen gemeinsam genutzt werden. In einer Ausführungsform ist die virtualisierte Grafikausführungsumgebung dargestellt, in der die Ressourcen der Grafikverarbeitungsmaschinen 431-432, N unter mehreren Anwendungen oder virtuellen Maschine (VMs für Virtual Machines) geteilt werden. Die Ressourcen können in „Slices“ unterteilt werden, die je nach Verarbeitungsanforderungen und -prioritäten, die den VMs und/oder Anwendungen zugeordnet sind, unterschiedlichen VMs und/oder Anwendungen zugewiesen werden.
  • Daher agiert die Beschleuniger-Integrationsschaltung für das Grafikbeschleunigungsmodul 446 als Brücke zu dem System und stellt Adressübersetzungs- und Systemspeicher-Cache-Dienste bereit. Darüber hinaus kann die Beschleuniger-Integrationsschaltung 436 Virtualisierungsfazilitäten für den Host-Prozessor bereitstellen, um eine Virtualisierung der Grafikverarbeitungsmaschinen, Unterbrechungen und eine Speicherverwaltung zu verwalten.
  • Da Hardwareressourcen der Grafikverarbeitungsmaschinen 431-432, N explizit auf den realen Adressraum abgebildet werden, der durch den Host-Prozessor 407 eingesehen wird, kann ein beliebiger Host-Prozessor diese Ressourcen direkt unter Verwendung eines effektiven Adresswerts adressieren. Eine Funktion der Beschleuniger-Integrationsschaltung 436 ist in einer Ausführungsform die physikalische Trennung der Grafikverarbeitungsmaschinen 431-432, N, sodass sie für das System als unabhängige Einheiten erscheinen.
  • Wie vorangehend erwähnt, sind in der dargestellten Ausführungsform jeweils ein oder mehrere Grafikspeicher 433-434, M mit jeder der Grafikverarbeitungsmaschinen 431-432 gekoppelt. Die Grafikspeicher 433-434, M speichern Anweisungen und Daten, die durch jede der Grafikverarbeitungsmaschinen 431-432, N verarbeitet werden. Die Grafikspeicher 433-434, M können flüchtige Speicher sein, wie etwa DRAMs (einschließlich gestapelter DRAMs), GDDR-Speicher (z. B. GDDR5, GDDR6) oder HBM, und/oder sie können nichtflüchtige Speicher sein, wie etwa 3D XPoint oder Nano-Ram.
  • In einer Ausführungsform werden zur Reduzierung eines Datenverkehrs über die Hochgeschwindigkeitsverbindung 440 Bias-Techniken verwendet, um sicherzustellen, dass die in den Grafikspeichem 433-434, M gespeicherten Daten Daten sind, die durch die Grafikverarbeitungsmaschinen 431-432, N am häufigsten verwendet werden und durch die Kerne 460A-460D vorzugsweise nicht (mit der geringsten Häufigkeit) verwendet werden. Ähnlich versucht der Bias-Mechanismus, durch die Kerne (und vorzugsweise nicht durch die Grafikverarbeitungsmaschinen 431-432, N) benötigte Daten innerhalb der Caches 462A-462D, 456 der Kerne und des Systemspeichers 411 zu halten.
  • 4C stellt eine weitere Ausführungsform dar, in welcher die Beschleuniger-Integrationsschaltung 436 innerhalb des Prozessors 407 integriert ist. In dieser Ausführungsform kommunizieren die Grafikverarbeitungsmaschinen 431-432, N direkt über die Hochgeschwindigkeitsverbindung 440 mit der Beschleuniger-Integrationsschaltung 436 über eine Schnittstelle 437 und eine Schnittstelle 435 (welche wiederum jede Form von Bus oder Schnittstellenprotokoll verwenden können). Die Beschleuniger-Integrationsschaltung 436 kann die gleichen Operationen wie diejenigen durchführen, die in Bezug auf 4B beschrieben wurden, jedoch aufgrund ihrer engen Nähe zu dem Kohärenz-Bus 464 und den Caches 462A-462D, 456 potentiell mit einem höheren Durchsatz.
  • Eine Ausführungsform unterstützt unterschiedliche Programmierungsmodelle, einschließlich eines Programmierungsmodells mit dediziertem Prozess (keine Grafikbeschleunigungsmodul-Virtualisierung) und gemeinsam genutzter Programmierungsmodelle (mit Virtualisierung). Letztere können Programmierungsmodelle, die durch die Beschleuniger-Integrationsschaltung 436 gesteuert werden, und Programmierungsmodelle, die durch das Grafikbeschleunigungsmodul 446 gesteuert werden, umfassen.
  • In einer Ausführungsform des Modells mit dediziertem Prozess sind Grafikverarbeitungsmaschinen 431-432, N einer einzigen Anwendung oder eines einzigen Prozesses unter einem einzigen Betriebssystem zugewiesen. Die Einzelanwendung kann andere Anwendungsanfragen in die Grafikmaschinen 431-432, N einspeisen, wodurch eine Virtualisierung innerhalb einer VM/Partition bereitgestellt wird.
  • In den Programmierungsmodellen mit dediziertem Prozess können die Grafikverarbeitungsmaschinen 431-432, N durch mehrere VM/Anwendungspartitionen gemeinsam genutzt werden. Die gemeinsam genutzten Modelle erfordern einen System-Hypervisor, um die Grafikverarbeitungsmaschinen 431-432, N zu virtualisieren, um einen Zugriff durch jedes Betriebssystem zu ermöglichen. Für Einzelparitionierungssysteme ohne Hypervisor gehören die Grafikverarbeitungsmaschinen 431-432, N dem Betriebssystem. In beiden Fällen kann das Betriebssystem die Grafikverarbeitungsmaschinen 431-432, N virtualisieren, um einen Zugriff auf jeden Prozess oder jede Anwendung bereitzustellen.
  • Für das gemeinsam genutzte Programmierungsmodell wählt das Grafikbeschleunigungsmodul 446 oder eine einzelne Grafikverarbeitungsmaschine 431-432, N ein Prozesselement unter Verwendung eines Prozesshandles aus. In einer Ausführungsform werden die Prozesselemente in dem Systemspeicher 411 gespeichert und sind unter Verwendung von Übersetzungstechniken von effektiven Adressen in reale Adressen, welche hierin beschrieben werden, adressierbar. Der Prozesshandle kann ein implementierungsspezifischer Wert sein, der dem Host-Prozess bereitgestellt wird, wenn sein Kontext in der Grafikverarbeitungsmaschine 431-432, N registriert wird (das heißt, wenn eine System-Software aufgerufen wird, um das Prozesselement zu der verketteten Liste mit Prozesselementen hinzuzufügen). Die unteren 16 Bits des Prozesshandles können der Versatz des Prozesselements innerhalb der verketteten Liste mit Prozesselementen sein.
  • 4D stellt ein beispielhaftes Beschleuniger-Integration-Slice 490 dar. Wie hierin verwendet, umfasst ein „Slice“ einen spezifizierten Abschnitt der Verarbeitungsressourcen der Beschleuniger-Integrationsschaltung 436. Ein effektiver Adressraum 482 der Anwendung innerhalb des Systemspeichers 411 speichert Prozesselemente 483. In einer Ausführungsform werden die Prozesselemente 483 als Reaktion auf GPU-Aufrufe 481 von Anwendungen 480, die auf dem Prozessor 407 ausgeführt werden, gespeichert. Ein Prozesselement 483 enthält den Prozesszustand für die entsprechende Anwendung 480. Ein Arbeitsdeskriptor (WD für Work Descriptor) 484, der in dem Prozesselement 483 enthalten ist, kann ein einzelner Auftrag durch eine Anwendung sein oder er kann einen Zeiger zu einer Schlange von Aufträgen enthalten. Im letzteren Fall ist der WD 484 ein Zeiger auf die Auftragsanfrageschlange in dem Adressraum 482 der Anwendung.
  • Das Grafikbeschleunigungsmodul 446 und/oder die einzelnen Grafikverarbeitungsmaschinen 431-432, N können durch alle oder einen Untersatz der Prozesse in dem System gemeinsam genutzt werden. Ausführungsformen der Erfindung umfassen eine Infrastruktur zum Einstellen des Prozesszustands und Senden eines WD 484 an ein Grafikbeschleunigungsmodul 446, um einen Auftrag in einer virtualisierten Umgebung zu starten.
  • In einer Implementierung ist das Programmierungsmodell mit dediziertem Prozess implementierungsspezifisch. In diesem Modell besitzt ein einziger Prozess das Grafikbeschleunigungsmodul 446 oder eine einzelne Grafikverarbeitungsmaschine 431. Da das Grafikbeschleunigungsmodul 446 einem einzelnen Prozess gehört, initialisiert der Hypervisor die Beschleuniger-Integrationsschaltung 436 für die besitzende Partition und das Betriebssystem initialisiert die Beschleuniger-Integrationsschaltung 436 für die besitzende Partition zu der Zeit, wenn das Grafikbeschleunigungsmodul 446 zugeordnet wird.
  • Im Betrieb ruft eine WD-Abrufeinheit 491 in dem Beschleuniger-Integration-Slice 490 den nächsten WD 484 ab, der eine Angabe über die durch eine der Grafikverarbeitungsmaschinen des Grafikbeschleunigungsmoduls 446 zu leistende Arbeit umfasst. Daten von dem WD 484 können in Registern 445 gespeichert und durch die MMU 439, die Unterbrechungsverwaltungsschaltung 447 und/oder die Kontextverwaltungsschaltung 448, wie veranschaulicht, verwendet werden. Zum Beispiel umfasst eine Ausführungsform der MMU 439 eine Segment-/Seitenführungs-Schaltungsanordnung zum Zugreifen auf Segment-/Seitentabellen 486 innerhalb des virtuellen Adressraums 485 des OS (Betriebssystems). Die Unterbrechungsverwaltungsschaltung 447 kann Unterbrechungsereignisse 492 verarbeiten, die von dem Grafikbeschleunigungsmodul 446 empfangen werden. Wenn Grafikoperationen durchgeführt werden, wird eine effektive Adresse 493, die durch eine Grafikverarbeitungsmaschine 431-432, N erzeugt wird, durch die MMU 439 in eine reale Adresse übersetzt.
  • In einer Ausführungsform wird der gleiche Satz Register 445 für jede Grafikverarbeitungsmaschine 431-432, N und/oder jedes Grafikbeschleunigungsmodul 446 dupliziert und kann durch den Hypervisor oder das Betriebssystem initialisiert werden. Jedes dieser duplizierten Register kann in einem Beschleuniger-Integration-Slice 490 enthalten sein. Beispielhafte Register, die durch den Hypervisor initialisiert werden können, sind in Tabelle 1 gezeigt. Tabelle 1 - Durch Hypervisor initialisierte Register
    1 Slice-Steuerregister
    2 Bereichszeiger für mit realer Adresse (RA) geplante Prozesse
    3 Berechtigungsmaske-Überschreibungsregister
    4 Unterbrechungsvektor-Tabelleneintragsversatz
    5 Unterbrechungsvektor-Tabelleneintragsgrenze
    6 Zustandsregister
    7 Logische Partitions-ID
    8 Datensatzzeiger für Hypervisor-Beschleuniger-Nutzung mit realer Adresse (RA)
    9 Speicherbeschreibungsregister
  • Beispielhafte Register, die durch das Betriebssystem initialisiert werden können, sind in Tabelle 2 gezeigt. Tabelle 2 - Durch Betriebssystem initialisierte Register
    1 Prozess- und Thread-Identifikation
    2 Kontext-Sicherung/Wiederherstellung-Zeiger mit effektiver Adresse (EA)
    3 Datensatzzeiger für-Beschleuniger-Nutzung mit virtueller Adresse (VA)
    4 Tabellenzeiger für Speichersegment mit virtueller Adresse (VA)
    5 Berechtigungsmaske
    6 Arbeitsdeskriptor
  • In einer Ausführungsform ist jeder WD 484 spezifisch für ein bestimmtes Grafikbeschleunigungsmodul 446 und/oder eine bestimmte Grafikverarbeitungsmaschine 431-432, N. Er enthält alle Informationen, die für eine Grafikverarbeitungsmaschine 431-432, N erforderlich sind, um ihre Arbeit zu leisten, oder er kann ein Zeiger zu einem Speicherort sein, an dem die Anwendung eine Befehlsschlange von zu verrichtender Arbeit erstellt hat.
  • 4E stellt zusätzliche Einzelheiten für eine Ausführungsform eines gemeinsam genutzten Modells dar. Diese Ausführungsform umfasst einen Hypervisor-Realadressraum 498, in dem eine Prozesselementliste 499 gespeichert wird. Der Hypervisor-Realadressraum 498 ist über einen Hypervisor 496 zugänglich, der die Grafikbeschleunigungsmodulmaschinen für das Betriebssystem 495 virtualisiert.
  • Die gemeinsam genutzten Programmierungsmodelle ermöglichen es allen oder einem Untersatz von Prozessen von allen oder einem Untersatz von Partitionen in dem System, ein Grafikbeschleunigungsmodul 446 zu verwenden. Es gibt zwei Programmierungsmodelle, in denen das Grafikbeschleunigungsmodul 446 durch mehrere Prozesse und Partitionen gemeinsam genutzt wird: zeitlicht geschnitten („sliced“) gemeinsam genutzt und grafikgerichtet gemeinsam genutzt.
  • In diesem Modell besitzt der System-Hypervisor 496 das Grafikbeschleunigungsmodul 446 und macht seine Funktion für alle Betriebssysteme 495 verfügbar. Damit ein Grafikbeschleunigungsmodul 446 eine Virtualisierung durch den System-Hypervisor 496 unterstützt, kann das Grafikbeschleunigungsmodul 446 die folgenden Anforderungen erfüllen: 1) Eine Auftragsanfrage einer Anwendung muss autonom sein (das heißt, der Zustand zwischen Aufträgen muss nicht aufrechterhalten werden) oder das Grafikbeschleunigungsmodul 446 muss einen Kontextsicherungs- und Wiederherstellungsmechanismus bereitstellen. 2) Es ist durch das Grafikbeschleunigungsmodul 446 sichergestellt, dass eine Auftragsanfrage einer Anwendung in einem spezifizierten Zeitraum abgeschlossen wird, einschließlich Übersetzungsfehler, oder das Grafikbeschleunigungsmodul 446 stellt die Fähigkeit bereit, die Verarbeitung des Auftrags zu präempten. 3) Das Grafikbeschleunigungsmodul 446 muss eine Ausgewogenheit zwischen Prozessen sicherstellen, wenn es in dem gerichteten gemeinsam genutzten Programmierungsmodell betrieben wird.
  • In einer Ausführungsform ist für das gemeinsam genutzte Modell erforderlich, dass die Anwendung 480 einen Systemaufruf des Betriebssystems 495 mit einer Art eines Grafikbeschleunigungsmoduls 446, einem Arbeitsdeskriptor (WD), einem Wert eines Berechtigungsmaskenregisters (AMR für Authority Mask Register) und einem Kontext-Sicherung/Wiederherstellung-Bereichszeiger (CSRP für Context Save/Restore Area Pointer) durchzuführen. Die Art eines Grafikbeschleunigungsmoduls 446 beschreibt die angestrebte Beschleunigungsfunktion für den Systemaufruf. Die Art des Grafikbeschleunigungsmoduls 446 kann einen systemspezifischen Wert aufweisen. Der WD wird speziell für das Grafikbeschleunigungsmodul 446 formatiert und kann in Form eines Befehls eines Grafikbeschleunigungsmoduls 446, eines Zeigers einer effektiven Adresse zu einer benutzerdefinierten Struktur, eines Zeigers einer effektiven Adresse zu einer Schlange von Befehlen oder einer beliebigen anderen Datenstruktur vorliegen, um die durch das Grafikbeschleunigungsmodul 446 zu leistende Arbeit zu beschreiben. In einer Ausführungsform ist der AMR-Wert der AMR-Zustand, der für den aktuellen Prozess zu verwenden ist. Der an das Betriebssystem geleitete Wert ist ähnlich zu der Anwendungseinstellung des AMR. Wenn die Implementierungen der Beschleuniger-Integrationsschaltung 436 und des Grafikbeschleunigungsmoduls 446 kein Benutzerberechtigungsmasken-Überschreibungsregister (UAMOR für User Authority Mask Override Register) unterstützen, kann das Betriebssystem den aktuellen UAMOR-Wert auf den AMR-Wert anwenden, bevor das AMR in dem Hypervisor-Aufruf weitergeleitet wird. Der Hypervisor 496 kann optional den aktuellen Wert des Berechtigungsmaske-Überschreibungsregisters (AMOR) anwenden, bevor er das AMR in das Prozesselement 483 setzt. In einer Ausführungsform ist der CSPR eines der Register 445, welche die effektive Adresse eines Bereichs in dem Adressraum 482 der Anwendung für das Grafikbeschleunigungsmodul 446 enthalten, um den Kontextzustand zu sichern und wiederherzustellen. Dieser Zeiger ist optional, wenn es nicht notwendig ist, einen Zustand zwischen Aufträgen zu sichern, oder wenn ein Auftrag unterbrochen wird. Der Kontext-Sicherungs-/Wiederherstellungs-Bereich kann ein fixierter Systemspeicher sein.
  • Bei Empfang des Systemaufrufs kann das Betriebssystem 495 verifizieren, dass die Anwendung 480 die Berechtigung zur Verwendung des Grafikbeschleunigungsmoduls 446 registriert und erhalten hat. Das Betriebssystem 495 ruft dann den Hypervisor 496 mit den in Tabelle 3 gezeigten Informationen auf. Tabelle 3 - Parameter für Hypervisor-Aufruf durch OS
    1 Ein Arbeitsdeskriptor (WD für Work Descriptor)
    2 Ein Wert eines Berechtigungsmaskenregisters (AMR für Authority Maks Register) (potentiell maskiert)
    3 Ein Kontext-Sicherungs-/Wiederherstellungs-Bereichszeiger mit effektiver Adresse (EA) (CSPR)
    4 Eine Prozess-ID (PID) und eine optionale Thread-ID (TID)
    5 Ein Datensatzzeiger für eine Beschleuniger-Nutzung (AURP für Accelerator Utilization Record Pointer) mit virtueller Adresse (VA)
    6 Die virtuelle Adresse des Speichersegment-Tabellenzeigers (SSTP für Storage Segment Table Pointer)
    7 Eine logische Unterbrechungsservicenummer (LISN für Logical Interrupt Service Number)
  • Bei Empfang des Hypervisor-Aufrufs verifiziert der Hypervisor 496, dass das Betriebssystem 495 die Berechtigung zur Verwendung des Grafikbeschleunigungsmoduls 446 registriert und erhalten hat. Der Hypervisor 496 setzt daraufhin das Prozesselement 483 in die verkettete Liste mit Prozesselementen für die entsprechende Art von Grafikbeschleunigungsmodul 446. Das Prozesselement kann die in Tabelle 4 gezeigten Informationen umfassen. Tabelle 4 - Prozesselement-Informationen
    1 Ein Arbeitsdeskriptor (WD für Work Descriptor)
    2 Ein Wert eines Berechtigungsmaskenregisters (AMR für Authority Maks Register) (potentiell maskiert)
    3 Ein Kontext-Sicherungs-/Wiederherstellungs-Bereichszeiger mit effektiver Adresse (EA) (CSPR)
    4 Eine Prozess-ID (PID) und eine optionale Thread-ID (TID)
    5 Ein Datensatzzeiger für eine Beschleuniger-Nutzung (AURP für Accelerator Utilization Record Pointer) mit virtueller Adresse (VA)
    6 Die virtuelle Adresse des Speichersegment-Tabellenzeigers (SSTP für Storage Segment Table Pointer)
    7 Eine logische Unterbrechungsservicenummer (LISN für Logical Interrupt Service Number)
    8 Unterbrechungsvektortabelle, die aus den Hypervisoraufruf-Parametern abgeleitet wird
    9 Ein Wert eines Zustandsregisters (SR für State Register)
    10 Eine logische Partitions-ID (LPID für Logical Partition ID)
    11 Datensatzzeiger für Hypervisor-Beschleuniger-Nutzung mit realer Adresse (RA)
    12 Das Speicherdeskriptorregister (SDR für Storage Descriptor Register)
  • In einer Ausführungsform initialisiert der Hypervisor mehrere Register 445 eines Beschleuniger-Integration-Slice 490.
  • Wie in 4F veranschaulicht, setzt eine Ausführungsform der Erfindung einen einheitlichen Speicher ein, der über einen gemeinsamen virtuellen Speicheradressraum adressierbar ist, der verwendet wird, um auf die physikalischen Prozessorspeicher 401-402 und die GPU-Speicher 420-423 zuzugreifen. In dieser Implementierung nutzen Operationen, die auf den GPUs 410-413 ausgeführt werden, den gleichen virtuellen/effektiven Speicheradressraum, um auf die Prozessorspeicher 401-402 zuzugreifen und umgekehrt, wodurch die Programmierbarkeit vereinfacht wird. In einer Ausführungsform wird ein erster Abschnitt auf dem virtuellen/effektiven Adressraum dem Prozessorspeicher 401 zugewiesen, ein zweiter Abschnitt dem zweiten Prozessorspeicher 402, ein dritter Abschnitt dem GPU-Speicher 420 und so weiter. Der gesamte virtuelle/effektive Speicherraum (manchmal als der effektive Adressraum bezeichnet) wird dadurch über jeden der Prozessorspeicher 401-402 und GPU-Speicher 420-423 verteilt, wodurch es einem beliebigen Prozessor oder einer beliebigen GPU ermöglicht wird, auf einen beliebigen physikalischen Speicher mit einer virtuellen Adresse zuzugreifen, die auf diesen Speicher abgebildet wird.
  • In einer Ausführungsform stellt eine Bias-/Kohärenz-Verwaltungsschaltungsanordnung 494A-494E in einer Ausführungsform einer oder mehrerer MMUs 439A-439E die Cache-Kohärenz zwischen den Caches der Host-Prozessoren (z. B. 405) und den GPUs 410-413 sicher und implementiert Bias-Techniken, welche die physikalischen Speicher angeben, in denen bestimmte Arten von Daten gespeichert werden sollen. Obgleich mehrere Instanzen der Bias-/Kohärenz-Verwaltungsschaltungsanordnung 494A-494E in 4F veranschaulicht sind, kann die Bias-/Kohärenz-Schaltungsanordnung innerhalb der MMU des einen oder der mehreren Host-Prozessoren 405 und/oder innerhalb der Beschleuniger-Integrationsschaltung 436 implementiert sein.
  • Eine Ausführungsform ermöglicht, dass ein an einer GPU angehängter Speicher 420-423 als Teil des Systemspeichers abgebildet und auf ihn unter Verwendung einer Technologie eines gemeinsam genutzten virtuellen Speichers (SVM für Shared Virtual Memory) zugegriffen wird, wobei es zu keiner typischen negativen Beeinflussung der Leistung kommt, die mit der Vollsystem-Cache-Kohärenz in Verbindung steht. Die Möglichkeit, auf den GPU-angehängten Speicher 420-423 als Systemspeicher ohne belastenden Cache-Kohärenzaufwand zuzugreifen, bietet eine vorteilhafte Betriebsumgebung für eine GPU-Entlastung. Diese Anordnung ermöglicht, dass die Software des Host-Prozessors 405 Operanden einrichtet und auf Rechenergebnisse zugreift, ohne dass der Aufwand traditioneller I/O-DMA-Datenkopien entsteht. Derartige herkömmliche Kopien umfassen Laufwerkaufrufe, Unterbrechungen und im Speicher abgebildete I/O-Zugriffe (MMIO für Memory Mapped I/O), welche im Vergleich zu einfachen Speicherzugriffen alle ineffizient sind. Zur gleichen Zeit kann die Möglichkeit, auf den GPU-angehängten Speicher 420-423 ohne Cache-Kohärenzaufwände zuzugreifen, für die Ausführungszeit eines abgeladenen Rechenvorgangs entscheidend sein. In Fällen mit wesentlichem Streaming-Schreibspeicherverkehr, kann zum Beispiel der Cache-Kohärenzaufwand die effektive Schreibbandbreite, welche die GPU 410-413 sieht, erheblich reduzieren. Die Effizienz einer Operandeneinrichtung, die Effizienz eines Ergebniszugriffs und die Effizienz eines GPU-Rechenvorgangs spielen alle eine Rolle bei der Bestimmung der Wirksamkeit einer GPU-Entlastung.
  • In einer Implementierung wird die Auswahl zwischen GPU-Bias und Host-Prozessor-Bias durch eine Bias-Nachverfolgungsdatenstruktur angetrieben. Es kann eine Bias-Tabelle verwendet werden, die zum Beispiel eine Seiten-Granular-Struktur sein kann (d. h. mit der Granularität einer Speicherseite gesteuert), welche 1 oder 2 Bits pro GPU-angehängter Speicherseite umfasst. Die Bias-Tabelle kann in einem gestohlenen Speicherbereich eines oder mehrerer GPU-angehängter Speicher 420-423 implementiert sein, mit oder ohne eines Bias-Cache in der GPU 410-413 (z. B. um häufig/kürzlich verwendete Einträge der Bias-Tabelle zwischenzuspeichern). Alternativ kann die gesamte Bias-Tabelle innerhalb der GPU gehalten werden.
  • In einer Implementierung wird auf den Bias-Tabelleneintrag, der jedem Zugriff auf den GPU-angehängten Speicher 420-423 zugeordnet ist, vor dem tatsächlichen Zugriff auf den GPU-Speicher zugegriffen, was die folgenden Operationen veranlasst. Als Erstes werden lokale Anfragen von der GPU 410-413, die ihre Seite in dem GPU-Bias finden, direkt an einen entsprechenden GPU-Speicher 420-423 weitergeleitet. Lokale Anfragen von der GPU, die ihre Seite im Host-Bias finden, werden an den Prozessor 405 weitergeleitet (z. B. über eine Hochgeschwindigkeitsverbindung, wie vorangehend erörtert). In einer Ausführungsform schließen Anfragen von dem Prozessor 405, welche die angeforderte Seite im Host-Prozessor-Bias finden, die Anfrage wie eine normale Speicherlesung ab. Alternativ können auf eine GPU-Biased-Seite ausgerichtete Anfragen an die GPU 410-413 weitergeleitet werden. Die GPU kann dann, wenn sie die Seite aktuell nicht verwendet, einen Übergang der Seite zu einem Host-Prozessor-Bias vollziehen.
  • Der Bias-Zustand einer Seite kann entweder durch einen auf Software basierenden Mechanismus, einen durch Hardware unterstützten auf Software basierenden Mechanismus oder, für eine begrenzte Zahl von Fällen, einen rein auf Hardware basierenden Mechanismus verändert werden.
  • Ein Mechanismus zur Veränderung des Bias-Zustands setzt einen API-Aufruf (z. B. OpenCL) ein, welcher wiederum das Gerätelaufwerk der GPU aufruft, welches wiederum eine Nachricht an die GPU sendet (oder in einem Befehlsdeskriptor einreiht), welche sie anleitet, den Bias-Zustand zu ändern und, für einige Übergänge, eine Cache-Leerungsoperation in dem Host durchzuführen. Die Cache-Leerungsoperation ist für einen Übergang von dem Bias des Host-Prozessors 405 zu einem Bias der GPU notwendig, jedoch nicht für einen entgegengesetzten Übergang.
  • In einer Ausführungsform wird die Cache-Kohärenz durch ein vorübergehendes Rendern von GPU-Biased-Seiten aufrechterhalten, die durch den Host-Prozessor 405 nicht zwischenspeicherbar sind. Um auf diese Seiten zuzugreifen, kann der Prozessor 405 einen Anfragezugriff von der GPU 410 durchführen, welche einen Zugriff in Abhängigkeit von der Implementierung sofort erteilen kann oder nicht. Um die Kommunikation zwischen dem Host-Prozessor 405 und der GPU 410 zu reduzieren, ist es daher von Vorteil sicherzustellen, dass die GPU-Biased-Seiten diejenigen sind, die für die GPU jedoch nicht für den Host-Prozessor 405 erforderlich sind und umgekehrt.
  • Grafikverarbeitungs-Pipeline
  • 5 stellt eine Grafikverarbeitungs-Pipeline 500 gemäß einer Ausführungsform dar. In einer Ausführungsform kann ein Grafikprozessor die dargestellte Grafikverarbeitungs-Pipeline 500 implementieren. Der Grafikprozessor kann innerhalb der parallelen Verarbeitungsuntersysteme enthalten sein, wie hierin beschrieben, wie etwa innerhalb des parallelen Prozessors 200 von 2A, der in einer Ausführungsform eine Variante des parallelen Prozessors (der parallelen Prozessoren) 112 von 1 ist. Die verschiedenen parallelen Verarbeitungssysteme können die Grafikverarbeitungs-Pipeline 500 über eine oder mehrere Instanzen der Parallelverarbeitungseinheit (z. B. die Parallelverarbeitungseinheit 202 von 2A), wie hierin beschrieben, implementieren. Zum Beispiel kann eine Shader-Einheit (z. B. Grafik-Multiprozessor 234 von 2C) konfiguriert sein, um die Funktionen einer Vertexverarbeitungseinheit 504, einer Tesselationssteuerung-Verarbeitungseinheit 508, einer Tesselationbewertung-Verarbeitungseinheit 512, einer Geometrieverarbeitungseinheit 516 und/oder einer Fragment-/Pixel-Verarbeitungseinheit 524 durchzuführen. Die Funktionen eines Daten-Assemblers 502, von Primitive-Assemblern 506, 514, 518, einer Tesselationseinheit 510, eines Rasterizers 522 und einer Rasteroperationseinheit 526 können auch durch andere Verarbeitungsmaschinen innerhalb eines Verarbeitungs-Clusters (z. B. Verarbeitungs-Cluster 214 von 2A) und einer entsprechenden Partitionierungseinheit (z. B. Partitionierungseinheit 220A-220N von 2A) durchgeführt werden. Die Grafikverarbeitungs-Pipeline 500 kann auch unter Verwendung von dedizierten Verarbeitungseinheiten für eine oder mehrere Funktionen implementiert sein. In einer Ausführungsform können ein oder mehrere Abschnitte der Grafikverarbeitungs-Pipeline 500 durch eine Parallelverarbeitungslogik innerhalb eines Mehrzweckprozessors (z. B. einer CPU) durchgeführt werden. In einer Ausführungsform können ein oder mehrere Abschnitte der Grafikverarbeitungs-Pipeline 500 auf einen On-Chip-Speicher (z. B. einen Parallelprozessorspeicher 222 wie in 2A) über eine Speicherschnittstelle 528 zugreifen, die eine Instanz der Speicherschnittstelle 218 von 2A sein kann.
  • In einer Ausführungsform ist der Daten-Assembler 502 eine Verarbeitungseinheit, die Vertexdaten für Flä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 Vertex-Shader-Programme, die Belichtung und Transformation von Vertexdaten, ausführt, wie durch die Vertex-Shader-Programme spezifiziert. Die Vertexverarbeitungseinheit 504 liest Daten, die in einem Cache, lokalen Speicher oder Systemspeicher gespeichert sind, zur Verwendung bei der Verarbeitung der Vertexdaten und kann programmiert werden, um die Vertexdaten von einer objektbasierten Koordinatendarstellung in eine Weltkoordinatenraum oder einen normalisierten Vorrichtungskoordinatenraum umzuwandeln.
  • Eine erste Instanz eines Primitive-Assemblers 506 empfängt Vertex-Attribute von der Vertexverarbeitungseinheit 504. Der Primitive-Assembler 506 speichert beim Lesen nach Bedarf Vertex-Attribute und erstellt Grafik-Primitive zur Verarbeitung durch eine Tesselationssteuerung-Verarbeitungseinheit 508. Die Grafik-Primitive umfassen Dreiecke, Liniensegmente, Punkte, Patches und so weiter, wie sie durch verschiedene Grafikverarbeitung-Anwendungsprogrammierschnittstellen (APIs für Application Programming Interfaces) unterstützt werden.
  • Die Tesselationssteuerung-Verarbeitungseinheit 508 behandelt die eingegebenen Vertices wie Steuerpunkte für einen geometrischen Patch. Die Steuerpunkte werden von einem Eingabedarstellung von dem Patch (z. B. die Basen des Patches) in eine Darstellung umgewandelt, die zur Verwendung in einer Flächenbewertung durch die Tesselationbewertung-Verarbeitungseinheit 512 geeignet ist. Die Tesselationssteuerung-Verarbeitungseinheit 508 kann auch Tesselationsfaktoren für Kanten geometrischer Patches errechnen. Der Tesselationsfaktor gilt für eine einzelne Kante und quantifiziert eine von einer Ansicht abhängige Detailgenauigkeit, die der Kante zugeordnet ist. Eine Tesselationseinheit 510 ist konfiguriert, um die Tesselationsfaktoren für Kanten eines Patches zu empfangen und um den Patch in mehrere geometrische Primitive, wie etwa eine Linie, ein Dreieck oder vierseitige Primitive zu tesselieren, die an eine Tesselationbewertung-Verarbeitungseinheit 512 übertragen werden. Die Tesselationbewertung-Verarbeitungseinheit 512 arbeitet an parametrisierten Koordinaten des unterteilten Patches, um eine Flächendarstellung und Vertex-Attribute für jeden Vertex zu erzeugen, der den geometrischen Primitiven zugeordnet ist.
  • Eine zweite Instanz eines Primitive-Assemblers 514 empfängt Vertex-Attribute von der Tesselationbewertung-Verarbeitungseinheit 512, wobei sie gespeicherte Vertex-Attribute nach Bedarf liest, und erstellt Grafik-Primitive zur Verarbeitung durch die Geometrieverarbeitungseinheit 516. Die Geometrieverarbeitungseinheit 516 ist eine programmierbare Ausführungseinheit, die Geometrie-Shader-Programme ausführt, um Grafik-Primitive, die von dem Primitive-Assembler 514 empfangen werden, wie durch die Geometrie-Shader-Programme spezifiziert, umzuwandeln. In einer Ausführungsform ist die Geometrieverarbeitungseinheit 516 programmiert, um die Grafik-Primitive in ein oder mehrere neue Grafik-Primitive zu unterteilen und Parameter zu berechnen, die verwendet werden, um die neuen Grafik-Primitive zu rasterisieren.
  • In einigen Ausführungsformen kann die Geometrieverarbeitungseinheit 516 Elemente in dem Geometriestrom hinzufügen oder löschen. Die Geometrieverarbeitungseinheit 516 gibt an den Primitive-Assembler 518 die Parameter und Vertices aus, die neue Grafik-Primitive spezifizieren. Der Primitive-Assembler 518 empfängt die Parameter und Vertices von der Geometrieverarbeitungseinheit 516 und erstellt Grafik-Primitive zur Verarbeitung durch eine Ansichtsfenstermaßstabs-, Aussortierungs- und Zuschneidungseinheit 520. Die Geometrieverarbeitungseinheit 516 liest Daten, die in dem Parallelprozessorspeicher oder dem Systemspeicher gespeichert sind, zur Verwendung bei der Verarbeitung der Geometriedaten. Die Ansichtsfenstermaßstabs-, Aussortierungs- und Zuschneidungseinheit 520 führt ein Zuschneiden, Aussortieren und Ansichtsfenstermaßstabsgeben durch und gibt verarbeitete Grafik-Primitive an einen Rasterizer 522 aus.
  • Der Rasterizer 522 kann ein Tiefenaussortieren und andere tiefenbasierte Optimierungen durchführen. Der Rasterizer 522 führt zudem eine Abtastumwandlung an den neuen Grafik-Primitiven durch, um Fragmente zu erzeugen und diese Fragmente und zugeordnete Abdeckungsdaten an die Fragment/Pixel-Verarbeitungseinheit 524 auszugeben. Die Fragment/Pixel-Verarbeitungseinheit 524 ist eine programmierbare Ausführungseinheit, die konfiguriert ist, um Fragment-Shader-Programme oder Pixel-Shader-Programme auszuführen. Die Fragment/Pixel-Verarbeitungseinheit 524 transformiert Fragmente oder Pixel, die von dem Rasterizer 522 empfangen werden, wie durch die Fragment- oder Pixel-Shader-Programme spezifiziert. Zum Beispiel kann die Fragment/Pixel-Verarbeitungseinheit 524 programmiert sein, um Operationen durchzuführen, die unter anderem eine Texturabbildung, Schattierung, Mischung, Texturkorrektur und Perspektivenkorrektur umfassen, um schattierte Fragmente oder Pixel zu erzeugen, die an eine Rasteroperationseinheit 526 ausgegeben werden. Die Fragment/Pixel-Verarbeitungseinheit 524 kann Daten, die entweder in dem Parallelprozessorspeicher oder dem Systemspeicher gespeichert sind, zur Verwendung bei der Verarbeitung der Fragmentdaten lesen. Fragment- oder Pixel-Shader-Programme können konfiguriert sein, um Sample, Pixel, Kacheln oder andere Granularitäten in Abhängigkeit von der Abtastrate zu schattieren, welche für die Verarbeitungseinheiten konfiguriert ist.
  • Die Rasteroperationseinheit 526 ist eine Verarbeitungseinheit, die Rasteroperationen durchführt, einschließlich unter anderem Schablonen, Z-Test, Mischen und dergleichen, und Pixeldaten als verarbeitete Grafikdaten ausgibt, die in einem Grafikspeicher (z. B. Parallelprozessorspeicher 222 wie in 2A und/oder Systemspeicher 104 wie in 1) gespeichert werden, auf einer oder mehreren Anzeigevorrichtungen 110 angezeigt werden oder durch einen oder mehrere Prozessoren 102 und/oder parallele Prozessoren 112 weiter verarbeitet werden. In einigen Ausführungsformen ist die Rasteroperationseinheit 526 konfiguriert, um Z- oder Farbdaten zu komprimieren, die in einen Speicher geschrieben werden, oder um Z- oder Farbdaten zu dekomprimieren, die aus dem Speicher gelesen werden.
  • Überblick über das maschinelle Lernen
  • Die vorangehend beschriebene Architektur kann angewandt werden, um Training- und Inferenz-Operationen unter Verwendung von Maschinenlernmodellen durchzuführen. Das maschinelle Lernen ist seit jeher erfolgreich bei der Lösung vieler Arten von Aufgaben. Die Rechenvorgänge, die stattfinden, wenn Maschinenlern-Algorithmen (z. B. neuronale Netzwerke) trainiert und verwendet werden, eignen sich grundsätzlich für effiziente parallele Implementierungen. Folglich haben parallele Prozessoren, wie etwa Allzweck-Grafikprozessoren (GPGPUs), immer eine wichtige Rolle bei der praktischen Implementierung von Deep Neural Networks gespielt. Parallele Grafikprozessoren, die eine Architektur mit Einzelanweisung und mehreren Threads (SIMT für Single Instruction, Multiple Thread) aufweisen, sind ausgelegt, um den Parallelverarbeitungsbetrag in der Grafik-Pipeline zu maximieren. In einer SIMT-Architektur versuchen Gruppen von parallelen Threads, Programmanweisungen so oft wie möglich synchron auszuführen, um die Verarbeitungseffizienz zu erhöhen. Die durch Implementierungen paralleler Maschinenlern-Algorithmen bereitgestellte Effizienz ermöglicht die Verwendung von Netzwerken mit hoher Kapazität und der Netzwerke, die auf größeren Datensätzen trainiert werden.
  • Ein Maschinenlern-Algorithmus ist ein Algorithmus, der basierend auf einem Datensatz lernen kann. Ausführungsformen von Maschinenlern-Algorithmen können ausgelegt sein, um hochgradige Abstraktionen innerhalb eines Datensatzes zu modellieren. Zum Beispiel können Bilderkennungsalgorithmen verwendet werden, um zu bestimmen, zu welcher aus mehreren Kategorien eine gegebene Eingabe gehört. Regressionsalgorithmen können einen numerischen Wert einer gegebenen Eingabe ausgeben und Mustererkennungsalgorithmen können verwendet werden, um einen übersetzten Text zu erzeugen oder um einen Text in Sprache umzuwandeln und/oder zur Spracherkennung.
  • Ein Beispiel für einen Maschinenlern-Algorithmus ist ein neuronales Netz. Es gibt viele Arten neuronaler Netze. Eine einfache Art eines neuronalen Netzes ist ein vorwärtsgerichtetes Netz (Feedforwad-Netz). Ein vorwärtsgerichtetes Netz kann als azyklischer Graf implementiert sein, in dem die Knoten in Schichten angeordnet sind. Für gewöhnlich weist eine Netzstruktur eines vorwärtsgerichteten Netzes eine Eingabeschicht und eine Ausgabeschicht auf, die durch mindestens eine versteckte Schicht getrennt sind. Die versteckte Schicht wandelt die durch die Eingabeschicht empfangene Eingabe in eine Darstellung um, die zur Erzeugung der Ausgabe in der Ausgabeschicht nützlich ist. Die Netzwerkknoten sind über Kanten vollständig mit den Knoten benachbarter Schichten verbunden, wobei es jedoch zwischen Knoten innerhalb jeder Schicht keine Kanten gibt. Daten, die an den Knoten einer Eingabeschicht eines vorwärtsgerichteten Netzes empfangen werden, werden zu den Knoten der Ausgabeschicht über eine Aktivierungsfunktion, welche Zustände von Knoten jeder aufeinanderfolgenden Schicht in dem Netzwerk berechnet, basierend auf Koeffizienten („Gewichtungen“), die jeweils jedem der Kanten, welche die Schichten verbinden, zugeordnet sind, verbreitet (d. h. „vorwärtsgerichtet“). In Abhängigkeit von dem spezifischen Modell, das durch den Algorithmus dargestellt wird, der ausgeführt wird, kann die Ausgabe von dem neuronalen Netzalgorithmus verschiedene Formen annehmen.
  • Bevor ein Maschinenlern-Algorithmus verwendet werden kann, um ein bestimmtes Problem zu modellieren, wird ein Algorithmus unter Verwendung eines Trainingsdatensatzes trainiert. Das Trainieren eines neuronalen Netzes umfasst ein Auswählen einer Netzwerkstruktur, ein Verwenden eines Satzes Trainingsdaten, die ein Problem darstellen, welches durch das Netz zu modellieren ist, und ein Einstellen der Gewichtungen, bis das Netzmodell mit einer minimalen Fehlerrate für alle Instanzen des Trainingsdatensatzes arbeitet. Zum Beispiel wird während eines überwachten Lerntrainingsprozesses für ein neuronales Netz die Ausgabe, die durch das Netz erzeugt wird, wenn die Eingabe eine Instanz in einem Trainingsdatensatz darstellt, mit der als „korrekt“ gekennzeichneten Ausgabe für diese Instanz verglichen, es wird ein Fehlersignal, welches die Differenz zwischen der Ausgabe und der gekennzeichneten Ausgabe darstellt, berechnet und die Gewichtungen, welche den Verbindungen zugeordnet sind, werden eingestellt, um diesen Fehler zu minimieren, wenn das Fehlersignal durch die Schichten des Netzes zurück gesendet wird. Das Netz wird als „trainiert“ betrachtet, wenn die Fehler für jede der Ausgaben, die aus den Instanzen des Trainingsdatensatzes erzeugt werden, minimiert sind.
  • Die Genauigkeit eines Maschinenlern-Algorithmus kann durch die Qualität des Datensatzes, welcher verwendet wird, um den Algorithmus zu trainieren, erheblich beeinflusst werden. Der Trainingsprozess kann rechenintensiv sein und auf einem konventionellen Allzweckprozessor eine erhebliche Menge Zeit erfordern. Folglich wird eine parallele Verarbeitungshardware verwendet, um viele Arten von Maschinenlern-Algorithmen zu trainieren. Dies ist besonders nützlich, wenn das Training von neuronalen Netzen optimiert wird, da sich durchgeführte Rechenvorgänge beim Einstellen der Koeffizienten in den neuronalen Netzen natürlich für parallele Implementierungen eignen. Es wurden insbesondere viele Maschinenlern-Algorithmen und Softwareanwendungen angepasst, um die Parallelverarbeitungshardware innerhalb von Allzweck-Grafikprozessorvorrichtungen zu nutzen.
  • 6 ist eine verallgemeinerte Darstellung eines Maschinenlern-Software-Stacks 600. Eine Maschinenlernanwendung 602 kann konfiguriert sein, um ein neuronales Netz unter Verwendung eines Trainingsdatensatzes zu trainieren oder um ein trainiertes tiefes neuronales Netz (Deep Neural Network) zu verwenden, um eine Maschinenintelligenz zu implementieren. Die Maschinenlernanwendung 602 kann eine Trainings- und Inferenzfunktion für ein neuronales Netz und/oder spezielle Software aufweisen, die verwendet werden kann, um ein neuronales Netz vor einer Bereitstellung zu trainieren. Die Maschinenlernanwendung 602 kann jede Art von Maschinenintelligenz implementieren, einschließlich unter anderem eine Bilderkennung, Zuordnung und Lokalisierung, autonome Navigation, Sprachsynthese, medizinische Bildgebung oder Sprachübersetzung.
  • Eine Hardwarebeschleunigung für die Maschinenlernanwendung 602 kann über einen Maschinenlern-Framework 604 ermöglicht werden. Der Maschinenlern-Framework 604 kann eine Bibliothek aus Maschinenlern-Stammfunktionen (Primitive) bereitstellen. Maschinenlern-Stammfunktionen sind grundlegende Operationen, die üblicherweise durch Maschinenlern-Algorithmen durchgeführt werden. Ohne den Maschinenlern-Framework 604 müssten Entwickler von Maschinenlern-Algorithmen die Hauptrechenlogik, die dem Maschinenlern-Algorithmus zugeordnet ist, schaffen und optimieren und dann die Rechenlogik erneut optimieren, wenn neue parallele Prozessoren entwickelt werden. Stattdessen kann die Maschinenlernanwendung konfiguriert sein, um die notwendigen Rechenvorgänge unter Verwendung der Stammfunktionen durchzuführen, die durch den Maschinenlern-Framework 604 bereitgestellt werden. Beispielhafte Stammfunktionen umfassen Tensorfaltungen, Aktivierungsfunktionen und Pooling, welche Rechenvorgänge sind, die durchgeführt werden, während ein faltendes neuronales Netz (CNN für Convolutional Neural Network) trainiert wird. Der Maschinenlern-Framework 604 kann zudem Stammfunktionen bereitstellen, um grundlegende lineare Algebra-Unterprogramme zu implementieren, die durch Maschinenlern-Algorithmen durchgeführt werden, wie etwa Matrix- und Vektoroperationen.
  • Der Maschinenlern-Framework 604 kann eingegebene Daten, die von der Maschinenlernanwendung 602 empfangen werden, verarbeiten und die angemessene Eingabe in ein Rechen-Framework 606 erzeugen. Der Rechen-Framework 606 kann die zugrunde liegenden Anweisungen, die dem GPGPU-Treiber 608 bereitgestellt werden, abstrahieren, um zu ermöglichen, dass der Maschinenlern-Framework 604 von einer Hardwarebeschleunigung über die GPGPU-Hardware 610 profitiert, ohne dass der Maschinenlern-Framework 604 über eingehendes Wissen über die Architektur der GPGPU-Hardware 610 verfügen muss. Darüber hinaus kann der Rechen-Framework 606 eine Hardwarebeschleunigung für den Maschinenlern-Framework 604 über eine Vielzahl von Arten und Generierungen der GPGPU-Hardware 610 ermöglichen.
  • GPGPU-Maschinenlernbeschleunigung
  • 7 stellt einen Allzweck-Grafikprozessor 700 gemäß einer Ausführungsform dar. In einer Ausführungsform kann der Allzweck-Grafikprozessor (GPGPU) 700 konfiguriert sein, um bei der Verarbeitung der Art von Rechenlasten, die einem Training tiefer neuronaler Netze zugeordnet sind, besonders effizient zu sein. Zudem kann der GPGPU 700 direkt mit anderen Instanzen des GPGPU verknüpft sein, um ein Multi-GPU-Cluster zu erstellen, um eine Trainingsgeschwindigkeit für besonders tiefe neuronale Netze zu verbessern.
  • Der GPGPU 700 umfasst eine Host-Schnittstelle 702, um eine Verbindung mit einem Host-Prozessor zu ermöglichen. In einer Ausführungsform ist die Host-Schnittstelle 702 eine PCI-Express-Schnittstelle. Die Host-Schnittstelle kann jedoch auch eine herstellerspezifische Kommunikationsschnittstelle oder ein herstellerspezifischer Kommunikations-Fabric sein. Der GPGPU 700 empfängt Befehle von dem Host-Prozessor und verwendet eine globale Planungseinrichtung 704, um Ausführungsthreads, welche diesen Befehlen zugeordnet sind, auf einen Satz von Rechen-Clustern 706A-706H zu verteilen. Die Rechen-Cluster 706A-706H teilen einen Cache-Speicher 708. Der Cache-Speicher 708 kann als High-Level-Cache für Cache-Speicher innerhalb der Rechen-Cluster 706A-706H dienen.
  • Der GPGPU 700 umfasst einen Speicher 714A-B, der mit den Rechen-Clustern 706A-H über einen Satz Speichersteuerungen 712A-712B gekoppelt ist. In verschiedenen Ausführungsformen kann der Speicher 714A-714B verschiedene Arten von Speichervorrichtungen umfassen, einschließlich eines dynamischen Direktzugriffspeichers (DRAM für Dynamic Random Access Memory) oder eines Grafik-Direktzugriffspeichers, wie etwa eines synchronen Grafik-Direktzugriffspeichers (SGRAM für Synchronous Graphics Random Access Memory), einschließlich eines Speichers mit Grafik-Doppeldatenraten (GDDR für Graphics Double Data Rate). In einer Ausführungsform kann der Speicher 714A-714N auch einen 3D-Stack-Speicher umfassen, einschließlich, jedoch nicht beschränkt auf einen Speicher mit hoher Bandbreite (HBM für High Bandwidth Memory).
  • In einer Ausführungsform umfasst jedes der Rechen-Cluster 706A-706H einen Satz Grafik-Multiprozessoren, wie etwa den Grafik-Multiprozessor 400 von 4A. Die Grafik-Multiprozessoren des Rechen-Clusters umfassen mehrere Arten von Ganzzahl- und Gleitkomma-Logikeinheiten, die Rechenvorgänge mit einem weiten Bereich von Genauigkeiten, einschließlich für Maschinenlern-Rechenvorgänge geeigneten, durchführen können. Zum Beispiel und in einer Ausführungsform kann mindestens ein Untersatz der Gleitkomma-Einheiten in jedem der Rechen-Cluster 706A-H konfiguriert sein, um 16-Bit- oder 32-Bit-Gleitkomma-Operationen durchzuführen, während ein anderer Untersatz der Gleitkomma-Einheiten konfiguriert sein kann, um 64-Bit-Gleitkomma-Operationen durchzuführen.
  • Mehrere Instanzen des GPGPU 700 können konfiguriert sein, um als Rechen-Cluster zu arbeiten. Der Kommunikationsmechanismus, der durch das Rechen-Cluster zur Synchronisation und zum Datenaustausch verwendet wird, variiert je nach Ausführungsform. In einer Ausführungsform kommunizieren die mehreren Instanzen des GPGPU 700 über die Host-Schnittstelle 702. In einer Ausführungsform umfasst der GPGPU 700 einen I/O-Hub 709, der mit dem GPGPU 700 mit einer GPU-Verbindung 710 gekoppelt ist, welche eine direkte Verbindung zu anderen Instanzen des GPGPU ermöglicht. In einer Ausführungsform ist die GPU-Verbindung 710 mit einer GPU-zu-GPU-Brücke gekoppelt, die eine Kommunikation und Synchronisation zwischen mehreren Instanzen des GPGPU 700 ermöglicht. In einer Ausführungsform ist die GPU-Verbindung 710 mit einer Hochgeschwindigkeitsverbindung verbunden, um Daten zu empfangen und an andere GPGPUs oder parallele Prozessoren zu senden. In einer Ausführungsform befinden sich die mehreren Instanzen des GPGPU 700 in separaten Datenverarbeitungssystemen und kommunizieren über eine Netzwerkvorrichtung, die über die Host-Schnittstelle 702 zugänglich ist. In einer Ausführungsform kann die GPU-Verbindung 710 konfiguriert sein, um eine Verbindung mit einem Host-Prozessor zusätzlich oder als Alternative zu der Host-Schnittstelle 702 zu ermöglichen.
  • Während die veranschaulichte Konfiguration des GPGPU 700 konfiguriert sein kann, um neuronale Netze zu trainieren, stellt eine Ausführungsform eine alternative Konfiguration des GPGPU 700 bereit, die zur Bereitstellung innerhalb einer Hochleistungs- oder Niedrigleistungs-Inferenzplattform konfiguriert sein kann. In einer Inferenz-Konfiguration umfasst der GPGPU 700 weniger Rechen-Cluster 706A-706H als die Trainingskonfiguration. Zudem kann die Speichertechnologie, die dem Speicher 714A-714B zugeordnet ist, zwischen Inferenz- und Trainingskonfigurationen abweichen. In einer Ausführungsform kann die Inferenzkonfiguration des GPGPU 700 inferenzspezifische Anweisungen unterstützen. Zum Beispiel kann eine Inferenzkonfiguration eine Unterstützung für eine oder mehrere 8-Bit-Ganzzahl-Skalarprodukt-Anweisungen bereitstellen, die während Inferenzoperationen für bereitgestellte neuronale Netze gemeinsam verwendet werden.
  • 8 stellt ein Multi-GPU-Rechensystem 800 gemäß einer Ausführungsform dar. Das Multi-GPU-Rechensystem 800 kann einen Prozessor 802 umfassen, der mit mehreren GPGPUs 806A-806D über einen Host-Schnittstellen-Switch 804 gekoppelt ist. Der Host-Schnittstellen-Switch 804 ist in einer Ausführungsform eine PCI-Express-Schaltvorrichtung, die den Prozessor 802 mit einem PCI-Ecpress-Bus koppelt, über den der Prozessor 802 mit dem Satz GPGPUs 806A-806D kommunizieren kann. Jeder der mehreren GPGPUs 806A-806D kann eine Instanz des GPGPU 700 von 7 sein. Die GPGPUs 806A-806D können über einen Satz Hochgeschwindigkeits-Punkt-zu-Punkt-GPUs mit GPU-Verbindungen 816 verbunden sein. Die Hochgeschwindigkeits-GPU-zu-GPU-Verbindung kann mit jedem der GPGPUs 806A-806D über eine dedizierte GPU-Verbindung, wie etwa die GPU-Verbindung 710 wie in 7, verbunden sein. Die P2P-GPU-Verbindungen 816 ermöglichen eine direkte Kommunikation zwischen jedem der GPGPUs 806A-806D, ohne eine Kommunikation über den Host-Schnittstellenbus zu erfordern, mit dem der Prozessor 802 verbunden ist. Bei einem GPU-zu-GPU-Verkehr, der zu den P2P-GPU-Verbindungen geleitet wird, bleibt der Host-Schnittstellenbus für einen Systemspeicherzugriff oder zur Kommunikation mit anderen Instanzen des Multi-GPU-Rechensystems 800, zum Beispiel über eine oder mehrere Netzwerkvorrichtungen, verfügbar. Während in der dargestellten Ausführungsform die GPGPUs 806A-D mit dem Prozessor 802 über den Host-Schnittstellen-Switch 804 verbunden sind, umfasst der Prozessor 802 in einer Ausführungsform eine direkte Unterstützung für die P2P-GPU-Verbindungen 816 und kann mit den GPGPUs 806A-806D direkt verbunden sein.
  • Implementierungen neuronaler Netze für das maschinelle Lernen
  • Die durch die hierin beschriebenen Ausführungsformen bereitgestellte Datenverarbeitungsarchitektur kann konfiguriert sein, um die Arten einer parallelen Verarbeitung durchzuführen, die zum Trainieren und Bereitstellen neuronaler Netze zum Maschinenlernen besonders geeignet sind. Ein neuronales Netz kann als Netz aus Funktionen mit einer Grafenbeziehung verallgemeinert werden. Gemäß dem Stand der Technik gibt es viele verschiedene Arten von neuronalen Netzimplementierungen, die beim maschinellen Lernen verwendet werden. Eine Beispielart eines neuronalen Netzes ist das vorwärtsgerichtete Netz, wie zuvor beschrieben wurde.
  • Eine zweite Beispielart eines neuronalen Netzes ist das Convolutional Neural Network (CNN). Ein CNN ist ein spezialisiertes vorwärtsgerichtetes neuronales Netz zum Verarbeiten von Daten mit einer bekannten, gitterartigen Topologie, wie etwa Bilddaten. Folglich werden CNNs häufig für Rechen-, Visions- und Bilderkennungsanwendungen verwendet, wobei sie jedoch auch für andere Arten der Mustererkennung, wie etwa eine Sprachverarbeitung, verwendet werden können. Die Knoten in der CNN-Eingabeschicht sind in einem Satz von „Filtern“ (Merkmalsdetektoren, die durch die jeweiligen Felder inspiriert sind, welche sich in der Netzhaut befinden) organisiert und die Ausgabe jedes Satzes von Filtern wird zu Knoten in nachfolgenden Schichten des Netzes gesendet. Die Rechenvorgänge für einen CNN umfassen die mathematische Faltungsoperation für jeden Filter, um die Ausgabe dieses Filters zu erzeugen. Eine Faltung ist eine spezielle Art einer mathematischen Operation, die durch zwei Funktionen durchgeführt wird, um eine dritte Funktion zu erzeugen, die eine modifizierte Version einer der zwei ursprünglichen Funktionen ist. In der Terminologie faltender Netze kann die erste Funktion der Faltung als die Eingabe bezeichnet werden, während die zweite Funktion als der Faltungskemel bezeichnet wird. Die Ausgabe kann als Merkmalsabbildung bezeichnet werden. Beispielsweise kann die Eingabe in eine Faltungsschicht ein mehrdimensionaler Array aus Daten sein, der die verschiedenen Farbkomponenten eines eingegebenen Bildes definiert. Der Faltungskernel kann ein mehrdimensionaler Array aus Parametern sein, in dem die Parameter durch den Trainingsvorgang für das neuronale Netz angepasst werden.
  • Rekurrente neuronale Netze (RNNs für Recurrent Neural Networks) sind eine Gruppe vorwärtsgerichteter neuronaler Netze, die Rückkopplungsverbindungen zwischen Schichten umfassen. Die RNNs ermöglichen eine Modellierung aufeinanderfolgender Daten, indem sie Parameterdaten über unterschiedliche Teile des neuronalen Netzes verteilen. Die Architektur für ein RNN umfasst Zyklen. Die Zyklen stellen den Einfluss eines vorliegenden Werts einer Variablen auf ihren eigenen Wert zu einem zukünftigen Zeitpunkt dar, da zumindest ein Teil der von dem RNN ausgegebenen Daten als Rückkopplung zum Verarbeiten einer nachfolgenden Eingabe in einer Abfolge verwendet wird. Diese Merkmale machen die RNNs aufgrund ihrer variablen Beschaffenheit, in der Sprachdaten zusammengefügt werden können, für eine Sprachverarbeitung besonders nützlich.
  • Die im Folgenden beschriebenen Figuren stellen beispielhafte vorwärtsgerichtete CNN- und RNN-Netze dar und beschreiben einen allgemeinen Vorgang zum jeweiligen Trainieren und Bereitstellen jeder dieser Netzarten. Es versteht sich, dass diese Beschreibungen beispielhaft sind und sich nicht auf eine spezifische hierin beschriebene Ausführungsform beschränken und die dargestellten Konzepte allgemein auf Deep Neural Networks und Maschinenlerntechniken im Allgemeinen angewandt werden können.
  • Die vorangehend beschriebenen beispielhaften neuronalen Netze können verwendet werden, um ein Deep Learning (maschinelles Lernen) durchzuführen. Deep Learning ist ein Maschinenlemen, das Deep Neural Networks verwendet. Die Deep Neural Networks, die beim maschinellen Lernen verwendet werden, sind künstliche neuronale Netze, die aus mehreren versteckten Schichten bestehen, im Gegensatz zu Shallow Neural Networks (flachen neuronalen Netzen), die nur eine einzige versteckte Schicht umfassen. Tiefere neuronale Netze sind im Allgemeinen bei einem Training rechenintensiver. Die zusätzlichen versteckten Schichten des Netzes ermöglichen jedoch eine mehrstufige Mustererkennung, die zu einer reduzierten Ausgabefehlerrate im Vergleich zu flachen Maschinenlerntechniken führt.
  • Deep Neural Networks, die beim Deep Learning in der Regel verwendet werden, umfassen ein Frontend-Netz zum Durchführen einer Merkmalserkennung, das mit einem Backend-Netz verbunden ist, welches ein mathematisches Modell darstellt, das Operationen (z. B. Objektklassifizierung, Spracherkennung usw.) basierend auf der Merkmalsdarstellung, die dem Modell bereitgestellt wird, durchführen kann. Das Deep Learning ermöglicht die Durchführung eines maschinellen Lernens, ohne ein Entwickeln eigens geschaffener Funktionen durchführen zu müssen, was für das Modell durchgeführt werden muss. Stattdessen können Deep Neural Networks Funktionen basierend auf der statistischen Struktur oder Korrelation innerhalb der eingegebenen Daten lernen. Die gelernten Funktionen können einem mathematischen Modell bereitgestellt werden, das die erfassten Funktionen auf eine Ausgabe abbildet. Das mathematische Modell, das durch das Netz verwendet wird, ist im Allgemeinen speziell für die spezifische Aufgabe, die durchgeführt werden muss, und es werden unterschiedliche Modelle verwendet, um unterschiedliche Aufgaben zu erfüllen.
  • Sobald das neuronale Netz strukturiert wurde, kann ein Lemmodell auf das Netz angewandt werden, um das Netzwerk dazu zu trainieren, spezifische Aufgaben zu vollbringen. Das Lernmodell beschreibt, wie die Gewichtungen innerhalb des Modells eingestellt werden müssen, um die Ausgabefehlerrate des Netzes zu reduzieren. Eine Rückführung von Fehlern ist ein häufig eingesetztes Verfahren, das verwendet wird, um neuronale Netze zu trainieren. Ein eingegebener Vektor wird dem Netz zur Verarbeitung vorgestellt. Die Ausgabe des Netzes wird mit der gewünschten Ausgabe unter Verwendung einer Verlustfunktion verglichen und ein Fehlerwert wird für jeden der Neuronen in der Ausgabeschicht berechnet. Die Fehlerwerte werden dann zurückgeführt, bis jedes Neuron einen zugeordneten Fehlerwert aufweist, der ungefähr seinem Beitrag zu der ursprünglichen Ausgabe entspricht. Das Netz kann dann von diesen Fehlern unter Verwendung eines Algorithmus, wie etwa des stochastischen Gradientenabstiegsalgorithmus, lernen, um die Gewichtungen des neuronalen Netzes zu aktualisieren.
  • 9A-9B stellen ein beispielhaftes Convolutional Neural Network dar. 9A stellt verschiedene Schichten innerhalb eines CNN dar. Wie in 9A gezeigt, kann ein beispielhaftes CNN, das verwendet wird, um eine Bildverarbeitung zu modellieren, eine Eingabe 902 empfangen, welche die rote, grüne und blaue (RGB) Komponente eines eingegebenen Bildes beschreibt. Die Eingabe 902 kann durch mehrere Faltungsschichten (z. B. Faltungsschicht 904, Faltungsschicht 906) verarbeitet werden. Die Ausgabe von den mehreren Faltungsschichten kann optional durch einen Satz vollständig verbundener Schichten 908 verarbeitet werden. Neuronen in einer vollständig verbundenen Schicht weisen vollständige Verbindungen zu allen Aktivierungen in der vorherigen Schicht auf, wie zuvor für ein vorwärtsgerichtetes Netz beschrieben wurde. Die Ausgabe von den vollständig verbundenen Schichten 908 kann verwendet werden, um ein von dem Netz ausgegebenes Ergebnis zu erzeugen. Die Aktivierungen innerhalb der vollständig verbundenen Schichten 908 können unter Verwendung einer Matrixmultiplikation statt einer Faltung berechnet werden. Nicht alle CNN-Implementierungen nutzen die vollständig verbundenen Schichten 908. Zum Beispiel kann in manchen Implementierungen die Faltungsschicht 906 eine Ausgabe für das CNN erzeugen.
  • Die Faltungsschichten sind vereinzelt verbunden, was einen Unterschied zu traditionellen neuronalen Netzkonfigurationen darstellt, bei denen vollständig verbundenen Schichten 908 vorliegen. Die traditionellen neuronalen Netzschichten sind vollständig verbunden, sodass jede Ausgabeeinheit mit jeder Eingabeeinheit in Wechselwirkung tritt. Die Faltungsschichten sind jedoch vereinzelt verbunden, da die Ausgabe der Faltung eines Felds in die Knoten der nachfolgenden Schicht, wie dargestellt, eingegeben wird (anstelle der jeweiligen Zustandswerte jedes der Knoten in dem Feld). Die Kernel, die den Faltungsschichten zugeordnet sind, führen Faltungsoperationen aus, deren Ausgabe an die nächste Schicht gesendet wird. Die Dimensionsreduktion, die innerhalb der Faltungsschichten durchgeführt wird, ist ein Aspekt, der es dem CNN ermöglicht, zu skalieren, um große Bilder zu verarbeiten.
  • 9B stellt beispielhafte Berechnungsstufen innerhalb einer Faltungsschicht eines CNN dar. Eine Eingabe in eine Faltungsschicht 912 eines CNN kann in drei Stufen einer Faltungsschicht 914 verarbeitet werden. Die drei Stufen können eine Faltungsstufe 916, eine Detektorstufe 918 und eine Pooling-Stufe 920 umfassen. Die Faltungsschicht 914 kann dann Daten an eine nachfolgende Faltungsschicht ausgeben. Die letzte Faltungsschicht des Netzes kann Merkmalsabbildung-Ausgabedaten erzeugen oder eine Eingabe in eine vollständig verbundene Schicht bereitstellen, um zum Beispiel 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 umfassen, die eine beliebige Transformation ist, die als lineare Transformation plus eine Translation spezifiziert werden kann. Affine Transformationen umfassen Rotationen, Translationen, Skalierungen und Kombinationen aus diesen Transformationen. Die Faltungsstufe berechnet die Ausgabe von Funktionen (z. B. Neuronen), die mit spezifischen Bereichen in der Eingabe verbunden sind, welche als der lokale Bereich bestimmt werden können, der dem Neuron zugeordnet ist. Die Neuronen berechnen ein Skalarprodukt zwischen den Gewichtungen der Neuronen und dem Bereich in der lokalen Eingabe, mit dem die Neuronen verbunden sind. Die Ausgabe von der Faltungsstufe 916 definiert einen Satz linearer Aktivierungen, die durch nachfolgende Stufen der Faltungsschicht 914 verarbeitet werden.
  • Die linearen Aktivierungen können durch eine Detektorstufe 918 verarbeitet werden. In der Detektorstufe 918 wird jede lineare Aktivierung durch eine nichtlineare Aktivierungsfunktion verarbeitet. Die nichtlineare Aktivierungsfunktion erhöht nichtlineare Eigenschaften des gesamten Netzes, ohne die jeweiligen Felder der Faltungsschicht zu beeinflussen. Es können mehrere Arten nichtlinearer Aktivierungsfunktionen verwendet werden. Eine bestimmte Art ist die ReLU (Rectified Linear Unit), die eine Aktivierungsfunktion verwendet, welche als f(x) = max(0, x) definiert ist, sodass die Aktivierung bei null ihre Schwelle hat.
  • Die Pooling-Stufe 920 verwendet eine Pooling-Funktion, welche die Ausgabe der Faltungsschicht 906 mit einer zusammenfassenden Statistik der nächstliegenden Ausgaben ersetzt. Die Pooling-Funktion kann verwendet werden, um eine Translationsinvarianz in das neuronale Netz einzuführen, sodass kleine Translationen der Eingabe die gepoolten Ausgaben nicht verändern. Die Invarianz einer lokalen Translation kann in Szenarien hilfreich sein, in denen das Vorhandensein eines Merkmals in den eingegebenen Daten wichtiger ist als die präzise Stelle des Merkmals. Während der Pooling-Stufe 920 können verschiedene Arten von Pooling-Funktionen verwendet werden, einschließlich eines Max-Poolings, eines Durchschnitt-Poolings und eines 12-Norm-Poolings. Zudem umfassen einige CNN-Implementierungen keine Pooling-Stufe. Stattdessen substituieren derartige Implementierungen eine zusätzliche Faltungsstufe, die relativ zu vorherigen Faltungsstufen einen erhöhten Schritt aufweist.
  • Die Ausgabe von 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 stellt ein beispielhaftes rekurrentes neuronales Netz 1000 dar. In einem rekurrenten neuronalen Netz (RNN) beeinflusst der vorherige Zustand des Netzes die Ausgabe des aktuellen Zustands des Netzes. RNNs können in vielen verschiedenen Weisen unter Verwendung einer Vielzahl von Funktionen erstellt werden. Die Verwendung von RNNs umfasst im Allgemeinen ein Verwenden von mathematischen Modellen, um die Zukunft basierend auf einer vorherigen Abfolge von Eingaben vorherzusagen. Zum Beispiel kann ein RNN verwendet werden, um eine statistische Sprachmodellierung durchzuführen, um ein aufkommendes Wort mit einer vorherigen Abfolge von Wörtern vorherzusagen. Das dargestellte RNN 1000 kann eine Eingabeschicht 1002, welche einen Eingabevektor empfängt, versteckte Schichten 1004 zur Implementierung einer rekurrenten Funktion, einen Rückführungsmechanismus 1005 zur Ermöglichung eines ,Speichers' vorheriger Schichten und eine Ausgabeeinheit 1006 zur Ausgabe eines Ergebnisses umfassend beschrieben werden. Das RNN 1000 arbeitetet basierend auf Zeitschritten. Der Zustand des RNN zu einem gegebenen Zeitschritt wird basierend auf dem vorherigen Zeitschritt über den Rückführungsmechanismus 1005 beeinflusst. Für einen gegebenen Zeitschritt wird der Zustand der versteckten Schichten 1004 durch den vorherigen Zustand und die Eingabe zu dem aktuellen Zeitschritt definiert. Eine anfängliche Eingabe (x1) zu einem ersten Zeitschritt kann durch die versteckte Schicht 1004 verarbeitet werden. Eine zweite Eingabe (x2) kann durch die versteckte Schicht 1004 unter Verwendung von Zustandsinformationen verarbeitet werden, die während der Verarbeitung der anfänglichen Eingabe (x1) bestimmt werden. Ein gegebener Zustand kann als st = f(Uxt + Wst-1) berechnet werden, wobei U und W Parametermatrizen sind. Die Funktion ƒ ist im Allgemeinen eine Nichtlinearität, wie etwa die hyperbolische Tangentenfunktion (Tanh) oder eine Variante der Gleichrichterfunktion f(x) = max(0, x). Die spezifische mathematische Funktion, die in den versteckten Schichten 1004 verwendet wird, kann jedoch in Abhängigkeit von den spezifischen Implementierungsdetails des RNN 1000 variieren.
  • Zusätzlich zu den beschriebenen grundlegenden CNN- und RNN-Netzen können Abwandlungen dieser Netze möglich sein. Eine RNN-Beispielvariante ist das RNN eines Long Short Term Memory (LSTM). Der LSTM-RNN ist in der Lage, langfristige Abhängigkeiten zu lernen, die zur Verarbeitung längerer Abfolgen von Sprache notwendig sein können. Eine Variante des CNN ist ein Convolutional Deep Belief Network, das eine Struktur aufweist, welche einem CNN ähnelt, und in einer Weise trainiert wird, welche einem Deep Belief Network ähnelt. Ein Deep Belief Network (DBN) ist ein generatives neuronales Netz, das aus mehreren Schichten stochastischer (zufälliger) Variablen besteht. Die DBNs können Schicht für Schicht trainiert werden, wobei ein „gieriges“ (greedy) unüberwachtes Lernens zum Einsatz kommt. Die gelernten Gewichtungen des DBN können dann verwendet werden, um ein neuronales Vortrainingsnetz bereitzustellen, indem ein optimaler anfänglicher Satz von Gewichtungen für das neuronale Netz bestimmt wird.
  • 11 stellt ein Training und eine Bereitstellung eines tiefen neuronalen Netzes dar. Sobald ein gegebenes Netz für eine Aufgabe strukturiert wurde, wird das neuronale Netz unter Verwendung eines Trainingsdatensatzes 1102 trainiert. Es wurden verschiedene Training-Frameworks 1104 entwickelt, um eine Hardwarebeschleunigung des Trainingsprozesses zu ermöglichen. Zum Beispiel kann der Maschinenlern-Framework 604 von 6 als ein Training-Framework 604 konfiguriert sein. Der Training-Framework 604 kann in ein untrainiertes neuronales Netz 1106 einhaken und ermöglichen, dass das untrainierte neuronale Netz unter Verwendung der hierin beschriebenen parallelen Verarbeitungsressourcen trainiert wird, um ein trainiertes neuronales Netz 1108 zu erzeugen.
  • Um den Trainingsvorgang zu starten, können anfängliche Gewichtungen zufällig oder durch ein Vortraining unter Verwendung eines Deep Belief Networks gewählt werden. Der Trainingszyklus kann dann entweder in einer überwachten oder unüberwachten Weise durchgeführt werden.
  • Ein überwachtes Lernen ist ein Lernverfahren, bei dem das Training als eine vermittelte Operation durchgeführt wird, wie etwa, wenn der Trainingsdatensatz 1102 eine Eingabe umfasst, die mit der gewünschten Ausgabe für die Eingabe gekoppelt wird, oder wenn der Trainingsdatensatz eine Eingabe umfasst, die eine bekannte Ausgabe aufweist, und die Ausgabe des neuronalen Netzes manuell bewertet wird. Das Netz verarbeitet die Eingaben und vergleicht die sich daraus ergebenden Ausgaben mit einem Satz erwarteter oder gewünschter Ausgaben. Fehler werden dann durch das System zurückgesendet. Der Training-Framework 1104 kann eine Einstellung vornehmen, um die Gewichtungen einzustellen, welche das untrainierte neuronale Netz 1106 steuern. Der Training-Framework 1104 kann Werkzeuge bereitstellen, um zu überwachen, wie gut das untrainierte neuronale Netz 1106 in Richtung eines Modells konvergiert, das geeignet ist, um korrekte Antworten basierend auf bekannten eingegebenen Daten zu erzeugen. Der Trainingsprozess findet wiederholt statt, wenn die Gewichtungen des Netzes eingestellt werden, um die durch das neuronale Netz erzeugte Ausgabe zu verfeinern. Der Trainingsprozess kann fortgesetzt werden, bis das neuronale Netz eine statistisch gewünschte Genauigkeit erreicht, welche einem trainierten neuronalen Netz 1108 zugeordnet ist. Das trainierte neuronale Netz 1108 kann daraufhin bereitgestellt werden, um eine beliebige Anzahl von Maschinenlemoperationen zu implementieren, um ein Inferenzergebnis 1114 basierend auf einer Eingabe neuer Daten 1112 zu erzeugen.
  • Ein unüberwachtes Lernen ist ein Lernverfahren, bei dem das Netz versucht, sich selbst unter Verwendung nicht gelabelter Daten zu trainieren. Somit wird für ein unüberwachtes Lernen der Trainingsdatensatz 1102 eingegebene Daten ohne jegliche zugeordnete ausgegebene Daten umfassen. Das untrainierte neuronale Netz 1106 kann Gruppierungen innerhalb der nicht gelabelten Eingabe lernen und bestimmen, in welchem Bezug einzelne Eingaben zu dem Gesamtdatensatz stehen. Das unüberwachte Training kann verwendet werden, um eine selbstorganisierende Abbildung zu erzeugen, welche eine Art trainierten neuronalen Netzes 1108 ist, das in der Lage ist, Operationen durchzuführen, die bei einer Reduzierung der Datendimensionen nützlich sind. Das unüberwachte Training kann auch verwendet werden, um eine Anomalie-Erfassung durchzuführen, welche die Identifikation von Datenpunkten in einem eingegebenen Datensatz ermöglicht, die von den normalen Mustern der Daten abweichen.
  • Es können auch Abwandlungen eines überwachten und unüberwachten Trainings eingesetzt werden. Ein halbüberwachtes Lernen ist eine Technik, bei welcher der Trainingsdatensatz 1102 eine Mischung aus gelabelten und nicht gelabelten Daten der gleichen Verteilung umfasst. Ein inkrementelles Lernen ist eine Variante eines überwachten Lernens, bei dem eingegebene Daten kontinuierlich verwendet werden, um das Modell weiter zu trainieren. Das inkrementelle Lernen ermöglicht es dem trainierten neuronalen Netz 1108, die neuen Daten 1112 anzupassen, ohne die Kenntnisse zu vergessen, die innerhalb des Netzes während eines anfänglichen Trainings eingeflößt wurden.
  • Egal ob überwacht oder unüberwacht - der Trainingsprozess insbesondere für Deep Neural Networks kann für einen einzigen Rechenknoten zu rechenintensiv sein. Anstatt einen einzigen Rechenknoten zu verwenden, kann ein verteiltes Netz aus Rechenknoten verwendet werden, um den Trainingsprozess zu beschleunigen.
  • 12 ist ein Blockdiagramm, das ein verteiltes Lernen darstellt. Ein verteiltes Lernen (Distributed Learning) ist ein Trainingsmodell, das mehrere verteilte Datenverarbeitungsknoten verwendet, um ein überwachtes oder unüberwachtes Training eines neuronalen Netzes durchzuführen. Die verteilten Rechenknoten können jeweils einen oder mehrere Host-Prozessoren und einen oder mehrere Allzweck-Prozessorknoten, wie etwa den hochparallelen Allzweck-Grafikprozessor 700 wie in FIG. 700, aufweisen. Wie dargestellt, kann ein verteiltes Lernen einen Modell-Parallelismus 1202, einen Daten-Parallelismus 1204 oder eine Kombination aus einem Modell- und einem Daten-Parallelismus 1204 durchführen.
  • In dem Modell-Parallelismus 1202 können unterschiedliche Rechenknoten in einem verteilten System Trainingsrechenvorgänge für unterschiedliche Teile eines einzelnen Netzes durchführen. Zum Beispiel kann jede Schicht eines neuronalen Netzes durch einen anderen Verarbeitungsknoten des verteilten Systems trainiert werden. Zu den Vorteilen des Modell-Parallelismus gehört die Fähigkeit, besonders große Modelle zu skalieren. Ein Aufteilen der Rechenvorgänge, die unterschiedlichen Schichten des neuronalen Netzes zugeordnet sind, ermöglicht das Training sehr großer neuronaler Netze, in denen die Gewichtungen aller Schichten nicht in den Speicher eines einzelnen Rechenknotens passen würden. In manchen Fällen kann der Modell-Parallelismus insbesondere bei einem Durchführen eines unüberwachten Trainings großer neuronaler Netze von Nutzen sein.
  • Bei einem Daten-Parallelismus 1204 verfügen die unterschiedlichen Knoten des verteilten Netzes über eine vollständige Instanz des Modells und jeder Knoten empfängt einen anderen Abschnitt der Daten. Die Ergebnisse von den unterschiedlichen Knoten werden dann kombiniert. Während unterschiedliche Ansätze zum Daten-Parallelismus möglich sind, erfordern parallele Datentrainingsansätze alle eine Technik zum Kombinieren von Ergebnissen und Synchronisieren der Modellparameter zwischen jedem Knoten. Beispielansätze zum Kombinieren von Daten umfassen ein Parametermitteln und einen auf einen auf einer Aktualisierung basierenden Daten-Parallelismus. Das Parametermitteln trainiert jeden Knoten eines Untersatzes der Trainingsdaten und Sätze globaler Parameter (z. B. Gewichtungen, Biases) auf den Durchschnitt der Parameter von jedem Knoten. Beim Parametermitteln wird ein zentraler Parameterserver verwendet, der die Parameterdaten hält. Ein auf Aktualisierungen basierender Daten-Parallelismus ähnelt einem Parametermitteln, mit der Ausnahme, dass anstatt die Parameter von den Knoten zu dem Parameterserver zu übermitteln, die Aktualisierungen an das Modell übertragen werden. Zudem kann der auf einer Aktualisierung basierende Daten-Parallelismus in einer dezentralisierten Weise durchgeführt werden, in der die Aktualisierungen komprimiert und zwischen Knoten übertragen werden.
  • Ein kombinierter Modell- und Daten-Parallelismus 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 mit separaten GPUs innerhalb jedes Knotens aufweisen, um unterschiedliche Abschnitte des Modells zu trainieren.
  • Das verteilte Training weist im Vergleich zu einem Training auf einer einzelnen Maschine einen erhöhten Aufwand auf. Die parallelen Prozessoren und GPGPUs, die hierin beschrieben werden, können jedoch verschiedene Techniken implementieren, um den Aufwand eines verteilten Trainings zu reduzieren, einschließlich Techniken zur Ermöglichung eines GPU-zu-GPU-Datentransfers mit hoher Bandbreite und einer beschleunigten Fern-Datensynchronisation.
  • Beispielhafte Maschinenlernanwendungen
  • Ein maschinelles Lernen kann angewandt werden, um eine Vielzahl von technologischen Problemen zu lösen, einschließlich, jedoch nicht beschränkt auf, Computervision, autonomes Fahren und Navigation, Spracherkennung und Sprachverarbeitung. Die Computervision ist seit jeher einer der aktivsten Forschungsbereiche für Maschinenlernanwendungen. Anwendungen der Computervision reichen von einer Nachahmung menschlicher visueller Fähigkeiten, wie etwa die Erkennung von Gesichtern, bis zu einer Schaffung neuer Kategorien visueller Fähigkeiten. Zum Beispiel können Computervisionsanwendungen konfiguriert sein, um Schallwellen von Schwingungen zu erkennen, die in Objekten induziert werden, die in einem Video sichtbar sind. Ein paralleles Prozessor-beschleunigtes maschinelles Lernen ermöglicht, dass Computervisionsanwendungen unter Verwendung eines erheblich größeren Trainingsdatensatzes trainiert werden, als zuvor möglich war, und es ermöglicht, dass Inferenzsysteme bereitgestellt werden, die parallele Prozessoren mit niedriger Energie einsetzen.
  • Das parallele Prozessor-beschleunigte maschinelle Lernen weist Anwendungen für ein autonomes Fahren auf, einschließlich einer Spur- und Straßenschilderkennung, Hindernisvermeidung, Navigation und Fahrsteuerung. Beschleunigte Maschinenlerntechniken können verwendet werden, um Fahrmodelle basierend auf Datensätzen zu trainieren, welche die angemessenen Antworten auf spezifische Trainingseingaben definieren. Die hierin beschriebenen parallelen Prozessoren können ein schnelles Training der zunehmend komplexen neuronalen Netze ermöglichen, die für autonome Fahrlösungen verwendet werden, und sie können die Bereitstellung von Inferenzprozessoren mit niedriger Energie in einer mobilen Plattform ermöglichen, die zur Integration in autonomen Fahrzeugen geeignet sind.
  • Parallele Prozessor-beschleunigte Deep Neural Networks haben Maschinenlernansätze für eine automatische Spracherkennung (ASR für Automatic Speech Recognition) aktiviert. Die ASR umfasst die Erstellung einer Funktion, welche die wahrscheinlichste linguistische Sequenz bei einer eingegebenen akustischen Sequenz berechnet. Ein beschleunigtes maschinelles Lernen, welches Deep Neural Networks verwendet, haben die Ersetzung der versteckten Markowmodelle (HMMs für Hidden Markov Models) und Gaußschen Mischverteilungsmodelle (GMMs für Gaussian Mixture Models) ermöglicht, die zuvor für die ASR verwendet wurden.
  • Das parallele Prozessor-beschleunigte maschinelle Lernen kann auch verwendet werden, um eine natürliche Sprachverarbeitung zu beschleunigen. Automatische Lernverfahren können statistische Inferenzalgorithmen nutzen, um Modelle zu erzeugen, die gegenüber fehlerhaften oder unbekannten Eingaben robust sind. Beispielhafte natürliche Sprachverarbeitungsanwendungen umfassen eine automatische Maschinenübersetzung zwischen menschlichen Sprachen.
  • Die parallelen Verarbeitungsplattformen, die für ein maschinelles Lernen verwendet werden, können in Trainingsplattformen und Bereitstellungsplattformen unterteilt werden. Trainingsplattformen sind in der Regel hochparallel und umfassen Optimierungen zur Beschleunigung eines Trainings mit mehreren GPUs und einem Knoten sowie eines Trainings mit mehreren Knoten und mehreren GPUs. Beispielhafte parallele Prozessoren, die sich für ein Training eignen, umfassen den Allzweck-Grafikprozessor 700 von FIG. 700 und das Multi-GPU-Rechensystem 800 von FIG. 800. Andererseits umfassen bereitgestellte Maschinenlernplattformen im Allgemeinen parallele Prozessoren mit geringer Energie zur Verwendung in Produkten, wie Kameras, autonomen Robotern und autonomen Fahrzeugen.
  • 13 stellt ein beispielhaftes Inferenzsystem auf einem Chip (SOC für System on a Chip) 1300 dar, das geeignet ist, um eine Inferenz unter Verwendung eines trainierten Modells durchzuführen. Das SOC 1300 kann Verarbeitungskomponenten integrieren, einschließlich eines Medienprozessors 1302, eines Vision-Prozessors 1304, eines GPGPU 1306 und eines Mehrkernprozessors 1308. Das SOC 1300 kann zusätzlich einen On-Chip-Speicher 1305 umfassen, der einen gemeinsam genutzten On-Chip-Datenpool ermöglicht, der durch jede der Verarbeitungskomponenten zugänglich ist. Die Verarbeitungskomponenten können für eine Operation mit geringer Energie optimiert werden, um eine Bereitstellung für eine Vielzahl von Maschinenlernplattformen, einschließlich für autonome Fahrzeuge und autonome Roboter, zu ermöglichen. Zum Beispiel kann eine Implementierung des SOC 1300 als Teil des Hauptsteuersystems für ein autonomes Fahrzeug verwendet werden. Wenn das SOC 1300 zur Verwendung in autonomen Fahrzeugen konfiguriert ist, ist das SOC für die Einhaltung der einschlägigen Funktionssicherheitsstandards gemäß der Rechtsprechung für Bereitstellungen ausgelegt und konfiguriert.
  • Während einer Operation können der Medienprozessor 1302 und der Vision-Prozessor 1304 zusammenarbeiten, um Computervision-Operationen zu beschleunigen. Der Medienprozessor 1302 kann eine Decodierung mit niedriger Latenz mehrerer Videoströme mit hoher Auflösung (z. B. 4K, 8K) ermöglichen. Die decodierten Videoströme können auf einen Puffer in dem On-Chip-Speicher 1305 geschrieben werden. Der Vision-Prozessor 1304 kann daraufhin das decodierte Video analysieren und vorläufige Verarbeitungsvorgänge an den Frames des decodierten Videos in Vorbereitung auf die Frames unter Verwendung eines trainierten Bilderkennungsmodells durchführen. Zum Beispiel kann der Vision-Prozessor 1304 Faltungsoperationen für ein CNN beschleunigen, die verwendet werden, um eine Bilderkennung an den Videodaten mit hoher Auflösung durchzuführen, während durch den GPGPU 1306 Backend-Rechenvorgänge durchgeführt werden.
  • Der Mehrkernprozessor 1308 kann eine Steuerlogik umfassen, um ein Sequenzieren und eine Synchronisation von Datenübertragungen und gemeinsam genutzter Speicheroperationen zu unterstützen, die durch den Medienprozessor 1302 und den Vision-Prozessor 1304 durchgeführt werden. Der Mehrkernprozessor 1308 kann auch als Anwendungsprozessor fungieren, um Softwareanwendungen auszuführen, welche die Inferenzrechenfähigkeit des GPGPU 1306 nutzen können. Zum Beispiel kann mindestens ein Abschnitt der Navigations- und Antriebslogik in Software implementiert sein, die auf dem Mehrkernprozessor 1308 ausgeführt wird. Eine derartige Software kann Rechenarbeitslasten bei dem GPGPU 1306 einreichen oder die Rechenarbeitslasten können bei dem Mehrkernprozessor 1308 eingereicht werden, welcher mindestens einen Teil dieser Operationen an der GPGPU 1306 entlasten kann.
  • Der GPGPU 1306 kann Rechen-Cluster umfassen, wie etwa eine Niedrigenergie-Konfiguration der Rechen-Cluster 706A-706H innerhalb des Allzweck-Grafikprozessors 700. Die Rechen-Cluster innerhalb des GPGPU 1306 können Anweisungen unterstützen, welche speziell optimiert wurden, um Inferenz-Rechenvorgänge auf einem trainierten neuronalen Netz durchzuführen. Zum Beispiel kann der GPGPU 1306 Anweisungen unterstützen, um Rechenvorgänge mit geringer Genauigkeit durchzuführen, wie etwa 8-Bit- und 4-Bit-Ganzzahl-Vektoroperationen.
  • Systemüberblick
  • 14 ist ein Blockdiagramm eines Verarbeitungssystems 1400 gemäß einer Ausführungsform. Das System 1400 kann in einem Einzelprozessor-Desktopsystem, einem Multiprozessor-Arbeitsstationssystem oder einem Serversystem mit einer großen Zahl von Prozessoren 1402 oder Prozessorkernen 1407 verwendet werden. In einer Ausführungsform ist das System 1400 eine Verarbeitungsplattform, die innerhalb einer integrierten SoC-Schaltung (SoC für System-on-a-chip) zur Verwendung in mobilen, tragbaren oder eingebetteten Geräten, wie etwa innerhalb von Geräten des Internets der Dinge (IoT für Internet of Things) mit drahtgebundener oder drahtloser Konnektivität zu einem lokalen oder Weitbereichsnetzwerk, integriert ist.
  • Das System 1400 kann in einer Ausführungsform eine serverbasierte Spieleplattform, eine Spielkonsole, die eine Spiel- und Medienkonsole umfasst, eine mobile Spielkonsole, eine tragbare Spielkonsole oder eine Online-Spielkonsole aufweisen, damit gekoppelt oder darin integriert sein. In einigen Ausführungsformen ist das System 1400 Teil einer Mobiltelefon-, Smartphone-, Tablet-Rechenvorrichtung oder eines mobilen mit dem Internet verbundenen Geräts, wie etwa eines Laptops mit niedriger interner Speicherkapazität. Das Verarbeitungssystem 1400 kann zudem ein tragbares Gerät, wie etwa ein tragbares Smart-Watch-Gerät, eine intelligente Brille oder Kleidungsstück, das mit Augmented-Reality- oder Virtual-Reality-Funktionen (AR- oder VR-Funktionen) erweitert ist, um virtuelle, auditive oder taktile Ausgaben bereitzustellen, um eine visuelle, auditive oder taktile Erfahrung der realen Welt zu ergänzen, oder um auf eine andere Weise Text-, Audio-, Grafik-, Video-, Hologramm- oder Videoinhalte oder eine taktile Rückmeldung bereitzustellen, ein anderes AR-Gerät oder ein anderes VR-Gerät aufweisen, damit gekoppelt oder darin integriert sein. In einigen Ausführungsformen umfasst das Verarbeitungssystem 1400 ein Fernseh- oder Set-Top-Box-Gerät oder ist Teil davon. Das System 1400 kann in einer Ausführungsform ein Fahrzeug mit Eigenantrieb, wie etwa einen Bus, einen Sattelzug, ein Auto, einen Motor oder elektrischen Leistungszyklus, ein Flugzeug oder einen Segelflieger (oder eine beliebige Kombination daraus) umfassen, damit gekoppelt oder darin integriert sein. Das Fahrzeug mit Eigenantrieb kann das System 1400 verwenden, um die um das Fahrzeug erfasste Umgebung zu verarbeiten.
  • In einigen Ausführungsformen weisen der eine oder die mehreren Prozessoren 1402 jeweils einen oder mehrere Prozessorkerne 1407 auf, um Anweisungen zu verarbeiten, die, wenn sie ausgeführt werden, Operationen für ein System oder eine Benutzersoftware durchführen. In einigen Ausführungsformen ist mindestens einer des einen oder der mehreren Prozessorkerne 1407 konfiguriert, um einen spezifischen Anweisungssatz 1409 zu verarbeiten. In einigen Ausführungsformen kann der Anweisungssatz 1409 ein Datenverarbeiten komplexer Anweisungssätze (CISC für Complex Instruction Set Computing), ein Datenverarbeiten reduzierter Anweisungssätze (RISC für Reduced Instruction Set Computing) oder ein Datenverarbeiten mit sehr langem Befehlswort (VLIW für Very Long Instruction Word) ermöglichen. Ein oder mehrere Prozessorkerne 1407 können einen unterschiedlichen Anweisungssatz 1409 verarbeiten, der Anweisungen aufweisen kann, um die Emulation von anderen Anweisungssätzen zu erleichtern. Der Prozessorkern 1407 kann auch andere Verarbeitungsgeräte aufweisen, wie etwa einen digitalen Signalprozessor (DSP für Digital Signal Processor).
  • In einigen Ausführungsformen weist der Prozessor 1402 einen Cache-Speicher 1404 auf. In Abhängigkeit von der Architektur kann der Prozessor 1402 einen einzigen internen Cache oder mehrere Ebenen von internen Caches haben. In einigen Ausführungsformen wird der Cache-Speicher von verschiedenen Komponenten des Prozessors 1402 gemeinsam genutzt. In einigen Ausführungsformen verwendet der Prozessor 1402 auch einen externen Cache (z. B. einen Level-3(L3)-Cache oder Last-Level-Cache (LLC)) (nicht gezeigt), der unter Prozessorkernen 1407 unter Verwendung von bekannten Cache-Kohärenztechniken gemeinsam genutzt wird. Eine Registerdatei 1406 kann in dem Prozessor 1402 zusätzlich enthalten sein und unterschiedliche Arten von Registern zum Speichern von unterschiedlichen Arten von Daten aufweisen (z. B. Integer-Register, Gleitkomma-Register, Status-Register und Anweisungszeigerregister). Einige Register können Mehrzweckregister sein, während andere Register für die Auslegung des Prozessors 1402 spezifisch sein können.
  • In einigen Ausführungsformen sind ein oder mehrere Prozessoren 1402 mit einem oder mehreren Schnittstellenbussen 1410 gekoppelt, um Kommunikationssignale, wie etwa Adress-, Daten- oder Steuersignale zwischen dem Prozessor 1402 und anderen Komponenten in dem System 1400 zu übertragen. Der Schnittstellenbus 1410 kann in einer Ausführungsform ein Prozessorbus, wie etwa eine Version eines DMI-Busses (DMI für Direkt Media Interface) sein. Prozessorbusse sind jedoch nicht auf den DMI-Bus beschränkt und können einen oder mehrere PCI-Busse (PCI für Peripheral Component Interconnect) (z. B. PCI, PCI express), Speicherbusse oder andere Arten von Schnittstellenbussen umfassen. In einer Ausführungsform weist der Prozessor (weisen die Prozessoren) 1402 eine integrierte Speichersteuerung 1416 und einen Plattform-Steuerungshub 1430 auf. Die Speichersteuerung 1416 erleichtert eine Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 1400, während der Plattform-Steuerungshub (PCH für Platform Controller Hub) 1430 Verbindungen zu I/O-Geräten über einen lokalen I/O-Bus bereitstellt.
  • Die Speichervorrichtung 1420 kann eine dynamische Direktzugriffspeicher-Vorrichtung (DRAM-Vorrichtung), eine statische Direktzugriflspeicher-Vorrichtung (SRAM-Vorrichtung), eine Flash-Speichervorrichtung, eine Phasenänderungsspeichervorrichtung oder eine andere Speichervorrichtung mit geeigneter Leistung sein, um als Verarbeitungsspeicher zu dienen. In einer Ausführungsform kann die Speichervorrichtung 1420 als Systemspeicher für das System 1400 arbeiten, um Daten 1422 und Anweisungen 1421 zu speichern, um sie zu verwenden, wenn der eine oder die mehreren Prozessoren 1402 eine Anwendung oder einen Prozess ausführen. Die Speichersteuerung 1416 kann auch mit einem optionalen externen Grafikprozessor 1418 gekoppelt sein, 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- und/oder Rechenoperationen durch einen Beschleuniger 1412 unterstützt werden, der ein Coprozessor ist, der konfiguriert sein kann, um einen speziellen Satz von Grafik-, Medien- oder Rechenoperationen durchzuführen. Zum Beispiel ist der Beschleuniger 1412 in einer Ausführungsform ein Matrixmultiplikation-Beschleuniger zur Optimierung von Maschinenlern- oder Rechenoperationen. In einer Ausführungsform ist der Beschleuniger 1412 ein Raytracing-Beschleuniger, der verwendet werden kann, um Raytracing-Operationen gemeinsam mit dem Grafikprozessor 1408 durchzuführen. In einer Ausführungsform kann der externe Beschleuniger 1419 anstelle des Beschleunigers 1412 oder damit gemeinsam verwendet werden.
  • In einigen Ausführungsformen kann eine Anzeigevorrichtung 1411 mit dem Prozessor (den Prozessoren) 1402 verbunden sein. Die Anzeigevorrichtung 1411 kann eine interne Anzeigevorrichtung, wie in einem mobilen elektronischen Gerät oder einem Laptop-Gerät, und/oder eine externe Anzeigevorrichtung, die über eine Anzeigeschnittstelle (z. B. DisplayPort usw.) angeschlossen ist, sein. In einer Ausführungsform kann die Anzeigevorrichtung 1411 eine am Kopf montierte Anzeige (HMD für Head Mounted Display), wie etwa eine stereoskopische Anzeigevorrichtung zur Verwendung in VR-Anwendungen oder AR-Anwendungen sein.
  • In einigen Ausführungsformen ermöglicht der Plattform-Steuerungshub 1430, dass sich Peripheriegeräte mit der Speichervorrichtung 1420 und dem Prozessor 1402 über einen Hochgeschwindigkeits-I/O-Bus verbinden. Die I/O-Peripheriegeräte umfassen unter anderem eine Audiosteuerung 1446, eine Netzwerksteuerung 1434, eine Firmware-Schnittstelle 1428, einen Drahtlos-Sendeempfänger 1426, Berührungssensoren 1425, eine Datenspeichervorrichtung 1424 (z. B. einen nichtflüchtigen Speicher, einen flüchtigen Speicher, ein Festplattenlaufwerk, einen Flash-Speicher, NAND, 3D NAND, 3D XPoint usw.). Die Datenspeichervorrichtung 1424 kann über eine Speicherschnittstelle (z. B. SATA) oder über einen Peripheriebus, wie etwa einen Peripheral-Component-Interconnect-Bus (z. B. PCI, PCI express), verbunden werden. Die Berührungssensoren 1425 können Berührungsbildschirmsensoren, Drucksensoren oder Fingerabdrucksensoren umfassen. Der Drahtlos-Sendeempfänger 1426 kann ein WLAN-Sendeempfänger, ein Bluetooth-Sendeempfänger oder ein Mobiles-Netzwerk-Sendeempfänger, wie etwa ein 3G-, 4G-, 5G- oder Long-Term-Evolution(LTE)-Sendeempfänger, sein. Die Firmware-Schnittstelle 1428 ermöglicht eine Kommunikation mit einer System-Firmware und kann zum Beispiel eine vereinheitlichte erweiterbare Firmware-Schnittstelle (UEFI für Unified Extensible Firmware Interface) sein. Die Netzwerksteuerung 1434 kann eine Netzwerkverbindung mit einem drahtgebundenen Netzwerk ermöglichen. In einigen Ausführungsformen kann eine Hochleistungsnetzwerksteuerung (nicht gezeigt) mit dem Schnittstellenbus 1410 gekoppelt sein. Die Audiosteuerung 1446 ist in einer Ausführungsform eine hochauflösende Mehrkanal-Audiosteuerung. In einer Ausführungsform weist das System 1400 eine optionale Vorläufer-I/O-Steuerung 1440 zum Koppeln von Vorläufer-Geräten (z. B. Personal System 2 (PS/2)) mit dem System auf. Der Plattform-Steuerungshub 1430 kann auch mit einer oder mehreren Eingabevorrichtungen von USB-Steuerungen 1442 (USB für Universal Serial Bus) verbunden sein, wie etwa mit einer Kombination aus Tastatur und Maus 1443, mit einer Kamera 1444, oder mit anderen USB-Eingabevorrichtungen.
  • Man beachte, dass das dargestellte System 1400 beispielhaft und nicht beschränkend ist, da auch andere Arten von unterschiedlich konfigurierten Datenverarbeitungssystemen verwendet werden können. Beispielsweise kann eine Instanz der Speichersteuerung 1416 und des Plattform-Steuerungshubs 1430 in einem diskreten externen Grafikprozessor, wie etwa dem externen Grafikprozessor 1418, integriert sein. In einer Ausführungsform können der Plattform-Steuerungshub 1430 und/oder die Speichersteuerung 1416 zu dem einen oder den mehreren Prozessoren 1402 extern liegen. Zum Beispiel kann das System 1400 eine externe Speichersteuerung 1416 und einen externen Plattform-Steuerungshub 1430 aufweisen, der als ein Speichersteuerungshub und ein peripherer Steuerungshub innerhalb eines System-Chipsatzes konfiguriert ist, welcher mit dem Prozessor (den Prozessoren) 1402 in Kommunikation steht.
  • Beispielsweise können Leiterplatten („Sleds“) verwendet werden, auf welchen Komponenten wie CPUs, Speicher und andere Komponenten platziert werden, die für eine erhöhte thermische Leistung ausgelegt sind. In manchen Beispielen befinden sich Verarbeitungskomponenten, wie etwa die Prozessoren, auf einer oberen Seite eines Sleds, während sich nahe Speicher, wie etwa DIMMs, auf einer unteren Seite des Sleds befinden. Infolge des erhöhten Luftstroms, der durch diesen Entwurf bereitgestellt wird, können die Komponenten mit höheren Frequenzen und Leistungspegeln als in gewöhnlichen Systemen betrieben werden, wodurch die Leistung steigt. Darüber hinaus sind Sleds konfiguriert, um blind zu Strom- und Datenverbindungskabeln in einem Rack zu passen, wodurch sie schneller entfernt, aufgerüstet, neuinstalliert und/oder ersetzt werden können. Ähnlich sind einzelne Komponenten, die sich auf den Sleds befinden, wie etwa Prozessoren, Beschleuniger, Speicher und Datenspeicherlaufwerke, aufgrund ihrer erhöhten Beabstandung voneinander konfiguriert, um einfach aufgerüstet zu werden. In dem Ausführungsbeispiel weisen die Komponenten zusätzlich Hardware-Bezeugungsfunktionen auf, um ihre Echtheit zu beweisen.
  • Ein Rechenzentrum kann eine Einzelnetzwerkarchitektur („Fabric“) verwenden, die mehrere andere Netzwerkarchitekturen, einschließlich Ethernet und Omni-Path, unterstützt. Die Sleds können mit Switches über Lichtwellenleiter gekoppelt sein, die eine höhere Bandbreite und niedrigere Latenz bereitstellen als eine gewöhnliche Twisted-Pair-Verkabelung (z. B. Category 5, Category 5e, Category 6 usw.). Aufgrund der Verbindungen und Netzwerkarchitektur mit großer Bandbreite und mit niedriger Latenz kann das Rechenzentrum bei der Verwendung Ressourcen, wie etwa Speicher, Beschleuniger (z. B. GPUs, Grafikbeschleuniger, FPGAs, ASICs, neuronales Netz und/oder KI-Beschleuniger (KI für künstliche Intelligenz) usw.) und physisch verteilte Datenspeicherlaufwerke bündeln und sie bereitstellen, um Ressourcen (z. B. Prozessoren) auf Bedarfsbasis einzusetzen, wodurch ermöglicht wird, dass die Rechenressourcen auf die gebündelten Ressourcen zugreifen, als wären sie lokal.
  • Eine Energieversorgung oder -quelle kann dem System 1400 oder einer/m beliebigen hierin beschriebenen Komponente oder System Spannung und/oder Strom zuführen. In einem Beispiel weist die Energieversorgung einen Wechselstrom-zu-Gleichstrom-Adapter (AC zu DC) zum Einstecken in eine Wandsteckdose auf. Eine derartige Wechselstromenergie kann eine Energiequelle einer erneuerbaren Energie (z. B. Solarenergie) sein. In einem Beispiel weist die Energiequelle eine DC-Energiequelle, wie etwa einen externen AC-zu-DC-Wandler, auf. Die Energiequelle oder Energieversorgung weist in einem Beispiel eine Drahtlosladehardware auf, um über eine Nähe zu einem Ladefeld zu laden. In einem Beispiel kann die Energiequelle eine interne Batterie, eine Wechselstromversorgung, eine bewegungsbasierte Energieversorgung, eine Solarenergieversorgung oder Brennstoffzellen-Quelle umfassen.
  • 15A-15C stellen Rechensysteme und Grafikprozessoren dar, die durch die hierin beschriebenen Ausführungsformen bereitgestellt werden. Die Elemente von 15A-15C, die die gleichen Bezugszeichen (oder Namen) wie die Elemente einer anderen Figur hierin aufweisen, können in einer Weise ähnlich zu der betrieben werden oder funktionieren, die an anderer Stelle hierin beschrieben wird, sind jedoch nicht darauf beschränkt.
  • 15A ist ein Blockdiagramm einer Ausführungsform eines Prozessors 1500 mit einem oder mehreren Prozessorkernen 1502A-1502N, einer integrierten Speichersteuerung 1514 und einem integrierten Grafikprozessor 1508. Der Prozessor 1500 kann zusätzliche Kerne bis zu und einschließlich zusätzlichem Kern 1502N aufweisen, der durch die gestrichelten Kästchen dargestellt ist. Jeder der Prozessorkerne 1502A-1502N weist eine oder mehrere interne Cache-Einheiten (bzw. Zwischenspeichereinheiten) 1504A-1504N auf. In einigen Ausführungsformen hat jeder Prozessorkern auch Zugriff auf eine oder mehrere gemeinsam genutzte zwischengespeicherte Einheiten 1506. Die internen Cache-Einheiten 1504A-1504N und gemeinsam genutzten Cache-Einheiten 1506 stellen eine Cache-Speicherhierarchie innerhalb des Prozessors 1500 dar. Die Cache-Speicherhierarchie kann mindestens eine Anweisungs- und Daten-Cache-Ebene innerhalb jedes Prozessorkerns und eine oder mehrere gemeinsam genutzte Mittelebenen-Cache-Ebenen, wie etwa Level 15 (L2), Level 3 (L3), Level 4 (L4) oder andere Cache-Ebenen, aufweisen, wobei die höchste Cache-Ebene vor einem externen Speicher mit LLC klassifiziert ist. In einigen Ausführungsformen hält eine Cache-Speicher-Kohärenzlogik eine Kohärenz zwischen den verschiedenen Cache-Einheiten 1506 und 1504A-1504N aufrecht.
  • In einigen Ausführungsformen kann der Prozessor 1500 auch einen Satz aus einer oder mehreren Bussteuerungseinheiten 1616 und einen Systemagentenkern 1510 aufweisen. Die eine oder die mehreren Bussteuerungseinheiten 1616 verwalten einen Satz Peripheriebusse, wie etwa einen oder mehrere PCI- oder PCI-Express-Busse. Der Systemagentenkern 1510 stellt eine Verwaltungsfunktion für die verschiedenen Prozessorkomponenten bereit. In einigen Ausführungsformen weist der Systemagentenkern 1510 eine oder mehrere integrierte Speichersteuerungen 1514 auf, um einen Zugriff auf verschiedene externe Speichervorrichtungen (nicht gezeigt) zu verwalten.
  • In einigen Ausführungsformen weisen einer oder mehrere der Prozessorkerne 1502A-1502N eine Unterstützung für ein gleichzeitiges Multithreading auf. In einer derartigen Ausführungsform weist der Systemagentenkern 1510 Komponenten zum Koordinieren und Betreiben von Kernen 1502A-1502N während eines Multithread-Verarbeitens auf. Der Systemagentenkern 1510 kann zusätzlich eine Leistungssteuereinheit (PCU für Power Control Unit) aufweisen, die eine Logik und Komponenten aufweist, um den Leistungszustand der Prozessorkerne 1502A-1502N und des Grafikprozessors 1508 zu regulieren.
  • In einigen Ausführungsformen weist der Prozessor 1500 zusätzlich den Grafikprozessor 1508 auf, um Grafikverarbeitungsoperationen auszuführen. In einigen Ausführungsformen kann der Grafikprozessor 1508 mit dem Satz aus gemeinsam genutzten Cache-Einheiten 1506 und dem Systemagentenkern 1510 gekoppelt sein, der die eine oder mehreren integrierten Speichersteuerungen 1514 aufweist. In einigen Ausführungsformen weist der Systemagentenkern 1510 zudem eine Anzeigesteuerung 1511 auf, um eine Grafikprozessorausgabe an eine oder mehrere gekoppelte Anzeigen zu steuern. In einigen Ausführungsformen kann die Anzeigesteuerung 1511 auch ein separates Modul sein, das mit dem Grafikprozessor über mindestens eine Verbindung gekoppelt ist, oder sie kann innerhalb des Grafikprozessors 1508 integriert sein.
  • In einigen Ausführungsformen wird eine ringbasierte Verbindungseinheit 1512 verwendet, um die internen Komponenten des Prozessors 1500 zu koppeln. Es kann jedoch eine alternative Verbindungseinheit verwendet werden, wie etwa eine Punkt-zu-Punkt-Verbindung, eine verschaltete Verbindung oder andere Techniken, einschließlich im Stand der Technik bekannte Techniken. In einigen Ausführungsformen kann der Grafikprozessor 1508 mit der Ringverbindung 1512 über eine I/O-Verbindung 1513 gekoppelt sein.
  • Die beispielhafte I/O-Verbindung 1513 stellt mindestens eine von vielen verschiedenen I/O-Verbindungen dar, die eine On-Package-I/O-Verbindung umfassen, die eine Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 1518, wie etwa einem eDRAM-Modul, erleichtern. In einigen Ausführungsformen kann jeder der Prozessorkerne 1502A-1502N und der Grafikprozessor 1508 eingebettete Speichermodule 1518 verwenden, wie einen gemeinsam genutzten Last Level Cache.
  • In einigen Ausführungsformen sind die Prozessorkerne 1502A-1502N homogene Kerne, die die gleiche Anweisungssatzarchitektur ausführen. In einer anderen Ausführungsform sind die Prozessorkerne 1502A-1502N heterogen im Sinne einer Anweisungssatzarchitektur (ISA für Instruction Set Architecture), in der ein oder mehrere Prozessorkerne 1502A-1502N einen ersten Anweisungssatz ausführen, während mindestens einer der anderen Kerne einen Untersatz des ersten Anweisungssatzes oder einen anderen Anweisungssatz ausführt. In einer Ausführungsform sind die Prozessorkerne 1502A-1502N heterogen im Sinne einer Mikroarchitektur, in der ein oder mehrere Kerne, die einen relativ hohen Leistungsverbrauch haben, mit einem oder mehreren Leistungskernen, die einen niedrigeren Leistungsverbrauch haben, gekoppelt sind. In einer Ausführungsform sind die Prozessorkerne 1502A-1502N heterogen hinsichtlich einer Rechenkapazität. Zudem kann der Prozessor 1500 auf einem oder mehreren Chips oder als eine integrierte SoC-Schaltung mit den dargestellten Komponenten zusätzlich zu anderen Komponenten implementiert sein.
  • 15B ist ein Blockdiagramm einer Hardwarelogik eines Grafikprozessorkerns 1519 gemäß einigen hierin beschriebenen Ausführungsformen. Elemente von 15B, die die gleichen Bezugszeichen (oder Namen) wie Elemente einer anderen Figur hierin haben, können in einer Weise ähnlich zu der betrieben werden oder funktionieren, die an anderer Stelle hierin beschrieben ist, sind jedoch nicht darauf beschränkt. Der Grafikprozessorkern 1519, der manchmal als ein Kern-Slice bezeichnet wird, kann ein oder mehrere Grafikkerne innerhalb eines modularen Grafikprozessors sein. Der Grafikprozessorkern 1519 ist für ein Grafikkern-Slice beispielhaft und ein Grafikprozessor kann, wie hierin beschrieben, mehrere Grafikkern-Slices basierend auf einer Zielenergie und Leistungsbereichen aufweisen. Jeder Grafikprozessorkern 1519 kann einen Festfunktion-Block 1530 aufweisen, der mit mehreren Unterkemen 1521A-1521F gekoppelt ist, die auch als Unter-Slices bezeichnet werden, die modulare Blöcke einer Allzweck- und Festfunktion-Logik aufweisen.
  • In einigen Ausführungsformen weist der Festfunktion-Block 1530 eine Geometrie-/Festfunktion-Pipeline 1531 auf, die von allen Unterkernen in dem Grafikprozessorkern 1519 zum Beispiel bei Grafikprozessor-Implementierungen mit niedriger Leistung und/oder niedriger Energie gemeinsam genutzt werden können. In verschiedenen Ausführungsformen umfasst die Geometrie-/Festfunktion-Pipeline 1531 eine 3D-Festfunktion-Pipeline (z. B. 3D-Pipeline 1612 wie in 16, die im Folgenden beschrieben werden), eine Video-Frontend-Einheit, einen Thread-Spawner und Thread-Verteiler sowie eine vereinte Rückgabepuffer-Verwaltungseinrichtung, die vereinheitlichte Rückgabepuffer (z. B. den vereinheitlichten Rückgabepuffer 1718 in 17, wie im Folgenden beschrieben) verwaltet.
  • In einer Ausführungsform weist der Festfunktion-Block 1530 außerdem eine SoC-Grafikschnittstelle 1532, eine Grafik-Mikrosteuerung 1533 und eine Medien-Pipeline 1534 auf. Die SoC-Grafikschnittstelle 1532 stellt eine Schnittstelle zwischen dem Grafikprozessorkern 1519 und anderen Prozessorkemen innerhalb einer integrierten SoC-Schaltung bereit. Die Grafik-Mikrosteuerung 1533 ist ein programmierbarer Unterprozessor, der konfigurierbar ist, um verschiedene Funktionen des Grafikprozessorkerns 1519 zu verwalten, einschließlich einer Thread-Verteilung, einer Zeitplanung und einer Präemption. Die Medien-Pipeline 1534 (z. B. Medien-Pipeline 1616 von 16 und 17) weist eine Logik auf, um das Decodieren, Codieren, Vorverarbeiten und/oder Nachbearbeiten von Multimedia-Daten, einschließlich Bild- und Videodaten, zu erleichtern. Die Medien-Pipeline 1534 implementiert Medienoperationen über Anforderungen an eine Rechen- oder Abtastlogik innerhalb der Unterkeme 1521-1521F.
  • In einer Ausführungsform ermöglicht die SoC-Schnittstelle 1532, dass der Grafikprozessorkern 1519 mit Allzweck-Anwendungsprozessorkernen (z. B. CPUs) und/oder anderen Komponenten innerhalb eines SoC, einschließlich Speicherhierarchie-Elementen, wie etwa einem gemeinsam genutzten Last Level Cache, dem System-RAM und/oder einem eingebetteten DRAM auf einem Chip oder Package, kommuniziert. Die SoC-Schnittstelle 1532 kann auch eine Kommunikation mit Festfunktion-Vorrichtungen innerhalb des SoC, wie etwa Kamerabildgebung-Pipelines, sowie die Verwendung globaler Speichermittel ermöglichen und/oder diese implementieren, die von dem Grafikprozessorkern 1519 und den CPUs innerhalb des SoC gemeinsam genutzt werden. Die SoC-Schnittstelle 1532 kann zudem Energieverwaltungssteuerungen für den Grafikprozessorkern 1519 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Grafikkerns 1519 und anderen Taktdomänen innerhalb des SoC ermöglichen. In einer Ausführungsform ermöglicht die SoC-Schnittstelle 1532 den Empfang von Befehlspuffern von einem Befehlsstreamer und globalen Thread-Verteiler, die konfiguriert sind, um Befehle und Anweisungen für jeden des einen oder der mehreren Grafikkerne innerhalb eines Grafikprozessors bereitzustellen. Die Befehle und Anweisungen können an die Medien-Pipeline 1534, wenn Medienoperationen durchzuführen sind, oder an eine Geometrie- und Festfunktion-Pipeline (z. B. Geometrie- und Festfunktion-Pipeline 1531, Geometrie- und Festfunktion-Pipeline 1537), wenn Grafikverarbeitungsoperationen durchzuführen sind, geschickt werden.
  • Die Grafik-Mikrosteuerung 1533 kann konfiguriert sein, um verschiedene Zeitplanungs- und Verwaltungsaufgaben für den Grafikprozessorkern 1519 durchzuführen. In einer Ausführungsform kann die Grafik-Mikrosteuerung 1533 Grafik- und/oder Rechen-Arbeitslast-Zeitplanungen an den verschiedenen parallelen Grafikmaschinen innerhalb von Ausführungseinheit-Arrays (EU-Arrays) 1522A-1522F, 1524A-1524F innerhalb der Unterkeme 1521A-1521F durchführen. In diesem Planungsmodul kann eine Host-Software, die auf einem CPU-Kern eines SoC ausgeführt wird, der den Grafikprozessorkern 1519 umfasst, Arbeitslasten an mehreren Grafikprozessor-„Doorbells“ abgeben, die eine Planungsoperation an der angemessenen Grafikmaschine einleiten. Planungsoperationen umfassen ein Bestimmen, welche Arbeitslast als nächste an der Reihe ist, ein Abgeben einer Arbeitslast an einen Befehlsstreamer, eine Präemption von existierenden Arbeitslasten, die auf einer Maschine laufen, ein Überwachen eines Fortschritts einer Arbeitslast und ein Benachrichtigen der Host-Software, wenn eine Arbeitslast abgeschlossen ist. In einer Ausführungsform kann die Grafik-Mikrosteuerung 1533 außerdem Niedrigenergie- oder Ruhezustände für den Grafikprozessorkern 1519 erleichtern, indem sie dem Grafikprozessorkern 1519 die Fähigkeit gibt, Register innerhalb des Grafikprozessorkerns 1519 über Niedrigenergiezustandsübergänge unabhängig von dem Betriebssystem und/oder der Grafiktreibersoftware auf dem System zu sichern und wiederherzustellen.
  • Der Grafikprozessorkern 1519 kann mehr oder weniger Unterkeme als die dargestellten Unterkeme 1521A-1521F und bis zu N modulare Unterkeme aufweisen. Für jeden Satz von N Unterkernen kann der Grafikprozessorkern 1519 auch eine gemeinsam genutzte Funktionslogik 1535, einen gemeinsam genutzten und/oder Cache-Speicher 1536, eine Geometrie-/Festfunktion-Pipeline 1537 sowie eine zusätzliche Festfunktion-Logik 1538 umfassen, um verschiedene Grafik- und Rechenverarbeitungsoperationen zu beschleunigen. Die gemeinsam genutzte Funktionslogik 1535 kann Logikeinheiten aufweisen, die der gemeinsam genutzten Funktionslogik 1720 von 17 zugeordnet sind (z. B. Abtaster-, Mathematik- und/oder Inter-Thread-Kommunikationslogik), die durch alle N Unterkeme innerhalb des Grafikprozessorkerns 1519 gemeinsam genutzt werden. Der gemeinsam genutzte und/oder Cache-Speicher 1536 kann ein Last Level Cache für den Satz von N Unterkernen 1521A-1521F innerhalb des Grafikprozessorkerns 1519 sein und er kann auch als gemeinsam genutzter Speicher dienen, der durch mehrere Unterkeme zugänglich ist. Die Geometrie-/Festfunktion-Pipeline 1537 kann anstelle der Geometrie-/Festfunktion-Pipeline 1531 innerhalb des Festfunktion-Blocks 1530 enthalten sein und die gleichen oder ähnliche Logikeinheiten umfassen.
  • In einer Ausführungsform weist der Grafikprozessorkern 1519 eine zusätzliche Festfunktion-Logik 1538 auf, die verschiedene Festfunktion-Beschleunigungslogiken zur Verwendung durch den Grafikprozessorkern 1519 umfassen kann. In einer Ausführungsform weist die zusätzliche Festfunktion-Logik 1538 eine zusätzliche Geometrie-Pipeline zur Verwendung bei nur positionsbezogenem Schattieren auf. Bei nur positionsbezogenem Schattieren existieren zwei Geometrie-Pipelines, die vollständige Geometrie-Pipeline in der Geometrie-/Festfunktion-Pipeline 1538, 1531 und eine Aussortierung-Pipeline (Cull Pipeline), die eine zusätzliche Geometrie-Pipeline ist, welche in der zusätzlichen Festfunktion-Logik 1538 enthalten sein kann. In einer Ausführungsform ist die Aussortierung-Pipeline eine reduzierte Version der vollständigen Geometrie-Pipeline. Die vollständige Pipeline und die Aussortierung-Pipeline können unterschiedliche Instanzen der gleichen Anwendung ausführen, wobei jede Instanz einen separaten Kontext hat. Ein nur positionsbezogenes Schattieren kann lange Aussortierungsläufe verworfener Dreiecke verbergen, wodurch das Schattieren in manchen Fällen früher abgeschlossen werden kann. Beispielsweise kann die Aussortierung-Pipeline-Logik in einer Ausführungsform in der zusätzlichen Festfunktion-Logik 1538 Position-Shader parallel zu der Hauptanwendung ausführen und erzeugt im Allgemeinen kritische Ergebnisse schneller als die vollständige Pipeline, da die Aussortierung-Pipeline nur die positionsbezogenen Attribute der Vertices abruft und schattiert, ohne eine Rasterisierung und ein Rendering der Pixel des Bildspeichers durchzuführen. Die Aussortierung-Pipeline kann die erzeugten kritischen Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke unabhängig davon zu berechnen, ob diese Dreiecke aussortiert werden. Die vollständige Pipeline (welche in diesem Fall als Replay-Pipeline bezeichnet wird) kann die Sichtbarkeitsinformationen nutzen, um die aussortierten Dreiecke zu überspringen, um nur die sichtbaren Dreiecke zu schattieren, die schließlich in die Rasterisierungsphase weitergegeben werden.
  • In einer Ausführungsform kann die zusätzliche Festfunktion-Logik 1538 auch eine Maschinenlern-Beschleunigungslogik, wie etwa eine Festfunktion-Matrixmultiplikation-Logik, für Implementierungen einschließlich Optimierungen für Maschinenlemtraining oder Inferenzen aufweisen.
  • Innerhalb jedes Grafik-Unterkerns 1521A-1521F ist ein Satz Ausführungsressourcen enthalten, der verwendet werden kann, um Grafik-, Medien- und Rechenoperationen durchzuführen, wenn diese durch die Grafik-Pipeline, die Medien-Pipeline oder Shader-Programme angefordert werden. Die Grafik-Unterkerne 1521A-1521F umfassen mehrere EU-Arrays 1522A-1522F, 1524A-1524F, eine Thread-Verteiler- und Inter-Thread-Kommunikations(TD/IC)-Logik 1523A-1523F, einen 3D-Abtaster 1525A-1525F (z. B. Texturabtaster), einen Medien-Abtaster 1506A-1506F, einen Shader-Prozessor 1527A-1527F und einen gemeinsam genutzten lokalen Speicher (SLM für Shared Local Memory) 1528A-1528F. Die EU-Arrays 1522A-1522F, 1524A-1524F umfassen jeweils mehrere Ausführungseinheiten, die Allzweck-Grafikprozessoren sind, welche in der Lage sind, Gleitkomma- und Ganzzahl-/Festpunkt-Logikoperationen für eine Grafik-, Medien- oder Rechenoperation, einschließlich Grafik-, Medien- oder Rechen-Shader-Programme durchzuführen. Die TD/IC-Logik 1523A-1523F führt lokale Thread-Verteiler- und Thread-Steueroperationen für die Ausführungseinheiten innerhalb eines Unterkerns durch und erleichtert eine Kommunikation zwischen Threads, die an Ausführungseinheiten des Unterkerns ausgeführt werden. Der 3D-Abtaster 1525A-1525F kann Texturdaten oder andere 3D-grafikbezogene Daten in einen Speicher einlesen. Der 3D-Abtaster kann Texturdaten basierend auf einem konfigurierten Abtastzustand und einem einer bestimmten Textur zugeordneten Texturformat unterschiedlich lesen. Der Medienabtaster 1506A-1506F kann ähnliche Leseoperationen basierend auf der Art und dem Format durchführen, die Mediendaten zugeordnet sind. In einer Ausführungsform kann jeder Grafik-Unterkern 1521A-1521F alternativ einen vereinheitlichten 3D- und Medienabtaster umfassen. Threads, die an den Ausführungseinheiten innerhalb jedes der Unterkerne 1521A-1521F ausgeführt werden, können einen gemeinsam genutzten lokalen Speicher 1528A-1528F innerhalb jedes Unterkerns verwenden, um zu ermöglichen, dass Threads, die innerhalb einer Thread-Gruppe ausgeführt werden, unter Verwendung eines gemeinsamen Pools eines On-Chip-Speichers ausgeführt werden.
  • 15C ist ein Blockdiagramm eines Allzweck-Grafikprozessors (GPGPU) 1570, der als Grafikprozessor und/oder Rechenbeschleuniger gemäß der hierin beschriebenen Ausführungsformen konfiguriert sein kann. Der GPGPU 1570 kann sich mit Host-Prozessoren (z. B. einer oder mehreren CPU(s) 1546) und einem Speicher 1571, 1572 über einen oder mehrere System- und/oder Speicherbusse verbinden. In einer Ausführungsform ist der Speicher 1571 ein Systemspeicher, der mit der einen oder den mehreren CPUs 1546 gemeinsam genutzt werden kann, während der Speicher 1572 ein Vorrichtungsspeicher ist, der für den GPGPU 1570 dediziert ist. In einer Ausführungsform können Komponenten innerhalb des GPGPU 1570 und des Vorrichtungsspeichers 1572 auf Speicheradressen abgebildet werden, die für die eine oder mehreren CPU(s) 1546 zugänglich sind. Ein Zugriff auf den Speicher 1571 und 1572 kann über eine Speichersteuerung 1568 erleichtert werden. In einer Ausführungsform umfasst die Speichersteuerung 1568 eine Steuerung für einen internen Direktspeicherzugriff (DMA für Internal Direct Memory Access) 1569 oder sie kann eine Logik umfassen, um Operationen durchzuführen, die andernfalls durch eine DMA-Steuerung durchgeführt werden würden.
  • Der GPGPU 1570 weist mehrere Cache-Speicher auf, einschließlich einen L2-Cache 1553, LI-Cache 1554, einen Anweisungs-Cache 1555 und einen gemeinsam genutzten Speicher 1556, von dem zumindest ein Teil auch als Cache unterteilt sein kann. Der GPGPU 1570 weist zudem mehrere Recheneinheiten 1560A-1560N auf. Jede Recheneinheit 1560A-1560N weist einen Satz Vektorregister 1561, Skalarregister 1562, Vektorlogikeinheiten 1563 und Skalarlogikeinheiten 1564 auf. Die Recheneinheiten 1560A-1560N können zudem einen lokalen gemeinsam genutzten Speicher 1565 und einen Programmzähler 1566 aufweisen. Die Recheneinheiten 1560A-1560N können mit einem konstanten Cache 1567 gekoppelt sein, der verwendet werden kann, um konstante Daten zu speichern, welche Daten sind, die sich während der Durchführung eines Kernel- oder Shader-Programms nicht ändern werden, das auf dem GPGPU 1570 ausgeführt wird. In einer Ausführungsform ist der konstante Cache 1567 ein Skalar-Daten-Cache und zwischengespeicherte Daten können direkt in den Skalarregistem 1562 eingelesen werden.
  • Während eines Betriebs können die eine oder mehreren CPUs 1546 Befehle in Register oder einen Speicher in dem GPGPU 1570 schreiben, die in einen zugänglichen Adressraum abgebildet werden. Die Befehlsprozessoren 1557 können die Befehle aus den Registern oder dem Speicher lesen und bestimmen, wie diese Befehle innerhalb des GPGPU 1570 verarbeitet werden. Ein Thread-Verteiler 1558 kann dann verwendet werden, um Threads auf die Recheneinheiten 1560A-1560N zu verteilen, um diese Befehle durchzuführen. Jede Recheneinheit 1560A-1560N kann Threads unabhängig von den anderen Recheneinheiten ausführen. Zudem kann jede Recheneinheit 1560A-1560N unabhängig für bedingte Rechenvorgänge konfiguriert sein und die Ergebnisse eines Rechenvorgangs an den Speicher ausgeben. Die Befehlsprozessoren 1557 können die eine oder mehreren CPUs 1546 unterbrechen, wenn eingereichte Befehle abgeschlossen sind.
  • 16A-16C stellen Blockdiagramme zusätzlicher Grafikprozessoren und Rechenbeschleuniger-Architekturen dar, die durch hierin beschriebene Ausführungsformen bereitgestellt werden. Die Elemente von 16A-16C, die die gleichen Bezugszeichen (oder Namen) wie die Elemente einer anderen Figur hierin aufweisen, können in einer Weise ähnlich zu der betrieben werden oder funktionieren, die an anderer Stelle hierin beschrieben wird, sind jedoch nicht darauf beschränkt.
  • 16A ist ein Blockdiagramm eines Grafikprozessors 1600, der eine diskrete Grafikverarbeitungseinheit sein kann oder ein Grafikprozessor mit mehreren integrierten Verarbeitungskernen oder ein anderes Halbleiterbauelement, wie etwa Speichervorrichtungen oder Netzwerkschnittstellen, sein kann, ohne darauf beschränkt zu sein. In einigen Ausführungsformen kommuniziert der Grafikprozessor über eine speicherzugeordnete I/O-Schnittstelle mit Registern auf dem Grafikprozessor und mit Befehlen, die in dem Prozessorspeicher platziert werden. In einigen Ausführungsformen weist der Grafikprozessor 1600 eine Speicherschnittstelle 1614 auf, um auf Speicher zuzugreifen. Die Speicherschnittstelle 1614 kann eine Schnittstelle zu einem lokalen Speicher, einem oder mehreren internen Caches, einem oder mehreren gemeinsam genutzten externen Caches und/oder zu einem Systemspeicher sein.
  • In einigen Ausführungsformen weist der Grafikprozessor 1600 auch eine Anzeigesteuerung 1602 auf, um Anzeige-Ausgabedaten an eine Anzeigevorrichtung 1618 zu senden. Die Anzeigesteuerung 1602 weist Hardware für eine oder mehrere Overlay-Ebenen zur Anzeige und Zusammensetzung von mehreren Schichten von Video- und Benutzerschnittstellenelementen auf. Die Anzeigevorrichtung 1618 kann eine interne oder externe Anzeigevorrichtung sein. In einer Ausführungsform ist die Anzeigevorrichtung 1618 eine am Kopf montierte Anzeigevorrichtung, wie etwa eine in VR-Anzeigevorrichtung oder eine AR-Anzeigevorrichtung. In einigen Ausführungsformen weist der Grafikprozessor 1600 eine Video-Codec-Maschine 1606 auf, um Medien zu, von oder zwischen einem oder mehreren Mediencodierungsformaten zu codieren, zu decodieren oder zu transcodieren, einschließlich, aber nicht ausschließlich, MPEG-Formate (Moving Picture Experts Group), wie etwa MPEG-2, AVC-Formate (Advanced Video Coding), wie etwa H.264/MPEG-4 AVC, H.265/HEVC, AOMedia (Alliance for Open Mesia) VP8, VP9 sowie SMPTE (Society of Motion Picture & Television Engineers) 421M/VC-1 und JPEG-Formate (Joint Photographic Experts Group), wie JPEG, und MJPEG-Formate (Motion JPEG).
  • In einigen Ausführungsformen weist der Grafikprozessor 1600 eine BLIT-Maschine 1604 (BLIT für Block Image Transfer) auf, um zweidimensionale (2D) Rasterisierungsoperationen durchzuführen, einschließlich zum Beispiel Bitgrenzblockübertragungen. In einer Ausführungsform werden 2D-Grafikoperationen jedoch unter Verwendung einer oder mehrerer Komponenten einer Grafikverarbeitungsmaschine (GPE für Graphics Processing Engine) 1610 durchgeführt. In einigen Ausführungsformen ist die GPE 1610 eine Rechenmaschine zum Durchführen von Grafikoperationen, einschließlich dreidimensionalen (3D) Grafikoperationen und Medienoperationen.
  • In einigen Ausführungsformen weist die GPE 1610 eine 16D-Pipeline 1612 zum Durchführen von 16D-Operationen auf, wie etwa zum Rendern von dreidimensionalen Bildern und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 16D-Grundkörper-Formen bzw. 16D-Primitive-Formen wirken (z. B. Rechteck, Dreieck usw.). Die 16D-Pipeline 1612 weist programmierbare und Festfunktionselemente auf, die verschiedene Aufgaben innerhalb des Elements und/oder Spawnausführungsthreads zu einem 3D/Medien-Untersystem 1615 durchführen. Während die 3D-Pipeline 1612 verwendet werden kann, um Medienoperationen durchzuführen, weist eine Ausführungsform der GPE 1610 auch eine Medien-Pipeline 1616 auf, die speziell verwendet wird, um Medienoperationen durchzuführen, wie etwa ein Video-Nachbearbeiten und eine Bildverbesserung.
  • In einigen Ausführungsformen weist die Medien-Pipeline 1616 Festfunktions- oder programmierbare Logikeinheiten auf, um eine oder mehrere spezielle Medienoperationen durchzuführen, wie etwa eine Videodecodierbeschleunigung, ein De-Interlacing von Video und eine Videocodierbeschleunigung anstelle oder für eine Video-Codec-Maschine 1606. In einigen Ausführungsformen weist die Medien-Pipeline 1616 zudem eine Thread-Schaffungseinheit auf, um Threads zur Ausführung an dem 3D/Medien-Untersystem 1615 zu schaffen. Die erschaffenen Threads führen Berechnungen für die Medienoperationen an einer oder mehreren Grafikausführungseinheiten aus, die in dem 3D/Medien-Untersystem 1615 enthalten sind.
  • In einigen Ausführungsformen weist das 3D/Medien-Untersystem 1615 eine Logik zum Ausführen von Threads auf, die durch die 3D-Pipeline 1612 und die Medien-Pipeline 1616 geschaffen werden. In einer Ausführungsform senden die Pipelines Thread-Ausführungsanfragen an das 3D/Medien-Untersystem 1615, das eine Thread-Verteilerlogik zum Entscheiden und Verteilen der verschiedenen Anfragen an verfügbare Thread-Ausführungsressourcen aufweist. Die Ausführungsressourcen weisen einen Array von Grafikausführungseinheiten auf, um die 3D- und Medienthreads zu verarbeiten. In einigen Ausführungsformen weist das 3D/Medien-Untersystem 1615 einen oder mehrere interne Caches für Thread-Anweisungen und Daten auf. In einigen Ausführungsformen weist das Untersystem auch einen gemeinsam genutzten Speicher auf, der Register und einen adressierbaren Speicher aufweist, um Daten zwischen Threads zu teilen und um ausgegebene Daten zu speichern.
  • 16B stellt einen Grafikprozessor 1620 mit einer gekachelten Architektur gemäß hierin beschriebenen Ausführungsformen dar. In einer Ausführungsform umfasst der Grafikprozessor 1620 Grafikverarbeitungsmaschinen-Cluster 1622 mit mehreren Instanzen der Grafikverarbeitungsmaschine 1610 von 16A innerhalb einer Grafikmaschinenkachel 1610A-1610D. Jede Grafikmaschinenkachel 1610A-1610D kann über einen Satz Kachelverbindungen 1623A-1623F verbunden sein. Jede Grafikmaschinenkachel 1610A-1610D kann zudem mit einem Speichermodul oder einer Speichervorrichtung 1626A-1626D über Speicherverbindungen 1625A-1625D verbunden sein. Die Speichervorrichtungen 1626A-1626D können eine beliebige Grafikspeichertechnologie verwenden. Beispielsweise können die Speichervorrichtungen 1626A-1626D einen Speicher mit Grafikdoppeldatenrate (GDDR für Graphics Double Data Rate) verwenden. Die Speichervorrichtungen 1626A-1626D sind in einer Ausführungsform Speichermodule mit hoher Bandbreite (HBM-Module), die sich auf einem Die mit ihrer jeweiligen Grafikmaschinenkachel 1610A-1610D befinden können. In einer Ausführungsform sind die Speichervorrichtungen 1626A-1626D gestapelte Speichervorrichtungen, die oben auf ihrer jeweiligen Grafikmaschinenkachel 1610A-1610D gestapelt sind. In einer Ausführungsform befindet sich jede Grafikmaschinenkachel 1610A-1610D und ihr zugeordneter Speicher 1626A-1626D auf separaten Chiplets, die an einem Basis-Die oder Basissubstrat gebunden sind, wie ausführlicher unter Bezugnahme auf 24B-24D beschrieben wird.
  • Das Grafikverarbeitungsmaschinen-Cluster 1622 kann mit einem Fabric Interconnect 1624 auf einem Chip oder auf einem Package verbunden sein. Der Fabric Interconnect 1624 kann eine Kommunikation zwischen den Grafikmaschinenkacheln 1610A-1610D und Komponenten, wie etwa einem Video-Codec 1606 und einer oder mehreren Copy Engines 1604, ermöglichen. Die Copy Engines 1604 können verwendet werden, um Daten aus den Speichervorrichtungen 1626A-1626D herauszubewegen, darein hineinzubewegen oder zwischen ihnen und einem zu dem Grafikprozessor 1620 externen Speichergerät (z. B. Systemspeicher) hin- und herzubewegen. Der Fabric Interconnect 1624 kann außerdem verwendet werden, um die Grafikmaschinenkacheln 1610A-1610D anzuschließen. Der Grafikprozessor 1620 kann optional eine Anzeigesteuerung 1602 aufweisen, um eine Verbindung mit einer externen Anzeigevorrichtung 1618 zu ermöglichen. Der Grafikprozessor kann zudem als Grafik- oder Rechenbeschleuniger konfiguriert sein. In der Beschleuniger-Konfiguration können die Anzeigesteuerung 1602 und die Anzeigevorrichtung 1618 weggelassen werden.
  • Der Grafikprozessor 1620 kann mit einem Host-System über eine Host-Schnittstelle 1628 verbunden sein. Die Host-Schnittstelle 1628 kann eine Kommunikation zwischen dem Grafikprozessor 1620, dem Systemspeicher und/oder anderen Systemkomponenten ermöglichen. Die Host-Schnittstelle 1628 kann zum Beispiel ein PCI-Express-Bus oder eine andere Art von Host-System-Schnittstelle sein.
  • 16C stellt einen Rechenbeschleuniger 1630 gemäß hierin beschriebenen Ausführungsformen dar. Der Rechenbeschleuniger 1630 kann architektonische Ähnlichkeiten zu dem Grafikprozessor 1620 von 16B aufweisen und ist für eine Rechenbeschleunigung optimiert. Ein Rechenmaschinen-Cluster 1632 kann einen Satz von Rechenmaschinenkacheln 1640A-1640D umfassen, welche eine Ausführungslogik aufweisen, die für parallele oder vektorbasierte Allzweck-Rechenoperationen optimiert ist. In einigen Ausführungsformen umfassen die Rechenmaschinenkacheln 1640A-1640D keine Festfunktion-Grafikprozessorlogik, obgleich in einer Ausführungsform eine oder mehrere der Rechenmaschinenkacheln 1640A-1640D eine Logik umfassen können, um eine Medienbeschleunigung durchzuführen. Die Rechenmaschinenkacheln 1640A-1640D können mit dem Speicher 1626A-1626D über Speicherverbindungen 1625A-1625D verbunden sein. Der Speicher 1626A-1626D und die Speicherverbindungen 1625A-1625D können ähnlich zu der Technologie des Grafikprozessors 1620 oder unterschiedlich sein. Die Grafikrechenmaschinenkacheln 1640A-1640D können auch über einen Satz Kachelverbindungen 1623A-1623F verbunden sein und sie können mit einem Fabric Interconnect 1624 und/oder dadurch verbunden sein. In einer Ausführungsform weist der Rechenbeschleuniger 1630 einen großen L3-Cache 1636 auf, der als vorrichtungsweiter Cache konfiguriert sein kann. Der Rechenbeschleuniger 1630 kann zudem mit einem Host-Prozessor und einem Speicher über eine Host-Schnittstelle 1628 in einer ähnlichen Weise wie der Grafikprozessor 1620 von 16B verbunden sein.
  • Grafikverarbeitungsmaschine
  • 17 ist ein Blockdiagramm einer Grafikverarbeitungsmaschine 1710 eines Grafikprozessors gemäß einigen Ausführungsformen. In einer Ausführungsform ist die Grafikverarbeitungsmaschine (GPE) 1710 eine Version der in 15A gezeigten GPE 1510 und kann auch eine Grafikmaschinenkachel 1510A-1510D von 15B darstellen. Elemente von 17, die die gleichen Bezugszeichen (oder Namen) wie Elemente einer anderen Figur hierin haben, können in einer Weise ähnlich zu der betrieben werden oder funktionieren, die an anderer Stelle hierin beschrieben ist, sind jedoch nicht darauf beschränkt. Beispielsweise sind die 3D-Pipeline 1612 und die Medien-Pipeline 1616 von 15A veranschaulicht. Die Medien-Pipeline 1616 ist in einigen Ausführungsformen der GPE 1710 optional und könnte nicht ausdrücklich in der GPE 1710 enthalten sein. Zum Beispiel ist in mindestens einer Ausführungsform ein separater Medien- und/oder Bildprozessor mit der GPE 1710 gekoppelt.
  • In einigen Ausführungsformen ist die GPE 1710 mit einem Befehlsstreamer 1703 gekoppelt oder umfasst diesen, welcher einen Befehlsstrom für die 3D-Pipeline 1612 und/oder die Medien-Pipelines 1616 bereitstellt. In einigen Ausführungsformen ist der Befehlsstreamer 1703 mit einem Speicher gekoppelt, der ein Systemspeicher oder ein oder mehrere interne Cache-Speicher und ein gemeinsam genutzter Cache-Speicher sein kann. In einigen Ausführungsformen empfängt der Befehlsstreamer 1703 Befehle von dem Speicher und sendet die Befehle an die 3D-Pipeline 1612 und/oder die Medien-Pipeline 1616. Die Befehle sind Anweisungen, die von einem Ringpuffer abgerufen werden, der Befehle für die 3D-Pipeline 1612 und die Medien-Pipeline 1616 speichert. In einer Ausführungsform kann der Ringpuffer zusätzlich Batch-Befehlspuffer aufweisen, die Batches von mehreren Befehlen speichern. Die Befehle für die 3D-Pipeline 1612 können zudem Verweise auf Daten umfassen, die in dem Speicher gespeichert sind, wie etwa, jedoch nicht beschränkt auf, Vertex- und Geometriedaten für die 3D-Pipeline 1612 und/oder Bilddaten und Speicherobjekte für die Medien-Pipeline 316. Die 3D-Pipeline 1612 und die Medien-Pipeline 1616 verarbeiten die Befehle und Daten, indem sie Operationen über eine Logik innerhalb der jeweiligen Pipelines durchführen oder einen oder mehrere Ausführungsthreads auf ein Grafikkern-Array 1714 verteilen. In einer Ausführungsform weist der Grafikkern-Array 1714 einen oder mehrere Blöcke aus Grafikkernen (z. B. Grafikkern(e) 1715A, Grafikkern(e) 1715B) auf, wobei jeder Block einen oder mehrere Grafikkerne aufweist. Jeder Grafikkern umfasst einen Satz Grafikausführungsressourcen, der eine Allzweck-Ausführungslogik und eine für eine Grafik spezifische Ausführungslogik, um Grafik- und Rechenoperationen auszuführen, sowie eine Festfunktion-Textur-Verarbeitungslogik und/oder Maschinenlern- und KI-Beschleunigungslogik aufweist.
  • In verschiedenen Ausführungsformen kann die 3D-Pipeline 1612 eine Festfunktion- und programmierbare Logik umfassen, um ein oder mehrere Shader-Programme zu verarbeiten, wie etwa Vertex-Shader-Programme, Geometrie-Shader-Programme, Pixel-Shader-Programme, Fragment-Shader-Programme, Rechen-Shader-Programme oder andere Shader-Programme, indem sie die Anweisungen verarbeitet und Ausführungsthreads an den Grafikkern-Array 1714 sendet. Der Grafikkern-Array 1714 stellt einen vereinheitlichten Block Ausführungsressourcen zur Verwendung bei einer Verarbeitung dieser Shader-Programme bereit. Eine Mehrzweck-Ausführungslogik (z. B. Ausführungseinheiten) innerhalb des Grafikkerns (der Grafikkerne) 1715A-1714B des Grafikkern-Arrays 1714 umfasst eine Unterstützung für verschiedene 3D-API-Shader-Sprachen und kann mehrere gleichzeitige Ausführungsthreads, die mehreren Shadern zugeordnet sind, ausführen.
  • In einigen Ausführungsformen umfasst der Grafikkern-Array 1714 eine Ausführungslogik, um Medienfunktionen, wie etwa ein Video- und/oder Bildverarbeiten, durchzuführen. In einer Ausführungsform umfassen die Ausführungseinheiten eine Allzweck-Logik, die programmierbar ist, um parallele Allzweck-Rechenoperationen zusätzlich zu den Grafikverarbeitungsoperationen durchzuführen. Die Allzweck-Logik kann Verarbeitungsoperationen parallel zu oder zusammen mit der Allzweck-Logik in Verbindung mit dem Prozessorkern (den Prozessorkernen) 1407 von 14 oder dem Kern 1502A-1502N wie in 15A durchführen.
  • Ausgegebene Daten, die durch Threads erzeugt werden, welche an dem Grafikkern-Array 1714 ausgeführt werden, können Daten an einen Speicher in einem URB (Unified Return Buffer) 1718 ausgeben. Der URB 1718 kann Daten für mehrere Threads speichern. In einigen Ausführungsformen kann der URB 1718 verwendet werden, um Daten zwischen unterschiedlichen Threads zu senden, welche an dem Grafikkern-Array 1714 ausgeführt werden. In einigen Ausführungsformen kann der URB 1718 zusätzlich zur Synchronisation zwischen Threads an dem Grafikkern-Array und der Funktionslogik innerhalb der gemeinsam genutzten Funktionslogik 1720 verwendet werden.
  • In einigen Ausführungsformen ist der Grafikkern-Array 1714 skalierbar, sodass der Array eine variable Anzahl von Grafikkernen aufweist, welche jeweils eine variable Anzahl von Ausführungseinheiten basierend auf der Zielleistung und Leistungsstufe der GPE 1710 aufweisen. In einer Ausführungsform sind die Ausführungsressourcen dynamisch skalierbar, sodass die Ausführungsressourcen nach Bedarf aktiviert oder deaktiviert werden können.
  • Der Grafikkern-Array 1714 ist mit einer gemeinsam genutzten Funktionslogik 1720 gekoppelt, die mehrere Ressourcen aufweist, die von den Grafikkernen in dem Grafikkern-Array gemeinsam genutzt werden. Die gemeinsam genutzten Funktionen innerhalb der gemeinsam genutzten Funktionslogik 1720 sind Hardwarelogikeinheiten, die dem Grafikkern-Array 1714 spezielle ergänzende Funktionen bereitstellen. In verschiedenen Ausführungsformen umfasst die gemeinsam genutzte Funktionslogik 1720 eine Logik eines Abtasters 1721, einer Mathematik 1722 und einer Kommunikation zwischen Threads (ITC für Inter-Thread Communication) 1723. Zudem implementieren einige Ausführungsformen einen oder mehrere Caches 1725 innerhalb der gemeinsam genutzten Funktionslogik 1720.
  • Eine gemeinsam genutzte Funktion wird zumindest in einem Fall implementiert, in dem die Nachfrage nach einer gegebenen speziellen Funktion nicht zur Aufnahme in dem Grafikkern-Array 1714 reicht. Stattdessen wird eine Einzelinstallation dieser speziellen Funktion als eigenständige Entität in der gemeinsam genutzten Funktionslogik 1720 durchgeführt und unter den Ausführungsressourcen innerhalb des Grafikkern-Arrays 1714 geteilt. Der genaue Satz von Funktionen, die zwischen den Grafikkern-Arrays 1714 geteilt werden und innerhalb des Grafikkern-Arrays 1714 enthalten sind, variiert unter den Ausführungsformen. In einigen Ausführungsformen können spezifische gemeinsam genutzte Funktionen innerhalb der gemeinsam genutzten Funktionslogik 1720, die weitreichend durch den Grafikkern-Array 1714 genutzt wird, in der gemeinsam genutzten Funktionslogik 1716 innerhalb des Grafikkern-Arrays 1714 enthalten sein. In verschiedenen Ausführungsformen kann die gemeinsam genutzte Funktionslogik 1716 innerhalb des Grafikkern-Arrays 1714 einige oder alle Logiken innerhalb der gemeinsam genutzten Funktionslogik 1720 umfassen. In einer Ausführungsform können alle Logikelemente innerhalb der gemeinsam genutzten Funktionslogik 1720 innerhalb der gemeinsam genutzten Funktionslogik 1716 des Grafikkern-Arrays 1714 dupliziert werden. Die gemeinsam genutzte Funktionslogik 1720 wird in einer Ausführungsform zugunsten der gemeinsam genutzten Funktionslogik 1716 innerhalb des Grafikkern-Arrays 1714 ausgeschlossen.
  • Ausrührungseinheiten
  • 18A-18B stellen eine Thread-Ausführungslogik 1800 dar, die einen Array von Verarbeitungselementen aufweist, die in einem Grafikprozessorkern gemäß hierin beschriebenen Ausführungsformen eingesetzt werden. Elemente von 18A-18B, die die gleichen Bezugszeichen (oder Namen) wie Elemente einer anderen Figur hierin haben, können in einer Weise ähnlich zu der betrieben werden oder funktionieren, die an anderer Stelle hierin beschrieben ist, sind jedoch nicht darauf beschränkt. 18A-18B stellen einen Überblick über die Thread-Ausführungslogik 1800 dar, die für eine Hardwarelogik repräsentativ sein kann, welche mit jedem Unterkern 221A-221F von 2B dargestellt ist. 18A ist repräsentativ für eine Ausführungseinheit innerhalb eines Allzweck-Grafikprozessors, während 18B repräsentativ für eine Ausführungseinheit ist, die innerhalb eines Rechenbeschleunigers verwendet werden kann.
  • Wie in 18A veranschaulicht, umfasst in einigen Ausführungsformen die Thread-Ausführungslogik 1800 einen Shader-Prozessor 1802, einen Thread-Verteiler 1804, einen Anweisungs-Cache 1806, einen skalierbaren Ausführungseinheitsarray, einschließlich mehrerer Ausführungseinheiten 1808A-1808N, einen Abtaster 1810, einen gemeinsam genutzten lokalen Speicher 1811, einen Daten-Cache 1812 und einen Datenport 1814. In einer Ausführungsform kann der skalierbare Ausführungseinheitsarray dynamisch skalieren, indem er eine oder mehrere Ausführungseinheiten (z. B. eine der Ausführungseinheiten 1808A, 1808B, 1808C, 1808D bis 1808N-1 und 1808N) basierend auf den Rechenanforderungen einer Arbeitslast aktiviert oder deaktiviert. In einer Ausführungsform sind enthaltene Komponenten über eine Verbindungsstruktur miteinander verbunden, die jede der Komponenten verbindet. In einigen Ausführungsformen umfasst die Thread-Ausführungslogik 1800 eine oder mehrere Verbindungen mit einem Speicher, wie etwa einem Systemspeicher oder Cache-Speicher, durch den Anweisungs-Cache 1806, den Datenport 1814, den Abtaster 1810 und/oder die Ausführungseinheiten 1808A-1808N. In einigen Ausführungsformen ist jede Ausführungseinheit (z. B. 1808A) eine eigenständige programmierbare Allzweck-Recheneinheit, die in der Lage ist, mehrere gleichzeitige Hardware-Threads auszuführen, während sie für jeden Thread mehrere Datenelemente parallel verarbeitet. In verschiedenen Ausführungsformen ist der Array aus Ausführungseinheiten 1808A-1808N skalierbar, um eine beliebige Zahl einzelner Ausführungseinheiten zu umfassen.
  • In einigen Ausführungsformen werden die Ausführungseinheiten 1808A-1808N primär verwendet, um Shader-Programme auszuführen. Ein Shader-Prozessor 1802 kann die verschiedenen Shader-Programme verarbeiten und Ausführungsthreads, die den Shader-Programmen zugeordnet sind, über einen Thread-Verteiler 1804 verteilen. In einer Ausführungsform umfasst der Thread-Verteiler eine Logik, um über Thread-Initiierungsanfragen von den Grafik- und Medien-Pipelines zu entscheiden und die angeforderten Threads an einer oder mehreren Ausführungseinheiten in den Ausführungseinheiten 1808A-1808N zu instanziieren. Zum Beispiel kann eine Geometrie-Pipeline einen Vertex-, Tesselation- oder Geometrie-Shader an die Thread-Ausführungslogik zur Verarbeitung senden. In einigen Ausführungsformen kann der Thread-Verteiler 1804 auch Laufzeit-Threadschaffungsanfragen von den ausführenden Shader-Programmen verarbeiten.
  • In einigen Ausführungsformen unterstützen die Ausführungseinheiten 1808A-1808N einen Anweisungssatz, der eine native Unterstützung für viele Standard-3D-Grafik-Shader-Anweisungen aufweist, sodass Shader-Programme von Grafikbibliotheken (z. B. Direct 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen ein Vertex- und Geometrieverarbeiten (z. B. Vertexprogramme, Geometrieprogramme, Vertex-Shaders), ein Pixelverarbeiten (z. B. Pixel-Shaders, Fragment-Shaders) und ein Allzweckverarbeiten (z. B. Rechen- und Medien-Shaders). Jede der Ausführungseinheiten 1808A-1808N ist zur Multi-Issue-Ausführung von SIMD (Single Instruction Multiple Data) in der Lage und eine Mehrfach-Thread-Operation ermöglicht eine effiziente Ausführungsumgebung angesichts von Speicherzugriffen mit höherer Latenz. Jeder Hardware-Thread innerhalb jeder Ausführungseinheit weist eine dedizierte Registerdatei mit hoher Bandbreite und einen zugeordneten unabhängigen Thread-Zustand auf. Bei der Ausführung werden mehrere Einreichungen pro Takt in die Pipelines eingegeben, die zu Ganzzahl-, Einzel- und Doppelgenauigkeits-Gleitkomma-Operationen, SIMD-Zweigoperationen, logischen Operationen, transzendentalen Operationen und anderen Mischoperationen in der Lage sind. Während auf Daten von dem Speicher oder einer der gemeinsam genutzten Funktionen gewartet wird, veranlasst eine Abhängigkeitslogik innerhalb der Ausführungseinheiten 1808A-1808N, dass ein Warte-Thread schläft, bis die angeforderten Daten rückgeführt wurden. Während der Warte-Thread schläft, können die Hardwareressourcen freigegeben werden, um andere Threads zu verarbeiten. Beispielsweise kann während einer Verzögerung, die auf eine Vertex-Shader-Operation zurückzuführen ist, eine Ausführungseinheit Operationen für ein Pixel-Shader-Programm, Fragment-Shader-Programm oder eine andere Art von Shader-Programm, einschließlich eines anderen Vertex-Shader-Programms, durchführen. Für eine Nutzung der Ausführung unter Verwendung eines SIMT (Single Instruction Multiple Thread) als Alternative zur Verwendung von SIMD oder zusätzlich zu der Verwendung von SIMD können verschiedene Ausführungsformen angewandt werden. Ein Verweis auf einen SIMD-Kern oder -Betrieb kann auch für einen SIMT oder für einen SIMD in Kombination mit SIMT gelten.
  • Jede Ausführungseinheit in den Ausführungseinheiten 1808A-1808N wird auf Arrays von Datenelementen betrieben. Die Anzahl von Datenelementen ist die „Ausführungsgröße“ oder die Anzahl von Kanälen für die Anweisung. Ein Ausführungskanal ist eine logische Einheit zur Ausführung eines Datenelementzugriffs, eines Maskierens und einer Flusssteuerung innerhalb von Anweisungen. Die Anzahl von Kanälen kann von der Anzahl von physischen arithmetischen Logikeinheiten (ALUs für Arithmetic Logic Units) oder Gleitkomma-Einheiten (FPUs für Floating Point Units) für einen bestimmten Grafikprozessor unabhängig sein. In einigen Ausführungsformen unterstützen die Ausführungseinheiten 1808A-1808N Ganzzahl- und Gleitkomma-Datentypen.
  • Der Ausführungseinheit-Anweisungssatz umfasst SIMD-Anweisungen. Die verschiedenen Datenelemente können als verpackter Datentyp in einem Register gespeichert werden und die Ausführungseinheit wird die verschiedenen Elemente basierend auf der Datengröße der Elemente verarbeiten. Zum Beispiel werden bei einem Betrieb eines 256 Bit breiten Vektors die 256 Bit des Vektors in einem Register gespeichert und die Ausführungseinheit wird an dem Vektor als vier separate verpackte Datenelemente mit 184 Bit (Datenelemente mit QW-Größe (Quad Word)), als acht separate verpackte Datenelemente mit 32 Bit (Datenelemente mit DW-Größe (Double Word)), als sechzehn separate verpackte Datenelemente mit 16 Bit (Datenelemente mit W-Größe (Word)) oder als zweiunddreißig separate Datenelemente mit 8 Bit (Datenelemente mit B-Größe (Byte)) betrieben. Unterschiedliche Vektorbreiten und Registergrößen sind jedoch möglich.
  • In einer Ausführungsform können eine oder mehrere Ausführungseinheiten in einer zusammengelegten Ausführungseinheit 1809A-1809N mit einer Thread-Steuerlogik (1807A-1807N) kombiniert sein, welche bei den zusammengelegten EUs üblich ist. Mehrere EUs können in einer EU-Gruppe zusammengelegt sein. Jede EU in der zusammengelegten EU-Gruppe kann konfiguriert sein, um einen separaten SIMD-Hardware-Thread auszuführen. Die Anzahl von EUs in einer zusammengelegten EU-Gruppe kann gemäß Ausführungsformen variieren. Zudem können verschiedene SIMD-Breiten pro EU durchgeführt werden, einschließlich, jedoch nicht beschränkt auf SIMD8, SIMD16 und SIMD32. Jede zusammengelegte Grafikausführungseinheit 1809A-1809N umfasst mindestens zwei Ausführungseinheiten. Zum Beispiel umfasst die zusammengelegte Ausführungseinheit 1809A eine erste EU 1808A, eine zweite EU 1808B und eine Thread-Steuerlogik 1807A, welche die erste EU 1808A und die zweite EU 1808B gemein haben. Die Thread-Steuerlogik 1807A steuert Threads, die an der zusammengelegten Grafikausführungseinheit 1809A ausgeführt werden, wodurch ermöglicht wird, dass jede EU innerhalb der zusammengelegten Ausführungseinheiten 1809A-1809N unter Verwendung eines üblichen Anweisungszeigerregisters Ausführungen vornimmt.
  • Ein oder mehrere interne Anweisungs-Caches (z. B. 1806) sind in der Thread-Ausführungslogik 1800 enthalten, um Thread-Anweisungen für die Ausführungseinheiten zwischenzuspeichern. In einigen Ausführungsformen sind ein oder mehrere Daten-Caches (z. B. 1812) enthalten, um Thread-Daten während einer Thread-Ausführung zwischenzuspeichern. Threads, die an der Ausführungslogik 1800 ausgeführt werden, können zudem verwaltete Daten explizit in dem gemeinsam genutzten lokalen Speicher 1811 speichern. In einigen Ausführungsformen ist ein Abtaster 1810 enthalten, um ein Texturabtasten für 3D-Operationen und ein Medienabtasten für Medienoperationen bereitzustellen. In einigen Ausführungsformen weist der Abtaster 1810 eine spezielle Textur- oder Medienabtastfunktion auf, um Textur- oder Mediendaten während des Abtastprozesses zu verarbeiten, bevor die abgetasteten Daten einer Ausführungseinheit bereitgestellt werden.
  • Während einer Ausführung senden die Grafik- und Medien-Pipelines über eine Thread-Schaffungs- und Verteilungslogik Thread-Initiierungsanfragen an die Thread-Ausführungslogik 1800. Sobald eine Gruppe von geometrischen Objekten verarbeitet und in Pixeldaten rasterisiert wurde, wird eine Pixel-Prozessorlogik (z. B. Pixel-Shader-Logik, Fragment-Shader-Logik usw.) innerhalb des Shader-Prozessors 1802 aufgerufen, ausgegebene Informationen weiter zu berechnen und Ergebnisse zu erstellen, die auf Ausgabeflächen zu schreiben sind (z. B. Farbspeicher, Tiefenspeicher, Matrizenspeicher usw.). In einigen Ausführungsformen berechnet ein Pixel-Shader oder ein Fragment-Shader die Werte der verschiedenen Vertexmerkmale, die über das rasterisierte Objekt zu interpolieren sind. In einigen Ausführungsformen führt die Pixel-Prozessorlogik innerhalb des Shader-Prozessors 1802 dann ein über eine Anwendungsprogrammierschnittstelle (API) zugeführtes Pixel- oder Fragment-Shader-Programm aus. Um das Shader-Programm auszuführen, sendet der Shader-Prozessor 1802 Threads an eine Ausführungseinheit (z. B. 1808A) über einen Thread-Verteiler 1804. In einigen Ausführungsformen verwendet der Shader-Prozessor 1802 eine Texturabtastlogik in dem Abtaster 1810, um auf Texturdaten in Texturzuordnungen zuzugreifen, die in dem Speicher gespeichert sind. Arithmetische Operationen an den Texturdaten und den Eingangsgeometriedaten berechnen Pixelfarbdaten für jedes geometrische Fragment oder verwerfen einen oder mehrere Pixel aus einem weiteren Verarbeiten.
  • In einigen Ausführungsformen stellt der Datenport 1814 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 1800 bereit, um verarbeitete Daten an den Speicher zum Weiterverarbeiten an einer Grafikprozessor-Ausgangspipeline auszugeben. In einigen Ausführungsformen weist der Datenport 1814 einen oder mehrere Cache-Speicher (z. B. Daten-Cache 1812) auf oder ist damit gekoppelt, um Daten zum Speicherzugriff über den Datenport zwischenzuspeichern.
  • In einigen Ausführungsformen kann die Ausführungslogik 1800 auch einen Ray Tracer 1805 umfassen, der eine Raytracing-Beschleunigungsfunktion bereitstellen kann. Der Ray Tracer 1805 kann einen Raytracing-Anweisungssatz unterstützen, der Anweisungen/Funktionen für eine Ray Generation umfasst. Der Raytracing-Anweisungssatz kann ähnlich zu dem Raytracing-Anweisungssatz sein, der durch die Raytracing-Kerne 245 in 2C unterstützt wird, oder sich davon unterscheiden.
  • 18B stellt beispielhafte interne Details einer Ausführungseinheit 1808 gemäß den Ausführungsformen dar. Eine Grafikausführungseinheit 1808 kann eine Anweisungsabrufeinheit 1837, einen Allgemeine-Registerdatei-Array (GRF für General Register File) 1824, einen Architektur-Registerdatei-Array (ARF für Architectural Register File) 1826, einen Thread Arbiter 1822, eine Sendeeinheit 1830, eine Verzweigungseinheit 1832, einen Satz SIMD-Gleitkomma-Einheiten (FPUs für Floating Point Units) 1834 und in einer Ausführungsform einen Satz dedizierter Ganzzahl-SIMD-ALUs 1835 umfassen. Die GRF 1824 und die ARF 1826 umfassen den Satz allgemeiner Registerdateien und Architektur-Registerdateien, die jedem gleichzeitigen Hardware-Thread zugeordnet sind, der in der Grafikausführungseinheit 1808 aktiv sein kann. In einer Ausführungsform wird ein architektonischer Zustand pro Thread in der ARF 1826 aufrechterhalten, während Daten, welche während einer Thread-Ausführung verwendet werden, in der GRF 1824 gespeichert werden. Der Ausführungszustand jedes Threads, einschließlich der Anweisungszeiger für jeden Thread, kann in Thread-spezifischen Registern in der ARF 1826 gehalten werden.
  • In einer Ausführungsform weist die Grafikausführungseinheit 1808 eine Architektur auf, die eine Kombination aus einem gleichzeitigen Multi-Threading (SMT für Simultaneous Multi-Threading) und einem hochaufgelösten verschachtelten Multi- Threading (IMT für Interleaved Multi-Threading) ist. Die Architektur hat eine modulare Konfiguration, die zur Zeit des Entwurfs basierend auf einer Zielanzahl von gleichzeitigen Threads und einer Anzahl von Registern pro Ausführungseinheit fein abgestimmt werden kann, wobei die Ausführungseinheitsressourcen über die Logik aufgeteilt werden, die verwendet wird, um mehrere gleichzeitige Threads auszuführen. Die Anzahl von logischen Threads, die durch die Grafikausführungseinheit 1808 ausgeführt werden kann, ist nicht auf die Anzahl von Hardware-Threads beschränkt und jedem Hardware-Thread können mehrere logische Threads zugeordnet werden.
  • In einer Ausführungsform kann die Grafikausführungseinheit 1808 auch mehrere Anweisungen zusammen einreichen, welche unterschiedliche Anweisungen sein können. Der Thread Arbiter 1822 des Grafikausführungseinheit-Threads 1808 kann die Anweisungen auf die Sendeeinheit 1830, die Verzweigungseinheit 1832 und/oder die SIMD-FPU(s) 1834 zur Ausführung verteilen. Jeder Ausführungsthread kann auf 128 Allzweck-Register innerhalb der GRF 1824 zugreifen, wobei jedes Register 32 Byte speichern kann, das als SIMD-8-Element-Vektor von Datenelementen mit 32 Bit zugänglich ist. In einer Ausführungsform hat jeder Ausführungseinheit-Thread Zugriff auf 4 KByte innerhalb der GRF 1824, obgleich Ausführungsformen nicht darauf begrenzt sind und mehr oder weniger Registerressourcen in anderen Ausführungsformen bereitgestellt werden können. In einer Ausführungsform ist die Grafikausführungseinheit 1808 in sieben Hardware-Threads unterteilt, die Rechenoperationen unabhängig durchführen, obwohl die Anzahl von Threads pro Ausführungseinheit auch gemäß Ausführungsformen variieren kann. Beispielsweise werden in einer Ausführungsform bis zu 16 Hardware-Threads unterstützt. In einer Ausführungsform, in der sieben Threads auf 4 KByte zugreifen können, kann die GRF 1824 insgesamt 28 KByte speichern. Wenn 16 Threads auf 4 KBytes zugreifen können, kann die GRF 1824 insgesamt 64 KBytes speichern. Flexible Adressiermodi können erlauben, dass Register zusammen adressiert werden, um effektiv breitere Register zu schaffen oder um „strided“ rechteckige Blockdatenstrukturen darzustellen.
  • In einer Ausführungsform werden Speicheroperationen, Abtaster-Operationen und andere Systemkommunikationen mit längerer Latenz über „Senden“-Anweisungen verteilt, die durch die Nachrichtweitergabe-Sendeeinheit 1830 ausgeführt werden. In einer Ausführungsform werden Verzweigungsanweisungen an eine dedizierte Verzweigungseinheit 1832 gesendet, um eine SIMD-Divergenz und eventuelle Konvergenz zu erleichtern.
  • In einer Ausführungsform umfasst die Grafikausführungseinheit 1808 eine oder mehrere SIMD-Gleitkomma-Einheiten (FPU(s)) 1834, um Gleitkommaoperationen durchzuführen. In einer Ausführungsform unterstützen die FPU(s) 1834 auch Ganzzahl-Rechenvorgänge. In einer Ausführungsform können die FPU(s) 1834 SIMD bis zu M Anzahl von 32-Bit-Gleitkomma-Operationen (oder Ganzzahl-Operationen) oder SIMD bis zu 2M 16-Bit-Ganzzahl- oder 16-Bit-Gleitkomma-Operationen ausführen. In einer Ausführungsform stellt mindestens eine der FPU(s) eine erweiterte Mathematik-Fähigkeit bereit, um transzendentale Mathematikfunktionen mit hohem Durchsatz und 184-Bit-Gleitkomma mit doppelter Genauigkeit zu unterstützen. In einigen Ausführungsformen ist auch ein Satz 8-Bit-Ganzzahl-SIMD-ALUs 1835 vorhanden und kann speziell optimiert werden, um Operationen durchzuführen, die Maschinenlern-Rechenvorgängen zugeordnet sind.
  • In einer Ausführungsform können Arrays aus mehreren Instanzen der Grafikausführungseinheit 1808 in einer Grafik-Unterkern-Gruppierung (z. B. einem Unter-Slice) instanziiert werden. Zur Skalierbarkeit können Produktarchitekten die exakte Anzahl von Ausführungseinheiten pro Unterkern-Gruppierung wählen. In einer Ausführungsform kann die Ausführungseinheit 1808 Anweisungen über mehrere Ausführungskanäle ausführen. In einer weiteren Ausführungsform wird jeder Thread, der an der Grafikausführungseinheit 1808 ausgeführt wird, an einem anderen Kanal ausgeführt.
  • 19 stellt eine zusätzliche Ausführungseinheit 1900 gemäß einer Ausführungsform dar. Die Ausführungseinheit 1900 kann eine rechenoptimierte Ausführungseinheit zur Verwendung in beispielsweise einer Rechenmaschinenkachel 1540A-1540D wie in 15C sein, sie ist jedoch nicht als solche begrenzt. Es können auch Varianten der Ausführungseinheit 1900 in einer Grafikmaschinenkachel 1510A-1510D wie in 15B verwendet werden. In einer Ausführungsform umfasst die Ausführungseinheit 1900 eine Thread-Steuereinheit 1901, eine Thread-Zustandseinheit 1902, eine Anweisungsabruf/-vorabrufseinheit 1903 und eine Anweisungsdecodiereinheit 1904. Die Ausführungseinheit 1900 umfasst zudem eine Registerdatei 1906, die Register speichert, die Hardware-Threads innerhalb der Ausführungseinheit zugeordnet sind. Die Ausführungseinheit 1900 umfasst zusätzlich eine Sendeeinheit 1907 und eine Verzweigungseinheit 1908. In einer Ausführungsform können die Sendeeinheit 1907 und die Verzweigungseinheit 1908 ähnlich wie die Sendeeinheit 1830 und eine Verzweigungseinheit 1832 der Grafikausführungseinheit 1808 von 18B arbeiten.
  • Die Ausführungseinheit 1900 weist außerdem eine Recheneinheit 1910 auf, die mehrere unterschiedliche Arten von Funktionseinheiten umfasst. In einer Ausführungsform umfasst die Recheneinheit 1910 eine ALU-Einheit 1911, die einen Array aus arithmetischen Logikeinheiten umfasst. Die ALU-Einheit 1911 kann konfiguriert sein, um Ganzzahl- und Gleitkommaoperationen von 64 Bit, 32 Bit und 16 Bit durchzuführen. Ganzzahl- und Gleitkommaoperationen können gleichzeitig durchgeführt werden. Die Recheneinheit 1910 kann auch ein systolisches Array 1912 und eine Mathematikeinheit 1913 umfassen. Der systolische Array 1912 weist ein W-Breiten- und D-Tiefen-Netz aus Datenverarbeitungseinheiten auf, die verwendet werden können, um Vektoroperationen oder andere Daten-parallelen Operationen in einer systolischen Weise durchzuführen. In einer Ausführungsform kann der systolische Array 1912 konfiguriert sein, um Matrixoperationen, wie M-Skalarprodukt-Operationen, durchzuführen. In einer Ausführungsform unterstützt der systolische Array 1912 16-Bit-Gleitkommaoperationen sowie 8-Bit- und 4-Bit-Ganzzahloperationen. In einer Ausführungsform kann der systolische Array 1912 konfiguriert sein, um Maschinenlernoperationen zu beschleunigen. In derartigen Ausführungsformen kann der systolische Array 1912 mit einer Unterstützung für das bfloat-16-Bit-Gleitkommaformat konfiguriert sein. In einer Ausführungsform kann eine Mathematikeinheit 1913 enthalten sein, um einen spezifischen Untersatz von mathematischen Operationen in einer effizienten und energiesparenderen Weise als dann die ALU-Einheit 1911 durchzuführen. Die Mathematikeinheit 1913 kann eine Variante einer Mathematiklogik umfassen, die in einer gemeinsam genutzten Funktionslogik einer Grafikverarbeitungsmaschine von anderen Ausführungsformen zu finden sein kann (z. B. Mathematiklogik 1722 der gemeinsam genutzten Funktionslogik 1720 von 17). In einer Ausführungsform kann die Mathematikeinheit 1913 konfiguriert sein, um 32-Bit- und 64-Bit-Gleitkommaoperationen durchzuführen.
  • Die Thread-Steuereinheit 1901 umfasst eine Logik, um die Ausführung von Threads innerhalb der Ausführungseinheit zu steuern. Die Thread-Steuereinheit 1901 kann eine Thread-Entscheidungslogik umfassen, um eine Ausführung von Threads innerhalb der Ausführungseinheit 1900 zu starten, zu stoppen und ihr vorzugreifen. Die Thread-Zustandseinheit 1902 kann verwendet werden, um einen Thread-Zustand für Threads zu speichern, die zugeordnet sind, um an der Ausführungseinheit 1900 ausgeführt zu werden. Das Speichern des Thread-Zustands innerhalb der Ausführungseinheit 1900 ermöglicht die schnelle Präemption von Threads, wenn diese Threads gesperrt werden oder ruhen. Die Anweisungsabruf/-vorabrufseinheit 1903 kann Anweisungen aus einem Anweisungs-Cache einer Ausführungslogik einer höheren Ebene abrufen (z. B. aus einem Anweisungs-Cache 1806 wie in 18A). Die Anweisungsabruf/-vorabrufseinheit 1903 kann auch Anfragen für Anweisungen, die in den Anweisungs-Cache geladen werden, basierend auf einer Analyse aktuell ausgeführter Threads vorab abrufen. Die Anweisungsdecodiereinheit 1904 kann verwendet werden, um Anweisungen zu decodieren, die durch die Recheneinheiten ausgeführt werden. In einer Ausführungsform kann die Anweisungsdecodiereinheit 1904 als sekundärer Decodierer verwendet werden, um komplexe Anweisungen in konstituierende Mikrooperationen zu decodieren.
  • Die Ausführungseinheit 1900 umfasst zusätzlich eine Registerdatei 1906, die durch Hardware-Threads verwendet werden kann, die an der Ausführungseinheit 1900 ausgeführt werden. Register in der Registerdatei 1906 können über die Logik aufgeteilt werden, die verwendet wird, um mehrere gleichzeitige Threads innerhalb der Recheneinheit 1910 der Ausführungseinheit 1900 auszuführen. Die Anzahl von logischen Threads, die durch die Grafikausführungseinheit 1900 ausgeführt werden kann, ist nicht auf die Anzahl von Hardware-Threads beschränkt und jedem Hardware-Thread können mehrere logische Threads zugeordnet werden. Die Größe der Registerdatei 1906 kann über die Ausführungsformen basierend auf der Anzahl unterstützter Hardware-Threads variieren. In einer Ausführungsform kann die Registerumbenennung verwendet werden, um die Register den Hardware-Threads dynamisch zuzuweisen.
  • 20 ist ein Blockdiagramm, das Grafikprozessoranweisungsformate 2000 gemäß einigen Ausführungsformen darstellt. In einer oder mehreren Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten einen Anweisungssatz mit Anweisungen in mehreren Formaten. Die durchgezogenen Kästchen stellen die Komponenten dar, die im Allgemeinen in einer Ausführungseinheitsanweisung enthalten sind, während die gestrichelten Linien Komponenten enthalten, die optional sind oder die nur in einem Untersatz der Anweisungen enthalten sind. In einigen Ausführungsformen sind die Anweisungsformate 2000, die beschrieben und dargestellt sind, insofern Makroanweisungen, dass sie Anweisungen sind, die der Ausführungseinheit zugeführt werden, im Gegensatz zu Mikrooperationen, die sich aus einem Anweisungsdecodieren ergeben, sobald die Anweisung verarbeitet wurde.
  • In einigen Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten Anweisungen nativ in einem 128-Bit-Anweisungsformat 2010. Ein 64-Bit-kompaktiertes Anweisungsformat 2030 ist für einige Anweisungen basierend auf der ausgewählten Anweisung, den Anweisungsoptionen und einer Anzahl von Operanden verfügbar. Das native 128-Bit-Anweisungsformat 2010 stellt einen Zugriff auf alle Anweisungsoptionen bereit, während einige Optionen und Operationen in dem 64-Bit-Format 2030 beschränkt sind. Die nativen Anweisungen, die in dem 64-Bit-Format 2030 verfügbar sind, variieren von Ausführungsform zu Ausführungsform. In einigen Ausführungsformen ist die Anweisung teilweise unter Verwendung eines Satzes von Indexwerten in einem Indexfeld 2013 kompaktiert. Die Ausführungseinheitshardware nimmt basierend auf den Indexwerten auf einen Satz von Kompaktiertabellen Bezug und verwendet die Kompaktiertabellenausgaben, um eine native Anweisung in dem 128-Bit-Anweisungsformat 2010 zu rekonstruieren. Es können auch andere Größen und Formate von Anweisungen verwendet werden.
  • Für jedes Format definiert ein Anweisungsopcode 2012 die Operation, die durch die Ausführungseinheit durchzuführen ist. Die Ausführungseinheiten führen jede Anweisung in den mehreren Datenelementen jedes Operanden parallel aus. Zum Beispiel führt die Ausführungseinheit als Reaktion auf eine Addieranweisung eine simultane Addieroperation in jedem Farbkanal durch, der ein Texturelement oder Bildelement darstellt. Die Ausführungseinheit führt standardmäßig jede Anweisung in allen Datenkanälen der Operanden durch. In einigen Ausführungsformen ermöglicht das Anweisungssteuerfeld 2014 eine Steuerung von bestimmten Ausführungsoptionen, wie eine Kanalauswahl (z. B. Prädikation) und eine Datenkanalreihenfolge (z. B. Swizzle). Für Anweisungen in dem 128-Bit-Anweisungsformat 2010 begrenzt ein Exec-Größe-Feld 2016 die Anzahl von Datenkanälen, die parallel ausgeführt werden. In einigen Ausführungsformen ist das Exec-Größe-Feld 2016 zur Verwendung in dem 64-Bit-Kompaktanweisungsformat 2030 nicht verfügbar.
  • Einige Ausführungseinheitsanweisungen haben bis zu drei Operanden, die zwei Quelloperanden, src0 2020, src1 2022 und ein Ziel 2018 aufweisen. In einigen Ausführungsformen unterstützen die Ausführungseinheiten duale Zielanweisungen, wobei eines der Ziele implizit ist. Datenhandhabungsanweisungen können einen dritten Quelloperanden (z. B. SRC2 2024) haben, wobei der Anweisungsopcode 2012 die Anzahl von Quelloperanden bestimmt. Ein letzter Quelloperand der Anweisung kann ein unmittelbarer (z. B. hartcodierter) Wert sein, der mit der Anweisung weitergegeben wird.
  • In einigen Ausführungsformen weist das 128-Bit-Anweisungsformat 2010 ein Zugriffs-/Adressmodusfeld 2026 auf, das zum Beispiel spezifiziert, ob ein direkter Registeradressiermodus oder ein indirekter Registeradressiermodus verwendet wird. Wenn ein direkter Registeradressiermodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden direkt durch Bits in der Anweisung bereitgestellt.
  • In einigen Ausführungsformen weist das 128-Bit-Anweisungsformat 2010 ein Zugriffs-/Adressmodusfeld 2026 auf, das einen Adressmodus und/oder einen Zugriffsmodus für die Anweisung spezifiziert. In einer Ausführungsform wird der Zugriffsmodus verwendet, um eine Datenzugriffsausrichtung für die Anweisung zu definieren. Einige Ausführungsformen unterstützen Zugriffsmodi, einschließlich eines 16-Byte-ausgerichteten Zugriffsmodus und eines 1-Byte-ausgerichteten Zugriffsmodus, wobei die Byte-Ausrichtung des Zugriffsmodus die Zugriffsausrichtung der Anweisungsoperanden bestimmt. Zum Beispiel kann, wenn ein erster Modus vorliegt, die Anweisung ein Byte-ausgerichtetes Adressieren für Quell- und Zieloperanden verwenden, und wenn ein zweiter Modus vorliegt, kann die Anweisung ein 16-Byte-ausgerichtetes Adressieren für alle Quell- und Zieloperanden verwenden.
  • In einer Ausführungsform bestimmt der Adressmodusabschnitt des Zugriffs-/Adressmodusfeldes 2026, ob die Anweisung ein direktes oder indirektes Adressieren verwenden soll. Wenn ein direkter Registeradressiermodus verwendet wird, stellen Bits in der Anweisung direkt die Registeradresse eines oder mehrerer Operanden bereit. Wenn ein indirekter Registeradressiermodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressregisterwert und einem Adresszwischenfeld in der Anweisung berechnet werden.
  • In einigen Ausführungsformen werden Anweisungen basierend auf Bit-Feldern eines Opcodes 2012 gruppiert, um ein Opcodedecodieren 2040 zu vereinfachen. Für einen 8-Bit-Opcode ermöglichen Bit 4, 5 und 6 der Ausführungseinheit, die Art des Opcodes zu bestimmen. Die gezeigte präzise Opcode-Gruppierung ist lediglich ein Beispiel. In einigen Ausführungsformen weist eine Bewegungs- und Logik-Opcode-Gruppe 2042 Datenbewegungs- und Logikanweisungen auf (z. B. Bewegen (mov), Vergleichen (com)). In einigen Ausführungsformen teilt eine Bewegungs- und Logikgruppe 2042 die fünf höchstwertigen Bits (MSB), wobei Bewegungsanweisungen (mov) in Form von 0000xxxxb und Logikanweisungen in Form von 0001xxxxb erfolgen. Eine Flusssteuerung-Anweisungsgruppe 2044 (z. B. Aufrufen, Springen (jmp)) weist Anweisungen in Form von 001Oxxxxb auf (z. B. 0x20). Eine Mischanweisungsgruppe 2046 weist eine Mischung von Anweisungen auf, einschließlich Synchronisationsanweisungen (z. B. Warten, Senden) in Form von 0011xxxxb (z. B. 0x30). Eine parallele Mathematikanweisungsgruppe 2048 weist komponentenweise arithmetische Anweisungen (z. B. Addieren, Multiplizieren (mul)) in Form von 0100xxxxb auf (z. B. 0x40) auf. Die parallele Mathematikgruppe 2048 führt die arithmetischen Operationen über Datenkanäle parallel durch. Die Vektormathematikgruppe 2050 weist arithmetische Anweisungen (z. B. dp4) in Form 0101xxxxb auf (z. B. 0x50). Die Vektormathematikgruppe führt arithmetische Berechnungen, wie etwa Skalarproduktberechnungen, an Vektoroperanden durch. Die dargestellte Opcode-Decodierung 2040 kann in einer Ausführungsform verwendet werden, um zu bestimmen, welcher Teil einer Ausführungseinheit verwendet wird, um eine decodierte Anweisung auszuführen. Beispielsweise können einige Anweisungen als systolische Anweisungen bezeichnet sein, die durch einen systolischen Array durchgeführt werden. Andere Anweisungen, wie etwa Raytracing-Anweisungen (nicht gezeigt) können an einen Raytracing-Kern oder eine Raytracing-Logik innerhalb eines Slices oder einer Unterteilung einer Ausführungslogik geleitet werden.
  • Grafik-Pipeline
  • 21 ist ein Blockdiagramm eines Grafikprozessors 2100 gemäß einer weiteren Ausführungsform. Elemente von 21, die die gleichen Bezugszeichen (oder Namen) wie Elemente einer anderen Figur hierin haben, können in einer Weise ähnlich zu der betrieben werden oder funktionieren, die an anderer Stelle hierin beschrieben ist, sind jedoch nicht darauf beschränkt.
  • In einigen Ausführungsformen umfasst der Grafikprozessor 2100 eine Geometrie-Pipeline 2120, eine Medien-Pipeline 2130, eine Anzeigemaschine 2140, eine Thread-Ausführungslogik 2150 und eine Renderausgabe-Pipeline 2170. In einigen Ausführungsformen ist der Grafikprozessor 2100 ein Grafikprozessor innerhalb eines Mehrkern-Verarbeitungssystems, das einen oder mehrere Allzweck-Verarbeitungskerne aufweist. Der Grafikprozessor wird durch Registerschreibvorgänge auf einem oder mehreren Steuerregistern (nicht gezeigt) oder über Befehle, die an den Grafikprozessor 2100 über eine Ringverbindung 2102 ausgegeben werden, gesteuert. In einigen Ausführungsformen kann die Ringverbindung 2102 den Grafikprozessor 2100 mit anderen Verarbeitungskomponenten koppeln, wie etwa anderen Grafikprozessoren oder Allzweckprozessoren. Befehle von der Ringverbindung 2102 werden durch einen Befehlsstreamer 2103 interpretiert, der die Anweisungen einzelnen Komponenten der Geometrie-Pipeline 2120 oder der Medien-Pipeline 2130 zuführt.
  • In einigen Ausführungsformen leitet der Befehlsstreamer 2103 die Operation eines Vertex-Abrufers 2105, der Vertexdaten aus einem Speicher liest und Vertexverarbeitungsbefehle ausführt, die durch den Befehlsstreamer 2103 bereitgestellt werden. In einigen Ausführungsformen stellt der Vertex-Abrufer 2105 Vertexdaten einem Vertex-Shader 2107 bereit, der Koordinatensystemumwandlungs- und Beleuchtungsoperationen für jeden Vertex durchführt. In einigen Ausführungsformen führen der Vertex-Abrufer 2105 und der Vertex-Shader 2107 Vertexverarbeitungsanweisungen aus, indem sie Ausführungsthreads auf Ausführungseinheiten 2152A-2152B über einen Thread-Verteiler 2131 verteilen.
  • In einigen Ausführungsformen sind die Ausführungseinheiten 2152A-2152B ein Array aus Vektorprozessoren mit einem Anweisungssatz zum Durchführen von Grafik- und Medienoperationen. In einigen Ausführungsformen haben die Ausführungseinheiten 2152A-2152B einen angehängten L1-Cache 2151, der für jeden Array spezifisch ist oder von den Arrays gemeinsam genutzt wird. Der Cache kann als Daten-Cache, Anweisungs-Cache oder Einzel-Cache konfiguriert sein, der unterteilt ist, um Daten und Anweisungen in unterschiedlichen Teilen zu halten.
  • In einigen Ausführungsformen weist die Geometrie-Pipeline 2120 Tesselationskomponenten auf, um eine hardwarebeschleunigte Tesselation von 3D-Objekten durchzuführen. In einigen Ausführungsformen konfiguriert ein programmierbarer Hull-Shader 2111 die Tesselationsoperationen. Ein programmierbarer Domänen-Shader 2117 stellt eine Backend-Bewertung einer Tesselationsausgabe bereit. Ein Tesselator 2113 wird auf Anleitung des Hull-Shaders 2111 betrieben und enthält eine Logik für einen besonderen Zweck, um einen Satz von ausführlichen geometrischen Objekten basierend auf einem groben geometrischen Modell zu erzeugen, das als Eingabe in die Grafik-Pipeline 2120 bereitgestellt wird. In einigen Ausführungsformen können, wenn keine Tesselation verwendet wird, Tesselationskomponenten (z. B. Hull-Shader 2111, Tesselator 2113 und Domänen-Shader 2117) umgangen werden.
  • In einigen Ausführungsformen können vollständige geometrische Objekte durch einen Geometrie-Shader 2119 über einen oder mehrere Threads verarbeitet werden, die auf die Ausführungseinheiten 2152A-2152B verteilt werden, oder sie können direkt bei dem Clipper 2129 fortfahren. In einigen Ausführungsformen arbeitet der Geometrie-Shader an gesamten geometrischen Objekten, statt an Vertices oder Patches von Vertices wie in vorhergehenden Stufen der Grafik-Pipeline. Wenn die Tesselation deaktiviert ist, empfängt der Geometrie-Shader 2119 eine Eingabe von dem Vertex-Shader 2107. In einigen Ausführungsformen ist der Geometrie-Shader 2119 durch ein Geometrie-Shader-Programm programmierbar, um eine Geometrie-Tesselation durchzuführen, wenn die Tesselationseinheiten deaktiviert sind.
  • Vor einer Rasterisierung verarbeitet ein Clipper 2129 Vertexdaten. Der Clipper 2129 kann ein Festfunktion-Clipper oder ein programmierbarer Clipper mit Clipping- und Geometrie-Shader-Funktionen sein. In einigen Ausführungsformen verteilt eine Rasterizer- und Tiefentestkomponente 2173 in der Renderausgabe-Pipeline 2170 Pixel-Shader, um die geometrischen Objekte in Pixeldarstellungen zu konvertieren. In einigen Ausführungsformen ist eine Pixel-Shader-Logik in der Thread-Ausführungslogik 2150 enthalten. In einigen Ausführungsformen kann eine Anwendung den Rasterizer 2173 umgehen und auf nicht rasterisierte Vertexdaten über eine Stromausgangseinheit 2123 zugreifen.
  • Der Grafikprozessor 2100 hat einen Verbindungsbus, eine Verbindungsstruktur (Interconnect Fabric) oder einen anderen Verbindungsmechanismus, der es Daten und Nachrichten erlaubt, unter den Hauptkomponenten des Prozessors übertragen zu werden. In einigen Ausführungsformen sind die Ausführungseinheiten 2152A-2152B und die zugeordneten Logikeinheiten (z. B. L1-Cache 2151, Abtaster 2154, Textur-Cache 2158 usw.) über einen Datenport 2156 verbunden, um einen Speicherzugriff durchzuführen und um mit Renderausgabe-Pipeline-Komponenten des Prozessors zu kommunizieren. In einigen Ausführungsformen haben der Abtaster 2154, die Caches 2151, 2158 und die Ausführungseinheiten 2152A-2152B jeweils separate Speicherzugriffswege. In einer Ausführungsform kann der Textur-Cache 2158 auch als Abtaster-Cache konfiguriert sein.
  • In einigen Ausführungsformen enthält die Renderausgabe-Pipeline 2170 eine Rasterizer- und Tiefentestkomponente 2173, die vertexbasierte Objekte in eine zugeordnete pixelbasierte Darstellung konvertiert. In einigen Ausführungsformen weist die Rasterizer-Logik eine Windower-/Maskiereinheit auf, um eine Festfunktion-Dreieck- und Linienrasterisierung durchzuführen. Ein zugeordneter Render-Cache 2178 und Tiefen-Cache 2179 sind in einigen Ausführungsformen auch verfügbar. Eine Pixeloperationskomponente 2177 führt pixelbasierte Operationen an den Daten durch, obgleich in einigen Instanzen Pixeloperationen, die 2D-Operationen zugeordnet sind (z. B. Bitblock-Bildtransfer mit Mischung), durch die 2D-Maschine 2141 durchgeführt werden oder in einer Anzeigezeit durch die Anzeigesteuerung 2143 unter Verwendung von Overlay-Anzeigeebenen ersetzt werden. In einigen Ausführungsformen ist ein gemeinsam genutzter L3-Cache 2175 für alle Grafikkomponenten verfügbar, der das Teilen von Daten ermöglicht, ohne den Hauptsystemspeicher zu verwenden.
  • In einigen Ausführungsformen weist die Grafikprozessor-Medien-Pipeline 2130 eine Medienmaschine 2137 und ein Video-Frontend 2134 auf. In einigen Ausführungsformen empfängt das Video-Frontend 2134 Pipeline-Befehle von dem Befehlsstreamer 2103. In einigen Ausführungsformen weist die Medien-Pipeline 2130 einen separaten Befehlsstreamer auf. In einigen Ausführungsformen verarbeitet das Video-Frontend 2134 Medienbefehle vor einem Senden des Befehls an die Medienmaschine 2137. In einigen Ausführungsformen weist die Medienmaschine 2137 eine Threadschaffungsfunktion auf, um Threads zu schaffen, die an die Thread-Ausführungslogik 2150 über den Thread-Verteiler 2131 gesendet werden.
  • In einigen Ausführungsformen weist der Grafikprozessor 2100 eine Anzeigemaschine 2140 auf. In einigen Ausführungsformen ist die Anzeigemaschine 2140 extern zu dem Prozessor 2100 und kann mit dem Grafikprozessor über die Ringverbindung 2102 oder einen anderen Verbindungsbus oder eine andere Verbindungsstruktur gekoppelt werden. In einigen Ausführungsformen weist die Anzeigemaschine 2140 eine 2D-Maschine 2141 und eine Anzeigesteuerung 2143 auf. In einigen Ausführungsformen enthält die Anzeigemaschine 2140 eine Logik für einen besonderen Zweck, die imstande ist, unabhängig von der 3D-Pipeline betrieben zu werden. In einigen Ausführungsformen kann die Anzeigesteuerung 2143 mit einer Anzeigevorrichtung (nicht gezeigt) gekoppelt werden, die eine systemintegrierte Anzeigevorrichtung, wie ein Laptop-Computer, oder eine externe Anzeigevorrichtung, die über einen Anzeigevorrichtung-Verbinder angebracht ist, sein kann.
  • In einigen Ausführungsformen sind die Geometrie-Pipeline 2120 und die Medien-Pipeline 2130 konfigurierbar, um Operationen basierend auf mehreren Grafik- und Medienprogrammierschnittstellen durchzuführen, und nicht für eine Anwendungsprogrammierschnittstelle (API) spezifisch. In einigen Ausführungsformen übersetzt eine Treibersoftware für den Grafikprozessor API-Aufrufe, die für eine bestimmte Grafik- oder Medienbibliothek spezifisch sind, in Befehle, die durch den Grafikprozessor verarbeitet werden können. In einigen Ausführungsformen wird für die Open Graphics Library (OpenGL), Open Computing Language (OpenCL) und/oder Vulkan-Grafik eine Unterstützung sowie die Rechen-API bereitgestellt, die alle von der Khronos Group sind. In einigen Ausführungsformen kann auch für die Direct3D-Bibliothek der Microsoft Corporation eine Unterstützung bereitgestellt werden. In einigen Ausführungsformen kann eine Kombination aus diesen Bibliotheken unterstützt werden. Eine Unterstützung kann auch für die OpenCV-Bibliothek (Open Source Computer Vision) bereitgestellt werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline würde auch unterstützt werden, wenn ein Abbilden von der Pipeline der zukünftigen API auf die Pipeline des Grafikprozessors durchgeführt werden kann.
  • Grafik-Pipeline-Programmieren
  • 22A ist ein Blockdiagramm, das ein Grafikprozessorbefehlsformat 2200 gemäß einigen Ausführungsformen darstellt. 22B ist ein Blockdiagramm, das ein Grafikprozessorbefehlsformat 2210 gemäß einer Ausführungsform darstellt. Die durchgezogenen Kästchen in 22A stellen die Komponenten dar, die im Allgemeinen in einem Grafikbefehl enthalten sind, während die gestrichelten Linien Komponenten aufweisen, die optional sind oder die nur in einem Untersatz der Grafikbefehle enthalten sind. Das beispielhafte Grafikprozessorbefehlsformat 2200 von 22A umfasst Datenfelder, um einen Client 2202, einen Befehlsoperationscode (Opcode) 2204 und Daten 2206 für den Befehl zu identifizieren. In einigen Befehlen sind auch ein Unteropcode 2205 und eine Befehlsgröße 2208 enthalten.
  • In einigen Ausführungsformen spezifiziert der Client 2202 die Client-Einheit der Grafikvorrichtung, die die Befehlsdaten verarbeitet. In einigen Ausführungsformen untersucht ein Grafikprozessor-Befehlsanalysierer das Client-Feld jedes Befehls, um das weitere Verarbeiten des Befehls zu konditionieren und die Befehlsdaten zu der angemessenen Client-Einheit zu leiten. In einigen Ausführungsformen weisen die Grafikprozessor-Client-Einheiten eine Speicherschnittstelleneinheit, eine Rendereinheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit auf. Jede Client-Einheit hat eine entsprechende Verarbeitungs-Pipeline, die die Befehle verarbeitet. Sobald der Befehl durch die Client-Einheit empfangen wird, liest die Client-Einheit den Opcode 2204 und, falls vorhanden, den Unteropcode 2205, um die durchzuführende Operation zu bestimmen. Die Client-Einheit führt den Befehl unter Verwendung von Informationen in dem Datenfeld 2206 durch. Für einige Befehle wird eine explizite Befehlsgröße 2208 erwartet, um die Größe des Befehls zu spezifizieren. In einigen Ausführungsformen bestimmt der Befehlsanalysierer automatisch die Größe zumindest einiger der Befehle basierend auf dem Befehlsopcode. In einigen Ausführungsformen sind die Befehle über Vielfache eines Doppelwortes abgestimmt. Es können auch andere Befehlsformate verwendet werden.
  • Das Flussdiagramm in 22B stellt eine beispielhafte Grafikprozessorbefehlsabfolge 2210 dar. In einigen Ausführungsformen verwendet eine Software oder Firmware eines Datenverarbeitungssystems, das eine Ausführungsform eines Grafikprozessors ist, eine Version der Befehlsabfolge, die gezeigt ist, um einen Satz von Grafikoperationen einzurichten, auszuführen und zu beenden. Eine Beispielbefehlsabfolge ist nur zum Zwecke eines Beispiels gezeigt und beschrieben, da Ausführungsformen nicht auf diese spezifischen Befehle oder diese Befehlsabfolge beschränkt sind. Des Weiteren können die Befehle als Batch von Befehlen in einer Befehlsabfolge derart ausgegeben werden, dass der Grafikprozessor die Abfolge von Befehlen zumindest teilweise gleichzeitig verarbeiten wird.
  • In einigen Ausführungsformen kann die Grafikprozessorbefehlsabfolge 2210 mit einem Pipeline-Flush-Befehl 2212 beginnen, um eine beliebige aktive Grafik-Pipeline zu veranlassen, die derzeit ausstehenden Befehle für die Pipeline abzuschließen. In einigen Ausführungsformen werden die 3D-Pipeline 2222 und die Medien-Pipeline 2224 nicht gleichzeitig betrieben. Der Pipeline-Flush (Pipeline-Leerung) wird durchgeführt, um die aktive Grafik-Pipeline zu veranlassen, alle ausstehenden Befehle abzuschließen. Als Reaktion auf einen Pipeline-Flush wird der Befehlsanalysierer für den Grafikprozessor ein Befehlsverarbeiten anhalten, bis die aktiven Zeichenmaschinen ausstehende Operationen abgeschlossen haben und die relevanten Lese-Cache für ungültig erklärt wurden. Optional können alle Daten in dem Render-Cache, die als ,dirty‘ (nicht festgeschrieben) gekennzeichnet sind, auf den Speicher geschrieben werden. In einigen Ausführungsformen kann der Pipeline-Flush-Befehl 2212 zur Pipeline-Synchronisation oder vor einem Setzen des Grafikprozessors in einen Niedrigenergiezustand verwendet werden.
  • In einigen Ausführungsformen wird ein Pipeline-Auswahlbefehl 2213 verwendet, wenn eine Befehlsabfolge erfordert, dass der Grafikprozessor zwischen Pipelines explizit umschaltet. In einigen Ausführungsformen ist ein Pipeline-Auswahlbefehl 2213 nur einmal innerhalb eines Ausführungskontextes erforderlich, bevor die Pipeline-Befehle ausgegeben werden, es sei denn der Kontext erfordert, dass Befehle für beide Pipelines ausgegeben werden. In einigen Ausführungsformen ist ein Pipeline-Flush-Befehl 2212 unmittelbar vor einem Pipeline-Umschalten über den Pipeline-Auswahlbefehl 2213 erforderlich.
  • In einigen Ausführungsformen konfiguriert ein Pipeline-Steuerbefehl 2214 eine Grafik-Pipeline für einen Betrieb und wird verwendet, um die 3D-Pipeline 2222 und die Medien-Pipeline 2224 zu programmieren. In einigen Ausführungsformen konfiguriert der Pipeline-Steuerbefehl 2214 den Pipeline-Zustand für die aktive Pipeline. In einer Ausführungsform wird der Pipeline-Steuerbefehl 2214 für eine Pipeline-Synchronisation verwendet, und um Daten aus einem oder mehreren Cache-Speichern innerhalb der aktiven Pipeline zu löschen, bevor ein Batch von Befehlen verarbeitet wird.
  • In einigen Ausführungsformen werden Rückgabepufferzustand-Befehle 2216 verwendet, um einen Satz von Rückgabepuffern für die jeweiligen Pipelines zu konfigurieren, um Daten zu schreiben. Einige Pipeline-Operationen erfordern die Zuweisung, Auswahl oder Konfiguration eines oder mehrerer Rückgabepuffer, in welche die Operationen Zwischendaten während eines Verarbeitens schreiben. In einigen Ausführungsformen verwendet der Grafikprozessor auch einen oder mehrere Rückgabepuffer, um ausgegebene Daten zu speichern und um eine Kreuz-Thread-Kommunikation durchzuführen. In einigen Ausführungsformen weist der Rückgabepufferzustand 2216 ein Auswählen der Größe und Anzahl von Rückgabepuffern auf, um einen Satz von Pipeline-Operationen zu verwenden.
  • Die übrigen Befehle in der Befehlsabfolge weichen basierend auf der aktiven Pipeline für Operationen voneinander ab. Basierend auf einer Pipeline-Bestimmung 2220 wird die Befehlsabfolge auf die 3D-Pipeline 2222, beginnend bei dem 3D-Pipeline-Zustand 2230, oder die Medien-Pipeline 2224, beginnend bei dem Medien-Pipeline-Zustand 2240, zugeschnitten.
  • Die Befehle zur Konfiguration des 3D-Pipeline-Zustands 2230 umfassen 3D-Zustandseinstellbefehle für einen Vertexpufferzustand, Vertexelementzustand, konstanten Farbzustand, Tiefenpufferzustand und andere Zustandsgrößen, die zu konfigurieren sind, bevor 3D-Grundkörper-Befehle (3D-Primitive-Befehle) verarbeitet werden. Die Werte dieser Befehle werden zumindest teilweise basierend auf der bestimmten 3D-API bestimmt, die verwendet wird. In einigen Ausführungsformen sind Befehle für den 3D-Pipeline-Zustand 2230 auch in der Lage, bestimmte Pipeline-Elemente selektiv zu deaktivieren oder zu umgehen, wenn diese Elemente nicht verwendet werden.
  • In einigen Ausführungsformen wird ein Befehl für 3D-Grundkörper 2232 verwendet, um 3D-Grundkörper einzureichen, die durch die 3D-Pipeline zu verarbeiten sind. Befehle und zugeordnete Parameter, die an den Grafikprozessor über den Befehl für 3D-Grundkörper 2232 gesendet werden, werden an die Vertex-Abruffunktion in der Grafik-Pipeline weitergeleitet. Die Vertex-Abruffunktion verwendet die Befehlsdaten für 3D-Grundkörper 2232, um Vertexdatenstrukturen zu erzeugen. Die Vertexdatenstrukturen werden in einem oder mehreren Rückgabepuffern gespeichert. In einigen Ausführungsformen wird ein Befehl für 3D-Grundkörper 2232 verwendet, um Vertexoperationen an 3D-Grundkörpern über Vertex-Shader durchzuführen. Um Vertex-Shader durchzuführen, verteilt die 3D-Pipeline 2222 Shader-Ausführungsthreads auf Grafikprozessor-Ausführungseinheiten.
  • In einigen Ausführungsformen wird die 3D-Pipeline 2222 über einen Befehl oder ein Ereignis zur Ausführung 2234 ausgelöst. In einigen Ausführungsformen löst ein Registerschreibvorgang eine Befehlsausführung aus. In einigen Ausführungsformen wird eine Ausführung über einen ,go‘- oder ,kick‘-Befehl in der Befehlsabfolge ausgelöst. In einer Ausführungsform wird eine Befehlsausführung unter Verwendung eines Pipeline-Synchronisationsbefehls ausgelöst, um die Befehlsabfolge durch die Grafik-Pipeline zu übermitteln. Die 3D-Pipeline wird ein Geometrieverarbeiten für die 3D-Grundkörper durchführen. Sobald Operationen abgeschlossen sind, werden sich daraus ergebende geometrische Objekte rasterisiert und die Pixelmaschine färbt die sich daraus ergebenden Pixel. Zusätzliche Befehle zum Steuern eines Pixel-Shadings und von Pixel-Backend-Operationen können auch für diese Operationen vorliegen.
  • In einigen Ausführungsformen folgt die Grafikprozessorbefehlsabfolge 2210 dem Weg der Medien-Pipeline 2224, wenn Medienoperationen durchgeführt werden. Im Allgemeinen hängt die spezifische Verwendung und Programmierweise für die Medien-Pipeline 2224 von den durchzuführenden Medien- und Rechenoperationen ab. Spezifische Mediendecodieroperationen können auf die Medien-Pipeline während eines Mediendecodierens abgeladen werden. In einigen Ausführungsformen kann die Medien-Pipeline auch umgangen werden und ein Mediendecodieren kann vollständig oder teilweise unter Verwendung von Ressourcen durchgeführt werden, die durch einen oder mehrere Allzweck-Verarbeitungskerne bereitgestellt werden. In einer Ausführungsform weist die Medien-Pipeline auch Elemente für Operationen von Allzweck-Grafikprozessoren (GPGPU) auf, wobei der Grafikprozessor verwendet wird, um SIMD-Vektoroperationen unter Verwendung von Rechen-Shader-Programmen durchzuführen, die sich nicht explizit auf das Rendern von Grafik-Grundkörpern beziehen.
  • In einigen Ausführungsformen ist die Medien-Pipeline 2224 in ähnlicher Weise wie die 3D-Pipeline 2222 konfiguriert. Ein Satz von Befehlen zur Konfiguration des Medien-Pipeline-Zustands 2240 wird vor den Medienobjektbefehlen 2242 verteilt oder in einer Befehlsschlange eingereiht. In einigen Ausführungsformen weisen die Befehle für den Medien-Pipeline-Zustand 2240 Daten auf, um die Medien-Pipeline-Elemente zu konfigurieren, die verwendet werden, um die Medienobjekte zu verarbeiten. Dazu gehören Daten zur Konfiguration der Videodecodier- und Videocodierlogik innerhalb der Medien-Pipeline, wie etwa ein Codier- oder Decodierformat. In einigen Ausführungsformen unterstützen die Befehle für den Medien-Pipeline-Zustand 2240 auch die Verwendung eines oder mehrerer Zeiger zu „indirekten“ Zustandselementen, die einen Batch von Zustandseinstellungen enthalten.
  • In einigen Ausführungsformen sorgen Medienobjektbefehle 2242 für Zeiger zu Medienobjekten zur Verarbeitung durch die Medien-Pipeline. Die Medienobjekte weisen Speicherpuffer auf, die zu verarbeitende Videodaten enthalten. In einigen Ausführungsformen müssen alle Medien-Pipeline-Zustände für gültig erklärt werden, bevor ein Medienobjektbefehl 2242 ausgegeben wird. Sobald der Pipeline-Zustand konfiguriert ist und die Medienobjektbefehle 2242 eingereiht sind, wird die Medien-Pipeline 2224 über einen Ausführungsbefehl 2244 oder ein äquivalentes Ausführungsereignis (z. B. einen Registerschreibvorgang) ausgelöst. Eine Ausgabe von der Medien-Pipeline 2224 wird dann durch Operationen nachbearbeitet, die durch die 3D-Pipeline 2222 oder die Medien-Pipeline 2224 bereitgestellt werden. In einigen Ausführungsformen werden GPGPU-Operationen in einer ähnlichen Weise wie Medienoperationen konfiguriert und ausgeführt.
  • Grafiksoftwarearchitektur
  • 23 stellt eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem 2300 gemäß einigen Ausführungsformen dar. In einigen Ausführungsformen weist eine Softwarearchitektur eine 3D-Grafikanwendung 2310, ein Betriebssystem 2320 und mindestens einen Prozessor 2330 auf. In einigen Ausführungsformen weist der Prozessor 2330 einen Grafikprozessor 2332 und einen oder mehrere Allzweck-Prozessorkern(e) 2334 auf. Die Grafikanwendung 2310 und das Betriebssystem 2320 arbeiten jeweils in dem Systemspeicher 2350 des Datenverarbeitungssystems.
  • In einigen Ausführungsformen enthält die 3D-Grafikanwendung 2310 ein oder mehrere Shader-Programme, die Shader-Anweisungen 2312 aufweisen. Die Shader-Sprachanweisungen können in einer Shader-Hochsprache vorliegen, wie etwa die HLSL (High-Level Shader Language) von Direct3D, GLSL (OpenGL Shader Language) und so weiter. Die Anwendung weist auch ausführbare Anweisungen 2314 in einer Maschinensprache auf, die zur Ausführung durch den Allzweck-Prozessorkern 2334 geeignet ist. Die Anwendung weist auch Grafikobjekte 2316 auf, die durch Vertexdaten definiert sind.
  • In einigen Ausführungsformen ist das Betriebssystem 2320 ein Microsoft® Windowse-Betriebssystem von der Microsoft Corporation, ein proprietäres UNIX-artiges Betriebssystem oder ein quelloffenes UNIX-artiges Betriebssystem, das eine Variante des Linux-Kernels verwendet. Das Betriebssystem 2320 kann eine Grafik-API 2322, wie die Direct3D-API, die OpenGL-API, die OpenGL-API oder die Vulkan-API unterstützen. Wenn die Direct3D-API verwendet wird, verwendet das Betriebssystem 2320 einen Frontend-Shader-Compiler 2324, um alle Shader-Anweisungen 2312 in HLSL in eine Shader-Niedrigsprache zu übersetzen. Die Übersetzung kann eine JIT-Übersetzung (JIT für just-in-time; gerade rechtzeitig) sein oder die Anwendung kann eine Shader-Vorübersetzung durchführen. In einigen Ausführungsformen werden High-Level-Shader während der Übersetzung der 3D-Grafikanwendung 2310 in Low-Level-Shader übersetzt. In einigen Ausführungsformen werden die Shader-Anweisungen 2312 in einer Zwischenform bereitgestellt, wie etwa einer Version der Standard Portable Intermediate Representation (SPIR), die durch die Vulkan-API verwendet wird.
  • In einigen Ausführungsformen enthält ein Benutzermodus-Grafiktreiber 2326 einen Backend-Shader-Compiler 2327, um die Shader-Anweisungen 2312 in eine hardwarespezifische Darstellung zu konvertieren. Wenn die OpenGL-API verwendet wird, werden die Shader-Anweisungen 2312 in der GLSL-Hochsprache an einen Benutzermodus-Grafiktreiber 2326 zur Übersetzung geleitet. In einigen Ausführungsformen verwendet der Benutzermodus-Grafiktreiber 2326 Betriebssystem-Kernelmodusfunktionen 2328, um mit einem Kernelmodus-Grafiktreiber 2329 zu kommunizieren. In einigen Ausführungsformen kommuniziert der Kernelmodus-Grafiktreiber 2329 mit dem Grafikprozessor 2332, um Befehle und Anweisungen zu verteilen.
  • IP -Kern-Implementierungen
  • Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch einen repräsentativen Code implementiert werden, der auf einem maschinenlesbaren Medium gespeichert ist, der eine Logik innerhalb einer integrierten Schaltung, wie etwa eines Prozessors, darstellt und/oder definiert. Zum Beispiel kann das maschinenlesbare Medium Anweisungen aufweisen, die verschiedene Logiken innerhalb des Prozessors darstellen. Wenn sie durch eine Maschine gelesen werden, können die Anweisungen die Maschine dazu veranlassen, die Logik zu erstellen, um die hierin beschriebenen Techniken durchzuführen. Derartige Darstellungen, die als „IP-Kerne“ bekannt sind, sind wiederverwendbare Logikeinheiten für eine integrierte Schaltung, die auf einem materiellen, maschinenlesbaren Medium als Hardwaremodell gespeichert werden können, das die Struktur der integrierten Schaltung beschreibt. Das Hardwaremodell kann verschiedenen Kunden oder Herstellern geliefert werden, die das Hardwaremodell auf Herstellungsmaschinen laden, die die integrierte Schaltung herstellen. Die integrierte Schaltung kann derart hergestellt werden, dass die Schaltung Operationen durchführt, die in Verbindung mit einer der hierin beschriebenen Ausführungsformen beschrieben sind.
  • 24A ist ein Blockdiagramm, das ein IP-Kernentwicklungssystem 2400 darstellt, das verwendet werden kann, um eine integrierte Schaltung herzustellen, um Operationen gemäß einer Ausführungsform durchzuführen. Das IP-Kernentwicklungssystem 2400 kann verwendet werden, um modulare, wiederverwendbare Entwürfe zu erzeugen, die in einem größeren Entwurf integriert oder verwendet werden können, um eine gesamte integrierte Schaltung zu konstruieren (z. B. eine integrierte SOC-Schaltung). Eine Entwurfseinrichtung 2430 kann eine Softwaresimulation 2410 eines IP-Kernentwurfs in einer Programmierhochsprache erzeugen (z. B. C/C++). Die Softwaresimulation 2410 kann verwendet werden, um das Verhalten des IP-Kerns unter Verwendung eines Simulationsmodells 2412 zu entwerfen, zu testen und zu verifizieren. Das Simulationsmodell 2412 kann funktions-, verhaltens- und/oder zeitbezogene Simulationen umfassen. Ein RTL-Entwurf (Registertransferlevel-Entwurf) 2415 kann dann erstellt oder aus dem Simulationsmodell 2412 synthetisiert werden. Der RTL-Entwurf 2415 ist eine Abstraktion des Verhaltens der integrierten Schaltung, die den Strom von digitalen Signalen zwischen Hardwareregistern modelliert, einschließlich der zugeordneten Logik, die unter Verwendung der modellierten digitalen Signale durchgeführt wird. Zusätzlich zu dem RTL-Entwurf 2415 können auch Entwürfe mit niedrigerem Pegel mit dem Logikpegel oder Transistorpegel erstellt, entworfen oder synthetisiert werden. Daher können bestimmte Einzelheiten des anfänglichen Entwurfs und der Simulation variieren.
  • Der RTL-Entwurf 2415 oder ein Äquivalent kann ferner durch die Entwurfseinrichtung in ein Hardwaremodell 2420 synthetisiert werden, das in einer Hardwarebeschreibungssprache (HDL) oder einer anderen Darstellung von physischen Entwurfsdaten sein kann. Die HDL kann ferner simuliert oder getestet werden, um den IP-Kernentwurf zu verifizieren. Die IP-Kernauslegung kann zur Lieferung an eine Fertigungseinrichtung 2465 eines Dritten unter Verwendung eines nichtflüchtigen Speichers 2440 (z. B. Festplatte, Flash-Speicher oder ein beliebiges nichtflüchtiges Speichermedium) gespeichert werden. Alternativ kann der IP-Kernentwurfüber eine drahtgebundene Verbindung 2450 oder eine drahtlose Verbindung 2460 (z. B. über das Internet) übertragen werden. Die Fertigungseinrichtung 2465 kann dann eine integrierte Schaltung herstellen, die zumindest teilweise auf dem IP-Kernentwurf basiert. Die gefertigte integrierte Schaltung kann konfiguriert sein, um Operationen gemäß mindestens einer hierin beschriebenen Ausführungsform durchzuführen.
  • 24B stellt eine Querschnitt-Seitenansicht einer Integrierte-Schaltung-Package-Anordnung 2470 gemäß einigen hierin beschriebenen Ausführungsformen dar. Die Integrierte-Schaltung-Package-Anordnung 2470 stellt eine Implementierung einer oder mehrerer Prozessor- oder Beschleuniger-Vorrichtungen dar, wie hierin beschrieben. Die Package-Anordnung 2470 weist mehrere Einheiten einer Hardwarelogik 2472, 2474 auf, die mit einem Substrat 2480 verbunden sind. Die Logik 2472, 2474 kann zumindest teilweise in einer Hardware einer konfigurierbaren Logik oder einer Festfunktionslogik implementiert sein und einen oder mehrere Abschnitte des Prozessorkerns (der Prozessorkerne), des Grafikprozessors (der Grafikprozessoren) und/oder anderer Beschleuniger-Vorrichtungen aufweisen, wie hierin beschrieben. Jede Einheit der Logik 2472, 2474 kann innerhalb eines Halbleiter-Dies implementiert und mit dem Substrat 2480 über eine Verbindungsstruktur 2473 gekoppelt sein. Die Verbindungsstruktur 2473 kann konfiguriert sein, um elektrische Signale zwischen der Logik 2472, 2474 und dem Substrat 2480 zu leiten und sie kann Verbindungen, wie unter anderem Höcker oder Vorsprünge, umfassen. In einigen Ausführungsformen kann die Verbindungsstruktur 2473 konfiguriert sein, um elektrische Signale, wie etwa Eingabe/Ausgabe-Signale (I/O-Signale) und/oder Energie- oder Massesignale, die der Operation der Logik 2472, 2474 zugeordnet sind, zu leiten. In einigen Ausführungsformen kann das Substrat 2480 ein epoxidbasiertes Laminatsubstrat sein. Das Substrat 2480 kann in anderen Ausführungsformen andere geeignete Arten von Substraten umfassen. Die Package-Anordnung 2470 kann mit anderen elektrischen Vorrichtungen über eine Package-Verbindung 2483 verbunden sein. Die Package-Verbindung 2483 kann mit einer Fläche des Substrats 2480 gekoppelt sein, um elektrische Signale zu anderen elektrischen Vorrichtungen, wie etwa einer Hauptplatine, einem anderen Chipsatz oder Multi-Chip-Modulen, zu leiten.
  • In einigen Ausführungsformen sind die Einheiten der Logik 2472, 2474 mit einer Brücke 2482 elektrisch gekoppelt, welche konfiguriert ist, um elektrische Signale zwischen der Logik 2472, 2474 zu leiten. Die Brücke 2482 kann eine dichte Verbindungsstruktur sein, die eine Leitung für elektrische Signale bereitstellt. Die Brücke 2482 kann ein Brückensubstrat umfassen, dass aus Glas oder einem geeigneten Halbleitermaterial besteht. Elektrische Leitungsmerkmale können auf dem Brückensubstrat gebildet sein, um eine Chip-zu-Chip-Verbindung zwischen der Logik 2472, 2474 bereitzustellen.
  • Obwohl zwei Einheiten der Logik 2472, 2474 und eine Brücke 2482 dargestellt sind, können hierin beschriebene Ausführungsformen mehr oder weniger Logikeinheiten auf einem oder mehreren Dies aufweisen. Der eine oder die mehreren Dies können durch null oder mehr Brücken verbunden sein, da die Brücke 2482 ausgeschlossen sein kann, wenn die Logik auf einem einzelnen Die enthalten ist. Alternativ können mehrere Dies oder Logikeinheiten durch eine oder mehrere Brücken verbunden sein. Zusätzlich können mehrere Logikeinheiten, Dies und Brücken miteinander in anderen möglichen Konfigurationen verbunden sein, einschließlich dreidimensionalen Konfigurationen.
  • 24C stellt eine Package-Anordnung 2490 dar, die mehrere Einheiten aus Hardwarelogik-Chiplets 2480 aufweist, welche mit einem Substrat (z. B. einem Basis-Die) verbunden sind. Eine Grafikverarbeitungseinheit, ein paralleler Prozessor und/oder ein Rechenbeschleuniger, wie hierin beschrieben, können aus diversen Silizium-Chiplets bestehen, die separat hergestellt werden. In diesem Kontext ist ein Chiplet eine zumindest teilweise gepackte integrierte Schaltung, die getrennte Logikeinheiten aufweist, welche mit anderen Chiplets zu einem größeren Package zusammengesetzt werden können. Ein anderer Satz von Chiplets mit einer unterschiedlichen IP-Kern-Logik kann zu einer Einzelvorrichtung zusammengesetzt werden. Zudem können die Chiplets in einem Basis-Die oder Basis-Chiplet unter Verwendung einer aktiven Interposer-Technologie integriert werden. Die hierin beschriebenen Konzepte ermöglichen die Verbindung und Kommunikation zwischen den unterschiedlichen IP-Formen innerhalb der GPU. IP-Kerne können unter Verwendung unterschiedlicher Prozesstechnologien hergestellt und während der Herstellung zusammengefügt werden, was verhindert, dass ein Zusammenfügen mehrerer IPs bei demselben Herstellungsvorgang komplex wird, vor allem auf einem großen SoC mit mehreren IPs. Indem die Verwendung mehrerer Prozesstechnologien ermöglicht wird, wird die Vermarktungszeit verbessert und eine kosteneffiziente Option zur Herstellung mehrerer Produkt-Lagerbestandseinheiten bereitgestellt. Zudem können die aufgegliederten IPs eher unabhängig angesteuert werden und Komponenten, die auf einer gegebenen Arbeitslast nicht verwendet werden, können ausgeschaltet werden, wodurch der Gesamtenergieverbrauch sinkt.
  • Die Hardwarelogik-Chiplets können Spezialzweck-Hardwarelogik-Chiplets 2472, Logik- oder I/O-Chiplets 2474 und/oder Speicher-Chiplets 2475 umfassen. Die Hardwarelogik-Chiplets 2472 und die Logik- oder I/O-Chiplets 2474 können zumindest teilweise in einer Hardware einer konfigurierbaren Logik oder einer Festfunktionslogik implementiert sein und einen oder mehrere Abschnitte des Prozessorkerns (der Prozessorkerne), des Grafikprozessors (der Grafikprozessoren), des parallelen Prozessors (der parallelen Prozessoren) oder anderer Beschleuniger-Vorrichtungen aufweisen, wie hierin beschrieben. Die Speicher-Chiplets 2475 können ein DRAM-Speicher (z. B. GDDR, HBM) oder ein Cache-Speicher (SRAM) sein.
  • Jeder Chiplet kann als separater Halbleiter-Die hergestellt und mit dem Substrat 2480 über eine Verbindungsstruktur 2473 gekoppelt sein. Die Verbindungsstruktur 2473 kann konfiguriert sein, um elektrische Signale zwischen den verschiedenen Chiplets und der Logik innerhalb des Substrats 2480 zu leiten. Die Verbindungsstruktur 2473 kann Verbindungen, wie etwa, jedoch nicht beschränkt auf, Höcker oder Vorsprünge, umfassen. In einigen Ausführungsformen kann die Verbindungsstruktur 2473 konfiguriert sein, um elektrische Signale, wie etwa Eingabe/Ausgabe-Signale (I/O-Signale) und/oder Energie- oder Massesignale, die der Operation der Logik-, I/O- und Speicher-Chiplets zugeordnet sind, zu leiten.
  • In einigen Ausführungsformen kann das Substrat 2480 ein epoxidbasiertes Laminatsubstrat sein. Das Substrat 2480 kann in anderen Ausführungsformen andere geeignete Arten von Substraten umfassen. Die Package-Anordnung 2490 kann mit anderen elektrischen Vorrichtungen über eine Package-Verbindung 2483 verbunden sein. Die Package-Verbindung 2483 kann mit einer Fläche des Substrats 2480 gekoppelt sein, um elektrische Signale zu anderen elektrischen Vorrichtungen, wie etwa einer Hauptplatine, einem anderen Chipsatz oder Multi-Chip-Modulen, zu leiten.
  • In einigen Ausführungsformen können eine Logik oder ein I/O-Chiplet 2474 und ein Speicher-Chiplet 2475 über eine Brücke 2487 elektrisch gekoppelt sein, welche konfiguriert ist, um elektrische Signale zwischen der Logik oder dem I/O-Chiplet 2474 und einem Speicher-Chiplet 2475 zu leiten. Die Brücke 2487 kann eine dichte Verbindungsstruktur sein, die eine Leitung für elektrische Signale bereitstellt. Die Brücke 2487 kann ein Brückensubstrat umfassen, dass aus Glas oder einem geeigneten Halbleitermaterial besteht. Elektrische Leitungsmerkmale können auf dem Brückensubstrat gebildet sein, um eine Chip-zu-Chip-Verbindung zwischen dem Logik- oder I/O-Chiplet 2474 und einem Speicher-Chiplet 2475 bereitzustellen. Die Brücke 2487 kann auch als Silizium-Brücke oder eine Verbindungsbrücke bezeichnet werden. Zum Beispiel ist die Brücke 2487 in einigen Ausführungsformen eine EMIB (Embedded Multi-die Interconnect Bridge). In einigen Ausführungsformen kann die Brücke 2487 einfach eine direkte Verbindung von einem Chiplet zu einem anderen Chiplet sein.
  • Das Substrat 2480 kann Hardwarekomponenten für I/O 2491, Cache-Speicher 2492 und eine andere Hardwarelogik 2493 aufweisen. Ein Fabric 2485 kann in dem Substrat 2480 eingebettet sein, um eine Kommunikation zwischen den verschiedenen Logik-Chiplets und der Logik 2491, 2493 innerhalb des Substrats 2480 zu ermöglichen. In einer Ausführungsform können die I/O-Logik 2491, der Fabric 2485, der Cache, die Brücke und eine andere Hardwarelogik 2493 in einem Basis-Die integriert sein, der oben auf dem Substrat 2480 aufgeschichtet ist.
  • In verschiedenen Ausführungsformen kann eine Package-Anordnung 2490 weniger oder mehr Komponenten und Chiplets aufweisen, die durch einen Fabric 2485 oder eine oder mehrere Brücken 2487 verbunden sind. Die Chiplets innerhalb der Package-Anordnung 2490 können in einer 3D- oder 2,5D-Anordnung angeordnet sein. Im Allgemeinen können Brückenstrukturen 2487 verwendet werden, um eine Punkt-zu-Punkt-Verbindung zwischen beispielsweise Logik- oder 1/O-Chiplets und Speicher-Chiplets zu erleichtern. Der Fabric 2485 kann verwendet werden, um die verschiedenen Logik- und/oder I/O-Chiplets (z. B. Chiplets 2472, 2474, 2491, 2493). mit einem anderen Logik- und/oder I/O-Chiplet zu verbinden. In einer Ausführungsform kann der Cache 2492 innerhalb des Substrats als ein globaler Cache für die Package-Anordnung 2490, als ein Teil eines verteilten globalen Caches oder als dedizierter Cache für den Fabric 2485 fungieren.
  • 24D stellt eine Package-Anordnung 2494, die austauschbare Chiplets 2495 aufweist, gemäß einer Ausführungsform dar. Die austauschbaren Chiplets 2495 können in standardisierte Schlitze auf einem oder mehreren Basis-Chiplets 2496, 2498 gesetzt werden. Die Basis-Chiplets 2496, 2498 können über eine Brückenverbindung 2497 gekoppelt sein, welche ähnlich zu den anderen hierin beschriebenen Brückenverbindungen ist und zum Beispiel eine EMIB sein kann. Speicher-Chiplets können auch mit Logik- oder I/O-Chiplets über eine Brückenverbindung verbunden sein. Die I/O- und Logik-Chiplets können über eine Verbindungsstruktur (Interconnect Fabric) kommunizieren. Die Basis-Chiplets können jeweils einen oder mehrere Schlitze in einem standardisierten Format für einen Logik- oder I/O- oder Speicher/Cache unterstützen.
  • In einer Ausführungsform können ein SRAM und Energiezufuhrschaltungen zu einem oder mehreren Basis-Chiplets 2496, 2498 gebildet werden, welche unter Verwendung einer anderen Verfahrenstechnik relativ zu den austauschbaren Chiplets 2495 hergestellt werden, die oben auf die Basis-Chiplets aufgestapelt werden. Zum Beispiel können die Basis-Chiplets 2496, 2498 unter Verwendung einer größeren Verfahrenstechnik hergestellt werden, während die austauschbaren Chiplets unter Verwendung einer kleineren Verfahrenstechnik hergestellt werden. Ein oder mehrere der austauschbaren Chiplets 2495 können Speicher-Chiplets (z. B. DRAM-Chiplets) sein. Für die Package-Anordnung 2494 können unterschiedliche Speicherdichten basierend auf der für das Produkt, welches die Package-Anordnung 2494 verwendet, angestrebten Energie und/oder Leistung ausgewählt werden. Zudem können Logik-Chiplets mit einer unterschiedlichen Zahl von Arten von Funktionseinheiten zur Zeit eines Zusammensetzens basierend auf der für das Produkt angestrebten Energie und/oder Leistung ausgewählt werden. Außerdem können Chiplets, welche IP-Logik-Kerne unterschiedlicher Arten enthalten, in die austauschbaren Chiplet-Schlitze eingesetzt werden, was hybride Prozessorentwürfe ermöglicht, die IP-Blöcke unterschiedlicher Technologien mischen und anpassen können.
  • Beispielhafte integrierte SoC-Schaltung
  • 25-26 stellen beispielhafte integrierte Schaltungen und zugeordnete Grafikprozessoren dar, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden können, gemäß verschiedenen Ausführungsformen, die hierin beschrieben werden. Zusätzlich zu dem, was dargestellt ist, können eine andere Logik und andere Schaltungen enthalten sein, einschließlich zusätzlichen Grafikprozessoren/-kernen, Peripheriegerät-Schnittstellensteuerungen oder Allzweck-Prozessorkernen.
  • 25 ist ein Blockdiagramm, das ein beispielhaftes System auf einer chipintegrierten Schaltung 2500 darstellt, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform. Die beispielhafte integrierte Schaltung 2500 umfasst einen oder mehreren Anwendungsprozessoren 2505 (z. B. CPUs), mindestens einen Grafikprozessor 2510 und kann zusätzlich einen Bildprozessor 2515 und/oder einen Videoprozessor 2520 umfassen, welcher ein modularer IP-Kern von derselben oder mehreren unterschiedlichen Entwurfeinrichtungen sein kann. Die integrierte Schaltung 2500 umfasst eine Peripherie- oder Buslogik, welche eine USB-Steuerung 2525, eine UART-Steuerung 2530, eine SPI/SDIO-Steuerung 2535 und eine I2S/I2C-Steuerung 2540 umfasst. Zudem kann die integrierte Schaltung eine Anzeigevorrichtung 2545 aufweisen, die mit einer Steuerung 2550 einer hochauflösenden Multimediaschnittstelle (HDMI für High-Definition Multimedia Interface) und/oder einer Anzeigeschnittstelle 2555 einer Mobilindustrieprozessorschnittstelle (MIPI für Mobile Industry Processor Interface) gekoppelt ist. Ein Speicher kann durch ein Flash-Speicher-Untersystem 2560 bereitgestellt sein, das einen Flash-Speicher und eine Flash-Speichersteuerung aufweist. Eine Speicherschnittstelle kann über eine Speichersteuerung 2565 zum Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt sein. Einige integrierte Schaltungen weisen zusätzlich eine eingebettete Sicherheitsmaschine 2570 auf.
  • 26A-26B sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung innerhalb eines SoC gemäß hierin beschriebenen Ausführungsformen darstellen. 26A stellt einen beispielhaften Grafikprozessor 2610 einer integrierten SoC-Schaltung dar, der unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform. 26B stellt einen zusätzlichen beispielhaften Grafikprozessor 2640 einer integrierten SoC-Schaltung dar, der unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform. Der Grafikprozessor 2610 von 26A ist ein Beispiel für einen Niedrigenergie-Grafikprozessorkern. Der Grafikprozessor 2640 von 26B ist ein Beispiel für einen Hochleistungs-Grafikprozessorkern. Jeder der Grafikprozessoren 2610, 2640 kann eine Variante des Grafikprozessors 2510 von 25 sein.
  • Wie in 26A gezeigt, weist der Grafikprozessor 2610 einen Vertexprozessor 2605 und einen oder mehrere Fragmentprozessoren 2615A-2615N (z. B. 2615A, 2615B, 2615C, 2615D bis 2615N-1 und 2615N) auf. Der Grafikprozessor 2610 kann unterschiedliche Shader-Programme über eine separate Logik ausführen, sodass der Vertexprozessor 2605 optimiert ist, um Operationen für Vertex-Shader-Programme auszuführen, während der eine oder die mehreren Fragmentprozessoren 2615A-2615N Fragment-Shading-Operationen (z. B. Pixel-Shading-Operationen) für Fragment- oder Pixel-Shader-Programme ausführen. Der Vertexprozessor 2605 führt die Vertexverarbeitungsstufe der 3D-Grafik-Pipeline durch und erzeugt Grundkörper- und Vertexdaten. Der Fragmentprozessor 2615A-2615N verwendet (die Fragmentprozessoren verwenden) Grundkörper- und Vertexdaten, die durch den Vertexprozessor 2605 erzeugt werden, um einen Bildspeicher zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. In einer Ausführungsform ist der Fragmentprozessor 2615A-2615N (sind die Fragmentprozessoren) optimiert, um Fragment-Shader-Programme auszuführen, wie sie in der OpenGL-API bereitgestellt werden, die verwendet werden können, um ähnliche Operationen durchzuführen, wie ein Pixel-Shader-Programm, das in der Direct-3D-API bereitgestellt wird.
  • Der Grafikprozessor 2610 umfasst zusätzlich eine oder mehrere Speicherverwaltungseinheiten (MMUs) 2620A-2620B, Caches 2625A-2625B und Schaltungsverbindungen 2630A-2630B. Die eine oder mehreren MMU(s) 2620A-2620B stellen eine Abbildung von virtuellen auf physikalische Adressen für den Grafikprozessor 2610 bereit, einschließlich für den Vertexprozessor 2605 und/oder den Fragmentprozessor (die Fragmentprozessoren) 2615A-2615N, wie auf Vertex- oder Bild-/Texturdaten verweisen können, die im Speicher gespeichert sind, zusätzlich zu Vertex- oder Bild-/Texturdaten in einem oder mehreren Caches 2625A-2625B. In einer Ausführungsform können die eine oder mehreren MMUs 2620A-2620B mit anderen MMUs innerhalb des Systems, einschließlich einer oder mehreren MMUs, die dem einen oder den mehreren Anwendungsprozessoren 2505, dem Bildprozessor 2515 und/oder dem Videoprozessor 2520 von 25 zugeordnet sind, synchronisiert sein, sodass jeder Prozessor 2505-2520 an einem gemeinsam genutzten oder vereinheitlichten virtuellen Speichersystem teilhaben kann. Die eine oder mehreren Schaltungsverbindungen 2630A-2630B ermöglichen es dem Grafikprozessor 2610, eine Schnittstelle zu anderen IP-Kernen innerhalb des SoC zu haben, entweder über einen internen Bus des SoC oder über eine direkte Verbindung, gemäß Ausführungsformen.
  • Wie in 26B gezeigt, umfasst der Grafikprozessor 2640 die eine oder mehreren MMUs 2620A-2620B, den einen oder die mehreren Caches 2625A-2625B und die eine oder mehreren Schaltungsverbindungen 2630A-2630B des Grafikprozessors 2610 von 26A. Der Grafikprozessor 2640 weist einen der mehrere Shader-Kerne 2655A-2655N (z. B. 2655A, 2655B, 2655C, 2655D, 2655E, 2655F bis 2655N-1 und 2655N) auf, die für eine einheitliche Shader-Kernarchitektur sorgen, in der ein Einzelkern oder Typ oder Kern alle Typen von programmierbaren Shader-Codes ausführen kann, einschließlich eines Vertex-Shader-Programmcodes, um Vertex-Shaders, Fragment-Shaders und/oder Rechen-Shaders zu implementieren. Die exakte Anzahl von vorliegenden Shader-Kernen kann unter Ausführungsformen und Implementierungen variieren. Zudem umfasst der Grafikprozessor 2640 eine Inter-Kern-Aufgabenverwaltungseinrichtung 2645, die als Thread-Verteiler wirkt, um Ausführungsthreads auf einen oder mehrere Shader-Kerne 2655A-2655N und eine Kachelungseinheit 2658 zu verteilen, um Kachelungsoperationen für ein auf Kacheln basiertes Rendering zu beschleunigen, bei dem Rendering-Operationen für eine Szene in Bildraum unterteilt wird, um zum Beispiel eine lokale räumliche Kohärenz innerhalb einer Szene zu auszunutzen und um die Verwendung interner Caches zu optimieren.
  • Im Allgemeinen, wenn eine Szene in einen Bildspeicher auf einer Grafikverarbeitungseinheit (GPU) gerendert wird, wird für einen gesamten Frame in der Regel eine konstante Schattierungsrate verwendet, sodass jedes Pixel des Frames zum Beispiel einmal gleichmäßig schattiert werden kann. Das heißt, dass jedes Pixel des Frames ein einheitliches Qualitätsniveau erhält. Eine Schattierungsrate gibt die Anzahl von Pixeln an, welche die gleiche schattierte Farbe teilen. Wenn der Frame mit einer feineren Schattierungsrate schattiert wird, so wird das Rendering-Ergebnis eine bessere Qualität aufweisen. Da jedoch die Auflösung von Monitoren, Fernsehern, VR-Headsets und anderen Bildschirmen stetig größer wird, können es sich GPU-Renderer aufgrund von Leistungsbeschränkungen nicht immer leisten, das gleiche Qualitätsniveau auf jedem Teil eines Frames zu liefern. Um Rechenvorgänge der GPU bei gleichbleibender hoher Qualität wichtiger Bereiche, welche für Betrachter während des Renderings erkennbar sind, zu reduzieren, wird in Betracht gezogen, unterschiedliche Teile des Frames mit unterschiedlichen Schattierungsraten zu rendern.
  • 27A stellt mehrere variierte Schattierungsraten für einen Frame gemäß einer Ausführungsform dar. Die Schattierung mit variabler Rate (VRS für Variable Rate Shading) ist ein Mechanismus zum Ausgleich einer Rendering-Leistung und einer Rendering-Qualität, indem Pixel-Schattierungsraten für unterschiedliche Bereiche eines Bildes verändert werden. Wenn 27A als Beispiel betrachtet wird, kann der Mittenbereich des Frames, welcher als der wichtigste Bereich des Bildes angesehen wird, mit einer vollen Rate schattiert werden, d. h. einmal pro Pixel (1x1), um feine Details zu wahren. Die mehreren Bereiche des Frames, die den Mittenbereich umgeben, können als weniger wichtig als der Mittenbereich angesehen werden, und sie werden einmal alle zwei Pixel (1x2, 2x1), einmal alle vier Pixel (2x2) und einmal alle acht Pixel (2x4, 4x2) schattiert. Der Eckbereich des Frames kann als der am wenigsten wichtige Bereich des Bildes angesehen werden und wird einmal alle sechzehn Pixel (4x4) schattiert. Mit anderen Worten wird der Mittenbereich in dem Rendering-Ergebnis die beste Qualität aufweisen, die mehreren Bereiche, die den Mittenbereich umgeben, werden in dem Rendering-Ergebnis eine mittlere Qualität aufweisen und der Eckbereich wird in dem Rendering-Ergebnis die schlechteste Qualität aufweisen. Ein großer Teil der Rechenvorgänge für Bereiche, die für Betrachter nicht so wichtig sind wie der Mittenbereich, können gespeichert werden, während Details für den Mittenbereich weiterhin gewahrt werden. Man beachte, dass auf einen Frame beliebige andere Schattierungsraten angewandt werden können und dass sich Größen und Positionen wichtiger Bereiche und weniger wichtiger Bereiche in Abhängigkeit von unterschiedlichen Frames unterschiedlicher Anwendungen verändern können.
  • Wenn die VRS während eines Renderings verwenden wird, können die wichtigen Bereiche mit feinen Schattierungsraten schattiert werden. Die Bereiche, die mit feinen Schattierungsraten schattiert werden, können wiederum angeben, dass diese Bereiche wichtig sind. Somit wird in Erwägung gezogen, die Schattierungsrate jedes Pixels des Frames zu verwenden, um wichtige Bereiche zu bestimmen, wenn die Pixel des Frames in einen Videobitstrom zur Übertragung beispielsweise über ein Netzwerk codiert werden.
  • 27B ist ein Blockdiagramm eines Cloud-Rendering-Systems 2700. Das Cloud-Rendering-System 2700 kann ein Rechensystem 2710 und eine entfernte Vorrichtung 2750 umfassen. Das Rechensystem 2710 kann mit der entfernten Vorrichtung 2750 über ein Netzwerk gekoppelt sein. Während eines Cloud-Renderings, wie etwa eines Cloud Gaming, virtuellen Desktop und so weiter, wenn ein Benutzer eine Grafikanwendung, wie etwa eine dreidimensionale (3D) Grafikanwendung, ausführen möchte, kann die Grafikanwendung über eine Grafikanwendungsprogrammierschnittstelle (API) des Rechensystems 2710 empfangen und auf dem Rechensystem 2710 zuerst gerendert werden, und dann kann das Rendering-Ergebnis an die entfernte Vorrichtung 2750 zur Anzeige für den Benutzer übertragen werden. Die meiste Rechenlast wird an das Rechensystem 2710 übertragen und die Recheneffizienz der entfernten Vorrichtung 2750 kann erheblich verbessert werden. Das Rechensystem 2710 kann eine Grafikverarbeitungseinheit (GPU) 2720 und einen Speicher 2730 umfassen. Eine Szene der Grafikanwendung kann durch die GPU 2720 in einen Farbspeicher 2734 innerhalb eines Bildspeichers 2732 des Speichers 2730 gerendert werden. Der Farbspeicher 2734 kann Daten für Pixel eines gerenderten Frames halten. Das Rechensystem 2710 kann ferner einen Codierer 2740 umfassen, welcher mit dem Speicher 2730 gekoppelt ist. Der Codierer 2740 kann den Inhalt des Farbspeichers 2734 in einen Videobitstrom codieren. Der Videobitstrom kann daraufhin an die entfernte Vorrichtung 2750 über das Netzwerk übertragen werden.
  • Beim herkömmlichen Codieren des Inhalts des Farbspeichers 2734 basiert die Codierung nur auf dem Inhalt des Farbspeichers 2734. Auf diese Weise wurden viele Informationen während des Renderings verworfen, was es schwierig macht, den Inhalt des Farbspeichers 2734 vollständig zu verstehen und eine angemessene Codierungsmaßnahme zu ergreifen. Da zudem die Netzwerkbandbreite zur Übertragung zwischen dem Rechensystem 2710 und der entfernten Vorrichtung 2750 teuer ist, ist es für den Codierer 2740 von Bedeutung, angemessen zu bestimmen, wie der Inhalt des Farbspeichers 2734 zu codieren ist.
  • Indem das Wissen über die mehreren Schattierungsraten für den Frame, wie in 27A beschrieben, verwendet wird, kann der Codierer 2740 den Inhalt des Farbspeichers 2734 basierend auf den mehreren Schattierungsraten, welche jeweils einem Pixel in dem Farbspeicher 2734 entsprechen, in einen Videobitstrom codieren.
  • 27C ist ein Blockdiagramm eines Cloud-Rendering-Systems 2700 gemäß einer Ausführungsform. Das Cloud-Rendering-System 2700 kann ein Rechensystem 2710 und eine entfernte Vorrichtung 2750 umfassen. Das Rechensystem 2710 kann mit der entfernten Vorrichtung 2750 über ein Netzwerk gekoppelt sein. Während eines Cloud-Renderings, wie etwa eines Cloud Gaming, virtuellen Desktop und so weiter, wenn ein Benutzer eine Grafikanwendung, wie etwa eine dreidimensionale (3D) Grafikanwendung, ausführen möchte, kann die Grafikanwendung über eine Grafikanwendungsprogrammierschnittstelle (API) des Rechensystems 2710 empfangen und auf dem Rechensystem 2710 zuerst gerendert werden, und dann kann das Rendering-Ergebnis an die entfernte Vorrichtung 2750 zur Anzeige für den Benutzer übertragen werden. Die meiste Rechenlast wird an das Rechensystem 2710 übertragen und die Recheneffizienz der entfernten Vorrichtung 2750 kann erheblich verbessert werden. Das Rechensystem 2710 kann eine Grafikverarbeitungseinheit (GPU) 2720 und einen Speicher 2730 umfassen. Eine Szene der Grafikanwendung kann durch die GPU 2720 in einen Farbspeicher 2734 innerhalb eines Bildspeichers 2732 des Speichers 2730 gerendert werden. Der Farbspeicher 2734 kann Daten für Pixel eines gerenderten Frames halten. Das Rechensystem 2710 kann ferner einen Codierer 2740 umfassen, welcher mit dem Speicher 2730 gekoppelt ist. Der Codierer 2740 kann den Inhalt des Farbspeichers 2734 in einen Videobitstrom codieren. Der Videobitstrom kann daraufhin an die entfernte Vorrichtung 2750 über das Netzwerk übertragen werden.
  • Indem das Wissen über die mehreren Schattierungsraten für den Frame, wie in 27A beschrieben, verwendet wird, kann der Codierer 2740 den Inhalt des Farbspeichers 2734 basierend auf den mehreren Schattierungsraten, welche jeweils einem Pixel in dem Farbspeicher 2734 entsprechen, in einen Videobitstrom codieren.
  • In einer Ausführungsform kann der Bildspeicher 2732 ferner einen Schattierungsratenspeicher 2736 umfassen, der von dem Farbspeicher 2734 getrennt ist. Der Schattierungsratenspeicher 2736 kann die mehreren Schattierungsraten zur Codierung speichern.
  • In einer Ausführungsform können die mehreren Schattierungsraten durch ein Bildschirmraum-Bild spezifiziert werden. Das Bildschirmraum-Bild ermöglicht, dass die Anwendung ein Bild einer „LOD(Level Of Details; Detailgenauigkeit)-Maske“ zu erstellen, welches Bereiche mit unterschiedlicher Qualität für eine zu rendernde Szene angibt. Somit kann das Bildschirmraum-Bild Informationen für Schattierungsraten der zu rendernden Szene enthalten. Zum Beispiel kann jedes Texel in dem Bildschirmraum-Bild eine Schattierungsrate spezifizieren und eine Kachel (wie etwa eine 8x8- oder 16x16-Pixel-Kachel) in einem gerenderten Frame, welche einem Texel in dem Bildschirmraum-Bild entspricht, kann mit einer entsprechenden Schattierungsrate schattiert werden.
  • In einer Ausführungsform können mehrere Schattierungsrate, welche durch das Bildschirmraum-Bild spezifiziert werden, direkt an den Codierer 2740 übertragen werden und der Codierer 2740 kann diese Schattierungsraten zur Codierung verwenden.
  • In einer Ausführungsform können mehrere Schattierungsraten, welche durch das Bildschirmraum-Bild spezifiziert werden, an einen Pixel-Shader in der GPU, zum Beispiel in einer Variablen, geleitet werden. Beispielsweise kann die Variable SV-ShadingRate in einer D3D-Spezifikation, gl FragmentSizeNV in einer OpenGL-Erweiterung oder eine beliebige andere angemessene Variable sein. Dann können die mehreren Schattierungsraten durch den Pixel-Shader in den Bildspeicher 2732 geschrieben werden und der Codierer 2740 kann diese Schattierungsraten zur Codierung verwenden.
  • In einer Ausführungsform kann das Bildschirmraum-Bild durch die Grafikanwendung bereitgestellt werden.
  • In einer Ausführungsform kann das Bildschirmraum-Bild, wenn die Grafikanwendung keine VRS einsetzt, in unterschiedlichen Weisen erzeugt werden. Zum Beispiel kann das Bildschirmraum-Bild basierend auf einem gerenderten Frame für die Grafikanwendung, z. B. einem Schussziel in Fist-Person-Shooting-Spielen, erzeugt werden oder das Bildschirmraum-Bild kann basierend auf dem Inhalt eines vorherigen Frames für die Grafikanwendung erzeugt werden.
  • In einer Ausführungsform können die mehreren Schattierungsraten durch einen Ziehungsaufruf von der Grafikanwendung spezifiziert werden. Ein Ziehungsaufruf ist ein Aufruf an die Grafik-API, Objekte zu ziehen. Die mehreren Schattierungsraten können für einen Ziehungsaufruf der Grafikanwendung auf einer Basis pro Zug spezifiziert und von der Grafikanwendung an einen Pixel-Shader in der GPU 2720 geleitet werden. Die mehreren Schattierungsraten können an den Pixel-Shader zum Beispiel über eine Variable geleitet werden. Dann können die mehreren Schattierungsraten durch den Pixel-Shader in den Bildspeicher 2732 geschrieben werden und der Codierer 2740 kann die mehreren Schattierungsraten, welche in dem Bildspeicher 2732 gespeichert sind, zur Codierung verwenden.
  • In einer Ausführungsform kann die Variable eine einheitliche Variable sein.
  • In einer Ausführungsform kann die Variable SV_ShadingRate in einer D3D-Spezifikation, gl FragmentSizeNV in einer OpenGL-Erweiterung oder eine beliebige andere angemessene Variable sein.
  • In einer Ausführungsform können die mehreren Schattierungsraten durch einen Vertex-Shader oder einen Geometrie-Shader in der GPU 2720 auf einer Basis pro Vertex oder einer Basis pro Geometrie spezifiziert werden. Die mehreren Schattierungsraten können dann an einen Pixel-Shader in der GPU 2720 zum Beispiel in einer Variablen geleitet werden. Beispielsweise kann die Variable SV ShadingRate in einer D3D-Spezifikation, gl FragmentSizeNV in einer OpenGL-Erweiterung oder eine beliebige andere angemessene Variable sein. Dann können die mehreren Schattierungsraten durch den Pixel-Shader in den Bildspeicher 2732 geschrieben werden und der Codierer 2740 kann die mehreren Schattierungsraten, welche in dem Bildspeicher 2732 gespeichert sind, zur Codierung verwenden.
  • In einer Ausführungsform können die mehreren Schattierungsraten durch den Pixel-Shader in den Schattierungsratenspeicher 2736 innerhalb des Bildspeichers 2732 geschrieben werden.
  • In einer Ausführungsform können die mehreren Schattierungsraten basierend auf einer Kombinationsoperation aus mindestens zwei der Folgenden bestimmt werden: (a) einem ersten Satz Schattierungsraten, die durch das Bildschirmraum-Bild spezifiziert werden, das durch die Grafikanwendung bereitgestellt oder basierend auf einem gerenderten Frame für die Grafikanwendung erzeugt wird; (b) einem zweiten Satz Schattierungsraten, die durch den Ziehungsaufruf von der Grafikanwendung spezifiziert werden; und (c) einem dritten Satz Schattierungsraten, die durch den Vertex-Shader oder den Geometrie-Shader werden. Als ein nicht beschränkendes Beispiel kann die vorangehend erwähnte Kombinationsoperation aus einer Minimaloperation, einer Maximaloperation, einer Durchleitungsoperation, einer Überschreibungsoperation und einer Summenoperation ausgewählt werden. Für diese Sätze Schattierungsraten können, falls gewünscht, beliebige andere Kombinationsoperationen angewandt werden.
  • In einer Ausführungsform kann der Codierer 2740 eine Codiermaßnahme eines betreffenden Bereichs (ROI für Region of Interest) nutzen, um den Inhalt des Farbspeichers 2734 zu codieren. Die ROI-Codierung kann eine höhere Bildqualität auf betreffenden Bereichen bereitstellen, während die Bildqualität von nicht betreffenden Bereich reduziert wird, um eine bessere Videowahrnehmung mit einer geringeren Bandbreite und weniger Speicher zu erhalten. Der schwierigste Teil einer ROI-Codierung ist die Frage, wie entschieden wird, welche die betreffenden Bereiche sind.
  • In einer Ausführungsform können Pixel in dem Farbspeicher 2734, die Schattierungsraten entsprechen, welche feiner sind als eine Schwelle, betreffende Bereiche bilden. Die Schwelle kann ein vorbestimmter Wert in der Grafikanwendung sein. Die Schwelle kann ein vorbestimmter Wert in dem Codierer 2740 sein. Die Schwelle kann ein Durchschnitt, ein Mittelwert oder ein beliebiger anderer Wert sein, der aus allen Schattierungsraten bestimmt wird, die den Pixeln entsprechen. In einer Ausführungsform kann der Codierer 2740 den Inhalt des Farbspeichers 2734 in einen Videobitstrom codieren, indem betreffende Bereiche mit einer höheren Bildqualität bereitgestellt werden, während die Bildqualität von nicht betreffenden Bereichen reduziert wird. Bei einem derartigen Codieren kann der Inhalt des Videobitstroms, der den betreffenden Bereichen entspricht, für einen Betrachter bei Betrachtung weiterhin eine hohe Bildqualität aufweisen, während der Inhalt des Videobitstroms, der den nicht betreffenden Bereichen entspricht, in großem Maßstab komprimiert wird, um Bandbreite zu sparen.
  • In einer Ausführungsform kann jede der mehreren Schattierungsraten auf einen Versatz eines Quantisierungsparameters (QP) zur Codierung abgebildet werden. Bei der ROI-Codierung kann ein QP-Versatz für jeden Bereich die Bildqualität des Bereiches bestimmen. Ein Bereich mit geringem QP-Versatz hat normalerweise eine bessere Qualität im Codierungsergebnis. Folglich kann der Codierer 2740 den Inhalt des Farbspeichers 2734 basierend auf den QP-Versätzen codieren, die auf die Schattierungsraten abgebildet werden.
  • Zum Beispiel können die Schattierungsraten, wenn der QP-Bereich [-51, 51] ist, gemäß Tabelle 1 wie folgt abgebildet werden. Tabelle 1. Abbildung zwischen Schattierungsraten und QP-Versätzen
    Schattierungsrate QP-Versatz
    1×1 -5
    1x2 5
    2x1 5
    2x2 15
    2x4 30
    4x2 30
    4x4 40
  • Man beachte, dass beliebige andere angemessene QP-Versätze angewandt werden können und die Abbildung zwischen Schattierungsraten und QP-Versätzen, wie gewünscht, eingestellt werden kann.
  • Durch die Codierung basierend auf Schattierungsraten können Kosten einer Netzwerkbandbreite erheblich gesenkt werden und die Bildqualität für betreffende Bereiche kann gegenüber nicht betreffenden Bereichen verbessert werden.
  • 28 stellt ein Verfahren 2800 zum Codieren basierend auf Schattierungsraten gemäß einer Ausführungsform dar. In einer Ausführungsform kann das Verfahren 2800 durch ein Rechensystem auf einer Cloud-Seite eines Cloud-Rendering-Systems durchgeführt werden.
  • Bei Block 2802 kann eine Szene einer Grafikanwendung durch eine GPU in dem Rechensystem in einen Farbspeicher innerhalb eines Bildspeichers eines Speichers in dem Rechensystem gerendert werden.
  • Bei Block 2804 kann der Inhalt des Farbspeichers durch einen Codierer in dem Rechensystem basierend auf mehreren Schattierungsraten, die jeweils einem Pixel in dem Farbspeicher entsprechen, in einen Videobitstrom codiert werden.
  • In einer Ausführungsform können die mehreren Schattierungsraten durch ein Bildschirmraum-Bild spezifiziert werden, das durch die Grafikanwendung bereitgestellt oder basierend auf einem gerenderten Frame für die Grafikanwendung erzeugt wird.
  • In einer Ausführungsform können die mehreren Schattierungsraten durch einen Ziehungsaufruf von der Grafikanwendung spezifiziert werden.
  • In einer Ausführungsform können die mehreren Schattierungsraten durch einen Vertex-Shader oder einen Geometrie-Shader in der GPU spezifiziert werden.
  • In einer Ausführungsform können die mehreren Schattierungsraten an einen Pixel-Shader in der GPU geleitet und durch den Pixel-Shader in einen Schattierungsratenspeicher innerhalb des Bildspeichers geschrieben werden.
  • In einer Ausführungsform können die mehreren Schattierungsraten basierend auf einer Kombinationsoperation aus mindestens zwei der Folgenden bestimmt werden: (a) einem ersten Satz Schattierungsraten, die durch ein Bildschirmraum-Bild spezifiziert werden, das durch die Grafikanwendung bereitgestellt oder basierend auf einem gerenderten Frame für die Grafikanwendung erzeugt wird; (b) einem zweiten Satz Schattierungsraten, die durch einen Ziehungsaufruf von der Grafikanwendung spezifiziert werden; und (c) einem dritten Satz Schattierungsraten, die durch einen Vertex-Shader oder einen Geometrie-Shader in der GPU spezifiziert werden.
  • In einer Ausführungsform kann die Kombinationsoperation aus einer Minimaloperation, einer Maximaloperation, einer Durchleitungsoperation, einer Überschreibungsoperation und einer Summenoperation ausgewählt werden.
  • In einer Ausführungsform können Pixel in dem Farbspeicher, die Schattierungsraten entsprechen, welche feiner sind als eine Schwelle, betreffende Bereiche bilden.
  • In einer Ausführungsform kann jede der mehreren Schattierungsraten auf einen Versatz eines Quantisierungsparameters zur Codierung abgebildet werden.
  • Teile verschiedener Ausführungsformen können als Computerprogrammprodukt bereitgestellt werden, welches ein computerlesbares Medium mit darauf gespeicherten Computerprogrammanweisungen aufweist, die verwendet werden, um einen Computer (oder andere elektronische Vorrichtungen) zur Ausführung durch einen oder mehrere Prozessoren zu programmieren, um einen Prozess gemäß bestimmten Ausführungsformen durchzuführen. Das computerlesbare Medium kann unter anderem Magnetplatten, optische Platten, Festwertspeicher (ROM), Direktzugriffspeicher (RAM), löschbare programmierbare Festwertspeicher (EPROM), elektrisch löschbare programmierbare Festwertspeicher (EEPROM), magnetische oder optische Karten, Flash-Speicher oder eine andere Art eines computerlesbaren Mediums, das zum Speichern elektronischer Anweisungen geeignet ist, umfassen. Darüber hinaus können Ausführungsformen auch als Computerprogrammprodukt heruntergeladen werden, wobei das Programm von einem entfernten Computer auf einen anfragenden Computer übertragen wird. In einigen Ausführungsformen verfügt ein nicht vorübergehendes computerlesbares Speichermedium über darauf gespeicherte Daten, die Abfolgen von Anweisungen darstellen, welche, wenn die durch einen Prozessor ausgeführt werden, den Prozessor dazu veranlassen, bestimmte Operationen durchzuführen.
  • Viele der Verfahren werden in ihrer rudimentärsten Form beschrieben. Es können jedoch Prozesse zu oder von jedem der Verfahren hinzugefügt oder gelöscht werden und Informationen können zu oder von jeder der beschriebenen Nachrichten hinzugefügt oder entfernt werden, ohne den grundlegenden Umfang der vorliegenden Ausführungsformen zu verlassen. Für Fachleute auf dem Gebiet wird auf der Hand liegen, dass viele weitere Modifizierungen und Anpassungen vorgenommen werden können. Die bestimmten Ausführungsformen werden nicht dargelegt, um das Konzept zu begrenzen, sondern um es zu veranschaulichen. Der Umfang der Ausführungsformen wird durch die spezifischen Beispiele, die durch das Vorangehende bereitgestellt werden, nicht bestimmt, sondern nur durch die Ansprüche im Folgenden.
  • Wird erwähnt, dass ein Element „A“ mit einem Element „B“ gekoppelt ist, so kann Element A mit Element B direkt oder indirekt durch zum Beispiel Element C gekoppelt sein. Wenn die Spezifikation oder die Ansprüche verlauten, dass eine Komponente, ein Merkmal, eine Struktur, ein Prozess oder eine Eigenschaft A eine Komponente, ein Merkmal, eine Struktur, einen Prozess oder eine Eigenschaft B „verursacht“, so bedeutet dies, dass „A“ zumindest eine teilweise Ursache für „B“ ist, sie jedoch auch zumindest eine andere Komponente, ein anderes Merkmal, eine andere Struktur, ein anderer Prozess oder eine andere Eigenschaft sein können, welche dazu beitragen, „B“ zu verursachen. Wird in der Spezifikation angegeben, dass eine Komponente, ein Merkmal, eine Struktur, ein Prozess oder eine Eigenschaft enthalten sein „kann“ oder „könnte“, muss diese bestimmte Komponente, dieses bestimmte Merkmal, diese bestimmte Struktur, dieser bestimmte Prozess oder diese bestimmte Eigenschaft nicht enthalten sein. Wird in der Spezifikation auf „ein“ Element Bezug genommen, bedeutet dies nicht, dass es nur eines der beschriebenen Elemente gibt.
  • Eine Ausführungsform ist eine Implementierung oder ein Beispiel. Verweise in der Spezifikation auf „eine Ausführungsform“, „einige Ausführungsformen“ oder „andere Ausführungsformen“ geben an, dass ein bestimmtes Merkmal, eine bestimmte Struktur oder bestimmte Eigenschaft, welche/s in Verbindung mit der Ausführungsform beschrieben wird, in zumindest einigen, jedoch nicht notwendigerweise allen Ausführungsformen enthalten ist. Die unterschiedlichen Aufführungen „einer Ausführungsform“ oder „einiger Ausführungsformen“ beziehen sich nicht notwendigerweise auf die gleichen Ausführungsformen. Man beachte, dass in der vorangegangenen Beschreibung von Ausführungsbeispielen manchmal verschiedene Merkmale zum Zweck der besseren Veranschaulichung der Offenbarung und eines besseren Verständnisses eines oder mehrerer der verschiedenen neuen Aspekte zusammen in einer einzigen Ausführungsform, Figur oder Beschreibung davon gruppiert werden. Dieses Vorgehen bei der Offenbarung ist jedoch nicht als Absicht auszulegen, dass die beanspruchten Ausführungsformen mehr Merkmale erfordern als in jedem Anspruch dargelegt sind. Wie die nachfolgenden Ansprüche darlegen, bestehen die neuen Aspekte vielmehr in weniger als allen Merkmalen einer einzigen vorangehend offenbarten Ausführungsform. Daher sind die Ansprüche hierdurch ausdrücklich in dieser Beschreibung integriert, wobei jeder Anspruch als separate Ausführungsform für sich selbst steht.
  • Die folgenden Klauseln und/oder Beispiele betreffen weitere Ausführungsformen oder Beispiele. Spezifizierungen in den Beispielen können überall in einer oder mehreren Ausführungsformen verwendet werden. Die verschiedenen Merkmale der unterschiedlichen Ausführungsformen oder Beispiele können mit einigen Merkmalen, die enthalten sind, und anderen, die in einer Vielzahl von unterschiedlichen Anwendungen ausgeschlossen sind, unterschiedlich kombiniert werden. Beispiele können einen Gegenstand umfassen, wie etwa ein Verfahren, Mittel zum Durchführen von Schritten des Verfahrens, mindestens ein maschinenlesbares Medium, das Anweisungen aufweist, die, wenn sie durch eine Maschine durchgeführt werden, die Maschine dazu veranlassen, Schritte des Verfahrens durchzuführen, oder eine Vorrichtung oder ein System zum Codieren basierend auf Schattierungsraten gemäß Ausführungsformen und Beispielen, die hierin beschrieben werden.
  • Weitere Beispiele
  • Beispiel 1 umfasst ein Rechensystem, umfassend: einen Speicher; eine Grafikverarbeitungseinheit (GPU), die mit dem Speicher gekoppelt ist, wobei die GPU ausgelegt ist, um eine Szene einer Grafikanwendung in einen Farbspeicher innerhalb eines Bildspeichers des Speichers zu rendern; und einen Codierer, der mit dem Speicher gekoppelt ist, wobei der Codierer ausgelegt ist, um den Inhalt des Farbspeichers basierend auf mehreren Schattierungsraten, die jeweils einem Pixel in dem Farbspeicher entsprechen, in einen Videobitstrom zu codieren.
  • Beispiel 2 umfasst den Gegenstand nach Beispiel 1, wobei die mehreren Schattierungsraten durch ein Bildschirmraum-Bild spezifiziert werden, das durch die Grafikanwendung bereitgestellt oder basierend auf einem gerenderten Frame für die Grafikanwendung erzeugt wird.
  • Beispiel 3 umfasst den Gegenstand nach Beispiel 1, wobei die mehreren Schattierungsraten durch einen Ziehungsaufruf von der Grafikanwendung spezifiziert werden.
  • Beispiel 4 umfasst den Gegenstand nach Beispiel 1, wobei die mehreren Schattierungsraten durch einen Vertex-Shader oder einen Geometrie-Shader in der GPU spezifiziert werden.
  • Beispiel 5 umfasst den Gegenstand nach einem der Beispiele 2-4, wobei die mehreren Schattierungsraten an einen Pixel-Shader in der GPU geleitet und durch den Pixel-Shader in einen Schattierungsratenspeicher innerhalb des Bildspeichers geschrieben werden.
  • Beispiel 6 umfasst den Gegenstand nach Beispiel 1, wobei die mehreren Schattierungsraten basierend auf einer Kombinationsoperation aus mindestens zwei der Folgenden bestimmt werden: (a) einem ersten Satz Schattierungsraten, die durch ein Bildschirmraum-Bild spezifiziert werden, das durch die Grafikanwendung bereitgestellt oder basierend auf einem gerenderten Einzelbild für die Grafikanwendung erzeugt wird; (b) einem zweiten Satz Schattierungsraten, die durch einen Ziehungsaufruf von der Grafikanwendung spezifiziert werden; und (c) einem dritten Satz Schattierungsraten, die durch einen Vertex-Shader oder einen Geometrie-Shader in der GPU spezifiziert werden.
  • Beispiel 7 umfasst den Gegenstand nach Beispiel 6, wobei die Kombinationsoperation aus einer Minimaloperation, einer Maximaloperation, einer Durchleitungsoperation, einer Überschreibungsoperation und einer Summenoperation ausgewählt wird.
  • Beispiel 8 umfasst den Gegenstand nach Beispiel 1, wobei Pixel in dem Farbspeicher, die Schattierungsraten entsprechen, welche feiner sind als eine Schwelle, betreffende Bereiche bilden.
  • Beispiel 9 umfasst den Gegenstand nach Beispiel 1, wobei jede der mehreren Schattierungsraten auf einen Quantisierungsparameter-Versatz zum Codieren abgebildet wird.
  • Beispiel 10 umfasst ein Verfahren zum Datenverarbeiten, umfassend: Rendern einer Szene einer Grafikanwendung in einen Farbspeicher innerhalb eines Bildspeichers eines Speichers, der mit einer Grafikverarbeitungseinheit (GPU) gekoppelt ist; und Codieren des Inhalts des Farbspeichers basierend auf mehreren Schattierungsraten, die jeweils einem Pixel in dem Farbspeicher entsprechen, in einen Videobitstrom.
  • Beispiel 11 umfasst den Gegenstand nach Beispiel 10, wobei die mehreren Schattierungsraten durch ein Bildschirmraum-Bild spezifiziert werden, das durch die Grafikanwendung bereitgestellt oder basierend auf einem gerenderten Frame für die Grafikanwendung erzeugt wird.
  • Beispiel 12 umfasst den Gegenstand nach Beispiel 10, wobei die mehreren Schattierungsraten durch einen Ziehungsaufruf von der Grafikanwendung spezifiziert werden.
  • Beispiel 13 umfasst den Gegenstand nach Beispiel 10, wobei die mehreren Schattierungsraten durch einen Vertex-Shader oder einen Geometrie-Shader in der GPU spezifiziert werden.
  • Beispiel 14 umfasst den Gegenstand nach einem der Beispiele 11-13, wobei die mehreren Schattierungsraten an einen Pixel-Shader in der GPU geleitet und durch den Pixel-Shader in einen Schattierungsratenspeicher innerhalb des Bildspeichers geschrieben werden.
  • Beispiel 15 umfasst den Gegenstand nach Beispiel 10, wobei die mehreren Schattierungsraten basierend auf einer Kombinationsoperation aus mindestens zwei der Folgenden bestimmt werden: (a) einem ersten Satz Schattierungsraten, die durch ein Bildschirmraum-Bild spezifiziert werden, das durch die Grafikanwendung bereitgestellt oder basierend auf einem gerenderten Frame für die Grafikanwendung erzeugt wird; (b) einem zweiten Satz Schattierungsraten, die durch einen Ziehungsaufruf von der Grafikanwendung spezifiziert werden; und (c) einem dritten Satz Schattierungsraten, die durch einen Vertex-Shader oder einen Geometrie-Shader in der GPU spezifiziert werden.
  • Beispiel 16 umfasst den Gegenstand nach Beispiel 15, wobei die Kombinationsoperation aus einer Minimaloperation, einer Maximaloperation, einer Durchleitungsoperation, einer Überschreibungsoperation und einer Summenoperation ausgewählt wird.
  • Beispiel 17 umfasst den Gegenstand nach Beispiel 10, wobei Pixel in dem Farbspeicher, die Schattierungsraten entsprechen, welche feiner sind als eine Schwelle, betreffende Bereiche bilden.
  • Beispiel 18 umfasst den Gegenstand nach Beispiel 10, wobei jede der mehreren Schattierungsraten auf einen Quantisierungsparameter-Versatz zum Codieren abgebildet wird.
  • Beispiel 19 umfasst eine Vorrichtung, umfassend Mittel zum Durchführen des Verfahrens nach einem der Beispiele 10-18.
  • Beispiel 20 umfasst mindestens ein computerlesbares Medium, umfassend Anweisungen, die, wenn sie ausgeführt werden, eine Rechenvorrichtung dazu veranlassen, das Verfahren nach einem der Beispiele 10-18 durchzuführen.
  • Die vorangegangene Beschreibung und die Zeichnungen sind als veranschaulichend und nicht beschränkend zu betrachten. Fachleute auf dem Gebiet werden erkennen, dass verschiedene Modifizierungen und Veränderungen an den hierin beschriebenen Ausführungsformen vorgenommen werden können, ohne die weitere Idee und den Umfang der Erfindung zu verlassen, wie in den angehängten Ansprüchen dargelegt.

Claims (20)

  1. Rechensystem, umfassend: einen Speicher; eine Grafikverarbeitungseinheit (GPU), die mit dem Speicher gekoppelt ist, wobei die GPU ausgelegt ist, um eine Szene einer Grafikanwendung in einen Farbspeicher innerhalb eines Bildspeichers des Speichers zu rendern; und einen Codierer, der mit dem Speicher gekoppelt ist, wobei der Codierer ausgelegt ist, um den Inhalt des Farbspeichers basierend auf mehreren Schattierungsraten, die jeweils einem Pixel in dem Farbspeicher entsprechen, in einen Videobitstrom zu codieren.
  2. Rechensystem nach Anspruch 1, wobei die mehreren Schattierungsraten durch ein Bildschirmraum-Bild spezifiziert werden, das durch die Grafikanwendung bereitgestellt oder basierend auf einem gerenderten Frame für die Grafikanwendung erzeugt wird.
  3. Rechensystem nach Anspruch 1 oder 2, wobei die mehreren Schattierungsraten durch einen Ziehungsaufruf von der Grafikanwendung spezifiziert werden.
  4. Rechensystem nach einem der Ansprüche 1-3, wobei die mehreren Schattierungsraten durch einen Vertex-Shader oder einen Geometrie-Shader in der GPU spezifiziert werden.
  5. Rechensystem nach einem der Ansprüche 1-4, wobei die mehreren Schattierungsraten an einen Pixel-Shader in der GPU geleitet und durch den Pixel-Shader in einen Schattierungsratenspeicher innerhalb des Bildspeichers geschrieben werden.
  6. Rechensystem nach einem der Ansprüche 1-5, wobei die mehreren Schattierungsraten basierend auf einer Kombinationsoperation aus mindestens zwei der Folgenden bestimmt werden: (a) einem ersten Satz Schattierungsraten, die durch ein Bildschirmraum-Bild spezifiziert werden, das durch die Grafikanwendung bereitgestellt oder basierend auf einem gerenderten Frame für die Grafikanwendung erzeugt wird; (b) einem zweiten Satz Schattierungsraten, die durch einen Ziehungsaufruf von der Grafikanwendung spezifiziert werden; und (c) einem dritten Satz Schattierungsraten, die durch einen Vertex-Shader oder einen Geometrie-Shader in der GPU spezifiziert werden.
  7. Rechensystem nach einem der Ansprüche 1-6, wobei die Kombinationsoperation aus einer Minimaloperation, einer Maximaloperation, einer Durchleitungsoperation, einer Überschreibungsoperation und einer Summenoperation ausgewählt wird.
  8. Rechensystem nach einem der Ansprüche 1-7, wobei Pixel in dem Farbspeicher, die Schattierungsraten entsprechen, welche feiner sind als eine Schwelle, betreffende Bereiche bilden.
  9. Rechensystem nach einem der Ansprüche 1-8, wobei jede der mehreren Schattierungsraten auf einen Quantisierungsparameter-Versatz zum Codieren abgebildet wird.
  10. Verfahren zum Datenverarbeiten, umfassend: Rendern einer Szene einer Grafikanwendung in einen Farbspeicher innerhalb eines Bildspeichers eines Speichers, der mit einer Grafikverarbeitungseinheit (GPU) gekoppelt ist; und Codieren des Inhalts des Farbspeichers basierend auf mehreren Schattierungsraten, die jeweils einem Pixel in dem Farbspeicher entsprechen, in einen Videobitstrom.
  11. Verfahren nach Anspruch 10, wobei die mehreren Schattierungsraten durch ein Bildschirmraum-Bild spezifiziert werden, das durch die Grafikanwendung bereitgestellt oder basierend auf einem gerenderten Frame für die Grafikanwendung erzeugt wird.
  12. Verfahren nach Anspruch 10 oder 11, wobei die mehreren Schattierungsraten durch einen Ziehungsaufruf von der Grafikanwendung spezifiziert werden.
  13. Verfahren nach einem der Ansprüche 10-12, wobei die mehreren Schattierungsraten durch einen Vertex-Shader oder einen Geometrie-Shader in der GPU spezifiziert werden.
  14. Verfahren nach einem der Ansprüche 10-13, wobei die mehreren Schattierungsraten an einen Pixel-Shader in der GPU geleitet und durch den Pixel-Shader in einen Schattierungsratenspeicher innerhalb des Bildspeichers geschrieben werden.
  15. Verfahren nach einem der Ansprüche 10-14, wobei die mehreren Schattierungsraten basierend auf einer Kombinationsoperation aus mindestens zwei der Folgenden bestimmt werden: (a) einem ersten Satz Schattierungsraten, die durch ein Bildschirmraum-Bild spezifiziert werden, das durch die Grafikanwendung bereitgestellt oder basierend auf einem gerenderten Frame für die Grafikanwendung erzeugt wird; (b) einem zweiten Satz Schattierungsraten, die durch einen Ziehungsaufruf von der Grafikanwendung spezifiziert werden; und (c) einem dritten Satz Schattierungsraten, die durch einen Vertex-Shader oder einen Geometrie-Shader in der GPU spezifiziert werden.
  16. Verfahren nach einem der Ansprüche 10-15, wobei die Kombinationsoperation aus einer Minimaloperation, einer Maximaloperation, einer Durchleitungsoperation, einer Überschreibungsoperation und einer Summenoperation ausgewählt wird.
  17. Verfahren nach einem der Ansprüche 10-16, wobei Pixel in dem Farbspeicher, die Schattierungsraten entsprechen, welche feiner sind als eine Schwelle, betreffende Bereiche bilden.
  18. Verfahren nach einem der Ansprüche 10-17, wobei jede der mehreren Schattierungsraten auf einen Quantisierungsparameter-Versatz zum Codieren abgebildet wird.
  19. Vorrichtung, umfassend Mittel zum Durchführen des Verfahrens nach einem der Ansprüche 10-18.
  20. Mindestens ein computerlesbares Medium, umfassend Anweisungen, die, wenn sie ausgeführt werden, eine Rechenvorrichtung dazu veranlassen, das Verfahren nach einem der Ansprüche 10-18 durchzuführen.
DE102020132272.0A 2020-06-24 2020-12-04 Verfahren und vorrichtung zum codieren basierend auf schattierungsraten Pending DE102020132272A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202010585840.4 2020-06-24
CN202010585840.4A CN113837919A (zh) 2020-06-24 2020-06-24 用于基于着色速率来编码的方法和装置

Publications (1)

Publication Number Publication Date
DE102020132272A1 true DE102020132272A1 (de) 2021-12-30

Family

ID=78827197

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020132272.0A Pending DE102020132272A1 (de) 2020-06-24 2020-12-04 Verfahren und vorrichtung zum codieren basierend auf schattierungsraten

Country Status (3)

Country Link
US (1) US11455770B2 (de)
CN (1) CN113837919A (de)
DE (1) DE102020132272A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11455770B2 (en) 2020-06-24 2022-09-27 Intel Corporation Method and apparatus for encoding based on shading rates

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11790593B2 (en) * 2020-03-13 2023-10-17 Advanced Micro Devices, Inc. Ray-tracing multi-sample anti-aliasing
US11869117B2 (en) * 2021-03-18 2024-01-09 Samsung Electronics Co., Ltd. Systems and methods of adaptive, variable-rate, hybrid ray tracing
GB2602686B (en) * 2021-06-25 2022-12-28 Imagination Tech Ltd Efficient convolution operations
EP4116932A1 (de) * 2021-06-30 2023-01-11 Imagination Technologies Limited Grafisches verarbeitungssystem und verfahren zum wiedergeben
US11763521B2 (en) * 2021-08-13 2023-09-19 Samsung Electronics Co., Ltd. Method and apparatus for the automation of variable rate shading in a GPU driver context
US20240087207A1 (en) * 2022-04-08 2024-03-14 Mediatek Inc. Depth analyzer and shading rate controller

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9552667B2 (en) * 2013-12-13 2017-01-24 Nvidia Corporation Adaptive shading in a graphics processing pipeline
US10192280B2 (en) * 2016-04-08 2019-01-29 Qualcomm Incorporated Per-vertex variable rate shading
US10593097B2 (en) * 2018-05-08 2020-03-17 Qualcomm Technologies, Inc. Distributed graphics processing
US11032576B2 (en) * 2019-06-10 2021-06-08 Microsoft Technology Licensing, Llc Selectively enhancing compressed digital content
US11158106B2 (en) * 2019-12-20 2021-10-26 Advanced Micro Devices, Inc. VRS rate feedback
CN113837919A (zh) 2020-06-24 2021-12-24 英特尔公司 用于基于着色速率来编码的方法和装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11455770B2 (en) 2020-06-24 2022-09-27 Intel Corporation Method and apparatus for encoding based on shading rates

Also Published As

Publication number Publication date
CN113837919A (zh) 2021-12-24
US20210407183A1 (en) 2021-12-30
US11455770B2 (en) 2022-09-27

Similar Documents

Publication Publication Date Title
DE112020001256T5 (de) Kompressionstechniken
DE102020130078A1 (de) Systolische arithmetik an spärlichen daten
DE112020000846T5 (de) Architektur für Block-Sparse-Operationen an einem systolischen Array
DE102018133555A1 (de) Berechnungsoptimierungsmechanismus für tiefe neuronale Netze
DE102020129251A1 (de) Adaptives verformbares kernvorhersagenetzwerk zum bildentrauschen
DE102018110380A1 (de) Tool zum Ermöglichen der Effizienz beim Maschinenlernen
DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
DE112020000464T5 (de) Mehrfachkachel-grafikprozessor-rendering
DE102020129970A1 (de) Systeme und verfahren zur fehlererkennung und steuerung für eingebettete arbeitsspeicher- und rechenelemente
DE102018110371A1 (de) Intelligente speicherhandhabung und datenmanagement für maschinenlernnetzwerke
DE102020132272A1 (de) Verfahren und vorrichtung zum codieren basierend auf schattierungsraten
DE102020130073A1 (de) Verbesserung der datenlokalität für grafikprozessoreinheiten
DE102020131896A1 (de) Deep learning-basierte auswahl von abtastwerten für adaptives supersampling
DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
DE112020000854T5 (de) Thread-gruppen-planung für die grafikverarbeitung
DE112020000848T5 (de) Skalarkernintegration
DE102020121814A1 (de) Vorrichtung und Verfahren zum Verwenden von Dreieckspaaren und gemeinsam genutzten Transformationsschaltungen zum Verbessern der Strahlverfolgungsleistung
DE102018110346A1 (de) Speichersystem für dnn-ausgaben für die black box
DE102018110719A1 (de) Hardwareimplementierte Punkt-zu-Punkt-Kommunikationsprimitive zum Maschinenlernen
DE102020129432A1 (de) System und Verfahren zum Anpassen eines ausführbaren Objekts an eine Verarbeitungseinheit
DE102020129409A1 (de) Dynamisches unterteilen von aktivierungen und kernels zum verbessern von speichereffizienz
DE102020131704A1 (de) Multikachelspeicherverwaltungsmechanismus
DE102020130995A1 (de) Verfahren und vorrichtung zur codierung basierend auf wichtigkeitswerten
DE102020124872A1 (de) Verwendung von innere-abdeckung-informationen durch eine konservative-rasterung-pipeline zum aktivieren von earlyz für eine konservative rasterung
DE102020130865A1 (de) Anweisungen und logik für vektor-multiplikation-addition mit zero-skipping