DE112020000902T5 - Datenvorabruf für die grafikdatenverarbeitung - Google Patents

Datenvorabruf für die grafikdatenverarbeitung Download PDF

Info

Publication number
DE112020000902T5
DE112020000902T5 DE112020000902.5T DE112020000902T DE112020000902T5 DE 112020000902 T5 DE112020000902 T5 DE 112020000902T5 DE 112020000902 T DE112020000902 T DE 112020000902T DE 112020000902 T5 DE112020000902 T5 DE 112020000902T5
Authority
DE
Germany
Prior art keywords
cache
graphics
data
memory
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112020000902.5T
Other languages
English (en)
Inventor
Vikranth Vemulapalli
Lakshminarayanan Striramassarma
Mike MacPherson
Aravindh Anantaraman
Ben ASHBAUGH
Murali Ramadoss
William B. Sadler
Jonathan Pearce
Scott Janus
Brent Insko
Vasanth Ranganathan
Kamal Sinha
Arthur Hunter
Prasoonkumar Surti
Nicolas Galoppo Von Borries
Joydeep Ray
Abhishek R. Appu
Elmoustapha Ould-Ahmed-Vall
Altug Koker
Sungye Kim
Subramaniam Maiyuran
Valentin Andrei
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 DE112020000902T5 publication Critical patent/DE112020000902T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0888Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/50Control mechanisms for virtual memory, cache or TLB
    • G06F2212/502Control mechanisms for virtual memory, cache or TLB using adaptive policy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/602Details relating to cache prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/608Details relating to cache mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)

Abstract

Ausführungsbeispiele sind im Allgemeinen auf das Vorabrufen von Daten für die Grafikdatenverarbeitung gerichtet. Eine Ausführungsform einer Vorrichtung umfasst einen oder mehrere Prozessoren, einschließlich einer oder mehrerer Grafikverarbeitungseinheiten (GPUs); und mehrere Caches zum Bereitstellen von Speicher für die eine oder mehreren GPUs, wobei die mehreren Caches mindestens einen L1-Cache und einen L3-Cache umfassen, wobei die Vorrichtung zum Bereitstellen eines intelligenten Vorabrufens von Daten durch einen Vorabrufer einer ersten GPU des einen oder mehr GPUs, einschließlich der Messung einer Trefferrate für den L1-Cache; beim Bestimmen, dass die Trefferrate für den L1-Cache gleich oder größer als ein Schwellenwert ist, Begrenzen eines Vorabrufens von Daten auf den Speicher im L3-Cache und beim Bestimmen, dass die Trefferrate für den L1-Cache kleiner als ein Schwellenwert ist, Ermöglichen des Vorabrufens von Daten in den L1-Cache.

Description

  • VERWANDTE ANWENDUNGEN
  • Diese Anmeldung beansprucht den Nutzen der US-Anmeldung Nr. 16/355,015 , eingereicht am 15. März 2019, deren gesamter Inhalt hiermit durch Bezugnahme hierin aufgenommen wird.
  • TECHNISCHEN BEREICH
  • Hierin beschriebene Ausführungsformen beziehen sich allgemein auf das Gebiet elektronischer Geräte und insbesondere auf das Vorabrufen von Daten für die Grafikdatenverarbeitung.
  • HINTERGRUND
  • Die gegenwärtige parallele Grafikdatenverarbeitung umfasst Systeme und Verfahren, die entwickelt wurden, um spezifische Operationen an Grafikdaten durchzuführen, wie beispielsweise lineare Interpolation, Tesselation, Rasterung, Texturabbildung, Tiefenprüfung usw. Traditionell verwendeten Grafikprozessoren Recheneinheiten mit fester Funktion, um Grafiken zu verarbeiten Daten; in jüngerer Zeit wurden jedoch Teile von Grafikprozessoren programmierbar gemacht, was es solchen Prozessoren ermöglicht, eine breitere Vielfalt von Operationen zum Verarbeiten von Scheitel- und Fragmentdaten zu unterstützen.
  • Um die Leistung weiter zu steigern, implementieren Grafikprozessoren typischerweise Verarbeitungstechniken, wie beispielsweise Pipelining, die versuchen, so viele Grafikdaten wie möglich in den verschiedenen Teilen der Grafikpipeline parallel zu verarbeiten. Parallele Grafikprozessoren mit SIMT-Architekturen (Single Instruction, Multiple Thread) sind darauf ausgelegt, den Umfang der parallelen Verarbeitung in der Grafikpipeline zu maximieren. In einer SIMT-Architektur versuchen Gruppen paralleler Threads, Programmanweisungen so oft wie möglich synchron gemeinsam auszuführen, um die Verarbeitungseffizienz zu erhöhen. Einen allgemeinen Überblick über Soft- und Hardware für SIMT-Architekturen finden Sie bei Shane Cook, CUDA-Programmierung Kapitel 3, Seiten 37-51 (2013).
  • Herkömmliche Grafikverarbeitungssysteme sorgen für ein Vorabrufen von Datenelementen für eine effiziente Grafikdatenverarbeitung. Die Vorabrufoperationen in solchen Systemen beinhalten jedoch zahlreiche Unzulänglichkeiten in der Art und Weise, wie die Vorabrufe aufgebaut oder gehandhabt werden.
  • Figurenliste
  • Hier beschriebene Ausführungsformen sind beispielhaft und nicht einschränkend in den Figuren der beigefügten Zeichnungen dargestellt, in denen sich gleiche Bezugszeichen auf ähnliche Elemente beziehen.
    • 1 ist ein Blockdiagramm, das ein Computersystem veranschaulicht, das konfiguriert ist, um einen oder mehrere Aspekte der hierin beschriebenen Ausführungsformen zu implementieren;
    • 2A-2D veranschaulichen parallele Prozessorkomponenten gemäß einer Ausführungsform,
    • 3A-3C sind Blockdiagramme von Grafikmultiprozessoren und multiprozessorbasierten GPUs gemäß Ausführungsformen;
    • 4A-4F eine beispielhafte Architektur veranschaulichen, in der mehrere GPUs kommunikativ mit mehreren Mehrkernprozessoren gekoppelt sind;
    • 5 veranschaulicht eine Grafikverarbeitungspipeline gemäß einer Ausführungsform;
    • 6 veranschaulicht einen Softwarestapel für maschinelles Lernen gemäß einer Ausführungsform;
    • 7 veranschaulicht eine Allzweck-Grafikverarbeitungseinheit gemäß einer Ausführungsform;
    • 8 veranschaulicht ein Computersystem mit mehreren GPUs gemäß einer Ausführungsform;
    • 9A-9B veranschaulichen Schichten beispielhafter tiefer neuronaler Netze;
    • 10 veranschaulicht ein beispielhaftes rekurrentes neuronales Netzwerk;
    • 11 veranschaulicht das Training und den Einsatz eines tiefen neuronalen Netzes;
    • 12 ist ein Blockdiagramm, das verteiltes Lernen veranschaulicht;
    • 13 veranschaulicht ein beispielhaftes Inferenzsystem auf einem Chip (SOC), das zum Durchführen einer Inferenz unter Verwendung eines trainierten Modells geeignet ist;
    • 14 ist eine Darstellung des Datenvorabrufens für die Grafikdatenverarbeitung gemäß einigen Ausführungsformen;
    • 15A eine Veranschaulichung eines intelligenten Vorabrufens zum Cache gemäß einigen Ausführungsformen ist;
    • 15B ist ein Flussdiagramm zum Veranschaulichen eines Prozesses zum intelligenten Vorabrufen in den Cache gemäß einigen Ausführungsformen;
    • 16A ist eine Darstellung einer Cache-Vorabrufverbesserung, um unnötige Vorabrufe gemäß einigen Ausführungsformen zu eliminieren;
    • 16B ist ein Flussdiagramm zum Veranschaulichen eines Prozesses zum Unterdrücken unnötiger Vorabrufe gemäß einigen Ausführungsformen;
    • 17 eine Darstellung eines spekulativen Vorabrufs gemäß einigen Ausführungsformen ist;
    • 18 eine Darstellung des Vorabrufens für einen Befehlscache gemäß einigen Ausführungsformen ist;
    • 19A ist eine Darstellung der Ausnutzung von Bandbreitenquellen zum Vorabrufen/Scrubbing gemäß einigen Ausführungsformen;
    • 19B ist eine Darstellung der Aktivität des L3-Cache und der Speicheraktivität, die bei der Ausnutzung von Bandbreitenquellen zum Vorabrufen/Scrubbing bei einigen Ausführungsformen verwendet werden sollen;
    • 20 ist eine Darstellung einer Vorrichtung oder eines Systems zum Bereitstellen eines Datenvorabrufens für die Grafikdatenverarbeitung gemäß einigen Ausführungsformen,
    • 21 ist ein Blockdiagramm eines Verarbeitungssystems gemäß einer Ausführungsform,
    • 22 ein Blockdiagramm eines Prozessors gemäß einer Ausführungsform ist,
    • 23 ist ein Blockdiagramm eines Grafikprozessors gemäß einer Ausführungsform;
    • 24 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine eines Grafikprozessors gemäß einigen Ausführungsformen;
    • 25 ist ein Blockdiagramm einer Hardwarelogik eines Grafikprozessorkerns gemäß einigen hierin beschriebenen Ausführungsformen;
    • 26A-26B eine Thread-Ausführungslogik mit einem Array von Verarbeitungselementen, die in einem Grafikprozessorkern verwendet werden, gemäß hierin beschriebenen Ausführungsformen veranschaulichen;
    • 27 ist ein Blockdiagramm, das ein Grafikprozessor-Befehlsformat gemäß einigen Ausführungsformen veranschaulicht;
    • 28 ist ein Blockdiagramm eines Grafikprozessors gemäß einer anderen Ausführungsform,
    • 29A-29B veranschaulichen ein Grafikprozessor-Befehlsformat und eine Befehlssequenz gemäß einigen Ausführungsformen;
    • 30 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem gemäß einigen Ausführungsformen;
    • 31A ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem gemäß einer Ausführungsform veranschaulicht;
    • 31B veranschaulicht eine Querschnittsseitenansicht einer integrierten Schaltungspackungsanordnung gemäß einigen hierin beschriebenen Ausführungsformen;
    • 32 ist ein Blockdiagramm, das ein beispielhaftes System auf einem integrierten Chip-Schaltkreis gemäß einer Ausführungsform veranschaulicht; und
    • 33A-33B sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung in einem SoC gemäß hierin beschriebenen Ausführungsformen veranschaulichen.
  • DETAILLIERTE BESCHREIBUNG
  • Hierin beschriebene Ausführungsformen sind allgemein auf das Vorabrufen von Daten für die Grafikdatenverarbeitung gerichtet.
  • In einigen Ausführungsformen sorgt eine Vorrichtung, ein System oder ein Prozess für Verbesserungen beim Datenvorabruf für die Grafikdatenverarbeitung, einschließlich eines oder mehrerer der folgenden:
    • (1) Intelligenter Prefetch zum Cache basierend auf der Cache-Trefferrate;
    • (2) Cache-Prefetch-Verbesserung, um unnötige Prefetches zu quetschen;
    • (3) Spekulativer Vorabruf;
    • (4) Vorabrufen für den Instruktions-Cache (I-Cache); oder
    • (5) Ausnutzen von Bandbreitenquellen für Prefetching/Scrubbing.
  • In einigen Ausführungsformen ist eine Grafikverarbeitungseinheit (GPU) kommunikativ mit Host-/Prozessorkernen gekoppelt, um Grafikoperationen, Maschinenlernoperationen, Musteranalyseoperationen und verschiedene Allzweck-GPU-(GPGPU)-Funktionen zu beschleunigen. Die GPU kann über einen Bus oder eine andere Verbindung (z. B. eine Hochgeschwindigkeitsverbindung wie etwa PCIe oder NVLink) kommunikativ mit dem/den Host-Prozessor/-Kernen gekoppelt sein. In anderen Ausführungsformen kann die GPU auf demselben Gehäuse oder Chip wie die Kerne integriert sein und über einen internen Prozessorbus/eine interne Prozessorverbindung (dh innerhalb des Gehäuses oder Chips) kommunikativ mit den Kernen gekoppelt sein. Ungeachtet der Art und Weise, in der die GPU verbunden ist, können die Prozessorkerne der GPU Arbeit in Form von Befehls-/Befehlsfolgen, die in einem Arbeitsdeskriptor enthalten sind, zuweisen. Die GPU verwendet dann dedizierte Schaltkreise/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
  • In der folgenden Beschreibung werden zahlreiche spezifische Details dargelegt, um ein gründlicheres Verständnis zu ermöglichen. Für den Fachmann ist jedoch ersichtlich, dass die hierin beschriebenen Ausführungsformen ohne eines oder mehrere dieser spezifischen Details praktiziert werden können. In anderen Fällen wurden wohlbekannte Merkmale nicht beschrieben, um zu vermeiden, dass die Details der vorliegenden Ausführungsformen verschleiert werden.
  • Systemübersicht
  • 1 ist ein Blockdiagramm, das ein Computersystem 100 veranschaulicht, das konfiguriert ist, um einen oder mehrere Aspekte der hier beschriebenen Ausführungsformen zu implementieren. Das Computersystem 100 beinhaltet ein Verarbeitungssubsystem 101 mit einem oder mehreren Prozessor(en) 102 und einem Systemspeicher 104, der über einen Verbindungspfad kommuniziert, der einen Speicher-Hub 105 beinhalten kann. Der Speicherhub 105 kann eine separate Komponente innerhalb einer Chipsatzkomponente sein oder kann in den einen oder die mehreren Prozessoren 102 integriert sein. Der Speicher-Hub 105 ist über eine Kommunikationsverbindung 106 mit einem E/A-Subsystem 111 gekoppelt. Das E/A-Subsystem 111 beinhaltet einen E/A-Hub 107, der es dem Computersystem 100 ermöglichen kann, Eingaben von einem oder mehreren Eingabegeräten 108 zu empfangen. Zusätzlich kann der I/O-Hub 107 einen Anzeigecontroller, der in dem einen oder mehreren Prozessor(en) 102 enthalten sein kann, ermöglichen, Ausgaben an eine oder mehrere Anzeigevorrichtung(en) 110A bereitzustellen. In einer Ausführungsform können das eine oder die mehreren Anzeigegeräte 110A, die mit dem I/O-Hub 107 gekoppelt sind, ein lokales, internes oder eingebettetes Anzeigegerät umfassen.
  • In einer Ausführungsform beinhaltet das Verarbeitungssubsystem 101 einen oder mehrere parallele Prozessoren 112, die über einen Bus oder eine andere Kommunikationsverbindung 113 mit dem Speicher-Hub 105 gekoppelt sind. Die Kommunikationsverbindung 113 kann eine von einer beliebigen Anzahl von auf Standards basierenden Kommunikationsverbindungstechnologien oder -protokollen sein, wie beispielsweise, aber nicht beschränkt auf PCI Express, oder kann eine herstellerspezifische Kommunikationsschnittstelle oder Kommunikationsstruktur sein. In einer Ausführungsform bilden der eine oder die mehreren Parallelprozessor(en) 112 ein rechenfokussiertes Parallel- oder Vektorverarbeitungssystem, das eine große Anzahl von Verarbeitungskernen und/oder Verarbeitungsclustern umfassen kann, wie beispielsweise einen Prozessor mit vielen integrierten Kernen (MIC). In einer Ausführungsform bilden der eine oder die mehreren parallelen Prozessoren 112 ein Grafikverarbeitungs-Subsystem, das Pixel an eines der einen oder mehreren Anzeigegeräte 110A ausgeben kann, die über den E/A-Hub 107 gekoppelt sind. Der eine oder die mehreren parallelen Prozessoren 112 können auch einen Anzeigecontroller und eine Anzeigeschnittstelle (nicht gezeigt) beinhalten, um eine direkte Verbindung zu einem oder mehreren Anzeigegeräten 110B zu ermöglichen.
  • Innerhalb des E/A-Subsystems 111 kann sich eine Systemspeichereinheit 114 mit dem E/A-Hub 107 verbinden, um einen Speichermechanismus für das Computersystem 100 bereitzustellen. Ein E/A-Switch 116 kann verwendet werden, um einen Schnittstellenmechanismus bereitzustellen, um Verbindungen zwischen dem E/A-Hub 107 und anderen Komponenten, wie etwa einem Netzwerkadapter 118 und/oder einem drahtlosen Netzwerkadapter 119, die in die Plattform integriert sein können, zu ermöglichen, und verschiedene andere Geräte, die über ein oder mehrere Add-In-Geräte 120 hinzugefügt werden können. Der Netzwerkadapter 118 kann ein Ethernet-Adapter oder ein anderer verdrahteter Netzwerkadapter sein. Der drahtlose Netzwerkadapter 119 kann eines oder mehrere von Wi-Fi, Bluetooth, Nahfeldkommunikation (NFC) oder einer anderen Netzwerkvorrichtung umfassen, die ein oder mehrere drahtlose Funkgeräte umfasst.
  • Das Computersystem 100 kann andere nicht explizit gezeigte Komponenten beinhalten, einschließlich USB- oder andere Portverbindungen, optische Speicherlaufwerke, Videoaufnahmegeräte und dergleichen, kann auch mit dem E/A-Hub 107 verbunden sein. Kommunikationswege, die die verschiedenen Komponenten in 1 kann unter Verwendung beliebiger geeigneter Protokolle implementiert werden, wie zum Beispiel PCI (Peripheral Component Interconnect)-basierte Protokolle (zum Beispiel PCI-Express) oder beliebige andere Bus- oder Punkt-zu-Punkt-Kommunikationsschnittstellen und/oder Protokolle, wie zum Beispiel die NV-Link-Hochgeschwindigkeitsverbindung oder im Stand der Technik bekannte Verbindungsprotokolle.
  • In einer Ausführungsform enthalten der eine oder die mehreren Parallelprozessor(en) 112 eine Schaltung, die für die Grafik- und Videoverarbeitung optimiert ist, einschließlich beispielsweise einer Videoausgabeschaltung, und bildet eine Grafikverarbeitungseinheit (GPU). In einer anderen Ausführungsform beinhalten der eine oder die mehreren Parallelprozessor(en) 112 eine Schaltungsanordnung, die für eine universelle Verarbeitung optimiert ist, während die zugrunde liegende Rechenarchitektur beibehalten wird, die hier ausführlicher beschrieben wird. In noch einer anderen Ausführungsform können Komponenten des Computersystems 100 mit einem oder mehreren anderen Systemelementen auf einer einzigen integrierten Schaltung integriert sein. Zum Beispiel können der eine oder die mehreren Parallelprozessor(en) 112, Speicherhub 105, Prozessor(en) 102 und I/O-Hub 107 in eine integrierte System-on-Chip(SoC)-Schaltung integriert sein. Alternativ können die Komponenten des Computersystems 100 in ein einzelnes Paket integriert werden, um eine System-in-Paket-(SIP)-Konfiguration zu bilden. In einer Ausführungsform kann zumindest ein Teil der Komponenten des Computersystems 100 in ein Multi-Chip-Modul (MCM) integriert werden, das mit anderen Multi-Chip-Modulen zu einem modularen Computersystem verbunden werden kann.
  • Es versteht sich, dass das hier gezeigte Computersystem 100 veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Die Verbindungstopologie, einschließlich der Anzahl und Anordnung von Brücken, der Anzahl von Prozessor(en) 102 und der Anzahl von Parallelprozessor(en) 112, kann nach Wunsch modifiziert werden. Zum Beispiel ist der Systemspeicher 104 in einigen Ausführungsformen mit dem/den Prozessor(en) 102 direkt anstatt über eine Brücke verbunden, während andere Geräte mit dem Systemspeicher 104 über den Speicher-Hub 105 und den/die Prozessor(en) 102 kommunizieren. In anderen alternativen Topologien ist/sind der/die Parallelprozessor(en) 112 mit dem E/A-Hub 107 oder direkt mit einem des einen oder der mehreren Prozessoren 102 anstatt mit dem Speicher-Hub 105 verbunden. In anderen Ausführungsformen können der I/O-Hub 107 und der Speicher-Hub 105 in einem einzigen Chip integriert sein. Einige Ausführungsformen können zwei oder mehr Sätze von Prozessor(en) 102 beinhalten, die über mehrere Sockel angeschlossen sind, die mit zwei oder mehr Instanzen des/der parallelen Prozessors(e) 112 koppeln können.
  • Einige der hierin gezeigten speziellen Komponenten sind optional und sind möglicherweise nicht in allen Implementierungen des Computersystems 100 enthalten. Beispielsweise kann eine beliebige Anzahl von Zusatzkarten oder Peripheriegeräten unterstützt werden, oder es können einige Komponenten weggelassen werden. Darüber hinaus können einige Architekturen eine andere Terminologie für Komponenten verwenden, die denen ähnlich sind, die in 1 dargestellt sind. 1. Beispielsweise kann der Speicher-Hub 105 in einigen Architekturen als Northbridge bezeichnet werden, während der I/O-Hub 107 als Southbridge bezeichnet werden kann.
  • 2A veranschaulicht einen Parallelprozessor 200 gemäß einer Ausführungsform. Die verschiedenen Komponenten des Parallelprozessors 200 können unter Verwendung einer oder mehrerer integrierter Schaltungsvorrichtungen implementiert werden, wie beispielsweise programmierbare Prozessoren, anwendungsspezifische integrierte Schaltungen (ASICs) oder feldprogrammierbare Gate-Arrays (FPGA). Der dargestellte Parallelprozessor 200 ist eine Variante des einen oder der mehreren Parallelprozessor(en) 112, die in 1 gezeigt sind. 1 gemäß einer Ausführungsform.
  • In einer Ausführungsform beinhaltet der Parallelprozessor 200 eine Parallelverarbeitungseinheit 202. Die Parallelverarbeitungseinheit beinhaltet eine E/A-Einheit 204, die eine Kommunikation mit anderen Geräten ermöglicht, einschließlich anderer Instanzen der Parallelverarbeitungseinheit 202. Die E/A-Einheit 204 kann direkt mit anderen Geräten verbunden sein. In einer Ausführungsform ist die E/A-Einheit 204 über die Verwendung einer Hub- oder Switch-Schnittstelle, wie etwa eines Speicher-Hubs 105, mit anderen Geräten verbunden. Die Verbindungen zwischen dem Speicher-Hub 105 und der E/A-Einheit 204 bilden eine Kommunikationsverbindung 113. Innerhalb der Parallelverarbeitungseinheit 202 ist die I/O-Einheit 204 mit einer Hostschnittstelle 206 und einer Speicherkreuzschiene 216 verbunden, wobei die Hostschnittstelle 206 Befehle empfängt, die zum Ausführen von Verarbeitungsoperationen gerichtet sind, und die Speicherkreuzschiene 216 Befehle empfängt, die zum Ausführen von Speicheroperationen gerichtet sind.
  • Wenn die Hostschnittstelle 206 einen Befehlspuffer über die E/A-Einheit 204 empfängt, kann die Hostschnittstelle 206 Arbeitsvorgänge anweisen, diese Befehle an ein Front-End 208 auszuführen. In einer Ausführungsform ist das Front-End 208 mit einem Scheduler 210 gekoppelt, der dazu konfiguriert ist, Befehle oder andere Arbeitselemente an ein Verarbeitungscluster-Array 212 zu verteilen. In einer Ausführungsform stellt der Scheduler 210 sicher, dass das Verarbeitungsclusterarray 212 richtig konfiguriert ist und sich in einem gültigen Zustand befindet, bevor Aufgaben an die Verarbeitungscluster des Verarbeitungsclusterarrays 212 verteilt werden. In einer Ausführungsform wird der Scheduler 210 über eine Firmware-Logik implementiert, die auf einem Mikrocontroller ausgeführt wird. Der durch den Mikrocontroller implementierte Scheduler 210 ist konfigurierbar, um komplexe Scheduling- und Arbeitsverteilungsoperationen mit grober und feiner Granularität durchzuführen, was eine schnelle Vorbelegung und Kontextumschaltung von Threads ermöglicht, die auf dem Verarbeitungs-Array 212 ausgeführt werden. In einer Ausführungsform kann die Host-Software Arbeitslasten zum Planen auf dem Verarbeitungsarray 212 über eine von mehreren Türklingeln für die Grafikverarbeitung nachweisen. Die Arbeitslasten können dann durch die Logik des Schedulers 210 innerhalb des Mikrocontrollers des Schedulers automatisch über das Verarbeitungsfeld 212 verteilt werden.
  • Das Verarbeitungscluster-Array 212 kann bis zu „N“ Verarbeitungscluster umfassen (zB Cluster 214A, Cluster 214B bis Cluster 214N). Jeder Cluster 214A-214N des Verarbeitungscluster-Arrays 212 kann eine große Anzahl gleichzeitiger Threads ausführen. Der Scheduler 210 kann den Clustern 214A - 214N des Verarbeitungscluster-Arrays 212 unter Verwendung verschiedener Planungs- und/oder Arbeitsverteilungsalgorithmen Arbeit zuweisen, die in Abhängigkeit von der für jede Art von Programm oder Berechnung entstehenden Arbeitsbelastung variieren können. Die Planung kann vom Planer 210 dynamisch gehandhabt werden oder kann teilweise von der Compilerlogik während der Kompilierung der Programmlogik unterstützt werden, die zur Ausführung durch das Verarbeitungscluster-Array 212 konfiguriert ist. In einer Ausführungsform können verschiedene Cluster 214A - 214N des Verarbeitungsclusterarrays 212 zum Verarbeiten verschiedener Arten von Programmen oder zum Durchführen verschiedener Arten von Berechnungen zugewiesen werden.
  • Das Verarbeitungscluster-Array 212 kann konfiguriert sein, um verschiedene Typen von Parallelverarbeitungsoperationen durchzuführen. In einer Ausführungsform ist das Verarbeitungscluster-Array 212 konfiguriert, um parallele Rechenoperationen für allgemeine Zwecke durchzuführen. Zum Beispiel kann das Verarbeitungscluster-Array 212 eine Logik zum Ausführen von Verarbeitungsaufgaben umfassen, einschließlich Filtern von Video- und/oder Audiodaten, Durchführen von Modellierungsoperationen, einschließlich Physikoperationen, und Durchführen von Datentransformationen.
  • In einer Ausführungsform ist das Verarbeitungscluster-Array 212 konfiguriert, um parallele Grafikverarbeitungsoperationen durchzuführen. In Ausführungsformen, in denen der Parallelprozessor 200 konfiguriert ist, um Grafikverarbeitungsoperationen durchzuführen, kann das Verarbeitungscluster-Array 212 zusätzliche Logik umfassen, um die Ausführung solcher Grafikverarbeitungsoperationen zu unterstützen, einschließlich, aber nicht beschränkt auf Textur-Sampling-Logik, um Texturoperationen durchzuführen, wie sowie Tessellationslogik und andere Vertex-Verarbeitungslogik. Außerdem kann das Verarbeitungscluster-Array 212 konfiguriert sein, um mit der Grafikverarbeitung zusammenhängende Shader-Programme auszuführen, wie beispielsweise, aber nicht beschränkt auf Vertex-Shader, Tessellation-Shader, Geometrie-Shader und Pixel-Shader. Die Parallelverarbeitungseinheit 202 kann Daten aus dem Systemspeicher über die E/A-Einheit 204 zur Verarbeitung übertragen. Während der Verarbeitung können die übertragenen Daten während der Verarbeitung im On-Chip-Speicher (zB dem Parallelprozessorspeicher 222) gespeichert und dann in den Systemspeicher zurückgeschrieben werden.
  • In einer Ausführungsform, wenn die Parallelverarbeitungseinheit 202 verwendet wird, um eine Grafikverarbeitung durchzuführen, kann der Scheduler 210 konfiguriert sein, um die Verarbeitungsarbeitslast in ungefähr gleich große Aufgaben aufzuteilen, um eine Verteilung der Grafikverarbeitungsoperationen auf mehrere Cluster 214A - 214N von. besser zu ermöglichen das Verarbeitungscluster-Array 212. In einigen Ausführungsformen können Teile des Verarbeitungscluster-Arrays 212 konfiguriert sein, um unterschiedliche Verarbeitungsarten durchzuführen. Zum Beispiel kann ein erster Teil konfiguriert sein, um Scheitelpunktschattierung und Topologieerzeugung durchzuführen, ein zweiter Teil kann konfiguriert sein, um Tessellation und Geometrieschattierung durchzuführen, und ein dritter Teil kann konfiguriert sein, um Pixelschattierung oder andere Bildschirmraumoperationen durchzuführen, um ein gerendertes Bild zu erzeugen Bild zur Anzeige. Zwischendaten, die von einem oder mehreren der Cluster 214A - 214N erzeugt werden, können in Puffern gespeichert werden, um zu ermöglichen, dass die Zwischendaten zwischen den Clustern 214A - 214N zur weiteren Verarbeitung übertragen werden.
  • Während des Betriebs kann das Verarbeitungscluster-Array 212 über den Scheduler 210, der Befehle empfängt, die Verarbeitungsaufgaben definieren, vom Front-End 208 auszuführende Verarbeitungsaufgaben empfangen. Für Grafikverarbeitungsoperationen können Verarbeitungsaufgaben Indizes von zu verarbeitenden Daten umfassen, z. B. Oberflächen-(Patch-)Daten, Grundelementdaten, Scheitelpunktdaten und/oder Pixeldaten sowie Zustandsparameter und Befehle, die definieren, wie die Daten sein sollen verarbeitet (zB welches Programm ausgeführt werden soll). Der Planer 210 kann dazu konfiguriert sein, die den Aufgaben entsprechenden Indizes abzurufen oder kann die Indizes vom Front-End 208 empfangen. Das Front-End 208 kann konfiguriert sein, um sicherzustellen, dass das Verarbeitungscluster-Array 212 in einen gültigen Zustand konfiguriert ist, bevor die durch eingehende Befehlspuffer (z. B. Stapelpuffer, Push-Puffer usw.) spezifizierte Arbeitslast initiiert wird.
  • Jede der einen oder mehreren Instanzen der Parallelverarbeitungseinheit 202 kann mit dem Parallelprozessorspeicher 222 gekoppelt werden. Auf den Parallelprozessorspeicher 222 kann über die Speicherkreuzschiene 216 zugegriffen werden, die Speicheranforderungen vom Verarbeitungscluster-Array 212 sowie von der E/A-Einheit 204 empfangen kann. Die Speicherkreuzschiene 216 kann über eine Speicherschnittstelle 218 auf den Parallelprozessorspeicher 222 zugreifen. Die Speicherschnittstelle 218 kann mehrere Partitionseinheiten (z. B. Partitionseinheit 220A, Partitionseinheit 220B bis Partitionseinheit 220N) beinhalten, die jeweils mit einem Teil (z. B. Speichereinheit) des Parallelprozessorspeichers 222 koppeln können. In einer Implementierung ist die Anzahl von Partitionseinheiten 220A - 220N so konfiguriert, dass sie gleich der Anzahl von Speichereinheiten ist, sodass eine erste Partitionseinheit 220A eine entsprechende erste Speichereinheit 224A aufweist, eine zweite Partitionseinheit 220B eine entsprechende Speichereinheit 224B aufweist, und eine N-te Partitionseinheit 220N weist eine entsprechende N-te Speichereinheit 224N auf. In anderen Ausführungsformen kann die Anzahl von Partitionseinheiten 220A - 220N nicht gleich der Anzahl von Speichervorrichtungen sein.
  • In verschiedenen Ausführungsformen können die Speichereinheiten 224A - 224N verschiedene Arten von Speichervorrichtungen umfassen, einschließlich eines dynamischen Direktzugriffsspeichers (DRAM) oder eines Grafik-Direktzugriffsspeichers, wie etwa eines synchronen Grafik-Direktzugriffsspeichers (SGRAM), einschließlich einer Grafik mit doppelter Datenrate (GDDR.).) Erinnerung. In einer Ausführungsform können die Speichereinheiten 224A - 224N auch 3D-Stapelspeicher umfassen, einschließlich, aber nicht beschränkt auf Speicher mit hoher Bandbreite (HBM). Fachleute werden erkennen, dass die spezifische Implementierung der Speichereinheiten 224A - 224N variieren kann und aus einem von verschiedenen herkömmlichen Designs ausgewählt werden kann. Renderziele, wie etwa Framepuffer oder Texturabbildungen, können über die Speichereinheiten 224A-224N gespeichert werden, was es den Partitionseinheiten 220A-220N ermöglicht, Teile jedes Renderziels parallel zu schreiben, um die verfügbare Bandbreite des Parallelprozessorspeichers 222 effizient zu nutzen. In einigen Ausführungsformen kann eine lokale Instanz des Parallelprozessorspeichers 222 zugunsten eines einheitlichen Speicherdesigns ausgeschlossen werden, das Systemspeicher in Verbindung mit lokalem Cache-Speicher verwendet.
  • In einer Ausführungsform kann jeder der Cluster 214A - 214N des Verarbeitungscluster-Arrays 212 Daten verarbeiten, die in eine der Speichereinheiten 224A - 224N innerhalb des Parallelprozessorspeichers 222 geschrieben werden. Die Speicherkreuzschiene 216 kann konfiguriert sein, um die Ausgabe jedes Clusters 214A - 214N an eine beliebige Partitionseinheit 220A - 220N oder an einen anderen Cluster 214A - 214N zu übertragen, die zusätzliche Verarbeitungsoperationen an der Ausgabe durchführen können. Jeder Cluster 214A - 214N kann mit der Speicherschnittstelle 218 durch die Speicherkreuzschiene 216 kommunizieren, um von verschiedenen externen Speichervorrichtungen zu lesen oder in sie zu schreiben. In einer Ausführungsform weist die Speicherkreuzschiene 216 eine Verbindung zur Speicherschnittstelle 218 auf, um mit der E/A-Einheit 204 zu kommunizieren, sowie eine Verbindung zu einer lokalen Instanz des Parallelprozessorspeichers 222, wodurch die Verarbeitungseinheiten innerhalb der verschiedenen Verarbeitungscluster ermöglicht werden 214A-214N, um mit dem Systemspeicher oder einem anderen Speicher zu kommunizieren, der nicht lokal für die Parallelverarbeitungseinheit 202 ist. In einer Ausführungsform kann die Speicherkreuzschiene 216 virtuelle Kanäle verwenden, um Verkehrsströme zwischen den Clustern 214A - 214N und den Partitionseinheiten 220A - 220N zu trennen.
  • Während eine einzelne Instanz der Parallelverarbeitungseinheit 202 innerhalb des Parallelprozessors 200 dargestellt ist, kann eine beliebige Anzahl von Instanzen der Parallelverarbeitungseinheit 202 enthalten sein. Beispielsweise können mehrere Instanzen der Parallelverarbeitungseinheit 202 auf einer einzelnen Add-In-Karte bereitgestellt werden, oder es können mehrere Add-In-Karten miteinander verbunden werden. Die unterschiedlichen Instanzen der Parallelverarbeitungseinheit 202 können so konfiguriert sein, dass sie auch dann zusammenwirken, wenn die unterschiedlichen Instanzen unterschiedliche Anzahlen von Verarbeitungskernen, unterschiedliche Mengen an lokalem Parallelprozessorspeicher und/oder andere Konfigurationsunterschiede aufweisen. Beispielsweise können in einer Ausführungsform einige Instanzen der Parallelverarbeitungseinheit 202 Gleitkommaeinheiten mit höherer Genauigkeit relativ zu anderen Instanzen umfassen. Systeme, die eine oder mehrere Instanzen der Parallelverarbeitungseinheit 202 oder des Parallelprozessors 200 enthalten, können in einer Vielzahl von Konfigurationen und Formfaktoren implementiert werden, einschließlich, aber nicht beschränkt auf Desktop-, Laptop- oder Handheld-PCs, Server, Workstations, Spielkonsolen, und/oder eingebettete Systeme.
  • 2B ist ein Blockdiagramm einer Partitionseinheit 220 gemäß einer Ausführungsform. In einer Ausführungsform ist die Partitionseinheit 220 eine Instanz einer der Partitionseinheiten 220A - 220N von 2 . 2A. Wie dargestellt, umfasst die Partitionseinheit 220 einen L2-Cache 221, eine Bildpufferschnittstelle 225 und eine ROP 226 (Rasteroperationseinheit). Der L2-Cache 221 ist ein Lese-/Schreib-Cache, der dazu konfiguriert ist, von der Speicherkreuzschiene 216 und dem ROP 226 empfangene Lade- und Speichervorgänge durchzuführen. Lesefehler und dringende Rückschreibanforderungen werden vom L2-Cache 221 zur Verarbeitung an die Rahmenpufferschnittstelle 225 ausgegeben. Aktualisierungen können auch über die Bildpufferschnittstelle 225 zur Verarbeitung an den Bildspeicher gesendet werden. In einer Ausführungsform ist die Rahmenpufferschnittstelle 225 mit einer der Speichereinheiten im Parallelprozessorspeicher, wie beispielsweise den Speichereinheiten 224A - 224N von 2 , verbunden. 2A (zB innerhalb des Parallelprozessorspeichers 222).
  • In Grafikanwendungen ist der ROP 226 eine Verarbeitungseinheit, die Rasteroperationen wie etwa Schablone, Z-Test, Mischen und dergleichen durchführt. Der ROP 226 gibt dann verarbeitete Grafikdaten aus, die im Grafikspeicher gespeichert sind. In einigen Ausführungsformen umfasst der ROP 226 eine Komprimierungslogik zum Komprimieren von Tiefen- oder Farbdaten, die in den Speicher geschrieben werden, und zum Dekomprimieren von Tiefen- oder Farbdaten, die aus dem Speicher gelesen werden. Die Komprimierungslogik kann eine verlustfreie Komprimierungslogik sein, die einen oder mehrere von mehreren Komprimierungsalgorithmen verwendet. Der vom ROP 226 durchgeführte Komprimierungstyp kann basierend auf den statistischen Eigenschaften der zu komprimierenden Daten variieren. Beispielsweise wird in einer Ausführungsform eine Delta-Farbkompression an Tiefen- und Farbdaten pro Kachel durchgeführt.
  • In einigen Ausführungsformen ist die ROP 226 in jedem Verarbeitungscluster enthalten (z. B. Cluster 214A-214N von 2A) statt innerhalb der Partitionseinheit 220. In einer solchen Ausführungsform werden Lese- und Schreibanforderungen für Pixeldaten über die Speicherkreuzschiene 216 anstelle von Pixelfragmentdaten übertragen. Die verarbeiteten Grafikdaten können auf einer Anzeigevorrichtung angezeigt werden, wie beispielsweise einer der einen oder mehreren Anzeigevorrichtungen 110 von 1 . 1 zur Weiterverarbeitung durch den/die Prozessor(en) 102 geroutet oder zur Weiterverarbeitung durch eine der Verarbeitungseinheiten innerhalb des Parallelprozessors 200 von 1 geroutet. 2A.
  • 2C ist ein Blockdiagramm eines Verarbeitungsclusters 214 innerhalb einer Parallelverarbeitungseinheit gemäß einer Ausführungsform. In einer Ausführungsform ist der Verarbeitungscluster eine Instanz eines der Verarbeitungscluster 214A - 214N von 2 . 2A. Der Verarbeitungscluster 214 kann konfiguriert sein, viele Threads parallel auszuführen, wobei sich der Begriff „Thread“ auf eine Instanz eines bestimmten Programms bezieht, das auf einem bestimmten Satz von Eingabedaten ausgeführt wird. In einigen Ausführungsformen werden Einzelbefehls-Mehrdaten-(SIMD)-Befehlsausgabetechniken verwendet, um die parallele Ausführung einer großen Anzahl von Threads zu unterstützen, ohne mehrere unabhängige Befehlseinheiten bereitzustellen. In anderen Ausführungsformen werden Single-Instruction-Multithread-(SIMT)-Techniken verwendet, um die parallele Ausführung einer großen Anzahl von im Allgemeinen synchronisierten Threads zu unterstützen, wobei eine gemeinsame Befehlseinheit verwendet wird, die konfiguriert ist, um Befehle an einen Satz von Verarbeitungsmaschinen innerhalb jedes der Verarbeitungscluster. Im Gegensatz zu einem SIMD-Ausführungsregime, bei dem alle Verarbeitungsmaschinen typischerweise identische Anweisungen ausführen, ermöglicht die SIMT-Ausführung, dass verschiedene Threads leichter divergenten Ausführungspfaden durch ein gegebenes Threadprogramm folgen. Fachleute werden verstehen, dass ein SIMD-Verarbeitungsregime eine funktionale Teilmenge eines SIMT-Verarbeitungsregimes darstellt.
  • Der Betrieb des Verarbeitungsclusters 214 kann über einen Pipeline-Manager 232 gesteuert werden, der Verarbeitungsaufgaben an SIMT-Parallelprozessoren verteilt. Der Pipeline-Manager 232 empfängt Anweisungen vom Scheduler 210 von 2 . 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 SIMT-Parallelprozessors. Jedoch können verschiedene Typen von SIMT-Parallelprozessoren unterschiedlicher Architekturen in dem Verarbeitungscluster 214 enthalten sein. Eine oder mehrere Instanzen des Grafik-Multiprozessors 234 können in einem Verarbeitungscluster 214 enthalten sein. Der Grafik-Multiprozessor 234 kann Daten verarbeiten und eine Datenkreuzschiene 240 kann verwendet werden, um die verarbeiteten Daten an eines von mehreren möglichen Zielen zu verteilen, einschließlich anderer Shader-Einheiten. Der Pipeline-Manager 232 kann die Verteilung verarbeiteter Daten erleichtern, indem er Ziele für verarbeitete Daten, die über die Datenkreuzschiene 240 zu verteilen sind, spezifiziert.
  • Jeder Grafik-Multiprozessor 234 innerhalb des Verarbeitungsclusters 214 kann einen identischen Satz funktionaler Ausführungslogik (zB arithmetische Logikeinheiten, Lade-Speicher-Einheiten usw.) umfassen. Die funktionale Ausführungslogik kann in einer Pipeline-Weise konfiguriert werden, in der neue Befehle ausgegeben werden können, bevor vorherige Befehle abgeschlossen sind. Die funktionale Ausführungslogik unterstützt eine Vielzahl von Operationen, einschließlich Integer- und Gleitkomma-Arithmetik, Vergleichsoperationen, Boolesche Operationen, Bitverschiebung und Berechnung verschiedener algebraischer Funktionen. In einer Ausführungsform kann dieselbe Funktionseinheitshardware genutzt werden, um unterschiedliche Operationen durchzuführen, und jede Kombination von Funktionseinheiten kann vorhanden sein.
  • Die an den Verarbeitungscluster 214 übertragenen Anweisungen bilden einen Thread. Ein Satz von Threads, der über den Satz von Parallelverarbeitungs-Engines hinweg ausgeführt wird, ist eine Thread-Gruppe. Eine Thread-Gruppe führt dasselbe Programm mit unterschiedlichen Eingabedaten aus. Jeder Thread innerhalb einer Thread-Gruppe kann einer anderen Verarbeitungs-Engine innerhalb eines Grafik-Multiprozessors 234 zugewiesen werden. Eine Thread-Gruppe kann weniger Threads beinhalten als die Anzahl von Verarbeitungs-Engines innerhalb des Grafik-Multiprozessors 234. Wenn eine Thread-Gruppe weniger Threads als die Anzahl von Verarbeitungsmaschinen umfasst, können eine oder mehrere der Verarbeitungsmaschinen während Zyklen, in denen diese Thread-Gruppe verarbeitet wird, im Leerlauf sein. Eine Thread-Gruppe kann auch mehr Threads beinhalten als die Anzahl von Verarbeitungs-Engines innerhalb des Grafik-Multiprozessors 234. Wenn die Thread-Gruppe mehr Threads umfasst als die Anzahl der Verarbeitungsmaschinen innerhalb des Grafik-Multiprozessors 234, kann die 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 enthält der Grafik-Multiprozessor 234 einen internen Cache-Speicher, um Lade- und Speicheroperationen durchzuführen. 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 Verarbeitungsclusters 214 verwenden. Jeder Grafik-Multiprozessor 234 hat auch Zugriff auf L2-Caches innerhalb der Partitionseinheiten (z. B. die Partitionseinheiten 220A - 220N von 2A), die von allen Verarbeitungsclustern 214 gemeinsam genutzt werden und verwendet werden können, um Daten zwischen Threads zu übertragen. Der Grafik-Multiprozessor 234 kann auch auf globalen Speicher außerhalb des Chips zugreifen, der einen oder mehrere von lokalem parallelem Prozessorspeicher und/oder Systemspeicher umfassen kann. Jeder beliebige Speicher außerhalb der Parallelverarbeitungseinheit 202 kann als globaler Speicher verwendet werden. Ausführungsformen, in denen der Verarbeitungscluster 214 mehrere Instanzen des Grafik-Multiprozessors 234 beinhaltet, können gemeinsame Anweisungen und Daten teilen, die im L1-Cache 248 gespeichert sein können.
  • Jeder Verarbeitungscluster 214 kann eine MMU 245 (Speicherverwaltungseinheit) umfassen, die konfiguriert ist, virtuelle Adressen in physikalische Adressen abzubilden. In anderen Ausführungsformen können sich eine oder mehrere Instanzen der MMU 245 in der Speicherschnittstelle 218 von 2 befinden. 2A. Die MMU 245 enthält einen Satz von Seitentabelleneinträgen (PTEs), die verwendet werden, um eine virtuelle Adresse auf eine physikalische Adresse einer Kachel und optional einen Cache-Line-Index abzubilden. Die MMU 245 kann Adressübersetzungs-Lookaside-Puffer (TLB) oder Caches beinhalten, die sich innerhalb des Grafik-Multiprozessors 234 oder des L1-Cache oder Verarbeitungsclusters 214 befinden können. Die physikalische Adresse wird verarbeitet, um die Oberflächendatenzugriffslokalität zu verteilen, um eine effiziente Anforderungsverschachtelung zwischen den Partitionseinheiten zu ermöglichen. Der Cachezeilenindex kann verwendet werden, um zu bestimmen, ob eine Anforderung für eine Cachezeile ein Treffer oder ein Fehlschlag ist.
  • In Grafik- und Computeranwendungen kann ein Verarbeitungscluster 214 so konfiguriert sein, dass jeder Grafik-Multiprozessor 234 mit einer Textureinheit 236 zum Durchführen von Texturabbildungsoperationen gekoppelt ist, z. B. zum Bestimmen von Texturabtastpositionen, Lesen von Texturdaten und Filtern der Texturdaten. Texturdaten werden aus einem internen Textur-L1-Cache (nicht gezeigt) oder in einigen Ausführungsformen aus dem L1-Cache innerhalb des Grafik-Multiprozessors 234 gelesen und nach Bedarf aus einem L2-Cache, einem lokalen Parallelprozessorspeicher oder Systemspeicher geholt. Jeder Grafikmultiprozessor 234 gibt verarbeitete Aufgaben an die Datenkreuzschiene 240 aus, um die verarbeitete Aufgabe einem anderen Verarbeitungscluster 214 zur weiteren Verarbeitung bereitzustellen oder die verarbeitete Aufgabe in einem L2-Cache, einem lokalen Parallelprozessorspeicher oder einem Systemspeicher über die Speicherkreuzschiene 216 zu speichern. Ein preROP 242 (Pre-Raster Operations Unit) ist konfiguriert, um Daten vom Grafik-Multiprozessor 234 zu empfangen, um Daten an ROP-Einheiten zu leiten, die sich wie hierin beschrieben bei Partitionseinheiten befinden können (z. B. Partitionseinheiten 220A - 220N von 2a). Die preROP 242 Einheit kann Optimierungen für die Farbmischung durchführen, Pixelfarbdaten organisieren und Adressübersetzungen durchführen.
  • Es versteht sich, dass die hierin beschriebene Kernarchitektur veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Eine beliebige Anzahl von Verarbeitungseinheiten, z. B. Grafik-Multiprozessor 234, Textureinheiten 236, PreROPs 242 usw., kann in einem Verarbeitungscluster 214 enthalten sein. Während ferner nur ein Verarbeitungscluster 214 gezeigt ist, kann eine Parallelverarbeitungseinheit, wie hierin beschrieben, eine beliebige Anzahl von Instanzen des Verarbeitungsclusters 214 beinhalten. In einer Ausführungsform kann jeder Verarbeitungscluster 214 dazu konfiguriert sein, unabhängig von anderen Verarbeitungsclustern 214 unter Verwendung separater und unterschiedlicher Verarbeitungseinheiten, L1-Caches usw. zu arbeiten.
  • 2D zeigt einen Grafik-Multiprozessor 234 gemäß einer Ausführungsform. In einer solchen Ausführungsform ist der Grafik-Multiprozessor 234 mit dem Pipeline-Manager 232 des Verarbeitungsclusters 214 gekoppelt. Der Grafikmultiprozessor 234 weist eine Ausführungspipeline auf, die einen Befehlscache 252, eine Befehlseinheit 254, eine Adressabbildungseinheit 256, eine Registerdatei 258, einen oder mehrere Mehrzweck-Grafikverarbeitungseinheitskerne (GPGPU) 262 umfasst, aber nicht darauf beschränkt ist oder mehr Lade-/Speichereinheiten 266. Die GPGPU-Kerne 262 und die Lade-/Speichereinheiten 266 sind über eine Speicher- und Cache-Verbindung 268 mit dem Cache-Speicher 272 und dem gemeinsam genutzten Speicher 270 gekoppelt. In einer Ausführungsform umfasst der Grafik-Multiprozessor 234 zusätzlich Tensor- und/oder Raytracing-Kerne 263 , die Hardwarelogik beinhalten, um Matrix- und/oder Raytracing-Operationen zu beschleunigen.
  • In einer Ausführungsform empfängt der Befehlscache 252 einen Strom von auszuführenden Befehlen von dem Pipeline-Manager 232. Die Anweisungen werden im Anweisungscache 252 zwischengespeichert und zur Ausführung durch die Anweisungseinheit 254 gesendet. Die Anweisungseinheit 254 kann Anweisungen als Thread-Gruppen (z. B. Warps) versenden, wobei jeder Thread der Thread-Gruppe einer anderen Ausführungseinheit innerhalb des GPGPU-Kerns 262 zugewiesen ist. Ein Befehl kann auf einen lokalen, gemeinsam genutzten oder globalen Adressraum zugreifen, indem er eine Adresse innerhalb eines einheitlichen Adressraums spezifiziert. Die Adresszuordnungseinheit 256 kann verwendet werden, um Adressen im einheitlichen Adressraum in eine eindeutige Speicheradresse zu übersetzen, auf die von den Lade-/Speichereinheiten 266 zugegriffen werden kann.
  • Die Registerdatei 258 stellt einen Satz von Registern für die Funktionseinheiten des Grafikmultiprozessors 234 bereit. Die Registerdatei 258 stellt eine temporäre Speicherung für Operanden bereit, die mit den Datenpfaden der Funktionseinheiten (z. B. GPGPU-Kerne 262, Lade-/Speichereinheiten 266) des Grafik-Multiprozessors 234 verbunden sind. In einer Ausführungsform ist die Registerdatei 258 zwischen jeder der Funktionseinheiten aufgeteilt, sodass jeder Funktionseinheit ein dedizierter Abschnitt der Registerdatei 258 zugewiesen wird. In einer Ausführungsform wird die Registerdatei 258 zwischen den verschiedenen Warps aufgeteilt, die von dem Grafik-Multiprozessor 234 ausgeführt werden.
  • Die GPGPU-Kerne 262 können jeweils Gleitkommaeinheiten (FPUs) und/oder ganzzahlige arithmetische Logikeinheiten (ALUs) beinhalten, die verwendet werden, um Anweisungen des Grafikmultiprozessors 234 auszuführen. Die GPGPU-Kerne 262 können gemäß Ausführungsformen ähnlich in der Architektur sein oder sich in der Architektur unterscheiden. Zum Beispiel und in einer Ausführungsform umfasst ein erster Teil der GPGPU-Kerne 262 eine FPU mit einfacher Genauigkeit und eine ganzzahlige ALU, während ein zweiter Teil der GPGPU-Kerne eine FPU mit doppelter Genauigkeit enthält. In einer Ausführungsform können die FPUs den Standard IEEE 754-2008 für Gleitkommaarithmetik implementieren oder Gleitkommaarithmetik mit variabler Genauigkeit ermöglichen. Der Grafik-Multiprozessor 234 kann zusätzlich eine oder mehrere Festfunktions- oder Spezialfunktionseinheiten umfassen, um spezielle Funktionen wie etwa Kopierrechteck- oder Pixelmischoperationen auszuführen. In einer Ausführungsform können einer oder mehrere der GPGPU-Kerne auch feste oder spezielle Funktionslogik umfassen.
  • In einer Ausführungsform enthalten die GPGPU-Kerne 262 eine SIMD-Logik, die in der Lage ist, einen einzelnen Befehl an mehreren Datensätzen auszuführen. In einer Ausführungsform können die GPGPU-Kerne 262 physisch SIMD4-, SIMD8- und SIMD16-Anweisungen ausführen und SIMD1-, SIMD2- und SIMD32-Anweisungen logisch ausführen. Die SIMD-Anweisungen für die GPGPU-Kerne können zur Kompilierzeit von einem Shader-Compiler oder automatisch generiert werden, wenn Programme ausgeführt und kompiliert werden, die für Single Program Multiple Data (SPMD) oder SIMT-Architekturen geschrieben und kompiliert wurden. Mehrere Threads eines Programms, das für das SIMT-Ausführungsmodell konfiguriert ist, können über einen einzigen SIMD-Befehl ausgeführt werden. Beispielsweise und in einer Ausführungsform können acht SIMT-Threads, die dieselben oder ähnliche Operationen ausführen, parallel über eine einzige SIMD8-Logikeinheit ausgeführt werden.
  • Die Speicher- und Cache-Verbindung 268 ist ein Verbindungsnetzwerk, das jede der Funktionseinheiten des Grafik-Multiprozessors 234 mit der Registerdatei 258 und dem gemeinsam genutzten Speicher 270 verbindet. In einer Ausführungsform ist die Speicher- und Cache-Verbindung 268 eine Kreuzschienenverbindung, die es der Lade-/Speichereinheit 266 ermöglicht, Lade- und Speicheroperationen zwischen dem gemeinsam genutzten Speicher 270 und der Registerdatei 258 zu implementieren. Die Registerdatei 258 kann mit der gleichen Frequenz wie die GPGPU-Kerne 262 arbeiten, daher weist die Datenübertragung zwischen den GPGPU-Kernen 262 und der Registerdatei 258 eine sehr geringe Latenz auf. Der gemeinsam genutzte Speicher 270 kann verwendet werden, um eine Kommunikation zwischen Threads zu ermöglichen, die auf den Funktionseinheiten innerhalb des Grafikmultiprozessors 234 ausgeführt werden. Der Cache-Speicher 272 kann beispielsweise als Daten-Cache verwendet werden, um Texturdaten, die zwischen den Funktionseinheiten und der Textureinheit 236 kommuniziert werden, zwischenzuspeichern. Der gemeinsam genutzte Speicher 270 kann auch als zwischengespeichertes Programm verwendet werden. Auf den GPGPU-Kernen 262 ausgeführte Threads können zusätzlich zu den automatisch zwischengespeicherten Daten, die im Cache-Speicher 272 gespeichert sind, programmgesteuert Daten im gemeinsam genutzten Speicher speichern.
  • 3A-3C veranschaulichen zusätzliche Grafikmultiprozessoren gemäß Ausführungsformen. 3A - 3B veranschaulichen Grafikmultiprozessoren 325 , 350 , die Varianten des Grafikmultiprozessors 234 von 2 sind. 2C. 3C stellt eine Grafikverarbeitungseinheit (GPU) 380 dar, die dedizierte Sätze von Grafikverarbeitungsressourcen umfasst, die in Multi-Core-Gruppen 365A-365N . angeordnet sind. Die dargestellten Grafik-Multiprozessoren 325, 350 und die Multi-Core-Gruppen 365A-365N können Streaming-Multiprozessoren (SM) sein, die eine große Anzahl von AusführungsThreads gleichzeitig ausführen können.
  • 3A zeigt einen Grafik-Multiprozessor 325 gemäß einer zusätzlichen Ausführungsform. Der Grafikmultiprozessor 325 enthält mehrere zusätzliche Instanzen von Ausführungsressourceneinheiten relativ zu dem Grafikmultiprozessor 234 von 2. 2D. Zum Beispiel kann der Grafik-Multiprozessor 325 mehrere Instanzen der Befehlseinheit 332A - 332B, der Registerdatei 334A - 334B und der Textureinheit(en) 344A - 344B umfassen. Der Grafikmultiprozessor 325 umfasst auch mehrere Sätze von Grafik- oder Rechenausführungseinheiten (zB GPGPU-Kern 336A - 336B, Tensorkern 337A - 337B, Raytracing-Kern 338A - 338B) und mehrere Sätze von Lade-/Speichereinheiten 340A - 340B. In einer Ausführungsform weisen die Ausführungsressourceneinheiten einen gemeinsamen Befehlscache 330, einen Textur- und/oder Datencachespeicher 342 und einen gemeinsam genutzten Speicher 346 auf.
  • Die verschiedenen Komponenten können über eine Verbindungsstruktur 327 kommunizieren. In einer Ausführungsform beinhaltet die Verbindungsstruktur 327 einen oder mehrere Kreuzschienenschalter, um eine Kommunikation zwischen den verschiedenen Komponenten des Grafikmultiprozessors 325 zu ermöglichen. In einer Ausführungsform ist die Verbindungsstruktur 327 eine separate Hochgeschwindigkeits-Netzwerkstrukturschicht, auf der jede Komponente des Grafik-Multiprozessors 325 gestapelt ist. Die Komponenten des Grafikmultiprozessors 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 dem gemeinsam genutzten Speicher 346 über die Verbindungsstruktur 327 kommunizieren. Die Verbindungsstruktur 327 kann die Kommunikation innerhalb des Grafik-Multiprozessors 325 arbitrieren, um eine faire Bandbreitenzuweisung zwischen Komponenten sicherzustellen.
  • 3B zeigt einen Grafik-Multiprozessor 350 gemäß einer zusätzlichen Ausführungsform. Der Grafikprozessor umfasst mehrere Sätze von Ausführungsressourcen 356A - 356D, wobei jeder Satz von Ausführungsressourcen mehrere Befehlseinheiten, Registerdateien, GPGPU-Kerne und Lade-/Speichereinheiten umfasst, wie in 1 dargestellt. 2D und 3A. Die Ausführungsressourcen 356A-356D können mit Textureinheit(en) 360A-360D für Texturoperationen zusammenarbeiten, während sie sich einen Befehlscache 354 und einen gemeinsam genutzten Speicher 353 teilen. In einer Ausführungsform können sich die Ausführungsressourcen 356A - 356D einen Instruktions-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 ähnlich der Verbindungsstruktur 327 von 1 kommunizieren. 3A.
  • Fachleute werden verstehen, dass die in 1, 2A-2D und 3A-3B sind beschreibend und den Umfang der vorliegenden Ausführungsformen nicht einschränkend. Somit können die hierin beschriebenen Techniken auf jeder richtig konfigurierten Verarbeitungseinheit implementiert werden, einschließlich, ohne Einschränkung, einem oder mehreren mobilen Anwendungsprozessoren, einer oder mehreren Desktop- oder Server-Zentralverarbeitungseinheiten (CPUs), einschließlich Mehrkern-CPUs, einer oder mehreren parallelen Prozessoren Verarbeitungseinheiten, wie beispielsweise die Parallelverarbeitungseinheit 202 von 2A, sowie einen oder mehrere Grafikprozessoren oder Spezialzweckverarbeitungseinheiten, ohne vom Umfang der hierin beschriebenen Ausführungsformen abzuweichen.
  • In einigen Ausführungsformen ist ein Parallelprozessor oder eine GPGPU, wie hierin beschrieben, kommunikativ mit Host-/Prozessorkernen gekoppelt, um Grafikoperationen, Maschinenlernoperationen, Musteranalyseoperationen und verschiedene Allzweck-GPU-(GPGPU)-Funktionen zu beschleunigen. Die GPU kann über einen Bus oder eine andere Verbindung (z. B. eine Hochgeschwindigkeitsverbindung wie etwa PCIe oder NVLink) kommunikativ mit dem/den Host-Prozessor/-Kernen gekoppelt sein. In anderen Ausführungsformen kann die GPU auf demselben Gehäuse oder Chip wie die Kerne integriert sein und über einen internen Prozessorbus/eine interne Prozessorverbindung (dh innerhalb des Gehäuses oder Chips) kommunikativ mit den Kernen gekoppelt sein. Ungeachtet der Art und Weise, in der die GPU verbunden ist, können die Prozessorkerne der GPU Arbeit in Form von Befehls-/Befehlsfolgen, die in einem Arbeitsdeskriptor enthalten sind, zuweisen. Die GPU verwendet dann dedizierte Schaltkreise/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
  • 3C veranschaulicht eine Grafikverarbeitungseinheit (GPU) 380, die dedizierte Sätze von Grafikverarbeitungsressourcen umfasst, die in Mehrkerngruppen 365A-N angeordnet sind. Während die Details nur eines einzigen Multi-Ader Gruppe 365A bereitgestellt werden, versteht es sich, dass die anderen Mehrkerngruppen 365B - 365N mit den gleichen oder ähnlichen Sätzen von Grafikverarbeitungsressourcen ausgestattet sein können.
  • Wie veranschaulicht, kann eine Mehrkerngruppe 365A einen Satz von Grafikkernen 370, einen Satz von Tensorkernen 371 und einen Satz von Raytracing-Kernen 372 beinhalten. Ein Scheduler/Dispatcher 368 plant und verteilt die Grafik-Threads zur Ausführung auf den verschiedenen Kernen 370, 371, 372. Ein Satz von Registerdateien 369 speichert Operandenwerte, die von den Kernen 370, 371, 372 verwendet werden, wenn die Grafik-Threads ausgeführt werden. Dies können beispielsweise Integer-Register zum Speichern von Integer-Werten, Floating-Point-Register zum Speichern von Floating-Point-Werten, Vektorregister . sein zum Speichern gepackter Datenelemente (Ganzzahl- und/oder Gleitkomma-Datenelemente) und Kachelregister zum Speichern von Tensor-/Matrixwerten. In einer Ausführungsform werden 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 Texturdaten, Scheitelpunktdaten, Pixeldaten, Strahlendaten, Begrenzungsvolumendaten usw. lokal innerhalb jeder Mehrkerngruppe 365A. Eine oder mehrere Textureinheiten 374 können auch verwendet werden, um Texturierungsoperationen durchzuführen, wie beispielsweise Texturabbildung und Abtastung. Ein Cache 375 der Ebene 2 (L2), der von allen oder einer Teilmenge der Multi-Core-Gruppen 365A - 365N geteilt wird, speichert Grafikdaten und/oder Anweisungen für mehrere gleichzeitige Grafik-Threads. Wie dargestellt, kann der L2-Cache 375 von mehreren Multi-Core-Gruppen 365A - 365N gemeinsam genutzt werden. Ein oder mehr Erinnerung Controller 367 koppeln die GPU 380 mit einem Speicher 366 , der ein Systemspeicher (zB DRAM) und/oder ein dedizierter Grafikspeicher (zB GDDR6-Speicher) sein kann.
  • Eingabe/Ausgabe-(I/O)-Schaltungsanordnung 363 koppelt die GPU 380 mit einem oder mehreren I/O-Geräten 362 wie etwa digitalen Signalprozessoren (DSPs), Netzwerkcontrollern oder Benutzereingabegeräten. Eine chipintegrierte Verbindung kann verwendet werden, um die E/A-Geräte 362 mit der GPU 380 und dem Speicher 366 zu koppeln. Ein oder mehrere E/A Erinnerung Verwaltungseinheiten (IOMMUs) 364 der E/A-Schaltung 3195 koppeln die E/A-Geräte 362 direkt mit dem Systemspeicher 366. In einer Ausführungsform verwaltet die IOMMU 364 mehrere Sätze von Seitentabellen, um virtuelle Adressen auf physikalische Adressen im Systemspeicher 366 abzubilden. In dieser Ausführungsform können sich die E/A-Geräte 362, CPU(s) 361 und GPU(s) 380 denselben virtuellen Adressraum teilen.
  • In einer Implementierung unterstützt die IOMMU 364 die Virtualisierung. In diesem Fall kann es einen ersten Satz von Seitentabellen verwalten, um virtuelle Gast-/Grafikadressen physischen Gast-/Grafikadressen zuzuordnen, und einen zweiten Satz Seitentabellen, um die physischen Gast-/Grafikadressen physischen System-/Hostadressen zuzuordnen (z. innerhalb des Systemspeichers 366). Die Basisadressen jedes der ersten und zweiten Sätze von Seitentabellen können in Steuerregistern gespeichert und an einem Kontextschalter ausgelagert werden (zB so dass der neue Kontext mit Zugriff auf den relevanten Satz von Seitentabellen versehen wird). Obwohl in 3C nicht dargestellt, kann jeder der Kerne 370 , 371 , 372 und/oder Mehrkerngruppen 365A - 365N Übersetzungs-Lookaside-Puffer (TLBs) enthalten, um virtuelle Gast-Physikalische Gast-Übersetzungen zwischenzuspeichern, guest körperlich um physische Übersetzungen zu hosten, und Gast virtuell, um physische Übersetzungen zu hosten.
  • In einer Ausführungsform sind die CPUs 361 , GPUs 380 und E/A-Geräte 362 auf einem einzigen integriert Halbleiter Chip und/oder Chippaket. Der dargestellte Speicher 366 kann auf demselben Chip integriert sein oder kann über eine chipexterne Schnittstelle mit den Speichercontrollern 367 gekoppelt sein. In einer Implementierung umfasst der Speicher 366 einen GDDR6-Speicher, der denselben virtuellen Adressraum wie andere physikalische Speicher auf Systemebene teilt, obwohl die zugrunde liegenden Prinzipien der Erfindung nicht auf diese spezielle Implementierung beschränkt sind.
  • In einer Ausführungsform umfassen die Tensorkerne 371 eine Vielzahl von Ausführungseinheiten, die speziell dafür ausgelegt sind, Matrixoperationen auszuführen, die die grundlegende Rechenoperation sind, die verwendet wird, um Deep-Learning-Operationen durchzuführen. Zum Beispiel können simultane Matrixmultiplikationsoperationen für das Training und die Inferenz von neuronalen Netzen verwendet werden. Die Tensorkerne 371 können eine Matrixverarbeitung unter Verwendung einer Vielzahl von Operandenpräzisionen durchführen, einschließlich Gleitkomma mit einfacher Genauigkeit (z. B. 32 Bit), Gleitkomma mit halber Genauigkeit (z. B. 16 Bit), ganzzahligen Wörtern (16 Bit), Bytes (8 Bit) und Halbbytes (4 Bit). In einer Ausführungsform ist ein neuronales Netzwerk Implementierung extrahiert Merkmale jeder gerenderten Szene und kombiniert möglicherweise Details aus mehreren Frames, um ein hochwertiges Endbild zu erstellen.
  • In Deep-Learning-Implementierungen kann parallele Matrixmultiplikationsarbeit zur Ausführung auf den Tensorkernen 371 geplant werden. Insbesondere das Training neuronaler Netze erfordert eine signifikante Zahl von Punktprodukt-Matrix-Operationen. Um eine innere Produktformulierung einer N x N x N Matrixmultiplikation zu verarbeiten, können die Tensorkerne 371 mindestens N Punkt-Produkt Verarbeitungselemente. Bevor die Matrixmultiplikation beginnt, wird eine gesamte Matrix in Kachelregister geladen und mindestens eine Spalte einer zweiten Matrix wird in jedem Zyklus für N Zyklen geladen. In jedem Zyklus werden N Punktprodukte verarbeitet.
  • Matrixelemente können in Abhängigkeit von der jeweiligen Implementierung mit unterschiedlichen Genauigkeiten gespeichert werden, einschließlich 16-Bit-Wörtern, 8-Bit-Bytes (zB INT8) und 4-Bit-Halbbytes (zB INT4). Anders Präzision Modi können für die Tensorkerne 371 spezifiziert werden, um sicherzustellen, dass die effizienteste Genauigkeit für verschiedene Arbeitslasten verwendet wird (z. B. das Ableiten von Arbeitslasten, die eine Quantisierung in Bytes und Halbbytes tolerieren können).
  • In einer Ausführungsform beschleunigen die Raytracing-Kerne 372 Raytracing-Operationen sowohl für Echtzeit-Raytracing- als auch für Nicht-Echtzeit-Raytracing-Implementierungen. Insbesondere enthalten die Strahlverfolgungskerne 372 eine Strahldurchquerungs-/Schnittpunktschaltung zum Ausführen einer Strahlendurchquerung unter Verwendung von Bounding-Volume-Hierarchien (BVHs) und zum Identifizieren von Schnittpunkten zwischen Strahlen und Primitiven, die in den BVH-Volumen eingeschlossen sind. Die Raytracing-Kerne 372 können auch eine Schaltung zum Durchführen von Tiefentests und Culling (z. B. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) umfassen. In einer Implementierung führen die Raytracing-Kerne 372 Durchquerungs- und Schnittoperationen zusammen mit den hierin beschriebenen Bildentrauschungstechniken durch, von denen zumindest ein Teil auf den Tensorkernen 371 ausgeführt werden kann. Zum Beispiel implementieren die Tensorkerne 371 in einer Ausführungsform ein neuronales Deep-Learning-Netzwerk, um eine Rauschunterdrückung von Frames durchzuführen, die von den Raytracing-Kernen 372 erzeugt werden. Die CPU(s) 361 , Grafikkerne 370 und/oder Raytracing-Kerne 372 können jedoch auch alle oder einen Teil der Rauschunterdrückungs- und/oder Deep-Learning-Algorithmen implementieren.
  • Außerdem kann, wie oben beschrieben, ein verteilter Ansatz zur Rauschunterdrückung verwendet werden, bei dem sich die GPU 380 in einem Computergerät befindet, das über ein Netzwerk oder eine Hochgeschwindigkeitsverbindung mit anderen Computergeräten gekoppelt ist. In dieser Ausführungsform teilen sich die miteinander verbundenen Computervorrichtungen Lern-/Trainingsdaten des neuronalen Netzes, um die Geschwindigkeit zu verbessern, mit der das Gesamtsystem lernt, Rauschunterdrückung für verschiedene Typen von Bildrahmen und/oder verschiedene Grafikanwendungen durchzuführen.
  • In einer Ausführungsform verarbeiten die Strahlverfolgungskerne 372 alle BVH-Durchquerungen und Strahlprimitive-Schnittpunkte, wodurch die Grafikkerne 370 davor bewahrt werden, mit Tausenden von Befehlen pro Strahl überlastet zu werden. In einer Ausführungsform enthält jeder Raytracing-Kern 372 einen ersten Satz spezialisierter Schaltungen zum Durchführen von Bounding-Box-Tests (z. B. für Durchquerungsoperationen) und einen zweiten Satz von spezialisiert Schaltungen zum Durchführen der Strahlen-Dreieck-Schnitttests (z. B. sich überschneidende Strahlen, die durchquert wurden). Somit kann in einer Ausführungsform die Mehrkerngruppe 365A einfach eine Strahlsonde starten, und die Strahlverfolgungskerne 372 führen unabhängig Strahldurchquerung und Schnitt durch und geben Trefferdaten zurück (z. B. ein Treffer, kein Treffer, mehrere Treffer usw.). zum Thread-Kontext. Die anderen Kerne 370, 371 werden freigegeben, um andere Grafik- oder Rechenarbeit auszuführen, während die Raytracing-Kerne 372 die Durchquerungs- und Schnittoperationen ausführen.
  • In einer Ausführungsform umfasst jeder Strahlverfolgungskern 372 eine Durchquerungseinheit zum Durchführen von BVH-Testoperationen und eine Schnitteinheit, die strahlenprimitive Schnitttests durchführt. Die Kreuzungseinheit erzeugt eine „Treffer“, „Kein Treffer“ oder „Mehrfachtreffer“-Antwort, die es an den entsprechenden Thread liefert. Während der Durchquerungs- und Kreuzungsoperationen werden die Ausführungsressourcen der anderen Kerne (zB Grafikkerne 370 und Tensorkerne 371) freigegeben, um andere Formen von Grafikarbeit auszuführen.
  • In einem besonderen Verkörperung unten 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 beinhalten die Raytracing-Kerne 372 (und/oder andere Kerne 370, 371) Hardwareunterstützung für einen Raytracing-Befehlssatz, wie etwa Microsofts DirectX Ray Tracing (DXR), der einen DispatchRays-Befehl beinhaltet, sowie Ray-Generierung. Nearest-Hit-, Any-Hit- und Miss-Shader, die die Zuweisung einzigartiger Shader- und Textursätze für jedes Objekt ermöglichen. Eine andere Raytracing-Plattform, die von den Raytracing-Kernen 372, den Grafikkernen 370 und den Tensorkernen 371 unterstützt werden kann, ist Vulkan 1.1.85. Es ist jedoch zu beachten, dass die zugrunde liegenden Prinzipien der Erfindung nicht auf eine bestimmte Strahlverfolgungs-ISA beschränkt sind.
  • Im Allgemeinen können die verschiedenen Kerne 372 , 371 , 370 einen Strahlverfolgungs-Befehlssatz unterstützen, der Befehle/Funktionen für die Strahlerzeugung, den nächsten Treffer, jeden Treffer, den Strahl-Primitive-Schnitt, die pro-primitive und hierarchische Bounding-Box-Konstruktion, Fehltreffer, Besuch enthält, und Ausnahmen. Genauer gesagt beinhaltet eine Ausführungsform Raytracing-Anweisungen, um die folgenden Funktionen auszuführen:
  • Ray-Generation - Ray Generierungsanweisungen können für jedes Pixel, jede Probe oder jede andere benutzerdefinierte Arbeitszuweisung ausgeführt werden.
  • Nächster Treffer - Eine Nächster-Treffer-Anweisung kann ausgeführt werden, um den nächsten Schnittpunkt eines Strahls mit Grundelementen innerhalb einer Szene zu lokalisieren.
  • Any Hit - Ein Any-Hit-Befehl identifiziert mehrere Schnittpunkte zwischen einem Strahl und Primitiven innerhalb einer Szene, möglicherweise um einen neuen nächsten Schnittpunkt zu identifizieren.
  • Schnittpunkt - Ein Schnittpunktbefehl führt einen strahlenprimitiven Schnittpunkttest durch und gibt ein Ergebnis aus.
  • Pro-primitiv Begrenzung Kastenkonstruktion - Dieser Befehl baut einen Begrenzungskasten um ein gegebenes Grundelement oder eine Gruppe von Grundelementen auf (z. B. beim Erstellen eines neuen BVH oder einer anderen Beschleunigungsdatenstruktur).
  • Fräulein - Zeigt an Das ein Strahl verfehlt die gesamte Geometrie innerhalb einer Szene oder eines bestimmten Bereichs einer Szene.
  • Besuch - Gibt die Kindervolumina an, die ein Strahl durchquert.
  • Ausnahmen - Beinhaltet verschiedene Typen von Ausnahmebehandlungsroutinen (zB für verschiedene Fehlerbedingungen aufgerufen).
  • Techniken für die GPU-zu-Host-Prozessor-Verbindung
  • 4A veranschaulicht eine beispielhafte Architektur, in der eine Vielzahl von GPUs 410-413 kommunikativ mit einer Vielzahl von Mehrkernprozessoren 405-406 über Hochgeschwindigkeitsverbindungen 440A-440D (z. B. Busse, Punkt-zu-Punkt-Verbindungen usw.) gekoppelt sind.. In einer Ausführungsform unterstützen die Hochgeschwindigkeitsverbindungen 440A - 440D je nach Implementierung einen Kommunikationsdurchsatz von 4 GB/s, 30 GB/s, 80 GB/s oder höher. Es können verschiedene Verbindungsprotokolle verwendet werden, einschließlich, aber nicht beschränkt auf PCIe 4.0 oder 5.0 und NVLink 2.0. Die zugrundeliegenden Prinzipien der Erfindung sind jedoch nicht auf ein bestimmtes Kommunikationsprotokoll oder einen bestimmten Durchsatz beschränkt.
  • Darüber hinaus sind in einer Ausführungsform zwei oder mehr der GPUs 410 - 413 über Hochgeschwindigkeitsverbindungen 442A - 442B miteinander verbunden, die unter Verwendung derselben oder anderer Protokolle/Links als denen, die für Hochgeschwindigkeitsverbindungen 440A - 440D' verwendet werden, implementiert werden können . In ähnlicher Weise können zwei oder mehr der Mehrkernprozessoren 405 - 406 über eine Hochgeschwindigkeitsverbindung 443 verbunden sein, die symmetrische Mehrprozessor(SMP)-Busse sein können, die mit 20 GB/s, 30 GB/s, 120 GB/s oder höher arbeiten. Alternativ ist die gesamte Kommunikation zwischen den verschiedenen Systemkomponenten in 4A kann unter Verwendung der gleichen Protokolle/Verbindungen (zB über eine gemeinsame Verbindungsstruktur) erreicht werden. Wie erwähnt, sind die zugrundeliegenden Prinzipien der Erfindung jedoch nicht auf eine bestimmte Art von Verbindungstechnologie beschränkt.
  • In einer Ausführungsform ist jeder Mehrkernprozessor 405 - 406 über Speicherverbindungen 430A - 430B jeweils kommunikativ mit einem Prozessorspeicher 401 - 402 gekoppelt, und jede GPU 410 - 413 ist über GPU-Speicher kommunikativ mit dem GPU-Speicher 420 - 423 gekoppelt verbindet jeweils 450A-450D. Die Speicherverbindungen 430A-430B und 450A-450D können die gleichen oder unterschiedliche Speicherzugriffstechnologien verwenden. Als Beispiel und nicht einschränkend können die Prozessorspeicher 401 - 402 und die GPU-Speicher 420 - 423 flüchtige Speicher sein, wie etwa dynamische Direktzugriffsspeicher (DRAMs) (einschließlich gestapelter DRAMs), Grafik-DDR-SDRAM (GDDR) (z. B. GDDR5 , GDDR6) oder High Bandwidth Memory (HBM) und/oder können nichtflüchtige Speicher wie 3D XPoint oder Nano-Ram sein. In einer Ausführungsform kann ein Teil der Speicher ein flüchtiger Speicher sein und ein anderer Teil kann ein nichtflüchtiger Speicher sein (z. B. unter Verwendung einer Zwei-Ebenen-Speicher-(2LM-)Hierarchie).
  • Wie unten beschrieben, kann, obwohl die verschiedenen Prozessoren 405-406 und GPUs 410-413 physisch mit einem bestimmten Speicher 401-402 bzw. 420-423 gekoppelt sein können, eine einheitliche Speicherarchitektur implementiert werden, in der der gleiche virtuelle Systemadressraum (auch als „effektiver Adressraum“ bezeichnet) wird auf alle der verschiedenen physikalischen Speicher verteilt. Zum Beispiel können die Prozessorspeicher 401 - 402 jeweils 64 GB des Adressraums des Systemspeichers umfassen und die GPU-Speicher 420 - 423 können jeweils 32 GB des Adressraums des Systemspeichers umfassen (was in diesem Beispiel zu einer Gesamtzahl von 256 GB adressierbarem Speicher führt).
  • 4B veranschaulicht zusätzliche Details für eine Verbindung zwischen einem Mehrkernprozessor 407 und einem Grafikbeschleunigungsmodul 446 gemäß einer Ausführungsform. Das Grafikbeschleunigungsmodul 446 kann einen oder mehrere GPU-Chips beinhalten, die auf einer Linecard integriert sind, die über die Hochgeschwindigkeitsverbindung 440 mit dem Prozessor 407 gekoppelt ist. Alternativ kann das Grafikbeschleunigungsmodul 446 auf demselben Gehäuse oder Chip wie der Prozessor 407 integriert sein.
  • Der dargestellte Prozessor 407 umfasst mehrere Kerne 460A - 460D, jeder mit einem Übersetzungs-Lookaside-Puffer 461A - 461D und einem oder mehreren Caches 462A - 462D. Die Kerne können verschiedene andere Komponenten zum Ausführen von Befehlen und zum Verarbeiten von Daten umfassen, die nicht dargestellt sind, um ein Verschleiern der zugrunde liegenden Prinzipien der Erfindung zu vermeiden (z. B. Befehlsabrufeinheiten, Verzweigungsvorhersageeinheiten, Decodierer, Ausführungseinheiten, Neuordnungspuffer usw.). Die Caches 462A-462D können Caches der Ebene 1 (L1) und Ebene 2 (L2) umfassen. Außerdem können ein oder mehrere gemeinsam genutzte Caches 456 in der Cache-Hierarchie enthalten sein und von den Sätzen der Kerne 460A - 460D gemeinsam genutzt werden. Zum Beispiel umfasst eine Ausführungsform des Prozessors 407 24 Kerne, jeder mit seinem eigenen L1-Cache, zwölf gemeinsam genutzten L2-Caches und zwölf gemeinsam genutzten L3-Caches. In dieser Ausführungsform wird einer der L2- und L3-Caches von zwei benachbarten Kernen geteilt. Der Prozessor 407 und das Grafikbeschleuniger-Integrationsmodul 446 sind mit dem Systemspeicher 441 verbunden, der Prozessorspeicher 401 - 402 umfassen kann.
  • Die Kohärenz für Daten und Anweisungen, die in den verschiedenen Caches 462A-462D, 456 und dem Systemspeicher 441 gespeichert sind, wird über eine Inter-Kern-Kommunikation über einen Kohärenzbus 464 aufrechterhalten. Zum Beispiel kann jeder Cache eine Cache-Kohärenz-Logik/-Schaltung haben, die damit verbunden ist, um als Reaktion auf erkannte Lese- oder Schreibvorgänge in bestimmte Cache-Zeilen über den Kohärenzbus 464 zu kommunizieren. In einer Implementierung wird ein Cache-Snooping-Protokoll über den Kohärenzbus 464 implementiert, um Cache-Zugriffe abzuhören. Cache-Snooping/Kohärenz-Techniken werden von Fachleuten gut verstanden und werden hier nicht im Detail beschrieben, um ein Verschleiern der zugrunde liegenden Prinzipien der Erfindung zu vermeiden.
  • In einer Ausführungsform koppelt eine Proxy-Schaltung 425 das Grafikbeschleunigungsmodul 446 kommunikativ mit dem Kohärenzbus 464 , was es dem Grafikbeschleunigungsmodul 446 ermöglicht, als Peer der Kerne am Cache-Kohärenzprotokoll teilzunehmen. Insbesondere stellt eine Schnittstelle 435 Konnektivität zu 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 Beschleunigerintegrationsschaltung 436 Cacheverwaltungs-, Speicherzugriffs-, Kontextverwaltungs- und Unterbrechungsverwaltungsdienste im Namen einer Vielzahl von Grafikverarbeitungs-Engines 431, 432, N des Grafikbeschleunigungsmoduls 446 bereit. Die Grafikverarbeitungsmaschinen 431 , 432 , N können jeweils eine separate Grafikverarbeitungseinheit (GPU) umfassen. Alternativ können die Grafikverarbeitungsmaschinen 431 , 432, N unterschiedliche Typen von Grafikverarbeitungsmaschinen innerhalb einer GPU umfassen, wie beispielsweise Grafikausführungseinheiten, Medienverarbeitungsmaschinen (zB Videocodierer/-decodierer), Abtaster und Blitmaschinen. Mit anderen Worten, das Grafikbeschleunigungsmodul kann eine GPU mit einer Vielzahl von Grafikverarbeitungsmaschinen 431 - 432, N sein, oder die Grafikverarbeitungsmaschinen 431 - 432, N können einzelne GPUs sein, die auf einem gemeinsamen Gehäuse, einer Linecard oder einem gemeinsamen Chip integriert sind.
  • In einer Ausführungsform enthält die Beschleuniger-Integrationsschaltung 436 eine Speicherverwaltungseinheit (MMU) 439 zum Durchführen verschiedener Speicherverwaltungsfunktionen, wie etwa virtuelle-zu-physisch-Speicherübersetzungen (auch als effektive-zu-real-Speicherübersetzungen bezeichnet) und Speicherzugriffsprotokolle für den Zugriff auf den Systemspeicher 441. Die MMU 439 kann auch einen Übersetzungs-Lookaside-Puffer (TLB) (nicht gezeigt) zum Zwischenspeichern der virtuellen/effektiven in physikalische/reale Adressübersetzungen enthalten. 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 Daten, die im Cache 438 und den Grafikspeichern 433 - 434 gespeichert sind, M mit den Kern-Caches kohärent gehalten 462A-462D, 456 und Systemspeicher 411. Wie erwähnt, kann dies über die Proxy-Schaltung 425 erreicht werden, die an dem Cache-Kohärenzmechanismus im Namen des Caches 438 und der Speicher 433-434, M teilnimmt (z Caches 462A-462D, 456 und Empfangen von Aktualisierungen vom Cache 438.
    Ein Satz von Registern 445 speichert Kontextdaten für Threads, die von den Grafikverarbeitungsmaschinen 431 - 432 N ausgeführt werden, und eine Kontextverwaltungsschaltung 448 verwaltet die Thread-Kontexte. Zum Beispiel kann die Kontextverwaltungsschaltung 448 Sicherungs- und Wiederherstellungsoperationen ausführen, um Kontexte der verschiedenen Threads während Kontextwechseln (z. B. wenn ein erster Thread gespeichert und ein zweiter Thread gespeichert wird, so dass der zweite Thread ausgeführt werden kann) zu sichern und wiederherzustellen eine Grafikverarbeitungs-Engine). Beispielsweise kann die Kontextverwaltungsschaltung 448 bei einem Kontextwechsel aktuelle Registerwerte in einem bestimmten Bereich im Speicher speichern (z. B. durch einen Kontextzeiger identifiziert). Es kann dann die Registerwerte wiederherstellen, wenn es zum Kontext zurückkehrt. In einer Ausführungsform empfängt und verarbeitet eine Unterbrechungsverwaltungsschaltung 447 von Systemvorrichtungen empfangene Unterbrechungen.
  • In einer Implementierung werden virtuelle/effektive Adressen von einer Grafikverarbeitungsmaschine 431 von der MMU 439 in reale/physikalische Adressen im Systemspeicher 411 übersetzt. Eine Ausführungsform der Beschleunigerintegrationsschaltung 436 unterstützt mehrere (zB 4, 8, 16) Grafikbeschleunigermodule 446 und/oder andere Beschleunigervorrichtungen. Das Grafikbeschleunigermodul 446 kann einer einzelnen Anwendung gewidmet sein, die auf dem Prozessor 407 ausgeführt wird, oder kann von mehreren Anwendungen gemeinsam genutzt werden. In einer Ausführungsform wird eine virtualisierte Grafikausführungsumgebung präsentiert, in der die Ressourcen der Grafikverarbeitungsmaschinen 431 - 432, N mit mehreren Anwendungen oder virtuellen Maschinen (VMs) geteilt werden. Die Ressourcen können in „Slices“ unterteilt werden, die auf der Grundlage der Verarbeitungsanforderungen und Prioritäten, die den VMs und/oder Anwendungen zugeordnet sind, unterschiedlichen VMs und/oder Anwendungen zugewiesen werden.
  • Somit fungiert die Beschleunigerintegrationsschaltung als Brücke zum System für das Grafikbeschleunigungsmodul 446 und stellt Adressenübersetzungs- und Systemspeicher-Cache-Dienste bereit. Außerdem kann die Beschleunigerintegrationsschaltung 436 Virtualisierungseinrichtungen für den Hostprozessor bereitstellen, um die Virtualisierung der Grafikverarbeitungsmaschinen, Interrupts und die Speicherverwaltung zu verwalten.
  • Da Hardwareressourcen der Grafikverarbeitungsmaschinen 431 - 432, N explizit auf den vom Hostprozessor 407 gesehenen realen Adressraum abgebildet werden, kann jeder Hostprozessor diese Ressourcen direkt unter Verwendung eines effektiven Adresswerts adressieren. Eine Funktion der Beschleunigerintegrationsschaltung 436 ist in einer Ausführungsform die physische Trennung der Grafikverarbeitungsmaschinen 431 - 432, N, so dass sie dem System als unabhängige Einheiten erscheinen.
  • Wie erwähnt, sind in der dargestellten Ausführungsform ein oder mehrere Grafikspeicher 433 - 434, M mit jeder der Grafikverarbeitungsmaschinen 431 - 432 bzw. N verbunden. Die Grafikspeicher 433-434, M speichern Anweisungen und Daten, die von jeder der Grafikverarbeitungsmaschinen 431-432, N verarbeitet werden. Die Grafikspeicher 433-434, M können flüchtige Speicher sein, wie DRAMs (einschließlich gestapelter DRAMs), GDDR-Speicher (zB GDDR5, GDDR6) oder HBM, und/oder können nichtflüchtige Speicher wie 3D XPoint oder Nano-Ram sein.
  • Um den Datenverkehr über die Hochgeschwindigkeitsverbindung 440 zu reduzieren, werden in einer Ausführungsform Vorspannungstechniken verwendet, um sicherzustellen, dass die in den Grafikspeichern 433 - 434 gespeicherten Daten M Daten sind, die am häufigsten von den Grafikverarbeitungsmaschinen 431 - 432 verwendet werden , N und wird von den Kernen 460A-460D vorzugsweise nicht verwendet (zumindest nicht häufig). In ähnlicher Weise versucht der Vorspannungsmechanismus, von den Kernen (und vorzugsweise nicht von den Grafikverarbeitungsmaschinen 431-432, N) benötigte Daten in den Caches 462A-462D, 456 der Kerne und des Systemspeichers 411 zu halten.
  • 4C veranschaulicht eine andere Ausführungsform, bei der die Beschleunigerintegrationsschaltung 436 in den Prozessor 407 integriert ist. In dieser Ausführungsform kommunizieren die Grafikverarbeitungsmaschinen 431 - 432, N direkt über die Hochgeschwindigkeitsverbindung 440 mit der Beschleunigerintegrationsschaltung 436 über die Schnittstelle 437 und die Schnittstelle 435 (die wiederum jede Form von Bus oder Schnittstellenprotokoll verwenden können).. Die Beschleuniger-Integrationsschaltung 436 kann die gleichen Operationen wie diejenigen ausführen, die in Bezug auf beschrieben wurden 4B, jedoch möglicherweise bei einem höheren Durchsatz aufgrund seiner unmittelbaren Nähe zum Kohärenzbus 464 und den Caches 462A-462D, 456.
  • Eine Ausführungsform unterstützt verschiedene Programmiermodelle, einschließlich eines Programmiermodells für dedizierte Prozesse (keine Virtualisierung des Grafikbeschleunigungsmoduls) und gemeinsam genutzte Programmiermodelle (mit Virtualisierung). Letztere können Programmiermodelle beinhalten, die von der Beschleunigerintegrationsschaltung 436 gesteuert werden, und Programmiermodelle, die von dem Grafikbeschleunigungsmodul 446 gesteuert werden.
  • In einer Ausführungsform des dedizierten Prozessmodells sind die Grafikverarbeitungsmaschinen 431 - 432, N einer einzelnen Anwendung oder einem Prozess unter einem einzigen Betriebssystem gewidmet. Die einzelne Anwendung kann andere Anwendungsanforderungen an die Grafikmaschinen 431 - 432 N weiterleiten, wodurch eine Virtualisierung innerhalb einer VM/Partition bereitgestellt wird.
  • In den Programmiermodellen für dedizierte Prozesse können die Grafikverarbeitungsmaschinen 431 - 432 N von mehreren VM-/Anwendungspartitionen gemeinsam genutzt werden. Die gemeinsam genutzten Modelle erfordern einen Systemhypervisor, um die Grafikverarbeitungsmaschinen 431 - 432, N zu virtualisieren, um den Zugriff durch jedes Betriebssystem zu ermöglichen. Bei Einzelpartitionssystemen 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 Zugriff auf jeden Prozess oder jede Anwendung bereitzustellen.
  • Für das gemeinsam genutzte Programmiermodell wählt das Grafikbeschleunigungsmodul 446 oder eine einzelne Grafikverarbeitungsmaschine 431 - 432 N ein Prozesselement unter Verwendung eines Prozesshandles aus. In einer Ausführungsform werden Prozesselemente im Systemspeicher 411 gespeichert und sind unter Verwendung der hierin beschriebenen effektiven Adressen-zu-Real-Adressen-Übersetzungstechniken adressierbar. Die Prozesskennung kann ein implementierungsspezifischer Wert sein, der dem Hostprozess bereitgestellt wird, wenn sein Kontext bei der Grafikverarbeitungsmaschine 431 - 432 N registriert wird (das heißt, die Systemsoftware wird aufgerufen, um das Prozesselement zu der verknüpften Liste der Prozesselemente hinzuzufügen). Die unteren 16 Bits der Prozesskennung können der Offset des Prozesselements innerhalb der Prozesselement-Linked-List sein.
  • 4D veranschaulicht einen beispielhaften Beschleunigerintegrations-Slice 490. Wie hierin verwendet, umfasst ein „Slice“ einen spezifizierten Teil der Verarbeitungsressourcen der Beschleunigerintegrationsschaltung 436. Der effektive Adressraum 482 der Anwendung innerhalb des Systemspeichers 411 speichert Prozesselemente 483. In einer Ausführungsform werden die Prozesselemente 483 als Reaktion auf GPU-Aufrufe 481 von Anwendungen 480 gespeichert, die auf dem Prozessor 407 ausgeführt werden. Ein Prozesselement 483 enthält den Prozesszustand für die entsprechende Anwendung 480. Ein im Prozesselement 483 enthaltener Arbeitsdeskriptor (WD) 484 kann ein einzelner Job sein, der von einer Anwendung angefordert wird, oder kann einen Zeiger auf eine Warteschlange von Jobs enthalten. Im letzteren Fall ist der WD 484 ein Zeiger auf die Auftragsanforderungswarteschlange im Adressraum 482 der Anwendung.
  • Das Grafikbeschleunigungsmodul 446 und/oder die einzelnen Grafikverarbeitungsmaschinen 431 - 432, N können von allen oder einer Teilmenge der Prozesse im System gemeinsam genutzt werden. Ausführungsformen der Erfindung umfassen eine Infrastruktur zum Einrichten des Prozesszustands und Senden einer WD 484 an ein Grafikbeschleunigungsmodul 446 , um einen Job in einer virtualisierten Umgebung zu starten.
  • In einer Implementierung ist das Programmiermodell für dedizierte Prozesse implementierungsspezifisch. In diesem Modell besitzt ein einzelner Prozess das Grafikbeschleunigungsmodul 446 oder eine einzelne Grafikverarbeitungs-Engine 431. Da das Grafikbeschleunigungsmodul 446 einem einzelnen Prozess gehört, initialisiert der Hypervisor die Beschleunigerintegrationsschaltung 436 für die besitzende Partition und das Betriebssystem initialisiert die Beschleunigerintegrationsschaltung 436 für den Besitzprozess zu dem Zeitpunkt, wenn das Grafikbeschleunigungsmodul 446 zugewiesen wird .
  • Im Betrieb ruft eine WD-Abrufeinheit 491 im Beschleunigerintegrations-Slice 490 die nächste WD 484 ab, die eine Angabe der von einer der Grafikverarbeitungsmaschinen des Grafikbeschleunigungsmoduls 446 zu erledigenden Arbeit beinhaltet. Daten von der WD 484 können in den Registern 445 gespeichert und von der MMU 439, der Interrupt-Verwaltungsschaltung 447 und/oder der Kontext-Verwaltungsschaltung 448 wie dargestellt verwendet werden. Zum Beispiel beinhaltet eine Ausführungsform der MMU 439 eine Segment-/Page-Walk-Schaltung zum Zugreifen auf Segment-/Page-Tabellen 486 innerhalb des virtuellen Adressraums 485 des Betriebssystems. Die Interrupt-Verwaltungsschaltung 447 kann Interrupt-Ereignisse 492 verarbeiten, die von dem Grafikbeschleunigungsmodul 446 empfangen werden. Beim Durchführen von Grafikoperationen wird eine effektive Adresse 493, die von einer Grafikverarbeitungsmaschine 431-432 erzeugt wird, N von der MMU 439 in eine reale Adresse übersetzt.
  • In einer Ausführungsform wird derselbe Satz von Registern 445 für jede Grafikverarbeitungsmaschine 431 - 432, N und/oder Grafikbeschleunigungsmodul 446 dupliziert und kann durch den Hypervisor oder das Betriebssystem initialisiert werden. Jedes dieser duplizierten Register kann in einem Beschleunigerintegrations-Slice 490 enthalten sein. Beispielhafte Register, die vom Hypervisor initialisiert werden können, sind in dargestellt Tabelle 1. Tabelle 1 - Hypervisor initialisierte Register
    1 Slice-Kontrollregister
    2 Real Address (RA) Geplanter Prozessbereichszeiger
    3 Autoritätsmasken-Überschreibungsregister
    4 Vektortabelleneintrags-Offset unterbrechen
    5 Eingabelimit für Interrupt-Vektortabellen
    6 Staatliches Register
    7 Logische Partitions-ID
    8 Reale Adresse (RA) Hypervisor Accelerator Utilization Record Pointer
    9 Speicher Beschreibung Register
  • Beispielhafte Register, die vom Betriebssystem initialisiert werden können, sind in dargestellt Tabelle 2. Tabelle 2 - Vom Betriebssystem initialisierte Register
    1 Prozess- und Gewindeidentifikation
    2 Effektive Adresse (EA) Kontext Speichern/Wiederherstellen Zeiger
    3 Beschleuniger-Auslastungsdatensatzzeiger für virtuelle Adresse (VA)
    4 Tabellenzeiger für Speichersegmente der virtuellen Adresse (VA)
    5 Autoritätsmaske
    6 Arbeitsbeschreibung
  • In einer Ausführungsform ist jede WD 484 spezifisch für ein bestimmtes Grafikbeschleunigungsmodul 446 und/oder eine Grafikverarbeitungsmaschine 431 - 432 N. Sie enthält alle Informationen, die eine Grafikverarbeitungsmaschine 431 - 432 N benötigt, um ihre Arbeit zu erledigen oder kann ein Zeiger auf eine Speicherstelle sein, an der die Anwendung eine Befehlswarteschlange mit zu vervollständigenden Arbeiten eingerichtet hat.
  • 4E veranschaulicht zusätzliche Details für eine Ausführungsform eines gemeinsam genutzten Modells. Diese Ausführungsform enthält einen realen Adreßraum 498 des Hypervisors, in dem eine Prozeßelementliste 499 gespeichert ist. Auf den realen Adressraum 498 des Hypervisors kann über einen Hypervisor 496 zugegriffen werden, der die Grafikbeschleunigungsmodul-Engines für das Betriebssystem 495 virtualisiert.
  • Die gemeinsam genutzten Programmiermodelle ermöglichen es allen oder einer Teilmenge von Prozessen aus allen oder einer Teilmenge von Partitionen im System, ein Grafikbeschleunigungsmodul 446 zu verwenden. Es gibt zwei Programmiermodelle, bei denen das Grafikbeschleunigungsmodul 446 von mehreren Prozessen und Partitionen gemeinsam genutzt wird: Time-sliced Shared und Graphics Directed Shared.
  • In diesem Modell besitzt der Systemhypervisor 496 das Grafikbeschleunigungsmodul 446 und stellt seine Funktion allen Betriebssystemen 495 zur Verfügung. Damit ein Grafikbeschleunigungsmodul 446 die Virtualisierung durch den Systemhypervisor 496 unterstützt, kann das Grafikbeschleunigungsmodul 446 die folgenden Anforderungen erfüllen: 1) Die Auftragsanforderung einer Anwendung muss autonom sein (d. h. der Zustand muss zwischen Aufträgen nicht aufrechterhalten werden) oder das Grafikbeschleunigungsmodul 446 muss einen Kontextsicherungs- und Wiederherstellungsmechanismus bereitstellen. 2) Eine Auftragsanforderung einer Anwendung wird durch das Grafikbeschleunigungsmodul 446 garantiert, dass sie in einer bestimmten Zeit abgeschlossen wird, einschließlich etwaiger Übersetzungsfehler, oder das Grafikbeschleunigungsmodul 446 bietet die Möglichkeit, der Verarbeitung des Auftrags zuvorzukommen. 3) Dem Grafikbeschleunigungsmodul 446 muss eine Fairness zwischen den Prozessen garantiert werden, wenn es in dem gerichteten gemeinsamen Programmiermodell arbeitet.
  • In einer Ausführungsform muss die Anwendung 480 für das gemeinsam genutzte Modell einen Systemaufruf des Betriebssystems 495 mit einem Typ eines Grafikbeschleunigungsmoduls 446, einem Arbeitsdeskriptor (WD), einem Autoritätsmaskenregisterwert (AMR) und einer Kontextsicherung durchführen /restore Bereichszeiger (CSRP). Der Typ des Grafikbeschleunigungsmoduls 446 beschreibt die angestrebte Beschleunigungsfunktion für den Systemaufruf. Der Typ des Grafikbeschleunigungsmoduls 446 kann ein systemspezifischer Wert sein. Die WD ist speziell für das Grafikbeschleunigungsmodul 446 formatiert und kann in Form eines Befehls des Grafikbeschleunigungsmoduls 446, eines effektiven Adresszeigers auf eine benutzerdefinierte Struktur, eines effektiven Adresszeigers auf eine Befehlswarteschlange oder anderer Daten vorliegen Struktur, um die vom Grafikbeschleunigungsmodul 446 zu erledigende 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 übergebene Wert ähnelt einer Anwendung, die den AMR festlegt. Wenn die Implementierungen der Beschleunigerintegrationsschaltung 436 und des Grafikbeschleunigungsmoduls 446 kein User Authority Mask Override Register (UAMOR) unterstützen, kann das Betriebssystem den aktuellen UAMOR-Wert auf den AMR-Wert anwenden, bevor der AMR im Hypervisor-Aufruf übergeben wird. Der Hypervisor 496 kann optional den aktuellen Wert des Authority Mask Override Registers (AMOR) anwenden, bevor der AMR in das Prozesselement 483 platziert wird. In einer Ausführungsform ist das CSRP eines der Register 445, das die effektive Adresse eines Bereichs im Adressraum 482 der Anwendung enthält, damit das Grafikbeschleunigungsmodul 446 den Kontextzustand speichert und wiederherstellt. Dieser Zeiger ist optional, wenn kein Status zwischen Jobs gespeichert werden muss oder wenn ein Job vorzeitig beendet wird. Der Kontextsicherungs-/Wiederherstellungsbereich kann ein gepinnter Systemspeicher sein.
  • Beim Empfang des Systemaufrufs kann das Betriebssystem 495 verifizieren, dass die Anwendung 480 registriert wurde und die Berechtigung erhalten hat, das Grafikbeschleunigungsmodul 446 zu verwenden. Das Betriebssystem 495 ruft dann den Hypervisor 496 mit den in gezeigten Informationen auf Tabelle 3. Tabelle 3 - Aufrufparameter vom Betriebssystem zu Hypervisor
    1 Eine Arbeitsbeschreibung (WD)
    2 Ein Wert des Autoritätsmaskenregisters (AMR) (potenziell maskiert).
    3 Eine effektive Adresse (EA) Context Save/Restore Area Pointer (CSRP)
    4 Eine Prozess-ID (PID) und eine optionale Thread-ID (TID)
    5 Ein Beschleunigernutzungsdatensatzzeiger (AURP) für virtuelle Adressen (VA)
    6 Die virtuelle Adresse des Speichersegmenttabellenzeigers (SSTP)
    7 Eine logische Interrupt-Service-Nummer (LISN)
  • Beim Empfang des Hypervisor-Aufrufs verifiziert der Hypervisor 496, dass das Betriebssystem 495 registriert wurde und die Berechtigung erhalten hat, das Grafikbeschleunigungsmodul 446 zu verwenden. Der Hypervisor 496 setzt dann das Prozesselement 483 in die Prozesselement-Linked-List für den entsprechenden Typ des Grafikbeschleunigungsmoduls 446 . Das Prozesselement kann die Informationen enthalten, die in include Tabelle 4. Tabelle 4 - Informationen zu Prozesselementen
    1 Eine Arbeitsbeschreibung (WD)
    2 Ein Wert des Autoritätsmaskenregisters (AMR) (potenziell maskiert).
    3 Eine effektive Adresse (EA) Context Save/Restore Area Pointer (CSRP)
    4 Eine Prozess-ID (PID) und eine optionale Thread-ID (TID)
    5 Ein Beschleunigernutzungsdatensatzzeiger (AURP) für virtuelle Adressen (VA)
    6 Die virtuelle Adresse des Speichersegmenttabellenzeigers (SSTP)
    7 Eine logische Interrupt-Service-Nummer (LISN)
    8 Interrupt-Vektortabelle, abgeleitet von den Hypervisor-Aufrufparametern.
    9 Ein Zustandsregister (SR)-Wert
    10 Eine logische Partitions-ID (LPID)
    11 Ein Real Address (RA) Hypervisor Accelerator-Nutzungsdatensatzzeiger
    12 Das Speicherdeskriptorregister (SDR)
  • In einer Ausführungsform initialisiert der Hypervisor eine Vielzahl von Beschleunigerintegrations-Slice 490-Registern 445.
  • Wie abgebildet in 4F verwendet eine Ausführungsform der Erfindung einen vereinheitlichten Speicher, der über einen gemeinsamen virtuellen Speicheradressraum adressierbar ist, der verwendet wird, um auf die physischen Prozessorspeicher 401 - 402 und die GPU-Speicher 420 - 423 zuzugreifen. In dieser Implementierung verwenden Operationen, die auf den GPUs 410 - 413 ausgeführt werden, denselben virtuellen/effektiven Speicheradressraum, um auf die Prozessorspeicher 401 - 402 zuzugreifen und umgekehrt, wodurch die Programmierbarkeit vereinfacht wird. In einer Ausführungsform wird ein erster Teil des virtuellen/effektiven Adressraums dem Prozessorspeicher 401 zugewiesen, ein zweiter Teil dem zweiten Prozessorspeicher 402, ein dritter Teil dem GPU-Speicher 420 und so weiter. Der gesamte virtuelle/effektive Speicherraum (manchmal als effektiver Adressraum bezeichnet) wird dadurch auf jeden der Prozessorspeicher 401 - 402 und GPU-Speicher 420 - 423 verteilt, sodass jeder Prozessor oder jede GPU auf jeden physischen Speicher mit einer virtuellen Adresse zugreifen kann diesem Speicher zugeordnet.
  • In einer Ausführungsform stellt die Bias-/Kohärenz-Verwaltungsschaltung 494A - 494E in einer oder mehreren der MMUs 439A - 439E die Cache-Kohärenz zwischen den Caches der Host-Prozessoren (z. B. 405) und den GPUs 410 - 413 sicher und implementiert Biasing-Techniken, die die physikalischen Speicher, in denen bestimmte Arten von Daten gespeichert werden sollen. Während mehrere Instanzen der Vorspannungs-/Kohärenz-Verwaltungsschaltung 494A-494E in 4F, kann die Bias-/Kohärenz-Schaltung innerhalb der MMU eines oder mehrerer Host-Prozessoren 405 und/oder innerhalb der Beschleuniger-Integrationsschaltung 436 implementiert sein.
  • Eine Ausführungsform ermöglicht, dass der an die GPU angeschlossene Speicher 420 - 423 als Teil des Systemspeichers abgebildet wird und unter Verwendung der Shared Virtual Memory (SVM)-Technologie darauf zugegriffen wird, ohne jedoch die typischen Leistungsnachteile zu erleiden, die mit der vollständigen System-Cache-Kohärenz verbunden sind. Die Fähigkeit, auf den an die GPU angeschlossenen Speicher 420 - 423 als Systemspeicher ohne lästigen Cache-Kohärenz-Overhead zuzugreifen, stellt eine vorteilhafte Betriebsumgebung für die GPU-Auslagerung bereit. Diese Anordnung ermöglicht es der Software des Host-Prozessors 405, Operanden einzurichten und auf Berechnungsergebnisse zuzugreifen, ohne den Overhead herkömmlicher E/A-DMA-Datenkopien. Solche traditionellen Kopien beinhalten Treiberaufrufe, Interrupts und speicherabgebildete I/O-(MMIO)-Zugriffe, die alle im Vergleich zu einfachen Speicherzugriffen ineffizient sind. Gleichzeitig kann die Fähigkeit, ohne Cache-Kohärenz-Overheads auf den an die GPU angeschlossenen Speicher 420 - 423 zuzugreifen, für die Ausführungszeit einer ausgelagerten Berechnung kritisch sein. In Fällen mit erheblichem Streaming-Schreibspeicherverkehr zum Beispiel kann der Cache-Kohärenz-Overhead die effektive Schreibbandbreite, die von einer GPU 410-413 gesehen wird, erheblich reduzieren. Die Effizienz der Operandeneinrichtung, die Effizienz des Ergebniszugriffs und die Effizienz der GPU-Berechnung spielen alle eine Rolle bei der Bestimmung der Effektivität des GPU-Offloads.
  • In einer Implementierung wird die Auswahl zwischen GPU-Bias und Host-Prozessor-Bias durch eine Bias-Tracker-Datenstruktur gesteuert. Es kann zum Beispiel eine Bias-Tabelle verwendet werden, die eine seitengranulare Struktur sein kann (dh gesteuert durch die Granularität einer Speicherseite), die 1 oder 2 Bits pro GPU-angeschlossener Speicherseite umfasst. Die Bias-Tabelle kann in einem gestohlenen Speicherbereich von einem oder mehreren GPU-angeschlossenen Speichern 420-423 mit oder ohne Bias-Cache in der GPU 410-413 implementiert werden (z. B. um häufig/zuletzt verwendete Einträge der Bias-Tabelle zwischenzuspeichern). Alternativ kann die gesamte Bias-Tabelle innerhalb der GPU verwaltet werden.
  • In einer Implementierung wird auf den Bias-Tabelleneintrag, der jedem Zugriff auf den an die GPU angeschlossenen Speicher 420 - 423 zugeordnet ist, vor dem tatsächlichen Zugriff auf den GPU-Speicher zugegriffen, was die folgenden Operationen verursacht. Zuerst werden lokale Anfragen von der GPU 410-413, die ihre Seite im GPU-Bias finden, direkt an einen entsprechenden GPU-Speicher 420-423 weitergeleitet. Lokale Anforderungen von der GPU, die ihre Seite in Host-Bias finden, werden an den Prozessor 405 weitergeleitet (z. B. über eine Hochgeschwindigkeitsverbindung, wie oben erörtert). In einer Ausführungsform vervollständigen Anforderungen von dem Prozessor 405 , die die angeforderte Seite im Host-Prozessor-Bias finden, die Anforderung wie ein normaler Speicherlesevorgang. Alternativ können Anfragen, die an eine GPU-voreingenommene Seite gerichtet sind, an die GPU 410-413 weitergeleitet werden. Die GPU kann dann die Seite auf einen Host-Prozessor-Bias umstellen, wenn sie die Seite derzeit nicht verwendet.
  • Der Bias-Zustand einer Seite kann entweder durch einen softwarebasierten Mechanismus, einen hardwareunterstützten softwarebasierten Mechanismus oder für eine begrenzte Anzahl von Fällen durch einen rein hardwarebasierten Mechanismus geändert werden.
  • Ein Mechanismus zum Ändern des Bias-Zustands verwendet einen API-Aufruf (z. B. OpenCL), der wiederum den Gerätetreiber der GPU aufruft, der wiederum eine Nachricht (oder einen Befehlsdeskriptor) an die GPU sendet und diese anweist, den Bias zu ändern Zustand und fuhren Sie bei einigen Übergängen eine Cache-Flush-Operation im Host durch. Die Cache-Flush-Operation ist für einen Übergang von der Vorspannung des Host-Prozessors 405 zur GPU-Vorspannung erforderlich, ist jedoch für den entgegengesetzten Übergang nicht erforderlich.
  • In einer Ausführungsform wird die Cache-Kohärenz aufrechterhalten, indem GPU-voreingenommene Seiten durch den Host-Prozessor 405 vorübergehend nicht zwischenspeicherbar gemacht werden. Um auf diese Seiten zuzugreifen, kann der Prozessor 405 Zugriff von der GPU 410 anfordern, die je nach Implementierung den Zugriff sofort gewähren kann oder nicht. Um die Kommunikation zwischen dem Host-Prozessor 405 und der GPU 410 zu reduzieren, ist es daher von Vorteil, sicherzustellen, dass GPU-voreingenommene Seiten diejenigen sind, die von der GPU benötigt werden, aber nicht von dem Host-Prozessor 405 und umgekehrt.
  • Grafikverarbeitungs-Pipeline
  • 5 veranschaulicht eine Grafikverarbeitungspipeline 500 gemäß einer Ausführungsform. In einer Ausführungsform kann ein Grafikprozessor die veranschaulichte Grafikverarbeitungspipeline 500 implementieren. Der Grafikprozessor kann in den hier beschriebenen Parallelverarbeitungs-Subsystemen enthalten sein, wie beispielsweise der Parallelprozessor 200 von 1 . 2A, die in einer Ausführungsform eine Variante des Parallelprozessors bzw. der Parallelprozessoren 112 von 1 ist. 1. Die verschiedenen Parallelverarbeitungssysteme können die Grafikverarbeitungspipeline 500 über eine oder mehrere Instanzen der Parallelverarbeitungseinheit (z. 2A) wie hierin beschrieben. Zum Beispiel kann eine Shader-Einheit (z. B. Grafik-Multiprozessor 234 von 2C) kann dazu konfiguriert sein, die Funktionen einer oder mehrerer von einer Scheitelpunktverarbeitungseinheit 504, einer Tessellationssteuerverarbeitungseinheit 508, einer Tessellationsbewertungsverarbeitungseinheit 512, einer Geometrieverarbeitungseinheit 516 und einer Fragment-/Pixelverarbeitungseinheit 524 auszuführen. Die Funktionen des Datenassemblers 502, der primitiven Assembler 506, 514, 518, der Tessellationseinheit 510, des Rasterizers 522 und der Rasteroperationseinheit 526 können auch von anderen Verarbeitungsmaschinen innerhalb eines Verarbeitungsclusters (z. 2A) und eine entsprechende Unterteilungseinheit (z. B. Unterteilungseinheit 220A - 220N von 2a). Die Grafikverarbeitungspipeline 500 kann auch unter Verwendung von dedizierten Verarbeitungseinheiten für eine oder mehrere Funktionen implementiert werden. In einer Ausführungsform können ein oder mehrere Teile der Grafikverarbeitungspipeline 500 durch eine Parallelverarbeitungslogik innerhalb eines Allzweckprozessors (z. B. einer CPU) ausgeführt werden. In einer Ausführungsform können ein oder mehrere Teile der Grafikverarbeitungspipeline 500 auf einen chipinternen Speicher (z. B. den Parallelprozessorspeicher 222 wie in 2) zugreifen. 2A) über eine Speicherschnittstelle 528 , die eine Instanz der Speicherschnittstelle 218 von 2 sein kann. 2A.
  • In einer Ausführungsform ist der Datenassembler 502 eine Verarbeitungseinheit, die Scheitelpunktdaten für Oberflächen und Grundelemente sammelt. Der Datenassembler 502 gibt dann die Eckpunktdaten, einschließlich der Eckpunktattribute, an die Eckpunktverarbeitungseinheit 504 aus. Die Vertex-Verarbeitungseinheit 504 ist eine programmierbare Ausführungseinheit, die Vertex-Shader-Programme ausführt, Vertex-Daten beleuchtet und transformiert, wie durch die Vertex-Shader-Programme spezifiziert. Die Scheitelpunktverarbeitungseinheit 504 liest Daten, die im Cache, lokalen oder Systemspeicher gespeichert sind, zur Verwendung bei der Verarbeitung der Scheitelpunktdaten und kann programmiert sein, um die Scheitelpunktdaten von einer objektbasierten Koordinatendarstellung in einen Weltraum-Koordinatenraum oder eine normalisierte Vorrichtung zu transformieren Raum koordinieren.
  • Eine erste Instanz eines primitiven Assemblers 506 empfängt Eckpunktattribute von der Eckpunktverarbeitungseinheit 504. Der Grundelement-Assembler 506 liest gespeicherte Scheitelpunktattribute nach Bedarf und konstruiert grafische Grundelemente zur Verarbeitung durch die Tessellationssteuerungs-Verarbeitungseinheit 508. Die Grafikprimitive umfassen Dreiecke, Liniensegmente, Punkte, Patches und so weiter, wie von verschiedenen Grafikverarbeitungs-Anwendungsprogrammierschnittstellen (APIs) unterstützt.
  • Die Tessellationssteuerungs-Verarbeitungseinheit 508 behandelt die Eingabescheitelpunkte als Kontrollpunkte für ein geometrisches Patch. Die Kontrollpunkte werden von einer Eingabedarstellung von dem Patch (z. B. den Basen des Patches) in eine Darstellung transformiert, die zur Verwendung bei der Oberflächenbewertung durch die Tessellationsbewertungs-Verarbeitungseinheit 512 geeignet ist. Die Tessellationssteuerungs-Verarbeitungseinheit 508 kann auch Tessellationsfaktoren für Kanten von geometrischen Patches berechnen. Ein Tessellationsfaktor gilt für eine einzelne Kante und quantifiziert einen ansichtsabhängigen Detaillierungsgrad, der der Kante zugeordnet ist. Eine Tessellationseinheit 510 ist dazu konfiguriert, die Tessellationsfaktoren für Kanten eines Patches zu empfangen und den Patch in mehrere geometrische Grundelemente wie etwa Linien-, Dreieck- oder Viereckgrundelemente zu tessellieren, die an eine Tessellationsbewertungsverarbeitungseinheit 512 übertragen werden. Die Tessellationsbewertungs-Verarbeitungseinheit 512 arbeitet mit parametrisierten Koordinaten des unterteilten Patches, um eine Oberflächendarstellung und Scheitelpunktattribute für jeden Scheitelpunkt zu erzeugen, der den geometrischen Grundelementen zugeordnet ist.
  • Eine zweite Instanz eines Grundelement-Assemblers 514 empfängt Scheitelpunktattribute von der Tessellationsbewertungs-Verarbeitungseinheit 512, liest gespeicherte Scheitelpunktattribute nach Bedarf und konstruiert grafische Grundelemente zur Verarbeitung durch die Geometrieverarbeitungseinheit 516. Die Geometrieverarbeitungseinheit 516 ist eine programmierbare Ausführungseinheit, die Geometrie-Shader-Programme ausführt, um vom primitiven Assembler 514 empfangene Grafikprimitive wie durch die Geometrie-Shader-Programme spezifiziert zu transformieren. In einer Ausführungsform ist die Geometrieverarbeitungseinheit 516 dazu programmiert, die Grafikprimitiven in ein oder mehrere neue Grafikprimitive zu unterteilen und Parameter zu berechnen, die zum Rastern der neuen Grafikprimitiven verwendet werden.
  • In einigen Ausführungsformen kann die Geometrieverarbeitungseinheit 516 Elemente im Geometriestrom hinzufügen oder löschen. Die Geometrieverarbeitungseinheit 516 gibt die Parameter und Eckpunkte, die neue Grafikprimitive spezifizieren, an den primitiven Assembler 518 aus. Der Grundelement-Assembler 518 empfängt die Parameter und Scheitelpunkte von der Geometrieverarbeitungseinheit 516 und konstruiert grafische Grundelemente zur Verarbeitung durch eine Ansichtsfenster-Skalierungs-, Auslese- und Ausschneideeinheit 520. Die Geometrieverarbeitungseinheit 516 liest Daten, die im Parallelprozessorspeicher oder Systemspeicher zur Verwendung bei der Verarbeitung der Geometriedaten gespeichert sind. Die Darstellungsfeld-Skalierungs-, Cull- und Clip-Einheit 520 führt Clipping, Culling und Darstellungsfenster-Skalierung durch und gibt verarbeitete Grafikgrundelemente an einen Rasterisierer 522 aus.
  • Der Rasterisierer 522 kann Tiefen-Culling und andere tiefenbasierte Optimierungen durchführen. Der Rasterisierer 522 führt auch eine Scankonvertierung an den neuen Grafikprimitiven durch, um Fragmente zu erzeugen und diese Fragmente und die zugehörigen 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 vom Rasterisierer 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 Texturabbildung, Schattierung, Mischung, Texturkorrektur und Perspektivenkorrektur beinhalten, aber nicht darauf beschränkt sind, um schattierte Fragmente oder Pixel zu erzeugen, die an eine Rasteroperationseinheit 526 ausgegeben werden. Die Fragment-/Pixel-Verarbeitungseinheit 524 kann Daten lesen, die entweder im Parallelprozessorspeicher oder im Systemspeicher zur Verwendung beim Verarbeiten der Fragmentdaten gespeichert sind. Fragment- oder Pixel-Shader-Programme können so konfiguriert sein, dass sie in Abhängigkeit von der für die Verarbeitungseinheiten konfigurierten Abtastrate bei Abtastung, Pixel, Kachel oder anderen Granularitäten schattieren.
  • Die Rasteroperationseinheit 526 ist eine Verarbeitungseinheit, die Rasteroperationen durchführt, einschließlich, aber nicht beschränkt auf Schablone, Z-Test, Blending und dergleichen, und Pixeldaten als verarbeitete Grafikdaten ausgibt, die im Grafikspeicher (z. B. Parallelprozessor) gespeichert werden sollen Speicher 222 wie in 2A und/oder Systemspeicher 104 wie in 1), zur Anzeige auf der einen oder mehreren Anzeigevorrichtungen 110 oder zur weiteren Verarbeitung durch einen der einen oder mehreren Prozessor(en) 102 oder Parallelprozessor(en) 112. In einigen Ausführungsformen ist die Rasteroperationseinheit 526 konfiguriert, um z- oder Farbdaten, die in den Speicher geschrieben werden, zu komprimieren und z- oder Farbdaten zu dekomprimieren, die aus dem Speicher gelesen werden.
  • Übersicht über maschinelles Lernen
  • Die oben beschriebene Architektur kann angewendet werden, um Trainings- und Inferenzoperationen unter Verwendung von Modellen für maschinelles Lernen durchzuführen. Maschinelles Lernen ist bei der Lösung vieler Arten von Aufgaben erfolgreich. Die Berechnungen, die beim Trainieren und Verwenden von Algorithmen des maschinellen Lernens (zB neuronale Netze) anfallen, eignen sich natürlich für effiziente parallele Implementierungen. Dementsprechend haben parallele Prozessoren wie Allzweck-Grafikprozessoren (GPGPUs) eine bedeutende Rolle bei der praktischen Implementierung von tiefen neuronalen Netzen gespielt. Parallele Grafikprozessoren mit SIMT-Architekturen (Single Instruction, Multiple Thread) sind darauf ausgelegt, den Umfang der parallelen Verarbeitung in der Grafikpipeline zu maximieren. In einer SIMT-Architektur versuchen Gruppen paralleler Threads, Programmanweisungen so oft wie möglich synchron gemeinsam auszuführen, um die Verarbeitungseffizienz zu erhöhen. Die Effizienz, die durch parallele Algorithmenimplementierungen für maschinelles Lernen bereitgestellt wird, ermöglicht die Verwendung von Netzwerken mit hoher Kapazität und ermöglicht das Training dieser Netzwerke mit größeren Datensätzen.
  • Ein maschineller Lernalgorithmus ist ein Algorithmus, der basierend auf einer Reihe von Daten lernen kann. Ausführungsformen von Algorithmen für maschinelles Lernen können entworfen werden, um Abstraktionen auf hoher Ebene innerhalb eines Datensatzes zu modellieren. Beispielsweise können Bilderkennungsalgorithmen verwendet werden, um zu bestimmen, zu welcher von mehreren Kategorien eine gegebene Eingabe gehört; Regressionsalgorithmen können bei einer Eingabe einen numerischen Wert ausgeben; und Mustererkennungsalgorithmen können verwendet werden, um übersetzten Text zu erzeugen oder Text-in-Sprache- und/oder Spracherkennung durchzuführen.
  • Ein beispielhafter Typ eines maschinellen Lernalgorithmus ist ein neuronales Netzwerk. Es gibt viele Arten von neuronalen Netzen; Ein einfacher Typ eines neuronalen Netzes ist ein Feedforward-Netz. Ein Feedforward-Netzwerk kann als azyklischer Graph implementiert sein, in dem die Knoten in Schichten angeordnet sind. Typischerweise umfasst eine Feedforward-Netzwerktopologie eine Eingabeschicht und eine Ausgabeschicht, die durch mindestens eine verborgene Schicht getrennt sind. Die verborgene Schicht wandelt die von der Eingabeschicht empfangene Eingabe in eine Darstellung um, die zum Generieren von Ausgaben in der Ausgabeschicht nützlich ist. Die Netzknoten sind über Kanten vollständig mit den Knoten in benachbarten Schichten verbunden, aber es gibt keine Kanten zwischen den Knoten innerhalb jeder Schicht. Daten, die an den Knoten einer Eingabeschicht eines Feedforward-Netzwerks empfangen werden, werden über eine Aktivierungsfunktion, die die Zustände der Knoten jeder nachfolgenden Schicht im Netzwerk basierend auf Koeffizienten („Gewichte“), die jeweils mit jeder der Kanten verbunden sind, die die Schichten verbinden. Abhängig von dem spezifischen Modell, das durch den ausgeführten Algorithmus repräsentiert wird, kann die Ausgabe des neuronalen Netzalgorithmus verschiedene Formen annehmen.
  • Bevor ein Algorithmus für maschinelles Lernen verwendet werden kann, um ein bestimmtes Problem zu modellieren, wird der Algorithmus mit einem Trainingsdatensatz trainiert. Das Trainieren eines neuronalen Netzwerks beinhaltet das Auswählen einer Netzwerktopologie, das Verwenden eines Satzes von Trainingsdaten, die ein Problem darstellen, das durch das Netzwerk modelliert wird, und das Anpassen der Gewichtungen, bis das Netzwerkmodell mit einem minimalen Fehler für alle Instanzen des Trainingsdatensatzes arbeitet. Beispielsweise wird während eines überwachten Lernprozesses für ein neuronales Netzwerk die Ausgabe, die vom Netzwerk als Reaktion auf die Eingabe, die eine Instanz in einem Trainingsdatensatz darstellt, erzeugt wird, mit der „richtigen“ gekennzeichneten Ausgabe für diese Instanz verglichen, ein Fehlersignal, das die Differenz zwischen der Ausgabe und der gekennzeichneten Ausgabe wird berechnet, und die den Verbindungen zugeordneten Gewichtungen werden angepasst, um diesen Fehler zu minimieren, wenn sich das Fehlersignal rückwärts durch die Schichten des Netzwerks ausbreitet. Das Netzwerk gilt als „trainiert“, wenn die Fehler für jede der Ausgaben, die aus den Instanzen des Trainingsdatensatzes erzeugt werden, minimiert sind.
  • Die Genauigkeit eines maschinellen Lernalgorithmus kann erheblich von der Qualität des Datensatzes beeinflusst werden, der zum Trainieren des Algorithmus verwendet wird. Der Trainingsprozess kann rechenintensiv sein und kann bei einem herkömmlichen Allzweckprozessor eine beträchtliche Zeitdauer erfordern. Dementsprechend wird Parallelverarbeitungshardware verwendet, um viele Arten von maschinellen Lernalgorithmen zu trainieren. Dies ist besonders nützlich, um das Training neuronaler Netze zu optimieren, da sich die beim Anpassen der Koeffizienten in neuronalen Netzen durchgeführten Berechnungen natürlich für parallele Implementierungen eignen. Insbesondere wurden viele maschinelle Lernalgorithmen und Softwareanwendungen angepasst, um die Parallelverarbeitungshardware in Allzweck-Grafikverarbeitungsgeräten zu nutzen.
  • 6 ist ein verallgemeinertes Diagramm eines Softwarestapels 600 für maschinelles Lernen. Eine maschinelle Lernanwendung 602 kann konfiguriert sein, um ein neuronales Netzwerk unter Verwendung eines Trainingsdatensatzes zu trainieren oder ein trainiertes tiefes neuronales Netzwerk zu verwenden, um maschinelle Intelligenz zu implementieren. Die maschinelle Lernanwendung 602 kann Trainings- und Inferenzfunktionen für ein neuronales Netzwerk und/oder spezialisierte Software beinhalten, die verwendet werden kann, um ein neuronales Netzwerk vor der Bereitstellung zu trainieren. Die maschinelle Lernanwendung 602 kann jede Art von maschineller Intelligenz implementieren, einschließlich, aber nicht beschränkt auf Bilderkennung, Kartierung und Lokalisierung, autonome Navigation, Sprachsynthese, medizinische Bildgebung oder Sprachübersetzung.
  • Die Hardwarebeschleunigung für die Machine-Learning-Anwendung 602 kann über ein Machine-Learning-Framework 604 aktiviert werden. Das Machine-Learning-Framework 604 kann eine Bibliothek von Machine-Learning-Primitiven bereitstellen. Primitive für maschinelles Lernen sind grundlegende Operationen, die üblicherweise von Algorithmen für maschinelles Lernen ausgeführt werden. Ohne das Machine-Learning-Framework 604 müssten Entwickler von Machine-Learning-Algorithmen die dem Machine-Learning-Algorithmus zugeordnete Hauptrechenlogik erstellen und optimieren und dann die Rechenlogik reoptimieren, wenn neue parallele Prozessoren entwickelt werden. Stattdessen kann die Anwendung für maschinelles Lernen dazu konfiguriert sein, die erforderlichen Berechnungen unter Verwendung der Grundelemente durchzuführen, die vom Rahmen für maschinelles Lernen 604 bereitgestellt werden. Beispielhafte Primitive umfassen Tensorfaltungen, Aktivierungsfunktionen und Pooling, bei denen es sich um Rechenoperationen handelt, die ausgeführt werden, während ein neuronales Faltungsnetzwerk (CNN) trainiert wird. Der Rahmen für maschinelles Lernen 604 kann auch Primitive bereitstellen, um grundlegende Unterprogramme der linearen Algebra zu implementieren, die von vielen Algorithmen für maschinelles Lernen ausgeführt werden, wie etwa Matrix- und Vektoroperationen.
  • Das Machine-Learning-Framework 604 kann von der Machine-Learning-Anwendung 602 empfangene Eingabedaten verarbeiten und die entsprechende Eingabe in ein Compute-Framework 606 generieren. Das Rechen-Framework 606 kann die dem GPGPU-Treiber 608 bereitgestellten zugrunde liegenden Anweisungen abstrahieren, um es dem Machine-Learning-Framework 604 zu ermöglichen, die Hardwarebeschleunigung über die GPGPU-Hardware 610 zu nutzen, ohne dass das Machine-Learning-Framework 604 genaue Kenntnisse der Architektur der GPGPU haben muss Hardware 610. Darüber hinaus kann das Rechen-Framework 606 eine Hardwarebeschleunigung für das Machine-Learning-Framework 604 über eine Vielzahl von Typen und Generationen der GPGPU-Hardware 610 ermöglichen.
  • Beschleunigung des maschinellen Lernens durch GPGPU
  • 7 veranschaulicht eine Allzweck-Grafikverarbeitungseinheit 700 gemäß einer Ausführungsform. In einer Ausführungsform kann die Allzweck-Verarbeitungseinheit (GPGPU) 700 so konfiguriert sein, dass sie beim Verarbeiten der Art von Rechenarbeitslasten, die mit dem Training tiefer neuronaler Netze verbunden sind, besonders effizient ist. Darüber hinaus kann die GPGPU 700 direkt mit anderen Instanzen der GPGPU verbunden werden, um einen Multi-GPU-Cluster zu erstellen, um die Trainingsgeschwindigkeit für besonders tiefe neuronale Netze zu verbessern.
  • Die GPGPU 700 enthält 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 Hostschnittstelle kann jedoch auch eine herstellerspezifische Kommunikationsschnittstelle oder Kommunikationsstruktur sein. Die GPGPU 700 empfängt Befehle vom Host-Prozessor und verwendet einen globalen Scheduler 704 , um Ausführungsthreads, die diesen Befehlen zugeordnet sind, an einen Satz von Rechenclustern 706A - 706H zu verteilen. Die Rechencluster 706A-706H teilen sich einen Cache-Speicher 708. Der Cache-Speicher 708 kann als Cache höherer Ebene für Cache-Speicher innerhalb der Rechencluster 706A - 706H dienen.
  • Die GPGPU 700 umfasst einen Speicher 714A -B, der über einen Satz von Speichercontrollern 712A - 712B mit den Rechenclustern 706A -H gekoppelt ist. In verschiedenen Ausführungsformen kann der Speicher 714A - 714B verschiedene Arten von Speichervorrichtungen beinhalten, einschließlich dynamischem Direktzugriffsspeicher (DRAM) oder Grafik-Direktzugriffsspeicher, wie beispielsweise synchroner Grafik-Direktzugriffsspeicher (SGRAM), einschließlich Grafik-Doppeldatenrate (GDDR). Erinnerung. In einer Ausführungsform kann der Speicher 714A - 714N auch 3D-Stapelspeicher umfassen, einschließlich, aber nicht beschränkt auf Speicher mit hoher Bandbreite (HBM).
  • In einer Ausführungsform umfasst jeder der Rechencluster 706A - 706H einen Satz von Grafik-Multiprozessoren, wie beispielsweise den Grafik-Multiprozessor 400 von 4 . 4A. Die Grafik-Multiprozessoren des Compute-Clusters haben mehrere Typen von Integer- und Gleitkomma-Logikeinheiten, die Rechenoperationen mit einer Reihe von Genauigkeiten ausführen können, einschließlich geeignet für Machine-Learning-Berechnungen. Zum Beispiel und in einer Ausführungsform kann mindestens eine Teilmenge der Gleitkommaeinheiten in jedem der Rechencluster 706A-H konfiguriert sein, um 16-Bit- oder 32-Bit-Gleitkommaoperationen durchzuführen, während eine andere Teilmenge der Gleitkomma-Punkteinheiten können so konfiguriert werden, dass sie 64-Bit-Gleitkommaoperationen ausführen.
  • Mehrere Instanzen der GPGPU 700 können für den Betrieb als Rechencluster konfiguriert werden. Der vom Rechencluster für die Synchronisation und den Datenaustausch verwendete Kommunikationsmechanismus variiert je nach Ausführungsform. In einer Ausführungsform kommunizieren die mehreren Instanzen der GPGPU 700 über die Hostschnittstelle 702. In einer Ausführungsform umfasst die GPGPU 700 einen I/O-Hub 709 , der die GPGPU 700 mit einem GPU-Link 710 koppelt, der eine direkte Verbindung zu anderen Instanzen der GPGPU ermöglicht. In einer Ausführungsform ist die GPU-Verbindung 710 mit einer dedizierten GPU-zu-GPU-Brücke gekoppelt, die die Kommunikation und Synchronisation zwischen mehreren Instanzen der GPGPU 700 ermöglicht. In einer Ausführungsform ist die GPU-Verbindung 710 mit einer Hochgeschwindigkeitsverbindung gekoppelt, um Daten an andere GPGPUs oder parallele Prozessoren zu senden und zu empfangen. In einer Ausführungsform befinden sich die mehreren Instanzen der GPGPU 700 in separaten Datenverarbeitungssystemen und kommunizieren über eine Netzwerkvorrichtung, auf die über die Hostschnittstelle 702 zugegriffen werden kann. In einer Ausführungsform kann die GPU-Verbindung 710 dazu konfiguriert sein, eine Verbindung zu einem Host-Prozessor zusätzlich oder als Alternative zur Host-Schnittstelle 702 zu ermöglichen.
  • Während die dargestellte Konfiguration der GPGPU 700 konfiguriert werden kann, um neuronale Netze zu trainieren, stellt eine Ausführungsform eine alternative Konfiguration der GPGPU 700 bereit, die für den Einsatz in einer Hochleistungs- oder Niedrigenergie-Inferenzplattform konfiguriert werden kann. In einer Inferenzkonfiguration umfasst die GPGPU 700 weniger der Rechencluster 706A - 706H relativ zur Trainingskonfiguration. Außerdem kann sich die dem Speicher 714A - 714B zugeordnete Speichertechnologie zwischen Inferenz- und Trainingskonfigurationen unterscheiden. In einer Ausführungsform kann die Inferenzkonfiguration der GPGPU 700 die Inferenz spezifischer Anweisungen unterstützen. Zum Beispiel kann eine Inferenzkonfiguration Unterstützung für eine oder mehrere 8-Bit-Integer-Punkt-Produktanweisungen bereitstellen, die üblicherweise bei Inferenzoperationen für eingesetzte neuronale Netze verwendet werden.
  • 8 veranschaulicht ein Multi-GPU-Rechensystem 800 gemäß einer Ausführungsform. Das Multi-GPU-Rechensystem 800 kann einen Prozessor 802 beinhalten, der über einen Host-Schnittstellenschalter 804 an mehrere GPGPUs 806A-806D gekoppelt ist. Der Host-Schnittstellenschalter 804 ist in einer Ausführungsform eine PCI-Express-Schaltervorrichtung, die den Prozessor 802 mit einem PCI-Express-Bus koppelt, über den der Prozessor 802 mit dem Satz von GPGPUs 806A - 806D kommunizieren kann. Jede der mehreren GPGPUs 806A - 806D kann eine Instanz der GPGPU 700 von 7 sein. 7. Die GPGPUs 806A-806D können über eine Reihe von Hochgeschwindigkeits-Punkt-zu-Punkt-GPU-zu-GPU-Links 816 miteinander verbunden werden. Die Hochgeschwindigkeits-GPU-zu-GPU-Verbindungen können mit jeder der GPGPUs 806A - 806D über eine dedizierte GPU-Verbindung, wie etwa die GPU-Verbindung 710 wie in 7 , verbunden werden. 7. Die P2P-GPU-Verbindungen 816 ermöglichen eine direkte Kommunikation zwischen jeder der GPGPUs 806A - 806D, ohne dass eine Kommunikation über den Host-Schnittstellenbus erforderlich ist, mit dem der Prozessor 802 verbunden ist. Mit GPU-zu-GPU-Verkehr, der an die P2P-GPU-Links gerichtet ist, bleibt der Host-Schnittstellenbus für den Systemspeicherzugriff oder zur Kommunikation mit anderen Instanzen des Multi-GPU-Rechensystems 800 beispielsweise über eine oder mehrere Netzwerkvorrichtungen verfügbar. Während in der veranschaulichten Ausführungsform die GPGPUs 806A -Dmit dem Prozessor 802 über den Host-Schnittstellenschalter 804 verbunden sind, umfasst der Prozessor 802 in einer Ausführungsform eine direkte Unterstützung für die P2P-GPU-Verbindungen 816 und kann direkt mit den GPGPUs 806A - 806D verbunden werden.
  • Implementierungen von neuronalen Netzwerken für maschinelles Lernen
  • Die durch hierin beschriebene Ausführungsformen bereitgestellte Rechenarchitektur kann konfiguriert sein, um die Arten von Parallelverarbeitung durchzuführen, die besonders geeignet sind zum Trainieren und Bereitstellen neuronaler Netze für maschinelles Lernen. Ein neuronales Netz kann als ein Netz von Funktionen mit einer Graphenbeziehung verallgemeinert werden. Wie in der Technik bekannt ist, gibt es eine Vielzahl von Typen von neuronalen Netzwerkimplementierungen, die beim maschinellen Lernen verwendet werden. Ein beispielhafter Typ eines neuronalen Netzwerks ist das Feedforward-Netzwerk, wie zuvor beschrieben.
  • Ein zweiter beispielhafter Typ eines neuronalen Netzes ist das Convolutional Neural Network (CNN). Ein CNN ist ein spezialisiertes neuronales Feedforward-Netzwerk zum Verarbeiten von Daten mit einer bekannten, gitterartigen Topologie, wie beispielsweise Bilddaten. Dementsprechend werden CNNs üblicherweise für Computervisions- und Bilderkennungsanwendungen verwendet, sie können jedoch auch für andere Arten von Mustererkennung wie etwa Sprach- und Sprachverarbeitung verwendet werden. Die Knoten in der CNN-Eingangsschicht sind in einem Satz von „Filtern“ organisiert (Funktionsdetektoren, die von den rezeptiven Feldern der Netzhaut inspiriert sind), und die Ausgabe jedes Filtersatzes wird an Knoten in aufeinanderfolgenden Schichten des Netzwerks weitergegeben. Die Berechnungen für ein CNN umfassen das Anwenden der mathematischen Faltungsoperation auf jeden Filter, um die Ausgabe dieses Filters zu erzeugen. Faltung ist eine spezielle Art von mathematischer Operation, die von zwei Funktionen ausgeführt wird, um eine dritte Funktion zu erzeugen, die eine modifizierte Version einer der beiden ursprünglichen Funktionen ist. In der Terminologie des Faltungsnetzwerks kann die erste Funktion der Faltung als Eingabe bezeichnet werden, während die zweite Funktion als Faltungskern bezeichnet werden kann. Die Ausgabe kann als Merkmalskarte bezeichnet werden. Beispielsweise kann die Eingabe in eine Faltungsschicht ein mehrdimensionales Datenarray sein, das die verschiedenen Farbkomponenten eines Eingabebildes definiert. Der Faltungskern kann ein mehrdimensionales Array von Parametern sein, wobei die Parameter durch den Trainingsprozess für das neuronale Netz angepasst werden.
  • Rekurrente neuronale Netze (RNNs) sind eine Familie von neuronalen Feedforward-Netzen, die Feedback-Verbindungen zwischen Schichten enthalten. RNNs ermöglichen die Modellierung sequentieller Daten, indem sie Parameterdaten über verschiedene Teile des neuronalen Netzes teilen. Die Architektur für ein RNN umfasst Zyklen. Die Zyklen stellen den Einfluss eines gegenwärtigen Wertes einer Variablen auf ihren eigenen Wert zu einem zukünftigen Zeitpunkt dar, da zumindest ein Teil der Ausgabedaten des RNN als Feedback für die Verarbeitung nachfolgender Eingaben in einer Sequenz verwendet wird. Diese Funktion macht RNNs aufgrund der variablen Natur, in der Sprachdaten erstellt werden können, für die Sprachverarbeitung besonders nützlich.
  • Die unten beschriebenen Figuren stellen beispielhafte Feedforward-, CNN- und RNN-Netze dar und beschreiben einen allgemeinen Prozess zum jeweiligen Trainieren und Bereitstellen jeder dieser Arten von Netzen. Es versteht sich, dass diese Beschreibungen beispielhaft und nicht einschränkend in Bezug auf jede hier beschriebene spezifische Ausführungsform sind und die veranschaulichten Konzepte allgemein auf tiefe neuronale Netze und maschinelle Lerntechniken im Allgemeinen angewendet werden können.
  • Die oben beschriebenen beispielhaften neuronalen Netze können verwendet werden, um Deep Learning durchzuführen. Deep Learning ist maschinelles Lernen mit Hilfe von Deep Neural Networks. Die beim Deep Learning verwendeten tiefen neuronalen Netze sind künstliche neuronale Netzwerke, die aus mehreren versteckten Schichten bestehen, im Gegensatz zu flachen neuronalen Netzwerken, die nur eine einzelne versteckte Schicht enthalten. Tiefere neuronale Netze sind im Allgemeinen rechenintensiver zu trainieren. Die zusätzlichen versteckten Schichten des Netzwerks ermöglichen jedoch eine mehrstufige Mustererkennung, die zu einem reduzierten Ausgabefehler im Vergleich zu Techniken des flachen maschinellen Lernens führt.
  • Tiefe neuronale Netzwerke, die beim Deep Learning verwendet werden, umfassen typischerweise ein Front-End-Netzwerk, um eine Merkmalserkennung durchzuführen, die mit einem Back-End-Netzwerk gekoppelt ist, das ein mathematisches Modell darstellt, das Operationen (z. B. Objektklassifizierung, Spracherkennung usw.) basierend auf dem Merkmal ausführen kann dem Modell zur Verfügung gestellte Darstellung. Deep Learning ermöglicht die Durchführung von maschinellem Lernen, ohne dass für das Modell handgefertigtes Feature-Engineering durchgeführt werden muss. Stattdessen können tiefe neuronale Netze Merkmale basierend auf statistischer Struktur oder Korrelation innerhalb der Eingabedaten lernen. Die gelernten Merkmale können einem mathematischen Modell bereitgestellt werden, das erkannte Merkmale auf eine Ausgabe abbilden kann. Das vom Netzwerk verwendete mathematische Modell ist im Allgemeinen auf die spezifische auszuführende Aufgabe spezialisiert, und verschiedene Modelle werden verwendet, um unterschiedliche Aufgaben auszuführen.
  • Sobald das neuronale Netzwerk strukturiert ist, kann ein Lernmodell auf das Netzwerk angewendet werden, um das Netzwerk zu trainieren, um bestimmte Aufgaben auszuführen. Das Lernmodell beschreibt, wie die Gewichte innerhalb des Modells angepasst werden, um den Ausgabefehler des Netzwerks zu reduzieren. Die Rückwärtsausbreitung von Fehlern ist ein übliches Verfahren, das verwendet wird, um neuronale Netze zu trainieren. Ein Eingabevektor wird dem Netzwerk zur Verarbeitung präsentiert. Die Ausgabe des Netzwerks wird mit der gewünschten Ausgabe unter Verwendung einer Verlustfunktion verglichen und ein Fehlerwert wird für jedes der Neuronen in der Ausgabeschicht berechnet. Die Fehlerwerte werden dann rückwärts propagiert, bis jedem Neuron ein zugehöriger Fehlerwert zugeordnet ist, der grob seinen Beitrag zur ursprünglichen Ausgabe darstellt. Das Netzwerk kann dann mithilfe eines Algorithmus wie dem aus diesen Fehlern lernen stochastischer Gradientenabstiegsalgorithmus, um die Gewichte des neuronalen Netzes zu aktualisieren.
  • 9A-9B veranschaulichen ein beispielhaftes neuronales Faltungsnetzwerk. 9A veranschaulicht verschiedene Schichten innerhalb eines CNN. Wie in FIG. In 9A kann ein beispielhaftes CNN, das zum Modellieren der Bildverarbeitung verwendet wird, eine Eingabe 902 empfangen, die die Rot-, Grün- und Blau-(RGB)-Komponenten eines Eingabebilds beschreibt. Die Eingabe 902 kann von mehreren Faltungsschichten (zB Faltungsschicht 904, Faltungsschicht 906) verarbeitet werden. Die Ausgabe von den mehreren Faltungsschichten kann optional von einem Satz vollständig verbundener Schichten 908 verarbeitet werden. Neuronen in einer vollständig verbundenen Schicht haben volle Verbindungen zu allen Aktivierungen in der vorherigen Schicht, wie zuvor für ein Feedforward-Netzwerk beschrieben. Die Ausgabe der vollständig verbundenen Schichten 908 kann verwendet werden, um ein Ausgabeergebnis aus dem Netzwerk zu erzeugen. Die Aktivierungen innerhalb der vollständig verbundenen Schichten 908 können unter Verwendung von Matrixmultiplikation anstelle von Faltung berechnet werden. Nicht alle CNN-Implementierungen verwenden vollständig verbundene Schichten 908. Beispielsweise kann die Faltungsschicht 906 in einigen Implementierungen eine Ausgabe für das CNN erzeugen.
  • Die Faltungsschichten sind spärlich verbunden, was sich von der herkömmlichen neuronalen Netzwerkkonfiguration unterscheidet, die in den vollständig verbundenen Schichten 908 zu finden ist. Herkömmliche neuronale Netzwerkschichten sind vollständig verbunden, sodass jede Ausgabeeinheit mit jeder Eingabeeinheit interagiert. Die Faltungsschichten sind jedoch spärlich verbunden, da die Ausgabe der Faltung eines Feldes (anstelle des jeweiligen Zustandswerts jedes der Knoten in dem Feld) in die Knoten der nachfolgenden Schicht eingegeben wird, wie dargestellt. Die den Faltungsschichten zugeordneten Kernel führen Faltungsoperationen durch, deren Ausgabe an die nächste Schicht gesendet wird. Die innerhalb der Faltungsschichten durchgeführte Dimensionsreduktion ist ein Aspekt, der es dem CNN ermöglicht, zu skalieren, um große Bilder zu verarbeiten.
  • 9B veranschaulicht beispielhafte Berechnungsstufen innerhalb einer Faltungsschicht eines CNN. Die Eingabe in eine Faltungsschicht 912 eines CNN kann in drei Stufen einer Faltungsschicht 914 verarbeitet werden. Die drei Stufen können eine Faltungsstufe 916, eine Detektorstufe 918 und eine Pooling-Stufe 920 beinhalten. Die Faltungsschicht 914 kann dann Daten an eine nachfolgende Faltungsschicht ausgeben. Die letzte Faltungsschicht des Netzwerks kann Ausgabemerkmalskartendaten erzeugen oder Eingaben für eine vollständig verbundene Schicht bereitstellen, um beispielsweise einen Klassifikationswert für die Eingabe in das CNN zu generieren.
  • In der Faltungsstufe führt 916 mehrere Faltungen parallel durch, um einen Satz linearer Aktivierungen zu erzeugen. Die Faltungsstufe 916 kann eine affine Transformation umfassen, bei der es sich um eine beliebige Transformation handelt, die als lineare Transformation plus Translation spezifiziert werden kann. Affine Transformationen umfassen Rotationen, Translationen, Skalierungen und Kombinationen dieser Transformationen. Die Faltungsstufe berechnet die Ausgabe von Funktionen (z. B. Neuronen), die mit bestimmten Regionen in der Eingabe verbunden sind, die als die dem Neuron zugeordnete lokale Region bestimmt werden können. Die Neuronen berechnen ein Punktprodukt zwischen den Gewichten der Neuronen und der Region in der lokalen Eingabe, mit der die Neuronen verbunden sind. Die Ausgabe von der Faltungsstufe 916 definiert einen Satz linearer Aktivierungen, die von aufeinanderfolgenden Stufen der Faltungsschicht 914 verarbeitet werden.
  • Die linearen Aktivierungen können von einer Detektorstufe 918 verarbeitet werden. In der Detektorstufe 918 wird jede lineare Aktivierung durch eine nichtlineare Aktivierungsfunktion verarbeitet. Die nichtlineare Aktivierungsfunktion erhöht die nichtlinearen Eigenschaften des Gesamtnetzwerks, ohne die rezeptiven Felder der Faltungsschicht zu beeinflussen. Es können mehrere Typen von nichtlinearen Aktivierungsfunktionen verwendet werden. Ein besonderer Typ ist die rektifizierte Lineareinheit (ReLU), die eine Aktivierungsfunktion verwendet, die definiert ist als f(x) = max(0, x), so dass die Aktivierung einen Schwellenwert von Null hat.
  • Die Pooling-Stufe 920 verwendet eine Pooling-Funktion, die die Ausgabe der Faltungsschicht 906 durch eine zusammenfassende Statistik der nahegelegenen Ausgaben ersetzt. Die Pooling-Funktion kann verwendet werden, um eine Übersetzungsinvarianz in das neuronale Netz einzuführen, so dass kleine Übersetzungen der Eingabe die gepoolten Ausgaben nicht ändern. Invarianz gegenüber der lokalen Übersetzung kann in Szenarien nützlich sein, in denen das Vorhandensein eines Features in den Eingabedaten wichtiger ist als die genaue Position des Features. Während der Pooling-Phase 920 können verschiedene Arten von Pooling-Funktionen verwendet werden, einschließlich Max-Pooling, Average-Pooling und L2-Norm-Pooling. Darüber hinaus enthalten einige CNN-Implementierungen keine Pooling-Phase. Stattdessen ersetzen solche Implementierungen eine zusätzliche Faltungsstufe mit einem erhöhten Schritt im Vergleich zu vorherigen Faltungsstufen.
  • Die Ausgabe von der Faltungsschicht 914 kann dann von der nächsten Schicht 922 verarbeitet werden. Die nächste Schicht 922 kann eine zusätzliche Faltungsschicht oder eine der vollständig verbundenen Schichten 908 sein. Beispielsweise kann die erste Faltungsschicht 904 von 9A kann an die zweite Faltungsschicht 906 ausgeben, während die zweite Faltungsschicht an eine erste Schicht der vollständig verbundenen Schichten 908 ausgeben kann.
  • 10 veranschaulicht ein beispielhaftes rekurrentes neuronales Netzwerk 1000. In einem rekurrenten neuronalen Netz (RNN) beeinflusst der vorherige Zustand des Netzes die Ausgabe des aktuellen Zustands des Netzes. RNNs können auf verschiedene Weise unter Verwendung einer Vielzahl von Funktionen erstellt werden. Die Verwendung von RNNs dreht sich im Allgemeinen um die Verwendung mathematischer Modelle, um die Zukunft basierend auf einer vorherigen Sequenz von Eingaben vorherzusagen. Beispielsweise kann ein RNN verwendet werden, um eine statistische Sprachmodellierung durchzuführen, um ein bevorstehendes Wort bei einer gegebenen vorherigen Wortfolge vorherzusagen. Das dargestellte RNN 1000 kann beschrieben werden mit einer Eingabeschicht 1002 , die einen Eingabevektor empfängt, versteckten Schichten 1004 zum Implementieren einer wiederkehrenden Funktion, einem Rückkopplungsmechanismus 1005 , um einen „Speicher“ von vorherigen Zuständen zu ermöglichen, und einer Ausgabeschicht 1006 zum Ausgeben von a' Ergebnis. Das RNN 1000 arbeitet nach Zeitschritten. Der Zustand des RNN zu einem bestimmten Zeitschritt wird basierend auf dem vorherigen Zeitschritt über den Rückkopplungsmechanismus 1005 beeinflusst. Für einen gegebenen Zeitschritt wird der Zustand der versteckten Schichten 1004 durch den vorherigen Zustand und die Eingabe zum aktuellen Zeitschritt definiert. Eine anfängliche Eingabe (x1) kann in einem ersten Zeitschritt von der versteckten Schicht 1004 verarbeitet werden. Ein zweiter Eingang (x2) kann von der versteckten Schicht 1004 unter Verwendung von Zustandsinformationen verarbeitet werden, die während der Verarbeitung der anfänglichen Eingabe (x1). Ein gegebener Zustand kann berechnet werden als st = f(Uxt + Wst-1), wo U und W sind Parametermatrizen. Die Funktion f ist im Allgemeinen eine Nichtlinearität, wie die Tangens hyperbolische Funktion (Tanh) oder eine Variante der Gleichrichterfunktion f(x) = max(0, x). Die in den verborgenen Schichten 1004 verwendete spezifische mathematische Funktion kann jedoch in Abhängigkeit von den spezifischen Implementierungsdetails des RNN 1000 variieren.
  • Zusätzlich zu den beschriebenen grundlegenden CNN- und RNN-Netzen können Variationen dieser Netze aktiviert werden. Eine beispielhafte RNN-Variante ist das Long Short Term Memory (LSTM) RNN. LSTM-RNNs sind in der Lage, langfristige Abhängigkeiten zu lernen, die für die Verarbeitung längerer Sprachsequenzen erforderlich sein können. Eine Variante des CNN ist ein konvolutionelles Deep-Belief-Netzwerk, das eine ähnliche Struktur wie ein CNN aufweist und ähnlich einem Deep-Belief-Netzwerk trainiert wird. Ein Deep-Belief-Netzwerk (DBN) ist ein generatives neuronales Netzwerk, das aus mehreren Schichten stochastischer (zufälliger) Variablen besteht. DBNs können mit gierigem, unüberwachtem Lernen Schicht für Schicht trainiert werden. Die gelernten Gewichtungen des DBN können dann verwendet werden, um neuronale Netze vor dem Training bereitzustellen, indem ein optimaler Anfangssatz von Gewichtungen für das neuronale Netz bestimmt wird.
  • 11 veranschaulicht das Training und die Bereitstellung eines tiefen neuronalen Netzes. Sobald ein gegebenes Netzwerk für eine Aufgabe strukturiert wurde, wird das neuronale Netzwerk unter Verwendung eines Trainingsdatensatzes 1102 trainiert. Es wurden verschiedene Trainingsrahmen 1104 entwickelt, um eine Hardwarebeschleunigung des Trainingsprozesses zu ermöglichen. Zum Beispiel kann das Machine-Learning-Framework 604 von 6 kann als Trainingsframework 604 konfiguriert sein. Der Trainingsrahmen 604 kann sich in ein nicht trainiertes neuronales Netz 1106 einklinken und ermöglichen, dass das nicht trainierte neuronale Netz unter Verwendung der hierin beschriebenen Parallelverarbeitungsressourcen trainiert wird, um ein trainiertes neuronales Netz 1108 zu erzeugen.
  • Um den Trainingsprozess zu starten, können die Anfangsgewichte zufällig oder durch Vortraining unter Verwendung eines tiefen Glaubensnetzwerks ausgewählt werden. Der Trainingszyklus wird dann entweder überwacht oder unüberwacht durchgeführt.
  • Überwachtes Lernen ist ein Lernverfahren, bei dem das Training als vermittelte Operation durchgeführt wird, beispielsweise wenn der Trainingsdatensatz 1102 eine Eingabe enthält, die mit der gewünschten Ausgabe für die Eingabe gepaart ist, oder wenn der Trainingsdatensatz eine Eingabe mit bekannter Ausgabe und die Ausgabe des neuronalen Netzwerk wird manuell bewertet. Das Netzwerk verarbeitet die Eingaben und vergleicht die resultierenden Ausgaben mit einem Satz erwarteter oder gewünschter Ausgaben. Fehler werden dann durch das System zurück propagiert. Das Trainingsframework 1104 kann sich anpassen, um die Gewichte anzupassen, die das nicht trainierte neuronale Netzwerk 1106 steuern. Der Trainingsrahmen 1104 kann Werkzeuge bereitstellen, um zu überwachen, wie gut das untrainierte neuronale Netz 1106 in Richtung eines Modells konvergiert, das geeignet ist, auf Grundlage bekannter Eingabedaten richtige Antworten zu generieren. Der Trainingsprozess findet wiederholt statt, wenn die Gewichte des Netzwerks angepasst werden, um die durch das neuronale Netzwerk erzeugte Ausgabe zu verfeinern. Der Trainingsprozess kann fortgesetzt werden, bis das neuronale Netz eine statistisch gewünschte Genauigkeit erreicht, die einem trainierten neuronalen Netz 1108 zugeordnet ist. Das trainierte neuronale Netzwerk 1108 kann dann eingesetzt werden, um eine beliebige Anzahl von maschinellen Lernvorgängen zu implementieren, um ein Inferenzergebnis 1114 auf Grundlage der Eingabe neuer Daten 1112 zu generieren.
  • Unüberwachtes Lernen ist eine Lernmethode, bei der das Netzwerk versucht, sich selbst mit nicht gekennzeichneten Daten zu trainieren. Somit enthält der Trainingsdatensatz 1102 für unüberwachtes Lernen Eingabedaten ohne zugehörige Ausgabedaten. Das ungeübte neuronale Netz 1106 kann Gruppierungen innerhalb der nicht gekennzeichneten Eingabe lernen und kann bestimmen, wie einzelne Eingaben mit dem Gesamtdatensatz zusammenhängen. Unüberwachtes Training kann verwendet werden, um eine selbstorganisierende Karte zu erzeugen, die eine Art trainiertes neuronales Netzwerk 1108 ist, das in der Lage ist, Operationen durchzuführen, die beim Reduzieren der Dimensionalität von Daten nützlich sind. Unüberwachtes Training kann auch verwendet werden, um eine Anomalieerkennung durchzuführen, die die Identifizierung von Datenpunkten in einem Eingabedatensatz ermöglicht, die von den normalen Mustern der Daten abweichen.
  • Variationen von beaufsichtigtem und unbeaufsichtigtem Training können ebenfalls verwendet werden. Halbüberwachtes Lernen ist eine Technik, bei der der Trainingsdatensatz 1102 eine Mischung aus gekennzeichneten und nicht gekennzeichneten Daten derselben Verteilung enthält. Inkrementelles Lernen ist eine Variante des überwachten Lernens, bei der kontinuierlich Eingabedaten verwendet werden, um das Modell weiter zu trainieren. Inkrementelles Lernen ermöglicht es dem trainierten neuronalen Netzwerk 1108, sich an die neuen Daten 1112 anzupassen, ohne das während des anfänglichen Trainings in das Netzwerk eingeflößte Wissen zu vergessen.
  • Ob überwacht oder nicht überwacht, der Trainingsprozess für besonders tiefe neuronale Netze kann für einen einzelnen Rechenknoten zu rechenintensiv sein. Anstatt einen einzelnen Rechenknoten zu verwenden, kann ein verteiltes Netzwerk von Rechenknoten verwendet werden, um den Trainingsprozess zu beschleunigen.
  • 12 ist ein Blockdiagramm, das verteiltes Lernen veranschaulicht. Verteiltes Lernen ist ein Trainingsmodell, das mehrere verteilte Rechenknoten verwendet, um ein überwachtes oder unüberwachtes Training eines neuronalen Netzes durchzuführen. Die verteilten Rechenknoten können jeweils einen oder mehrere Host-Prozessoren und einen oder mehrere der Mehrzweck-Verarbeitungsknoten umfassen, wie beispielsweise die hochparallele Mehrzweck-Grafikverarbeitungseinheit 700 wie in 7 . 700. Wie veranschaulicht, kann verteiltes Lernen durch Modellparallelität 1202, Datenparallelität 1204 oder eine Kombination aus Modell- und Datenparallelität 1204 durchgeführt werden.
  • Bei der Modellparallelität 1202 können verschiedene Rechenknoten in einem verteilten System Trainingsberechnungen für verschiedene Teile eines einzelnen Netzwerks durchführen. Beispielsweise kann jede Schicht eines neuronalen Netzes von einem anderen Verarbeitungsknoten des verteilten Systems trainiert werden. Zu den Vorteilen der Modellparallelität gehört die Möglichkeit, auf besonders große Modelle zu skalieren. Die Aufteilung der Berechnungen, die verschiedenen Schichten des neuronalen Netzes zugeordnet sind, ermöglicht das Training von sehr große neuronale Netze, in denen die Gewichte aller Schichten nicht in den Speicher eines einzelnen Rechenknotens passen würden. In einigen Fällen kann Modellparallelität besonders nützlich sein, um ein unüberwachtes Training großer neuronaler Netze durchzuführen.
  • In Daten Parallelität 1204 haben die verschiedenen Knoten des verteilten Netzwerks eine vollständige Instanz des Modells und jeder Knoten empfängt einen anderen Teil der Daten. Die Ergebnisse der verschiedenen Knoten werden dann kombiniert. Während verschiedene Ansätze zur Datenparallelität möglich sind, erfordern datenparallele Trainingsansätze alle eine Technik zum Kombinieren von Ergebnissen und zum Synchronisieren der Modellparameter zwischen jedem Knoten. Beispielhafte Ansätze zum Kombinieren von Daten umfassen Parametermittelung und aktualisierungsbasierte Datenparallelität. Die Parametermittelung trainiert jeden Knoten auf einer Teilmenge der Trainingsdaten und setzt die globalen Parameter (zB Gewichtungen, Bias) auf den Durchschnitt der Parameter von jedem Knoten. Die Parametermittelung verwendet einen zentralen Parameterserver, der die Parameterdaten verwaltet. Aktualisierungsbasierte Datenparallelität ähnelt der Parametermittelung, außer dass die Aktualisierungen an das Modell übertragen werden, anstatt Parameter von den Knoten an den Parameterserver zu übertragen. Außerdem kann eine auf Aktualisierungen basierende Datenparallelität auf dezentralisierte Weise durchgeführt werden, wobei die Aktualisierungen komprimiert und zwischen Knoten übertragen werden.
  • Die kombinierte Modell- und Datenparallelität 1206 kann beispielsweise in einem verteilten System implementiert werden, in dem jeder Rechenknoten mehrere GPUs enthält. Jeder Knoten kann eine vollständige Instanz des Modells haben, wobei separate GPUs innerhalb jedes Knotens verwendet werden, um verschiedene Teile des Modells zu trainieren.
  • Verteiltes Training hat den Overhead im Vergleich zum Training an einer einzelnen Maschine erhöht. Die hierin beschriebenen parallelen Prozessoren und GPGPUs können jedoch jeweils verschiedene Techniken implementieren, um den Overhead des verteilten Trainings zu reduzieren, einschließlich Techniken, um eine GPU-zu-GPU-Datenübertragung mit hoher Bandbreite und eine beschleunigte Datenfernsynchronisation zu ermöglichen.
  • Beispielhafte Anwendungen für maschinelles Lernen
  • Maschinelles Lernen kann angewendet werden, um eine Vielzahl von technologischen Problemen zu lösen, einschließlich, aber nicht beschränkt auf Computer Vision, autonomes Fahren und Navigation, Spracherkennung und Sprachverarbeitung. Computer Vision ist traditionell einer der aktivsten Forschungsbereiche für Anwendungen des maschinellen Lernens. Die Anwendungen von Computer Vision reichen von der Reproduktion menschlicher Sehfähigkeiten, wie etwa der Erkennung von Gesichtern, bis hin zur Schaffung neuer Kategorien von Sehfähigkeiten. Zum Beispiel können Computer-Vision-Anwendungen so konfiguriert werden, dass sie Schallwellen aus den Vibrationen erkennen, die in in einem Video sichtbaren Objekten induziert werden. Parallelprozessorbeschleunigtes maschinelles Lernen ermöglicht das Trainieren von Computer-Vision-Anwendungen mit einem erheblich größeren Trainingsdatensatz als bisher möglich und ermöglicht die Bereitstellung von Inferenzsystemen mit parallelen Prozessoren mit geringem Stromverbrauch.
  • Parallelprozessorbeschleunigtes maschinelles Lernen bietet autonome Fahranwendungen wie Spur- und Verkehrszeichenerkennung, Hindernisvermeidung, Navigation und Fahrsteuerung. Beschleunigte maschinelle Lerntechniken können verwendet werden, um Fahrmodelle basierend auf Datensätzen zu trainieren, die die geeigneten Reaktionen auf bestimmte Trainingseingaben definieren. Die hierin beschriebenen parallelen Prozessoren können ein schnelles Training der immer komplexer werdenden neuronalen Netze ermöglichen, die für autonome Fahrlösungen verwendet werden, und ermöglichen den Einsatz von Inferenzprozessoren mit geringer Leistung in einer mobilen Plattform, die für die Integration in autonome Fahrzeuge geeignet ist.
  • Parallelprozessorbeschleunigte tiefe neuronale Netze haben maschinelle Lernansätze zur automatischen Spracherkennung (ASR) ermöglicht. ASR umfasst die Erstellung einer Funktion, die die wahrscheinlichste linguistische Sequenz bei gegebener akustischer Eingabesequenz berechnet. Beschleunigtes maschinelles Lernen mit tiefen neuronalen Netzen hat es ermöglicht, die bisher für ASR verwendeten Hidden-Markov-Modelle (HMMs) und Gaussian Mixed Models (GMMs) zu ersetzen.
  • Parallelprozessorbeschleunigtes maschinelles Lernen kann auch verwendet werden, um die Verarbeitung natürlicher Sprache zu beschleunigen. Automatische Lernverfahren können statistische Inferenzalgorithmen verwenden, um Modelle zu erzeugen, die robust gegenüber fehlerhaften oder unbekannten Eingaben sind. Beispielhafte Prozessoranwendungen für natürliche Sprache umfassen automatische maschinelle Übersetzung zwischen menschlichen Sprachen.
  • Die für maschinelles Lernen verwendeten Parallelverarbeitungsplattformen können in Trainingsplattformen und Bereitstellungsplattformen unterteilt werden. Trainingsplattformen sind im Allgemeinen hochgradig parallel und beinhalten Optimierungen zur Beschleunigung des Multi-GPU-Einzelknoten-Trainings und des Multi-Knoten-Multi-GPU-Trainings. Beispielhafte parallele Prozessoren, die für das Training geeignet sind, umfassen die Allzweck-Grafikverarbeitungseinheit 700 von 7 . 700 und das Multi-GPU-Rechensystem 800 von FIG. 800. Im Gegensatz dazu enthalten eingesetzte Plattformen für maschinelles Lernen im Allgemeinen parallele Prozessoren mit geringerer Leistung, die für den Einsatz in Produkten wie Kameras, autonomen Robotern und autonomen Fahrzeugen geeignet sind.
  • 13 veranschaulicht ein beispielhaftes Inferenzsystem auf einem Chip (SOC) 1300 , das zum Durchführen einer Inferenz unter Verwendung eines trainierten Modells geeignet ist. Der SOC 1300 kann Verarbeitungskomponenten integrieren, einschließlich eines Medienprozessors 1302, eines Bildverarbeitungsprozessors 1304, einer GPGPU 1306 und eines Mehrkernprozessors 1308. Der SOC 1300 kann zusätzlich einen On-Chip-Speicher 1305 umfassen, der einen gemeinsam genutzten On-Chip-Datenpool ermöglichen kann, auf den jede der Verarbeitungskomponenten zugreifen kann. Die Verarbeitungskomponenten können für einen Betrieb mit geringem Stromverbrauch optimiert werden, um den Einsatz auf einer Vielzahl von Plattformen für maschinelles Lernen zu ermöglichen, einschließlich autonomer Fahrzeuge und autonomer Roboter. Beispielsweise kann eine Implementierung des SOC 1300 als Teil des Hauptsteuersystems für ein autonomes Fahrzeug verwendet werden. Wenn das SOC 1300 für die Verwendung in autonomen Fahrzeugen konfiguriert ist, ist das SOC für die Einhaltung der relevanten funktionalen Sicherheitsstandards der Einsatzgerichtsbarkeit ausgelegt und konfiguriert.
  • Während des Betriebs können der Medienprozessor 1302 und der Bildverarbeitungsprozessor 1304 zusammenarbeiten, um Computersichtvorgänge zu beschleunigen. Der Medienprozessor 1302 kann eine Dekodierung mit niedriger Latenzzeit von mehreren hochauflösenden (zB 4K, 8K) Videostreams ermöglichen. Die decodierten Videostreams können in einen Puffer im On-Chip-Speicher 1305 geschrieben werden. Der Bildprozessor 1304 kann dann das decodierte Video parsen und vorbereitende Verarbeitungsoperationen an den Frames des decodierten Videos durchführen, um die Verarbeitung der Frames unter Verwendung eines trainierten Bilderkennungsmodells vorzubereiten. Zum Beispiel kann der Bildverarbeitungsprozessor 1304 Faltungsoperationen für ein CNN beschleunigen, das verwendet wird, um eine Bilderkennung an den hochauflösenden Videodaten durchzuführen, während Back-End-Modellberechnungen von der GPGPU 1306 durchgeführt werden.
  • Der Mehrkernprozessor 1308 kann eine Steuerlogik beinhalten, um beim Sequenzieren und Synchronisieren von Datenübertragungen und gemeinsam genutzten Speicheroperationen zu unterstützen, die von dem Medienprozessor 1302 und dem Bildverarbeitungsprozessor 1304 ausgeführt werden. Der Mehrkernprozessor 1308 kann auch als Anwendungsprozessor fungieren, um Softwareanwendungen auszuführen, die die Inferenz-Rechenfähigkeit der GPGPU 1306 nutzen können. Zum Beispiel kann zumindest ein Teil der Navigations- und Fahrlogik in Software implementiert sein, die auf dem Mehrkernprozessor 1308 ausgeführt wird. Eine solche Software kann Rechenarbeitslasten direkt an die GPGPU 1306 ausgeben oder die Rechenarbeitslasten können an den Mehrkernprozessor 1308 ausgegeben werden, der zumindest einen Teil dieser Operationen an die GPGPU 1306 auslagern kann.
  • Die GPGPU 1306 kann Rechencluster beinhalten, wie etwa eine Niedrigenergiekonfiguration der Rechencluster 706A-706H innerhalb der Allzweck-Grafikverarbeitungseinheit 700. Die Rechencluster innerhalb der GPGPU 1306 können Anweisungen unterstützen, die speziell optimiert sind, um Schlußfolgerungsberechnungen in einem trainierten neuronalen Netzwerk durchzuführen. Zum Beispiel kann die GPGPU 1306 Anweisungen unterstützen, um Berechnungen mit niedriger Genauigkeit durchzuführen, wie etwa 8-Bit- und 4-Bit-Ganzzahl-Vektoroperationen.
  • Datenvorabruf in den Cache für die Grafikdatenverarbeitung
  • Im Allgemeinen wird das Vorabholen von Daten in den Cache verwendet, um den Rechenbetrieb zu verbessern, einschließlich der Leistung unter Verwendung eines Grafikprozessors. Eine Vorrichtung oder ein System, das einen Vorabruf bereitstellt, kann einen Grafik-Multiprozessor 234 umfassen, der in den 1 und 2 dargestellt ist. 2C und 2D arbeiten, um Daten aus einem oder mehreren Cache-Speichern vorab abzurufen.
  • Jedoch sorgen herkömmliche Operationen nicht in allen Fällen für effiziente Vorabrufoperationen, was zu einem Leistungsverlust in einer Grafikverarbeitungsumgebung führt.
  • In einigen Ausführungsformen sorgt eine Vorrichtung, ein System oder ein Prozess für Verbesserungen beim Datenvorabruf für die Grafikdatenverarbeitung, einschließlich eines oder mehrerer der folgenden:
    • (1) Intelligenter Prefetch zum Cache basierend auf der Cache-Trefferrate;
    • (2) Cache-Prefetch-Verbesserungen;
    • (3) Cache-Prefetch-Verbesserung, um unnötige Prefetches zu quetschen;
    • (4) Vorabrufen für den Instruktions-Cache (I-Cache); oder
    • (5) Ausnutzen von Bandbreitenquellen für Prefetching/Scrubbing.
  • 14 ist eine Darstellung des Datenvorabrufens für die Grafikdatenverarbeitung gemäß einigen Ausführungsformen. Wie veranschaulicht, beinhaltet ein Computersystem 1400 einen oder mehrere Prozessoren 1405, die eine zentrale Verarbeitung (CPU) oder ein anderes Host-Verarbeitungselement beinhalten können, und einen oder mehrere Grafik-Multiprozessoren 1410. Jeder Grafikmultiprozessor kann einen Vorabrufer 1415 enthalten, um Daten vorab abzurufen. Zusätzlich zu anderer Verarbeitung sollen der eine oder die mehreren Grafik-Multiprozessoren 1410 einen Datenvorabruf durch den Vorabrufer 1415 von einem Speicher 1420 zu einem oder mehreren Caches 1430 (die interne und externe Caches und mehrere Cache-Ebenen umfassen können, wie z als L1-, L2- und L3-Caches) zum Zweck der Grafikdatenverarbeitung.
  • In einigen Ausführungsformen soll eine Vorrichtung, ein System (wie zum Beispiel ein Computersystem) oder ein Prozess Vorabrufoperationen bereitstellen, wie in 1 und 2 dargestellt. 15A bis 19B.
  • 15A ist eine Veranschaulichung eines intelligenten Vorabrufens in den Cache gemäß einigen Ausführungsformen. In einer Vorrichtung oder einem System, wie etwa dem Computersystem 1500, sollen aktuelle Implementierungen einen Befehlsvorabruf zu einem oder mehreren L3-Caches 1525 initiieren. Es besteht die Möglichkeit für eine bessere Leistung durch die Ausführungseinheiten (EUs) eines Prozessors, die beispielsweise als eine erste Ausführungseinheit 1510 und eine zweite Ausführungseinheit 1515 dargestellt sind, durch Vorabrufen bis zum L1-Cache 1520. Das Vorabrufen in den L1-Cache 1520 kann jedoch ein Cache-Thrashing verursachen, bei dem das Zugriffsmuster zu einer Konkurrenz um dieselben Cache-Zeilen im L1-Cache führt, und somit zu einer häufigen Räumung von Daten und zu hohen Cache-Fehltreffern. Somit verringert das Thrashen des L1-Cache 1520 die Leistung des Rechensystems 1500.
  • In einigen Ausführungsformen besteht eine verbesserte Vorrichtung, ein verbessertes System oder ein verbesserter Prozess darin, ein intelligentes Vorauslesen von Daten 1530 bereitzustellen, wobei die Daten in den L1-Cache 1520 vorausgelesen werden, wenn bestimmt wird, dass die Trefferrate (oder Trefferquote) über eine bestimmte Abtastperiode 1535 niedrig ist. B. eine Trefferquote unter einem bestimmten Schwellenwert. Die niedrige Trefferrate ermöglicht dadurch eine effiziente Datenräumung aus dem L1-Cache und ermöglicht somit ein Vorabrufen bis hin zum L1-Cache. Wenn jedoch die Trefferrate über die Abtastperiode gleich oder größer als der Schwellenwert ist, kann daraus geschlossen werden, dass das Vorabrufen in den L1-Cache 1520 ineffizient wäre und daher vorab abgerufene Daten nur im L3-Cache verbleiben würden (s) 1525.
  • 15B ist ein Flussdiagramm zum Veranschaulichen eines Prozesses zum intelligenten Vorabrufen zum Cache gemäß einigen Ausführungsformen. In einigen Ausführungsformen beinhaltet ein Prozess zum intelligenten Vorabrufen das Initiieren einer Operation in einer Rechenumgebung 1550. Der Prozess sorgt dann für das Durchführen von Caching 1555 , wobei das Caching das Caching in mindestens einem L1-Cache und einem L3-Cache umfasst, wie etwa dem L1-Cache 1520 und dem L3-Cache 1525 , die in 1 dargestellt sind. 15A.
  • In einigen Ausführungsformen beinhaltet der Prozess das Messen oder Bestimmen einer Trefferrate (oder einer Trefferquote oder eines anderen ähnlichen Maßes von Cache-Treffern) über einen bestimmten Abtastzeitraum 1560. Bei einer Operation, die zu einem Befehlsvorabruf 1565 führt, wird bestimmt, ob die Trefferrate kleiner als ein bestimmter Schwellenwert 1570 ist. Wenn dies der Fall ist, kann ein intelligenter Befehlsvorabruf zum L1-Cache 1575 durchgeführt werden, da die niedrige Trefferrate eine geringe Wahrscheinlichkeit eines Cache-Thrashings im L1-Cache anzeigt. Wenn die Trefferrate jedoch stattdessen gleich oder größer als der Schwellenwert ist, wird der Befehlsvorabruf auf den L3-Cache 1580 beschränkt, um ein Cache-Thrashing im L1-Cache zu vermeiden.
  • 16A ist eine Darstellung einer Cache-Vorabrufverbesserung, um unnötige Vorabrufe gemäß einigen Ausführungsformen zu beseitigen. Das Vorabrufen von Cache-Daten kann zu einer erheblichen Verbesserung der Systemleistung führen. Es gibt jedoch bestimmte unnötige Vorabrufe, die nicht zur Leistung beitragen. Insbesondere liefern duplizierte Vorabrufe mit derselben Adresse keine zusätzlichen Cache-Informationen, und Vorabrufe, die sich auf Daten beziehen, die nicht zwischengespeichert werden können, führen zu keinen zwischengespeicherten Daten. Somit sind diese Vorabrufe unnötig oder unproduktiv und können eliminiert werden, ohne die Cache-Operation negativ zu beeinflussen.
  • In einigen Ausführungsformen soll eine Vorrichtung, ein System oder ein Prozess unnötige Vorabrufe eliminieren. Insbesondere soll die Vorrichtung, das System oder der Prozess Vorabrufe eliminieren (dh quetschen, leeren oder löschen), von denen erkannt wird, dass sie doppelte Adressen eines anderen Vorabrufs aufweisen oder auf nicht zwischenspeicherbare Daten gerichtet sind. Die Eliminierung dieser unnötigen Vorabrufe kann dazu beitragen, den Stromverbrauch in einem Computersystem zu reduzieren.
  • Wie in FIG. In 16A stellen mehrere DSS, gezeigt als DSS 0, DSS 1, DSS 2 und DSS 3, Vorabrufe für einen Cache 1600 bereit, die als Speicherung von Tags und zwischengespeicherten Daten 1615 gezeigt gezeigt sind. In einigen Ausführungsformen umfasst eine Vorrichtung, ein System oder ein Prozess eine Schnittstelle 1610 oder ein anderes Element, um die Vorabrufe auszuwerten und unnötige Vorabrufe zu eliminieren. Insbesondere vergleicht die Schnittstelle 1610 die vom DSS empfangenen Vorabrufe, um jegliche Vorabrufe mit einer doppelten Adresse zu erkennen, und um einen oder mehrere Vorabrufe mit der doppelten Adresse so zu unterdrücken, dass nur ein einzelner Vorabruf mit der Adresse bereitgestellt wird. Außerdem soll die Schnittstelle die Vorabrufe auswerten, um zu bestimmen, ob ein Vorabruf auf Daten gerichtet ist, die nicht zwischenspeicherbar sind, und solche Anforderungen fallen lassen.
  • 16B ist ein Flussdiagramm zum Veranschaulichen eines Prozesses zum Eliminieren unnötiger Vorabrufe gemäß einigen Ausführungsformen. Wie in FIG. In 16B umfasst ein Prozess eine Systemverarbeitung einschließlich Caching von Daten 1650 , wobei dies eine Verarbeitung mit einem Computersystem wie dem in 1 veranschaulichten Computersystem 100 umfassen kann. 1. Der Prozess kann das Empfangen von Vorabrufen von einer oder mehreren Quellen an einer Schnittstelle 1655 umfassen, wobei die Schnittstelle die in 1 dargestellte Schnittstelle 1610 sein kann. 16A. In einigen Ausführungsformen werden die Vorabrufe an der Schnittstelle 1660 ausgewertet, wobei eine solche Auswertung die Eliminierung unproduktiver Vorabrufe ermöglicht.
  • Der Prozess fährt mit einer Bestimmung fort, ob der Vorabruf nicht zwischenspeicherbar ist 1665. Wenn dies der Fall ist, muss der Vorabruf beseitigt werden 1680 und der Prozess wird mit der Systemverarbeitung 1650 fortgesetzt. Wenn nicht, wird weiter bestimmt, ob der Vorabruf eine Adresse hat, die ein Duplikat eines anderen Vorabrufs 1670 ist, und wenn ja, werden ein oder mehrere doppelte Vorabrufe eliminiert 1680. Wenn nicht, dann darf der Vorabruf fortfahren 1675.
  • Während die Bestimmungen 1665 und 1670 zu Veranschaulichungszwecken in einer bestimmten Reihenfolge dargestellt sind, sind Ausführungsformen nicht auf dieses Beispiel beschränkt. Die Bestimmungen können je nach Implementierung in unterschiedlicher Reihenfolge oder gleichzeitig oder überlappend erfolgen. Ferner können weitere Bestimmungen enthalten sein, um andere unproduktive Vorabrufe zu identifizieren, die beseitigt werden können, bevor solche Vorabrufe verarbeitet werden.
  • 17 ist eine Darstellung eines spekulativen Vorabrufs gemäß einigen Ausführungsformen. Der Befehlsvorabruf basiert herkömmlicherweise darauf, dass ein Thread einen Befehl ausführt und an diesem Punkt die nächsten N Cache-Zeilen vorholt. Bei diesem Prozess können jedoch Probleme mit der Latenz von Prefetches auftreten.
  • In einigen Ausführungsformen bietet eine Vorrichtung, ein System oder ein Prozess Unterstützung für einen leistungsfähigeren spekulativen Befehlsvorabruf mit einem Hardware-Präprozessor. In einigen Ausführungsformen verwendet eine Ausführungseinheit (EU) 1710 eines Prozessors einen Hardware-Präprozessor 1715 , der Zugriff auf eine Tabelle von IP-(Internet Protocol)-Adressen 1720 hat, die der Kernel verwendet.
  • In einigen Ausführungsformen soll der Hardware-Präprozessor 1715 mit dem Vorabrufen von IP-Adressen vor der Thread-Ausführung beginnen, was die Abruflatenz erheblich reduzieren kann. In einigen Ausführungsformen ist der Hardware-Präprozessor 1715 ein Hardware-Element, das von mehreren EUs eines Prozessors gemeinsam genutzt werden kann.
  • In einigen Ausführungsformen wird die Tabelle von IP-Adressen 1720 geladen entweder basierend auf Software, die Sequenzen von IP-Adressen erzeugt, die der Kernel verwendet, oder basierend auf dem Erzeugen eines Schritts, der verwendet werden kann, um die IP-Adressen zu identifizieren und zu laden.
  • 18 ist eine Darstellung des Vorabrufens für einen Befehlscache gemäß einigen Ausführungsformen. In einigen Ausführungsformen muss der Vorabruf direkt in den I-Cache (Befehlscache) erfolgen. Bei diesem Vorgang:
    • (i) Der Anwendungstreiber kennt den nächsten Kernel.
    • (ii) Es gibt einen Befehl zum Laden von Blockbefehlen in den 1-Code (Befehlscode).
    • (iii) Ein Prefetch wird für den nächsten Kernel ausgegeben, wenn die Ausführung des aktuellen Kernels gestartet wird.
  • In einigen Ausführungsformen befasst sich dieser Prozess mit dem Problem von Kerneln, die kurz laufen, aber große Befehlszahlen aufweisen. Derzeit wird der Prefetch ausgeführt, während der aktuelle Kernel ausgeführt wird, was unter solchen Umständen möglicherweise zu einem Stillstand führt.
  • In einigen Ausführungsformen, wie in FIG. In 18 kommuniziert ein Hardware-Prefetcher mit einer Befehlswarteschlange/einem Ring 1800 durch Folgendes:
    • a) Eine Adressregisterwarteschlange 1810 (Ring → Prefetcher), die so gezeigt ist, dass sie vom Coderaum 1820 empfängt.
    • b) Ein Prefetcher 1830 soll die Befehlswarteschlange/den Ring 1800 lesen (Prefetcher → Ring).
  • 19A ist eine Darstellung der Ausnutzung von Bandbreitenquellen zum Vorabrufen/Scrubbing gemäß einigen Ausführungsformen. 19A veranschaulicht eine Rechenoperation 1910, einen L3-Cache 1920 und einen Speicher 1930. Im Betrieb, wenn die Rechenoperation 1910 aus dem L3-Cache 1920 heraus arbeitet, ist der Speicher 1930 im Leerlauf. In einigen Ausführungsformen soll unter diesen Umständen eine Vorrichtung, ein System oder ein Prozess die Speicherverbindung für den Speicher 1930 verwenden, um eine Speicherbereinigung durchzuführen, um die Speicherbandbreite aktiv zu halten. In einigen Ausführungsformen dient eine Vorrichtung, ein System oder ein Prozess dazu, den Betrieb aufrechtzuerhalten, um die L3- und Speicheraktivität zu messen und Aktivitäten (Vorabruf und Scrubbing) zumindest teilweise basierend auf der Bestimmung der L3-Cache- und Speicheraktivität auszulösen.
  • 19B ist eine Darstellung der Aktivität des L3-Cache und der Speicheraktivität, die bei der Ausnutzung von Bandbreitenquellen zum Vorabholen/Scrubbing bei einigen Ausführungsformen verwendet werden sollen.
  • 20 ist eine Darstellung einer Vorrichtung oder eines Systems zum Bereitstellen eines Datenvorabrufens für die Grafikdatenverarbeitung gemäß einigen Ausführungsformen. Wie in FIG. In 20 umfasst ein Computersystem 2000 , wie beispielsweise das in 1 dargestellte System 100 , einen oder mehrere Prozessoren 2005 für die Verarbeitung von Daten, wie beispielsweise einen oder mehrere Prozessoren 102 und einen oder mehrere Parallelprozessor(en) 112 mit Schaltungen, die für die Grafik- und Videoverarbeitung optimiert sind, einschließlich beispielsweise Videoausgabeschaltungen, und die eine Grafikverarbeitungseinheit (GPU) bilden, wie in gezeigt. Das Computersystem 2000 beinhaltet ferner einen Speicher 2010 zum Speichern von Daten und ein oder mehrere Elemente zum Übertragen von Daten, wie etwa den Schnittstellenbus 2015 und den Transceiver 2020. In einigen Ausführungsformen ist der Transceiver 2020 ein drahtloser Transceiver mit einer oder mehreren Antennen 2025 zum Senden und Empfangen von Daten, wobei die Antennen 2025 eine Dipolantenne oder eine andere Antennenstruktur beinhalten können.
  • In einigen Ausführungsformen umfasst das Computersystem 2000 ferner Vorabrufen 2030, um verbesserte Vorabrufoperationen bereitzustellen, wie in 1 und 2 dargestellt. 15A bis 19B.
  • Systemübersicht
  • 21 ist ein Blockdiagramm eines Verarbeitungssystems 2100 gemäß einer Ausführungsform. Das System 2100 kann in einem Einzelprozessor-Desktop-System, einem Mehrprozessor-Workstation-System oder einem Server-System mit einer großen Anzahl von Prozessoren 2102 oder Prozessorkernen 2107 verwendet werden. In einer Ausführungsform ist das System 2100 eine Verarbeitungsplattform, die in eine integrierte System-on-a-Chip-(SoC)-Schaltung zur Verwendung in mobilen, tragbaren oder eingebetteten Geräten wie z oder drahtlose Konnektivität zu einem lokalen oder Weitverkehrsnetz.
  • In einer Ausführungsform kann das System 2100 umfassen, gekoppelt mit oder integriert sein in: eine serverbasierte Spielplattform; eine Spielkonsole, einschließlich einer Spiel- und Medienkonsole; eine mobile Spielkonsole, eine Handheld-Spielekonsole oder eine Online-Spielekonsole. In einigen Ausführungsformen ist das System 2100 Teil eines Mobiltelefons, Smartphones, Tablet-Computergeräts oder eines mobilen, mit dem Internet verbundenen Geräts, wie beispielsweise eines Laptops mit geringer interner Speicherkapazität. Das Verarbeitungssystem 2100 kann auch umfassen, damit gekoppelt werden oder darin integriert sein: ein tragbares Gerät, wie beispielsweise ein tragbares Smartwatch-Gerät; Smart Eyewear oder Kleidung, die mit Augmented Reality (AR)- oder Virtual Reality (VR)-Funktionen ausgestattet sind, um visuelle, akustische oder taktile Ausgaben bereitzustellen, um visuelle, Audio- oder taktile Erfahrungen in der realen Welt zu ergänzen oder anderweitig Text, Audio, Grafiken, Videos, holografische Bilder bereitzustellen oder Video- oder taktiles Feedback; andere Augmented Reality (AR)-Geräte; oder ein anderes Virtual-Reality-Gerät (VR). In einigen Ausführungsformen umfasst das Verarbeitungssystem 2100 ein Fernsehgerät oder eine Set-Top-Box-Vorrichtung oder ist ein Teil davon.
  • In einigen Ausführungsformen kann das System 2100 ein selbstfahrendes Fahrzeug wie einen Bus, einen Sattelschlepper, ein Auto, einen Motor oder ein Elektrofahrrad, ein Flugzeug oder ein Segelflugzeug (oder eine beliebige Kombination davon) beinhalten, mit einem selbstfahrenden Fahrzeug koppeln oder darin integriert sein. Das selbstfahrende Fahrzeug kann das System 2100 verwenden, um die um das Fahrzeug herum erfasste Umgebung zu verarbeiten.
  • In einigen Ausführungsformen umfassen der eine oder die mehreren Prozessoren 2102 jeweils einen oder mehrere Prozessorkerne 2107 zum Verarbeiten von Anweisungen, die, wenn sie ausgeführt werden, Operationen für System- oder Benutzersoftware ausführen. In einigen Ausführungsformen ist mindestens einer des einen oder der mehreren Prozessorkerne 2107 dazu konfiguriert, einen bestimmten Befehlssatz 2109 zu verarbeiten. In einigen Ausführungsformen kann der Befehlssatz 2109 das Computing Instruction Set Computing (CISC), das Reduced Instruction Set Computing (RISC) oder das Rechnen über ein Very Long Instruction Word (VLIW) erleichtern. Ein oder mehrere Prozessorkerne 2107 können einen anderen Befehlssatz 2109 verarbeiten, der Befehle enthalten kann, um die Emulation anderer Befehlssätze zu erleichtern. Der Prozessorkern 2107 kann auch andere Verarbeitungsvorrichtungen umfassen, wie beispielsweise einen digitalen Signalprozessor (DSP).
  • In einigen Ausführungsformen beinhaltet der Prozessor 2102 Cache-Speicher 2104. Abhängig von der Architektur kann der Prozessor 2102 einen einzelnen internen Cache oder mehrere Ebenen des internen Caches aufweisen. In einigen Ausführungsformen wird der Cache-Speicher von verschiedenen Komponenten des Prozessors 2102 gemeinsam genutzt. In einigen Ausführungsformen verwendet der Prozessor 2102 auch einen externen Cache (z. B. einen Level-3 (L3) Cache oder Last Level Cache (LLC)) (nicht gezeigt), der unter Verwendung bekannter Cache-Kohärenztechniken von den Prozessorkernen 2107 gemeinsam genutzt werden kann. Eine Registerdatei 2106 kann zusätzlich im Prozessor 2102 enthalten sein und kann verschiedene Arten von Registern zum Speichern verschiedener Arten von Daten enthalten (zB Ganzzahlregister, Gleitkommaregister, Statusregister und ein Befehlszeigerregister). Einige Register können Allzweckregister sein, während andere Register spezifisch für das Design des Prozessors 2102 sein können.
  • In einigen Ausführungsformen sind ein oder mehrere Prozessor(en) 2102 mit einem oder mehreren Schnittstellenbussen 2110 gekoppelt, um Kommunikationssignale, wie etwa Adress-, Daten- oder Steuersignale, zwischen dem Prozessor 2102 und anderen Komponenten im System 2100 zu übertragen. Der Schnittstellenbus 2110 kann in einer Ausführungsform ein Prozessorbus sein, wie beispielsweise eine Version des Direct Media Interface (DMI)-Busses. Prozessorbusse sind jedoch nicht auf den DMI-Bus beschränkt und können einen oder mehrere Peripheral Component Interconnect-Busse (zB PCI, PCI Express), Speicherbusse oder andere Typen von Schnittstellenbussen umfassen. In einer Ausführungsform beinhalten der/die Prozessor(en) 2102 einen integrierten Speichercontroller 2116 und einen Plattformcontroller-Hub 2130. Der Speichercontroller 2116 erleichtert die Kommunikation zwischen einem Speichergerät und anderen Komponenten des Systems 2100, während der Plattformcontroller-Hub (PCH) 2130 Verbindungen zu E/A-Geräten über einen lokalen E/A-Bus bereitstellt.
  • Die Speichervorrichtung 2120 kann eine dynamische Speichervorrichtung mit wahlfreiem Zugriff (DRAM), eine statische Vorrichtung mit wahlfreiem Zugriff (SRAM), eine Flash-Speichervorrichtung, eine Phasenänderungsspeichervorrichtung oder eine andere Speichervorrichtung mit geeigneter Leistung sein, um als Prozessspeicher zu dienen. In einer Ausführungsform kann die Speichervorrichtung 2120 als Systemspeicher für das System 2100 arbeiten, um Daten 2122 und Anweisungen 2121 zur Verwendung zu speichern, wenn der eine oder die mehreren Prozessoren 2102 eine Anwendung oder einen Prozess ausführen. Der Speichercontroller 2116 ist auch mit einem optionalen externen Grafikprozessor 2118 gekoppelt, der mit dem einen oder den mehreren Grafikprozessoren 2108 in den Prozessoren 2102 kommunizieren kann, um Grafik- und Medienoperationen durchzuführen. In einigen Ausführungsformen können Grafik-, Medien- und/oder Rechenoperationen durch einen Beschleuniger 2112 unterstützt werden, der ein Coprozessor ist, der konfiguriert werden kann, um einen spezialisierten Satz von Grafik-, Medien- oder Rechenoperationen auszuführen. In einer Ausführungsform ist der Beschleuniger 2112 beispielsweise ein Matrixmultiplikationsbeschleuniger, der verwendet wird, um maschinelles Lernen oder Rechenoperationen zu optimieren. In einer Ausführungsform ist der Beschleuniger 2112 ein Strahlverfolgungsbeschleuniger, der verwendet werden kann, um Strahlverfolgungsoperationen zusammen mit dem Grafikprozessor 2108 durchzuführen. In einigen Ausführungsformen kann sich eine Anzeigevorrichtung 2111 mit dem/den Prozessor(en) 2102 verbinden. Die Anzeigevorrichtung 2111 kann eine oder mehrere von einer internen Anzeigevorrichtung sein, wie in einer mobilen elektronischen Vorrichtung oder einer Laptopvorrichtung oder einer externen Anzeigevorrichtung, die über eine Anzeigeschnittstelle (zB DisplayPort usw.) angeschlossen ist. In einer Ausführungsform kann die Anzeigevorrichtung 2111 ein Head-Mounted-Display (HMD) sein, wie beispielsweise eine stereoskopische Anzeigevorrichtung zur Verwendung in Virtual-Reality-(VR-)Anwendungen oder Augmented-Reality-(AR-)Anwendungen.
  • In einigen Ausführungsformen ermöglicht der Plattform-Controller-Hub 2130 den Peripheriegeräten, sich über einen Hochgeschwindigkeits-E/A-Bus mit der Speichervorrichtung 2120 und dem Prozessor 2102 zu verbinden. Die E/A-Peripheriegeräte umfassen, sind aber nicht beschränkt auf, einen Audiocontroller 2146, einen Netzwerkcontroller 2134, eine Firmware-Schnittstelle 2128, einen drahtlosen Transceiver 2126, Berührungssensoren 2125, eine Datenspeichervorrichtung 2124 (z. B. nichtflüchtiger Speicher, flüchtiger Speicher, Festplatte, Flash-Speicher, NAND, 3D NAND, 3D XPoint usw.). Die Datenspeichervorrichtung 2124 kann über eine Speicherschnittstelle (zB SATA) oder über einen Peripheriebus, wie zB einen Peripheral Component Interconnect Bus (zB PCI, PCI Express) verbunden werden. Die Berührungssensoren 2125 können Berührungsbildschirmsensoren, Drucksensoren oder Fingerabdrucksensoren umfassen. Der drahtlose Transceiver 2126 kann ein Wi-Fi-Transceiver, ein Bluetooth-Transceiver oder ein Mobilfunknetz-Transceiver wie etwa ein 3G-, 4G-, 5G- oder Long Term Evolution (LTE)-Transceiver sein. Die Firmware-Schnittstelle 2128 ermöglicht die Kommunikation mit der Systemfirmware und kann beispielsweise eine vereinheitlichte erweiterbare Firmware-Schnittstelle (UEFI) sein. Der Netzwerkcontroller 2134 kann eine Netzwerkverbindung zu einem drahtgebundenen Netzwerk ermöglichen. In einigen Ausführungsformen ist ein Hochleistungsnetzwerkcontroller (nicht gezeigt) mit dem Schnittstellenbus 2110 gekoppelt. Der Audiocontroller 2146 ist in einer Ausführungsform ein Mehrkanal-High-Definition-Audiocontroller. In einer Ausführungsform umfasst das System 2100 einen optionalen Legacy-I/O-Controller 2140 zum Koppeln von Legacy-Geräten (z. B. Personal System 2 (PS/2)) an das System. Der Plattform-Controller-Hub 2130 kann auch mit einem oder mehreren Universal-Serial-Bus-(USB)-Controllern 2142 verbunden sein, um Eingabegeräte wie etwa Kombinationen aus Tastatur und Maus 2143, eine Kamera 2144 oder andere USB-Eingabegeräte zu verbinden.
  • Es versteht sich, dass das gezeigte System 2100 beispielhaft und nicht einschränkend ist, da andere Typen von Datenverarbeitungssystemen, die anders konfiguriert sind, ebenfalls verwendet werden können. Zum Beispiel kann eine Instanz des Speichercontrollers 2116 und des Plattformcontroller-Hubs 2130 in einen diskreten externen Grafikprozessor, wie etwa den externen Grafikprozessor 2118, integriert sein. In einer Ausführungsform können sich der Plattformcontroller-Hub 2130 und/oder der Speichercontroller 2116 außerhalb des einen oder der mehreren Prozessor(en) 2102 befinden. Zum Beispiel kann das System 2100 einen externen Speichercontroller 2116 und einen Plattformcontroller-Hub 2130 beinhalten, die als ein Speichercontroller-Hub und ein Peripheriecontroller-Hub innerhalb eines Systemchipsatzes konfiguriert sein können, der mit dem/den Prozessor(en) 2102 kommuniziert.
  • Beispielsweise können Leiterplatten („Schlitten“) verwendet werden, auf denen Komponenten wie CPUs, Speicher und andere Komponenten platziert werden, die für eine erhöhte Wärmeleistung ausgelegt sind. In einigen Beispielen befinden sich Verarbeitungskomponenten wie etwa die Prozessoren auf einer Oberseite eines Schlittens, während sich nahe Speicher wie etwa DIMMs auf einer Unterseite des Schlittens befinden. Als Ergebnis des verbesserten Luftstroms, der durch diese Konstruktion bereitgestellt wird, können die Komponenten bei höheren Frequenzen und Leistungspegeln als in typischen Systemen arbeiten, wodurch die Leistung erhöht wird. Darüber hinaus sind die Schlitten so konfiguriert, dass sie blind mit Strom- und Datenkommunikationskabeln in einem Rack zusammenpassen, wodurch ihre Fähigkeit verbessert wird, schnell entfernt, aufgerüstet, neu installiert und/oder ersetzt zu werden. In ähnlicher Weise sind einzelne Komponenten, die sich auf den Schlitten befinden, wie Prozessoren, Beschleuniger, Arbeitsspeicher und Datenspeicherlaufwerke, aufgrund ihres größeren Abstands leicht aufrüstbar. In der veranschaulichenden Ausführungsform umfassen die Komponenten zusätzlich Hardware-Bestätigungsmerkmale, um ihre Authentizität zu beweisen.
  • Ein Rechenzentrum kann eine einzelne Netzwerkarchitektur („Fabric“) verwenden, die mehrere andere Netzwerkarchitekturen einschließlich Ethernet und Omni-Path unterstützt. Die Schlitten können über Lichtwellenleiter an Switches gekoppelt werden, die eine höhere Bandbreite und geringere Latenz bieten als typische Twisted-Pair-Kabel (zB Kategorie 5, Kategorie 5e, Kategorie 6 usw.). Aufgrund der hohen Bandbreite, der Verbindungen mit geringer Latenz und der Netzwerkarchitektur kann das Rechenzentrum im Einsatz Ressourcen wie Speicher, Beschleuniger (z. B. GPUs, Grafikbeschleuniger, FPGAs, ASICs, neuronale Netze und/oder Beschleuniger für künstliche Intelligenz) usw.) und Datenspeicherlaufwerke, die physisch disaggregiert sind, und sie nach Bedarf für Rechenressourcen (z. B. Prozessoren) bereitstellen, wodurch die Rechenressourcen auf die gepoolten Ressourcen zugreifen können, als ob sie lokal wären.
  • Eine Stromversorgung oder Quelle kann dem System 2100 oder jeder hierin beschriebenen Komponente oder jedem System Spannung und/oder Strom bereitstellen. In einem Beispiel umfasst die Stromversorgung einen Wechselstrom-zu-Gleichstrom-(Wechselstrom-zu-Gleichstrom)-Adapter zum Einstecken in eine Wandsteckdose. Ein solcher Wechselstrom kann eine erneuerbare Energiequelle (zB Solarenergie) sein. In einem Beispiel umfasst die Stromquelle eine Gleichstromquelle, wie beispielsweise einen externen Wechselstrom-Gleichstrom-Wandler. In einem Beispiel umfasst die Stromquelle oder das Netzteil eine drahtlose Ladehardware, um über die Nähe zu einem Ladefeld aufzuladen. In einem Beispiel kann die Stromquelle eine interne Batterie, eine Wechselstromversorgung, eine bewegungsbasierte Stromversorgung, eine Solarstromversorgung oder eine Brennstoffzellenquelle umfassen.
  • 22 ist ein Blockdiagramm einer Ausführungsform eines Prozessors 2200 mit einem oder mehreren Prozessorkernen 2202A-2202N, einem integrierten Speichercontroller 2214 und einem integrierten Grafikprozessor 2208. Diese Elemente von 22 mit den gleichen Bezugszeichen (oder Namen) wie die Elemente jeder anderen Figur hierin können auf irgendeine Weise ähnlich der an anderer Stelle hierin beschriebenen funktionieren oder funktionieren, sind aber nicht darauf beschränkt. Der Prozessor 2200 kann zusätzliche Kerne bis einschließlich des zusätzlichen Kerns 2202N enthalten, der durch die gestrichelten Kästen dargestellt wird. Jeder der Prozessorkerne 2202A - 2202N umfasst eine oder mehrere interne Cache-Einheiten 2204A - 2204N. In einigen Ausführungsformen hat jeder Prozessorkern auch Zugriff auf eine oder mehrere gemeinsam genutzte zwischengespeicherte Einheiten 2206.
  • Die internen Cache-Einheiten 2204A-2204N und die gemeinsam genutzten Cache-Einheiten 2206 repräsentieren eine Cache-Speicherhierarchie innerhalb des Prozessors 2200. Die Cachespeicherhierarchie kann mindestens eine Ebene von Befehls- und Datencache innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen von gemeinsam genutztem Cache mittlerer Ebene umfassen, wie beispielsweise Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4 (). ) oder andere Cache-Ebenen, wobei die höchste Cache-Ebene vor dem externen Speicher als LLC klassifiziert wird. In einigen Ausführungsformen hält die Cache-Kohärenzlogik die Kohärenz zwischen den verschiedenen Cache-Einheiten 2206 und 2204A - 2204N aufrecht.
  • In einigen Ausführungsformen kann der Prozessor 2200 auch einen Satz von einer oder mehreren Buscontrollereinheiten 2216 und einem Systemagentenkern 2210 beinhalten. Die eine oder mehreren Bus-Controller-Einheiten 2216 verwalten einen Satz von Peripheriebussen, wie beispielsweise einen oder mehrere PCI- oder PCI-Express-Busse. Der Systemagentenkern 2210 stellt Verwaltungsfunktionalität für die verschiedenen Prozessorkomponenten bereit. In einigen Ausführungsformen umfasst der Systemagentenkern 2210 einen oder mehrere integrierte Speichercontroller 2214 , um den Zugriff auf verschiedene externe Speichervorrichtungen (nicht gezeigt) zu verwalten.
  • In einigen Ausführungsformen umfassen einer oder mehrere der Prozessorkerne 2202A - 2202N Unterstützung für gleichzeitiges Multithreading. In einer solchen Ausführungsform umfasst der Systemagentenkern 2210 Komponenten zum Koordinieren und Betreiben der Kerne 2202A - 2202N während der Multithread-Verarbeitung. Der Systemagentenkern 2210 kann zusätzlich eine Leistungssteuereinheit (PCU) beinhalten, die Logik und Komponenten beinhaltet, um den Leistungszustand der Prozessorkerne 2202A-2202N und des Grafikprozessors 2208 zu regulieren.
  • In einigen Ausführungsformen umfasst der Prozessor 2200 zusätzlich den Grafikprozessor 2208 , um Grafikverarbeitungsoperationen auszuführen. In einigen Ausführungsformen ist der Grafikprozessor 2208 mit dem Satz von gemeinsam genutzten Cache-Einheiten 2206 und dem Systemagentenkern 2210 gekoppelt, einschließlich des einen oder der mehreren integrierten Speichercontroller 2214. In einigen Ausführungsformen umfasst der Systemagentenkern 2210 auch einen Anzeigecontroller 2211 , um die Grafikprozessorausgabe an eine oder mehrere gekoppelte Anzeigen zu steuern. In einigen Ausführungsformen kann der Anzeigecontroller 2211 auch ein separates Modul sein, das über mindestens eine Verbindung mit dem Grafikprozessor gekoppelt ist, oder kann in den Grafikprozessor 2208 integriert sein.
  • In einigen Ausführungsformen wird eine ringbasierte Verbindungseinheit 2212 verwendet, um die internen Komponenten des Prozessors 2200 zu koppeln. Es kann jedoch auch eine alternative Verbindungseinheit verwendet werden, wie beispielsweise eine Punkt-zu-Punkt-Verbindung, eine geschaltete Verbindung oder andere Techniken, einschließlich in der Technik wohlbekannter Techniken. In einigen Ausführungsformen ist der Grafikprozessor 2208 über eine E/A-Verbindung 2213 mit der Ringverbindung 2212 gekoppelt.
  • Die beispielhafte E/A-Verbindung 2213 stellt mindestens eine von mehreren Varianten von E/A-Verbindungen dar, einschließlich einer paketinternen E/A-Verbindung, die die Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 2218 wie etwa einem eDRAM-Modul erleichtert. In einigen Ausführungsformen kann jeder der Prozessorkerne 2202A - 2202N und der Grafikprozessor 2208 eingebettete Speichermodule 2218 als gemeinsam genutzten Last-Level-Cache verwenden.
  • In einigen Ausführungsformen sind die Prozessorkerne 2202A - 2202N homogene Kerne, die dieselbe Befehlssatzarchitektur ausführen. In einer anderen Ausführungsform sind die Prozessorkerne 2202A - 2202N im Hinblick auf die Befehlssatzarchitektur (ISA) heterogen, wobei einer oder mehrere der Prozessorkerne 2202A - 2202N einen ersten Befehlssatz ausführen, während mindestens einer der anderen Kerne eine Teilmenge der ersten Befehlssatz oder einen anderen Befehlssatz. In einer Ausführungsform sind die Prozessorkerne 2202A - 2202N hinsichtlich der Mikroarchitektur heterogen, wobei ein oder mehrere Kerne mit einem relativ höheren Stromverbrauch mit einem oder mehreren Leistungskernen mit einem geringeren Stromverbrauch gekoppelt sind. In einer Ausführungsform sind die Prozessorkerne 2202A - 2202N hinsichtlich der Rechenfähigkeit heterogen. Außerdem kann der Prozessor 2200 auf einem oder mehreren Chips oder als integrierter SoC-Schaltkreis mit den dargestellten Komponenten zusätzlich zu anderen Komponenten implementiert werden.
  • 23 ist ein Blockdiagramm eines Grafikprozessors 2300, der eine diskrete Grafikverarbeitungseinheit sein kann oder ein Grafikprozessor sein kann, der in eine Vielzahl von Verarbeitungskernen integriert ist, oder andere Halbleitervorrichtungen, wie beispielsweise, aber nicht beschränkt auf Speichervorrichtungen oder Netzwerkschnittstellen . In einigen Ausführungsformen kommuniziert der Grafikprozessor über eine speicherabgebildete E/A-Schnittstelle mit Registern auf dem Grafikprozessor und mit Befehlen, die in den Prozessorspeicher platziert werden. In einigen Ausführungsformen umfasst der Grafikprozessor 2300 eine Speicherschnittstelle 2314 zum Zugreifen auf den Speicher. Die Speicherschnittstelle 2314 kann eine Schnittstelle zum lokalen Speicher, einem oder mehreren internen Caches, einem oder mehreren gemeinsam genutzten externen Caches und/oder zum Systemspeicher sein.
  • In einigen Ausführungsformen beinhaltet der Grafikprozessor 2300 auch eine Anzeigesteuerung 2302, um Anzeigeausgabedaten an eine Anzeigevorrichtung 2318 zu treiben. Die Anzeigesteuerung 2302 umfasst Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und Zusammensetzung mehrerer Schichten von Video- oder Benutzeroberflächenelementen. Das Anzeigegerät 2318 kann ein internes oder externes Anzeigegerät sein. In einer Ausführungsform ist die Anzeigevorrichtung 2318 eine am Kopf befestigte Anzeigevorrichtung, wie beispielsweise eine Anzeigevorrichtung für virtuelle Realität (VR) oder eine Anzeigevorrichtung für erweiterte Realität (AR). In einigen Ausführungsformen umfasst der Grafikprozessor 2300 eine Videocodec-Engine 2306 zum Codieren, Decodieren oder Transcodieren von Medien in, von oder zwischen einem oder mehreren Mediencodierungsformaten, einschließlich, aber nicht beschränkt auf Moving Picture Experts Group (MPEG)-Formate wie MPEG-2, Advanced Video Coding (AVC)-Formate wie H.264/MPEG-4 AVC, H.265/HEVC, Alliance for Open Media (AOMedia) VP8, VP9 sowie die Society of Motion Picture & Television Engineers (SMPTE) 421M/VC-1 und Joint Photographic Experts Group (JPEG)-Formate wie JPEG und Motion JPEG (MJPEG)-Formate.
  • In einigen Ausführungsformen umfasst der Grafikprozessor 2300 eine Blockbildübertragungs-(BLIT)-Engine 2304 , um zweidimensionale (2D) Rasterisierungsoperationen durchzuführen, einschließlich beispielsweise Bitgrenzen-Blockübertragungen. In einer Ausführungsform werden jedoch 2D-Grafikoperationen unter Verwendung einer oder mehrerer Komponenten der Grafikverarbeitungs-Engine (GPE) 2310 ausgeführt. In einigen Ausführungsformen ist das GPE 2310 eine Rechenmaschine zum Durchführen von Grafikoperationen, einschließlich dreidimensionaler (3D) Grafikoperationen und Medienoperationen.
  • In einigen Ausführungsformen umfasst das GPE 2310 eine 3D-Pipeline 2312 zum Durchführen von 3D-Operationen, wie etwa Rendern dreidimensionaler Bilder und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 3D-Grundformen (zB Rechteck, Dreieck usw.) einwirken. Die 3D-Pipeline 2312 beinhaltet programmierbare und feste Funktionselemente, die verschiedene Aufgaben innerhalb des Elements ausführen und/oder Ausführungsthreads für ein 3D/Medien-Subsystem 2315 erzeugen. Während die 3D-Pipeline 2312 verwendet werden kann, um Medienoperationen durchzuführen, umfasst eine Ausführungsform des GPE 2310 auch eine Medienpipeline 2316 , die speziell verwendet wird, um Medienoperationen durchzuführen, wie etwa Videonachbearbeitung und Bildverbesserung.
  • In einigen Ausführungsformen umfasst die Medienpipeline 2316 feste Funktionen oder programmierbare Logikeinheiten, um eine oder mehrere spezialisierte Medienoperationen durchzuführen, wie etwa Videodekodierbeschleunigung, Videodeinterlacing und Videokodierbeschleunigung anstelle oder im Auftrag der Videocodec-Engine 2306' . In einigen Ausführungsformen beinhaltet die Medienpipeline 2316 zusätzlich eine Thread-Spawn-Einheit zum Spawnen von Threads zur Ausführung auf dem 3D/Medien-Subsystem 2315. Die erzeugten Threads führen Berechnungen für die Medienoperationen auf einer oder mehreren Grafikausführungseinheiten durch, die im 3D/Medien-Subsystem 2315 enthalten sind.
  • In einigen Ausführungsformen beinhaltet das 3D/Medien-Subsystem 2315 Logik zum Ausführen von Threads, die von der 3D-Pipeline 2312 und der Medien-Pipeline 2316 erzeugt werden. In einer Ausführungsform senden die Pipelines Thread-Ausführungsanforderungen an das 3D/Medien-Subsystem 2315 , das Thread-Dispatch-Logik zum Arbitrieren und Versenden der verschiedenen Anforderungen an verfügbare Thread-Ausführungsressourcen umfasst. Die Ausführungsressourcen umfassen ein Array von Grafikausführungseinheiten zum Verarbeiten der 3D- und Medien-Threads. In einigen Ausführungsformen umfasst das 3D/Medien-Subsystem 2315 einen oder mehrere interne Caches für Thread-Anweisungen und Daten. In einigen Ausführungsformen umfasst das Subsystem auch gemeinsam genutzten Speicher, einschließlich Registern und adressierbarem Speicher, um Daten zwischen Threads gemeinsam zu nutzen und Ausgabedaten zu speichern.
  • Grafikverarbeitungs-Engine
  • 24 ist ein Blockdiagramm einer Grafikverarbeitungsmaschine 2410 eines Grafikprozessors gemäß einigen Ausführungsformen. In einer Ausführungsform ist die Grafikverarbeitungsmaschine (GPE) 2410 eine Version der GPE 2310, die in 1 gezeigt ist 23. Elemente von 24 mit den gleichen Bezugszeichen (oder Namen) wie die Elemente jeder anderen Figur hierin können auf irgendeine Weise ähnlich der an anderer Stelle hierin beschriebenen funktionieren oder funktionieren, sind aber nicht darauf beschränkt. Zum Beispiel die 3D-Pipeline 2312 und die Medienpipeline 2316 von 23 illustriert sind. Die Medienpipeline 2316 ist in einigen Ausführungsformen der GPE 2410 optional und ist möglicherweise nicht explizit in der GPE 2410 enthalten. Zum Beispiel und in mindestens einer Ausführungsform ist ein separater Medien- und/oder Bildprozessor mit dem GPE 2410 gekoppelt.
  • In einigen Ausführungsformen ist das GPE 2410 mit einem Befehlsstreamer 2403 gekoppelt oder beinhaltet diesen, der einen Befehlsstream an die 3D-Pipeline 2312 und/oder die Medienpipelines 2316 bereitstellt. In einigen Ausführungsformen ist der Befehlsstreamer 2403 mit einem Speicher gekoppelt, der ein Systemspeicher oder einer oder mehrere von internem Cache-Speicher und gemeinsam genutztem Cache-Speicher sein kann. In einigen Ausführungsformen empfängt der Befehlsstreamer 2403 Befehle vom Speicher und sendet die Befehle an die 3D-Pipeline 2312 und/oder die Medienpipeline 2316. Die Befehle sind Anweisungen, die aus einem Ringpuffer abgerufen werden, der Befehle für die 3D-Pipeline 2312 und die Medienpipeline 2316 speichert. In einer Ausführungsform kann der Ringpuffer zusätzlich Stapelbefehlspuffer enthalten, die Stapel mehrerer Befehle speichern. Die Befehle für die 3D-Pipeline 2312 können auch Verweise auf im Speicher gespeicherte Daten beinhalten, wie etwa, aber nicht beschränkt auf Scheitelpunkt- und Geometriedaten für die 3D-Pipeline 2312 und/oder Bilddaten und Speicherobjekte für die Medienpipeline 2316. Die 3D-Pipeline 2312 und die Medienpipeline 2316 verarbeiten die Befehle und Daten, indem sie Operationen über eine Logik innerhalb der jeweiligen Pipelines durchführen oder einen oder mehrere Ausführungs-Threads an ein Grafikkern-Array 2414 senden. In einer Ausführungsform umfasst das Grafikkernarray 2414 einen oder mehrere Blöcke von Grafikkernen (z. B. Grafikkern(e) 2415A, Grafikkern(e) 2415B), wobei jeder Block einen oder mehrere Grafikkerne umfasst. Jeder Grafikkern enthält einen Satz von Grafikausführungsressourcen, die allgemeine und grafikspezifische Ausführungslogik zum Ausführen von Grafik- und Rechenoperationen sowie Texturverarbeitung mit fester Funktion und/oder maschinelles Lernen und Beschleunigungslogik für künstliche Intelligenz umfassen.
  • In verschiedenen Ausführungsformen kann die 3D-Pipeline 2312 eine feste Funktion und programmierbare Logik beinhalten, um ein oder mehrere Shader-Programme zu verarbeiten, wie etwa Vertex-Shader, Geometrie-Shader, Pixel-Shader, Fragment-Shader, Compute-Shader oder andere Shader-Programme, indem die Anweisungen verarbeitet und verteilt werden Ausführungsthreads zum Grafikkernarray 2414. Das Grafikkernarray 2414 stellt einen einheitlichen Block von Ausführungsressourcen zur Verwendung bei der Verarbeitung dieser Shader-Programme bereit. Die Mehrzweck-Ausführungslogik (z. B. Ausführungseinheiten) innerhalb des/der Grafikkerne 2415A - 2414B des Grafikkernarrays 2414 umfasst Unterstützung für verschiedene 3D-API-Shader-Sprachen und kann mehrere gleichzeitige Ausführungsthreads ausführen, die mehreren Shadern zugeordnet sind.
  • In einigen Ausführungsformen umfasst das Grafikkernarray 2414 eine Ausführungslogik zum Ausführen von Medienfunktionen, wie etwa Video- und/oder Bildverarbeitung. In einer Ausführungsform umfassen die Ausführungseinheiten eine Allzwecklogik, die programmierbar ist, um parallel zu Allzweck-Rechenoperationen zusätzlich zu Grafikverarbeitungsoperationen auszuführen. Die Allzwecklogik kann Verarbeitungsvorgänge parallel oder in Verbindung mit der Allzwecklogik innerhalb des/der Prozessorkern(s) 2107 von. ausführen 21 oder Kern 2202A-2202N wie in 22.
  • Ausgabedaten, die von Threads erzeugt werden, die auf dem Grafikkernarray 2414 ausgeführt werden, können Daten an den Speicher in einem vereinheitlichten Rückgabepuffer (URB) 2418 ausgeben. Der URB 2418 kann Daten für mehrere Threads speichern. In einigen Ausführungsformen kann der URB 2418 verwendet werden, um Daten zwischen verschiedenen Threads zu senden, die auf dem Grafikkernarray 2414 ausgeführt werden. In einigen Ausführungsformen kann der URB 2418 zusätzlich zur Synchronisation zwischen Threads auf dem Grafikkernarray und fester Funktionslogik innerhalb der Shared Function Logic 2420 verwendet werden.
  • In einigen Ausführungsformen ist das Grafikkernarray 2414 skalierbar, sodass das Array eine variable Anzahl von Grafikkernen beinhaltet, von denen jeder eine variable Anzahl von Ausführungseinheiten basierend auf dem Zielleistungs- und Leistungsniveau des GPE 2410 aufweist. In einer Ausführungsform sind die Ausführungsressourcen dynamisch skalierbar, sodass Ausführungsressourcen nach Bedarf aktiviert oder deaktiviert werden können.
  • Das Grafikkernarray 2414 ist mit einer Logik für gemeinsame Funktionen 2420 gekoppelt, die mehrere Ressourcen umfasst, die von den Grafikkernen in dem Grafikkernarray gemeinsam genutzt werden. Die gemeinsam genutzten Funktionen innerhalb der gemeinsam genutzten Funktionslogik 2420 sind Hardware-Logikeinheiten, die dem Grafikkernarray 2414 spezialisierte Zusatzfunktionen bereitstellen. In verschiedenen Ausführungsformen umfasst die Shared-Function-Logik 2420 eine Abtaster- 2421 , eine Mathematik 2422 und eine Inter-Thread-Kommunikations-(ITC-)2423-Logik, ist aber nicht darauf beschränkt. Zusätzlich implementieren einige Ausführungsformen einen oder mehrere Cache(s) 2425 innerhalb der Shared Function Logic 2420.
  • Eine gemeinsame Funktion wird zumindest in einem Fall implementiert, in dem die Nachfrage nach einer bestimmten spezialisierten Funktion für die Aufnahme in das Grafikkernarray 2414 nicht ausreicht. Stattdessen wird eine einzelne Instanziierung dieser spezialisierten Funktion als eigenständige Einheit in der Logik für gemeinsam genutzte Funktionen 2420 implementiert und von den Ausführungsressourcen innerhalb des Grafikkernarrays 2414 geteilt. Der genaue Satz von Funktionen, die zwischen dem Grafikkernarray 2414 geteilt werden und in dem Grafikkernarray 2414 enthalten sind, variiert je nach Ausführungsform. In einigen Ausführungsformen können spezifische gemeinsam genutzte Funktionen innerhalb der gemeinsam genutzten Funktionslogik 2420 , die ausgiebig von dem Grafikkernarray 2414 verwendet werden, in der gemeinsam genutzten Funktionslogik 2416 innerhalb des Grafikkernarrays 2414 enthalten sein. In verschiedenen Ausführungsformen kann die Logik für gemeinsame Funktionen 2416 innerhalb des Grafikkernarrays 2414 einen Teil oder die gesamte Logik innerhalb der Logik für gemeinsame Funktionen 2420 beinhalten. In einer Ausführungsform können alle Logikelemente innerhalb der Shared-Function-Logik 2420 innerhalb der Shared-Function-Logik 2416 des Grafikkernarrays 2414 dupliziert werden. In einer Ausführungsform wird die Gemeinschaftsfunktionslogik 2420 zugunsten der Gemeinschaftsfunktionslogik 2416 innerhalb des Grafikkernarrays 2414 ausgeschlossen.
  • 25 ist ein Blockdiagramm einer Hardwarelogik eines Grafikprozessorkerns 2500 gemäß einigen hierin beschriebenen Ausführungsformen. Elemente von 25 mit den gleichen Bezugszeichen (oder Namen) wie die Elemente jeder anderen Figur hierin können auf irgendeine Weise ähnlich der an anderer Stelle hierin beschriebenen funktionieren oder funktionieren, sind aber nicht darauf beschränkt. Der dargestellte Grafikprozessorkern 2500 ist in einigen Ausführungsformen in dem Grafikkernarray 2414 von 2 enthalten. 24. Der Grafikprozessorkern 2500, der manchmal als Core-Slice bezeichnet wird, kann ein oder mehrere Grafikkerne innerhalb eines modularen Grafikprozessors sein. Der Grafikprozessorkern 2500 ist beispielhaft für einen Grafikkern-Slice, und ein Grafikprozessor wie hierin beschrieben kann mehrere Grafikkern-Slices basierend auf Zielleistungs- und Leistungshüllkurven umfassen. Jeder Grafikprozessorkern 2500 kann einen festen Funktionsblock 2530 umfassen, der mit mehreren Teilkernen 2501A - 2501F gekoppelt ist, die auch als Teilscheiben bezeichnet werden, die modulare Blöcke von Allzweck- und fester Funktionslogik umfassen.
  • In einigen Ausführungsformen umfasst der Festfunktionsblock 2530 eine Geometrie-/Festfunktionspipeline 2536 , die von allen Unterkernen in dem Grafikprozessorkern 2500 geteilt werden kann, zum Beispiel in Implementierungen von Grafikprozessoren mit geringerer Leistung und/oder niedrigerer Leistung. In verschiedenen Ausführungsformen umfasst die Geometrie-/Festfunktionspipeline 2536 eine 3D-Fixfunktionspipeline (z. B. 3D-Pipeline 2312 wie in 23 und 24) eine Video-Front-End-Einheit, einen Thread-Spawner und Thread-Dispatcher und einen vereinheitlichten Rückgabepuffermanager, der vereinheitlichte Rückgabepuffer verwaltet, wie beispielsweise den vereinheitlichten Rückgabepuffer 2418 von 24 . 24.
  • In einer Ausführungsform beinhaltet der feste Funktionsblock 2530 auch eine Grafik-SoC-Schnittstelle 2537, einen Grafik-Mikrocontroller 2538 und eine Medienpipeline 2539. Die Grafik-SoC-Schnittstelle 2537 stellt eine Schnittstelle zwischen dem Grafikprozessorkern 2500 und anderen Prozessorkernen innerhalb eines integrierten Schaltkreises eines Systems auf einem Chip bereit. Der Grafik-Mikrocontroller 2538 ist ein programmierbarer Unterprozessor, der konfigurierbar ist, um verschiedene Funktionen des Grafikprozessor-Kerns 2500 zu verwalten, einschließlich Thread-Dispatch, Scheduling und Preemption. Die Medienpipeline 2539 (z. B. die Medienpipeline 2316 von 23 und 24) enthält eine Logik, um das Decodieren, Codieren, Vorverarbeiten und/oder Nachverarbeiten von Multimediadaten, einschließlich Bild- und Videodaten, zu erleichtern. Die Medienpipeline 2539 implementiert Medienoperationen über Anforderungen an die Rechen- oder Abtastlogik innerhalb der Unterkerne 2501 - 2501F.
  • In einer Ausführungsform ermöglicht die SoC-Schnittstelle 2537 dem Grafikprozessorkern 2500 , mit Mehrzweckanwendungsprozessorkernen (z. B. CPUs) und/oder anderen Komponenten innerhalb eines SoCs zu kommunizieren, einschließlich Speicherhierarchieelementen wie einem gemeinsam genutzten Last-Level-Cache-Speicher, dem System-RAM und/oder eingebetteter On-Chip- oder On-Package-DRAM. Die SoC-Schnittstelle 2537 kann auch eine Kommunikation mit Geräten mit fester Funktion innerhalb des SoC ermöglichen, wie etwa Kamera-Bildgebungspipelines, und ermöglicht die Verwendung von und/oder implementiert globale Speicheratomics, die zwischen dem Grafikprozessorkern 2500 und den CPUs innerhalb des SoC geteilt werden können. Die SoC-Schnittstelle 2537 kann auch Energieverwaltungssteuerungen für den Grafikprozessorkern 2500 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Grafikkerns 2500 und anderen Taktdomänen innerhalb des SoC ermöglichen. In einer Ausführungsform ermöglicht die SoC-Schnittstelle 2537 den Empfang von Befehlspuffern von einem Befehlsstreamer und einem globalen Thread-Dispatcher, die konfiguriert sind, um jedem von einem oder mehreren Grafikkernen innerhalb eines Grafikprozessors Befehle und Anweisungen bereitzustellen. Die Befehle und Anweisungen können an die Medienpipeline 2539 gesendet werden, wenn Medienoperationen ausgeführt werden sollen, oder an eine Geometrie- und Festfunktionspipeline (z. B. Geometrie- und Festfunktionspipeline 2536, Geometrie- und Festfunktionspipeline 2514), wenn Grafikverarbeitungsoperationen durchgeführt werden.
  • Der Grafikmikrocontroller 2538 kann konfiguriert sein, um verschiedene Planungs- und Verwaltungsaufgaben für den Grafikprozessorkern 2500 durchzuführen. In einer Ausführungsform kann der Grafik-Mikrocontroller 2538 Grafik- und/oder Rechenarbeitslastplanung auf den verschiedenen Grafik-Parallelmaschinen innerhalb der Ausführungseinheits-(EU)-Arrays 2502A-2502F, 2504A-2504F innerhalb der Unterkerne 2501A-2501F durchführen. In diesem Planungsmodell kann Host-Software, die auf einem CPU-Kern eines SoCs einschließlich des Grafikprozessorkerns 2500 ausgeführt wird, Arbeitslasten an eine von mehreren Grafikprozessor-Türklingeln senden, die eine Planungsoperation an der entsprechenden Grafikmaschine aufruft. Das Planen von Operationen umfasst das Bestimmen, welche Arbeitslast als nächstes ausgeführt werden soll, das Senden einer Arbeitslast an einen Befehlsstreamer, das Vorbeugen vorhandener Arbeitslasten, die auf einer Engine ausgeführt werden, das Überwachen des Fortschritts einer Arbeitslast und das Benachrichtigen der Hostsoftware, wenn eine Arbeitslast abgeschlossen ist. In einer Ausführungsform kann der Grafik-Mikrocontroller 2538 auch Niedrigenergie- oder Leerlaufzustände für den Grafikprozessorkern 2500 ermöglichen, wodurch der Grafikprozessorkern 2500 die Fähigkeit erhält, Register innerhalb des Grafikprozessorkerns 2500 über Stromsparzustandsübergänge hinweg unabhängig zu speichern und wiederherzustellen vom Betriebssystem und/oder der Grafiktreibersoftware auf dem System.
  • Der Grafikprozessorkern 2500 kann mehr oder weniger als die dargestellten Unterkerne 2501A-2501F aufweisen, bis zu Nein modulare Teilkerne. Für jeden Satz von Nein Unterkernen kann der Grafikprozessorkern 2500 auch eine gemeinsam genutzte Funktionslogik 2510 , einen gemeinsam genutzten und/oder Cache-Speicher 2512 , eine Geometrie-/Festfunktions-Pipeline 2514 sowie eine zusätzliche Festfunktionslogik 2516 umfassen, um verschiedene Grafik- und Rechenverarbeitungsoperationen zu beschleunigen. Die Shared-Function-Logik 2510 kann Logikeinheiten umfassen, die der Shared-Function-Logik 2420 von 2 zugeordnet sind. 24 (z. B. Sampler, Mathematik und/oder Inter-Thread-Kommunikationslogik), die von jedem gemeinsam genutzt werden können Nein Sub-Cores innerhalb des Grafikprozessorkerns 2500. Der gemeinsam genutzte und/oder Cache-Speicher 2512 kann ein Last-Level-Cache für den Satz von sein Nein Subkerne 2501A-2501F innerhalb des Grafikprozessorkerns 2500 und kann auch als gemeinsamer Speicher dienen, auf den mehrere Subkerne zugreifen können. Die Geometrie-/Festfunktions-Pipeline 2514 kann anstelle der Geometrie-/Festfunktions-Pipeline 2536 innerhalb des Festfunktionsblocks 2530 enthalten sein und kann die gleichen oder ähnliche Logikeinheiten umfassen.
  • In einer Ausführungsform beinhaltet der Grafikprozessorkern 2500 zusätzliche Festfunktionslogik 2516 , die verschiedene Festfunktionsbeschleunigungslogik zur Verwendung durch den Grafikprozessorkern 2500 beinhalten kann. In einer Ausführungsform umfasst die zusätzliche Festfunktionslogik 2516 eine zusätzliche Geometriepipeline zur Verwendung bei der Schattierung nur der Position. Bei der reinen Positionsschattierung existieren zwei Geometriepipelines, die Vollgeometriepipeline innerhalb der Geometrie-/Fixfunktionspipeline 2516, 2536 und eine Cullpipeline, die eine zusätzliche Geometriepipeline ist, die in der zusätzlichen Festfunktionslogik 2516 enthalten sein kann. In einer Ausführungsform ist die Cull-Pipeline eine abgespeckte Version der Pipeline mit voller Geometrie. Die vollständige Pipeline und die cull-Pipeline können verschiedene Instanzen derselben Anwendung ausführen, wobei jede Instanz einen separaten Kontext hat. Schattierung nur in Position kann lange Aussortierungsläufe verworfener Dreiecke verbergen, sodass die Schattierung in einigen Fällen früher abgeschlossen werden kann. Zum Beispiel und in einer Ausführungsform kann die Cull-Pipeline-Logik innerhalb der zusätzlichen Festfunktionslogik 2516 Positions-Shader parallel zur Hauptanwendung ausführen und erzeugt im Allgemeinen kritische Ergebnisse schneller als die vollständige Pipeline, da die Cull-Pipeline nur das Positionsattribut von abruft und schattiert die Scheitelpunkte, ohne eine Rasterung und ein Rendern der Pixel in den Bildpuffer durchzuführen. Die Cull-Pipeline kann die generierten kritischen Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke zu berechnen, unabhängig davon, ob diese Dreiecke aussortiert wurden. Die vollständige Pipeline (die in diesem Fall als Wiedergabepipeline bezeichnet werden kann) kann die Sichtbarkeitsinformationen verbrauchen, um die aussortierten Dreiecke zu überspringen, um nur die sichtbaren Dreiecke zu schattieren, die schließlich zur Rasterisierungsphase weitergeleitet werden.
  • In einer Ausführungsform kann die zusätzliche Festfunktionslogik 2516 auch eine Beschleunigungslogik für maschinelles Lernen, wie etwa eine Matrixmultiplikationslogik mit fester Funktion, für Implementierungen beinhalten, die Optimierungen für maschinelles Lernen oder Inferenzen umfassen.
  • Innerhalb jedes Grafikunterkerns 2501A - 2501F umfasst ein Satz von Ausführungsressourcen, die verwendet werden können, um Grafik-, Medien- und Rechenoperationen als Reaktion auf Anforderungen von Grafikpipeline-, Medienpipeline- oder Shaderprogrammen durchzuführen. Die Grafikunterkerne 2501A-2501F umfassen mehrere EU-Arrays 2502A-2502F, 2504A-2504F, Thread-Dispatch- und Inter-Thread-Kommunikations-(TD/IC)-Logik 2503A-2503F, einen 3D- (zB Textur-)Sampler 2505A-2505F, aF Media Sampler 2506A-2506F, einen Shader-Prozessor 2507A-2507F und einen gemeinsam genutzten lokalen Speicher (SLM) 2508A-2508F. Die EU-Arrays 2502A-2502F, 2504A-2504F umfassen jeweils mehrere Ausführungseinheiten, die Allzweck-Grafikverarbeitungseinheiten sind, die Gleitkomma- und Ganzzahl-/Festkomma-Logikoperationen im Dienst einer Grafik-, Medien- oder Rechenoperation ausführen können. einschließlich Grafik-, Medien- oder Compute-Shader-Programmen. Die TD/IC-Logik 2503A-2503F führt lokale Thread-Dispatch- und Thread-Steuerungsoperationen für die Ausführungseinheiten innerhalb eines Unterkerns durch und erleichtert die Kommunikation zwischen Threads, die auf den Ausführungseinheiten des Unterkerns ausgeführt werden. Der 3D-Sampler 2505A-2505F kann Textur- oder andere 3D-Grafikdaten in den Speicher einlesen. Der 3D-Sampler kann Texturdaten basierend auf einem konfigurierten Sample-Zustand und dem Texturformat, das einer gegebenen Textur zugeordnet ist, unterschiedlich lesen. Der Mediensampler 2506A-2506F kann ähnliche Leseoperationen basierend auf dem Typ und Format durchführen, das mit Mediendaten verbunden ist. In einer Ausführungsform kann jeder Grafikunterkern 2501A - 2501F alternativ einen einheitlichen 3D- und Medien-Sampler umfassen. Threads, die auf den Ausführungseinheiten in jedem der Unterkerne 2501A-2501F ausgeführt werden, können den gemeinsam genutzten lokalen Speicher 2508A-2508F innerhalb jedes Unterkerns verwenden, um es Threads zu ermöglichen, die innerhalb einer Thread-Gruppe ausgeführt werden, unter Verwendung eines gemeinsamen Pools von On-Chip- Erinnerung.
  • Ausführungseinheiten
  • 26A-26B veranschaulichen die Thread-Ausführungslogik 2600 mit einem Array von Verarbeitungselementen, die in einem Grafikprozessorkern gemäß hierin beschriebenen Ausführungsformen verwendet werden. Elemente von 26A-26B mit den gleichen Bezugszeichen (oder Namen) wie die Elemente jeder anderen Figur hierin können auf irgendeine Weise ähnlich der an anderer Stelle hierin beschriebenen funktionieren oder funktionieren, sind aber nicht darauf beschränkt. 26A veranschaulicht einen Überblick über die Thread-Ausführungslogik 2600 , die eine Variante der Hardwarelogik umfassen kann, die mit jedem Unterkern 2501A - 2501F von 2 veranschaulicht ist. 25. 26B veranschaulicht beispielhafte interne Details einer Ausführungseinheit.
  • Wie in FIG. In 26A umfasst die Thread-Ausführungslogik 2600 in einigen Ausführungsformen einen Shader-Prozessor 2602, einen Thread-Dispatcher 2604 , einen Befehlscache 2606 , ein skalierbares Ausführungseinheiten-Array mit mehreren Ausführungseinheiten 2608A - 2608N , einen Sampler 2610, einen Datencache 2612 und a' Datenport 2614. In einer Ausführungsform kann das skalierbare Ausführungseinheiten-Array dynamisch skalieren, indem eine oder mehrere Ausführungseinheiten (z. B. eine der Ausführungseinheiten 2608A, 2608B, 2608C, 2608D bis 2608N-1 und 2608N) basierend auf den Rechenanforderungen einer Arbeitslast aktiviert oder deaktiviert werden . In einer Ausführungsform sind die enthaltenen Komponenten über eine Verbindungsstruktur miteinander verbunden, die mit jeder der Komponenten verknüpft ist. In einigen Ausführungsformen umfasst die Thread-Ausführungslogik 2600 eine oder mehrere Verbindungen zu einem Speicher, wie beispielsweise einem Systemspeicher oder einem Cache-Speicher, über einen oder mehrere von Befehlscache 2606 , Datenport 2614 , Abtaster 2610 und Ausführungseinheiten 2608A - 2608N . In einigen Ausführungsformen ist jede Ausführungseinheit (zB 2608A) eine eigenständige programmierbare Mehrzweck-Recheneinheit, die in der Lage ist, mehrere gleichzeitige Hardware-Threads auszuführen, während mehrere Datenelemente parallel für jeden Thread verarbeitet werden. In verschiedenen Ausführungsformen ist das Array von Ausführungseinheiten 2608A - 2608N skalierbar, um eine beliebige Anzahl einzelner Ausführungseinheiten zu umfassen.
  • In einigen Ausführungsformen werden die Ausführungseinheiten 2608A-2608N hauptsächlich verwendet, um Shader-Programme auszuführen. Ein Shader-Prozessor 2602 kann die verschiedenen Shader-Programme verarbeiten und Ausführungs-Threads, die den Shader-Programmen zugeordnet sind, über einen Thread-Dispatcher 2604 abfertigen. In einer Ausführungsform umfasst der Thread-Dispatcher Logik, um Thread-Initiierungsanforderungen von den Grafik- und Medienpipelines zu vermitteln und die angeforderten Threads auf einer oder mehreren Ausführungseinheiten in den Ausführungseinheiten 2608A - 2608N zu instanziieren. Beispielsweise kann eine Geometrie-Pipeline Vertex-, Tessellation- oder Geometrie-Shader zur Verarbeitung an die Thread-Ausführungslogik senden. In einigen Ausführungsformen kann der Thread-Dispatcher 2604 auch Laufzeit-Thread-Spawning-Anforderungen von den ausführenden Shader-Programmen verarbeiten.
  • In einigen Ausführungsformen unterstützen die Ausführungseinheiten 2608A - 2608N einen Befehlssatz, der native Unterstützung für viele standardmäßige 3D-Grafik-Shader-Befehle umfasst, so dass Shader-Programme aus Grafikbibliotheken (zB Direct 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen Vertex- und Geometrieverarbeitung (zB Vertex-Programme, Geometrieprogramme, Vertex-Shader), Pixel-Verarbeitung (zB Pixel-Shader, Fragment-Shader) und Allzweck-Verarbeitung (zB Rechen- und Medien-Shader). Jede der Ausführungseinheiten 2608A - 2608N ist in der Lage, Mehrfachausgabe-Einzelbefehl-Mehrfachdaten-(SIMD)-Ausführungen auszuführen, und Multithread-Betrieb ermöglicht eine effiziente Ausführungsumgebung angesichts von Speicherzugriffen mit höherer Latenzzeit. Jeder Hardware-Thread innerhalb jeder Ausführungseinheit hat eine dedizierte Registerdatei mit hoher Bandbreite und einen zugeordneten unabhängigen Thread-Zustand. Die Ausführung erfolgt mehrfach pro Takt an Pipelines, die Gleitkommaoperationen mit ganzer, einfacher und doppelter Genauigkeit, SIMD-Verzweigungsfähigkeit, logische Operationen, transzendente Operationen und andere verschiedene Operationen ausführen können. Während auf Daten aus dem Speicher oder einer der gemeinsam genutzten Funktionen gewartet wird, bewirkt die Abhängigkeitslogik innerhalb der Ausführungseinheiten 2608A - 2608N, dass ein wartender Thread in den Ruhezustand versetzt wird, bis die angeforderten Daten zurückgegeben wurden. Während der wartende Thread schläft, können Hardwareressourcen für die Verarbeitung anderer Threads verwendet werden. Während einer Verzögerung, die mit einer Vertex-Shader-Operation verbunden ist, kann eine Ausführungseinheit beispielsweise Operationen für einen Pixel-Shader, Fragment-Shader oder eine andere Art von Shader-Programm ausführen, einschließlich eines anderen Vertex-Shaders. Verschiedene Ausführungsformen können als Alternative zur Verwendung von SIMD oder zusätzlich zur Verwendung von SIMD für die Verwendung der Ausführung unter Verwendung von Single Instruction Multiple Thread (SIMT) gelten. Ein Verweis auf einen SIMD-Kern oder eine SIMD-Operation kann auch für SIMT gelten oder für SIMD in Kombination mit SIMT gelten.
  • Jede Ausführungseinheit in den Ausführungseinheiten 2608A-2608N arbeitet mit Arrays von Datenelementen. Die Anzahl der Datenelemente ist die „Ausführungsgröße“, oder die Anzahl der Kanäle für die Anweisung. Ein Ausführungskanal ist eine logische Ausführungseinheit für den Datenelementzugriff, die Maskierung und die Flusskontrolle innerhalb von Befehlen. Die Anzahl der Kanäle kann unabhängig von der Anzahl der physikalischen arithmetischen Logikeinheiten (ALUs) oder Gleitkommaeinheiten (FPUs) für einen bestimmten Grafikprozessor sein. In einigen Ausführungsformen unterstützen die Ausführungseinheiten 2608A - 2608N Integer- und Gleitkomma-Datentypen.
  • Der Befehlssatz der Ausführungseinheit enthält SIMD-Befehle. Die verschiedenen Datenelemente können als gepackter Datentyp in einem Register gespeichert werden und die Ausführungseinheit verarbeitet die verschiedenen Elemente basierend auf der Datengröße der Elemente. Wenn beispielsweise ein Vektor mit einer Breite von 256 Bit verwendet wird, werden die 256 Bit des Vektors in einem Register gespeichert und die Ausführungseinheit arbeitet mit dem Vektor als vier separate gepackte Datenelemente mit 64 Bit (Quad-Word (QW)-Größendaten). Elemente), acht separate gepackte 32-Bit-Datenelemente (Datenelemente mit doppelter Wortgröße (DW), sechzehn separate gepackte 16-Bit-Datenelemente (Datenelemente mit Wortgröße (W)) oder zweiunddreißig separate 8-Bit-Datenelemente (Datenelemente der Größe Byte (B). Es sind jedoch unterschiedliche Vektorbreiten und Registergrößen möglich.
  • In einer Ausführungsform können eine oder mehrere Ausführungseinheiten zu einer fusionierten Ausführungseinheit 2609A-2609N mit einer Thread-Steuerungslogik (2607A-2607N) kombiniert werden, die den fusionierten EUs gemeinsam ist. Mehrere EUs können zu einer EU-Gruppe fusioniert werden. Jede EU in der fusionierten EU-Gruppe kann so konfiguriert werden, dass sie einen separaten SIMD-Hardware-Thread ausführt. Die Anzahl der EUs in einer verschmolzenen EU-Gruppe kann gemäß Ausführungsformen variieren. Außerdem können verschiedene SIMD-Breiten pro EU durchgeführt werden, einschließlich, aber nicht beschränkt auf SIMD8, SIMD16 und SIMD32. Jede fusionierte Grafikausführungseinheit 2609A - 2609N umfasst mindestens zwei Ausführungseinheiten. Beispielsweise umfasst die fusionierte Ausführungseinheit 2609A eine erste EU 2608A , eine zweite EU 2608B und eine Thread-Steuerungslogik 2607A , die der ersten EU 2608A und der zweiten EU 2608B gemeinsam ist. Die Thread-Steuerungslogik 2607A steuert Threads, die auf der fusionierten Grafikausführungseinheit 2609A ausgeführt werden, was es jeder EU innerhalb der fusionierten Ausführungseinheiten 2609A - 2609N ermöglicht, unter Verwendung eines gemeinsamen Befehlszeigerregisters auszuführen.
  • Ein oder mehrere interne Befehls-Caches (zB 2606) sind in der Thread-Ausführungslogik 2600 enthalten, um Thread-Befehle für die Ausführungseinheiten zwischenzuspeichern. In einigen Ausführungsformen sind ein oder mehrere Daten-Caches (zB 2612) enthalten, um Thread-Daten während der Thread-Ausführung zwischenzuspeichern. In einigen Ausführungsformen ist ein Abtaster 2610 enthalten, um eine Texturabtastung für 3D-Operationen und eine Medienabtastung für Medienoperationen bereitzustellen. In einigen Ausführungsformen umfasst der Sampler 2610 eine spezielle Textur- oder Medien-Sampling-Funktionalität, um Textur- oder Mediendaten während des Sampling-Prozesses zu verarbeiten, bevor die abgetasteten Daten einer Ausführungseinheit bereitgestellt werden.
  • Während der Ausführung senden die Grafik- und Medienpipelines Thread-Initiierungsanforderungen an die Thread-Ausführungslogik 2600 über die Thread-Spawn- und Dispatch-Logik. Sobald eine Gruppe von geometrischen Objekten verarbeitet und in Pixeldaten gerastert wurde, wird die Pixelprozessorlogik (z. B. Pixelshaderlogik, Fragmentshaderlogik usw.) innerhalb des Shaderprozessors 2602 aufgerufen, um weitere Ausgabeinformationen zu berechnen und zu veranlassen, dass Ergebnisse geschrieben werden auf Ausgabeflächen (zB Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.). In einigen Ausführungsformen berechnet ein Pixel-Shader oder Fragment-Shader die Werte der verschiedenen Vertex-Attribute, die über das gerasterte Objekt zu interpolieren sind. In einigen Ausführungsformen führt die Pixelprozessorlogik innerhalb des Shader-Prozessors 2602 dann ein von der Anwendungsprogrammierschnittstelle (API) bereitgestelltes Pixel- oder Fragment-Shader-Programm aus. Um das Shader-Programm auszuführen, verteilt der Shader-Prozessor 2602 Threads über den Thread-Dispatcher 2604 an eine Ausführungseinheit (z. B. 2608A). In einigen Ausführungsformen verwendet der Shader-Prozessor 2602 Textur-Sampling-Logik im Sampler 2610 , um auf Texturdaten in Textur-Maps zuzugreifen, die im Speicher gespeichert sind. Arithmetische Operationen an den Texturdaten und den eingegebenen Geometriedaten berechnen Pixelfarbdaten für jedes geometrische Fragment oder verwerfen ein oder mehrere Pixel aus der weiteren Verarbeitung.
  • In einigen Ausführungsformen stellt der Datenport 2614 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 2600 bereit, um verarbeitete Daten an den Speicher zur weiteren Verarbeitung auf einer Grafikprozessor-Ausgabepipeline auszugeben. In einigen Ausführungsformen umfasst der Datenport 2614 einen oder mehrere Cache-Speicher (z. B. den Datencache 2612) oder ist damit gekoppelt, um Daten für den Speicherzugriff über den Datenport zwischenzuspeichern.
  • Wie in FIG. In 26B kann eine Grafikausführungseinheit 2608 eine Befehlsabrufeinheit 2637, ein allgemeines Registerdateiarray (GRF) 2624, ein Architekturregisterdateiarray (ARF) 2626, einen Thread-Arbiter 2622, eine Sendeeinheit 2630, eine Verzweigungseinheit 2632 beinhalten, einen Satz von SIMD-Gleitkommaeinheiten (FPUs) 2634 und in einer Ausführungsform einen Satz von dedizierten ganzzahligen SIMD-ALUs 2635. Das GRF 2624 und das ARF 2626 beinhalten den Satz von allgemeinen Registerdateien und Architekturregisterdateien, die jedem gleichzeitigen Hardware-Thread zugeordnet sind, der in der Grafikausführungseinheit 2608 aktiv sein kann. In einer Ausführungsform wird der Architekturzustand pro Thread im ARF 2626 beibehalten, während während der Thread-Ausführung verwendete Daten im GRF 2624 gespeichert werden. Der Ausführungszustand jedes Threads, einschließlich der Befehlszeiger für jeden Thread, kann in Thread-spezifischen Registern im ARF 2626 gehalten werden.
  • In einer Ausführungsform weist die Grafikausführungseinheit 2608 eine Architektur auf, die eine Kombination aus Simultaneous Multi-Threading (SMT) und feinkörnigem Interleaved Multi-Threading (IMT) ist. Die Architektur weist eine modulare Konfiguration auf, die zur Entwurfszeit basierend auf einer Zielanzahl gleichzeitiger Threads und einer Anzahl von Registern pro Ausführungseinheit fein abgestimmt werden kann, wobei die Ressourcen der Ausführungseinheit auf die Logik aufgeteilt werden, die zum Ausführen mehrerer gleichzeitiger Threads verwendet wird.
  • In einer Ausführungsform kann die Grafikausführungseinheit 2608 mehrere Anweisungen gemeinsam ausgeben, die jeweils unterschiedliche Anweisungen sein können. Der Thread-Arbiter 2622 des Grafikausführungseinheit-Threads 2608 kann die Anweisungen zur Ausführung an eine von der Sendeeinheit 2630 , der Verzweigungseinheit 2632 oder der SIMD-FPU(s) 2634 senden. Jeder Ausführungsthread kann auf 128 Universalregister innerhalb des GRF 2624 zugreifen, wobei jedes Register 32 Bytes speichern kann, die als 8-Element-Vektor von 32-Bit-Datenelementen zugänglich sind. In einer Ausführungsform hat jeder Ausführungseinheits-Thread Zugriff auf 4 KByte innerhalb des GRF 2624, obwohl Ausführungsformen nicht darauf beschränkt sind und in anderen Ausführungsformen mehr oder weniger Registerressourcen bereitgestellt werden können. In einer Ausführungsform können bis zu sieben Threads gleichzeitig ausgeführt werden, obwohl die Anzahl von Threads pro Ausführungseinheit auch gemäß Ausführungsformen variieren kann. In einer Ausführungsform, bei der sieben Threads auf 4 KByte zugreifen können, kann das GRF 2624 insgesamt 28 KByte speichern. Flexible Adressierungsmodi können ermöglichen, dass Register gemeinsam adressiert werden, um effektiv breitere Register aufzubauen oder gestaffelte rechteckige Blockdatenstrukturen darzustellen.
  • In einer Ausführungsform werden Speicheroperationen, Abtastoperationen und andere Systemkommunikationen mit längerer Latenz über „Sende“-Anweisungen abgefertigt, die von der Nachrichtenweiterleitungs-Sendeeinheit 2630 ausgeführt werden. In einer Ausführungsform werden Verzweigungsbefehle an eine dedizierte Verzweigungseinheit 2632 gesendet, um die SIMD-Divergenz und eventuelle Konvergenz zu erleichtern.
  • In einer Ausführungsform umfasst die Grafikausführungseinheit 2608 eine oder mehrere SIMD-Gleitkommaeinheiten (FPU(s)) 2634, um Gleitkommaoperationen durchzuführen. In einer Ausführungsform unterstützen die FPU(s) 2634 auch Ganzzahlberechnungen. In einer Ausführungsform können die FPU(s) 2634 SIMD bis zu execute ausführen M Anzahl von 32-Bit-Gleitkomma- (oder Integer-) Operationen oder SIMD-Ausführung bis zu 2M 16-Bit-Integer- oder 16-Bit-Gleitkomma-Operationen. In einer Ausführungsform stellt mindestens eine der FPU(s) erweiterte mathematische Fähigkeiten bereit, um transzendente mathematische Funktionen mit hohem Durchsatz und 64-Bit-Gleitkomma mit doppelter Genauigkeit zu unterstützen. In einigen Ausführungsformen ist auch ein Satz von 8-Bit-Ganzzahl-SIMD-ALUs 2635 vorhanden und kann speziell optimiert sein, um Operationen durchzuführen, die mit maschinellen Lernberechnungen verbunden sind.
  • In einer Ausführungsform können Arrays von mehreren Instanzen der Grafikausführungseinheit 2608 in einer Grafikunterkerngruppierung (z. B. einer Unterschicht) instanziiert werden. Aus Gründen der Skalierbarkeit können Produktarchitekten die genaue Anzahl von Ausführungseinheiten pro Sub-Core-Gruppierung auswählen. In einer Ausführungsform kann die Ausführungseinheit 2608 Anweisungen über eine Vielzahl von Ausführungskanälen ausführen. In einer weiteren Ausführungsform wird jeder auf der Grafikausführungseinheit 2608 ausgeführte Thread auf einem anderen Kanal ausgeführt.
  • 27 ist ein Blockdiagramm, das ein Grafikprozessor-Befehlsformat 2700 gemäß einigen Ausführungsformen veranschaulicht. In einer oder mehreren Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten einen Befehlssatz mit Befehlen in mehreren Formaten. Die Kästen mit durchgezogenen Linien veranschaulichen die Komponenten, die im Allgemeinen in einer Ausführungseinheitsanweisung enthalten sind, während die gestrichelten Linien Komponenten enthalten, die optional sind oder die nur in einer Teilmenge der Anweisungen enthalten sind. In einigen Ausführungsformen sind das beschriebene und dargestellte Befehlsformat 2700 Makrobefehle, insofern es sich um Befehle handelt, die an die Ausführungseinheit geliefert werden, im Gegensatz zu Mikrooperationen, die aus der Befehlsdecodierung resultieren, sobald der Befehl verarbeitet ist.
  • In einigen Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten nativ Anweisungen in einem 128-Bit-Anweisungsformat 2710. Ein komprimiertes 64-Bit-Befehlsformat 2730 ist für einige Befehle basierend auf dem ausgewählten Befehl, den Befehlsoptionen und der Anzahl der Operanden verfügbar. Das native 128-Bit-Befehlsformat 2710 bietet Zugriff auf alle Befehlsoptionen, während einige Optionen und Operationen im 64-Bit-Format 2730 eingeschränkt sind. Die im 64-Bit-Format 2730 verfügbaren nativen Befehle variieren je nach Ausführungsform. In einigen Ausführungsformen wird die Anweisung teilweise unter Verwendung eines Satzes von Indexwerten in einem Indexfeld 2713 komprimiert. Die Hardware der Ausführungseinheit referenziert einen Satz von Verdichtungstabellen basierend auf den Indexwerten und verwendet die Verdichtungstabellenausgaben, um einen nativen Befehl im 128-Bit-Befehlsformat 2710 zu rekonstruieren. Andere Größen und Formate des Unterrichts können verwendet werden.
  • Für jedes Format definiert der Befehls-Opcode 2712 die Operation, die die Ausführungseinheit ausführen soll. Die Ausführungseinheiten führen jeden Befehl parallel über die mehreren Datenelemente jedes Operanden aus. Beispielsweise führt die Ausführungseinheit als Reaktion auf einen Addierbefehl eine gleichzeitige Addieroperation über jeden Farbkanal durch, der ein Texturelement oder Bildelement darstellt. Standardmäßig führt die Ausführungseinheit jede Anweisung über alle Datenkanäle der Operanden aus. In einigen Ausführungsformen ermöglicht das Befehlssteuerfeld 2714 die Kontrolle über bestimmte Ausführungsoptionen, wie beispielsweise die Kanalauswahl (z. B. Prädikation) und die Datenkanalreihenfolge (z. B. Swizzle). Für Befehle im 128-Bit-Befehlsformat 2710 begrenzt ein Ausführungsgrößenfeld 2716 die Anzahl von Datenkanälen, die parallel ausgeführt werden. In einigen Ausführungsformen ist das Exec-Size-Feld 2716 zur Verwendung im 64-Bit-Kompaktbefehlsformat 2730 nicht verfügbar.
  • Einige Ausführungseinheitsbefehle haben bis zu drei Operanden, darunter zwei Quelloperanden, src0 2720, src1 2722 und ein Ziel 2718. In einigen Ausführungsformen unterstützen die Ausführungseinheiten Anweisungen mit zwei Zielen, wobei eines der Ziele impliziert ist. Datenmanipulationsbefehle können einen dritten Quelloperanden (zB SRC2 2724) aufweisen, wobei der Befehls-Opcode 2712 die Anzahl von Quelloperanden bestimmt. Der letzte Quelloperand eines Befehls kann ein direkter (zB hartcodierter) Wert sein, der mit dem Befehl übergeben wird.
  • In einigen Ausführungsformen umfasst das 128-Bit-Befehlsformat 2710 ein Zugriffs-/Adressmodusfeld 2726 , das beispielsweise angibt, ob ein direkter Registeradressierungsmodus oder ein indirekter Registeradressierungsmodus verwendet wird. Wenn der direkte Registeradressierungsmodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden direkt durch Bits im Befehl bereitgestellt.
  • In einigen Ausführungsformen umfasst das 128-Bit-Befehlsformat 2710 ein Zugriffs-/Adressmodusfeld 2726 , das einen Adressmodus und/oder einen Zugriffsmodus für den Befehl spezifiziert. In einer Ausführungsform wird der Zugriffsmodus verwendet, um eine Datenzugriffsausrichtung für den Befehl zu definieren. Einige Ausführungsformen unterstützen Zugriffsmodi einschließlich eines ausgerichteten 16-Byte-Zugriffsmodus und eines ausgerichteten 1-Byte-Zugriffsmodus, wobei die Byte-Ausrichtung des Zugriffsmodus die Zugriffsausrichtung der Befehlsoperanden bestimmt. Zum Beispiel kann der Befehl in einem ersten Modus eine Byte-ausgerichtete Adressierung für Quell- und Zieloperanden verwenden, und in einem zweiten Modus kann der Befehl eine 16-Byte-ausgerichtete Adressierung für alle Quell- und Zieloperanden verwenden.
  • In einer Ausführungsform bestimmt der Adressmodusabschnitt des Zugriffs-/Adressmodusfelds 2726 , ob der Befehl eine direkte oder indirekte Adressierung verwenden soll. Wenn der direkte Registeradressierungsmodus verwendet wird, liefern Bits im Befehl direkt die Registeradresse eines oder mehrerer Operanden. Wenn der indirekte Registeradressierungsmodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressregisterwert und einem Direktadressenfeld im Befehl berechnet werden.
  • In einigen Ausführungsformen werden Anweisungen basierend auf Bitfeldern des Opcodes 2712 gruppiert, um die Opcode-Decodierung 2740 zu vereinfachen. Bei einem 8-Bit-Opcode ermöglichen die Bits 4, 5 und 6 der Ausführungseinheit, den Typ des Opcodes zu bestimmen. Die gezeigte genaue Opcode-Gruppierung ist lediglich ein Beispiel. In einigen Ausführungsformen umfasst eine Bewegungs- und Logik-Opcode-Gruppe 2742 Datenbewegungs- und Logikbefehle (zB bewegen (mov), vergleichen (cmp)). In einigen Ausführungsformen teilt die Bewegungs- und Logikgruppe 2742 die fünf höchstwertigen Bits (MSB), wobei Bewegungsbefehle (mov) in Form von 0000xxxxb vorliegen und Logikbefehle in Form von 0001xxxxb vorliegen. Eine Flusssteuerungs-Befehlsgruppe 2744 (z. B. Aufruf, Sprung (jmp)) enthält Befehle in der Form 0010xxxxb (z. B. 0x20). Eine verschiedene Befehlsgruppe 2746 enthält eine Mischung von Befehlen, einschließlich Synchronisationsbefehlen (z. B. Warten, Senden) in der Form 001 Ixxxxb (z. B. 0x30). Eine parallele mathematische Befehlsgruppe 2748 enthält komponentenweise arithmetische Befehle (zB Addieren, Multiplizieren (mul)) in der Form 0100xxxxb (zB 0x40). Die parallele mathematische Gruppe 2748 führt die arithmetischen Operationen parallel über Datenkanäle aus. Die Vektormathematikgruppe 2750 enthält arithmetische Anweisungen (zB dp4) in der Form 0101xxxxb (zB 0x50). Die Vektormathematikgruppe führt Arithmetik wie Punktproduktberechnungen an Vektoroperanden durch.
  • Grafikpipeline
  • 28 ist ein Blockdiagramm einer anderen Ausführungsform eines Grafikprozessors 2800. Elemente von 28 mit den gleichen Bezugszeichen (oder Namen) wie die Elemente jeder anderen Figur hierin können auf irgendeine Weise ähnlich der an anderer Stelle hierin beschriebenen funktionieren oder funktionieren, sind aber nicht darauf beschränkt.
  • In einigen Ausführungsformen beinhaltet der Grafikprozessor 2800 eine Geometriepipeline 2820, eine Medienpipeline 2830, eine Anzeige-Engine 2840, eine Thread-Ausführungslogik 2850 und eine Renderausgabepipeline 2870. In einigen Ausführungsformen ist der Grafikprozessor 2800 ein Grafikprozessor in einem Mehrkern-Verarbeitungssystem, das einen oder mehrere Mehrzweck-Verarbeitungskerne umfasst. Der Grafikprozessor wird durch Registerschreibvorgänge in ein oder mehrere Steuerregister (nicht gezeigt) oder über Befehle gesteuert, die über eine Ringverbindung 2802 an den Grafikprozessor 2800 ausgegeben werden. In einigen Ausführungsformen koppelt die Ringverbindung 2802 den Grafikprozessor 2800 mit anderen Verarbeitungskomponenten, wie beispielsweise anderen Grafikprozessoren oder Allzweckprozessoren. Befehle von der Ringverbindung 2802 werden von einem Befehlsstreamer 2803 interpretiert, der Anweisungen an einzelne Komponenten der Geometriepipeline 2820 oder der Medienpipeline 2830 liefert.
  • In einigen Ausführungsformen leitet der Befehlsstreamer 2803 den Betrieb eines Scheitelpunktabrufers 2805, der Scheitelpunktdaten aus dem Speicher liest und Scheitelpunktverarbeitungsbefehle ausführt, die vom Befehlsstreamer 2803 bereitgestellt werden. In einigen Ausführungsformen stellt der Vertex-Fetcher 2805 Vertex-Daten an einen Vertex-Shader 2807 bereit, der Koordinatenraumtransformation und Beleuchtungsoperationen an jedem Vertex durchführt. In einigen Ausführungsformen führen der Vertex-Abrufer 2805 und der Vertex-Shader 2807 Vertex-Verarbeitungsanweisungen aus, indem sie Ausführungsthreads über einen Thread-Dispatcher 2831 an die Ausführungseinheiten 2852A-2852B verteilen.
  • In einigen Ausführungsformen sind die Ausführungseinheiten 2852A - 2852B ein Array von Vektorprozessoren mit einem Befehlssatz zum Durchführen von Grafik- und Medienoperationen. In einigen Ausführungsformen weisen die Ausführungseinheiten 2852A - 2852B einen angeschlossenen L1-Cache 2851 auf, der für jedes Array spezifisch ist oder von den Arrays gemeinsam genutzt wird. Der Cache kann als Datencache, Befehlscache oder einzelner Cache konfiguriert werden, der so partitioniert ist, dass er Daten und Befehle in verschiedenen Partitionen enthält.
  • In einigen Ausführungsformen umfasst die Geometriepipeline 2820 Tessellationskomponenten, um eine hardwarebeschleunigte Tessellation von 3D-Objekten durchzuführen. In einigen Ausführungsformen konfiguriert ein programmierbarer Hüllen-Shader 2811 die Tessellationsoperationen. Ein programmierbarer Domänen-Shader 2817 bietet eine Back-End-Auswertung der Tessellationsausgabe. Ein Tessellator 2813 arbeitet in Richtung des Hüllen-Shaders 2811 und enthält eine Speziallogik, um einen Satz detaillierter geometrischer Objekte basierend auf einem groben geometrischen Modell zu generieren, das als Eingabe an die Geometriepipeline 2820 bereitgestellt wird. In einigen Ausführungsformen können Tessellationskomponenten (z. B. Hüllen-Shader 2811 , Tessellator 2813 und Domänen-Shader 2817) umgangen werden, wenn keine Tessellation verwendet wird.
  • In einigen Ausführungsformen können vollständige geometrische Objekte von einem Geometrie-Shader 2819 über einen oder mehrere Threads verarbeitet werden, die an die Ausführungseinheiten 2852A-2852B gesendet werden, oder können direkt an den Clipper 2829 weitergehen. In einigen Ausführungsformen arbeitet der Geometrie-Shader mit ganzen geometrischen Objekten und nicht mit Scheitelpunkten oder Scheitelpunkten wie in vorherigen Stufen der Grafikpipeline. Wenn die Tesselation deaktiviert ist, empfängt der Geometrie-Shader 2819 eine Eingabe vom Vertex-Shader 2807. In einigen Ausführungsformen ist der Geometrie-Shader 2819 durch ein Geometrie-Shader-Programm programmierbar, um eine Geometrie-Tessellation durchzuführen, wenn die Tessellationseinheiten deaktiviert sind.
  • Vor der Rasterung verarbeitet ein Clipper 2829 Scheitelpunktdaten. Der Clipper 2829 kann ein Clipper mit fester Funktion oder ein programmierbarer Clipper mit Clipping- und Geometrie-Shader-Funktionen sein. In einigen Ausführungsformen sendet eine Rasterisierungs- und Tiefentestkomponente 2873 in der Renderausgabepipeline 2870 Pixelshader, um die geometrischen Objekte in pixelbezogene Darstellungen umzuwandeln. In einigen Ausführungsformen ist Pixel-Shader-Logik in der Thread-Ausführungslogik 2850 enthalten. In einigen Ausführungsformen kann eine Anwendung die Rasterisierungs- und Tiefentestkomponente 2873 umgehen und über eine Stream-Out-Einheit 2823 auf nicht gerasterte Scheitelpunktdaten zugreifen.
  • Der Grafikprozessor 2800 weist einen Verbindungsbus, eine Verbindungsstruktur oder einen anderen Verbindungsmechanismus auf, der den Daten- und Nachrichtenaustausch zwischen den Hauptkomponenten des Prozessors ermöglicht. In einigen Ausführungsformen sind die Ausführungseinheiten 2852A - 2852B und zugehörige Logikeinheiten (z. B. L1-Cache 2851, Abtaster 2854, Textur-Cache 2858 usw.) über einen Datenport 2856 miteinander verbunden, um einen Speicherzugriff durchzuführen und mit Renderausgabe-Pipeline-Komponenten des Prozessors zu kommunizieren . In einigen Ausführungsformen haben der Sampler 2854, der L1-Cache 2851, der Textur-Cache 2858 und die Ausführungseinheiten 2852A - 2852B jeweils separate Speicherzugriffspfade. In einer Ausführungsform kann der Texturcache 2858 auch als Sampler-Cache konfiguriert sein.
  • In einigen Ausführungsformen enthält die Renderausgabepipeline 2870 eine Rasterisierungs- und Tiefentestkomponente 2873 , die vertexbasierte Objekte in eine zugehörige pixelbasierte Darstellung umwandelt. In einigen Ausführungsformen umfasst die Rasterisierungslogik eine Windower-/Maskierer-Einheit, um eine Dreiecks- und Linienrasterisierung mit fester Funktion durchzuführen. In einigen Ausführungsformen sind auch ein zugehöriger Render-Cache 2878 und ein Tiefen-Cache 2879 verfügbar. Eine Pixeloperationskomponente 2877 führt pixelbasierte Operationen an den Daten durch, obwohl in einigen Fällen mit 2D-Operationen verbundene Pixeloperationen (z. B. Bitblockbildübertragungen mit Blending) von der 2D-Engine 2841 ausgeführt oder zur Anzeigezeit durch die Anzeige ersetzt werden Controller 2843 unter Verwendung von Überlagerungsanzeigeebenen. In einigen Ausführungsformen steht allen Grafikkomponenten ein gemeinsam genutzter L3-Cache 2875 zur Verfügung, was die gemeinsame Nutzung von Daten ohne die Verwendung des Hauptsystemspeichers ermöglicht.
  • In einigen Ausführungsformen beinhaltet die Grafikprozessor-Medienpipeline 2830 eine Medien-Engine 2837 und ein Video-Front-End 2834. In einigen Ausführungsformen empfängt das Video-Front-End 2834 Pipeline-Befehle vom Befehls-Streamer 2803. In einigen Ausführungsformen umfasst die Medienpipeline 2830 einen separaten Befehlsstreamer. In einigen Ausführungsformen verarbeitet das Video-Front-End 2834 Medienbefehle, bevor der Befehl an die Medien-Engine 2837 gesendet wird. In einigen Ausführungsformen beinhaltet die Medien-Engine 2837 eine Thread-Spawning-Funktionalität, um Threads zum Versand an die Thread-Ausführungslogik 2850 über den Thread-Dispatcher 2831 zu spawnen.
  • In einigen Ausführungsformen beinhaltet der Grafikprozessor 2800 eine Anzeige-Engine 2840. In einigen Ausführungsformen befindet sich die Anzeigemaschine 2840 außerhalb des Prozessors 2800 und ist über die Ringverbindung 2802 oder einen anderen Verbindungsbus oder eine andere Struktur mit dem Grafikprozessor gekoppelt. In einigen Ausführungsformen beinhaltet die Anzeige-Engine 2840 eine 2D-Engine 2841 und eine Anzeige-Steuerung 2843. In einigen Ausführungsformen enthält die Anzeigemaschine 2840 Speziallogik, die unabhängig von der 3D-Pipeline arbeiten kann. In einigen Ausführungsformen ist die Anzeigesteuerung 2843 mit einer Anzeigevorrichtung (nicht gezeigt) gekoppelt, die eine systemintegrierte Anzeigevorrichtung wie in einem Laptop-Computer oder eine externe Anzeigevorrichtung sein kann, die über einen Anzeigevorrichtungsanschluss angeschlossen ist.
  • In einigen Ausführungsformen sind die Geometriepipeline 2820 und die Medienpipeline 2830 konfigurierbar, um Operationen basierend auf mehreren Grafik- und Medienprogrammierschnittstellen durchzuführen, und sind nicht spezifisch für eine Anwendungsprogrammierschnittstelle (API). In einigen Ausführungsformen übersetzt die Treibersoftware für den Grafikprozessor API-Aufrufe, die für eine bestimmte Grafik- oder Medienbibliothek spezifisch sind, in Befehle, die von dem Grafikprozessor verarbeitet werden können. In einigen Ausführungsformen wird Unterstützung für die Open Graphics Library (OpenGL), Open Computing Language (OpenCL) und/oder Vulkan Graphics and Compute API bereitgestellt, alle von der Khronos Group. In einigen Ausführungsformen kann auch Unterstützung für die Direct3D-Bibliothek von der Microsoft Corporation bereitgestellt werden. In einigen Ausführungsformen kann eine Kombination dieser Bibliotheken unterstützt werden. Auch die Open Source Computer Vision Library (OpenCV) kann unterstützt werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline würde auch unterstützt, wenn eine Abbildung von der Pipeline der zukünftigen API auf die Pipeline des Grafikprozessors erfolgen kann.
  • Programmierung der Grafikpipeline
  • 29A ist ein Blockdiagramm, das ein Grafikprozessor-Befehlsformat 2900 gemäß einigen Ausführungsformen veranschaulicht. 29B ist ein Blockdiagramm, das eine Grafikprozessorbefehlssequenz 2910 gemäß einer Ausführungsform veranschaulicht. Die durchgezogenen Boxen in 29A veranschaulichen die Komponenten, die im Allgemeinen in einem Grafikbefehl enthalten sind, während die gestrichelten Linien Komponenten enthalten, die optional sind oder die nur in einer Teilmenge der Grafikbefehle enthalten sind. Das beispielhafte Grafikprozessor-Befehlsformat 2900 of 29A enthält Datenfelder, um einen Client 2902 zu identifizieren, einen Befehlsoperationscode (Opcode) 2904 und Daten 2906 für den Befehl. Ein Sub-Opcode 2905 und eine Befehlsgröße 2908 sind auch in einigen Befehlen enthalten.
  • In einigen Ausführungsformen spezifiziert der Client 2902 die Client-Einheit des Grafikgeräts, die die Befehlsdaten verarbeitet. In einigen Ausführungsformen untersucht ein Grafikprozessor-Befehlsparser das Client-Feld jedes Befehls, um die weitere Verarbeitung des Befehls zu konditionieren und die Befehlsdaten an die entsprechende Client-Einheit zu leiten. In einigen Ausführungsformen umfassen die Grafikprozessor-Client-Einheiten eine Speicherschnittstelleneinheit, eine Rendereinheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit. Jede Client-Einheit hat eine entsprechende Verarbeitungspipeline, die die Befehle verarbeitet. Sobald der Befehl von der Client-Einheit empfangen wird, liest die Client-Einheit den Opcode 2904 und, falls vorhanden, den Sub-Opcode 2905, um die durchzuführende Operation zu bestimmen. Die Client-Einheit führt den Befehl unter Verwendung von Informationen im Datenfeld 2906 aus. Für einige Befehle wird erwartet, dass eine explizite Befehlsgröße 2908 die Größe des Befehls angibt. In einigen Ausführungsformen bestimmt der Befehlsparser automatisch die Größe von mindestens einigen der Befehle basierend auf dem Befehls-Opcode. In einigen Ausführungsformen werden Befehle über Vielfache eines Doppelworts ausgerichtet. Andere Befehlsformate können verwendet werden.
  • Das Flussdiagramm in 29B veranschaulicht eine beispielhafte Grafikprozessorbefehlssequenz 2910. In einigen Ausführungsformen verwendet Software oder Firmware eines Datenverarbeitungssystems, das eine Ausführungsform eines Grafikprozessors aufweist, eine Version der gezeigten Befehlssequenz, um einen Satz von Grafikoperationen einzurichten, auszuführen und zu beenden. Eine beispielhafte Befehlssequenz wird nur zu Beispielszwecken gezeigt und beschrieben, da Ausführungsformen nicht auf diese spezifischen Befehle oder auf diese Befehlssequenz beschränkt sind. Darüber hinaus können die Befehle als Stapel von Befehlen in einer Befehlssequenz ausgegeben werden, so dass der Grafikprozessor die Befehlssequenz zumindest teilweise gleichzeitig verarbeitet.
  • In einigen Ausführungsformen kann die Grafikprozessorbefehlssequenz 2910 mit einem Pipeline-Flush-Befehl 2912 beginnen, um zu bewirken, dass jede aktive Grafikpipeline die aktuell anstehenden Befehle für die Pipeline abschließt. In einigen Ausführungsformen arbeiten die 3D-Pipeline 2922 und die Medienpipeline 2924 nicht gleichzeitig. Das Leeren der Pipeline wird durchgeführt, um die aktive Grafikpipeline zu veranlassen, alle ausstehenden Befehle abzuschließen. Als Reaktion auf einen Pipeline-Flush unterbricht der Befehlsparser für den Grafikprozessor die Befehlsverarbeitung, bis die aktiven Zeichenmaschinen anstehende Operationen abgeschlossen haben und die relevanten Lesecaches ungültig gemacht werden. Optional können alle Daten im Rendercache, die als ‚dirty‘ gekennzeichnet sind, in den Arbeitsspeicher geleert werden. In einigen Ausführungsformen kann der Pipeline-Flush-Befehl 2912 für die Pipeline-Synchronisierung oder bevor der Grafikprozessor in einen Niedrigenergiezustand versetzt wird, verwendet werden.
  • In einigen Ausführungsformen wird ein Pipeline-Auswahlbefehl 2913 verwendet, wenn eine Befehlssequenz erfordert, dass der Grafikprozessor explizit zwischen Pipelines umschaltet. In einigen Ausführungsformen ist ein Pipeline-Auswahlbefehl 2913 nur einmal in einem Ausführungskontext erforderlich, bevor Pipeline-Befehle ausgegeben werden, es sei denn, der Kontext soll Befehle für beide Pipelines ausgeben. In einigen Ausführungsformen ist ein Pipeline-Flush-Befehl 2912 unmittelbar vor einer Pipeline-Umschaltung über den Pipeline-Auswahlbefehl 2913 erforderlich.
  • In einigen Ausführungsformen konfiguriert ein Pipeline-Steuerbefehl 2914 eine Grafikpipeline für den Betrieb und wird verwendet, um die 3D-Pipeline 2922 und die Medienpipeline 2924 zu programmieren. In einigen Ausführungsformen konfiguriert der Pipeline-Steuerbefehl 2914 den Pipeline-Zustand für die aktive Pipeline. In einer Ausführungsform wird der Pipeline-Steuerbefehl 2914 zur Pipeline-Synchronisation und zum Löschen von Daten aus einem oder mehreren Cache-Speichern innerhalb der aktiven Pipeline verwendet, bevor ein Stapel von Befehlen verarbeitet wird.
  • In einigen Ausführungsformen werden Befehle zum Konfigurieren des Rückgabepufferzustands 2916 verwendet, um einen Satz von Rückgabepuffern für die jeweiligen Pipelines zum Schreiben von Daten zu konfigurieren. Einige Pipeline-Operationen erfordern die Zuweisung, Auswahl oder Konfiguration von einem oder mehreren Rückgabepuffern, in die die Operationen während der Verarbeitung Zwischendaten schreiben. In einigen Ausführungsformen verwendet der Grafikprozessor auch einen oder mehrere Rückgabepuffer, um Ausgabedaten zu speichern und eine Thread-übergreifende Kommunikation durchzuführen. In einigen Ausführungsformen umfasst der Rückgabepufferzustand 2916 das Auswählen der Größe und Anzahl von Rückgabepuffern, die für einen Satz von Pipeline-Operationen verwendet werden sollen.
  • Die verbleibenden Befehle in der Befehlssequenz unterscheiden sich basierend auf der aktiven Pipeline für Operationen. Basierend auf einer Pipeline-Bestimmung 2920 wird die Befehlssequenz auf die 3D-Pipeline 2922 zugeschnitten, beginnend mit dem 3D-Pipeline-Zustand 2930 oder die Medien-Pipeline 2924 beginnend mit dem Medien-Pipeline-Zustand 2940.
  • Die Befehle zum Konfigurieren des 3D-Pipelinezustands 2930 umfassen 3D-Zustandssetzbefehle für den Scheitelpunktpufferzustand, den Scheitelpunktelementzustand, den konstanten Farbzustand, den Tiefenpufferzustand und andere Zustandsvariablen, die konfiguriert werden müssen, bevor 3D-Grundbefehle verarbeitet werden. Die Werte dieser Befehle werden zumindest teilweise basierend auf der jeweils verwendeten 3D-API bestimmt. In einigen Ausführungsformen sind die Befehle des 3D-Pipelinezustands 2930 auch in der Lage, bestimmte Pipelineelemente selektiv zu deaktivieren oder zu umgehen, wenn diese Elemente nicht verwendet werden.
  • In einigen Ausführungsformen wird der Befehl 3D-Primitive 2932 verwendet, um 3D-Primitive zur Verarbeitung durch die 3D-Pipeline zu übermitteln. Befehle und zugehörige Parameter, die über den 3D-Grundelement-2932-Befehl an den Grafikprozessor übergeben werden, werden an die Scheitelpunktabruffunktion in der Grafikpipeline weitergeleitet. Die Scheitelpunktabruffunktion verwendet die Befehlsdaten des 3D-Grundelements 2932, um Scheitelpunktdatenstrukturen zu erzeugen. Die Scheitelpunktdatenstrukturen werden in einem oder mehreren Rückgabepuffern gespeichert. In einigen Ausführungsformen wird der Befehl 3D-Primitive 2932 verwendet, um Vertexoperationen an 3D-Primitiven über Vertex-Shader durchzuführen. Um Vertex-Shader zu verarbeiten, verteilt die 3D-Pipeline 2922 Shader-Ausführungsthreads an die Grafikprozessor-Ausführungseinheiten.
  • In einigen Ausführungsformen wird die 3D-Pipeline 2922 über einen Befehl oder ein Ereignis Ausführen 2934 ausgelöst. In einigen Ausführungsformen löst ein Registerschreiben die Befehlsausführung aus. In einigen Ausführungsformen wird die Ausführung über einen ‚go‘- oder ‚kick‘-Befehl in der Befehlssequenz ausgelöst. In einer Ausführungsform wird die Befehlsausführung unter Verwendung eines Pipeline-Synchronisationsbefehls ausgelöst, um die Befehlssequenz durch die Grafikpipeline zu spülen. Die 3D-Pipeline führt eine Geometrieverarbeitung für die 3D-Primitive durch. Sobald die Operationen abgeschlossen sind, werden die resultierenden geometrischen Objekte gerastert und die Pixel-Engine färbt die resultierenden Pixel ein. Für diese Operationen können auch zusätzliche Befehle zum Steuern von Pixelschattierung und Pixel-Back-End-Operationen enthalten sein.
  • In einigen Ausführungsformen folgt die Grafikprozessorbefehlssequenz 2910 dem Pfad der Medienpipeline 2924 , wenn Medienoperationen ausgeführt werden. Im Allgemeinen hängt die spezifische Verwendung und Art der Programmierung für die Medienpipeline 2924 von den durchzuführenden Medien- oder Rechenoperationen ab. Spezifische Mediendekodierungsoperationen können während der Mediendekodierung in die Medienpipeline ausgelagert werden. In einigen Ausführungsformen kann die Medienpipeline auch umgangen werden und die Mediendecodierung kann ganz oder teilweise unter Verwendung von Ressourcen durchgeführt werden, die von einem oder mehreren Universalverarbeitungskernen bereitgestellt werden. In einer Ausführungsform umfasst die Medienpipeline auch Elemente für Operationen der Allzweck-Grafikprozessoreinheit (GPGPU), wobei der Grafikprozessor verwendet wird, um SIMD-Vektoroperationen unter Verwendung von Rechen-Shader-Programmen durchzuführen, die sich nicht explizit auf das Rendern von Grafikprimitiven beziehen.
  • In einigen Ausführungsformen ist die Medienpipeline 2924 auf ähnliche Weise wie die 3D-Pipeline 2922 konfiguriert. Ein Satz von Befehlen zum Konfigurieren des Medienpipelinezustands 2940 wird vor den Medienobjektbefehlen 2942 abgesetzt oder in eine Befehlswarteschlange gestellt. In einigen Ausführungsformen umfassen Befehle für den Medienpipeline-Zustand 2940 Daten zum Konfigurieren der Medienpipeline-Elemente, die verwendet werden, um die Medienobjekte zu verarbeiten. Dies umfasst Daten zum Konfigurieren der Videodecodierungs- und Videocodierungslogik innerhalb der Medienpipeline, wie zum Beispiel das Codierungs- oder Decodierungsformat. In einigen Ausführungsformen unterstützen Befehle für den Medienpipeline-Zustand 2940 auch die Verwendung eines oder mehrerer Zeiger auf „indirekte“ Zustandselemente, die einen Stapel von Zustandseinstellungen enthalten.
  • In einigen Ausführungsformen liefern Medienobjektbefehle 2942 Zeiger an Medienobjekte zur Verarbeitung durch die Medienpipeline. Die Medienobjekte umfassen Speicherpuffer, die zu verarbeitende Videodaten enthalten. In einigen Ausführungsformen müssen alle Medienpipeline-Zustände gültig sein, bevor ein Medienobjektbefehl 2942 ausgegeben wird. Sobald der Pipeline-Zustand konfiguriert ist und die Medienobjektbefehle 2942 in die Warteschlange eingereiht sind, wird die Medienpipeline 2924 über einen Ausführungsbefehl 2944 oder ein äquivalentes Ausführungsereignis (z. B. Registerschreiben) ausgelöst. Die Ausgabe von der Medienpipeline 2924 kann dann durch Operationen nachverarbeitet werden, die von der 3D-Pipeline 2922 oder der Medienpipeline 2924 bereitgestellt werden. In einigen Ausführungsformen werden GPGPU-Operationen auf ähnliche Weise wie Medienoperationen konfiguriert und ausgeführt.
  • Architektur der Grafiksoftware
  • 30 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem 3000 gemäß einigen Ausführungsformen. In einigen Ausführungsformen beinhaltet die Softwarearchitektur eine 3D-Grafikanwendung 3010, ein Betriebssystem 3020 und mindestens einen Prozessor 3030. In einigen Ausführungsformen beinhaltet der Prozessor 3030 einen Grafikprozessor 3032 und einen oder mehrere Mehrzweck-Prozessorkerne 3034. Die Grafikanwendung 3010 und das Betriebssystem 3020 werden jeweils im Systemspeicher 3050 des Datenverarbeitungssystems ausgeführt.
  • In einigen Ausführungsformen enthält die 3D-Grafikanwendung 3010 ein oder mehrere Shader-Programme, einschließlich Shader-Anweisungen 3012. Die Shader-Sprachanweisungen können in einer High-Level-Shader-Sprache vorliegen, wie beispielsweise der High-Level-Shader-Sprache (HLSL) von Direct3D, der OpenGL-Shader-Sprache (GLSL) und so weiter. Die Anwendung beinhaltet auch ausführbare Anweisungen 3014 in einer Maschinensprache, die zur Ausführung durch den Universalprozessorkern 3034 geeignet ist. Die Anwendung umfasst auch Grafikobjekte 3016 , die durch Scheitelpunktdaten definiert sind.
  • In einigen Ausführungsformen ist das Betriebssystem 3020 ein Microsoft® Windows ® -Betriebssystem der Microsoft Corporation, ein proprietäres UNIX-ähnliches Betriebssystem oder ein Open-Source-UNIX-ähnliches Betriebssystem, das eine Variante des Linux-Kernels verwendet. Das Betriebssystem 3020 kann eine Grafik-API 3022 wie etwa die Direct3D-API, die OpenGL-API oder die Vulkan-API unterstützen. Wenn die Direct3D-API verwendet wird, verwendet das Betriebssystem 3020 einen Front-End-Shader-Compiler 3024 , um beliebige Shader-Anweisungen 3012 in HLSL in eine Shader-Sprache niedrigerer Ebene zu kompilieren. Die Kompilierung kann eine Just-in-Time-Kompilierung (JIT) sein, oder die Anwendung kann eine Shader-Vorkompilierung durchführen. In einigen Ausführungsformen werden während der Kompilierung der 3D-Grafikanwendung 3010 High-Level-Shader in Low-Level-Shader kompiliert. In einigen Ausführungsformen werden die Shader-Anweisungen 3012 in einer Zwischenform bereitgestellt, wie etwa einer Version der Standard Portable Intermediate Representation (SPIR), die von der Vulkan-API verwendet wird.
  • In einigen Ausführungsformen enthält der Benutzermodus-Grafiktreiber 3026 einen Back-End-Shader-Compiler 3027 , um die Shader-Anweisungen 3012 in eine hardwarespezifische Darstellung umzuwandeln. Wenn die OpenGL-API verwendet wird, werden Shader-Anweisungen 3012 in der GLSL-Hochsprache zum Kompilieren an einen Benutzermodus-Grafiktreiber 3026 weitergegeben. In einigen Ausführungsformen verwendet der Benutzermodus-Grafiktreiber 3026 Betriebssystem-Kernel-Modus-Funktionen 3028, um mit einem Kernel-Modus-Grafiktreiber 3029 zu kommunizieren. In einigen Ausführungsformen kommuniziert der Kernelmodus-Grafiktreiber 3029 mit dem Grafikprozessor 3032, um Befehle und Anweisungen zu verteilen.
  • IP-Core-Implementierungen
  • Ein oder mehrere Aspekte von mindestens einer Ausführungsform können durch repräsentativen Code implementiert werden, der auf einem maschinenlesbaren Medium gespeichert ist und die Logik innerhalb einer integrierten Schaltung wie etwa eines Prozessors darstellt und/oder definiert. Zum Beispiel kann das maschinenlesbare Medium Anweisungen enthalten, die verschiedene Logiken innerhalb des Prozessors darstellen. Wenn sie von einer Maschine gelesen werden, können die Anweisungen bewirken, dass die Maschine die Logik herstellt, um die hierin beschriebenen Techniken auszuführen. Solche Darstellungen, bekannt als „IP-Cores“, sind wiederverwendbare Logikeinheiten für einen integrierten Schaltkreis, die auf einem materiellen, maschinenlesbaren Medium als Hardwaremodell gespeichert werden können, das die Struktur des integrierten Schaltkreises beschreibt. Das Hardwaremodell kann an verschiedene Kunden oder Fertigungseinrichtungen geliefert werden, die das Hardwaremodell auf Fertigungsmaschinen laden, die die integrierte Schaltung herstellen. Die integrierte Schaltung kann so hergestellt werden, dass die Schaltung Operationen durchführt, die in Verbindung mit einer der hier beschriebenen Ausführungsformen beschrieben sind.
  • 31A ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem 3100 veranschaulicht, das verwendet werden kann, um eine integrierte Schaltung herzustellen, um Operationen gemäß einer Ausführungsform durchzuführen. Das IP-Kern-Entwicklungssystem 3100 kann verwendet werden, um modulare, wiederverwendbare Designs zu erzeugen, die in ein größeres Design integriert oder verwendet werden können, um eine gesamte integrierte Schaltung (zB eine integrierte SOC-Schaltung) aufzubauen. Eine Entwurfseinrichtung 3130 kann eine Softwaresimulation 3110 eines IP-Kernentwurfs in einer höheren Programmiersprache (zB C/C) erzeugen. Die Softwaresimulation 3110 kann verwendet werden, um das Verhalten des IP-Kerns unter Verwendung eines Simulationsmodells 3112 zu entwerfen, zu testen und zu verifizieren. Das Simulationsmodell 3112 kann Funktions-, Verhaltens- und/oder Zeitsimulationen umfassen. Ein Design auf Registertransferebene (RTL) 3115 kann dann aus dem Simulationsmodell 3112 erstellt oder synthetisiert werden. Der RTL-Entwurf 3115 ist eine Abstraktion des Verhaltens der integrierten Schaltung, die den Fluss digitaler Signale zwischen Hardwareregistern modelliert, einschließlich der zugehörigen Logik, die unter Verwendung der modellierten digitalen Signale ausgeführt wird. Zusätzlich zu einem RTL-Design 3115 können auch Designs niedrigerer Ebene auf Logikebene oder Transistorebene erzeugt, entworfen oder synthetisiert werden. Daher können die besonderen Details des anfänglichen Entwurfs und der Simulation variieren.
  • Das RTL-Design 3115 oder ein Äquivalent kann von der Designeinrichtung weiter in ein Hardwaremodell 3120 synthetisiert werden, das in einer Hardwarebeschreibungssprache (HDL) oder einer anderen Darstellung von physikalischen Designdaten vorliegen kann. Die HDL kann weiter simuliert oder getestet werden, um das IP-Kerndesign zu verifizieren. Das IP-Core-Design kann für die Lieferung an ein 3 . gelagert werdenrd Parteifertigungseinrichtung 3165 unter Verwendung eines nichtflüchtigen Speichers 3140 (z. B. Festplatte, Flash-Speicher oder irgendein nichtflüchtiges Speichermedium). Alternativ kann das IP-Kerndesign (z. B. über das Internet) über eine drahtgebundene Verbindung 3150 oder eine drahtlose Verbindung 3160 übertragen werden. Die Herstellungseinrichtung 3165 kann dann eine integrierte Schaltung herstellen, die zumindest teilweise auf dem IP-Kerndesign basiert. Die hergestellte integrierte Schaltung kann konfiguriert sein, um Operationen gemäß mindestens einer hierin beschriebenen Ausführungsform durchzuführen.
  • 31B veranschaulicht eine Querschnittsseitenansicht einer integrierten Schaltungspackungsanordnung 3170 gemäß einigen hierin beschriebenen Ausführungsformen. Die Packungsbaugruppe 3170 für integrierte Schaltungen veranschaulicht eine Implementierung eines oder mehrerer Prozessor- oder Beschleunigervorrichtungen, wie hierin beschrieben. Die Gehäusebaugruppe 3170 beinhaltet mehrere Einheiten von Hardwarelogik 3172, 3174, die mit einem Substrat 3180 verbunden sind. Die Logik 3172, 3174 kann zumindest teilweise in konfigurierbarer Logik oder Logikhardware mit fester Funktionalität implementiert sein und kann einen oder mehrere Teile eines oder mehrerer der hierin beschriebenen Prozessorkerne, Grafikprozessoren oder anderen Beschleunigervorrichtungen umfassen . Jede Logikeinheit 3172, 3174 kann in einem Halbleiterchip implementiert und über eine Verbindungsstruktur 3173 mit dem Substrat 3180 gekoppelt sein. Die Zwischenverbindungsstruktur 3173 kann konfiguriert sein, um elektrische Signale zwischen der Logik 3172 , 3174 und dem Substrat 3180 zu leiten, und kann Zwischenverbindungen umfassen, wie beispielsweise Bumps oder Säulen, aber nicht darauf beschränkt. In einigen Ausführungsformen kann die Verbindungsstruktur 3173 dazu konfiguriert sein, elektrische Signale zu routen, wie zum Beispiel Eingabe-/Ausgabe-(I/O)-Signale und/oder Strom- oder Massesignale, die mit dem Betrieb der Logik 3172, 3174 verbunden sind. In einigen Ausführungsformen ist das Substrat 3180 ein Laminatsubstrat auf Epoxidbasis. Das Substrat 3180 kann in anderen Ausführungsformen andere geeignete Arten von Substraten umfassen. Die Gehäusebaugruppe 3170 kann über eine Gehäuseverbindung 3183 mit anderen elektrischen Geräten verbunden werden. Die Package-Verbindung 3183 kann mit einer Oberfläche des Substrats 3180 gekoppelt sein, um elektrische Signale zu anderen elektrischen Vorrichtungen zu leiten, wie zum Beispiel einem Motherboard, einem anderen Chipsatz oder einem Multi-Chip-Modul.
  • In einigen Ausführungsformen sind die Logikeinheiten 3172, 3174 elektrisch mit einer Brücke 3182 gekoppelt, die dazu konfiguriert ist, elektrische Signale zwischen den Logiken 3172, 3174 zu leiten. Die Brücke 3182 kann eine dichte Verbindungsstruktur sein, die einen Weg für elektrische Signale bereitstellt. Die Brücke 3182 kann ein Brückensubstrat umfassen, das aus Glas oder einem geeigneten Halbleitermaterial besteht. Auf dem Brückensubstrat können elektrische Routing-Merkmale gebildet werden, um eine Chip-zu-Chip-Verbindung zwischen der Logik 3172, 3174 bereitzustellen.
  • Obwohl zwei Logikeinheiten 3172, 3174 und eine Brücke 3182 dargestellt sind, können hierin beschriebene Ausführungsformen mehr oder weniger Logikeinheiten auf einem oder mehreren Dies umfassen. Der eine oder die mehreren Chips können durch null oder mehr Brücken verbunden sein, da die Brücke 3182 ausgeschlossen werden kann, wenn die Logik auf einem einzelnen Chip enthalten ist. Alternativ können mehrere Chips oder Logikeinheiten durch eine oder mehrere Brücken verbunden werden. Außerdem können mehrere Logikeinheiten, Chips und Brücken in anderen möglichen Konfigurationen, einschließlich dreidimensionaler Konfigurationen, miteinander verbunden werden.
  • Beispielhaftes System auf einem integrierten Chip-Schaltkreis
  • 32-33 veranschaulichte beispielhafte integrierte Schaltungen und zugehörige Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden können, gemäß verschiedenen hierin beschriebenen Ausführungsformen. Zusätzlich zu dem, was dargestellt ist, können andere Logiken und Schaltungen enthalten sein, einschließlich zusätzlicher Grafikprozessoren/-kerne, peripherer Schnittstellencontroller oder Allzweck-Prozessorkerne.
  • 32 ist ein Blockdiagramm, das ein beispielhaftes System auf einem integrierten Chip-Schaltkreis 3200 veranschaulicht, der gemäß einer Ausführungsform unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann. Die beispielhafte integrierte Schaltung 3200 umfasst einen oder mehrere Anwendungsprozessor(en) 3205 (z. B. CPUs), mindestens einen Grafikprozessor 3210 und kann zusätzlich einen Bildprozessor 3215 und/oder einen Videoprozessor 3220 enthalten, von denen jeder modular sein kann IP-Core aus derselben oder mehreren verschiedenen Design-Einrichtungen. Die integrierte Schaltung 3200 enthält eine Peripherie- oder Buslogik einschließlich eines USB-Controllers 3225, eines UART-Controllers 3230, eines SPI/SDIO-Controllers 3235 und eines I2S/I2C-Controller 3240. Zusätzlich kann die integrierte Schaltung eine Anzeigevorrichtung 3245 beinhalten, die mit einem oder mehreren von einem High-Definition Multimedia Interface (HDMI) Controller 3250 und einer Mobile Industry Processor Interface (MIPI) Anzeigeschnittstelle 3255 gekoppelt ist. Der Speicher kann durch ein Flash-Speicher-Subsystem 3260 bereitgestellt werden, das Flash-Speicher und einen Flash-Speicher-Controller umfasst. Die Speicherschnittstelle kann über einen Speichercontroller 3265 für den Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt werden. Einige integrierte Schaltungen beinhalten zusätzlich eine eingebettete Sicherheits-Engine 3270.
  • 33A-33B sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung in einem SoC gemäß hierin beschriebenen Ausführungsformen veranschaulichen. 33A stellt einen beispielhaften Grafikprozessor 3310 eines Systems auf einem integrierten Chip-Schaltkreis dar, der gemäß einer Ausführungsform unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann. 33B veranschaulicht einen zusätzlichen beispielhaften Grafikprozessor 3340 eines Systems auf einem integrierten Chip-Schaltkreis, der gemäß einer Ausführungsform unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann. Grafikprozessor 3310 von 33A ist ein Beispiel für einen Grafikprozessorkern mit niedrigem Stromverbrauch. Grafikprozessor 3340 von 33B ist ein Beispiel für einen Grafikprozessorkern mit höherer Leistung. Jeder der Grafikprozessoren 3310, 3340 kann Varianten des Grafikprozessors 3210 von sein 32.
  • Wie in FIG. In 33A umfasst der Grafikprozessor 3310 einen Vertexprozessor 3305 und einen oder mehrere Fragmentprozessoren 3315A - 3315N (z. B. 3315A, 3315B, 3315C, 3315D bis 3315N-1 und 3315N). Der Grafikprozessor 3310 kann unterschiedliche Shader-Programme über separate Logik ausführen, so dass der Vertex-Prozessor 3305 optimiert ist, um Operationen für Vertex-Shader-Programme auszuführen, während der eine oder die mehreren Fragment-Prozessoren 3315A - 3315N Fragment-(z. B. Pixel)-Schattierungsoperationen ausführen für Fragment- oder Pixel-Shader-Programme. Der Vertexprozessor 3305 führt die Vertexverarbeitungsstufe der 3D-Grafikpipeline durch und erzeugt Grundelemente und Vertexdaten. Der (die) Fragmentprozessor(en) 3315A-3315N verwenden die Grundelement- und Eckpunktdaten, die von dem Eckpunktprozessor 3305 erzeugt werden, um einen Rahmenpuffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. In einer Ausführungsform sind der (die) Fragmentprozessor(en) 3315A - 3315N optimiert, um Fragment-Shader-Programme auszuführen, wie in der OpenGL-API bereitgestellt, die verwendet werden können, um ähnliche Operationen wie ein Pixel-Shader-Programm durchzuführen, wie in der Direct 3D-API bereitgestellt.
  • Der Grafikprozessor 3310 enthält zusätzlich eine oder mehrere Speicherverwaltungseinheiten (MMUs) 3320A-3320B, Cache(s) 3325A-3325B und Schaltungsverbindung(en) 3330A-3330B. Die eine oder die mehreren MMU(s) 3320A-3320B stellen eine virtuelle zu einer physischen Adresszuordnung für den Grafikprozessor 3310 bereit, einschließlich für den Scheitelpunktprozessor 3305 und/oder Fragmentprozessor(en) 3315A-3315N, die auf Scheitelpunkt oder Bild/Textur verweisen können Daten, die im Speicher gespeichert sind, zusätzlich zu Scheitelpunkt- oder Bild-/Texturdaten, die in dem einen oder mehreren Cache(s) 3325A-3325B gespeichert sind. In einer Ausführungsform können die eine oder die mehreren MMU(s) 3320A-3320B mit anderen MMUs innerhalb des Systems synchronisiert werden, einschließlich einer oder mehrerer MMUs, die mit dem einen oder den mehreren Anwendungsprozessor(en) 3205, dem Bildprozessor 3215 und/oder dem Video verknüpft sind Prozessor 3220 of 32, so dass jeder Prozessor 3205 - 3220 an einem gemeinsam genutzten oder vereinheitlichten virtuellen Speichersystem teilnehmen kann. Die eine oder mehreren Schaltungsverbindungen 3330A - 3330B ermöglichen dem Grafikprozessor 3310 gemäß Ausführungsformen eine Schnittstelle mit anderen IP-Kernen innerhalb des SoC entweder über einen internen Bus des SoC oder über eine direkte Verbindung.
  • Wie in 33B enthält der Grafikprozessor 3340 die eine oder mehrere MMU(s) 3320A-3320B, Cache(s) 3325A-3325B und Schaltungsverbindung(en) 3330A-3330B des Grafikprozessors 3310 von 33A. Der Grafikprozessor 3340 enthält einen oder mehrere Shader-Kerne 3355A-3355N (z. B. 3355A, 3355B, 3355C, 3355D, 3355E, 3355F bis 3355N-1 und 3355N), was eine vereinheitlichte Shader-Core-Architektur bereitstellt, in der ein einzelner Kern oder type oder core kann alle Arten von programmierbarem Shader-Code ausführen, einschließlich Shader-Programmcode, um Vertex-Shader, Fragment-Shader und/oder Compute-Shader zu implementieren. Die genaue Anzahl der vorhandenen Shader-Kerne kann zwischen Ausführungsformen und Implementierungen variieren. Darüber hinaus enthält der Grafikprozessor 3340 einen Inter-Core-Task-Manager 3345, der als Thread-Dispatcher fungiert, um Ausführungsthreads an einen oder mehrere Shader-Kerne 3355A-3355N zu verteilen, und eine Kacheleinheit 3358, um Kacheloperationen für kachelbasiertes Rendering zu beschleunigen, wobei Rendering-Operationen für eine Szene werden in den Bildraum unterteilt, um beispielsweise die lokale räumliche Kohärenz innerhalb einer Szene auszunutzen oder die Nutzung interner Caches zu optimieren.
  • In einigen Ausführungsformen umfasst eine Vorrichtung einen oder mehrere Prozessoren einschließlich einer oder mehrerer Grafikverarbeitungseinheiten (GPUs); und mehrere Caches zum Bereitstellen von Speicher für die eine oder mehreren GPUs, wobei die mehreren Caches mindestens einen LI-Cache und einen L3-Cache umfassen, wobei die Vorrichtung zum Bereitstellen eines intelligenten Vorabrufens von Daten durch einen Vorabrufer einer ersten GPU des einen oder mehr GPUs, einschließlich: Messen einer Trefferrate für den L1-Cache, wenn festgestellt wird, dass die Trefferrate für den L1-Cache gleich oder größer als ein Schwellenwert ist, Begrenzen eines Vorabrufens von Daten auf den Speicher im L3-Cache und nach Feststellung, dass die Die Trefferrate für den L1-Cache ist kleiner als ein Schwellenwert, was den Vorabruf von Daten in den L1-Cache ermöglicht.
  • In einigen Ausführungsformen umfasst die Vorrichtung ferner eine Schnittstelle zum Empfangen von Vorabrufbefehlen von Vorabrufern der einen oder mehreren GPUs, und wobei die Schnittstelle unnötige Vorabrufe erkennen und eliminieren soll.
  • In einigen Ausführungsformen soll die Vorrichtung, wenn die Schnittstelle zwei oder mehr Vorabrufe mit einer doppelten Adresse erkennt, einen oder mehrere der Vorabrufe mit der doppelten Adresse eliminieren.
  • In einigen Ausführungsformen soll die Schnittstelle, wenn die Schnittstelle einen Vorabruf erkennt, der Daten betrifft, die nicht zwischenspeicherbar sind, den Vorabruf beseitigen.
  • In einigen Ausführungsformen umfasst die Vorrichtung ferner eine Ausführungseinheit der einen oder mehreren GPUs, wobei die Ausführungseinheit einen Hardware-Präprozessor umfasst, wobei der Hardware-Präprozessor Zugriff auf eine Tabelle von IP-Adressen hat, die ein Kernel verwendet.
  • In einigen Ausführungsformen soll der Hardware-Präprozessor mit dem Vorabrufen von IP-Adressen aus der Tabelle von IP-Adressen vor der Ausführung eines Threads beginnen.
  • In einigen Ausführungsformen dient ein Prefetcher einer GPU der einen oder mehreren GPUs dazu, einen Befehl direkt in einen Befehlscache (I-Cache) vorab zu holen.
  • In einigen Ausführungsformen soll der Vorabruf des Befehls direkt in den I-Cache erfolgen, wenn ein Anwendungstreiber einen nächsten Kernel kennt, und der Vorabruf für den nächsten Kernel ausgegeben wird, wenn die Ausführung eines aktuellen Kernels gestartet wird.
  • In einigen Ausführungsformen soll die Vorrichtung bei einer Rechenoperation, die außerhalb des L3-Cache arbeitet, eine Speicherverbindung verwenden, um eine Speicherbereinigung durchzuführen, um die Aktivität einer Speicherbandbreite aufrechtzuerhalten.
  • In einigen Ausführungsformen ein oder mehrere nichtflüchtige computerlesbare Speichermedien, auf denen ausführbare Computerprogrammanweisungen gespeichert sind, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, Operationen durchzuführen, einschließlich des Messens einer Trefferrate für einen L1-Cache für eine erste Grafikverarbeitungseinheit (GPU) einer oder mehrerer GPUs eines Computersystems, wobei das Computersystem ferner einen L3-Cache umfasst; Empfangen eines Vorabrufs von Daten für die erste GPU; beim Bestimmen, dass die Trefferrate für den L1-Cache gleich oder größer als ein Schwellenwert ist, Begrenzen des Vorabrufens der Daten auf die Speicherung im L3-Cache; und beim Bestimmen, dass die Trefferrate für den L1-Cache kleiner als der Schwellenwert ist, Ermöglichen des Vorabrufens der Daten in den L1-Cache.
  • In einigen Ausführungsformen umfassen die Anweisungen ferner Anweisungen zum Erkennen und Eliminieren unnötiger Vorabrufe, die für die eine oder mehreren GPUs empfangen werden.
  • In einigen Ausführungsformen umfasst das Erfassen und Beseitigen unnötiger Vorabrufe das Erfassen von zwei oder mehr Vorabrufen mit einer doppelten Adresse und das Beseitigen von einem oder mehreren der Vorabrufe mit der doppelten Adresse.
  • In einigen Ausführungsformen umfasst das Erfassen und Beseitigen unnötiger Vorabrufe das Erfassen eines Vorabrufs, der sich auf Daten bezieht, die nicht zwischenspeicherbar sind, und das Beseitigen des Vorabrufens.
  • In einigen Ausführungsformen umfassen die Anweisungen ferner Anweisungen zum Vorabrufen von IP-Adressen aus einer Tabelle von IP-Adressen vor der Ausführung eines Threads unter Verwendung eines Hardware-Präprozessors.
  • In einigen Ausführungsformen umfassen die Anweisungen ferner Anweisungen zum Vorabrufen einer Anweisung direkt in einen Anweisungs-Cache (I-Cache).
  • In einigen Ausführungsformen soll der Vorabruf des Befehls direkt in den I-Cache erfolgen, wenn ein Anwendungstreiber einen nächsten Kernel kennt, und der Vorabruf für den nächsten Kernel ausgegeben wird, wenn die Ausführung eines aktuellen Kernels gestartet wird.
  • In einigen Ausführungsformen umfassen die Anweisungen ferner Anweisungen zum Verwenden einer Speicherverbindung, um eine Speicherbereinigung durchzuführen, um die Aktivität einer Speicherbandbreite bei einer Rechenoperation aufrechtzuerhalten, die außerhalb des L3-Cache ausgeführt wird.
  • In einigen Ausführungsformen umfasst ein Verfahren das Messen einer Trefferrate für einen L1-Cache für eine erste Grafikverarbeitungseinheit (GPU) einer oder mehrerer GPUs eines Computersystems, wobei das Computersystem ferner einen L3-Cache umfasst; Empfangen eines Vorabrufs von Daten für die erste GPU; beim Bestimmen, dass die Trefferrate für den L1-Cache gleich oder größer als ein Schwellenwert ist, Begrenzen des Vorabrufens der Daten auf die Speicherung im L3-Cache; und beim Bestimmen, dass die Trefferrate für den L1-Cache kleiner als der Schwellenwert ist, Ermöglichen des Vorabrufens der Daten in den L1-Cache.
  • In einigen Ausführungsformen umfasst das Verfahren ferner das Erkennen und Beseitigen unnötiger Vorabrufe, die für die eine oder mehreren GPUs empfangen wurden.
  • In einigen Ausführungsformen umfasst das Erfassen und Beseitigen unnötiger Vorabrufe das Erfassen von zwei oder mehr Vorabrufen mit einer doppelten Adresse und das Beseitigen von einem oder mehreren der Vorabrufe mit der doppelten Adresse.
  • In einigen Ausführungsformen umfasst das Erfassen und Beseitigen unnötiger Vorabrufe das Erfassen eines Vorabrufs, der sich auf Daten bezieht, die nicht zwischenspeicherbar sind, und das Beseitigen des Vorabrufens.
  • In einigen Ausführungsformen umfasst das Verfahren ferner das Vorabrufen von IP-Adressen aus einer Tabelle von IP-Adressen vor der Ausführung eines Threads unter Verwendung eines Hardware-Präprozessors.
  • In einigen Ausführungsformen umfasst das Verfahren ferner das Vorabrufen eines Befehls direkt in einen Befehlscache (I-Cache).
  • In einigen Ausführungsformen soll der Vorabruf des Befehls direkt in den I-Cache erfolgen, wenn ein Anwendungstreiber einen nächsten Kernel kennt, und der Vorabruf für den nächsten Kernel ausgegeben wird, wenn die Ausführung eines aktuellen Kernels gestartet wird.
  • In einigen Ausführungsformen umfasst das Verfahren ferner das Verwenden einer Speicherverbindung, um eine Speicherbereinigung durchzuführen, um die Aktivität einer Speicherbandbreite bei einer Rechenoperation aufrechtzuerhalten, die außerhalb des L3-Cache ausgeführt wird.
  • In einigen Ausführungsformen umfasst eine Vorrichtung Mittel zum Messen einer Trefferrate für einen L1-Cache für eine erste Grafikverarbeitungseinheit (GPU) einer oder mehrerer GPUs eines Computersystems, wobei das Computersystem ferner einen L3-Cache umfasst; Mittel zum Empfangen eines Vorabrufs von Daten für die erste GPU; beim Bestimmen, dass die Trefferrate für den L1-Cache gleich oder größer als ein Schwellenwert ist, Begrenzen des Vorabrufens der Daten auf die Speicherung im L3-Cache; und Mittel zum Ermöglichen des Vorabrufens der Daten in den L1-Cache, wenn bestimmt wird, dass die Trefferrate für den L1-Cache kleiner als der Schwellenwert ist.
  • In einigen Ausführungsformen umfasst die Vorrichtung ferner Mittel zum Erfassen und Eliminieren unnötiger Vorabrufe, die für die eine oder mehreren GPUs empfangen werden.
  • In einigen Ausführungsformen umfasst das Erfassen und Beseitigen unnötiger Vorabrufe das Erfassen von zwei oder mehr Vorabrufen mit einer doppelten Adresse und das Beseitigen von einem oder mehreren der Vorabrufe mit der doppelten Adresse.
  • In einigen Ausführungsformen umfasst das Erfassen und Beseitigen unnötiger Vorabrufe das Erfassen eines Vorabrufs, der sich auf Daten bezieht, die nicht zwischenspeicherbar sind, und das Beseitigen des Vorabrufens.
  • In einigen Ausführungsformen umfasst die Vorrichtung ferner Mittel zum Vorauslesen von IP-Adressen aus einer Tabelle von IP-Adressen vor der Ausführung eines Threads unter Verwendung eines Hardware-Präprozessors.
  • In einigen Ausführungsformen umfasst die Vorrichtung ferner Mittel zum Vorabrufen eines Befehls direkt in einen Befehlscache (I-Cache).
  • In einigen Ausführungsformen soll der Vorabruf des Befehls direkt in den I-Cache erfolgen, wenn ein Anwendungstreiber einen nächsten Kernel kennt, und der Vorabruf für den nächsten Kernel ausgegeben wird, wenn die Ausführung eines aktuellen Kernels gestartet wird.
  • In einigen Ausführungsformen umfasst die Vorrichtung ferner Mittel zum Verwenden einer Speicherverbindung, um eine Speicherbereinigung durchzuführen, um die Aktivität einer Speicherbandbreite bei einer Rechenoperation aufrechtzuerhalten, die außerhalb des L3-Cache ausgeführt wird.
  • In der obigen Beschreibung werden zu Erläuterungszwecken zahlreiche spezifische Details dargelegt, um ein gründliches Verständnis der beschriebenen Ausführungsformen zu ermöglichen. Für den Fachmann ist jedoch offensichtlich, dass Ausführungsformen ohne einige dieser spezifischen Details praktiziert werden können. In anderen Fällen werden wohlbekannte Strukturen und Vorrichtungen in Form eines Blockdiagramms gezeigt. Es kann eine Zwischenstruktur zwischen den dargestellten Komponenten geben. Die hier beschriebenen oder dargestellten Komponenten können zusätzliche Eingänge oder Ausgänge aufweisen, die nicht dargestellt oder beschrieben sind.
  • Verschiedene Ausführungsformen können verschiedene Prozesse umfassen. Diese Prozesse können durch Hardwarekomponenten ausgeführt werden oder können in Computerprogrammen oder maschinenausführbaren Anweisungen verkörpert sein, die verwendet werden können, um einen Universal- oder Spezialprozessor oder Logikschaltungen, die mit den Anweisungen programmiert sind, zum Ausführen der Prozesse zu veranlassen. Alternativ können die Prozesse durch eine Kombination von Hardware und Software durchgeführt werden.
  • Teile verschiedener Ausführungsformen können als Computerprogrammprodukt bereitgestellt werden, das ein computerlesbares Medium mit darauf gespeicherten Computerprogrammanweisungen umfassen kann, die verwendet werden können, um einen Computer (oder andere elektronische Geräte) zur Ausführung durch einen oder mehrere Prozessoren zu programmieren, um Durchführen eines Prozesses gemäß bestimmten Ausführungsformen. Das computerlesbare Medium kann unter anderem Magnetplatten, optische Platten, Nur-Lese-Speicher (ROM), Direktzugriffsspeicher (RAM), löschbare programmierbare Nur-Lese-Speicher (EPROM), elektrisch löschbare, programmierbare Lesegeräte umfassen -nur Speicher (EEPROM), magnetische oder optische Karten, Flash-Speicher oder andere computerlesbare Medien, die zum Speichern elektronischer Anweisungen geeignet sind. Darüber hinaus können Ausführungsformen auch als Computerprogrammprodukt heruntergeladen werden, wobei das Programm von einem entfernten Computer zu einem anfordernden Computer übertragen werden kann. In einigen Ausführungsformen sind auf einem nichtflüchtigen computerlesbaren Speichermedium Daten gespeichert, die Befehlsfolgen darstellen, die, wenn sie von einem Prozessor ausgeführt werden, den Prozessor veranlassen, bestimmte Operationen durchzuführen.
  • Viele der Verfahren werden in ihrer grundlegendsten Form beschrieben, aber Prozesse können zu jedem der Verfahren hinzugefügt oder daraus gelöscht werden, und Informationen können hinzugefügt oder von jeder der beschriebenen Nachrichten abgezogen werden, ohne vom grundlegenden Umfang der vorliegenden Ausführungsformen abzuweichen. Für den Fachmann ist offensichtlich, dass viele weitere Modifikationen und Anpassungen vorgenommen werden können. Die besonderen Ausführungsformen werden nicht bereitgestellt, um das Konzept einzuschränken, sondern um es zu veranschaulichen. Der Umfang der Ausführungsformen soll nicht durch die oben bereitgestellten spezifischen Beispiele bestimmt werden, sondern nur durch die nachfolgenden Ansprüche.
  • Wenn gesagt wird, dass ein Element „A“ mit oder mit Element „B“ verbunden ist, kann Element A direkt mit Element B verbunden sein oder indirekt durch beispielsweise Element C. Wenn in der Beschreibung oder den Ansprüchen angegeben ist, dass eine Komponente , Merkmal, Struktur, Prozess oder Merkmal A „verursacht“ eine Komponente, ein Merkmal, eine Struktur, einen Prozess oder ein Merkmal B, dies bedeutet, dass „A“ zumindest eine Teilursache von „B“ ist, es aber auch mindestens geben kann eine andere Komponente, Funktion, Struktur, Prozess oder Eigenschaft, die dazu beiträgt, „B“ zu verursachen. Wenn in der Spezifikation angegeben ist, dass eine Komponente, ein Merkmal, eine Struktur, ein Prozess oder ein Merkmal „darf“, „könnte“ oder „könnte“, muss diese bestimmte Komponente, Funktion, Struktur, Prozess oder Merkmal nicht enthalten sein. Wenn sich die Beschreibung oder der Anspruch auf „ein“ oder „ein“ Element bezieht, bedeutet dies nicht, dass es nur eines der beschriebenen Elemente gibt.
  • Eine Ausführungsform ist eine Implementierung oder ein Beispiel. Eine Bezugnahme in der Spezifikation auf „eine Ausführungsform“, „eine Ausführungsform“, „einige Ausführungsformen“ oder „andere Ausführungsformen“ bedeutet, dass ein bestimmtes Merkmal, eine Struktur oder ein Merkmal, das in Verbindung mit den Ausführungsformen beschrieben wurde, in mindestens einigen Ausführungsformen enthalten ist, aber nicht unbedingt alle Ausführungsformen. Die verschiedenen Erscheinungsformen von „einer Ausführungsform“, „einer Ausführungsform“ oder „einigen Ausführungsformen“ beziehen sich nicht notwendigerweise alle auf die gleichen Ausführungsformen. Es versteht sich, dass in der vorstehenden Beschreibung beispielhafter Ausführungsformen verschiedene Merkmale manchmal in einer einzigen Ausführungsform, Figur oder Beschreibung davon zusammengefasst sind, um die Offenbarung zu rationalisieren und zum Verständnis eines oder mehrerer der verschiedenen neuartigen Aspekte beizutragen . Dieses Offenbarungsverfahren ist jedoch nicht so zu interpretieren, dass es die Absicht widerspiegelt, dass die beanspruchten Ausführungsformen mehr Merkmale erfordern, als in jedem Anspruch ausdrücklich aufgeführt sind. Vielmehr liegen, wie die folgenden Ansprüche widerspiegeln, neue Aspekte in weniger als allen Merkmalen einer einzelnen vorstehend offenbarten Ausführungsform. Somit werden die Ansprüche hiermit ausdrücklich in diese Beschreibung aufgenommen, wobei jeder Anspruch für sich allein als separates Ausführungsbeispiel steht.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 16/355015 [0001]
  • Zitierte Nicht-Patentliteratur
    • Shane Cook, CUDA-Programmierung Kapitel 3, Seiten 37-51 (2013) [0004]

Claims (22)

  1. Vorrichtung, umfassend: einen oder mehrere Prozessoren einschließlich einer oder mehrerer Grafikverarbeitungseinheiten (GPUs); und mehrere Caches, um Speicher für die eine oder mehreren GPUs bereitzustellen, wobei die mehreren Caches mindestens einen L1-Cache und einen L3-Cache umfassen; und wobei die Vorrichtung ein intelligentes Vorabrufen von Daten durch einen Vorabrufer einer ersten GPU der einen oder mehreren GPUs bereitstellt, einschließlich: Messung einer Trefferrate für den L1-Cache, beim Bestimmen, dass die Trefferrate für den L1-Cache gleich oder größer als ein Schwellenwert ist, Begrenzen eines Vorabrufens von Daten auf den Speicher im L3-Cache, und beim Bestimmen, dass die Trefferrate für den L1-Cache kleiner als ein Schwellenwert ist, Ermöglichen des Vorabrufens von Daten in den L1-Cache.
  2. Vorrichtung nach Anspruch 1, wobei die Vorrichtung ferner eine Schnittstelle umfasst, um Vorabrufbefehle von Vorabrufern der einen oder mehreren GPUs zu empfangen, und wobei die Schnittstelle dazu dient, unnötige Vorabrufe zu erkennen und zu eliminieren.
  3. Vorrichtung nach Anspruch 2, wobei, wenn die Schnittstelle zwei oder mehr Vorabrufe mit einer doppelten Adresse erkennt, die Vorrichtung einen oder mehrere der Vorabrufe mit der doppelten Adresse beseitigen soll.
  4. Vorrichtung nach Anspruch 2, wobei, wenn die Schnittstelle einen Vorabruf erkennt, der sich auf Daten bezieht, die nicht zwischenspeicherbar sind, die Schnittstelle den Vorabruf eliminieren soll.
  5. Vorrichtung nach Anspruch 1, ferner umfassend eine Ausführungseinheit der einen oder mehreren GPUs, wobei die Ausführungseinheit einen Hardware-Präprozessor umfasst, wobei der Hardware-Präprozessor Zugriff auf eine Tabelle von IP-Adressen hat, die ein Kernel verwendet.
  6. Vorrichtung nach Anspruch 5, wobei der Hardware-Vorprozessor mit dem Vorabrufen von IP-Adressen aus der Tabelle von IP-Adressen vor der Ausführung eines Threads beginnen soll.
  7. Vorrichtung nach Anspruch 1, wobei ein Prefetcher einer GPU der einen oder mehreren GPUs einen Befehl direkt in einen Befehlscache (I-Cache) vorab abrufen soll.
  8. Vorrichtung nach Anspruch 7, wobei der Vorabruf des Befehls direkt in den I-Cache erfolgen soll, wenn ein Anwendungstreiber einen nächsten Kernel kennt, und der Vorabruf für den nächsten Kernel ausgegeben wird, wenn die Ausführung eines aktuellen Kernels gestartet wird.
  9. Vorrichtung nach Anspruch 1, wobei bei einer Rechenoperation, die außerhalb des L3-Cache arbeitet, die Vorrichtung eine Speicherverbindung verwenden soll, um eine Speicherbereinigung durchzuführen, um die Aktivität einer Speicherbandbreite aufrechtzuerhalten.
  10. Ein oder mehrere nichtflüchtige computerlesbare Speichermedien, auf denen ausführbare Computerprogrammanweisungen gespeichert sind, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, bewirken, dass der eine oder die mehreren Prozessoren Operationen ausführen, umfassend: Messen einer Trefferrate für einen L1-Cache für eine erste Grafikverarbeitungseinheit (GPU) einer oder mehrerer GPUs eines Computersystems, wobei das Computersystem ferner einen L3-Cache umfasst, Empfangen eines Vorabrufs von Daten für die erste GPU; beim Bestimmen, dass die Trefferrate für den L1-Cache gleich oder größer als ein Schwellenwert ist, Begrenzen des Vorabrufens der Daten auf die Speicherung im L3-Cache; und beim Bestimmen, dass die Trefferrate für den L1-Cache kleiner als der Schwellenwert ist, Ermöglichen des Vorabrufens der Daten in den L1-Cache.
  11. Ein oder mehrere computerlesbare Speichermedien nach Anspruch 10, ferner umfassend Anweisungen zum Erkennen und Eliminieren unnötiger Vorabrufe, die für die eine oder mehreren GPUs empfangen werden.
  12. Ein oder mehrere computerlesbare Speichermedien nach Anspruch 11, wobei das Erfassen und Beseitigen unnötiger Vorabrufe das Erfassen von zwei oder mehr Vorabrufen mit einer doppelten Adresse und das Beseitigen von einem oder mehreren der Vorabrufe mit der doppelten Adresse umfasst.
  13. Ein oder mehrere computerlesbare Speichermedien nach Anspruch 11, wobei das Erfassen und Beseitigen unnötiger Vorabrufe das Erfassen eines Vorabrufens umfasst, der sich auf Daten bezieht, die nicht zwischenspeicherbar sind, und das Beseitigen des Vorabrufens.
  14. Ein oder mehrere computerlesbare Speichermedien nach Anspruch 10, ferner umfassend Anweisungen zum Vorabrufen von IP-Adressen aus einer Tabelle von IP-Adressen vor der Ausführung eines Threads unter Verwendung eines Hardware-Präprozessors.
  15. Das eine oder die mehreren computerlesbaren Speichermedien nach Anspruch 10, ferner umfassend Befehle zum Vorabrufen eines Befehls direkt in einen Befehlscache (I-Cache).
  16. Ein oder mehrere computerlesbare Speichermedien nach Anspruch 15, wobei das Vorabrufen des Befehls direkt in den I-Cache erfolgen soll, wenn ein Anwendungstreiber einen nächsten Kernel kennt, und der Vorabruf beim Start für den nächsten Kernel ausgegeben wird Ausführung eines aktuellen Kernels.
  17. Das eine oder die mehreren computerlesbaren Speichermedien nach Anspruch 10, ferner umfassend Anweisungen zum Verwenden einer Speicherverbindung, um eine Speicherbereinigung durchzuführen, um die Aktivität einer Speicherbandbreite bei einer Rechenoperation aufrechtzuerhalten, die außerhalb des L3-Cache ausgeführt wird.
  18. Verfahren, umfassend: Messen einer Trefferrate für einen L1-Cache für eine erste Grafikverarbeitungseinheit (GPU) einer oder mehrerer GPUs eines Computersystems, wobei das Computersystem ferner einen L3-Cache umfasst; Empfangen eines Vorabrufs von Daten für die erste GPU; beim Bestimmen, dass die Trefferrate für den L1-Cache gleich oder größer als ein Schwellenwert ist, Begrenzen des Vorabrufens der Daten auf die Speicherung im L3-Cache; und beim Bestimmen, dass die Trefferrate für den L1-Cache kleiner als der Schwellenwert ist, Ermöglichen des Vorabrufens der Daten in den L1-Cache.
  19. Verfahren nach Anspruch 18, ferner umfassend das Erfassen und Beseitigen unnötiger Vorabrufe, die für die eine oder mehreren GPUs empfangen werden.
  20. Verfahren nach Anspruch 18, ferner umfassend das Vorabrufen von IP-Adressen aus einer Tabelle von IP-Adressen vor der Ausführung eines Threads unter Verwendung eines Hardware-Präprozessors.
  21. Verfahren nach Anspruch 18, das ferner das Vorabrufen eines Befehls direkt in einen Befehlscache (I-Cache) umfasst.
  22. Verfahren nach Anspruch 18, das ferner das Verwenden einer Speicherverbindung umfasst, um eine Speicherbereinigung durchzuführen, um die Aktivität einer Speicherbandbreite bei einer Rechenoperation aufrechtzuerhalten, die außerhalb des L3-Cache ausgeführt wird.
DE112020000902.5T 2019-03-15 2020-02-12 Datenvorabruf für die grafikdatenverarbeitung Pending DE112020000902T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/355,015 2019-03-15
US16/355,015 US10909039B2 (en) 2019-03-15 2019-03-15 Data prefetching for graphics data processing
PCT/US2020/017897 WO2020190429A1 (en) 2019-03-15 2020-02-12 Data prefetching for graphics data processing

Publications (1)

Publication Number Publication Date
DE112020000902T5 true DE112020000902T5 (de) 2021-11-04

Family

ID=69784568

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112020000902.5T Pending DE112020000902T5 (de) 2019-03-15 2020-02-12 Datenvorabruf für die grafikdatenverarbeitung

Country Status (4)

Country Link
US (3) US10909039B2 (de)
CN (1) CN113454609A (de)
DE (1) DE112020000902T5 (de)
WO (1) WO2020190429A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11409658B2 (en) 2019-03-15 2022-08-09 Intel Corporation Data prefetching for graphics data processing

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210108749A (ko) * 2020-02-26 2021-09-03 삼성전자주식회사 가속기, 가속기의 동작 방법 및 이를 포함한 가속기 시스템

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6898674B2 (en) 2002-06-11 2005-05-24 Intel Corporation Apparatus, method, and system for synchronizing information prefetch between processors and memory controllers
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US7206902B2 (en) 2004-08-17 2007-04-17 Nvidia Corporation System, apparatus and method for predicting accesses to a memory
US7681020B2 (en) * 2007-04-18 2010-03-16 International Business Machines Corporation Context switching and synchronization
US8583894B2 (en) * 2010-09-09 2013-11-12 Advanced Micro Devices Hybrid prefetch method and apparatus
US9176878B2 (en) * 2012-03-15 2015-11-03 Oracle International Corporation Filtering pre-fetch requests to reduce pre-fetching overhead
US10585801B2 (en) * 2012-11-26 2020-03-10 Advanced Micro Devices, Inc. Prefetch kernels on a graphics processing unit
CN103454609B (zh) 2013-09-11 2015-10-07 国家电网公司 一种容性设备在线监测装置调试平台
US9286224B2 (en) * 2013-11-26 2016-03-15 Intel Corporation Constraining prefetch requests to a processor socket
KR102100161B1 (ko) * 2014-02-04 2020-04-14 삼성전자주식회사 Gpu 데이터 캐싱 방법 및 그에 따른 데이터 프로세싱 시스템
US10223333B2 (en) 2014-08-29 2019-03-05 Nvidia Corporation Performing multi-convolution operations in a parallel processing system
US10120806B2 (en) 2016-06-27 2018-11-06 Intel Corporation Multi-level system memory with near memory scrubbing based on predicted far memory idle time
US10528864B2 (en) 2016-08-11 2020-01-07 Nvidia Corporation Sparse convolutional neural network accelerator
US10891538B2 (en) 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
US10613983B2 (en) * 2018-03-20 2020-04-07 Advanced Micro Devices, Inc. Prefetcher based speculative dynamic random-access memory read request technique
CN109284240B (zh) * 2018-10-15 2020-06-16 上海兆芯集成电路有限公司 存储器集成电路及其预取方法
US10909039B2 (en) 2019-03-15 2021-02-02 Intel Corporation Data prefetching for graphics data processing
US20220083651A1 (en) 2020-09-17 2022-03-17 Intel Corporation Protection of authentication tag computation against power and electromagnetic side-channel attacks

Non-Patent Citations (1)

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

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11409658B2 (en) 2019-03-15 2022-08-09 Intel Corporation Data prefetching for graphics data processing
US11892950B2 (en) 2019-03-15 2024-02-06 Intel Corporation Data prefetching for graphics data processing

Also Published As

Publication number Publication date
US20210255957A1 (en) 2021-08-19
US20200293450A1 (en) 2020-09-17
US10909039B2 (en) 2021-02-02
US11409658B2 (en) 2022-08-09
US11892950B2 (en) 2024-02-06
WO2020190429A1 (en) 2020-09-24
CN113454609A (zh) 2021-09-28
US20230051190A1 (en) 2023-02-16

Similar Documents

Publication Publication Date Title
DE112020001249T5 (de) Dünnbesetzt-Optimierungen für eine Matrixbeschleunigerarchitektur
DE112020001258T5 (de) Grafikprozessoren und Grafikverarbeitungseinheiten mit Skalarproduktakkumulationsanweisungen für ein Hybrid-Gleitkommaformat
DE102020130078A1 (de) Systolische arithmetik an spärlichen daten
DE102018110380A1 (de) Tool zum Ermöglichen der Effizienz beim Maschinenlernen
DE102018133555A1 (de) Berechnungsoptimierungsmechanismus für tiefe neuronale Netze
DE102020129251A1 (de) Adaptives verformbares kernvorhersagenetzwerk zum bildentrauschen
DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
DE102018110371A1 (de) Intelligente speicherhandhabung und datenmanagement für maschinenlernnetzwerke
DE102020129970A1 (de) Systeme und verfahren zur fehlererkennung und steuerung für eingebettete arbeitsspeicher- und rechenelemente
DE102018110687A1 (de) Dynamisches Genauigkeitsmanagement für Deep-Learning-Ganzzahlprimitive
DE112020000464T5 (de) Mehrfachkachel-grafikprozessor-rendering
DE102020130073A1 (de) Verbesserung der datenlokalität für grafikprozessoreinheiten
DE102020129969A1 (de) Verbesserungen der verarbeitung und des caching von graphikverarbeitungseinheiten
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
DE102020132272A1 (de) Verfahren und vorrichtung zum codieren basierend auf schattierungsraten
DE102020132557A1 (de) Vorrichtung und verfahren für asynchrones raytracing
DE102020131901A1 (de) Vorrichtung und verfahren zum durchführen nicht lokaler mittelwertfilterung unter verwendung eines bewegungsschätzschaltkreises eines grafikprozessors
DE102020132544A1 (de) Vorrichtung und verfahren für doppelpräzisionsstrahlquerung in einer raytracing-pipeline
DE102018110346A1 (de) Speichersystem für dnn-ausgaben für die black box
DE112020000848T5 (de) Skalarkernintegration
DE102018110719A1 (de) Hardwareimplementierte Punkt-zu-Punkt-Kommunikationsprimitive zum Maschinenlernen
DE102020129432A1 (de) System und Verfahren zum Anpassen eines ausführbaren Objekts an eine Verarbeitungseinheit
DE102020108476A1 (de) Mechanismus zum Ausführen nichtlinearer Funktionen in einem Beschleuniger des maschinellen Lernens