DE112020000854T5 - Thread-gruppen-planung für die grafikverarbeitung - Google Patents

Thread-gruppen-planung für die grafikverarbeitung Download PDF

Info

Publication number
DE112020000854T5
DE112020000854T5 DE112020000854.1T DE112020000854T DE112020000854T5 DE 112020000854 T5 DE112020000854 T5 DE 112020000854T5 DE 112020000854 T DE112020000854 T DE 112020000854T DE 112020000854 T5 DE112020000854 T5 DE 112020000854T5
Authority
DE
Germany
Prior art keywords
graphics
cache
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
DE112020000854.1T
Other languages
English (en)
Inventor
Ben ASHBAUGH
Jonathan Pearce
Murali Ramadoss
Vikranth Vemulapalli
William B. Sadler
Sungye Kim
Marian Alin Petre
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 DE112020000854T5 publication Critical patent/DE112020000854T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5033Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering data affinity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0837Cache consistency protocols with software control, e.g. non-cacheable data
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/24569Query processing with adaptation to specific hardware, e.g. adapted for using GPUs or SSDs
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • 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
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures

Landscapes

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

Abstract

Ausführungsformen sind im Allgemeinen auf die Ablaufsteuerung von Threadgruppen für die Grafikverarbeitung gerichtet. Eine Ausführungsform einer Vorrichtung umfasst eine Vielzahl von Prozessoren, einschließlich einer Vielzahl von Grafikprozessoren, um Daten zu verarbeiten; eine Erinnerung; und einen oder mehrere Caches zum Speichern von Daten für die Mehrzahl von Grafikprozessoren, wobei der eine oder die mehreren Prozessoren eine Mehrzahl von Gruppen von Threads zur Verarbeitung durch die Mehrzahl von Grafikprozessoren planen sollen, wobei die Planung der Mehrzahl von Gruppen von Threads umfasst: wobei die mehreren Prozessoren eine Vorspannung zum Scheduling der mehreren Gruppen von Threads gemäß einer Cache-Lokalität für den einen oder die mehreren Caches anwenden.

