DE102018110369A1 - Verbesserung autonomer maschinen durch cloud, fehlerkorrektur und vorhersagen - Google Patents

Verbesserung autonomer maschinen durch cloud, fehlerkorrektur und vorhersagen Download PDF

Info

Publication number
DE102018110369A1
DE102018110369A1 DE102018110369.7A DE102018110369A DE102018110369A1 DE 102018110369 A1 DE102018110369 A1 DE 102018110369A1 DE 102018110369 A DE102018110369 A DE 102018110369A DE 102018110369 A1 DE102018110369 A1 DE 102018110369A1
Authority
DE
Germany
Prior art keywords
data
graphics
processor
logic
memory
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
DE102018110369.7A
Other languages
English (en)
Inventor
Brian T. Lewis
Feng Chen
Jeffrey R. Jackson
Justin E. Gottschlich
Rajkishore Barik
Xiaoming Chen
Prasoonkumar Surti
Murali Sundaresan
Mike B. MacPherson
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 DE102018110369A1 publication Critical patent/DE102018110369A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B60VEHICLES IN GENERAL
    • B60WCONJOINT CONTROL OF VEHICLE SUB-UNITS OF DIFFERENT TYPE OR DIFFERENT FUNCTION; CONTROL SYSTEMS SPECIALLY ADAPTED FOR HYBRID VEHICLES; ROAD VEHICLE DRIVE CONTROL SYSTEMS FOR PURPOSES NOT RELATED TO THE CONTROL OF A PARTICULAR SUB-UNIT
    • B60W30/00Purposes of road vehicle drive control systems not related to the control of a particular sub-unit, e.g. of systems using conjoint control of vehicle sub-units
    • B60W30/08Active safety systems predicting or avoiding probable or impending collision or attempting to minimise its consequences
    • B60W30/095Predicting travel path or likelihood of collision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/004Artificial life, i.e. computing arrangements simulating life
    • G06N3/008Artificial life, i.e. computing arrangements simulating life based on physical entities controlled by simulated intelligence so as to replicate intelligent life forms, e.g. based on robots replicating pets or humans in their appearance or behaviour
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G01MEASURING; TESTING
    • G01CMEASURING DISTANCES, LEVELS OR BEARINGS; SURVEYING; NAVIGATION; GYROSCOPIC INSTRUMENTS; PHOTOGRAMMETRY OR VIDEOGRAMMETRY
    • G01C21/00Navigation; Navigational instruments not provided for in groups G01C1/00 - G01C19/00
    • G01C21/26Navigation; Navigational instruments not provided for in groups G01C1/00 - G01C19/00 specially adapted for navigation in a road network
    • G01C21/34Route searching; Route guidance

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Neurology (AREA)
  • Robotics (AREA)
  • Automation & Control Theory (AREA)
  • Mechanical Engineering (AREA)
  • Transportation (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)
  • Business, Economics & Management (AREA)
  • Game Theory and Decision Science (AREA)
  • Medical Informatics (AREA)
  • Aviation & Aerospace Engineering (AREA)
  • Radar, Positioning & Navigation (AREA)
  • Remote Sensing (AREA)

Abstract

Beschrieben ist ein Mechanismus zur Ermöglichung einer intelligenten Sammlung von Daten und zur intelligenten Verwaltung von autonomen Maschinen. Ein Verfahren von Ausführungsformen, wie hierin beschrieben, beinhaltet das Erkennen eines oder mehrerer Sätze von Daten von einer oder mehreren Quellen über ein oder mehrere Netzwerke, und das Kombinieren einer ersten Berechnung, die lokal an einer lokalen Rechenvorrichtung ausgeführt wird, mit einer zweiten Berechnung, die entfernt an einer entfernten Rechenvorrichtung in Kommunikation mit der lokalen Rechenvorrichtung über das eine oder die mehreren Netzwerke ausgeführt wird, wobei die erste Berechnung wenig Energie verbraucht, wobei die zweite Berechnung viel Energie verbraucht.

Description

  • TECHNISCHES GEBIET
  • Hierin beschriebene Ausführungsformen betreffen im Allgemeinen die Datenverarbeitung und genauer die Ermöglichung von verbesserten autonomen Maschinen durch Cloud, Fehlerkorrektur und Vorhersagen.
  • Hintergrund
  • Die aktuelle parallele Grafikdatenverarbeitung beinhaltet Systeme und Verfahren, die entwickelt wurden, um spezifische Operationen an Grafikdaten auszuführen, wie beispielsweise lineare Interpolation, Tessellation, Rasterisierung, Texturabbildung, Tiefentest usw. Herkömmlicherweise haben Grafikprozessoren Berechnungseinheiten mit fester Funktion verwendet, um Grafikdaten zu verarbeiten; In jüngster Zeit wurden Teile von Grafikprozessoren jedoch programmierbar gemacht, wodurch solche Prozessoren in die Lage versetzt werden, eine größere Vielfalt an Operationen zur Verarbeitung von Vertex- und Fragmentdaten zu unterstützen.
  • Um die Leistung weiter zu verbessern, implementieren Grafikprozessoren typischerweise Verarbeitungstechniken wie das Pipelining, die versuchen, 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 synchron so oft wie möglich synchron, um die Verarbeitungseffizienz zu erhöhen. Ein allgemeiner Überblick über Software und Hardware für SIMT-Architekturen ist in Shane Cook, CUDA Programming, Kapitel 3, S. 37-51 (2013) und/oder Nicholas Wilt, CUDA Handbook, A Comprehensive Guide to GPU Programming, Abschnitt 2.6.2 bis 3.1.2 (Juni 2013), zu finden.
  • 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 synchron so oft wie möglich synchron, 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.
  • Herkömmliche Techniken zum autonomen Fahren führen all ihre Berechnungen in Fahrzeugen aus, was sich negativ auf die Systemleistung und die Latenz auswirkt, da in jedem gegebenen Fahrzeug nur eine begrenzte Menge an Energie verfügbar ist. Im Hinblick auf Fehlercodes erfordern herkömmliche Techniken ferner Techniken und anderes Fachwissen im Bereich der elektrischen Komponenten, Kraftstoff usw. von spezifischen Automodellen, um Codes decodieren und Fehler beheben zu können. Darüber hinaus herkömmliche Techniken einer intelligente Routenführung in Bezug auf die Optimierung der Routen auf der Grundlage des aktuellen Status der Fahrzeugteile und Komponenten wie Batterie usw.
  • Figurenliste
  • Ausführungsformen sind beispielhaft und nicht einschränkend in den Figuren der beigefügten Zeichnungen dargestellt, in denen sich gleiche Bezugszeichen auf ähnliche Elemente beziehen. Für ein ausführlicheres Verständnis der oben genannten Merkmale kann eine genauere Beschreibung, die oben kurz zusammengefasst wurde, unter Bezugnahme auf Ausführungsformen erhalten werden, von denen einige in den beigefügten Zeichnungen dargestellt sind. Es sei jedoch angemerkt, dass die beigefügten Zeichnungen nur typische Ausführungsformen darstellen und daher nicht als Einschränkung ihres Umfangs zu betrachten sind, da die Zeichnungen andere gleich wirksame Ausführungsformen darstellen können.
    • 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 Komponenten eines Parallelprozessors gemäß einer Ausführungsform der Erfindung.
    • 3A-3B sind Blockdiagramme von Grafikmultiprozessoren gemäß Ausführungsformen.
    • 4A-4F veranschaulichen eine beispielhafte Architektur, in der eine Vielzahl von Grafikverarbeitungseinheiten kommunikativ mit einer Vielzahl von Multi-Kern-Prozessoren gekoppelt sind.
    • 5 ist ein konzeptuelles Diagramm einer Grafikverarbeitungs-Pipeline gemäß einer Ausführungsform.
    • 6 veranschaulicht eine Rechenvorrichtung, die einen Mechanismus zur intelligenten Verwaltung von autonomen Maschinen hostet, gemäß einer Ausführungsform.
    • 7 veranschaulicht einen Mechanismus zur intelligenten Verwaltung von autonomen Maschinen gemäß einer Ausführungsform.
    • 8A veranschaulicht ein neues Framework zur Ermöglichung einer intelligenten Sammlung von Daten und zur Verwaltung von autonomen Maschinen gemäß einer Ausführungsform.
    • 8B veranschaulicht ein neues Framework zur Ermöglichung einer intelligenten Sammlung von Daten und zur Verwaltung von autonomen Maschinen gemäß einer Ausführungsform.
    • 9 veranschaulicht ein Verfahren zum Bereitstellen einer intelligenten Sammlung von Daten und zur Verwaltung von autonomen Maschinen gemäß einer Ausführungsform.
    • 10 veranschaulicht einen Softwarestapel zum Maschinenlernen gemäß einer Ausführungsform.
    • 11 veranschaulicht eine hoch parallele Universal-Grafikverarbeitungseinheit gemäß einer Ausführungsform.
    • 12 veranschaulicht ein Multi-GPU-Rechensystem gemäß einer Ausführungsform.
    • 13A-13B veranschaulichen Schichten von beispielhaften tiefen neuronalen Netzwerken.
    • 14 veranschaulicht das Training und den Einsatz eines tiefen neuronalen Netzwerks.
    • 15 veranschaulicht das Training und den Einsatz eines tiefen neuronalen Netzwerks.
    • 16 ist ein Bockdiagramm, das ein verteiltes Lernen veranschaulicht.
    • 17 veranschaulicht ein beispielhaftes Inferenzsystem auf einem Chip (SOC), das zum Ausführen einer Interferenz unter Verwendung eines trainierten Modells geeignet ist.
    • 18 ist ein Blockdiagramm einer Ausführungsform eines Computersystems mit einem Prozessor, der einen oder mehrere Prozessorkerne und Grafikprozessoren aufweist.
    • 19 ist ein Blockdiagramm einer Ausführungsform eines Prozessors, der einen oder mehrere Prozessorkerne, eine integrierte Speichersteuerung und einen integrierten Grafikprozessor aufweist.
    • 20 ist ein Blockdiagramm einer Ausführungsform eines Grafikprozessors, der eine diskrete Grafikverarbeitungseinheit sein kann oder ein Grafikprozessor sein kann, der mit einer Vielzahl von Prozessorkernen integriert ist.
    • 21 ist ein Blockdiagramm einer Ausführungsform einer Grafikverarbeitungs-Engine für einen Grafikprozessor.
    • 22 ist ein Blockdiagramm einer anderen Ausführungsform eines Grafikprozessors.
    • 23 ist ein Blockdiagramm einer Thread-Ausführungslogik, die eine Anordnung von Verarbeitungselementen aufweist.
    • 24 veranschaulicht ein Anweisungsformat einer Grafikprozessorausführungseinheit gemäß einer Ausführungsform.
    • 25 ist ein Blockdiagramm einer anderen Ausführungsform eines Grafikprozessors, der eine Grafik-Pipeline, eine Medien-Pipeline, eine Anzeige-Engine, eine Thread-Ausführungslogik und eine Render-Ausgabe-Pipeline aufweist.
    • 26A ist ein Blockdiagramm eines Befehlsformats eines Grafikprozessors gemäß einer Ausführungsform.
    • 26B ist ein Blockdiagramm einer Befehlsfolge eines Grafikprozessors einer Ausführungsform.
    • 27 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem gemäß einer Ausführungsform.
    • 28 ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem veranschaulicht, das zur Herstellung einer integrierten Schaltung zur Ausführung von Operationen verwendet werden kann.
    • 29 ist ein Blockdiagramm, das eine beispielhafte integrierte Schaltung eines Systems auf einem Chip veranschaulicht, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform.
    • 30 ist ein Blockdiagramm, das einen beispielhaften Grafikprozessor einer integrierten Schaltung eines Systems auf einem Chip veranschaulicht.
    • 31 ist ein Blockdiagramm, das einen weiteren beispielhaften Grafikprozessor einer integrierten Schaltung eines Systems auf einem Chip veranschaulicht.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Ausführungsformen ermöglichen das Kombinieren von Fahrzeugmotoren mit Cloud-basierten Systemen, um schnellere und effizientere Berechnungen bereitzustellen. Ausführungsformen bieten ferner eine automatische Decodierung und Behebung von Fehlern. Ausführungsformen stellen ferner eine dynamische Optimierung von Routen basierend auf dem aktuellen Status oder historischen Kenntnissen von einem oder mehreren Fahrzeugteilen und -komponenten wie Batterielebensdauer usw. bereit. Es sei angemerkt, dass Begriffe oder Akronyme wie „faltendes neuronales Netzwerk“, „CNN“, „neuronales Netzwerk“, „NN“, „tiefes neuronales Netzwerk“, „DNN“, „rekurrentes neuronales Netzwerk“, „RNN“ und/oder dergleichen in diesem Dokument austauschbar referenziert werden. Ferner können Begriffe wie „autonome Maschine“ oder einfach „Maschine“, „autonomes Fahrzeug“ oder einfach „Fahrzeug“, „autonomer Agent“ oder einfach „Agent“, „autonome Vorrichtung“ oder „Rechenvorrichtung“, „Roboter“ und/oder dergleichen durchgängig in diesem Dokument austauschbar referenziert werden.
  • 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 eine andere Verbindung (z. B. eine Hochgeschwindigkeitsverbindung wie PCIe oder NVLink) kommunikativ mit dem Hostprozessor/den Kernen verbunden sein. In anderen Ausführungsformen kann die GPU auf dem gleichen Gehäuse oder Chip wie die Kerne integriert sein und kommunikativ mit den Kernen über eine interne Prozessorbus/-verbindung (d. h. innerhalb des Gehäuses oder Chips) 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 Sequenzen von Befehlen/Anweisungen zuweisen, die in einem Arbeitsdeskriptor enthalten sind. Die GPU verwendet dann dedizierte Schaltungen/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
  • In der folgenden Beschreibung sind zahlreiche spezifische Einzelheiten dargelegt. Allerdings können Ausführungsformen wie hierin beschrieben ohne diese spezifischen Einzelheiten umgesetzt werden. In anderen Fällen wurden wohl bekannte Schaltungen, Strukturen und Techniken nicht im Detail gezeigt, um das Verständnis für diese Beschreibung nicht zu verschleiern.
  • Systemübersicht I
  • 1 ist ein Blockdiagramm, das ein Rechensystem 100 veranschaulicht, das zum Implementieren eines oder mehrerer Aspekte der hierin beschriebenen Ausführungsformen konfiguriert ist. Das Rechensystem 100 weist ein Verarbeitungssubsystem 101 mit einem oder mehreren Prozessor(en) 102 und einem Systemspeicher 104 auf, die über einen Verbindungspfad kommunizieren, der einen Speicherhub 105 aufweisen kann. 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 I/O-Subsystem 111 gekoppelt. Das I/O-Subsystem 111 weist einen I/O-Hub 107 auf, der das Rechensystem 100 in die Lage versetzen kann, eine Eingabe von einer oder mehreren Eingabevorrichtungen 108 zu empfangen. Außerdem kann der I/O-Hub 107 eine Anzeigesteuerung, die in dem einen oder den mehreren Prozessor(en) 102 enthalten sein kann, in die Lage versetzen, einer oder mehreren Anzeigevorrichtung(en) 110A bereitzustellen. In einer Ausführungsform können die eine oder die mehreren Anzeigevorrichtung(en) 110A, die mit dem I/O-Hub 107 gekoppelt sind, eine lokale, interne oder eingebettete Anzeigevorrichtung einschließen.
  • In einer Ausführungsform weist das Verarbeitungssubsystem 101 einen oder mehrere Parallelprozessoren 112 auf, die über einen Bus oder eine andere Kommunikationsverbindung 113 mit dem Speicherhub 105 gekoppelt sind. Die Kommunikationsverbindung 113 kann eine von einer beliebigen Anzahl von auf Standards basierenden Kommunikationsverbindungstechnologien oder -protokollen sein, wie, jedoch nicht darauf beschränkt, PCI Express, oder kann eine anbieterspezifische Kommunikationsschnittstelle oder eine Kommunikationsstruktur sein. In einer Ausführungsform bilden der eine oder die mehreren Parallelprozessoren 112 ein rechnerisch fokussiertes Parallel- oder Vektorverarbeitungssystem, das eine große Anzahl von Verarbeitungskernen und/oder Verarbeitungsclustern aufweist, wie einen MIC (Many Integratred Core) -Prozessor. In einer Ausführungsform bilden der eine oder die mehreren Parallelprozessoren 112 ein Grafikverarbeitungssubsystem, das Pixel an eine der einen oder mehreren Anzeigevorrichtung(en) 110A ausgeben kann, die über den I/O-Hub 107 gekoppelt sind. 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 Anzeigevorrichtungen 110B zu ermöglichen.
  • Innerhalb des I/O-Subsystems 111 kann eine Systemspeichereinheit 114 eine Verbindung mit dem I/O-Hub 107 herstellen, um einen Speichermechanismus für das Rechensystem 100 bereitzustellen. Ein I/O-Schalter 116 kann verwendet werden, um einen Schnittstellenmechanismus bereitzustellen, um Verbindungen zwischen dem I/O-Hub 107 und anderen Komponenten wie einem Netzwerkadapter 118 und/oder einem drahtlosen Netzwerkadapter 119, die in die Plattform integriert sein können, und verschiedenen anderen Vorrichtungen zu ermöglichen, die über ein oder mehrere Add-In-Vorrichtung(en) 120 hinzugefügt werden können. 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. Kommunikationspfade, die die verschiedenen Komponenten in 1 verbinden, können unter Verwendung beliebiger geeigneter Protokolle implementiert werden, wie PCI (Peripheral Component Interconnect) -basierte Protokolle (z. B. PCI-Express) oder beliebige andere Bus- oder Punkt-zu-Punkt-Kommunikationsschnittstellen und/oder Protokoll(e) wie die NV-Link-Hochgeschwindigkeitsverbindung oder Verbindungsprotokolle, die im Stand der Technik bekannt sind.
  • 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 Parallelprozessor(en) 112, der Speicher-Hub 105, der/die Prozessor(en) 102 und der I/O-Hub 107 in eine integrierte Schaltung eines Systems auf einem Chip (System-on-Chip - SoC) 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 den in 1 dargestellten ähnlich sind. 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 zeigt 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 veranschaulichte Parallelprozessor 200 ist eine Variante des einen oder der mehreren Parallelprozessor(en) 112, die in 1 dargestellt sind, 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.
  • 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. Zum Beispiel kann ein erster Abschnitt konfiguriert sein, ein Vertex-Shading eine Topologiegenerierung auszuführen, ein zweiter Abschnitt kann konfiguriert sein, eine Tessellation und eine Geometrieschattierung auszuführen, und ein dritter Abschnitt kann konfiguriert sein, ein Pixel-Shading oder andere Bildschirmraumoperationen auszuführen, um ein gerendertes Bild zur Anzeige zu erzeugen. Zwischendaten, die von einem oder mehreren der Cluster 214A bis 214N erzeugt werden, können in Puffern gespeichert werden, um zu ermöglichen, dass die Zwischendaten zwischen 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. In einer Implementierung ist die Anzahl von Partitionseinheiten 220A bis 220N derart konfiguriert, dass sie gleich der Anzahl von Speichereinheiten ist, sodass eine erste Partitionseinheit 220A eine entsprechende erste Speichereinheit 224A aufweist, eine zweite Partitionseinheit 220B eine entsprechende Speichereinheit 224B 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. In einer Ausführungsform hat die Speicher-Crossbar 216 eine Verbindung mit der Speicherschnittstelle 218, um mit der I/O-Einheit 204 zu kommunizieren, sowie eine Verbindung mit einer lokalen Instanz des Parallelprozessorspeichers 222, wodurch die Verarbeitungseinheiten innerhalb der verschiedenen Verarbeitungs-Cluster 214A bis 214N mit dem Systemspeicher oder einem anderen Speicher kommunizieren, der für die Parallelverarbeitungseinheit 202 nicht lokal ist. In einer Ausführungsform kann die Speicher-Crossbar 216 virtuelle Kanäle verwenden, um Verkehrsströme zwischen den Clustern 214A bis 214N und den Partitionseinheiten 220A bis 220N 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. Zum Beispiel können in einer Ausführungsform einige Instanzen der Parallelverarbeitungseinheit 202 präzisere Gleitkommaeinheiten im Vergleich zu anderen Instanzen aufweisen. Systeme, die eine oder mehrere Instanzen der Parallelverarbeitungseinheit 202 oder des Parallelprozessors 200 aufweisen, können in einer Vielzahl von Konfigurationen und Formfaktoren implementiert werden, einschließlich, jedoch nicht beschränkt auf Desktop-, Laptop- oder Handheld-Personalcomputer, Server, Workstations, Spielkonsolen und/oder eingebettete Systeme.
  • 2B ist ein Blockdiagramm einer Partitionseinheit 220 gemäß einer Ausführungsform. In einer Ausführungsform ist die Partitionseinheit 220 eine Instanz einer der Partitionseinheiten 220A bis 220N aus 2B. 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. Dirty-Updates können auch über die Rahmenpuffer-Schnittstelle 225 zur opportunistischen Verarbeitung an den Rahmenpuffer gesendet werden. In einer Ausführungsform ist die Rahmenpuffer-Schnittstelle 225 mit einer der Speichereinheiten in einem Parallelprozessorspeicher wie den Speichereinheiten 224A bis 224N aus 2A (z. B. innerhalb des Parallelprozessorspeichers 222) verbunden.
  • 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 weist die ROP 226 eine Komprimierungslogik zum Komprimieren von z- oder Farbdaten, die in den Speicher geschrieben werden, und zum Dekomprimieren von z- oder Farbdaten auf, die aus dem Speicher gelesen werden. In einigen Ausführungsformen ist die ROP 226 innerhalb jedes Verarbeitungsclusters (z. B. Cluster 214A bis 214N aus 2A) anstelle innerhalb der Partitionseinheit 220 enthalten. 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 wie einer der einen oder mehreren Anzeigevorrichtung(en) 110 aus 1 angezeigt werden, zur weiteren Verarbeitung durch den bzw. die Prozessor(en) 102 geroutet werden oder für die weitere Verarbeitung durch eine der Verarbeitungseinheiten innerhalb des Parallelprozessors 200 aus 2A geroutet werden.
  • 2C ist ein Blockdiagramm eines Verarbeitungs-Clusters 214 innerhalb einer Parallelverarbeitungseinheit gemäß einer Ausführungsform. In einer Ausführungsform ist der Verarbeitungs-Cluster eine Instanz einer der Verarbeitungs-Cluster 214A bis 214N aus 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 von dem Scheduler 210 aus 2A und verwaltet die Ausführung dieser Anweisungen über einen Grafikmultiprozessor 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 durch Spezifizieren von Zielen für verarbeitete Daten, die über die Daten-Crossbar 240 verteilt werden sollen, erleichtern.
  • 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 kann bereitgestellt werden. Die Funktionslogik unterstützt verschiedene Operationen, einschließlich arithmetischer Ganzzahl- und Gleitkomma-Vergleichsoperationen, Boolescher Operationen, Bitverschiebung und Berechnung verschiedener algebraischer Funktionen. In einer Ausführungsform kann die gleiche Hardware von Funktionseinheiten genutzt werden, um verschiedene Operationen auszufü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 enthält als die Anzahl von Verarbeitungs-Engines innerhalb des Grafikmultiprozessors 234 aufweist, kann die Verarbeitung über aufeinanderfolgende Taktzyklen ausgefü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 Cachespeicher auf, um Lade- und Speicheroperationen auszuführen. In einer Ausführungsform kann der Grafikmultiprozessor 234 auf einen internen Cache verzichten und einen Cachespeicher (z. B. L1-Cache 308) innerhalb des Verarbeitungs-Clusters 214 verwenden. Jeder Grafikmultiprozessor 234 hat auch Zugriff auf L2-Caches innerhalb der Partitionseinheiten (z. B. Partitionseinheiten 220A bis 220N aus 2A), die von allen Verarbeitungs-Clustern 214 gemeinsam genutzt werden und zur Übertragung von Daten zwischen Threads verwendet werden können. 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 308 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 innerhalb der Speicherschnittstelle 218 aus 2A befinden. Die MMU 245 weist einen Satz von Seitentabelleneinträgen (PTEs), die verwendet werden, um eine virtuelle Adresse in eine physikalischen Adresse einer Kachel (mehr über Kacheln) abzubilden, und wahlweise einen Cachezeilenindex auf. 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-Operationseinheit) ist konfiguriert, Daten von dem Grafikmultiprozessor 234 zu empfangen, Daten an ROP-Einheiten zu leiten, die mit Partitionseinheiten wie hierin beschrieben angeordnet sein können (z. B. Partitionseinheiten 220A bis 220N aus 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 Grafikmultiprozessor 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 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 324 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 324 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 324 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 324 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 weist ein erster Abschnitt der GPGPU-Kerne 262 eine FPU mit einfacher Genauigkeit und eine Ganzzahl-ALU auf, während ein zweiter Abschnitt der GPGPU-Kerne eine FPU mit doppelter Genauigkeit aufweist. In einer Ausführungsform können die FPUs den IEEE 754-2008-Standard für Gleitkomma-Arithmetik implementieren oder Gleitkomma-Arithmetik mit variabler Genauigkeit aktivieren. Der Grafikmultiprozessor 324 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.
  • Die Speicher- und Cache-Verbindung 268 ist ein Verbindungsnetzwerk, das jede der Funktionseinheiten des Grafikmultiprozessors 324 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 bis 3B veranschaulichen weitere Grafikmultiprozessoren gemäß Ausführungsformen. Die dargestellten Grafikmultiprozessoren 325, 350 sind Varianten des Grafikmultiprozessors 234 aus 2C. Die dargestellten Grafikmultiprozessoren 325, 350 können als Streaming-Multiprozessor (SM) konfiguriert sein, der eine gleichzeitige Ausführung einer großen Anzahl von Ausführungs-Threads ermöglicht.
  • 3A zeigt einen Grafikmultiprozessor 325 gemäß einer weiteren Ausführungsform. Der Grafikmultiprozessor 325 weist mehrere zusätzliche Instanzen von Ausführungs-Ressourceneinheiten im Vergleich zu dem Grafikmultiprozessor 234 aus 2D auf. 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 weist auch mehrere Sätze von Grafik- oder Rechenausführungseinheiten (z. B. GPGPU-Kern 336A-336B, GPGPU-Kern 337A-337B, GPGPU-Kern 338A-338B) und mehrere Sätze von Lade-/Speichereinheiten 340A-340B auf. 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.
  • 3B zeigt einen Grafikmultiprozessor 350 gemäß einer weiteren Ausführungsform. Der Grafikprozessor weist mehrere Sätze von Ausführungsressourcen 356A-356D auf, wobei jeder Satz von Ausführungsressourcen mehrere Anweisungseinheiten, Registerdateien, GPGPU-Kerne und Lade-Speichereinheiten aufweist, wie in 2D und 3A dargestellt. Die Ausführungsressourcen 356A-356D können für Texturoperationen mit Textureinheit(en) 360A-360D zusammenarbeiten, während sie einen Anweisungscache 354 und einen geteilten Speicher 362 teilen. In einer Ausführungsform können die Ausführungsressourcen 356A-356D einen Anweisungscache 354 und einen gemeinsam genutzten Speicher 362 sowie mehrere Instanzen eines Textur- und/oder Datencachespeichers 358A-358B gemeinsam nutzen. Die verschiedenen Komponenten können über ein Verbindungs-Fabric 352 ähnlich der Verbindungsstruktur 327 von 3A kommunizieren.
  • Der Fachmann wird verstehen, dass die in 1, 2A-2D und 3A-3B beschriebene Architektur beschreibend ist und den Schutzumfang der vorliegenden Ausführungsformen nicht einschränkt. Somit können die hierin beschriebenen Techniken in einer beliebigen geeignet konfigurierten Verarbeitungseinheit implementiert sein, einschließlich ohne Einschränkung eines oder mehrerer mobiler Anwendungsprozessoren, einer oder mehrerer zentraler Desktop- oder Server-Verarbeitungseinheiten (CPUs) einschließlich Multi-Kern-CPUs, einer oder mehrerer Parallelverarbeitungseinheit wie der Parallelverarbeitungseinheit 202 aus 2A sowie eines oder mehrere Grafikprozessoren oder Spezialverarbeitungseinheiten, ohne vom Schutzumfang der hierin beschriebenen Ausführungsformen abzuweichen.
  • In einigen Ausführungsformen ist ein Parallelprozessor oder GPGPU, wie hierin beschrieben, kommunikativ mit Host-/Prozessorkernen gekoppelt, um Grafikoperationen, Maschinenlernoperationen, Musteranalyseoperationen und verschiedene allgemeine GPU- (GPGPU-) Funktionen zu beschleunigen. Die GPU kann über einen Bus oder eine andere Verbindung (z. B. eine Hochgeschwindigkeitsverbindung wie etwa PCIe oder NVLink) kommunikativ mit dem Hostprozessor/den Kernen verbunden sein. In anderen Ausführungsformen kann die GPU auf dem gleichen Gehäuse oder Chip wie die Kerne integriert sein und kommunikativ mit den Kernen über eine interne Prozessorbus/-verbindung (d. h. innerhalb des Gehäuses oder Chips) 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 Sequenzen von Befehlen/Anweisungen zuweisen, die in einem Arbeitsdeskriptor enthalten sind. Die GPU verwendet dann dedizierte Schaltungen/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
  • Techniken zur Verbindung von GPU zu Hostprozessor
  • 4A zeigt eine beispielhafte Architektur, in der eine Vielzahl von GPUs 410-413 über Hochgeschwindigkeitsverbindungen 440-443 (z. B. Busse, Punkt-zu-Punkt-Verbindungen usw.) kommunikativ mit einer Vielzahl von Multi-Kern-Prozessoren 405-406 gekoppelt sind). In einer Ausführungsform unterstützen die Hochgeschwindigkeitsverbindungen 440-443 je nach Implementierung einen Kommunikationsdurchsatz von 4 GB/s, 30 GB/s, 80 GB/s oder mehr. 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.
  • Zusätzlich sind in einer Ausführungsform zwei oder mehr der GPUs 410-413 über Hochgeschwindigkeitsverbindungen 444-445 miteinander verbunden, die unter Verwendung der gleichen oder anderer Protokolle/Verbindungen implementiert werden können als diejenigen, die für die Hochgeschwindigkeitsverbindungen 440-443 verwendet werden. In ähnlicher Weise können zwei oder mehrere der Multi-Kern-Prozessoren 405-406 über eine Hochgeschwindigkeitsverbindung 433 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 kann die gesamte Kommunikation zwischen den verschiedenen Systemkomponenten, die in 4A dargestellt sind, unter Verwendung der gleichen Protokolle/Verbindungen (z. B. über ein gemeinsames Verbindungs-Fabric) 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 Multi-Kern-Prozessor 405-406 über Speicherverbindungen 430-431 kommunikativ mit einem Prozessorspeicher 401-402 verbunden, und jede GPU 410-413 ist kommunikativ über GPU-Speicherverbindungen 450-453 mit jeweiligem GPU-Speicher 420-423 gekoppelt. Die Speicherverbindungen 430-431 und 450-453 können die gleiche oder unterschiedliche Speicherzugriffstechnologien verwenden. 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 zeigt weitere Details für eine Verbindung zwischen einem Multi-Kern-Prozessor 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 Vielzahl 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 426 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 eine Konnektivität zu der Proxy-Schaltung 425 über die Hochgeschwindigkeitsverbindung 440 bereit (z. B. einen PCIe-Bus, NVLink usw.), und eine Schnittstelle 437 verbindet das Grafikbeschleunigungsmodul 446 mit der Verbindung 440.
  • In einer Implementierung stellt eine Beschleunigerintegrationsschaltung 436 Cacheverwaltungs-, Speicherzugriffs-, Kontextverwaltungs- und Unterbrechungsverwaltungsdienste im Auftrag einer Vielzahl von Grafikprozessor-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 Vielzahl 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 Grafikprozessor-Engines 431-432, N. In einer Ausführungsform werden die im Cache 438 und den Grafikspeichern 433-434, N gespeicherten Daten zu den Kerncaches 462A-462D, 456 und Systemspeicher 411 kohärent gehalten. Wie erwähnt, kann dies über die Proxy-Schaltung 425 erfolgen, die an dem Cache-Kohärenzmechanismus im Auftrag des Caches 438 und der Speicher 433-434, N beteiligt ist (z. B. Senden von Aktualisierungen an den Cache 438 in Bezug auf Modifikationen/Zugriffe von Cachezeilen auf den Prozessorcaches 462A-462D, 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 zum Reduzieren des Datenverkehrs über die Verbindung 440 Bias-Techniken angewendet, um sicherzustellen, dass die in den Grafikspeichern 433-434, M gespeicherten Daten Daten sind, die am häufigsten von den Grafikprozessor-Engines 431-432, N verwendet werden und vorzugsweise nicht von den Kernen 460A-460D verwendet werden (zumindest nicht häufig). 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 zeigt 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 Beschleunigerintegrationsschaltung 436 kann die gleichen Operationen wie jene ausführen, die in Bezug auf 4B beschrieben wurden, jedoch potentiell bei einem höheren Durchsatz, da sie sich nahe zu dem Kohärenzbus 462 und den Caches 462A-462D, 426 befinden.
  • 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 zeigt eine beispielhafte Beschleunigerintegrationsschicht 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 446 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 Zeiger für Kontext-Speichern/Wiederherstellen für Effective Adress (EA)
    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 zeigt 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) Einer 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 Bereichszeiger für Kontext-Speichern/Wiederherstellen (CSRP) für Effective Adress (EA)
    4 Eine Prozess-ID (PID) und optionale Thread-ID (TID)
    5 Ein Zeiger für Aufzeichnung von Virtual Address (VA) - Beschleunigernutzung
    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 Bereichszeiger für Kontext-Speichern/Wiederherstellen (CSRP) für Effective Adress (EA)
    4 Eine Prozess-ID (PID) und optionale Thread-ID (TID)
    5 Ein Zeiger für Aufzeichnung von Virtual Address (VA) - Beschleunigernutzung
    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 Vielzahl von Registern 445 des Beschleunigerintegrations-Slices 490.
  • Wie in 4F dargestellt, verwendet eine Ausführungsform der Erfindung einen vereinheitlichten Speicher, der über einen gemeinsamen virtuellen Speicheradressraum adressierbar ist, der verwendet wird, um auf die physikalischen Prozessorspeicher 401-402 und die GPU-Speicher 420-423 zuzugreifen. 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. Wenngleich mehrere Instanzen der Bias-/Kohärenz-Verwaltungsschaltungen 494A-494E in 4F dargestellt sind, kann die Bias/Kohärenz-Schaltung innerhalb der MMU eines oder mehrerer Hostprozessoren 405 und/oder innerhalb der Beschleunigerintegrationsschaltung 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. Um die Kommunikation zwischen dem Prozessor 405 und der GPU 410 zu reduzieren, ist es daher vorteilhaft sicherzustellen, dass GPU-vorgespannte Seiten diejenigen Seiten sind, die von der GPU, jedoch nicht vom Hostprozessor 405 und umgekehrt benötigt werden.
  • Grafikverarbeitungs-Pipeline
  • 5 veranschaulicht eine Grafikverarbeitungs-Pipeline 500 gemäß einer Ausführungsform. In einer Ausführungsform kann ein Grafikprozessor die dargestellte Grafikverarbeitungs-Pipeline 500 implementieren. Der Grafikprozessor kann in den Parallelverarbeitungs-Subsystemen enthalten sein, wie hierin beschrieben, wie der Parallelprozessor 200 aus 2A, der in einer Ausführungsform eine Variante des Parallelprozessors (der Parallelprozessoren) 112 aus 1 ist. Die verschiedenen Parallelverarbeitungssysteme können die Grafikverarbeitungs-Pipeline 500 über eine oder mehrere Instanzen der Parallelverarbeitungseinheit (z. B. der Parallelverarbeitungseinheit 202 aus 2A), wie hierin beschrieben, implementieren. Zum Beispiel kann eine Shader-Einheit (z. B. der Grafikmultiprozessor 234 aus 2D) konfiguriert sein, die Funktionen einer Vertex-Verarbeitungseinheit 504, einer Tessellationssteuerungs-Verarbeitungseinheit 508, einer Tessellationsauswertungs-Verarbeitungseinheit 512, einer Geometrieverarbeitungseinheit 516 und einer Fragment/Pixel-Verarbeitungseinheit 524 auszuführen. Die Funktionen des Datenassemblers 502, der Primitiv-Assembler 506, 514, 518, der Tessellationseinheit 510, des Rasterisierers 522 und der Rasteroperationseinheit 526 können auch von anderen Verarbeitungs-Engines innerhalb eines Verarbeitungs-Clusters (z. B. Verarbeitungs-Cluster 214 aus 3A) und einer entsprechenden Partitionseinheit (z. B. der Partitionseinheit 220A-220N aus 2C) ausgeführt werden. 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 von einer Parallelverarbeitungslogik in einem Universalprozessor (z. B. CPU) ausgeführt werden. In einer Ausführungsform können ein oder mehrere Abschnitte der Grafikverarbeitungs-Pipeline 500 über eine Speicherschnittstelle 528, die eine Instanz der Speicherschnittstelle 218 aus 2A sein kann, auf einen chipinternen Speicher (z. B. den Parallelprozessorspeicher 222 wie in 2A) zugreifen.
  • 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 Koordinatendarstellung 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 derart programmiert, dass sie die Grafik-Primitive in ein oder mehrere neue Grafik-Primitive unterteilt und Parameter berechnet, die zum Rasterisieren der neuen Grafik-Primitive verwendet werden.
  • In einigen 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 einschließlich, ohne darauf beschränkt zu sein, Schablonen-, z-Test-, Mischoperationen und dergleichen ausführt und Pixeldaten als verarbeitete Grafikdaten zur Speicherung im Grafikspeicher, z. B. Parallelprozessorspeicher 222 wie in 2A und/oder Systemspeicher 104 wie in 1 ausgibt, um auf der einen oder den mehreren Anzeigevorrichtung(en) 110 oder zur weiteren Verarbeitung durch einen der einen oder der mehreren Prozessor(en) 102 oder Parallelprozessor(en) 112 angezeigt zu werden. In einigen Ausführungsformen ist die Rasteroperationseinheit 526 konfiguriert, z- oder Farbdaten, die in den Speicher geschrieben werden, zu komprimieren und z- oder Farbdaten, die aus dem Speicher gelesen werden, zu dekomprimieren.
  • 6 veranschaulicht eine Rechenvorrichtung 600, die einen intelligenten Autonomen-Maschinen-Wartungsmechanismus 610 („intelligenten autonomen Mechanismus“) 610 gemäß einer Ausführungsform hostet. Die Rechenvorrichtung 600 stellt eine Kommunikations- und Datenverarbeitungsvorrichtung dar, die intelligente Wearables, Smartphones, Virtual-Reality (VR) -Vorrichtungen, Head-Mounted-Displays (HMDs), mobile Computer, IoT (Internet of Things) -Vorrichtungen, Laptop-Computer, Desktop-Computer, Server-Computer usw. und sind ähnlich oder gleich der Rechenvorrichtung 100 aus 1; dementsprechend werden der Kürze, Klarheit und eines leichten Verständnisses viele der Details, die oben unter Bezugnahme auf 1-5 angegeben sind, im Folgenden nicht weiter erläutert oder wiederholt.
  • Die Rechenvorrichtung 600 kann ferner (ohne Einschränkungen) eine autonome Maschine oder einen künstlich intelligenten Agenten wie einen mechanischen Agenten oder eine Maschine, einen elektronischen Agenten oder eine Maschine, einen virtuellen Agenten oder eine virtuelle Maschine, einen elektromechanischen Agenten oder eine Maschine usw. aufweisen. Beispiele von autonomen Maschinen oder künstlich intelligenten Agenten können (ohne Einschränkung) Roboter, autonome Fahrzeuge (z. B. selbstfahrende Autos, selbstfliegende Flugzeuge, selbstsegelnde Boote usw.), autonome Ausrüstung (selbstfahrende Baufahrzeuge, selbsttätige medizinische Ausrüstung usw.) und/oder dergleichen einschließen. In diesem Dokument kann „Rechenvorrichtung“ austauschbar als „autonome Maschine“ oder „künstlich intelligenter Agent“ oder einfach „Roboter“ bezeichnet werden.
  • Es wurde in Erwägung gezogen, dass, wenngleich in diesem Dokument auf ein „autonomes Fahrzeug“ und „autonomes Fahren“ Bezug genommen wird, die Ausführungsformen nicht auf solche beschränkt sind. Zum Beispiel ist „autonomes Fahrzeug“ nicht auf ein Kraftfahrzeug beschränkt, sondern kann eine beliebige Anzahl und Art von autonomen Maschinen einschließen, wie Roboter, autonome Ausrüstung, autonome Haushaltsgeräte und/oder dergleichen, und eine oder mehrere Aufgaben oder Operationen in Bezug auf solche autonomen Maschinen können austauschbar mit autonomem Fahren in Beziehung gesetzt werden.
  • Die Rechenvorrichtung 600 kann ferner (ohne Einschränkungen) große Rechensysteme wie Servercomputer, Desktopcomputer usw., einschließen und kann ferner Set-Top-Boxen (z. B. Internet-basierte Kabelfernseh-Set-Top-Boxen usw.), GPS (Global Positioning System) -basierte Vorrichtungen usw. einschließen. Die Rechenvorrichtung 600 kann mobile Rechenvorrichtungen einschließen, die als Kommunikationsvorrichtungen dienen, wie Mobiltelefone einschließlich Smartphones, persönliche digitale Assistenten (PDAs), Tablet-Computer, Laptop-Computer, E-Reader, Smart-TVs, Fernsehplattformen, tragbare Vorrichtungen (z. B. Brillen, Uhren, Armbänder, Smartcards, Schmuck, Kleidungsstücke usw.), Medienabspielvorrichtungen usw. Zum Beispiel kann die Rechenvorrichtung 600 in einer Ausführungsform eine mobile Rechenvorrichtung einschließen, die eine Computerplattform aufweisen kann, die eine integrierte Schaltung („IC“) hostet, wie ein System auf einem Chip („SoC“ oder „SOC“), das verschiedene Hardware- und/oder Softwarekomponenten der Rechenvorrichtung 600 auf einem einzigen Chip integriert.
  • Wie dargestellt, kann die Rechenvorrichtung 600 in einer Ausführungsform eine beliebige Anzahl und Art von Hardware- und/oder Softwarekomponenten einschließen, wie (ohne Einschränkung) eine Grafikverarbeitungseinheit („GPU“ oder einfach „Grafikprozessor“) 614, Grafiktreiber (auch bezeichnet als „GPU-Treiber“, „Grafiktreiberlogik“, „Treiberlogik“, Benutzermodustreiber (UMD), UMD, Benutzermodustreiber-Framework (UMDF), UMDF oder einfach „Treiber“) 616, zentrale Verarbeitungseinheit („CPU“ oder einfach „Anwendungsprozessor“) 612, Speicher 608, Netzwerkvorrichtungen, Treiber oder dergleichen, ebenso wie Eingabe/Ausgabe-(I/O) -Quellen 604 wie Berührungsbildschirme, Berührungsfelder, Touchpads, virtuelle oder reguläre Tastaturen, virtuelle oder normale Mäuse, Ports, Verbinder usw. Die Rechenvorrichtung 600 kann ein Betriebssystem (OS) 606 aufweisen, das als eine Schnittstelle zwischen Hardware und/oder physikalischen Ressourcen der Rechenvorrichtung 600 und einem Benutzer dient. Es wird in Betracht gezogen, dass der Grafikprozessor 614 und der Anwendungsprozessor 612 einer oder mehrere der Prozessoren 102 aus 1 sein können.
  • Man wird zu schätzen wissen, dass ein weniger oder mehr ausgestattetes System als das oben beschriebene Beispiel für bestimmte Implementierungen bevorzugt sein kann. Daher kann die Konfiguration der Rechenvorrichtung 600 von Implementierung zu Implementierung in Abhängigkeit von zahlreichen Faktoren variieren, wie Preisbeschränkungen, Leistungsanforderungen, technologischen Verbesserungen oder anderen Umständen.
  • Ausführungsformen können als eine beliebige oder als eine Kombination von: einem oder mehreren Mikrochips oder integrierten Schaltungen, die unter Verwendung einer Hauptplatine verbunden sind, festverdrahteter Logik, Software, die von einer Speichervorrichtung gespeichert ist und von einem Mikroprozessor ausgeführt wird, Firmware, einer anwendungsspezifischen integrierten Schaltung (ASIC) und/oder einem Field Programmable Gate Array (FPGA) implementiert sein. Die Begriffe „Logik“, „Modul“, „Komponente“, „Motor“ und „Mechanismus“ können beispielsweise Software oder Hardware und/oder Kombinationen von Software und Hardware einschließen.
  • In einer Ausführungsform kann der intelligente autonome Mechanismus 610 von dem Betriebssystem 606 der Rechenvorrichtung 600 gehostet oder ermöglicht werden. In einer anderen Ausführungsform kann der intelligente autonome Mechanismus 610 von einer Grafikverarbeitungseinheit („GPU“ oder einfach „Grafikprozessor“) 614 oder einer Firmware des Grafikprozessors 614 gehostet werden oder Teil davon sein. Zum Beispiel kann der intelligente autonome Mechanismus 610 in die Verarbeitungshardware des Grafikprozessors 614 eingebettet sein oder als Teil davon implementiert sein. In ähnlicher Weise kann in einer weiteren Ausführungsform der intelligente autonome Mechanismus 610 von einer zentralen Verarbeitungseinheit („CPU“ oder einfach „Anwendungsprozessor“) 612 gehostet werden oder Teil davon sein. Zum Beispiel kann der intelligente autonome Mechanismus 610 in die Verarbeitungshardware des Anwendungsprozessors 612 eingebettet sein oder als Teil davon implementiert sein. In noch einer anderen Ausführungsform kann der intelligente autonome Mechanismus 610 von einer beliebigen Anzahl und Art von Komponenten der Rechenvorrichtung 600 gehostet oder Teil davon sein, so wie ein Abschnitt des intelligenten autonomen Mechanismus 610 von einem Betriebssystem 606 gehostet werden kann oder ein Teil davon sein kann, ein anderer Abschnitt von einem Grafikprozessor 614 gehostet werden kann oder ein Teil davon sein kann, ein anderer Abschnitt von einem Anwendungsprozessor 612 gehostet werden kann oder ein Teil davon sein, während ein oder mehrere Abschnitte des intelligenten autonomen Mechanismus 610 von dem Betriebssystem 606 und/oder einer beliebigen Anzahl und Art von Vorrichtungen der Rechenvorrichtung 600 gehostet werden können oder Teil davon sein können. Es wird in Betracht gezogen, dass ein oder mehrere Teile oder Komponenten des intelligenten autonomen Mechanismus 610 als Hardware, Software und/oder Firmware verwendet werden können.
  • Es wird in Betracht gezogen, dass Ausführungsformen nicht auf eine bestimmte Implementierung oder ein Hosting des intelligenten autonomen Mechanismus 610 beschränkt sind und dass der intelligente autonome Mechanismus 610 und eine oder mehrere seiner Komponenten als Hardware, Software, Firmware oder eine beliebige Kombination davon implementiert sein können.
  • Die Rechenvorrichtung 600 kann Netzwerkschnittstelle (n) hosten, um Zugang zu einem Netzwerk wie einem LAN, einem Weitverkehrsnetzwerk (WAN), einem Metropolitan Area Network (MAN), einem Personal Area Network (PAN), Bluetooth, einem Cloud-Netzwerk, einem mobilen Netzwerk (z. B. dritte Generation (3G), vierte Generation (4G) usw.), einem Intranet, dem Internet usw. bereitzustellen. Netzwerkschnittstelle (n) können z. B. eine drahtlose Netzwerkschnittstelle mit Antenne umfassen, die eine oder mehrere Antenne(n) darstellen können. Die Netzwerkschnittstelle(n) können z. B. auch eine drahtgebundene Netzwerkschnittstelle umfassen, um mit entfernten Vorrichtungen über ein Netzwerkkabel zu kommunizieren, das beispielsweise ein Ethernet-Kabel, ein Koaxialkabel, ein Glasfaserkabel, ein serielles Kabel oder ein paralleles Kabel sein kann.
  • Ausführungsformen können beispielsweise als ein Computerprogrammprodukt bereitgestellt werden, das ein oder mehrere maschinenlesbare Medien aufweisen kann, auf denen maschinenausführbare Anweisungen gespeichert sind, die, wenn sie von einer oder mehreren Maschinen wie einem Computer, Computernetzwerk oder anderen elektronischen Vorrichtungen ausgeführt werden, dazu führen, dass die eine oder die mehreren Maschinen Operationen gemäß den hierin beschriebenen Ausführungsformen ausführen. Ein maschinenlesbares Medium kann Disketten, optische Platten, CD-ROMs (Compact Disc-Read Only Memories) und magnetooptische Platten, ROMs, RAMs, EPROMs (Erasable Programmable Read Only Memories), EEPROMs (Electrically Erasable Programmable Read Only Memories), magnetische oder optische Karten, Flash-Speicher oder andere Arten von Medien/maschinenlesbaren Medien, die zum Speichern von maschinenausführbaren Anweisungen geeignet sind, aufweisen, ist jedoch nicht darauf beschränkt.
  • Darüber hinaus können Ausführungsformen als ein Computerprogrammprodukt heruntergeladen werden, wobei das Programm von einem entfernten Computer (z. B. einem Server) an einen anfordernden Computer (z. B. einem Client) mittels eines oder mehrerer Datensignale übertragen werden kann, die in einer Trägerwelle oder einem anderen Ausbreitungsmedium über eine Kommunikationsverbindung (z. B. eine Modem- und/oder eine Netzwerkverbindung) realisiert sind und/oder davon moduliert sind.
  • Im gesamten Dokument kann der Ausdruck „Benutzer“ austauschbar als „Betrachter“, „Beobachter“, „Person“, „Individuum“, „Endbenutzer“ und/oder dergleichen bezeichnet werden. Es ist zu beachten, dass in diesem Dokument Begriffe wie „Grafikdomäne“ austauschbar mit „Grafikverarbeitungseinheit“, „Grafikprozessor“ oder einfach „GPU“ bezeichnet werden können und in ähnlicher Weise „CPU-Domäne“ oder „Host-Domäne“ austauschbar mit „Computerverarbeitungseinheit“, „Anwendungsprozessor“ oder einfach „CPU“ bezeichnet werden können.
  • Es ist anzumerken, dass Begriffe wie „Knoten“, „Rechenknoten“, „Server“, „Servervorrichtung“, „Cloud-Computer“, „Cloud-Server“, „Cloud-Server-Computer“, „Maschine“, „Host-Maschine“ „Vorrichtung“, „Rechenvorrichtung“, „Computer“, „Rechensystem“ und dergleichen in diesem Dokument austauschbar verwendet werden können. Es ist ferner anzumerken, dass Begriffe wie „Anwendung“, „Softwareanwendung“, „Programm“, „Softwareprogramm“, „Paket“, „Softwarepaket“ und dergleichen in diesem Dokument austauschbar verwendet werden können. Begriffe wie „Job“, „Eingabe“, „Anfrage“, „Nachricht“ und dergleichen können in diesem Dokument auch synonym verwendet werden.
  • 7 zeigt einen intelligenten autonomen Mechanismus 610 aus 6 gemäß einer Ausführungsform. Der Kürze halber werden viele der Details, die bereits unter Bezugnahme auf 1-6 erläutert wurden, nicht wiederholt oder im Folgenden erläutert. In einer Ausführungsform kann der intelligente autonome Mechanismus 610 eine beliebige Anzahl und Art von Komponenten aufweisen, wie (ohne Einschränkungen): Erkennungs-/Beobachtungslogik 701; hybride Berechnungslogik („Hybridlogik“) 703; Fehlerdiagnose und Korrekturlogik („Fehlerlogik“) 705; Kommunikations-/Kompatibilitätslogik 707; Soziale-Medien- und Vorhersagelogik („Vorhersagelogik“) 709; und eine Routen- und Führungsoptimierungslogik („Routen-/Führungslogik“) 711.
  • Autonomes Fahren erfordert typischerweise einen erheblichen Berechnungsaufwand, wie visuelle Berechnungen, um Straßenszenen, Verkehrsgefahren, Fahrbahn- und Fahrbahnmarkierungen, Fußgänger und Hindernisse wie Barrieren usw. zu erkennen und zu verstehen.
  • Ausführungsformen stellen eine neuartige Technik bereit, um eine Berechnung unter Verwendung einer Kombination aus einer Berechnung im Fahrzeug und der Cloud auszuführen. Die fahrzeuginterne Berechnung kann für gewöhnliche Situationen angemessen sein, jedoch nicht, wenn beispielsweise die Straßenszene zu komplex ist, in welchemFall die relevante Berechnung in die Cloud ausgelagert oder ausgegliedert werden kann, beispielsweise zu einem oder mehreren Cloud-Rechenservern wie der Cloud-Rechenvorrichtung 735, über ein oder mehrere Netzwerke, beispielsweise das Kommunikationsmedium 725. Zum Beispiel kann das autonome Fahrzeug (AV) 600 (z. B. Auto, Lastwagen, Roboter usw.) ein fahrzeuginternes Computersystem (häufig einschließlich einer GPU oder eines Beschleunigers) verwenden, das eine geringe Leistung benötigt, während die energieintensive Cloud-Rechenvorrichtung 735 für komplexe Szenen verwendet werden kann, in denen eine höhere Genauigkeit oder eine schnellere Analyse benötigt wird.
  • AV-basierte Berechnungen können das Ausführen von CNNs beinhalten, die rechen- und leistungsintensiv sind. Solche CNNs werden häufig für das visuelle Rechnen verwendet und sind besonders wertvoll zum Analysieren des Inhalts einer Szene. In einer Ausführungsform stellt eine Kombination von fahrzeuginternen Berechnungen, die bei dem Fahrzeug 600 ausgeführt werden können, und ausgegliederten Berechnungen, die in der Cloud-Vorrichtung 735 ausgeführt werden können, eine neuartige Hybridfahrzeug-Cloud- oder Maschinen-Cloud-Rechentechnik bereit, um eine signifikante Energiereduzierung und eine verbesserte Leistung zu erzielen.
  • In einer Ausführungsform kann die Erkennungs-/Beobachtungslogik 701 verwendet werden, um Transaktionen in Bezug auf das autonome Fahrzeug 600 zu verfolgen, die sowohl große als auch kleine Berechnungen erfordern können. Zum Beispiel kann eine Anzahl von Dateneingaben wie Szenen, die von einer oder mehreren Kameras von I/O-Quellen 604 aus 6 aufgenommen wurden, von der Erkennungs-/Beobachtungslogik 701 für rechnerische und andere Verarbeitungsüberlegungen erkannt und beobachtet werden.
  • Falls nun zum Beispiel eine der Szenen eine Straßenszene beinhaltet, etwa wie man bestimmte Hindernisse vermeidet, kann diese Art von Analysen CNN-basierte Berechnungen auslösen. Mit anderen Worten, sobald die Erkennungs-/Beobachtungslogik 701 beobachtet, dass eine Berechnung von einem CNN ausgeführt werden kann, der viel Energie und andere Systemressourcen aufnehmen kann, beispielsweise wenn eine höhere Genauigkeit oder eine schnellere Antwort benötigt wird, kann die Hybridlogik 703 ausgelöst werden, um diese Berechnung an die Cloud-Vorrichtung 735 als autonome Maschine/Fahrzeug 600 auszugliedern, die nicht an das gleiche Niveau von Leistungsbeschränkungen usw. gebunden ist. In ähnlicher Weise kann in einer Ausführungsform im Falle von gewöhnlichen Situationen wie kleinen oder weniger anspruchsvollen Berechnungen, bei denen der Energieverbrauch voraussichtlich niedrig ist, eine Berechnung in der Maschine und/oder im Fahrzeug unter Verwendung von lokalen Rechenressourcen der autonomen Maschine und/oder des Fahrzeugs 600 ausgeführt werden.
  • Zum Beispiel sind autonome Fahrsysteme auf Deep Learning angewiesen; insbesondere sind CNNs bei der Ausführung von Berechnungen, die für die Analyse und das Verständnis von Straßenszenen von AV-Kamerasensoren und Eingaben von Radarsensoren wie einer oder mehreren Kameras und/oder Sensoren von I/O-Quellen 604 benötigt werden, hoch effektiv. Zum Beispiel können Visual-Computing-CNNs überaus rechenintensiv sein, was einen erheblichen Energieaufwand erfordern kann.
  • Herkömmliche autonome Fahrsysteme führen alle Berechnungen unter Verwendung von lokalen fahrzeuginternen Datenverarbeitungsressourcen aus, jedoch begrenzt eine begrenzte Verfügbarkeit von Leistung solcher Systeme diese Berechnungen oft und führt zu falschen, ungenauen oder langsamen Ergebnissen.
  • Ausführungsformen stellen ein neuartiges Verfahren zur Verwendung eines priorisierten kombinierten fahrzeuginternen und Cloud-Computings für eine autonome Maschine/Fahrzeug 600 bereit. Durch Verwendung des fahrzeuginternen Rechnersystems des autonomen Fahrzeugs 600, wenn Rechenanforderungen gering sind, und Auslagern komplexer Berechnungen an die Cloud-Rechenvorrichtung 735 in der Cloud für leistungsintensivere Berechnungen können eine beliebige Anzahl und Art von Computern und Beschleunigern je nach Bedarf verwendet werden. Dies ermöglicht eine Verringerung des Leistungsbedarfs und der Latenz des Fahrzeugs, während die Genauigkeit der Ergebnisse erhöht wird.
  • Ausführungsformen stellen ferner eine neue CNN-basierte Diagnose von Fehlercodes bereit, die eine automatisierte Maschine und Cloud kombiniert und von der Hybridlogik 703 und der Fehlerlogik 705 ermöglicht wird.
  • Moderne automatisierte Maschinen wie Kraftfahrzeuge haben typischerweise bis zu hundert Mikrosteuerungen, von denen jeder einen Fehlercode für jedes Problem aufzeichnen kann, das von einem Mikrosteuerung gefunden wird. Während die Codes aus Diagnosegründen von unschätzbarem Wert sind, kann ein einzelner Fehler mehrere nachgeordnete Codes auslösen. Mit anderen Worten muss ein Techniker, der ein Problem untersucht, heutzutage jeden aufgezeichneten Code sorgfältig untersuchen, um zu entscheiden, welche die tatsächlichen zugrundeliegenden Probleme beschreiben. Dies erfordert, dass ein Techniker ein Experte für verschiedene Maschinenmerkmale ist wie elektrische Komponenten, Kraftstoff und andere Systeme des spezifischen Automodells, von denen viele spezifisch für diesen Hersteller sind.
  • Ausführungsformen stellen die Verwendung eines hybriden Maschinen-Cloud-CNN bereit, um automatisch qualitativ hochwertige Diagnosen zu stellen und die zugrundeliegenden Ergebnisse zurückzusenden, wenn ein Satz aufgezeichneter Fehlercodes erhalten wird. In einer Ausführungsform wird das CNN unter Verwendung der Hybridlogik 703 generiert, während jegliche Forschung wie Codeerkennung, Diagnose, Bestimmung und Anwendung von Lösungen usw., von der Fehlerlogik 705 ermöglicht wird. Dieses hybride CNN kann Teil eines Service-Datenzentrums eines Herstellers sein (wie das Online-Service-System von BMW), das verwendet wird, um Händler und Servicezentren zu unterstützen. In einigen Ausführungsformen kann ein Diagnose-CNN unter Verwendung von Informationen trainiert werden, die von verschiedenen Maschinen wie Kundenfahrzeugen gesammelt werden, wobei am Ende jedes Wartungstermins eine Kombination der ursprünglichen Fehlercodes und der eventuellen Diagnose hochgeladen werden kann.
  • Darüber hinaus kann ein Hersteller eine Momentaufnahme des zentralen Diagnose-CNN in ihre Fahrzeuge wie das automatisierte Fahrzeug 600 einbetten, um automatisch und genau Probleme in ihren Systemen zu diagnostizieren. Dies kann dem Fahrer des autonomen Fahrsystems wie dem autonomen Fahrzeug 600 ermöglichen, spezifische und besser nachvollziehbare Informationen über Fehler zu erhalten. Ferner ist das fahrzeuginterne CNN in der Lage, wahrscheinliche Fehler vorherzusagen, bevor sie auftreten, wie von der Vorhersagelogik 709 ermöglicht. Wenn nun zum Beispiel das CNN des Fahrzeugs nicht genügend Vertrauen in seine Diagnose hat oder nicht in der Lage ist, eine Diagnose zu liefern, kann das Fahrzeug 600 das zentrale CNN des Herstellers kontaktieren, da dieses wahrscheinlich aktuellere Informationen hat, die automatisch unter Verwendung eines drahtlosen Netzwerks oder, falls erforderlich, später in einem Service-Center verwendet werden können.
  • Ein CNN ist eine Art künstliches neuronales Netzwerk beim Maschinenlernen, das nach biologischen Systemen modelliert ist, wobei sich CNNs in der Bildverarbeitung, Verarbeitung in natürlicher Sprache und Empfehlungssystemen als sehr erfolgreich erwiesen haben. Techniker können CNNs verwenden, um Probleme im Zusammenhang mit Kraftfahrzeugen zu diagnostizieren, jedoch müssen Händler und Servicezentren selbst bei einfachsten Problemen mit einem Service-Datenzentrum oder einer Cloud eines Herstellers kommunizieren, um detaillierte Informationen über die Fehlercodes aus dem Fahrzeug eines Kunden wie dem Fahrzeug 600 zu erhalten. Diese Fehlercodes können Mechanikern helfen, die Probleme zu diagnostizieren, wobei eine ernsthafte Einschränkung gegenwärtiger Online-Dienstsysteme darin besteht, dass oft ein Dutzend oder mehr Fehlercodes von einem Kraftfahrzeug gelesen werden können, von denen viele durch einige wenige stromaufwärtige Probleme verursacht werden, die Probleme stromabwärts verursachen. Herkömmliche Techniken erfordern Techniker oder Experten, die die Codes sorgfältig untersuchen, um die tatsächlichen Probleme zu finden, und dabei sind Erfahrung und wesentliches Training erforderlich.
  • In einer Ausführungsform kann die Fehlerlogik 705 verwendet werden, um eine Fehlerdiagnose des CNN, das in dem Servicedatenzentrum des Herstellers läuft, auszuführen. Bei einem Satz von Fahrzeugfehlercodes kann die Fehlerlogik 705 verwendet werden, um automatisch und mit hoher Genauigkeit eine Liste von zugrundeliegenden Problemen und deren Lösungen zurückzusenden. Das CNN kann zum Beispiel anfangs unter Verwendung der Kundendiensthistorie am Ende jedes Wartungstermins trainiert werden, einer Kombination der Fehlercodes des Kunden, und die tatsächlichen Probleme, die durch den Mechanismus gefunden werden, können hochgeladen werden. Nachdem das CNN ausreichend trainiert und in Betrieb genommen wurde, kann sein Training fortgesetzt werden, wenn neue Codes und Probleme gefunden und hochgeladen werden, wie von der Fehlerlogik 705 ermöglicht, und infolgedessen können sich die CNN-Ergebnisse im Laufe der Zeit weiter verbessern.
  • Zum Beispiel kann der Automobilhersteller auch eine Momentaufnahme eines trainierten CNN in seine Fahrzeuge einbetten, um diesen Fahrzeugen zu ermöglichen, automatisch und genau Probleme mit ihren Systemen zu diagnostizieren, wie von der Fehlerlogik 705 ermöglicht. Falls das CNN des Fahrzeugs nicht genügend Vertrauen in seine Diagnose hat oder nicht in der Lage ist, eine Diagnose bereitzustellen, kann das Fahrzeug/die Maschine 600 das Hauptdiagnose-CNN des Herstellers über ein drahtloses Netzwerk wie das Kommunikationsmedium 730 kontaktieren, da es wahrscheinlich aktuellere Informationen hat.
  • Alle seit 1996 in den Vereinigten Staaten verkauften Kraftfahrzeuge müssen ein Diagnosesystem namens On-Board Diagnostic der zweiten Generation (OBDII) haben, mit dem Prüfer und Wartungsprofis emissionsrelevante Probleme verfolgen können, wobei Automobilhersteller diese OBDII-Fehlercodes normalerweise durch ihre eigenen ergänzen. Um die Probleme eines Autos heutzutage zu diagnostizieren, muss oft ein Techniker die OBDII-Fehlercodes aus dem Fahrzeug lesen. Diese Fehlercodes werden unter Verwendung des OBDII-Ports gelesen, wobei der Techniker diese Codes dann an das Servicedatenzentrum eines Herstellers sendet, um detaillierte Informationen über die Codes zu erhalten, wie z. B. BMW, Online-Servicesystem. Viele Codes resultieren jedoch aus der gleichen zugrundeliegenden Ursache. Zum Beispiel können ein Luftströmungsproblem, eine übermäßige Frühzündung (z. B. Klopfen) und ein Messwert außerhalb des Bereichs der Lambdasonde aus den gleichen zugrundeliegenden elektrischen Fehlern resultieren.
  • Viele Codes resultieren jedoch aus der gleichen zugrundeliegenden Ursache. Zum Beispiel können Luftströmungsprobleme, übermäßige Frühzündungs-(Klopf-) Probleme, Messwerte von Lambdasonden außerhalb des Bereichs usw. alle aus dem gleichen zugrundeliegenden elektrischen Fehler resultieren. Darüber hinaus sind einige Fehlercodes fehlerhaft, da die ausgeführte Software in Dutzenden von Steuerungen in einem modernen Auto separat aktualisiert wird, sodass es wahrscheinlich ist, dass eine Steuerung, die keine Daten mehr hat, ungültige Daten an stromabwärtige Steuerungen sendet, sodass diese veranlasst werden, fehlerhafte Codes aufzuzeichnen. Infolgedessen muss ein Techniker, der sich mit einem Problem beschäftigt, jeden aufgezeichneten Code sorgfältig prüfen, um zu entscheiden, welche echte Probleme beschreiben und welche die zugrundeliegenden Ursachen sind. Dies kann erfordern, dass ein Techniker Fachwissen über die Automobilsysteme eines Herstellers und die Interaktionen zwischen seinen Steuerungen hat.
  • Ein beträchtlicher Teil des Trainings kann erforderlich sein, damit ein Techniker eine Reihe von Autos von einem einzigen Hersteller kompetent bedienen kann. Zum Beispiel stellt BMW fünf Handbücher zur Verfügung, um einen erfahrenen BMW-Mechanismus in den 7er-Limousinen der BMW 2002-2008 zu unterrichten. Das erste Handbuch behandelt zum Beispiel nur die sechs CAN-, Glasfaser- und redundanten Token-Ring-Netzwerke des Autos, wobei dieses Trainingsniveau teuer ist und es für Hersteller oder Servicezentren zunehmend schwierig wird, qualifizierte und trainierbare Mechaniker zu finden.
  • In einer Ausführungsform stellt die Fehlerlogik 705 eine Fehlerdiagnose CNN bereit, um eine automatische, dynamische und genaue Diagnose von automatisierten Maschinenproblemen und Problemen bereitzustellen. Diese neuartige Technik ermöglicht eine schnellere Diagnose, reduzierte Kosten und effiziente Reparaturen. Ferner beseitigt diese neue Technik die Notwendigkeit von Technikern insgesamt oder reduziert zumindest die Notwendigkeit, Erfahrung oder Training zu haben, was wiederum die Kosten weiter reduziert und den Pool verfügbarer Mechaniker und Techniker erweitert. Diese neuartige Fehlerdiagnose CNN, wie von der Fehlerlogik 705 ermöglicht, weist Vorteile für Kunden, Servicezentren und Hersteller auf.
  • Viele der herkömmlichen Techniken im Zusammenhang mit der Fehlerdiagnose verwenden statistisches Modellieren oder Maschinenlernen, wobei viele dieser Systeme auf unbemannte autonome Fahrzeuge abzielen, die geringere Korrektheitsanforderungen als bemannte Fahrzeuge haben. Andere herkömmliche Techniken konzentrieren sich auf eine Art von Anomalie, die eine spezifische Technik verwendet, im Gegensatz zu einem umfassenden System, das alle möglichen Probleme unter Verwendung eines verallgemeinerten Modells berücksichtigt. Darüber hinaus verwenden einige dieser Systeme synthetische Umgebungen und simulierte Szenarien, um ihre Korrektheit zu überprüfen.
  • Ausführungsformen stellen bereit, dass Hersteller eine Kopie eines Fehlerdiagnose-CNN in ihre Fahrzeuge wie das automatisierte Fahrzeug 600 aufzunehmen. Dies ermöglicht dem Fahrzeugsteuersystem, Fahrzeugprobleme automatisch zu diagnostizieren, und wenn das CNN des Fahrzeugs nicht genügend Vertrauen in seine Diagnose hat, kann das Fahrzeug 600 sein drahtloses Netzwerk wie das Kommunikationsmedium 725 verwenden, um das CNN-basierte Diagnosesystem des Herstellers zu kontaktieren, das wahrscheinlich aktuellere Informationen hat. Unter Verwendung dieser neuen Technik trägt eine genaue und rechtzeitige Diagnose zur Verbesserung der Sicherheit bei, da sie dem Fahrer oder dem autonomen Fahrsystem des autonomen Fahrzeugs 600 ermöglicht, auf auftretende Probleme richtig zu reagieren. Diese zusätzliche Sicherheit ist auf selbstfahrende Fahrzeuge wie das Fahrzeug 600 anwendbar und ermöglicht, dass die fahrzeuginternen CNN-Ergebnisse zur Vorhersage von Systemausfällen oder -fehlern verwendet werden, bevor sie auftreten, sodass sie rechtzeitig und angemessen in Angriff genommen werden können.
  • Ausführungsformen ermöglichen ferner das Zusammenfließen von Sozialen-Medien-Daten mit Autonomen-Agenten-Daten zur besseren Vorhersage von Fehlern, Aufgaben, Jobs, Interessen, Routen, Verkehr usw. In einer Ausführungsform können autonome Agenten (z. B. Kraftfahrzeuge, Fahrzeuge, Maschinen usw.) wie der autonome Agent 600 während des Fahrens Daten sammeln und diese Daten an die Cloud-Datenzentren 740 senden, die mit Cloud-Servern wie der Cloud-Vorrichtung 735 kommunizieren oder gekoppelt sind, wobei diese Daten Soziale-Medien-Daten aufweisen, sodass Sätze von Daten kombiniert werden können, um eine Reihe von Aufgaben auszuführen, wie eine Fahrgemeinschaft zu bilden, verwandte Personen zu finden, die für denselben Standort bestimmt sind, Personen die Möglichkeit zu einem Treffen zu geben, Verkehr vorherzusagen, die schnellste Spur im Verkehr zu finden, Marketing auszuführen usw.
  • Autonome Agenten wie Autos müssen genau bestimmen, wo sie sich in Bezug auf ihren Standort befinden, Objekte, Autos, Punkte von Interesse (Points-of-Interests - POIs) erkennen und kontinuierlich einen optimalen Weg für ein sicheres Fahrerlebnis berechnen. Durch Erkennen der Umgebung über einen oder mehrere Sensoren wie Sensorfusion von I/O-Quellen 604, Wissen über die Umgebung wie über benachbarte Autos, Personen und andere POIs. Solche Informationen können dann vom autonomen Agenten 600 an die Cloud-Vorrichtung 735 gesendet werden, um sowohl das Training als auch die Inferenz des Deep-Learning-Systems auszuführen, die hinter dem autonomen Agenten 600 stehen. In einer Ausführungsform können diese Informationen unter Verwendung der Vorhersagelogik 709 dann mit anderen Sozialen-Medien-Daten von einer oder mehreren Sozialen-Medien-Networking-Sites wie Facebook®, Yelp®, Google® Shopping usw. für verschiedene Zwecke kombiniert werden, einschließlich der Förderung von Marketing, Erhöhen sozialer Interaktionen usw.
  • In einer Ausführungsform können autonome Agenten gemäß dem Stand der Technik, wie ein autonomer Agent/Maschine/Fahrzeug 600, sowohl Deep-Learning-Frameworks als auch fortschrittliche Computer-Vision-Technologien verwenden, um sichere fahrerlose Kraftfahrzeuge zu zeigen. Zum Beispiel können CNNs unter der Haube in einem Deep-Learning-Framework verwendet werden, wobei das Training in Cloud-Datenzentren 740 ausgeführt wird und Inferenz, Computer-Vision, Objekterkennung am Agenten/Kraftfahrzeug 600 ausgeführt werden. Zum Beispiel werden Daten oft zwischen dem Agenten/Kraftfahrzeug 600 und den Cloud-Datenzentren 740 hin und her übertragen.
  • Ausführungsformen stellen ferner eine neue Technik zum Optimieren der Batterielebensdauer und Regeneration für eine maschinell erlernte Routenführung bereit.
  • Elektrofahrzeuge (wie Elektroautos) verlieren bekanntermaßen an bestimmten Orten oder in bestimmten Umgebungen wie in hügeligen höheren Lagen, bei niedrigeren Temperaturen usw. schnell Batterieladung. Dies kann ferner von verschiedenen anderen Faktoren in Bezug auf solche Fahrzeuge abhängen, wie Belegung, Gewicht, Profil, Fahrstil, topografische Karten, Echtzeitverkehr usw. Daten, die auf Servercomputer geladen werden, und Maschinenlernen werden bei der Routenführung (wie Navigation) angewendet, um die Batterielebensdauer und das regenerative Bremsen zu optimieren.
  • Herkömmliche Routenführungstechniken sind nicht intelligent und daher nicht in der Lage, optimierte Routen, Zeiten, Entfernungen, Verkehrsszenarien usw. bereitzustellen. Da Elektroautos harte Grenzen im Hinblick auf die Entfernung haben, verlangt die Optimierung der Batterielebensdauer oder anderer ähnlicher Komponenten oder Teile nach einem Ziel der Routenführung.
  • Zum Beispiel können unter Verwendung der Routen-/Führungslogik 711 MPEG-Daten (Moving Picture Experts Group) vom Fahrzeug 600 mit Routen aufgenommen werden, Fahrstil des Fahrers, Upload von Daten, um das Lernen zu ermöglichen, usw. Zum Beispiel stellt diese neue Technik eine kundenspezifische Routenführung bereit, um die Lebensdauer einer Komponente oder eines Teils (z. B. der Batterielebensdauer) des Fahrzeugs 600 zur Regeneration zu maximieren, wobei verschiedene Profile basierend auf Statistiken aufgerufen werden.
  • Ferner kann die Kommunikations-/Kompatibilitätslogik 707 verwendet werden, um die benötigte Kommunikation und Kompatibilität zwischen einer beliebigen Anzahl von Vorrichtungen der Rechenvorrichtung 600 und verschiedenen Komponenten des intelligenten autonomen Mechanismus 610 zu ermöglichen.
  • Die Kommunikations-/Kompatibilitätslogik 707 kann verwendet werden, um eine dynamische Kommunikation und Kompatibilität zwischen der Rechenvorrichtung 600 und einer beliebigen Anzahl und Art von anderen Rechenvorrichtungen (wie einer mobilen Rechenvorrichtung, einem Desktop-Computer, einer Server-Rechenvorrichtung usw.); Verarbeitungsvorrichtungen oder - komponenten (wie CPUs, GPUs usw.); Erfassungs-/Abtast-/Erkennungsvorrichtungen (wie Erfassen/Abtasten von Komponenten einschließlich Kameras, Tiefenerfassungskameras, Kamerasensoren, Rot-Grün-Blau-Sensoren („RGB“ oder „rgb“), Mikrofonen usw.); Anzeigevorrichtungen (wie Ausgangskomponenten einschließlich Anzeigebildschirmen, Anzeigebereichen, Anzeigeprojektoren usw.); Benutzer-/Kontextsensitivitätskomponenten und/oder Identifikations-/Verifizierungssensoren/-vorrichtungen (wie biometrische Sensoren/Detektoren, Scanner usw.); Datenbank(en) 730 wie Speicher- oder Speichervorrichtungen, Datenbanken und/oder Datenquellen (wie Datenspeichervorrichtungen, Festplatten, Solid-State-Laufwerke, Festplatten, Speicherkarten oder -vorrichtungen, Speicherschaltungen usw.); Kommunikationsmedium (bzw. -medien) 725 wie ein oder mehrere Kommunikationskanäle oder Netzwerke (z. B. Cloud-Netzwerke, das Internet, Intranets, Mobilfunknetze, Proximity-Netzwerke wie Bluetooth, Bluetooth Low Energy (BLE), Bluetooth Smart, Wi-Fi-Proximity, Radio Frequency Identification (RFID), Nahfeldkommunikation (NFC), Body Area Network (BAN) usw.); drahtlose oder drahtgebundene Kommunikation und relevante Protokolle (z. B. Wi-Fi®, WiMAX, Ethernet usw.); Konnektivitäts- und Standortmanagementtechniken; Softwareanwendungen/Websites (z. B. soziale und/oder geschäftliche Netzwerkwebsites usw., Geschäftsanwendungen, Spiele und andere Unterhaltungsanwendungen usw.); und Programmiersprachen usw., zu ermöglichen, wobei gleichzeitig die Kompatibilität mit sich ändernden Technologien, Parametern, Protokollen, Standards usw. sichergestellt wird.
  • In diesem Dokument können Begriffe wie „Logik“, „Komponente“, „Modul“, „Framework“, „Engine“, „Mechanismus“ und dergleichen austauschbar referenziert werden und schließen beispielsweise Software, Hardware, Firmware und/oder eine beliebige Kombination davon ein. In einem Beispiel kann sich „Logik“ auf eine Softwarekomponente beziehen, die mit einem oder mehreren von einem Betriebssystem (z. B. Betriebssystem 606), einem Grafiktreiber (z. B. Grafiktreiber 616) usw. einer Rechenvorrichtung wie der Rechenvorrichtung 600 arbeiten kann oder diese einschließen kann. In einem anderen Beispiel kann „Logik“ eine Hardwarekomponente bezeichnen oder einschließen, die physisch zusammen mit oder als Teil von einem oder mehreren Systemhardwareelementen installiert werden kann, wie einem Anwendungsprozessor (z. B. CPU 612), einem Grafikprozessor (z. B. GPU 614) usw. einer Rechenvorrichtung wie der Rechenvorrichtung 600. In noch einer anderen Ausführungsform kann sich „Logik“ auf eine Firmware-Komponente beziehen, die Teil der System-Firmware sein kann, wie Firmware eines Anwendungsprozessors (z. B. CPU 612) oder eines Grafikprozessors (z. B. GPU 614) usw. einer Rechenvorrichtung wie der Rechenvorrichtung 600 beziehen oder diese einschließen.
  • Ferner ist ein beliebige Verwendung einer bestimmten Marke, eines Wortes, eines Begriffs, einer Phrase, eines Namens und/oder eines Akronyms wie „Erkennen“, „Beobachten“, „Training“, „Auswählen“, „Fehlerdiagnose“, „Hybridberechnung“, „Fahrzeugberechnung“, „Cloud-Berechnung“, „Soziale-Medien-Daten“, „Autonome-Agenten-Daten“, „Vorhersage“, „Trainingssatz“, „Agent“, „Maschine“, „Fahrzeug“, „Roboter“, „Fahren“, „CNN“, „DNN“, „NN“, „Ausführungseinheit“, „EU“, „gemeinsam genutzter lokaler Speicher“, „SLM“, „Grafikströme“, „Cache“, „Grafikcache“, „GPU“, „Grafikprozessor“, „GPU-Domäne“, „GPGPU“, „CPU“, „Anwendungsprozessor“, „CPU-Domäne“, „Grafiktreiber“, „Arbeitslast“, „Anwendung“, „Grafik-Pipeline“, „Pipeline-Prozesse“, „API“, „3D-API“, „OpenGL®“, „DirectX®“, „Hardware“, „Software“, „Agent“, „Grafiktreiber“, „Kernelmodus-Grafiktreiber“, „Benutzermodustreiber“, „Benutzermodustreiber-Framework“, „Puffer“, „Grafikpuffer“, „Aufgabe“, „Prozess“, „Operation“, „Softwareanwendung“, „Spiel“ usw. nicht so zu lesen, dass sie Ausführungsformen auf Software oder Vorrichtungen einschränkt, die dieses Etikett in Produkten oder in der Literatur außerhalb dieses Dokuments tragen.
  • Es wird in Betracht gezogen, dass eine beliebige Anzahl und Art von Komponenten dem intelligenten autonomen Mechanismus 610 hinzugefügt und/oder daraus entfernt werden kann, um verschiedene Ausführungsformen einschließlich Hinzufügen, Entfernen und/oder Verbessern bestimmter Merkmale zu ermöglichen. Der Kürze halber, der Klarheit und dem leichten Verständnis des intelligenten autonomen Mechanismus 610 halber sind viele der standardmäßigen und/oder bekannten Komponenten wie diejenigen einer Rechenvorrichtung, hier nicht dargestellt oder erläutert. Es wird in Betracht gezogen, dass Ausführungsformen, wie hierin beschrieben, nicht auf eine bestimmte Technologie, Topologie, ein System, eine Architektur und/oder einen Standard beschränkt sind und dynamisch genug sind, um zukünftige Änderungen anzunehmen und anzupassen.
  • 8A zeigt ein neuartiges Framework 800 zum Ermöglichen einer intelligenten Sammlung von Daten und einer Verwaltung von autonomen Maschinen gemäß einer Ausführungsform. Der Kürze halber werden viele der Details, die bereits unter Bezugnahme auf 1-7 erläutert wurden, nicht wiederholt oder im Folgenden erläutert. Beliebige Prozesse, die sich auf das Framework 800 beziehen, können von einer Verarbeitungslogik ausgeführt werden, die Hardware (z. B. eine Schaltung, dedizierte Logik, programmierbare Logik usw.), Software (wie auf einer Verarbeitungsvorrichtung ausgeführte Anweisungen) oder eine Kombination davon umfassen kann, wie von dem intelligenten autonomen Mechanismus 610 aus 6 ermöglicht.. Die Prozesse, die dem Framework 800 zugeordnet sind, können zur Verkürzung und Klarheit der Darstellung in linearen Sequenzen dargestellt oder wiedergegeben werden; es wird jedoch in Betracht gezogen, dass eine beliebige Anzahl von ihnen parallel, asynchron oder in verschiedenen Reihenfolgen ausgeführt werden kann. Ferner sind Ausführungsformen nicht auf eine bestimmte Architekturplatzierung oder ein Framework von Komponenten wie das Framework 800, beschränkt.
  • Wie veranschaulicht, können Daten von mehreren Quellen gesammelt und zusammen verwendet werden, um eine oder mehrere Operationen durchzuführen und eine oder mehrere Entscheidungen zu treffen, wie von der Hybridlogik 703 und der Vorhersagelogik 703 ermöglicht. Zum Beispiel können in der veranschaulichten Ausführungsform Soziale-Medien-Daten 801 von einer oder mehreren Soziale-Medien-Websites 803 (z. B. Facebook ® usw.) gesammelt werden, wobei diese Soziale-Medien-Daten 801 von der Inbeziehungsetzung oder Bereitstellung von Informationen, die für den Betreiber (z. B. Fahrer) eines autonomen Agenten/einer Maschine (z. B. eines Kraftfahrzeugs) relevant sind, an das Umfeld oder die Umgebungen des autonomen Agenten bis hin zu lokalen Gesetzen und Vorschriften und/oder dergleichen reichen können.
  • Ähnlich können in einer Ausführungsform Autonome-Agenten-Daten 805 von einer oder mehreren Datenquellen 807 gesammelt werden, wie benachbarte Autos und ihre Fahrer oder Fahrgäste, Berichte oder Beschwerden, die von einem oder mehreren Fahrern oder Fahrgästen oder Beobachtern mit einer oder mehreren Regierungsbehörden in Bezug auf lokale Bedingungen, Verkehr, Wetter usw. eingereicht werden. In einer Ausführungsform kann das Sammeln oder Empfangen oder Erkennen von Sozialen-Medien-Daten 801 und Autonomen-Agenten-Daten 805 von der Erkennungs-/Beobachtungslogik 701 aus 7 ausgeführt werden.
  • In einer Ausführungsform können diese Autonomen-Agenten-Daten 805 dann zusammen mit Sozialen-Medien-Daten 801 verwendet und an die Vorhersagelogik 709 weitergeleitet werden, die dann die Kombination beider Daten 801, 805 analysiert, um die bevorstehenden Situationen vorherzusagen, was wiederum einem intelligenten autonomen Mechanismus 610 ermöglicht, bestimmte Entscheidungen 811 basierend auf den Vorhersagen zu treffen. Zum Beispiel können die Entscheidungen 811 eine oder mehrere der folgenden beinhalten: Optimierung von Fahrten und Routen, Bestimmung und Ermöglichung der Beziehung oder Kooperation zwischen Fahrern von autonomen Fahrzeugen, die in die gleiche Richtung fahren, Anzeige von Orten von Interesse für Freunde und Familie, Vorhersage und Auswahl der schnellsten Spur auf einer Autobahn und/oder dergleichen.
  • 8B veranschaulicht ein neuartiges Framework 850 zum Ermöglichen einer intelligenten Sammlung von Daten und Verwaltung von autonomen Maschinen gemäß einer Ausführungsform. Der Kürze halber werden viele der Details, die bereits unter Bezugnahme auf 1-7 erläutert wurden, nicht wiederholt oder im Folgenden erläutert. Beliebige Prozesse, die sich auf das Framework 850 beziehen, können von einer Verarbeitungslogik ausgeführt werden, die Hardware (z. B. eine Schaltung, dedizierte Logik, programmierbare Logik usw.), Software (wie auf einer Verarbeitungsvorrichtung ausgeführte Anweisungen) oder eine Kombination davon umfassen kann, wie von dem intelligenten autonomen Mechanismus 610 aus 6 ermöglicht.. Die Prozesse, die dem Framework 850 zugeordnet sind, können zur Verkürzung und Klarheit der Darstellung in linearen Sequenzen dargestellt oder wiedergegeben werden; es wird jedoch in Betracht gezogen, dass eine beliebige Anzahl von ihnen parallel, asynchron oder in verschiedenen Reihenfolgen ausgeführt werden kann. Ferner sind Ausführungsformen nicht auf eine bestimmte Architekturplatzierung oder ein Framework von Komponenten wie das Framework 850, beschränkt.
  • Wie dargestellt, verwendet das Framework 850 in einer Ausführungsform verschiedene Entitäten, um zusammenzuarbeiten, um eine Optimierung von Teilen und Diensten für autonome Maschinen zu bieten, wie in Bezug auf Kommunikation, Teile/Komponenten, Routen/Führung, Vorhersagen/Auswahlen und/oder dergleichen. Wie zum Beispiel unter Bezugnahme auf 7 weiter erläutert, kann in einer Ausführungsform die autonome Maschine 600 (z. B. ein Kraftfahrzeug, eine Vorrichtung, eine Ausrüstung, ein Roboter usw.) mit einer oder mehreren Entitäten wie dem Servercomputer 735, sozialen/Unternehmensnetzwerk-Websites usw. über eine oder mehrere Kommunikationsmedien 725 wie das Internet, die Cloud usw. kommunizieren, wobei die eine oder die mehreren Entitäten Benutzer, andere autonome Maschinen/Rechenvorrichtungen, Regierungs- oder andere Behörden, soziale oder andere Networking-Websites, Medien, Cloud-Servervorrichtungen usw. einschließen können, um den Austausch von Daten/Informationen zu ermöglichen.
  • Zum Beispiel kann der Austausch von Informationen die Kommunikation oder den Austausch von Karten, Echtzeitverkehrsinformationen, Wettervorhersagen in Echtzeit und in der nahen Zukunft, Standorte, Routenführung, Fahrzeugstatistiken, Komponenten-/Teilstatistiken (z. B. Batteriestatistik, Energiefüllstand, Speicher, Tankfüllstände usw.), Bediener-/Fahrerstatistiken (z. B. Fahraufzeichnungen, Alter, Wohnort usw.), Routenführung mit künstlicher Intelligenz (KI), die individuell an Trainingssätze angepasst ist, usw. einschließen.
  • In einer Ausführungsform können nach dem Sammeln und Austauschen solcher Informationen intelligente und effiziente Trainingssätze 853 generiert und an einen Servercomputer wie die Cloud-Servervorrichtung 735 übermittelt werden, um diese Trainingssätze zu halten und beizubehalten, um sie dann zum Trainieren von neuronalen Netzwerken wie CNN zur intelligenten und besseren Optimierung von Teilen und Diensten der autonomen Maschine 600 zu verwenden. Ferner kann der Servercomputer 735, wie dargestellt, in einem gegenseitigen Informationsaustausch bestimmte Informationen über das Kommunikationsmedium 725 an die autonome Maschine 600 zurücksenden, wie zum Beispiel MPEG-Minimierung usw.
  • 9 veranschaulicht ein Verfahren 900 zum Bereitstellen einer intelligenten Sammlung von Daten und zur Verwaltung von autonomen Maschinen gemäß einer Ausführungsform. Der Kürze halber werden viele der Details, die bereits unter Bezugnahme auf 1-8 erläutert wurden, nicht wiederholt oder im Folgenden erläutert. Beliebige Prozesse, die sich auf das Verfahren 900 beziehen, können von einer Verarbeitungslogik ausgeführt werden, die Hardware (z. B. eine Schaltung, dedizierte Logik, programmierbare Logik usw.), Software (wie auf einer Verarbeitungsvorrichtung ausgeführte Anweisungen) oder eine Kombination davon umfassen kann, wie von dem intelligenten autonomen Mechanismus 610 aus 6 ermöglicht.. Die Prozesse, die dem Framework 900 zugeordnet sind, können zur Verkürzung und Klarheit der Darstellung in linearen Sequenzen dargestellt oder wiedergegeben werden; es wird jedoch in Betracht gezogen, dass eine beliebige Anzahl von ihnen parallel, asynchron oder in verschiedenen Reihenfolgen ausgeführt werden kann.
  • Das Verfahren 900 beginnt bei Block 901 mit dem Start des Verfahrens 900 und geht weiter zu Block 903, wo eine Bestimmung vorgenommen wird, ob ein Fehler in einer autonomen Maschine erkannt wird oder sich auf diese bezieht. Falls nicht, geht das Verfahren 900 in einer Schleife zurück zu Block 903 mit einer anderen Bestimmung. Wenn jedoch ein Fehler erkannt wird, werden, wie unter Bezugnahme auf 7 erläutert, werden bei Block 905 OBDII-Codes gelesen, und bei Block 907 wird das Maschinendiagnose-CNN aufgerufen, um die Diagnose des Fehlers und seine möglichen Reparaturarten auszuführen. In einer Ausführungsform wird in Block 909 eine Bestimmung ausgeführt, ob die Diagnosezuverlässigkeit hoch genug ist. Falls ja, wird die Diagnose abgeschlossen und der Fehler wird anschließend behoben, und in einigen Ausführungsformen endet das Verfahren 900 oder fährt mit der Erkennung eines anderen Fehlers bei Block 903 fort.
  • Falls jedoch das Vertrauen in die Diagnose nicht hoch genug ist, fährt das Verfahren 900 bei Block 911 mit einer weiteren Bestimmung fort, ob ein drahtloses Netzwerk verfügbar ist. Falls nicht, wird in Block 917 eine manuelle oder andere Form der Diagnose ausgeführt, und das Verfahren 900 endet oder geht weiter zu Block 903 mit der Bestimmung eines anderen Fehlers. Falls ja, wird bei Block 913 ein Master-CNN (wie einer, der sich in einer Cloud-basierten Serverrechenvorrichtung befindet oder von dieser gehostet wird) über ein Netzwerk (z. B. Internet) mit Fahrzeugcodes abgefragt und eine Diagnose ausgeführt. Bei Block 915 wird eine andere Bestimmung vorgenommen, ob das Vertrauen in die Master-CNN-Diagnose hoch genug ist. Falls ja, wird in Block 919 die Diagnose abgeschlossen und Fehler werden behoben, und das Verfahren 900 endet oder geht weiter bei Block 903. Falls nicht, wird in Block 917 eine manuelle oder andere Form der Diagnose ausgeführt, und das Verfahren 900 endet oder geht weiter zu Block 903 mit der Bestimmung eines anderen Fehlers.
  • Überblick über das Maschinenlernen
  • 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.
  • 10 ist ein verallgemeinertes Diagramm eines Maschinenlernsoftwarestapels 1000. Eine Maschinenlernanwendung 1002 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 1002 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 1002 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 1002 kann über ein Maschinenlern-Framework 1004 aktiviert werden. Das Maschinenlern-Framwork 1004 kann eine Bibliothek von Maschinenlernprimitiven bereitstellen. Maschinenlernprimitive sind Grundoperationen, die üblicherweise von Maschinenlernalgorithmen ausgeführt werden. Ohne das Maschinenlern-Framework 1004 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 1004 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 1004 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 1004 kann Eingabedaten verarbeiten, die von der Maschinenlernanwendung 1002 empfangen werden, und die geeignete Eingabe für ein Rechen-Framework 1006 generieren. Das Rechen-Framework 1006 kann die dem GPGPU-Treiber 1008 bereitgestellten zugrundeliegenden Anweisungen abstrahieren, um dem Maschinenlern-Framework 1004 zu ermöglichen, die Hardwarebeschleunigung über die GPGPU-Hardware 1010 zu nutzen, ohne dass das Maschinenlern-Framework 1004 die Architektur der GPGPU-Hardware 1010 genauestens kennen muss. Außerdem kann das Rechen-Framework 1006 eine Hardwarebeschleunigung für das Maschinenlern-Framework 1004 über eine viele verschiedene Typen und Generationen der GPGPU-Hardware 1010 ermöglichen.
  • GPGPU-Machinenlernbeschleunigung
  • 11 veranschaulicht eine hochparallele Universal-Grafikverarbeitungseinheit 1100 gemäß einer Ausführungsform. In einer Ausführungsform kann die Universal-Verarbeitungseinheit (GPGPU) 1100 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 1100 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 1100 weist eine Host-Schnittstelle 1102 auf, um eine Verbindung mit einem Host-Prozessor zu ermöglichen. In einer Ausführungsform ist die Host-Schnittstelle 1102 eine PCI Express-Schnittstelle. Die Host-Schnittstelle kann jedoch auch eine anbieterspezifische Kommunikationsschnittstelle oder Kommunikationsstruktur sein. Die GPGPU 1100 empfängt Befehle von dem Host-Prozessor und verwendet einen globalen Scheduler 1104 zum Verteilen von Ausführungs-Threads, die diesen Befehlen zugeordnet sind, an einen Satz von Rechen-Clustern 1106A-H. Die Rechen-Cluster 1106A-H nutzen einen Cachespeicher 1108 gemeinsam. Der Cachespeicher 1108 kann als Cache auf höherer Ebene für Cachespeicher innerhalb der Rechen-Cluster 1106A-H dienen.
  • Die GPGPU 1100 weist einen Speicher 1114A-B auf, der über einen Satz von Speichersteuerungen 1112A-B mit den Rechen-Clustern 1106A-H gekoppelt ist. In verschiedenen Ausführungsformen kann der Speicher 1114A-B verschiedene Arten von Speichervorrichtungen aufweisen, einschließlich dynamischen Direktzugriffsspeichers (DRAM) oder Grafik-Direktzugriffsspeichers wie synchronen Grafik-Direktzugriffsspeichers (SGRAM), einschließlich GDDR (Graphics Double Data Rate) -Speichers. In einer Ausführungsform können die Speichereinheiten 224A-N auch 3D-Stapelspeicher einschließen, einschließlich, jedoch nicht beschränkt auf Speicher mit hoher Bandbreite (HBM).
  • In einer Ausführungsform weist jeder Rechen-Cluster GPLAB06A-H einen Satz von Grafik-Multiprozessoren wie den Grafik-Multiprozessor 400 aus 4A auf. Die Grafik-Multiprozessoren des Rechen-Clusters weisen mehrere Arten von Ganzzahl- und Gleitkommalogikeinheiten auf, die Rechenoperationen in einem Präzisionsbereich 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 1106A-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 1100 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 1100 über die Host-Schnittstelle 1102. In einer Ausführungsform weist die GPGPU 1100 einen I/O-Hub 1108 auf, der die GPGPU 1100 mit einer GPU-Verbindung 1110 koppelt, die eine direkte Verbindung zu anderen Instanzen der GPGPU ermöglicht. In einer Ausführungsform ist die GPU-Verbindung 1110 mit einer dedizierten GPU-zu-GPU-Brücke gekoppelt, die Kommunikation und Synchronisation zwischen mehreren Instanzen der GPGPU 1100 ermöglicht. In einer Ausführungsform ist die GPU-Verbindung 1110 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 1100 in separaten Datenverarbeitungssystemen und kommunizieren über eine Netzwerkvorrichtung, auf die über die Host-Schnittstelle 1102 zugegriffen werden kann. In einer Ausführungsform kann die GPU-Verbindung 1110 konfiguriert sein, eine Verbindung mit einem Host-Prozessor zusätzlich zu oder als eine Alternative zu der Host-Schnittstelle 1102 zu ermöglichen.
  • Wenngleich die veranschaulichte Konfiguration der GPGPU 1100 zum Trainieren von neuronalen Netzwerken konfiguriert sein kann, stellt eine Ausführungsform eine alternative Konfiguration der GPGPU 1100 bereit, die zum Einsatz in einer Hochleistungs- oder Niedrigenergie-Inferenzplattform konfiguriert sein kann. In einer Inferenzkonfiguration weist die GPGPU 1100 weniger der Rechen-Cluster 1106A-H im Vergleich zu der Trainingskonfiguration auf. Außerdem kann sich die Speichertechnologie, die dem Speicher 1114A -B zugeordnet ist, zwischen Inferenz- und Trainingskonfigurationen unterscheiden. In einer Ausführungsform kann die Inferenzkonfiguration der GPGPU 1100 das Inferenzieren spezifischer Anweisungen unterstützen. Zum Beispiel kann eine Inferenzkonfiguration Unterstützung für eine oder mehrere 8-Bit-Integer-Punktproduktanweisungen bereitstellen, die üblicherweise während Inferenzoperationen für implementierte neuronale Netzwerke verwendet werden.
  • 12 veranschaulicht ein Multi-GPU-Rechensystem 1200 gemäß einer Ausführungsform. Das Multi-GPU-Computersystem 1200 kann einen Prozessor 1202 aufweisen, der über einen Host-Schnittstellenschalter 1204 mit mehreren GPGPUs 1206A-D gekoppelt ist. Der Host-Schnittstellenschalter 1204 ist in einer Ausführungsform eine PCI-Express-Switch-Vorrichtung, die den Prozessor 1202 mit einem PCI-Express-Bus koppelt, über den der Prozessor 1202 mit dem Satz von GPGPUs 1206A-D kommunizieren kann. Jede der mehreren GPGPUs 1206A -D kann eine Instanz der GPGPU 1100 aus 11 sein. Die GPGPUs 1206A-D können über einen Satz von Hochgeschwindigkeits-Punkt-zu-Punkt-GPU-zu-GPU-Verbindungen 1216 verbunden sein. Die Hochgeschwindigkeits-GPU-zu-GPU-Verbindungen können mit jeder der GPGPUs 1206A-D über eine dedizierte GPU-Verbindung wie die GPU-Verbindung 1110 wie in 11 verbunden sein. Die P2P-GPU-Verbindungen 1216 ermöglichen eine direkte Kommunikation zwischen jeder der GPGPUs 1206A-D, ohne dass eine Kommunikation über den Host-Schnittstellenbus erforderlich ist, mit dem der Prozessor 1202 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 1200, beispielsweise über ein oder mehrere Netzwerkvorrichtungen. Während in der dargestellten Ausführungsform die GPGPUs 1206A-D über den Host-Schnittstellenschalter 1204 mit dem Prozessor 1202 verbunden sind, beinhaltet der Prozessor 1202 in einer Ausführungsform direkte Unterstützung für die P2P-GPU-Verbindungen 1216 und kann direkt mit den GPGPUs 1206A-D 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 weist Zyklen auf. 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 Maschinenlernen mit 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 Merkmalsdarstellung 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.
  • 13A-B veranschaulichen ein beispielhaftes tiefes neuronales Netzwerk. 13A veranschaulicht verschiedene Schichten innerhalb eines CNN. Wie in 13A dargestellt, kann ein beispielhaftes CNN, das zum Modellieren der Bildverarbeitung verwendet wird, eine Eingabe 1302 empfangen, die die roten, grünen und blauen (RGB) Komponenten eines Eingabebildes beschreibt. Die Eingabe 1302 kann von mehreren Faltungsschichten (z. B. Faltungsschicht 1304, Faltungsschicht 1306) verarbeitet werden. Die Ausgabe von den mehreren Faltungsschichten kann wahlweise von einem Satz von vollständig verbundenen Schichten 1308 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 1308 kann verwendet werden, um ein Ausgabeergebnis von dem Netzwerk zu erzeugen. Die Aktivierungen innerhalb der vollständig verbundenen Schichten 1308 können unter Verwendung einer Matrixmultiplikation anstelle einer Faltung berechnet werden. Nicht alle CNN-Implementierungen verwenden vollständig verbundene Schichten DPLA08. Zum Beispiel kann in einigen Implementierungen die Faltungsschicht 1306 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 1308 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.
  • 13B zeigt beispielhafte Berechnungsstufen innerhalb einer Faltungsschicht eines CNN. Die Eingabe in eine Faltungsschicht 1312 eines CNN kann in drei Stufen einer Faltungsschicht 1314 verarbeitet werden. Die drei Stufen können eine Faltungsstufe 1316, eine Detektorstufe 1318 und eine Sammelstufe 1320 einschließen. Die Faltungsschicht 1314 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 1316 werden mehrere Faltungen parallel ausgeführt, um einen Satz linearer Aktivierungen zu erzeugen. Die Faltungsstufe 1316 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 1316 definiert einen Satz linearer Aktivierungen, die von aufeinanderfolgenden Stufen der Faltungsschicht 1314 verarbeitet werden.
  • Die linearen Aktivierungen können von einer Detektorstufe 1318 verarbeitet werden. In der Detektorstufe 1318 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 f(x) = max(0, x) definiert ist, sodass die Aktivierung bei Null als Schwellenwert verwendet wird.
  • Die Pooling-Stufe 1320 verwendet eine Pooling-Funktion, die die Ausgabe der Faltungsschicht 1306 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 1320 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 1314 kann dann von der nächsten Schicht 1322 verarbeitet werden. Die nächste Schicht 1322 kann eine zusätzliche Faltungsschicht oder eine der vollständig verbundenen Schichten 1308 sein. Zum Beispiel kann die erste Faltungsschicht 1304 von 13A zu der zweiten Faltungsschicht 1306 ausgegeben werden, während die zweite Faltungsschicht zu einer ersten Schicht der vollständig verbundenen Schichten 1308 ausgegeben werden kann.
  • 14 veranschaulicht ein beispielhaftes rekurrentes neuronales Netzwerk 1400. 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 1400 kann als mit einer Eingabeschicht 1402, die einen Eingabevektor empfängt, verborgenen Schichten 1404 zum Implementieren einer rekurrenten Funktion, einem Rückkopplungsmechanismus 1405 zum Aktivieren eines „Speichers“ von vorherigen Zuständen und einer Ausgabeschicht 1406 zum Ausgeben eines Ergebnisses beschrieben werden. Das RNN 1400 arbeitet nach Zeitschritten. Der Zustand des RNN zu einem gegebenen Zeitschritt wird basierend auf dem vorherigen Zeitschritt über den Rückkopplungsmechanismus 1405 beeinflusst. Für einen gegebenen Zeitschritt wird der Zustand der verborgenen Schichten 1404 durch den vorherigen Zustand und die Eingabe im aktuellen Zeitschritt definiert. Eine Anfangseingabe ((x1) in einem ersten Schritt kann von der verborgenen Schicht 1404 verarbeitet werden. Eine zweite Eingabe ((x2) kann von der verborgenen Schicht 1404 unter Verwendung von Zustandsinformationen verarbeitet werden, die während der Verarbeitung der Anfangseingabe ((x1) bestimmt werden. Ein gegebener Zustand kann als st = f(Uxt + Wst-1) berechnet werden, wobei U und W Paramtermatrizen sind. Die Funktion f ist im Allgemeinen eine Nichtlinearität wie die Hyperbolic Tangens Function (Tanh) oder eine Variante der Gleichrichterfunktion f(x) = max(0, x). Die spezifische mathematische Funktion, die in den verborgenen Schichten 1404 verwendet wird, kann jedoch abhängig von den spezifischen Implementierungsdetails des RNN 1400 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.
  • 15 veranschaulicht das Training und den Einsatz eines tiefen neuronalen Netzwerks. Sobald ein gegebenes Netzwerk für eine Aufgabe strukturiert wurde, wird das neuronale Netzwerk unter Verwendung eines Trainingsdatensatzes 1502 trainiert. Verschiedene Trainings-Frameworks 1504 wurden entwickelt, um eine Hardwarebeschleunigung des Trainingsprozesses zu ermöglichen. Zum Beispiel kann das Maschinenlern-Framework 1004 aus 10 als ein Trainings-Framework 1004 konfiguriert sein. Das Trainings-Framework 1004 kann sich in ein untrainiertes neuronales Netzwerk 1506 einklinken und ermöglichen, dass das untrainierte neuronale Netzwerk unter Verwendung der hierin beschriebenen parallelen Verarbeitungsressourcen trainiert wird, um ein trainiertes neuronales Netzwerk 1508 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 1502 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 1504 kann eingestellt werden, um die Gewichtungen einzustellen, die das untrainierte neuronale Netzwerk 1506 steuern. Das Trainings-Framework 1504 kann Werkzeuge bereitstellen, um zu überwachen, wie gut das untrainierte neuronale Netzwerk 1506 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 1508 zugeordnet ist. Das trainierte neuronale Netzwerk 1508 kann dann eingesetzt werden, um eine beliebige Anzahl von Maschinenlernoperationen zu implementieren.
  • Unüberwachtes Lernen ist ein Lernverfahren, bei dem das Netzwerk versucht, sich selbst mit unmarkierten Daten zu trainieren. Somit wird der Trainingsdatensatz 1502 für unüberwachtes Lernen Eingabedaten ohne zugehörige Ausgabedaten enthalten. Das untrainierte neuronale Netzwerk 1506 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 1507 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 1502 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 1508, sich an die neuen Daten 1512 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.
  • 16 ist ein Bockdiagramm, das ein 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 Universal-Verarbeitungsknoten aufweisen, wie die hochparallele Universal-Grafikverarbeitungseinheit 1100 wie in 1100. Wie dargestellt, kann das verteilte Lernen durch Modellparallelismus 1602, Datenparallelismus 1604 oder eine Kombination aus Modell- und Datenparallelismus 1604 ausgeführt werden.
  • Beim Modellparallelismus 1602 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 1604 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 schließen eine Parametermittelwertbildung und einen aktualisierungsbasierten Datenparallelismus ein. 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. Ein aktualisierungsbasierter Datenparallelismus ist der Parametermittelwertbildung ähnlich, außer dass die Aktualisierungen an die Modelle übertragen werden und nicht Parameter von den Knoten an den Parameterserver ü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 1606 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 Parallelprozessoren, die zum Trainieren geeignet sind, schließen die hochparallele Universal-Grafikverarbeitungseinheit 1100 aus 1100 und das Multi-GPU-Rechensystem 1200 aus 1200 ein. 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.
  • 17 zeigt ein beispielhaftes Inferenzsystem auf einem Chip (SOC) 1700, das zum Ausführen von Inferenz unter Verwendung eines trainierten Modells geeignet ist. Der SOC 1700 kann Verarbeitungskomponenten integrieren, einschließlich eines Medienprozessors 1702, eines Vision-Prozessors 1704, einer GPGPU 1706 und eines Multi-Kern-Prozessors 1708. Der SOC 1700 kann zusätzlich einen On-Chip-Speicher 1705 aufweisen, der einen gemeinsamen 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 1700 als ein Teil des Hauptsteuersystems für ein autonomes Fahrzeug verwendet werden. Wenn der SOC 1700 zur Verwendung in autonomen Fahrzeugen konfiguriert ist, ist der SOC derart ausgelegt und konfiguriert, dass er die relevanten funktionalen Sicherheitsstandards des Einsatzgebietes erfüllt.
  • Während des Betriebs können der Medienprozessor 1702 und der Bildprozessor 1704 gemeinsam arbeiten, um Computerbildverarbeitungsoperationen zu beschleunigen. Der Medienprozessor 1702 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 1705 geschrieben werden. Der Vision-Prozessor 1704 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 1704 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 1706 ausgeführt werden.
  • Der Multi-Kern-Prozessor 1708 kann eine Steuerlogik aufweisen, um das Sequenzieren und Synchronisieren von Datenübertragungen und gemeinsam genutzten Speicheroperationen, die von dem Medienprozessor 1702 und dem Bildprozessor 1704 ausgeführt werden, zu unterstützen. Der Multi-Kern-Prozessor 1708 kann auch als ein Anwendungsprozessor zum Ausführen von Softwareanwendungen dienen, die die Inferenzrechenleistung der GPGPU 1706 nutzen können. Zum Beispiel kann zumindest ein Teil der Navigations- und Fahrlogik in Software implementiert sein, die auf dem Multi-Kern-Prozessor 1708 ausgeführt wird. Eine solche Software kann Rechenarbeitslasten direkt an die GPGPU 1706 ausgeben, oder die Rechenarbeitslasten können an den Multi-Kern-Prozessor 1708 ausgegeben werden, der mindestens einen Teil dieser Operationen an die GPGPU 1706 auslagern kann.
  • Die GPGPU 1706 kann Rechen-Cluster aufweisen, wie eine Konfiguration von niedriger Leistung der Rechen-Cluster 1106A-1106H innerhalb der hochparallelen Universal-Grafikverarbeitungseinheit 1100. Die Rechen-Cluster innerhalb der GPGPU 1706 können Anweisungen unterstützen, die speziell optimiert sind, um Inferenzberechnungen in einem trainierten neuronalen Netzwerk auszuführen. Zum Beispiel kann die GPGPU 1706 Anweisungen unterstützen, um Berechnungen mit niedriger Genauigkeit auszuführen, wie 8-Bit- und 4-Bit-Ganzzahlvektoroperationen.
  • Systemübersicht II
  • 18 ist ein Blockdiagramm eines Verarbeitungssystems 1800 gemäß einer Ausführungsform. In verschiedenen Ausführungsformen weist das System 1800 einen oder mehrere Prozessoren 1802 und einen oder mehrere Grafikprozessoren 1808 auf und kann in einem Einzelprozessor-Desktopsystem, einem Mehrprozessor-Arbeitsstationssystem oder einem Serversystem, das eine große Anzahl von Prozessoren 1802 oder Prozessorkernen 1807 aufweist, implementiert werden. In einer Ausführungsform ist das System 1800 eine integrierte System-auf-einem-Chip(SoC)-Schaltung zur Verwendung in mobilen, handgehaltenen oder eingebetteten Vorrichtungen.
  • Eine Ausführungsform des Systems 1800 kann eine serverbasierte Gaming-Plattform, eine Spielekonsole, einschließlich einer Spiele- und Medienkonsole, eine mobile Gaming-Konsole, eine handgehaltene Spielekonsole oder eine Online-Spielekonsole beinhalten oder in dieser integriert sein. Bei manchen Ausführungsformen ist das System 1800 ein Mobiltelefon, ein Smartphone, eine Tablet-Datenverarbeitungsvorrichtung oder eine mobile Internetvorrichtung. Das Datenverarbeitungssystem 1800 kann auch eine tragbare Vorrichtung, wie etwa eine tragbare Smart-Watch-Vorrichtung, eine Smart-Brilleneinrichtung, eine Vorrichtung für eine erweiterte Realität oder eine Vorrichtung für eine virtuelle Realität beinhalten, mit dieser gekoppelt sein oder in dieser integriert sein. Bei manchen Ausführungsformen ist das Datenverarbeitungssystem 1800 ein Fernseher oder eine Set-Top-Box-Vorrichtung, der bzw. die einen oder mehrere Prozessoren 1802 und eine grafische Schnittstelle, die durch einen oder mehrere Grafikprozessoren 1808 erzeugt wird, aufweist.
  • Bei manchen Ausführungsformen beinhaltet bzw. beinhalten der eine oder die mehreren Prozessoren 1802 jeweils einen oder mehrere Prozessorkerne 1807 zum Verarbeiten von Anweisungen, die, wenn sie ausgeführt werden, Operationen für System- und Benutzersoftware durchführen. Bei manchen Ausführungsformen ist jeder des einen oder der mehreren Prozessorkerne 1807 dazu konfiguriert, einen spezifischen Anweisungssatz 1809 zu verarbeiten. Bei manchen Ausführungsformen kann der Anweisungssatz 1809 eine CISC (Complex Instruction Set Computing), eine RISC (Reduced Instruction Set Computing) oder eine Datenverarbeitung über ein VLIW (Very Long Instruction Word) erleichtern. Mehrere Prozessorkerne 1807 können jeweils einen anderen Anweisungssatz 1809 verarbeiten, der Anweisungen zum Erleichtern der Emulation anderer Anweisungssätze beinhalten kann. Der Prozessorkern 1807 kann auch andere Verarbeitungsvorrichtungen aufweisen, wie einen Digitalsignalprozessor (DSP).
  • Bei manchen Ausführungsformen beinhaltet der Prozessor 1802 einen Cache-Speicher 1804. Abhängig von der Architektur kann der Prozessor 1802 einen einzelnen internen Cache oder mehrere Ebenen von internem Cache aufweisen. Bei manchen Ausführungsformen wird der Cache-Speicher durch verschiedene Komponenten des Prozessors 1802 gemeinsam genutzt. Bei manchen Ausführungsformen verwendet der Prozessor 1802 auch einen externen Cache (z. B. einen Ebene-3(L3)-Cache oder einen Cache der letzten Ebene (LLC)) (nicht dargestellt), der durch Prozessorkerne 1807, die bekannte Cache-Kohärenztechniken verwenden, gemeinsam genutzt wird. Eine Registerdatei 1806 ist zusätzlich im Prozessor 1802 enthalten, der unterschiedliche Arten von Registern zum Speichern unterschiedlicher Arten von Daten (z. B. Ganzzahlregister, Gleitkommaregister, Statusregister und ein Anweisungszeigerregister) beinhalten kann. Manche Register können Allgemeinregister sein, während andere Register spezifisch für das Design des Prozessors 1802 sein können.
  • Bei manchen Ausführungsformen ist der Prozessor 1802 mit einem Prozessorbus 1810 zum Übertragen von Kommunikationssignalen wie Address-, Daten- oder Steuersignalen zwischen dem Prozessor 1802 und anderen Komponenten im System 1800 gekoppelt. In einer Ausführungsform verwendet das System 1800 eine beispielhafte ,Hub'-Systemarchitektur, einschließlich eines Speichersteuerungshubs 1816 und eines Eingabe-/Ausgabe (I/O) -Steuerungshubs 1830. Ein Speichersteuerungshub 1816 ermöglicht eine Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 1800, während der I/O-Steuerungshub (ICH) 1830 Verbindungen zu I/O-Vorrichtungen über einen lokalen I/O-Bus bereitstellt. In einer Ausführungsform ist die Logik des Speichersteuerungshubs 1816 in dem Prozessor integriert.
  • Die Speichervorrichtung 1820 kann eine dynamische Direktzugriffsspeicher (DRAM) -Vorrichtung, eine statische Direktzugriffsspeicher (SRAM) -Vorrichtung, eine Flash-Speichervorrichtung, eine Phasenwechsel-Speichervorrichtung oder eine andere Speichervorrichtung sein, die eine geeignete Leistungsfähigkeit zum Dienen als ein Prozessspeicher aufweist. In einer Ausführungsform kann die Speichervorrichtung 1820 als Systemspeicher für das System 1800 arbeiten, um Daten 1822 und Anweisungen 1821 zur Verwendung zu speichern, wenn der eine oder die mehreren Prozessoren 1802 eine Anwendung oder einen Prozess ausführen. Der Speichersteuerungshub 1816 ist auch mit einem optionalen externen Grafikprozessor 1812 gekoppelt, der mit dem einen oder den mehreren Grafikprozessoren 1808 in den Prozessoren 1802 kommunizieren kann, um Grafik- und Medienoperationen auszuführen.
  • In einigen Ausführungsformen aktiviert der ICH 1830 Peripheriegeräte, um Speichervorrichtung 1820 und den Prozessor 1802 über einen Hochgeschwindigkeits-I/O-Bus zu verbinden. Die I/O-Peripheriegeräte beinhalten eine Audiosteuerung 1846, eine Firmware-Schnittstelle 1828, einen drahtlosen Sendeempfänger 1826 (z. B. Wi-Fi, Bluetooth), eine Datenspeicherungsvorrichtung 1824 (z. B. Festplattenlaufwerk, Flash-Speicher usw.) und eine Alt-I/O-Steuerung 1840 zum Koppeln von Alt (z. B. PS/2 (Personal System 2)) -Vorrichtungen mit dem System. Eine oder mehrere USB (Universal Serial Bus) -Steuerungen 1842 sind mit Eingabevorrichtungen wie Kombinationen von Tastatur und Maus 1844 verbunden. Eine Netzwerksteuerung 1834 kann auch mit dem ICH 1830 gekoppelt sein. Bei manchen Ausführungsformen ist eine Hochleistungsnetzwerksteuerung (nicht dargestellt) mit dem Prozessorbus 1810 gekoppelt. Man wird zu schätzen wissen, dass das dargestellte System 1800 beispielhaft und nicht einschränkend ist, da andere Arten von Datenverarbeitungssystemen, die unterschiedlich konfiguriert sind, ebenfalls verwendet werden können. Zum Beispiel kann der I/O-Steuerungshub 1830 in den einen oder die mehreren Prozessoren 1802 integriert sein, oder der Speichersteuerungshub 1816 und der I/O-Steuerungshub 1830 können in einen diskreten externen Grafikprozessor wie den externen Grafikprozessor 1812 integriert sein.
  • 19 ist ein Blockdiagramm einer Ausführungsform eines Prozessors 1900, der einen oder mehrere Prozessorkerne, eine integrierte Speichersteuerung und einen integrierten Grafikprozessor aufweist, gemäß manchen Ausführungsformen; Die Elemente aus 19, die die gleichen Bezugsnummern (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur aufweisen, können auf eine beliebige ähnliche Art und Weise zu der beschriebenen arbeiten oder fungieren, sind jedoch nicht darauf beschränkt. Der Prozessor 1900 kann zusätzliche Kerne bis zu und einschließlich des zusätzlichen Kerns 1902N aufweisen, der durch die gestrichelten Kästchen dargestellt ist. Jeder der Prozessorkerne 1902A-1902N weist eine oder mehrere interne Cacheeinheiten 1904A-1904N auf. In einigen Ausführungsformen hat jeder Prozessorkern auch Zugriff auf eine oder mehrere gemeinsam genutzte zwischengespeicherte Einheiten 1906.
  • Die internen Cacheeinheiten 1904A-1904N und die geteilten Cacheeinheiten 1906 repräsentieren eine Cachespeicherhierarchie innerhalb des Prozessors 1900. Die Cachespeicherhierarchie kann mindestens eine Ebene von Anweisungs- und Datencachespeichern innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen von gemeinsam genutzten Zwischenebenen-Cachespeichern aufweisen, wie eine Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4) oder andere Cacheebenen, wobei die höchste Cacheebene vor dem externen Speicher als LLC eingestuft ist. In einigen Ausführungsformen hält die Cache-Kohärenzlogik die Kohärenz zwischen den verschiedenen Cacheeinheiten 1906 und 1904A-1904N aufrecht.
  • In einigen Ausführungsformen kann der Prozessor 1900 auch einen Satz von einer oder mehreren Bussteuereinheiten 1916 und einen Systemagentenkern 1910 aufweisen. Die eine oder die mehreren Bussteuereinheiten 1916 verwalten einen Satz von peripheren Bussen, wie einen oder mehrere periphere Komponentenverbindungsbusse (z. B. PCI, PCI Express). Der Systemagentenkern 1910 stellt eine Verwaltungsfunktionalität für die verschiedenen Prozessorkomponenten bereit. In einigen Ausführungsformen weist der Systemagentenkern 1910 einen oder mehrere integrierte Speichersteuerungen 1914 zum Verwalten des Zugriffs auf verschiedene externe Speichervorrichtungen (nicht dargestellt) auf.
  • In einigen Ausführungsformen unterstützen einer oder mehrere der Prozessorkerne 1902A-1902N simultanes Multithreading. In einer solchen Ausführungsform weist der Systemagentenkern 1910 Komponenten zum Koordinieren und Betreiben der Kerne 1902A-1902N während einer Multithread-Verarbeitung auf. Der Systemagentenkern 1910 kann außerdem eine Leistungssteuereinheit (Power Control Unit, PCU) aufweisen, die Logik und Komponenten zum Regeln des Leistungszustands der Prozessorkerne 1902A-1902N und des Grafikprozessors 1908 aufweist.
  • In einigen Ausführungsformen weist der Prozessor 1900 außerdem einen Grafikprozessor 1908 zum Ausführen von Grafikverarbeitungsoperationen auf. In einigen Ausführungsformen ist der Grafikprozessor 1908 mit dem Satz von gemeinsam genutzten Cacheeinheiten 1906 und dem Systemagentenkern 1910 gekoppelt, der den einen oder die mehreren integrierten Speichersteuerungen 1914 aufweist. In einigen Ausführungsformen ist eine Anzeigesteuerung 1911 mit dem Grafikprozessor 1908 gekoppelt, um eine Grafikprozessorausgabe zu einer oder mehreren gekoppelten Anzeigen anzusteuern. In einigen Ausführungsformen kann die Anzeigesteuerung 1911 ein separates Modul sein, das über mindestens eine Verbindung mit dem Grafikprozessor gekoppelt ist, oder sie kann in den Grafikprozessor 1908 oder den Systemagentenkern 1910 integriert sein.
  • In einigen Ausführungsformen wird eine ringbasierte Verbindungseinheit 1912 verwendet, um die internen Komponenten des Prozessors 1900 zu koppeln. Jedoch kann eine alternative Verbindungseinheit verwendet werden, wie eine Punkt-zu-Punkt-Verbindung, eine geschaltete Verbindung oder andere Techniken, einschließlich Techniken, die im Stand der Technik gut bekannt sind. In einigen Ausführungsformen ist der Grafikprozessor 1908 über eine I/O-Verbindung 1913 mit der Ringverbindung 1912 gekoppelt.
  • Die beispielhafte I/O-Verbindung 1913 stellt mindestens eine von mehreren Varianten von I/O-Verbindungen dar, einschließlich einer On-Package-I/O-Verbindung, die die Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 1918 wie einem eDRAM-Modul ermöglicht. In einigen Ausführungsformen verwenden jeder der Prozessorkerne 1902-1902N und der Grafikprozessor 1908 eingebettete Speichermodule 1918 als einen gemeinsam genutzten Last-Level-Cache.
  • In einigen Ausführungsformen sind die Prozessorkerne 1902A-1902N homogene Kerne, die die gleiche Anweisungssatzarchitektur ausführen. In einer anderen Ausführungsform sind die Prozessorkerne 1902A-1902N hinsichtlich der Anweisungssatzarchitektur (ISA) heterogen, wobei ein oder mehrere Prozessorkerne 1902A-N einen ersten Anweisungssatz ausführen, während mindestens einer der anderen Kerne einen Teilsatz des ersten Anweisungssatzes oder eines anderen Anweisungssatzes ausführen. In einer Ausführungsform sind die Prozessorkerne 1902A-1902N in Bezug auf die Mikroarchitektur heterogen, wobei ein oder mehrere Kerne mit einem relativ höheren Leistungsverbrauch mit einem oder mehreren Leistungskernen mit einem niedrigeren Leistungsverbrauch gekoppelt sind. Außerdem kann der Prozessor 1900 auf einem oder mehreren Chips oder als eine integrierte SoC-Schaltung mit den dargestellten Komponenten zusätzlich zu anderen Komponenten implementiert sein.
  • 20 ist ein Blockdiagramm eines Grafikprozessors 2000, der eine diskrete Grafikverarbeitungseinheit sein kann, oder kann ein Grafikprozessor sein, der mit einer Vielzahl von Verarbeitungskernen integriert ist. In einigen Ausführungsformen kommuniziert der Grafikprozessor über eine speicherabgebildete I/O-Schnittstelle mit Registern auf dem Grafikprozessor und mit Befehlen, die in dem Prozessorspeicher platziert sind. In einigen Ausführungsformen weist der Grafikprozessor 2000 eine Speicherschnittstelle 2014 auf, um auf den Speicher zuzugreifen. Die Speicherschnittstelle 2014 kann eine Schnittstelle zum lokalen Speicher, zu einem oder mehreren internen Caches, zu einem oder mehreren gemeinsam genutzten externen Caches und/oder zum Systemspeicher sein.
  • In einigen Ausführungsformen weist der Grafikprozessor 2000 auch eine Anzeigesteuerung 2002 auf, um Anzeigeausgabedaten zu einer Anzeigevorrichtung 2020 anzusteuern. Die Anzeigesteuerung 2002 weist Hardware für eine oder mehrere Überlagerungsebenen für die Anzeige und Zusammensetzung mehrerer Schichten von Video- oder Benutzerschnittstellenelementen auf. In einigen Ausführungsformen weist der Grafikprozessor 2000 eine Video-Codec-Engine 2006 zum Codieren, Decodieren oder Umcodieren von Medien zu, von oder zwischen einem oder mehreren Mediencodierungsformaten auf, einschließlich, jedoch nicht beschränkt auf Moving Picture Experts Group (MPEG) -Formate wie MPEG-2, AVC-Formate (Advanced Video Coding) wie H.264/MPEG-4 AVC sowie die Society of Motion Picture & Television Engineers (SMPTE) 421M/VC-1 und Joint Photographic Experts Group (JPEG) -Formate wie JPEG und Motion JPEG (MJPEG).
  • In einigen Ausführungsformen weist der Grafikprozessor 2000 eine Blockbildübertragungs- (BLIT) -Engine 2004 auf, um zweidimensionale (2D) Rasterisierer-Operationen auszuführen, die zum Beispiel Bit-Boundary-Block-Übertragungen einschließen. In einer Ausführungsform werden jedoch 2D-Grafikoperationen unter Verwendung einer oder mehrerer Komponenten der Grafikverarbeitungs-Engine (GPE) 2010 ausgeführt. In einigen Ausführungsformen ist die Grafikverarbeitungs-Engine 2010 eine Rechen-Engine zum Ausführen von Grafikoperationen einschließlich dreidimensionaler (3D) Grafikoperationen und Medienoperationen.
  • In einigen Ausführungsformen weist die GPE 2010 eine 3D-Pipeline 2012 zum Ausführen von 3D-Operationen, beispielsweise zum Rendern von dreidimensionalen Bildern und Szenen unter Verwendung von Verarbeitungsfunktionen auf, die auf 3D-Primitivformen (z. B. Rechteck, Dreieck usw.) wirken. Die 3D-Pipeline 2012 weist programmierbare und feste Funktionselemente auf, die verschiedene Aufgaben innerhalb der Element- und/oder Ausführungs-Threads für ein 3D/Medien-Subsystem 2015 hervorbringen. Während die 3D-Pipeline 2012 zum Ausführen von Medienoperationen verwendet werden kann, weist eine Ausführungsform von GPE 2010 auch eine Medien-Pipeline 2016 auf, die speziell zum Ausführen von Medienoperationen wie Videonachbearbeitung und Bildverbesserung verwendet wird.
  • In einigen Ausführungsformen weist die Medien-Pipeline 2016 eine feste Funktion oder programmierbare Logikeinheiten zum Ausführen einer oder mehrerer spezialisierter Medienoperationen wie Videodecodierungsbeschleunigung, Video-De-Interlacing und Videocodierungsbeschleunigung anstelle von oder im Auftrag von der Video-Codec-Engine 2006 auf. In einigen Ausführungsformen weist die Medien-Pipeline 2016 außerdem eine Thread-Spawning-Einheit auf, um Threads zur Ausführung auf dem 3D/Media-Subsystem 2015 hervorzubringen. Die hervorgebrachten Threads führen Berechnungen für die Medienoperationen auf einer oder mehreren Grafikausführungseinheiten aus, die in dem 3D/Medien-Subsystem 2015 enthalten sind.
  • In einigen Ausführungsformen weist das 3D/Medien-Subsystem 2015 Logik zum Ausführen von Threads auf, die von der 3D-Pipeline 2012 und der Medien-Pipeline 2016 hervorgebracht werden. In einer Ausführungsform senden die Pipelines Thread-Ausführungsanfragen an das 3D/Medien-Subsystem 2015, das eine Thread-Dispatch-Logik zum Arbitrieren und Absetzen der verschiedenen Anfragen für verfügbare Thread-Ausführungsressourcen aufweist. Die Ausführungsressourcen weisen eine Anordnung von Grafikausführungseinheiten zum Verarbeiten der 3D- und Medien-Threads auf. In einigen Ausführungsformen weist das 3D/Medien-Subsystem 2015 einen oder mehrere interne Caches für Thread-Anweisungen und Daten auf. In einigen Ausführungsformen weist das Subsystem auch gemeinsam genutzten Speicher auf, einschließlich Registern und adressierbarem Speicher, um Daten zwischen Threads gemeinsam zu nutzen und Ausgabedaten zu speichern.
  • D/Medienverarbeitung
  • 21 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine 2110 eines Grafikprozessors gemäß einigen Ausführungsformen. In einer Ausführungsform ist die Grafikverarbeitungs-Engine (GPE) 2110 eine Version der in 20 dargestellten GPE 2010. Elemente aus 21, die die gleichen Bezugsnummern (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin aufweisen, können auf beliebige ähnliche Weise wie hierin an anderer Stelle beschrieben betrieben werden oder funktionieren, sind jedoch nicht darauf beschränkt. Zum Beispiel sind die 3D-Pipeline 2012 und die Medien-Pipeline 2016 aus 20 dargestellt. Die Medien-Pipeline 2016 ist in einigen Ausführungsformen der GPE 2110 optional und möglicherweise nicht explizit in der GPE 2110 enthalten. Zum Beispiel und in mindestens einer Ausführungsform ist ein separater Medien- und/oder Bildprozessor mit der GPE 2110 gekoppelt.
  • In einigen Ausführungsformen ist die GPE 2110 mit einem Befehls-Streamer 2103, der einen Befehlsstrom an die 3D-Pipeline 2012 und/oder Medien-Pipelines 2016 bereitstellt, gekoppelt oder weist diesen auf. In einigen Ausführungsformen ist der Befehls-Streamer 2103 mit einem Speicher gekoppelt, der ein Systemspeicher oder ein oder mehrere interne Cachespeicher und gemeinsam genutzter Cachespeicher sein kann. In einigen Ausführungsformen empfängt der Befehls-Streamer 2103 Befehle von dem Speicher und sendet die Befehle an die 3D-Pipeline 2012 und/oder die Medien-Pipeline 2016. Die Befehle sind Direktiven, die aus einem Ringpuffer abgerufen werden, der Befehle für die 3D-Pipeline 2012 und die Medien-Pipeline 2016 speichert. In einer Ausführungsform kann der Ringpuffer außerdem Stapel-Befehlspuffer enthalten, die Stapel mehrerer Befehle speichern. Die Befehle für die 3D-Pipeline 2012 können auch Verweise auf Daten beinhalten, die im Speicher gespeichert sind, wie, jedoch ohne Einschränkung auf Vertex- und Geometriedaten für die 3D-Pipeline 2012 und/oder Bilddaten und Speicherobjekte für die Medien-Pipeline 2016. Die 3D-Pipeline 2012 und die Medien-Pipeline 2016 verarbeiten die Befehle und Daten, indem sie Operationen über Logik innerhalb der jeweiligen Pipelines ausführen oder indem sie einen oder mehrere Ausführungs-Threads an ein Grafikkern-Array 2114 senden.
  • In verschiedenen Ausführungsformen kann die 3D-Pipeline 2012 ein oder mehrere Shader-Programme wie Vertex-Shader, Geometrie-Shader, Pixel-Shader, Fragment-Shader, Compute-Shader oder andere Shader-Programme ausführen, indem sie die Anweisungen verarbeitet und Ausführungs-Threads an das Grafikkern-Array 2114 sendet. Das Grafikkern-Array 2114 stellt einen vereinheitlichten Block von Ausführungsressourcen bereit. Eine Mehrzweck-Ausführungslogik (z. B. Ausführungseinheiten) innerhalb des Grafikkern-Arrays 2114 unterstützt verschiedene 3D-API-Shader-Sprachen und kann mehrere simultane Ausführungs-Threads ausführen, die mehreren Shadern zugeordnet sind.
  • In einigen Ausführungsformen weist das Grafikkern-Array 2114 auch eine Ausführungslogik zum Ausführen von Medienfunktionen wie Video- und/oder Bildverarbeitung auf. In einer Ausführungsform weisen die Ausführungseinheiten außerdem eine Universallogik auf, die programmierbar ist, um parallele Universal-Rechenoperationen zusätzlich zu Grafikverarbeitungsoperationen auszuführen. Die Universallogik kann Verarbeitungsoperationen parallel oder in Verbindung mit Universallogik innerhalb des/der Prozessorkern(e) 1807 aus 18 oder des Kerns 1902A-1902N wie in 19 ausführen.
  • Ausgabedaten, die von Threads generiert werden, die auf dem Grafikkern-Array 2114 ausgeführt werden, können Daten in einem vereinheitlichten Rückgabepuffer (Unified Return Buffer - URB) 2118 an den Speicher ausgeben. Der URB 2118 kann Daten für mehrere Threads speichern. In einigen Ausführungsformen kann der URB 2118 verwendet werden, um Daten zwischen verschiedenen Threads zu senden, die auf dem Grafikkern-Array 2114 ausgeführt werden. In einigen Ausführungsformen kann der URB 2118 zusätzlich zur Synchronisation zwischen Threads auf dem Grafikkern-Array und der festen Funktionslogik innerhalb der Logik der gemeinsam genutzten Funktion 2120 verwendet werden.
  • In einigen Ausführungsformen ist das Grafikkern-Array 2114 skalierbar, sodass das Array eine variable Anzahl von Grafikkernen aufweist, die jeweils eine variable Anzahl von Ausführungseinheiten basierend auf der Zielleistung und dem Leistungsniveau von GPE 2110 aufweisen. In einer Ausführungsform sind die Ausführungsressourcen dynamisch skalierbar, sodass Ausführungsressourcen je nach Bedarf aktiviert oder deaktiviert werden können.
  • Das Grafikkern-Array 2114 ist mit einer Logik 2120 für eine gemeinsam genutzte Funktion gekoppelt, die mehrere Ressourcen aufweist, die zwischen den Grafikkernen in dem Grafikkern-Array gemeinsam genutzt werden. Die gemeinsam genutzten Funktionen in der Logik 2120 für gemeinsam genutzte Funktionen sind Hardwarelogikeinheiten, die dem Grafikkern-Array 2114 spezialisierte Zusatzfunktionen bereitstellen. In verschiedenen Ausführungsformen weist die gemeinsam genutzte Funktionslogik 2120 den Sampler 2121, die Math-Einheit 2122 und die Inter-Thread-Kommunikations (ITC) -Logik 2123 auf, ist jedoch nicht darauf beschränkt. Außerdem implementieren einige Ausführungsformen einen oder mehrere Cachespeicher 2125 in der Logik 2120 für gemeinsam genutzte Funktionen. Eine gemeinsam genutzte Funktion wird implementiert, wenn die Nachfrage nach einer gegebenen spezialisierten Funktion nicht ausreicht, um in das Grafikkern-Array 2114 aufgenommen zu werden. Stattdessen wird eine einzelne Instanziierung dieser spezialisierten Funktion als eine eigenständige Entität in der gemeinsam genutzten Funktionslogik 2120 implementiert und unter den Ausführungsressourcen innerhalb des Grafikkern-Arrays 2114 gemeinsam genutzt. Der genaue Satz von Funktionen, die zwischen dem Grafikkern-Array 2114 und dem Grafikkern-Array 2114 gemeinsam genutzt werden, variiert zwischen den Ausführungsformen.
  • 22 ist ein Blockdiagramm einer anderen Ausführungsform eines Grafikprozessors 2200. Elemente aus 22, die die gleichen Bezugsnummern (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin aufweisen, können auf beliebige ähnliche Weise wie hierin an anderer Stelle beschrieben betrieben werden oder funktionieren, sind jedoch nicht darauf beschränkt.
  • In einigen Ausführungsformen weist der Grafikprozessor 2200 eine Ringverbindung 2202, ein Pipeline-Frontend 2204, eine Medien-Engine 2237 und Grafikkerne 2280A-2280N auf. In einigen Ausführungsformen koppelt die Ringverbindung 2202 den Grafikprozessor mit anderen Verarbeitungseinheiten, einschließlich anderen Grafikprozessoren oder einem oder mehreren Universalprozessorkernen. In einigen Ausführungsformen ist der Grafikprozessor einer von vielen Prozessoren, die in einem Multi-Kern-Verarbeitungssystem integriert sind.
  • In einigen Ausführungsformen empfängt der Grafikprozessor 2200 Stapel von Befehlen über die Ringverbindung 2202. Die eingehenden Befehle werden von einem Befehls-Streamer 2203 in dem Pipeline-Frontend 2204 interpretiert. In einigen Ausführungsformen weist der Grafikprozessor 2200 eine skalierbare Ausführungslogik zum Ausführen einer 3D-Geometrieverarbeitung und Medienverarbeitung über den Grafikkern (die Grafikkern(e) 2280A-2280N) auf. Für 3D-Geometrie-Verarbeitungsbefehle liefert der Befehls-Streamer 2203 Befehle an die Geometrie-Pipeline 2236. Für zumindest einige Medienverarbeitungsbefehle liefert der Befehls-Streamer 2203 die Befehle an ein Video-Frontend 2234, das mit einer Medien-Engine 2237 gekoppelt ist. In einigen Ausführungsformen weist die Medien-Engine 2237 eine Videoqualitäts-Engine (VQE) 2230 zur Video- und Bildnachverarbeitung und eine Multiformat-Codier-/Decodier-Engine (MFX) 2233 auf, um eine hardwarebeschleunigte Mediendatencodierung und -decodierung bereitzustellen. In einigen Ausführungsformen generieren die Geometrie-Pipeline 2236 und die Medien-Engine 2237 jeweils Ausführungs-Threads für die Thread-Ausführungsressourcen, die von mindestens einem Grafikkern 2280A bereitgestellt werden.
  • In einigen Ausführungsformen weist der Grafikprozessor 2200 skalierbare Thread-Ausführungsressourcen mit modularen Kernen 2280A-2280N (manchmal als Kern-Slices bezeichnet) auf, die jeweils mehrere Unterkerne 2250A-2250N, 2260A-2260N (manchmal als Kern-Teil-Slices bezeichnet) aufweisen. In einigen Ausführungsformen kann der Grafikprozessor 2200 eine beliebige Anzahl von Grafikkernen 2280A bis 2280N aufweisen. In einigen Ausführungsformen weist der Grafikprozessor 2200 einen Grafikkern 2280A mit mindestens einem ersten Unterkern 2250A und einem zweiten Kernunterkern 2260A auf. In anderen Ausführungsformen ist der Grafikprozessor ein Prozessor mit geringer Leistung mit einem einzigen Unterkern (z. B. 2250A). In einigen Ausführungsformen weist der Grafikprozessor 2200 mehrere Grafikkerne 2280A-2280N auf, die jeweils einen Satz erster Unterkerne 2250A-2250N und einen Satz zweiter Unterkerne 2260A-2260N aufweisen. Jeder Unterkern in dem Satz der ersten Unterkerne 2250A-2250N weist mindestens einen ersten Satz von Ausführungseinheiten 2252A-2252N und Medien/Textur-Sampler 2254A-2254N auf. Jeder Unterkern in dem Satz von zweiten Unterkernen 2260A-2260N weist mindestens einen zweiten Satz von Ausführungseinheiten 2262A-2262N und Sampler 2264A-2264N auf. In einigen Ausführungsformen nutzt jeder Unterkern 2250A-2250N, 2260A-2260N gemeinsam einen Satz gemeinsam genutzter Ressourcen 2270A-2270N. In einigen Ausführungsformen schließen die gemeinsam genutzten Ressourcen einen gemeinsam genutzten Cachespeicher und eine Pixeloperationslogik ein. Andere gemeinsam genutzte Ressourcen können ebenfalls in den verschiedenen Ausführungsformen des Grafikprozessors enthalten sein.
  • Ausführungslogik
  • 23 zeigt eine Thread-Ausführungslogik 2300 mit einer Anordnung von Verarbeitungselementen, die in einigen Ausführungsformen eines GPE verwendet werden. Elemente aus 23, die die gleichen Bezugsnummern (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin aufweisen, können auf beliebige ähnliche Weise wie hierin an anderer Stelle beschrieben betrieben werden oder funktionieren, sind jedoch nicht darauf beschränkt.
  • In einigen Ausführungsformen weist die Thread-Ausführungslogik 2300 einen Pixel-Shader 2302, einen Thread-Dispatcher 2304, einen Befehlscache 2306, ein skalierbares Ausführungseinheits-Array mit einer Vielzahl von Ausführungseinheiten 2308A-2308N, einen Sampler 2310, einen Datencache 2312 und einen Datenanschluss 2314 auf. In einer Ausführungsform sind die enthaltenen Komponenten über eine Verbindungsstruktur miteinander verbunden, die mit jeder der Komponenten verknüpft ist. In einigen Ausführungsformen weist die Thread-Ausführungslogik 2300 eine oder mehrere Verbindungen zum Speicher wie zum Systemspeicher oder Cachespeicher durch einen oder mehrere von Befehlscache 2306, Datenanschluss 2314, Sampler 2310 und Ausführungseinheits-Array 2308A-2308N auf. In einigen Ausführungsformen ist jede Ausführungseinheit (z. B. 2308A) ein individueller Vektorprozessor, der in der Lage ist, mehrere gleichzeitige Threads auszuführen und mehrere Datenelemente parallel für jeden Thread zu verarbeiten. In einigen Ausführungsformen weist das Ausführungseinheits-Array 2308A-2308N eine beliebige Anzahl einzelner Ausführungseinheiten auf.
  • In einigen Ausführungsformen wird das Ausführungseinheitsfeld 2308A-2308N hauptsächlich zum Ausführen von „Shader“-Programmen verwendet. In einigen Ausführungsformen führen die Ausführungseinheiten in der Matrix 2308A-2308N einen Anweisungssatz aus, 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 Verschiebung 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 Universalverarbeitung (z. B. Rechen- und Medien-Shader).
  • Jede Ausführungseinheit in dem Ausführungseinheits-Array 2308A-2308N wird auf Arrays von Datenelementen betrieben. 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 physikalischer Arithmetischer Logikeinheiten (ALUs) oder Gleitkommaeinheiten (FPUs) für einen bestimmten Grafikprozessor sein. In einigen Ausführungsformen unterstützen die Ausführungseinheiten 2308A-2308N Ganzzahl- und Gleitkomma-Datentypen.
  • Der Ausführungseinheits-Anweisungssatz weist Single Instruction Multiple Data (SIMD) oder Single Instruction Multiple Thread (SIMT) -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 auf dem Vektor als vier separate gepackte 64-Bit-Datenelemente (Datenelemente in Quad-Word (QW) - Größe), acht separate gepackte 32-Bit-Datenelemente (Datenelemente in Double Word- (DW) -Größe), sechzehn separate gepackte 16-Bit-Datenelemente (Datenelemente in Word (W -Größe) oder zweiunddreißig separate gepackte 8-Bit-Datenelemente (Datenelemente in Byte (B) -Größe) betrieben wird. Es sind jedoch unterschiedliche Vektorbreiten und Registergrößen möglich.
  • Ein oder mehrere interne Anweisungscaches (z. B. 2306) sind in der Thread-Ausführungslogik 2300 enthalten, um Thread-Anweisungen für die Ausführungseinheiten zwischenzuspeichern. In einigen Ausführungsformen sind ein oder mehrere Datencaches (z. B. 2312) enthalten, um Thread-Daten während der Thread-Ausführung zwischenzuspeichern. In einigen Ausführungsformen ist der Sampler 2310 enthalten, um eine Texturabtastung für 3D-Operationen und eine Medienabtastung für Medienoperationen bereitzustellen. In einigen Ausführungsformen weist der Sampler 2310 eine spezialisierte Textur- oder Medienabtastungsfunktionalität auf, um Textur- oder Mediendaten während des Abtastprozesses zu verarbeiten, bevor die abgetasteten Daten einer Ausführungseinheit bereitgestellt werden.
  • Während der Ausführung senden die Grafik- und Medien-Pipelines Thread-Initiierungsanfragen über die Thread-Spawning- und Dispatch-Logik an die Thread-Ausführungslogik 2300. In einigen Ausführungsformen weist die Thread-Ausführungslogik 2300 einen lokalen Thread-Dispatcher 2304 auf, der Thread-Initiierungsanfragen von den Grafik- und Medien-Pipelines vermittelt und die angeforderten Threads auf einer oder mehreren Ausführungseinheiten 2308A-2308N instanziiert. Zum Beispiel sendet die Geometrie-Pipeline (z. B. 2236 von 22) Vertex-Verarbeitungs-, Tessellations- oder Geometrieverarbeitungs-Threads an die Thread-Ausführungslogik 2300 (23). In einigen Ausführungsformen kann der Thread-Dispatcher 2304 auch Laufzeit-Thread-Spawning-Anfragen von den ausführenden Shader-Programmen verarbeiten.
  • Sobald eine Gruppe geometrischer Objekte verarbeitet und zu Pixeldaten rasterisiert wurde, wird der Pixel-Shader 2302 aufgerufen, um die Ausgabeinformationen weiter zu berechnen und zu bewirken, dass Ergebnisse auf Ausgabeflächen geschrieben werden (z. B. Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.). In einigen Ausführungsformen berechnet der Pixel-Shader 2302 die Werte der verschiedenen Vertexattribute, die über das rasterisierte Objekt zu interpolieren sind. In einigen Ausführungsformen führt der Pixel-Shader 2302 dann ein von einer Anwendungsprogrammierschnittstelle (API) geliefertes Pixel-Shader-Programm aus. Um das Pixel-Shader-Programm auszuführen, sendet der Pixel-Shader 2302 Threads über den Thread-Dispatcher 2304 an eine Ausführungseinheit (z. B. 2308A). In einigen Ausführungsformen verwendet der Pixel-Shader 2302 eine Texturabtastlogik im Sampler 2310, 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.
  • In einigen Ausführungsformen stellt der Datenanschluss 2314 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 2300 bereit, um verarbeitete Daten zur Verarbeitung auf einer Grafikprozessorausgabe-Pipeline in den Speicher auszugeben. In einigen Ausführungsformen beinhaltet oder koppelt der Datenanschluss 2314 mit einem oder mehreren Cachespeichern (z. B. dem Datencache 2312), um Daten für den Speicherzugriff über den Datenanschluss zwischenzuspeichern.
  • 24 ist ein Blockdiagramm, das ein Grafikprozessor-Anweisungsformat 2400 gemäß einigen Ausführungsformen darstellt. In einer oder mehreren Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten einen Anweisungssatz mit Anweisungen in mehreren Formaten. Die Kästchen in durchgezogenen Linien veranschaulichen die Komponenten, die im Allgemeinen in einer Ausführungseinheitsanweisung enthalten sind, während die gestrichelten Linien Komponenten einschließen, die optional sind oder die nur in einem Teilsatz der Anweisungen enthalten sind. In einigen Ausführungsformen sind die beschriebenen und dargestellten Anweisungsformate 2400 Makrobefehle, da sie Anweisungen sind, die der Ausführungseinheit zugeführt werden, im Gegensatz zu Mikrooperationen, die sich aus der Anweisungsdecodierung ergeben, sobald die Anweisung verarbeitet ist.
  • In einigen Ausführungsformen unterstützen die Grafikprozessor-Ausführungseinheiten Anweisungen nativ in einem 128-Bit-Anweisungsformat 2410. Ein komprimiertes 64-Bit-Anweisungsformat 2430 ist für einige Anweisungen basierend auf der ausgewählten Anweisung, den Anweisungsoptionen und der Anzahl der Operanden verfügbar. Das ursprüngliche 128-Bit-Anweisungsformat 2410 bietet Zugriff auf alle Anweisungsoptionen, während einige Optionen und Operationen in dem 64-Bit-Anweisungsformat 2430 eingeschränkt sind. Die systemeigenen Anweisungen, die im 64-Bit-Anweisungsformat 2430 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 2413 kompaktiert. Die Ausführungseinheit-Hardware referenziert einen Satz von Kompaktierungstabellen basierend auf den Indexwerten und verwendet die Kompaktierungstabellenausgaben, um eine native Anweisung in dem 128-Bit-Anweisungsformat 2410 zu rekonstruieren.
  • Für jedes Format definiert der Anweisungs-Opcode 2412 die Operation, die die Ausführungseinheit auszuführen hat. 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 darstellt. Standardmäßig führt die Ausführungseinheit jede Anweisung über alle Datenkanäle der Operanden aus. In einigen Ausführungsformen ermöglicht das Anweisungsteuerungsfeld 2414 die Steuerung bestimmter Ausführungsoptionen, wie die Kanalauswahl (z. B. Vorhersage) und Datenkanalreihenfolge (z. B. Swizzle). Für 128-Bit-Anweisungen 2410 begrenzt ein Ausf.-Größen-Feld 2416 die Anzahl von Datenkanälen, die parallel ausgeführt werden. In einigen Ausführungsformen ist das Ausf.-Größen-Feld 2416 nicht zur Verwendung in dem kompakten 64-Bit-Anweisungsformat 2430 verfügbar.
  • Einige Ausführungseinheitsanweisungen haben bis zu drei Operanden einschließlich zwei Quellenoperanden, src0 2420, src1 2422, und ein Ziel 2418. In einigen Ausführungsformen unterstützen die Ausführungseinheiten duale Zielanweisungen, wobei eines der Ziele impliziert ist. Datenmanipulationsanweisungen können einen dritten Quellenoperanden haben (z. B. SRC2 2424), wobei der Anweisungs-Opcode 2412 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.
  • In einigen Ausführungsformen beinhaltet das 128-Bit-Anweisungsformat 2410 eine Zugriffs-/Adressmodus-Information 2426, die 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 2410 bereitgestellt.
  • In einigen Ausführungsformen beinhaltet das 128-Bit-Anweisungsformat 2410 ein Zugriffs-/Adressmodusfeld 2426, das einen Adressmodus und/oder einen Zugriffsmodus für den Befehl spezifiziert. In einer Ausführungsform kann der Zugriffsmodus eine Datenzugriffsausrichtung für die Anweisung definieren. 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 2410, wenn sie sich in einem ersten Modus befindet, eine Byteausgerichtete Adressierung für Quell- und Zieloperanden verwenden, und wenn sie sich in einem zweiten Modus befindet, kann die Anweisung 2410 eine 16-Byteausgerichtete Adressierung für alle Quell- und Zieloperanden verwenden.
  • In einer Ausführungsform bestimmt der Adressmodusabschnitt des Zugriffs-/Adressmodusfeldes 2426, ob der Befehl eine direkte oder eine indirekte Adressierung verwenden soll. Wenn der direkte Registeradressierungsmodus verwendet wird, stellen die Bits in der Anweisung 2410 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.
  • In einigen Ausführungsformen werden Anweisungen basierend auf Bitfeldern von Opcode 2412 gruppiert, um die Opcode-Decodierung 2440 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 dargestellte genaue Opcode-Gruppierung ist lediglich ein Beispiel. In einigen Ausführungsformen beinhaltet eine Bewegungs- und Logik-Opcode-Gruppe 2442 Datenbewegungs- und Logikanweisungen (z. B. move (mov), compare (cmp)). In einigen Ausführungsformen nutzt die Bewegungs- und Logikgruppe 2442 die fünf höchstwertigen Bits (MSB) gemeinsam, wobei move (mov) -Anweisungen die Form 0000xxxxb haben und logische Anweisungen die Form 0001xxxxb haben. Eine Flusssteueranweisungsgruppe 2444 (z. B. call, jump (jmp)) beinhaltet Anweisungen in Form von 0010xxxxb (z. B. 0x20). Eine gemischte Befehlsgruppe 2446 beinhaltet eine Mischung von Anweisungen einschließlich Synchronisationsanweisungen (z. B. wait, send) in der Form 0011xxxxb (z. B. 0x30). Eine parallele Math.-Anweisungsgruppe 2448 beinhaltet komponentenweise arithmetische Anweisungen (z. B. add, multiply (mul)) in der Form 0100xxxxb (z. B. 0x40). Die parallele Math.-Gruppe 2448 führt die arithmetischen Operationen parallel über Datenkanäle aus. Die Vektor-Math.-Gruppe 2450 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
  • 25 ist ein Blockdiagramm einer anderen Ausführungsform eines Grafikprozessors 2500. Elemente aus 25, die die gleichen Bezugsnummern (oder Bezeichnungen) wie die Elemente einer beliebigen anderen Figur hierin aufweisen, können auf beliebige ähnliche Weise wie hierin an anderer Stelle beschrieben betrieben werden oder funktionieren, sind jedoch nicht darauf beschränkt.
  • In einigen Ausführungsformen weist der Grafikprozessor 2500 eine Grafik-Pipeline 2520, eine Medien-Pipeline 2530, eine Anzeige-Engine 2540, eine Thread-Ausführungslogik 2550 und eine Render-Ausgabe-Pipeline 2570 auf. In einigen Ausführungsformen ist der Grafikprozessor 2500 ein Grafikprozessor in einem Multi-Kern-Verarbeitungssystem, das einen oder mehrere Universalverarbeitungskerne aufweist. Der Grafikprozessor wird durch Registerschreibvorgänge in ein oder mehrere Steuerregister (nicht dargestellt) oder über Befehle gesteuert, die über eine Ringverbindung 2502 an den Grafikprozessor 2500 ausgegeben werden. In einigen Ausführungsformen koppelt die Ringverbindung 2502 den Grafikprozessor 2500 mit anderen Verarbeitungskomponenten wie anderen Grafikprozessoren oder Universalprozessoren. Befehle von der Ringverbindung 2502 werden von einem Befehls-Streamer 2503 interpretiert, der Befehle an einzelne Komponenten der Grafik-Pipeline 2520 oder der Medien-Pipeline 2530 liefert.
  • In einigen Ausführungsformen leitet der Befehls-Streamer 2503 die Operation eines Vertex-Fetchers 2505, der Vertex-Daten aus dem Speicher liest, und führt Vertex-Verarbeitungsbefehle aus, die von dem Befehls-Streamer 2503 bereitgestellt werden. In einigen Ausführungsformen stellt der Vertex-Fetcher 2505 Vertexdaten einem Vertex-Shader 2507 bereit, der Koordinatenraumtransformationen und Beleuchtungsoperationen für jeden Vertex ausführt. In einigen Ausführungsformen führen der Vertex-Fetcher 2505 und der Vertex-Shader 2507 Vertex-Verarbeitungsanweisungen aus, indem sie Ausführungs-Threads über einen Thread-Dispatcher 2531 an die Ausführungseinheiten 2552A, 2552B senden.
  • In einigen Ausführungsformen sind die Ausführungseinheiten 2552A, 2552B ein Array von Vektorprozessoren mit einem Anweisungssatz zum Ausführen von Grafik- und Medienoperationen. In einigen Ausführungsformen weisen die Ausführungseinheiten 2552A, 2552B einen angehängten L1-Cache 2551 auf, der für jedes Array spezifisch ist oder von den Arrays gemeinsam genutzt wird. Der Cache kann als Datencache, als Anweisungscache oder als einzelner Cache konfiguriert sein, der derart partitioniert ist, dass er Daten und Anweisungen in verschiedenen Partitionen enthält.
  • In einigen Ausführungsformen enthält die Grafik-Pipeline 2520 Tessellationskomponenten, um eine hardwarebeschleunigte Tessellation von 3D-Objekten auszuführen. In einigen Ausführungsformen konfiguriert ein programmierbarer Hull-Shader 2511 die Tessellationsoperationen. Ein programmierbarer Domänen-Shader 2517 stellt eine Backend-Auswertung der Tessellationsausgabe bereit. Ein Tessellator 2513 arbeitet in Richtung des Hull-Shaders 2511 und enthält eine spezielle Logik zum Generieren eines Satzes detaillierter geometrischer Objekte basierend auf einem groben geometrischen Modell, das als Eingabe für die Grafik-Pipeline 2520 bereitgestellt wird. In einigen Ausführungsformen können, falls keine Tesselation verwendet wird, Tessellationskomponenten 2511, 2513, 2517 umgangen werden.
  • In einigen Ausführungsformen können vollständige geometrische Objekte durch einen Geometrie-Shader 2519 über einen oder mehrere Threads verarbeitet werden, die an die Ausführungseinheiten 2552A, 2552B gesendet werden, oder können direkt zu dem Clipper 2529 weitergehen. In 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 2519 eine Eingabe von dem Vertex-Shader 2507. In einigen Ausführungsformen ist der Geometrie-Shader 2519 durch ein Geometrie-Shader-Programm programmierbar, um eine Geometrie-Tessellation auszuführen, wenn die Tessellations-Einheiten deaktiviert sind.
  • Vor der Rasterisierung verarbeitet ein Clipper 2529 Vertexdaten. Der Clipper 2529 kann ein Clipper mit fester Funktion oder ein programmierbarer Clipper mit Clipping- und Geometrie-Shader-Funktionen sein. In einigen Ausführungsformen versendet eine Rasterisierer- und Tiefentestkomponente 2573 in der Render-Ausgabe-Pipeline 2570 Pixel-Shader, um die geometrischen Objekte in ihre Pro-Pixel-Darstellungen umzuwandeln. In einigen Ausführungsformen ist eine Pixel-Shader-Logik in der Thread-Ausführungslogik 2550 enthalten. In einigen Ausführungsformen kann eine Anwendung die Rasterisierung umgehen und auf nicht rasterisierte Vertexdaten über eine Strom-Aus-Einheit 2523 zugreifen.
  • Der Grafikprozessor 2500 weist einen Verbindungsbus, ein Verbindungs-Fabric oder einen anderen Verbindungsmechanismus auf, der ein Durchlaufen von Daten und Nachrichten zwischen den Hauptkomponenten des Prozessors ermöglicht. In einigen Ausführungsformen sind die Ausführungseinheiten 2552A, 2552B und die zugehörigen Cachespeicher 2551, Textur- und Medien-Sampler 2554 und Textur/Sampler-Cachespeicher 2558 über einen Datenanschluss 2556 miteinander verbunden, um einen Speicherzugriff auszuführen und mit Render-Ausgabe-Pipeline-Komponenten des Prozessors zu kommunizieren. In einigen Ausführungsformen haben der Sampler 2554, die Caches 2551, 2558 und die Ausführungseinheiten 2552A, 2552B jeweils getrennte Speicherzugriffspfade.
  • In einigen Ausführungsformen enthält die Rendering-Ausgabe-Pipeline 2570 eine Rasterisierer- und Tiefentestkomponente 2573, die vertexbasierte Objekte in eine zugehörige pixelbasierte Darstellung umwandelt. In einigen Ausführungsformen weist die Render-Ausgabe-Pipeline 2570 eine Windower/Maskierer-Einheit auf, um eine Dreiecks- und Linienrasterisierung mit festen Funktionen auszuführen. Ein zugehöriger Render-Cache 2578 und Tiefencache 2579 sind in einigen Ausführungsformen ebenfalls verfügbar. Eine Pixeloperationskomponente 2577 führt pixelbasierte Operationen an den Daten aus, wenngleich in einigen Fällen Pixeloperationen, die 2D-Operationen zugeordnet sind (z. B. Bitblockbildübertragungen mit Mischen), von der 2D-Engine 2541 ausgeführt oder zur Anzeigezeit von der Anzeigesteuerung 2543 unter Verwendung von Overlay-Anzeigeebenen ersetzt werden. In einigen Ausführungsformen ist ein gemeinsamer L3-Cache 2575 für alle Grafikkomponenten verfügbar, was die gemeinsame Nutzung von Daten ohne die Verwendung von Hauptsystemspeicher ermöglicht.
  • In einigen Ausführungsformen weist die Grafikprozessor-Medien-Pipeline 2530 eine Medien-Engine 2537 und ein Video-Frontend 2534 auf. In einigen Ausführungsformen empfängt das Video-Frontend 2534 Pipeline-Befehle von dem Befehls-Streamer 2503. In einigen Ausführungsformen weist die Medien-Pipeline 2530 einen separaten Befehls-Streamer auf. In einigen Ausführungsformen verarbeitet das Video-Frontend 2534 Medienbefehle vor dem Senden des Befehls an die Medien-Engine 2537. In einigen Ausführungsformen weist die Medien-Engine 2537 eine Thread-Spawning-Funktionalität auf, um Threads zum Versenden an die Thread-Ausführungslogik 2550 über den Thread-Dispatcher 2531 hervorzubringen.
  • In einigen Ausführungsformen weist der Grafikprozessor 2500 eine Anzeige-Engine 2540 auf. In einigen Ausführungsformen befindet sich die Anzeige-Engine 2540 außerhalb des Prozessors 2500 und ist mit dem Grafikprozessor über die Ringverbindung 2502 oder einen anderen Verbindungsbus oder -fabric verbunden. In einigen Ausführungsformen weist die Anzeige-Engine 2540 eine 2D-Maschine 2541 und eine Anzeigesteuerung 2543 auf. In einigen Ausführungsformen weist die Anzeige-Engine 2540 eine spezielle Logik auf, die in der Lage ist, unabhängig von der 3D-Pipeline zu arbeiten. In einigen Ausführungsformen ist die Anzeigesteuerung 2543 mit einer Anzeigevorrichtung (nicht dargestellt) gekoppelt, die eine systemintegrierte Anzeigevorrichtung wie in einem Laptop-Computer oder eine externe Anzeigevorrichtung sein kann, die über einen Anzeigevorrichtungsverbinder angeschlossen ist.
  • In einigen Ausführungsformen sind die Grafik-Pipeline 2520 und die Medien-Pipeline 2530 konfigurierbar, um Operationen basierend auf mehreren Grafik- und Medienprogrammierschnittstellen auszuführen, und sind für keine Anwendungsprogrammierschnittstelle (API) spezifisch. In einigen Ausführungsformen übersetzt die Treibersoftware für den Grafikprozessor API-Aufrufe, die für eine bestimmte Grafik- oder Medienbibliothek spezifisch sind, in Befehle, die von dem Grafikprozessor verarbeitet werden können. In einigen Ausführungsformen wird Unterstützung für die Open Graphics Library (OpenGL) und Open Computing Language (OpenCL) von der Khronos Group, der Direct3D-Bibliothek von der Microsoft Corporation bereitgestellt, oder Unterstützung kann sowohl für OpenGL als auch für D3D bereitgestellt werden. Unterstützung kann auch für die Open Source Computer Vision Bibliothek (OpenCV) bereitgestellt werden. Eine zukünftige API mit einer kompatiblen 3D-Pipeline wird ebenfalls unterstützt, wenn eine Abbildung von der Pipeline der zukünftigen API auf Pipeline des Grafikprozessors vorgenommen werden kann.
  • Grafik-Pipeline-Programmierung
  • 26A ist ein Blockdiagramm eines Befehlsformats eines Grafikprozessors 2600 gemäß einer Ausführungsform. 26B ist ein Blockdiagramm einer Befehlsfolge eines Grafikprozessors 2610 gemäß einer Ausführungsform. Die Kästchen in durchgezogenen Linien in 26A 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 einem Untersatz der Grafikbefehle enthalten sind. Das beispielhafte Grafikprozessorbefehlsformat 2600 aus 26A weist Datenfelder zum Identifizieren eines Ziel-Clients 2602 des Befehls, eines Befehlsoperationscodes (Opcode) 2604 und der relevanten Daten 2606 für den Befehl auf. Ein Sub-Opcode 2605 und eine Befehlsgröße 2608 sind ebenfalls in einigen Befehlen enthalten.
  • In einigen Ausführungsformen spezifiziert der Client 2602 die Client-Einheit der Grafikvorrichtung, die die Befehlsdaten verarbeitet. In einigen Ausführungsformen untersucht ein Grafikprozessor-Befehls-Parser das Client-Feld jedes Befehls, um die weitere Verarbeitung des Befehls zu konditionieren und die Befehlsdaten an die geeignete Client-Einheit weiterzuleiten. In einigen Ausführungsformen weisen die Grafikprozessor-Client-Einheiten eine Speicherschnittstelleneinheit, eine Render-Einheit, eine 2D-Einheit, eine 3D-Einheit und eine Medieneinheit auf. Jede Client-Einheit hat eine entsprechende Verarbeitungs-Pipeline, die die Befehle verarbeitet. Sobald der Befehl von der Client-Einheit empfangen wurde, liest die Client-Einheit den Opcode 2604 und, falls vorhanden, den Sub-Opcode 2605, um die auszuführende Operation zu bestimmen. Die Client-Einheit führt den Befehl unter Verwendung von Informationen in dem Datenfeld 2606 aus. Für einige Befehle wird eine explizite Befehlsgröße 2608 erwartet, um die Größe des Befehls anzugeben. In einigen Ausführungsformen bestimmt der Befehls-Parser automatisch die Größe von mindestens einigen der Befehle basierend auf dem Befehlsoperationscode. In einigen Ausführungsformen werden Befehle über Vielfache eines Doppelwortes ausgerichtet.
  • Das Flussdiagramm in 26B zeigt eine beispielhafte Grafikprozessorbefehlsfolge 2610. In einigen Ausführungsformen verwendet Software oder Firmware eines Datenverarbeitungssystems, das eine Ausführungsform eines Grafikprozessors aufweist, eine Version der Befehlsfolge, die dargestellt wird, um einen Satz von Grafikoperationen einzurichten, auszuführen und zu beenden. Eine beispielhafte Befehlsfolge wird nur zu Beispielszwecken dargestellt und beschrieben, da Ausführungsformen nicht auf diese spezifischen Befehle oder auf diese Befehlsfolge beschränkt sind. Darüber hinaus können die Befehle als Stapel von Befehlen in einer Befehlsfolge ausgegeben werden, sodass der Grafikprozessor die Folge von Befehlen zumindest teilweise gemeinsam verarbeiten wird.
  • In einigen Ausführungsformen kann die Grafikprozessorbefehlsfolge 2610 mit einem Pipeline-Entleerungsbefehl 2612 beginnen, um zu bewirken, dass eine aktive Grafik-Pipeline die aktuell anstehenden Befehle für die Pipeline vervollständigt. In einigen Ausführungsformen arbeiten die 3D-Pipeline 2622 und die Medien-Pipeline 2624 nicht gleichzeitig. Die Pipeline-Entleerung wird ausgeführt, um zu bewirken, dass die aktive Grafik-Pipeline alle ausstehenden Befehle abschließt. Als Antwort auf eine Pipeline-Entleerung unterbricht der Befehls-Parser für den Grafikprozessor die Befehlsverarbeitung, bis die aktiven Zeichen-Engines ausstehende Operationen abschließen und die relevanten Lese-Caches ungültig gemacht werden. Wahlweise können alle Daten im Render-Cache, die als „fehlerhaft“ gekennzeichnet sind, in den Speicher geleert werden. In einigen Ausführungsformen kann der Pipeline-Entleerungsbefehl 2612 für die Pipeline-Synchronisation oder vor dem Platzieren des Grafikprozessors in einen Zustand von niedriger Leistung verwendet werden.
  • In einigen Ausführungsformen wird ein Pipeline-Auswahlbefehl 2613 verwendet, wenn eine Befehlsfolge erfordert, dass der Grafikprozessor explizit zwischen Pipelines umschaltet. In einigen Ausführungsformen wird ein Pipeline-Auswahlbefehl 2613 nur einmal in einem Ausführungskontext vor dem Ausgeben von Pipeline-Befehlen benötigt, es sei denn, der Kontext gibt Befehle für beide Pipelines aus. In einigen Ausführungsformen ist ein Pipeline-Entleerungsbefehl 2612 unmittelbar vor einem Pipeline-Wechsel über den Pipeline-Auswahlbefehl 2613 erforderlich.
  • In einigen Ausführungsformen konfiguriert ein Pipeline-Steuerbefehl 2614 eine Grafik-Pipeline für den Betrieb und wird verwendet, um die 3D-Pipeline 2622 und die Medien-Pipeline 2624 zu programmieren. In einigen Ausführungsformen konfiguriert der Pipeline-Steuerbefehl 2614 den Pipeline-Zustand für die aktive Pipeline. In einer Ausführungsform wird der Pipeline-Steuerbefehl 2614 für die Pipeline-Synchronisation und zum Löschen von Daten von einem oder mehreren Cachespeichern innerhalb der aktiven Pipeline verwendet, bevor ein Stapel von Befehlen verarbeitet wird.
  • In einigen Ausführungsformen werden Befehle für den Rückgabepufferzustand 2616 verwendet, um einen Satz von Rückgabepuffern für die jeweiligen Pipelines zum Schreiben von Daten zu konfigurieren. Einige Pipeline-Operationen erfordern die Zuweisung, Auswahl oder Konfiguration eines oder mehrerer Rückgabepuffer, in die die Operationen während der Verarbeitung Zwischendaten schreiben. In einigen Ausführungsformen verwendet der Grafikprozessor auch einen oder mehrere Rückgabepuffer, um Ausgabedaten zu speichern und eine Cross-Thread-Kommunikation auszuführen. In einigen Ausführungsformen beinhaltet das Konfigurieren des Rückgabepufferzustands 2616 das Auswählen der Größe und Anzahl von Rückgabepuffern, die für einen Satz von Pipeline-Operationen zu verwenden sind.
  • Die verbleibenden Befehle in der Befehlsfolge unterscheiden sich basierend auf der aktiven Pipeline für Operationen. Basierend auf einer Pipeline-Bestimmung 2620 wird die Befehlsfolge auf die 3D-Pipeline 2622 zugeschnitten, beginnend mit dem 3D-Pipeline-Zustand 2630, oder die Medien-Pipeline 2624, beginnend mit dem Medien-Pipeline-Zustand 2640.
  • Die Befehle für den 3D-Pipeline-Zustand 2630 beinhalten 3D-Zustandseinstellbefehle für den Vertex-Pufferzustand, den Vertex-Elementzustand, den konstanten Farbzustand, den Tiefenpufferzustand und andere Zustandsvariablen, die zu konfigurieren sind, bevor 3D-Primitiv-Befehle verarbeitet werden. Die Werte dieser Befehle werden mindestens teilweise basierend auf der jeweiligen verwendeten 3D-API bestimmt. In einigen Ausführungsformen sind 3D-Pipeline-Zustand 2630-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 2632 verwendet, um 3D-Primitive, die von der 3D-Pipeline verarbeitet werden sollen, zu versenden. Befehle und zugehörige Parameter, die über den 3D-Primitiv-Befehl 2632 an den Grafikprozessor geleitet werden, werden an die Vertex-Abruffunktion in der Grafik-Pipeline weitergeleitet. Die Vertex-Abruffunktion verwendet die Daten des 3D-Primitiv-Befehls 2632, um Vertex-Datenstrukturen zu generieren. Die Vertex-Datenstrukturen werden in einem oder mehreren Rückgabepuffern gespeichert. In einigen Ausführungsformen wird der 3D-Primitiv-Befehl 2632 verwendet, um Vertex-Operationen an 3D-Primitiven über Vertex-Shader auszuführen. Um Vertex-Shader zu verarbeiten, sendet die 3D-Pipeline 2622 Shader-Ausführungs-Threads an Grafikprozessor-Ausführungseinheiten.
  • In einigen Ausführungsformen wird die 3D-Pipeline 2622 über einen Befehl oder ein Ereignis execute 2634 ausgelöst. In einigen Ausführungsformen löst ein Registerschreiben 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-Primitive aus. Sobald die Operationen abgeschlossen sind, werden die resultierenden geometrischen Objekte rasterisiert und die Pixel-Engine färbt die resultierenden Pixel. Weitere Befehle zum Steuern des Pixel-Shadings und der Pixel-Backend-Operationen können ebenfalls für diese Operationen enthalten sein.
  • In einigen Ausführungsformen folgt die Grafikprozessorbefehlsfolge 2610 dem Pfad der Medien-Pipeline 2624, wenn Medienoperationen ausgeführt werden. Im Allgemeinen hängt die spezifische Verwendung und Art der Programmierung für die Medien-Pipeline 2624 von den auszuführenden Medien oder Rechenoperationen ab. Bestimmte Mediendecodieroperationen können während der Mediendecodierung in die Medien-Pipeline ausgelagert werden. In 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 Universalverarbeitungskernen bereitgestellt werden. In einer Ausführungsform beinhaltet die Medien-Pipeline auch Elemente für GPGPU-Operationen (GPGPU = General-Graphics Processor Unit), 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.
  • In einigen Ausführungsformen ist die Medien-Pipeline 2624 auf ähnliche Weise wie die 3D-Pipeline 2622 konfiguriert. Ein Satz von Befehlen zum Konfigurieren des Medien-Pipelinestatus 2640 wird vor den Medienobjektbefehlen 2642 versendet oder in einer Befehlswarteschlange platziert. In einigen Ausführungsformen beinhalten Befehle für den Medien-Pipelinestatus 2640 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 ein Codierungs- oder Decodierungsformat ein. In einigen Ausführungsformen unterstützen Befehle für den Medien-Pipeline-Status 2640 auch die Verwendung von einem oder mehreren Zeigern auf „indirekte“ Statuselemente, die einen Stapel von Statuseinstellungen enthalten.
  • In einigen Ausführungsformen liefern Medienobjektbefehle 2642 Zeiger zu Medienobjekten zur Verarbeitung durch die Medien-Pipeline. Die Medienobjekte weisen Speicherpuffer auf, die zu verarbeitende Videodaten enthalten. In einigen Ausführungsformen müssen alle Medien-Pipeline-Stati gültig sein, bevor sie einen Medienobjektbefehl 2642 ausgeben. Sobald der Pipeline-Status konfiguriert ist und die Medienobjektbefehle 2642 in die Warteschlange eingereiht sind, wird die Medien-Pipeline 2624 über einen Ausführungsbefehl 2644 oder ein äquivalentes Ausführungsereignis (z. B. Registerschreibvorgang) ausgelöst. Die Ausgabe von der Medien-Pipeline 2624 kann dann durch Operationen nachbearbeitet werden, die von der 3D-Pipeline 2622 oder der Medien-Pipeline 2624 bereitgestellt werden. In einigen Ausführungsformen werden GPGPU-Operationen auf ähnliche Weise wie Medienoperationen konfiguriert und ausgeführt.
  • Grafik-Software-Architektur
  • 27 veranschaulicht eine beispielhafte Grafiksoftwarearchitektur für ein Datenverarbeitungssystem 2700 gemäß einigen Ausführungsformen. In einigen Ausführungsformen beinhaltet die Softwarearchitektur eine 3D-Grafikanwendung 2710, ein Betriebssystem 2720 und mindestens einen Prozessor 2730. In einigen Ausführungsformen weist der Prozessor 2730 einen Grafikprozessor 2732 und einen oder mehrere Mehrzweckprozessorkern(e) 2734 auf. Die Grafikanwendung 2710 und das Betriebssystem 2720 werden jeweils in dem Systemspeicher 2750 des Datenverarbeitungssystems ausgeführt.
  • In einigen Ausführungsformen enthält die 3D-Grafikanwendung 2710 ein oder mehrere Shader-Programme, die Shader-Anweisungen 2712 enthalten. Die Shader-Sprachanweisungen können in einer High-Level-Shader-Sprache vorliegen, wie der High Level Shader Language (HLSL) oder der OpenGL Shader Language (GLSL). Die Anwendung weist auch ausführbare Anweisungen 2714 in einer Maschinensprache auf, die zur Ausführung durch den bzw. die Mehrzweckprozessorkern(e) 2734 geeignet sind. Die Anwendung weist auch Grafikobjekte 2716 auf, die durch Vertexdaten definiert sind.
  • In einigen Ausführungsformen ist das Betriebssystem 2720 ein Microsoft® Windows®-Betriebssystem von der Microsoft Corporation, ein proprietäres UNIX-ähnliches Betriebssystem oder ein Open-Source-UNIX-ähnliches Betriebssystem, das eine Variante des Linux-Kerns verwendet. Das Betriebssystem 2720 kann eine Grafik-API 2722 wie die Direct3D-API oder die OpenGL-API unterstützen. Wenn die Direct3D-API verwendet wird, verwendet das Betriebssystem 2720 einen Frontend-Shader-Compiler 2724, um alle Shader-Anweisungen 2712 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 ausführen. In einigen Ausführungsformen werden Shader hoher Ebene während der Kompilierung der 3D-Grafikanwendung 2710 zu Shadern niedrigerer Ebene kompiliert.
  • In einigen Ausführungsformen enthält der Benutzermodus-Grafiktreiber 2726 einen Backend-Shader-Compiler 2727, um die Shader-Anweisungen 2712 in eine hardwarespezifische Darstellung umzuwandeln. Wenn die OpenGL-API verwendet wird, werden die Shader-Anweisungen 2712 in der GLSL-Hochsprache an einen Benutzermodus-Grafiktreiber 2726 zur Kompilierung geleitet. In einigen Ausführungsformen verwendet der Benutzermodus-Grafiktreiber 2726 Betriebssystem-Kernmodusfunktionen 2728, um mit einem Kernmodus-Grafiktreiber 2729 zu kommunizieren. In einigen Ausführungsformen kommuniziert der Kemmodus-Grafiktreiber 2729 mit dem Grafikprozessor 2732, 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 eines Prozessors darstellt 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 ausführt, die in Verbindung mit irgendeiner der hier beschriebenen Ausführungsformen beschrieben sind.
  • 28 ist ein Blockdiagramm, das ein IP-Kern-Entwicklungssystem 2800 veranschaulicht, das zur Herstellung einer integrierten Schaltung zur Ausführung von Operationen verwendet werden kann. Das IP-Kernentwicklungssystem 2800 kann verwendet werden, um modulare, wiederverwendbare Designs zu erzeugen, die in ein größeres Design integriert werden können oder verwendet werden können, um eine gesamte integrierte Schaltung (z. B. eine integrierte SOC-Schaltung) zu konstruieren. Eine Designeinrichtung 2830 kann eine Softwaresimulation 2810 eines IP-Kern-Designs in einer höheren Programmiersprache (z. B. C/C ++) generieren. Die Softwaresimulation 2810 kann verwendet werden, um das Verhalten des IP-Kerns unter Verwendung eines Simulationsmodells 2812 zu entwerfen, zu testen und zu verifizieren. Das Simulationsmodell 2812 kann Funktions-, Verhaltens- und/oder Timing-Simulationen beinhalten. Ein Registerübertragungspegel (RTL) -Design 2815 kann dann aus dem Simulationsmodell 2812 erzeugt oder synthetisiert werden. Das RTL-Design 2815 ist eine Abstraktion des Verhaltens der integrierten Schaltung, die den Fluss digitaler Signale zwischen Hardware-Registern modelliert, einschließlich der zugehörigen Logik, die unter Verwendung der modellierten digitalen Signale ausgeführt wird. Neben einem RTL-Design 2815 können auch Designs auf niedrigerer Ebene auf der Logikebene oder der Transistorebene erzeugt, entworfen oder synthetisiert werden. Daher können die speziellen Details des anfänglichen Designs und der Simulation variieren.
  • Das RTL-Design 2815 oder ein Äquivalent kann ferner durch die Designeinrichtung in ein Hardwaremodell 2820 synthetisiert werden, das in einer Hardwarebeschreibungssprache (HDL) oder einer anderen Darstellung von physikalischen Designdaten vorliegen kann. Die HDL kann weiter simuliert oder getestet werden, um das IP-Kern-Design zu verifizieren. Das IP-Kern-Design kann zur Lieferung an eine Drittherstellereinrichtung 2865 unter Verwendung eines nichtflüchtigen Speichers 2840 (z. B. Festplatte, Flash-Speicher oder ein beliebiges nichtflüchtiges Speichermedium) gespeichert werden. Alternativ kann das IP-Kern-Design über eine Kabelverbindung 2850 oder eine drahtlose Verbindung 2860 (z. B. über das Internet) übertragen werden. Die Herstellungseinrichtung 2865 kann dann eine integrierte Schaltung herstellen, die zumindest teilweise auf dem IP-Kern-Design basiert. Die hergestellte integrierte Schaltung kann konfiguriert sein, Operationen gemäß mindestens einer hierin beschriebenen Ausführungsform auszuführen.
  • Beispielhaftes System auf einer integrierten Chipschaltung
  • 29-31 zeigen beispielhafte integrierte Schaltungen und zugehörige Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne gemäß verschiedenen hierin beschriebenen Ausführungsformen hergestellt werden können. Zusätzlich zu den Veranschaulichungen, können andere Logik und Schaltungen enthalten sein, einschließlich zusätzlicher Grafikprozessoren/-kerne, Peripherieschnittstellensteuerungen oder Universalprozessorkernen.
  • 29 ist ein Blockdiagramm, das eine beispielhafte integrierte Schaltung 2900 eines Systems auf einem Chip veranschaulicht, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform. Die beispielhafte integrierte Schaltung 2900 weist einen oder mehrere Anwendungsprozessor(en) 2905 (z. B. CPUs), mindestens einen Grafikprozessor 2910 auf und kann außerdem einen Bildprozessor 2915 und/oder einen Videoprozessor 2920 aufweisen, von denen jeder ein modularer IP-Kern aus derselben oder mehreren verschiedenen Designeinrichtungen sein kann. Die integrierte Schaltung 2900 weist eine Peripherie- oder Buslogik auf, die eine USB-Steuerung 2925, eine UART-Steuerung 2930, eine SPI/SDIO-Steuerung 2935 und eine I2S/I2C-Steuerung 2940 aufweist. Außerdem kann die integrierte Schaltung eine Anzeigevorrichtung 2945 aufweisen, die mit einer oder mehreren von einer High-Definition Multimedia Interface (HDMI) -Steuerung 2950 und einer MIPI (Mobile Industry Processor Interface) -Anzeigeschnittstelle 2955 gekoppelt ist. Die Speicherung kann von einem Flash-Speicher-Subsystem 2960 bereitgestellt werden, das einen Flash-Speicher und eine Flash-Speichersteuerung aufweist. Die Speicherschnittstelle kann über eine Speichersteuerung 2965 für den Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt werden. Einige integrierte Schaltungen weisen zusätzlich eine eingebettete Sicherheits-Engine 2970 auf.
  • 30 ist ein Blockdiagramm, das einen beispielhaften Grafikprozessor 3010 eines Systems auf einer integrierten Chipschaltung veranschaulicht, der unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform. Der Grafikprozessor 3010 kann eine Variante des Grafikprozessors 2910 aus 29 sein. Der Grafikprozessor 3010 weist einen Vertex-Prozessor 3005 und einen oder mehrere Fragment-Prozessoren 3015A-3015N (z. B. 3015A, 3015B, 3015C, 3015D, bis 3015N-1 und 3015N) auf. Der Grafikprozessor 3010 kann verschiedene Shader-Programme über separate Logik ausführen, sodass der Vertex-Prozessor 3005 zum Ausführen von Operationen für Vertex-Shader-Programme optimiert ist, während der eine oder die mehreren Fragmentprozessor(en) 3015A-3015N Fragment- (z. B. Pixel-) Shading-Operationen für Fragment- oder Pixel-Shader-Programme ausführen. Der Vertex-Prozessor 3005 führt die Vertex-Verarbeitungsstufe der 3D-Grafik-Pipeline aus und generiert Primitive und Vertexdaten. Der bzw.die Fragmentprozessor(en) 3015A-3015N verwenden die von dem Vertex-Prozessor 3005 generierten Primitiv- und Vertexdaten, um einen Rahmenpuffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. In einer Ausführungsform sind die Fragmentprozessor(en) 3015A-3015N optimiert, um Fragment-Shader-Programme wie in der OpenGL-API bereitgestellt auszuführen, die verwendet werden können, um ähnliche Operationen wie ein Pixel-Shader-Programm auszuführen, wie in der Direct 3D API bereitgestellt.
  • Der Grafikprozessor 3010 weist außerdem eine oder mehrere Speicherverwaltungseinheiten (MMUs) 3020A-3020B, Cache(s) 3025A-3025B und Schaltungsverbindung(en) 3030A-3030B auf. Die eine oder mehreren MMU(s) 3020A-3020B stellen eine Abbildung von virtuellen auf physikalischen Adressen für den Grafikprozessor 3010 bereit, einschließlich für den Vertex-Prozessor 3005 und/oder Fragmentprozessor(en) 3015A-3015N, die zusätzlich zu Vertex- oder Bild/Textur-Daten, die in dem einen oder den mehreren Caches 3025A-3025B gespeichert sind, Vertex- oder Bild-/Texturdaten referenzieren können, die im Speicher gespeichert sind. In einer Ausführungsform können die eine oder mehreren MMU(s) 3020A-3020B mit anderen MMUs innerhalb des Systems synchronisiert sein, einschließlich einer oder mehrerer MMUs, die mit dem einen oder den mehreren Anwendungsprozessoren 2905, dem Bildprozessor 2915 und/oder dem Videoprozessor 2920 aus 29 verbunden sind, sodass jeder Prozessor 2905-2920 an einem gemeinsam genutzten oder vereinheitlichten virtuellen Speichersystem teilnehmen kann. Die eine oder die mehreren Schaltungsverbindung(en) 3030A-3030B ermöglichen dem Grafikprozessor 3010 gemäß Ausführungsformen, sich mit anderen IP-Kernen innerhalb des SoC über entweder einen internen Bus des SoC oder über eine direkte Verbindung zu verbinden.
  • 31 ist ein Blockdiagramm, das einen weiteren beispielhaften Grafikprozessor 3110 eines Systems auf einer integrierten Chipschaltung veranschaulicht, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß einer Ausführungsform. Der Grafikprozessor 3110 kann eine Variante des Grafikprozessors 2910 aus 29 sein. Der Grafikprozessor 3110 weist die eine oder die mehreren MMU(s) 3020A-3020B, die Cache(s) 3025A-3025B und die Schaltungsverbindung(en) 3030A-3030B der integrierten Schaltung 3000 aus 30 auf.
  • Der Grafikprozessor 3110 weist einen oder mehrere Shader-Kern(e) 3115A-3115N (z. B. 3115A, 3115B, 3115C, 3115D, 3115E, 3115F, bis 3015N-1 und 3015N) 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 3110 einen Inter-Core-Aufgabenmanager 3105 auf, der als Thread-Verteiler dient, um Ausführungs-Threads an einen oder mehrere Shader-Kern(e) 3115A-3115N zu senden. Der Grafikprozessor 3110 weist außerdem eine Kachelungseinheit 3118 auf, um Kacheloperationen für ein kachelbasiertes Rendering zu beschleunigen, in denen Rendering-Operationen für eine Szene in den Bildraum unterteilt werden. Kachelbasiertes Rendering kann verwendet werden, um lokale räumliche Kohärenz innerhalb einer Szene auszunutzen oder die Verwendung von internen Caches zu optimieren.
  • Bezugnahmen auf „eine Ausführungsform“, „Ausführungsbeispiel“, „verschiedene Ausführungsformen“ usw. weisen daraufhin, dass die so beschriebene(n) Ausführungsform(en) bestimmte Merkmale, Strukturen oder Eigenschaften aufweisen können, jedoch nicht jede Ausführungsform notwendigerweise die bestimmten Merkmale, Strukturen oder Eigenschaften aufweist. Ferner können einige Ausführungsformen einige, alle oder keines der Merkmale aufweisen, die für andere Ausführungsformen beschrieben sind.
  • In der vorstehenden Spezifikation wurden Ausführungsformen unter Bezugnahme auf spezifische Ausführungsbeispiele davon beschrieben. Es ist jedoch offensichtlich, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne vom breiteren Geist und Schutzumfang der Ausführungsformen abzuweichen, wie sie in den beigefügten Ansprüchen dargelegt sind. Die Beschreibung und die Zeichnungen sind dementsprechend in einem veranschaulichenden und nicht einschränkenden Sinne zu betrachten.
  • In der folgenden Beschreibung und den Ansprüchen kann der Ausdruck „gekoppelt“ zusammen mit seinen Derivaten verwendet werden. „Gekoppelt“ wird verwendet, um anzuzeigen, dass zwei oder mehrere Elemente miteinander zusammenwirken oder interagieren, sie aber dazwischen liegende physikalische oder elektrische Komponenten haben können oder nicht.
  • Wie in den Ansprüchen verwendet" sofern nicht anderweitig angegeben, gibt die Verwendung der Ordinaladjektive „erste“, „zweite“, „dritte“ usw. zur Beschreibung eines gemeinsamen Elements lediglich an, dass auf verschiedene Instanzen von ähnlichen Elementen Bezug genommen wird, wobei nicht impliziert werden soll, dass die so beschriebenen Elemente in einer bestimmten Abfolge vorliegen müssen, und zwar weder zeitlich, räumlich, in einer Rangfolge oder auf irgendeine andere Weise.
  • Die folgenden Klauseln und/oder Beispiele betreffen weitere Ausführungsformen oder Beispiele. Einzelheiten in den Beispielen können überall in einer oder mehreren Ausführungsformen verwendet werden. Die verschiedenen Merkmale der verschiedenen Ausführungsformen oder Beispiele können verschiedenartig mit einigen enthaltenen Merkmalen kombiniert werden und andere ausgeschlossen werden, um für eine Vielzahl von verschiedenen Anwendungen geeignet zu sein. Beispiele können Gegenstände wie Verfahren, Mittel zum Ausführen von Handlungen der Verfahren, mindestens ein maschinenlesbares Medium einschließlich Anweisungen, die wenn sie von einer Maschine ausgeführt werden, die Maschine veranlassen, Handlungen der Verfahren auszuführen, oder eine Einrichtung oder ein System zum Ermöglichen einer hybriden Kommunikation gemäß hierin beschriebenen Ausführungsformen und Beispielen beinhalten.
  • Einige Ausführungsformen gehören zu Beispiel 1, das eine Einrichtung zum Ermöglichen einer intelligenten Sammlung von Daten und einer intelligenten Verwaltung von autonomen Maschinen beinhaltet, wobei die Einrichtung Folgendes umfasst: eine Erkennungs-/Beobachtungslogik, wie von einem Prozessor ermöglicht oder mindestens teilweise in diesen integriert, zum Erkennen eines oder mehrerer Sätze von Daten von einer oder mehreren Quellen über ein oder mehrere Netzwerke, und eine hybride Berechnungslogik, wie von dem Prozessor ermöglicht oder mindestens teilweise in diesen integriert, zum Kombinieren einer ersten Berechnung, die derart gelenkt wird, dass sie an der Einrichtung ausgeführt wird, mit einer zweiten Berechnung, die derart gelenkt wird, dass sie entfernt an einer entfernten Rechenvorrichtung in Kommunikation mit der Einrichtung über das eine oder die mehreren Netzwerke ausgeführt wird, wobei die erste Berechnung wenig Energie verbraucht, wobei die zweite Berechnung viel Energie verbraucht.
  • Beispiel 2 beinhaltet den Gegenstand von 1, wobei die hybride Berechnungslogik zum Lenken der ersten Berechnung dient, sodass diese lokal ausgeführt wird, da die erste Berechnung als einfach weniger energieverbrauchend betrachtet wird, wobei die hybride Berechnungslogik ferner zum Lenken der zweiten Berechnung dient, sodass diese entfernt ausgeführt wird, da die zweite Berechnung als komplex mehr energieverbrauchend betrachtet wird.
  • Beispiel 3 beinhaltet den Gegenstand aus Beispiel 1 bis 2, ferner umfassend eine Fehlerdiagnose- und -korrekturlogik („Fehlerlogik“), wie von dem Prozessor ermöglicht oder mindestens teilweise in diesen integriert, um einen oder mehrere Fehler an der Einrichtung zu erkennen, wobei die Fehlerlogik ferner zum Auslösen einer lokalen, auf einem faltenden neuronalen Netzwerk (Convolutional Neural Network - CNN) basierenden Diagnose der einen oder mehreren Fehler dient, wobei die Fehlerlogik ferner zum Auslösen einer entfernten CNN-basierten Diagnose des einen oder der mehreren Fehler dient, falls Ergebnisse der lokalen CNN-basierten Diagnose nicht vertrauenswürdig genug sind.
  • Beispiel 4 beinhaltet den Gegenstand aus Beispiel 1 bis 3, ferner umfassend eine Soziale-Medien- und Vorhersagelogik („Vorhersagelogik“), wie von dem Prozessor ermöglicht oder mindestens teilweise in diesen integriert, zum Kombinieren eines ersten Satzes von Daten mit einem zweiten Satz von Daten, wobei die Vorhersagelogik ferner zum Ausgeben einer oder mehrerer Vorhersagen basierend auf dem ersten und dem zweiten Satz von Daten dient.
  • Beispiel 5 beinhaltet den Gegenstand aus Beispiel 1 bis 4, wobei der erste Satz von Daten Soziale-Medien-Daten umfasst, die von einer oder mehreren Websites erhalten werden, wobei der zweite Satz von Daten Autonome-Maschinen-Daten umfasst, wobei die eine oder mehreren Vorhersagen verwendet werden, um eine oder mehrere Entscheidungen in Bezug auf die Einrichtung zu ermöglichen.
  • Beispiel 6 beinhaltet den Gegenstand aus Beispiel 1 bis 5, ferner umfassend eine Routen- und Führungsoptimierungslogik („Routen-/Führungslogik“), wie von dem Prozessor ermöglicht oder mindestens teilweise in diesen integriert, um den einen oder die mehreren Sätze von Daten einschließlich des ersten Satzes von Daten und des zweiten Satzes von Daten zu analysieren, um eine dynamisch optimierte Karte bereitzustellen, wobei die Karte Führung einschließlich bevorzugter Routen bietet.
  • Beispiel 7 beinhaltet den Gegenstand aus Beispiel 1 bis 6, wobei die Einrichtung eine autonome Maschine umfasst, die ein oder mehrere eines Fahrzeugs, einer Vorrichtung und einer Ausrüstung aufweist, wobei das eine oder die mehreren Netzwerke ein Cloud-Netzwerk oder das Internet umfassen und wobei die autonome Maschine eine oder mehrere Prozessoren einschließlich des Prozessors mit einem Grafikprozessor umfasst, wobei der Grafikprozessor zusammen mit einem Anwendungsprozessor auf einem gemeinsamen Halbleitergehäuse angeordnet ist.
  • Einige Ausführungsformen gehören zu Beispiel 8, das ein Verfahren zum Ermöglichen einer intelligenten Sammlung von Daten und einer intelligenten Verwaltung von autonomen Maschinen beinhaltet, wobei das Verfahren Folgendes umfasst: Erkennen eines oder mehrerer Sätze von Daten von einer oder mehreren Quellen über ein oder mehrere Netzwerke, und Kombinieren einer ersten Berechnung, die lokal an einer lokalen Rechenvorrichtung ausgeführt wird, mit einer zweiten Berechnung, die entfernt an einer entfernten Rechenvorrichtung in Kommunikation mit der lokalen Rechenvorrichtung über das eine oder die mehreren Netzwerke ausgeführt wird, wobei die erste Berechnung wenig Energie verbraucht, wobei die zweite Berechnung viel Energie verbraucht.
  • Beispiel 9 beinhaltet den Gegenstand aus Beispiel 8, ferner umfassend das Lenken der ersten Berechnung, sodass diese lokal ausgeführt wird, da die erste Berechnung als einfach weniger energieverbrauchend betrachtet wird, und Lenken der zweiten Berechnung, sodass diese entfernt ausgeführt wird, da die zweite Berechnung als komplex mehr energieverbrauchend betrachtet wird.
  • Beispiel 10 beinhaltet den Gegenstand aus Beispiel 8 bis 9, ferner umfassend: Erkennen eines oder mehrerer Fehler mit der lokalen Rechenvorrichtung; Auslösen einer lokalen, auf einem faltenden neuralen Netzwerk (CNN) basierenden Diagnose des einen oder der mehreren Fehler; und Auslösen einer entfernten CNN-basierten Diagnose des einen oder der mehreren Fehler, wenn die Ergebnisse der lokalen CNN-basierten Diagnose nicht vertrauenswürdig genug sind.
  • Beispiel 11 beinhaltet den Gegenstand aus Beispiel 8 bis 10, ferner umfassend: Kombinieren eines ersten Satzes von Daten mit einem zweiten Satz von Daten; und Ausgeben einer oder mehrerer Vorhersagen basierend auf dem ersten und dem zweiten Satz von Daten.
  • Beispiel 12 beinhaltet den Gegenstand aus Beispiel 8 bis 11, wobei der erste Satz von Daten Soziale-Medien-Daten umfasst, die von einer oder mehreren Websites erhalten werden, wobei der zweite Satz von Daten Autonome-Maschinen-Daten umfasst, wobei die eine oder mehreren Vorhersagen verwendet werden, um eine oder mehrere Entscheidungen in Bezug auf die lokale Rechenvorrichtung zu ermöglichen.
  • Beispiel 13 beinhaltet den Gegenstand aus Beispiel 8 bis 12, ferner umfassend das Analysieren des einen oder der mehreren Sätze von Daten einschließlich des ersten Satzes von Daten und des zweiten Satzes von Daten, um eine dynamisch optimierte Karte bereitzustellen, wobei die Karte Führung einschließlich bevorzugter Routen bietet.
  • Beispiel 14 beinhaltet den Gegenstand aus Beispiel 8 bis 13, wobei die lokale Rechenvorrichtung eine autonome Maschine umfasst, die ein oder mehrere eines Fahrzeugs, einer Vorrichtung und einer Ausrüstung aufweist, wobei das eine oder die mehreren Netzwerke ein Cloud-Netzwerk oder das Internet umfassen und wobei die autonome Maschine eine oder mehrere Prozessoren einschließlich eines Grafikprozessors umfasst, wobei der Grafikprozessor zusammen mit einem Anwendungsprozessor auf einem gemeinsamen Halbleitergehäuse angeordnet ist.
  • Einige Ausführungsformen gehören zu Beispiel 15, das eine Grafikverarbeitungssystem beinhaltet, das eine lokale Rechenvorrichtung umfasst, die einen Speicher aufweist, der mit einem Prozessor gekoppelt ist, wobei der Prozessor zu Folgendem dient: Erkennen eines oder mehrerer Sätze von Daten von einer oder mehreren Quellen über ein oder mehrere Netzwerke, und Kombinieren einer ersten Berechnung, die lokal an einer lokalen Rechenvorrichtung ausgeführt wird, mit einer zweiten Berechnung, die entfernt an einer entfernten Rechenvorrichtung in Kommunikation mit der lokalen Rechenvorrichtung über das eine oder die mehreren Netzwerke ausgeführt wird, wobei die erste Berechnung wenig Energie verbraucht, wobei die zweite Berechnung viel Energie verbraucht.
  • Beispiel 16 beinhaltet den Gegenstand aus Beispiel 15, ferner umfassend: Lenken der ersten Berechnung, sodass diese lokal ausgeführt wird, da die erste Berechnung als einfach weniger energieverbrauchend betrachtet wird, und Lenken der zweiten Berechnung, sodass diese entfernt ausgeführt wird, da die zweite Berechnung als komplex mehr energieverbrauchend betrachtet wird.
  • Beispiel 17 beinhaltet den Gegenstand aus Beispiel 15 bis 16, ferner umfassend: Erkennen eines oder mehrerer Fehler mit der lokalen Rechenvorrichtung; Auslösen einer lokalen, auf einem faltenden neuralen Netzwerk (CNN) basierenden Diagnose des einen oder der mehreren Fehler; und Auslösen einer entfernten CNN-basierten Diagnose des einen oder der mehreren Fehler, wenn die Ergebnisse der lokalen CNN-basierten Diagnose nicht vertrauenswürdig genug sind.
  • Beispiel 18 beinhaltet den Gegenstand aus Beispiel 15 bis 17, ferner umfassend: Kombinieren eines ersten Satzes von Daten mit einem zweiten Satz von Daten; und Ausgeben einer oder mehrerer Vorhersagen basierend auf dem ersten und dem zweiten Satz von Daten.
  • Beispiel 19 beinhaltet den Gegenstand aus Beispiel 15 bis 18, wobei der erste Satz von Daten Soziale-Medien-Daten umfasst, die von einer oder mehreren Websites erhalten werden, wobei der zweite Satz von Daten Autonome-Maschinen-Daten umfasst, wobei die eine oder mehreren Vorhersagen verwendet werden, um eine oder mehrere Entscheidungen in Bezug auf die lokale Rechenvorrichtung zu ermöglichen.
  • Beispiel 20 beinhaltet den Gegenstand aus Beispiel 15 bis 19, ferner umfassend das Analysieren des einen oder der mehreren Sätze von Daten einschließlich des ersten Satzes von Daten und des zweiten Satzes von Daten, um eine dynamisch optimierte Karte bereitzustellen, wobei die Karte Führung einschließlich bevorzugter Routen bietet.
  • Beispiel 21 beinhaltet den Gegenstand aus Beispiel 15 bis 20, wobei die lokale Rechenvorrichtung eine autonome Maschine umfasst, die ein oder mehrere eines Fahrzeugs, einer Vorrichtung und einer Ausrüstung aufweist, wobei das eine oder die mehreren Netzwerke ein Cloud-Netzwerk oder das Internet umfassen und wobei die autonome Maschine eine oder mehrere Prozessoren einschließlich eines Grafikprozessors umfasst, wobei der Grafikprozessor zusammen mit einem Anwendungsprozessor auf einem gemeinsamen Halbleitergehäuse angeordnet ist.
  • Beispiel 22 beinhaltet mindestens ein nichtflüchtiges oder greifbares maschinenlesbares Medium, das eine Vielzahl von Anweisungen umfasst, die, wenn sie auf einer Rechenvorrichtung ausgeführt werden, zum Implementieren oder Ausführen eines Verfahrens nach einem der Ansprüche oder Beispiele 8 bis 14 dienen.
  • Beispiel 23 beinhaltet mindestens ein maschinenlesbares Medium, das eine Vielzahl von Anweisungen umfasst, die, wenn sie auf einer Rechenvorrichtung ausgeführt werden, zum Implementieren oder Ausführen eines Verfahrens nach einem der Ansprüche oder Beispiele 8 bis 14 dienen.
  • Beispiel 24 beinhaltet ein System umfassend einen Mechanismus zum Implementieren oder Ausführen eines Verfahrens nach einem der Ansprüche oder der Beispiele 8 bis 14.
  • Beispiel 25 beinhaltet eine Einrichtung umfassend Mittel zum Ausführen eines Verfahrens nach einem der Ansprüche oder der Beispiele 8 bis 14.
  • Beispiel 26 beinhaltet eine Rechenvorrichtung, die ausgelegt ist, ein Verfahren nach einem der Ansprüche oder der Beispiele 8 bis 14 zu implementieren oder auszuführen.
  • Beispiel 27 beinhaltet eine Kommunikationsvorrichtung, die ausgelegt ist, ein Verfahren nach einem der Ansprüche oder der Beispiele 8 bis 14 zu implementieren oder auszuführen.
  • Beispiel 28 beinhaltet mindestens ein maschinenlesbares Medium, das eine Vielzahl von Anweisungen umfasst, die, wenn sie auf einer Rechenvorrichtung ausgeführt werden, zum Implementieren oder Ausführen eines Verfahrens oder Realisieren einer Einrichtung nach einem der vorstehenden Ansprüche dienen.
  • Beispiel 29 beinhaltet mindestens ein nichtflüchtiges oder greifbares maschinenlesbares Medium, das eine Vielzahl von Anweisungen umfasst, die, wenn sie auf einer Rechenvorrichtung ausgeführt werden, zum Implementieren oder Ausführen eines Verfahrens oder Realisieren einer Einrichtung nach einem der vorstehenden Ansprüche dienen.
  • Beispiel 30 beinhaltet ein System umfassend einen Mechanismus zum Implementieren oder Ausführen eines Verfahrens oder Realisieren einer Einrichtung nach einem der vorstehenden Ansprüche.
  • Beispiel 31 beinhaltet eine Einrichtung umfassend Mittel zum Ausführen eines Verfahrens nach einem der vorstehenden Ansprüche.
  • Beispiel 32 beinhaltet eine Rechenvorrichtung, die zum Implementieren oder Ausführen eines Verfahrens oder Realisieren einer Einrichtung nach einem der vorstehenden Ansprüche ausgelegt ist.
  • Beispiel 33 beinhaltet eine Kommunikationsvorrichtung, die zum Implementieren oder Ausführen eines Verfahrens oder Realisieren einer Einrichtung nach einem der vorstehenden Ansprüche ausgelegt ist.
  • Die Zeichnungen und die vorangehende Beschreibung geben Beispiele von Ausführungsformen. Der Fachmann wird zu schätzen wissen, dass eines oder mehrere der beschriebenen Elemente gut zu einem einzigen funktionalen Element kombiniert werden können. Alternativ können bestimmte Elemente in mehrere funktionale Elemente aufgeteilt sein. Elemente von einer Ausführungsform können zu einer anderen Ausführungsform hinzugefügt werden. Zum Beispiel können Reihenfolgen von Prozessen, die hierin beschrieben sind, geändert werden und sind nicht auf die hierin beschriebene Art und Weise beschränkt. Darüber hinaus müssen die Aktionen eines Flussdiagramms nicht in der dargestellten Reihenfolge implementiert werden; noch müssen unbedingt alle Handlungen ausgeführt werden. Ferner können solche Handlungen, die nicht von anderen Handlungen abhängig sind, parallel zu den anderen Handlungen ausgeführt werden. Der Schutzumfang der Ausführungsformen ist keineswegs auf diese spezifischen Beispiele beschränkt. Zahlreiche Variationen, ob explizit in der Beschreibung angegeben oder nicht, wie Unterschiede hinsichtlich der Struktur, Abmessung und Verwendung von Material, sind möglich. Der Schutzumfang der Ausführungsformen ist mindestens so breit wie in den folgenden Ansprüchen angegeben.

Claims (19)

  1. Einrichtung, die eine intelligente Sammlung von Daten und eine intelligente Verwaltung autonomer Maschinen ermöglicht, wobei die Einrichtung Folgendes umfasst: eine Erkennungs-/Beobachtungslogik, um einen oder mehrere Sätze von Daten von einer oder mehreren Quellen über ein oder mehrere Netzwerke zu erkennen; und eine hybride Berechnungslogik zum Kombinieren einer ersten Berechnung, die lokal an der Einrichtung ausgeführt wird, mit einer zweiten Berechnung, die entfernt an einer entfernten Rechenvorrichtung in Kommunikation mit der Einrichtung über das eine oder die mehreren Netzwerke ausgeführt wird, wobei die erste Berechnung wenig Energie verbraucht, wobei die zweite Berechnung viel Energie verbraucht.
  2. Einrichtung nach Anspruch 1, wobei die hybride Berechnungslogik zum Lenken der ersten Berechnung dient, sodass diese lokal ausgeführt wird, da die erste Berechnung als einfach weniger energieverbrauchend betrachtet wird, wobei die hybride Berechnungslogik ferner zum Lenken der zweiten Berechnung dient, sodass diese entfernt ausgeführt wird, da die zweite Berechnung als komplex mehr energieverbrauchend betrachtet wird.
  3. Einrichtung nach Anspruch 1, ferner umfassend eine Fehlerdiagnose- und -korrekturlogik („Fehlerlogik“), um einen oder mehrere Fehler an der Einrichtung zu erkennen, wobei die Fehlerlogik ferner zum Auslösen einer lokalen, auf einem faltenden neuronalen Netzwerk (Convolutional Neural Network - CNN) basierenden Diagnose der einen oder mehreren Fehler dient, wobei die Fehlerlogik ferner zum Auslösen einer entfernten CNN-basierten Diagnose des einen oder der mehreren Fehler dient, falls Ergebnisse der lokalen CNN-basierten Diagnose nicht vertrauenswürdig genug sind.
  4. Einrichtung nach Anspruch 1, ferner umfassend eine Soziale-Medien- und Vorhersagelogik („Vorhersagelogik“) zum Kombinieren eines ersten Satzes von Daten mit einem zweiten Satz von Daten, wobei die Vorhersagelogik ferner zum Ausgeben einer oder mehrerer Vorhersagen basierend auf dem ersten und dem zweiten Satz von Daten dient.
  5. Einrichtung nach Anspruch 4, wobei der erste Satz von Daten Soziale-Medien-Daten umfasst, die von einer oder mehreren Websites erhalten werden, wobei der zweite Satz von Daten Autonome-Maschinen-Daten umfasst, wobei die eine oder mehreren Vorhersagen verwendet werden, um eine oder mehrere Entscheidungen in Bezug auf die Einrichtung zu ermöglichen.
  6. Einrichtung nach Anspruch 1, ferner umfassend eine Routen- und Führungsoptimierungslogik („Routen-/Führungslogik“), um den einen oder die mehreren Sätze von Daten einschließlich des ersten Satzes von Daten und des zweiten Satzes von Daten zu analysieren, um eine dynamisch optimierte Karte bereitzustellen, wobei die Karte Führung einschließlich bevorzugter Routen bietet.
  7. Einrichtung nach Anspruch 1, wobei die Einrichtung eine autonome Maschine umfasst, die ein oder mehrere eines Fahrzeugs, einer Vorrichtung und einer Ausrüstung aufweist, wobei das eine oder die mehreren Netzwerke ein Cloud-Netzwerk oder das Internet umfassen und wobei die autonome Maschine eine oder mehrere Prozessoren einschließlich eines Grafikprozessors umfasst, wobei der Grafikprozessor zusammen mit einem Anwendungsprozessor auf einem gemeinsamen Halbleitergehäuse angeordnet ist.
  8. Verfahren zur intelligenten Sammlung von Daten und zur intelligenten Verwaltung autonomer Maschinen, wobei das Verfahren Folgendes umfasst: Erkennen eines oder mehrerer Sätze von Daten von einer oder mehreren Quellen über ein oder mehrere Netzwerke; und Kombinieren einer ersten Berechnung, die lokal an einer lokalen Rechenvorrichtung ausgeführt wird, mit einer zweiten Berechnung, die entfernt an einer entfernten Rechenvorrichtung in Kommunikation mit der lokalen Rechenvorrichtung über das eine oder die mehreren Netzwerke ausgeführt wird, wobei die erste Berechnung wenig Energie verbraucht, wobei die zweite Berechnung viel Energie verbraucht.
  9. Verfahren nach Anspruch 8, das ferner Folgendes umfasst: Lenken der ersten Berechnung, sodass diese lokal ausgeführt wird, da die erste Berechnung als einfach weniger energieverbrauchend betrachtet wird; und Lenken der zweiten Berechnung, sodass diese entfernt ausgeführt wird, da die zweite Berechnung als komplex mehr energieverbrauchend betrachtet wird.
  10. Verfahren nach Anspruch 8, das ferner Folgendes umfasst: Erkennen eines oder mehrerer Fehler mit der lokalen Rechenvorrichtung; Auslösen einer lokalen, auf einem faltenden neuralen Netzwerk (CNN) basierenden Diagnose des einen oder der mehreren Fehler; und Auslösen einer entfernten CNN-basierten Diagnose des einen oder der mehreren Fehler, wenn die Ergebnisse der lokalen CNN-basierten Diagnose nicht vertrauenswürdig genug sind.
  11. Verfahren nach Anspruch 8, das ferner Folgendes umfasst: Kombinieren eines ersten Satzes von Daten mit einem zweiten Satz von Daten; und Ausgeben einer oder mehrerer Vorhersagen basierend auf dem ersten und dem zweiten Satz von Daten.
  12. Verfahren nach Anspruch 11, wobei der erste Satz von Daten Soziale-Medien-Daten umfasst, die von einer oder mehreren Websites erhalten werden, wobei der zweite Satz von Daten Autonome-Maschinen-Daten umfasst, wobei die eine oder mehreren Vorhersagen verwendet werden, um eine oder mehrere Entscheidungen in Bezug auf die lokale Rechenvorrichtung zu ermöglichen.
  13. Verfahren nach Anspruch 8, ferner umfassend das Analysieren des einen oder der mehreren Sätze von Daten einschließlich des ersten Satzes von Daten und des zweiten Satzes von Daten, um eine dynamisch optimierte Karte bereitzustellen, wobei die Karte Führung einschließlich bevorzugter Routen bietet.
  14. Verfahren nach Anspruch 8, wobei die lokale Rechenvorrichtung eine autonome Maschine umfasst, die ein oder mehrere eines Fahrzeugs, einer Vorrichtung und einer Ausrüstung aufweist, wobei das eine oder die mehreren Netzwerke ein Cloud-Netzwerk oder das Internet umfassen und wobei die autonome Maschine eine oder mehrere Prozessoren einschließlich eines Grafikprozessors umfasst, wobei der Grafikprozessor zusammen mit einem Anwendungsprozessor auf einem gemeinsamen Halbleitergehäuse angeordnet ist.
  15. Mindestens ein maschinenlesbares Medium, das eine Vielzahl von Anweisungen umfasst, die, wenn sie auf einer Rechenvorrichtung ausgeführt werden, zum Implementieren oder Ausführen eines Verfahrens nach einem der Ansprüche 8 bis 14 dienen.
  16. System umfassend einen Mechanismus zum Implementieren oder Ausführen eines Verfahrens nach einem der Ansprüche oder der Beispiele 8 bisl4.
  17. Einrichtung umfassend Mittel zum Ausführen eines Verfahrens nach einem der Ansprüche oder der Beispiele 8 bis 14.
  18. Rechenvorrichtung, die ausgelegt ist, ein Verfahren nach einem der Ansprüche oder der Beispiele 8 bis 14 zu implementieren oder auszuführen.
  19. Kommunikationsvorrichtung, die ausgelegt ist, ein Verfahren nach einem der Ansprüche oder der Beispiele 8 bis 14 zu implementieren oder auszuführen.
DE102018110369.7A 2017-04-28 2018-04-30 Verbesserung autonomer maschinen durch cloud, fehlerkorrektur und vorhersagen Pending DE102018110369A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/581,133 US10410115B2 (en) 2017-04-28 2017-04-28 Autonomous machines through cloud, error corrections, and predictions
US15/581,133 2017-04-28

Publications (1)

Publication Number Publication Date
DE102018110369A1 true DE102018110369A1 (de) 2018-10-31

Family

ID=63797279

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018110369.7A Pending DE102018110369A1 (de) 2017-04-28 2018-04-30 Verbesserung autonomer maschinen durch cloud, fehlerkorrektur und vorhersagen

Country Status (2)

Country Link
US (2) US10410115B2 (de)
DE (1) DE102018110369A1 (de)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10410115B2 (en) 2017-04-28 2019-09-10 Intel Corporation Autonomous machines through cloud, error corrections, and predictions
CN111753557A (zh) * 2020-02-17 2020-10-09 昆明理工大学 融合emd最小化双语词典的汉-越无监督神经机器翻译方法
DE102021117498B3 (de) 2021-07-07 2022-05-12 Dr. Ing. H.C. F. Porsche Aktiengesellschaft Vorrichtung und Verfahren zur Fehlerdiagnose
DE102020133626A1 (de) 2020-12-15 2022-06-15 Bayerische Motoren Werke Aktiengesellschaft Verfahren zum Erkennen von für ein neuronales Netz schwierig korrekt zu klassifizierenden Szenen, Assistenzeinrichtung und Kraftfahrzeug

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11328403B2 (en) * 2020-01-22 2022-05-10 Gary B. Levin Apparatus and method for onboard stereoscopic inspection of vehicle tires
US11126465B2 (en) * 2017-03-23 2021-09-21 Microsoft Technology Licensing, Llc Anticipatory collection of metrics and logs
US11273553B2 (en) 2017-06-05 2022-03-15 Autodesk, Inc. Adapting simulation data to real-world conditions encountered by physical processes
US10580228B2 (en) * 2017-07-07 2020-03-03 The Boeing Company Fault detection system and method for vehicle system prognosis
US20190243698A1 (en) * 2018-02-02 2019-08-08 Robert Bosch Gmbh Electronic Control Unit for Flexible Replacement of Replaceable Components in a Vehicle
US10846201B1 (en) * 2018-09-21 2020-11-24 Amazon Technologies, Inc. Performance debug for networks
US11486721B2 (en) * 2018-09-30 2022-11-01 Strong Force Intellectual Capital, Llc Intelligent transportation systems
US11520331B2 (en) * 2018-12-28 2022-12-06 Intel Corporation Methods and apparatus to update autonomous vehicle perspectives
US11353870B2 (en) * 2018-12-31 2022-06-07 Baidu Usa Llc Autonomous driving computing and storage expansion device with flexible host and client configuration
US11501160B2 (en) * 2019-03-28 2022-11-15 International Business Machines Corporation Cloud computing data compression for allreduce in deep learning
WO2020210729A1 (en) * 2019-04-12 2020-10-15 Harman International Industries, Incorporated Elastic computing for in-vehicle computing systems
TWI773907B (zh) * 2019-07-11 2022-08-11 緯創資通股份有限公司 資料擷取裝置與資料運算系統及方法
US11663523B2 (en) 2019-09-14 2023-05-30 Oracle International Corporation Machine learning (ML) infrastructure techniques
US11562267B2 (en) * 2019-09-14 2023-01-24 Oracle International Corporation Chatbot for defining a machine learning (ML) solution
US11556862B2 (en) 2019-09-14 2023-01-17 Oracle International Corporation Techniques for adaptive and context-aware automated service composition for machine learning (ML)
CN111130853B (zh) * 2019-12-04 2023-05-02 沈阳航空航天大学 一种基于时间信息的软件定义车辆网络的未来路由预测方法
CN111124605B (zh) * 2019-12-06 2023-03-31 暨南大学 利用气流组织分布方式进行数据中心虚拟机放置与调度的方法
CN111062080B (zh) * 2019-12-20 2022-07-12 哈尔滨工业大学 斜拉索索力与主梁竖向位移时空相关深度学习建模方法
US11416959B1 (en) * 2020-02-10 2022-08-16 Zoox, Inc. Vision architecture
WO2021161671A1 (ja) * 2020-02-14 2021-08-19 パナソニックIpマネジメント株式会社 情報処理方法、情報処理システム及び情報処理装置
US11321495B2 (en) 2020-04-01 2022-05-03 International Business Machines Corporation Anomalous cache coherence transaction detection in a heterogeneous system
EP3916633A1 (de) * 2020-05-25 2021-12-01 Sick Ag Kamera und verfahren zum verarbeiten von bilddaten
CN111731349B (zh) * 2020-06-11 2022-07-12 中国铁道科学研究院集团有限公司通信信号研究所 基于生产引流机制的车站自律机测试平台
US11848980B2 (en) * 2020-07-09 2023-12-19 Boray Data Technology Co. Ltd. Distributed pipeline configuration in a distributed computing system
US11720417B2 (en) 2020-08-06 2023-08-08 Micron Technology, Inc. Distributed inferencing using deep learning accelerators with integrated random access memory
US20220044107A1 (en) * 2020-08-06 2022-02-10 Micron Technology, Inc. Optimized sensor fusion in deep learning accelerator with integrated random access memory
US11245640B1 (en) * 2020-08-19 2022-02-08 Amazon Technologies, Inc. Systems, methods, and apparatuses for predicting availability of a resource
CN112492567B (zh) * 2020-11-19 2022-03-18 江苏恒宝智能系统技术有限公司 一种应急指挥通信中的故障分析和解决方法及装置
US11977440B2 (en) 2020-11-23 2024-05-07 Ford Global Technologies, Llc On-board feedback system for autonomous vehicles
US20220244727A1 (en) * 2021-02-01 2022-08-04 Nvidia Corporation Patching deployed deep neural networks for autonomous machine applications
WO2022212915A1 (en) * 2021-04-01 2022-10-06 Giant.Ai, Inc. Spatio-temporal consistency embeddings from multiple observed modalities
US11763826B2 (en) 2021-10-27 2023-09-19 WingNut Films Productions Limited Audio source separation processing pipeline systems and methods
WO2023073598A1 (en) * 2021-10-27 2023-05-04 WingNut Films Productions Limited Audio source separation processing pipeline systems and methods
CN113836822A (zh) * 2021-10-28 2021-12-24 重庆大学 一种基于mclstm模型的航空发动机寿命预测方法
WO2023091128A1 (en) * 2021-11-16 2023-05-25 Aetherai Ip Holding Llc Remote diagnostic system and method

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US10074024B2 (en) * 2010-06-07 2018-09-11 Affectiva, Inc. Mental state analysis using blink rate for vehicles
US9015708B2 (en) * 2011-07-28 2015-04-21 International Business Machines Corporation System for improving the performance of high performance computing applications on cloud using integrated load balancing
US10170921B2 (en) * 2011-08-11 2019-01-01 PowerPlug Ltd. Methods and systems for efficient battery charging and usage
SG10201912804TA (en) * 2013-12-26 2020-02-27 Univ Singapore Technology & Design A method and apparatus for reducing data bandwidth between a cloud server and a thin client
US10169433B2 (en) * 2014-07-29 2019-01-01 Microsoft Technology Licensing, Llc Systems and methods for an SQL-driven distributed operating system
US10223333B2 (en) * 2014-08-29 2019-03-05 Nvidia Corporation Performing multi-convolution operations in a parallel processing system
US9475500B2 (en) * 2014-11-12 2016-10-25 GM Global Technology Operations LLC Use of participative sensing systems to enable enhanced road friction estimation
TWI565962B (zh) * 2015-05-19 2017-01-11 萊特旺服務有限公司 室內及其週邊地區定位系統、定位方法及行動通訊裝置
US10197631B2 (en) * 2015-06-01 2019-02-05 Verizon Patent And Licensing Inc. Systems and methods for determining vehicle battery health
EP3125056B1 (de) * 2015-07-30 2021-04-07 Siemens Aktiengesellschaft System und verfahren zur steuerung und/oder analytik eines industriellen prozesses
US9801234B2 (en) * 2015-08-25 2017-10-24 Logitech Europe S.A. Power efficient mesh network
US10206035B2 (en) * 2015-08-31 2019-02-12 University Of Maryland Simultaneous solution for sparsity and filter responses for a microphone network
US10997496B2 (en) 2016-08-11 2021-05-04 Nvidia Corporation Sparse convolutional neural network accelerator
US10891538B2 (en) 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
US10442439B1 (en) * 2016-08-18 2019-10-15 Apple Inc. System and method for road friction coefficient estimation
US10671465B2 (en) * 2016-11-28 2020-06-02 Intel Corporation Serializing machine check exceptions for predictive failure analysis
US10222799B2 (en) * 2017-03-14 2019-03-05 International Business Machines Corporation Autonomous vehicle pickup directed by socially derived meta data in public environments
US10410115B2 (en) 2017-04-28 2019-09-10 Intel Corporation Autonomous machines through cloud, error corrections, and predictions

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10410115B2 (en) 2017-04-28 2019-09-10 Intel Corporation Autonomous machines through cloud, error corrections, and predictions
US11488005B2 (en) 2017-04-28 2022-11-01 Intel Corporation Smart autonomous machines utilizing cloud, error corrections, and predictions
CN111753557A (zh) * 2020-02-17 2020-10-09 昆明理工大学 融合emd最小化双语词典的汉-越无监督神经机器翻译方法
CN111753557B (zh) * 2020-02-17 2022-12-20 昆明理工大学 融合emd最小化双语词典的汉-越无监督神经机器翻译方法
DE102020133626A1 (de) 2020-12-15 2022-06-15 Bayerische Motoren Werke Aktiengesellschaft Verfahren zum Erkennen von für ein neuronales Netz schwierig korrekt zu klassifizierenden Szenen, Assistenzeinrichtung und Kraftfahrzeug
DE102021117498B3 (de) 2021-07-07 2022-05-12 Dr. Ing. H.C. F. Porsche Aktiengesellschaft Vorrichtung und Verfahren zur Fehlerdiagnose

Also Published As

Publication number Publication date
US11488005B2 (en) 2022-11-01
US10410115B2 (en) 2019-09-10
US20200019844A1 (en) 2020-01-16
US20180314250A1 (en) 2018-11-01

Similar Documents

Publication Publication Date Title
DE102018110369A1 (de) Verbesserung autonomer maschinen durch cloud, fehlerkorrektur und vorhersagen
US11810405B2 (en) Autonomous vehicle advanced sensing and response
US20230117143A1 (en) Efficient learning and using of topologies of neural networks in machine learning
DE112020001256T5 (de) Kompressionstechniken
DE102018110380A1 (de) Tool zum Ermöglichen der Effizienz beim Maschinenlernen
DE102018110371A1 (de) Intelligente speicherhandhabung und datenmanagement für maschinenlernnetzwerke
DE102020130078A1 (de) Systolische arithmetik an spärlichen daten
DE112020001249T5 (de) Dünnbesetzt-Optimierungen für eine Matrixbeschleunigerarchitektur
DE102018119225A1 (de) System und Verfahren für einen optimierten Winograd-Faltungsbeschleuniger
DE102020129251A1 (de) Adaptives verformbares kernvorhersagenetzwerk zum bildentrauschen
DE102018110687A1 (de) Dynamisches Genauigkeitsmanagement für Deep-Learning-Ganzzahlprimitive
DE102020129969A1 (de) Verbesserungen der verarbeitung und des caching von graphikverarbeitungseinheiten
DE112020000464T5 (de) Mehrfachkachel-grafikprozessor-rendering
DE102020130073A1 (de) Verbesserung der datenlokalität für grafikprozessoreinheiten
DE112020000854T5 (de) Thread-gruppen-planung für die grafikverarbeitung
DE102018110346A1 (de) Speichersystem für dnn-ausgaben für die black box
DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
DE102020132272A1 (de) Verfahren und vorrichtung zum codieren basierend auf schattierungsraten
DE102018110719A1 (de) Hardwareimplementierte Punkt-zu-Punkt-Kommunikationsprimitive zum Maschinenlernen
DE102020108476A1 (de) Mechanismus zum Ausführen nichtlinearer Funktionen in einem Beschleuniger des maschinellen Lernens
DE102020129432A1 (de) System und Verfahren zum Anpassen eines ausführbaren Objekts an eine Verarbeitungseinheit
DE112020000902T5 (de) Datenvorabruf für die grafikdatenverarbeitung
DE112020000848T5 (de) Skalarkernintegration
DE102020130865A1 (de) Anweisungen und logik für vektor-multiplikation-addition mit zero-skipping
DE102020129409A1 (de) Dynamisches unterteilen von aktivierungen und kernels zum verbessern von speichereffizienz