Description

  • VERWANDTE ANMELDUNGEN
  • Diese Anmeldung beansprucht den Nutzen der US-Anmeldung Nr. 16/355,130 , eingereicht am 15. März 2019, deren gesamter Inhalt hiermit durch Bezugnahme hierin aufgenommen wird.
  • TECHNISCHES GEBIET
  • Hierin beschriebene Ausführungsformen beziehen sich allgemein auf das Gebiet elektronischer Geräte und insbesondere auf die Ablaufsteuerung von Threadgruppen für die Grafikverarbeitung.
  • HINTERGRUND
  • Die aktuelle parallele Grafikdatenverarbeitung beinhaltet Systeme und Verfahren, die entwickelt wurden, um spezifische Operationen an Grafikdaten auszuführen, wie beispielsweise lineare Interpolation, Tessellation, Rasterung, Texturabbildung, Tiefentestung usw. Traditionell haben Grafikprozessoren Festfunktions-Recheneinheiten verwendet, um Grafikdaten zu verarbeiten; in jüngster Zeit wurden Teile von Grafikprozessoren jedoch programmierbar gemacht, wodurch ermöglicht wurde, dass solche Prozessoren eine größere Vielfalt an Operationen zur Verarbeitung von Vertex- und Fragmentdaten unterstützen.
  • Um die Leistungsfähigkeit weiter zu verbessern, implementieren Grafikprozessoren typischerweise Verarbeitungstechniken wie Pipelining, bei denen versuchet wird, parallel so viele Grafikdaten wie möglich in den verschiedenen Teilen der Grafik-Pipeline zu verarbeiten. Parallele Grafikprozessoren mit Single-Instruction-, Multiple-Thread (SIMT) - Architekturen sollen den Umfang der parallelen Verarbeitung in der Grafik-Pipeline maximieren. In einer SIMT-Architektur versuchen Gruppen von parallelen Threads, Programmanweisungen so oft wie möglich synchron gemeinsam auszuführen, um die Verarbeitungseffizienz zu erhöhen. Eine allgemeine Übersicht über Software und Hardware für SIMT-Architekturen findet sich in Shane Cook, CUDA Programming Kapitel 3, Seiten 37-51 (2013).
  • Grafikverarbeitungsoperationen umfassen die Planung von Threads für die parallele Verarbeitung. Die Art und Weise, in der Thread-Gruppen geplant werden, kann jedoch einen erheblichen Einfluss auf die Cache-Nutzung und den Energiebedarf für die Ausführung der Threads in einem Grafikprozessor haben. Das herkömmliche Scheduling von Threads kann dafür sorgen, dass Hardware-Ressourcen beschäftigt bleiben, aber ein solches Scheduling kann tatsächlich zu einem höheren Stromverbrauch und einer geringeren Leistung bei der Grafikverarbeitung aufgrund einer weniger effektiven Nutzung von Cache-Ressourcen wegen der geringen räumlichen Lokalität für Thread-Gruppen führen.
  • Figurenliste
  • Hier beschriebene Ausführungsformen sind beispielhaft und nicht einschränkend in den Figuren der beigefügten Zeichnungen veranschaulicht, in denen sich gleiche Bezugszeichen auf ähnliche Elemente beziehen.
    • 1 ist ein Blockdiagramm, das ein Computersystem veranschaulicht, das zum Implementieren eines oder mehrerer Aspekte der hierin beschriebenen Ausführungsformen konfiguriert ist;
    • 2A-2D veranschaulichen parallele Prozessorkomponenten gemäß einer Ausführungsform,
    • 3A-3C sind Blockdiagramme von Grafikmultiprozessoren und multiprozessorbasierten GPUs gemäß Ausführungsformen;
    • 4A-4F veranschaulichen eine beispielhafte Architektur, in der mehrere GPUs kommunikativ mit mehreren Mehrkernprozessoren gekoppelt sind;
    • 5 veranschaulicht eine Grafikverarbeitungs-Pipeline gemäß einer Ausführungsform;
    • 6 veranschaulicht einen Maschinenlern-Softwarestapel gemäß einer Ausführungsform;
    • 7 veranschaulicht eine Universal-Grafikverarbeitungseinheit gemäß einer Ausführungsform;
    • 8 veranschaulicht ein Multi-GPU-Rechensystem gemäß einer Ausführungsform;
    • 9A-9B veranschaulichen Schichten beispielhafter tiefer neuronaler Netze;
    • 10 veranschaulicht ein beispielhaftes rekurrentes neuronales Netz;
    • 11 veranschaulicht Training und 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 einer herkömmlichen Planung von Thread-Gruppen für die Grafikverarbeitung;
    • 15 ist eine Darstellung der Planung von Thread-Gruppen für die Grafikverarbeitung unter Verwendung der Cache-Lokalität gemäß einigen Ausführungsformen;
    • 16 ist eine Darstellung einer Thread-Gruppen-Planung unter Verwendung von Unterblöcken gemäß einigen Ausführungsformen;
    • 17 ist ein Blockdiagramm eines Verarbeitungssystems gemäß einer Ausführungsform,
    • 18 ist ein Blockdiagramm eines Prozessors gemäß einer Ausführungsform,
    • 19 ist ein Blockdiagramm eines Grafikprozessors gemäß einer Ausführungsform,
    • 20 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine eines Grafikprozessors gemäß einigen Ausführungsformen;
    • 21 ist ein Blockdiagramm einer Hardwarelogik eines Grafikprozessorkerns gemäß einigen hierin beschriebenen Ausführungsformen;
    • 22A-22B veranschaulichen eine Thread-Ausführungslogik mit einem Array von Verarbeitungselementen, die in einem Grafikprozessorkern verwendet werden, gemäß hierin beschriebenen Ausführungsformen;
    • 23 ist ein Blockdiagramm, das ein Grafikprozessor-Anweisungsformat gemäß einigen Ausführungsformen veranschaulicht;
    • 24 ist ein Blockdiagramm eines Grafikprozessors gemäß einer anderen Ausführungsform;
    • 25A-25B veranschaulichen ein Grafikprozessor-Befehlsformat und - Befehlssequenz gemäß einigen Ausführungsformen;
    • 26 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem gemäß einigen Ausführungsformen;
    • 27A ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem gemäß einer Ausführungsform veranschaulicht;
    • 27B veranschaulicht eine Querschnittsseitenansicht einer Gehäusebaugruppe einer integrierten Schaltung gemäß einigen hierin beschriebenen Ausführungsformen;
    • 28 ist ein Blockdiagramm, das eine beispielhafte integrierte Systemauf-einem-Chip-Schaltung gemäß einer Ausführungsform veranschaulicht; und
    • 29A-29B sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung in einem SoC gemäß hierin beschriebenen Ausführungsformen veranschaulichen.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Hierin beschriebene Ausführungsformen sind allgemein auf die Ablaufsteuerung von Threadgruppen für die Grafikverarbeitung gerichtet.
  • Beim herkömmlichen Grafikverarbeitungsbetrieb werden Thread-Gruppen im Allgemeinen nach Bedarf geplant, ohne die Gruppierung der Thread-Gruppen zu berücksichtigen. Thread-Gruppen werden im Allgemeinen „gierig“ auf die erste verfügbare Hardware-Ressource eingeplant, selbst wenn die Hardware-Ressourcen weit von Hardware-Ressourcen entfernt sind, die benachbarte Thread-Gruppen ausführen.
  • Das konventionelle Scheduling von Thread-Gruppen kann Hardware-Ressourcen maximal beschäftigt halten, aber dies ist nicht unbedingt effizient für Leistung und Leistung. Vielmehr kann die herkömmliche Thread-Planung zu einem höheren Stromverbrauch und einer geringeren Leistung in einer Grafikverarbeitungsvorrichtung oder einem Grafikverarbeitungssystem führen, da eine solche Planung als Ergebnis einer geringen räumlichen Lokalität für Thread-Gruppen zu einer weniger effektiven Nutzung von Cache-Ressourcen führt.
  • In einigen Ausführungsformen sorgt eine Vorrichtung, ein System oder ein Prozess für die gemeinsame Planung von verwandten Thread-Gruppen, wenn möglich, um den Betrieb des Grafikprozessors zu verbessern, wobei eine solche Planung die Cache-Lokalität verbessern und den Stromverbrauch im Betrieb reduzieren kann.
  • In einigen Ausführungsformen ist eine Grafikverarbeitungseinheit (GPU) kommunikativ mit Host-/Prozessorkernen gekoppelt, um Grafikoperationen, Maschinenlernoperationen, Musteranalyseoperationen und verschiedene Universal-GPU(GPGPU)-Funktionen zu beschleunigen. Die GPU kann über einen Bus oder einen anderen Interconnect (z. B. einen Hochgeschwindigkeitsinterconnect wie PCIe oder NVLink) kommunikativ mit dem Hostprozessor/Kernen verbunden sein. In anderen Ausführungsformen kann die GPU auf demselben Gehäuse oder Chip wie die Kerne integriert sein und über einen internen Prozessorbus/-interconnect (d. h. innerhalb des Gehäuses oder Chips) kommunikativ mit den Kernen gekoppelt sein. Unabhängig von der Art und Weise, auf welche die GPU verbunden ist, können die Prozessorkerne der GPU Arbeit in Form von in einem Arbeitsdeskriptor enthaltenen Sequenzen von Befehlen/Anweisungen zuweisen. Die GPU verwendet dann eine dedizierte Schaltungsanordnung/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
  • In der folgenden Beschreibung werden zahlreiche spezifische Einzelheiten dargelegt, um ein umfassenderes Verständnis bereitzustellen. Fachleute werden jedoch erkennen, dass die hierin beschriebenen Ausführungsformen ohne eine oder mehrere dieser spezifischen Einzelheiten in die Praxis umgesetzt werden können. In anderen Fällen wurden wohlbekannte Merkmale nicht beschrieben, um die Einzelheiten der vorliegenden Ausführungsformen nicht unklar zu machen.
  • 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 Rechensystem 100 beinhaltet ein Verarbeitungssubsystem 101 mit einem oder mehreren Prozessor(en) 102 und einem Systemspeicher 104, die über einen Interconnectionpfad, der einen Speicherhub 105 aufweisen kann, kommunizieren. Der Speicherhub 105 kann eine separate Komponente innerhalb einer Chipsatzkomponente sein oder kann in dem einen oder den mehreren Prozessor(en) 102 integriert sein. Der Speicherhub 105 ist über eine Kommunikationsverbindung 106 mit einem E/A-Subsystem 111 gekoppelt. Das E/A-Subsystem 111 beinhaltet einen E/A-Hub 107, der ermöglichen kann, dass das Rechensystem 100 eine Eingabe von einer oder mehreren Eingabevorrichtung(en) 108 empfängt. Außerdem kann der E/A-Hub 107 ermöglichen, dass eine Anzeigesteuerung, die in dem einen oder den mehreren Prozessor(en) 102 enthalten sein kann, einer oder mehreren Anzeigevorrichtung(en) 110A Ausgaben bereitstellt. In einer Ausführungsform können die eine oder die mehreren Anzeigevorrichtung(en) 110A, die mit dem E/A-Hub 107 gekoppelt sind, eine lokale, interne oder eingebettete Anzeigevorrichtung beinhalten.
  • In einer Ausführungsform beinhaltet das Verarbeitungssubsystem 101 einen oder mehrere Parallelprozessor(en) 112, die über einen Bus oder eine andere Kommunikationsverbindung 113 mit dem Speicherhub 105 gekoppelt sind. Die Kommunikationsverbindung 113 kann eine/eines von einer beliebigen Anzahl von auf Standards basierenden Kommunikationsverbindungstechnologien oder -protokollen sein, wie unter anderem PCI Express, oder kann eine anbieterspezifische Kommunikationsschnittstelle oder Kommunikationsstruktur sein. In einer Ausführungsform bilden der eine oder die mehreren Parallelprozessor(en) 112 ein rechnerisch fokussiertes Parallel- oder Vektorverarbeitungssystem, das eine große Anzahl von Verarbeitungskernen und/oder Verarbeitungsclustern beinhalten kann, wie etwa einen MIC-Prozessor (MIC: Many Integrated Core). In einer Ausführungsform bilden der eine oder die mehreren Parallelprozessor(en) 112 ein Grafikverarbeitungssubsystem, das Pixel an eine der einen oder mehreren Anzeigevorrichtung(en) 110A, die über den E/A-Hub 107 gekoppelt sind, ausgeben kann. Der eine oder die mehreren Parallelprozessor(en) 112 können auch eine Anzeigesteuerung und eine Anzeigeschnittstelle (nicht dargestellt) aufweisen, um eine direkte Verbindung mit einer oder mehreren Anzeigevorrichtung(en) 110B zu ermöglichen.
  • Innerhalb des E/A-Subsystems 111 kann eine Systemspeicherungseinheit 114 eine Verbindung mit dem E/A-Hub 107 herstellen, um einen Speicherungsmechanismus für das Rechensystem 100 bereitzustellen. Ein E/A-Schalter 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 der Plattform integriert sein können, und verschiedenen anderen Vorrichtungen, die über eine oder mehrere Add-In-Vorrichtung(en) 120 hinzugefügt werden können, zu ermöglichen. Der Netzwerkadapter 118 kann ein Ethernet-Adapter oder ein anderer drahtgebundener Netzwerkadapter sein. Der drahtlose Netzwerkadapter 119 kann eines oder mehrere einer WLAN-, Bluetooth-, Nahfeldkommunikations- (NFC) oder einer anderen Netzwerkvorrichtung aufweisen, die eine oder mehrere drahtlose Funkgeräte aufweist.
  • Das Rechensystem 100 kann andere Komponenten aufweisen, die nicht explizit dargestellt sind, einschließlich USB- oder andere Port-Verbindungen, optische Speicherlaufwerke, Videoaufnahmevorrichtungen und dergleichen, die auch mit dem I/O-Hub 107 verbunden sein können. 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 weisen der eine oder die mehreren Parallelprozessoren 112 eine Schaltung auf, die für Grafik- und Videoverarbeitung optimiert ist, einschließlich beispielsweise einer Videoausgabeschaltung, und bildet eine Grafikverarbeitungseinheit (GPU). In einer anderen Ausführungsform weisen der eine oder die mehreren Parallelprozessoren 112 eine Schaltung auf, die für die allgemeine Verarbeitung optimiert ist, während die zugrundeliegende Computerarchitektur erhalten bleibt, die hier ausführlicher beschrieben wird. In noch einer anderen Ausführungsform können Komponenten des Computersystems 100 mit einem oder mehreren anderen Systemelementen in einer einzigen integrierten Schaltung integriert sein. Zum Beispiel können der eine oder die mehreren Parallelprozessoren 112, der eine oder die mehreren Speicherhub 105, der eine oder die mehreren Prozessoren 102 und Der e/A-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 Konfiguration eines Systems in einem Gehäuse (System-in-Package- SIP) zu bilden. In einer Ausführungsform kann mindestens ein Teil der Komponenten des Computersystems 100 in ein Multi-Chip-Modul (MCM) integriert sein, das mit anderen Multi-Chip-Modulen zu einem modularen Computersystem verbunden werden kann.
  • Man wird zu schätzen wissen, dass das hier dargestellte 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 der Parallelprozessoren 112 kann wie gewünscht modifiziert werden. Zum Beispiel ist der Systemspeicher 104 in einigen Ausführungsformen direkt mit dem/den Prozessor (en) 102 statt über eine Brücke verbunden, während andere Vorrichtungen über den Speicherhub 105 und den oder die Prozessor(en) 102 mit dem Systemspeicher 104 kommunizieren. In anderen alternativen Topologien sind der bzw. die Parallelprozessor(en) 112 mit dem I/O-Hub 107 oder direkt mit einem des einen oder der mehreren Prozessor(en) 102 und nicht mit dem Speicherhub 105 verbunden. In anderen Ausführungsformen können der I/O-Hub 107 und der Speicherhub 105 in einem einzigen Chip integriert sein. Einige Ausführungsformen können zwei oder mehrere Sätze von Prozessor(en) 102 aufweisen, die über mehrere Sockel verbunden sind, die mit zwei oder mehr Instanzen des bzw. der Parallelprozessor(en) 112 koppeln können.
  • Einige der hierin dargestellten speziellen Komponenten sind optional und müssen nicht in allen Implementierungen des Computersystems 100 enthalten sein. Zum Beispiel kann eine beliebige Anzahl von Add-in-Karten oder Peripheriegeräten unterstützt werden, oder einige Komponenten können eliminiert 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. Zum Beispiel kann der Speicher-Hub 105 in einigen Architekturen als eine Northbridge bezeichnet werden, während der I/O-Hub 107 als eine 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 sein, wie 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 weist der Parallelprozessor 200 eine Parallelverarbeitungseinheit 202 auf. Die Parallelverarbeitungseinheit weist eine I/O-Einheit 204 auf, die die Kommunikation mit anderen Vorrichtungen, einschließlich anderer Instanzen der Parallelverarbeitungseinheit 202 ermöglicht. Die I/O-Einheit 204 kann direkt mit anderen Vorrichtungen verbunden sein. In einer Ausführungsform verbindet sich die I/O-Einheit 204 mit anderen Vorrichtungen über die Verwendung einer Hub- oder Switch-Schnittstelle, wie z. B. des Speicherhubs 105. Die Verbindungen zwischen dem Speicherhub 105 und der I/O-Einheit 204 bilden eine Kommunikationsverbindung 113. Innerhalb der Parallelverarbeitungseinheit 202 ist die I/O-Einheit 204 mit einer Host-Schnittstelle 206 und einer Speicher-Crossbar 216 verbunden, wobei die Host-Schnittstelle 206 Befehle zum Ausführen von Verarbeitungsoperationen empfängt und die Speicher-Crossbar 216 Befehle zum Ausführen von Speicheroperationen empfängt.
  • Wenn die Host-Schnittstelle 206 einen Befehlspuffer über die I/O-Einheit 204 empfängt, kann die Host-Schnittstelle 206 Arbeitsoperationen, um diese Befehle auszuführen, an ein Front-End 208 lenken. In einer Ausführungsform ist das Frontend 208 mit einem Scheduler 210 gekoppelt, der konfiguriert ist, Befehle oder andere Arbeitselemente an ein Verarbeitungs-Cluster-Array 212 zu verteilen. In einer Ausführungsform stellt der Scheduler 210 sicher, dass das Verarbeitungs-Cluster-Array 212 richtig konfiguriert und in einem gültigen Zustand ist, bevor Aufgaben an die Verarbeitungs-Cluster des Verarbeitungs-Cluster-Arrays 212 verteilt werden. In einer Ausführungsform ist der Scheduler 210 über Firmware-Logik implementiert, die auf einer Mikrosteuerung ausgeführt wird. Der durch die Mikrosteuerung implementierte Scheduler 210 ist konfigurierbar, um komplexe Zeitplanungs- und Arbeitsverteilungsoperationen mit Grob- und Feingranularität auszufü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 zur Zeitplanung auf dem Verarbeitungs-Array 212 über eine von mehreren Grafikverarbeitungs-Türklingeln nachweisen. Die Arbeitslasten können dann automatisch von der Logik des Schedulers 210 innerhalb der Scheduler-Mikrosteuerung über das Verarbeitungs-Array 212 verteilt werden.
  • Das Verarbeitungs-Cluster-Array 212 kann bis zu „N“ Verarbeitungs-Cluster (z. B. Cluster 214A, Cluster 214B bis Cluster 214N) aufweisen. Jeder Cluster 214A-214N des Verarbeitungs-Cluster-Arrays 212 kann eine große Anzahl gleichzeitiger Threads ausführen. Der Scheduler 210 kann den Clustern 214A bis 214N des Verarbeitungs-Cluster-Arrays 212 unter Verwendung verschiedener Zeitplanungs- und/oder Arbeitsverteilungsalgorithmen, die je nach der Arbeitsbelastung variieren können, die für jeden Programmtyp oder jede Art von Berechnung auftritt, Arbeit zuweisen. Die Zeitplanung kann dynamisch von dem Scheduler 210 gehandhabt werden oder kann teilweise von einer Compiler-Logik während des Kompilierens einer Programmlogik unterstützt werden, die zur Ausführung durch das Verarbeitungs-Cluster-Array 212 konfiguriert ist. In einer Ausführungsform können verschiedene Cluster 214A bis 214N des Verarbeitungs-Cluster-Arrays 212 zum Verarbeiten verschiedener Arten von Programmen oder zum Ausführen verschiedener Arten von Berechnungen zugewiesen werden.
  • Das Verarbeitungs-Cluster-Array 212 kann konfiguriert sein, verschiedene Arten von parallelen Verarbeitungsoperationen auszuführen. In einer Ausführungsform ist das Verarbeitungs-Cluster-Array 212 konfiguriert, allgemeine parallele Rechenoperationen auszuführen. Zum Beispiel kann das Verarbeitungs-Cluster-Array 212 eine Logik aufweisen, um Verarbeitungsaufgaben auszuführen, die das Filtern von Video- und/oder Audiodaten, Ausführen von Modellierungsoperationen einschließlich physikalischer Operationen und Ausführen von Datentransformationen beinhalten.
  • In einer Ausführungsform ist das Verarbeitungs-Cluster-Array 212 konfiguriert, parallele Grafikverarbeitungsoperationen auszuführen. In Ausführungsformen, in denen der Parallelprozessor 200 zum Ausführen von Grafikverarbeitungsoperationen konfiguriert ist, kann das Verarbeitungs-Cluster-Array 212 weitere Logik aufweisen, um die Ausführung solcher Grafikverarbeitungsoperationen zu unterstützen, einschließlich, jedoch nicht beschränkt auf eine Texturabtastlogik zum Ausführen von Texturoperationen wie einer Tessellationslogik und anderer Vertex-Verarbeitungslogik. Zusätzlich kann das Verarbeitungs-Cluster-Array 212 konfiguriert sein, mit der Grafikverarbeitung in Zusammenhang stehende Shader-Programme auszuführen, wie beispielsweise Vertex-Shader, Tessellations-Shader, Geometrie-Shader und Pixel-Shader. Die Parallelverarbeitungseinheit 202 kann Daten von dem Systemspeicher über die I/O-Einheit 204 zur Verarbeitung übertragen. Während der Verarbeitung können die übertragenen Daten während der Verarbeitung in einem On-Chip-Speicher (z. B. dem Parallelprozessorspeicher 222) gespeichert und dann in den Systemspeicher zurückgeschrieben werden.
  • In einer Ausführungsform kann, wenn die Parallelverarbeitungseinheit 202 zur Ausführung einer Grafikverarbeitung verwendet wird, der Scheduler 210 konfiguriert sein, die Verarbeitungsarbeitslast in ungefähr gleich große Aufgaben aufzuteilen, um die Verteilung der Grafikverarbeitungsoperationen auf mehrere Cluster 214A bis 214N des Verarbeitungs-Cluster-Arrays 212 besser zu ermöglichen. In einigen Ausführungsformen können Teile des Verarbeitungs-Cluster-Arrays 212 konfiguriert sein, unterschiedliche Arten von Verarbeitung auszuführen. Ein erster Abschnitt kann zum Beispiel konfiguriert sein, um Vertex-Shading und Topologieerzeugung durchzuführen, ein zweiter Abschnitt kann konfiguriert sein, um Tessellations-und Geometrie-Shading durchzuführen, und ein dritter Abschnitt kann konfiguriert sein, um Pixel-Shading oder andere Bildschirmraumoperationen durchzuführen, um ein gerendertes Bild zur Anzeige zu erzeugen. Zwischendaten, die von einem oder mehreren der Cluster 214A bis 214N erzeugt werden, können in Puffern gespeichert werden, um zu ermöglichen, dass die Zwischendaten zwischen Clustern 214A bis 214N zur weiteren Verarbeitung übertragen werden.
  • Während des Betriebs kann das Verarbeitungs-Cluster-Array 212 Verarbeitungsaufgaben empfangen, die über den Scheduler 210 auszuführen sind, der Befehle empfängt, die Verarbeitungsaufgaben vom Frontend 208 definieren. Für Grafikverarbeitungsoperationen können Verarbeitungsaufgaben Indizes von zu verarbeitenden Daten beinhalten, z. B. Oberflächen- (Patch-) Daten, Primitivdaten, Vertexdaten und/oder Pixeldaten sowie Zustandsparameter und Befehle, die definieren, wie die Daten verarbeitet werden sollen (z. B. welches Programm ausgeführt werden soll). Der Scheduler 210 kann konfiguriert sein, die den Aufgaben entsprechenden Indizes abzurufen oder die Indizes von dem Frontend 208 zu empfangen. Das Frontend 208 kann konfiguriert sein, sicherzustellen, dass das Verarbeitungs-Cluster-Array 212 in einen gültigen Zustand konfiguriert ist, bevor die durch ankommende Befehlspuffer (z. B. Stapel-Puffer, Push-Puffer usw.) spezifizierte Arbeitslast initiiert wird.
  • Jede der einen oder mehreren Instanzen der Parallelverarbeitungseinheit 202 kann mit dem Parallelprozessorspeicher 222 gekoppelt sein. Auf den Parallelprozessorspeicher 222 kann über die Speicher-Crossbar 216 zugegriffen werden, die Speicheranfragen von dem Verarbeitungs-Cluster-Array 212 sowie der I/O-Einheit 204 empfangen kann. Die Speicher-Crossbar 216 kann über eine Speicherschnittstelle 218 auf den Parallelprozessorspeicher 222 zugreifen. Die Speicherschnittstelle 218 kann mehrere Partitionseinheiten (z. B. Partitionseinheit 220A, Partitionseinheit 220B bis Partitionseinheit 220N) aufweisen, die jeweils mit einem Abschnitt (z. B. Speichereinheit) des Parallelprozessorspeichers 222 gekoppelt sein können. Bei einer Implementierung ist die Anzahl von Partitionseinheiten 220 A-220 N so konfiguriert, dass sie gleich der Anzahl von Speichereinheiten ist, so dass eine erste Partitionseinheit 220A eine entsprechende erste Speichereinheit 224A aufweist, eine zweite Partitionseinheit 220B eine entsprechende Speichereinheit 224B aufweist und eine N-te Partitionseinheit 220N eine entsprechende N-te Speichereinheit 224N aufweist. In anderen Ausführungsformen ist die Anzahl der Partitionseinheiten 220A bis 220N möglicherweise nicht gleich der Anzahl der Speichervorrichtungen.
  • In verschiedenen Ausführungsformen können die Speichereinheiten 224A bis 224N verschiedene Arten von Speichervorrichtungen aufweisen, einschließlich dynamischen Direktzugriffsspeicher (DRAM) oder Grafik-Direktzugriffsspeicher wie synchronen Grafik-Direktzugriffsspeicher (SGRAM), einschließlich Grafikspeicher mit doppelter Datenrate (GDDR). In einer Ausführungsform können die Speichereinheiten 224A bis 224N auch 3D-Stapelspeicher aufweisen, einschließlich, jedoch nicht beschränkt auf Speicher mit hoher Bandbreite (HBM). Fachleute werden zu schätzen wissen, dass die spezifische Implementierung der Speichereinheiten 224A bis 224N variieren kann und aus einer von verschiedenen herkömmlichen Designs ausgewählt werden kann. Render-Ziele wie Rahmenpuffer oder Texturabbildungen können über die Speichereinheiten 224A bis 224N gespeichert werden, wodurch die Partitionseinheiten 220A bis 220N Abschnitte jedes Render-Ziels parallel schreiben können, um die verfügbare Bandbreite des Parallelprozessorspeichers 222 effizient zu nutzen. In einigen Ausführungsformen kann eine lokale Instanz des Parallelprozessorspeichers 222 zugunsten eines vereinheitlichen Speicherdesigns ausgeschlossen werden, der einen Systemspeicher in Verbindung mit einem lokalen Cachespeicher verwendet.
  • In einer Ausführungsform kann jeder der Cluster 214A bis 214N des Verarbeitungs-Cluster-Arrays 212 Daten verarbeiten, die in eine der Speichereinheiten 224A bis 224N innerhalb des Parallelprozessorspeichers 222 geschrieben werden. Die Speicher-Crossbar 216 kann konfiguriert sein, die Ausgabe jedes Clusters 214A bis 214N an eine beliebige Partitionseinheit 220A bis 220N oder an einen anderen Cluster 214A bis 214N zu übertragen, die zusätzliche Verarbeitungsoperationen an der Ausgabe ausführen können. Jeder Cluster 214A bis 214N kann mit der Speicherschnittstelle 218 über die Speicher-Crossbar 216 kommunizieren, um aus verschiedenen externen Speichervorrichtungen zu lesen oder in diese zu schreiben. Bei einer Ausführungsform weist die Speicherkreuzschiene 216 eine Verbindung zu der Speicherschnittstelle 218 auf, um mit der E/A-Einheit 204 zu kommunizieren, sowie eine Verbindung zu einer lokalen Instanz des Parallelprozessorspeichers 222, wodurch ermöglicht wird, dass die Verarbeitungseinheiten innerhalb der unterschiedlichen Verarbeitungscluster 214 A-214 N mit Systemspeicher oder einem anderen Speicher, der nicht lokal für die Parallelverarbeitungseinheit 202 ist, kommunizieren. In einer Ausführungsform kann die Speicher-Crossbar 216 virtuelle Kanäle verwenden, um Verkehrsströme zwischen den Clustern 214 A-214 N und den Partitionseinheiten 220 A-220 N zu trennen.
  • Wenngleich eine einzelne Instanz der Parallelverarbeitungseinheit 202 innerhalb des Parallelprozessors 200 dargestellt ist, kann eine beliebige Anzahl von Instanzen der Parallelverarbeitungseinheit 202 enthalten sein. Zum Beispiel können mehrere Instanzen der Parallelverarbeitungseinheit 202 auf einer einzelnen Add-In-Karte bereitgestellt sein, oder mehrere Add-In-Karten können miteinander verbunden sein. Die verschiedenen Instanzen der Parallelverarbeitungseinheit 202 können konfiguriert sein, miteinander zu arbeiten, selbst wenn die verschiedenen Instanzen unterschiedliche Anzahlen von Verarbeitungskernen, unterschiedliche Mengen von lokalem Parallelprozessorspeicher und/oder andere Konfigurationsunterschiede aufweisen. Bei einer Ausführungsform können zum Beispiel manche Instanzen der Parallelverarbeitungseinheit 202 Gleitkommaeinheiten mit höherer Genauigkeit relativ zu anderen Instanzen beinhalten. Systeme, die eine oder mehrere Instanzen der Parallelverarbeitungseinheit 202 oder des Parallelprozessors 200 beinhalten, können in einer Vielzahl von Konfigurationen und Formfaktoren implementiert werden, einschließlich unter anderem Desktop-, Laptop-oder Handheld-Personalcomputer, Server, Arbeitsplätze, 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, weist die Partitionseinheit 220 einen L2-Cache 221, eine Rahmenpuffer-Schnittstelle 225 und eine ROP 226 (Raster Operations Unit) auf. Der L2-Cachespeicher 221 ist ein Lese-/Schreib-Cachespeicher, der zum Ausführen von Lade- und Speicheroperationen konfiguriert ist, die von der Speicher-Crossbar 216 und der ROP 226 empfangen werden. Lesefehler und dringende Rückschreibanfragen von dem L2-Cache 221 an die Rahmenpuffer-Schnittstelle 225 zur Verarbeitung ausgegeben. Aktualisierungen können auch über die Rahmenpuffer-Schnittstelle 225 zur opportunistischen Verarbeitung an den Rahmenpuffer 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 die ROP 226 eine Verarbeitungseinheit, die Rasteroperationen wie Schablonen-, z-Test-, Mischoperationen und dergleichen ausführt. Die ROP 226 gibt dann verarbeitete Grafikdaten aus, die im Grafikspeicher gespeichert sind. In einigen Ausführungsformen beinhaltet die ROP 226 Kompressionslogik 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 Komprimierungsalgorithmen verwendet. Die Art der Komprimierung, die von der ROP 226 ausgeführt wird, kann basierend auf den statistischen Eigenschaften der zu komprimierenden Daten variieren. Zum Beispiel wird in einer Ausführungsform eine Delta-Farbkomprimierung an Tiefen- und Farbdaten auf einer Pro-Kachel-Basis ausgefü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 Schreibanfragen für Pixeldaten über die Speicher-Crossbar 216 anstelle von Pixelfragmentdaten übertragen. Die verarbeiteten Grafikdaten können auf einer Anzeigevorrichtung angezeigt werden, wie beispielsweise einer der einen oder mehreren Anzeigevorrichtungen 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 Verarbeitungs-Cluster 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 Single-Instruction-, Multiple-Thread- (SIMD-) Befehlserteilungstechniken angewendet, um eine 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-, Multiple-Thread- (SIMT-) Techniken angewendet, um eine parallele Ausführung einer großen Anzahl von allgemein synchronisierten Threads zu unterstützen, wobei eine gemeinsame Anweisungseinheit verwendet wird, die konfiguriert ist, Anweisungen an einen Satz von Verarbeitungs-Engines innerhalb eines jeden der Verarbeitungs-Cluster zu erteilen. Im Gegensatz zu einer SIMD-Ausführungsregelung, bei dem alle Verarbeitungs-Engines typischerweise identische Befehle ausführen, ermöglicht die SIMT-Ausführung, dass verschiedene Threads divergenten Ausführungspfaden durch ein gegebenes Thread-Programm leichter folgen. Fachleute werden verstehen, dass eine SIMD-Verarbeitungsregelung eine funktionelle Teilmenge einer SIMT-Verarbeitungsregelung darstellt.
  • Der Betrieb des Verarbeitungs-Clusters 214 kann über einen Pipeline-Manager 232 gesteuert werden, der Verarbeitungsaufgaben an parallele SIMT-Prozessoren 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 Grafikmultiprozessor 234 ist eine beispielhafte Instanz eines SIMT-Parallelprozessors. Es können jedoch verschiedene Arten von SIMT-Parallelprozessoren unterschiedlicher Architekturen in dem Verarbeitungs-Cluster 214 enthalten sein. Eine oder mehrere Instanzen des Grafikmultiprozessors 234 können in einem Verarbeitungs-Cluster 214 enthalten sein. Der Grafikmultiprozessor 234 kann Daten verarbeiten und eine Daten-Crossbar 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 spezifiziert, die über die Datenkreuzschiene 240 verteilt werden sollen.
  • Jeder Grafikmultiprozessor 234 innerhalb des Verarbeitungs-Clusters 214 kann einen identischen Satz von funktionaler Ausführungslogik (z. B. arithmetische Logikeinheiten, Lade-Speichereinheiten usw.) aufweisen. Die Ausführungsfunktionslogik kann in einer Pipeline-Art konfiguriert sein, in der neue Anweisungen erteilt werden können, bevor vorherige Anweisungen abgeschlossen sind. Die Ausführungsfunktionslogik unterstützt verschiedene Operationen, einschließlich arithmetischer Integer- und Gleitkomma-Vergleichsoperationen, Boolescher Operationen, Bitverschiebung und Berechnung verschiedener algebraischer Funktionen. In einer Ausführungsform kann dieselbe Funktionseinheit-Hardware genutzt werden, um unterschiedliche Operationen durchzuführen, und eine beliebige Kombination von Funktionseinheiten kann vorhanden sein.
  • Die an den Verarbeitungs-Cluster 214 übertragenen Anweisungen bilden einen Thread. Eine Gruppe von Threads, die über den Satz paralleler Verarbeitungs-Engines ausgeführt werden, ist eine Thread-Gruppe. Eine Thread-Gruppe führt dasselbe Programm für verschiedene Eingabedaten aus. Jeder Thread innerhalb einer Thread-Gruppe kann einer anderen Verarbeitungs-Engine innerhalb eines Grafikmultiprozessors 234 zugewiesen sein. Eine Thread-Gruppe kann weniger Threads als die Anzahl von Verarbeitungs-Engines innerhalb des Grafikmultiprozessors 234 aufweisen. Wenn eine Thread-Gruppe weniger Threads als die Anzahl der Verarbeitungs-Engines aufweist, können eine oder mehrere der Verarbeitungs-Engines während Zyklen, in denen diese Thread-Gruppe verarbeitet wird, inaktiv sein. Eine Thread-Gruppe kann auch mehr Threads als die Anzahl von Verarbeitungs-Engines innerhalb des Grafikmultiprozessors 234 aufweisen. 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 Grafikmultiprozessor 234 ausgeführt werden.
  • In einer Ausführungsform weist der Grafikmultiprozessor 234 einen internen Cache-Speicher auf, um Lade-und Speicheroperationen durchzuführen. In einer Ausführungsform kann der Grafikmultiprozessor 234 auf einen internen Cache verzichten und einen Cachespeicher (z. B. L1-Cache 248) innerhalb des Verarbeitungs-Clusters 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 Grafikmultiprozessor 234 kann auch auf einen chipexternen globalen Speicher zugreifen, der einen oder mehrere eines lokalen Parallelprozessorspeichers und/oder Systemspeichers aufweisen kann. Jeder beliebige Speicher außerhalb der Parallelverarbeitungseinheit 202 kann als globaler Speicher verwendet werden. Ausführungsformen, in denen der Verarbeitungs-Cluster 214 mehrere Instanzen des Grafikmultiprozessors 234 aufweist, können gemeinsame Anweisungen und Daten, die in dem L1-Cache 248 gespeichert sein können, gemeinsam nutzen.
  • Jeder Verarbeitungs-Cluster 214 kann eine MMU 245 (Speicherverwaltungseinheit) aufweisen, 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-Nachschlagepuffer (TLB) oder Caches aufweisen, die sich innerhalb des Grafikmultiprozessors 234 oder des L1-Cachespeichers oder Verarbeitungs-Clusters 214 befinden können. Die physikalische Adresse wird verarbeitet, um die Oberflächendaten-Zugriffslokalität zu verteilen, um eine effiziente Anfragenverschachtelung zwischen Partitionseinheiten zu verschachtelt ist. Der Cachezeilenindex kann verwendet werden, um zu bestimmen, ob eine Anfrage für eine Cachezeile ein Treffer oder ein Fehltreffer ist.
  • In Grafik- und Rechenanwendungen kann ein Verarbeitungscluster 214 derart konfiguriert sein, dass jeder Grafikmultiprozessor 234 mit einer Textureinheit 236 zur Durchführung von Texturabbildungsoperationen gekoppelt ist, z. B. zum Bestimmen von Texturabtastpositionen, zum Lesen von Texturdaten und zum Filtern der Texturdaten. Texturdaten werden von einem internen Textur-L1-Cache (nicht dargestellt) oder in einigen Ausführungsformen aus dem L1-Cache innerhalb des Grafikmultiprozessors 234 gelesen und werden je nach Bedarf von einem L2-Cache, einem lokalen Parallelprozessorspeicher oder Systemspeicher abgerufen. Jeder Grafikmultiprozessor 234 gibt verarbeitete Aufgaben an die Daten-Crossbar 240 aus, um die verarbeitete Aufgabe einem weiteren Verarbeitungs-Cluster 214 zur weiteren Verarbeitung bereitzustellen oder die verarbeitete Aufgabe über die Speicher-Crossbar 216 in einem L2-Cache, lokalen Parallelprozessorspeicher oder Systemspeicher 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 ausführen, Pixelfarbdaten organisieren und Adressübersetzungen ausführen.
  • Es versteht sich, dass die hier beschriebene Kernarchitektur veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Eine beliebige Anzahl von Verarbeitungseinheiten, z. B. Grafikmultiprozessor 234, Textureinheiten 236, pre-ROPs 242 usw., kann in einem Verarbeitungs-Cluster 214 enthalten sein. Wenngleich nur ein Verarbeitungs-Cluster 214 dargestellt ist, kann ferner eine Parallelverarbeitungseinheit, wie hierin beschrieben, eine beliebige Anzahl von Instanzen des Verarbeitungs-Clusters 214 aufweisen. In einer Ausführungsform kann jeder Verarbeitungs-Cluster 214 konfiguriert sein, unabhängig von anderen Verarbeitungs-Clustern 214 unter Verwendung separater und unterschiedlicher Verarbeitungseinheiten, L1-Caches usw. betrieben zu werden.
  • 2D zeigt einen Grafik-Multiprozessor 234 gemäß einer Ausführungsform. In einer solchen Ausführungsform ist der Grafikmultiprozessor 234 mit dem Pipeline-Manager 232 des Verarbeitungs-Clusters 214 gekoppelt. Der Grafikmultiprozessor 234 weist eine Ausführungs-Pipeline auf, die einen Anweisungscache 252, eine Anweisungseinheit 254, eine Adressabbildungseinheit 256, eine Registerdatei 258, einen oder mehrere GPGPU-(Universal-Grafikverarbeitungseinheit) Kerne 262 und einen oder mehr Lade-/Speichereinheiten 266 aufweist. Die GPGPU-Kerne 262 und Lade-/Speichereinheiten 266 sind über eine Speicher- und Cache-Verbindung 268 mit dem Cachespeicher 272 und dem gemeinsam genutzten Speicher 270 gekoppelt. In einer Ausführungsform beinhaltet der Grafikmultiprozessor 234 zusätzlich Tensor-und/oder Strahlverfolgungskerne 263, die Hardwarelogik beinhalten, um Matrix- und/oder Strahlverfolgungsoperationen zu beschleunigen.
  • In einer Ausführungsform empfängt der Anweisungscache 252 einen Strom von Anweisungen, die von dem Pipeline-Manager 232 auszuführen sind. Die Anweisungen werden im Anweisungscache 252 zwischengespeichert und zur Ausführung durch die Befehlseinheit 254 ausgegeben. Die Befehlseinheit 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. Eine Anweisung kann auf einen beliebigen lokalen, gemeinsam genutzten oder globalen Adressraum zugreifen, indem sie eine Adresse in einem vereinheitlichten Adressraum spezifiziert. Die Adressenabbildungseinheit 256 kann verwendet werden, um Adressen in dem vereinheitlichten Adressraum in eine unterschiedliche 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 einen temporären Speicher für Operanden bereit, die mit den Datenpfaden der Funktionseinheiten (z. B. GPGPU-Kerne 262, Lade-/Speichereinheiten 266) des Grafikmultiprozessors 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 ist. In einer Ausführungsform ist die Registerdatei 258 zwischen den verschiedenen Warps aufgeteilt, die von dem Grafikmultiprozessor 234 ausgeführt werden.
  • Die GPGPU-Kerne 262 können jeweils Gleitkommaeinheiten (FPUs) und/oder arithmetische Ganzzahl-Logikeinheiten (ALUs) aufweisen, die zum Ausführen von Anweisungen des Grafikmultiprozessors 234 verwendet werden. Die GPGPU-Kerne 262 können gemäß Ausführungsformen eine ähnlich Architektur aufweisen oder können eine unterschiedliche Architektur aufweisen. Zum Beispiel und in einer Ausführungsform beinhaltet ein erster Teil der GPGPU-KERNE 262 eine EINZELPRÄZISIONS-FPU und eine GANZZAHL-ALU, während ein zweiter Teil der GPGPU-KERNE eine DOPPELPRÄZISIONS-FPU beinhaltet. Bei einer Ausführungsform können die FPUs den IEEE 754-2008 Standard für Gleitkomma-Arithmetik implementieren oder Gleitkomma-Arithmetik mit variabler Genauigkeit ermöglichen. Der Grafikmultiprozessor 234 kann außerdem eine oder mehrere Einheiten mit fester Funktion oder spezieller Funktion aufweisen, um spezifische Funktionen wie Kopierrechteck- oder Pixelmischoperationen auszuführen. In einer Ausführungsform können einer oder mehrere der GPGPU-Kerne auch eine Logik für feste oder spezielle Funktionen aufweisen.
  • In einer Ausführungsform weisen die GPGPU-Kerne 262 eine SIMD-Logik auf, die in der Lage ist, eine einzelne Anweisung an mehreren Datensätzen auszuführen. In einer Ausführungsform können GPGPU-Kerne 262 physikalisch SIMD4-, SIMD8- und SIMD 16-Anweisungen ausführen und logisch SIMD1-, SIMD2- und SIMD32-Anweisungen ausführen. Die SIMD-Anweisungen für die GPGPU-Kerne können zur Kompilierungszeit von einem Shader-Compiler generiert oder automatisch generiert werden, wenn Programme ausgeführt werden, die für Single-Program-Multiple-Data- (SPMD-) oder SIMT-Architekturen geschrieben und kompiliert sind. Mehrere Threads eines für das SIMT-AUSFÜHRUNGSMODELL konfigurierten Programms können über eine einzige SIMD-ANWEISUNG ausgeführt werden. Zum Beispiel können in einer Ausführungsform acht SIMT-Threads, die die gleichen 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 Grafikmultiprozessors 234 mit der Registerdatei 258 und mit dem gemeinsam genutzten Speicher 270 verbindet. In einer Ausführungsform ist die Speicher- und Cache-Verbindung 268 eine Crossbar-Verbindung, 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, sodass die Datenübertragung zwischen den GPGPU-Kernen 262 und der Registerdatei 258 eine sehr niedrige Latenz hat. 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 Cachespeicher 272 kann beispielsweise als ein Datencache verwendet werden, um Texturdaten zwischen den Funktionseinheiten und der Textureinheit 236 zwischenzuspeichern. Der gemeinsam genutzte Speicher 270 kann auch als ein zwischengespeichertes Programm verwendet werden. Threads, die auf den GPGPU-Kernen 262 ausgeführt werden, können programmatisch Daten in dem gemeinsam genutzten Speicher zusätzlich zu den automatisch zwischengespeicherten Daten speichern, die in dem Cache-Speicher 272 gespeichert sind.
  • 3A-3C veranschaulichen zusätzliche Grafikmultiprozessoren gemäß Ausführungsformen. 3A - 3B veranschaulichen Grafikmultiprozessoren 325 , 350 , die Varianten des Grafikmultiprozessors 234 von 2 sind. 2C. 3 C veranschaulicht eine Grafikverarbeitungseinheit (GPU) 380, die dedizierte Sätze von Grafikverarbeitungsressourcen beinhaltet, die in Multi-Core-Gruppen 365 A-365 N angeordnet sind. Die veranschaulichten Grafikmultiprozessoren 325, 350 und die Multi-Kern-Gruppen 365 A-365 N können Streaming-Multiprozessor (SM) sein, der zur gleichzeitigen Ausführung einer großen Anzahl von Ausführungs-Threads in der Lage ist.
  • 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 Grafikmultiprozessor 325 mehrere Instanzen der Befehlseinheit 332A-332B, der Registerdatei 334A-334B und der Textureinheit (en) 344A-344B aufweisen. Der Grafikmultiprozessor 325 beinhaltet auch mehrere Sätze von Grafik-oder Rechenausführungseinheiten (e.g. GPGPU-KERN 336 A-336 B, Tensorkern 337 A-337 B, Ray-Tracing-Kern 338 A-338 B) und mehrere Sätze von Lade-/Speichereinheiten 340 A-340 B. In einer Ausführungsform haben die Ausführungsressourceneinheiten einen gemeinsamen Anweisungscache 330, Textur- und/oder Datencachespeicher 342 und einen gemeinsam genutzten Speicher 346.
  • Die verschiedenen Komponenten können über ein Verbindungs-Fabric 327 kommunizieren. In einer Ausführungsform weist das Verbindungs-Fabric 327 einen oder mehrere Crossbar-Schalter auf, um eine Kommunikation zwischen den verschiedenen Komponenten des Grafikmultiprozessors 325 zu ermöglichen. In einer Ausführungsform ist das Verbindungs-Fabric 327 eine separate Hochgeschwindigkeits-Fabric-Netzwerkschicht, auf der jede Komponente des Grafikmultiprozessors 325 gestapelt ist. Die Komponenten des Grafikmultiprozessors 325 kommunizieren mit entfernten Komponenten über das Verbindungs-Fabric 327. Zum Beispiel können die GPGPU-Kerne 336A-336B, 337A-337B und 3378A-338B jeweils mit dem gemeinsam genutzten Speicher 346 über das Verbindungs-Fabric 327 kommunizieren. Das Verbindungs-Fabric 327 kann die Kommunikation innerhalb des Grafikmultiprozessors 325 vermitteln, um eine faire Bandbreitenzuordnung zwischen den 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 die Ausführungsressourcen 356A-356D einen Anweisungscache 354 und einen gemeinsam genutzten Speicher 353 sowie mehrere Instanzen eines Textur- und/oder Datencachespeichers 358A-358B gemeinsam nutzen. 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 GPGPU, wie hier beschrieben, kommunikativ mit Host/Prozessorkernen gekoppelt, um Grafikoperationen, Maschinenlernoperationen, Musteranalyseoperationen und verschiedene UNIVERSAL-GPU-(GPGPU-) Funktionen zu beschleunigen. Die GPU kann kommunikativ mit dem Host-Prozessor/den Host-Kernen über einen Bus oder eine andere Zwischenverbindung (e.g., eine Hochgeschwindigkeitszwischenverbindung, wie etwa PCIe oder NVLink), 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/-interconnect (d. h. innerhalb des Gehäuses oder Chips) kommunikativ mit den Kernen gekoppelt sein. Unabhängig von der Art und Weise, auf welche die GPU verbunden ist, können die Prozessorkerne der GPU Arbeit in Form von in einem Arbeitsdeskriptor enthaltenen Sequenzen von Befehlen/Anweisungen zuweisen. Die GPU verwendet dann eine dedizierte Schaltungsanordnung/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
  • 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 365 A einen Satz von Grafikkernen 370, einen Satz von Tensorkernen 371 und einen Satz von Strahlverfolgungskernen 372 beinhalten. Ein Scheduler/Dispatcher 368 plant und sendet die Grafik-Threads zur Ausführung auf den verschiedenen Kernen 370, 371, 372 aus. 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 sind die Kachelregister als kombinierte Sätze von Vektorregistern implementiert.
  • Ein oder mehrere kombinierte Level-1 (L1) -Caches und gemeinsam genutzte Speichereinheiten 373 speichern Grafikdaten, wie Texturdaten, Vertexdaten, Pixeldaten, Strahlendaten, Begrenzungsvolumendaten usw., lokal innerhalb jeder Mehrkerngruppe 365 A. Eine oder mehrere Textureinheiten 374 können auch verwendet werden, um Texturieroperationen, wie etwa Texturabbildung und Abtastung, durchzuführen. Ein Level 2 (L2) -Cache 375, der von allen oder einer Teilmenge der Multi-Core-Gruppen 365 A-365 N gemeinsam genutzt wird, speichert Grafikdaten und/oder Anweisungen für mehrere gleichzeitige Grafik-Threads. Wie veranschaulicht, kann der L2-Cache 375 über mehrere Mehrkerngruppen 365 A-365 N 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 (E/A) -Schaltkreise 363 koppeln die GPU 380 mit einer oder mehreren E/A-Vorrichtungen 362, wie etwa digitalen Signalprozessoren (DSPs), Netzwerksteuerungen oder Benutzereingabevorrichtungen. Eine On-Chip-Zwischenverbindung kann verwendet werden, um die E/A-Vorrichtungen 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. Bei einer Ausführungsform verwaltet die IOMMU 364 mehrere Sätze von Seitentabellen, um virtuelle Adressen auf physische Adressen im Systemspeicher 366 abzubilden. Bei dieser Ausführungsform können die E/A-Vorrichtungen 362, die CPU(n) 361 und die GPU(n) 380 denselben virtuellen Adressraum teilen.
  • Bei einer Implementierung unterstützt die IOMMU 364 Virtualisierung. In diesem Fall kann es einen ersten Satz von Seitentabellen verwalten, um virtuelle Gast-/Grafikadressen auf physische Gast-/Grafikadressen abzubilden, und einen zweiten Satz von Seitentabellen, um die physischen Gast-/Grafikadressen auf physische System-/Host-Adressen abzubilden (e.g., innerhalb des Systemspeichers 366). Die Basisadressen sowohl des ersten als auch des zweiten Satzes von Seitentabellen können in Steuerregistern gespeichert werden und auf einem Kontextschalter (e.g., so dass dem neuen Kontext Zugriff auf den relevanten Satz von Seitentabellen bereitgestellt wird) ausgelagert werden. 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 veranschaulichte Speicher 366 kann auf demselben Chip integriert sein oder kann über eine chipexterne Schnittstelle mit den Speichersteuerungen 367 gekoppelt sein. Bei einer Implementierung umfasst der Speicher 366 einen GDDR6-Speicher, der denselben virtuellen Adressraum wie andere Speicher auf physikalischer Systemebene teilt, obwohl die zugrundeliegenden Prinzipien der Erfindung nicht auf diese spezifische Implementierung beschränkt sind.
  • In einer Ausführungsform weisen die Tensorkerne 371 mehrere Ausführungseinheiten auf, die speziell zum Durchführen von Matrixoperationen ausgelegt sind, die die grundlegende Rechenoperation sind, die zum Durchführen von Tiefenlernoperationen verwendet wird. Zum Beispiel können simultane Matrixmultiplikationsoperationen für neuronales Netzwerktraining und Inferenz verwendet werden. Die Tensorkerne 371 können eine Matrixverarbeitung unter Verwendung einer Vielzahl von Operandengenauigkeiten durchführen, einschließlich Gleitkomma mit einfacher Genauigkeit (e.g., 32 Bits), Gleitkomma mit halber Genauigkeit (e.g., 16 Bits), ganzzahligen Wörtern (16 Bits), Bytes (8 Bits) und Halbbytes (4 Bits). 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.
  • Bei Deep-Learning-Implementierungen kann Parallelmatrix-Multiplikationsarbeit zur Ausführung auf den Tensorkernen 371 geplant werden. Insbesondere das Training neuronaler Netze erfordert eine signifikante Anzahl von Matrix-Skalarproduktoperationen. Um eine innere Produktformulierung einer N × N × N Matrixmultiplikation zu verarbeiten, können die Tensorkerne 371 mindestens N Punkt-Produkt Verarbeitungselemente. Bevor die Matrixmultiplikation beginnt, wird pro Zyklus Für n Zyklen eine ganze Matrix in Kachelregister geladen und mindestens eine Spalte einer zweiten Matrix geladen. In jedem Zyklus gibt es N Skalarprodukte, die verarbeitet werden.
  • Matrixelemente können in Abhängigkeit von der speziellen Implementierung mit unterschiedlichen Genauigkeiten gespeichert werden, einschließlich 16-Bit-Wörtern, 8-Bit-Bytes (e.g., INT8) und 4-Bit-Halbbytes (e.g., 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 Strahlverfolgungskerne 372 Strahlverfolgungsoperationen sowohl für Echtzeit-Strahlverfolgungs-als auch für Nicht-Echtzeit-Strahlverfolgungs-Implementierungen. Insbesondere beinhalten die Strahlverfolgungskerne 372 eine Strahltraversierungs-/Kreuzungsschaltungsanordnung zum Durchführen einer Strahltraversierung unter Verwendung von Bounding Volume Hierarchies (BVHs) und Identifizieren von Kreuzungen zwischen Strahlen und Primitiven, die innerhalb der BVH-VOLUMINA eingeschlossen sind. Die Strahlverfolgungskerne 372 können auch Schaltungen zum Durchführen von Tiefentest und -kulling (e.g. unter Verwendung eines Z-Puffers oder einer ähnlichen Anordnung) beinhalten. Bei einer Implementierung führen die Strahlverfolgungskerne 372 Traversierungs-und Schnittoperationen in Übereinstimmung mit den hier beschriebenen Bildentrauschungstechniken durch, von denen mindestens ein Teil auf den Tensorkernen 371 ausgeführt werden kann. In einer Ausführungsform implementieren die Tensorkerne 371 zum Beispiel ein neuronales Netzwerk mit tiefem Lernen, um eine Entrauschung von Frames durchzuführen, die durch die Raytracing-Kerne 372 erzeugt werden. Die CPU(n) 361, Grafikkerne 370 und/oder Raytracing-Kerne 372 können jedoch auch alle oder einen Teil der Entrauschungs-und/oder Tiefenlernalgorithmen implementieren.
  • Außerdem kann, wie oben beschrieben, ein verteilter Ansatz zum Entrauschen eingesetzt werden, bei dem sich die GPU 380 in einer Rechenvorrichtung befindet, die über ein Netzwerk oder eine Hochgeschwindigkeitsverbindung mit anderen Rechenvorrichtungen gekoppelt ist. Bei dieser Ausführungsform teilen sich die miteinander verbundenen Rechenvorrichtungen neuronale Netzwerklern-/Trainingsdaten, um die Geschwindigkeit zu verbessern, mit der das Gesamtsystem lernt, eine Entrauschung für unterschiedliche Typen von Einzelbildern und/oder unterschiedliche Grafikanwendungen durchzuführen.
  • In einer Ausführungsform verarbeiten die Ray-Tracing-Kerne 372 alle BVH-TRAVERSEN und Ray-Primitiv-Schnittpunkte, was die Grafikkerne 370 daran hindert, mit tausend 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 365 A einfach eine Strahlsonde starten und die Strahlverfolgungskerne 372 führen unabhängig Strahldurchquerung und Schnittpunkt durch und geben Trefferdaten (e.g., ein Treffer, kein Treffer, mehrere Treffer usw.) in den Thread-Kontext zurück. Die anderen Kerne 370, 371 werden freigegeben, um andere Grafik-oder Rechenarbeit durchzuführen, während die Strahlverfolgungskerne 372 die Traversier-und Schnittoperationen durchführen.
  • In einer Ausführungsform beinhaltet jeder Strahlverfolgungskern 372 eine Traversiereinheit zum Durchführen von BVH-TESTOPERATIONEN und eine Kreuzungseinheit, die Strahlprimitiv-Kreuzungstests durchführt. Die Kreuzungseinheit erzeugt eine „Treffer“, „Kein Treffer“ oder „Mehrfachtreffer“-Antwort, die es an den entsprechenden Thread liefert. Während der Durchlauf-und Schnittoperationen werden die Ausführungsressourcen der anderen Kerne (e.g., Grafikkerne 370 und Tensorkerne 371) freigegeben, um andere Formen von Grafikarbeit durchzufü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 Strahlverfolgungskerne 372 (und/oder andere Kerne 370, 371) Hardwareunterstützung für einen Strahlverfolgungsbefehlssatz, wie etwa Mikrosoft 's DirecX Ray Tracing (DXR), der einen DispatchRays-Befehl beinhaltet, sowie Strahlenerzeugungs-, Nahtreffer-, Any-Treffer-und Fehltreffer-Shader, die die Zuweisung eindeutiger Sätze von Shadern und Texturen für jedes Objekt ermöglichen. Eine andere Strahlverfolgungsplattform, die durch die Strahlverfolgungskerne 372, Grafikkerne 370 und Tensorkerne 371 unterstützt werden kann, ist Vulkan 1.1.85. Es ist jedoch anzumerken, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf irgendeine spezielle RAYTRACING-ISA beschränkt sind.
  • Allgemein können die verschiedenen Kerne 372, 371, 370 einen Strahlverfolgungsbefehlssatz unterstützen, der Befehle/Funktionen zur Strahlerzeugung, zum nächsten Treffer, zu einem beliebigen Treffer, zum Schnittpunkt von Strahlen-Primitiven, per-Primitiven und hierarchischen Bounding Box Konstruktion, Fehltreffer, Besuch und Ausnahmen enthält. Genauer gesagt beinhaltet eine Ausführungsform Raytracing-Anweisungen zum Durchführen der folgenden Funktionen:
  • 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 zur Verbindung von GPU zu Hostprozessor
  • 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.. Bei einer Ausführungsform unterstützen die Hochgeschwindigkeitsverbindungen 440 A-440 D je nach Implementierung einen Kommunikationsdurchsatz von 4 GB/s, 30 GB/s, 80 GB/s oder höher. Verschiedene Verbindungsprotokolle können verwendet werden, einschließlich, jedoch 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.
  • Außerdem sind bei einer Ausführungsform zwei oder mehr der GPUs 410-413 über Hochgeschwindigkeitsverbindungen 442 A-442 B miteinander verbunden, die unter Verwendung derselben oder anderer Protokolle/Verbindungen als jene implementiert werden können, die für Hochgeschwindigkeitsverbindungen 440 A-440 D verwendet werden. In ähnlicher Weise können zwei oder mehrere der Multi-Kern-Prozessoren 405-406 über eine Hochgeschwindigkeitsverbindung 443 verbunden sein, die symmetrische Multiprozessor (SMP) -Busse sein kann, die bei 20 GB/s, 30 GB/s, 120 GB/s oder höher betrieben werden. 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 jeweils über Speicherverbindungen 430 A-430 B kommunikativ mit einem Prozessorspeicher 401-402 gekoppelt, und jede GPU 410-413 ist jeweils über GPU-SPEICHERVERBINDUNGEN 450 A-450 D kommunikativ mit dem GPU-SPEICHER 420-423 gekoppelt. Die Speicherzwischenverbindungen 430 A-430 B und 450 A-450 D können die gleiche oder unterschiedliche Speicherzugriffstechnologien nutzen. Beispielhaft und nicht einschränkend können die Prozessorspeicher 401-402 und die GPU-Speicher 420-423 flüchtige Speicher wie dynamische Direktzugriffsspeicher (DRAMs) (einschließlich gestapelten DRAMs), Grafik-DDR-SDRAM (GDDR) (z. B. GDDR5, GDDR6) oder High-Bandwidth-Memory (HBM) sein und/oder können nichtflüchtige Speicher wie 3D XPoint oder Nano-Ram sein. In einer Ausführungsform kann ein Abschnitt der Speicher ein flüchtiger Speicher sein, und ein anderer Abschnitt kann ein nichtflüchtiger Speicher sein (z. B. unter Verwendung einer Speicherhierarchie auf zwei Ebenen (2LM)).
  • Wie nachstehend beschrieben, kann, wenngleich die verschiedenen Prozessoren 405-406 und GPUs 410-413 physikalisch jeweils mit einem bestimmten Speicher 401-402, 420-423 gekoppelt sein können, eine vereinheitlichte Speicherarchitektur implementiert sein, in der derselbe virtuelle Systemadressraum (auch als der „effektive Adressraum“ bezeichnet) unter allen verschiedenen physikalischen Speichern verteilt ist. Zum Beispiel können die Prozessorspeicher 401-402 jeweils 64 GB des Systemspeicheradressraums umfassen, und die GPU-Speicher 420-423 können jeweils 32 GB des Systemspeicheradressraums umfassen (was in diesem Beispiel zu insgesamt 256 GB 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 aufweisen, die auf einer Leitungskarte integriert sind, die über die Hochgeschwindigkeitsverbindung 440 mit dem Prozessor 407 gekoppelt ist. Alternativ kann das Grafikbeschleunigungsmodul 446 auf dem gleichen Gehäuse oder Chip wie der Prozessor 407 integriert sein.
  • Der veranschaulichte Prozessor 407 weist eine Mehrzahl von Kernen 460A-460D mit jeweils einem Übersetzungsnachschlagpuffer 461A-461D und einem oder mehreren Caches 462A-462D auf. Die Kerne können verschiedene andere Komponenten zum Ausführen von Anweisungen und zum Verarbeiten von Daten aufweisen, die nicht dargestellt sind, um zu vermeiden, die zugrundeliegenden Prinzipien der Erfindung zu verschleiern (z. B. Anweisungsabrufeinheiten, Verzweigungsvorhersageeinheiten, Decodierer, Ausführungseinheiten, Neuordnungspuffer usw.). Die Caches 462A-462D können Caches der Ebene 1 (L1) und der Ebene 2 (L2) umfassen. Außerdem können ein oder mehrere gemeinsam genutzte Caches 456 in der Caching-Hierarchie enthalten sein und von Sätzen der Kerne 460A bis 460D gemeinsam genutzt werden. Zum Beispiel weist eine Ausführungsform des Prozessors 407 24 Kerne auf, 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 gemeinsam genutzt. Der Prozessor 407 und das Grafikbeschleuniger-Integrationsmodul 446 sind mit dem Systemspeicher 441 verbunden, der Prozessorspeicher 401-402 aufweisen kann.
  • Die Kohärenz wird für Daten und Anweisungen aufrechterhalten, die in den verschiedenen Caches 462A-462D, 456 und dem Systemspeicher 441 über eine Inter-Core-Kommunikation über einen Kohärenzbus 464 gespeichert sind. Zum Beispiel kann jeder Cache eine Cachekohärenzlogik/-schaltung aufweisen, die ihm zugeordnet ist, um über den Kohärenzbus 464 als Antwort auf erkannte Lese- oder Schreibvorgänge mit bestimmten Cachezeilen zu kommunizieren. In einer Implementierung wird ein Cache-Snooping-Protokoll über den Kohärenzbus 464 implementiert, um Cache-Zugriffe zu überwachen. Cache-Snooping-/Kohärenztechniken sind für den Fachmann gut verständlich und werden hier nicht im Detail beschrieben, um zu vermeiden, die zugrundeliegenden Prinzipien der Erfindung zu verschleiern.
  • In einer Ausführungsform koppelt eine Proxy-Schaltung 425 das Grafikbeschleunigungsmodul 446 kommunikativ mit dem Kohärenzbus 464, wodurch ermöglicht wird, dass das Grafikbeschleunigungsmodul 446 als ein Peer der Kerne am Cache-Kohärenzprotokoll teilnimmt. Insbesondere stellt eine Schnittstelle 435 Konnektivität zu der Proxyschaltung 425 über eine Hochgeschwindigkeitsverbindung 440 (e.g. einen PCIe-Bus, NVLink usw.) bereit und eine Schnittstelle 437 verbindet das Grafikbeschleunigungsmodul 446 mit der Hochgeschwindigkeitsverbindung 440.
  • Bei einer Implementierung stellt eine Beschleunigerintegrationsschaltung 436 Cache-Verwaltungs-, Speicherzugriffs-, Kontextverwaltungs-und Unterbrechungsverwaltungsdienste für mehrere Grafikverarbeitungs-Engines 431, 432, N des Grafikbeschleunigungsmoduls 446 bereit. Die Grafikprozessor-Engines 431, 432, N können jeweils eine separate Grafikverarbeitungseinheit (GPU) umfassen. Alternativ können die Grafikprozessor-Engines 431, 432, N verschiedene Arten von Grafikprozessor-Engines in einer GPU umfassen, wie Grafikausführungseinheiten, Medienverarbeitungs-Engines (z. B. Videocodierer/-decodierer), Sampler und Blit-Engines. Mit anderen Worten kann das Grafikbeschleunigungsmodul eine GPU mit einer Mehrzahl von Grafikprozessor-Engines 431-432, N sein oder die Grafikprozessor-Engines 431-432, N können einzelne GPUs sein, die auf einem gemeinsamen Paket, einer Leitungskarte oder einem Chip integriert sind.
  • In einer Ausführungsform weist die Beschleunigerintegrationsschaltung 436 eine Speicherverwaltungseinheit (MMU) 439 zum Ausführen verschiedener Speicherverwaltungsfunktionen wie Übersetzungen von virtuellem in physikalischen Speicher (auch als Übersetzungen von effektivem in realen Speicher bezeichnet) und Speicherzugriffsprotokolle auf, um auf den Systemspeicher 441 zuzugreifen. Die MMU 439 kann auch einen Translations-Lookaside-Puffer (TLB) (nicht dargestellt) zum Zwischenspeichern der virtuellen/effektiven in physikalische/reale Adressübersetzungen aufweisen. In einer Implementierung speichert ein Cache 438 Befehle und Daten für einen effizienten Zugriff durch die Grafikverarbeitungs-Engines 431-432, N. In einer Ausführungsform werden die in dem Cache 438 und den Grafikspeichern 433-434, M gespeicherten Daten kohärent mit den Kerncaches 462 A-462 D, 456 und dem Systemspeicher 411 gehalten. Wie erwähnt, kann dies über die Proxyschaltung 425 erreicht werden, die am Cache-Kohärenzmechanismus für den Cache 438 und die Speicher 433-434, M teilnimmt (e.g. Senden von Aktualisierungen an den Cache 438 in Bezug auf Modifikationen/Zugriffe auf Cache-Zeilen auf den Prozessor-Caches 462 A-462 D, 456 und Empfangen von Aktualisierungen von dem Cache 438).
  • Ein Satz von Registern 445 speichert Kontextdaten für Threads, die von den Grafikprozessor-Engines 431-432, N ausgeführt werden, und eine Kontextverwaltungsschaltung 448 verwaltet die Thread-Kontexte. Zum Beispiel kann die Kontextverwaltungsschaltung 448 Speicher- und Wiederherstellungsoperationen zum Speichern und Wiederherstellen von Kontexten der verschiedenen Threads während Kontextwechseln ausführen (z. B. wenn ein erster Thread gespeichert wird und ein zweiter Thread gespeichert wird, sodass der zweite Thread von einer Grafikverarbeitungs-Engine ausgeführt werden kann). Zum Beispiel kann die Kontextverwaltungsschaltung 448 bei einem Kontextwechsel aktuelle Registerwerte in einem bestimmten Bereich im Speicher (z. B. von einem Kontextzeiger identifiziert) speichern. Sie kann dann die Registerwerte wiederherstellen, wenn sie 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 Grafikverarbeitungs-Engine 431 durch die MMU 439 in reale/physikalische Adressen im Systemspeicher 411 übersetzt. Eine Ausführungsform der Beschleunigerintegrationsschaltung 436 unterstützt mehrere (z. B. 4, 8, 16) Grafikbeschleunigermodule 446 und/oder andere Beschleunigervorrichtungen. Das Grafikbeschleunigermodul 446 kann für eine einzelne Anwendung bestimmt sein, die auf dem Prozessor 407 ausgeführt wird, oder kann von mehreren Anwendungen gemeinsam genutzt werden. In einer Ausführungsform ist eine virtualisierte Grafikausführungsumgebung dargestellt, in der die Ressourcen der Grafikverarbeitungs-Engines 431-432, N mit mehreren Anwendungen oder virtuellen Maschinen (VMs) gemeinsam genutzt werden. Die Ressourcen können in „Slices“ unterteilt sein, die verschiedenen VMs und/oder Anwendungen auf der Grundlage der Verarbeitungsanforderungen und -prioritäten zugewiesen sind, die den VMs und/oder Anwendungen zugeordnet sind.
  • Somit fungiert die Beschleunigerintegrationsschaltung als eine Brücke zu dem System für das Grafikbeschleunigungsmodul 446 und stellt Adressübersetzungs- und Systemspeicher-Cachedienste bereit. Außerdem kann die Beschleunigerintegrationsschaltung 436 Virtualisierungseinrichtungen für den Hostprozessor bereitstellen, um die Virtualisierung der Grafikprozessoren, Unterbrechungen und Speicherverwaltung zu verwalten.
  • Da Hardware-Ressourcen der Grafikverarbeitungs-Engines 431-432, N explizit auf den realen Adressraum abgebildet werden, der von dem Hostprozessor 407 gesehen wird, kann jeder Hostprozessor diese Ressourcen direkt unter Verwendung eines effektiven Adresswerts adressieren. Eine Funktion der Beschleunigerintegrationsschaltung 436 ist in einer Ausführungsform die physikalische Trennung der Grafikprozessor-Engines 431-432, N, sodass sie dem System als unabhängige Einheiten erscheinen.
  • Wie erwähnt, sind in der veranschaulichten Ausführungsform ein oder mehrere Grafikspeicher 433-434, M mit jedem der Grafikverarbeitungs-Engines 431-432, N verbunden. Die Grafikspeicher 433-434, M speichern Anweisungen und Daten, die von jedem der Grafikprozessor-Engines 431-432, N verarbeitet werden. Die Grafikspeicher 433-434, M können flüchtige Speicher wie DRAMs (einschließlich gestapelter DRAMs), GDDR-Speicher (z. B. GDDR5, GDDR6) oder HBM sein und/oder können nichtflüchtiger Speicher wie 3D XPoint oder Nano-Ram sein.
  • In einer Ausführungsform werden, um Datenverkehr über die Hochgeschwindigkeitsverbindung 440 zu reduzieren, Biasing-Techniken verwendet, um sicherzustellen, dass die in den Grafikspeichern 433-434, M gespeicherten Daten Daten sind, die am häufigsten von den Grafikverarbeitungs-Engines 431-432, N verwendet werden und vorzugsweise nicht von den Kernen 460 A-460 D (zumindest nicht häufig) verwendet werden. In ähnlicher Weise versucht der Bias-Mechanismus, Daten, die von den Kernen (und vorzugsweise nicht den Grafikprozessoren 431-432, N) benötigt werden, 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 Grafikverarbeitungs-Engines 431-432, N direkt über die Hochgeschwindigkeitsverbindung 440 mit der Beschleunigerintegrationsschaltung 436 über die Schnittstelle 437 und die Schnittstelle 435 (die wiederum irgendeine Form von Bus- oder Schnittstellenprotokoll verwenden kann). 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 Dedizierten-Prozess-Programmiermodells (keine Virtualisierung des Grafikbeschleunigungsmoduls) und von gemeinsam genutzten Programmiermodellen (mit Virtualisierung). Letzteres kann 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 Grafikprozessor-Engines 431-432, N einer einzelnen Anwendung oder einem einzigen Prozess unter einem einzigen Betriebssystem zugeordnet. Die einzelne Anwendung kann andere Anwendungsanfragen an die Grafik-Engines 431-432, N leiten und eine Virtualisierung innerhalb einer VM/Partition bereitstellen.
  • In den Dedizierten-Prozess-Programmiermodellen können die Grafikprozessor-Engines 431-432, N von mehreren VM/Anwendungspartitionen gemeinsam genutzt werden. Die gemeinsam genutzten Modelle benötigen einen Systemhypervisor, um die Grafikprozessor-Engines 431-432, N zu virtualisieren, um den Zugriff durch jedes Betriebssystem zu ermöglichen. Für Einzelpartitionssysteme ohne Hypervisor gehören die Grafikverarbeitungs-Engines 431-432, N dem Betriebssystem. In beiden Fällen kann das Betriebssystem die Grafikverarbeitungs-Engines 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 Grafikverarbeitungs-Engine 431-432, N ein Prozesselement unter Verwendung einer Prozesskennung aus. In einer Ausführungsform werden Prozesselemente in dem Systemspeicher 411 gespeichert und sind unter Verwendung der hierin beschriebenen Adressenübersetzungstechniken für effektive Adressen adressierbar. Die Prozesskennung kann ein implementierungsspezifischer Wert sein, der dem Hostprozess bereitgestellt wird, wenn sein Kontext mit der Grafikverarbeitungs-Engine 431-432, N registriert wird (das heißt, Systemsoftware anruft, um das Prozesselement zu der mit dem Prozesselement verknüpften Liste hinzuzufügen). Die unteren 16 Bits der Prozesskennung können der Versatz des Prozesselements innerhalb der mit dem Prozesselement verknüpften Liste sein.
  • 4D veranschaulicht einen beispielhaften Beschleunigerintegrations-Slice 490. Wie hierin verwendet, umfasst ein „Slice“ einen spezifizierten Abschnitt der Verarbeitungsressourcen der Beschleunigerintegrationsschaltung 436. Der anwendungseffektive Adressraum 482 im Systemspeicher 411 speichert Prozesselemente 483. In einer Ausführungsform werden die Prozesselemente 483 als Antwort 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 Arbeitsdeskriptor (WD) 484, der in dem Prozesselement 483 enthalten ist, kann ein einzelner Job sein, der von einer Anwendung angefordert wird, oder er kann einen Zeiger auf eine Warteschlange von Jobs enthalten. Im letzteren Fall ist der WD 484 ein Zeiger auf die Jobanfragewarteschlange im Adressraum 482 der Anwendung.
  • Das Grafikbeschleunigungsmodul 446 und/oder die einzelnen Grafikverarbeitungs-Engines 431-432, N können von allen oder einer Teilmenge der Prozesse in dem System gemeinsam genutzt werden. Ausführungsformen der Erfindung schließen eine Infrastruktur zum Einrichten des Prozesszustands und zum Senden eines WD 484 an ein Grafikbeschleunigungsmodul 446 zum Starten eines Jobs in einer virtualisierten Umgebung ein.
  • In einer Implementierung ist das Dedizierte-Prozess-Programmiermodell implementierungsspezifisch. In diesem Modell besitzt ein einzelner Prozess das Grafikbeschleunigungsmodul 446 oder eine individuelle 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 besitzenden Prozess zu dem Zeitpunkt, an dem das Grafikbeschleunigungsmodul 446 zugewiesen wird.
  • Während des Betriebs ruft eine WD-Abrufeinheit 491 in der Beschleunigerintegrationsschicht 490 den nächsten WD 484 ab, der eine Anzeige der von einem der Grafikverarbeitungs-Engines des Grafikbeschleunigungsmoduls 446 auszuführenden Arbeit aufweist. Daten von dem WD 484 können in Registern 445 gespeichert werden und von der MMU 439, der Unterbrechungsverwaltungsschaltung 447 und/oder der Kontextverwaltungsschaltung 448 wie dargestellt verwendet werden. Zum Beispiel beinhaltet eine Ausführungsform der MMU 439 eine Segment-/Seitenlauf-Schaltung zum Zugreifen auf Segment-/Seitentabellen 486 innerhalb des virtuellen OS-Adressraums 485. Die Unterbrechungsverwaltungsschaltung 447 kann Unterbrechungsereignisse 492 verarbeiten, die von dem Grafikbeschleunigungsmodul 446 empfangen werden. Wenn Grafikoperationen ausgeführt werden, wird eine effektive Adresse 493, die von einer Grafikverarbeitungs-Engine 431-432 erzeugt wird, von der MMU 439 in eine reale Adresse übersetzt.
  • In einer Ausführungsform ist derselbe Satz von Registern 445 für jede Grafikverarbeitungs-Engine 431-432, N und/oder Grafikbeschleunigungsmodul 446 dupliziert und kann von dem Hypervisor oder dem Betriebssystem initialisiert werden. Jedes dieser duplizierten Register kann in einem Beschleunigerintegrations-Slice 490 enthalten sein. Beispielhafte Register, die von dem Hypervisor initialisiert werden können, sind in Tabelle 1 dargestellt. Tabelle 1 - Von Hypervisor initialisierte Register
    1 Slice-Steuerregister
    2 Bereichszeiger für geplante Real Address- (RA) Prozesse
    3 Autoritätsmasken-Überschreibungsregister
    4 Tabelleneintragsversatz des Unterbrechungsvektors
    5 Tabelleneintragsgrenze des Unterbrechungsvektors
    6 Zustandsregister
    7 Logikpartitions-ID
    8 Zeiger für Aufzeichnung von Real Address (RA) - Hypervisorbeschleunigernutzung
    9 Speicherbeschreibungsregister
  • Beispielhafte Register, die vom Betriebssystem initialisiert werden können, sind in Tabelle 2 dargestellt. Tabelle 2 - Von Betriebssystem initialisierte Register
    1 Prozess- und Thread-Identifizierung
    2 Effektiver Adresse (EA) Kontextspeicherung/Wiederherstellung Zeiger
    3 Zeiger für Aufzeichnung von Virtual Address (VA) -Beschleunigernutzung
    4 Zeiger für Virtual Address (VA) -Speichersegmenttabelle
    5 Autoritätsmaske
    6 Arbeitsdeskriptor
  • In einer Ausführungsform ist jeder WD 484 spezifisch für ein bestimmtes Grafikbeschleunigungsmodul 446 und/oder Grafikverarbeitungs-Engines 431-432, N. Er enthält alle Informationen, die eine Grafikverarbeitungs-Engine 431-432 benötigt, um ihre Arbeit zu tun, oder er kann ein Zeiger auf einen Speicherort sein, an dem die Anwendung eine Befehlswarteschlange mit auszuführenden Arbeiten eingerichtet hat.
  • 4E veranschaulicht zusätzliche Details für eine Ausführungsform eines gemeinsam genutzten Modells. Diese Ausführungsform weist einen realen Hypervisor-Adressraum 498 auf, in dem eine Prozesselementliste 499 gespeichert ist. Der reale Hypervisor-Adressraum 498 ist über einen Hypervisor 496 zugänglich, der die Grafikbeschleunigungsmodul-Engines für das Betriebssystem 495 virtualisiert.
  • Die gemeinsamen Programmiermodelle ermöglichen es allen oder einer Teilmenge von Prozessen von allen oder einer Teilmenge von Partitionen in dem System, ein Grafikbeschleunigungsmodul 446 zu verwenden. Es gibt zwei Programmiermodelle, bei denen das Grafikbeschleunigungsmodul 446 von mehreren Prozessen und Partitionen gemeinsam genutzt wird: eine zeitgeschachtelte gemeinsame Nutzung und eine grafikgelenkte gemeinsame Nutzung.
  • In diesem Modell besitzt der Systemhypervisor 496 das Grafikbeschleunigungsmodul 446 und stellt seine Funktion allen Betriebssystemen 495 zur Verfügung. Damit ein Grafikbeschleunigungsmodul 446 eine Virtualisierung durch den Systemhypervisor 496 unterstützt, kann das Grafikbeschleunigungsmodul 446 die folgenden Anforderungen erfüllen: 1) Die Jobanfrage einer Anwendung muss autonom sein (das heißt, der Zustand muss nicht zwischen Jobs aufrechterhalten werden), oder das Grafikbeschleunigungsmodul 446 muss einen Kontextspeicher- und - wiederherstellungsmechanismus bereitstellen. 2) Eine Jobanfrage einer Anwendung wird von dem Grafikbeschleunigungsmodul 446 garantiert, innerhalb einer spezifizierten Zeitdauer abgeschlossen zu werden, einschließlich Übersetzungsfehlern, oder das Grafikbeschleunigungsmodul 446 stellt die Fähigkeit bereit, die Verarbeitung des Jobs vorzuziehen. 3) Das Grafikbeschleunigungsmodul 446 muss Fairness zwischen den Prozessen garantieren, wenn es in dem gelenkten gemeinsamen Programmiermodell arbeitet.
  • In einer Ausführungsform muss die Anwendung 480 für das gemeinsam genutzte Modell einen Systemsystemaufruf des Betriebssystems 495 mit einem Grafikbeschleunigungsmodul 446, einem Arbeitsdeskriptor (WD), einem Autoritätsmaskenregister (AMR) und einem Bereichszeiger für Kontext-Speichern/Wiederherstellen (Context Save/Restore Area Pointer - CSRP). Der Typ des Grafikbeschleunigungsmoduls 446 beschreibt die Zielbeschleunigungsfunktion für den Systemaufruf. Der Typ des Grafikbeschleunigungsmoduls 446 kann ein systemspezifischer Wert sein. Der WD ist speziell für das Grafikbeschleunigungsmodul 446 formatiert und kann in Form eines Befehls für das Grafikbeschleunigungsmodul 446, eines effektiven Adresszeigers für eine benutzerdefinierte Struktur, eines effektiven Adresszeigers für eine Warteschlange von Befehlen oder einer beliebigen anderen Datenstruktur vorliegen, um die von dem Grafikbeschleunigungsmodul 446 auszuführende 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 einstellt. Falls die Implementierungen der Beschleunigerintegrationsschaltung 436 und des Grafikbeschleunigungsmoduls 446 kein Benutzerautoritätsmasken-Überschreibungsregister (User Authority Mask Override Register - UAMOR) unterstützen, kann das Betriebssystem den aktuellen UAMOR-Wert auf den AMR-Wert anwenden, bevor es das AMR in dem Hypervisor-Aufruf übergibt. Der Hypervisor 496 kann den aktuellen Autoritätsmasken-Überschreibungsregister (AMOR) -Wert anwenden, bevor das AMR in das Prozesselement 483 platziert wird. In einer Ausführungsform ist der CSRP eines der Register 445, das die effektive Adresse eines Bereichs in dem Adressraum 482 der Anwendung für das Grafikbeschleunigungsmodul 446 enthält, um den Kontextzustand zu speichern und wiederherzustellen. Dieser Zeiger ist optional, falls kein Status zwischen Jobs gespeichert werden muss oder wenn ein Job vorzeitig beendet wird. Der Kontext-Speichern-/Wiederherstellen-Bereich kann im Systemspeicher verankert sein.
  • Bei Empfang des Systemaufrufs kann das Betriebssystem 495 verifizieren, dass sich die Anwendung 480 registriert hat und die Berechtigung zur Verwendung des Grafikbeschleunigungsmoduls 446 erhalten hat. Das Betriebssystem 495 ruft dann den Hypervisor 496 mit den in Tabelle 3 dargestellten Informationen auf. Tabelle 3 - OS zu Hypervisor-Aufrufparameter
    1 Ein Arbeitsdeskriptor (WD)
    2 Ein Autoritätsmaskenregister- (AMR) Wert (möglicherweise maskiert).
    3 Ein effektiver Adress- (EA) Kontextspeicher-/Wiederherstellungsbereichsanzeiger (CSRP)
    4 Eine Prozess-ID (PID) und optionale Thread-ID (TID)
    5 Virtueller Adressen (VA) Beschleuniger Nutzung auf Zeichnung Zeiger (AURP)
    6 Die virtuelle Adresse des Speichersegmenttabellenzeigers (SSTP)
    7 Eine logische Unterbrechungsdienstnummer (LISN)
  • Nach Empfang des Hypervisoraufrufs verifiziert der Hypervisor 496, dass das Betriebssystem 495 registriert wurde und ihm die Berechtigung zur Verwendung des Grafikbeschleunigungsmoduls 446 gegeben wurde. Der Hypervisor 496 setzt dann das Prozesselement 483 in die mit Prozesselement verknüpfte Liste für den entsprechenden Typ des Grafikbeschleunigungsmoduls 446 ein. Das Prozesselement kann die in Tabelle 4 dargestellten Informationen enthalten. Tabelle 4 - Informationen zum Prozesselement
    1 Ein Arbeitsdeskriptor (WD)
    2 Ein Autoritätsmaskenregister- (AMR) Wert (möglicherweise maskiert).
    3 Ein effektiver Adress- (EA) Kontextspeicher-/Wiederherstellungsbereichsanzeiger (CSRP)
    4 Eine Prozess-ID (PID) und optionale Thread-ID (TID)
    5 Virtueller Adressen (VA) Beschleuniger Nutzung auf Zeichnung Zeiger (AURP)
    6 Die virtuelle Adresse des Speichersegmenttabellenzeigers (SSTP)
    7 Eine logische Unterbrechungsdienstnummer (LISN)
    8 Unterbrechungsvektortabelle, abgeleitet von den Hypervisoraufrufparametern.
    9 Einen Statusregister (SR) -Wert
    10 Eine Logikpartitions-ID (LPID)
    11 Einen Zeiger für Aufzeichnung von Real Address (RA) - Hypervisorbeschleunigernutzung
    12 Das Speicherdeskriptorregister (SDR)
  • In einer Ausführungsform initialisiert der Hypervisor eine Mehrzahl von Registern 445 des Beschleunigerintegrations-Slices 490.
  • 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. Bei dieser Implementierung verwenden auf den GPUs 410-413 ausgeführte Operationen den gleichen virtuellen/effektiven Speicheradressraum, um auf die Prozessorspeicher 401-402 und umgekehrt zuzugreifen, wodurch die Programmierbarkeit vereinfacht wird. In einer Ausführungsform ist ein erster Abschnitt des virtuellen/effektiven Adressraums dem Prozessorspeicher 401, ein zweiter Abschnitt dem zweiten Prozessorspeicher 402, ein dritter Abschnitt dem GPU-Speicher 420 usw. zugewiesen. Der gesamte virtuelle/effektive Speicherraum (manchmal als der effektive Adressraum bezeichnet) wird dadurch über jeden der Prozessorspeicher 401-402 und GPU-Speicher 420-423 verteilt, wodurch jeder Prozessor oder jede GPU auf einen physikalischen Speicher mit einer virtuellen Adresse zugreifen kann, die auf diesen Speicher abgebildet ist.
  • In einer Ausführungsform stellt die Bias/Kohärenz-Verwaltungsschaltung 494A-494E innerhalb einer oder mehrerer der MMUs 439A-439E eine Cachekohärenz zwischen den Cachespeichern der Hostprozessoren (z. B. 405) und der GPUs 410-413 sicher und implementiert Bias-Techniken, die die physikalischen Speicher anzeigen, in denen bestimmte Arten von Daten gespeichert werden sollten. 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 GPU-angeschlossene Speicher 420-423 als Teil des Systemspeichers abgebildet wird und unter Verwendung der Shared Virtual Memory (SVM) -Technologie zugänglich ist, ohne jedoch unter den typischen Leistungsnachteilen zu leiden, die mit der vollen System-Cache-Kohärenz verbunden sind. Die Fähigkeit, auf GPU-angeschlossenen Speicher 420-423 als Systemspeicher ohne lästigen Cache-Kohärenz-Overhead zuzugreifen, stellt eine vorteilhafte Betriebsumgebung zur GPU-Auslagerung bereit. Diese Anordnung ermöglicht es der Software des Hostprozessors 405, Operanden einzurichten und auf Berechnungsergebnisse ohne den Overhead herkömmlicher I/O-DMA-Datenkopien zuzugreifen. Solche herkömmlichen Kopien beinhalten Treiberaufrufe, Unterbrechungen und speicherabgebildete I/O- (MMIO) Zugriffe, die alle in Bezug auf einfache Speicherzugriffe ineffizient sind. Gleichzeitig kann die Fähigkeit, ohne Cache-Kohärenz-Overheads auf den GPU-angeschlossenen Speicher 420-423 zuzugreifen, für die Ausführungszeit einer ausgelagerten Berechnung entscheidend sein. In Fällen mit wesentlichem Streaming-Schreibspeicher-Verkehr kann zum Beispiel der Cache-Kohärenz-Overhead die effektive Schreibbandbreite, die von einer GPU 410-413 gesehen wird, signifikant reduzieren. Die Effizienz der Operandeneinrichtung, die Effizienz des Ergebniszugriffs und die Effizienz der GPU-Berechnung spielen eine Rolle bei der Bestimmung der Effektivität der GPU-Auslagerung.
  • In einer Implementierung wird die Auswahl zwischen einem GPU-Bias und einem Hostprozessor-Bias von einer Bias-Verfolgerdatenstruktur angetrieben. Beispielsweise kann eine Bias-Tabelle verwendet werden, die eine seitengranulare Struktur sein kann (d. h. bei der Granularität einer Speicherseite gesteuert werden kann), die 1 oder 2 Bits pro GPU-angeschlossener Speicherseite aufweist. Die Bias-Tabelle kann in einem gestohlenen Speicherbereich eines oder mehrerer GPU-angeschlossener Speicher 420-423 mit oder ohne Bias-Cache in der GPU 410-413 implementiert sein (z. B. um häufig/kürzlich verwendete Einträge der Bias-Tabelle zwischenzuspeichern). Alternativ kann die gesamte Bias-Tabelle in der GPU gehalten werden.
  • Bei einer Implementierung wird auf den Bias-Tabelleneintrag, der jedem Zugriff auf den GPU-angeschlossenen Speicher 420-423 zugeordnet ist, vor dem tatsächlichen Zugriff auf den GPU-Speicher zugegriffen, was die folgenden Operationen bewirkt. Zuerst werden lokale Anfragen von der GPU 410-413, die ihre Seite in GPU-Bias finden, direkt an einen entsprechenden GPU-Speicher 420-423 weitergeleitet. Lokale Anfragen von der GPU, die ihre Seite in Host-Bias finden, werden an den Prozessor 405 weitergeleitet (z. B. über eine Hochgeschwindigkeitsverbindung, wie oben erläutert). In einer Ausführungsform schließen Anfragen von dem Prozessor 405, die die angeforderte Seite in einem Hostprozessor-Bias finden, die Anfrage wie einen normalen Speicherlesevorgang ab. Alternativ können Anfragen, die an eine GPU-vorgespannte Seite gerichtet sind, an die GPU 410-413 weitergeleitet werden. Die GPU kann dann die Seite zu einem Bias des Hostprozessors überführen, wenn sie die Seite derzeit nicht verwendet.
  • Der Bias-Zustand einer Seite kann entweder durch einen softwarebasierten Mechanismus, einen hardwaregestützten softwarebasierten Mechanismus oder für einen begrenzten Satz von Fällen einen rein hardwarebasierten Mechanismus geändert werden.
  • Ein Mechanismus zum Ändern des Bias-Zustands verwendet einen API-Aufruf (z. B. OpenCL), der wiederum den Gerätetreiber der GPU aufruft, der wiederum eine Nachricht (oder einen Befehlsdeskriptor in eine Warteschlange einreiht) an die GPU sendet, die ihn anweist, den Bias-Zustand zu ändern, und führt bei einigen Übergängen eine Cacheentleerungsoperation im Host aus. Die Cacheentleerungsoperation ist für einen Übergang vom Bias des Hostprozessors 405 zum GPU-Bias erforderlich, ist jedoch für den entgegengesetzten Übergang nicht erforderlich.
  • In einer Ausführungsform wird die Cache-Kohärenz aufrechterhalten, indem GPU-vorgespannte Seiten, die von dem Hostprozessor 405 nicht zwischenspeicherbar sind, vorübergehend gerendert werden. Um auf diese Seiten zuzugreifen, kann der Prozessor 405 Zugriff von der GPU 410 anfordern, die je nach der Implementierung sofortigen Zugriff gewähren kann oder nicht. Somit ist es vorteilhaft, um Kommunikation zwischen dem Hostprozessor 405 und der GPU 410 zu reduzieren, sicherzustellen, dass GPU-vorgespannte Seiten jene sind, die von der GPU, aber nicht dem Hostprozessor 405 benötigt werden, und umgekehrt.
  • Grafikverarbeitungs-Pipeline
  • 5 veranschaulicht eine Grafikverarbeitungspipeline 500 gemäß einer Ausführungsform. In einer Ausführungsform kann ein Grafikprozessor die dargestellte Grafikverarbeitungs-Pipeline 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 Grafikverarbeitungs-Pipeline 500 kann auch unter Verwendung dedizierter Verarbeitungseinheiten für eine oder mehrere Funktionen implementiert werden. In einer Ausführungsform können ein oder mehrere Abschnitte der Grafikverarbeitungs-Pipeline 500 durch Parallelverarbeitungslogik innerhalb eines Allzweckprozessors (e.g. CPU) durchgefü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 Vertexdaten für Oberflächen und Primitive sammelt. Der Datenassembler 502 gibt dann die Vertexdaten einschließlich der Vertexattribute an die Vertex-Verarbeitungseinheit 504 aus. Die Vertex-Verarbeitungseinheit 504 ist eine programmierbare Ausführungseinheit, die Vertex-Shader-Programme ausführt, die Vertexdaten beleuchten und transformieren, wie von Vertex-Shader-Programme spezifiziert. Die Vertex-Verarbeitungseinheit 504 liest Daten, die im Cache, lokalen oder Systemspeicher zur Verwendung bei der Verarbeitung der Vertexdaten gespeichert sind, und kann programmiert sein, die Vertexdaten von einer objektbasierten Koordinatenrepräsentation in einen Weltkoordinatenraum oder einen Koordinatenraum einer normalisierten Vorrichtung zu transformieren.
  • Eine erste Instanz eines Primitiv-Assemblers 506 empfängt Vertexattribute von der Vertex-Verarbeitungseinheit 504. Der Primitiv-Assembler 506 liest nach Bedarf gespeicherte Vertexattribute aus und konstruiert Grafikprimitive zur Verarbeitung von der Tessellationssteuerungs-Verarbeitungseinheit 508. Die Grafikprimitive beinhalten Dreiecke, Liniensegmente, Punkte, Patches und so weiter, wie von verschiedenen Grafikverarbeitungs-Anwendungsprogrammierschnittstellen (APIs) unterstützt.
  • Die Tessellationssteuerungs-Verarbeitungseinheit 508 behandelt die Eingabevertices als Kontrollpunkte für ein geometrisches Patch. Die Steuerpunkte werden von einer Eingabedarstellung von dem Patch (z. B. den Basen des Patches) in eine Darstellung transformiert, die zur Verwendung bei der Oberflächenbewertung von der Tessellationsauswertungs-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 eine mit der Kante verknüpfte ansichtsabhängige Detailebene. Eine Tessellationseinheit 510 ist konfiguriert, die Tessellationsfaktoren für Kanten eines Patches zu empfangen und das Patch in mehrere geometrische Primitive wie Linien-, Dreieck- oder Viereck-Primitive zu tessellieren, die an eine Tessellationsauswertungs-Verarbeitungseinheit 512 übertragen werden. Die Tessellationsauswertungs-Verarbeitungseinheit 512 arbeitet an parametrisierten Koordinaten des unterteilten Patches, um eine Oberflächendarstellung und Vertexattribute für jeden Vertex zu erzeugen, der den geometrischen Primitiven zugeordnet ist.
  • Eine zweite Instanz eines Primitive-Assemblers 514 empfängt Vertexattribute von der Tessellationsbewertungs-Verarbeitungseinheit 512, liest gespeicherte Vertexattribute nach Bedarf und erstellt Grafik-Primitive zur Verarbeitung durch die Geometrieverarbeitungseinheit 516. Die Geometrieverarbeitungseinheit 516 ist eine programmierbare Ausführungseinheit, die Geometrie-Shader-Programme ausführt, um Grafik-Primitive zu transformieren, die von dem Primitiv-Assembler 514 empfangen werden, wie durch die Geometrie-Shader-Programme spezifiziert. In einer Ausführungsform ist die Geometrieverarbeitungseinheit 516 programmiert, die Grafikprimitive in ein oder mehrere neue Grafikprimitive zu unterteilen und Parameter zu berechnen, die zum Rastern der neuen Grafikprimitive verwendet werden.
  • Bei manchen Ausführungsformen kann die Geometrieverarbeitungseinheit 516 Elemente in dem Geometriestrom hinzufügen oder löschen. Die Geometrieverarbeitungseinheit 516 gibt die Parameter und Vertices, die neue Grafik-Primitive spezifizieren, an den Primitive-Assembler 518 aus. Der Primitiv-Assembler 518 empfängt die Parameter und Vertices von der Geometrie-Verarbeitungseinheit 516 und konstruiert Grafik-Primitive zur Verarbeitung durch eine Ansichtsfeld-Skalierungs-, Auslese- und Abschneide-Einheit 520. Die Geometrieverarbeitungseinheit 516 liest Daten, die im Parallelprozessorspeicher oder Systemspeicher zur Verwendung bei der Verarbeitung der Geometriedaten gespeichert sind. Die Ansichtsfeld-Skalierungs-, Auslese- und Abschneide-Einheit 520 führt eine Abschneidung, Auslesung und Ansichtsfeldskalierung aus und gibt verarbeitete Grafik-Primitive an einen Rasterisierer 522 aus.
  • Der Rasterisierer 522 kann eine Tiefenauslese und andere tiefenbasierte Optimierungen ausführen. Der Rasterisierer 522 führt auch eine Scan-Umwandlung an den neuen Grafik-Primitiven aus, um Fragmente zu generieren, und gibt diese Fragmente und die zugehörigen Abdeckungsdaten an die Fragment/Pixel-Verarbeitungseinheit 524 aus. Die Fragment/Pixel-Verarbeitungseinheit 524 ist eine programmierbare Ausführungseinheit, die konfiguriert ist, Fragment-Shader-Programme oder Pixel-Shader-Programme auszuführen. Die Fragment/Pixel-Verarbeitungseinheit 524 transformiert Fragmente oder Pixel, die von dem Rasterisierer 522 empfangen werden, wie von der Fragment- oder Pixel-Shader-Programme spezifiziert. Zum Beispiel kann die Fragment/Pixel-Verarbeitungseinheit 524 programmiert sein, Operationen auszuführen, die einschließen, jedoch nicht beschränkt sind auf Texturabbildung, Schattieren, Mischen, Texturkorrektur und Perspektivenkorrektur, 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 bei der Verarbeitung der Fragmentdaten gespeichert sind. Fragment- oder Pixel-Shader-Programme können derart konfiguriert sein, dass sie je nach der Abtastrate, die für die Verarbeitungseinheiten konfiguriert ist, 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. Bei manchen Ausführungsformen ist die Rasteroperationseinheit 526 dazu konfiguriert, z-oder Farbdaten, die in den Speicher geschrieben werden, zu komprimieren und z-oder Farbdaten, die aus dem Speicher gelesen werden, zu dekomprimieren.
  • Überblick über das Maschinenlernen
  • Die oben beschriebene Architektur kann angewendet werden, um Trainings- und Inferenzoperationen unter Verwendung von Maschinenlernmodellen durchzuführen. Maschinenlernen hat viele Aufgaben erfolgreich gelöst. Die Berechnungen, die beim Trainieren und Verwenden von Maschinenlernalgorithmen (z. B. neuronalen Netzwerken) auftreten, eignen sich auf natürliche Weise für effiziente parallele Implementierungen. Dementsprechend haben Parallelprozessoren wie Grafikprozessoren für allgemeine Zwecke (GPGPUs) eine bedeutende Rolle bei der praktischen Implementierung von tiefen neuronalen Netzwerken gespielt. Parallele Grafikprozessoren mit Single-Instruction-, Multiple-Thread (SIMT) -Architekturen sollen den Umfang der parallelen Verarbeitung in der Grafikpipeline maximieren. In einer SIMT-Architektur versuchen Gruppen von parallelen Threads, Programmanweisungen so oft wie möglich synchron gemeinsam auszuführen, um die Verarbeitungseffizienz zu erhöhen. Die Effizienz, die durch die Implementierung paralleler Maschinenlernalgorithmen bereitgestellt wird, ermöglicht die Verwendung von Netzwerken mit hoher Kapazität und ermöglicht, dass diese Netzwerke in größeren Datensätzen trainiert werden können.
  • Ein Maschinenlernalgorithmus ist ein Algorithmus, der basierend auf einem Datensatz lernen kann. Ausführungsformen von Maschinenlernalgorithmen können derart konzipiert werden, dass Abstraktionen auf hoher Ebene innerhalb eines Datensatzes modelliert werden. Zum Beispiel können Bilderkennungsalgorithmen verwendet werden, um zu bestimmen, welche von mehreren Kategorien zu welcher gegebenen Eingabe gehören; Regressionsalgorithmen können bei einer Eingabe einen numerischen Wert ausgeben werden; und Mustererkennungsalgorithmen können verwendet werden, um übersetzten Text zu generieren oder eine Text-zu-Sprache- und/oder Spracherkennung durchzuführen.
  • Ein beispielhafter Typ eines Maschinenlernalgorithmus ist ein neuronales Netzwerk. Es gibt viele Arten von neuronalen Netzwerken; ein einfacher Typ eines neuronalen Netzwerks ist ein Vorwärtskopplungsnetzwerk. Ein Vorwärtskopplungsnetzwerk kann als ein azyklischer Graph implementiert sein, in dem die Knoten in Schichten angeordnet sind. Typischerweise weist eine Vorwärtskopplungs-Netzwerktopologie eine Eingabeschicht und eine Ausgabeschicht auf, die durch mindestens eine verborgene Schicht getrennt sind. Die verborgene Ebene transformiert Eingaben, die von der Eingabeschicht empfangen werden, in eine Darstellung, die zum Generieren von Ausgaben in der Ausgabeschicht nützlich ist. Die Netzwerkknoten sind vollständig über Kanten mit den Knoten in benachbarten Schichten verbunden, aber es gibt keine Kanten zwischen Knoten innerhalb jeder Schicht. Daten, die an den Knoten einer Eingabeschicht eines Vorwärtskopplungsnetzwerks empfangen werden, werden zu den Knoten der Ausgabeschicht über eine Aktivierungsfunktion ausgebreitet (d. h. „vorwärtsgekoppelt“), die die Zustände der Knoten jeder nachfolgenden Schicht in dem Netzwerk basierend auf Koeffizienten („Gewichtungen“) berechnet, die jeweils mit jeder der Kanten verbunden sind, die die Schichten verbinden. Abhängig von dem spezifischen Modell, das durch den ausgeführten Algorithmus repräsentiert wird, kann die Ausgabe von dem neuronalen Netzwerkalgorithmus verschiedene Formen annehmen.
  • Bevor ein Maschinenlernalgorithmus verwendet werden kann, um ein bestimmtes Problem zu modellieren, wird der Algorithmus unter Verwendung eines Trainingsdatensatzes trainiert. Das Trainieren eines neuronalen Netzwerks beinhaltet das Auswählen einer Netzwerktopologie unter Verwendung eines Satzes von Trainingsdaten, die ein Problem darstellen, das von dem Netzwerk modelliert wird, und das Anpassen der Gewichtungen, bis das Netzwerkmodell mit einem minimalen Fehler für alle Instanzen des Trainingsdatensatzes funktioniert. Zum Beispiel wird während eines überwachten Lerntrainingsprozesses für ein neuronales Netzwerk die Ausgabe, die von dem Netzwerk als Antwort auf die Eingabe erzeugt wird, die eine Instanz in einem Trainingsdatensatz darstellt, mit der „richtigen“ markierten Ausgabe für diese Instanz verglichen, ein Fehlersignal, das die Differenz zwischen der Ausgabe und der gekennzeichneten Ausgabe darstellt, wird berechnet, und die den Verbindungen zugeordneten Gewichtungen werden eingestellt, um diesen Fehler zu minimieren, wenn das Fehlersignal rückwärts durch die Schichten des Netzwerks ausgebreitet wird. Das Netzwerk wird als „trainiert“ betrachtet, wenn die Fehler für jede der Ausgaben, die von den Instanzen des Trainingsdatensatzes generiert werden, minimiert werden.
  • Die Genauigkeit eines Maschinenlernalgorithmus kann durch die Qualität des zum Trainieren des Algorithmus verwendeten Datensatzes erheblich beeinflusst werden. Der Trainingsprozess kann rechenintensiv sein und kann einen erheblichen Zeitaufwand auf einem herkömmlichen Universalprozessor erfordern. Dementsprechend wird eine Parallelverarbeitungshardware verwendet, um viele Arten von Maschinenlernalgorithmen zu trainieren. Dies ist besonders nützlich zum Optimieren des Trainings von neuronalen Netzwerken, da die Berechnungen, die beim Einstellen der Koeffizienten in neuronalen Netzwerken ausgeführt werden, sich auf natürliche Weise für parallele Implementierungen eignen. Insbesondere wurden viele Maschinenlernalgorithmen und Softwareanwendungen angepasst, um die Parallelverarbeitungshardware in Universal-Grafikverarbeitungsvorrichtungen zu verwenden.
  • 6 ist ein verallgemeinertes Diagramm eines Softwarestapels 600 für maschinelles Lernen. Eine Maschinenlernanwendung 602 kann konfiguriert sein, ein neuronales Netzwerk unter Verwendung eines Trainingsdatensatzes zu trainieren oder ein trainiertes tiefes neuronales Netzwerk zu verwenden, um Maschinenintelligenz zu implementieren. Die Maschinenlernanwendung 602 kann eine Trainings- und Inferenzfunktionalität für ein neuronales Netzwerk und/oder spezialisierte Software aufweisen, die verwendet werden kann, um ein neuronales Netzwerk vor dem Einsatz zu trainieren. Die Maschinenlernanwendung 602 kann eine beliebige Art von Maschinenintelligenz implementieren, einschließlich, jedoch nicht beschränkt auf Bilderkennung, Abbildung und Lokalisierung, autonome Navigation, Sprachsynthese, medizinische Bildgebung oder Sprachübersetzung.
  • Die Hardwarebeschleunigung für die Maschinenlernanwendung 602 kann über ein Maschinenlern-Framework 604 aktiviert werden. Das Maschinenlern-Framework 604 kann eine Bibliothek von Maschinenlernprimitiven bereitstellen. Maschinenlernprimitive sind Grundoperationen, die üblicherweise von Maschinenlernalgorithmen ausgeführt werden. Ohne das Maschinenlern-Framework 604 wären Entwickler von Maschinenlernalgorithmen erforderlich, um die Hauptrechenlogik, die dem Maschinenlernalgorithmus zugeordnet ist, zu erschaffen und zu optimieren, und dann die Rechenlogik erneut zu optimieren, wenn neue Parallelprozessoren entwickelt werden. Stattdessen kann die Maschinenlernanwendung derart konfiguriert sein, dass sie die notwendigen Berechnungen unter Verwendung der Primitive ausführt, die von dem Maschinenlern-Framework 604 bereitgestellt werden. Beispielhafte Primitive schließen Tensorwindungen, Aktivierungsfunktionen und Pooling ein, bei denen es sich um Rechenoperationen handelt, die während des Trainings eines faltenden neuronalen Netzwerks (CNN) ausgeführt werden. Das Maschinenlern-Framework 604 kann auch Primitive bereitstellen, um grundlegende lineare Algebra-Unterprogramme zu implementieren, die von vielen Maschinenlernalgorithmen ausgeführt werden, wie Matrix- und Vektoroperationen.
  • Das Maschinenlern-Framework 604 kann Eingabedaten verarbeiten, die von der Maschinenlernanwendung 602 empfangen werden, und die geeignete Eingabe für ein Rechen-Framework 606 generieren. Das Rechen-Framework 606 kann die dem GPGPU-Treiber 608 bereitgestellten zugrundeliegenden Anweisungen abstrahieren, um dem Maschinenlern-Framework 604 zu ermöglichen, die Hardwarebeschleunigung über die GPGPU-Hardware 610 zu nutzen, ohne dass das Maschinenlern-Framework 604 die Architektur der GPGPU-Hardware 610 genauestens kennen muss. 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
  • GPGPU-Machinenlernbeschleunigung
  • 7 veranschaulicht eine Allzweck-Grafikverarbeitungseinheit 700 gemäß einer Ausführungsform. In einer Ausführungsform kann die Universal-Verarbeitungseinheit (GPGPU) 700 derart konfiguriert sein, dass sie besonders effizient beim Verarbeiten der Art von Berechnungsarbeitslasten ist, die mit dem Trainieren von tiefen neuronalen Netzwerken in Zusammenhang stehen. Darüber hinaus kann die GPGPU 700 direkt mit anderen Instanzen der GPGPU verbunden sein, um einen Multi-GPU-Cluster zu erstellen, um die Trainingsgeschwindigkeit für besonders tiefe neuronale Netzwerke zu verbessern.
  • Die GPGPU 700 weist eine Host-Schnittstelle 702 auf, um eine Verbindung mit einem Host-Prozessor zu ermöglichen. Bei einer Ausführungsform ist die Host-Schnittstelle 702 eine PCI-Express-Schnittstelle. Die Host-Schnittstelle kann jedoch auch eine anbieterspezifische Kommunikationsschnittstelle oder ein anbieterspezifisches Kommunikations-Fabric sein. Die GPGPU 700 empfängt Befehle von dem Host-Prozessor und verwendet einen globalen Scheduler 704 zum Verteilen von Ausführungs-Threads, die mit diesen Befehlen assoziiert sind, an einen Satz von Rechen-Clustern 706A-706H. Die Rechen-Cluster 706A-706H nutzen einen Cache-Speicher 708 gemeinsam. Der Cache-Speicher 708 kann als Higher-Level-Cache für Cache-Speicher innerhalb der Rechen-Cluster 706A-706H dienen.
  • Die GPGPU 700 weist einen Speicher 714A-B auf, der über einen Satz von Speichersteuerungen 712A-712B mit den Rechen-Clustern 706A-H gekoppelt ist. Bei verschiedenen Ausführungsformen können die Speichereinheiten 714A-714B verschiedene Arten von Speichervorrichtungen beinhalten, einschließlich eines dynamischen Direktzugriffsspeichers (DRAM) oder eines Grafikdirektzugriffsspeichers, wie etwa eines synchronen Grafikdirektzugriffsspeichers (SGRAM), einschließlich eines Grafikspeichers mit doppelter Datenrate (GDDR). Bei einer Ausführungsform kann der Speicher 714 A-714 N auch 3D-Stapelspeicher beinhalten, einschließlich unter anderem eines Speichers 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 Rechen-Clusters weisen mehrere Arten von Ganzzahl- und Gleitkommalogikeinheiten auf, die Rechenoperationen in einem Genauigkeitsbereich ausführen können, der für Maschinenlernberechnungen geeignet sind. Zum Beispiel und in einer Ausführungsform kann mindestens eine Teilmenge der Gleitkommaeinheiten in jedem der Rechen-Cluster 706A-H konfiguriert sein, 16-Bit- oder 32-Bit-Gleitkommaoperationen auszuführen, während eine andere Teilmenge der Gleitkommaoperationen konfiguriert sein kann, 64-Bit-Fließkommaoperationen auszuführen.
  • Mehrere Instanzen der GPGPU 700 können derart konfiguriert sein, dass sie als Rechen-Cluster arbeiten. Der Kommunikationsmechanismus, der von dem Rechen-Cluster für die Synchronisation und den Datenaustausch verwendet wird, variiert zwischen Ausführungsformen. In einer Ausführungsform kommunizieren die mehreren Instanzen der GPGPU 700 über die Host-Schnittstelle 702. In einer Ausführungsform weist die GPGPU 700 einen I/O-Hub 709 auf, der die GPGPU 700 mit einer GPU-Verbindung 710 koppelt, die 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 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 Host-Schnittstelle 702 zugegriffen werden kann. In einer Ausführungsform kann die GPU-Verbindung 710 konfiguriert sein, eine Verbindung mit einem Host-Prozessor zusätzlich zu oder als eine Alternative zu der Host-Schnittstelle 702 zu ermöglichen.
  • Wenngleich die veranschaulichte Konfiguration der GPGPU 700 zum Trainieren von neuronalen Netzwerken konfiguriert sein kann, stellt eine Ausführungsform eine alternative Konfiguration der GPGPU 700 bereit, die zum Einsatz in einer Hochleistungs- oder Niedrigenergie-Inferenzplattform konfiguriert sein kann. In einer Inferenzkonfiguration weist die GPGPU 700 weniger der Rechen-Cluster 706A-706H im Vergleich zu der Trainingskonfiguration auf. Zusätzlich dazu kann sich die Speichertechnologie, die mit dem Speicher 714 A-714 B assoziiert ist, zwischen Inferenz-und Trainingskonfigurationen unterscheiden. In einer Ausführungsform kann die Inferenzkonfiguration der GPGPU 700 das Inferenzieren spezifischer Anweisungen unterstützen. Zum Beispiel kann eine Inferenzkonfiguration Unterstützung für einen oder mehrere ganzzahlige 8-Bit-Skalarproduktanweisungen bereitstellen, die üblicherweise während Inferenzoperationen für eingesetzte neuronale Netze verwendet werden.
  • 8 veranschaulicht ein Multi-GPU-Rechensystem 800 gemäß einer Ausführungsform. Das Multi-GPU-Computersystem 800 kann einen Prozessor 802 aufweisen, der über einen Host-Schnittstellenschalter 804 mit mehreren GPGPUs 806A-806D gekoppelt ist. Der Host-Schnittstellenschalter 804 ist in einer Ausführungsform eine PCI-Express-Schaltvorrichtung, 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 einen Satz von Hochgeschwindigkeits-Punkt-zu-Punkt-GPU-zu-GPU-Verbindungen 816 verbunden sein. Die Hochgeschwindigkeits-GPU-zu-GPU-Verbindungen können mit jeder der GPGPUs 806A - 806D über eine dedizierte GPU-Verbindung, wie 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 zu den P2P-GPU-Verbindungen geleitet wird, bleibt der Host-Schnittstellenbus für den Systemspeicherzugriff verfügbar oder kommuniziert mit anderen Instanzen des Multi-GPU-Rechensystems 800, beispielsweise über ein oder mehrere Netzwerkvorrichtungen. Während in der dargestellten Ausführungsform die GPGPUs 806A-D über den Host-Schnittstellenschalter 804 mit dem Prozessor 802 verbunden sind, beinhaltet der Prozessor 802 in einer Ausführungsform direkte Unterstützung für die P2P-GPU-Verbindungen 816 und kann direkt mit den GPGPUs 806A-806D verbunden sein.
  • Neuronale Netzwerkimplementierungen für Maschinenlernen
  • Die durch die hierin beschriebenen Ausführungsformen bereitgestellte Datenverarbeitungsarchitektur kann konfiguriert sein, die Arten der parallelen Verarbeitung auszuführen, die insbesondere zum Trainieren und Bereitstellen von neuronalen Netzwerken für Maschinenlernen geeignet sind. Ein neuronales Netzwerk kann als ein Netzwerk von Funktionen mit einer Graphenbeziehung verallgemeinert werden. Wie im Stand der Technik bekannt, gibt es viele verschiedene Arten von Implementierungen neuronaler Netzwerke, die beim Maschinenlernen verwendet werden. Ein beispielhafter Typ von neuronalem Netzwerk ist das Vorwärtskopplungsnetzwerk, wie zuvor beschrieben.
  • Ein zweiter beispielhafter Typ eines neuronalen Netzwerks ist das faltende neuronale Netzwerk (Convolutional Neural Network - CNN). Ein CNN ist ein spezialisiertes neuronales Vorwärtskopplungsnetzwerk zum Verarbeiten von Daten mit einer bekannten gitterartigen Topologie wie Bilddaten. Dementsprechend werden CNNs üblicherweise für Computer-Vision- und Bilderkennungsanwendungen verwendet, sie können jedoch auch für andere Arten von Mustererkennung wie die Sprachverarbeitung verwendet werden. Die Knoten in der CNN-Eingabeschicht sind in einem Satz von „Filtern“ organisiert (Merkmalsdetektoren, die von den in der Retina zu findenden Rezeptionsfeldern inspiriert sind), und die Ausgabe jedes Filtersatzes wird an Knoten in aufeinanderfolgenden Schichten des Netzwerks weitergegeben. Die Berechnungen für ein CNN beinhalten das Anwenden der mathematischen Faltungsoperation auf jeden Filter, um die Ausgabe dieses Filters zu erzeugen. Eine 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 faltenden Netztwerkerminologie kann die erste Funktion für die Faltung als die Eingabe bezeichnet werden, während die zweite Funktion als der Faltungskern bezeichnet werden kann. Die Ausgabe kann als Merkmalskarte bezeichnet werden. Zum Beispiel kann die Eingabe in eine Faltungsschicht ein mehrdimensionales Datenfeld sein, das die verschiedenen Farbkomponenten eines Eingabebildes definiert. Der Faltungskern kann eine mehrdimensionale Anordnung von Parametern sein, wobei die Parameter durch den Trainingsprozess für das neuronale Netzwerk angepasst sind.
  • Rekurrente neuronale Netzwerke (RNNs) sind eine Familie von neuronalen Vorwärtskopplungsnetzwerken, die Rückkopplungsverbindungen zwischen Schichten enthalten. RNNs ermöglichen eine Modellierung sequentieller Daten durch den Austausch von Parameterdaten über verschiedene Teile des neuronalen Netzwerks. 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 Ausgangsdaten von dem RNN als eine Rückkopplung zum Verarbeiten einer nachfolgenden Eingabe in einer Sequenz verwendet wird. Diese Eigenschaft macht RNNs aufgrund der variablen Natur, in der Sprachdaten zusammengesetzt sein können, besonders nützlich für die Sprachverarbeitung.
  • Die nachstehend beschriebenen Figuren stellen beispielhafte Vorwärtskopplungs-, CNN- und RNN-Netzwerke sowie einen allgemeinen Prozess zum jeweiligen Trainieren und Bereitstellen jeder dieser Arten von Netzwerken dar. Es versteht sich, dass diese Beschreibungen beispielhaft und nicht einschränkend für jede spezifische hierin beschriebene Ausführungsform sind und die dargestellten Konzepte im Allgemeinen auf tiefe neuronale Netzwerke und Maschinenlerntechniken im Allgemeinen angewendet werden können.
  • Die beispielhaften neuronalen Netzwerke, die oben beschrieben sind, können verwendet werden, um ein Deep Learning (tiefgründiges Lernen) auszuführen. Deep Learning ist maschinelles Lernen unter Verwendung von tiefen neuronalen Netzwerken. Die tiefen neuronalen Netzwerke, die beim Deep Learning verwendet werden, sind künstliche neuronale Netzwerke, die aus mehreren verborgenen Schichten bestehen, im Gegensatz zu flachen neuronalen Netzwerken, die nur eine einzige verborgene Schicht aufweisen. Tiefere neuronale Netzwerke sind im Allgemeinen rechenintensiver zu trainieren. Die zusätzlichen verborgenen Schichten des Netzwerkes ermöglichen jedoch eine mehrstufige Mustererkennung, die verglichen mit flachen Maschinenlerntechniken zu verringerten Ausgabefehlern führt.
  • Tiefe neuronale Netzwerke, die beim Deep Learning Lernen verwendet werden, schließen typischerweise ein Frontend-Netzwerk zur Ausführung einer Merkmalserkennung ein, die mit einem Backend-Netzwerk gekoppelt ist, das ein mathematisches Modell darstellt, das Operationen (z. B. Objektklassifizierung, Spracherkennung usw.) basierend auf der Merkmalsrepräsentation ausführen kann, die dem Modell bereitgestellt wird. Deep Learning ermöglicht Maschinenlernen, ohne dass für das Modell handwerkliches Merkmals-Engineering ausgeführt werden muss. Stattdessen können tiefe neuronale Netzwerke Merkmale lernen, die auf einer statistischen Struktur oder Korrelation innerhalb der Eingabedaten basieren. Die erlernten Merkmale können einem mathematischen Modell bereitgestellt werden, das erkannte Merkmale einer Ausgabe zuordnen kann. Das mathematische Modell, das von dem Netzwerk verwendet wird, ist im Allgemeinen für die spezifische auszuführende Aufgabe spezialisiert, und verschiedene Modelle werden verwendet, um verschiedene Aufgaben auszuführen.
  • Sobald das neuronale Netzwerk strukturiert ist, kann ein Lernmodell auf das Netzwerk angewendet werden, um das Netzwerk zu trainieren, spezifische Aufgaben auszuführen. Das Lernmodell beschreibt, wie die Gewichtungen innerhalb des Modells angepasst werden, um den Ausgabefehler des Netzwerks zu reduzieren. Eine Rückausbreitung von Fehlern ist ein übliches Verfahren, um neuronale Netzwerke zu trainieren. Ein Eingabevektor wird dem Netzwerk zur Verarbeitung präsentiert. Die Ausgabe des Netzwerks wird unter Verwendung einer Verlustfunktion mit der gewünschten Ausgabe verglichen und ein Fehlerwert wird für jedes der Neuronen in der Ausgabeschicht berechnet. Die Fehlerwerte werden dann zurück ausgebreitet, bis jedem Neuron ein Fehlerwert zugeordnet ist, der grob seinen Beitrag zur ursprünglichen Ausgabe darstellt. Das Netzwerk kann dann aus diesen Fehlern lernen, indem es einen Algorithmus wie den stochastischen Gradientenabstiegsalgorithmus verwendet, um die Gewichtungen des neuronalen Netzwerks 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 (z. B. Faltungsschicht 904, Faltungsschicht 906) verarbeitet werden. Die Ausgabe von den mehreren Faltungsschichten kann wahlweise von einem Satz von vollständig verbundenen 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 Vorwärtskopplungsnetzwerk beschrieben. Die Ausgabe von den vollständig verbundenen Schichten 908 kann verwendet werden, um ein Ausgabeergebnis von dem Netzwerk zu erzeugen. Die Aktivierungen innerhalb der vollständig verbundenen Schichten 908 können unter Verwendung einer Matrixmultiplikation anstelle einer Faltung berechnet werden. Nicht alle CNN-IMPLEMENTIERUNGEN verwenden vollständig verbundene Schichten 908. Zum Beispiel kann in einigen Implementierungen die Faltungsschicht 906 eine Ausgabe für das CNN erzeugen.
  • Die Faltungsschichten sind spärlich verbunden, was sich von der traditionellen neuronalen Netzwerkkonfiguration unterscheidet, die in den vollständig verbundenen Schichten 908 gefunden wird. 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 (statt des jeweiligen Zustandswertes jedes der Knoten in dem Feld) in die Knoten der nachfolgenden Schicht wie dargestellt eingegeben wird. Die den Faltungsschichten zugeordneten Kerne führen Faltungsoperationen aus, deren Ausgabe an die nächste Schicht gesendet wird. Die Dimensionalitätsreduzierung, die in den Faltungsschichten ausgeführt wird, ist ein Aspekt, der dem CNN ermöglicht, skaliert zu werden, um große Bilder zu verarbeiten.
  • 9B 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 Sammelstufe 920 einschließen. Die Faltungsschicht 914 kann dann Daten an eine nachfolgende Faltungsschicht ausgeben. Die letzte Faltungsschicht des Netzwerks kann Ausgabemerkmal-Kartendaten erzeugen oder eine Eingabe für eine vollständig verbundene Schicht bereitstellen, um beispielsweise einen Klassifizierungswert für die Eingabe in das CNN zu generieren.
  • In der Faltungsstufe 916 werden mehrere Faltungen parallel ausgeführt, um einen Satz linearer Aktivierungen zu erzeugen. Die Faltungsstufe 916 kann eine affine Transformation aufweisen, bei der es sich um eine beliebige Transformation handelt, die als lineare Transformation plus eine Translation spezifiziert werden kann. Affine Transformationen schließen Rotationen, Translationen, Skalierungen und Kombinationen dieser Transformationen ein. Die Faltungsstufe berechnet die Ausgabe von Funktionen (z. B. Neuronen), die mit bestimmten Regionen in der Eingabe verbunden sind, die als die lokale Region bestimmt werden kann, die dem Neuron zugeordnet ist. Die Neuronen berechnen ein Skalarprodukt zwischen den Gewichtungen der Neuronen und der Region in der lokalen Eingabe, mit der die Neuronen verbunden sind. Die Ausgabe von der Faltungsstufe 916 definiert einen Satz linearer Aktivierungen, die von aufeinanderfolgenden Stufen der Faltungsschicht 914 verarbeitet werden.
  • Die linearen Aktivierungen können von einer Detektorstufe 918 verarbeitet werden. In der Detektorstufe 918 wird jede lineare Aktivierung von einer nichtlinearen Aktivierungsfunktion verarbeitet. Die nichtlineare Aktivierungsfunktion erhöht die nichtlinearen Eigenschaften des gesamten Netzwerks, ohne die Rezeptionsfelder der Faltungsschicht zu beeinflussen. Verschiedene Arten von nichtlinearen Aktivierungsfunktionen können verwendet werden. Ein spezieller Typ ist die rektifizierte lineare Einheit (ReLU), die eine Aktivierungsfunktion verwendet, die als ƒ(x) = max(0, x) definiert ist, sodass die Aktivierung bei Null als Schwellenwert verwendet wird.
  • Die Pooling-Stufe 920 verwendet eine Pooling-Funktion, die die Ausgabe der Faltungsschicht 906 durch eine Zusammenfassungsstatistik der nahen Ausgaben ersetzt. Die Pooling-Funktion kann verwendet werden, um eine Translationsinvarianz in das neuronale Netzwerk einzuführen, sodass kleine Änderungen an der Eingabe die gepoolten Ausgaben nicht ändern. Eine Invarianz zur lokalen Translation kann in Szenarien nützlich sein, in denen das Vorhandensein eines Merkmals in den Eingabedaten wichtiger als die genaue Position des Merkmals ist. Verschiedene Arten von Pooling-Funktionen können während der Pooling-Stufe 920 verwendet werden, einschließlich Max-Pooling, Durchschnitts-Pooling und L2-Norm-Pooling. Darüber hinaus weisen einige CNN-Implementierungen keine Pooling-Stufe auf. Statt dessen ersetzen solche Implementierungen eine zusätzliche Faltungsstufe, die im Vergleich zu früheren Faltungsstufen einen erhöhten Fortschritt aufweist.
  • Die Ausgabe aus 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 Netzwerk (RNN) beeinflusst der vorherige Zustand des Netzwerks die Ausgabe des aktuellen Zustands des Netzwerks. RNNs können auf vielfältige Weise mit einer Vielzahl von Funktionen aufgebaut werden. Bei der Verwendung von RNNs geht es im Allgemeinen darum, mathematische Modelle zu verwenden, um die Zukunft basierend auf einer vorherigen Sequenz von Eingaben vorherzusagen. Zum Beispiel kann ein RNN verwendet werden, um eine statistische Sprachmodellierung auszuführen, um ein bevorstehendes Wort aufgrund einer vorherigen Wortfolge vorherzusagen. Das dargestellte RNN 1000 kann als mit einer Eingabeschicht 1002, die einen Eingabevektor empfängt, verborgenen Schichten 1004 zum Implementieren einer rekurrenten Funktion, einem Rückkopplungsmechanismus 1005 zum Aktivieren eines „Speichers“ von vorherigen Zuständen und einer Ausgabeschicht 1006 zum Ausgeben eines Ergebnisses beschrieben werden. Das RNN 1000 arbeitet nach Zeitschritten. Der Zustand des RNN zu einem gegebenen Zeitschritt wird basierend auf dem vorherigen Zeitschritt über den Rückkopplungsmechanismus 1005 beeinflusst. Für einen gegebenen Zeitschritt wird der Zustand der verborgenen Schichten 1004 durch den vorherigen Zustand und die Eingabe im aktuellen Zeitschritt definiert. Eine Anfangseingabe (x1) in einem ersten Zeitschritt kann von der verborgenen Schicht 1004 verarbeitet werden. Eine zweite Eingabe (x2) kann durch die verborgene Schicht 1004 unter Verwendung von Zustandsinformationen verarbeitet werden, die während der Verarbeitung der anfänglichen Eingabe (x1) bestimmt werden. Ein gegebener Zustand kann als st = ƒ(Uxt + Wst-1) berechnet werden, wobei U und W Paramtermatrizen sind. Die Funktion ƒ ist im Allgemeinen eine Nichtlinearität wie die Hyperbolic Tangens Function (Tanh) oder eine Variante der Gleichrichterfunktion ƒ(x) = max(0, x). Die spezifische mathematische Funktion, die in den verborgenen Schichten 1004 verwendet wird, kann jedoch abhängig von den spezifischen Implementierungsdetails des RNN 1000 variieren.
  • Zusätzlich zu den beschriebenen grundlegenden CNN- und RNN-Netzwerken können Variationen in diesen Netzwerken ermöglicht 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 notwendig sein können. Eine Variante des CNN ist ein faltendes Deep-Faith-Netzwerk, das eine CNN-ähnliche Struktur aufweist und ähnlich wie ein Deep-Faith-Netzwerk trainiert wird. Ein Deep-Faith-Network (DBN) ist ein generatives neuronales Netzwerk, das aus mehreren Schichten stochastischer (zufälliger) Variablen zusammengesetzt ist. DBNs können Schicht für Schicht mittels gierigem unüberwachtem Lernen trainiert werden. Die gelernten Gewichtungen des DBN können dann verwendet werden, um vortrainige neuronale Netzwerke bereitzustellen, indem ein optimaler Anfangssatz von Gewichtungen für das neuronale Netzwerk 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. Verschiedene Trainings-Frameworks 1104 wurden 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. Das Trainings-Framework 604 kann sich in ein untrainiertes neuronales Netzwerk 1106 einklinken und ermöglichen, dass das untrainierte neuronale Netzwerk unter Verwendung der hierin beschriebenen parallelen Verarbeitungsressourcen trainiert wird, um ein trainiertes neuronales Netzwerk 1108 zu generieren.
  • Um den Trainingsprozess zu beginnen, können die Anfangsgewichtungen zufällig oder durch Vortraining unter Verwendung eines Deep-Faith-Netzwerks ausgewählt werden. Der Trainingszyklus kann dann entweder auf überwachte oder auf unüberwachte Weise ausgeführt werden.
  • Überwachtes Lernen ist ein Lernverfahren, bei dem das Training als eine vermittelte Operation ausgeführt wird, beispielsweise wenn der Trainingsdatensatz 1102 eine mit der gewünschten Ausgabe für die Eingabe gepaarte Eingabe aufweist oder wenn der Trainingsdatensatz eine Eingabe mit bekannter Ausgabe aufweist und die Ausgabe des neuronalen Netzwerks manuell eingestuft wird. Das Netzwerk verarbeitet die Eingaben und vergleicht die resultierenden Ausgaben mit einem Satz von erwarteten oder gewünschten Ausgaben. Fehler werden dann zurück durch das System ausgebreitet. Das Trainings-Framework 1104 kann eingestellt werden, um die Gewichtungen einzustellen, die das untrainierte neuronale Netzwerk 1106 steuern. Das Trainings-Framework 1104 kann Werkzeuge bereitstellen, um zu überwachen, wie gut das untrainierte neuronale Netzwerk 1106 zu einem Modell konvergiert, das zum Generieren korrekter Antworten auf der Grundlage bekannter Eingabedaten geeignet ist. Der Trainingsprozess findet wiederholt statt, wenn die Gewichtungen des Netzwerks angepasst werden, um die von dem neuronalen Netzwerk generierte Ausgabe zu verfeinern. Der Trainingsprozess kann fortgesetzt werden, bis das neuronale Netzwerk eine statistisch gewünschte Genauigkeit erreicht, die einem trainierten neuronalen Netzwerk 1108 zugeordnet ist. Das trainierte neuronale Netzwerk 1108 kann dann eingesetzt werden, um eine beliebige Anzahl von Maschinenlernoperationen zu implementieren, um ein Inferenzergebnis 1114 basierend auf einer Eingabe neuer Daten 1112 zu erzeugen.
  • Unüberwachtes Lernen ist ein Lernverfahren, bei dem das Netzwerk versucht, sich selbst mit unmarkierten Daten zu trainieren. Somit wird der Trainingsdatensatz 1102 für unüberwachtes Lernen Eingabedaten ohne zugehörige Ausgabedaten enthalten. Das untrainierte neuronale Netzwerk 1106 kann Gruppierungen innerhalb der nicht gekennzeichneten Eingabe lernen und kann bestimmen, wie sich einzelne Eingaben auf den gesamten Datensatz beziehen. Unüberwachtes Training kann verwendet werden, um eine selbstorganisierende Karte zu generieren, die eine Art trainiertes neuronales Netzwerk 1108 ist, das in der Lage ist, Operationen auszuführen, die nützlich sind, um die Dimensionalität von Daten zu reduzieren. Unüberwachtes Training kann auch verwendet werden, um eine Anomalieerkennung auszuführen, die die Identifizierung von Datenpunkten in einem Eingabedatensatz ermöglicht, die von den normalen Mustern der Daten abweichen.
  • Variationen über überwachtes und unüberwachtes Training können ebenfalls verwendet werden. Halbüberwachtes Lernen ist eine Technik, bei der in dem Trainingsdatensatz 1102 eine Mischung aus markierten und unmarkierten Daten der gleichen Verteilung enthalten ist. Inkrementelles Lernen ist eine Variante des überwachten Lernens, bei der Eingabedaten kontinuierlich zum weiteren Trainieren des Modells verwendet werden. Inkrementelles Lernen ermöglicht dem trainierten neuronalen Netzwerk 1108, sich an die neuen Daten 1112 anzupassen, ohne das Wissen zu vergessen, das während des anfänglichen Trainings in das Netzwerk eingeflößt wird.
  • Ob überwacht oder unüberwacht, der Trainingsprozess für besonders tiefe neuronale Netzwerke 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 Netzwerks auszufü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 dargestellt, kann das verteilte Lernen durch Modellparallelismus 1202, Datenparallelismus 1204 oder eine Kombination aus Modell- und Datenparallelismus 1204 ausgeführt werden.
  • Beim Modellparallelismus 1202 können verschiedene Rechenknoten in einem verteilten System Trainingsberechnungen für verschiedene Teile eines einzelnen Netzwerks ausführen. Zum Beispiel kann jede Schicht eines neuronalen Netzwerks von einem unterschiedlichen Verarbeitungsknoten des verteilten Systems trainiert werden. Zu den Vorteilen des Modellparallelismus gehört die Skalierbarkeit auf besonders große Modelle. Die Aufteilung der Berechnungen, die mit verschiedenen Schichten des neuronalen Netzwerks verbunden sind, ermöglicht das Trainieren sehr großer neuronaler Netzwerke, in denen die Gewichtungen aller Schichten nicht in den Speicher eines einzelnen Rechenknotens passen würden. In einigen Fällen kann der Modellparallelismus bei der Ausführung eines unüberwachten Trainings großer neuronaler Netzwerke besonders nützlich sein.
  • Beim Datenparallelismus 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 zum Datenparallelismus möglich sind, erfordern Daten-Parallel-Trainingsansätze alle eine Technik des Kombinierens von Ergebnissen und Synchronisieren der Modellparameter zwischen jedem Knoten. Beispielhafte Ansätze zum Kombinieren von Daten beinhalten Parametermittelung und aktualisierungsbasierte Datenparallelität. Die Parametermittelwertbildung trainiert jeden Knoten in einer Teilmenge der Trainingsdaten und setzt die globalen Parameter (z. B. Gewichtungen, Bias) auf den Mittelwert der Parameter von jedem Knoten. Eine Parametermittelwertbildung verwendet einen zentralen Parameterserver, der die Parameterdaten verwaltet. Aktualisierungsbasierte Datenparallelität ähnelt einer Parametermittelung, außer dass anstelle des Übertragens von Parametern von den Knoten zu dem Parameterserver die Aktualisierungen an dem Modell übertragen werden. Außerdem kann der aktualisierungsbasierte Datenparallelismus dezentral ausgeführt werden, wobei die Aktualisierungen komprimiert und zwischen den Knoten übertragen werden.
  • Ein kombinierter Modell- und Datenparallelismus 1206 kann zum Beispiel in einem verteilten System implementiert werden, in dem jeder Rechenknoten mehrere GPUs aufweist. Jeder Knoten kann eine vollständige Instanz des Modells mit separaten GPUs in jedem Knoten haben, um verschiedene Teile des Modells zu trainieren.
  • Verteiltes Training hat im Vergleich zum Training an einer einzelnen Maschine einen erhöhten Overhead. Die hier beschriebenen Parallelprozessoren und GPGPUs können jedoch jeweils verschiedene Techniken implementieren, um den Overhead von verteiltem Training zu reduzieren, einschließlich Techniken zum Ermöglichen einer GPU-zu-GPU-Datenübertragung mit hoher Bandbreite und einer beschleunigten Ferndatensynchronisation.
  • Beispielhafte Maschinenlernanwendungen
  • Maschinenlernen kann angewendet werden, um eine Vielzahl von technologischen Problemen zu lösen, einschließlich, jedoch nicht beschränkt auf Computer Vision, autonomes Fahren und Navigation, Spracherkennung und Sprachverarbeitung. Computer-Vision ist herkömmlicherweise einer der aktivsten Forschungsbereiche für Maschinenlernen. Anwendungen von Computer-Vision reichen von der Reproduktion menschlicher Sehfähigkeiten wie das Erkennen von Gesichtern bis hin zum Erzeugen neuer Kategorien visueller Fähigkeiten. Zum Beispiel können Computer-Vision-Anwendungen derart konfiguriert sein, dass sie Schallwellen aus den Vibrationen erkennen, die in in einem Video sichtbaren Objekten induziert werden. Durch Parallelprozessoren beschleunigtes Maschinenlernen ermöglicht das Training von Computer-Vision-Anwendungen unter Verwendung eines wesentlich größeren Trainingsdatensatzes als bisher möglich und ermöglicht die Verwendung von Inferenzsystemen unter Verwendung von Parallelprozessoren mit geringer Leistung.
  • Durch Parallelprozessoren beschleunigtes Maschinenlernen hat autonome Fahranwendungen, einschließlich Fahrbahn- und Verkehrszeichenerkennung, Hindernisvermeidung, Navigation und Fahrsteuerung. Beschleunigte Maschinenlerntechniken können verwendet werden, um Fahrmodelle basierend auf Datensätzen zu trainieren, die die geeigneten Antworten auf spezifische Trainingseingaben definieren. Die hier beschriebenen Parallelprozessoren können ein schnelles Training der zunehmend komplexen neuronalen Netzwerke ermöglichen, die für autonome Fahrlösungen verwendet werden, und ermöglichen den Einsatz von leistungsschwachen Schlußfolgerungs-Prozessoren in einer mobilen Plattform, die zur Integration in autonome Fahrzeuge geeignet ist.
  • Durch Parallelprozessoren beschleunigte tiefe neuronale Netzwerke haben Maschinenlernansätze für die automatische Spracherkennung (ASR) ermöglicht. ASR beinhaltet das Erzeugen einer Funktion, die die wahrscheinlichste linguistische Sequenz bei einer eingegebenen akustischen Sequenz berechnet. Beschleunigtes Maschinenlernen unter Verwendung tiefer neuronaler Netzwerke ermöglichte den Ersatz der bisher für ASR verwendeten Hidden-Markov-Modelle (HMMs) und Gaussian-Mixture-Modelle (GMMs).
  • Durch Parallelprozessoren beschleunigtes Maschinenlernen kann auch verwendet werden, um die Verarbeitung von natürlicher Sprache zu beschleunigen. Automatische Lernprozeduren können statistische Inferenzalgorithmen verwenden, um Modelle zu erzeugen, die gegenüber fehlerhafter oder ungewohnter Eingabe robust sind. Beispielhafte Anwendungen für die Verarbeitung natürlicher Sprache schließen die automatische Maschinenübersetzung zwischen menschlichen Sprachen ein.
  • Die parallelen Verarbeitungsplattformen für Maschinenlernen können in Trainingsplattformen und Bereitstellungsplattformen unterteilt werden. Trainingsplattformen sind im Allgemeinen hochgradig parallel und beinhalten Optimierungen, um Multi-GPU-Single-Node-Training und Multi-Node-Multi-GPU-Training zu beschleunigen. 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 schließen eingesetzte Maschinenlernplattformen im Allgemeinen Parallelprozessoren mit geringerer Leistung ein, die zur Verwendung 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. Das SOC 1300 kann zusätzlich einen On-Chip-Speicher 1305 beinhalten, 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 geringer Leistung optimiert sein, um eine Bereitstellung auf einer Vielzahl von Maschinenlernplattformen einschließlich autonomen Fahrzeugen und autonomen Robotern zu ermöglichen. Zum Beispiel kann eine Implementierung des SOC 1300 als ein Teil des Hauptsteuersystems für ein autonomes Fahrzeug verwendet werden. Wenn das SOC 1300 zur Verwendung in autonomen Fahrzeugen konfiguriert ist, ist das SOC derart ausgelegt und konfiguriert, dass es die relevanten funktionalen Sicherheitsstandards der Rechtsprechung des Einsatzgebietes erfüllt.
  • Während des Betriebs können der Medienprozessor 1302 und der Bildprozessor 1304 gemeinsam arbeiten, um Computerbildverarbeitungsoperationen zu beschleunigen. Der Medienprozessor 1302 kann eine Decodierung mit niedriger Latenz von mehreren Videoströmen mit hoher Auflösung (z. B. 4K, 8K) ermöglichen. Die decodierten Videoströme können in einen Puffer in dem On-Chip-Speicher 1305 geschrieben werden. Der Vision-Prozessor 1304 kann dann das decodierte Video analysieren und vorbereitende Verarbeitungsoperationen an den Rahmen des decodierten Videos als Vorbereitung der Verarbeitung der Rahmen unter Verwendung eines trainierten Bilderkennungsmodells ausführen. Zum Beispiel kann der Bildprozessor 1304 Faltungsoperationen für ein CNN beschleunigen, das verwendet wird, um eine Bilderkennung an den hochauflösenden Videodaten auszuführen, während Backend-Modellberechnungen von der GPGPU 1306 ausgeführt werden.
  • Der Multi-Kern-Prozessor 1308 kann eine Steuerlogik aufweisen, um das Sequenzieren und Synchronisieren von Datenübertragungen und gemeinsam genutzten Speicheroperationen, die von dem Medienprozessor 1302 und dem Bildprozessor 1304 ausgeführt werden, zu unterstützen. Der Multi-Kern-Prozessor 1308 kann auch als ein Anwendungsprozessor zum Ausführen von Softwareanwendungen dienen, die die Inferenzrechenleistung der GPGPU 1306 nutzen können. Zum Beispiel kann zumindest ein Teil der Navigations- und Fahrlogik in Software implementiert sein, die auf dem Multi-Kern-Prozessor 1308 ausgeführt wird. Eine solche Software kann Rechenarbeitslasten direkt an die GPGPU 1306 ausgeben, oder die Rechenarbeitslasten können an den Multi-Kern-Prozessor 1308 ausgegeben werden, der mindestens einen Teil dieser Operationen an die GPGPU 1306 auslagern kann.
  • Die GPGPU 1306 kann Rechen-Cluster, wie etwa eine Niedrigleistungskonfiguration der Rechen-Cluster 706 A-706 H, innerhalb der Universalgrafikverarbeitungseinheit 700 beinhalten. Die Rechen-Cluster innerhalb der GPGPU 1306 können Anweisungen unterstützen, die speziell optimiert sind, um Inferenzberechnungen in einem trainierten neuronalen Netzwerk auszuführen. Zum Beispiel kann die GPGPU 1306 Anweisungen unterstützen, um Berechnungen mit niedriger Genauigkeit auszuführen, wie 8-Bit- und 4-Bit-Ganzzahlvektoroperationen.
  • Thread-Gruppen-Planung für die Grafikverarbeitung
  • In einigen Ausführungsformen soll eine Vorrichtung, ein System oder ein Prozess eine Thread-Gruppenplanung basierend auf einer Thread-Beziehung bereitstellen, um die Thread-Lokalität zu verbessern und den Stromverbrauch zu reduzieren.
  • 14 ist eine Darstellung einer herkömmlichen Planung von Thread-Gruppen für die Grafikverarbeitung. In FIG. In 14 repräsentiert das dargestellte Raster 1400 den Prozessorbetrieb und das Zwischenspeichern von Daten. Jeder Block im Gitter 1400 repräsentiert die Planung einer Thread-Gruppe für einen Prozessor. Die Datenzwischenspeicherung basiert jedoch auf einer Reihe von Thread-Gruppenzuweisungen. Zum Beispiel wird eine bestimmte Teilmenge 1410 der Thread-Zuweisungen zusammen zwischengespeichert. Jede der anderen Thread-Gruppen-Zuweisungen unterliegt ebenfalls diesem Muster für das Caching von Thread-Gruppen.
  • Wie in FIG. In 14 wird die konventionelle Planung eines Satzes (oder Warps) von Thread-Gruppen „gierig“ für den ersten verfügbaren Prozessor geplant, was zu einer geringen räumlichen Lokalität für Thread-Gruppen führt. In diesem Beispiel werden die Thread-Gruppen 0-5 bei der Planung jeweils für den ersten verfügbaren Prozessor geplant. Zur Vereinfachung der Darstellung wird der erste verfügbare Prozessor entlang einer ersten Reihe im Raster 1400 zugewiesen, aber dies ist nur ein Beispiel, und die Verfügbarkeit von Prozessoren kann zu unterschiedlichen Mustern der Thread-Zuweisung führen.
  • In dem in 14 kann die Nutzung der Hardwareressourcen in einem Grafikverarbeitungssystem maximiert werden. Wenn jedoch eine Beziehung zwischen den Thread-Gruppen besteht, wie z. B. eine Beziehung zwischen jeder der Thread-Gruppen 0-5, dann führt diese Planung, obwohl sie effizient ist, um sicherzustellen, dass jeder Prozessor verwendet wird, zu einem Caching mit geringer räumlicher Lokalität von die Thread-Gruppen. Dies führt dann zu einem erhöhten Stromverbrauch beim Versuch, das Daten-Caching im Betrieb der Thread-Gruppen zu adressieren.
  • Figur fünfzehn ist eine Darstellung der Planung von Thread-Gruppen für die Grafikverarbeitung unter Verwendung der Cache-Lokalität gemäß einigen Ausführungsformen. Wie in FIG. In 15 repräsentiert ein Gitter 1500 das Scheduling von Thread-Gruppen für Prozessoren. Bestimmte Teilmengen von Thread-Zuweisungen, wie beispielsweise die Teilmenge 1510, werden zusammen zwischengespeichert. In einigen Ausführungsformen, im Gegensatz zu der herkömmlichen Planung von Thread-Gruppen, die in FIG. In 14 werden Thread-Gruppen unter Verwendung der Cache-Lokalität zugewiesen. Beispielsweise werden in einem bestimmten Fall die Thread-Gruppen 0 bis 3 so zugewiesen, dass sie der Cache-Lokalität folgen, die für Thread-Gruppenzuweisungen eingerichtet wurde.
  • In einigen Ausführungsformen wird ein gewisser Bias für die synchrone Planung bereitgestellt, wobei der Bias (unter Verwendung von Hinweisen oder Behauptungen) darin besteht, dass eine Gruppe von Thread-Gruppen/Warps zusammen auf einem einzelnen Mikroprozessorprozess oder einer Cache-Domäne ausgeführt werden soll, um die Cache-Lokalität zu verbessern.
  • In einigen Ausführungsformen ist der Bias ein Hinweis bezüglich der Cache-Lokalität, der bei der Thread-Gruppenzuweisung verwendet werden kann, wie beispielsweise für Kernel mit regulären Zugriffsmustern. Der Hinweis kann anweisen, dass versucht wird, auf einer ähnlichen Cache-Domäne auszuführen, aber einen Fehler zulassen, wenn dies unter den gegebenen Umständen nicht sinnvoll ist, z. B. wenn eine Zeitüberschreitung auftritt oder das Befolgen des Hinweises die Leistung beeinträchtigen würde. Der Hinweis könnte verschiedene Formen annehmen, wie beispielsweise eine Präferenz, einen N x M Block von Thread-Gruppen zusammenzuhalten, oder eine Präferenz, entlang einer Dimension gegenüber einer anderen zu planen, oder eine Kombination von Präferenzen für die Planung von Gruppen von Threads.
  • In einigen Ausführungsformen ist der Bias eine Behauptung, die anweist, dass die Zuweisung der Thread-Gruppen der Cache-Lokalität folgt, dh die Planung muss auf der Grundlage einer ähnlichen Cache-Domäne ausgeführt werden. In einigen Ausführungsformen kann synchrones Scheduling eine Vorgabe für die Zuweisung von Thread-Gruppen sein.
  • Ein synchrones Scheduling von Thread-Gruppen-Warps in einer Thread-Gruppe kann auch den Stromverbrauch unter Verwendung von Thread-Warp-Scheduling reduzieren, wobei der Zeitplan eines einzelnen Thread-Warps in Vielfachen platziert werden kann, die über zwei oder mehr Warps in einer Thread-Gruppe abgeschrieben werden, wenn möglich.
  • 16 ist eine Darstellung einer Thread-Gruppen-Planung unter Verwendung von Unterblöcken gemäß einigen Ausführungsformen. 16 veranschaulicht Blöcke 1610 und Unterblöcke von Thread-Gruppen. In einem Streaming-Mikroprozessor (SM) können Warps an einen Unterblock 1620 gebunden sein.
  • In einigen Ausführungsformen soll ein Scheduler die Verteilung von Thread-Gruppen über Unterblöcke verwenden, aber im Gleichschritt über mehrere (4) Warps hinweg arbeiten. Alternativ kann der SM Thread-Gruppen auf einen einzelnen Unterblock 1620 einplanen und Warps sequentiell mit einem Ansatz im Wellenfrontstil einplanen.
  • In einigen Ausführungsformen soll der Scheduler, sobald die Thread-Gruppen/Warps voneinander abweichen, Warps unabhängig planen.
  • Systemübersicht
  • 17 ist ein Blockdiagramm eines Verarbeitungssystems 1700 gemäß einer Ausführungsform. Das System 1700 kann in einem Einzelprozessor-Desktop-System, einem Multiprozessor-Arbeitsplatzsystem oder einem Serversystem mit einer großen Anzahl von Prozessoren 1702 oder Prozessorkernen 1707 verwendet werden. Bei einer Ausführungsform ist das System 1700 eine Verarbeitungsplattform, die innerhalb einer integrierten System-on-Chip (SoC) -Schaltung zur Verwendung in mobilen, handgehaltenen oder eingebetteten Vorrichtungen, wie etwa innerhalb von Internet-of-Dinges (IoT) -Vorrichtungen mit drahtgebundener oder drahtloser Konnektivität zu einem lokalen oder Weitverkehrsnetzwerk, integriert ist.
  • In einer Ausführungsform kann das System 1700 eine serverbasierte Spielplattform; eine Spielkonsole, einschließlich einer Spiel-und Medienkonsole; eine mobile Spielkonsole, eine handgehaltene Spielkonsole oder eine Online-Spielkonsole beinhalten, mit dieser gekoppelt oder darin integriert sein. Bei manchen Ausführungsformen ist das System 1700 Teil eines Mobiltelefons, Smartphones, Tablet-Rechengeräts oder eines mobilen internetverbundenen Geräts, wie etwa eines Laptops mit niedriger interner Speicherkapazität. Das Verarbeitungssystem 1700 kann auch Folgendes beinhalten, damit koppeln oder darin integriert sein: eine tragbare Vorrichtung, wie etwa eine tragbare Smartwatch-Vorrichtung; eine intelligente Brille oder Kleidung, die mit Augmented-Reality (AR)-oder Virtual-Reality (VR) - Merkmalen verbessert ist, um visuelle, Audio-oder taktile Ausgaben, um visuelle, Audio-oder taktile Real Welt Erfahrungen zu ergänzen oder anderweitig Text, Audio, Grafiken, Video, holographische Bilder oder Video oder taktiles Feedback bereitzustellen; eine andere Augmented Reality (AR) -Vorrichtung; oder eine andere Virtual Reality (VR) -Vorrichtung. Bei manchen Ausführungsformen beinhaltet das Verarbeitungssystem 1700 ein Fernseh-oder Set-Top-Box-Gerät oder ist Teil davon.
  • Bei manchen Ausführungsformen kann das System 1700 ein selbstfahrendes Fahrzeug, wie etwa einen Bus, einen Zugmaschinenanhänger, ein Auto, einen Motor oder ein elektrisches Leistungsrad, ein Flugzeug oder einen Gleiter (oder eine beliebige Kombination davon), beinhalten, mit diesem koppeln oder darin integriert sein. Das selbstfahrende Fahrzeug kann das System 1700 verwenden, um die Umgebung zu verarbeiten, die um das Fahrzeug herum erfasst wird.
  • Bei manchen Ausführungsformen beinhalten der eine oder die mehreren Prozessoren 1702 jeweils einen oder mehrere Prozessorkerne 1707 zum Verarbeiten von Anweisungen, die, wenn sie ausgeführt werden, Operationen für System-oder Benutzersoftware durchführen. In einigen Ausführungsformen ist mindestens einer des einen oder der mehreren Prozessorkerne 1707 dazu ausgelegt, einen spezifischen Befehlssatz 1709 zu verarbeiten. Bei einigen Ausführungsformen kann der Befehlssatz 1709 CISC (Complex Instruction Set Computing - Datenverarbeitung mit komplexem Befehlssatz), RISC (Reduced Instruction Set Computing - Datenverarbeitung mit reduziertem Befehlssatz) oder eine Datenverarbeitung mittels VLIW (Very Long Instruction Word - sehr langes Anweisungswort) ermöglichen. Ein oder mehrere Prozessorkerne 1707 können einen anderen Befehlssatz 1709 verarbeiten, der Befehle zum Ermöglichen der Emulation anderer Befehlssätze beinhalten kann. Der Prozessorkern 1707 kann auch andere Verarbeitungsvorrichtungen beinhalten, wie etwa einen digitalen Signalprozessor (DSP).
  • Bei einigen Ausführungsformen enthält der Prozessor 1702 einen Cache-Speicher 1704. In Abhängigkeit von der Architektur kann der Prozessor 1702 einen einzigen internen Cache oder mehrere Ebenen von internem Cache aufweisen. Bei manchen Ausführungsformen wird der Cache-Speicher von verschiedenen Komponenten des Prozessors 1702 gemeinsam genutzt. Bei einigen Ausführungsformen verwendet der Prozessor 1702 auch einen externen Cache (z. B. einen Ebene-3(L3)-Cache oder einen Cache der letzten Ebene (LLC)) (nicht gezeigt), der durch Prozessorkerne 1707, die bekannte Cache-Kohärenztechniken verwenden, gemeinsam genutzt wird. Eine Registerdatei 1706 kann zusätzlich in dem Prozessor 1702 enthalten sein und kann verschiedene Arten von Registern zum Speichern verschiedener Arten von Daten (e.g. Ganzzahlregister, Gleitkommaregister, Statusregister und ein Befehlszeigerregister) enthalten. Manche Register können Allzweckregister sein, während andere Register für die Gestaltung des Prozessors 1702 spezifisch sein können.
  • Bei manchen Ausführungsformen sind der eine oder die mehreren Prozessoren 1702 mit einem oder mehreren Schnittstellenbussen 1710 zum Übertragen von Kommunikationssignalen, wie etwa Adress, Daten oder Steuersignalen, zwischen dem Prozessor 1702 und anderen Komponenten in dem System 1700 gekoppelt. Der Schnittstellenbus 1710 kann bei einer Ausführungsform ein Prozessorbus sein, wie etwa eine Version des DMI-BUSSES (DMI: Direct Media Interface). Prozessorbusse sind jedoch nicht auf den DMI-BUS beschränkt und können einen oder mehrere Peripheral Component Interconnect Busse (e.g. PCI, PCI Express), Speicherbusse oder andere Arten von Schnittstellenbussen beinhalten. Bei einer Ausführungsform beinhalten der eine oder die mehreren Prozessoren 1702 eine integrierte Speichersteuerung 1716 und einen Plattformsteuerungshub 1730. Die Speichersteuerung 1716 ermöglicht eine Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 1700, während der Plattformsteuerungshub (PCH: Plattform Controller Hub) 1730 Verbindungen zu E/A-Vorrichtungen über einen lokalen E/A-Bus bereitstellt.
  • Die Speichereinrichtung 1720 kann eine dynamische Direktzugriffsspeicher(DRAM)-Einrichtung, eine statische Direktzugriffsspeicher(SRAM)-Einrichtung, eine Flash-Speichereinrichtung, eine Phasenwechselspeichereinrichtung oder eine andere Speichereinrichtung sein, die eine geeignete Leistungsfähigkeit aufweist, um als ein Prozessspeicher zu dienen. Bei einer Ausführungsform kann die Speichervorrichtung 1720 als Systemspeicher für das System 1700 betrieben werden, um Daten 1722 und Anweisungen 1721 zu speichern, die verwendet werden, wenn der eine oder die mehreren Prozessoren 1702 eine Anwendung oder einen Prozess ausführen. Die Speichersteuerung 1716 ist auch mit einem optionalen externen Grafikprozessor 1718 gekoppelt, der mit dem einen oder den mehreren Grafikprozessoren 1708 in den Prozessoren 1702 kommunizieren kann, um Grafik und Medienoperationen durchzuführen. In einigen Ausführungsformen können Grafik-, Medien- und/oder Rechenoperationen durch einen Beschleuniger 1712 unterstützt werden, der ein Coprozessor ist, der dazu ausgelegt sein kann, einen spezialisierten Satz von Grafik-, Medien- oder Rechenoperationen durchzuführen. In einer Ausführungsform ist der Beschleuniger 1712 zum Beispiel ein Matrixmultiplikationsbeschleuniger, der verwendet wird, um Maschinenlern- oder Rechenoperationen zu optimieren. In einer Ausführungsform ist der Beschleuniger 1712 ein Strahlverfolgungsbeschleuniger, der verwendet werden kann, um Strahlverfolgungsoperationen in Übereinstimmung mit dem Grafikprozessor 1708 durchzuführen. Bei manchen Ausführungsformen kann eine Anzeigevorrichtung 1711 mit dem einen oder den mehreren Prozessoren 1702 verbunden sein. Die Anzeigevorrichtung 1711 kann eine interne Anzeigevorrichtung, wie in einer mobilen elektronischen Vorrichtung oder einer Laptopvorrichtung, und/oder eine externe Anzeigevorrichtung sein, die über eine Anzeigeschnittstelle (z. B. DisplayPort usw.) angeschlossen ist. Bei einer Ausführungsform kann die Anzeigevorrichtung 1711 eine am Kopf angebrachte Anzeige (HMD: Head Mounted Display) sein, wie etwa eine stereoskopische Anzeigevorrichtung zur Verwendung bei Anwendungen mit virtueller Realität (VR) oder erweiterter Realität (AR: Augmented Reality).
  • Bei manchen Ausführungsformen ermöglicht der Plattformsteuerungs-Hub 1730 Peripheriegeräte, sich über einen Hochgeschwindigkeits-E/A-Bus mit der Speichervorrichtung 1720 und dem Prozessor 1702 zu verbinden. Die E/A-Peripheriegeräte beinhalten unter anderem eine Audio Steuerung 1746, eine Netzwerksteuerung 1734, eine Firmware-Schnittstelle 1728, einen drahtlosen Sendeempfänger 1726, Berührungssensoren 1725, eine Datenspeicherungsvorrichtung 1724 (e.g., nichtflüchtigen Speicher, flüchtiger Speicher, Festplattenlaufwerk, Flash-Speicher, NAND, 3D-NAND, 3D-XPoint usw.). Die Datenspeicherungsvorrichtung 1724 kann über eine Speicherungsschnittstelle (z. B. SATA) oder über einen Peripheriebus, wie etwa einen Peripheral-Component-Interconnect-Bus (z. B. PCI, PCI Express), verbunden sein. Die Berührungssensoren 1725 können Touchscreen-Sensoren, Drucksensoren oder Fingerabdrucksensoren einschließen. Der drahtlose Sendeempfänger 1726 kann ein WiFi-Sendeempfänger, ein Bluetooth-Sendeempfänger oder ein Mobilnetz-Sendeempfänger sein, wie etwa ein 3G-, 4G-, 5G-oder Long Term Evolution (LTE) - Sendeempfänger. Die Firmware-Schnittstelle 1728 ermöglicht die Kommunikation mit System-Firmware und kann beispielsweise eine vereinheitlichte erweiterbare Firmware-Schnittstelle (UEFI: Unified Extensible Firmware Interface) sein. Die Netzwerksteuerung 1734 kann eine Netzwerkverbindung zu einem drahtgebundenen Netzwerk ermöglichen. Bei manchen Ausführungsformen ist eine Hochleistungsnetzwerksteuerung (nicht gezeigt) mit dem Schnittstellenbus 1710 gekoppelt. Die Audiosteuerung 1746 ist bei einer Ausführungsform eine Mehrkanal-High-Definition- Audio Steuerung. Bei einer Ausführungsform beinhaltet das System 1700 eine optionale Legacy-E/A-Steuerung 1740 zum Koppeln von Legacy(z. B. Personal System 2 (PS/2))-Vorrichtungen mit dem System. Der Plattformsteuerungshub 1730 kann auch mit einem oder mehreren USB(Universal Serial Bus)-Steuerungen 1742 verbunden sein, welche Eingabevorrichtungen, wie etwa Kombinationen aus Tastatur und Maus 1743, eine Kamera 1744 oder andere USB-Eingabevorrichtungen, verbinden.
  • Es versteht sich, dass das gezeigte System 1700 beispielhaft und nicht beschränkend ist, da andere Arten von Datenverarbeitungssystemen, die anders konfiguriert sind, ebenfalls verwendet werden können. Zum Beispiel kann eine Instanz der Speichersteuerung 1716 und des Plattformsteuerungshubs 1730 in einen diskreten externen Grafikprozessor, wie etwa dem externen Grafikprozessor 1718, integriert sein. Bei einer Ausführungsform können der Plattformsteuerungshub 1730 und/oder die Speichersteuerung 1716 extern zu dem einen oder den mehreren Prozessoren 1702 sein. Zum Beispiel kann das System 1700 eine externe Speichersteuerung 1716 und einen Plattformsteuerungshub 1730 beinhalten, die als ein Speichersteuerungshub und ein Peripheriesteuerungshub innerhalb eines Systemchipsatzes konfiguriert sein können, der mit dem einen oder den mehreren Prozessoren 1702 in Kommunikation steht.
  • Zum Beispiel können Leiterplatten („Schlitten“) verwendet werden, auf denen Komponenten, wie etwa CPUs, Speicher und andere Komponenten, platziert sind, für eine erhöhte thermische Leistungsfähigkeit gestaltet sind. Bei manchen Beispielen befinden sich Verarbeitungskomponenten, wie etwa die Prozessoren, auf einer Oberseite eines Schlittens, während sich Nahspeicher, wie etwa DIMMs, auf einer Unterseite des Schlittens befinden. Infolge des verbesserten Luftstroms, der durch diese Gestaltung bereitgestellt wird, können die Komponenten bei höheren Frequenzen und Leistungspegeln als in typischen Systemen arbeiten, wodurch die Leistungsfähigkeit erhöht wird. Des Weiteren sind die Schlitten dazu konfiguriert, blind mit Strom-und Datenkommunikationskabeln in einem Rack zusammenzupassen, wodurch ihre Fähigkeit verbessert wird, schnell entfernt, aufgerüstet, wieder installiert und/oder ersetzt zu werden. In ähnlicher Weise sind individuelle auf den Schlitten befindliche Bauteile, wie Prozessoren, Beschleuniger, Speicher und Datenspeicherlaufwerke, so konfiguriert, dass sie dank der größeren Beabstandung zueinander leicht aktualisierbar sind. In der dargestellten Ausführungsform enthalten die Bauteile zusätzlich Hardwarebestätigungsmerkmale, um ihre Authentizität nachzuweisen.
  • Ein Datenzentrum kann eine einzelne Netzwerkarchitektur („Fabric“) nutzen, die mehrere andere Netzwerkarchitekturen einschließlich Ethernet und Omni-Pfad unterstützt. Die Schlitten können über optische Fasern mit Schaltern gekoppelt sein, die eine höhere Bandbreite und eine niedrigere Latenz als eine typische Twisted-Pair-Verkabelung (e.g., Kategorie 5, Kategorie 5 e, Kategorie 6 usw.) bereitstellen. Aufgrund der Verbindungen mit hoher Bandbreite, niedriger Latenz und Netzwerkarchitektur kann das Datenzentrum im Gebrauch Ressourcen, wie etwa Speicher, Beschleuniger (e.g., GPUs, Grafikbeschleuniger, FPGAs, ASICs, neuronale Netzwerk-und/oder Beschleuniger mit künstlicher Intelligenz, usw.) und Datenspeicherungslaufwerke, die physisch zerlegt sind, und sie Rechenressourcen (e.g., Prozessoren) nach Bedarf bereitstellen, wodurch ermöglicht wird, dass die Rechenressourcen auf die gebündelten Ressourcen zugreifen, als wären sie lokal.
  • Eine Leistungsversorgung oder -quelle kann Spannung und/oder Strom an das System 1700 oder eine beliebige Komponente oder ein beliebiges hierin beschriebenes System liefern. In einem Beispiel enthält die Leistungsversorgung einen AC-DC(Wechselstrom zu Gleichstrom)-Adapter zum Anschließen an eine Wandsteckdose. Eine solche AC-Leistung kann eine Leistungsquelle für erneuerbare Energien (z. B. Solarenergie) sein. In einem Beispiel beinhaltet die Leistungsquelle eine DC-Leistungsquelle, wie etwa einen externen AC-DC-Wandler. In einem Beispiel beinhaltet eine Leistungsquelle oder eine Leistungsversorgung drahtlose Ladehardware zum Laden über die Nähe zu einem Ladefeld. In einem Beispiel kann die Leistungsquelle eine interne Batterie, eine Wechselstromversorgung, eine bewegungsbasierte Leistungsversorgung, eine Solarenergieversorgung oder eine Brennstoffzellenquelle beinhalten.
  • 18 ist ein Blockdiagramm einer Ausführungsform eines Prozessors 1800 mit einem oder mehreren Prozessorkernen 1802A - 1802N, einem integrierten Speichercontroller 1814 und einem integrierten Grafikprozessor 1808. Diese Elemente von 18 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 1800 kann zusätzliche Kerne bis zu und einschließlich zusätzlichen Kerns 1802 N beinhalten, die durch die gestrichelten Kästen repräsentiert sind. Jeder der Prozessorkerne 1802A-1802N weist eine oder mehrere interne Cache-Einheiten 1804A-1804N auf. Bei manchen Ausführungsformen hat jeder Prozessorkern auch Zugriff auf eine oder mehrere gemeinsam genutzte Cache-Einheiten 1806.
  • Die internen Cache-Einheiten 1804A-1804N und die gemeinsam genutzten Cache-Einheiten 1806 repräsentieren eine Cache-Speicherhierarchie innerhalb des Prozessors 1800. Die Cache-Speicherhierarchie kann mindestens eine Ebene eines Befehls- und Daten-Caches innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen eines geteilten Cache einer mittleren Ebene aufweisen, wie etwa einen Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4) oder andere Ebenen eines Caches, wobei die höchste Ebene eines Caches vor dem externen Speicher als LLC klassifiziert ist. Bei einigen Ausführungsformen hält eine Cache-Kohärenzlogik die Kohärenz zwischen den verschiedenen Cache-Einheiten 1806 und 1804A-1804N aufrecht.
  • Bei einigen Ausführungsformen kann der Prozessor 1800 auch einen Satz von einer oder mehreren Bussteuerungseinheiten 1816 und einen Systemagentenkern 1810 aufweisen. Die eine oder die mehreren Bussteuerungseinheiten 1816 verwalten einen Satz von Peripheriebussen, wie etwa einen oder mehrere PCI oder PCI-Express-Busse. Der Systemagentenkern 1810 stellt eine Verwaltungsfunktionalität für die verschiedenen Prozessorkomponenten bereit. Bei einigen Ausführungsformen weist der Systemagentenkern 1810 eine oder mehrere integrierte Speichersteuerungen 1814 zum Verwalten des Zugriffs auf verschiedene externe Speichervorrichtungen (nicht gezeigt) auf.
  • Bei einigen Ausführungsformen enthalten einer oder mehrere der Prozessorkerne 1802A-1802N eine Unterstützung für simultanes Multithreading. Bei einer solchen Ausführungsform weist der Systemagentenkern 1810 Komponenten zum Koordinieren und Betreiben der Kerne 1802A-1802N während einer Multithread-Verarbeitung auf. Der Systemagentenkern 1810 kann zusätzlich eine Leistungssteuereinheit (PCU, Power Control Unit) enthalten, die Logik und Komponenten zum Regeln des Leistungszustands der Prozessorkerne 1802A-1802N und des Grafikprozessors 1808 aufweist.
  • Bei einigen Ausführungsformen enthält der Prozessor 1800 zusätzlich einen Grafikprozessor 1808 zum Ausführen von Grafikverarbeitungsoperationen. Bei einigen Ausführungsformen ist der Grafikprozessor 1808 mit dem Satz von gemeinsam genutzten Cache-Einheiten 1806 und dem Systemagentenkern 1810 gekoppelt, der die eine oder die mehreren integrierten Speichersteuerungen 1814 aufweist. Bei manchen Ausführungsformen beinhaltet der Systemagentenkern 1810 auch eine Anzeigesteuerung 1811, um die Grafikprozessorausgabe zu einer oder mehreren gekoppelten Anzeigen anzusteuern. Bei manchen Ausführungsformen kann die Anzeigesteuerung 1811 ein separates Modul sein, das über mindestens ein Interconnect mit dem Grafikprozessor gekoppelt ist, oder kann im Grafikprozessor 1808 integriert sein.
  • In einigen Ausführungsformen wird eine ringbasierte Verbindungseinheit 1812 verwendet, um die internen Komponenten des Prozessors 1800 zu koppeln. Jedoch kann eine alternative Interconnect-Einheit verwendet werden, wie etwa ein Punkt-zu-Punkt-Interconnect, ein geschaltetes Interconnect oder andere Techniken, einschließlich Techniken, die in der Technik gut bekannt sind. Bei einigen Ausführungsformen ist der Grafikprozessor 1808 über ein E/A-Link 1813 mit dem Ring-Interconnect 1812 gekoppelt.
  • Das beispielhafte E/A-Interconnect 1813 repräsentiert mindestens eine von mehreren Varianten von E/A-Interconnects, einschließlich eines On-Package-E/A-Interconnects, das die Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 1818 wie etwa einem eDRAM-Modul ermöglicht. In einigen Ausführungsformen kann jeder der Prozessorkerne 1802 A-1802 N und der Grafikprozessor 1808 eingebettete Speichermodule 1818 als einen gemeinsam genutzten Last-Level-Cache verwenden.
  • Bei einigen Ausführungsformen sind die Prozessorkerne 1802A-1802N homogene Kerne, die die gleiche Befehlssatzarchitektur ausführen. Bei einer anderen Ausführungsform sind die Prozessorkerne 1802A-1802N hinsichtlich der Befehlssatzarchitektur (ISA) heterogen, wobei ein oder mehrere Prozessorkerne 1802A-1802N einen ersten Befehlssatz ausführen, während mindestens einer der anderen Kerne einen Teilsatz des ersten Befehlssatzes oder eines anderen Befehlssatzes ausführt. In einer Ausführungsform sind die Prozessorkerne 1802 A-1802 N hinsichtlich der Mikroarchitektur heterogen, wobei ein oder mehrere Kerne mit einem relativ höheren Leistungsverbrauch mit einem oder mehreren Leistungskernen mit einem niedrigeren Leistungsverbrauch koppeln. In einer Ausführungsform sind die Prozessorkerne 1802 A-1802 N hinsichtlich der Rechenfähigkeit heterogen. Außerdem kann der Prozessor 1800 auf einem oder mehreren Chips oder als eine integrierte SoC-Schaltung mit den veranschaulichten Komponenten zusätzlich zu anderen Komponenten implementiert sein.
  • 19 ist ein Blockdiagramm eines Grafikprozessors 1900 , 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 weist der Grafikprozessor 1900 eine Speicherschnittstelle 1914 auf, um auf Speicher zuzugreifen. Die Speicherschnittstelle 1914 kann eine Schnittstelle zu lokalem Speicher, einem oder mehreren internen Caches, einem oder mehreren gemeinsam genutzten externen Caches und/oder zu Systemspeicher sein.
  • Bei manchen Ausführungsformen beinhaltet der Grafikprozessor 1900 auch eine Anzeigesteuerung 1902, um Anzeigeausgabedaten zu einer Anzeigevorrichtung 1918 zu steuern. Die Anzeigesteuerung 1902 beinhaltet Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und Zusammensetzung mehrerer Schichten von Video- oder Benutzeroberflächenelementen. Die Anzeigevorrichtung 1918 kann eine interne oder externe Anzeigevorrichtung sein. Bei einer Ausführungsform ist die Anzeigevorrichtung 1918 eine am Kopf angebrachte Anzeigevorrichtung, wie etwa eine VR(Virtual Reality)-Anzeigevorrichtung oder eine AR(Augmented Reality)-Anzeigevorrichtung. In einigen Ausführungsformen beinhaltet der Grafikprozessor 1900 eine Video-Codec-Engine 1906 zum Codieren, Decodieren oder Transcodieren von Medien zu, von oder zwischen einem oder mehreren Mediencodierformaten, einschließlich unter anderem MPEG (Moving Picture Experts Group) -Formaten, wie etwa 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) 421 M/VC-1 und Joint Photographic Experts Group (JPEG) Formate wie JPEG und Motion JPEG (MJPEG) Formate.
  • In einigen Ausführungsformen weist der Grafikprozessor 1900 eine Blockbildübertragungs- (BLIT) -Engine 1904 auf, um zweidimensionale (2 D) Rasterisiereroperationen durchzuführen, einschließlich zum Beispiel Bitgrenzblockübertragungen. Bei einer Ausführungsform werden jedoch 2D-Grafikoperationen unter Verwendung einer oder mehrerer Komponenten der Grafikverarbeitungs-Engine (GPE) 1910 ausgeführt. Bei manchen Ausführungsformen ist die GPE 1910 eine Rechen-Engine zum Durchführen von Grafikoperationen, einschließlich dreidimensionaler (3D) Grafikoperationen und Medienoperationen.
  • Bei einigen Ausführungsformen beinhaltet die GPE 1910 eine 3D-Pipeline 1912 zum Durchführen von 3D-Operationen, wie etwa Rendering von dreidimensionalen Bildern und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 3D-Grundformen (z. B. Rechteck, Dreieck usw.) wirken. Die 3D-Pipeline 1912 beinhaltet programmierbare und feste Funktionselemente, die verschiedene Aufgaben innerhalb des Elements durchführen und/oder Ausführungs-Threads zu einem 3D-/Medien-Untersystem 1915 erzeugen. Während die 3D-Pipeline 1912 zum Durchführen von Medienoperationen verwendet werden kann, beinhaltet eine Ausführungsform der GPE 1910 auch eine Medien-Pipeline 1916, die speziell zum Durchführen von Medienoperationen, wie etwa Videonachbearbeitung und Bildverbesserung, verwendet wird.
  • Bei einigen Ausführungsformen beinhaltet die Medien-Pipeline 1916 Logikeinheiten, die eine feste Funktion aufweisen oder programmierbar sind, um eine oder mehrere spezialisierte Medienoperationen, wie etwa Videodecodierungsbeschleunigung, Videoentschachtelung und Videocodierungsbeschleunigung, anstelle von oder im Auftrag der Video-Codec-Engine 1906 durchzuführen. Bei einigen Ausführungsformen weist die Medien-Pipeline 1916 außerdem eine Thread-Erzeugungseinheit auf, um Threads zur Ausführung auf dem 3D/Media-Subsystem 1915 zu erzeugen. Die erzeugten Threads führen Berechnungen für die Medienoperationen auf einer oder mehreren Grafikausführungseinheiten aus, die in dem 3D-/Medien-Untersystem 1915 enthalten sind.
  • Bei einigen Ausführungsformen weist das 3D-/Medien-Untersystem 1915 eine Logik zum Ausführen von Threads auf, die von der 3D-Pipeline 1912 und der Medien-Pipeline 1916 erzeugt wurden. Bei einer Ausführungsform senden die Pipelines Thread-Ausführungsanfragen an das 3D-/Medien-Untersystem 1915, das eine Thread-Dispatch-Logik zum Vermitteln und Senden der verschiedenen Anfragen an verfügbare Thread-Ausführungsressourcen aufweist. Die Ausführungsressourcen weisen ein Array von Grafikausführungseinheiten zum Verarbeiten der 3D- und Medien-Threads auf. Bei einigen Ausführungsformen weist das 3D-/Medien-Untersystem 1915 einen oder mehrere interne Caches für Thread-Anweisungen und Daten auf. Bei einigen Ausführungsformen enthält das Untersystem auch gemeinsam genutzten Speicher, einschließlich Registern und adressierbarem Speicher, um Daten zwischen Threads gemeinsam zu nutzen und Ausgabedaten zu speichern.
  • Grafikverarbeitungs-Engine
  • 20 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine 2010 eines Grafikprozessors gemäß einigen Ausführungsformen. In einer Ausführungsform ist die Grafikverarbeitungs-Engine (GPE) 2010 eine Version der GPE 1910, die in gezeigt ist 19. Elemente von 20 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 1912 und die Medienpipeline 1916 von 19 illustriert sind. Die Medienpipeline 1916 ist in einigen Ausführungsformen der GPE 2010 optional und ist möglicherweise nicht explizit in der GPE 2010 enthalten. Zum Beispiel und in mindestens einer Ausführungsform ist ein separater Medien- und/oder Bildprozessor mit der GPE 2010 gekoppelt.
  • Bei manchen Ausführungsformen ist die GPE 2010 mit einem Befehls-Streamer 2003, der einen Befehlsstrom zu der 3D-Pipeline 1912 und/oder den Medien-Pipelines 1916 bereitstellt, gekoppelt oder enthält diesen. Bei manchen Ausführungsformen ist der Befehls-Streamer 2003 mit einem Speicher, der ein Systemspeicher sein kann, oder einem internen Cache-Speicher und/oder einem gemeinsam genutzten Cache-Speicher gekoppelt. Bei manchen Ausführungsformen empfängt der Befehls-Streamer 2003 Befehle von dem Speicher und sendet die Befehle an die 3D-Pipeline 1912 und/oder die Medien-Pipeline 1916. Die Befehle sind Direktiven, die aus einem Ringpuffer abgerufen werden, der Befehle für die 3D-Pipeline 1912 und die Medien-Pipeline 1916 speichert. Bei einer Ausführungsform kann der Ringpuffer zusätzlich Stapel-Befehlspuffer enthalten, die Stapel mehrerer Befehle speichern. Die Befehle für die 3D-Pipeline 1912 können auch Verweise auf Daten beinhalten, die im Speicher gespeichert sind, wie etwa, jedoch ohne Einschränkung, auf Vertex- und Geometriedaten für die 3D-Pipeline 1912 und/oder Bilddaten und Speicherobjekte für die Medien-Pipeline 1916. Die 3D-Pipeline 1912 und die Medien-Pipeline 1916 verarbeiten die Befehle und Daten, indem sie Operationen über eine Logik innerhalb der jeweiligen Pipelines durchführen oder indem sie einen oder mehrere Ausführungs-Threads an ein Grafikkern-Array 2014 versenden. Bei einer Ausführungsform beinhaltet das Grafikkern-Array 2014 einen oder mehrere Blöcke von Grafikkernen (z. B. Grafikkern(e) 2015A, Grafikkern(e) 2015B), wobei jeder Block einen oder mehrere Grafikkerne aufweist. Jeder Grafikkern beinhaltet einen Satz von Grafikausführungsressourcen, der eine Allzweck- und grafikspezifische Ausführungslogik zum Ausführen von Grafik und Rechenoperationen sowie Festfunktion-Texturverarbeitung und/oder Maschinenlernen und eine Künstliche-Intelligenz-Beschleunigungslogik beinhaltet.
  • Bei verschiedenen Ausführungsformen kann die 3D-Pipeline 1912 eine feste Funktion und programmierbare Logik aufweisen, um ein oder mehrere Shader-Programme, wie etwa Vertex-Shader, Geometrie-Shader, Pixel-Shader, Fragment-Shader, Rechen-Shader oder andere Shader-Programme, durch Verarbeiten der Anweisungen und Senden von Ausführungs-Threads an das Grafikkernarray 2014 zu verarbeiten. Das Grafikkern-Array 2014 stellt einen vereinheitlichten Block von Ausführungsressourcen zur Verwendung bei der Verarbeitung dieser Shader-Programme bereit. Eine Mehrzweckausführungslogik (z. B. Ausführungseinheiten) innerhalb des einen bzw. der mehreren Grafikkerne 2015A-2014B des Grafikkern-Arrays 2014 unterstützt verschiedene 3D-API-Shader-Sprachen und kann mehrere simultane Ausführungs-Threads ausführen, die mit mehreren Shadern assoziiert sind.
  • In einigen Ausführungsformen beinhaltet das Grafikkernarray 2014 Ausführungslogik zum Durchführen von Medienfunktionen, wie etwa Video-und/oder Bildverarbeitung. In einer Ausführungsform beinhalten die Ausführungseinheiten Universallogik, die programmierbar ist, um parallele Universalberechnungsoperationen durchzuführen, zusätzlich zu Grafikverarbeitungsoperationen. Die Allzwecklogik kann Verarbeitungsoperationen parallel oder in Verbindung mit der Allzwecklogik innerhalb des/der Prozessorkern(s) 1707 von. ausführen 17 oder Kern 1802A-1802N wie in 18.
  • Ausgabedaten, die von Threads generiert werden, die auf dem Grafikkernarray 2014 ausgeführt werden, können Daten in einem einheitlichen Rückgabepuffer (URB) 2018 an den Speicher ausgeben. Der URB 2018 kann Daten für mehrere Threads speichern. Bei manchen Ausführungsformen kann der URB 2018 verwendet werden, um Daten zwischen verschiedenen Threads zu senden, die auf dem Grafikkern-Array 2014 ausgeführt werden. Bei manchen Ausführungsformen kann der URB 2018 zusätzlich zur Synchronisation zwischen Threads auf dem Grafikkern-Array und der Festfunktionslogik innerhalb der Logik 2020 mit gemeinsam genutzter Funktion verwendet werden.
  • Bei manchen Ausführungsformen ist das Grafikkern-Array 2014 skalierbar, sodass das Array basierend auf der Zielleistung und dem Leistungsniveau der GPE 2010 eine variable Anzahl an Grafikkernen mit jeweils einer variablen Anzahl an Ausführungseinheiten enthält. Bei einer Ausführungsform sind die Ausführungsressourcen dynamisch skalierbar, sodass Ausführungsressourcen je nach Bedarf aktiviert oder deaktiviert werden können.
  • Das Grafikkern-Array 2014 ist mit Logik 2020 mit gemeinsam genutzter Funktion gekoppelt, die mehrere Ressourcen enthält, die von den Grafikkernen in dem Grafikkern-Array gemeinsam genutzt werden. Die gemeinsam genutzten Funktionen innerhalb der Logik 2020 mit gemeinsam genutzter Funktion sind Hardware-Logikeinheiten, die dem Grafikkern-Array 2014 eine spezialisierte Zusatzfunktionalität bereitstellen. In verschiedenen Ausführungsformen umfasst die Shared-Function-Logik 2020, ohne darauf beschränkt zu sein, Abtaster 2021, Mathematik 2022 und Inter-Thread-Kommunikation (ITC) 2023-Logik. Zusätzlich implementieren manche Ausführungsformen einen oder mehrere Cache(s) 2025 innerhalb der Logik 2020 mit gemeinsam genutzter Funktion.
  • Eine gemeinsam genutzte Funktion wird zumindest in einem Fall implementiert, in dem die Anforderung für eine gegebene spezialisierte Funktion für die Aufnahme in das Grafikkernarray 2014 unzureichend ist. Stattdessen wird eine einzelne Instanziierung dieser spezialisierten Funktion als eine eigenständige Entität in der gemeinsam genutzten Funktionslogik 2020 implementiert und unter den Ausführungsressourcen innerhalb des Grafikkernarrays 2014 gemeinsam genutzt. Der genaue Satz von Funktionen, die von dem Grafikkern-Array 2014 gemeinsam genutzt werden und im Grafikkern-Array 2014 enthalten sind, variiert zwischen den Ausführungsformen. Bei manchen Ausführungsformen können bestimmte gemeinsam genutzte Funktionen innerhalb der Logik 2020 mit gemeinsam genutzter Funktion, die von dem Grafikkern-Array 2014 extensiv verwendet werden, in der Logik 2016 mit gemeinsam genutzter Funktion innerhalb des Grafikkern-Arrays 2014 enthalten sein. Bei verschiedenen Ausführungsformen kann die Logik 2016 mit gemeinsam genutzter Funktion innerhalb des Grafikkern-Arrays 2014 einen Teil der oder die gesamte Logik innerhalb der Logik 2020 mit gemeinsam genutzter Funktion aufweisen. Bei einer Ausführungsform können alle Logikelemente innerhalb der Logik 2020 mit gemeinsam genutzter Funktion innerhalb der Logik 2016 mit gemeinsam genutzter Funktion des Grafikkern-Arrays 2014 dupliziert werden. Bei einer Ausführungsform wird die Logik 2020 mit gemeinsam genutzter Funktion zugunsten der Logik 2016 mit gemeinsam genutzter Funktion innerhalb des Grafikkern-Arrays 2014 ausgeschlossen.
  • 21 ist ein Blockdiagramm einer Hardwarelogik eines Grafikprozessorkerns 2100 gemäß einigen hierin beschriebenen Ausführungsformen. Elemente von 21 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 2100 ist in einigen Ausführungsformen in dem Grafikkernarray 2014 von 1 enthalten. 20. Der Grafikprozessorkern 2100, der manchmal als ein Kern-Slice bezeichnet wird, kann ein oder mehrere Grafikkerne innerhalb eines modularen Grafikprozessors sein. Der Grafikprozessorkern 2100 ist beispielhaft für ein Grafikkern-Slice, und ein Grafikprozessor, wie hierin beschrieben, kann mehrere Grafikkern-Slices auf der Grundlage von Sollleistungs- und Leistungshüllkurven aufweisen. Jeder Grafikprozessorkern 2100 kann einen Festfunktionsblock 2130 beinhalten, der mit mehreren Unterkernen 2101 A-2101 F, die auch als Unter-Slices bezeichnet werden, gekoppelt ist, die modulare Blöcke von Allzweck-und Festfunktionslogik beinhalten.
  • In einigen Ausführungsformen beinhaltet der Festfunktionsblock 2130 eine Geometrie/Festfunktions-Pipeline 2136, die von allen Unterkernen in dem Grafikprozessorkern 2100 geteilt werden kann, zum Beispiel bei Grafikprozessorimplementierungen mit niedrigerer Leistung und/oder niedrigerer Leistung. In verschiedenen Ausführungsformen umfasst die Geometrie-/Festfunktionspipeline 2136 eine 3D-Fixfunktionspipeline (z. B. 3D-Pipeline 1912 wie in 19 und 20) eine Video-Front-End-Einheit, einen Thread-Spawner und Thread-Dispatcher und einen vereinheitlichten Rückgabepuffermanager, der vereinheitlichte Rückgabepuffer verwaltet, wie etwa den einheitlichen Rückgabepuffer 2018 von 20.
  • Bei einer Ausführungsform weist der Festfunktion-Block 2130 auch eine Grafik-SoC-Schnittstelle 2137, einen Grafik-Mikrocontroller 2138 und eine Medien-Pipeline 2139 auf. Die Grafik-SoC-Schnittstelle 2137 stellt eine Schnittstelle zwischen dem Grafikprozessorkern 2100 und anderen Prozessorkernen innerhalb einer integrierten System-on-Chip-Schaltung bereit. Der Grafikmikrocontroller 2138 ist ein programmierbarer Subprozessor, der konfigurierbar ist, um verschiedene Funktionen des Grafikprozessorkerns 2100 zu verwalten, einschließlich Threadversand, Planung und Präemption. Die Medienpipeline 2139 (z. B. Medienpipeline 1916 von 19 und 20) enthält eine Logik, um das Decodieren, Codieren, Vorverarbeiten und/oder Nachverarbeiten von Multimediadaten, einschließlich Bild- und Videodaten, zu erleichtern. Die Medien-Pipeline 2139 implementiert Medienoperationen über Anfragen zum Berechnen oder Sampeln einer Logik innerhalb der Teilkerne 2101-2101F.
  • In einer Ausführungsform ermöglicht die SoC-Schnittstelle 2137 dem Grafikprozessorkern 2100, mit Universalanwendungsprozessorkernen (e.g., CPUs) und/oder anderen Komponenten innerhalb eines SoC zu kommunizieren, einschließlich Speicherhierarchieelementen, wie etwa einem gemeinsam genutzten Last-Level-Cache-Speicher, dem SYSTEM-RAM und/oder eingebettetem On-Chip-oder ON-CACKE-DRAM. Die SoC-Schnittstelle 2137 kann auch eine Kommunikation mit Festfunktionsvorrichtungen innerhalb des SoC ermöglichen, wie etwa Kamerabildungspipelines, und ermöglicht die Verwendung und/oder implementiert globale Speicheratomik, die zwischen dem Grafikprozessorkern 2100 und CPUs innerhalb des SoC gemeinsam genutzt werden kann. Die SoC-Schnittstelle 2137 kann auch Leistungsverwaltungssteuerungen für den Grafikprozessorkern 2100 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Grafikkerns 2100 und anderen Taktdomänen innerhalb des SoC ermöglichen. Bei einer Ausführungsform ermöglicht die SoC-Schnittstelle 2137 den Empfang von Befehlspuffern von einem Befehls-Streamer und einem globalen Thread-Dispatcher, die dazu konfiguriert sind, Befehle und Anweisungen an jeden von einem oder mehreren Grafikkernen innerhalb eines Grafikprozessors zu liefern. Die Befehle und Anweisungen können an die Medien-Pipeline 2139, wenn Medienoperationen ausgeführt werden sollen, oder eine Geometrie- und Festfunktion-Pipeline (z. B. Geometrie- und Festfunktion-Pipeline 2136, Geometrie- und Festfunktion-Pipeline 2114), wenn Grafikverarbeitungsoperationen durchgeführt werden sollen, versendet werden.
  • Der Grafikmikrocontroller 2138 kann dazu konfiguriert sein, verschiedene Planungs-und Verwaltungsaufgaben für den Grafikprozessorkern 2100 durchzuführen. Bei einer Ausführungsform kann der Grafik-Mikrocontroller 2138 Grafik und/oder Rechenarbeitsbelastungs-Planung auf den verschiedenen parallelen Grafik-Engines innerhalb Ausführungseinheit(EU: Execution Unit)-Arrays 2102A-2102F, 2104A-2104F innerhalb der Teilkerne 2101A-2101F durchführen. In diesem Planungsmodell kann Hostsoftware, die auf einem CPU-KERN eines SoC einschließlich des Grafikprozessorkerns 2100 ausgeführt wird, Arbeitslasten einer von mehreren Grafikprozessortüren einreichen, was eine Planungsoperation auf der geeigneten Grafik-Engine aufruft. Zu den Planungsoperationen gehören das Bestimmen der nächsten auszuführenden Arbeitslast, das Übermitteln einer Arbeitslast an einen Befehls-Streamer, das Vorwegnehmen vorhandener Arbeitslasten, die auf einer Engine ausgeführt werden, das Überwachen des Fortschritts einer Arbeitslast und das Benachrichtigen der HostSoftware nach Abschluss einer Arbeitslast. In einer Ausführungsform kann der Grafikmikrocontroller 2138 auch Niedrigleistungs-oder Ruhezustände für den Grafikprozessorkern 2100 ermöglichen, wodurch dem Grafikprozessorkern 2100 die Fähigkeit gegeben wird, Register innerhalb des Grafikprozessorkerns 2100 über Niedrigleistungszustandsübergänge unabhängig von dem Betriebssystem und/oder der Grafiktreibersoftware auf dem System zu speichern und wiederherzustellen.
  • Der Grafikprozessorkern 2100 kann mehr als oder weniger als die veranschaulichten Unterkerne 2101 A-2101 F aufweisen, bis zu N modulare Unterkeme. Für jeden Satz von N Unterkernen kann der Grafikprozessorkern 2100 auch Logik 2110 mit gemeinsam genutzter Funktion, gemeinsam genutzter und/oder Cache-Speicher 2112, eine Geometrie/Festfunktions-Pipeline 2114 sowie zusätzliche Festfunktions-Logik 2116 zum Beschleunigen verschiedener Grafik-und Rechenverarbeitungsoperationen beinhalten. Die Shared-Function-Logik 2110 kann Logikeinheiten umfassen, die der Shared-Function-Logik 2020 von 2 zugeordnet sind. 20 (z. B. Sampler, Mathematik und/oder Inter-Thread-Kommunikationslogik), die von jedem gemeinsam genutzt werden können Nein Subkerne innerhalb des Grafikprozessorkerns 2100. Der gemeinsam genutzte und/oder Cache-Speicher 2112 kann ein Last-Level-Cache für den Satz von N Unterkernen 2101 A-2101 F innerhalb des Grafikprozessorkerns 2100 sein und kann auch als gemeinsam genutzter Speicher dienen, auf den mehrere Unterkerne zugreifen können. Die Geometrie-/Festfunktion-Pipeline 2114 kann anstelle der Geometrie-/Festfunktion-Pipeline 2136 innerhalb des Festfunktion-Blocks 2130 enthalten sein und dieselben oder ähnliche Logikeinheiten aufweisen.
  • In einer Ausführungsform beinhaltet der Grafikprozessorkern 2100 zusätzliche Festfunktionslogik 2116, die verschiedene Festfunktionsbeschleunigungslogik zur Verwendung durch den Grafikprozessorkern 2100 beinhalten kann. Bei einer Ausführungsform weist die zusätzliche Festfunktionslogik 2116 eine zusätzliche Geometrie-Pipeline zur Verwendung beim Nur-Positions-Shading auf. Beim Nur-Positions-Shading existieren zwei Geometrie-Pipelines, die vollständige Geometrie-Pipeline innerhalb der Geometrie-/Festfunktion-Pipeline 2116, 2136 und eine Cull-Pipeline, die eine zusätzliche Geometrie-Pipeline ist, die in der zusätzlichen Festfunktionslogik 2116 enthalten sein kann. Bei einer Ausführungsform ist die Cull-Pipeline eine abgespeckte Version der vollständigen Geometrie-Pipeline. Die vollständige Pipeline und die Cull-Pipeline können verschiedene Instanzen derselben Anwendung ausführen, wobei jede Instanz einen separaten Kontext aufweist. Das Nur-Positions-Shading kann lange Aussortierdurchläufe von verworfenen Dreiecken verbergen, wodurch das Shading in manchen Fällen früher abgeschlossen werden kann. Zum Beispiel kann bei einer Ausführungsform die Cull-Pipeline-Logik innerhalb der zusätzlichen Festfunktionslogik 2116 Positions-Shader parallel zur Hauptanwendung ausführen und generiert im Allgemeinen kritische Ergebnisse schneller als die vollständige Pipeline, da die Cull-Pipeline nur das Positionsattribut der Vertices abruft und an diesen Shading durchführt, ohne Rasterung und Rendering der Pixel zum Rahmenpuffer durchzuführen. Die Cull-Pipeline kann die erzeugten kritischen Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke zu berechnen, ohne Rücksicht darauf, ob diese Dreiecke aussortiert werden. Die vollständige Pipeline (die in diesem Fall als Wiedergabe-Pipeline bezeichnet werden kann) kann die Sichtbarkeitsinformationen verbrauchen, um die aussortierten Dreiecke zu überspringen, um nur die sichtbaren Dreiecke zu schattieren, die schließlich an die Rasterungsphase übergeben werden.
  • Bei einer Ausführungsform kann die zusätzliche Festfunktionslogik 2116 auch eine Maschinenlernbeschleunigungslogik, wie etwa eine Festfunktionsmatrixmultiplikationslogik, für Implementierungen einschließlich Optimierungen für Maschinenlerntraining oder Inferenz beinhalten.
  • Innerhalb jedes Grafikteilkerns 2101A-2101F ist ein Satz von Ausführungsressourcen enthalten, die verwendet werden können, um Grafik-, Medien- und Rechenoperationen als Reaktion auf Anfragen durch eine Grafik-Pipeline, Medien-Pipeline oder Shader-Programme auszuführen. Die Grafikteilkerne 2101A-2101F beinhalten mehrere EU-Arrays 2102A-2102F, 2104A-2104F, Thread-Dispatch- und Inter-Thread-Kommunikations(TD/IC)-Logik 2103A-2103F, einen 3D-Sampler (z. B. Textur-Sampler) 2105A-2105F, einen Medien-Sampler 2106A-2106F, einen Shader-Prozessor 2107A-2107F und einen gemeinsam genutzten lokalen Speicher (SLM: Shared Local Memory) 2108A-2108F. Die EU-Arrays 2102A-2102F, 2104A-2104F weisen jeweils mehrere Ausführungseinheiten auf, die Allzweckgrafikverarbeitungseinheiten sind, die Gleitkomma- und Ganzzahl-/Festkommalogikoperationen im Dienst einer Grafik-, Medien- oder Rechenoperation ausführen können, einschließlich Grafik-, Medien- oder Rechen-Shader-Programmen. Die TD/IC-Logik 2103A-2103F führt lokale Thread-Dispatch- und Thread-Steueroperationen für die Ausführungseinheiten innerhalb eines Teilkerns aus und ermöglicht die Kommunikation zwischen Threads, die auf den Ausführungseinheiten des Teilkerns ausgeführt werden. Der 3D-Sampler 2105A-2105F kann Textur oder andere 3D-Grafik-bezogene Daten in den Speicher lesen. Der 3D-Sampler kann Texturdaten basierend auf einem konfigurierten Probenstatus und dem Texturformat, das mit einer bestimmten Textur assoziiert ist, unterschiedlich lesen. Der Medien-Sampler 2106A-2106F kann ähnliche Leseoperationen basierend auf dem Typ und dem Format durchführen, die mit den Mediendaten assoziiert sind. Bei einer Ausführungsform kann jeder Grafikteilkern 2101A-2101F abwechselnd einen einheitlichen 3D- und Medien-Sampler beinhalten. Threads, die auf den Ausführungseinheiten in jedem der Teilkerne 2101A-2101F ausgeführt werden, können den gemeinsam genutzten lokalen Speicher 2108A-2108F in jedem Teilkern verwenden, um Threads, die innerhalb einer Thread-Gruppe ausgeführt werden, zu ermöglichen, einen gemeinsam genutzten On-Chip-Speicher-Pool zu verwenden.
  • Ausführungseinheiten
  • 22A-22B veranschaulichen die Thread-Ausführungslogik 2200 mit einem Array von Verarbeitungselementen, die in einem Grafikprozessorkern gemäß hierin beschriebenen Ausführungsformen verwendet werden. Elemente von 22A-22B 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. 22A veranschaulicht eine Übersicht über die Thread-Ausführungslogik 2200, die eine Variante der Hardwarelogik umfassen kann, die mit jedem Unterkern 2101A - 2101F von 2 veranschaulicht ist. 21. 22B veranschaulicht beispielhafte interne Details einer Ausführungseinheit.
  • Wie in FIG. In 22A umfasst die Thread-Ausführungslogik 2200 in einigen Ausführungsformen einen Shader-Prozessor 2202, einen Thread-Dispatcher 2204, einen Befehlscache 2206 , ein skalierbares Ausführungseinheiten-Array mit mehreren Ausführungseinheiten 2208A - 2208N , einen Sampler 2210, einen Datencache 2212 und Datenport 2214. In einer Ausführungsform kann das skalierbare Ausführungseinheitenarray dynamisch skalieren, indem eine oder mehrere Ausführungseinheiten (e.g., eine beliebige der Ausführungseinheiten 2208 A, 2208 B, 2208 C, 2208 D bis 2208 N-1 und 2208 N) basierend auf den Rechenanforderungen einer Arbeitslast aktiviert oder deaktiviert werden. Bei einer Ausführungsform sind die enthaltenen Komponenten über ein Interconnect-Fabric, das mit jeder der Komponenten verknüpft ist, miteinander verbunden. Bei einigen Ausführungsformen weist die Thread-Ausführungslogik 2200 eine oder mehrere Verbindungen zum Speicher wie etwa zum Systemspeicher oder Cache-Speicher über einen Anweisungs-Cache 2206 und/oder einen Datenport 2214 und/oder einen Sampler 2210 und/oder die Ausführungseinheiten 2208A-2208N auf. Bei manchen Ausführungsformen ist jede Ausführungseinheit (z. B. 2208A) eine selbständige programmierbare Allzweck-Recheneinheit, die in der Lage ist, mehrere gleichzeitige Hardware-Threads auszuführen, während sie mehrere Datenelemente parallel für jeden Thread verarbeitet. Bei verschiedenen Ausführungsformen kann das Array aus Ausführungseinheiten 2208A-2208N skalierbar sein, sodass es eine beliebige Anzahl einzelner Ausführungseinheiten enthält.
  • Bei einigen Ausführungsformen werden die Ausführungseinheiten 2208A-2208N hauptsächlich zum Ausführen von Shader-Programmen verwendet. Ein Shader-Prozessor 2202 kann die verschiedenen Shader-Programme verarbeiten und Ausführungs-Threads, die mit den Shader-Programmen assoziiert sind, über einen Thread-Dispatcher 2204 versenden. Bei einer Ausführungsform beinhaltet der Thread-Dispatcher Logik, um Thread-Initiierungsanfragen von den Grafik- und Medien-Pipelines zu vermitteln und die angeforderten Threads auf einer oder mehreren Ausführungseinheiten 2208A-2208N zu instanziieren. Zum Beispiel kann eine Geometrie-Pipeline Vertex-, Tessellations- oder Geometrie-Shaders an die Thread-Ausführungslogik versenden. Bei manchen Ausführungsformen kann der Thread-Dispatcher 2204 auch Laufzeit-Thread-Erzeugungsanfragen von den ausführenden Shader-Programmen verarbeiten.
  • Bei einigen Ausführungsformen unterstützen die Ausführungseinheiten 2208A-2208N einen Befehlssatz, der native Unterstützung für viele Standard-3D-Grafik-Shader-Anweisungen beinhaltet, sodass Shader-Programme aus Grafikbibliotheken (z. B. Direct 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. Die Ausführungseinheiten unterstützen Vertex- und Geometrieverarbeitung (z. B. Vertex-Programme, Geometrieprogramme, Vertex-Shader), Pixelverarbeitung (z. B. Pixel-Shader, Fragment-Shader) und Allzweckverarbeitung (z. B. Rechen- und Medien-Shader). Jede der Ausführungseinheiten 2208A-2208N ist zu einer Mehrfach-Erteilungs-SIMD-Ausführung (SIMD: Single Instruction Multiple Data) fähig und eine Multithread-Operation ermöglicht eine effiziente Ausführungsumgebung angesichts von Speicherzugriffen mit höherer Latenz. Jeder Hardware-Thread innerhalb jeder Ausführungseinheit weist eine dedizierte Registerbank mit hoher Bandbreite und einen assoziierten unabhängigen Thread-Zustand auf. Die Ausführung ist eine Mehrfach-Erteilung pro Takt an Pipelines mit Gleitkomma-Operationen mit ganzzahliger, einfacher und doppelter Genauigkeit, SIMD-Verzweigungskapazität, logischen Operationen, transzendenten Operationen und anderen sonstigen Operationen. Während auf Daten aus dem Speicher oder einer der gemeinsam genutzten Funktionen gewartet wird, bewirkt die Abhängigkeitslogik innerhalb der Ausführungseinheiten 2208A-2208N, dass ein wartender Thread in den Ruhezustand geht, bis die angeforderten Daten zurückgegeben worden sind. Während der wartende Thread im Ruhezustand ist, können sich Hardwareressourcen der Verarbeitung der anderen Threads widmen. Zum Beispiel kann während einer Verzögerung, die mit einer Vertex-Shader-Operation assoziiert ist, eine Ausführungseinheit Operationen für einen Pixel-Shader, Fragment-Shader oder einen anderen Typ von Shader-Programm durchführen, einschließlich eines anderen Vertex-Shaders. Verschiedene Ausführungsformen können für die Verwendung einer Ausführung unter Verwendung von Single Instruction Multiple Thread (SIMT) als Alternative zur Verwendung von SIMD oder zusätzlich zur Verwendung von SIMD gelten. Eine Bezugnahme auf einen SIMD-Kern oder eine SIMD-OPERATION kann auch für SIMT gelten oder für SIMD in Kombination mit SIMT gelten.
  • Jede Ausführungseinheit in den Ausführungseinheiten 2208 A-2208 N arbeitet auf 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 Flusssteuerung innerhalb von Anweisungen. Die Anzahl der Kanäle kann unabhängig von der Anzahl physischer arithmetischer Logikeinheiten (ALUs) oder Gleitkommaeinheiten (FPUs) für einen speziellen Grafikprozessor sein. Bei einigen Ausführungsformen unterstützen die Ausführungseinheiten 2208A-2208N Ganzzahl- und Gleitkomma-Datentypen.
  • Der Ausführungseinheit-Befehlssatz weist SIMD-Anweisungen auf. Die verschiedenen Datenelemente können als ein gepackter Datentyp in einem Register gespeichert werden und die Ausführungseinheit wird die verschiedenen Elemente basierend auf der Datengröße der Elemente verarbeiten. Wenn zum Beispiel mit einem 256 Bit breiten Vektor gearbeitet wird, werden die 256 Bits des Vektors in einem Register gespeichert, wobei die Ausführungseinheit am Vektor als vier separate gepackte 64-Bit-Datenelemente (Datenelemente in Vierfachwort(QW)-Größe), acht separate gepackte 32-Bit-Datenelemente (Datenelemente in Doppelwort(DW)-Größe), sechzehn separate gepackte 16-Bit-Datenelemente (Datenelemente in Wort(W)-Größe oder zweiunddreißig separate gepackte 8-Bit-Datenelemente (Datenelemente in Byte(B)-Größe) arbeitet. Es sind jedoch unterschiedliche Vektorbreiten und Registergrößen möglich.
  • Bei einer Ausführungsform können eine oder mehrere Ausführungseinheiten zu einer vereinigten Ausführungseinheit 2209A-2209N mit einer Thread-Steuerlogik (2207A-2207N) kombiniert werden, die den vereinigten EUs gemein ist. Mehrere EUs können zu einer EU-Gruppe vereinigt werden. Jede EU in der vereinigten EU-Gruppe kann derart konfiguriert sein, dass sie einen separaten SIMD-Hardware-Thread ausführt. Die Anzahl der EU in einer vereinigten EU-Gruppe kann je nach Ausführungsformen variieren. Außerdem können verschiedene SIMD-Breiten pro EU durchgeführt werden, einschließlich, jedoch nicht beschränkt auf, SIMD8, SIMD16 und SIMD32. Jede vereinigte Grafikausführungseinheit 2209A-2209N beinhaltet mindestens zwei Ausführungseinheiten. Zum Beispiel beinhaltet die vereinigte Ausführungseinheit 2209A eine erste EU 2208A, eine zweite EU 2208B und eine Thread-Steuerlogik 2207A, die der ersten EU 2208A und der zweiten EU 2208B gemein ist. Die Thread-Steuerlogik 2207A steuert Threads, die auf der vereinigten Grafikausführungseinheit 2209A ausgeführt werden, wodurch jeder EU innerhalb der vereinigten Ausführungseinheiten 2209A-2209N ermöglicht wird, unter Verwendung eines gemeinsam genutzten Anweisungszeigerregisters ausgeführt zu werden.
  • Ein oder mehrere interne Anweisungs-Caches (z. B. 2206) sind in der Thread-Ausführungslogik 2200 enthalten, um Thread-Anweisungen für die Ausführungseinheiten zu cachen. Bei einigen Ausführungsformen sind ein oder mehrere Daten-Caches (z. B. 2212) enthalten, um Thread-Daten während der Thread-Ausführung zu cachen. Bei einigen Ausführungsformen ist ein Sampler 2210 enthalten, um ein Textur-Sampling für 3D-Operationen und ein Medien-Sampling für Medienoperationen bereitzustellen. Bei einigen Ausführungsformen weist der Sampler 2210 eine spezielle Textur- oder Medien-Sampling-Funktionalität auf, um Textur- oder Mediendaten während des Sampling-Prozesses zu verarbeiten, bevor die gesampelten Daten einer Ausführungseinheit bereitgestellt werden.
  • Während der Ausführung senden die Grafik- und Medienpipelines Thread-Initiierungsanforderungen an die Thread-Ausführungslogik 2200 über die Thread-Spawn- und Dispatch-Logik. Sobald eine Gruppe geometrischer Objekte verarbeitet und zu Pixeldaten gerastert wurde, wird Pixelprozessorlogik (e.g., Pixel-Shader-Logik, Fragment-Shader-Logik usw.) innerhalb des Shader-Prozessors 2202 aufgerufen, um Ausgabeinformationen weiter zu berechnen und zu bewirken, dass Ergebnisse auf Ausgaberoberflächen (e.g., Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.) geschrieben werden. Bei manchen Ausführungsformen berechnet ein Pixel-Shader oder Fragment-Shader die Werte der verschiedenen Vertexattribute, die über das gerasterte Objekt interpoliert werden sollen. In einigen Ausführungsformen führt die Pixelprozessorlogik innerhalb des Shader-Prozessors 2202 dann ein von einer Anwendungsprogrammierungsschnittstelle (API)geliefertes Pixel-oder Fragment-Shader-Programm aus. Um das Shader-Programm auszuführen, sendet der Shader-Prozessor 2202 Threads über den Thread-Dispatcher 2204 an eine Ausführungseinheit (e.g., 2208 A). Bei manchen Ausführungsformen verwendet der Shader-Prozessor 2202 eine Textur-Sampling-Logik im Sampler 2210, um auf Texturdaten in im Speicher gespeicherten Texturabbildungen zuzugreifen. Arithmetische Operationen an den Texturdaten und den Eingabegeometriedaten berechnen Pixelfarbdaten für jedes geometrische Fragment oder verwerfen ein oder mehrere Pixel von der weiteren Verarbeitung.
  • Bei manchen Ausführungsformen stellt der Datenport 2214 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 2200 bereit, um verarbeitete Daten an den Speicher zur weiteren Verarbeitung auf einer Grafikprozessorausgabe-Pipeline auszugeben. Bei einigen Ausführungsformen beinhaltet der Datenport 2214 einen oder mehrere Cache-Speicher (z. B. Daten-Cache 2212) oder ist damit gekoppelt, um Daten für einen Speicherzugriff über den Datenport zu cachen.
  • Wie in FIG. In 22B kann eine Grafikausführungseinheit 2208 eine Befehlsabrufeinheit 2237, ein allgemeines Registerdateiarray (GRF) 2224, ein Architekturregisterdateiarray (ARF) 2226, einen Thread-Arbiter 2222, eine Sendeeinheit 2230, eine Verzweigungseinheit 2232 umfassen, einen Satz von SIMD-Gleitkommaeinheiten (FPUs) 2234 und in einer Ausführungsform einen Satz von dedizierten ganzzahligen SIMD-ALUs 2235. Das GRF 2224 und das ARF 2226 beinhalten den Satz von Allgemeinregisterbanken und Architekturregisterbanken, die mit jedem simultanen Hardware-Thread assoziiert sind, der in der Grafikausführungseinheit 2208 aktiv sein kann. Bei einer Ausführungsform wird ein Architekturzustand pro Thread in dem ARF 2226 beibehalten, während Daten, die während der Thread-Ausführung verwendet werden, in dem GRF 2224 gespeichert werden. Der Ausführungszustand jedes Threads, einschließlich der Anweisungszeiger für jeden Thread, kann in Thread-spezifischen Registern im ARF 2226 gehalten werden.
  • Bei einer Ausführungsform weist die Grafikausführungseinheit 2208 eine Architektur auf, die eine Kombination von simultanem Multi-Threading (SMT) und feinkörnigem verschachteltem Multi-Threading (IMT) ist. Die Architektur weist eine modulare Konfiguration auf, die zur Gestaltungszeit basierend auf einer Zielanzahl von gleichzeitigen Threads und einer Anzahl von Registern pro Ausführungseinheit fein abgestimmt werden kann, wobei Ressourcen der Ausführungseinheit über die Logik aufgeteilt werden, die zum Ausführen mehrerer gleichzeitiger Threads verwendet wird.
  • Bei einer Ausführungsform kann die Grafikausführungseinheit 2208 mehrere Anweisungen gemeinsam ausgeben, die jeweils unterschiedliche Anweisungen sein können. Der Thread-Arbiter 2222 des Grafikausführungseinheit-Threads 2208 kann die Anweisungen an entweder die Sendeeinheit 2230, die Verzweigungseinheit 2232 oder die SIMD-FPU(s) 2234 zur Ausführung versenden. Jeder Ausführungsthread kann auf 128 Universalregister innerhalb der GRF 2224 zugreifen, wobei jedes Register 32 Bytes speichern kann, auf die als ein 8-Element-Vektor von 32-Bit-Datenelementen zugegriffen werden kann. Bei einer Ausführungsform hat jeder Ausführungseinheiten-Thread Zugriff auf 4 kByte innerhalb des GRF 2224, obwohl die Ausführungsformen nicht darauf beschränkt sind und mehr oder weniger Registerressourcen bei anderen Ausführungsformen bereitgestellt werden können. Bei einer Ausführungsform können bis zu sieben Threads gleichzeitig ausgeführt werden, wenngleich die Anzahl an Threads pro Ausführungseinheit auch je nach Ausführungsform variieren kann. Bei einer Ausführungsform, bei der sieben Threads auf 4 kByte zugreifen können, kann das GRF 2224 insgesamt 28 kByte speichern. Flexible Adressierungsmodi können ermöglichen, dass Register zusammen adressiert werden, um effektiv breitere Register zu bilden oder um streifenförmige rechteckige Blockdatenstrukturen zu repräsentieren.
  • Bei einer Ausführungsform werden Speicheroperationen, Sampler-Operationen und andere Systemkommunikationen mit längerer Latenz über „send (Senden)“-Anweisungen versendet, die durch die Nachrichtenweiterleitungssendeeinheit 2230 ausgeführt werden. Bei einer Ausführungsform werden Verzweigungsanweisungen an eine dedizierte Verzweigungseinheit 2232 versendet, um eine SIMD-Divergenz und letztliche Konvergenz zu ermöglichen.
  • Bei einer Ausführungsform beinhaltet die Grafikausführungseinheit 2208 eine oder mehrere SIMD-Gleitkommaeinheiten (FPU(s)) 2234 zum Durchführen von Gleitkommaoperationen. Bei einer Ausführungsform unterstützen die FPU(s) 2234 auch eine Ganzzahlberechnung. Bei einer Ausführungsform können die FPU(s) 2234 SIMD bis zu M Anzahl von 32-Bit Gleitkomma- (oder Ganzzahl-) Operationen ausführen, oder SIMD kann bis zu 2 M 16-Bit Ganzzahl- oder 16-Bit Gleitkommaoperationen ausführen. Bei einer Ausführungsform stellt mindestens eine der FPUs erweiterte mathematische Fähigkeiten bereit, um transzendentale mathematische Funktionen mit hohem Durchsatz und 64-Bit-Gleitkommazahl mit doppelter Genauigkeit zu unterstützen. Bei manchen Ausführungsformen ist auch ein Satz von ganzzahligen 8-BIT-SIMD-ALUS 2235 vorhanden und kann speziell optimiert werden, um Operationen durchzuführen, die mit Maschinenlernberechnungen assoziiert sind.
  • Bei einer Ausführungsform können Arrays von mehreren Instanzen der Grafikausführungseinheit 2208 in einer Grafikteilkerngruppierung (z. B. einem Sub-Slice) instanziiert werden. Für die Skalierbarkeit können Produktarchitekten die exakte Anzahl an Ausführungseinheiten pro Teilkerngruppierung auswählen. Bei einer Ausführungsform kann die Ausführungseinheit 2208 Anweisungen über mehrere Ausführungskanäle ausführen. Bei einer weiteren Ausführungsform wird jeder Thread, der auf der Grafikausführungseinheit 2208 ausgeführt wird, auf einem anderen Kanal ausgeführt.
  • 23 ist ein Blockdiagramm, das ein Grafikprozessor-Befehlsformat 2300 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ästchen mit durchgezogenen Linien veranschaulichen die Komponenten, die allgemein in einem Ausführungseinheitsbefehl enthalten sind, während die gestrichelten Linien Komponenten enthalten, die optional sind oder die nur in einer Teilmenge der Befehle enthalten sind. In einigen Ausführungsformen handelt es sich bei dem beschriebenen und veranschaulichten Befehlsformat 2300 um Makrobefehle, insofern es sich um Befehle handelt, die der Ausführungseinheit zugeführt werden, im Gegensatz zu Mikrooperationen, die sich aus der Befehlsdecodierung ergeben, sobald der Befehl verarbeitet wird.
  • In einigen Ausführungsformen unterstützen die Grafikprozessorausführungseinheiten nativ Anweisungen in einem 128-Bit-Anweisungsformat 2310. Ein kompaktiertes 64-Bit-Befehlsformat 2330 steht für manche Befehle basierend auf dem ausgewählten Befehl, Befehlsoptionen und der Anzahl von Operanden zur Verfügung. Das native 128-Bit-Befehlsformat 2310 stellt Zugriff auf alle Befehlsoptionen bereit, während manche Optionen und Operationen in dem 64-Bit-Format 2330 beschränkt sind. Die nativen Anweisungen, die im 64-Bit-Format 2330 verfügbar sind, variieren je nach Ausführungsform. In einigen Ausführungsformen wird die Anweisung teilweise unter Verwendung eines Satzes von Indexwerten in einem Indexfeld 2313 kompaktiert. Die Hardware der Ausführungseinheit verweist auf einen Satz von Verdichtungstabellen auf Grundlage der Indexwerte und verwendet die Ausgaben der Verdichtungstabelle, um einen nativen Befehl im 128-Bit-Befehlsformat 2310 zu rekonstruieren. Andere Befehlsgrößen und Befehlsformate können verwendet werden.
  • Für jedes Format definiert der Anweisungsopcode 2312 die Operation, die Ausführungseinheit durchführen soll. Die Ausführungseinheiten führen jede Anweisung parallel über die mehreren Datenelemente jedes Operanden aus. Zum Beispiel führt die Ausführungseinheit als Reaktion auf eine Addieranweisung eine simultane Addieroperation über jeden Farbkanal aus, die ein Texturelement oder Bildelement repräsentiert. Standardmäßig führt die Ausführungseinheit jede Anweisung über alle Datenkanäle der Operanden aus. Bei einigen Ausführungsformen ermöglicht das Anweisungsteuerungsfeld 2314 die Steuerung bestimmter Ausführungsoptionen, wie die Kanalauswahl (z. B. Prädikation) und Datenkanalreihenfolge (z. B. Swizzle). Für Anweisungen im 128-Bit-Anweisungsformat 2310 begrenzt ein Ausführungsgröße-Feld 2316 die Anzahl von Datenkanälen, die parallel ausgeführt werden. Bei einigen Ausführungsformen ist das Ausführungsgröße-Feld 2316 nicht zur Verwendung in dem kompakten 64-Bit-Anweisungsformat 2330 verfügbar.
  • Einige Ausführungseinheitsanweisungen haben bis zu drei Operanden einschließlich zwei Quellenoperanden, src0 2320, src1 2322, und ein Ziel 2318. Bei einigen Ausführungsformen unterstützen die Ausführungseinheiten duale Zielanweisungen, wobei eines der Ziele impliziert ist. Datenmanipulationsanweisungen können einen dritten Quellenoperanden aufweisen (z. B. SRC2 2324), wobei der Anweisungs-Opcode 2312 die Anzahl der Quellenoperanden bestimmt. Der letzte Quellenoperand einer Anweisung kann ein unmittelbarer (z. B. fest codierter) Wert sein, der mit der Anweisung übergeben wird.
  • Bei einigen Ausführungsformen beinhaltet das 128-Bit-Anweisungsformat 2310 ein Zugriffs-/Adressmodus-Feld 2326, das zum Beispiel angibt, ob der direkte Registeradressierungsmodus oder der indirekte Registeradressierungsmodus verwendet wird. Wenn der direkte Registeradressierungsmodus verwendet wird, wird die Registeradresse eines oder mehrerer Operanden direkt durch Bits in der Anweisung bereitgestellt.
  • Bei einigen Ausführungsformen beinhaltet das 128-Bit-Anweisungsformat 2310 ein Zugriffs-/Adressmodusfeld 2326, das einen Adressmodus und/oder einen Zugriffsmodus für den Befehl spezifiziert. Bei einer Ausführungsform wird der Zugriffsmodus zum Definieren einer Datenzugriffsausrichtung für die Anweisung verwendet. Einige Ausführungsformen unterstützen Zugriffsmodi einschließlich eines 16-Byte-ausgerichteten Zugriffsmodus und eines 1-Byte-ausgerichteten Zugriffsmodus, wobei die Byteausrichtung des Zugriffsmodus die Zugriffsausrichtung der Anweisungsoperanden bestimmt. Zum Beispiel kann die Anweisung, wenn sie sich in einem ersten Modus befindet, eine Byte-ausgerichtete Adressierung für Quell- und Zieloperanden verwenden, und wenn sie sich in einem zweiten Modus befindet, kann die Anweisung eine 16-Byte-ausgerichtete Adressierung für alle Quell- und Zieloperanden verwenden.
  • Bei einer Ausführungsform bestimmt der Adressmodusabschnitt des Zugriffs-/Adressmodus-Feldes 2326, ob der Befehl eine direkte oder eine indirekte Adressierung verwenden soll. Wenn der direkte Registeradressierungsmodus verwendet wird, stellen die Bits in der Anweisung direkt die Registeradresse eines oder mehrerer Operanden ein. Wenn der indirekte Registeradressierungsmodus verwendet wird, kann die Registeradresse eines oder mehrerer Operanden basierend auf einem Adressregisterwert und einem unmittelbaren Adressfeld in der Anweisung berechnet werden.
  • Bei einigen Ausführungsformen werden Anweisungen basierend auf Bitfeldern vom Opcode 2312 gruppiert, um die Opcode-Decodierung 2340 zu vereinfachen. Für einen 8-Bit-Opcode ermöglichen die Bits 4, 5 und 6 der Ausführungseinheit, den Opcode-Typ zu bestimmen. Die gezeigte genaue Opcode-Gruppierung ist lediglich ein Beispiel. Bei einigen Ausführungsformen beinhaltet eine Bewegung-und-Logik-Opcode-Gruppe 2342 Datenbewegungs- und Logikanweisungen (z. B. move (mov), compare (cmp)). Bei einigen Ausführungsformen nutzt die Bewegung-und-Logik-Gruppe 2342 die fünf höchstwertigen Bits (MSB) gemeinsam, wobei move(mov)-Anweisungen die Form 0000xxxxb aufweisen und logische Anweisungen die Form 0001xxxxb aufweisen. Eine Flusssteueranweisungsgruppe 2344 (z. B. call, jump (jmp)) beinhaltet Anweisungen in Form von 0010xxxxb (z. B. 0x20). Eine gemischte Befehlsgruppe 2346 beinhaltet eine Mischung von Anweisungen einschließlich Synchronisationsanweisungen (z. B. wait, send) in der Form 0011xxxxb (z. B. 0x30). Eine Parallel-Math-Anweisungsgruppe 2348 beinhaltet komponentenweise arithmetische Anweisungen (z. B. add, multiply (mul)) in der Form 0100xxxxb (z. B. 0x40). Die Parallel-Math-Gruppe 2348 führt die arithmetischen Operationen parallel über Datenkanäle aus. Die Vektor-Math-Gruppe 2350 beinhaltet arithmetische Befehle (z. B. dp4) in Form von 0101xxxxb (z. B. 0x50). Die Vektor-Math-Gruppe führt Arithmetik wie z. B. Skalarproduktberechnungen an Vektoroperanden aus.
  • Grafik-Pipeline
  • 24 ist ein Blockdiagramm einer anderen Ausführungsform eines Grafikprozessors 2400. 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.
  • Bei manchen Ausführungsformen enthält der Grafikprozessor 2400 eine Geometrie-Pipeline 2420, eine Medien-Pipeline 2430, eine Anzeige-Engine 2440, eine Thread-Ausführungslogik 2450 und eine Renderausgabe-Pipeline 2470. Bei manchen Ausführungsformen ist der Grafikprozessor 2400 ein Grafikprozessor in einem Mehrkern-Verarbeitungssystem, das einen oder mehrere Allzweck-Verarbeitungskerne beinhaltet. Der Grafikprozessor wird durch Registerschreibvorgänge in ein oder mehrere Steuerregister (nicht gezeigt) oder über Befehle gesteuert, die über ein Ring-Interconnect 2402 an den Grafikprozessor 2400 ausgegeben werden. Bei einigen Ausführungsformen koppelt das Ring-Interconnect 2402 den Grafikprozessor 2400 mit anderen Verarbeitungskomponenten wie etwa anderen Grafikprozessoren oder Allzweckprozessoren. Befehle vom Ring-Interconnect 2402 werden von einem Befehls-Streamer 2403 interpretiert, der Anweisungen an einzelne Komponenten der Geometrie-Pipeline 2420 oder der Medien-Pipeline 2430 liefert.
  • Bei einigen Ausführungsformen leitet der Befehls-Streamer 2403 die Operation eines Vertex-Fetcher 2405, der Vertex-Daten aus einem Speicher liest, und führt Vertex-Verarbeitungsbefehle aus, die von dem Befehls-Streamer 2403 bereitgestellt werden. Bei einigen Ausführungsformen stellt der Vertex-Fetcher 2405 Vertexdaten einem Vertex-Shader 2407 bereit, der Koordinatenraumtransformationen und Beleuchtungsoperationen für jeden Vertex durchführt. Bei einigen Ausführungsformen führen der Vertex-Fetcher 2405 und der Vertex-Shader 2407 Vertex-Verarbeitungsanweisungen aus, indem sie Ausführungs-Threads über einen Thread-Dispatcher 2431 an die Ausführungseinheiten 2452A-2452B senden.
  • Bei einigen Ausführungsformen sind die Ausführungseinheiten 2452A-2452B ein Array von Vektorprozessoren mit einem Befehlssatz zum Ausführen von Grafik- und Medienoperationen. Bei einigen Ausführungsformen weisen die Ausführungseinheiten 2452A-2452B einen angehängten L1-Cache 2451 auf, der für jedes Array spezifisch ist oder von den Arrays gemeinsam genutzt wird. Der Cache kann als Daten-Cache, als Anweisungs-Cache oder als einzelner Cache konfiguriert sein, der derart partitioniert ist, dass er Daten und Anweisungen in verschiedenen Partitionen enthält.
  • Bei manchen Ausführungsformen enthält die Geometrie-Pipeline 2420 Tessellationskomponenten, um eine hardwarebeschleunigte Tessellation von 3D-Objekten durchzuführen. Bei einigen Ausführungsformen konfiguriert ein programmierbarer Hüllen-Shader 2411 die Tesselationsoperationen. Ein programmierbarer Domänen-Shader 2417 stellt eine Backend-Auswertung der Tesselationsausgabe bereit. Ein Tessellator 2413 arbeitet in Richtung des Hüllen-Shaders 2411 und enthält eine Spezialzwecklogik zum Erzeugen eines Satzes detaillierter geometrischer Objekte basierend auf einem groben geometrischen Modell, das als Eingabe in die Geometrie-Pipeline 2420 bereitgestellt wird. Bei manchen Ausführungsformen können, falls keine Tessellation verwendet wird, Tessellationskomponenten (z. B. Hüllen-Shader 2411, Tessellator 2413 und Domänen-Shader 2417) umgangen werden.
  • Bei einigen Ausführungsformen können vollständige geometrische Objekte durch einen Geometrie-Shader 2419 über einen oder mehrere Threads verarbeitet werden, die an die Ausführungseinheiten 2452A-2452B gesendet werden, oder können direkt zu dem Clipper 2429 weitergehen. Bei einigen Ausführungsformen arbeitet der Geometrie-Shader an ganzen geometrischen Objekten und nicht an Vertices oder Patches von Vertices wie in vorherigen Stufen der Grafik-Pipeline. Wenn die Tessellation deaktiviert ist, empfängt der Geometrie-Shader 2419 eine Eingabe von dem Vertex-Shader 2407. In einigen Ausführungsformen ist der Geometrie-Shader 2419 durch ein Geometrie-Shader-Programm programmierbar, um eine Geometrie-Tessellation durchzuführen, wenn die Tessellationseinheiten deaktiviert sind.
  • Vor der Rasterisierung verarbeitet ein Clipper 2429 Vertexdaten. Der Clipper 2429 kann ein Clipper mit fester Funktion oder ein programmierbarer Clipper mit Clipping- und Geometrie-Shader-Funktionen sein. Bei manchen Ausführungsformen versendet eine Rasterisierer-und-Tiefentest-Komponente 2473 in der Renderausgabe-Pipeline 2470 Pixel-Shader, um die geometrischen Objekte in Pro-Pixel-Repräsentationen umzuwandeln. Bei manchen Ausführungsformen ist eine Pixel-Shader-Logik in der Thread-Ausführungslogik 2450 enthalten. Bei einigen Ausführungsformen kann eine Anwendung die Rasterisierer-und-Tiefentest-Komponente 2473 umgehen und auf nicht rasterisierte Vertexdaten über eine Stream-Out-Einheit 2423 zugreifen.
  • Der Grafikprozessor 2400 weist einen Interconnect-Bus, ein Interconnect-Fabric oder einen anderen Interconnect-Mechanismus auf, der ein Weitergeben von Daten und Nachrichten zwischen den Hauptkomponenten des Prozessors ermöglicht. Bei manchen Ausführungsformen sind die Ausführungseinheiten 2452A-2452B und die assoziierten Logikeinheiten (z. B. L1-Cache 2451, Sampler 2454, Textur-Cache 2458 usw.) über einen Datenport 2456 miteinander verbunden, um einen Speicherzugriff durchzuführen und mit Renderausgabe-Pipeline-Komponenten des Prozessors zu kommunizieren. In einigen Ausführungsformen weisen der Abtaster 2454, der L1-Cache 2451, der Textur-Cache 2458 und die Ausführungseinheiten 2452 A-2452 B jeweils separate Speicherzugriffspfade auf. Bei einer Ausführungsform kann der Textur-Cache 2458 auch als ein Sampler-Cache konfiguriert sein.
  • Bei einigen Ausführungsformen enthält die Renderausgabe-Pipeline 2470 eine Rasterisierer-und-Tiefentest-Komponente 2473, die vertexbasierte Objekte in eine assoziierte pixelbasierte Repräsentation umwandelt. Bei einigen Ausführungsformen weist die Rasterisierer-Logik eine Windower/Maskierer-Einheit auf, um eine Dreiecks- und Linienrasterisierung mit fester Funktion durchzuführen. Ein assoziierter Render-Cache 2478 und Tiefen-Cache 2479 sind bei einigen Ausführungsformen ebenfalls verfügbar. Eine Pixeloperationskomponente 2477 führt pixelbasierte Operationen an den Daten aus, wenngleich in einigen Fällen Pixeloperationen, die mit 2D-Operationen assoziiert sind (z. B. Bitblockbildtransfers mit Mischen), von der 2D-Engine 2441 ausgeführt oder zur Anzeigezeit von der Anzeigesteuerung 2443 unter Verwendung von Overlay-Anzeigeebenen ersetzt werden. Bei einigen Ausführungsformen ist ein gemeinsam genutzter L3-Cache 2475 für alle Grafikkomponenten verfügbar, was die gemeinsame Nutzung von Daten ohne die Verwendung von Hauptsystemspeicher ermöglicht.
  • Bei manchen Ausführungsformen weist die Grafikprozessor-Medien-Pipeline 2430 eine Medien-Engine 2437 und ein Video-Frontend 2434 auf. Bei manchen Ausführungsformen empfängt das Video-Frontend 2434 Pipeline-Befehle von dem Befehls-Streamer 2403. Bei einigen Ausführungsformen enthält die Medien-Pipeline 2430 einen separaten Befehls-Streamer. Bei einigen Ausführungsformen verarbeitet das Video-Frontend 2434 Medienbefehle vor dem Senden des Befehls an die Medien-Engine 2437. Bei manchen Ausführungsformen enthält die Medien-Engine 2437 eine Thread-Erzeugungsfunktionalität, um Threads zum Versenden an die Thread-Ausführungslogik 2450 über den Thread-Dispatcher 2431 zu erzeugen.
  • Bei einigen Ausführungsformen weist der Grafikprozessor 2400 eine Anzeige-Engine 2440 auf. Bei einigen Ausführungsformen befindet sich die Anzeige-Engine 2440 außerhalb des Prozessors 2400 und ist mit dem Grafikprozessor über das Ring-Interconnect 2402 oder einen anderen Interconnect-Bus oder anderes Interconnect-Fabric gekoppelt. Bei einigen Ausführungsformen weist die Anzeige-Engine 2440 eine 2D-Engine 2441 und eine Anzeigesteuerung 2443 auf. Bei einigen Ausführungsformen weist die Anzeige-Engine 2440 eine Spezialzwecklogik auf, die in der Lage ist, unabhängig von der 3D-Pipeline zu arbeiten. Bei einigen Ausführungsformen ist die Anzeigesteuerung 2443 mit einer Anzeigevorrichtung (nicht gezeigt) gekoppelt, die eine systemintegrierte Anzeigevorrichtung wie in einem Laptop-Computer oder eine externe Anzeigevorrichtung sein kann, die über ein Anzeigevorrichtungsverbindungselement angeschlossen ist.
  • Bei manchen Ausführungsformen sind die Geometrie-Pipeline 2420 und die Medien-Pipeline 2430 konfigurierbar, um Operationen basierend auf mehreren Grafik und Medienprogrammierschnittstellen durchzuführen, und sind für keine Anwendungsprogrammierschnittstelle (API) spezifisch. Bei 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 durch den Grafikprozessor verarbeitet werden können. Bei einigen Ausführungsformen wird Unterstützung für Open Graphics Library (OpenGL), Open Computing Language (OpenCL) und/oder Vulkan Graphics und Rechen-API bereitgestellt, die alle von der Khronos Group sind. Bei einigen Ausführungsformen wird Unterstützung auch für die Direct3D-Bibliothek von der Microsoft Corporation bereitgestellt. Bei einigen Ausführungsformen kann eine Kombination dieser Bibliotheken unterstützt werden. Unterstützung kann auch für die Open Source Computer Vision Library (OpenCV) bereitgestellt werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline wird ebenfalls unterstützt, falls eine Abbildung von der Pipeline der zukünftigen API auf Pipeline des Grafikprozessors vorgenommen werden kann.
  • Grafik-Pipeline-Programmierung
  • 25A ist ein Blockdiagramm, das ein Grafikprozessor-Befehlsformat 2500 gemäß einigen Ausführungsformen veranschaulicht. 25B ist ein Blockdiagramm, das eine Grafikprozessorbefehlssequenz 2510 gemäß einer Ausführungsform veranschaulicht. Die durchgezogenen Boxen in 25A 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 2500 of 25A enthält Datenfelder, um einen Client 2502 zu identifizieren, einen Befehlsoperationscode (Opcode) 2504 und Daten 2506 für den Befehl. Ein Sub-Opcode 2505 und eine Befehlsgröße 2508 sind auch in einigen Befehlen enthalten.
  • Bei manchen Ausführungsformen spezifiziert der Client 2502 die Client-Einheit der Grafikvorrichtung, die die Befehlsdaten verarbeitet. In einigen Ausführungsformen untersucht ein Grafikprozessorbefehlsparser das Clientfeld jedes Befehls, um die weitere Verarbeitung des Befehls zu konditionieren und die Befehlsdaten an die geeignete Clienteinheit weiterzuleiten. Bei manchen Ausführungsformen beinhalten die Grafikprozessor-Client-Einheiten eine Speicherschnittstelleneinheit, eine Rendereinheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit. Jede Client-Einheit weist eine entsprechende Verarbeitungs-Pipeline auf, die die Befehle verarbeitet. Sobald der Befehl von der Client-Einheit empfangen wurde, liest die Client-Einheit den Opcode 2504 und, falls vorhanden, den Sub-Opcode 2505, um die durchzuführende Operation zu bestimmen. Die Client-Einheit führt den Befehl unter Verwendung von Informationen in dem Datenfeld 2506 aus. Für einige Befehle wird eine explizite Befehlsgröße 2508 erwartet, um die Größe des Befehls anzugeben. In einigen Ausführungsformen bestimmt der Befehlsparser automatisch die Größe von mindestens einigen der Befehle basierend auf dem Befehls-Opcode. Bei manchen Ausführungsformen werden Befehle über Vielfache eines Doppelworts ausgerichtet. Andere Befehlsformate können verwendet werden.
  • Das Flussdiagramm in 25B veranschaulicht eine beispielhafte Grafikprozessor-Befehlssequenz 2510. 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 ist nur zu beispielhaften Zwecken 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 verarbeiten wird.
  • In einigen Ausführungsformen kann die Grafikprozessorbefehlssequenz 2510 mit einem Pipeline-Entleerungsbefehl 2512 beginnen, um zu bewirken, dass jede aktive Grafik-Pipeline die gegenwärtig anstehenden Befehle für die Pipeline abschließt. Bei manchen Ausführungsformen arbeiten die 3D-Pipeline 2522 und die Medien-Pipeline 2524 nicht gleichzeitig. Das Leeren der Pipeline wird durchgeführt, um die aktive Grafikpipeline zu veranlassen, alle ausstehenden Befehle abzuschließen. Als Reaktion auf eine Pipeline-Leerung wird der Befehlsparser für den Grafikprozessor die Befehlsverarbeitung pausieren, bis die aktiven Zeichnungs-Engines ausstehende Operationen abschließen und die relevanten Lese-Caches ungültig gemacht sind. Optional können beliebige Daten in dem Render-Cache, die als „verschmutzt“ markiert sind, in den Speicher geleert werden. In einigen Ausführungsformen kann der Pipeline-Entleerungsbefehl 2512 zur Pipeline-Synchronisation oder vor dem Versetzen des Grafikprozessors in einen Niedrigleistungszustand verwendet werden.
  • In einigen Ausführungsformen wird ein Pipeline-Auswahlbefehl 2513 verwendet, wenn eine Befehlssequenz erfordert, dass der Grafikprozessor explizit zwischen Pipelines wechselt. In einigen Ausführungsformen wird ein Pipeline-Auswahlbefehl 2513 nur einmal innerhalb eines Ausführungskontextes benötigt, bevor Pipeline-Befehle ausgegeben werden, es sei denn, der Kontext soll Befehle für beide Pipelines ausgeben. Bei manchen Ausführungsformen wird ein Pipeline-Entleerungsbefehl 2512 unmittelbar vor einem Pipeline-Umschalten über den Pipeline-Auswahlbefehl 2513 benötigt.
  • In einigen Ausführungsformen konfiguriert ein Pipeline-Steuerbefehl 2514 eine Grafik-Pipeline für den Betrieb und wird verwendet, um die 3D-Pipeline 2522 und die Medien-Pipeline 2524 zu programmieren. Bei manchen Ausführungsformen konfiguriert der Pipeline-Steuerbefehl 2514 den Pipeline-Zustand für die aktive Pipeline. In einer Ausführungsform wird der Pipeline-Steuerbefehl 2514 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ücksprungpufferzustands 2516 verwendet, um einen Satz von Rücksprungpuffern für die jeweiligen Pipelines zum Schreiben von Daten zu konfigurieren. Manche Pipeline-Operationen erfordern die Zuweisung, Auswahl oder Konfiguration eines oder mehrerer Rückkehrpuffer, in die die Operationen Zwischendaten während der Verarbeitung schreiben. In einigen Ausführungsformen verwendet der Grafikprozessor auch einen oder mehrere Rückgabepuffer, um Ausgabedaten zu speichern und eine Cross-Thread-Kommunikation durchzuführen. In einigen Ausführungsformen beinhaltet der Rücksprungpufferzustand 2516 Auswählen der Größe und Anzahl von Rücksprungpuffern, die für einen Satz von Pipeline-Operationen zu verwenden sind.
  • Die verbleibenden Befehle in der Befehlssequenz unterscheiden sich basierend auf der aktiven Pipeline für Operationen. Basierend auf einer Pipeline-Bestimmung 2520 wird die Befehlssequenz auf die 3D-Pipeline 2522, beginnend mit dem 3D-Pipeline-Zustand 2530, oder auf die Medien-Pipeline 2524, beginnend mit dem Medien-Pipeline-Zustand 2540, zugeschnitten.
  • Die Befehle zum Konfigurieren des 3D-Pipeline-Zustands 2530 beinhalten 3D-Zustandseinstellbefehle für Vertexpufferzustand, Vertexelementzustand, Konstantfarbzustand, Tiefenpufferzustand und andere Zustandsvariablen, die zu konfigurieren sind, bevor 3D-Primitivbefehle verarbeitet werden. Die Werte dieser Befehle werden zumindest teilweise basierend auf der bestimmten 3D-API in Verwendung bestimmt. In einigen Ausführungsformen sind die 3D-Pipeline-Status 2530-Befehle auch in der Lage, bestimmte Pipeline-Elemente selektiv zu deaktivieren oder zu umgehen, falls diese Elemente nicht verwendet werden.
  • In einigen Ausführungsformen wird der 3D-Primitiv-Befehl 2532 verwendet, um 3D-Primitive zu übermitteln, die durch die 3D-Pipeline verarbeitet werden sollen. Befehle und assoziierte Parameter, die über den 3D-Primitiv-Befehl 2532 an den Grafikprozessor weitergeleitet werden, werden an die Vertex-Abruffunktion in der Grafik-Pipeline weitergeleitet. Die Vertex-Abruffunktion verwendet die Daten des 3D-Primitivenbefehls 2532, um Vertex-Datenstrukturen zu generieren. Die Vertex-Datenstrukturen werden in einem oder mehreren Rückgabepuffern gespeichert. Bei einigen Ausführungsformen wird der 3D-Primitivenbefehl 2532 verwendet, um Vertex-Operationen an 3D-Primitiven über Vertex-Shader auszuführen. Um Vertex-Shader zu verarbeiten, versendet die 3D-Pipeline 2522 Shader-Ausführungs-Threads an Grafikprozessorausführungseinheiten.
  • Bei manchen Ausführungsformen wird die 3D-Pipeline 2522 über einen Ausführungsbefehl 2534 oder ein Ausführungsereignis ausgelöst. Bei einigen Ausführungsformen löst ein Registerschreibvorgang eine Befehlsausführung aus. In einigen Ausführungsformen wird die Ausführung über einen „go“ - oder „kick“ -Befehl in der Befehlsfolge ausgelöst. In einer Ausführungsform wird die Befehlsausführung unter Verwendung eines Pipeline-Synchronisationsbefehls ausgelöst, um die Befehlsfolge durch die Grafik-Pipeline zu entleeren. Die 3D-Pipeline führt eine Geometrieverarbeitung für die 3D-Primitiven aus. Sobald die Operationen abgeschlossen sind, werden die resultierenden geometrischen Objekte rasterisiert und färbt die Pixel-Engine die resultierenden Pixel. Weitere Befehle zum Steuern des Pixel-Shadings und der Pixel-Backend-Operationen können ebenfalls für diese Operationen enthalten sein.
  • Bei einigen Ausführungsformen folgt die Grafikprozessor-Befehlssequenz 2510 dem Pfad der Medien-Pipeline 2524, wenn Medienoperationen ausgeführt werden. Im Allgemeinen hängt die spezifische Verwendung und Art der Programmierung für die Medien-Pipeline 2524 von den auszuführenden Medien oder Rechenoperationen ab. Spezifische Mediendekodierungsoperationen können während der Mediendekodierung in die Medienpipeline ausgelagert werden. Bei einigen Ausführungsformen kann die Medien-Pipeline auch umgangen werden und die Mediendecodierung kann ganz oder teilweise unter Verwendung von Ressourcen ausgeführt werden, die von einem oder mehreren Allzweckverarbeitungskernen bereitgestellt werden. Bei einer Ausführungsform beinhaltet die Medien-Pipeline auch Elemente für GPGPU-Operationen (GPGPU: General-Purpose Graphics Processor Unit - Allzweck-Grafikprozessoreinheit), wobei der Grafikprozessor zur Ausführung von SIMD-Vektoroperationen unter Verwendung von Computer-Shader-Programmen verwendet wird, die nicht explizit mit dem Rendern von Grafikprimitiven in Zusammenhang stehen.
  • Bei einigen Ausführungsformen ist die Medien-Pipeline 2524 auf ähnliche Weise wie die 3D-Pipeline 2522 konfiguriert. Ein Satz von Befehlen zum Konfigurieren des Medien-Pipeline-Zustands 2540 wird vor den Medienobjektbefehlen 2542 versendet oder in einer Befehlswarteschlange platziert. Bei manchen Ausführungsformen beinhalten Befehle für den Medien-Pipeline-Zustand 2540 Daten zum Konfigurieren der Medien-Pipeline-Elemente, die zum Verarbeiten der Medienobjekte verwendet werden. Dies schließt Daten zum Konfigurieren der Videodecodierungs- und Videocodierungslogik in der Medien-Pipeline wie etwa ein Codierungs- oder Decodierungsformat ein. In einigen Ausführungsformen unterstützen Befehle für den Medien-Pipeline-Zustand 2540 auch die Verwendung eines oder mehrerer Zeiger auf „indirekte“ Zustandselemente, die einen Stapel von Zustandseinstellungen enthalten.
  • In einigen Ausführungsformen liefern Medienobjektbefehle 2542 Zeiger zu Medienobjekten zur Verarbeitung durch die Medien-Pipeline. Die Medienobjekte umfassen Speicherpuffer, die zu verarbeitende Videodaten enthalten. In einigen Ausführungsformen müssen alle Medien-Pipeline-Zustände gültig sein, bevor ein Medienobjektbefehl 2542 ausgegeben wird. Sobald der Pipeline-Zustand konfiguriert ist und Medienobjektbefehle 2542 eingereiht sind, wird die Medien-Pipeline 2524 über einen Ausführungsbefehl 2544 oder ein äquivalentes Ausführungsereignis (e.g. Registerschreibung) ausgelöst. Die Ausgabe von der Medien-Pipeline 2524 kann dann durch Operationen nachverarbeitet werden, die durch die 3D-Pipeline 2522 oder die Medien-Pipeline 2524 bereitgestellt werden. In einigen Ausführungsformen werden GPGPU-Operationen auf ähnliche Weise wie Medienoperationen konfiguriert und ausgeführt.
  • Grafik-Software-Architektur
  • 26 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem 2600 gemäß einigen Ausführungsformen. Bei einigen Ausführungsformen beinhaltet die Softwarearchitektur eine 3D-Grafikanwendung 2610, ein Betriebssystem 2620 und mindestens einen Prozessor 2630. Bei einigen Ausführungsformen weist der Prozessor 2630 einen Grafikprozessor 2632 und einen oder mehrere Allzweckprozessorkerne 2634 auf. Die Grafikanwendung 2610 und das Betriebssystem 2620 werden jeweils im Systemspeicher 2650 des Datenverarbeitungssystems ausgeführt.
  • In einigen Ausführungsformen enthält die 3D-Grafikanwendung 2610 ein oder mehrere Shader-Programme, einschließlich Shader-Anweisungen 2612. Die Shader-Sprach-Anweisungen können in einer High-Level-Shader-Sprache sein, wie etwa der High-Level-Shader-Sprache (HLSL) von Direc3D, der OpenGL Shader-Sprache (GLSL) und so weiter. Die Anwendung beinhaltet auch ausführbare Anweisungen 2614 in einer Maschinensprache, die zur Ausführung durch den Universalprozessorkern 2634 geeignet ist. Die Anwendung beinhaltet auch Grafikobjekte 2616, die durch Vertexdaten definiert sind.
  • Bei manchen Ausführungsformen ist das Betriebssystem 2620 ein Microsoft ® Windows ® Betriebssystem der Microsoft Corporation, ein proprietäres UNIX-ähnliches Betriebssystem oder ein UNIX-ähnliches Betriebssystem mit offener Quelle, das eine Variante des Linux-Kernels verwendet. Das Betriebssystem 2620 kann eine Grafik-API 2622 wie die Direct3D-API, die OpenGL-API oder die Vulkan-API unterstützen. Wenn die Direct3D-API verwendet wird, verwendet das Betriebssystem 2620 einen Frontend-Shader-Kompilierer 2624, um alle Shader-Anweisungen 2612 in HLSL in eine Shader-Sprache niedrigerer Ebene zu kompilieren. Die Kompilierung kann eine just-in-time (JIT) Kompilierung sein oder die Anwendung kann eine Shader-Vorkompilierung durchführen. Bei manchen Ausführungsformen werden High-Level-Shader während der Kompilierung der 3D-Grafikanwendung 2610 in Low-Level-Shader kompiliert. Bei manchen Ausführungsformen werden die Shader-Anweisungen 2612 in einer Zwischenform bereitgestellt, wie etwa einer Version der standardmäßigen tragbaren Zwischendarstellung (SPIR), die von der Vulkanischen API verwendet wird.
  • In einigen Ausführungsformen enthält der Benutzermodusgrafiktreiber 2626 einen Backend-Shader-Compiler 2627 zum Umwandeln der Shader-Anweisungen 2612 in eine hardwarespezifische Repräsentation. Wenn die OpenGL API in Verwendung ist, werden Shader-Anweisungen 2612 in der GLSL-HOCHSPRACHE an einen Benutzermodusgrafiktreiber 2626 zur Kompilierung weitergeleitet. In einigen Ausführungsformen verwendet der Benutzermodusgrafiktreiber 2626 Betriebssystemkernmodusfunktionen 2628, um mit einem Kernmodusgrafiktreiber 2629 zu kommunizieren. In einigen Ausführungsformen kommuniziert der Kernmodus-Grafiktreiber 2629 mit dem Grafikprozessor 2632, um Befehle und Anweisungen zu versenden.
  • IP-Kern-Implementierungen
  • Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch einen repräsentativen Code implementiert werden, der auf einem maschinenlesbaren Medium gespeichert ist, das Logik innerhalb einer integrierten Schaltung, wie zum Beispiel einem Prozessor, repräsentiert und/oder definiert. Zum Beispiel kann das maschinenlesbare Medium Anweisungen aufweisen, die verschiedene Logik innerhalb des Prozessors repräsentieren. 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, die als „IP-Kerne“ bekannt sind, sind wiederverwendbare Logikeinheiten für eine integrierte Schaltung, die auf einem greifbaren, maschinenlesbaren Medium als ein Hardwaremodell gespeichert werden können, das die Struktur der integrierten Schaltung beschreibt. Das Hardwaremodell kann an verschiedene Kunden oder Herstellungseinrichtungen geliefert werden, die das Hardwaremodell auf Herstellungsmaschinen laden, die die integrierte Schaltung herstellen. Die integrierte Schaltung kann derart hergestellt sein, dass die Schaltung Operationen durchführt, die in Verbindung mit irgendeiner der hierin beschriebenen Ausführungsformen beschrieben sind.
  • 27A ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem 2700 veranschaulicht, das verwendet werden kann, um eine integrierte Schaltung herzustellen, um Operationen gemäß einer Ausführungsform durchzuführen. Das IP-Kern-Entwicklungssystem 2700 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 2730 kann eine Softwaresimulation 2710 eines IP-KERN-ENTWURFS in einer höheren Programmiersprache (e.g., C/C++) erzeugen. Die Softwaresimulation 2710 kann verwendet werden, um das Verhalten des IP-Kerns unter Verwendung eines Simulationsmodells 2712 zu entwerfen, zu testen und zu verifizieren. Das Simulationsmodell 2712 kann Funktions-, Verhaltens- und/oder Timing-Simulationen beinhalten. Aus dem Simulationsmodell 2712 kann dann ein Register Transfer Level (RTL) Design 2715 erstellt oder synthetisiert werden. Das RTL-DESIGN 2715 ist eine Abstraktion des Verhaltens der integrierten Schaltung, die den Fluss digitaler Signale zwischen Hardwareregistern modelliert, einschließlich der assoziierten Logik, die unter Verwendung der modellierten digitalen Signale durchgeführt wird. Zusätzlich zu einem RTL-DESIGN 2715 können auch Designs niedrigerer Ebene auf dem Logikpegel oder Transistorpegel erzeugt, gestaltet oder synthetisiert werden. Dementsprechend können die speziellen Einzelheiten des anfänglichen Designs und der Simulation variieren.
  • Das RTL-DESIGN 2715 oder Äquivalent kann ferner durch die Designeinrichtung zu einem Hardwaremodell 2720 synthetisiert werden, das in einer Hardwarebeschreibungssprache (HDL) oder einer anderen Repräsentation physischer Designdaten vorliegen kann. Die HDL kann ferner simuliert oder getestet werden, um das IP-KERNDESIGN zu verifizieren. Das IP-KERNDESIGN kann zur Lieferung an eine Fertigungsanlage 2765 der 3·Partei unter Verwendung eines nichtflüchtigen Speichers 2740 (e.g. Festplatte, Flash-Speicher oder ein beliebiges nichtflüchtiges Speichermedium) gespeichert werden. Alternativ dazu kann das IP-KERNDESIGN über eine drahtgebundene Verbindung 2750 oder eine drahtlose Verbindung 2760 übertragen (e.g. über das Internet) werden. Die Fertigungseinrichtung 2765 kann dann eine integrierte Schaltung fertigen, die zumindest teilweise auf dem IP-KERNDESIGN basiert. Die gefertigte integrierte Schaltung kann dazu konfiguriert sein, Operationen gemäß wenigstens einer hier beschriebenen Ausführungsform durchzuführen.
  • 27B veranschaulicht eine Querschnittsseitenansicht einer integrierten Schaltungspackungsanordnung 2770 gemäß einigen hierin beschriebenen Ausführungsformen. Die Package-Baugruppe 2770 mit integrierter Schaltung veranschaulicht eine Implementierung eines oder mehrerer Prozessoren oder einer oder mehrerer Beschleunigervorrichtungen, wie hier beschrieben. Die Package-Baugruppe 2770 beinhaltet mehrere Logikeinheiten 2772, 2774, die mit einem Substrat 2780 verbunden sind. Die Logik 2772, 2774 kann zumindest teilweise in konfigurierbarer Logik oder Festfunktionalitätslogikhardware implementiert werden und kann einen oder mehrere Teile beliebiger des einen oder der mehreren Prozessorkerne, des einen oder der mehreren Grafikprozessoren oder anderer hierin beschriebener Beschleunigervorrichtungen beinhalten. Jede Logikeinheit 2772, 2774 kann in einem Halbleiter-Die implementiert und über eine Interconnect-Struktur 2773 mit dem Substrat 2780 gekoppelt werden. Die Interconnect-Struktur 2773 kann dazu ausgelegt sein, elektrische Signale zwischen der Logik 2772, 2774 und dem Substrat 2780 zu routen, und kann Interconnects, wie etwa unter anderem Kontakthügel oder Säulen, beinhalten. Bei manchen Ausführungsformen kann die Interconnect-Struktur 2773 dazu ausgelegt sein, elektrische Signale, zum Beispiel Eingabe/Ausgabe(E/A)-Signale und/oder Leistungs- oder Massesignale, zu routen, die mit dem Betrieb der Logik 2772, 2774 assoziiert sind. Bei manchen Ausführungsformen ist das Substrat 2780 ein epoxidbasiertes Laminatsubstrat. Das Substrat 2780 kann bei anderen Ausführungsformen andere geeignete Typen von Substraten beinhalten. Die Package-Baugruppe 2770 kann über ein Package-Interconnect 2783 mit anderen elektrischen Vorrichtungen verbunden sein. Das Package-Interconnect 2783 kann mit einer Oberfläche des Substrats 2780 gekoppelt sein, um elektrische Signale zu anderen elektrischen Vorrichtungen, wie etwa einer Hauptplatine, einem anderen Chipsatz oder einem Mehrchipmodul zu routen.
  • Bei manchen Ausführungsformen sind die Logikeinheiten 2772, 2774 elektrisch mit einer Brücke 2782 gekoppelt, die dazu ausgelegt ist, elektrische Signale zwischen der Logik 2772, 2774 zu routen. Die Brücke 2782 kann eine dichte Interconnect-Struktur sein, die eine Route für elektrische Signale bereitstellt. Die Brücke 2782 kann ein Brückensubstrat beinhalten, das aus Glas oder einem geeigneten Halbleitermaterial gebildet ist. Elektrische Routing-Merkmale können auf dem Brückensubstrat ausgebildet sein, um eine Chip-zu-Chip-Verbindung zwischen der Logik 2772, 2774 bereitzustellen.
  • Obwohl zwei Logikeinheiten 2772, 2774 und eine Brücke 2782 veranschaulicht sind, können hier beschriebene Ausführungsformen mehr oder weniger Logikeinheiten auf einem oder mehreren Dies beinhalten. Der eine oder die mehreren Dies können durch keine oder mehr Brücken verbunden sein, da die Brücke 2782 ausgelassen werden kann, wenn die Logik auf einem einzelnen Die enthalten ist. Alternativ dazu können mehrere Dies oder Logikeinheiten durch eine oder mehrere Brücken verbunden sein. Zusätzlich dazu können mehrere Logikeinheiten, Dies und Brücken in anderen möglichen Konfigurationen, einschließlich dreidimensionaler Konfigurationen, miteinander verbunden sein.
  • Beispielhafte integrierte System-on-Chip-Schaltung
  • 28-29B 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 AllzweckProzessorkerne.
  • 28 ist ein Blockdiagramm, das ein beispielhaftes System auf einem integrierten Chip-Schaltkreis 2800 veranschaulicht, der gemäß einer Ausführungsform unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann. Die beispielhafte integrierte Schaltung 2800 umfasst einen oder mehrere Anwendungsprozessor(en) 2805 (z. B. CPUs), mindestens einen Grafikprozessor 2810 und kann zusätzlich einen Bildprozessor 2815 und/oder einen Videoprozessor 2820 enthalten, von denen jeder modular sein kann IP-Core aus derselben oder mehreren verschiedenen Design-Einrichtungen. Die integrierte Schaltung 2800 weist Peripheriegerät-oder Buslogik einschließlich einer USB-STEUERUNG 2825, einer UART-STEUERUNG 2830, einer SPI/SDIO-STEUERUNG 2835 und einer I2S/I2C-Steuerung 2840 auf. Zusätzlich dazu kann die integrierte Schaltung eine Anzeigevorrichtung 2845 beinhalten, die mit einer High-Definition-Multimedia-Schnittstelle (HDMI) -Steuerung 2850 und/oder einer Mobilindustrieprozessorschnittstelle (MIPI) -Anzeigeschnittstelle 2855 gekoppelt ist. Die Speicherung kann durch ein Flash-Speichersubsystem 2860 bereitgestellt werden, das Flash-Speicher und eine Flash-Speichersteuerung beinhaltet. Eine Speicherschnittstelle kann über eine Speichersteuerung 2865 zum Zugriff auf SDRAM-oder SRAM-SPEICHERVORRICHTUNGEN bereitgestellt werden. Einige integrierte Schaltungen weisen zusätzlich eine eingebettete Sicherheits-Engine 2870 auf.
  • 29A-29B sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung in einem SoC gemäß hierin beschriebenen Ausführungsformen veranschaulichen. 29A veranschaulicht einen beispielhaften Grafikprozessor 2910 eines Systems auf einem integrierten Chip-Schaltkreis, der gemäß einer Ausführungsform unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann. 29B veranschaulicht einen zusätzlichen beispielhaften Grafikprozessor 2940 eines Systems auf einem integrierten Chip-Schaltkreis, der gemäß einer Ausführungsform unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann. Grafikprozessor 2910 von 29A ist ein Beispiel für einen Grafikprozessorkern mit niedrigem Stromverbrauch. Grafikprozessor 2940 von 29B ist ein Beispiel für einen Grafikprozessorkern mit höherer Leistung. Jeder der Grafikprozessoren 2910, 2940 kann Varianten des Grafikprozessors 2810 von. sein 28.
  • Wie in FIG. In 29A umfasst der Grafikprozessor 2910 einen Scheitelpunktprozessor 2905 und einen oder mehrere Fragmentprozessoren 2915A - 2915N (z. B. 2915A, 2915B, 2915C, 2915D bis 2915N-1 und 2915N). Der Grafikprozessor 2910 kann verschiedene Shader-Programme über separate Logik ausführen, sodass der Vertex-Prozessor 2905 zum Ausführen von Operationen für Vertex-Shader-Programme optimiert ist, während der eine oder die mehreren Fragment-Prozessoren 2915A-2915N Fragment(z. B. Pixel)-Shading-Operationen für Fragment- oder Pixel-Shader-Programme ausführen. Der Vertex-Prozessor 2905 führt die Vertex-Verarbeitungsstufe der 3D-Grafik-Pipeline aus und generiert Primitive und Vertexdaten. Der bzw. die Fragment-Prozessor(en) 2915A-2915N verwenden die durch den Vertex-Prozessor 2905 generierten Primitiven und Vertex-Daten, um einen Frame-Puffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. Bei einer Ausführungsform ist/sind der/die Fragment-Prozessor(en) 2915A-2915N dazu optimiert, Fragment-Shader-Programme, wie sie in der OpenGL-API bereitgestellt werden, auszuführen, die verwendet werden können, um ähnliche Operationen wie ein Pixel-Shader-Programm durchzuführen, wie es in der Direct-3D-API bereitgestellt wird.
  • Der Grafikprozessor 2910 enthält zusätzlich eine oder mehrere Speicher-Management-Einheiten (MMUs, Memory Management Units) 2920A-2920B, den/die Cache(s) 2925A-2925B und die Schaltung-Interconnect(s) 2930A-2930B. Die eine oder mehreren MMU(s) 2920A-2920B stellen eine Abbildung von virtuellen auf physische Adressen für den Grafikprozessor 2910 bereit, einschließlich für den Vertex-Prozessor 2905 und/oder den (die) Fragment-Prozessor(en) 2915A-2915N, die zusätzlich zu Vertex- oder Bild-/Texturdaten, die in dem einen oder den mehreren Caches 2925A-2925B gespeichert sind, Vertex- oder Bild-/Texturdaten referenzieren können, die im Speicher gespeichert sind. In einer Ausführungsform können die eine oder die mehreren MMU(s) 2920A-2920B mit anderen MMUs innerhalb des Systems synchronisiert werden, einschließlich einer oder mehrerer MMUs, die mit dem einen oder den mehreren Anwendungsprozessoren 2805, dem Bildprozessor 2815 und/oder dem Video verknüpft sind Prozessor 2820 von 28, so dass jeder Prozessor 2805 - 2820 an einem gemeinsam genutzten oder vereinheitlichten virtuellen Speichersystem teilnehmen kann. Die eine oder die mehreren Schaltungszwischenverbindungen 2930 A-2930 B ermöglichen gemäß Ausführungsformen, dass der Grafikprozessor 2910 mit anderen IP-KERNEN innerhalb des SoC eine Schnittstelle bildet, entweder über einen internen Bus des SoC oder über eine direkte Verbindung.
  • Wie in 29B enthält der Grafikprozessor 2940 die eine oder mehrere MMU(s) 2920A-2920B, Cache(s) 2925A-2925B und Schaltungsverbindung(en) 2930A-2930B des Grafikprozessors 2910 von 29A. Der Grafikprozessor 2940 weist einen oder mehrere Shader-Kerne 2955A-2955N (z. B. 2955A, 2955B, 2955C, 2955D, 2955E, 2955F, bis 2955N-1 und 2955N) auf, der für eine vereinheitlichte Shader-Kernarchitektur sorgt, in der ein einzelner Kern oder Typ oder Kern kann alle Arten von programmierbarem Shader-Code ausführen kann, einschließlich Shader-Programmcode zur Implementierung von Vertex-Shadern, Fragment-Shadern und/oder Compute-Shadern. Die genaue Anzahl der vorhandenen Shader-Kerne kann zwischen Ausführungsformen und Implementierungen variieren. Außerdem weist der Grafikprozessor 2940 einen Inter-Kern-Aufgabenmanager 2945 auf, der als ein Thread-Dispatcher zum Versenden von Ausführungs-Threads an einen oder mehrere Shader-Kerne 2955A-2955N und eine Kachelungseinheit 2958 zum Beschleunigen von Kacheloperationen für kachelbasiertes Rendering agiert, wobei die Rendering-Operationen für eine Szene in einen Bildraum unterteilt sind, um zum Beispiel lokale räumliche Kohärenz innerhalb einer Szene auszunutzen oder um die Verwendung von internen Caches zu optimieren.
  • In einigen Ausführungsformen umfasst eine Vorrichtung eine Vielzahl von Prozessoren, einschließlich einer Vielzahl von Grafikprozessoren, um Daten zu verarbeiten; eine Erinnerung; und einen oder mehrere Caches zum Speichern von Daten für die Mehrzahl von Grafikprozessoren, wobei der eine oder die mehreren Prozessoren eine Mehrzahl von Gruppen von Threads zur Verarbeitung durch die Mehrzahl von Grafikprozessoren planen sollen, wobei die Planung der Mehrzahl von Gruppen von Threads umfasst: wobei die mehreren Prozessoren eine Vorspannung zum Scheduling der mehreren Gruppen von Threads gemäß einer Cache-Lokalität für den einen oder die mehreren Caches anwenden.
  • In einigen Ausführungsformen ist der Bias ein Hinweis darauf, dass Gruppen von Threads gemäß der Cache-Lokalität für die Mehrzahl von Grafikprozessoren geplant werden sollen.
  • In einigen Ausführungsformen wird der Hinweis für Kernel mit regulären Zugriffsmustern bereitgestellt.
  • In einigen Ausführungsformen ist es nicht erforderlich, dass die mehreren Prozessoren den Hinweis implementieren, wenn eine Zeitüberschreitung vorliegt oder wenn die Implementierung des Hinweises die Leistung beeinträchtigen würde.
  • In einigen Ausführungsformen weist der Hinweis daraufhin, dass bei der Zuweisung der mehreren Gruppen von Threads einer oder mehreren Präferenzen gefolgt wird.
  • In einigen Ausführungsformen ist der Bias eine Behauptung, die erfordert, dass die mehreren Gruppen von Threads gemäß der Cache-Lokalität für die mehreren Grafikprozessoren geplant werden.
  • In einigen Ausführungsformen umfasst das Scheduling das Scheduling von Gruppen von Threads der Vielzahl von Gruppen von Threads auf einen einzelnen Unterblock von Blöcken von Thread-Gruppenzuweisungen.
  • In einigen Ausführungsformen sollen die mehreren Prozessoren, wenn die Gruppen von Threads voneinander abweichen, die Gruppen von Threads der mehreren Gruppen von Threads unabhängig planen.
  • 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 auszuführen, einschließlich: Empfangen einer Vielzahl von Gruppen von Threads für die Terminplanung; und Planen der Vielzahl von Thread-Gruppen unter einer Vielzahl von Grafikprozessoren, wobei das Planen der Vielzahl von Thread-Gruppen das Anwenden einer Vorspannung zum Planen der Vielzahl von Thread-Gruppen gemäß einer Cache-Lokalität für einen oder mehrere Caches umfasst.
  • In einigen Ausführungsformen ist der Bias ein Hinweis darauf, dass Gruppen von Threads gemäß der Cache-Lokalität für die Mehrzahl von Grafikprozessoren geplant werden sollen.
  • In einigen Ausführungsformen wird der Hinweis für Kernel mit regulären Zugriffsmustern bereitgestellt.
  • In einigen Ausführungsformen ist das Implementieren des Hinweises nicht erforderlich, wenn eine Zeitüberschreitung vorliegt oder wenn das Implementieren des Hinweises die Leistung beeinträchtigen würde.
  • In einigen Ausführungsformen weist der Hinweis daraufhin, dass bei der Zuweisung der mehreren Gruppen von Threads einer oder mehreren Präferenzen gefolgt wird.
  • In einigen Ausführungsformen ist der Bias eine Behauptung, die erfordert, dass die mehreren Gruppen von Threads gemäß der Cache-Lokalität für die mehreren Grafikprozessoren geplant werden.
  • In einigen Ausführungsformen umfasst das Scheduling das Scheduling von Gruppen von Threads der Vielzahl von Gruppen von Threads auf einen einzelnen Unterblock von Blöcken von Thread-Gruppenzuweisungen.
  • In einigen Ausführungsformen umfassen die Anweisungen ferner Anweisungen zum Planen der Gruppen von Threads der Vielzahl von Gruppen von Threads unabhängig davon, ob die Gruppen von Threads voneinander abweichen.
  • In einigen Ausführungsformen umfasst ein Verfahren das Empfangen einer Vielzahl von Gruppen von Threads zur Planung; und Planen der Vielzahl von Thread-Gruppen unter einer Vielzahl von Grafikprozessoren, wobei das Planen der Vielzahl von Thread-Gruppen das Anwenden einer Vorspannung zum Planen der Vielzahl von Thread-Gruppen gemäß einer Cache-Lokalität für einen oder mehrere Caches umfasst.
  • In einigen Ausführungsformen ist der Bias ein Hinweis darauf, dass Gruppen von Threads gemäß der Cache-Lokalität für die Mehrzahl von Grafikprozessoren geplant werden sollen.
  • In einigen Ausführungsformen wird der Hinweis für Kernel mit regulären Zugriffsmustern bereitgestellt.
  • In einigen Ausführungsformen ist das Implementieren des Hinweises nicht erforderlich, wenn eine Zeitüberschreitung vorliegt oder wenn das Implementieren des Hinweises die Leistung beeinträchtigen würde.
  • In einigen Ausführungsformen weist der Hinweis daraufhin, dass bei der Zuweisung der mehreren Gruppen von Threads einer oder mehreren Präferenzen gefolgt wird.
  • In einigen Ausführungsformen ist der Bias eine Behauptung, die erfordert, dass die mehreren Gruppen von Threads gemäß der Cache-Lokalität für die mehreren Grafikprozessoren geplant werden.
  • In einigen Ausführungsformen umfasst das Scheduling das Scheduling von Gruppen von Threads der Vielzahl von Gruppen von Threads auf einen einzelnen Unterblock von Blöcken von Thread-Gruppenzuweisungen.
  • In einigen Ausführungsformen umfasst das Verfahren ferner das Planen der Gruppen von Threads der Vielzahl von Gruppen von Threads unabhängig davon, ob die Gruppen von Threads voneinander abweichen.
  • In einigen Ausführungsformen umfasst eine Vorrichtung Mittel zum Empfangen einer Vielzahl von Gruppen von Threads zum Scheduling; und Mittel zum Planen der Vielzahl von Thread-Gruppen unter einer Vielzahl von Grafikprozessoren, wobei das Planen der Vielzahl von Thread-Gruppen das Anwenden einer Vorspannung zum Planen der Vielzahl von Thread-Gruppen gemäß einer Cache-Lokalität für einen oder mehrere Caches umfasst.
  • In einigen Ausführungsformen ist der Bias ein Hinweis darauf, dass Gruppen von Threads gemäß der Cache-Lokalität für die Mehrzahl von Grafikprozessoren geplant werden sollen.
  • In einigen Ausführungsformen wird der Hinweis für Kernel mit regulären Zugriffsmustern bereitgestellt.
  • In einigen Ausführungsformen ist das Implementieren des Hinweises nicht erforderlich, wenn eine Zeitüberschreitung vorliegt oder wenn das Implementieren des Hinweises die Leistung beeinträchtigen würde.
  • In einigen Ausführungsformen weist der Hinweis daraufhin, dass bei der Zuweisung der mehreren Gruppen von Threads einer oder mehreren Präferenzen gefolgt wird.
  • In einigen Ausführungsformen ist der Bias eine Behauptung, die erfordert, dass die mehreren Gruppen von Threads gemäß der Cache-Lokalität für die mehreren Grafikprozessoren geplant werden.
  • In einigen Ausführungsformen umfasst das Scheduling das Scheduling von Gruppen von Threads der Vielzahl von Gruppen von Threads auf einen einzelnen Unterblock von Blöcken von Thread-Gruppenzuweisungen.
  • In einigen Ausführungsformen umfasst die Vorrichtung ferner Mittel zum Planen der Gruppen von Threads der Vielzahl von Gruppen von Threads unabhängig davon, ob die Gruppen von Threads voneinander abweichen.
  • 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. In der Spezifikation bedeutet ein Bezug auf „eine Ausführungsform“, „manche Ausführungsformen“ oder „andere Ausführungsformen“, dass ein spezielles Merkmal, eine spezielle Struktur oder eine spezielle Charakteristik, das bzw. die in Verbindung mit den Ausführungsformen beschrieben wird, in zumindest einigen Ausführungsformen, aber nicht zwangsweise allen Ausführungsformen enthalten ist. Die verschiedenen Vorkommnisse von „einer Ausführungsform“ oder „manchen Ausführungsformen“ beziehen sich nicht immer notwendigerweise auf dieselben 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 16355130 [0001]
  • Zitierte Nicht-Patentliteratur
    • Software und Hardware für SIMT-Architekturen findet sich in Shane Cook, CUDA Programming Kapitel 3, Seiten 37-51 (2013) [0004]

Claims (22)

  1. Eine Einrichtung, die Folgendes umfasst: 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, das Folgendes umfasst: 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.
DE112020000854.1T 2019-03-15 2020-02-12 Thread-gruppen-planung für die grafikverarbeitung Pending DE112020000854T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/355,130 US11281496B2 (en) 2019-03-15 2019-03-15 Thread group scheduling for graphics processing
US16/355,130 2019-03-15
PCT/US2020/017995 WO2020190431A1 (en) 2019-03-15 2020-02-12 Thread group scheduling for graphics processing

Publications (1)

Publication Number Publication Date
DE112020000854T5 true DE112020000854T5 (de) 2021-12-09

Family

ID=69780351

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112020000854.1T Pending DE112020000854T5 (de) 2019-03-15 2020-02-12 Thread-gruppen-planung für die grafikverarbeitung

Country Status (4)

Country Link
US (3) US11281496B2 (de)
CN (1) CN113383313A (de)
DE (1) DE112020000854T5 (de)
WO (1) WO2020190431A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11709714B2 (en) 2019-03-15 2023-07-25 Intel Corporation Thread group scheduling for graphics processing

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11521042B2 (en) * 2019-05-21 2022-12-06 Anil Ravindranath System and method to dynamically and automatically sharing resources of coprocessor AI accelerators
US11513842B2 (en) * 2019-10-03 2022-11-29 International Business Machines Corporation Performance biased resource scheduling based on runtime performance
US11848980B2 (en) * 2020-07-09 2023-12-19 Boray Data Technology Co. Ltd. Distributed pipeline configuration in a distributed computing system
KR20230070515A (ko) * 2020-08-21 2023-05-23 주식회사 딥엑스 신경망 프로세싱 유닛
US11954757B2 (en) * 2021-12-28 2024-04-09 Advanced Micro Devices, Inc. Method and apparatus for implementing a rasterizer in GPU operations
CN115134658B (zh) * 2022-05-27 2024-05-14 阿里巴巴云计算(北京)有限公司 视频处理方法、装置、设备及存储介质

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6105053A (en) * 1995-06-23 2000-08-15 Emc Corporation Operating system for a non-uniform memory access multiprocessor system
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
US9189242B2 (en) * 2009-09-24 2015-11-17 Nvidia Corporation Credit-based streaming multiprocessor warp scheduling
US10013731B2 (en) * 2011-06-30 2018-07-03 Intel Corporation Maximizing parallel processing in graphics processors
US10255228B2 (en) * 2011-12-06 2019-04-09 Nvidia Corporation System and method for performing shaped memory access operations
US9176878B2 (en) 2012-03-15 2015-11-03 Oracle International Corporation Filtering pre-fetch requests to reduce pre-fetching overhead
GB2521155B (en) * 2013-12-10 2021-06-02 Advanced Risc Mach Ltd Configuring thread scheduling on a multi-threaded data processing apparatus
US10332229B2 (en) * 2014-05-12 2019-06-25 Palo Alto Research Center Incorporated System and method for high performance k-means clustering on GPU with smart kernels
US10223333B2 (en) 2014-08-29 2019-03-05 Nvidia Corporation Performing multi-convolution operations in a parallel processing system
US10796397B2 (en) * 2015-06-12 2020-10-06 Intel Corporation Facilitating dynamic runtime transformation of graphics processing commands for improved graphics performance at computing devices
US10055806B2 (en) * 2015-10-27 2018-08-21 Nvidia Corporation Techniques for maintaining atomicity and ordering for pixel shader operations
US10297073B2 (en) * 2016-02-25 2019-05-21 Intel Corporation Method and apparatus for in-place construction of left-balanced and complete point K-D trees
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
US10235735B2 (en) * 2017-04-10 2019-03-19 Intel Corporation Graphics processor with tiled compute kernels
US10346166B2 (en) * 2017-04-28 2019-07-09 Intel Corporation Intelligent thread dispatch and vectorization of atomic operations
US10565747B2 (en) * 2017-09-06 2020-02-18 Nvidia Corporation Differentiable rendering pipeline for inverse graphics
US11281496B2 (en) 2019-03-15 2022-03-22 Intel Corporation Thread group scheduling for graphics processing

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Software und Hardware für SIMT-Architekturen findet sich in Shane Cook, CUDA Programming Kapitel 3, Seiten 37-51 (2013)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11709714B2 (en) 2019-03-15 2023-07-25 Intel Corporation Thread group scheduling for graphics processing

Also Published As

Publication number Publication date
US20240028404A1 (en) 2024-01-25
US20220261289A1 (en) 2022-08-18
WO2020190431A1 (en) 2020-09-24
US11709714B2 (en) 2023-07-25
US20200293380A1 (en) 2020-09-17
CN113383313A (zh) 2021-09-10
US11281496B2 (en) 2022-03-22

Similar Documents

Publication Publication Date Title
DE112020001256T5 (de) Kompressionstechniken
DE102020130078A1 (de) Systolische arithmetik an spärlichen daten
DE112020000846T5 (de) Architektur für Block-Sparse-Operationen an einem systolischen Array
DE102018133555A1 (de) Berechnungsoptimierungsmechanismus für tiefe neuronale Netze
DE102020129251A1 (de) Adaptives verformbares kernvorhersagenetzwerk zum bildentrauschen
DE102018110380A1 (de) Tool zum Ermöglichen der Effizienz beim Maschinenlernen
DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
DE112020000464T5 (de) Mehrfachkachel-grafikprozessor-rendering
DE102020129970A1 (de) Systeme und verfahren zur fehlererkennung und steuerung für eingebettete arbeitsspeicher- und rechenelemente
DE102020130073A1 (de) Verbesserung der datenlokalität für grafikprozessoreinheiten
DE102020120372A1 (de) Programmierbare wandlungshardware
DE102018110371A1 (de) Intelligente speicherhandhabung und datenmanagement für maschinenlernnetzwerke
DE102018110687A1 (de) Dynamisches Genauigkeitsmanagement für Deep-Learning-Ganzzahlprimitive
DE112020000854T5 (de) Thread-gruppen-planung für die grafikverarbeitung
DE102020129969A1 (de) Verbesserungen der verarbeitung und des caching von graphikverarbeitungseinheiten
DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
DE102020131896A1 (de) Deep learning-basierte auswahl von abtastwerten für adaptives supersampling
DE102020132272A1 (de) Verfahren und vorrichtung zum codieren basierend auf schattierungsraten
CN113424169A (zh) 用于临时缓冲的片上密集存储器
DE112020000848T5 (de) Skalarkernintegration
DE102018110346A1 (de) Speichersystem für dnn-ausgaben für die black box
DE102020130184A1 (de) Optimierungsmechanismus mit spärlich besetzten matrizen
DE102020129432A1 (de) System und Verfahren zum Anpassen eines ausführbaren Objekts an eine Verarbeitungseinheit
DE102018110719A1 (de) Hardwareimplementierte Punkt-zu-Punkt-Kommunikationsprimitive zum Maschinenlernen
DE102020129409A1 (de) Dynamisches unterteilen von aktivierungen und kernels zum verbessern von speichereffizienz