DE112020005464T5 - Verteilte gewichtsaktualisierung für backpropagation eines neuronalen netzwerks - Google Patents

Verteilte gewichtsaktualisierung für backpropagation eines neuronalen netzwerks Download PDF

Info

Publication number
DE112020005464T5
DE112020005464T5 DE112020005464.0T DE112020005464T DE112020005464T5 DE 112020005464 T5 DE112020005464 T5 DE 112020005464T5 DE 112020005464 T DE112020005464 T DE 112020005464T DE 112020005464 T5 DE112020005464 T5 DE 112020005464T5
Authority
DE
Germany
Prior art keywords
processor
neural network
memory
data
workers
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
DE112020005464.0T
Other languages
English (en)
Inventor
Sharan Chetlur
Natalia Gimelshein
Thor Mikal Johnsen
Simon Layton
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.)
Nvidia Corp
Original Assignee
Nvidia 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 Nvidia Corp filed Critical Nvidia Corp
Publication of DE112020005464T5 publication Critical patent/DE112020005464T5/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/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • 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
    • G01C21/36Input/output arrangements for on-board computers
    • G01C21/3605Destination input or retrieval
    • G01C21/3608Destination input or retrieval using speech input, e.g. using speech recognition
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • 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
    • 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
    • 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
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L15/00Speech recognition
    • G10L15/08Speech classification or search
    • G10L15/16Speech classification or search using artificial neural networks
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L15/00Speech recognition
    • G10L15/22Procedures used during a speech recognition process, e.g. man-machine dialogue
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L15/00Speech recognition
    • G10L15/22Procedures used during a speech recognition process, e.g. man-machine dialogue
    • G10L2015/223Execution procedure of a spoken command

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • General Engineering & Computer Science (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Molecular Biology (AREA)
  • Data Mining & Analysis (AREA)
  • Radar, Positioning & Navigation (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Human Computer Interaction (AREA)
  • Acoustics & Sound (AREA)
  • Remote Sensing (AREA)
  • Multimedia (AREA)
  • Neurology (AREA)
  • Automation & Control Theory (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • General Factory Administration (AREA)
  • Feedback Control In General (AREA)

Abstract

Die Geschwindigkeit des Trainings eines neuronalen Netzwerks wird durch die parallele Aktualisierung der Gewichte des neuronalen Netzwerks verbessert. In mindestens einem Ausführungsbeispiel werden die Gradienten nach der Backpropagation an eine Vielzahl von Prozessoren verteilt, von denen jeder einen Teil der aktualisierten Gewichte des neuronalen Netzwerks berechnet.

Description

  • QUERVERWEIS AUF VERWANDTE ANMELDUNG
  • Diese Anmeldung beansprucht Priorität der US-Patentanmeldung Nr. 16/675,069 , eingereicht am 5. November 2019, mit dem Titel „DISTRIBUTED WEIGHT UPDATE FOR BACKPROPAGATION OF A NEURAL NETWORK“, deren gesamter Inhalt hierdurch durch Bezugnahme in vollem Umfang und für alle Zwecke einbezogen ist.
  • TECHNISCHES GEBIET
  • Mindestens ein Ausführungsbeispiel bezieht sich auf Verarbeitungsressourcen, die zum Durchführen und Verbessern eines Trainings eines neuronalen Netzwerks verwendet werden. Zum Beispiel bezieht sich mindestens ein Ausführungsbeispiel auf Prozessoren oder Rechensysteme, die verwendet werden, um neuronale Netzwerke entsprechend verschiedenen hierin beschriebenen neuen Techniken zu trainieren.
  • HINTERGRUND
  • Neuronale Netzwerke sind ein wichtiger Bestandteil vieler rechnergestützter Lösungen. In mindestens einem Ausführungsbeispiel ist ein Training eines neuronalen Netzwerks ein intensiver, iterativer Prozess, der in einigen Beispielen erhebliche Speicher-, Zeit- und Rechnerressourcen beanspruchen kann. Daher ist es ein wichtiges Problem, die Menge an Speicher, Zeit und Rechenressourcen zu reduzieren, die für ein Training neuronaler Netzwerke benötigt werden.
  • Figurenliste
  • Verschiedene Techniken werden unter Bezugnahme auf die Zeichnungen beschrieben, in denen Folgendes dargestellt ist:
    • 1 zeigt ein Beispiel für einen maschinellen Lernprozess mit redundant und parallel durchgeführten Gewichtsaktualisierungen, gemäß einem Ausführungsbeispiel;
    • 2 zeigt ein Beispiel für einen maschinellen Lernprozess, bei dem Gewichtsaktualisierungen gemäß einem Ausführungsbeispiel über eine Gruppe von Workern verteilt und parallel ausgeführt werden;
    • 3 zeigt ein Beispiel für einen maschinellen Lernprozess mit verstreuten und parallel durchgeführten Gewichtsaktualisierungen, gemäß einem Ausführungsbeispiel;
    • 4 zeigt ein Beispiel für einen maschinellen Lernprozess mit verstreuten und redundant parallel durchgeführten Gewichtsaktualisierungen, gemäß einem Ausführungsbeispiel;
    • 5 zeigt ein Beispiel für einen maschinellen Lernprozess mit Gewichtsaktualisierungen, die basierend auf einer verfügbaren Verarbeitungsbandbreite über eine Gruppe von Workern verstreut und parallel durchgeführt werden, gemäß einem Ausführungsbeispiel;
    • 6 zeigt ein Beispiel eines Prozesses, der als Ergebnis der Ausführung durch ein Computersystem ein maschinelles Lernmodell mit parallel durchgeführten Gewichtsaktualisierungen trainiert, gemäß einem Ausführungsbeispiel;
    • 7 zeigt ein Beispiel für einen Prozess, der als Ergebnis der Ausführung durch ein Rechnersystem ein maschinelles Lernmodell mit Gewichtsaktualisierungen trainiert, die basierend auf einer verfügbaren Verarbeitungsleistung an einzelne Worker verteilt werden, gemäß einem Ausführungsbeispiel;
    • 8 zeigt ein Beispiel eines Prozesses, der als Ergebnis der Ausführung durch ein Computersystem ein maschinelles Lernmodell mit Gewichtsaktualisierungen trainiert, die inkrementell an individuelle Worker verteilt werden, gemäß einem Ausführungsbeispiel;
    • 9A zeigt eine Inferenz- und/oder Trainingslogik, gemäß mindestens einem Ausführungsbeispiel;
    • 9B zeigt eine Inferenz- und/oder Trainingslogik, gemäß mindestens einem Ausführungsbeispiel;
    • 10 zeigt ein Training und den Einsatz eines neuronalen Netzwerks, gemäß mindestens einem Ausführungsbeispiel;
    • 11 zeigt ein Beispiel für ein Rechenzentrumssystem, gemäß mindestens einem Ausführungsbeispiel;
    • 12A zeigt ein Beispiel für ein autonomes Fahrzeug, gemäß mindestens einem Ausführungsbeispiel;
    • 12B zeigt ein Beispiel für Kamerapositionen und Sichtfelder für das autonome Fahrzeug von 12A, gemäß mindestens einem Ausführungsbeispiel;
    • 12C ist ein Blockdiagramm, das eine beispielhafte Systemarchitektur für das autonome Fahrzeug von 12A zeigt, gemäß mindestens einem Ausführungsbeispiel;
    • 12D ist ein Diagramm, das ein System zur Kommunikation zwischen einem oder mehreren Cloud-basierten Servern und dem autonomen Fahrzeug von 12A zeigt, gemäß mindestens einem Ausführungsbeispiel;
    • 13 ist ein Blockdiagramm, das ein Rechnersystem zeigt, gemäß mindestens einem Ausführungsbeispiel;
    • 14 ist ein Blockdiagramm, das ein Rechnersystem zeigt, gemäß mindestens einem Ausführungsbeispiel;
    • 15 zeigt ein Rechnersystem, gemäß mindestens einem Ausführungsbeispiel;
    • 16 zeigt ein Rechnersystem, gemäß mindestens einem Ausführungsbeispiel;
    • 17A zeigt ein Rechnersystem, gemäß mindestens einem Ausführungsbeispiel;
    • 17B zeigt ein Rechnersystem, gemäß mindestens einem Ausführungsbeispiel;
    • 17C zeigt ein Rechnersystem, gemäß mindestens einem Ausführungsbeispiel;
    • 17D zeigt ein Rechnersystem, gemäß mindestens einem Ausführungsbeispiel;
    • 17E und 17F zeigen ein gemeinsam genutztes Programmiermodell, gemäß mindestens einem Ausführungsbeispiel;
    • 18 zeigt beispielhafte integrierte Schaltungen und assoziierte Grafikprozessoren, gemäß mindestens einem Ausführungsbeispiel;
    • 19A und 19B zeigen beispielhafte integrierte Schaltungen und assoziierte Grafikprozessoren, gemäß mindestens einem Ausführungsbeispiel;
    • 20A und 20B zeigen zusätzliche beispielhafte Grafikprozessorlogik, gemäß mindestens einem Ausführungsbeispiel;
    • 21 zeigt ein Rechnersystem, gemäß mindestens einem Ausführungsbeispiel;
    • 22A zeigt einen Parallelprozessor, gemäß mindestens einem Ausführungsbeispiel;
    • 22B zeigt eine Partitionseinheit, gemäß mindestens einem Ausführungsbeispiel;
    • 22C zeigt einen Verarbeitungscluster, gemäß mindestens einem Ausführungsbeispiel;
    • 22D zeigt einen Grafik-Multiprozessor, gemäß mindestens einem Ausführungsbeispiel;
    • 23 zeigt ein Multi-Grafikverarbeitungssystem (GPU), gemäß mindestens einem Ausführungsbeispiel;
    • 24 zeigt einen Grafikprozessor, gemäß mindestens einem Ausführungsbeispiel;
    • 25 ist ein Blockdiagramm, das eine Prozessor-Mikroarchitektur für einen Prozessor zeigt, gemäß mindestens einem Ausführungsbeispiel;
    • 26 zeigt einen Prozessor für eine Deep-Learning-Applikation, gemäß mindestens einem Ausführungsbeispiel;
    • 27 ist ein Blockdiagramm, das einen beispielhaften neuromorphen Prozessor zeigt, gemäß mindestens einem Ausführungsbeispiel;
    • 28 zeigt zumindest Teile eines Grafikprozessors, gemäß einem oder mehreren Ausführungsbeispielen;
    • 29 zeigt zumindest Teile eines Grafikprozessors, gemäß einem oder mehreren Ausführungsbeispielen;
    • 30 zeigt zumindest Teile eines Grafikprozessors, gemäß einem oder mehreren Ausführungsbeispielen;
    • 31 zeigt ein Blockdiagramm einer Grafikverarbeitungs-Engine eines Grafikprozessors, gemäß mindestens einem Ausführungsbeispiel;
    • 32 zeigt ein Blockdiagramm von mindestens Teilen eines Grafikprozessorkerns, gemäß mindestens einem Ausführungsbeispiel;
    • 33A und 33B zeigen eine Thread-Ausführungslogik einschließlich eines Arrays von Verarbeitungselementen eines Grafikprozessorkerns, gemäß mindestens einem Ausführungsbeispiel;
    • 34 zeigt eine Parallelverarbeitungseinheit („PPU“), gemäß mindestens einem Ausführungsbeispiel;
    • 35 zeigt einen allgemeinen Verarbeitungscluster („GPC“), gemäß mindestens einem Ausführungsbeispiel;
    • 36 zeigt eine Speicherpartitionseinheit einer Parallelverarbeitungseinheit („PPU“), gemäß mindestens einem Ausführungsbeispiel; und
    • 37 zeigt einen Streaming-Multiprozessor, gemäß mindestens einem Ausführungsbeispiel.
  • DETAILLIERTE BESCHREIBUNG
  • Dieses Dokument beschreibt ein System und Verfahren, das das Training eines maschinellen Lernmodells verbessert, indem es eine parallele Aktualisierung von Knotengewichten ermöglicht. In mindestens einem Ausführungsbeispiel führt eine Vielzahl von Workern eine Vorwärtspropagierung (engl. forward propagation, dt. auch Forward-Propagation) und eine Backpropagation (engl. back propagation, dt. auch Rückpropagierung) durch, um parallel einen Satz von Gradienten zu erzeugen. In mindestens einem Ausführungsbeispiel kann ein Worker (engl. worker, dt. auch arbeitsausführende Einheit) ein Thread, ein Prozess, ein Prozessor, ein Prozessorkern oder ein Parallelverarbeitungsschaltkreis sein, der Anweisungen parallel zu anderen Workern ausführt. In mindestens einem Ausführungsbeispiel werden die Gradienten auf die Worker verteilt, und jedem Worker wird eine Teilmenge von Gewichten zugewiesen, auf die er die Gradienten anwenden kann. In mindestens einem Ausführungsbeispiel wendet jeder Worker Gradienten auf die ihm zugewiesene Teilmenge von Gewichten parallel zu anderen Workern an. In mindestens einem Ausführungsbeispiel werden nach der Anwendung von Gradienten die aktualisierten Gewichte an Worker verteilt, so dass jeder Worker über einen vollständigen Satz aktualisierter Gewichte verfügt. In mindestens einem Ausführungsbeispiel wird durch die parallele Aktualisierung der Gewichte mit einer Vielzahl von Workern die Geschwindigkeit, mit der das Netzwerk trainiert werden kann, verbessert. In mindestens einem Ausführungsbeispiel wird der Backpropagations-Prozess iterativ wiederholt, bis das Training abgeschlossen ist.
  • In mindestens einem Ausführungsbeispiel ist das Training eines Deep-Learning-Modells mit einem Backpropagations-Algorithmus ein iterativer Prozess, der drei Phasen pro Iteration umfasst: einen Vorwärtspropagierungsdurchlauf, einen Backpropagationsdurchlauf und eine Gewichtsaktualisierung. In mindestens einem Ausführungsbeispiel wird das Training parallel auf mehrere Worker verteilt, so dass die Arbeit für den Vorwärts- und Backpropagationsdurchlauf auf die Worker aufgeteilt wird. In mindestens einem Ausführungsbeispiel werden die Gewichtsaktualisierungen zumindest teilweise parallel von Workern durchgeführt. In mindestens einem Ausführungsbeispiel können einige oder alle Gewichtsaktualisierungen von mehreren Workern redundant durchgeführt werden. In mindestens einem Ausführungsbeispiel wird der Teil der Gewichtsaktualisierung beim Training eines Deep-Learning-Modells um einen Faktor beschleunigt, der ungefähr der Anzahl der Worker entspricht. In mindestens einem Ausführungsbeispiel kann ein Worker ein Thread, ein Prozess, ein Prozessor, ein Prozessorkern oder ein Prozessor mit einer grafischen Multiprozessor-Verarbeitungseinheit („GPU“) sein.
  • In mindestens einem Ausführungsbeispiel kann in synchronen, datenparallelen, verteilten Deep Learning („DL“)-Trainingsimplementierungen jeder Worker einer Vielzahl von Workern auf eine lokale Kopie der Gewichte eines maschinellen Lernmodells zugreifen. In mindestens einem Ausführungsbeispiel werden Gewichtsgradienten pro Worker in einem Rückwärtsdurchlauf berechnet und über alle Worker hinweg durch eine All-Reduce-Operation verarbeitet (engl. all-reduced), so dass jedem Worker eine eigene Kopie einer Summe von Gewichtsgradienten über alle Worker hinweg bereitgestellt wird. In mindestens einem Ausführungsbeispiel verwenden die Worker dies dann, um ihre eigene Kopie der Gewichte redundant zu aktualisieren, wodurch sichergestellt wird, dass die Worker identische Kopien der aktualisierten Gewichte für die nächste Iteration behalten.
  • In mindestens einem Ausführungsbeispiel wird eine „all-reduce“-Operation durch eine „reduce-scatter“-Operation ersetzt, bevor die Gewichte aktualisiert werden, und durch einen Aufruf von „all-gather“, nachdem die Gewichte aktualisiert wurden. In mindestens einem Ausführungsbeispiel führt Reduce-Scatter dazu, dass jeder Worker eine Summe über die Worker eines eindeutigen 1/k-Abschnitts von Gewichtsgradienten berechnet (wobei k eine Anzahl von Workern ist). In mindestens einem Ausführungsbeispiel aktualisiert jeder der k Worker dann nur die Gewichte, die einem Abschnitt entsprechen, für den ein Worker eine Summe über die Worker hat. In mindestens einem Ausführungsbeispiel wird dadurch die Zeit für die Gewichtsaktualisierung um einen Faktor k (Anzahl der Worker) reduziert. In mindestens einem Ausführungsbeispiel werden die aktualisierten Gewichte dann für alle Worker zusammengefasst, so dass jeder Worker eine aktualisierte Kopie der neuen Gewichte erhält.
  • In mindestens einem Ausführungsbeispiel bleibt der Netto-Speicherverkehr unverändert, da ein All-Reduce als eine Kombination aus Reduce-Scatter und All-Gather implementiert wird, wobei genauso viele Bytes bewegt werden wie bei dem in diesem Beispiel vorgeschlagenen Algorithmus. In mindestens einem Ausführungsbeispiel besteht ein Unterschied darin, dass anstelle einer All-Gather-Operation eines summierten Gewichtsgradienten eine All-Gather-Operation auf aktualisierte Gewichte angewendet wird, was eine verteilte Implementierung einer Gewichtsaktualisierung ermöglicht.
  • In mindestens einem Ausführungsbeispiel haben die hier beschriebenen Methoden den Vorteil, dass sie den Gesamtspeicherbedarf pro Worker reduzieren. In mindestens einem Ausführungsbeispiel erfordert ein Optimierungsalgorithmus die Aufrechterhaltung eines dauerhaften Zustands über Trainingsiterationen hinweg, der über Gewichte und Gewichtsgradienten hinausgeht. In mindestens einem Ausführungsbeispiel ist dieser Zustand im Allgemeinen proportional zur Größe der Gewichte und umfasst Tensoren wie Kopien der Gewichte mit höherer Genauigkeit oder Schätzungen des ersten und zweiten Moments der Gradienten. In mindestens einem Ausführungsbeispiel muss bei einem verteilten Optimierungsalgorithmus jeder von „k“ Workern nur 1/k Abschnitte dieser Tensoren verwalten, die den Gewichten entsprechen, für deren Aktualisierung er zuständig ist.
  • In mindestens einem Ausführungsbeispiel konzentrieren sich synchrone datenparallele DL-Trainingsverfahren auf die Optimierung des Optimierungscodes pro Worker, während das Prinzip der redundanten Aktualisierung über alle Worker hinweg beibehalten wird. In mindestens einem Ausführungsbeispiel haben modellparallele verteilte Trainingsverfahren den Vorteil eines kleineren Optimierungsschritts pro Worker, da jeder Worker nur einen Teil (Bruchteil) der Gewichte eines Modells besitzt. In mindestens einem Ausführungsbeispiel geht dies mit einer wesentlich erhöhten Komplexität in anderen Teilen des Ausführungsflusses einher.
  • In mindestens einem Ausführungsbeispiel werden die Kosten für eine Gewichtsaktualisierung bei vielen Modellen zu einem spürbaren Performance-Langweiler, wenn das DL-Training auf mehr GPUs skaliert wird (normalerweise über mehrere Knoten). In mindestens einem Ausführungsbeispiel wird dies durch die Verbesserung der Leistung von Kerneln zur Gewichtsaktualisierung auf einer Pro-Worker-Basis angegangen. In mindestens einem Ausführungsbeispiel handelt es sich dabei jedoch um feste Kosten in Bezug auf die End-to-End-Laufzeit, im Gegensatz zu anderen Teilen der Berechnung, die schneller werden, wenn mehr Worker hinzugefügt werden. In mindestens einem Ausführungsbeispiel stellt diese Methode eine algorithmische Änderung bereit, die es ermöglicht, dass die Kosten des Optimierers mit zunehmender Skalierung sinken, wodurch seine Kosten wie der Anteil der Gesamtlaufzeit verringert werden. In mindestens einem Ausführungsbeispiel ist diese Optimierung wichtig, damit mehrere Trainingsmodelle für maschinelles Lernen wettbewerbsfähig sind.
  • In mindestens einem Ausführungsbeispiel haben die hierin beschriebenen Techniken den Effekt, dass sie einige der Speicherkapazitätsbeschränkungen lindern, die derzeit beim Training großer Modelle auf GPUs beobachtet werden. In mindestens einem Ausführungsbeispiel wird durch die Verteilung der FP32-Masterkopie der Gewichte beim Training mit gemischter Präzision sowie einiger anderer dauerhafter Zustände, die für Optimierer wie SGD mit Momentum und Adam benötigt werden, eine nicht-triviale Menge an Speicher frei, was möglicherweise größere Modelle oder größere Stapelgrößen für bestehende Modelle ermöglicht.
  • 1 zeigt gemäß einem Ausführungsbeispiel ein Beispiel für einen maschinellen Lernprozess mit redundant und parallel durchgeführten Gewichtsaktualisierungen. In mindestens einem Ausführungsbeispiel trainiert ein Rechner ein maschinelles Lernmodell, das einen Satz von Knoten oder Neuronen enthält, von denen jeder ein assoziiertes Gewicht oder einen Koeffizienten hat. In mindestens einem Ausführungsbeispiel werden die Gewichte 102 während des Trainingsprozesses in Reaktion auf die Trainingsdaten aktualisiert. In mindestens einem Ausführungsbeispiel enthalten die Trainingsdaten Eingaben und Ausgaben, und der Trainingsprozess erzeugt ein trainiertes maschinelles Lernmodell, das eine Funktion schätzt, die zu den Trainingsdaten passt. In mindestens einem Ausführungsbeispiel wird ein Vorwärtspropagierungs- und Backpropagationsprozess verwendet, um einen Satz von Gradienten 104 für Gewichte 102 zu generieren. In mindestens einem Ausführungsbeispiel werden bei der Vorwärtspropagierung Eingabedaten für ein maschinelles Lernmodell bereitgestellt, um einen Ausgabewert zu erzeugen, und ein Ausgabewert wird rückwärts propagiert, um einen Satz von Gradienten 104 zu schätzen.
  • In mindestens einem Ausführungsbeispiel wird ein All-Reduce-Prozess durchgeführt, bei dem die Gradienten 104 an eine Gruppe von Workern verteilt werden. In mindestens einem Ausführungsbeispiel wenden die Worker die Gradienten 104 auf vorherige Gewichte an, um aktualisierte Gewichte 108 zu erzeugen. In mindestens einem Ausführungsbeispiel wendet jeder Worker Gradienten 106 auf alle Gewichte redundant an, so dass jeder Worker übereinstimmende Informationen verarbeitet und generiert. In mindestens einem Ausführungsbeispiel werden die aktualisierten Gewichte 108 dann während einer nächsten Runde der Vorwärts- und Backpropagation verwendet.
  • In mindestens einem Ausführungsbeispiel werden Worker als individuelle Threads implementiert, die auf einem Rechnersystem laufen, wie z.B. einem unten beschriebenen Rechnersystem. In mindestens einem Ausführungsbeispiel werden Worker als individuelle Prozesse auf einer grafischen Verarbeitungseinheit implementiert, wie z. B. einer unten beschriebenen grafischen Verarbeitungseinheit. In mindestens einem Ausführungsbeispiel werden individuelle Worker als Prozesse auf einem Multiprozessor-Rechnersystem implementiert. In mindestens einem Ausführungsbeispiel laufen individuelle Worker auf separaten Kernen eines Mehrkernprozessors.
  • In mindestens einem Ausführungsbeispiel ermöglicht der Prozess 100 die parallele Verarbeitung von Vorwärts- und Backpropagation, um Gewichtsgradienten zu erzeugen. In mindestens einem Ausführungsbeispiel wird die Geschwindigkeit, mit der Gradienten erzeugt werden, durch Hinzufügen zusätzlicher Worker zu einer Trainingsaufgabe erhöht. In mindestens einem Ausführungsbeispiel werden Gewichtsaktualisierungen von jedem Worker redundant durchgeführt und nehmen daher unabhängig von der Anzahl der eingesetzten Worker gleich viel Zeit in Anspruch.
  • In mindestens einem Ausführungsbeispiel basiert die Anzahl der Gewichte in einem maschinengelernten Modell zumindest teilweise auf einer Anzahl von Knoten und einer Anzahl von Schichten. In mindestens einem Ausführungsbeispiel hat ein Modell viele Schichten und Knoten, und die Aktualisierung der Gewichte verbraucht erhebliche Verarbeitungszeit.
  • In mindestens einem Ausführungsbeispiel zeigt 1 eine synchrone datenparallele verteilte Deep Learning („DL“)-Trainingsimplementierung, bei der jeder Worker aus einer Vielzahl von Workern auf eine lokale Kopie von Gewichten eines maschinellen Lernmodells zugreifen kann. In mindestens einem Ausführungsbeispiel werden Gewichtsgradienten pro Worker in einem Rückwärtsdurchlauf berechnet und über alle Worker hinweg reduziert, so dass jedem Worker seine eigene Kopie einer Summe von Gewichtsgradienten über alle Worker hinweg bereitgestellt wird. In mindestens einem Ausführungsbeispiel sind die Worker in der Lage, eine Kopie der Gewichtsgradienten zu verwenden, um eine entsprechende Kopie der Gewichte redundant zu aktualisieren, wodurch sichergestellt wird, dass jeder Worker übereinstimmende Kopien der aktualisierten Gewichte für zukünftige Iterationen beibehält.
  • 2 zeigt ein Beispiel eines maschinellen Lernprozesses 200 mit Gewichtsaktualisierungen, die gemäß einem Ausführungsbeispiel über eine Gruppe von Workern verteilt und parallel durchgeführt werden. In mindestens einem Ausführungsbeispiel hat ein maschinengelerntes Modell, das einen Satz von Knoten enthält, einen assoziierten Satz von Gewichten 202. In mindestens einem Ausführungsbeispiel ist ein Satz von Gewichten ein Satz von numerischen Koeffizienten, die, wenn sie auf Eingaben eines neuronalen Netzwerks angewendet und durch das neuronale Netzwerk propagiert werden, eine Funktion annähern, die durch einen Satz von Testdaten definiert ist, die zum Trainieren eines Modells verwendet werden. In mindestens einem Ausführungsbeispiel werden Testdaten durch ein Modell vorwärts propagiert, um ein Ergebnis zu erzeugen, und ein Fehler, der zumindest teilweise auf einem erwarteten Ergebnis in den Testdaten basiert, wird rückwärts propagiert, um eine Gradientenabschätzung zu erzeugen. In mindestens einem Ausführungsbeispiel wird eine Gradientenabschätzung verwendet, um die Gewichte des Modells anzupassen.
  • In mindestens einem Ausführungsbeispiel arbeitet eine Gruppe von Workern auf jedem Weg, um eine Gruppe von Gradienten 204 parallel zu erzeugen. In mindestens einem Ausführungsbeispiel wird ein Satz von Gradienten 204 durch Anwendung eines Gradientenabstiegsalgorithmus erzeugt. In mindestens einem Ausführungsbeispiel ist ein Gradient eine Steigung, die als Verhältnis zwischen dem erzeugten Fehler und einem Eingabeparameter eines neuronalen Netzwerks ausgedrückt werden kann. In mindestens einem Ausführungsbeispiel drückt der Gradient eine Beziehung zwischen einer Änderung der Eingabe und einem erzeugten Fehler aus. In mindestens einem Ausführungsbeispiel umfasst der Satz von Gradienten 204 einen Satz von partiellen Ableitungen des Beitrags jedes Eingabeparameters zu einer Fehleränderung.
  • In mindestens einem Ausführungsbeispiel wird vor der Aktualisierung der Gewichte 206 eine Reduce-Scatter-Operation durchgeführt und nach der Aktualisierung der Gewichte wird ein Aufruf von All-Gather durchgeführt. In mindestens einem Ausführungsbeispiel führt eine Reduce-Scatter-Operation dazu, dass jeder Worker eine Summe über die Worker eines eindeutigen 1/k-Abschnitts von Gewichtsgradienten berechnet (wobei k eine Anzahl von Workern ist). In mindestens einem Ausführungsbeispiel können verschiedene Verteilungen der Arbeit auf die Worker gemäß der verfügbaren Rechenleistung, Bandbreite, des Speichers oder anderer Rechnerressourcen verteilt werden. In mindestens einem Ausführungsbeispiel aktualisiert jeder der Worker (k) die Gewichte, die einem ihm zugewiesenen Abschnitt entsprechen. In mindestens einem Ausführungsbeispiel wird dieser Vorgang von Workern parallel durchgeführt, wodurch die für eine Gewichtsaktualisierung erforderliche Zeit reduziert wird. In mindestens einem Ausführungsbeispiel wird der Zeitaufwand für die Aktualisierung der Gewichte um den Faktor K reduziert, wobei K die Anzahl der Worker ist.
  • In mindestens einem Ausführungsbeispiel werden Worker als individuelle Threads implementiert, die auf einem Rechnersystem laufen, wie z.B. einem unten beschriebenen Rechnersystem. In mindestens einem Ausführungsbeispiel werden Worker als individuelle Prozesse auf einer grafischen Verarbeitungseinheit implementiert, wie beispielsweise einer unten beschriebenen grafischen Verarbeitungseinheit. In mindestens einem Ausführungsbeispiel werden individuelle Worker als Prozesse auf einem Multiprozessor-Rechnersystem implementiert. In mindestens einem Ausführungsbeispiel laufen individuelle Worker auf separaten Kernen eines Mehrkernprozessors.
  • In mindestens einem Ausführungsbeispiel werden, nachdem jeder Worker seinen Teil der Gewichte aktualisiert hat, die aktualisierten Teile unter den Workern verteilt, so dass jeder Worker über einen vollständigen aktualisierten Satz von Gewichten 208 verfügt. In mindestens einem Ausführungsbeispiel werden die aktualisierten Gewichte dann über alle Worker hinweg zusammengeführt und verteilt (engl. all-gather), so dass jeder Worker eine vollständige aktualisierte Kopie der neuen Gewichte für ein neuronales Netzwerk erhält.
  • 3 zeigt ein Beispiel für einen maschinellen Lernprozess 300 mit verstreuten und parallel durchgeführten Gewichtsaktualisierungen gemäß einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel wird ein Satz von Anfangsgewichten auf vier Worker verteilt, und ein entsprechender Satz von Gradienten 302 wird von Workern berechnet. In mindestens einem Ausführungsbeispiel können Worker als individuelle Threads implementiert werden, die auf einem Rechner laufen, als individuelle Prozesse auf einer grafischen Verarbeitungseinheit oder als Prozesse auf einem Multiprozessor-Rechnersystem. In mindestens einem Ausführungsbeispiel wird eine Gewichtsaktualisierung durch eine Verkleinerungsoperation in eine Anzahl ungefähr gleicher Teile aufgeteilt, die an Worker verteilt werden. In mindestens einem Ausführungsbeispiel werden in einem Zwischenzustand 304 Teilgradienten auf Worker verteilt. In mindestens einem Ausführungsbeispiel wird einem ersten Worker ein erster Teil der Gewichtsaktualisierungen 308, einem zweiten Worker ein zweiter Teil der Gewichtsaktualisierungen 310, einem dritten Worker ein dritter Teil der Gewichtsaktualisierungen 312 und einem vierten Worker ein vierter Teil der Gewichtsaktualisierungen 314 zugewiesen. In mindestens einem Ausführungsbeispiel sind die Anteile der Gewichtsaktualisierungen gleichmäßig auf die Worker verteilt. In mindestens einem Ausführungsbeispiel sind die Teile der Gewichtsaktualisierungen nicht überlappend.
  • In mindestens einem Ausführungsbeispiel verarbeitet jeder Worker den ihm zugewiesenen Teil der Gewichtsaktualisierungen, indem er Gradienten auf bestehende Gewichte anwendet. In mindestens einem Ausführungsbeispiel verteilt jeder Worker einen aktualisierten Gewichtsaktualisierungsanteil an andere Worker, so dass jeder Worker eine passende Kopie der abgeschlossenen aktualisierten Gewichte hat. In mindestens einem Ausführungsbeispiel aktualisiert jeder Worker die Gewichte in einem gemeinsam genutzten Speicherbereich, der allen Workern zugänglich ist. In mindestens einem Ausführungsbeispiel werden Gradienten und aktualisierte Gewichte unter den Workern mittels Interprozesskommunikation verteilt. In mindestens einem Ausführungsbeispiel werden abgeschlossene Teile zusammengeführt (engl. gather, dt. auch zusammengefasst), so dass in einem Endzustand 306 jeder Worker eine passende Kopie der aktualisierten Gewichte hat.
  • 4 zeigt ein Beispiel für einen maschinellen Lernprozess 400 mit verstreuten und redundant parallel durchgeführten Gewichtsaktualisierungen gemäß einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel wird ein Satz von Anfangsgewichten auf vier Worker verteilt, und ein entsprechender Satz von Gradienten 402 wird von Workern berechnet. In mindestens einem Ausführungsbeispiel können Worker als individuelle Threads implementiert werden, die auf einem Rechner laufen, als individuelle Prozesse auf einer grafischen Verarbeitungseinheit oder als Prozesse auf einem Multiprozessor-Rechnersystem. In mindestens einem Ausführungsbeispiel wird eine Gewichtsaktualisierung durch eine Verkleinerungsoperation in eine Anzahl von annähernd gleichen Teilen aufgeteilt, die an Worker verteilt werden. In mindestens einem Ausführungsbeispiel werden in einem Zwischenzustand 404 Teilgradienten auf Worker verteilt. In mindestens einem Ausführungsbeispiel wird einem ersten Worker ein erster Teil der Gewichtsaktualisierungen 408, einem zweiten Worker ein zweiter Teil der Gewichtsaktualisierungen 410, einem dritten Worker ein dritter Teil der Gewichtsaktualisierungen 312 und einem vierten Worker ein vierter Teil der Gewichtsaktualisierungen 414 zugewiesen. In mindestens einem Ausführungsbeispiel werden Teile der Gewichtsaktualisierungen gleichmäßig auf Gruppen von Workern verteilt, so dass jedes Gewicht von zwei oder mehr Workern berechnet wird. In mindestens einem Ausführungsbeispiel werden die Worker in Paare aufgeteilt und die Gewichtsaktualisierungen gleichmäßig auf die Paare verteilt. In mindestens einem Ausführungsbeispiel wird jedem Worker ein Teil der Gewichtsaktualisierungen zugewiesen, der sich zumindest mit Teilen der Gewichtsaktualisierungen zweier anderer Worker teilweise überschneidet.
  • In mindestens einem Ausführungsbeispiel verarbeitet jeder Worker den ihm zugewiesenen Teil der Gewichtsaktualisierungen, indem er Gradienten auf bestehende Gewichte anwendet. In mindestens einem Ausführungsbeispiel verteilt jeder Worker einen aktualisierten Gewichtsaktualisierungsanteil an andere Worker, so dass jeder Worker eine übereinstimmende Kopie der abgeschlossenen aktualisierten Gewichte hat. In mindestens einem Ausführungsbeispiel aktualisiert jeder Worker die Gewichte in einem gemeinsam genutzten Speicherbereich, der allen Workern zugänglich ist. In mindestens einem Ausführungsbeispiel werden Gradienten und aktualisierte Gewichte unter den Workern mittels Interprozesskommunikation verteilt. In mindestens einem Ausführungsbeispiel werden abgeschlossene Teile zusammengeführt, so dass in einem Endzustand 406 jeder Worker über eine passende Kopie der aktualisierten Gewichte verfügt.
  • 5 zeigt ein Beispiel für einen maschinellen Lernprozess 500 mit Gewichtsaktualisierungen, die basierend auf der verfügbaren Verarbeitungsbandbreite über eine Gruppe von Workern verteilt sind und gemäß einem Ausführungsbeispiel parallel ausgeführt werden. In mindestens einem Ausführungsbeispiel wird ein Satz initialer Gewichte auf vier Worker verteilt, und ein entsprechender Satz von Gradienten 502 wird von Workern berechnet. In mindestens einem Ausführungsbeispiel können Worker als individuelle Threads implementiert werden, die auf einem Rechner laufen, als individuelle Prozesse auf einer grafischen Verarbeitungseinheit oder als Prozesse auf einem Multiprozessor-Rechnersystem. In mindestens einem Ausführungsbeispiel wird eine Gewichtsaktualisierung durch eine Verkleinerungsoperation in eine Anzahl von annähernd gleichen Teilen aufgeteilt, die an Worker verteilt werden. In mindestens einem Ausführungsbeispiel werden in einem Zwischenzustand 504 Teilgradienten auf Worker verteilt. In mindestens einem Ausführungsbeispiel wird einem ersten Worker ein erster Teil der Gewichtsaktualisierungen 508, einem zweiten Worker ein zweiter Teil der Gewichtsaktualisierungen 510, einem dritten Worker ein dritter Teil der Gewichtsaktualisierungen 512 und einem vierten Worker ein vierter Teil der Gewichtsaktualisierungen 514 zugewiesen. In mindestens einem Ausführungsbeispiel werden Teile der Gewichtsaktualisierungen so auf die Worker verteilt, dass alle Gewichte ermittelt werden und kein Gewicht redundant berechnet wird. In mindestens einem Ausführungsbeispiel wird basierend auf einer Charakteristik jedes Workers eine Menge von Gewichtsaktualisierungen bestimmt, die jedem Worker zugewiesen werden. In mindestens einem Ausführungsbeispiel werden die Gewichtsaktualisierungen basierend auf der jedem Worker zur Verfügung stehenden Verarbeitungsbandbreite auf die Worker verteilt. In mindestens einem Ausführungsbeispiel wird die Arbeit inkrementell an die Worker verteilt, und wenn jeder Worker den ihm zugewiesenen Teil erledigt hat, wird ihm von einem Ausführungsprozess, der die Verteilung der Gewichtsaktualisierungsarbeit koordiniert, zusätzliche Arbeit zugewiesen.
  • In mindestens einem Ausführungsbeispiel verarbeitet jeder Worker den ihm zugewiesenen Teil der Gewichtsaktualisierung, indem er Gradienten auf bestehende Gewichte anwendet. In mindestens einem Ausführungsbeispiel verteilt jeder Worker einen aktualisierten Gewichtsaktualisierungsanteil an andere Worker, so dass jeder Worker über eine passende Kopie der abgeschlossenen aktualisierten Gewichte verfügt. In mindestens einem Ausführungsbeispiel aktualisiert jeder Worker die Gewichte in einem gemeinsam genutzten Speicherbereich, der allen Workern zugänglich ist. In mindestens einem Ausführungsbeispiel werden Gradienten und aktualisierte Gewichte unter den Workern mittels Interprozesskommunikation verteilt. In mindestens einem Ausführungsbeispiel werden abgeschlossene Teile zusammengeführt, so dass in einem Endzustand 506 jeder Worker über eine passende Kopie der aktualisierten Gewichte verfügt.
  • 6 zeigt ein Beispiel eines Prozesses 600, der gemäß einem Ausführungsbeispiel als Ergebnis der Ausführung durch ein Computersystem ein maschinelles Lernmodell mit parallel durchgeführten Gewichtsaktualisierungen trainiert. In mindestens einem Ausführungsbeispiel beginnt ein Rechner in Block 602 mit dem Training eines maschinengelernten Modells, indem er einen Satz von Eingabewerten aus einem Satz von Trainingsdaten durch ein maschinengelerntes Modell vorwärts überträgt, um einen Satz von Ausgaben zu erzeugen. In mindestens einem Ausführungsbeispiel wird basierend auf einer Differenz zwischen den erzeugten Ausgaben und den Trainingsdaten ein Satz von Gradienten erzeugt 604, indem eine Differenz rückwärts propagiert wird. In mindestens einem Ausführungsbeispiel beschreibt ein Gradient eine Beziehung zwischen einer Änderung des Eingabewerts und einem Fehlerterm, der von einem maschinengelernten Modell erzeugt wird. In mindestens einem Ausführungsbeispiel werden Gradienten parallel von einer Vielzahl von Workern erzeugt. In mindestens einem Ausführungsbeispiel können Worker auf separaten Threads, Prozessoren, Prozessorkernen oder Prozessen auf einem Rechnersystem ausgeführt werden. In mindestens einem Ausführungsbeispiel werden Gradienten zumindest teilweise parallel von Workern erzeugt.
  • In mindestens einem Ausführungsbeispiel werden in Block 606 Gradienten auf eine Gruppe von Workern verteilt. In mindestens einem Ausführungsbeispiel werden die Gradienten über einen Interprozess-Kommunikationsmechanismus verteilt. In mindestens einem Ausführungsbeispiel werden Gradienten über einen Satz von Workern unter Verwendung eines gemeinsam genutzten Speichers verteilt. In mindestens einem Ausführungsbeispiel werden die Gradienten von einem Ausführenden aggregiert, und die neu verteilten Gradienten werden an jeden der Worker gesendet.
  • In mindestens einem Ausführungsbeispiel analysiert ein Rechnersystem, das ein Training durchführt, in Block 608 einen Satz von Gewichten, die mit einem maschinell erlernten Modell assoziiert sind, und teilt eine Aufgabe zur Aktualisierung der Gewichte in einen Satz von Gewichtsaktualisierungsabschnitten auf, die von Workern durchzuführen sind. In mindestens einem Ausführungsbeispiel berechnet jeder Worker in Block 610 einen Teil der Gewichtsaktualisierungen unter Verwendung von Gradienten, und zwar parallel. In mindestens einem Ausführungsbeispiel werden die Operationen zur Gewichtsaktualisierung gleichmäßig auf die Worker verteilt, und die Operationen zur Gewichtsaktualisierung werden parallel durchgeführt. In mindestens einem Ausführungsbeispiel können die Operationen zur Gewichtsaktualisierung über die Worker verteilt werden, wie in den 3-5 gezeigt und beschrieben.
  • In mindestens einem Ausführungsbeispiel erzeugen Worker in Block 612 Ergebnisse von Gewichtsaktualisierungsoperationen, die an andere Worker verteilt werden, so dass jeder Worker im Besitz einer passenden Kopie eines vollständigen Satzes aktualisierter Gewichte ist. In mindestens einem Ausführungsbeispiel führt jeder Worker in Block 614 seinen Teil der aktualisierten Gewichte mit Teilen der aktualisierten Gewichte zusammen, die er von anderen Workern erhalten hat, um einen vollständigen Satz aktualisierter Gewichte zu erzeugen. In mindestens einem Ausführungsbeispiel werden die Gewichte in einem gemeinsam genutzten Speicherbereich zusammengestellt, auf den alle Worker Zugriff haben. In mindestens einem Ausführungsbeispiel ist der gemeinsam genutzte Speicherbereich ein Halbleiterspeicher mit einem adressierbaren Bereich, der in einem für alle Worker zugänglichen Adressraum abgebildet ist. In mindestens einem Ausführungsbeispiel ist der gemeinsam genutzte Speicher eine Datei auf einem Speichermedium wie einer Festplatte. In mindestens einem Ausführungsbeispiel ist ein Speichervolumen ein Festplattenvolumen. In mindestens einem Ausführungsbeispiel ist ein Speichervolumen ein Festkörperspeichergerät wie ein SD-Laufwerk.
  • In mindestens einem Ausführungsbeispiel kehrt der Prozess 600 im Block 614 zum Block 602 zurück, wo eine nächste Iteration eines Trainingsprozesses stattfindet.
  • 7 zeigt ein Beispiel eines Prozesses 700, der, gemäß einem Ausführungsbeispiel, als Ergebnis der Ausführung durch ein Rechnersystem ein maschinelles Lernmodell mit Gewichtsaktualisierungen trainiert, die basierend auf der verfügbaren Verarbeitungsleistung an individuelle Worker verteilt werden. In mindestens einem Ausführungsbeispiel beginnt ein Rechnersystem in Block 702 mit dem Training eines maschinell lernenden Modells, indem es einen Satz von Eingabewerten aus einem Satz von Trainingsdaten durch ein maschinell lernendes Modell vorwärts propagiert, um einen Satz von Ausgaben zu erzeugen. In mindestens einem Ausführungsbeispiel wird basierend auf einer Differenz zwischen den erzeugten Ausgaben und den Trainingsdaten ein Satz von Gradienten erzeugt (704), indem eine Differenz rückwärts propagiert wird. In mindestens einem Ausführungsbeispiel beschreibt ein Gradient eine Beziehung zwischen einer Änderung des Eingabewerts und einem von einem maschinell erlernten Modell erzeugten Fehlerterm. In mindestens einem Ausführungsbeispiel werden Gradienten parallel von einer Vielzahl von Workern erzeugt. In mindestens einem Ausführungsbeispiel können Worker auf separaten Threads, Prozessoren, Prozessorkernen oder Prozessen auf einem Rechnersystem ausgeführt werden. In mindestens einem Ausführungsbeispiel werden Gradienten zumindest teilweise parallel von Workern erzeugt.
  • In mindestens einem Ausführungsbeispiel werden in Block 706 die Gradienten auf eine Gruppe von Workern verteilt. In mindestens einem Ausführungsbeispiel werden die Gradienten über einen Interprozess-Kommunikationsmechanismus verteilt. In mindestens einem Ausführungsbeispiel werden Gradienten über einen Satz von Workern unter Verwendung eines gemeinsam genutzten Speichers verteilt. In mindestens einem Ausführungsbeispiel werden die Gradienten von einem Ausführungsprozess aggregiert, der die Gradienten an jeden Worker weiterverteilt. In mindestens einem Ausführungsbeispiel ist ein Ausführungsprozess ein Prozess, der den Gesamtprozess des Trainings des neuronalen Netzwerks koordiniert.
  • In mindestens einem Ausführungsbeispiel bestimmt ein Ausführungsprozess in Block 708 eine Menge an Verarbeitungsbandbreite, die jedem Worker zur Verfügung steht. In mindestens einem Ausführungsbeispiel wird der Umfang der für jeden Worker verfügbaren Verarbeitungsbandbreite durch Ausführen einer Testaufgabe auf jedem Worker bestimmt. In mindestens einem Ausführungsbeispiel wird der Betrag der verfügbaren Verarbeitungsbandbreite basierend auf einer Taktgeschwindigkeit, einem Prozessortyp oder einer Prozesspriorität, die jedem Worker assoziiert ist, bestimmt.
  • In mindestens einem Ausführungsbeispiel analysiert ein Computersystem, das ein Training durchführt, in Block 710 einen Satz von Gewichten, die mit einem maschinell erlernten Modell assoziiert sind, und teilt eine Aufgabe zur Aktualisierung der Gewichte in einen Satz von Gewichtsaktualisierungsabschnitten auf, die von Workern durchzuführen sind. In mindestens einem Ausführungsbeispiel werden die Operationen zur Gewichtsaktualisierung auf Worker verteilt, und die Operationen zur Gewichtsaktualisierung werden parallel durchgeführt. In mindestens einem Ausführungsbeispiel können die Operationen zur Gewichtsaktualisierung auf die Worker verteilt werden, wie in den 3-5 gezeigt und beschrieben. In mindestens einem Ausführungsbeispiel wird die Arbeit auf die Worker im Verhältnis zu einer wie oben festgelegten Verarbeitungsbandbreite verteilt. In mindestens einem Ausführungsbeispiel berechnet jeder Worker in Block 712 einen Teil der Gewichtsaktualisierungen unter Verwendung von Gradienten, und zwar parallel.
  • In mindestens einem Ausführungsbeispiel erzeugen Worker in Block 714 Ergebnisse von Gewichtsaktualisierungsoperationen, die an andere Worker verteilt werden, so dass jeder Worker im Besitz einer passenden Kopie eines vollständigen Satzes aktualisierter Gewichte ist. In mindestens einem Ausführungsbeispiel führt jeder Worker in Block 716 seinen Teil der aktualisierten Gewichte mit Teilen der aktualisierten Gewichte zusammen, die er von anderen Workern erhalten hat, um einen vollständigen Satz aktualisierter Gewichte zu erzeugen. In mindestens einem Ausführungsbeispiel werden die Gewichte in einem gemeinsam genutzten Speicherbereich zusammengestellt, auf den alle Worker Zugriff haben. In mindestens einem Ausführungsbeispiel ist der gemeinsam genutzte Speicherbereich ein Halbleiterspeicher mit einem adressierbaren Bereich, der in einem für alle Worker zugänglichen Adressraum abgebildet ist. In mindestens einem Ausführungsbeispiel ist der gemeinsam genutzte Speicher eine Datei auf einem Speichermedium wie einer Festplatte. In mindestens einem Ausführungsbeispiel ist ein Speichervolumen ein Festplattenvolumen. In mindestens einem Ausführungsbeispiel ist ein Speichervolumen ein Festkörperspeichergerät wie ein SD-Laufwerk.
  • In mindestens einem Ausführungsbeispiel kehrt der Prozess 700 in Block 716 zu Block 702 zurück, wo eine nächste Iteration eines Trainingsprozesses stattfindet.
  • 8 zeigt ein Beispiel eines Prozesses 800, der als Ergebnis der Ausführung durch ein Computersystem ein maschinelles Lernmodell mit Gewichtsaktualisierungen trainiert, die gemäß einem Ausführungsbeispiel inkrementell an individuelle Worker verteilt werden. In mindestens einem Ausführungsbeispiel teilt ein Ausführungsprozess in Block 802 eine Aufgabe zur Aktualisierung der Gewichte eines maschinell lernenden Modells in eine Reihe von Arbeitseinheiten auf. In mindestens einem Ausführungsbeispiel ist die Anzahl der Arbeitseinheiten wesentlich größer als die Anzahl der verfügbaren Worker, mit denen eine Aufgabe der Gewichtsaktualisierung durchgeführt werden soll. In mindestens einem Ausführungsbeispiel wird in Block 802 eine individuelle Arbeitseinheit an jeden verfügbaren Worker durch eine Führungskraft verteilt. In mindestens einem Ausführungsbeispiel ist eine Führungskraft ein Prozess, der die Aktionen einer Vielzahl von Workern steuert, die auf einem oder mehreren Prozessoren laufen. In mindestens einem Ausführungsbeispiel ist eine Führungskraft in der Lage, einen oder mehrere Worker zu starten, zu stoppen und ihnen Arbeit zuzuweisen.
  • In mindestens einem Ausführungsbeispiel führen die Worker im Entscheidungsblock 804 ihre jeweiligen Arbeitseinheiten aus, bis mindestens ein Worker seine jeweilige Arbeitseinheit abgeschlossen hat und im Leerlauf ist. In mindestens einem Ausführungsbeispiel wird in Block 806 ein untätiger Worker identifiziert, und dem untätigen Worker wird eine zusätzliche Arbeitseinheit zugewiesen. In mindestens einem Ausführungsbeispiel kehrt die Ausführung im Entscheidungsblock 808 zum Entscheidungsblock 804 zurück, wenn zusätzliche Arbeitseinheiten zugewiesen werden müssen, und eine Führungskraft wartet darauf, dass weitere Worker frei werden. In mindestens einem Ausführungsbeispiel wird, wenn keine zusätzlichen Arbeitseinheiten vorhanden sind, mit Block 810 fortgefahren. In mindestens einem Ausführungsbeispiel wartet die Führungskraft in Block 810 darauf, dass alle Worker die ihnen zugewiesenen Aufgaben abgeschlossen haben. In mindestens einem Ausführungsbeispiel ist, wenn alle Worker ihre zugewiesenen Aufgaben abgeschlossen haben, ein Prozess der Aktualisierung der Gewichte eines maschinell erlernten Modells abgeschlossen. In mindestens einem Ausführungsbeispiel kann durch inkrementelle Zuweisung von Arbeitseinheiten die Auslastung der Worker verbessert werden, wenn eine nicht-homogene Gruppe von Workern parallel eingesetzt wird, um eine Aufgabe zur Gewichtsaktualisierung durchzuführen.
  • In mindestens einem Ausführungsbeispiel kann ein Worker ein Thread, ein Prozess, ein Prozessor, ein Prozessorkern oder ein Parallelverarbeitungsschaltkreis sein, der Anweisungen parallel zu anderen Workern ausführt. Ein Worker arbeitet auf einem Rechnersystem, um die gleichzeitige Ausführung von Aufgaben zu ermöglichen, wie nachstehend beschrieben und in 9-37 gezeigt. In mindestens einem Ausführungsbeispiel kann ein Worker beispielsweise auf einem Kern einer Grafikverarbeitungseinheit wie dem in 22D gezeigten und beschriebenen Grafikprozessor implementiert sein. In mindestens einem Ausführungsbeispiel können die hierin beschriebenen Techniken auf einem Rechnersystem wie dem in den 13-17D dargestellten und in der assoziierten Beschreibung beschriebenen Rechnersystem implementiert werden. In mindestens einem Ausführungsbeispiel werden die hierin beschriebenen Techniken unter Verwendung von ausführbaren Anweisungen implementiert, die in einem physischen, computerlesbaren Speicher gespeichert sind, und als Ergebnis der Ausführung der ausführbaren Anweisungen auf einem oder mehreren Prozessoren eines Rechnersystems implementiert das System die hierin beschriebenen Techniken.
  • Logik für Inferenzierung und Training
  • 9A zeigt eine Inferenz- und/oder Trainingslogik 915, die verwendet wird, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden im Folgenden in Verbindung mit den 9A und/oder 9B bereitgestellt.
  • In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 ohne Einschränkung einen Code- und/oder Datenspeicher 901 umfassen, um Vorwärts- und/oder Ausgabegewichte und/oder Eingabe-/Ausgabedaten und/oder andere Parameter zu speichern, um Neuronen oder Schichten eines neuronalen Netzwerks zu konfigurieren, das für die Inferenzierung in Aspekten einer oder mehrerer Ausführungsbeispiele trainiert und/oder verwendet wird. In mindestens einem Ausführungsbeispiel kann die Trainingslogik 915 einen Code- und/oder Datenspeicher 901 enthalten oder mit diesem gekoppelt sein, um einen Graphcode oder eine andere Software zu speichern, die das Timing und/oder den Auftrag steuert, in dem Gewichts- und/oder andere Parameterinformationen geladen werden sollen, um eine Logik zu konfigurieren, einschließlich Ganzzahl- und/oder Gleitkommaeinheiten (zusammenfassend als arithmetische Logikeinheiten (ALUs) bezeichnet). In mindestens einem Ausführungsbeispiel lädt Code, wie z. B. Graphencode, Gewichts- oder andere Parameterinformationen in Prozessor-ALUs basierend auf einer Architektur eines neuronalen Netzwerks, dem der Code entspricht. In mindestens einem Ausführungsbeispiel speichert der Code und/oder der Datenspeicher 901 Gewichtsparameter und/oder Eingabe-/Ausgabedaten jeder Schicht eines neuronalen Netzwerks, das während der Vorwärtspropagierung von Eingabe-/Ausgabedaten und/oder Gewichtsparametern während des Trainings und/oder der Inferenz unter Verwendung von Aspekten eines oder mehrerer Ausführungsbeispiele trainiert oder in Verbindung mit einem oder mehreren Ausführungsbeispielen verwendet wird. In mindestens einem Ausführungsbeispiel kann jeder Teil des Code- und/oder Datenspeichers 901 in anderen On-Chip- oder Off-Chip-Datenspeichern enthalten sein, einschließlich des L1-, L2- oder L3-Cache oder Systemspeichers eines Prozessors.
  • In mindestens einem Ausführungsbeispiel kann ein beliebiger Teil des Codes und/oder des Datenspeichers 901 intern oder extern zu einem oder mehreren Prozessoren oder anderen Hardware-Logikgeräten oder -Schaltungen sein. In mindestens einem Ausführungsbeispiel kann es sich bei dem Code- und/oder Code- und/oder Datenspeicher 901 um einen Cache-Speicher, einen dynamischen zufällig adressierbaren Speicher („DRAM“), einen statischen zufällig adressierbaren Speicher („SRAM“), einen nichtflüchtigen Speicher (z. B. Flash-Speicher) oder einen anderen Speicher handeln. In mindestens einem Ausführungsbeispiel kann die Wahl, ob der Code- und/oder Code- und/oder Datenspeicher 901 beispielsweise intern oder extern zu einem Prozessor ist oder DRAM, SRAM, Flash oder einen anderen Speichertyp umfasst, von dem verfügbaren Speicher auf dem Chip oder außerhalb des Chips, den Latenzanforderungen der durchgeführten Trainings- und/oder Inferenzfunktionen, der Stapelgröße der bei der Inferenz und/oder dem Training eines neuronalen Netzwerks verwendeten Daten oder einer Kombination dieser Faktoren abhängen.
  • In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 ohne Einschränkung einen Code- und/oder Datenspeicher 905 umfassen, um Backward- und/oder Ausgabegewichts- und/oder Eingabe-/Ausgabedaten zu speichern, die Neuronen oder Schichten eines neuronalen Netzwerks entsprechen, das in Aspekten einer oder mehrerer Ausführungsbeispiele trainiert und/oder zum Inferenzieren verwendet wird. In mindestens einem Ausführungsbeispiel speichert der Code- und/oder Datenspeicher 905 Gewichtsparameter und/oder Eingabe-/Ausgabedaten jeder Schicht eines neuronalen Netzwerks, das in Verbindung mit einem oder mehreren Ausführungsbeispielen während der Backpropagation von Eingabe-/Ausgabedaten und/oder Gewichtsparametern während des Trainings und/oder der Inferenz unter Verwendung von Aspekten eines oder mehrerer Ausführungsbeispiele trainiert oder verwendet wird. In mindestens einem Ausführungsbeispiel kann die Trainingslogik 915 einen Code- und/oder Datenspeicher 905 enthalten oder mit diesem gekoppelt sein, um einen Graphencode oder eine andere Software zu speichern, die das Timing und/oder den Auftrag steuert, in dem Gewichts- und/oder andere Parameterinformationen geladen werden sollen, um die Logik zu konfigurieren, einschließlich Ganzzahl- und/oder Gleitkommaeinheiten (zusammenfassend als arithmetische Logikeinheiten (ALUs) bezeichnet). In mindestens einem Ausführungsbeispiel lädt ein Code, z. B. ein Graphencode, basierend auf einer Architektur eines neuronalen Netzwerks, dem der Code entspricht, Gewichts- oder andere Parameterinformationen in Prozessor-ALUs. In mindestens einem Ausführungsbeispiel kann ein beliebiger Teil des Code- und/oder Datenspeichers 905 in einen anderen On-Chip- oder Off-Chip-Datenspeicher, einschließlich des L1-, L2- oder L3-Cache oder Systemspeichers eines Prozessors, integriert werden. In mindestens einem Ausführungsbeispiel kann ein beliebiger Teil des Code- und/oder Datenspeichers 905 intern oder extern zu einem oder mehreren Prozessoren oder anderen Hardware-Logikgeräten oder -Schaltungen sein. In mindestens einem Ausführungsbeispiel kann der Code- und/oder Datenspeicher 905 ein Cache-Speicher, DRAM, SRAM, nichtflüchtiger Speicher (z. B. Flash-Speicher) oder ein anderer Speicher sein. In mindestens einem Ausführungsbeispiel kann die Wahl, ob der Code- und/oder Datenspeicher 905 beispielsweise intern oder extern zu einem Prozessor ist oder DRAM, SRAM, Flash oder einen anderen Speichertyp umfasst, von dem verfügbaren Speicher auf dem Chip gegenüber dem außerhalb des Chips, den Latenzanforderungen der durchgeführten Trainings- und/oder Inferenzfunktionen, der Stapelgröße der bei der Inferenz und/oder dem Training eines neuronalen Netzwerks verwendeten Daten oder einer Kombination dieser Faktoren abhängen.
  • In mindestens einem Ausführungsbeispiel können der Code- und/oder Datenspeicher 901 und der Code- und/oder Datenspeicher 905 separate Speicherstrukturen sein. In mindestens einem Ausführungsbeispiel können der Code- und/oder Datenspeicher 901 und der Code- und/oder Datenspeicher 905 dieselbe Speicherstruktur sein. In mindestens einem Ausführungsbeispiel können der Code- und/oder Datenspeicher 901 und der Code- und/oder Datenspeicher 905 teilweise dieselbe Speicherstruktur und teilweise separate Speicherstrukturen sein. In mindestens einem Ausführungsbeispiel kann ein beliebiger Teil des Code- und/oder Datenspeichers 901 und des Code- und/oder Datenspeichers 905 in einen anderen On-Chip- oder Off-Chip-Datenspeicher, einschließlich des L1-, L2- oder L3-Cache oder Systemspeichers eines Prozessors, einbezogen werden.
  • In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 ohne Einschränkung eine oder mehrere arithmetische Logikeinheit(en) („ALU(s)“) 910, einschließlich Ganzzahl- und/oder Gleitkommaeinheiten, umfassen, um logische und/oder mathematische Operationen durchzuführen, die zumindest teilweise auf einem Trainings- und/oder Inferenzcode basieren oder durch diesen angezeigt werden (z.B, Graphencode), deren Ergebnis in einem Aktivierungsspeicher 920 gespeicherte Aktivierungen (z. B. Ausgabewerte von Schichten oder Neuronen innerhalb eines neuronalen Netzwerks) erzeugen kann, die Funktionen von in Code- und/oder Datenspeicher 901 und/oder Code- und/oder Datenspeicher 905 gespeicherten Eingabe/Ausgabe- und/oder Gewichtsparameterdaten sind. Gemäß mindestens einem Ausführungsbeispiel werden in einem Aktivierungsspeicher 920 gespeicherte Aktivierungen gemäß linearer algebraischer und/oder matrixbasierter Mathematik generiert, die von ALU(s) 910 als Reaktion auf Ausführungsbefehle oder anderen Code ausgeführt wird, wobei in Code- und/oder Datenspeicher 905 und/oder Daten 901 gespeicherte Gewichtswerte als Operanden zusammen mit anderen Werten, wie beispielsweise Bias-Werten, Gradienteninformationen, Impulswerten oder anderen Parametern oder Hyperparametern, verwendet werden, von denen beliebige oder alle in Code- und/oder Datenspeicher 905 oder Code- und/oder Datenspeicher 901 oder einem anderen Speicher auf oder außerhalb des Chips gespeichert sein können.
  • In mindestens einem Ausführungsbeispiel sind die ALU(s) 910 in einem oder mehreren Prozessoren oder anderen logischen Hardware-Geräten oder -Schaltungen enthalten, während in einem anderen Ausführungsbeispiel die ALU(s) 910 extern zu einem Prozessor oder einem anderen logischen Hardware-Gerät oder einer Schaltung sein können, die sie verwenden (z.B. ein Co-Prozessor). In mindestens einem Ausführungsbeispiel können die ALUs 910 in den Ausführungseinheiten eines Prozessors oder anderweitig in einer Bank von ALUs enthalten sein, auf die die Ausführungseinheiten eines Prozessors entweder innerhalb desselben Prozessors oder verteilt auf verschiedene Prozessoren unterschiedlichen Typs (z. B. zentrale Verarbeitungseinheiten, Grafikverarbeitungseinheiten, feste Funktionseinheiten usw.) zugreifen können. In mindestens einem Ausführungsbeispiel können sich der Datenspeicher 901, der Code- und/oder Datenspeicher 905 und der Aktivierungsspeicher 920 auf demselben Prozessor oder einem anderen logischen Hardware-Gerät oder -Schaltkreis befinden, während sie sich in einem anderen Ausführungsbeispiel in verschiedenen Prozessoren oder anderen logischen Hardware-Geräten oder -Schaltkreisen oder in einer Kombination aus gleichen und verschiedenen Prozessoren oder anderen logischen Hardware-Geräten oder -Schaltkreisen befinden können. In mindestens einem Ausführungsbeispiel kann ein beliebiger Teil des Aktivierungsspeichers 920 in einen anderen On-Chip- oder Off-Chip-Datenspeicher, einschließlich des L1-, L2- oder L3-Cache oder Systemspeichers eines Prozessors, integriert werden. Darüber hinaus kann der Inferenz- und/oder Trainingscode zusammen mit anderem Code gespeichert werden, auf den ein Prozessor oder eine andere Hardware-Logik oder -Schaltung zugreifen kann und der mit Hilfe der Abruf-, Dekodier-, Planungs-, Ausführungs-, Ausscheidungs- und/oder anderen logischen Schaltungen eines Prozessors abgerufen und/oder verarbeitet wird.
  • In mindestens einem Ausführungsbeispiel kann der Aktivierungsspeicher 920 ein Cache-Speicher, DRAM, SRAM, nichtflüchtiger Speicher (z. B. Flash-Speicher) oder ein anderer Speicher sein. In mindestens einem Ausführungsbeispiel kann sich der Aktivierungsspeicher 920 vollständig oder teilweise innerhalb oder außerhalb eines oder mehrerer Prozessoren oder anderer logischer Schaltungen befinden. In mindestens einem Ausführungsbeispiel kann die Entscheidung, ob der Aktivierungsspeicher 920 beispielsweise innerhalb oder außerhalb eines Prozessors liegt oder DRAM, SRAM, Flash oder einen anderen Speichertyp umfasst, von dem verfügbaren Speicher auf dem Chip oder außerhalb des Chips, den Latenzanforderungen der durchgeführten Trainings- und/oder Inferenzfunktionen, der Stapelgröße der bei der Inferenz und/oder dem Training eines neuronalen Netzwerks verwendeten Daten oder einer Kombination dieser Faktoren abhängen. In mindestens einem Ausführungsbeispiel kann die in 9A gezeigte Inferenz- und/oder Trainingslogik 915 in Verbindung mit einer anwendungsspezifischen integrierten Schaltung („ASIC“) verwendet werden, wie z. B. der Tensorflow® Processing Unit von Google, einer Inferenzverarbeitungseinheit (IPU) von Graphcore™ oder einem Nervanaü-Prozessor (z. B. „Lake Crest“) von Intel Corp. In mindestens einem Ausführungsbeispiel kann die in 9A gezeigte Inferenz- und/oder Trainingslogik 915 in Verbindung mit Hardware der Zentraleinheit („CPU“), der Grafikverarbeitungseinheit („GPU“) oder anderer Hardware, wie z.B. feldprogrammierbaren Gate-Arrays („FPGAs“), verwendet werden.
  • 9B zeigt die Inferenz- und/oder Trainingslogik 915, gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 ohne Einschränkung eine Hardwarelogik umfassen, in der Rechenressourcen in Verbindung mit Gewichtswerten oder anderen Informationen, die einer oder mehreren Schichten von Neuronen innerhalb eines neuronalen Netzwerks entsprechen, dediziert oder anderweitig exklusiv verwendet werden. In mindestens einem Ausführungsbeispiel kann die in 9B gezeigte Inferenz- und/oder Trainingslogik 915 in Verbindung mit einem anwendungsspezifischen integrierten Schaltkreis (ASIC) verwendet werden, wie z. B. der Tensorflowü Processing Unit von Google, einer Inferenzverarbeitungseinheit (IPU) von Graphcore™ oder einem Nervanaü-Prozessor (z. B. „Lake Crest“) von Intel Corp. In mindestens einem Ausführungsbeispiel kann die in 9B gezeigte Inferenz- und/oder Trainingslogik 915 in Verbindung mit CPU-Hardware, GPU-Hardware oder anderer Hardware, wie z. B. FPGAs (Field Programmable Gate Arrays), verwendet werden. In mindestens einem Ausführungsbeispiel umfasst die Inferenz- und/oder Trainingslogik 915 ohne Einschränkung einen Code- und/oder Datenspeicher 901 und einen Code- und/oder Datenspeicher 905, die zum Speichern von Code (z. B. Graphencode), Gewichtswerten und/oder anderen Informationen, einschließlich Bias-Werten, Gradienteninformationen, Impulswerten und/oder anderen Parameter- oder Hyperparameterinformationen, verwendet werden können. In mindestens einem Ausführungsbeispiel, das in 9B gezeigt wird, ist jeder der Code- und/oder Datenspeicher 901 und Code- und/oder Datenspeicher 905 mit einer dedizierten Rechnerressource assoziiert, wie z.B. Rechnerhardware 902 bzw. Rechnerhardware 906. In mindestens einem Ausführungsbeispiel umfasst jede der Rechenhardware 902 und der Rechenhardware 906 eine oder mehrere ALUs, die mathematische Funktionen, wie lineare algebraische Funktionen, nur auf Informationen ausführen, die im Code- und/oder Datenspeicher 901 bzw. im Code- und/oder Datenspeicher 905 gespeichert sind, deren Ergebnis im Aktivierungsspeicher 920 gespeichert wird.
  • In mindestens einem Ausführungsbeispiel entspricht jeder der Code- und/oder Datenspeicher 901 und 905 und die entsprechende Rechenhardware 902 und 906 jeweils verschiedenen Schichten eines neuronalen Netzwerks, so dass die resultierende Aktivierung von einem „Speicher-/Rechenpaar 901/902“ von Code- und/oder Datenspeicher 901 und Rechenhardware 902 als Eingabe für das nächste „Speicher-/Rechenpaar 905/906“ von Code- und/oder Datenspeicher 905 und Rechenhardware 906 bereitgestellt wird, um die konzeptionelle Organisation eines neuronalen Netzwerks widerzuspiegeln. In mindestens einem Ausführungsbeispiel kann jedes der Speicher-/Rechenpaare 901/902 und 905/906 mehr als einer Schicht des neuronalen Netzwerks entsprechen. In mindestens einem Ausführungsbeispiel können zusätzliche Speicher-/Rechenpaare (nicht gezeigt) im Anschluss an oder parallel zu den Speicher-/Rechenpaaren 901/902 und 905/906 in die Inferenz- und/oder Trainingslogik 915 einbezogen werden.
  • Training und Einsatz eines neuronalen Netzwerks
  • 10 zeigt das Training und den Einsatz eines tiefen neuronalen Netzwerks gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel wird das untrainierte neuronale Netzwerk 91006 unter Verwendung eines Trainingsdatensatzes 1002 trainiert. In mindestens einem Ausführungsbeispiel ist das Trainingsframework 1004 ein PyTorch-Framework, während in anderen Ausführungsbeispielen das Trainingsframework 1004 ein Tensorflow-, Boost-, Caffe-, Microsoft Cognitive Toolkit/CNTK-, MXNet-, Chainer-, Keras-, Deeplearning4j- oder ein anderes Trainingsframework ist. In mindestens einem Ausführungsbeispiel trainiert das Trainingsframework 1004 ein untrainiertes neuronales Netzwerk 1006 und ermöglicht dessen Training mit den hierin beschriebenen Verarbeitungsressourcen, um ein trainiertes neuronales Netzwerk 1008 zu generieren. In mindestens einem Ausführungsbeispiel können die Gewichte zufällig oder durch Vortraining unter Verwendung eines Deep Belief Network ausgewählt werden. In mindestens einem Ausführungsbeispiel kann das Training entweder auf überwachte, teilweise überwachte oder nicht überwachte Weise durchgeführt werden.
  • In mindestens einem Ausführungsbeispiel wird das untrainierte neuronale Netzwerk 1006 unter Verwendung von überwachtem Lernen trainiert, wobei der Trainingsdatensatz 1002 eine Eingabe enthält, die mit einer gewünschten Ausgabe für eine Eingabe gepaart ist, oder wobei der Trainingsdatensatz 1002 eine Eingabe mit einer bekannten Ausgabe enthält und eine Ausgabe des neuronalen Netzwerks 1006 manuell eingestuft wird. In mindestens einem Ausführungsbeispiel wird das untrainierte neuronale Netzwerk 1006 auf überwachte Weise trainiert, verarbeitet Eingaben aus dem Trainingsdatensatz 1002 und vergleicht die resultierenden Ausgaben mit einem Satz von erwarteten oder gewünschten Ausgaben. In mindestens einem Ausführungsbeispiel werden die Fehler dann durch das untrainierte neuronale Netzwerk 1006 zurück propagiert. In mindestens einem Ausführungsbeispiel passt das Trainings-Framework 1004 die Gewichte an, die das untrainierte neuronale Netzwerk 1006 steuern. In mindestens einem Ausführungsbeispiel enthält das Trainings-Framework 1004 Werkzeuge, um zu überwachen, wie gut das untrainierte neuronale Netzwerk 1006 zu einem Modell konvergiert, wie z. B. dem trainierten neuronalen Netzwerk 1008, das geeignet ist, basierend auf bekannten Eingabedaten, wie z. B. dem neuen Datensatz 1012, korrekte Antworten zu generieren, wie z. B. im Ergebnis 1014. In mindestens einem Ausführungsbeispiel trainiert das Trainings-Framework 1004 das untrainierte neuronale Netzwerk 1006 wiederholt, während er die Gewichte anpasst, um eine Ausgabe des untrainierten neuronalen Netzwerks 1006 unter Verwendung einer Verlustfunktion und eines Anpassungsalgorithmus, wie z. B. stochastischer Gradientenabstieg, zu verfeinern. In mindestens einem Ausführungsbeispiel trainiert das Trainings-Framework 1004 das untrainierte neuronale Netzwerk 1006, bis das untrainierte neuronale Netzwerk 1006 eine gewünschte Genauigkeit erreicht. In mindestens einem Ausführungsbeispiel kann das trainierte neuronale Netzwerk 1008 dann eingesetzt werden, um eine beliebige Anzahl von maschinellen Lernoperationen zu implementieren.
  • In mindestens einem Ausführungsbeispiel wird das untrainierte neuronale Netzwerk 1006 unter Verwendung von unüberwachtem Lernen trainiert, wobei das untrainierte neuronale Netzwerk 1006 versucht, sich selbst mit unmarkierten Daten zu trainieren. In mindestens einem Ausführungsbeispiel enthält der Trainingsdatensatz 1002 des unüberwachten Lernens Eingabedaten ohne assoziierte Ausgabedaten oder „Grundwahrheitsdaten“. In mindestens einem Ausführungsbeispiel kann das untrainierte neuronale Netzwerk 1006 Gruppierungen innerhalb des Trainingsdatensatzes 1002 lernen und bestimmen, wie individuelle Eingaben mit dem untrainierten Datensatz 1002 in Beziehung stehen. In mindestens einem Ausführungsbeispiel kann unüberwachtes Training verwendet werden, um eine selbstorganisierende Karte zu generieren, die eine Art trainiertes neuronales Netzwerk 1008 ist, das in der Lage ist, Operationen durchzuführen, die bei der Reduzierung der Dimensionalität des neuen Datensatzes 1012 nützlich sind. In mindestens einem Ausführungsbeispiel kann unüberwachtes Training auch verwendet werden, um eine Anomalieerkennung durchzuführen, die es ermöglicht, Datenpunkte in einem neuen Datensatz 1012 zu identifizieren, die von normalen Mustern des neuen Datensatzes 1012 abweichen.
  • In mindestens einem Ausführungsbeispiel kann halbüberwachtes Lernen verwendet werden, eine Technik, bei der der Trainingsdatensatz 1002 eine Mischung aus gekennzeichneten und ungekennzeichneten Daten enthält. In mindestens einem Ausführungsbeispiel kann das Trainings-Framework 1004 verwendet werden, um inkrementelles Lernen durchzuführen, beispielsweise durch übertragene Lerntechniken. In mindestens einem Ausführungsbeispiel ermöglicht inkrementelles Lernen dem trainierten neuronalen Netzwerk 1008, sich an einen neuen Datensatz 1012 anzupassen, ohne das im Netzwerk während des initialen Trainings vermittelte Wissen zu vergessen.
  • RECHENZENTRUM
  • 11 zeigt ein Beispiel für ein Rechenzentrum 1100, in dem mindestens ein Ausführungsbeispiel verwendet werden kann. In mindestens einem Ausführungsbeispiel umfasst das Rechenzentrum 1100 eine Rechenzentrumsinfrastrukturschicht 1110, eine Frameworkschicht 1120, eine Softwareschicht 1130 und eine Applikationsschicht 1140.
  • In mindestens einem Ausführungsbeispiel, wie in 11 gezeigt, kann die Infrastrukturschicht 1110 des Rechenzentrums einen Ressourcen-Orchestrator 1112, gruppierte Rechnerressourcen 1114 und Knoten-Rechnerressourcen („node C.R.s“) 1116(1)-1116(N) umfassen, wobei „N“ eine beliebige ganze, positive Zahl darstellt. In mindestens einem Ausführungsbeispiel können die Knoten C.R.s 1116(1)-1116(N) eine beliebige Anzahl von Zentraleinheiten („CPUs“) oder anderen Prozessoren (einschließlich Beschleunigern, feldprogrammierbaren Gate-Arrays (FPGAs), Grafikprozessoren usw.), Speichergeräten (z. B., dynamischer Festwertspeicher), Speichergeräte (z. B. Festkörper- oder Festplattenlaufwerke), Netzwerk-Eingabe-/Ausgabegeräte („NW I/O“), Netzwerk-Switches, virtuelle Maschinen („VMs“), Stromversorgungsmodule und Kühlmodule usw. In mindestens einem Ausführungsbeispiel können ein oder mehrere Knoten-C.R.s unter den Knoten-C.R.s 1116(1)-1116(N) ein Server mit einer oder mehreren der oben genannten RechnerRessourcen sein.
  • In mindestens einem Ausführungsbeispiel können die gruppierten Rechnerressourcen 1114 separate Gruppierungen von Knoten-C.R.s umfassen, die in einem oder mehreren Racks (nicht gezeigt) untergebracht sind, oder viele Racks, die in Datenzentren an verschiedenen geografischen Standorten untergebracht sind (ebenfalls nicht gezeigt). Separate Gruppierungen von Knoten-C.R.s innerhalb der gruppierten Rechnerressourcen 1114 können gruppierte Rechen-, Netzwerk-, Speicher- oder Storage-Ressourcen umfassen, die zur Unterstützung einer oder mehrerer Arbeitslasten konfiguriert oder zugewiesen werden können. In mindestens einem Ausführungsbeispiel können mehrere Knoten-C.R.s mit CPUs oder Prozessoren in einem oder mehreren Racks gruppiert werden, um Rechenressourcen zur Unterstützung einer oder mehrerer Arbeitslasten bereitzustellen. In mindestens einem Ausführungsbeispiel können ein oder mehrere Racks auch eine beliebige Anzahl von Stromversorgungsmodulen, Kühlmodulen und Netzwerk-Switches in beliebiger Kombination enthalten.
  • In mindestens einem Ausführungsbeispiel kann der Ressourcen-Orchestrator 1112 einen oder mehrere Knoten C.R.s 1116(1)-1116(N) und/oder gruppierte Rechnerressourcen 1114 konfigurieren oder anderweitig steuern. In mindestens einem Ausführungsbeispiel kann der Ressourcen-Orchestrator 1112 eine Software-Design-Infrastruktur („SDI“)-Verwaltungseinheit für das Rechenzentrum 1100 enthalten. In mindestens einem Ausführungsbeispiel kann der Ressourcen-Orchestrator Hardware, Software oder eine Kombination davon umfassen.
  • In mindestens einem Ausführungsbeispiel, wie in 11 gezeigt, umfasst die Framework-Schicht 1120 einen Job Planer 1132, einen Konfigurationsmanager 1134, einen Ressourcenmanager 1136 und ein verteiltes Dateisystem 1138. In mindestens einem Ausführungsbeispiel kann die Frameworkschicht 1120 ein Framework zur Unterstützung der Software 1131 der Softwareschicht 1130 und/oder einer oder mehrerer Applikation(en) 1142 der Applikationsschicht 1140 enthalten. In mindestens einem Ausführungsbeispiel können die Software 1131 oder die Applikation(en) 1142 jeweils webbasierte Dienstsoftware oder Anwendungen umfassen, wie sie von Amazon Web Services, Google Cloud und Microsoft Azure bereitgestellt werden. In mindestens einem Ausführungsbeispiel kann die Framework-Ebene 1120 eine Art von freiem und quelloffenem Software-Webanwendungs-Framework wie Apache SparkTM (im Folgenden „Spark“) sein, das ein verteiltes Dateisystem 1138 für die Verarbeitung großer Datenmengen (z. B. „Big Data“) nutzen kann, ist aber nicht darauf beschränkt. In mindestens einem Ausführungsbeispiel kann der Planer 1132 einen Spark-Treiber enthalten, um die Planung von Arbeitslasten zu erleichtern, die von verschiedenen Schichten des Rechenzentrums 1100 unterstützt werden. In mindestens einem Ausführungsbeispiel kann der Konfigurationsmanager 1134 in der Lage sein, verschiedene Schichten wie die Softwareschicht 1130 und die Frameworkschicht 1120 einschließlich Spark und das verteilte Dateisystem 1138 zu konfigurieren, um die Verarbeitung großer Datenmengen zu unterstützen. In mindestens einem Ausführungsbeispiel kann der Ressourcenmanager 1136 in der Lage sein, geclusterte oder gruppierte Rechnerressourcen zu verwalten, die zur Unterstützung des verteilten Dateisystems 1138 und des Planers 1132 zugeordnet sind. In mindestens einem Ausführungsbeispiel können geclusterte oder gruppierte Rechnerressourcen die gruppierte Rechnerressource 1114 auf der Rechenzentrumsinfrastrukturebene 1110 umfassen. In mindestens einem Ausführungsbeispiel kann der Ressourcenmanager 1136 mit dem Ressourcenorchestrator 1112 koordiniert werden, um diese zugeordneten oder zugewiesenen Rechnerressourcen zu verwalten.
  • In mindestens einem Ausführungsbeispiel kann die in der Softwareschicht 1130 enthaltene Software 1132 Software enthalten, die zumindest von Teilen der Knoten C.R.s 1116(1)-1116(N), der gruppierten Rechnerressourcen 1114 und/oder des verteilten Dateisystems 1138 der Frameworkschicht 1120 verwendet wird. Eine oder mehrere Arten von Software können unter anderem sein: Internet-Such-Software, E-Mail-Virus-Scan-Software, Datenbank-Software und Streaming-Video-Content-Software.
  • In mindestens einem Ausführungsbeispiel kann/können die in der Applikationsschicht 1140 enthaltene(n) Applikation(en) 1142 eine oder mehrere Arten von Applikationen umfassen, die von mindestens Teilen der Knotenrechner 1116(1) 1116(N), der gruppierten Rechenressourcen 1114 und/oder des verteilten Dateisystems 1138 der Frameworkschicht 1120 verwendet werden. Eine oder mehrere Arten von Applikation können eine beliebige Anzahl einer Genomapplikation, einer kognitiven Berechnung und einer Applikation mit maschinellem Lernen, einschließlich Trainings- oder Inferenzsoftware, eine Framework-Software für maschinelles Lernen (z. B. PyTorch, TensorFlow, Caffe usw.) oder anderer maschineller Lernanwendungen, die in Verbindung mit einem oder mehreren Ausführungsbeispielen verwendet werden, umfassen, sind aber nicht darauf beschränkt.
  • In mindestens einem Ausführungsbeispiel kann ein beliebiger Konfigurationsmanager 1134, Ressourcenmanager 1136 und Ressourcenorchestrator 1112 eine beliebige Anzahl und Art von selbstmodifizierenden Aktionen basierend auf einer beliebigen Menge und Art von Daten implementieren, die auf jede technisch machbare Weise erfasst wurden. In mindestens einem Ausführungsbeispiel können selbstmodifizierende Aktionen einen Rechenzentrumsbetreiber des Rechenzentrums 1100 davon entlasten, möglicherweise schlechte Konfigurationsentscheidungen zu treffen und möglicherweise nicht ausgelastete und/oder schlecht funktionierende Teile eines Rechenzentrums zu vermeiden.
  • In mindestens einem Ausführungsbeispiel kann das Rechenzentrum 1100 Werkzeuge, Dienste, Software oder andere Ressourcen enthalten, um ein oder mehrere maschinelle Lernmodelle zu trainieren oder Informationen unter Verwendung eines oder mehrerer maschineller Lernmodelle gemäß einem oder mehreren hierin beschriebenen Ausführungsbeispielen vorherzusagen oder zu inferenzieren. Beispielsweise kann in mindestens einem Ausführungsbeispiel ein maschinelles Lernmodell durch Berechnung von Gewichtsparametern gemäß einer Architektur eines neuronalen Netzwerks unter Verwendung von Software und Rechnerressourcen trainiert werden, die oben in Bezug auf das Rechenzentrum 1100 beschrieben wurden. In mindestens einem Ausführungsbeispiel können trainierte maschinelle Lernmodelle, die einem oder mehreren neuronalen Netzwerken entsprechen, verwendet werden, um Informationen zu inferenzieren oder vorherzusagen, wobei die oben in Bezug auf das Rechenzentrum 1100 beschriebenen Ressourcen verwendet werden, indem Gewichtsparameter verwendet werden, die durch eine oder mehrere hierin beschriebene Trainingstechniken berechnet werden.
  • In mindestens einem Ausführungsbeispiel kann das Rechenzentrum CPUs, anwendungsspezifische integrierte Schaltungen (ASICs), GPUs, FPGAs oder andere Hardware verwenden, um das Training und/oder die Inferenzierung unter Verwendung der oben beschriebenen Ressourcen durchzuführen. Darüber hinaus können eine oder mehrere der oben beschriebenen Software- und/oder Hardwareressourcen als Dienst konfiguriert werden, um es Benutzern zu ermöglichen, Informationen zu trainieren oder zu inferieren, wie z. B. Bilderkennung, Spracherkennung oder andere Dienste der künstlichen Intelligenz.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit den 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 im System 11 für Inferenzierungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen für ein neuronales Netzwerk, Funktionen und/oder Architekturen eines neuronalen Netzwerks oder hier beschriebenen Anwendungsfällen für ein neuronales Netzwerk berechnet wurden. In mindestens einem Ausführungsbeispiel umfasst die Trainingslogik 915 zwei oder mehr Verarbeitungskerne, um Teile eines neuronalen Netzwerks separat und parallel zu trainieren, wie hierin beschrieben.
  • Autonomes Fahrzeug
  • 12A zeigt ein Beispiel für ein autonomes Fahrzeug 1200 gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel kann das autonome Fahrzeug 1200 (hier alternativ als „Fahrzeug 1200“ bezeichnet) ohne Einschränkung ein Personenkraftwagen sein, wie z. B. ein Pkw, ein Lkw, ein Bus und/oder eine andere Art von Fahrzeug, das einen oder mehrere Fahrgäste aufnimmt. In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 ein Sattelschlepper sein, der für den Transport von Gütern verwendet wird. In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 ein Flugzeug, ein Roboterfahrzeug oder eine andere Art von Fahrzeug sein.
  • Autonome Fahrzeuge können in Form von Automatisierungsstufen beschrieben werden, die von der National Highway Traffic Safety Administration („NHTSA“), einer Abteilung des US-Verkehrsministeriums, und der Society of Automotive Engineers („SAE“) „Taxonomy and Definitions for Terms Related to Driving Automation Systems for On-Road Motor Vehicles“ (z. B. Standard Nr. J3016-201806, veröffentlicht am 15. Juni 2018, Standard Nr. J3016-201609, veröffentlicht am 30. September 2016, sowie frühere und zukünftige Versionen dieses Standards) definiert werden. In einem oder mehreren Ausführungsbeispielen kann das Fahrzeug 1200 in der Lage sein, eine Funktionalität gemäß einem oder mehreren der Level 1 - Level 5 der autonomen Fahrstufen zu bieten. Zum Beispiel kann das Fahrzeug 1200 in mindestens einem Ausführungsbeispiel zu einer bedingten Automatisierung (Stufe 3), einer hohen Automatisierung (Stufe 4) und/oder einer vollständigen Automatisierung (Stufe 5) fähig sein, je nach Ausführungsbeispiel.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 ohne Einschränkung Komponenten wie ein Fahrgestell, eine Fahrzeugkarosserie, Räder (z.B. 2, 4, 6, 8, 18, etc.), Reifen, Achsen und andere Komponenten eines Fahrzeugs umfassen. In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 ohne Einschränkung ein Antriebssystem 1250 umfassen, wie z. B. einen Verbrennungsmotor, ein Hybrid-Elektrokraftwerk, einen reinen Elektromotor und/oder einen anderen Antriebssystemtyp. In mindestens einem Ausführungsbeispiel kann das Antriebssystem 1250 mit einem Antriebsstrang des Fahrzeugs 1200 verbunden sein, der ohne Einschränkung ein Getriebe umfassen kann, um den Antrieb des Fahrzeugs 1200 zu ermöglichen. In mindestens einem Ausführungsbeispiel kann das Antriebssystem 1250 als Reaktion auf den Empfang von Signalen von einer Drosselklappe/einem Gaspedal (1252) gesteuert werden.
  • In mindestens einem Ausführungsbeispiel wird ein Lenksystem 1254, das ohne Einschränkung ein Lenkrad umfassen kann, verwendet, um ein Fahrzeug 1200 zu lenken (z.B. entlang eines gewünschten Weges oder einer Route), wenn ein Antriebssystem 1250 in Betrieb ist (z.B. wenn das Fahrzeug in Bewegung ist). In mindestens einem Ausführungsbeispiel kann ein Lenksystem 1254 Signale von einem oder mehreren Lenkaktoren 1256 empfangen. Das Lenkrad kann optional für die vollständige Automatisierung (Stufe 5) eingesetzt werden. In mindestens einem Ausführungsbeispiel kann ein Bremssensorsystem 1246 verwendet werden, um die Fahrzeugbremsen als Reaktion auf den Empfang von Signalen von Bremsaktuator(en) 1248 und/oder Bremssensoren zu betätigen.
  • In mindestens einem Ausführungsbeispiel stellt (stellen) der (die) Controller 1236, der (die) ohne Einschränkung ein oder mehrere System-on-Chips („SoCs“) (in 12A nicht dargestellt) und/oder eine oder mehrere Grafikverarbeitungseinheiten („GPU(s)“) umfassen kann (können), Signale (z. B. repräsentativ für Befehle) für eine oder mehrere Komponenten und/oder Systeme des Fahrzeugs 1200 bereit. In mindestens einem Ausführungsbeispiel kann (können) das (die) Steuergerät(e) 1236 beispielsweise Signale zur Betätigung der Fahrzeugbremsen über die Bremsaktuatoren 1248, zur Betätigung des Lenksystems 1254 über den (die) Lenkaktuator(en) 1256 und zur Betätigung des Antriebssystems 1250 über den (die) Gashebel/Beschleuniger 1252 senden. Die Steuereinheit(en) 1236 kann (können) einen oder mehrere integrierte Rechner (z. B. Supercomputer) umfassen, die Sensorsignale verarbeiten und Betriebsbefehle (z. B. Signale, die Befehle darstellen) ausgeben, um autonomes Fahren zu ermöglichen und/oder einen menschlichen Fahrer beim Führen des Fahrzeugs 1200 zu unterstützen. In mindestens einem Ausführungsbeispiel kann/können die Steuereinheit(en) 1236 eine erste Steuereinheit 1236 für autonome Fahrfunktionen, eine zweite Steuereinheit 1236 für funktionale Sicherheitsfunktionen, eine dritte Steuereinheit 1236 für Funktionen der künstlichen Intelligenz (z. B. Computer Vision), eine vierte Steuereinheit 1236 für Infotainment-Funktionen, eine fünfte Steuereinheit 1236 für Redundanz in Notfällen und/oder andere Steuereinheiten umfassen. In mindestens einem Ausführungsbeispiel kann ein einziges Steuergerät 1236 zwei oder mehr der oben genannten Funktionen übernehmen, zwei oder mehr Steuergeräte 1236 können eine einzige Funktion übernehmen und/oder eine beliebige Kombination davon.
  • In mindestens einem Ausführungsbeispiel stellt (stellen) das (die) Steuergerät(e) 1236 Signale zur Steuerung einer oder mehrerer Komponenten und/oder Systeme des Fahrzeugs 1200 als Reaktion auf Sensordaten bereit, die von einem oder mehreren Sensoren (z. B. Sensoreingaben) empfangen werden. In mindestens einem Ausführungsbeispiel können Sensordaten beispielsweise und ohne Einschränkung von einem oder mehreren Sensoren des globalen Navigationssatellitensystems („GNSS“) 1258 empfangen werden (z.B., Global Positioning System-Sensor(en)), RADAR-Sensor(en) 1260, Ultraschallsensor(en) 1262, LIDAR-Sensor(en) 1264, Trägheits-Sensor(en) („IMU“) 1266 (z. B. Beschleunigungsmesser, Gyroskop(e), Magnetkompass(e), Magnetometer usw.), Mikrofon(en) 1296, Stereokamera(s) 1268, Weitwinkelkamera(s) 1270 (z. B., Fischaugenkameras), Infrarotkamera(n) 1272, Umgebungskamera(n) 1274 (z.B. 360-Grad-Kameras), Fernkameras (nicht in 12A gezeigt), Mitteldistanzkamera(n) (nicht in 12A gezeigt), Geschwindigkeitssensor(en) 1244 (z.B. zur Messung der Geschwindigkeit des Fahrzeugs 1200), Vibrationssensor(en) 1242, Lenksensor(en) 1240, Bremssensor(en) (z.B. als Teil des Bremssensorsystems 1246) und/oder andere Sensortypen.
  • In mindestens einem Ausführungsbeispiel kann ein oder mehrere Steuergerät(e) 1236 Eingaben (z.B. dargestellt durch Eingabedaten) von einem Kombiinstrument 1232 des Fahrzeugs 1200 empfangen und Ausgaben (z.B. dargestellt durch Ausgabedaten, Anzeigedaten usw.) über eine Mensch-Maschine-Schnittstelle („HMI“)-Anzeige 1234, einen akustischen Melder, einen Lautsprecher und/oder über andere Komponenten des Fahrzeugs 1200 bereitstellen. In mindestens einem Ausführungsbeispiel können die Ausgaben Informationen wie Fahrzeuggeschwindigkeit, Drehzahl, Zeit, Kartendaten (z. B. eine hochauflösende Karte (in 12A nicht dargestellt)), Standortdaten (z. B. der Standort des Fahrzeugs 1200, wie auf einer Karte), Richtung, Standort anderer Fahrzeuge (z. B. ein Belegungsraster), Informationen über Objekte und den Status von Objekten, wie von dem/den Controller(n) 1236 wahrgenommen, usw. umfassen. In mindestens einem Ausführungsbeispiel kann die HMI-Anzeige 1234 beispielsweise Informationen über das Vorhandensein eines oder mehrerer Objekte (z. B. ein Straßenschild, ein Warnschild, eine sich ändernde Ampel usw.) und/oder Informationen über Fahrmanöver anzeigen, die das Fahrzeug durchgeführt hat, gerade durchführt oder durchführen wird (z. B. Spurwechsel jetzt, Ausfahrt 34B in zwei Meilen usw.).
  • In mindestens einem Ausführungsbeispiel umfasst das Fahrzeug 1200 weiter eine Netzwerkschnittstelle 1224, die drahtlose Antenne(n) 1226 und/oder Modem(e) zur Kommunikation über ein oder mehrere Netzwerke verwenden kann. Zum Beispiel kann in mindestens einem Ausführungsbeispiel die Netzwerkschnittstelle 1224 in der Lage sein, über Long-Term Evolution („LTE“), Wideband Code Division Multiple Access („WCDMA“), Universal Mobile Telecommunications System („UMTS“), Global System for Mobile Communication („GSM“), IMT-CDMA Multi-Carrier („CDMA2000“), etc. zu kommunizieren. In mindestens einem Ausführungsbeispiel kann/können die drahtlose(n) Antenne(n) 1226 auch die Kommunikation zwischen Objekten in der Umgebung (z. B. Fahrzeuge, mobile Geräte usw.) unter Verwendung von lokalen Netzwerken wie Bluetooth, Bluetooth Low Energy („LE“), Z-Wave, ZigBee usw. und/oder Low Power Wide Area Networks („LPWANs“) wie LoRaWAN, SigFox usw. ermöglichen.
  • Inferenz- und/oder Trainingslogik 915 werden verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 im System 12A für Inferenz- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen für ein neuronales Netzwerk, Funktionen und/oder Architekturen eines neuronalen Netzwerks oder hier beschriebenen Anwendungsfällen für ein neuronales Netzwerk berechnet wurden. In mindestens einem Ausführungsbeispiel kann ein neuronales Netzwerk, das von dem autonomen Fahrzeug 1200 verwendet wird, unter Verwendung von Inferenzierung durch ein oder mehrere neuronale Netzwerke arbeiten, die jeweils durch zwei oder mehr Verarbeitungskerne trainiert werden, um Teile des neuronalen Netzwerks separat parallel zu trainieren, wie hierin beschrieben.
  • 12B zeigt ein Beispiel für Kamerapositionen und Sichtfelder für das autonome Fahrzeug 1200 aus 12A, gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel stellen die Kameras und die jeweiligen Sichtfelder ein Ausführungsbeispiel dar und sind nicht als einschränkend zu betrachten. Zum Beispiel können in mindestens einem Ausführungsbeispiel zusätzliche und/oder alternative Kameras enthalten sein und/oder Kameras können an verschiedenen Stellen des Fahrzeugs 1200 angeordnet sein.
  • In mindestens einem Ausführungsbeispiel können Kameratypen für Kameras Digitalkameras umfassen, sind aber nicht darauf beschränkt, die für die Verwendung mit Komponenten und/oder Systemen des Fahrzeugs 1200 ausgebildet sein können. Die Kamera(s) kann/können auf dem Automotive Safety Integrity Level („ASIL“) B und/oder auf einem anderen ASIL arbeiten. In mindestens einem Ausführungsbeispiel können die Kameratypen je nach Ausführungsbeispiel eine beliebige Bildaufnahmerate, wie 60 Bilder pro Sekunde (fps), 1220 fps, 240 fps, usw., erreichen. In mindestens einem Ausführungsbeispiel können die Kameras Rolling Shutter, Global Shutter, einen anderen Verschlusstyp oder eine Kombination davon verwenden. In mindestens einem Ausführungsbeispiel kann das Farbfilter-Array ein Rot-Klar-Klar-Klar („RCCC“)-Farbfilter-Array, ein Rot-Klar-Klar-Blau („RCCB“)-Farbfilter-Array, ein Rot-Blau-Grün-Klar („RBGC“)-Farbfilter-Array, ein Foveon X3-Farbfilter-Array, ein Bayer-Sensoren („RGGB“)-Farbfilter-Array, ein Monochrom-Sensor-Farbfilter-Array und/oder eine andere Art von Farbfilter-Array umfassen. In mindestens einem Ausführungsbeispiel können zur Erhöhung der Lichtempfindlichkeit Clear-Pixel-Kameras, wie Kameras mit einem RCCC-, einem RCCB- und/oder einem RBGC-Farbfilter-Array, verwendet werden.
  • In mindestens einem Ausführungsbeispiel können eine oder mehrere Kameras verwendet werden, um fortschrittliche Fahrerassistenzsysteme („ADAS“) auszuführen (z. B. als Teil eines redundanten oder ausfallsicheren Designs). So kann in mindestens einem Ausführungsbeispiel eine Multifunktions-Monokamera installiert werden, um Funktionen wie Spurhalteassistent, Verkehrszeichenassistent und intelligente Scheinwerfersteuerung bereitzustellen. In mindestens einem Ausführungsbeispiel können eine oder mehrere der Kameras (z. B. alle Kameras) gleichzeitig Bilddaten (z. B. Video) aufzeichnen und bereitstellen.
  • In mindestens einem Ausführungsbeispiel können eine oder mehrere der Kameras in einer Montagevorrichtung, wie z.B. einer kundenspezifisch entworfenen (dreidimensionalen („3D“) gedruckten) Vorrichtung, montiert werden, um Streulicht und Reflexionen aus dem Fahrzeuginneren (z.B. Reflexionen vom Armaturenbrett, die in den Windschutzscheibenspiegeln reflektiert werden) auszuschalten, die die Fähigkeit der Kamera zur Bilddatenerfassung beeinträchtigen können. In mindestens einem Ausführungsbeispiel können die Außenspiegel-Baugruppen kundenspezifisch in 3D gedruckt werden, so dass die Kameramontageplatte der Form des Außenspiegels entspricht. In mindestens einem Ausführungsbeispiel kann/können die Kamera(s) in den Außenspiegel integriert werden. Bei Seitenkameras können die Kamera(s) auch in mindestens einem Ausführungsbeispiel in vier Säulen an jeder Ecke der Kabine integriert sein.
  • In mindestens einem Ausführungsbeispiel können Kameras mit einem Sichtfeld, das Teile der Umgebung vor dem Fahrzeug 1200 einschließt (z.B. nach vorne gerichtete Kameras), für die Rundumsicht verwendet werden, um dabei zu helfen, nach vorne gerichtete Pfade und Hindernisse zu identifizieren, und um mit Hilfe eines oder mehrerer Steuergeräte 1236 und/oder Steuer-SoCs Informationen bereitzustellen, die für das Generieren eines Belegungsgitters und/oder das Bestimmen bevorzugter Fahrzeugpfade entscheidend sind. In mindestens einem Ausführungsbeispiel können nach vorne gerichtete Kameras verwendet werden, um viele der gleichen ADAS-Funktionen wie LIDAR auszuführen, einschließlich, ohne Einschränkung, Notbremsung, Fußgängererkennung und Kollisionsvermeidung. In mindestens einem Ausführungsbeispiel können nach vorne gerichtete Kameras auch für ADAS-Funktionen und -Systeme verwendet werden, einschließlich, aber nicht beschränkt auf Spurverlassenswarnungen („LDW“), autonome Geschwindigkeitsregelung („ACC“) und/oder andere Funktionen wie Verkehrszeichenerkennung.
  • In mindestens einem Ausführungsbeispiel kann eine Vielzahl von Kameras in einer nach vorne gerichteten Konfiguration verwendet werden, darunter zum Beispiel eine monokulare Kameraplattform, die einen CMOS-Farbbildsensor („Complementary Metal Oxide Semiconductor“) enthält. In mindestens einem Ausführungsbeispiel kann die Weitwinkelkamera 1270 verwendet werden, um Objekte zu erkennen, die von der Peripherie her ins Blickfeld kommen (z. B. Fußgänger, kreuzenden Verkehr oder Fahrräder). Obwohl in 12B nur eine Weitwinkelkamera 1270 gezeigt ist, kann es in anderen Ausführungsbeispielen eine beliebige Anzahl (einschließlich Null) von Weitwinkelkameras 1270 am Fahrzeug 1200 geben. In mindestens einem Ausführungsbeispiel kann eine beliebige Anzahl von Ferndistanzkamera(s) 1298 (z. B. ein Weitwinkel-Stereokamerapaar) zur tiefenbasierten Objekterkennung verwendet werden, insbesondere für Objekte, für die noch kein neuronales Netzwerk trainiert wurde. In mindestens einem Ausführungsbeispiel kann/können die Ferndistanzkamera(s) 1298 auch zur Objekterkennung und -klassifizierung sowie zur grundlegenden Objektverfolgung verwendet werden.
  • In mindestens einem Ausführungsbeispiel kann auch eine beliebige Anzahl von Stereokamera(s) 1268 in einer nach vorne gerichteten Konfiguration enthalten sein. In mindestens einem Ausführungsbeispiel kann eine oder mehrere der Stereokamera(s) 1268 eine integrierte Steuereinheit umfassen, die eine skalierbare Verarbeitungseinheit umfasst, die eine programmierbare Logik („FPGA“) und einen Mehrkern-Mikroprozessor mit einer integrierten Controller Area Network („CAN“)- oder Ethernet-Schnittstelle auf einem einzigen Chip bereitstellen kann. In mindestens einem Ausführungsbeispiel kann eine solche Einheit verwendet werden, um eine 3D-Karte der Umgebung des Fahrzeugs 1200 zu generieren, einschließlich einer Abschätzung der Entfernung für alle Punkte im Bild. In mindestens einem Ausführungsbeispiel kann eine oder mehrere der Stereokamera(s) 1268 ohne Einschränkung kompakte(n) Stereosicht-Sensor(en) umfassen, die ohne Einschränkung zwei Kameralinsen (je eine links und rechts) und einen Bildverarbeitungschip enthalten können, der den Abstand zwischen Fahrzeug 1200 und Zielobjekt messen und generierte Informationen (z. B. Metadaten) verwenden kann, um autonome Notbrems- und Spurhaltewarnfunktionen zu aktivieren. In mindestens einem Ausführungsbeispiel können auch andere Arten von Stereokameras 1268 zusätzlich oder alternativ zu den hier beschriebenen verwendet werden.
  • In mindestens einem Ausführungsbeispiel können Kameras mit einem Sichtfeld, das Teile der Umgebung seitlich des Fahrzeugs 1200 einschließt (z. B. Seitenkameras), für die Umgebungsansicht verwendet werden und Informationen bereitstellen, die zum Erstellen und Aktualisieren des Belegungsgitters sowie zum Generieren von Seitenaufprallwarnungen verwendet werden. In mindestens einem Ausführungsbeispiel könnte(n) die Umgebungskamera(s) 1274 (z. B. vier Umgebungskameras 1274, wie in 12B gezeigt) am Fahrzeug 1200 positioniert werden. Die Umgebungskamera(s) 1274 kann/können ohne Einschränkung eine beliebige Anzahl und Kombination von Weitwinkelkamera(s) 1270, Fischaugenkamera(s), 360-Grad-Kamera(s) und/oder dergleichen umfassen. In mindestens einem Ausführungsbeispiel können beispielsweise vier Fischaugenkameras an der Vorderseite, der Rückseite und den Seiten des Fahrzeugs 1200 positioniert sein. In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 drei Surround-Kamera(s) 1274 (z.B. links, rechts und hinten) verwenden und eine oder mehrere andere Kamera(s) (z.B. eine nach vorne gerichtete Kamera) als vierte Surround-View-Kamera nutzen.
  • In mindestens einem Ausführungsbeispiel können Kameras mit einem Sichtfeld, das Teile der Umgebung hinter dem Fahrzeug 1200 einschließt (z. B. Rückfahrkameras), für die Einparkhilfe, die Umgebungsansicht, die Heckkollisionswarnungen und die Erstellung und Aktualisierung des Belegungsgitters verwendet werden. In mindestens einem Ausführungsbeispiel kann eine Vielzahl von Kameras verwendet werden, einschließlich, aber nicht beschränkt auf Kameras, die auch als nach vorne gerichtete Kamera(s) geeignet sind (z.B. Ferndistanzkameras 1298 und/oder Mitteldistanzkamera(s) 1276, Stereokamera(s) 1268), Infrarotkamera(s) 1272, usw.), wie hier beschrieben.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 im System 12B für Inferenz- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen für ein neuronales Netzwerk, Funktionen und/oder Architekturen eines neuronalen Netzwerks oder hier beschriebenen Anwendungsfällen für ein neuronales Netzwerk berechnet wurden. In mindestens einem Ausführungsbeispiel kann ein neuronales Netzwerk, das von dem autonomen Fahrzeug 1200 verwendet wird, unter Verwendung von Inferenzierung durch ein oder mehrere neuronale Netzwerke arbeiten, die jeweils durch zwei oder mehr Verarbeitungskerne trainiert werden, um Teile des neuronalen Netzwerks separat parallel zu trainieren, wie hierin beschrieben.
  • 12C ist ein Blockdiagramm, das eine Beispielsystemarchitektur für das autonome Fahrzeug 1200 von 12A gemäß mindestens einem Ausführungsbeispiel zeigt. In mindestens einem Ausführungsbeispiel sind alle Komponenten, Merkmale und Systeme des Fahrzeugs 1200 in 12C so gezeigt, dass sie über einen Bus 1202 verbunden sind. In mindestens einem Ausführungsbeispiel kann der Bus 1202 ohne Einschränkung eine CAN-Datenschnittstelle (hier alternativ als „CAN-Bus“ bezeichnet) umfassen. In mindestens einem Ausführungsbeispiel kann ein CAN ein Netzwerk innerhalb des Fahrzeugs 1200 sein, das zur Unterstützung der Steuerung verschiedener Merkmale und Funktionen des Fahrzeugs 1200 verwendet wird, wie z. B. die Betätigung von Bremsen, Beschleunigung, Bremsen, Lenkung, Scheibenwischern, usw. In mindestens einem Ausführungsbeispiel kann der Bus 1202 so konfiguriert sein, dass er Dutzende oder sogar Hunderte von Knoten aufweist, von denen jeder seine eigene eindeutige Kennung hat (z.B. eine CAN-ID). In mindestens einem Ausführungsbeispiel kann der Bus 1202 ausgelesen werden, um den Lenkradwinkel, die Fahrgeschwindigkeit, die Motordrehzahl pro Minute (RPM), die Tastenpositionen und/oder andere Fahrzeugstatusanzeigen zu ermitteln. In mindestens einem Ausführungsbeispiel kann der Bus 1202 ein CAN-Bus sein, der ASIL B-konform ist.
  • In mindestens einem Ausführungsbeispiel können zusätzlich zu oder alternativ zu CAN auch FlexRay und/oder Ethernet verwendet werden. In mindestens einem Ausführungsbeispiel kann es eine beliebige Anzahl von Bussen 1202 geben, die ohne Einschränkung null oder mehr CAN-Busse, null oder mehr FlexRay-Busse, null oder mehr Ethernet-Busse und/oder null oder mehr andere Arten von Bussen mit einem anderen Protokoll umfassen können. In mindestens einem Ausführungsbeispiel können zwei oder mehr Busse 1202 verwendet werden, um unterschiedliche Funktionen auszuführen, und/oder sie können für Redundanz verwendet werden. Zum Beispiel kann ein erster Bus 1202 für die Kollisionsvermeidungsfunktionalität und ein zweiter Bus 1202 für die Betätigungssteuerung verwendet werden. In mindestens einem Ausführungsbeispiel kann jeder Bus 1202 mit beliebigen Komponenten des Fahrzeugs 1200 kommunizieren, und zwei oder mehr Busse 1202 können mit denselben Komponenten kommunizieren. In mindestens einem Ausführungsbeispiel kann jedes von einer beliebigen Anzahl von System(en) auf Chip(s) („SoC(s)“) 1204, jedes von Steuergerät(en) 1236 und/oder jeder Rechner innerhalb des Fahrzeugs Zugang zu denselben Eingabedaten haben (z.B. Eingaben von Sensoren des Fahrzeugs 1200) und kann mit einem gemeinsamen Bus, wie dem CAN-Bus, verbunden sein.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 ein oder mehrere Steuergerät(e) 1236 enthalten, wie sie hier in Bezug auf 12A beschrieben sind. Steuergerät(e) 1236 können für eine Vielzahl von Funktionen verwendet werden. In mindestens einem Ausführungsbeispiel kann (können) das (die) Steuergerät(e) 1236 mit verschiedenen anderen Komponenten und Systemen des Fahrzeugs 1200 gekoppelt sein und kann (können) zur Steuerung des Fahrzeugs 1200, zur künstlichen Intelligenz des Fahrzeugs 1200, zum Infotainment für das Fahrzeug 1200 und/oder ähnlichem verwendet werden.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 eine beliebige Anzahl von SoCs 1204 enthalten. Jeder der SoCs 1204 kann, ohne Einschränkung, zentrale Verarbeitungseinheiten („CPU(s)“) 1206, Grafikverarbeitungseinheiten („GPU(s)“) 1208, Prozessor(en) 1210, Cache(s) 1212, Beschleuniger(s) 1214, Datenspeicher 1216 und/oder andere nicht gezeigte Komponenten und Merkmale umfassen. In mindestens einem Ausführungsbeispiel können die SoC(s) 1204 zur Steuerung des Fahrzeugs 1200 in einer Vielzahl von Plattformen und Systemen verwendet werden. Zum Beispiel können in mindestens einem Ausführungsbeispiel SoC(s) 1204 in einem System (z.B. System des Fahrzeugs 1200) mit einer High-Definition („HD“)-Karte 1222 kombiniert werden, die Kartenauffrischungen und/oder Aktualisierungen über die Netzwerkschnittstelle 1224 von einem oder mehreren Servern (in 12C nicht dargestellt) erhalten kann.
  • In mindestens einem Ausführungsbeispiel kann (können) die CPU(s) 1206 einen CPU-Cluster oder CPU-Komplex (hier alternativ als „CCPLEX“ bezeichnet) umfassen. In mindestens einem Ausführungsbeispiel kann (können) die CPU(s) 1206 mehrere Kerne und/oder Level Two („L2“) Caches enthalten. In mindestens einem Ausführungsbeispiel kann (können) die CPU(s) 1206 beispielsweise acht Kerne in einer kohärenten Multiprozessorkonfiguration umfassen. In mindestens einem Ausführungsbeispiel kann (können) die CPU(s) 1206 vier Dual-Core-Cluster umfassen, wobei jeder Cluster über einen dedizierten L2-Cache verfügt (z. B. einen 2 MB L2-Cache). In mindestens einem Ausführungsbeispiel kann/können die CPU(s) 1206 (z.B. CCPLEX) so konfiguriert sein, dass sie den gleichzeitigen Clusterbetrieb unterstützen, so dass jede Kombination von Clustern der CPU(s) 1206 zu jeder Zeit aktiv sein kann.
  • In mindestens einem Ausführungsbeispiel können eine oder mehrere CPU(s) 1206 Energieverwaltungsfunktionen implementieren, die ohne Einschränkung eines oder mehrere der folgenden Merkmale umfassen: Einzelne Hardwareblöcke können im Leerlauf automatisch getaktet werden, um dynamische Energie zu sparen; jeder Kerntakt kann getaktet werden, wenn der Kern aufgrund der Ausführung von Wait for Interrupt („WFI“)/Wait for Event („WFE“)-Befehlen nicht aktiv Befehle ausführt, jeder Kern kann unabhängig stromgesteuert sein; jeder Kern-Cluster kann unabhängig taktgesteuert sein, wenn alle Kerne taktgesteuert oder stromgesteuert sind; und/oder jeder Kern-Cluster kann unabhängig stromgesteuert sein, wenn alle Kerne stromgesteuert sind. In mindestens einem Ausführungsbeispiel kann/können die CPU(s) 1206 weiter einen verbesserten Algorithmus für die Verwaltung von Energiezuständen implementieren, bei dem zulässige Energiezustände und erwartete Aufwachzeiten spezifiziert werden und Hardware/Mikrocode den besten Energiezustand für Kern, Cluster und CCPLEX bestimmt. In mindestens einem Ausführungsbeispiel können Verarbeitungskerne vereinfachte Sequenzen für die Eingabe des Energiezustands in Software unterstützen, wobei die Arbeit an den Mikrocode ausgelagert wird.
  • In mindestens einem Ausführungsbeispiel kann (können) die GPU(s) 1208 eine integrierte GPU umfassen (hier alternativ als „iGPU“ bezeichnet). In mindestens einem Ausführungsbeispiel kann (können) die GPU(s) 1208 programmierbar sein und für parallele Arbeitslasten effizient sein. In mindestens einem Ausführungsbeispiel kann (können) die GPU(s) 1208 einen erweiterten Tensor-Befehlssatz verwenden. In mindestens einem Ausführungsbeispiel kann (können) GPU(s) 1208 einen oder mehrere Streaming-Mikroprozessoren enthalten, wobei jeder Streaming-Mikroprozessor einen Level-1-Cache („L1“) enthalten kann (z. B. einen L 1 -Cache mit mindestens 96 KB Speicherkapazität) und zwei oder mehr Streaming-Mikroprozessoren können sich einen L2-Cache teilen (z. B. einen L2-Cache mit einer Speicherkapazität von 512 KB). In mindestens einem Ausführungsbeispiel kann (können) die GPU(s) 1208 mindestens acht Streaming-Mikroprozessoren umfassen. In mindestens einem Ausführungsbeispiel kann (können) die GPU(s) 1208 eine oder mehrere Programmierschnittstellen (API(s)) für Berechnungen verwenden. In mindestens einem Ausführungsbeispiel kann/können GPU(s) 1208 eine oder mehrere parallele Rechnerplattformen und/oder Programmiermodelle (z.B. NVIDIAs CUDA) verwenden.
  • In mindestens einem Ausführungsbeispiel kann eine oder mehrere der GPU(s) 1208 für die beste Leistung in automobilen und eingebetteten Anwendungsfällen energieoptimiert sein. In einem Ausführungsbeispiel könnte(n) die GPU(s) 1208 beispielsweise auf einem Fin-Feldeffekttransistor („FinFET“) hergestellt werden. In mindestens einem Ausführungsbeispiel kann jeder Streaming-Mikroprozessor eine Anzahl von in mehrere Blöcke unterteilten gemischt-präzisen Verarbeitungskernen enthalten. So könnten beispielsweise 64 PF32-Kerne und 32 PF64-Kerne in vier Verarbeitungsblöcke unterteilt werden, ohne darauf beschränkt zu sein. In mindestens einem Ausführungsbeispiel könnten jedem Verarbeitungsblock 16 FP32 Kerne, 8 FP64 Kerne, 16 INT32 Kerne, zwei NVIDIA TENSOR COREs mit gemischter Genauigkeit für Deep Learning-Matrixarithmetik, ein Level Zero („L0“) Befehlscache, ein Warp Planer, eine Verteilereinheit und/oder eine 64 KB große Registerdatei zugewiesen werden. In mindestens einem Ausführungsbeispiel können Streaming-Mikroprozessoren unabhängige parallele Ganzzahl- und Gleitkommadatenpfade enthalten, um eine effiziente Ausführung von Arbeitslasten mit einer Mischung aus Berechnungen und Adressierungsberechnungen bereitzustellen. In mindestens einem Ausführungsbeispiel können Streaming-Mikroprozessoren eine unabhängige Thread-Planungsfunktion enthalten, um eine feinkörnigere Synchronisierung und Zusammenarbeit zwischen parallelen Threads zu ermöglichen. In mindestens einem Ausführungsbeispiel können Streaming-Mikroprozessoren einen kombinierten L1-Datencache und eine gemeinsam genutzte Speichereinheit enthalten, um die Leistung zu verbessern und gleichzeitig die Programmierung zu vereinfachen.
  • In mindestens einem Ausführungsbeispiel können eine oder mehrere der GPU(s) 1208 einen Speicher mit hoher Bandbreite („HBM“) und/oder ein 16-GB-HBM2-Speicher-Subsystem umfassen, um in einigen Ausführungsbeispielen eine Spitzen-Speicherbandbreite von etwa 900 GB/Sekunde bereitzustellen. In mindestens einem Ausführungsbeispiel kann zusätzlich oder alternativ zum HBM-Speicher ein synchroner Grafik-Direktzugriffsspeicher („SGRAM“) verwendet werden, wie z. B. ein synchroner Grafik-Doppeldatenraten-Direktzugriffsspeicher vom Typ 5 („GDDR5“).
  • In mindestens einem Ausführungsbeispiel kann (können) die GPU(s) 1208 eine einheitliche Speichertechnologie umfassen. In mindestens einem Ausführungsbeispiel kann die Unterstützung von Adressübersetzungsdiensten („ATS“) verwendet werden, damit die GPU(s) 1208 direkt auf Seitentabellen der CPU(s) 1206 zugreifen können. In mindestens einem Ausführungsbeispiel kann eine Adressübersetzungsanforderung an die CPU(s) 1206 übermittelt werden, wenn die Speicherverwaltungseinheit („MMU“) der GPU(s) 1208 einen Fehler feststellt. Als Reaktion darauf kann die CPU(s) 1206 in ihren Seitentabellen nach einer virtuell-physikalischen Adresszuordnung suchen und die Übersetzung in mindestens einem Ausführungsbeispiel an die GPU(s) 1208 zurückübertragen. In mindestens einem Ausführungsbeispiel kann die Unified-Memory-Technologie einen einzigen vereinheitlichten virtuellen Adressraum für den Speicher sowohl der CPU(s) 1206 als auch der GPU(s) 1208 ermöglichen, wodurch die Programmierung der GPU(s) 1208 und die Portierung von Anwendungen auf die GPU(s) 1208 vereinfacht wird.
  • In mindestens einem Ausführungsbeispiel kann die GPU(s) 1208 eine beliebige Anzahl von Zugriffszählern enthalten, die die Häufigkeit des Zugriffs der GPU(s) 1208 auf den Speicher anderer Prozessoren verfolgen können. In mindestens einem Ausführungsbeispiel können Zugriffszähler dazu beitragen, dass Speicherseiten in den physischen Speicher desjenigen Prozessors verschoben werden, der am häufigsten auf Seiten zugreift, wodurch die Effizienz für gemeinsam genutzte Speicherbereiche von Prozessoren verbessert wird.
  • In mindestens einem Ausführungsbeispiel können ein oder mehrere SoC(s) 1204 eine beliebige Anzahl von Cache(s) 1212 enthalten, einschließlich der hier beschriebenen. In mindestens einem Ausführungsbeispiel könnte(n) der/die Cache(s) 1212 beispielsweise einen Level-3-Cache („L3“) umfassen, der sowohl für die CPU(s) 1206 als auch für die GPU(s) 1208 verfügbar ist (z. B. der sowohl mit der/den CPU(s) 1206 als auch mit der/den GPU(s) 1208 verbunden ist). In mindestens einem Ausführungsbeispiel kann (können) der (die) Cache(s) 1212 einen Write-Back-Cache umfassen, der die Zustände von Zeilen verfolgen kann, beispielsweise durch Verwendung eines Cache-Kohärenzprotokolls (z. B. MEI, MESI, MSI usw.). In mindestens einem Ausführungsbeispiel kann der L3-Cache 4 MB oder mehr umfassen, je nach Ausführungsbeispiel, obwohl auch kleinere Cache-Größen verwendet werden können.
  • In mindestens einem Ausführungsbeispiel kann einer oder mehrere der SoC(s) 1204 einen oder mehrere Beschleuniger 1214 (z. B. Hardware-Beschleuniger, Software-Beschleuniger oder eine Kombination davon) enthalten. In mindestens einem Ausführungsbeispiel kann (können) der (die) SoC(s) 1204 einen Hardware-BeschleunigungsCluster enthalten, der optimierte Hardware-Beschleuniger und/oder einen großen On-Chip-Speicher umfassen kann. In mindestens einem Ausführungsbeispiel kann ein großer On-Chip-Speicher (z. B. 4 MB SRAM) dem Hardware-Beschleunigungscluster ermöglichen, neuronale Netzwerke und andere Berechnungen zu beschleunigen. In mindestens einem Ausführungsbeispiel kann der Hardware-Beschleunigungscluster zur Ergänzung der GPU(s) 1208 und zur Entlastung einiger Aufgaben der GPU(s) 1208 verwendet werden (z. B. um mehr Zyklen der GPU(s) 1208 für die Durchführung anderer Aufgaben freizugeben). In mindestens einem Ausführungsbeispiel könnte(n) der/die Beschleuniger 1214 für gezielte Arbeitslasten (z. B. Wahrnehmung, Faltungsneuronale Netzwerke („CNNs“), rekurrente neuronale Netzwerke („RNNs“) usw.) verwendet werden, die stabil genug sind, um sich für eine Beschleunigung zu eignen. In mindestens einem Ausführungsbeispiel kann ein CNN ein regionenbasiertes oder regionales neuronales Netzwerk („RCNNs“) und Fast-RCNNs (z.B. für die Objekterkennung) oder eine andere Art von CNN umfassen.
  • In mindestens einem Ausführungsbeispiel kann (können) der (die) Beschleuniger 1214 (z. B. Hardware-Beschleunigungscluster) einen Deep-Learning-Beschleuniger („DLA“) umfassen. DLA(s) können ohne Einschränkung eine oder mehrere Tensor Processing Units („TPUs“) enthalten, die so konfiguriert sein können, dass sie zusätzliche zehn Billionen Operationen pro Sekunde für Deep-Learning-Anwendungen und Inferenzierung bereitstellen. In mindestens einem Ausführungsbeispiel kann es sich bei den TPUs um Beschleuniger handeln, die für die Ausführung von Bildverarbeitungsfunktionen (z. B. für CNNs, RCNNs usw.) konfiguriert und optimiert sind. Die DLA(s) können weiter für einen bestimmten Satz von Typen neuronaler Netzwerke und Gleitkommaoperationen sowie für Inferenzen optimiert sein. In mindestens einem Ausführungsbeispiel kann das Design von DLA(s) mehr Leistung pro Millimeter bereitstellen als ein typischer Allzweck-GPU und übertrifft in der Regel die Leistung einer CPU bei weitem. In mindestens einem Ausführungsbeispiel kann (können) die TPU(s) mehrere Funktionen ausführen, einschließlich einer Einzelinstanz-Faltungsfunktion, die beispielsweise INT8-, INT16- und FP16-Datentypen sowohl für Merkmale als auch für Gewichte sowie Postprozessorfunktionen unterstützt. In mindestens einem Ausführungsbeispiel können DLA(s) schnell und effizient neuronale Netzwerke, insbesondere CNNs, auf verarbeiteten oder unverarbeiteten Daten für eine Vielzahl von Funktionen ausführen, einschließlich, zum Beispiel und ohne Einschränkung: ein CNN für die Identifizierung und Erkennung von Objekten unter Verwendung von Daten von Kamerasensoren; ein CNN für die Abstandsabschätzung unter Verwendung von Daten von Kamerasensoren; ein CNN für die Erkennung und Identifizierung von Einsatzfahrzeugen und die Erkennung unter Verwendung von Daten von Mikrofonen 1296; ein CNN für die Gesichtserkennung und die Identifizierung von Fahrzeugbesitzern unter Verwendung von Daten von Kamerasensoren; und/oder ein CNN für sicherheitsrelevante und/oder sicherheitsbezogene Ereignisse.
  • In mindestens einem Ausführungsbeispiel können DLA(s) eine beliebige Funktion der GPU(s) 1208 ausführen, und durch Verwendung eines Inferenzbeschleunigers kann ein Entwickler beispielsweise entweder DLA(s) oder GPU(s) 1208 für eine beliebige Funktion vorsehen. In mindestens einem Ausführungsbeispiel kann der Entwickler beispielsweise die Verarbeitung von CNNs und Gleitkommaoperationen auf DLA(s) konzentrieren und andere Funktionen der GPU(s) 1208 und/oder anderen Beschleunigern 1214 überlassen.
  • In mindestens einem Ausführungsbeispiel kann (können) der (die) Beschleuniger 1214 (z. B. Hardware-Beschleunigungscluster) einen programmierbaren Bildverarbeitungsbeschleuniger („PVA“) umfassen, der hier alternativ auch als Computer-Vision-Beschleuniger bezeichnet werden kann. In mindestens einem Ausführungsbeispiel kann (können) der (die) PVA(s) so ausgelegt und konfiguriert sein, dass er (sie) Computer-Vision-Algorithmen für fortschrittliche Fahrerassistenzsysteme (ADAS") 1238, autonomes Fahren, Augmented-Reality-Anwendungen (AR") und/oder Virtual-Reality-Anwendungen (VR") beschleunigt (beschleunigen). PVA(s) können ein Gleichgewicht zwischen Leistung und Flexibilität bereitstellen. In mindestens einem Ausführungsbeispiel kann jede PVA beispielsweise und ohne Einschränkung eine beliebige Anzahl von Rechnerkernen mit reduziertem Befehlssatz („RISC“), direkten Speicherzugriff („DMA“) und/oder eine beliebige Anzahl von Vektorprozessoren umfassen.
  • In mindestens einem Ausführungsbeispiel können RISC-Kerne mit Bildsensoren (z.B. Bildsensoren einer der hierin beschriebenen Kameras), Bildsignalprozessor(en) und/oder ähnlichem interagieren. In mindestens einem Ausführungsbeispiel kann jeder der RISC-Kerne eine beliebige Menge an Speicher enthalten. In mindestens einem Ausführungsbeispiel können die RISC-Kerne je nach Ausführungsbeispiel eine beliebige Anzahl von Protokollen verwenden. In mindestens einem Ausführungsbeispiel können RISC-Kerne ein Echtzeitbetriebssystem („RTOS“) ausführen. In mindestens einem Ausführungsbeispiel können RISC-Kerne mit einem oder mehreren integrierten Geräten, anwendungsspezifischen integrierten Schaltungen („ASICs“) und/oder Speichergeräten implementiert werden. In mindestens einem Ausführungsbeispiel können RISC-Kerne beispielsweise einen BefehlsCache und/oder ein eng gekoppeltes RAM enthalten.
  • In mindestens einem Ausführungsbeispiel kann DMA es Komponenten der PVA(s) ermöglichen, unabhängig von der/den CPU(s) 1206 auf den Systemspeicher zuzugreifen. In mindestens einem Ausführungsbeispiel kann DMA eine beliebige Anzahl von Merkmalen unterstützen, die verwendet werden, um der PVA eine Optimierung bereitzustellen, einschließlich, aber nicht beschränkt auf die Unterstützung von mehrdimensionaler Adressierung und/oder zirkulärer Adressierung. In mindestens einem Ausführungsbeispiel kann DMA bis zu sechs oder mehr Dimensionen der Adressierung unterstützen, die, ohne Einschränkung, Blockbreite, Blockhöhe, Blocktiefe, horizontales Blockstepping, vertikales Blockstepping und/oder Tiefenstepping umfassen können.
  • In mindestens einem Ausführungsbeispiel können Vektorprozessoren programmierbare Prozessoren sein, die so konzipiert sein können, dass sie die Programmierung für Computer-Vision-Algorithmen effizient und flexibel ausführen und Signalverarbeitungsfunktionen bereitstellen. In mindestens einem Ausführungsbeispiel kann die PVA einen PVA-Kern und zwei Vektorverarbeitungs-Subsystem-Partitionen umfassen. In mindestens einem Ausführungsbeispiel kann der PVA-Kern ein Prozessor-Subsystem, DMA-Engine(s) (z.B. zwei DMA-Engines) und/oder andere Peripheriegeräte umfassen. In mindestens einem Ausführungsbeispiel kann das Vektorverarbeitungs-Subsystem als primäre-Engine der PVA arbeiten und eine Vektorverarbeitungseinheit („VPU“), einen Befehlscache und/oder einen Vektorspeicher (z. B. „VMEM“) umfassen. In mindestens einem Ausführungsbeispiel kann der VPU-Kern einen digitalen Signalprozessor umfassen, wie z. B. einen digitalen Signalprozessor mit einem einzigen Befehl und mehreren Daten („SIMD“) und sehr langen Befehlsworten („VLIW“). In mindestens einem Ausführungsbeispiel kann eine Kombination aus SIMD und VLIW den Durchsatz und die Geschwindigkeit erhöhen.
  • In mindestens einem Ausführungsbeispiel kann jeder der Vektorprozessoren einen Befehlscache enthalten und mit einem dedizierten Speicher gekoppelt sein. Folglich kann in mindestens einem Ausführungsbeispiel jeder Vektorprozessor so konfiguriert sein, dass er unabhängig von anderen Vektorprozessoren arbeitet. In mindestens einem Ausführungsbeispiel können Vektorprozessoren, die in einer bestimmten PVA enthalten sind, so konfiguriert sein, dass sie Datenparallelität verwenden. So können in mindestens einem Ausführungsbeispiel eine Vielzahl von Vektorprozessoren in einer einzigen PVA denselben Computer-Vision-Algorithmus ausführen, jedoch für unterschiedliche Bildbereiche. In mindestens einem Ausführungsbeispiel können in einer bestimmten PVA enthaltene Vektorprozessoren gleichzeitig verschiedene Computer-Vision-Algorithmen für dasselbe Bild oder sogar verschiedene Algorithmen für aufeinanderfolgende Bilder oder Teile eines Bildes ausführen. In mindestens einem Ausführungsbeispiel kann unter anderem eine beliebige Anzahl von PVAs in einem Hardware-Beschleunigungscluster enthalten sein und eine beliebige Anzahl von Vektorprozessoren kann in jeder PVA enthalten sein. In mindestens einem Ausführungsbeispiel kann/können die PVA(s) zusätzlichen Fehlerkorrekturcode-Speicher („ECC“) enthalten, um die Gesamtsystemsicherheit zu erhöhen.
  • In mindestens einem Ausführungsbeispiel kann (können) der (die) Beschleuniger 1214 (z. B. ein Hardware-Beschleunigungscluster) ein On-Chip-Computer-Vision-Netzwerk und einen statischen Direktzugriffsspeicher („SRAM“) enthalten, um einen SRAM mit hoher Bandbreite und geringer Latenz für den (die) Beschleuniger 1214 bereitzustellen. In mindestens einem Ausführungsbeispiel kann der On-Chip-Speicher mindestens 4 MB SRAM umfassen, der beispielsweise und ohne Einschränkung aus acht feldkonfigurierbaren Speicherblöcken besteht, auf die sowohl PVA als auch DLA zugreifen können. In mindestens einem Ausführungsbeispiel kann jedes Paar von Speicherblöcken eine erweiterte Peripheriebusschnittstelle („APB“), Konfigurationsschaltungen, einen Controller und einen Multiplexer umfassen. In mindestens einem Ausführungsbeispiel kann jeder beliebige Speichertyp verwendet werden. In mindestens einem Ausführungsbeispiel können PVA und DLA über einen Backbone auf den Speicher zugreifen, der PVA und DLA einen Hochgeschwindigkeitszugriff auf den Speicher bereitstellt. In mindestens einem Ausführungsbeispiel kann das Backbone ein Rechner-Vision-Netzwerk auf dem Chip umfassen, das PVA und DLA mit dem Speicher verbindet (z.B. unter Verwendung von APB).
  • In mindestens einem Ausführungsbeispiel kann das Rechner-Vision-Netzwerk auf dem Chip eine Schnittstelle enthalten, die vor der Übertragung von Steuersignalen/Adressen/Daten feststellt, dass sowohl PVA als auch DLA einsatzbereite und gültige Signale bereitstellen. In mindestens einem Ausführungsbeispiel kann eine Schnittstelle getrennte Phasen und getrennte Kanäle für die Übertragung von Steuersignalen/Adressen/Daten sowie eine Burst-Kommunikation für die kontinuierliche Datenübertragung bereitstellen. In mindestens einem Ausführungsbeispiel kann eine Schnittstelle den Normen der Internationalen Organisation für Normung („ISO“) 26262 oder der Internationalen Elektrotechnischen Kommission („IEC“) 61508 entsprechen, obwohl auch andere Normen und Protokolle verwendet werden können.
  • In mindestens einem Ausführungsbeispiel kann einer oder mehrere der SoC(s) 1204 einen Hardwarebeschleuniger für Echtzeit-Raytracing enthalten. In mindestens einem Ausführungsbeispiel kann der Echtzeit-Strahlenverfolgungs-Hardwarebeschleuniger verwendet werden, um schnell und effizient Positionen und Ausmaße von Objekten (z.B. innerhalb eines Weltmodells) zu bestimmen, um Echtzeit-Visualisierungssimulationen zu generieren, für RADAR-Signalinterpretation, für Schallausbreitungssynthese und/oder - analyse, für die Simulation von SONAR-Systemen, für allgemeine Wellenausbreitungssimulationen, für den Vergleich mit LIDAR-Daten zum Zweck der Lokalisierung und/oder für andere Funktionen und/oder für andere Zwecke.
  • In mindestens einem Ausführungsbeispiel haben der/die Beschleuniger 1214 (z.B. Hardware-Beschleuniger-Cluster) ein großes Spektrum an Anwendungen für das autonome Fahren. In mindestens einem Ausführungsbeispiel kann PVA ein programmierbarer Bildverarbeitungsbeschleuniger sein, der für wichtige Verarbeitungsschritte in ADAS und autonomen Fahrzeugen verwendet werden kann. In mindestens einem Ausführungsbeispiel eignen sich die Fähigkeiten von PVA gut für algorithmische Bereiche, die eine vorhersehbare Verarbeitung bei geringem Stromverbrauch und niedriger Latenz benötigen. Mit anderen Worten: PVA eignet sich gut für halbdichte oder dichte reguläre Berechnungen, selbst bei kleinen Datensätzen, die vorhersehbare Laufzeiten mit geringer Latenz und geringem Stromverbrauch erfordern. In mindestens einem Ausführungsbeispiel werden in autonomen Fahrzeugen, wie dem Fahrzeug 1200, PVAs entwickelt, um klassische Computer-Vision-Algorithmen auszuführen, da sie effizient bei der Objekterkennung sind und mit ganzzahligen mathematischen Verfahren arbeiten.
  • In mindestens einem Ausführungsbeispiel der Technologie wird die PVA beispielsweise verwendet, um Computer-Stereosehen durchzuführen. In mindestens einem Ausführungsbeispiel kann in einigen Beispielen ein auf semiglobalem Matching basierender Algorithmus verwendet werden, obwohl dies nicht als Einschränkung gedacht ist. In mindestens einem Ausführungsbeispiel wird bei Anwendungen für das autonome Fahren der Stufen 3 bis 5 die Bewegungsabschätzung/Stereo-Matching on-the-fly verwendet (z. B. Struktur aus Bewegung, Fußgängererkennung, Fahrspurerkennung usw.). In mindestens einem Ausführungsbeispiel kann die PVA eine Rechner-Stereosichtfunktion auf Eingaben von zwei monokularen Kameras ausführen.
  • In mindestens einem Ausführungsbeispiel kann PVA verwendet werden, um einen dichten optischen Fluss durchzuführen. Zum Beispiel könnte PVA in mindestens einem Ausführungsbeispiel RADAR-Rohdaten verarbeiten (z.B. unter Verwendung einer 4D Fast Fourier Transform), um verarbeitete RADAR-Daten bereitzustellen. In mindestens einem Ausführungsbeispiel wird PVA für die Flugzeittiefenverarbeitung verwendet, indem Flugzeit-Rohdaten verarbeitet werden, um z.B. verarbeitete Flugzeitdaten bereitzustellen.
  • In mindestens einem Ausführungsbeispiel kann DLA verwendet werden, um jede Art von Netzwerk zu betreiben, um die Kontrolle und die Fahrsicherheit zu verbessern, einschließlich beispielsweise und ohne Einschränkung ein neuronales Netzwerk, das ein Maß an Vertrauen für jede Objekterkennung ausgibt. In mindestens einem Ausführungsbeispiel kann die Konfidenz als Wahrscheinlichkeit dargestellt oder interpretiert werden, oder als Bereitstellen einer relativen „Gewicht“ jeder Erkennung im Vergleich zu anderen Erkennungen. In mindestens einem Ausführungsbeispiel ermöglicht die Konfidenz es dem System, weitere Entscheidungen darüber zu treffen, welche Erkennungen als echte positive Erkennungen und welche als falsch-positive Erkennungen betrachtet werden sollten. In mindestens einem Ausführungsbeispiel kann ein System beispielsweise einen Schwellenwert für die Vertrauenswürdigkeit festlegen und nur Erkennungen, die den Schwellenwert überschreiten, als echte positive Erkennungen betrachten. In einem Ausführungsbeispiel, in dem ein automatisches Notbremssystem („AEB“) verwendet wird, würden falsch-positive Erkennungen das Fahrzeug veranlassen, automatisch eine Notbremsung durchzuführen, was natürlich unerwünscht ist. In mindestens einem Ausführungsbeispiel können sehr sichere Erkennungen als Auslöser für AEB in Betracht gezogen werden. In mindestens einem Ausführungsbeispiel kann DLA ein neuronales Netzwerk zur Regression des Konfidenzwertes einsetzen. In mindestens einem Ausführungsbeispiel kann das neuronale Netzwerk als Eingabe zumindest eine Teilmenge von Parametern verwenden, wie z.B. die Abmessungen des Begrenzungsrahmens, die (z.B. von einem anderen Teilsystem) erhaltene Schätzung der Bodenebene, die Ausgabe des/der IMU-Sensors/en 1266, die mit der Orientierung des Fahrzeugs 1200 korreliert, die Entfernung, die 3D-Positionsschätzungen des Objekts, die vom neuronalen Netzwerk und/oder anderen Sensoren (z.B. LIDAR-Sensor(en) 1264 oder RADAR-Sensor(en) 1260) erhalten werden, und andere.
  • In mindestens einem Ausführungsbeispiel können ein oder mehrere SoC(s) 1204 einen oder mehrere Datenspeicher 1216 (z.B. Speicher) enthalten. In mindestens einem Ausführungsbeispiel kann (können) der (die) Datenspeicher 1216 ein On-Chip-Speicher des (der) SoC(s) 1204 sein, der (die) neuronale(n) Netzwerke speichern kann (können), die auf GPU(s) 1208 und/oder DLA ausgeführt werden sollen. In mindestens einem Ausführungsbeispiel kann (können) der (die) Datenspeicher 1216 groß genug sein, um mehrere Instanzen von neuronalen Netzwerken aus Redundanz- und Sicherheitsgründen zu speichern. In mindestens einem Ausführungsbeispiel kann/können der/die Datenspeicher 1212 L2 oder L3 Cache(s) umfassen.
  • In mindestens einem Ausführungsbeispiel können ein oder mehrere SoC(s) 1204 eine beliebige Anzahl von Prozessor(en) 1210 (z.B. eingebettete Prozessoren) umfassen. Der (die) Prozessor(en) 1210 kann (können) einen Boot- und Energieverwaltungsprozessor enthalten, der ein dedizierter Prozessor und ein Subsystem sein kann, um die Boot-Energie- und Verwaltungsfunktionen und die damit verbundene Sicherheitsdurchsetzung zu handhaben. In mindestens einem Ausführungsbeispiel kann der Boot- und Energieverwaltungsprozessor ein Teil der Bootsequenz des/der SoC(s) 1204 sein und Energieverwaltungsdienste zur Laufzeit bereitstellen. In mindestens einem Ausführungsbeispiel kann der Prozessor für die Boot-Energieversorgung und -Verwaltung die Programmierung von Takt und Spannung, die Unterstützung bei Übergängen in einen Zustand mit niedriger Leistung, die Verwaltung von SoC(s) 1204-Temperaturen und Temperatursensoren und/oder die Verwaltung von SoC(s) 1204-Leistungszuständen bereitstellen. In mindestens einem Ausführungsbeispiel kann jeder Temperatursensor als Ringoszillator implementiert werden, dessen Ausgabefrequenz proportional zur Temperatur ist, und SoC(s) 1204 können Ringoszillatoren verwenden, um die Temperaturen von CPU(s) 1206, GPU(s) 1208 und/oder Beschleuniger(n) 1214 zu erfassen. In mindestens einem Ausführungsbeispiel kann, wenn festgestellt wird, dass die Temperaturen einen Schwellenwert überschreiten, der Boot- und Energieverwaltungsprozessor in eine Temperaturfehlerroutine eintreten und die SoC(s) 1204 in einen Zustand mit geringerer Leistung versetzen und/oder das Fahrzeug 1200 in einen Chauffeur-zu-sicherem-Halt-Modus versetzen (z.B. das Fahrzeug 1200 zu einem sicheren Halt bringen).
  • In mindestens einem Ausführungsbeispiel kann/können der/die Prozessor(en) 1210 weiter einen Satz eingebetteter Prozessoren enthalten, die als Audioverarbeitungs-Engine dienen können. In mindestens einem Ausführungsbeispiel kann die Audioverarbeitungs-Engine ein Audio-Subsystem sein, das eine vollständige Hardware-Unterstützung für Mehrkanal-Audio über mehrere Schnittstellen und eine Vielzahl von Audio-E/A-Schnittstellen ermöglicht. In mindestens einem Ausführungsbeispiel ist die Audioverarbeitungs-Engine ein dedizierter Prozessorkern mit einem digitalen Signalprozessor mit dediziertem RAM.
  • In mindestens einem Ausführungsbeispiel kann (können) der (die) Prozessor(en) 1210 weiterhin eine „Always-on“-Prozessor-Engine enthalten, die die notwendigen Hardware-Funktionen zur Unterstützung von Sensor-Management mit geringem Stromverbrauch und Wake-Use-Cases bereitstellen kann. In mindestens einem Ausführungsbeispiel kann die „always on“-Prozessor-Engine ohne Einschränkung einen Prozessorkern, ein eng gekoppeltes RAM, unterstützende Peripheriegeräte (z.B. Timer und Interrupt-Controller), verschiedene E/A-Controller-Peripheriegeräte und eine Routing-Logik umfassen.
  • In mindestens einem Ausführungsbeispiel kann/können der/die Prozessor(en) 1210 weiter eine Safety-Cluster-Engine enthalten, die ohne Einschränkung ein dediziertes Prozessor-Subsystem zur Handhabung des Sicherheitsmanagements für Automobilanwendungen umfasst. In mindestens einem Ausführungsbeispiel kann die Safety-Cluster-Engine ohne Einschränkung zwei oder mehr Prozessorkerne, einen eng gekoppelten Arbeitsspeicher, unterstützende Peripheriegeräte (z. B. Zeitgeber, einen Interrupt-Controller usw.) und/oder eine Routing-Logik umfassen. In einem Sicherheitsmodus können zwei oder mehr Kerne in mindestens einem Ausführungsbeispiel in einem Lockstep-Modus arbeiten und als ein einziger Kern mit einer Vergleichslogik zur Erkennung von Unterschieden zwischen ihren Operationen funktionieren. In mindestens einem Ausführungsbeispiel kann (können) der (die) Prozessor(en) 1210 weiter eine Echtzeit-Kamera-Engine enthalten, die ohne Einschränkung ein dediziertes Prozessor-Subsystem zur Handhabung des Echtzeit-Kameramanagements umfassen kann. In mindestens einem Ausführungsbeispiel kann (können) der (die) Prozessor(en) 1210 ferner einen Signalprozessor mit hohem Dynamikbereich umfassen, der ohne Einschränkung einen Bildsignalprozessor umfassen kann, der eine Hardware-Engine ist, die Teil der Kameraverarbeitungspipeline ist.
  • In mindestens einem Ausführungsbeispiel kann (können) der (die) Prozessor(en) 1210 einen Videobildkompositor enthalten, der ein Verarbeitungsblock sein kann (z. B. auf einem Mikroprozessor implementiert), der Videonachverarbeitungsfunktionen implementiert, die von einer Videowiedergabeanwendung benötigt werden, um das endgültige Bild für das Playerfenster zu erzeugen. In mindestens einem Ausführungsbeispiel kann der Videobildkompositor eine Linsenverzerrungskorrektur an der/den Weitwinkelkamera(s) 1270, der/den Surround-Kamera(s) 1274 und/oder an den Sensoren der Überwachungskamera(s) in der Kabine vornehmen. In mindestens einem Ausführungsbeispiel wird/werden der/die Sensor(en) der Überwachungskamera(n) in der Kabine vorzugsweise von einem neuronalen Netzwerk überwacht, das auf einer anderen Instanz des SoC 1204 läuft und so konfiguriert ist, dass es Ereignisse in der Kabine erkennt und entsprechend reagiert. In mindestens einem Ausführungsbeispiel kann ein System im Fahrzeuginneren ohne Einschränkung Lippenlesen durchführen, um den Mobilfunkdienst zu aktivieren und einen Anruf zu tätigen, E-Mails zu diktieren, das Fahrzeugziel zu ändern, das Infotainmentsystem des Fahrzeugs und dessen Einstellungen zu aktivieren oder zu ändern oder sprachgesteuertes Surfen im Internet bereitzustellen. In mindestens einem Ausführungsbeispiel stehen dem Fahrer bestimmte Funktionen zur Verfügung, wenn das Fahrzeug in einem autonomen Modus betrieben wird, und sind ansonsten deaktiviert.
  • In mindestens einem Ausführungsbeispiel kann der Videobildkompositor eine verbesserte zeitliche Rauschunterdrückung sowohl für die räumliche als auch für die zeitliche Rauschunterdrückung enthalten. In mindestens einem Ausführungsbeispiel, in dem Bewegung in einem Video auftritt, gewichtet die Rauschunterdrückung die räumlichen Informationen entsprechend und verringert das Gewicht der Informationen, die von benachbarten Bildern bereitgestellt werden. In mindestens einem Ausführungsbeispiel, in dem ein Bild oder ein Teil eines Bildes keine Bewegung enthält, kann die vom Videobildkompositor durchgeführte zeitliche Rauschunterdrückung Informationen aus dem vorherigen Bild verwenden, um das Rauschen im aktuellen Bild zu reduzieren.
  • In mindestens einem Ausführungsbeispiel kann der Videobildkompositor auch so konfiguriert sein, dass er eine Stereorektifizierung der eingegebenen Stereobild-Frames durchführt. In mindestens einem Ausführungsbeispiel kann der Videobildkompositor weiter für die Zusammensetzung der Benutzeroberfläche verwendet werden, wenn der Desktop des Betriebssystems in Gebrauch ist und die GPU(s) 1208 nicht zum kontinuierlichen Rendern neuer Oberflächen erforderlich sind. In mindestens einem Ausführungsbeispiel, wenn die GPU(s) 1208 eingeschaltet sind und aktiv 3D-Rendering durchführen, kann der Videobildkompositor verwendet werden, um die GPU(s) 1208 zu entlasten, um die Leistung und Reaktionsfähigkeit zu verbessern.
  • In mindestens einem Ausführungsbeispiel können ein oder mehrere SoC(s) 1204 weiterhin eine serielle MIPI-Kameraschnittstelle zum Empfang von Video und Eingaben von Kameras, eine Hochgeschwindigkeitsschnittstelle und/oder einen Videoeingabeblock enthalten, der für Kamera- und verwandte Pixeleingabefunktionen verwendet werden kann. In mindestens einem Ausführungsbeispiel können ein oder mehrere SoC(s) 1204 ferner einen oder mehrere Eingabe/Ausgabe-Controller enthalten, die durch Software gesteuert werden können und für den Empfang von E/A-Signalen verwendet werden können, die keiner bestimmten Rolle zugeordnet sind.
  • In mindestens einem Ausführungsbeispiel können ein oder mehrere SoC(s) 1204 weiter eine breite Palette von Peripherieschnittstellen enthalten, um die Kommunikation mit Peripheriegeräten, Audio-Encodern/Decodern („Codecs“), Energieverwaltung und/oder anderen Geräten zu ermöglichen. SoC(s) 1204 kann/können verwendet werden, um Daten von Kameras (z. B. über Gigabit Multimedia Serial Link und Ethernet), Sensoren (z. B. LIDAR-Sensor(en) 1264, RADAR-Sensor(en) 1260 usw., die über Ethernet angeschlossen werden können), Daten vom Bus 1202 (z. B. Geschwindigkeit des Fahrzeugs 1200, Lenkradposition usw.), Daten von GNSS-Sensor(en) 1258 (z. B. über Ethernet oder CAN-Bus angeschlossen) usw. zu verarbeiten. In mindestens einem Ausführungsbeispiel können ein oder mehrere SoC(s) 1204 weiter dedizierte Hochleistungs-Massenspeicher-Controller enthalten, die ihre eigenen DMA-Engines enthalten können und die verwendet werden können, um die CPU(s) 1206 von Routine-Datenverwaltungsaufgaben zu entlasten.
  • In mindestens einem Ausführungsbeispiel kann (können) der (die) SoC(s) 1204 eine End-to-End-Plattform mit einer flexiblen Architektur sein, die die Automatisierungsebenen 3 bis 5 umfasst und dadurch eine umfassende funktionale Sicherheitsarchitektur bereitstellt, die Computer Vision und ADAS-Techniken für Diversität und Redundanz nutzt und eine Plattform für einen flexiblen, zuverlässigen Fahrsoftware-Stack zusammen mit Deep-Learning-Tools bereitstellt. In mindestens einem Ausführungsbeispiel können die SoC(s) 1204 schneller, zuverlässiger und sogar energie- und platzsparender als herkömmliche Systeme sein. Zum Beispiel können in mindestens einem Ausführungsbeispiel der/die Beschleuniger 1214 in Kombination mit CPU(s) 1206, GPU(s) 1208 und Datenspeicher(n) 1216 eine schnelle, effiziente Plattform für autonome Fahrzeuge der Stufe 3-5 bereitstellen.
  • In mindestens einem Ausführungsbeispiel können Computer-Vision-Algorithmen auf CPUs ausgeführt werden, die unter Verwendung von High-Level-Programmiersprachen, wie z. B. der Programmiersprache C, konfiguriert werden können, um eine Vielzahl von Verarbeitungsalgorithmen für eine Vielzahl von visuellen Daten auszuführen. In mindestens einem Ausführungsbeispiel sind CPUs jedoch oft nicht in der Lage, die Leistungsanforderungen vieler Computer-Vision-Anwendungen zu erfüllen, z. B. in Bezug auf die Ausführungszeit und den Stromverbrauch. In mindestens einem Ausführungsbeispiel sind viele CPUs nicht in der Lage, komplexe Objekterkennungsalgorithmen in Echtzeit auszuführen, die in fahrzeuginternen ADAS-Anwendungen und in praktischen autonomen Fahrzeugen der Stufe 3-5 verwendet werden.
  • Die hier beschriebenen Ausführungsbeispiele ermöglichen es, mehrere neuronale Netzwerke gleichzeitig und/oder nacheinander auszuführen und die Ergebnisse miteinander zu kombinieren, um die Funktionalität des autonomen Fahrens der Stufe 3-5 zu ermöglichen. Zum Beispiel kann in mindestens einem Ausführungsbeispiel ein CNN, das auf einer DLA oder einer diskreten GPU (z. B. GPU(s) 1220) ausgeführt wird, eine Text- und Worterkennung umfassen, die es dem Supercomputer ermöglicht, Verkehrszeichen zu lesen und zu verstehen, einschließlich Zeichen, für die das neuronale Netzwerk nicht speziell trainiert wurde. In mindestens einem Ausführungsbeispiel kann DLA weiter ein neuronales Netzwerk enthalten, das in der Lage ist, Verkehrszeichen zu identifizieren, zu interpretieren und deren semantisches Verständnis bereitzustellen und dieses semantische Verständnis an Wegplanungsmodule weiterzugeben, die auf CPU Complex laufen.
  • In mindestens einem Ausführungsbeispiel können mehrere neuronale Netzwerke gleichzeitig betrieben werden, wie z.B. beim Fahren der Stufe 3, 4 oder 5. Zum Beispiel kann in mindestens einem Ausführungsbeispiel ein Warnschild mit der Aufschrift „Vorsicht: Blinkende Lichter deuten auf Vereisung hin“ zusammen mit einem elektrischen Licht unabhängig oder gemeinsam von mehreren neuronalen Netzwerken interpretiert werden. In mindestens einem Ausführungsbeispiel kann das Schild selbst von einem ersten eingesetzten neuronalen Netzwerk (z. B. einem trainierten neuronalen Netzwerk) als Verkehrsschild identifiziert werden, der Text „Blinkende Lichter deuten auf Glatteis hin“ kann von einem zweiten eingesetzten neuronalen Netzwerk interpretiert werden, das die (vorzugsweise auf einem CPU-Komplex ausgeführte) Software für die Wegplanung des Fahrzeugs darüber informiert, dass, wenn blinkende Lichter erkannt werden, Glatteis vorliegt. In mindestens einem Ausführungsbeispiel kann das Blinklicht durch ein drittes neuronales Netzwerk über mehrere Frames hinweg identifiziert werden, das die Wegplanungssoftware des Fahrzeugs über das Vorhandensein (oder Fehlen) von Blinklichtern informiert. In mindestens einem Ausführungsbeispiel können alle drei neuronalen Netzwerke gleichzeitig laufen, beispielsweise innerhalb von DLA und/oder auf GPU(s) 1208.
  • In mindestens einem Ausführungsbeispiel kann ein CNN zur Gesichtserkennung und zur Identifizierung des Fahrzeugbesitzers Daten von Kamerasensoren verwenden, um die Anwesenheit eines autorisierten Fahrers und/oder Besitzers des Fahrzeugs 1200 zu identifizieren. In mindestens einem Ausführungsbeispiel kann eine „always on“-Sensorverarbeitungs-Engine verwendet werden, um das Fahrzeug zu entriegeln, wenn sich der Besitzer der Fahrertür nähert und die Lichter einschaltet, und im Sicherheitsmodus, um das Fahrzeug zu deaktivieren, wenn der Besitzer das Fahrzeug verlässt. Auf diese Weise stellen die SoC(s) 1204 Sicherheit gegen Diebstahl und/oder Carjacking bereit.
  • In mindestens einem Ausführungsbeispiel kann ein CNN zur Erkennung und Identifizierung von Einsatzfahrzeugen Daten von Mikrofonen 1296 verwenden, um Sirenen von Einsatzfahrzeugen zu erkennen und zu identifizieren. In mindestens einem Ausführungsbeispiel verwenden SoC(s) 1204 CNN zur Klassifizierung von Umwelt- und Stadtgeräuschen sowie zur Klassifizierung visueller Daten. In mindestens einem Ausführungsbeispiel wird CNN, das auf DLA läuft, darauf trainiert, die relative Annäherungsgeschwindigkeit von Einsatzfahrzeugen zu erkennen (z. B. durch Nutzung des Dopplereffekts). In mindestens einem Ausführungsbeispiel kann CNN auch so trainiert werden, dass es Einsatzfahrzeuge identifiziert, die spezifisch für den lokalen Bereich sind, in dem das Fahrzeug unterwegs ist, wie von GNSS-Sensor(en) 1258 identifiziert. In mindestens einem Ausführungsbeispiel wird CNN beim Einsatz in Europa versuchen, europäische Sirenen zu erkennen, und beim Einsatz in den Vereinigten Staaten wird CNN versuchen, nur nordamerikanische Sirenen zu identifizieren. In mindestens einem Ausführungsbeispiel kann, sobald ein Einsatzfahrzeug erkannt wird, ein Steuerprogramm verwendet werden, um eine Sicherheitsroutine für Einsatzfahrzeuge auszuführen, das Fahrzeug zu verlangsamen, an den Straßenrand zu fahren, das Fahrzeug zu parken und/oder das Fahrzeug im Leerlauf laufen zu lassen, mit Hilfe von Ultraschallsensor(en) 1262, bis das/die Einsatzfahrzeug(e) vorbeifahren.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 eine oder mehrere CPU(s) 1218 (z.B. diskrete CPU(s) oder dCPU(s)) enthalten, die über eine Hochgeschwindigkeitsverbindung (z.B. PCIe) mit dem/den SoC(s) 1204 gekoppelt sein können. In mindestens einem Ausführungsbeispiel kann (können) die CPU(s) 1218 beispielsweise einen X86-Prozessor umfassen. CPU(s) 1218 kann/können verwendet werden, um eine Vielzahl von Funktionen auszuführen, einschließlich der Schlichtung potenziell inkonsistenter Ergebnisse zwischen ADAS-Sensoren und SoC(s) 1204 und/oder der Überwachung des Status und des Zustands des/der Controller(s) 1236 und/oder eines Infotainment-Systems auf einem Chip („Infotainment-SoC“) 1230, zum Beispiel.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 GPU(s) 1220 (z.B. diskrete GPU(s) oder dGPU(s)) enthalten, die mit dem/den SoC(s) 1204 über eine Hochgeschwindigkeitsverbindung (z.B. NVIDIAs NVLINK) gekoppelt sein können. In mindestens einem Ausführungsbeispiel kann/können GPU(s) 1220 zusätzliche künstliche Intelligenzfunktionalität bereitstellen, beispielsweise durch Ausführen redundanter und/oder unterschiedlicher neuronaler Netzwerke, und kann/können verwendet werden, um neuronale Netzwerke zu trainieren und/oder zu aktualisieren, basierend zumindest teilweise auf Eingaben (z.B. Sensordaten) von Sensoren des Fahrzeugs 1200.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 weiter eine Netzwerkschnittstelle 1224 umfassen, die ohne Einschränkung eine oder mehrere drahtlose Antennen 1226 (z.B. eine oder mehrere drahtlose Antennen 1226 für verschiedene Kommunikationsprotokolle, wie eine Mobilfunkantenne, eine Bluetooth-Antenne, usw.) umfassen kann. In mindestens einem Ausführungsbeispiel kann die Netzwerkschnittstelle 1224 verwendet werden, um eine drahtlose Verbindung über das Internet mit der Cloud (z. B. mit Server(n) und/oder anderen Netzwerkgeräten), mit anderen Fahrzeugen und/oder mit Rechnern (z. B. Client-Geräten von Fahrgästen) zu ermöglichen. In mindestens einem Ausführungsbeispiel kann zur Kommunikation mit anderen Fahrzeugen eine direkte Verbindung zwischen dem Fahrzeug 120 und einem anderen Fahrzeug und/oder eine indirekte Verbindung (z. B. über Netzwerke und über das Internet) hergestellt werden. In mindestens einem Ausführungsbeispiel können direkte Verbindungen über eine Fahrzeug-zu-Fahrzeug-Kommunikationsverbindung bereitgestellt werden. Die Fahrzeug-zu-Fahrzeug-Kommunikationsverbindung kann dem Fahrzeug 1200 Informationen über Fahrzeuge in der Nähe des Fahrzeugs 1200 bereitstellen (z.B. Fahrzeuge vor, auf der Seite und/oder hinter dem Fahrzeug 1200). In mindestens einem Ausführungsbeispiel kann die vorgenannte Funktionalität Teil einer kooperativen adaptiven Geschwindigkeitsregelungsfunktion des Fahrzeugs 1200 sein.
  • In mindestens einem Ausführungsbeispiel kann die Netzwerkschnittstelle 1224 einen SoC enthalten, der eine Modulations- und Demodulationsfunktionalität bereitstellt und es dem/den Controller(n) 1236 ermöglicht, über drahtlose Netzwerke zu kommunizieren. In mindestens einem Ausführungsbeispiel kann die Netzwerkschnittstelle 1224 ein Hochfrequenz-Frontend für die Aufwärtskonvertierung von Basisband auf Hochfrequenz und die Abwärtskonvertierung von Hochfrequenz auf Basisband enthalten. In mindestens einem Ausführungsbeispiel können die Frequenzumwandlungen auf jede technisch mögliche Weise durchgeführt werden. Beispielsweise können Frequenzumwandlungen durch bekannte Verfahren und/oder unter Verwendung von Superheterodyn-Verfahren durchgeführt werden. In mindestens einem Ausführungsbeispiel kann die Hochfrequenz-Front-End-Funktionalität durch einen separaten Chip bereitgestellt werden. In mindestens einem Ausführungsbeispiel kann die Netzwerkschnittstelle eine drahtlose Funktionalität für die Kommunikation über LTE, WCDMA, UMTS, GSM, CDMA2000, Bluetooth, Bluetooth LE, Wi Fi, Z-Wave, ZigBee, LoRaWAN und/oder andere drahtlose Protokolle umfassen.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 weiter einen oder mehrere Datenspeicher 1228 umfassen, die ohne Einschränkung einen Speicher außerhalb des Chips (z.B. außerhalb des SoC(s) 1204) umfassen können. In mindestens einem Ausführungsbeispiel kann (können) der (die) Datenspeicher 1228 ohne Einschränkung ein oder mehrere Speicherelemente umfassen, darunter RAM, SRAM, dynamischer Direktzugriffsspeicher („DRAM“), Video-Direktzugriffsspeicher („VRAM“), Flash, Festplatten und/oder andere Komponenten und/oder Geräte, die mindestens ein Bit an Daten speichern können.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 weiter GNSS-Sensor(en) 1258 (z.B. GPS und/oder unterstützte GPS-Sensoren) enthalten, um bei der Kartierung, Wahrnehmung, Generierung von Belegungsrastern und/oder Pfadplanungsfunktionen zu helfen. In mindestens einem Ausführungsbeispiel kann eine beliebige Anzahl von GNSS-Sensor(en) 1258 verwendet werden, einschließlich, zum Beispiel und ohne Einschränkung, ein GPS, das einen USB-Anschluss mit einer Ethernet-zuseriellen (z.B. RS-232) Brücke verwendet.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 weiter RADAR-Sensor(en) 1260 enthalten. Der/die RADAR-Sensor(en) 1260 kann/können vom Fahrzeug 1200 zur Fahrzeugerkennung über große Entfernungen verwendet werden, selbst bei Dunkelheit und/oder schlechten Wetterbedingungen. In mindestens einem Ausführungsbeispiel können die RADAR-Funktionssicherheitsstufen ASIL B sein. Der/die RADAR-Sensor(en) 1260 kann/können CAN und/oder den Bus 1202 (z. B. zur Übertragung von Daten, die von dem/den RADAR-Sensor(en) 1260 generiert wurden) zur Steuerung und zum Zugriff auf Objektverfolgungsdaten verwenden, wobei in einigen Ausführungsbeispielen der Zugriff auf Rohdaten über Ethernet möglich ist. In mindestens einem Ausführungsbeispiel kann eine breite Palette von RADAR-Sensortypen verwendet werden. Zum Beispiel und ohne Einschränkung kann/können der/die RADAR-Sensor(en) 1260 für die Verwendung von Front-, Heck- und Seiten-RADAR geeignet sein. In mindestens einem Ausführungsbeispiel handelt es sich bei einem oder mehreren der RADAR-Sensoren 1260 um Puls-Doppler-RADAR-Sensor(en).
  • In mindestens einem Ausführungsbeispiel kann (können) der (die) RADAR-Sensor(en) 1260 verschiedene Konfigurationen umfassen, wie z.B. große Reichweite mit engem Sichtfeld, kurze Reichweite mit breitem Sichtfeld, seitliche Abdeckung mit kurzer Reichweite, usw. In mindestens einem Ausführungsbeispiel kann RADAR mit großer Reichweite für eine adaptive Geschwindigkeitsregelungsfunktion verwendet werden. In mindestens einem Ausführungsbeispiel können RADAR-Systeme mit großer Reichweite ein breites Sichtfeld bereitstellen, das durch zwei oder mehr unabhängige Abtastungen, z. B. innerhalb eines Bereichs von 250 m, realisiert wird. In mindestens einem Ausführungsbeispiel kann/können der/die RADAR-Sensor(en) 1260 dabei helfen, zwischen statischen und sich bewegenden Objekten zu unterscheiden, und kann/können vom ADAS-System 1238 zur Notbremsunterstützung und zur Vorwärtskollisionswarnung verwendet werden. Sensoren 1260, die in einem RADAR-System mit großer Reichweite enthalten sind, können ohne Einschränkung ein monostatisches multimodales RADAR mit mehreren (z. B. sechs oder mehr) festen RADAR-Antennen und einer Hochgeschwindigkeits-CAN- und FlexRay-Schnittstelle umfassen. In mindestens einem Ausführungsbeispiel mit sechs Antennen können die mittleren vier Antennen ein fokussiertes Strahlenmuster erzeugen, das dazu dient, die Umgebung des Fahrzeugs bei höheren Geschwindigkeiten mit minimalen Störungen durch den Verkehr auf den benachbarten Fahrspuren zu erfassen. In mindestens einem Ausführungsbeispiel können die beiden anderen Antennen das Sichtfeld erweitern, so dass Fahrzeuge, die in die 1200-Fahrspur einfahren oder diese verlassen, schnell erfasst werden können.
  • In mindestens einem Ausführungsbeispiel können RADAR-Systeme mit mittlerer Reichweite beispielsweise eine Reichweite von bis zu 160 m (vorne) oder 80 m (hinten) und ein Sichtfeld von bis zu 42 Grad (vorne) oder 150 Grad (hinten) aufweisen. In mindestens einem Ausführungsbeispiel können Kurzstrecken-RADAR-Systeme ohne Einschränkung eine beliebige Anzahl von RADAR-Sensoren 1260 umfassen, die an beiden Enden des hinteren Stoßfängers installiert werden können. In mindestens einem Ausführungsbeispiel kann ein RADAR-Sensorsystem, wenn es an beiden Enden des hinteren Stoßfängers installiert ist, zwei Strahlen erzeugen, die den toten Winkel im hinteren Bereich und neben dem Fahrzeug ständig überwachen. In mindestens einem Ausführungsbeispiel können RADAR-Systeme mit kurzer Reichweite im ADAS-System 1238 zur Erkennung des toten Winkels und/oder zur Unterstützung beim Spurwechsel verwendet werden.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 weiterhin Ultraschallsensor(en) 1262 enthalten. Der/die Ultraschallsensor(en) 1262, der/die vorne, hinten und/oder an den Seiten des Fahrzeugs 1200 angeordnet sein kann/können, kann/können zur Einparkhilfe und/oder zur Erstellung und Aktualisierung eines Belegungsrasters verwendet werden. In mindestens einem Ausführungsbeispiel kann eine Vielzahl von Ultraschallsensoren 1262 verwendet werden, und unterschiedliche Ultraschallsensoren 1262 können für unterschiedliche Erfassungsbereiche (z. B. 2,5 m, 4 m) verwendet werden. In mindestens einem Ausführungsbeispiel kann/können der/die Ultraschallsensor(en) 1262 in funktionalen Sicherheitsstufen von ASIL B arbeiten.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 LIDAR-Sensor(en) 1264 enthalten. Der/die LIDAR-Sensor(en) 1264 kann/können für Objekt- und Fußgängererkennung, Notbremsung, Kollisionsvermeidung und/oder andere Funktionen verwendet werden. In mindestens einem Ausführungsbeispiel kann (können) der (die) LIDAR-Sensor(en) 1264 der funktionalen Sicherheitsstufe ASIL B entsprechen. In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 mehrere LIDAR-Sensoren 1264 (z.B. zwei, vier, sechs, usw.) enthalten, die Ethernet verwenden können (z.B. um Daten an einen Gigabit-Ethernet-Switch bereitzustellen).
  • In mindestens einem Ausführungsbeispiel kann/können der/die LIDAR-Sensor(en) 1264 in der Lage sein, eine Liste von Objekten und deren Entfernungen für ein 360-Grad-Sichtfeld bereitzustellen. In mindestens einem Ausführungsbeispiel kann/können der/die handelsübliche(n) LIDAR-Sensor(en) 1264 eine beworbene Reichweite von ca. 100 m haben, mit einer Genauigkeit von 2 cm bis 3 cm, und mit Unterstützung für eine 100 Mbps Ethernet-Verbindung, zum Beispiel. In mindestens einem Ausführungsbeispiel können ein oder mehrere nicht vorspringende LIDAR-Sensoren 1264 verwendet werden. In einem solchen Ausführungsbeispiel kann/können der/die LIDAR-Sensor(en) 1264 als ein kleines Gerät implementiert werden, das in die Front, das Heck, die Seiten und/oder die Ecken des Fahrzeugs 1200 eingebettet werden kann. In mindestens einem Ausführungsbeispiel kann/können der/die LIDAR-Sensor(en) 1264 in einem solchen Ausführungsbeispiel ein horizontales Sichtfeld von bis zu 120 Grad und ein vertikales Sichtfeld von 35 Grad bereitstellen, mit einer Reichweite von 200 m, selbst bei Objekten mit geringem Reflexionsvermögen. In mindestens einem Ausführungsbeispiel kann/können der/die frontmontierte(n) LIDAR-Sensor(en) 1264 für ein horizontales Sichtfeld zwischen 45 Grad und 135 Grad konfiguriert sein.
  • In mindestens einem Ausführungsbeispiel können auch LIDAR-Technologien, wie z.B. 3D Flash LIDAR, verwendet werden. 3D Flash LIDAR verwendet einen Laserblitz als Sendequelle, um die Umgebung des Fahrzeugs 1200 bis zu einer Entfernung von etwa 200 m zu beleuchten. In mindestens einem Ausführungsbeispiel umfasst eine Flash-LIDAR-Einheit ohne Einschränkung einen Rezeptor, der die Laufzeit des Laserpulses und das reflektierte Licht auf jedem Pixel aufzeichnet, was wiederum der Entfernung von Fahrzeug 1200 zu Objekten entspricht. In mindestens einem Ausführungsbeispiel kann Flash-LIDAR es ermöglichen, mit jedem Laserblitz hochgenaue und verzerrungsfreie Bilder der Umgebung zu generieren. In mindestens einem Ausführungsbeispiel können vier Flash-LIDAR-Sensoren eingesetzt werden, einer auf jeder Seite des Fahrzeugs 1200. In mindestens einem Ausführungsbeispiel umfassen 3D-Blitz-LIDAR-Systeme ohne Einschränkung eine Festkörper-LIDAR-Kamera mit 3D-Star-Array, die außer einem Gebläse keine beweglichen Teile aufweist (z. B. ein nicht scannendes LIDAR-Gerät). In mindestens einem Ausführungsbeispiel kann das Flash-LIDAR-Gerät einen 5-Nanosekunden-Laserimpuls der Klasse I (augensicher) pro Bild verwenden und das reflektierte Laserlicht in Form von 3D-Entfernungspunktwolken und mitregistrierten Intensitätsdaten erfassen.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug weiter einen oder mehrere IMU-Sensoren 1266 enthalten. In mindestens einem Ausführungsbeispiel kann/können der/die IMU-Sensor(en) 1266 in der Mitte der Hinterachse des Fahrzeugs 1200 angeordnet sein. In mindestens einem Ausführungsbeispiel kann/können der/die IMU-Sensor(en) 1266 beispielsweise und ohne Einschränkung einen oder mehrere Beschleunigungsmesser, Magnetometer, Gyroskop(e), Magnetkompass(e) und/oder andere Sensortypen umfassen. In mindestens einem Ausführungsbeispiel, wie z. B. bei sechsachsigen Anwendungen, kann/können der/die IMU-Sensor(en) 1266 ohne Einschränkung Beschleunigungsmesser und Gyroskope umfassen. In mindestens einem Ausführungsbeispiel, wie z.B. in neunachsigen Anwendungen, kann (können) der (die) IMU-Sensor(en) 1266 ohne Einschränkung Beschleunigungsmesser, Gyroskope und Magnetometer umfassen.
  • In mindestens einem Ausführungsbeispiel kann/können der/die IMU-Sensor(en) 1266 als ein miniaturisiertes, hochleistungsfähiges GPS-gestütztes Trägheitsnavigationssystem („GPS/INS“) implementiert werden, das mikroelektromechanische Systeme („MEMS“) Trägheitssensoren, einen hochempfindlichen GPS-Empfänger und fortschrittliche Kalman-Filteralgorithmen kombiniert, um Abschätzungen von Position, Geschwindigkeit und Lage bereitzustellen. In mindestens einem Ausführungsbeispiel können IMU-Sensor(en) 1266 das Fahrzeug 1200 in die Lage versetzen, den Kurs abzuschätzen, ohne dass eine Eingabe von einem Magnetsensor erforderlich ist, indem Geschwindigkeitsänderungen vom GPS direkt mit dem/den IMU-Sensor(en) 1266 beobachtet und korreliert werden. In mindestens einem Ausführungsbeispiel können IMU-Sensor(en) 1266 und GNSS-Sensor(en) 1258 in einer einzigen integrierten Einheit kombiniert werden.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 ein oder mehrere Mikrofone 1296 enthalten, die im und/oder um das Fahrzeug 1200 herum angeordnet sind. In mindestens einem Ausführungsbeispiel kann (können) das (die) Mikrofon(e) 1296 unter anderem zur Erkennung und Identifizierung von Einsatzfahrzeugen verwendet werden.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 weiter eine beliebige Anzahl von Kameratypen enthalten, einschließlich Stereokamera(s) 1268, Weitwinkelkamera(s) 1270, Infrarotkamera(s) 1272, Umgebungskamera(s) 1274, Ferndistanzkamera(s) 1298, Mitteldistanzkamera(s) 1276 und/oder andere Kameratypen. In mindestens einem Ausführungsbeispiel können Kameras verwendet werden, um Bilddaten rund um den gesamten Umfang des Fahrzeugs 1200 zu erfassen. In mindestens einem Ausführungsbeispiel hängen die verwendeten Kameratypen vom Fahrzeug 1200 ab. In mindestens einem Ausführungsbeispiel kann eine beliebige Kombination von Kameratypen verwendet werden, um die erforderliche Abdeckung um das Fahrzeug 1200 bereitzustellen. In mindestens einem Ausführungsbeispiel kann die Anzahl der Kameras je nach Ausführungsbeispiel unterschiedlich sein. In mindestens einem Ausführungsbeispiel könnte das Fahrzeug 1200 beispielsweise sechs Kameras, sieben Kameras, zehn Kameras, zwölf Kameras oder eine andere Anzahl von Kameras umfassen. Die Kameras können, als Beispiel und ohne Einschränkung, Gigabit Multimedia Serial Link („GMSL“) und/oder Gigabit Ethernet unterstützen. In mindestens einem Ausführungsbeispiel ist jede der Kameras detaillierter beschrieben als in 12A und 12B.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 weiter einen oder mehrere Vibrationssensoren 1242 umfassen. Der/die Vibrationssensor(en) 1242 kann/können Vibrationen von Komponenten des Fahrzeugs 1200, wie z.B. der Achse(n), messen. Zum Beispiel können in mindestens einem Ausführungsbeispiel Änderungen der Vibrationen eine Änderung der Straßenoberfläche anzeigen. In mindestens einem Ausführungsbeispiel, wenn zwei oder mehr Schwingungssensoren 1242 verwendet werden, können Unterschiede zwischen Schwingungen verwendet werden, um die Reibung oder den Schlupf der Straßenoberfläche zu bestimmen (z.B. wenn der Unterschied in der Schwingung zwischen einer angetriebenen Achse und einer frei drehenden Achse besteht).
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 das ADAS-System 1238 enthalten. Das ADAS-System 1238 kann in einigen Beispielen, ohne Einschränkung, ein SoC umfassen. In mindestens einem Ausführungsbeispiel kann das ADAS-System 1238 ohne Einschränkung eine beliebige Anzahl und Kombination eines autonomen/adaptiven/automatischen Geschwindigkeitsregelungssystems („ACC“), eines kooperativen adaptiven Geschwindigkeitsregelungssystems („CACC“), eines Vorwärts-Crash-Warnsystems („FCW“), eines automatischen Notbremssystems („AEB“) ein System zur Warnung vor dem Verlassen der Fahrspur („LDW“), ein Spurhalteassistent („LKA“), ein System zur Warnung vor dem toten Winkel („BSW“), ein System zur Warnung vor rückwärtigem Querverkehr („RCTW“), ein System zur Kollisionswarnung („CW“), ein System zur Spurzentrierung („LC“) und/oder andere Systeme, Merkmale und/oder Funktionen.
  • In mindestens einem Ausführungsbeispiel kann das ACC-System RADAR-Sensor(en) 1260, LIDAR-Sensor(en) 1264 und/oder eine beliebige Anzahl von Kameras verwenden. In mindestens einem Ausführungsbeispiel kann das ACC-System ein ACC-System in Längsrichtung und/oder ein ACC-System in Querrichtung umfassen. In mindestens einem Ausführungsbeispiel überwacht und steuert das ACC-System in Längsrichtung den Abstand zum unmittelbar vor dem Fahrzeug 1200 befindlichen Fahrzeug und passt die Geschwindigkeit des Fahrzeugs 1200 automatisch an, um einen sicheren Abstand zu vorausfahrenden Fahrzeugen einzuhalten. In mindestens einem Ausführungsbeispiel hält das ACC-System in Querrichtung den Abstand ein und rät dem Fahrzeug 1200, wenn nötig die Spur zu wechseln. In mindestens einem Ausführungsbeispiel ist das seitliche ACC-System mit anderen ADAS-Anwendungen wie LC und CW verbunden.
  • In mindestens einem Ausführungsbeispiel verwendet das CACC-System Informationen von anderen Fahrzeugen, die über die Netzwerkschnittstelle 1224 und/oder die Funkantenne(n) 1226 von anderen Fahrzeugen über eine drahtlose Verbindung oder indirekt über eine Netzwerkverbindung (z. B. über das Internet) empfangen werden können. In mindestens einem Ausführungsbeispiel können direkte Verbindungen durch eine Fahrzeugzu-Fahrzeug-Kommunikationsverbindung („V2V“) bereitgestellt werden, während indirekte Verbindungen durch eine Infrastruktur-zu-Fahrzeug-Kommunikationsverbindung („I2V“) bereitgestellt werden können. Im Allgemeinen stellt das V2V-Kommunikationskonzept Informationen über unmittelbar vorausfahrende Fahrzeuge bereit (z. B. Fahrzeuge, die sich unmittelbar vor und auf derselben Spur wie Fahrzeug 1200 befinden), während das I2V-Kommunikationskonzept Informationen über den weiter vorausfahrenden Verkehr bereitstellt. In mindestens einem Ausführungsbeispiel kann das CACC-System entweder eine oder beide 12V- und V2V-Informationsquellen enthalten. In mindestens einem Ausführungsbeispiel kann das CACC-System angesichts der Informationen über Fahrzeuge vor dem Fahrzeug 1200 zuverlässiger sein und hat das Potenzial, den Verkehrsfluss zu verbessern und Staus auf der Straße zu reduzieren.
  • In mindestens einem Ausführungsbeispiel ist das FCW-System so konzipiert, dass es den Fahrer vor einer Gefahr warnt, so dass er korrigierend eingreifen kann. In mindestens einem Ausführungsbeispiel verwendet das FCW-System eine nach vorne gerichtete Kamera und/oder RADAR-Sensor(en) 1260, die mit einem speziellen Prozessor, DSP, FPGA und/oder ASIC gekoppelt sind, der elektrisch mit der Rückmeldung an den Fahrer gekoppelt ist, wie z. B. ein Display, ein Lautsprecher und/oder eine vibrierende Komponente. In mindestens einem Ausführungsbeispiel kann das FCW-System eine Warnung bereitstellen, z. B. in Form eines Tons, einer optischen Warnung, einer Vibration und/oder eines schnellen Bremsimpulses.
  • In mindestens einem Ausführungsbeispiel erkennt das AEB-System eine drohende Vorwärtskollision mit einem anderen Fahrzeug oder einem anderen Objekt und kann automatisch die Bremsen betätigen, wenn der Fahrer nicht innerhalb eines bestimmten Zeit- oder Entfernungsparameters korrigierend eingreift. In mindestens einem Ausführungsbeispiel kann das AEB-System (eine) nach vorne gerichtete Kamera(s) und/oder (einen) RADAR-Sensor(s) 1260 verwenden, die mit einem speziellen Prozessor, DSP, FPGA und/oder ASIC gekoppelt sind. In mindestens einem Ausführungsbeispiel warnt das AEB-System, wenn es eine Gefahr erkennt, typischerweise zuerst den Fahrer, damit er korrigierende Maßnahmen ergreift, um eine Kollision zu vermeiden, und wenn der Fahrer keine korrigierenden Maßnahmen ergreift, kann das AEB-System automatisch die Bremsen betätigen, um die Auswirkungen der vorhergesagten Kollision zu verhindern oder zumindest abzuschwächen. In mindestens einem Ausführungsbeispiel kann das AEB-System Techniken wie eine dynamische Bremsunterstützung und/oder eine Crash-Imminent-Bremsung umfassen.
  • In mindestens einem Ausführungsbeispiel stellt das LDW-System visuelle, akustische und/oder taktile Warnungen bereit, wie z. B. Lenkrad- oder Sitzvibrationen, um den Fahrer zu warnen, wenn das Fahrzeug 1200 die Fahrbahnmarkierungen überquert. In mindestens einem Ausführungsbeispiel wird das LDW-System nicht aktiviert, wenn der Fahrer ein absichtliches Verlassen der Fahrspur anzeigt, indem er einen Blinker betätigt. In mindestens einem Ausführungsbeispiel kann das LDW-System nach vorne gerichtete Kameras verwenden, die mit einem dedizierten Prozessor, DSP, FPGA und/oder ASIC gekoppelt sind, der elektrisch mit dem Fahrerfeedback gekoppelt ist, z. B. mit einer Anzeige, einem Lautsprecher und/oder einer vibrierenden Komponente. In mindestens einem Ausführungsbeispiel ist das LKA-System eine Variation des LDW-Systems. Das LKA-System stellt eine Lenkeingabe oder eine Bremsung bereit, um das Fahrzeug 1200 zu korrigieren, wenn das Fahrzeug 1200 beginnt, die Fahrspur zu verlassen.
  • In mindestens einem Ausführungsbeispiel erkennt und warnt das BSW-System den Fahrer vor Fahrzeugen, die sich im toten Winkel des Fahrzeugs befinden. In mindestens einem Ausführungsbeispiel kann das BSW-System ein optisches, akustisches und/oder taktiles Warnsignal bereitstellen, um darauf hinzuweisen, dass das Zusammenführen oder Wechseln der Fahrspur unsicher ist. In mindestens einem Ausführungsbeispiel kann das BSW-System eine zusätzliche Warnung bereitstellen, wenn der Fahrer einen Blinker betätigt. In mindestens einem Ausführungsbeispiel kann das BSW-System (eine) nach hinten gerichtete Kamera(s) und/oder (einen) RADAR-Sensor(s) 1260 verwenden, der/die mit einem dedizierten Prozessor, DSP, FPGA und/oder ASIC gekoppelt ist/sind, der/die elektrisch mit dem Fahrerfeedback gekoppelt ist/sind, wie z.B. ein Display, ein Lautsprecher und/oder eine vibrierende Komponente.
  • In mindestens einem Ausführungsbeispiel kann das RCTW-System eine visuelle, akustische und/oder taktile Benachrichtigung bereitstellen, wenn ein Objekt außerhalb des Bereichs der Rückfahrkamera erkannt wird, wenn das Fahrzeug 1200 rückwärts fährt. In mindestens einem Ausführungsbeispiel umfasst das RCTW-System ein AEB-System, um sicherzustellen, dass die Fahrzeugbremsen betätigt werden, um einen Unfall zu vermeiden. In mindestens einem Ausführungsbeispiel kann das RCTW-System einen oder mehrere nach hinten gerichtete(n) RADAR-Sensor(en) 1260 verwenden, der/die mit einem speziellen Prozessor, DSP, FPGA und/oder ASIC gekoppelt ist/sind, der/die elektrisch mit dem Fahrerfeedback gekoppelt ist/sind, wie z. B. ein Display, ein Lautsprecher und/oder eine vibrierende Komponente.
  • In mindestens einem Ausführungsbeispiel kann es bei herkömmlichen ADAS-Systemen zu falsch-positiven Ergebnissen kommen, die für den Fahrer zwar ärgerlich und ablenkend sein können, aber in der Regel nicht katastrophal sind, da herkömmliche ADAS-Systeme den Fahrer warnen und ihm die Möglichkeit geben, zu entscheiden, ob ein Sicherheitszustand wirklich vorliegt und entsprechend zu handeln. In mindestens einem Ausführungsbeispiel entscheidet das Fahrzeug 1200 im Falle widersprüchlicher Ergebnisse selbst, ob das Ergebnis eines primären Rechners oder eines sekundären Rechners (z. B. des ersten Steuergeräts 1236 oder des zweiten Steuergeräts 1236) beachtet werden soll. In mindestens einem Ausführungsbeispiel kann das ADAS-System 1238 beispielsweise ein Backup- und/oder Sekundärrechner sein, der einem Rationalitätsmodul des Backup-Rechners Wahrnehmungsinformationen bereitstellt. In mindestens einem Ausführungsbeispiel kann der Rationalitätsmonitor des Backup-Rechners eine redundante, diverse Software auf Hardwarekomponenten ausführen, um Fehler bei der Wahrnehmung und bei dynamischen Fahraufgaben zu erkennen. In mindestens einem Ausführungsbeispiel können die Ausgaben des ADAS-Systems 1238 einer übergeordneten MCU bereitgestellt werden. In mindestens einem Ausführungsbeispiel bestimmt die überwachende MCU bei Konflikten zwischen den Ausgaben des primären Rechners und des sekundären Rechners, wie der Konflikt beigelegt werden kann, um einen sicheren Betrieb zu gewährleisten.
  • In mindestens einem Ausführungsbeispiel kann der primäre Rechner so konfiguriert sein, dass er der übergeordneten MCU einen Vertrauenswert bereitstellt, der das Vertrauen des primären Rechners in das gewählte Ergebnis angibt. In mindestens einem Ausführungsbeispiel kann die überwachende MCU der Anweisung des primären Rechners folgen, wenn der Konfidenzwert einen Schwellenwert überschreitet, unabhängig davon, ob der sekundäre Rechner ein widersprüchliches oder inkonsistentes Ergebnis bereitstellt. In mindestens einem Ausführungsbeispiel, in dem der Konfidenzwert den Schwellenwert nicht erreicht und in dem der primäre und der sekundäre Rechner unterschiedliche Ergebnisse (z. B. einen Konflikt) anzeigen, kann die überwachende MCU zwischen den Rechnern vermitteln, um das geeignete Ergebnis zu bestimmen.
  • In mindestens einem Ausführungsbeispiel kann die überwachende MCU so konfiguriert sein, dass sie ein neuronales Netzwerk bzw. neuronale Netzwerke ausführt, das bzw. die trainiert und so konfiguriert ist bzw. sind, dass es bzw. sie zumindest teilweise basierend auf den Ausgaben des primären Rechners und des sekundären Rechners die Bedingungen bestimmt bzw. bestimmen, unter denen der sekundäre Rechner einen Fehlalarm bereitstellt. In mindestens einem Ausführungsbeispiel kann das neuronale Netzwerk bzw. können die neuronalen Netzwerke in der übergeordneten MCU lernen, wann der Ausgabe des sekundären Rechners vertraut werden kann und wann nicht. Zum Beispiel kann in mindestens einem Ausführungsbeispiel, wenn der sekundäre Rechner ein RADAR-basiertes FCW-System ist, ein neuronales Netzwerk (bzw. neuronale Netzwerke) in der überwachenden MCU lernen, wenn das FCW-System metallische Objekte identifiziert, die in Wirklichkeit keine Gefahr darstellen, wie z. B. ein Abflussgitter oder ein Schachtdeckel, der einen Alarm auslöst. In mindestens einem Ausführungsbeispiel, wenn es sich bei dem sekundären Rechner um ein kamerabasiertes LDW-System handelt, kann ein neuronales Netzwerk in der überwachenden MCU lernen, das LDW-System außer Kraft zu setzen, wenn Radfahrer oder Fußgänger vorhanden sind und ein Verlassen der Fahrspur tatsächlich das sicherste Manöver ist. In mindestens einem Ausführungsbeispiel kann die überwachende MCU mindestens eine DLA oder eine GPU enthalten, die für die Ausführung von neuronalen Netzwerken mit assoziiertem Speicher geeignet ist. In mindestens einem Ausführungsbeispiel kann die Überwachungs-MCU eine Komponente des/der SoC(s) 1204 umfassen und/oder als solche enthalten sein.
  • In mindestens einem Ausführungsbeispiel kann das ADAS-System 1238 einen sekundären Rechner enthalten, der die ADAS-Funktionalität unter Verwendung herkömmlicher Regeln der Computer Vision ausführt. In mindestens einem Ausführungsbeispiel kann der sekundäre Rechner klassische Computer-Vision-Regeln (wenn-dann) verwenden, und das Vorhandensein eines neuronalen Netzwerks (von neuronalen Netzwerken) in der übergeordneten MCU kann die Zuverlässigkeit, Sicherheit und Leistung verbessern. In mindestens einem Ausführungsbeispiel wird das Gesamtsystem durch unterschiedliche Implementierungen und absichtliche Nicht-Identität fehlertoleranter, insbesondere gegenüber Fehlern, die durch Softwarefunktionen (oder Software-Hardware-Schnittstellen) veranlasst werden. Wenn beispielsweise in mindestens einem Ausführungsbeispiel ein Softwarefehler in der auf dem primären Rechner laufenden Software auftritt und ein nicht identischer Softwarecode, der auf dem sekundären Rechner läuft, dasselbe Gesamtergebnis bereitstellt, dann kann die überwachende MCU ein größeres Vertrauen haben, dass das Gesamtergebnis korrekt ist und der Fehler in der Software oder Hardware auf dem primären Rechner keinen wesentlichen Fehler veranlasst.
  • In mindestens einem Ausführungsbeispiel kann die Ausgabe des ADAS-Systems 1238 in den Wahrnehmungsblock des primären Rechners und/oder in den Block für dynamische Fahraufgaben des primären Rechners eingespeist werden. Wenn beispielsweise in mindestens einem Ausführungsbeispiel das ADAS-System 1238 eine Vorwärtscrash-Warnung aufgrund eines unmittelbar vorausliegenden Objekts anzeigt, kann der Wahrnehmungsblock diese Information bei der Identifizierung von Objekten verwenden. In mindestens einem Ausführungsbeispiel kann der sekundäre Rechner über ein eigenes neuronales Netzwerk verfügen, das trainiert ist und so das Risiko von Fehlalarmen reduziert, wie hier beschrieben.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 weiter einen Infotainment-SoC 1230 (z.B. ein bordeigenes Infotainment-System (IVI)) enthalten. Obwohl als SoC gezeigt und beschrieben, kann das Infotainment-System 1230 in mindestens einem Ausführungsbeispiel kein SoC sein und kann ohne Einschränkung zwei oder mehr diskrete Komponenten umfassen. In mindestens einem Ausführungsbeispiel kann das Infotainment-SoC 1230 ohne Einschränkung eine Kombination aus Hardware und Software umfassen, die verwendet werden kann, um Audio (z. B. Musik, einen persönlichen digitalen Assistenten, Navigationsanweisungen, Nachrichten, Radio usw.), Video (z. B. TV, Filme, Streaming usw.), Telefon (z. B., Freisprecheinrichtung), Netzwerkkonnektivität (z. B. LTE, WiFi usw.) und/oder Informationsdienste (z. B. Navigationssysteme, Einparkhilfe hinten, ein Radiodatensystem, fahrzeugbezogene Informationen wie Kraftstoffstand, zurückgelegte Gesamtstrecke, Bremskraftstoffstand, Ölstand, Tür öffnen/schließen, Luftfilterinformationen usw.) an Fahrzeug 1200. Der Infotainment-SoC 1230 könnte beispielsweise Radios, Plattenspieler, Navigationssysteme, Videoplayer, USB- und Bluetooth-Konnektivität, Carputer, In-Car-Entertainment, WiFi, Audiobedienelemente am Lenkrad, Freisprecheinrichtung, ein Heads-up-Display („HUD“), das HMI-Display 1234, ein Telematikgerät, ein Bedienfeld (z. B. zur Steuerung und/oder Interaktion mit verschiedenen Komponenten, Funktionen und/oder Systemen) und/oder andere Komponenten umfassen. In mindestens einem Ausführungsbeispiel kann der Infotainment-SoC 1230 weiter verwendet werden, um Informationen (z.B. visuell und/oder akustisch) für den/die Benutzer des Fahrzeugs bereitzustellen, wie z.B. Informationen vom ADAS-System 1238, Informationen zum autonomen Fahren, wie z.B. geplante Fahrzeugmanöver, Trajektorien, Umgebungsinformationen (z.B. Kreuzungsinformationen, Fahrzeuginformationen, Straßeninformationen, usw.), und/oder andere Informationen.
  • In mindestens einem Ausführungsbeispiel kann der Infotainment-SoC 1230 eine beliebige Menge und Art von GPU-Funktionalität enthalten. In mindestens einem Ausführungsbeispiel kann der Infotainment-SoC 1230 über den Bus 1202 (z.B. CAN-Bus, Ethernet, etc.) mit anderen Geräten, Systemen und/oder Komponenten des Fahrzeugs 1200 kommunizieren. In mindestens einem Ausführungsbeispiel kann der Infotainment-SoC 1230 mit einer Überwachungs-MCU gekoppelt sein, so dass die GPU des Infotainment-Systems einige Selbstfahrfunktionen ausführen kann, falls die primäre(n) Steuereinheit(en) 1236 (z. B. primäre und/oder Backup-Rechner des Fahrzeugs 1200) ausfallen. In mindestens einem Ausführungsbeispiel kann das Infotainment-SoC 1230 das Fahrzeug 1200 in einen Chauffeur-zu-sicherem-Halt-Modus versetzen, wie hierin beschrieben.
  • In mindestens einem Ausführungsbeispiel kann das Fahrzeug 1200 weiter ein Kombiinstrument 1232 (z. B. ein digitales Armaturenbrett, ein elektronisches Kombiinstrument, eine digitale Instrumententafel usw.) umfassen. Das Kombiinstrument 1232 kann, ohne Einschränkung, ein Steuergerät und/oder einen Supercomputer (z.B. ein diskretes Steuergerät oder einen Supercomputer) enthalten. In mindestens einem Ausführungsbeispiel kann das Kombiinstrument 1232 ohne Einschränkung eine beliebige Anzahl und Kombination von Instrumenten wie Tachometer, Kraftstoffstand, Öldruck, Drehzahlmesser, Kilometerzähler, Blinker, Schaltstellungsanzeige, Sicherheitsgurt-Warnleuchte(n), Feststellbrems-Warnleuchte(n), Motor-Fehlfunktionsleuchte(n), Informationen über zusätzliche Rückhaltesysteme (z. B. Airbag), Beleuchtungssteuerungen, Sicherheitssystemsteuerungen, Navigationsinformationen usw. enthalten. In einigen Beispielen können Informationen angezeigt und/oder gemeinsam genutzt werden von Infotainment SoC 1230 und Kombiinstrument 1232. In mindestens einem Ausführungsbeispiel kann das Kombiinstrument 1232 als Teil des Infotainment-SoC 1230 enthalten sein, oder umgekehrt.
  • Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzieren und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 im System 12C zum Inferenzieren oder für Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen des neuronalen Netzwerks, Funktionen und/oder Architekturen des neuronalen Netzwerks oder hier beschriebenen Anwendungsfällen des neuronalen Netzwerks berechnet wurden. In mindestens einem Ausführungsbeispiel kann ein neuronales Netzwerk, das von dem autonomen Fahrzeug 1200 verwendet wird, unter Verwendung von Inferenzieren durch ein oder mehrere neuronale Netzwerke arbeiten, die jeweils durch zwei oder mehr Verarbeitungskerne trainiert werden, um Teile des neuronalen Netzwerks separat parallel zu trainieren, wie hierin beschrieben.
  • 12D ist ein Diagramm eines Systems 1276 für die Kommunikation zwischen einem oder mehreren Cloud-basierten Servern und dem autonomen Fahrzeug 1200 aus 12A, gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel kann das System 1276 ohne Einschränkung den/die Server 1278, das/die Netzwerk(e) 1290 und eine beliebige Anzahl und Art von Fahrzeugen, einschließlich des Fahrzeugs 1200, umfassen. Der/die Server 1278 kann/können ohne Einschränkung eine Vielzahl von GPUs 1284(A)-1284(H) (hierin kollektiv als GPUs 1284 bezeichnet), PCIe-Switches 1282(A)-1282(H) (hierin kollektiv als PCIe-Switches 1282 bezeichnet) und/oder CPUs 1280(A)-1280(B) (hierin kollektiv als CPUs 1280 bezeichnet) umfassen. GPUs 1284, CPUs 1280 und PCIe-Switches 1282 können über Hochgeschwindigkeitsverbindungen miteinander verbunden werden, wie z. B. und ohne Einschränkung über die von NVIDIA entwickelten NVLink-Schnittstellen 1288 und/oder PCIe-Verbindungen 1286. In mindestens einem Ausführungsbeispiel sind die GPUs 1284 über ein NVLink- und/oder NVSwitch-SoC verbunden, und die GPUs 1284 und die PCIe-Switches 1282 sind über PCIe-Verbindungen verbunden. In mindestens einem Ausführungsbeispiel werden zwar acht GPUs 1284, zwei CPUs 1280 und vier PCIe-Switches 1282 gezeigt, dies ist jedoch nicht als Einschränkung zu verstehen. In mindestens einem Ausführungsbeispiel kann jeder der Server 1278 ohne Einschränkung eine beliebige Anzahl von GPUs 1284, CPUs 1280 und/oder PCIe-Switches 1282 in beliebiger Kombination enthalten. In mindestens einem Ausführungsbeispiel könnte(n) der/die Server 1278 beispielsweise jeweils acht, sechzehn, zweiunddreißig und/oder mehr GPUs 1284 umfassen.
  • In mindestens einem Ausführungsbeispiel kann/können der/die Server 1278 über das/die Netzwerk(e) 1290 und von Fahrzeugen Bilddaten empfangen, die für Bilder repräsentativ sind, die unerwartete oder veränderte Straßenbedingungen zeigen, wie z.B. kürzlich begonnene Straßenarbeiten. In mindestens einem Ausführungsbeispiel kann/können der/die Server 1278 über das/die Netzwerk(e) 1290 und an die Fahrzeuge neuronale Netzwerke 1292, aktualisierte neuronale Netzwerke 1292 und/oder Karteninformationen 1294, einschließlich, ohne Einschränkung, Informationen über den Verkehr und die Straßenbedingungen, übertragen. In mindestens einem Ausführungsbeispiel können Aktualisierungen der Karteninformationen 1294 ohne Einschränkung Aktualisierungen für die HD-Karte 1222 umfassen, wie z. B. Informationen über Baustellen, Schlaglöcher, Umleitungen, Überschwemmungen und/oder andere Hindernisse. In mindestens einem Ausführungsbeispiel können neuronale Netzwerke 1292, aktualisierte neuronale Netzwerke 1292 und/oder Karteninformationen 1294 aus neuem Training und/oder Erfahrungen resultieren, die in Daten dargestellt sind, die von einer beliebigen Anzahl von Fahrzeugen in der Umgebung empfangen wurden, und/oder zumindest teilweise auf Training basieren, das in einem Rechenzentrum durchgeführt wurde (z.B. unter Verwendung von Server(n) 1278 und/oder anderen Servern).
  • In mindestens einem Ausführungsbeispiel kann/können der/die Server 1278 verwendet werden, um maschinelle Lernmodelle (z.B. neuronale Netzwerke) zu trainieren, die zumindest teilweise auf Trainingsdaten basieren. Trainingsdaten können von Fahrzeugen generiert werden und/oder können in einer Simulation generiert werden (z.B. mit einer Game-Engine). In mindestens einem Ausführungsbeispiel wird eine beliebige Menge von Trainingsdaten markiert (z. B. wenn das assoziierte neuronale Netzwerk vom überwachten Lernen profitiert) und/oder einer anderen Vorverarbeitung unterzogen. In mindestens einem Ausführungsbeispiel wird eine beliebige Menge von Trainingsdaten nicht markiert und/oder vorverarbeitet (z. B. wenn das assoziierte neuronale Netzwerk kein überwachtes Lernen benötigt). In mindestens einem Ausführungsbeispiel können, sobald maschinelle Lernmodelle trainiert sind, maschinelle Lernmodelle von Fahrzeugen verwendet werden (z.B. Übertragung an Fahrzeuge über Netzwerk(e) 1290, und/oder maschinelle Lernmodelle können von Server(n) 1278 zur Fernüberwachung von Fahrzeugen verwendet werden.
  • In mindestens einem Ausführungsbeispiel kann/können der/die Server 1278 Daten von Fahrzeugen empfangen und Daten auf aktuelle neuronale Netzwerke für intelligentes Inferenzieren in Echtzeit anwenden. In mindestens einem Ausführungsbeispiel kann/können der/die Server 1278 Deep-Learning-Supercomputer und/oder dedizierte KI-Rechner umfassen, die von GPU(s) 1284 angetrieben werden, wie z. B. die von NVIDIA entwickelten DGX- und DGX-Station-Maschinen. In mindestens einem Ausführungsbeispiel können der oder die Server 1278 jedoch auch Deep-Learning-Infrastrukturen umfassen, die CPUbetriebene Rechenzentren verwenden.
  • In mindestens einem Ausführungsbeispiel kann die Deep-Learning-Infrastruktur des/der Server(s) 1278 zu schnellem Inferenzieren in Echtzeit fähig sein und diese Fähigkeit nutzen, um den Zustand von Prozessoren, Software und/oder assoziierter Hardware im Fahrzeug 1200 zu bewerten und zu überprüfen. Zum Beispiel kann in mindestens einem Ausführungsbeispiel die Deep-Learning-Infrastruktur periodische Aktualisierungen vom Fahrzeug 1200 erhalten, wie z. B. eine Bildsequenz und/oder Objekte, die das Fahrzeug 1200 in dieser Bildsequenz lokalisiert hat (z. B. über Computer Vision und/oder andere maschinelle Objektklassifizierungstechniken). In mindestens einem Ausführungsbeispiel kann die Deep-Learning-Infrastruktur ihr eigenes neuronales Netzwerk laufen lassen, um Objekte zu identifizieren und sie mit Objekten zu vergleichen, die vom Fahrzeug 1200 identifiziert wurden, und wenn die Ergebnisse nicht übereinstimmen und die Deep-Learning-Infrastruktur zu dem Schluss kommt, dass die KI im Fahrzeug 1200 eine Fehlfunktion aufweist, dann kann/können der/die Server 1278 ein Signal an das Fahrzeug 1200 senden, das einen ausfallsicheren Rechner des Fahrzeugs 1200 anweist, die Kontrolle zu übernehmen, die Passagiere zu benachrichtigen und ein sicheres Parkmanöver durchzuführen.
  • In mindestens einem Ausführungsbeispiel kann/können der/die Server 1278 GPU(s) 1284 und einen oder mehrere programmierbare Inferenzbeschleuniger (z.B. NVIDIAs TensorRT 3) enthalten. In mindestens einem Ausführungsbeispiel kann die Kombination von GPU-betriebenen Servern und Inferenzbeschleunigung eine Reaktionsfähigkeit in Echtzeit ermöglichen. In mindestens einem Ausführungsbeispiel, z. B. wenn die Leistung weniger kritisch ist, können Server mit CPUs, FPGAs und anderen Prozessoren zum Inferenzieren verwendet werden. In mindestens einem Ausführungsbeispiel wird/werden die Hardwarestruktur(en) 915 zur Ausführung eines oder mehrerer Ausführungsbeispiele verwendet. Detaillierte Informationen über die Hardwarestruktur(en) 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt.
  • Rechner-Systeme
  • 13 ist ein Blockdiagramm, das ein beispielhaftes Rechnersystem zeigt, das ein System mit miteinander verbundenen Geräten und Komponenten, ein System-on-a-Chip (SOC) oder eine Kombination davon 1300 sein kann, das gemäß mindestens einem Ausführungsbeispiel mit einem Prozessor gebildet wird, der Ausführungseinheiten zur Ausführung eines Befehls enthalten kann. In mindestens einem Ausführungsbeispiel kann das Rechnersystem 1300 ohne Einschränkung eine Komponente, wie z.B. einen Prozessor 1302, enthalten, um Ausführungseinheiten einschließlich Logik zur Durchführung von Algorithmen zur Verarbeitung von Daten, gemäß der vorliegenden Offenbarung, wie z.B. in dem hierin beschriebenen Ausführungsbeispiel, zu verwenden. In mindestens einem Ausführungsbeispiel kann das Rechnersystem 1300 Prozessoren enthalten, wie z.B. die PENTIUMü-Prozessorfamilie, XeonTM, Itaniumü, XScaleTM und/oder StrongARMTM, Intel® Core™ oder Intel® Nervana™-Mikroprozessoren, die von der Intel Corporation in Santa Clara, Kalifornien, erhältlich sind, obwohl auch andere Systeme (einschließlich PCs mit anderen Mikroprozessoren, technische Workstations, Set-Top-Boxen und dergleichen) verwendet werden können. In mindestens einem Ausführungsbeispiel kann das Rechnersystem 1300 eine Version des Betriebssystems WINDOWS ausführen, das von der Microsoft Corporation in Redmond, Washington, erhältlich ist, obwohl auch andere Betriebssysteme (z.B. UNIX und Linux), eingebettete Software und/oder grafische Benutzeroberflächen verwendet werden können.
  • Ausführungsbeispiele können in anderen Geräten wie Handheld-Geräten und eingebetteten Anwendungen verwendet werden. Einige Beispiele für tragbare Geräte sind Mobiltelefone, Internet-Protokoll-Geräte, Digitalkameras, persönliche digitale Assistenten („PDAs“) und Handheld-PCs. In mindestens einem Ausführungsbeispiel können eingebettete Anwendungen einen Mikrocontroller, einen digitalen Signalprozessor („DSP“), ein System auf einem Chip, Netzwerkrechner („NetPCs“), Set-Top-Boxen, Netzwerk-Hubs, Wide-Area-Network-Switches („WAN“) oder jedes andere System umfassen, das gemäß mindestens einem Ausführungsbeispiel eine oder mehrere Anweisungen ausführen kann.
  • In mindestens einem Ausführungsbeispiel kann das Rechnersystem 1300 ohne Einschränkung einen Prozessor 1302 enthalten, der ohne Einschränkung eine oder mehrere Ausführungseinheiten 1308 enthalten kann, um ein maschinelles Lernmodelltraining und/oder Inferenzieren gemäß den hier beschriebenen Techniken durchzuführen. In mindestens einem Ausführungsbeispiel ist das System 1300 ein Desktop- oder Serversystem mit einem Prozessor, aber in einem anderen Ausführungsbeispiel kann das System 1300 ein Multiprozessorsystem sein. In mindestens einem Ausführungsbeispiel kann der Prozessor 1302 ohne Einschränkung einen CISC-Mikroprozessor (Complex Instruction Set Computer), einen RISC-Mikroprozessor (Reduced Instruction Set Computing), einen VLIW-Mikroprozessor (Very Long Instruction Word), einen Prozessor, der eine Kombination von Befehlssätzen implementiert, oder ein beliebiges anderes Gerät, wie z. B. einen digitalen Signalprozessor, umfassen. In mindestens einem Ausführungsbeispiel kann der Prozessor 1302 mit einem Prozessorbus 1310 gekoppelt sein, der Datensignale zwischen dem Prozessor 1302 und anderen Komponenten im Rechnersystem 1300 übertragen kann.
  • In mindestens einem Ausführungsbeispiel kann der Prozessor 1302 ohne Einschränkung einen internen Level 1 („L1“) Cache-Speicher („Cache“) 1304 enthalten. In mindestens einem Ausführungsbeispiel kann der Prozessor 1302 einen einzigen internen Cache oder mehrere Ebenen eines internen Cache aufweisen. In mindestens einem Ausführungsbeispiel kann sich der Cache-Speicher außerhalb des Prozessors 1302 befinden. Andere Ausführungsbeispiele können auch eine Kombination aus internen und externen Cachespeichern enthalten, je nach Implementierung und Bedarf. In mindestens einem Ausführungsbeispiel kann die Registerdatei 1306 verschiedene Datentypen in verschiedenen Registern speichern, darunter, ohne Einschränkung, Ganzzahlregister, Gleitkommaregister, Statusregister und Befehlszeigerregister.
  • In mindestens einem Ausführungsbeispiel befindet sich die Ausführungseinheit 1308, einschließlich, ohne Einschränkung, der Logik zur Durchführung von Ganzzahl- und Gleitkommaoperationen, ebenfalls im Prozessor 1302. Der Prozessor 1302 kann auch einen Nur-Lese-Speicher („ROM“) für Mikrocode („ucode“) enthalten, der Mikrocode für bestimmte Makrobefehle speichert. In mindestens einem Ausführungsbeispiel kann die Ausführungseinheit 1308 eine Logik zur Verarbeitung eines gepackten Befehlssatzes 1309 enthalten. In mindestens einem Ausführungsbeispiel können durch die Aufnahme des gepackten Befehlssatzes 1309 in den Befehlssatz eines Mehrzweckprozessors 1302 zusammen mit assoziierten Schaltkreisen zur Ausführung von Befehlen Operationen, die von vielen Multimedia-Anwendungen verwendet werden, unter Verwendung gepackter Daten in einem Mehrzweckprozessor 1302 durchgeführt werden. In einem oder mehreren Ausführungsbeispielen können viele Multimedia-Anwendungen beschleunigt und effizienter ausgeführt werden, indem die volle Breite des Datenbusses eines Prozessors für die Durchführung von Operationen mit gepackten Daten genutzt wird, wodurch die Notwendigkeit entfällt, kleinere Dateneinheiten über den Datenbus des Prozessors zu übertragen, um eine oder mehrere Operationen mit einem Datenelement nach dem anderen durchzuführen.
  • In mindestens einem Ausführungsbeispiel kann die Ausführungseinheit 1308 auch in Mikrocontrollern, eingebetteten Prozessoren, Grafikgeräten, DSPs und anderen Arten von Logikschaltungen verwendet werden. In mindestens einem Ausführungsbeispiel kann das Rechnersystem 1300, ohne Einschränkung, einen Speicher 1320 enthalten. In mindestens einem Ausführungsbeispiel kann der Speicher 1320 als dynamischer Direktzugriffsspeicher („DRAM“), als statischer Direktzugriffsspeicher („SRAM“), als Flash-Speicher oder als anderes Speichergerät implementiert sein. Der Speicher 1320 kann Anweisungen 1319 und/oder Daten 1321 speichern, die durch Datensignale dargestellt werden, die vom Prozessor 1302 ausgeführt werden können.
  • In mindestens einem Ausführungsbeispiel kann der Systemlogikchip mit dem Prozessorbus 1310 und dem Speicher 1320 gekoppelt sein. In mindestens einem Ausführungsbeispiel kann der Systemlogikchip ohne Einschränkung einen Memory Controller Hub („MCH“) 1316 umfassen, und der Prozessor 1302 kann mit dem MCH 1316 über den Prozessorbus 1310 kommunizieren. In mindestens einem Ausführungsbeispiel kann der MCH 1316 einen Speicherpfad 1318 mit hoher Bandbreite zum Speicher 1320 für die Befehls- und Datenspeicherung und für die Speicherung von Grafikbefehlen, Daten und Texturen bereitstellen. In mindestens einem Ausführungsbeispiel kann der MCH 1316 Datensignale zwischen dem Prozessor 1302, dem Speicher 1320 und anderen Komponenten des Rechnersystems 1300 leiten und Datensignale zwischen dem Prozessorbus 1310, dem Speicher 1320 und einem System-E/A 1322 überbrücken. In mindestens einem Ausführungsbeispiel kann der Systemlogikchip einen Grafikport zur Kopplung mit einem Grafikcontroller bereitstellen. In mindestens einem Ausführungsbeispiel kann der MCH 1316 über einen Speicherpfad 1318 mit hoher Bandbreite mit dem Speicher 1320 gekoppelt sein, und die Grafik-/Videokarte 1312 kann über eine Accelerated Graphics Port („AGP“)-Verbindung 1314 mit dem MCH 1316 gekoppelt sein.
  • In mindestens einem Ausführungsbeispiel kann das Rechnersystem 1300 System-E/A 1322 verwenden, das ein proprietärer Hub-Schnittstellenbus ist, um MCH 1316 mit dem I/O-Controller-Hub („ICH“) 1330 zu koppeln. In mindestens einem Ausführungsbeispiel kann ICH 1330 direkte Verbindungen zu einigen E/A-Geräten über einen lokalen E/A-Bus bereitstellen. In mindestens einem Ausführungsbeispiel kann der lokale E/A-Bus ohne Einschränkung einen Hochgeschwindigkeits-E/A-Bus zur Verbindung von Peripheriegeräten mit dem Speicher 1320, dem Chipsatz und dem Prozessor 1302 umfassen. Beispiele hierfür sind u. a. ein Audiocontroller 1329, ein Firmware-Hub („Flash-BIOS“) 1328, ein drahtloser Transceiver 1326, ein Datenspeicher 1324, ein Legacy-E/A-Controller 1323 mit Benutzereingabe- und Tastaturschnittstellen, ein serieller Erweiterungsport 1327, z. B. Universal Serial Bus („USB“), und ein Netzwerk-Controller 1334. Der Datenspeicher 1324 kann ein Festplattenlaufwerk, ein Diskettenlaufwerk, ein CD-ROM-Gerät, ein Flash-Speichergerät oder ein anderes Massenspeichergerät umfassen.
  • In mindestens einem Ausführungsbeispiel zeigt 13 ein System, das miteinander verbundene Hardware-Geräte oder „Chips“ enthält, während 13 in anderen Ausführungsbeispielen ein beispielhaftes System auf einem Chip („SoC“) zeigen kann. In mindestens einem Ausführungsbeispiel können die in 13 dargestellten Geräte mit proprietären Verbindungen, standardisierten Verbindungen (z. B. PCIe) oder einer Kombination davon verbunden sein. In mindestens einem Ausführungsbeispiel sind eine oder mehrere Komponenten des Systems 1300 über Compute-Express-Link (CXL)-Verbindungen miteinander verbunden.
  • Inferenz- und/oder Trainingslogik 915 werden verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 im System 13 für Inferenzierungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen für ein neuronales Netzwerk, Funktionen und/oder Architekturen eines neuronalen Netzwerks oder hier beschriebenen Anwendungsfällen für ein neuronales Netzwerk berechnet wurden. In mindestens einem Ausführungsbeispiel kann ein neuronales Netzwerk, das von dem elektronischen Gerät 1200 verwendet wird, unter Verwendung von Inferenzierung durch ein oder mehrere neuronale Netzwerke arbeiten, die jeweils von zwei oder mehr Verarbeitungskernen trainiert werden, um Teile des neuronalen Netzwerks separat parallel zu trainieren, wie hierin beschrieben.
  • 14 ist ein Blockdiagramm, das ein elektronisches Gerät 1400 zur Verwendung eines Prozessors 1410 gemäß mindestens einem Ausführungsbeispiel zeigt. In mindestens einem Ausführungsbeispiel kann das elektronische Gerät 1400 zum Beispiel und ohne Einschränkung ein Notebook, ein Tower-Server, ein Rack-Server, ein Blade-Server, ein Laptop, ein Desktop, ein Tablet, ein mobiles Gerät, ein Telefon, ein eingebetteter Rechner oder ein anderes geeignetes elektronisches Gerät sein.
  • In mindestens einem Ausführungsbeispiel kann das System 1400 ohne Einschränkung einen Prozessor 1410 enthalten, der kommunikativ mit einer beliebigen Anzahl oder Art von Komponenten, Peripheriegeräten, Modulen oder Geräten gekoppelt ist. In mindestens einem Ausführungsbeispiel ist der Prozessor 1410 über einen Bus oder eine Schnittstelle gekoppelt, wie z.B. einen 1°C-Bus, einen System Management Bus („SMBus“), einen Low Pin Count (LPC)-Bus, ein Serial Peripheral Interface („SPI“), einen High Definition Audio („HDA“)-Bus, einen Serial Advance Technology Attachment („SATA“)-Bus, einen Universal Serial Bus („USB“) (Versionen 1, 2, 3) oder einen Universal Asynchronous Receiver/Transmitter („UART“)-Bus. In mindestens einem Ausführungsbeispiel zeigt 14 ein System, das miteinander verbundene Hardware-Geräte oder „Chips“ umfasst, während 14 in anderen Ausführungsbeispielen ein beispielhaftes System auf einem Chip („SoC“) zeigen kann. In mindestens einem Ausführungsbeispiel können die in 14 dargestellten Geräte mit proprietären Verbindungen, standardisierten Verbindungen (z. B. PCIe) oder einer Kombination davon verbunden sein. In mindestens einem Ausführungsbeispiel sind eine oder mehrere Komponenten von 14 über Compute-Express-Link (CXL)-Verbindungen miteinander verbunden.
  • In mindestens einem Ausführungsbeispiel kann 14 ein Display 1424, einen Touchscreen 1425, ein Touchpad 1430, eine Near Field Communications-Einheit („NFC“) 1445, einen Sensor-Hub 1440, einen Wärmesensor 1446, einen Express-Chipsatz („EC“) 1435, ein Trusted Platform Module („TPM“) 1438, BIOS/Firmware/Flash-Speicher („BIOS, FW Flash“) 1422, ein DSP 1460, ein Laufwerk („SSD oder HDD“) 1420 wie eine Solid State Disk („SSD“) oder eine Festplatte („HDD“), eine drahtlose lokale Netzwerkeinheit („WLAN“) 1450, eine Bluetooth-Einheit 1452, eine drahtlose Wide Area Network-Einheit („WWAN“) 1456, ein Global Positioning System (GPS) 1455, eine Kamera („USB 3. 0-Kamera“) 1454, wie z. B. eine USB 3.0-Kamera, oder eine Low Power Double Data Rate („LPDDR“)-Speichereinheit („LPDDR3“) 1415, implementiert z. B. im LPDDR3-Standard. Diese Komponenten können jeweils auf jede geeignete Weise implementiert werden.
  • In mindestens einem Ausführungsbeispiel können andere Komponenten mit dem Prozessor 1410 über die oben beschriebenen Komponenten kommunikativ gekoppelt sein. In mindestens einem Ausführungsbeispiel können ein Beschleunigungsmesser 1441, ein Umgebungslichtsensor („ALS“) 1442, ein Kompass 1443 und ein Gyroskop 1444 kommunikativ mit dem Sensor-Hub 1440 gekoppelt sein. In mindestens einem Ausführungsbeispiel können ein Wärmesensor 1439, ein Lüfter 1437, eine Tastatur 1446 und ein Touchpad 1430 kommunikativ mit dem EC 1435 gekoppelt sein. In mindestens einem Ausführungsbeispiel können der Lautsprecher 1463, ein Kopfhörer 1464 und ein Mikrofon („mic“) 1465 kommunikativ mit einer Audioeinheit („audio codec and class d amp“) 1464 gekoppelt sein, die wiederum kommunikativ mit dem DSP 1460 gekoppelt sein kann. In mindestens einem Ausführungsbeispiel kann die Audioeinheit 1464 beispielsweise und ohne Einschränkung einen Audiokodierer/-dekodierer („Codec“) und einen Verstärker der Klasse D umfassen. In mindestens einem Ausführungsbeispiel kann die SIM-Karte („SIM“) 1457 mit der WWAN-Einheit 1456 kommunikativ gekoppelt sein. In mindestens einem Ausführungsbeispiel können Komponenten wie die WLAN-Einheit 1450 und die Bluetooth-Einheit 1452 sowie die WWAN-Einheit 1456 in einem Next Generation Form Factor („NGFF“) implementiert sein.
  • Inferenz- und/oder Trainingslogik 915 werden verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 im System 14 für Inferenzierungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen für ein neuronales Netzwerk, Funktionen und/oder Architekturen eines neuronalen Netzwerks oder hier beschriebenen Anwendungsfällen für ein neuronales Netzwerk berechnet wurden. In mindestens einem Ausführungsbeispiel kann ein vom Rechnersystem 1500 verwendetes neuronales Netzwerk unter Verwendung von Inferenzierung durch ein oder mehrere neuronale Netzwerke arbeiten, die jeweils durch zwei oder mehr Verarbeitungskerne trainiert werden, um Teile des neuronalen Netzwerks separat parallel zu trainieren, wie hierin beschrieben.
  • 15 zeigt ein Rechnersystem 1500 gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel ist das Rechnersystem 1500 so konfiguriert, dass es verschiedene Prozesse und Methoden implementiert, die in dieser Offenbarung beschrieben sind.
  • In mindestens einem Ausführungsbeispiel umfasst das Rechnersystem 1500 ohne Einschränkung mindestens eine Zentraleinheit („CPU“) 1502, die mit einem Kommunikationsbus 1510 verbunden ist, der unter Verwendung eines beliebigen geeigneten Protokolls implementiert ist, wie PCI („Peripheral Component Interconnect“), Peripheral Component Interconnect Express („PCI-Express“), AGP („Accelerated Graphics Port“), HyperTransport oder eines anderen Bus- oder Punkt-zu-Punkt-Kommunikationsprotokolls bzw. anderer Protokolle. In mindestens einem Ausführungsbeispiel umfasst das Rechnersystem 1500 ohne Einschränkung einen Hauptspeicher 1504 und eine Steuerlogik (z. B. implementiert als Hardware, Software oder eine Kombination davon), und die Daten werden im Hauptspeicher 1504 gespeichert, der die Form eines Direktzugriffsspeichers („RAM“) annehmen kann. In mindestens einem Ausführungsbeispiel stellt ein Netzwerkschnittstellen-Subsystem („Netzwerkschnittstelle“) 1522 eine Schnittstelle zu anderen Rechnern und Netzwerken bereit, um Daten von anderen Systemen zu empfangen und Daten an andere Systeme vom Rechnersystem 1500 zu senden.
  • In mindestens einem Ausführungsbeispiel umfasst das Rechnersystem 1500 ohne Einschränkung Eingabegeräte 1508, ein Parallelverarbeitungssystem 1512 und Anzeigegeräte 1506, die unter Verwendung einer herkömmlichen Kathodenstrahlröhre („CRT“), einer Flüssigkristallanzeige („LCD“), einer lichtemittierenden Diode („LED“), einer Plasmaanzeige oder anderer geeigneter Anzeigetechnologien implementiert werden können. In mindestens einem Ausführungsbeispiel werden Benutzereingaben von Eingabegeräten 1508 wie Tastatur, Maus, Touchpad, Mikrofon usw. empfangen. In mindestens einem Ausführungsbeispiel kann jedes der vorgenannten Module auf einer einzigen Halbleiterplattform angeordnet sein, um ein Verarbeitungssystem zu bilden.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 im System 15 für Inferenzierungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen für ein neuronales Netzwerk, Funktionen und/oder Architekturen eines neuronalen Netzwerks oder hier beschriebenen Anwendungsfällen für ein neuronales Netzwerk berechnet wurden. In mindestens einem Ausführungsbeispiel kann ein vom Rechnersystem 1600 verwendetes neuronales Netzwerk unter Verwendung von Inferenzierung durch ein oder mehrere neuronale Netzwerke arbeiten, die jeweils durch zwei oder mehr Verarbeitungskerne trainiert werden, um Teile des neuronalen Netzwerks separat parallel zu trainieren, wie hierin beschrieben.
  • 16 zeigt ein Rechnersystem 1600 gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel umfasst das Computersystem 1600 ohne Einschränkung einen Rechner 1610 und einen USB-Stick 1620. In mindestens einem Ausführungsbeispiel kann der Rechner 1610 ohne Einschränkung eine beliebige Anzahl und einen beliebigen Typ von Prozessor(en) (nicht gezeigt) und einen Speicher (nicht gezeigt) enthalten. In mindestens einem Ausführungsbeispiel umfasst der Rechner 1610 ohne Einschränkung einen Server, eine Cloud-Instanz, einen Laptop und einen Desktop-Computer.
  • In mindestens einem Ausführungsbeispiel umfasst der USB-Stick 1620, ohne Einschränkung, eine Verarbeitungseinheit 1630, eine USB-Schnittstelle 1640 und eine USB-Schnittstellenlogik 1650. In mindestens einem Ausführungsbeispiel kann die Verarbeitungseinheit 1630 ein beliebiges Befehlsausführungssystem, eine beliebige Vorrichtung oder ein beliebiges Gerät sein, das in der Lage ist, Befehle auszuführen. In mindestens einem Ausführungsbeispiel kann die Verarbeitungseinheit 1630 ohne Einschränkung eine beliebige Anzahl und einen beliebigen Typ von Verarbeitungskernen (nicht dargestellt) umfassen. In mindestens einem Ausführungsbeispiel umfasst der Verarbeitungskern 1630 eine anwendungsspezifische integrierte Schaltung („ASIC“), die so optimiert ist, dass sie eine beliebige Anzahl und Art von Operationen ausführen kann, die mit maschinellem Lernen assoziiert sind. In mindestens einem Ausführungsbeispiel ist der Verarbeitungskern 1630 eine Tensor Processing Unit („TPC“), die für die Durchführung von Inferenzierungsoperationen im Rahmen des maschinellen Lernens optimiert ist. In mindestens einem Ausführungsbeispiel ist der Verarbeitungskern 1630 eine Bildverarbeitungseinheit („VPU“), die für die Durchführung von Operationen des maschinellen Sehens und des maschinellen Lernens inferenzieren optimiert ist.
  • In mindestens einem Ausführungsbeispiel kann die USB-Schnittstelle 1640 eine beliebige Art von USB-Stecker oder USB-Buchse sein. In mindestens einem Ausführungsbeispiel ist die USB-Schnittstelle 1640 beispielsweise eine USB 3.0 Typ-C-Buchse für Daten und Strom. In mindestens einem Ausführungsbeispiel ist die USB-Schnittstelle 1640 ein USB-3.0-Typ-A-Stecker. In mindestens einem Ausführungsbeispiel kann die USB-Schnittstellenlogik 1650 eine beliebige Menge und Art von Logik umfassen, die es der Verarbeitungseinheit 1630 ermöglicht, über den USB-Anschluss 1640 mit Geräten (z.B. Rechner 1610) zu kommunizieren.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 im System 16 für Inferenzierungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen für ein neuronales Netzwerk, Funktionen und/oder Architekturen eines neuronalen Netzwerks oder hier beschriebenen Anwendungsfällen für ein neuronales Netzwerk berechnet wurden. In mindestens einem Ausführungsbeispiel kann eine Architektur wie in 17A gezeigt verwendet werden, um Worker zu implementieren, die parallel arbeiten, um ein neuronales Netzwerk wie oben beschrieben zu trainieren.
  • 17A zeigt eine beispielhafte Architektur, bei der eine Vielzahl von GPUs 1710-1713 über Hochgeschwindigkeitsverbindungen 1740-1743 (z. B. Busse, Punkt-zu-Punkt-Verbindungen usw.) kommunikativ mit einer Vielzahl von Multi-Core-Prozessoren 1705-1706 gekoppelt ist. In einem Ausführungsbeispiel unterstützen die Hochgeschwindigkeitsverbindungen 1740-1743 einen Kommunikationsdurchsatz von 4GB/s, 30GB/s, 80GB/s oder mehr. Es können verschiedene Verbindungsprotokolle verwendet werden, einschließlich, aber nicht beschränkt auf PCIe 4.0 oder 5.0 und NVLink 2.0.
  • Zusätzlich und in einem Ausführungsbeispiel sind zwei oder mehr GPUs 1710-1713 über Hochgeschwindigkeitsverbindungen 1729-1730 miteinander verbunden, die mit denselben oder anderen Protokollen/Leitungen implementiert werden können als die, die für die Hochgeschwindigkeitsverbindungen 1740-1743 verwendet werden. In ähnlicher Weise können zwei oder mehr der Mehrkernprozessoren 1705-1706 über Hochgeschwindigkeitsverbindungen 1728 verbunden sein, bei denen es sich um symmetrische Multiprozessorbusse (SMP) handeln kann, die mit 20GB/s, 30GB/s, 120GB/s oder mehr arbeiten. Alternativ kann die gesamte Kommunikation zwischen den verschiedenen in 17A gezeigten Systemkomponenten über dieselben Protokolle/Leitungen erfolgen (z. B. über eine gemeinsame Verbindungsstruktur).
  • In einem Ausführungsbeispiel ist jeder Mehrkernprozessor 1705-1706 kommunikativ mit einem Prozessorspeicher 1701-1702 über Speicherverbindungen 1726-1727 gekoppelt, und jeder Grafikprozessor 1710-1713 ist kommunikativ mit dem Grafikprozessorspeicher 1720-1723 über Grafikprozessorspeicherverbindungen 1750-1753 gekoppelt. Die Speicherverbindungen 1726-1727 und 1750-1753 können gleiche oder unterschiedliche Speicherzugriffstechnologien verwenden. Bei den Prozessorspeichern 1701-1702 und den GPU-Speichern 1720-1723 kann es sich beispielsweise um flüchtige Speicher wie dynamische Direktzugriffsspeicher (DRAMs) (einschließlich gestapelter DRAMs), Grafik-DDR-SDRAM (GDDR) (z. B. GDDR5, GDDR6) oder High Bandwidth Memory (HBM) und/oder um nichtflüchtige Speicher wie 3D XPoint oder Nano-Ram handeln. In einem Ausführungsbeispiel kann ein Teil der Prozessorspeicher 1701-1702 ein flüchtiger Speicher und ein anderer Teil ein nichtflüchtiger Speicher sein (z. B. unter Verwendung einer zweistufigen Speicherhierarchie (2LM)).
  • Wie hier beschrieben, können zwar verschiedene Prozessoren 1705-1706 und GPUs 1710-1713 physisch mit einem bestimmten Speicher 1701-1702 bzw. 1720-1723 gekoppelt sein, doch kann eine einheitliche Speicherarchitektur implementiert werden, bei der ein und derselbe virtuelle Systemadressraum (auch als „effektiver Adressraum“ bezeichnet) auf verschiedene physische Speicher verteilt ist. Beispielsweise können die Prozessorspeicher 1701-1702 jeweils 64 GB Systemadressraum umfassen, und die GPU-Speicher 1720-1723 können jeweils 32 GB Systemadressraum umfassen (was in diesem Beispiel zu einem insgesamt 256 GB großen adressierbaren Speicher führt).
  • 17B zeigt zusätzliche Details für eine Verbindung zwischen einem Multi-Core-Prozessor 1707 und einem Grafikbeschleunigungsmodul 1746 gemäß einem Ausführungsbeispiel. Das Grafikbeschleunigungsmodul 1746 kann einen oder mehrere GPU-Chips enthalten, die auf einer Linecard integriert sind, die über eine Hochgeschwindigkeitsverbindung 1740 mit dem Prozessor 1707 gekoppelt ist. Alternativ kann das Grafikbeschleunigungsmodul 1746 auf einem gleichen Gehäuse oder Chip wie der Prozessor 1707 integriert sein.
  • In mindestens einem Ausführungsbeispiel umfasst der gezeigte Prozessor 1707 eine Vielzahl von Kernen 1760A-1760D, jeder mit einem Translations-Lookaside-Puffer 1761A-1761D und einem oder mehreren Caches 1762A-1762D. In mindestens einem Ausführungsbeispiel können die Kerne 1760A-1760D verschiedene andere Komponenten zur Ausführung von Anweisungen und zur Verarbeitung von Daten enthalten, die nicht gezeigt werden. Die Caches 1762A-1762D können Level-1- (LI) und Level-2- (L2) Caches umfassen. Zusätzlich können ein oder mehrere gemeinsam genutzte Caches 1756 in den Caches 1762A-1762D enthalten sein und von Gruppen von Kernen 1760A-1760D gemeinsam genutzt werden. Ein Ausführungsbeispiel des Prozessors 1707 umfasst beispielsweise 24 Kerne, jeder mit einem eigenen LI-Cache, zwölf gemeinsam genutzten L2-Caches und zwölf gemeinsam genutzten L3-Caches. In diesem Ausführungsbeispiel werden ein oder mehrere L2- und L3-Caches von zwei benachbarten Kernen gemeinsam genutzt. Der Prozessor 1707 und das Grafikbeschleunigungsmodul 1746 sind mit dem Systemspeicher 1714 verbunden, der die Prozessorspeicher 1701-1702 von 17A enthalten kann.
  • Die Kohärenz von Daten und Befehlen, die in verschiedenen Caches 1762A, 1762D, 1756 und im Systemspeicher 1714 gespeichert sind, wird durch Kommunikation zwischen Kernen über einen Kohärenzbus 1764 aufrechterhalten. Beispielsweise kann jeder Cache über eine damit assoziierte Cache-Kohärenzlogik/-schaltung verfügen, um als Reaktion auf erkannte Lese- oder Schreibvorgänge in bestimmten Cache-Zeilen über den Kohärenzbus 1764 zu kommunizieren. In einer Implementierung wird ein Cache-Snooping-Protokoll über den Kohärenzbus 1764 implementiert, um Cache-Zugriffe auszuspähen.
  • In einem Ausführungsbeispiel stellt eine Proxy-Schaltung 1725 eine kommunikative Kopplung zwischen dem Grafikbeschleunigungsmodul 1746 und dem Kohärenzbus 1764 her, so dass das Grafikbeschleunigungsmodul 1746 an einem Cache-Kohärenzprotokoll als Peer der Kerne 1760A-1760D teilnehmen kann. Insbesondere stellt eine Schnittstelle 1735 die Konnektivität zur Proxy-Schaltung 1725 über die Hochgeschwindigkeitsverbindung 1740 (z. B. PCIe-Bus, NVLink usw.) bereit, und eine Schnittstelle 1737 verbindet das Grafikbeschleunigungsmodul 1746 mit der Verbindung 1740.
  • In einer Implementierung stellt eine Beschleunigerintegrationsschaltung 1736 Cache-Verwaltung, Speicherzugriff, Kontextverwaltung und Interrupt-Verwaltungsdienste für eine Vielzahl von Grafikverarbeitungs-Engines 1731, 1732, N des Grafikbeschleunigungsmoduls 1746 bereit. Die Grafikverarbeitungs-Engines 1731, 1732, N können jeweils eine separate Grafikverarbeitungseinheit (GPU) umfassen. Alternativ dazu können die Grafikverarbeitungs-Engines 1731, 1732, N verschiedene Arten von Grafikverarbeitungs-Engines innerhalb einer GPU umfassen, wie z. B. Grafikausführungseinheiten, Medienverarbeitungs-Engines (z. B. Video-Encoder/Decoder), Sampler und Blit-Engines. In mindestens einem Ausführungsbeispiel kann das Grafikbeschleunigungsmodul 1746 eine GPU mit einer Vielzahl von Grafikverarbeitungs-Engines 1731-1732, N sein, oder die Grafikverarbeitungs-Engines 1731-1732, N können individuelle GPUs sein, die auf einem gemeinsamen Gehäuse, einer Linecard oder einem Chip integriert sind.
  • In einem Ausführungsbeispiel enthält die Beschleuniger-Integrationsschaltung 1736 eine Speicherverwaltungseinheit (MMU) 1739 zur Durchführung verschiedener Speicherverwaltungsfunktionen, wie z. B. Übersetzungen von virtuellem in physischen Speicher (auch als Übersetzungen von effektivem in realen Speicher bezeichnet) und Speicherzugriffsprotokolle für den Zugriff auf den Systemspeicher 1714. Die MMU 1739 kann auch einen Translations-Lookaside-Buffer (TLB) (nicht dargestellt) zur Zwischenspeicherung von Übersetzungen von virtuellen/effektiven in physische/reale Adressen enthalten. In einem Ausführungsbeispiel speichert ein Cache 1738 Befehle und Daten für den effizienten Zugriff durch die Grafikverarbeitungs-Engines 1731-1732, N. In einem Ausführungsbeispiel werden die im Cache 1738 und in den Grafikspeichern 1733-1734, M gespeicherten Daten mit den Kern-Caches 1762A 1762D, 1756 und dem Systemspeicher 1714 kohärent gehalten. Wie bereits erwähnt, kann dies über eine Proxy-Schaltung 1725 im Namen des Cache 1738 und der Speicher 1733-1734, M erfolgen (z. B. Senden von Aktualisierungen an den Cache 1738 in Bezug auf Änderungen/Zugriffe auf Cache-Zeilen in den Prozessor-Caches 1762A-1762D, 1756 und Empfangen von Aktualisierungen vom Cache 1738).
  • Ein Satz von Registern 1745 speichert Kontextdaten für Threads, die von den Grafikverarbeitungs-Engines 1731-1732, N ausgeführt werden, und eine Kontextverwaltungsschaltung 1748 verwaltet Thread-Kontexte. Beispielsweise kann die Kontextverwaltungsschaltung 1748 Speicher- und Wiederherstellungsoperationen durchführen, um Kontexte verschiedener Threads während Kontextumschaltungen zu speichern und wiederherzustellen (z. B. wenn ein erster Thread gespeichert und ein zweiter Thread gespeichert wird, so dass ein zweiter Thread von einer Grafikverarbeitungsmaschine ausgeführt werden kann). Bei einem Kontextwechsel kann die Kontextverwaltungsschaltung 1748 beispielsweise aktuelle Registerwerte in einem bestimmten Bereich im Speicher speichern (z. B. durch einen Kontextzeiger identifiziert). Die Registerwerte können dann bei der Rückkehr zu einem Kontext wiederhergestellt werden. In einem Ausführungsbeispiel empfängt und verarbeitet eine Interrupt-Verwaltungsschaltung 1747 von Systemgeräten empfangene Interrupts.
  • In einer Implementierung werden virtuelle/effektive Adressen von einer Grafikverarbeitungs-Engine 1731 durch die MMU 1739 in reale/physische Adressen im Systemspeicher 1714 übersetzt. Ein Ausführungsbeispiel der Beschleunigerintegrationsschaltung 1736 unterstützt mehrere (z. B. 4, 8, 16) Grafikbeschleunigermodule 1746 und/oder andere Beschleunigergeräte. Das Grafikbeschleunigermodul 1746 kann für eine einzelne, auf dem Prozessor 1707 ausgeführte Anwendung bestimmt sein oder von mehreren Anwendungen gemeinsam genutzt werden. In einem Ausführungsbeispiel wird eine virtualisierte Grafikausführungsumgebung vorgestellt, in der die Ressourcen der Grafikverarbeitungs-Engines 1731-1732, N gemeinsam mit mehreren Anwendungen oder virtuellen Maschinen (VMs) genutzt werden. In mindestens einem Ausführungsbeispiel können die Ressourcen in „Abschnitte“ (engl. slice) unterteilt werden, die verschiedenen VMs und/oder Anwendungen basierend auf den Verarbeitungsanforderungen und den mit VMs und/oder Anwendungen assoziierten Prioritäten zugewiesen werden.
  • In mindestens einem Ausführungsbeispiel fungiert die Beschleunigerintegrationsschaltung 1736 als Brücke zu einem System für das Grafikbeschleunigungsmodul 1746 und stellt Adressübersetzungs- und Systemspeicher-Cache-Dienste bereit. Darüber hinaus kann die Beschleuniger-Integrationsschaltung 1736 Anlagen zur Virtualisierung für einen Host-Prozessor bereitstellen, um die Virtualisierung der Grafikverarbeitungs-Engines 1731-1732, Interrupts und die Speicherverwaltung zu verwalten.
  • Da die Hardwareressourcen der Grafikverarbeitungs-Engines 1731-1732, N explizit auf einen realen Adressraum abgebildet werden, den der Host-Prozessor 1707 sieht, kann jeder Host-Prozessor diese Ressourcen direkt mit einem effektiven Adresswert adressieren. Eine Funktion der Beschleuniger-Integrationsschaltung 1736 besteht in einem Ausführungsbeispiel in der physischen Trennung der Grafikverarbeitungs-Engines 1731-1732, N, so dass sie für ein System als unabhängige Einheiten erscheinen.
  • In mindestens einem Ausführungsbeispiel sind ein oder mehrere Grafikspeicher 1733-1734, M mit jeder der Grafikverarbeitungs-Engines 1731-1732, N, gekoppelt. Die Grafikspeicher 1733-1734, M speichern Anweisungen und Daten, die von jeder der Grafikverarbeitungs-Engines 1731-1732, N verarbeitet werden. Die Grafikspeicher 1733-1734, 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üchtige Speicher wie 3D XPoint oder Nano-Ram sein.
  • In einem Ausführungsbeispiel werden zur Verringerung des Datenverkehrs über die Verbindung 1740 Vorspannungstechniken verwendet, um sicherzustellen, dass die in den Grafikspeichern 1733-1734, M gespeicherten Daten Daten sind, die am häufigsten von den Grafikverarbeitungs-Engines 1731-1732, N verwendet werden und vorzugsweise nicht von den Kernen 1760A-1760D (zumindest nicht häufig) verwendet werden. In ähnlicher Weise versucht ein Vorspannungsmechanismus, Daten, die von Kernen (und vorzugsweise nicht von den Grafikverarbeitungs-Engines 1731-1732, N) benötigt werden, in den Caches 1762A-1762D, 1756 der Kerne und im Systemspeicher 1714 zu halten.
  • 17C zeigt ein weiteres Ausführungsbeispiel, bei dem die Beschleuniger-Integrationsschaltung 1736 in den Prozessor 1707 integriert ist. In diesem Ausführungsbeispiel kommunizieren die Grafikverarbeitungs-Engines 1731-1732, N direkt über die Hochgeschwindigkeitsverbindung 1740 mit der Beschleunigerintegrationsschaltung 1736 über die Schnittstelle 1737 und die Schnittstelle 1735 (die wiederum jede Form von Bus- oder Schnittstellenprotokoll verwenden kann). Die Beschleuniger-Integrationsschaltung 1736 kann dieselben Operationen durchführen, wie sie in 17B beschrieben sind, jedoch möglicherweise mit einem höheren Durchsatz, da sie sich in unmittelbarer Nähe zum Kohärenzbus 1764 und den Caches 1762A-1762D, 1756 befindet. Ein Ausführungsbeispiel unterstützt verschiedene Programmiermodelle, einschließlich eines Programmiermodells für dedizierte Prozesse (ohne Virtualisierung des Grafikbeschleunigungsmoduls) und gemeinsam genutzte Programmiermodelle (mit Virtualisierung), die Programmiermodelle umfassen können, die von der Beschleunigerintegrationsschaltung 1736 gesteuert werden, und Programmiermodelle, die vom Grafikbeschleunigungsmodul 1746 gesteuert werden.
  • In mindestens einem Ausführungsbeispiel sind die Grafikverarbeitungs-Engines 1731-1732, N für eine einzige Anwendung oder einen einzigen Prozess unter einem einzigen Betriebssystem vorgesehen. In mindestens einem Ausführungsbeispiel kann eine einzelne Anwendung andere Anwendungsanforderungen an die Grafikverarbeitungs-Engines 1731-1732, N weiterleiten, wodurch eine Virtualisierung innerhalb einer VM/Partition bereitgestellt wird.
  • In mindestens einem Ausführungsbeispiel können die Grafikverarbeitungs-Engines 1731-1732, N, von mehreren VM-/Anwendungspartitionen gemeinsam genutzt werden. In mindestens einem Ausführungsbeispiel können gemeinsam genutzte Modelle einen System-Hypervisor verwenden, um die Grafikverarbeitungs-Engines 1731-1732, N zu virtualisieren, um den Zugriff durch jedes Betriebssystem zu ermöglichen. Bei Systemen mit einer einzigen Partition ohne Hypervisor sind die Grafikprozessoren 1731-1732, N Eigentum eines Betriebssystems. In mindestens einem Ausführungsbeispiel kann ein Betriebssystem die Grafikverarbeitungs-Engines 1731-1732, N virtualisieren, um den Zugriff auf jeden Prozess oder jede Anwendung bereitzustellen.
  • In mindestens einem Ausführungsbeispiel wählt das Grafikbeschleunigungsmodul 1746 oder eine individuelle Grafikverarbeitungs-Engine 1731-1732, N ein Prozesselement unter Verwendung eines Prozesshandles aus. In einem Ausführungsbeispiel werden Prozesselemente im Systemspeicher 1714 gespeichert und sind unter Verwendung der hier beschriebenen Übersetzungstechniken von effektiven Adressen in reale Adressen adressierbar. In mindestens einem Ausführungsbeispiel kann ein Prozesshandle ein implementierungsspezifischer Wert sein, der einem Host-Prozess bereitgestellt wird, wenn er seinen Kontext bei der Grafikverarbeitungs-Engine 1731-1732, N registriert (d. h. wenn er die Systemsoftware aufruft, um ein Prozesselement zu einer verknüpften Prozesselementliste hinzuzufügen). In mindestens einem Ausführungsbeispiel können die unteren 16 Bits eines Prozesshandles ein Offset des Prozesselements innerhalb einer verknüpften Prozesselementliste sein.
  • 17D zeigt einen beispielhaften Beschleuniger-Integrationsabschnitt 1790. Wie hier verwendet, umfasst ein „Abschnitt“ einen bestimmten Teil der Verarbeitungsressourcen der Beschleunigerintegrationsschaltung 1736. Der effektive Anwendungsadressraum 1782 im Systemspeicher 1714 speichert Prozesselemente 1783. In einem Ausführungsbeispiel werden die Prozesselemente 1783 als Reaktion auf GPU-Aufrufe 1781 von Anwendungen 1780, die auf dem Prozessor 1707 ausgeführt werden, gespeichert. Ein Prozesselement 1783 enthält den Prozessstatus für die entsprechende Anwendung 1780. Ein im Prozesselement 1783 enthaltener Arbeitsdeskriptor (WD) 1784 kann ein einzelner, von einer Anwendung angeforderter Job sein oder einen Zeiger auf eine Warteschlange von Jobs enthalten. In mindestens einem Ausführungsbeispiel ist der WD 1784 ein Zeiger auf eine Auftragsanforderungswarteschlange im Adressraum 1782 einer Anwendung.
  • Das Grafikbeschleunigungsmodul 1746 und/oder individuelle Grafikverarbeitungs-Engines 1731-1732, N können von allen oder einer Teilmenge von Prozessen in einem System gemeinsam genutzt werden. In mindestens einem Ausführungsbeispiel kann eine Infrastruktur zum Einrichten des Prozesszustands und zum Senden eines WD 1784 an ein Grafikbeschleunigungsmodul 1746 zum Starten eines Auftrags in einer virtualisierten Umgebung enthalten sein.
  • In mindestens einem Ausführungsbeispiel ist ein dediziertes Prozessprogrammiermodell implementierungsspezifisch. In diesem Modell ist ein einzelner Prozess Eigentümer des Grafikbeschleunigungsmoduls 1746 oder einer individuellen Grafikverarbeitungs-Engine 1731. Da das Grafikbeschleunigungsmodul 1746 einem einzelnen Prozess gehört, initialisiert ein Hypervisor die Beschleunigerintegrationsschaltung 1736 für eine besitzende Partition und ein Betriebssystem initialisiert die Beschleunigerintegrationsschaltung 1736 für einen besitzenden Prozess, wenn das Grafikbeschleunigungsmodul 1746 zugewiesen wird.
  • Im Betrieb holt eine WD-Abrufeinheit 1791 im Beschleunigerintegrationsabschnitt 1790 den nächsten WD 1784 ab, der eine Angabe der von einer oder mehreren Grafikverarbeitungs-Engines des Grafikbeschleunigungsmoduls 1746 zu verrichtenden Arbeit enthält. Die Daten aus dem WD 1784 können in Registern 1745 gespeichert und von der MMU 1739, der Interrupt-Verwaltungsschaltung 1747 und/oder der KontextVerwaltungsschaltung 1748 verwendet werden (siehe Abbildung). Ein Ausführungsbeispiel der MMU 1739 umfasst beispielsweise eine Segment-/Seitenlaufschaltung für den Zugriff auf Segment-/Seitentabellen 1786 im virtuellen Adressraum 1785 des Betriebssystems. Die Interrupt-Verwaltungsschaltung 1747 kann vom Grafikbeschleunigungsmodul 1746 empfangene Interrupt-Ereignisse 1792 verarbeiten. Bei der Durchführung von Grafikoperationen wird eine effektive Adresse 1793, die von einer Grafikverarbeitungs-Engine 1731-1732, N generiert wird, von der MMU 1739 in eine reale Adresse übersetzt.
  • In einem Ausführungsbeispiel wird für jede Grafikverarbeitungs-Engine 1731-1732, N und/oder jedes Grafikbeschleunigungsmodul 1746 ein und derselbe Satz von Registern 1745 dupliziert und kann von einem Hypervisor oder Betriebssystem initialisiert werden. Jedes dieser duplizierten Register kann in einem Beschleunigerintegrationsabschnitt 1790 enthalten sein. Beispielhafte Register, die von einem Hypervisor initialisiert werden können, sind in Tabelle 1 aufgeführt. Tabelle 1 - Vom Hypervisor initialisierte Register
    1 Abschnitts-Steuerregister (engl. Slice Control Register)
    2 Real Address (RA) Scheduled Processes Area Pointer
    3 Authority Mask Override Register
    4 Interrupt-Vektor-Tabelleneintrags-Offset (engl. Interrupt Vector Table Entry Offset)
    5 Interrupt-Vektor-Tabelleneintragsgrenze (engl. Interrupt Vector Table Entry Limit)
    6 Zustandsregister (engl. State Register)
    7 ID von logischen Partitionen (engl. Logical Partition ID)
    8 Real address (RA) Hypervisor Accelerator Utilization Record Pointer)
    9 Speicherbeschreibungsregister (engl. Storage Description Register)
  • Beispielhafte Register, die von einem Betriebssystem initialisiert werden können, sind in Tabelle 2 aufgeführt. Tabelle 2 - Vom Betriebssystem initialisierte Register
    1 Prozess- und Thread-Identifikation
    2 Effective Address (EA) Context Save/Restore Pointer
    3 Virtual Address (VA) Accelerator Utilization Record Pointer
    4 Virtual Address (VA) Storage Segment Table Pointer
    5 Autoritätsmaske (engl. authority mask)
    6 Arbeitsdeskriptor
  • In einem Ausführungsbeispiel ist jeder WD 1784 spezifisch für ein bestimmtes Grafikbeschleunigungsmodul 1746 und/oder eine Grafikverarbeitungs-Engine 1731-1732, N. Er enthält alle Informationen, die eine Grafikverarbeitungs-Engine 1731-1732, N benötigt, um Arbeit zu verrichten, oder er kann ein Zeiger auf einen Speicherplatz sein, an dem eine Anwendung eine Befehlswarteschlange von zu verrichtender Arbeit eingerichtet hat.
  • 17E zeigt zusätzliche Details für ein Ausführungsbeispiel eines gemeinsam genutzten Modells. Dieses Ausführungsbeispiel umfasst einen realen Hypervisor-Adressraum 1798, in dem eine Prozesselementliste 1799 gespeichert ist. Auf den realen Hypervisor-Adressraum 1798 kann über einen Hypervisor 1796 zugegriffen werden, der die Engine des Grafikbeschleunigungsmoduls für das Betriebssystem 1795 virtualisiert.
  • In mindestens einem Ausführungsbeispiel erlauben gemeinsam genutzte Programmiermodelle allen oder einer Teilmenge von Prozessen aus allen oder einer Teilmenge von Partitionen in einem System, ein Grafikbeschleunigungsmodul 1746 zu verwenden. Es gibt zwei Programmiermodelle, bei denen das Grafikbeschleunigungsmodul 1746 von mehreren Prozessen und Partitionen gemeinsam genutzt wird: gemeinsam genutzte Zeitabschnitte und gemeinsam genutzte Grafiken.
  • Bei diesem Modell besitzt der System-Hypervisor 1796 das Grafikbeschleunigungsmodul 1746 und stellt seine Funktion allen Betriebssystemen 1795 zur Verfügung. Damit ein Grafikbeschleunigungsmodul 1746 die Virtualisierung durch den Systemhypervisor 1796 unterstützt, kann das Grafikbeschleunigungsmodul 1746 folgende Bedingungen erfüllen: 1) Die Aufgabenanforderung einer Anwendung muss autonom sein (d. h. der Zustand muss zwischen den Aufgaben nicht aufrechterhalten werden), oder das Grafikbeschleunigungsmodul 1746 muss einen Mechanismus zur Kontextsicherung und - wiederherstellung bereitstellen. 2) Das Grafikbeschleunigungsmodul 1746 garantiert, dass die Aufgabenanforderung einer Anwendung innerhalb einer bestimmten Zeitspanne abgeschlossen wird, einschließlich etwaiger Übersetzungsfehler, oder das Grafikbeschleunigungsmodul 1746 stellt die Möglichkeit bereit, die Verarbeitung einer Aufgabe vorwegzunehmen. 3) Dem Grafikbeschleunigungsmodul 1746 muss Fairness zwischen den Prozessen garantiert werden, wenn es in einem gerichteten, gemeinsam genutzten Programmiermodell arbeitet.
  • In mindestens einem Ausführungsbeispiel muss die Anwendung 1780 einen Systemaufruf des Betriebssystems 1795 mit einem Grafikbeschleunigungsmodul 1746, einem Arbeitsdeskriptor (WD), einem AMR-Wert (Authority Mask Register) und einem CSRP (Context Save/Restore Area Pointer) ausführen. In mindestens einem Ausführungsbeispiel beschreibt der Typ des Grafikbeschleunigungsmoduls 1746 eine gezielte Beschleunigungsfunktion für einen Systemaufruf. In mindestens einem Ausführungsbeispiel kann der Typ des Grafikbeschleunigungsmoduls 1746 ein systemspezifischer Wert sein. In mindestens einem Ausführungsbeispiel ist WD speziell für das Grafikbeschleunigungsmodul 1746 formatiert und kann in Form eines Grafikbeschleunigungsmodul-1746-Befehls, eines effektiven Adresszeigers auf eine benutzerdefinierte Struktur, eines effektiven Adresszeigers auf eine Befehlswarteschlange oder einer anderen Datenstruktur vorliegen, die die vom Grafikbeschleunigungsmodul 1746 zu verrichtende Arbeit beschreibt. In einem Ausführungsbeispiel ist ein AMR-Wert ein AMR-Zustand, der für einen aktuellen Prozess zu verwenden ist. In mindestens einem Ausführungsbeispiel ähnelt ein an ein Betriebssystem übergebener Wert der Einstellung eines AMR durch eine Anwendung. Wenn die Implementierungen der Beschleunigungsschaltung 1736 und des Grafikbeschleunigungsmoduls 1746 kein User Authority Mask Override Register (UAMOR) unterstützen, kann ein Betriebssystem einen aktuellen UAMOR-Wert auf einen AMR-Wert anwenden, bevor ein AMR in einem Hypervisor-Aufruf übergeben wird. Der Hypervisor 1796 kann optional einen aktuellen AMOR-Wert (Authority Mask Override Register) anwenden, bevor ein AMR in das Prozesselement 1783 eingefügt wird. In mindestens einem Ausführungsbeispiel ist CSRP eines der Register 1745, die eine effektive Adresse eines Bereichs im Adressraum 1782 einer Anwendung für das Grafikbeschleunigungsmodul 1746 zur Speicherung und Wiederherstellung des Kontextstatus enthalten. Dieser Zeiger ist optional, wenn kein Zustand zwischen Aufträgen gespeichert werden muss oder wenn eine Aufgabe vorzeitig beendet wird. In mindestens einem Ausführungsbeispiel kann der Kontextspeicher-/Wiederherstellungsbereich im Systemspeicher verankert sein.
  • Beim Empfang eines Systemaufrufs kann das Betriebssystem 1795 überprüfen, ob die Anwendung 1780 registriert ist und die Berechtigung zur Verwendung des Grafikbeschleunigungsmoduls 1746 erhalten hat. Das Betriebssystem 1795 ruft dann den Hypervisor 1796 mit den in Tabelle 3 aufgeführten Informationen auf. Tabelle 3 - Parameter für Aufrufe vom Betriebssystem zum Hypervisor
    1 Arbeitsdeskriptor (WD)
    2 Wert des Autoritätsmasken-Register (AMR) (möglicherweise maskiert)
    3 Effective address (EA) Context Save/Restore Area Pointer (CSRP)
    4 Prozess-ID (PID) und optionale Thread-ID (TID)
    5 Virtual address (VA) accelerator utilization record pointer (AURP)
    6 Virtual address of storage segment table pointer (SSTP)
    7 Logical-Interrupt-Service-Nummer (LISN)
  • Beim Empfang eines Hypervisor-Aufrufs überprüft Hypervisor 1796, ob das Betriebssystem 1795 registriert ist und die Berechtigung zur Verwendung des Grafikbeschleunigungsmoduls 1746 erhalten hat. Hypervisor 1796 fügt dann das Prozesselement 1783 in eine verknüpfte Prozesselementliste für einen entsprechenden Grafikbeschleunigungsmodultyp 1746 ein. Ein Prozesselement kann die in Tabelle 4 dargestellten Informationen enthalten. Tabelle 4 -Prozesselementinformationen
    1 Arbeitsdeskriptor (WD)
    2 Wert des Autoritätsmasken-Register (AMR) (möglicherweise maskiert)
    3 Effective address (EA) Context Save/Restore Area Pointer (CSRP)
    4 Process ID (PID) und optional Thread ID (TID)
    5 Virtual address (VA) accelerator utilization record pointer (AURP)
    6 Virtual address of storage segment table pointer (SSTP)
    7 Logical-Interrupt-Service-Nummer (LISN)
    8 Interrupt-Vektortabelle, abgeleitet von Hypervisor-Aufrufparametern
    9 Wert des Zustandsregisters (SR)
    10 ID von logischen Partitionen (LPID)
    11 Real address (RA) hypervisor accelerator utilization record pointer
    12 Speicherbeschreibungsregister (SDR)
  • In mindestens einem Ausführungsbeispiel initialisiert der Hypervisor eine Vielzahl von Registern 1745 für Beschleunigerintegrationsabschnitte 1790.
  • Wie in 17F gezeigt, wird in mindestens einem Ausführungsbeispiel ein einheitlicher Speicher verwendet, der über einen gemeinsamen virtuellen Speicheradressraum adressierbar ist, der für den Zugriff auf physische Prozessorspeicher 1701-1702 und GPU-Speicher 1720-1723 verwendet wird. Bei dieser Implementierung verwenden Operationen, die auf den GPUs 1710-1713 ausgeführt werden, denselben virtuellen/effektiven Speicheradressraum für den Zugriff auf die Prozessorspeicher 1701-1702 und umgekehrt, was die Programmierbarkeit vereinfacht. In einem Ausführungsbeispiel wird ein erster Teil eines virtuellen/effektiven Adressraums dem Prozessorspeicher 1701 zugewiesen, ein zweiter Teil dem zweiten Prozessorspeicher 1702, ein dritter Teil dem GPU-Speicher 1720 usw. In mindestens einem Ausführungsbeispiel wird dadurch ein gesamter virtueller/effektiver Speicherraum (manchmal auch als effektiver Adressraum bezeichnet) über jeden der Prozessorspeicher 1701-1702 und GPU-Speicher 1720-1723 verteilt, so dass jeder Prozessor oder jede GPU auf jeden physischen Speicher mit einer virtuellen Adresse zugreifen kann, die diesem Speicher zugeordnet ist.
  • In einem Ausführungsbeispiel stellt die Bias/Kohärenz-Management-Schaltung 1794A-1794E innerhalb einer oder mehrerer MMUs 1739A-1739E die Cache-Kohärenz zwischen den Caches eines oder mehrerer Host-Prozessoren (z. B. 1705) und GPUs 1710-1713 sicher und implementiert Bias-Techniken, die angeben, in welchen physischen Speichern bestimmte Datentypen gespeichert werden sollten. Während mehrere Instanzen der Bias/Kohärenz-Management-Schaltung 1794A-1794E in 17F gezeigt sind, kann die Bias/Kohärenz-Schaltung innerhalb einer MMU eines oder mehrerer Host-Prozessoren 1705 und/oder innerhalb der Beschleuniger-Integrationsschaltung 1736 implementiert werden.
  • Ein Ausführungsbeispiel ermöglicht es, dass GPU-angeschlossener Speicher 1720-1723 als Teil des Systemspeichers abgebildet wird und dass auf ihn mit gemeinsam genutzter virtueller Speichertechnologie (SVM) zugegriffen wird, ohne jedoch Leistungsnachteile zu erleiden, die mit vollständiger System-Cache-Kohärenz assoziiert sind. In mindestens einem Ausführungsbeispiel wird durch die Möglichkeit des Zugriffs auf den an die GPU angeschlossenen Speicher 1720-1723 als Systemspeicher ohne lästigen Cache-Kohärenz-Overhead eine vorteilhafte Betriebsumgebung für GPU-Offload bereitgestellt. Diese Anordnung ermöglicht es der Software des Host-Prozessors 1705, Operanden einzustellen und auf Berechnungsergebnisse zuzugreifen, ohne den Overhead herkömmlicher E/A-DMA-Datenkopien. Solche herkömmlichen Kopien beinhalten Treiberaufrufe, Interrupts und speicherabbildende E/A-Zugriffe (MMIO), die alle im Vergleich zu einfachen Speicherzugriffen ineffizient sind. In mindestens einem Ausführungsbeispiel kann die Fähigkeit, ohne Cache-Kohärenz-Overhead auf den an die GPU angeschlossenen Speicher 1720-1723 zuzugreifen, entscheidend für die Ausführungszeit einer ausgelagerten Berechnung sein. In Fällen mit erheblichem Streaming-Schreibspeicherverkehr kann der Cache-Kohärenz-Overhead beispielsweise die effektive Schreibbandbreite einer GPU 1710-1713 erheblich reduzieren. In mindestens einem Ausführungsbeispiel können die Effizienz des Operandenaufbaus, die Effizienz des Ergebniszugriffs und die Effizienz der GPU-Berechnung eine Rolle bei der Bestimmung der Effektivität eines GPU-Offloads spielen.
  • In mindestens einem Ausführungsbeispiel wird die Auswahl des GPU-Bias und des Host-Prozessor-Bias durch eine Bias-Tracker-Datenstruktur gesteuert. Es kann z.B. eine Bias-Tabelle verwendet werden, die eine seitengranulare Struktur sein kann (d.h., die auf der Granularität einer Speicherseite gesteuert wird), die 1 oder 2 Bits pro GPU-angeschlossene Speicherseite enthält. In mindestens einem Ausführungsbeispiel kann eine Bias-Tabelle in einem gestohlenen Speicherbereich eines oder mehrerer GPU-angeschlossener Speicher 1720-1723 implementiert werden, mit oder ohne Bias-Cache in GPU 1710-1713 (z. B. um häufig/kürzlich verwendete Einträge einer Bias-Tabelle zu cachen). Alternativ dazu kann eine gesamte Bias-Tabelle in einer GPU verwaltet werden.
  • In mindestens einem Ausführungsbeispiel wird auf einen Bias-Tabelleneintrag, der mit jedem Zugriff auf den an die GPU angeschlossenen Speicher 1720-1723 assoziiert ist, vor dem tatsächlichen Zugriff auf einen GPU-Speicher zugegriffen, was die folgenden Vorgänge veranlasst. Zunächst werden lokale Anfragen von GPU 1710-1713, die ihre Seite in GPU-Bias finden, direkt an einen entsprechenden GPU-Speicher 1720-1723 weitergeleitet. Lokale Anfragen von einer GPU, die ihre Seite im Host-Bias finden, werden an den Prozessor 1705 weitergeleitet (z. B. über eine Hochgeschwindigkeitsverbindung wie oben beschrieben). In einem Ausführungsbeispiel wird eine Anforderung vom Prozessor 1705, der eine angeforderte Seite im Host-Prozessor-Bias findet, wie eine normale Speicherlesung abgeschlossen. Alternativ dazu können Anforderungen, die an eine GPU-vorgespannte Seite gerichtet sind, an die GPU 1710-1713 weitergeleitet werden. In mindestens einem Ausführungsbeispiel kann eine GPU dann eine Seite in einen Host-Prozessor-Bias überführen, wenn sie die Seite gerade nicht verwendet. In mindestens einem Ausführungsbeispiel kann der Bias-Zustand einer Seite entweder durch einen softwarebasierten Mechanismus, einen hardwareunterstützten softwarebasierten Mechanismus oder, für eine begrenzte Anzahl 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 eines Grafikprozessors aufruft, der wiederum eine Nachricht an einen Grafikprozessor sendet (oder einen Befehlsdeskriptor in die Warteschlange stellt), um ihn anzuweisen, einen Bias-Zustand zu ändern und bei einigen Übergängen einen Cache-Flushing-Vorgang in einem Host durchzuführen. In mindestens einem Ausführungsbeispiel wird die Cache-Flushing-Operation für einen Übergang von der Vorspannung des Host-Prozessors 1705 zur Vorspannung der GPU verwendet, aber nicht für einen entgegengesetzten Übergang.
  • In einem Ausführungsbeispiel wird die Cache-Kohärenz aufrechterhalten, indem GPU-vorgespannte Seiten vom Host-Prozessor 1705 vorübergehend nicht gecacht werden können. Um auf diese Seiten zuzugreifen, kann der Prozessor 1705 den Zugriff von der GPU 1710 anfordern, die den Zugriff sofort gewähren kann oder auch nicht. Um die Kommunikation zwischen dem Prozessor 1705 und der GPU 1710 zu reduzieren, ist es daher vorteilhaft, sicherzustellen, dass GPU-basierte Seiten diejenigen sind, die von einer GPU, aber nicht vom Host-Prozessor 1705 benötigt werden und umgekehrt.
  • Hardware-Struktur(en) 915 werden verwendet, um ein oder mehrere Ausführungsbeispiele durchzuführen. Details bezüglich der Hardwarestruktur(en) 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt.
  • 18 zeigt beispielhafte integrierte Schaltungen und assoziierte Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne gemäß verschiedenen hier beschriebenen Ausführungsbeispielen hergestellt werden können. Zusätzlich zu dem Gezeigten können in mindestens einem Ausführungsbeispiel weitere Logik und Schaltungen enthalten sein, einschließlich zusätzlicher Grafikprozessoren/-kerne, Peripherieschnittstellen-Controller oder Mehrzweck-Prozessorkerne.
  • 18 ist ein Blockdiagramm, das eine beispielhafte integrierte System-on-Chip-Schaltung 1800 zeigt, die unter Verwendung eines oder mehrerer IP-Kerne gemäß mindestens einem Ausführungsbeispiel hergestellt werden kann. In mindestens einem Ausführungsbeispiel enthält die integrierte Schaltung 1800 einen oder mehrere Anwendungsprozessor(en) 1805 (z. B. CPUs), mindestens einen Grafikprozessor 1810 und kann zusätzlich einen Bildprozessor 1815 und/oder einen Videoprozessor 1820 enthalten, von denen jeder ein modularer IP-Kern sein kann. In mindestens einem Ausführungsbeispiel umfasst die integrierte Schaltung 1800 eine Peripherie- oder Buslogik, einschließlich eines USB-Controllers 1825, eines UART-Controllers 1830, eines SPI/SDIO-Controllers 1835 und eines I.sup.2S/I.sup.2C-Controllers 1840. In mindestens einem Ausführungsbeispiel kann die integrierte Schaltung 1800 ein Anzeigegerät 1845 enthalten, das mit einem oder mehreren HDMI-Controllern (High-Definition Multimedia Interface) 1850 und einer MIPI-Anzeigeschnittstelle 1855 (Mobile Industry Processor Interface) gekoppelt ist. In mindestens einem Ausführungsbeispiel kann die Speicherung durch ein Flash-Speicher-Subsystem 1860 mit Flash-Speicher und einem Flash-Speicher-Controller bereitgestellt werden. In mindestens einem Ausführungsbeispiel kann die Speicherschnittstelle über einen Speichercontroller 1865 für den Zugriff auf SDRAM- oder SRAM-Speichergeräte bereitgestellt werden. In mindestens einem Ausführungsbeispiel enthalten einige integrierte Schaltungen zusätzlich eine eingebettete Security-Engine 1870.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit den 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 in der integrierten Schaltung 1800 für Inferenz- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen eines neuronalen Netzwerks, Funktionen und/oder Architekturen eines neuronalen Netzwerks oder hierin beschriebenen Anwendungsfällen eines neuronalen Netzwerks berechnet wurden. In mindestens einem Ausführungsbeispiel kann eine Architektur, wie sie in den 19A und 19B gezeigt ist, verwendet werden, um Worker zu implementieren, die parallel arbeiten, um ein neuronales Netzwerk wie oben beschrieben zu trainieren.
  • 19A und 19B zeigen beispielhafte integrierte Schaltungen und assoziierte Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne gemäß verschiedenen hier beschriebenen Ausführungsbeispielen hergestellt werden können. Zusätzlich zu dem, was gezeigt wird, können in mindestens einem Ausführungsbeispiel auch andere Logik und Schaltungen enthalten sein, einschließlich zusätzlicher Grafikprozessoren/- kerne, Peripherieschnittstellen-Controller oder Allzweck-Prozessorkerne.
  • 19A und 19B sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung in einem SoC gemäß den hier beschriebenen Ausführungsbeispielen zeigen. 19A zeigt einen beispielhaften Grafikprozessor 1910 eines integrierten System-on-Chip-Schaltkreises, der gemäß mindestens einem Ausführungsbeispiel mit einem oder mehreren IP-Kernen hergestellt werden kann. zeigt einen weiteren beispielhaften Grafikprozessor 1940 eines integrierten System-on-Chip-Schaltkreises, der unter Verwendung eines oder mehrerer IP-Kerne gemäß mindestens einem Ausführungsbeispiel hergestellt werden kann. In mindestens einem Ausführungsbeispiel ist der Grafikprozessor 1910 aus 19A ein stromsparender Grafikprozessorkern. In mindestens einem Ausführungsbeispiel ist der Grafikprozessor 1940 aus 19B ein Grafikprozessorkern mit höherer Leistung. In mindestens einem Ausführungsbeispiel kann jeder der Grafikprozessoren 1910, 1940 eine Variante des Grafikprozessors 1810 von 18 sein.
  • In mindestens einem Ausführungsbeispiel umfasst der Grafikprozessor 1910 einen Vertexprozessor 1905 und einen oder mehrere Fragmentprozessor(en) 1915A-1915N (z. B. 1915A, 1915B, 1915C, 1915D bis 1915N-1 und 1915N). In mindestens einem Ausführungsbeispiel kann der Grafikprozessor 1910 verschiedene Shader-Programme über eine separate Logik ausführen, so dass der Vertex-Prozessor 1905 für die Ausführung von Operationen für Vertex-Shader-Programme optimiert ist, während ein oder mehrere Fragment-Prozessor(en) 1915A-1915N Fragment- (z. B. Pixel-) Shading-Operationen für Fragment- oder Pixel-Shader-Programme ausführen. In mindestens einem Ausführungsbeispiel führt der Vertex-Prozessor 1905 eine Vertex-Verarbeitungsstufe einer 3D-Grafikpipeline durch und generiert Primitive und Vertex-Daten. In mindestens einem Ausführungsbeispiel verwenden der/die Fragmentprozessor(en) 1915A-1915N die vom Vertexprozessor 1905 generierten Primitiv- und Vertexdaten, um einen Framebuffer zu erzeugen, der auf einem Anzeigegerät angezeigt wird. In mindestens einem Ausführungsbeispiel ist/sind der/die Fragmentprozessor(en) 1915A-1915N für die Ausführung von Fragment-Shader-Programmen optimiert, wie sie in einer OpenGL-API bereitgestellt werden, die verwendet werden können, um ähnliche Operationen wie ein Pixel-Shader-Programm durchzuführen, wie es in einer Direct 3D-API bereitgestellt wird.
  • In mindestens einem Ausführungsbeispiel umfasst der Grafikprozessor 1910 zusätzlich eine oder mehrere Speicherverwaltungseinheiten (MMUs) 1920A-1920B, einen oder mehrere Cache(s) 1925A-1925B und eine oder mehrere Schaltungsverbindungen 1930A-1930B. In mindestens einem Ausführungsbeispiel stellen eine oder mehrere MMU(s) 1920A-1920B die Zuordnung von virtuellen zu physischen Adressen für den Grafikprozessor 1910 bereit, einschließlich für den Scheitelpunktprozessor 1905 und/oder den/die Fragmentprozessor(en) 1915A-1915N, die auf im Speicher gespeicherte Scheitelpunkt- oder Bild-/Texturdaten verweisen können, zusätzlich zu den Scheitelpunkt- oder Bild-/Texturdaten, die in einem oder mehreren Cache(s) 1925A-1925B gespeichert sind. In mindestens einem Ausführungsbeispiel können eine oder mehrere MMU(s) 1920A-1920B mit anderen MMUs innerhalb des Systems synchronisiert werden, einschließlich einer oder mehrerer MMUs, die mit einem oder mehreren Anwendungsprozessoren 1805, Bildprozessoren 1815 und/oder Videoprozessoren 1820 von 18 assoziiert sind, so dass jeder Prozessor 1805-1820 an einem gemeinsam genutzten oder vereinheitlichten virtuellen Speichersystem teilnehmen kann. In mindestens einem Ausführungsbeispiel ermöglichen eine oder mehrere Schaltungsverbindung(en) 1930A-1930B dem Grafikprozessor 1910 die Verbindung mit anderen IP-Kernen innerhalb des SoC, entweder über einen internen Bus des SoC oder über eine direkte Verbindung.
  • In mindestens einem Ausführungsbeispiel enthält der Grafikprozessor 1940 eine oder mehrere MMU(s) 1920A-1920B, Caches 1925A-1925B und Schaltungsverbindungen 1930A-1930B des Grafikprozessors 1910 von 19A. In mindestens einem Ausführungsbeispiel enthält der Grafikprozessor 1940 einen oder mehrere Shader-Kerne 1955A-1955N (z. B. 1955A, 1955B, 1955C, 1955D, 1955E, 1955F, bis 1955N-1 und 1955N), die eine einheitliche Shader-Kern-Architektur bereitstellen, bei der ein einziger Kern oder Typ oder Kern alle Arten von programmierbarem Shader-Code ausführen kann, einschließlich Shader-Programmcode zum Implementieren von Vertex-Shadern, Fragment-Shadern und/oder Compute-Shadern. In mindestens einem Ausführungsbeispiel kann die Anzahl der Shader-Kerne variieren. In mindestens einem Ausführungsbeispiel enthält der Grafikprozessor 1940 einen Zwischenkern-Aufgabenverwalter 1945, der als Thread-Verteiler fungiert, um Ausführungs-Threads an einen oder mehrere Shader-Kerne 1955A-1955N zu verteilen, und eine Tiling-Einheit 1958, um Tiling-Operationen für kachelbasiertes Rendering zu beschleunigen, bei dem Rendering-Operationen für eine Szene in den Bildraum unterteilt werden, um beispielsweise die lokale räumliche Kohärenz innerhalb einer Szene auszunutzen oder um die Nutzung interner Caches zu optimieren.
  • Inferenz- und/oder Trainingslogik 915 werden verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 in der integrierten Schaltung 19A und/oder 19B für Inferenz- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen für ein neuronales Netzwerk, Funktionen und/oder Architekturen eines neuronalen Netzwerks oder hier beschriebenen Anwendungsfällen für ein neuronales Netzwerk berechnet wurden. In mindestens einem Ausführungsbeispiel kann die in 20A-20B gezeigte Grafikprozessorlogik verwendet werden, um Worker zu implementieren, die parallel arbeiten, um ein neuronales Netzwerk wie oben beschrieben zu trainieren.
  • 20A und 20B zeigen weitere beispielhafte Grafikprozessorlogik gemäß den hier beschriebenen Ausführungsbeispielen. 20A zeigt einen Grafikkern 2000, der in mindestens einem Ausführungsbeispiel im Grafikprozessor 1810 von 18 enthalten sein kann und in mindestens einem Ausführungsbeispiel ein einheitlicher Shader-Kern 1955A-1955N wie in 19B sein kann. 20B zeigt in mindestens einem Ausführungsbeispiel eine hochparallele Mehrzweck-Grafikverarbeitungseinheit 2030, die für den Einsatz auf einem Multi-Chip-Modul geeignet ist.
  • In mindestens einem Ausführungsbeispiel umfasst der Grafikkern 2000 einen gemeinsam genutzten Befehls-Cache 2002, eine Textureinheit 2018 und einen Cache/Gemeinsam genutzten Speicher 2020, die den Ausführungsressourcen innerhalb des Grafikkerns 2000 gemeinsam sind. In mindestens einem Ausführungsbeispiel kann der Grafikkern 2000 mehrere Abschnitte 2001A-2001N oder Partitionen für jeden Kern enthalten, und ein Grafikprozessor kann mehrere Instanzen des Grafikkerns 2000 enthalten. Die Abschnitte 2001A-2001N können Unterstützungslogik einschließlich eines lokalen Befehlscaches 2004A-2004N, eines Thread-Planers 2006A-2006N, eines Thread-Verteilers 2008A-2008N und eines Satzes von Registern 2010A-2010N enthalten. In mindestens einem Ausführungsbeispiel können die Abschnitte 2001A-2001N einen Satz zusätzlicher Funktionseinheiten (AFUs 2012A-2012N), Gleitkommaeinheiten (FPU 2014A-2014N), ganzzahlige arithmetische Logikeinheiten (ALUs 2016-2016N), Adressberechnungseinheiten (ACU 2013A-2013N), Gleitkommaeinheiten mit doppelter Genauigkeit (DPFPU 2015A-2015N) und Matrixverarbeitungseinheiten (MPU 2017A-2017N) enthalten.
  • In mindestens einem Ausführungsbeispiel können die FPUs 2014A-2014N Gleitkommaoperationen mit einfacher Genauigkeit (32 Bit) und halber Genauigkeit (16 Bit) durchführen, während die DPFPUs 2015A-2015N Gleitkommaoperationen mit doppelter Genauigkeit (64 Bit) durchführen. In mindestens einem Ausführungsbeispiel können die ALUs 2016A 2016N Ganzzahl Operationen mit variabler Genauigkeit bei 8-Bit-, 16-Bit- und 32-Bit-Präzision durchführen und können für Operationen mit gemischter Genauigkeit konfiguriert werden. In mindestens einem Ausführungsbeispiel können die MPUs 2017A-2017N auch für Matrixoperationen mit gemischter Genauigkeit konfiguriert werden, einschließlich Gleitkomma- und 8-Bit-Ganzzahloperationen mit halber Genauigkeit. In mindestens einem Ausführungsbeispiel können die MPUs 2017-2017N eine Vielzahl von Matrixoperationen durchführen, um Applikations-Frameworks für maschinelles Lernen zu beschleunigen, einschließlich der Unterstützung für eine beschleunigte allgemeine Matrix-Matrix-Multiplikation (GEMM). In mindestens einem Ausführungsbeispiel können die AFUs 2012A-2012N zusätzliche logische Operationen durchführen, die von Gleitkomma- oder Ganzzahl-Einheiten nicht unterstützt werden, einschließlich trigonometrischer Operationen (z. B. Sinus, Cosinus usw.).
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 im Grafikkern 2000 für Inferenzierungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen für ein neuronales Netzwerk, Funktionen und/oder Architekturen eines neuronalen Netzwerks oder hier beschriebenen Anwendungsfällen für ein neuronales Netzwerk berechnet wurden. In mindestens einem Ausführungsbeispiel kann die in 20A-20B gezeigte Grafikprozessorlogik verwendet werden, um Worker zu implementieren, die parallel arbeiten, um ein neuronales Netzwerk wie oben beschrieben zu trainieren.
  • 20B zeigt eine General-Purpose Processing Unit (GPGPU) 2030, die so konfiguriert werden kann, dass sie in mindestens einem Ausführungsbeispiel die Durchführung hochparalleler Rechenoperationen durch ein Array von Grafikverarbeitungseinheiten ermöglicht. In mindestens einem Ausführungsbeispiel kann die GPGPU 2030 direkt mit anderen Instanzen der GPGPU 2030 verbunden werden, um einen Multi-GPU-Cluster zu bilden und die Trainingsgeschwindigkeit für tiefe neuronale Netzwerke zu verbessern. In mindestens einem Ausführungsbeispiel umfasst die GPGPU 2030 eine Host-Schnittstelle 2032, um eine Verbindung mit einem Host-Prozessor zu ermöglichen. In mindestens einem Ausführungsbeispiel handelt es sich bei der Host-Schnittstelle 2032 um eine PCI-Express-Schnittstelle. In mindestens einem Ausführungsbeispiel kann die Hostschnittstelle 2032 eine herstellerspezifische Kommunikationsschnittstelle oder Kommunikationsstruktur sein. In mindestens einem Ausführungsbeispiel empfängt die GPGPU 2030 Befehle von einem Host-Prozessor und verwendet einen globalen Planer 2034, um die mit diesen Befehlen assoziierten Ausführungsthreads auf eine Reihe von Rechenclustern 2036A-2036H zu verteilen. In mindestens einem Ausführungsbeispiel nutzen die Rechencluster 2036A-2036H gemeinsam einen Cache-Speicher 2038. In mindestens einem Ausführungsbeispiel kann der Cache-Speicher 2038 als übergeordneter Cache für Cache-Speicher innerhalb von Rechenclustern 2036A-2036H dienen.
  • In mindestens einem Ausführungsbeispiel umfasst die GPGPU 2030 einen Speicher 2044A-2044B, der über eine Reihe von Speichercontrollern 2042A-2042B mit den Rechenclustern 2036A-2036H gekoppelt ist. In mindestens einem Ausführungsbeispiel kann der Speicher 2044A-2044B verschiedene Arten von Geräten umfassen, darunter dynamischer Direktzugriffsspeicher (DRAM) oder Grafik-Direktzugriffsspeicher, wie synchroner Grafik-Direktzugriffsspeicher (SGRAM), einschließlich Grafik-Doppeldatenraten-Speicher (GDDR).
  • In mindestens einem Ausführungsbeispiel enthalten die Rechencluster 2036A-2036H jeweils einen Satz von Grafikkernen, wie den Grafikkern 2000 von 20A, der mehrere Arten von Ganzzahl- und Gleitkomma-Logikeinheiten enthalten kann, die Rechenoperationen mit einer Reihe von Genauigkeiten durchführen können, die auch für maschinelle Lernberechnungen geeignet sind. Zum Beispiel kann in mindestens einem Ausführungsbeispiel mindestens eine Teilmenge von Gleitkommaeinheiten in jedem der Rechencluster 2036A-2036H so konfiguriert werden, dass sie 16-Bit- oder 32-Bit-Gleitkommaoperationen durchführen, während eine andere Teilmenge von Gleitkommaeinheiten so konfiguriert werden kann, dass sie 64-Bit-Gleitkommaoperationen durchführt.
  • In mindestens einem Ausführungsbeispiel können mehrere Instanzen der GPGPU 2030 so konfiguriert werden, dass sie als ein Rechencluster arbeiten. In mindestens einem Ausführungsbeispiel variiert die von den Rechenclustern 2036A-2036H für die Synchronisation und den Datenaustausch verwendete Kommunikation zwischen den Ausführungsbeispielen. In mindestens einem Ausführungsbeispiel kommunizieren mehrere Instanzen der GPGPU 2030 über die Host-Schnittstelle 2032. In mindestens einem Ausführungsbeispiel umfasst die GPGPU 2030 einen E/A-Hub 2039, der die GPGPU 2030 mit einer GPU-Verbindung 2040 koppelt, die eine direkte Verbindung zu anderen Instanzen der GPGPU 2030 ermöglicht. In mindestens einem Ausführungsbeispiel ist die GPU-Verbindung 2040 an eine dedizierte GPU-zu-GPU-Brücke gekoppelt, die die Kommunikation und Synchronisation zwischen mehreren Instanzen der GPGPU 2030 ermöglicht. In mindestens einem Ausführungsbeispiel ist GPU-Link 2040 mit einem Hochgeschwindigkeits-Interconnect gekoppelt, um Daten an andere GPGPUs oder Parallelprozessoren zu senden und zu empfangen. In mindestens einem Ausführungsbeispiel befinden sich mehrere Instanzen der GPGPU 2030 in getrennten Datenverarbeitungssystemen und kommunizieren über ein Netzwerk Gerät, das über die Host-Schnittstelle 2032 zugänglich ist. In mindestens einem Ausführungsbeispiel kann die GPU-Verbindung 2040 so konfiguriert sein, dass sie zusätzlich oder alternativ zur Hostschnittstelle 2032 eine Verbindung zu einem Hostprozessor ermöglicht.
  • In mindestens einem Ausführungsbeispiel kann die GPGPU 2030 so konfiguriert sein, dass sie neuronale Netzwerke trainiert. In mindestens einem Ausführungsbeispiel kann die GPGPU 2030 innerhalb einer Inferenzierung-Plattform verwendet werden. In mindestens einem Ausführungsbeispiel, in dem die GPGPU 2030 für Inferenzierung verwendet wird, kann die GPGPU weniger Rechencluster 2036A-2036H umfassen, als wenn die GPGPU für das Training eines neuronalen Netzwerks verwendet wird. In mindestens einem Ausführungsbeispiel kann sich die mit dem Speicher 2044A-2044B assoziierte Speichertechnologie zwischen Inferenz- und Trainingskonfigurationen unterscheiden, wobei den Trainingskonfigurationen Speichertechnologien mit höherer Bandbreite zugewiesen werden. In mindestens einem Ausführungsbeispiel kann die Inferenzkonfiguration der GPGPU 2030 die Inferenz spezifischer Anweisungen unterstützen. Beispielsweise kann in mindestens einem Ausführungsbeispiel eine Inferenzkonfiguration Unterstützung für eine oder mehrere 8-Bit-Integer-Punktprodukt-Anweisungen bereitstellen, die bei Inferenzoperationen für eingesetzte neuronale Netzwerke verwendet werden können.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 in der GPGPU 2030 für Inferenz- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen für ein neuronales Netzwerk, Funktionen und/oder Architekturen eines neuronalen Netzwerks oder hier beschriebenen Anwendungsfällen für ein neuronales Netzwerk berechnet wurden. In mindestens einem Ausführungsbeispiel kann ein Rechnersystem 2100, wie in 21 gezeigt, verwendet werden, um Worker zu implementieren, die parallel arbeiten, um ein neuronales Netzwerk wie oben beschrieben zu trainieren.
  • 21 ist ein Blockdiagramm, das ein Rechnersystem 2100 gemäß mindestens einem Ausführungsbeispiel zeigt. In mindestens einem Ausführungsbeispiel umfasst das Rechnersystem 2100 ein Verarbeitungssubsystem 2101 mit einem oder mehreren Prozessoren 2102 und einem Systemspeicher 2104, der über einen Verbindungspfad kommuniziert, der einen Speicher-Hub 2105 enthalten kann. In mindestens einem Ausführungsbeispiel kann der Speicher-Hub 2105 eine separate Komponente innerhalb einer Chipsatzkomponente sein oder in einen oder mehrere Prozessor(en) 2102 integriert sein. In mindestens einem Ausführungsbeispiel ist der Speicher-Hub 2105 mit einem E/A-Subsystem 2111 über eine Kommunikationsverbindung 2106 gekoppelt. In mindestens einem Ausführungsbeispiel umfasst das E/A-Subsystem 2111 einen E/A-Hub 2107, der es dem Rechnersystem 2100 ermöglichen kann, Eingaben von einem oder mehreren Geräten 2108 zu empfangen. In mindestens einem Ausführungsbeispiel kann der E/A-Hub 2107 einen Display-Controller, der in einem oder mehreren Prozessor(en) 2102 enthalten sein kann, in die Lage versetzen, Ausgaben für ein oder mehrere Anzeigegeräte 2110A bereitzustellen. In mindestens einem Ausführungsbeispiel kann ein oder mehrere mit dem E/A-Hub 2107 gekoppelte(s) Anzeigegerät(e) 2110A ein lokales, internes oder eingebettetes Anzeigegerät umfassen.
  • In mindestens einem Ausführungsbeispiel umfasst das Verarbeitungssubsystem 2101 einen oder mehrere parallele(n) Prozessor(en) 2112, der/die mit dem Speicher-Hub 2105 über einen Bus oder eine andere Kommunikationsverbindung 2113 gekoppelt ist/sind. In mindestens einem Ausführungsbeispiel kann es sich bei der Kommunikationsverbindung 2113 um eine beliebige Anzahl von auf Standards basierenden Kommunikationsverbindungstechnologien oder -protokollen handeln, wie z. B. PCI Express, aber nicht darauf beschränkt, oder um eine herstellerspezifische Kommunikationsschnittstelle oder Kommunikationsstruktur. In mindestens einem Ausführungsbeispiel bilden ein oder mehrere parallele(r) Prozessor(en) 2112 ein rechnerisch fokussiertes Parallel- oder Vektorverarbeitungssystem, das eine große Anzahl von Verarbeitungskernen und/oder Verarbeitungsclustern umfassen kann, wie z. B. einen Prozessor mit vielen integrierten Kernen (MIC). In mindestens einem Ausführungsbeispiel bilden ein oder mehrere parallele(r) Prozessor(en) 2112 ein Grafikverarbeitungs-Subsystem, das Pixel an eines oder mehrere Anzeigegeräte 2110A ausgeben kann, die über einen E/A-Hub 2107 gekoppelt sind. In mindestens einem Ausführungsbeispiel kann ein oder mehrere Parallelprozessor(en) 2112 auch einen Display-Controller und eine Display-Schnittstelle (nicht gezeigt) enthalten, um eine direkte Verbindung mit einem oder mehreren Geräten 2110B zu ermöglichen.
  • In mindestens einem Ausführungsbeispiel kann eine Systemspeichereinheit 2114 mit dem E/A-Hub 2107 verbunden werden, um einen Speichermechanismus für das Rechnersystem 2100 bereitzustellen. In mindestens einem Ausführungsbeispiel kann ein E/A-Switch 2116 verwendet werden, um einen Schnittstellenmechanismus bereitzustellen, der Verbindungen zwischen dem E/A-Hub 2107 und anderen Komponenten ermöglicht, wie z. B. einem Netzwerkadapter 2118 und/oder einem drahtlosen Netzwerkadapter 2119, der in die Plattform integriert werden kann, und verschiedenen anderen Geräten, die über ein oder mehrere Add-in-Geräte 2120 hinzugefügt werden können. In mindestens einem Ausführungsbeispiel kann der Netzwerkadapter 2118 ein Ethernet-Adapter oder ein anderer kabelgebundener Netzwerkadapter sein. In mindestens einem Ausführungsbeispiel kann der drahtlose Netzwerkadapter 2119 eines oder mehrere der folgenden Geräte umfassen: Wi-Fi, Bluetooth, Near Field Communication (NFC) oder ein anderes Netzwerkgerät, das ein oder mehrere drahtlose Funkgeräte umfasst.
  • In mindestens einem Ausführungsbeispiel kann das Rechnersystem 2100 andere, nicht explizit dargestellte Komponenten enthalten, einschließlich USB- oder andere Anschlussverbindungen, optische Speicherlaufwerke, Videoaufnahmegeräte und dergleichen, die ebenfalls mit dem E/A-Hub 2107 verbunden sein können. In mindestens einem Ausführungsbeispiel können Kommunikationspfade, die verschiedene Komponenten in 21 miteinander verbinden, unter Verwendung beliebiger geeigneter Protokolle implementiert werden, wie z.B. auf PCI (Peripheral Component Interconnect) basierende Protokolle (z.B. PCI-Express) oder andere Bus- oder Punkt-zu-Punkt-Kommunikationsschnittstellen und/oder Protokolle, wie z.B. NV-Link High-Speed-Interconnect oder Interconnect-Protokolle.
  • In mindestens einem Ausführungsbeispiel enthalten ein oder mehrere Parallelprozessor(en) 2112 Schaltungen, die für die Grafik- und Videoverarbeitung optimiert sind, einschließlich beispielsweise Videoausgabeschaltungen, und bilden eine Grafikverarbeitungseinheit (GPU). In mindestens einem Ausführungsbeispiel enthalten ein oder mehrere Parallelprozessor(en) 2112 Schaltungen, die für die allgemeine Verarbeitung optimiert sind. In mindestens einem Ausführungsbeispiel können Komponenten des Rechnersystems 2100 mit einem oder mehreren anderen Systemelementen auf einer einzigen integrierten Schaltung integriert sein. Zum Beispiel können in mindestens einem Ausführungsbeispiel ein oder mehrere Parallelprozessoren 2112, ein Speicher-Hub 2105, ein oder mehrere Prozessoren 2102 und ein E/A-Hub 2107 in eine integrierte Schaltung eines System-on-Chip (SoC) integriert werden. In mindestens einem Ausführungsbeispiel können die Komponenten des Rechnersystems 2100 in ein einziges Gehäuse integriert werden, um eine System-in-Package-Konfiguration (SIP) zu bilden. In mindestens einem Ausführungsbeispiel kann zumindest ein Teil der Komponenten des Rechnersystems 2100 in ein Multi-Chip-Modul (MCM) integriert werden, das mit anderen Multi-Chip-Modulen zu einem modularen Rechnersystem zusammengeschaltet werden kann.
  • Inferenz- und/oder Trainingslogik 915 werden verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 im System FIG. 2100 für Inferenz- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen für ein neuronales Netzwerk, Funktionen und/oder Architekturen eines neuronalen Netzwerks oder hier beschriebenen Anwendungsfällen für ein neuronales Netzwerk berechnet wurden. In mindestens einem Ausführungsbeispiel kann ein Parallelprozessor, wie in 22A gezeigt, verwendet werden, um Worker zu implementieren, die parallel arbeiten, um ein neuronales Netzwerk wie oben beschrieben zu trainieren.
  • PROZESSOREN
  • 22A zeigt einen Parallelprozessor 2200 gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel können verschiedene Komponenten des Parallelprozessors 2200 unter Verwendung eines oder mehrerer Geräte mit integrierter Schaltung implementiert werden, wie z.B. programmierbare Prozessoren, anwendungsspezifische integrierte Schaltungen (ASICs) oder feldprogrammierbare Gate-Arrays (FPGAs). In mindestens einem Ausführungsbeispiel ist der gezeigte Parallelprozessor 2200 eine Variante eines oder mehrerer Parallelprozessoren 2112, die in 21 gemäß einem Ausführungsbeispiel gezeigt sind.
  • In mindestens einem Ausführungsbeispiel umfasst der Parallelprozessor 2200 eine Parallelverarbeitungseinheit 2202. In mindestens einem Ausführungsbeispiel umfasst die Parallelverarbeitungseinheit 2202 eine E/A-Einheit 2204, die die Kommunikation mit anderen Geräten ermöglicht, einschließlich anderer Instanzen der Parallelverarbeitungseinheit 2202. In mindestens einem Ausführungsbeispiel kann die E/A-Einheit 2204 direkt mit anderen Geräten verbunden sein. In mindestens einem Ausführungsbeispiel ist die E/A-Einheit 2204 über eine Hub- oder Switch-Schnittstelle, wie z. B. den Memory Hub 2105, mit anderen Geräten verbunden. In mindestens einem Ausführungsbeispiel bilden die Verbindungen zwischen dem Speicher-Hub 2105 und der E/A-Einheit 2204 eine Kommunikationsverbindung 2113. In mindestens einem Ausführungsbeispiel ist die E/A-Einheit 2204 mit einer Host-Schnittstelle 2206 und einer Memory Crossbar 2216 verbunden, wobei die Host-Schnittstelle 2206 Befehle zur Durchführung von Verarbeitungsoperationen und die Memory Crossbar 2216 Befehle zur Durchführung von Speicheroperationen empfängt.
  • In mindestens einem Ausführungsbeispiel, wenn die Host-Schnittstelle 2206 einen Befehlspuffer über die E/A-Einheit 2204 empfängt, kann die Host-Schnittstelle 2206 Arbeitsoperationen zur Ausführung dieser Befehle an ein Frontend 2208 weiterleiten. In mindestens einem Ausführungsbeispiel ist das Frontend 2208 mit einem Planer 2210 gekoppelt, der so konfiguriert ist, dass er Befehle oder andere Arbeitselemente an ein Verarbeitungscluster-Array 2212 verteilt. In mindestens einem Ausführungsbeispiel stellt der Planer 2210 sicher, dass das verarbeitende Cluster-Array 2212 ordnungsgemäß konfiguriert ist und sich in einem gültigen Zustand befindet, bevor die Aufgaben an das verarbeitende Cluster-Array 2212 des verarbeitenden Cluster-Arrays 2212 verteilt werden. In mindestens einem Ausführungsbeispiel ist der Planer 2210 über eine Firmware-Logik implementiert, die auf einem Mikrocontroller ausgeführt wird. In mindestens einem Ausführungsbeispiel ist der von einem Mikrocontroller implementierte Planer 2210 so konfigurierbar, dass er komplexe Planungs- und Arbeitsverteilungsoperationen mit grober und feiner Granularität durchführen kann, wodurch eine schnelle Vorrangstellung und Kontextumschaltung von Threads ermöglicht wird, die auf dem verarbeitenden Array 2212 ausgeführt werden. In mindestens einem Ausführungsbeispiel kann die Host-Software Arbeitslasten für die Planung auf dem Array 2212 über eine von mehreren Grafikverarbeitungs-Türglocken nachweisen. In mindestens einem Ausführungsbeispiel können die Arbeitslasten dann automatisch über das verarbeitende Array 2212 durch die Logik des Planers 2210 innerhalb eines Mikrocontrollers, der den Planer 2210 enthält, verteilt werden.
  • In mindestens einem Ausführungsbeispiel kann das Array 2212 bis zu „N“ Verarbeitungscluster (z.B. Cluster 2214A, Cluster 2214B bis Cluster 2214N) umfassen. In mindestens einem Ausführungsbeispiel kann jeder Cluster 2214A-2214N des Verarbeitungscluster-Arrays 2212 eine große Anzahl von gleichzeitigen Threads ausführen. In mindestens einem Ausführungsbeispiel kann der Planer 2210 den Clustern 2214A-2214N des verarbeitenden Cluster-Arrays 2212 Arbeit zuweisen, indem er verschiedene Planungs- und/oder Arbeitsverteilungsalgorithmen verwendet, die in Abhängigkeit von der Arbeitslast variieren können, die für jede Art von Programm oder Berechnung entsteht. In mindestens einem Ausführungsbeispiel kann die Planung dynamisch durch den Planer 2210 erfolgen oder teilweise durch die Compilerlogik während der Kompilierung der Programmlogik, die für die Ausführung durch das verarbeitende Cluster-Array 2212 konfiguriert ist, unterstützt werden. In mindestens einem Ausführungsbeispiel können verschiedene Cluster 2214A-2214N des verarbeitenden Cluster-Arrays 2212 für die Verarbeitung verschiedener Arten von Programmen oder für die Durchführung verschiedener Arten von Berechnungen zugewiesen werden.
  • In mindestens einem Ausführungsbeispiel kann das verarbeitende Cluster-Array 2212 so konfiguriert werden, dass es verschiedene Arten von parallelen Verarbeitungsvorgängen durchführt. In mindestens einem Ausführungsbeispiel ist das verarbeitende Cluster-Array 2212 so konfiguriert, dass es parallele Allzweck-Rechenoperationen durchführt. In mindestens einem Ausführungsbeispiel kann das verarbeitende Cluster-Array 2212 beispielsweise eine Logik zur Ausführung von Verarbeitungsaufgaben enthalten, einschließlich der Filterung von Video- und/oder Audiodaten, der Durchführung von Modellierungsoperationen, einschließlich physikalischer Operationen, und der Durchführung von Datentransformationen.
  • In mindestens einem Ausführungsbeispiel ist das verarbeitende Cluster-Array 2212 so konfiguriert, dass es parallele Grafikverarbeitungsoperationen durchführt. In mindestens einem Ausführungsbeispiel kann das verarbeitende Cluster-Array 2212 zusätzliche Logik enthalten, um die Ausführung solcher Grafikverarbeitungsoperationen zu unterstützen, einschließlich, aber nicht beschränkt auf Textur-Sampling-Logik, um Texturoperationen durchzuführen, sowie Tesselation-Logik und andere Vertex-Verarbeitungslogik. In mindestens einem Ausführungsbeispiel kann das Array 2212 so konfiguriert werden, dass es Shader-Programme für die Grafikverarbeitung ausführt, wie z. B. Vertex-Shader, Tesselation-Shader, Geometrie-Shader und Pixel-Shader, aber nicht darauf beschränkt. In mindestens einem Ausführungsbeispiel kann die Parallelverarbeitungseinheit 2202 Daten aus dem Systemspeicher über die E/A-Einheit 2204 zur Verarbeitung übertragen. In mindestens einem Ausführungsbeispiel können die übertragenen Daten während der Verarbeitung im On-Chip-Speicher (z. B. im Parallelprozessorspeicher 2222) gespeichert und dann in den Systemspeicher zurückgeschrieben werden.
  • In mindestens einem Ausführungsbeispiel, wenn die Parallelverarbeitungseinheit 2202 zur Durchführung der Grafikverarbeitung verwendet wird, kann der Planer 2210 so konfiguriert werden, dass er eine Verarbeitungslast in ungefähr gleich große Aufgaben aufteilt, um eine bessere Verteilung der Grafikverarbeitungsoperationen auf mehrere Cluster 2214A-2214N des Verarbeitungscluster-Arrays 2212 zu ermöglichen. In mindestens einem Ausführungsbeispiel können Teile des Verarbeitungscluster-Arrays 2212 so konfiguriert werden, dass sie verschiedene Arten der Verarbeitung durchführen. In mindestens einem Ausführungsbeispiel kann beispielsweise ein erster Teil so konfiguriert sein, dass er Vertex-Shading und Topologieerzeugung durchführt, ein zweiter Teil kann so konfiguriert sein, dass er Tesselation und Geometrie-Shading durchführt, und ein dritter Teil kann so konfiguriert sein, dass er Pixel-Shading oder andere Operationen im Bildschirmraum durchführt, um ein gerendertes Bild für die Anzeige zu erzeugen. In mindestens einem Ausführungsbeispiel können Zwischendaten, die von einem oder mehreren der Cluster 2214A-2214N erzeugt werden, in Puffern gespeichert werden, damit Zwischendaten zur weiteren Verarbeitung zwischen den Clustern 2214A-2214N übertragen werden können.
  • In mindestens einem Ausführungsbeispiel kann das Verarbeitungscluster-Array 2212 über den Planer 2210, der Befehle zur Definition von Verarbeitungsaufgaben vom Frontend 2208 erhält, auszuführende Verarbeitungsaufgaben empfangen. In mindestens einem Ausführungsbeispiel können die Verarbeitungsaufgaben Indizes der zu verarbeitenden Daten enthalten, 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). In mindestens einem Ausführungsbeispiel kann der Planer 2210 so konfiguriert sein, dass er den Aufgaben entsprechende Indizes abruft oder Indizes vom Frontend 2208 empfängt. In mindestens einem Ausführungsbeispiel kann das vordere Ende 2208 so konfiguriert sein, dass es sicherstellt, dass das Verarbeitungscluster-Array 2212 in einen gültigen Zustand versetzt wird, bevor eine durch eingehende Befehlspuffer (z. B. Batch-Puffer, Push-Puffer usw.) spezifizierte Arbeitslast eingeleitet wird.
  • In mindestens einem Ausführungsbeispiel kann jede von einer oder mehreren Instanzen der Parallelverarbeitungseinheit 2202 mit dem Parallelprozessorspeicher 2222 gekoppelt werden. In mindestens einem Ausführungsbeispiel kann auf den Parallelprozessorspeicher 2222 über eine Memory Crossbar 2216 zugegriffen werden, die Speicheranforderungen vom Verarbeitungscluster-Array 2212 sowie von der E/A-Einheit 2204 empfangen kann. In mindestens einem Ausführungsbeispiel kann die Memory Crossbar 2216 über eine Speicherschnittstelle 2218 auf den parallelen Prozessorspeicher 2222 zugreifen. In mindestens einem Ausführungsbeispiel kann die Speicherschnittstelle 2218 mehrere Partitionseinheiten (z. B. Partitionseinheit 2220A, Partitionseinheit 2220B bis Partitionseinheit 2220N) umfassen, die jeweils mit einem Teil (z. B. Speichereinheit) des Parallelprozessorspeichers 2222 gekoppelt werden können. In mindestens einem Ausführungsbeispiel ist eine Anzahl von Partitionseinheiten 2220A-2220N so konfiguriert, dass sie gleich einer Anzahl von Speichereinheiten ist, so dass eine erste Partitionseinheit 2220A eine entsprechende erste Speichereinheit 2224A hat, eine zweite Partitionseinheit 2220B eine entsprechende Speichereinheit 2224B hat und eine N-te Partitionseinheit 2220N eine entsprechende N-te Speichereinheit 2224N hat. In mindestens einem Ausführungsbeispiel kann eine Anzahl von Partitionseinheiten 2220A-2220N nicht gleich einer Anzahl von Speichergeräten sein.
  • In mindestens einem Ausführungsbeispiel können die Speichereinheiten 2224A-2224N verschiedene Arten von Geräten umfassen, einschließlich dynamischer Direktzugriffsspeicher (DRAM) oder Grafik-Direktzugriffsspeicher, wie synchroner Grafik-Direktzugriffsspeicher (SGRAM), einschließlich Grafik-Doppeldatenraten-Speicher (GDDR). In mindestens einem Ausführungsbeispiel können die Speichereinheiten 2224A-2224N auch 3D-Stapelspeicher enthalten, einschließlich, aber nicht beschränkt auf HBM-Speicher (High Bandwidth Memory). In mindestens einem Ausführungsbeispiel können Rendering-Ziele, wie z. B. Frame-Puffer oder Textur-Maps, über die Speichereinheiten 2224A-2224N hinweg gespeichert werden, so dass die Partitionseinheiten 2220A-2220N Teile jedes Rendering-Ziels parallel schreiben können, um die verfügbare Bandbreite des Parallelprozessorspeichers 2222 effizient zu nutzen. In mindestens einem Ausführungsbeispiel kann eine lokale Instanz des parallelen Prozessorspeichers 2222 zugunsten eines vereinheitlichten Speicherdesigns ausgeschlossen werden, das den Systemspeicher in Verbindung mit dem lokalen Cache-Speicher nutzt.
  • In mindestens einem Ausführungsbeispiel kann jeder der Cluster 2214A-2214N des Verarbeitungscluster-Arrays 2212 Daten verarbeiten, die in eine der Speichereinheiten 2224A-2224N im Parallelprozessorspeicher 2222 geschrieben werden. In mindestens einem Ausführungsbeispiel kann die Memory Crossbar 2216 so konfiguriert werden, dass sie eine Ausgabe jedes Clusters 2214A-2214N an eine beliebige Partitionseinheit 2220A-2220N oder an einen anderen Cluster 2214A-2214N überträgt, der zusätzliche Verarbeitungsvorgänge an einer Ausgabe durchführen kann. In mindestens einem Ausführungsbeispiel kann jeder Cluster 2214A-2214N mit der Speicherschnittstelle 2218 über die Memory Crossbar 2216 kommunizieren, um von verschiedenen externen Geräten zu lesen oder in diese zu schreiben. In mindestens einem Ausführungsbeispiel hat die Speicher-Crossbar 2216 eine Verbindung zur Speicherschnittstelle 2218, um mit der E/A-Einheit 2204 zu kommunizieren, sowie eine Verbindung zu einer lokalen Instanz des Parallelprozessorspeichers 2222, so dass die Verarbeitungseinheiten in den verschiedenen Verarbeitungsclustern 2214A-2214N mit dem Systemspeicher oder einem anderen Speicher kommunizieren können, der nicht lokal zur Parallelverarbeitungseinheit 2202 gehört. In mindestens einem Ausführungsbeispiel kann die Memory Crossbar 2216 virtuelle Kanäle verwenden, um Verkehrsströme zwischen Clustern 2214A-2214N und Partitionseinheiten 2220A 2220N zu trennen.
  • In mindestens einem Ausführungsbeispiel können mehrere Instanzen der Parallelverarbeitungseinheit 2202 auf einer einzigen Add-in-Karte bereitgestellt werden, oder es können mehrere Add-in-Karten zusammengeschaltet werden. In mindestens einem Ausführungsbeispiel können verschiedene Instanzen der Parallelverarbeitungseinheit 2202 so konfiguriert werden, dass sie auch dann zusammenarbeiten, wenn die verschiedenen Instanzen eine unterschiedliche Anzahl von Verarbeitungskernen, unterschiedliche Mengen an lokalem Parallelprozessorspeicher und/oder andere Konfigurationsunterschiede aufweisen. Zum Beispiel können in mindestens einem Ausführungsbeispiel einige Instanzen der Parallelverarbeitungseinheit 2202 im Vergleich zu anderen Instanzen Gleitkommaeinheiten mit höherer Präzision enthalten. In mindestens einem Ausführungsbeispiel können Systeme, die eine oder mehrere Instanzen der Parallelverarbeitungseinheit 2202 oder des Parallelprozessors 2200 enthalten, in einer Vielzahl von Konfigurationen und Formfaktoren implementiert werden, einschließlich, aber nicht beschränkt auf Desktop-, Laptop- oder Handheld-Rechner, Server, Workstations, Spielkonsolen und/oder eingebettete Systeme.
  • 22B ist ein Blockdiagramm einer Partitionseinheit 2220 gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel ist die Partitionseinheit 2220 ein Beispiel für eine der Partitionseinheiten 2220A-2220N aus 22A. In mindestens einem Ausführungsbeispiel umfasst die Partitionseinheit 2220 einen L2-Cache 2221, eine Bildpufferschnittstelle 2225 und eine ROP 2226 (Rasteroperationseinheit). Der L2-Cache 2221 ist ein Lese-/Schreib-Cache, der so konfiguriert ist, dass er Lade- und Speicheroperationen ausführt, die von der Speicher-Crossbar 2216 und der ROP 2226 empfangen werden. In mindestens einem Ausführungsbeispiel werden Lesefehler und dringende Rückschreibanforderungen vom L2-Cache 2221 an die Framepufferschnittstelle 2225 zur Verarbeitung ausgegeben. In mindestens einem Ausführungsbeispiel können Aktualisierungen auch über die Framepufferschnittstelle 2225 zur Verarbeitung an einen Framepuffer gesendet werden. In mindestens einem Ausführungsbeispiel ist die Framepufferschnittstelle 2225 mit einer der Speichereinheiten im parallelen Prozessorspeicher verbunden, wie z.B. den Speichereinheiten 2224A-2224N von 22 (z.B. im parallelen Prozessorspeicher 2222).
  • In mindestens einem Ausführungsbeispiel ist ROP 2226 eine Verarbeitungseinheit, die Rasteroperationen wie Schablone, Z-Test, Blending und ähnliches durchführt. In mindestens einem Ausführungsbeispiel gibt ROP 2226 dann verarbeitete Grafikdaten aus, die im Grafikspeicher abgelegt werden. In mindestens einem Ausführungsbeispiel enthält ROP 2226 eine Komprimierungslogik zur Komprimierung von Tiefen- oder Farbdaten, die in den Speicher geschrieben werden, und zur Dekomprimierung von Tiefen- oder Farbdaten, die aus dem Speicher gelesen werden. In mindestens einem Ausführungsbeispiel kann die Komprimierungslogik eine verlustfreie Komprimierungslogik sein, die einen oder mehrere von mehreren Komprimierungsalgorithmen verwendet. Die Art der von ROP 2226 durchgeführten Komprimierung kann basierend auf den statistischen Charakteristika der zu komprimierenden Daten variieren. Zum Beispiel wird in mindestens einem Ausführungsbeispiel eine Delta-Farbkompression auf Tiefen- und Farbdaten auf einer Pro-Kachel-Basis durchgeführt.
  • In mindestens einem Ausführungsbeispiel ist ROP 2226 in jedem Verarbeitungscluster (z. B. Cluster 2214A-2214N von 22) statt in der Partitionseinheit 2220 enthalten. In mindestens einem Ausführungsbeispiel werden Lese- und Schreibanforderungen für Pixeldaten über die Crossbar 2216 des Speichers anstelle von Pixelfragmentdaten übertragen. In mindestens einem Ausführungsbeispiel können verarbeitete Grafikdaten auf einem Anzeigegerät, wie einem von einem oder mehreren Anzeigegeräten 2110 von 21, zur weiteren Verarbeitung durch Prozessor(en) 2102 oder zur weiteren Verarbeitung durch eine der Verarbeitungseinheiten innerhalb des Parallelprozessors 2200 von 22A weitergeleitet werden.
  • 22C ist ein Blockdiagramm eines Verarbeitungsclusters 2214 innerhalb einer Parallelverarbeitungseinheit gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel ist ein Verarbeitungscluster eine Instanz von einem der Verarbeitungscluster 2214A-2214N von 22. In mindestens einem Ausführungsbeispiel kann der Verarbeitungscluster 2214 so konfiguriert sein, dass er viele Threads parallel ausführt, wobei sich der Begriff „Thread“ auf eine Instanz eines bestimmten Programms bezieht, das auf einem bestimmten Satz von Eingabedaten ausgeführt wird. In mindestens einem Ausführungsbeispiel werden SIMD-Befehlsausgabetechniken (Single-Instruction, Multiple-Data) verwendet, um die parallele Ausführung einer großen Anzahl von Threads zu unterstützen, ohne mehrere unabhängige Befehlseinheiten bereitzustellen. In mindestens einem Ausführungsbeispiel werden SIMT-Techniken (Single-Instruction, Multiple-Thread) verwendet, um die parallele Ausführung einer großen Anzahl von im Allgemeinen synchronisierten Threads zu unterstützen, wobei eine gemeinsame Befehlseinheit verwendet wird, die so konfiguriert ist, dass sie Befehle an einen Satz von Verarbeitungs-Engines innerhalb jedes der Verarbeitungscluster ausgibt.
  • In mindestens einem Ausführungsbeispiel kann der Betrieb des Verarbeitungsclusters 2214 über einen Pipeline-Verwalter 2232 gesteuert werden, der die Verarbeitungsaufgaben an parallele SIMT-Prozessoren verteilt. In mindestens einem Ausführungsbeispiel empfängt der Pipeline-Verwalter 2232 Anweisungen vom Planer 2210 von 22 und verwaltet die Ausführung dieser Anweisungen über einen Grafik-Multiprozessor 2234 und/oder eine Textureinheit 2236. In mindestens einem Ausführungsbeispiel ist der Grafik-Multiprozessor 2234 eine beispielhafte Instanz eines SIMT-Parallelprozessors. In mindestens einem Ausführungsbeispiel können jedoch verschiedene Arten von SIMT-Parallelprozessoren mit unterschiedlichen Architekturen im Verarbeitungscluster 2214 enthalten sein. In mindestens einem Ausführungsbeispiel können eine oder mehrere Instanzen des Grafik-Multiprozessors 2234 in einem Verarbeitungscluster 2214 enthalten sein. In mindestens einem Ausführungsbeispiel kann der Grafik-Multiprozessor 2234 Daten verarbeiten, und eine Daten Crossbar 2240 kann verwendet werden, um die verarbeiteten Daten an eines von mehreren möglichen Zielen, einschließlich anderer Shader-Einheiten, zu verteilen. In mindestens einem Ausführungsbeispiel kann der Pipeline-Verwalter 2232 die Verteilung verarbeiteter Daten erleichtern, indem er Ziele für verarbeitete Daten angibt, die über die Daten-Crossbar 2240 verteilt werden sollen.
  • In mindestens einem Ausführungsbeispiel kann jeder Grafik-Multiprozessor 2234 innerhalb des Verarbeitungsclusters 2214 einen identischen Satz funktionaler Ausführungslogik enthalten (z. B. arithmetische Logikeinheiten, Lastspeichereinheiten usw.). In mindestens einem Ausführungsbeispiel kann die funktionale Ausführungslogik in einer Pipeline konfiguriert werden, in der neue Befehle ausgegeben werden können, bevor vorherige Befehle abgeschlossen sind. In mindestens einem Ausführungsbeispiel unterstützt die funktionale Ausführungslogik eine Vielzahl von Operationen, darunter Ganzzahl- und Gleitkommaarithmetik, Vergleichsoperationen, boolesche Operationen, Bitverschiebung und die Berechnung verschiedener algebraischer Funktionen. In mindestens einem Ausführungsbeispiel kann dieselbe Hardware mit Funktionseinheiten genutzt werden, um verschiedene Operationen auszuführen, und es kann eine beliebige Kombination von Funktionseinheiten vorhanden sein.
  • In mindestens einem Ausführungsbeispiel bilden die an den Verarbeitungscluster 2214 übertragenen Anweisungen einen Thread. In mindestens einem Ausführungsbeispiel ist ein Satz von Threads, die über einen Satz von parallelen Verarbeitungs-Engines ausgeführt werden, eine Thread-Gruppe. In mindestens einem Ausführungsbeispiel führt die Thread-Gruppe ein Programm mit unterschiedlichen Eingabedaten aus. In mindestens einem Ausführungsbeispiel kann jeder Thread innerhalb einer Thread-Gruppe einer anderen Verarbeitungs-Engine innerhalb eines Grafik-Multiprozessors 2234 zugewiesen werden. In mindestens einem Ausführungsbeispiel kann eine Thread-Gruppe weniger Threads umfassen als eine Anzahl von Verarbeitungs-Engines innerhalb des Grafik-Multiprozessors 2234. In mindestens einem Ausführungsbeispiel kann, wenn eine Thread-Gruppe weniger Threads als eine Anzahl von Verarbeitungs-Engines umfasst, eine oder mehrere der Verarbeitungs-Engines während der Zyklen, in denen diese Thread-Gruppe verarbeitet wird, im Leerlauf sein. In mindestens einem Ausführungsbeispiel kann eine Thread-Gruppe auch mehr Threads umfassen als eine Anzahl von Verarbeitungs-Engines innerhalb des Grafik-Multiprozessors 2234. In mindestens einem Ausführungsbeispiel kann die Verarbeitung in aufeinanderfolgenden Taktzyklen erfolgen, wenn eine Thread-Gruppe mehr Threads als Verarbeitungs-Engines innerhalb des Grafik-Multiprozessors 2234 umfasst. In mindestens einem Ausführungsbeispiel können mehrere Thread-Gruppen gleichzeitig auf einem Grafik-Multiprozessor 2234 ausgeführt werden.
  • In mindestens einem Ausführungsbeispiel enthält der Grafik-Multiprozessor 2234 einen internen Cache-Speicher, um Lade- und Speicheroperationen durchzuführen. In mindestens einem Ausführungsbeispiel kann der Grafik-Multiprozessor 2234 auf einen internen Cache verzichten und einen Cache-Speicher (z. B. L1-Cache 2248) innerhalb des Verarbeitungsclusters 2214 verwenden. In mindestens einem Ausführungsbeispiel hat jeder Grafik-Multiprozessor 2234 auch Zugriff auf L2-Caches innerhalb von Partitionseinheiten (z. B. Partitionseinheiten 2220A-2220N von 22), die von allen Verarbeitungsclustern 2214 gemeinsam genutzt werden und zur Datenübertragung zwischen Threads verwendet werden können. In mindestens einem Ausführungsbeispiel kann der Grafik-Multiprozessor 2234 auch auf den globalen Speicher außerhalb des Chips zugreifen, der einen oder mehrere lokale Parallelprozessorspeicher und/oder Systemspeicher umfassen kann. In mindestens einem Ausführungsbeispiel kann jeder Speicher außerhalb der Parallelverarbeitungseinheit 2202 als globaler Speicher verwendet werden. In mindestens einem Ausführungsbeispiel umfasst der Verarbeitungscluster 2214 mehrere Instanzen des Grafik-Multiprozessors 2234, die gemeinsam genutzte Anweisungen und Daten verwenden können, die im L1-Cache 2248 gespeichert werden können.
  • In mindestens einem Ausführungsbeispiel kann jeder Verarbeitungscluster 2214 eine MMU 2245 (Memory Management Unit) enthalten, die so konfiguriert ist, dass sie virtuelle Adressen auf physische Adressen abbildet. In mindestens einem Ausführungsbeispiel können sich eine oder mehrere Instanzen der MMU 2245 innerhalb der Speicherschnittstelle 2218 von 22 befinden. In mindestens einem Ausführungsbeispiel umfasst MMU 2245 einen Satz von Seitentabelleneinträgen (PTEs), die zur Abbildung einer virtuellen Adresse auf eine physische Adresse einer Kachel (mehr über Kacheln) verwendet werden, und optional einen Cache-Zeilenindex. In mindestens einem Ausführungsbeispiel kann die MMU 2245 Adressübersetzungs-Lookaside-Puffer (TLB) oder Caches enthalten, die sich im Grafik-Multiprozessor 2234 oder im L1-Cache oder im Verarbeitungscluster 2214 befinden können. In mindestens einem Ausführungsbeispiel wird die physikalische Adresse verarbeitet, um die Zugriffslokalität auf die Oberflächendaten zu verteilen, um eine effiziente Verschachtelung der Anforderungen zwischen den Partitionseinheiten zu ermöglichen. In mindestens einem Ausführungsbeispiel kann der Cache-Zeilen-Index verwendet werden, um zu bestimmen, ob eine Anforderung für eine Cache-Zeile ein Hit oder Miss ist.
  • In mindestens einem Ausführungsbeispiel kann ein Verarbeitungscluster 2214 so konfiguriert sein, dass jeder Grafik-Multiprozessor 2234 mit einer Textureinheit 2236 gekoppelt ist, um Texturabbildungsoperationen durchzuführen, z. B. Bestimmen von Textur-Sample-Positionen, Lesen von Texturdaten und Filtern von Texturdaten. In mindestens einem Ausführungsbeispiel werden die Texturdaten aus einem internen Textur-L1-Cache (nicht gezeigt) oder aus einem L1-Cache innerhalb des Grafik-Multiprozessors 2234 gelesen und je nach Bedarf aus einem L2-Cache, einem lokalen Parallelprozessorspeicher oder dem Systemspeicher abgerufen. In mindestens einem Ausführungsbeispiel gibt jeder Grafikmultiprozessor 2234 verarbeitete Aufgaben an die Daten Crossbar 2240 aus, um die verarbeitete Aufgabe einem anderen Verarbeitungscluster 2214 zur weiteren Verarbeitung bereitzustellen oder um die verarbeitete Aufgabe in einem L2-Cache, einem lokalen Parallelprozessorspeicher oder Systemspeicher über die Memory Crossbar 2216 zu speichern. In mindestens einem Ausführungsbeispiel ist preROP 2242 (Pre-Raster Operations Unit) so konfiguriert, dass es Daten vom Grafik-Multiprozessor 2234 empfängt und Daten an ROP-Einheiten weiterleitet, die mit den hier beschriebenen Partitionseinheiten angeordnet sein können (z. B. Partitionseinheiten 2220A-2220N von 22). In mindestens einem Ausführungsbeispiel kann die PreROP-Einheit 2242 Optimierungen für die Farbmischung vornehmen, Pixelfarbdaten organisieren und Adressübersetzungen vornehmen.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 im Grafikverarbeitungscluster 2214 für Inferenzierungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen für ein neuronales Netzwerk, Funktionen und/oder Architekturen eines neuronalen Netzwerks oder hier beschriebenen Anwendungsfällen für ein neuronales Netzwerk berechnet wurden. In mindestens einem Ausführungsbeispiel kann ein Grafik-Multiprozessor, wie in 22D gezeigt, verwendet werden, um Worker zu implementieren, die parallel arbeiten, um ein neuronales Netzwerk wie oben beschrieben zu trainieren.
  • 22D zeigt einen Grafik-Multiprozessor 2234 gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel koppelt der Grafik-Multiprozessor 2234 mit dem Pipeline-Verwalter 2232 des Verarbeitungsclusters 2214. In mindestens einem Ausführungsbeispiel hat der Grafikmultiprozessor 2234 eine Ausführungspipeline, die unter anderem einen Befehlscache 2252, eine Befehlseinheit 2254, eine Adressabbildungseinheit 2256, eine Registerdatei 2258, einen oder mehrere GPGPU-Kerne 2262 und eine oder mehrere Lade-/Speichereinheiten 2266 umfasst. Die GPGPU-Kerne 2262 und die Lade-/Speichereinheiten 2266 sind mit dem Cache-Speicher 2272 und dem gemeinsam genutzten Speicher 2270 über eine Speicher- und Cache-Verbindung 2268 gekoppelt.
  • In mindestens einem Ausführungsbeispiel empfängt der Befehlscache 2252 einen Strom von auszuführenden Befehlen vom Pipeline-Verwalter 2232. In mindestens einem Ausführungsbeispiel werden die Befehle im Befehlscache 2252 zwischengespeichert und von der Befehlseinheit 2254 zur Ausführung weitergeleitet. In mindestens einem Ausführungsbeispiel kann die Befehlseinheit 2254 Befehle als Thread-Gruppen (z. B. Warps) versenden, wobei jeder Thread einer Thread-Gruppe einer anderen Ausführungseinheit innerhalb des GPGPU-Kerns 2262 zugewiesen ist. In mindestens einem Ausführungsbeispiel kann ein Befehl auf einen lokalen, gemeinsam genutzten oder globalen Adressraum zugreifen, indem er eine Adresse innerhalb eines einheitlichen Adressraums angibt. In mindestens einem Ausführungsbeispiel kann die Adressabbildungseinheit 2256 verwendet werden, um Adressen in einem einheitlichen Adressraum in eine eindeutige Speicheradresse zu übersetzen, auf die die Lade-/Speichereinheiten 2266 zugreifen können.
  • In mindestens einem Ausführungsbeispiel stellt die Registerdatei 2258 einen Satz von Registern für Funktionseinheiten des Grafik-Multiprozessors 2234 bereit. In mindestens einem Ausführungsbeispiel stellt die Registerdatei 2258 einen temporären Speicher für Operanden bereit, die mit Datenpfaden von Funktionseinheiten (z. B. GPGPU-Kerne 2262, Lade-/Speichereinheiten 2266) des Grafikmultiprozessors 2234 verbunden sind. In mindestens einem Ausführungsbeispiel wird die Registerdatei 2258 zwischen den einzelnen Funktionseinheiten aufgeteilt, so dass jeder Funktionseinheit ein eigener Teil der Registerdatei 2258 zugewiesen wird. In mindestens einem Ausführungsbeispiel ist die Registerdatei 2258 auf verschiedene Warps aufgeteilt, die vom Grafikmultiprozessor 2234 ausgeführt werden.
  • In mindestens einem Ausführungsbeispiel können die GPGPU-Kerne 2262 jeweils Gleitkommaeinheiten (FPUs) und/oder ganzzahlige arithmetische Logikeinheiten (ALUs) enthalten, die zur Ausführung von Befehlen des Grafik-Multiprozessors 2234 verwendet werden. Die GPGPU-Kerne 2262 können sich in ihrer Architektur ähneln oder unterscheiden. In mindestens einem Ausführungsbeispiel umfasst ein erster Teil der GPGPU-Kerne 2262 eine FPU mit einfacher Genauigkeit und eine Ganzzahl-ALU, während ein zweiter Teil der GPGPU-Kerne eine FPU mit doppelter Genauigkeit umfasst. In mindestens einem Ausführungsbeispiel können FPUs den IEEE 754-2008 Standard für Gleitkommaarithmetik implementieren oder Gleitkommaarithmetik mit variabler Genauigkeit ermöglichen. In mindestens einem Ausführungsbeispiel kann der Grafikmultiprozessor 2234 zusätzlich eine oder mehrere Festfunktions- oder Sonderfunktionseinheiten enthalten, um spezifische Funktionen wie das Kopieren von Rechtecken oder Pixel-Mischoperationen durchzuführen. In mindestens einem Ausführungsbeispiel kann einer oder mehrere der GPGPU-Kerne auch eine Logik mit fester Funktion oder Sonderfunktion enthalten.
  • In mindestens einem Ausführungsbeispiel enthalten die GPGPU-Kerne 2262 eine SIMD-Logik, die in der Lage ist, einen einzigen Befehl für mehrere Datensätze auszuführen. In mindestens einem Ausführungsbeispiel können GPGPU-Kerne 2262 physikalisch SIMD4-, SIMD8- und SIMD16-Befehle und logisch SIMD1-, SIMD2- und SIMD32-Befehle ausführen. In mindestens einem Ausführungsbeispiel können SIMD-Befehle für GPGPU-Kerne zur Kompilierzeit von einem Shader-Compiler generiert werden oder automatisch generiert werden, wenn Programme ausgeführt werden, die für SPMD- oder SIMT-Architekturen (Single Program Multiple Data) geschrieben und kompiliert wurden. In mindestens einem Ausführungsbeispiel können mehrere Threads eines für ein SIMT-Ausführungsmodell konfigurierten Programms über einen einzigen SIMD-Befehl ausgeführt werden. Zum Beispiel können in mindestens einem Ausführungsbeispiel acht SIMT-Threads, die gleiche oder ähnliche Operationen durchführen, parallel über eine einzige SIMD8-Logikeinheit ausgeführt werden.
  • In mindestens einem Ausführungsbeispiel ist die Speicher- und Cache-Verbindung 2268 ein Netzwerk, das jede Funktionseinheit des Grafik-Multiprozessors 2234 mit der Registerdatei 2258 und dem gemeinsam genutzten Speicher 2270 verbindet. In mindestens einem Ausführungsbeispiel ist die Speicher- und Cache-Verbindung 2268 eine Crossbar-Verbindung, die es der Lade-/Speichereinheit 2266 ermöglicht, Lade- und Speicheroperationen zwischen dem gemeinsam genutzten Speicher 2270 und der Registerdatei 2258 zu implementieren. In mindestens einem Ausführungsbeispiel kann die Registerdatei 2258 mit derselben Frequenz wie die GPGPU-Kerne 2262 arbeiten, so dass die Datenübertragung zwischen den GPGPU-Kernen 2262 und der Registerdatei 2258 eine sehr geringe Latenzzeit aufweist. In mindestens einem Ausführungsbeispiel kann der gemeinsam genutzte Speicher 2270 verwendet werden, um die Kommunikation zwischen Threads zu ermöglichen, die auf Funktionseinheiten innerhalb des Grafik-Multiprozessors 2234 ausgeführt werden. In mindestens einem Ausführungsbeispiel kann der Cache-Speicher 2272 beispielsweise als Daten-Cache verwendet werden, um Texturdaten, die zwischen Funktionseinheiten und der Textureinheit 2236 übertragen werden, zwischenzuspeichern. In mindestens einem Ausführungsbeispiel kann der gemeinsam genutzte Speicher 2270 auch als programmverwalteter Cache-Speicher verwendet werden. In mindestens einem Ausführungsbeispiel können Threads, die auf GPGPU-Kernen 2262 ausgeführt werden, zusätzlich zu den automatisch zwischengespeicherten Daten, die im Cache-Speicher 2272 gespeichert sind, programmatisch Daten im gemeinsam genutzten Speicher speichern.
  • In mindestens einem Ausführungsbeispiel ist ein Parallelprozessor oder eine GPGPU, wie hierin beschrieben, kommunikativ mit Host-/Prozessorkernen gekoppelt, um Grafikoperationen, maschinelle Lemoperationen, Musteranalyseoperationen und verschiedene allgemeine GPU-Funktionen (GPGPU) zu beschleunigen. In mindestens einem Ausführungsbeispiel kann die GPU über einen Bus oder eine andere Verbindung (z. B. eine Hochgeschwindigkeitsverbindung wie PCIe oder NVLink) mit dem Host-Prozessor/den Kernen kommunikativ gekoppelt sein. In mindestens einem Ausführungsbeispiel kann die GPU auf demselben Gehäuse oder Chip wie die Kerne integriert und über einen internen Prozessorbus bzw. eine interne Verbindung (d. h. innerhalb des Gehäuses oder Chips) mit den Kernen gekoppelt sein. In mindestens einem Ausführungsbeispiel können die Prozessorkerne unabhängig von der Art des Anschlusses der GPU der GPU Arbeit in Form von Sequenzen von Befehlen/Befehlen zuweisen, die in einem Arbeitsdeskriptor enthalten sind. In mindestens einem Ausführungsbeispiel verwendet die GPU dann dedizierte Schaltkreise/Logiken zur effizienten Verarbeitung dieser Befehle/Anweisungen.
  • Inferenz- und/oder Trainingslogik 915 werden verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 im Grafik-Multiprozessor 2234 für Inferenzierungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen für neuronale Netzwerke, Funktionen und/oder Architekturen neuronaler Netzwerke oder hierin beschriebenen Anwendungsfällen neuronaler Netzwerke berechnet wurden. In mindestens einem Ausführungsbeispiel kann ein Multi-GPU-Rechnersystem, wie in 23 gezeigt, verwendet werden, um Worker zu implementieren, die parallel arbeiten, um ein neuronales Netzwerk wie oben beschrieben zu trainieren.
  • 23 zeigt ein Multi-GPU-Rechnersystem 2300, gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel kann das Multi-GPU-Rechnersystem 2300 einen Prozessor 2302 umfassen, der über einen Host-Schnittstellenschalter 2304 mit mehreren Universal-Grafikverarbeitungseinheiten (GPGPUs) 2306A D gekoppelt ist. In mindestens einem Ausführungsbeispiel ist der Host-Schnittstellenschalter 2304 ein PCI-Express-Switch-Gerät, das den Prozessor 2302 an einen PCI-Express-Bus koppelt, über den der Prozessor 2302 mit den GPGPUs 2306A-D kommunizieren kann. GPGPUs 2306A-D können über eine Reihe von Hochgeschwindigkeits-Punkt-zu-Punkt-GPU-zu-GPU-Verbindungen 2316 miteinander verbunden werden. In mindestens einem Ausführungsbeispiel sind die GPU-zu-GPU-Verbindungen 2316 mit jeder der GPGPUs 2306A-D über eine eigene GPU-Verbindung verbunden. In mindestens einem Ausführungsbeispiel ermöglichen die P2P-GPU-Verbindungen 2316 eine direkte Kommunikation zwischen den einzelnen GPGPUs 2306A-D, ohne dass eine Kommunikation über den Host-Schnittstellenbus 2304 erforderlich ist, an den der Prozessor 2302 angeschlossen ist. In mindestens einem Ausführungsbeispiel, bei dem der GPU-zu-GPU-Verkehr auf P2P-GPU-Verbindungen 2316 geleitet wird, bleibt der Host-Schnittstellenbus 2304 für den Zugriff auf den Systemspeicher oder für die Kommunikation mit anderen Instanzen des Multi-GPU-Rechnersystems 2300 verfügbar, beispielsweise über ein oder mehrere Netzwerkgeräte. Während in mindestens einem Ausführungsbeispiel die GPGPUs 2306A-D mit dem Prozessor 2302 über den Host-Schnittstellenschalter 2304 verbunden sind, umfasst der Prozessor 2302 in mindestens einem Ausführungsbeispiel eine direkte Unterstützung für P2P-GPU-Verbindungen 2316 und kann direkt mit den GPGPUs 2306A-D verbunden werden.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 im Multi-GPU-Computersystem 2300 für Inferenz- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen für ein neuronales Netzwerk, Funktionen und/oder Architekturen eines neuronalen Netzwerks oder hier beschriebenen Anwendungsfällen für ein neuronales Netzwerk berechnet wurden. In mindestens einem Ausführungsbeispiel kann der in 24 gezeigte Grafikprozessor verwendet werden, um Worker zu implementieren, die parallel arbeiten, um ein neuronales Netzwerk wie oben beschrieben zu trainieren.
  • 24 ist ein Blockdiagramm eines Grafikprozessors 2400 gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel umfasst der Grafikprozessor 2400 eine Ringverbindung 2402, ein Pipeline-Frontend 2404, eine Media-Engine 2437 und Grafikkerne 2480A 2480N. In mindestens einem Ausführungsbeispiel koppelt die Ringverbindung 2402 den Grafikprozessor 2400 an andere Verarbeitungseinheiten, einschließlich anderer Grafikprozessoren oder eines oder mehrerer Mehrzweckprozessorkerne. In mindestens einem Ausführungsbeispiel ist der Grafikprozessor 2400 einer von vielen Prozessoren, die in ein Multi-Core-Verarbeitungssystem integriert sind.
  • In mindestens einem Ausführungsbeispiel empfängt der Grafikprozessor 2400 Stapel von Befehlen über die Ringverbindung 2402. In mindestens einem Ausführungsbeispiel werden die eingehenden Befehle von einem Befehlsstreamer 2403 im Pipeline-Frontend 2404 interpretiert. In mindestens einem Ausführungsbeispiel enthält der Grafikprozessor 2400 eine skalierbare Ausführungslogik zur Durchführung der 3D-Geometrieverarbeitung und der Medienverarbeitung über Grafikkern(e) 2480A-2480N. In mindestens einem Ausführungsbeispiel liefert der Command Streamer 2403 für 3D-Geometrieverarbeitungsbefehle Befehle an die Geometrie-Pipeline 2436. In mindestens einem Ausführungsbeispiel liefert der Befehlsstreamer 2403 für mindestens einige Medienverarbeitungsbefehle Befehle an ein Video-Frontend 2434, das mit einer Media-Engine 2437 gekoppelt ist. In mindestens einem Ausführungsbeispiel umfasst die Media-Engine 2437 eine Video Quality Engine (VQE) 2430 für die Video- und Bildnachbearbeitung und eine Multi-Format Encode/Decode (MFX) 2433 Engine, um eine hardwarebeschleunigte Kodierung und Dekodierung von Mediendaten bereitzustellen. In mindestens einem Ausführungsbeispiel generieren die Geometrie-Pipeline 2436 und die Media-Engine 2437 jeweils Ausführungsthreads für Thread-Ausführungsressourcen, die von mindestens einem Grafikkern 2480A bereitgestellt werden.
  • In mindestens einem Ausführungsbeispiel umfasst der Grafikprozessor 2400 skalierbare Thread-Ausführungsressourcen mit modularen Kernen 2480A-2480N (manchmal als Kern-Abschnitte bezeichnet), die jeweils mehrere Sub-Kerne 2450A-550N, 2460A-2460N (manchmal als Kern-Sub-Abschnitte bezeichnet) aufweisen. In mindestens einem Ausführungsbeispiel kann der Grafikprozessor 2400 eine beliebige Anzahl von Grafikkernen 2480A bis 2480N haben. In mindestens einem Ausführungsbeispiel umfasst der Grafikprozessor 2400 einen Grafikkern 2480A mit mindestens einem ersten Subkern 2450A und einem zweiten Subkern 2460A. In mindestens einem Ausführungsbeispiel ist der Grafikprozessor 2400 ein stromsparender Prozessor mit einem einzigen Kern (z. B. 2450A). In mindestens einem Ausführungsbeispiel umfasst der Grafikprozessor 2400 mehrere Grafikkerne 2480A-2480N, die jeweils einen Satz erster Subkerne 2450A-2450N und einen Satz zweiter Subkerne 2460A-2460N umfassen. In mindestens einem Ausführungsbeispiel umfasst jeder Kern in den ersten Unterkemen 2450A-2450N mindestens einen ersten Satz von Ausführungseinheiten 2452A-2452N und Medien-/Textur-Sampler 2454A-2454N. In mindestens einem Ausführungsbeispiel umfasst jeder Kern in den zweiten Teilkernen 2460A 2460N mindestens eine zweite Gruppe von Ausführungseinheiten 2462A-2462N und Sampler 2464A-2464N. In mindestens einem Ausführungsbeispiel teilt sich jeder Kern 2450A-2450N, 2460A-2460N einen Satz gemeinsam genutzter Ressourcen 2470A-2470N. In mindestens einem Ausführungsbeispiel umfassen die gemeinsam genutzten Ressourcen einen gemeinsam genutzten Cache-Speicher und eine Pixeloperationslogik.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel kann die Inferenz- und/oder Trainingslogik 915 im Grafikprozessor 2400 für Inferenzierungs- oder Vorhersageoperationen verwendet werden, die zumindest teilweise auf Gewichtsparametern basieren, die unter Verwendung von Trainingsoperationen für neuronale Netzwerke, Funktionen und/oder Architekturen neuronaler Netzwerke oder hierin beschriebenen Anwendungsfällen neuronaler Netzwerke berechnet wurden. In mindestens einem Ausführungsbeispiel kann eine Mikroarchitektur wie in 25 gezeigt verwendet werden, um Worker zu implementieren, die parallel arbeiten, um ein neuronales Netzwerk wie oben beschrieben zu trainieren.
  • 25 ist ein Blockdiagramm, das die Mikroarchitektur eines Prozessors 2500 zeigt, der gemäß mindestens einem Ausführungsbeispiel Logikschaltungen zur Ausführung von Befehlen enthalten kann. In mindestens einem Ausführungsbeispiel kann der Prozessor 2500 Befehle ausführen, darunter x86-Befehle, ARM-Befehle, spezielle Befehle für anwendungsspezifische integrierte Schaltungen (ASICs) usw. In mindestens einem Ausführungsbeispiel kann der Prozessor 2510 Register zur Speicherung gepackter Daten enthalten, wie z. B. 64 Bit breite MMXTM-Register in Mikroprozessoren, die mit der MMX-Technologie der Intel Corporation aus Santa Clara, Kalifornien, ausgestattet sind. In mindestens einem Ausführungsbeispiel können MMX-Register, die sowohl als Ganzzahl- als auch als Gleitkommaregister verfügbar sind, mit gepackten Datenelementen arbeiten, die Single Instruction, Multiple Data („SIMD“) und Streaming SIMD Extensions („SSE“) Anweisungen begleiten. In mindestens einem Ausführungsbeispiel können 128-Bit breite XMM-Register, die sich auf SSE2-, SSE3-, SSE4-, AVX- oder darüber hinausgehende Technologien beziehen (allgemein als „SSEx“ bezeichnet), solche gepackten Datenoperanden enthalten. In mindestens einem Ausführungsbeispiel können die Prozessoren 2510 Anweisungen ausführen, um maschinelles Lernen oder Deep-Learning-Algorithmen, Training oder Inferenzierung zu beschleunigen.
  • In mindestens einem Ausführungsbeispiel umfasst der Prozessor 2500 ein In-Order-Front-End („Front-End“) 2501 zum Abrufen von auszuführenden Befehlen und zur Vorbereitung von Befehlen, die später in der Prozessor-Pipeline verwendet werden sollen. In mindestens einem Ausführungsbeispiel kann das Front-End 2501 mehrere Einheiten umfassen. In mindestens einem Ausführungsbeispiel holt ein Befehlsvorabrufer 2526 Befehle aus dem Speicher und leitet sie an einen Befehlsdecoder 2528 weiter, der wiederum Befehle dekodiert oder interpretiert. In mindestens einem Ausführungsbeispiel dekodiert der Befehlsdekodierer 2528 einen empfangenen Befehl in eine oder mehrere Operationen, die als „Mikrobefehle“ oder „Mikrooperationen“ (auch „Mikro-Ops“ oder „Uops“ genannt) bezeichnet werden und von der Maschine ausgeführt werden können. In mindestens einem Ausführungsbeispiel zerlegt der Befehlsdecoder 2528 den Befehl in einen Op-Code und entsprechende Daten- und Steuerfelder, die von der Mikroarchitektur verwendet werden können, um Operationen gemäß mindestens einem Ausführungsbeispiel auszuführen. In mindestens einem Ausführungsbeispiel kann ein Trace-Cache 2530 dekodierte uops in programmgesteuerte Sequenzen oder Traces in einer uop-Warteschlange 2534 zur Ausführung zusammenstellen. In mindestens einem Ausführungsbeispiel stellt ein Mikrocode-ROM 2532, wenn der Trace-Cache 2530 auf eine komplexe Anweisung stößt, die für den Abschluss der Operation erforderlichen uops bereit.
  • In mindestens einem Ausführungsbeispiel können einige Befehle in ein einziges Mikro-OP umgewandelt werden, während andere mehrere Mikro-OPs benötigen, um den Betrieb vollständig abzuschließen. In mindestens einem Ausführungsbeispiel kann der Befehlsdecoder 2528 auf den Mikrocode-ROM 2532 zugreifen, um den Befehl auszuführen, wenn mehr als vier Mikro-OPs für die Ausführung eines Befehls erforderlich sind. In mindestens einem Ausführungsbeispiel kann ein Befehl in eine kleine Anzahl von Mikro-Ops für die Verarbeitung im Befehlsdecoder 2528 dekodiert werden. In mindestens einem Ausführungsbeispiel kann ein Befehl im Mikrocode-ROM 2532 gespeichert werden, falls eine Anzahl von Mikro-OPs zur Ausführung des Vorgangs erforderlich ist. In mindestens einem Ausführungsbeispiel bezieht sich der Trace-Cache 2530 auf ein programmierbares Logik-Array („PLA“) als Einstiegspunkt, um einen korrekten Mikrobefehlszeiger für das Lesen von Mikrocode-Sequenzen zur Vervollständigung eines oder mehrerer Befehle aus dem Mikrocode-ROM 2532 gemäß mindestens einem Ausführungsbeispiel zu bestimmen. In mindestens einem Ausführungsbeispiel kann das Frontend 2501 der Maschine, nachdem das Mikrocode-ROM 2532 die Sequenzierung von Mikrobefehlen für einen Befehl beendet hat, das Abrufen von Mikrobefehlen aus dem Trace-Cache 2530 wieder aufnehmen.
  • In mindestens einem Ausführungsbeispiel kann die Engine 2503 für die Ausführung von Aufträgen außerhalb der Reihenfolge („out of order engine“) Anweisungen für die Ausführung vorbereiten. In mindestens einem Ausführungsbeispiel verfügt die Out-of-Order-Ausführungslogik über eine Reihe von Puffern, um den Fluss der Befehle zu glätten und neu zu ordnen, um die Leistung zu optimieren, während sie die Pipeline durchlaufen und zur Ausführung geplant werden. Die Engine 2503 für die Ausführung außerhalb der Reihenfolge umfasst unter anderem einen Allokator/Register-Umbenenner 2540, eine Speicher-UO-Warteschlange 2542, eine Ganzzahl/Gleitkomma-UO-Warteschlange 2544, einen Speicherplaner 2546, einen schnellen Planer 2502, einen langsamen/allgemeinen Gleitkomma-Planer („langsamer/allgemeiner FP-Planer“) 2504 und einen einfachen Gleitkomma-Planer („einfacher FP-Planer“) 2506. In mindestens einem Ausführungsbeispiel werden der schnelle Planer 2502, der langsame/allgemeine Gleitkomma-Planer 2504 und der einfache Gleitkomma-Planer 2506 hier auch gemeinsam als „uop-Planer 2502, 2504, 2506“ bezeichnet. Allokator/Register-Umbenenner 2540 weist Maschinenpuffer und Ressourcen zu, die jeder uop zur Ausführung benötigt. In mindestens einem Ausführungsbeispiel benennt der Allokator/Register-Umbenenner 2540 logische Register auf Einträge in einer Registerdatei um. In mindestens einem Ausführungsbeispiel weist der Allokator/Register-Umbenenner 2540 außerdem jedem uop einen Eintrag in einer von zwei uop-Warteschlangen zu, der Speicher-uop-Warteschlange 2542 für Speicheroperationen und der Ganzzahl-/Gleitkommauop-Warteschlange 2544 für Nicht-Speicheroperationen, und zwar vor dem Speicherplaner 2546 und den uop-Planern 2502, 2504, 2506. In mindestens einem Ausführungsbeispiel bestimmen die uop-Scheduler 2502, 2504, 2506 basierend auf der Bereitschaft ihrer abhängigen Eingaberegister-Operandenquellen und der Verfügbarkeit der Ausführungsressourcen, die die uops für den Abschluss ihrer Operation benötigen, wann ein uop zur Ausführung bereit ist. In mindestens einem Ausführungsbeispiel kann der schnelle Planer 2502 in jeder Hälfte des Haupttaktzyklus einen Zeitplan erstellen, während der langsame/allgemeine Gleitkomma-Planer 2504 und der einfache Gleitkomma-Planer 2506 einen Zeitplan pro Hauptprozessortaktzyklus erstellen können. In mindestens einem Ausführungsbeispiel vermitteln die Planer 2502, 2504, 2506 für die Verteiler-Ports, um die Ausführung von Uops zu planen.
  • In mindestens einem Ausführungsbeispiel umfasst der Ausführungsblock b 11, ohne Einschränkung, ein Ganzzahl-Registerdatei/Umgehungsnetzwerk 2508, ein Gleitkomma-Registerdatei/Umgehungsnetzwerk („FP-Registerdatei/Umgehungsnetzwerk“) 2510, Adressgenerierungseinheiten („AGUs“) 2512 und 2514, schnelle arithmetische Logikeinheiten (ALUs) („fast ALUs“) 2516 und 2518, eine langsame arithmetische Logikeinheit („slow ALU“) 2520, eine Gleitkomma-ALU („FP“) 2522 und eine Gleitkomma-Bewegungseinheit („FP move“) 2524. In mindestens einem Ausführungsbeispiel werden das Ganzzahl-Registerdatei/Umgehungsnetzwerk 2508 und das Gleitkomma-Registerdatei/Umgehungsnetzwerk 2510 auch als „Registerdateien 2508, 2510“ bezeichnet. In mindestens einem Ausführungsbeispiel werden die AGUSs 2512 und 2514, die schnellen ALUs 2516 und 2518, die langsame ALU 2520, die Gleitkomma-ALU 2522 und die Gleitkomma-Bewegungseinheit 2524 hier auch als „Ausführungseinheiten 2512, 2514, 2516, 2518, 2520, 2522 und 2524“ bezeichnet. In mindestens einem Ausführungsbeispiel kann der Ausführungsblock b11 ohne Einschränkung eine beliebige Anzahl (einschließlich Null) und Art von Registerdateien, Umgehungsnetzwerken, Adressgenerierungseinheiten und Ausführungseinheiten in beliebiger Kombination enthalten.
  • In mindestens einem Ausführungsbeispiel können die Registerdateien 2508, 2510 zwischen den uop-Planern 2502, 2504, 2506 und den Ausführungseinheiten 2512, 2514, 2516, 2518, 2520, 2522 und 2524 angeordnet sein. In mindestens einem Ausführungsbeispiel führt das Integer-Registerdatei/Umgehungsnetzwerk 2508 Integer-Operationen durch. In mindestens einem Ausführungsbeispiel führt das Gleitkomma-Registerdatei/Umgehungsnetzwerk 2510 Gleitkommaoperationen durch. In mindestens einem Ausführungsbeispiel kann jede der Registerdateien 2508, 2510 ohne Einschränkung ein Umgehungsnetzwerk enthalten, das gerade abgeschlossene Ergebnisse, die noch nicht in die Registerdatei geschrieben wurden, umleiten oder an neue abhängige Uops weiterleiten kann. In mindestens einem Ausführungsbeispiel können die Registerdateien 2508, 2510 Daten miteinander austauschen. In mindestens einem Ausführungsbeispiel kann das Integer-Registerdatei-/Umgehungsnetzwerk 2508 ohne Einschränkung zwei getrennte Registerdateien umfassen, eine Registerdatei für Daten mit zweiunddreißig Bits niedriger Ordnung und eine zweite Registerdatei für Daten mit zweiunddreißig Bits hoher Ordnung. In mindestens einem Ausführungsbeispiel kann das Gleitkomma-Registerdatei/Umgehungsnetzwerk 2510 ohne Einschränkung 128 Bit breite Einträge enthalten, da Gleitkomma-Befehle typischerweise Operanden mit einer Breite von 64 bis 128 Bit haben.
  • In mindestens einem Ausführungsbeispiel können die Ausführungseinheiten 2512, 2514, 2516, 2518, 2520, 2522, 2524 Befehle ausführen. In mindestens einem Ausführungsbeispiel speichern Registerdateien 2508, 2510 Ganzzahl- und Gleitkommadaten-Operandenwerte, die für die Ausführung von Mikrobefehlen benötigt werden. In mindestens einem Ausführungsbeispiel kann der Prozessor 2500 ohne Einschränkung eine beliebige Anzahl und Kombination von Ausführungseinheiten 2512, 2514, 2516, 2518, 2520, 2522, 2524 umfassen. In mindestens einem Ausführungsbeispiel können die Fließkomma-ALU 2522 und die Fließkomma-Bewegungseinheit 2524 Fließkomma-, MMX-, SIMD-, AVX- und SSE- oder andere Operationen ausführen, einschließlich spezieller maschineller Lernbefehle. In mindestens einem Ausführungsbeispiel kann die Gleitkomma-ALU 2522 ohne Einschränkung einen 64-Bit-mal-64-Bit-Gleitkomma-Teiler enthalten, um Mikrooperationen wie Dividieren, Quadratwurzel und Rest auszuführen. In mindestens einem Ausführungsbeispiel können Anweisungen, die einen Gleitkommawert beinhalten, mit Gleitkommahardware verarbeitet werden. In mindestens einem Ausführungsbeispiel können ALU-Operationen an schnelle ALUs 2516, 2518 weitergeleitet werden. In mindestens einem Ausführungsbeispiel können schnelle ALUS 2516, 2518 schnelle Operationen mit einer effektiven Latenzzeit von einem halben Taktzyklus ausführen. In mindestens einem Ausführungsbeispiel gehen die meisten komplexen ganzzahligen Operationen an die langsame ALU 2520, da die langsame ALU 2520 ohne Einschränkung ganzzahlige Ausführungshardware für Operationen mit langer Latenzzeit enthalten kann, wie z. B. einen Multiplizierer, Verschiebungen, Flag-Logik und Verzweigungsverarbeitung. In mindestens einem Ausführungsbeispiel können Speicherlade-/Speicheroperationen von AGUS 2512, 2514 ausgeführt werden. In mindestens einem Ausführungsbeispiel können die schnelle ALU 2516, die schnelle ALU 2518 und die langsame ALU 2520 Ganzzahl Operationen mit 64-Bit-Datenoperanden durchführen. In mindestens einem Ausführungsbeispiel können die schnelle ALU 2516, die schnelle ALU 2518 und die langsame ALU 2520 implementiert werden, um eine Vielzahl von Datenbitgrößen zu unterstützen, darunter sechzehn, zweiunddreißig, 128, 256 usw. In mindestens einem Ausführungsbeispiel können die Gleitkomma-ALU 2522 und die Gleitkomma-Bewegungseinheit 2524 so implementiert werden, dass sie einen Bereich von Operanden mit Bits unterschiedlicher Breite unterstützen. In mindestens einem Ausführungsbeispiel können die Gleitkomma-ALU 2522 und die Gleitkomma-Bewegungseinheit 2524 mit 128 Bit breiten gepackten Datenoperanden in Verbindung mit SIMD- und Multimedia-Befehlen arbeiten.
  • In mindestens einem Ausführungsbeispiel leiten die uop Planer 2502, 2504, 2506 abhängige Operationen ein, bevor die Ausführung der übergeordneten Last beendet ist. In mindestens einem Ausführungsbeispiel kann der Prozessor 2500, da uops spekulativ geplant und im Prozessor 2500 ausgeführt werden können, auch eine Logik zur Behandlung von Speicherfehlern enthalten. In mindestens einem Ausführungsbeispiel kann es, wenn eine Datenlast im Datencache fehlschlägt, abhängige Operationen in der Pipeline geben, die den Planer mit vorübergehend falschen Daten verlassen haben. In mindestens einem Ausführungsbeispiel verfolgt ein Wiedergabemechanismus die Anweisungen, die falsche Daten verwenden, und führt sie erneut aus. In mindestens einem Ausführungsbeispiel kann es erforderlich sein, abhängige Operationen erneut abzuspielen, während unabhängige Operationen abgeschlossen werden können. In mindestens einem Ausführungsbeispiel können Planer und Wiedergabemechanismus mindestens eines Ausführungsbeispiels eines Prozessors auch so ausgelegt sein, dass sie Befehlssequenzen für Text-String-Vergleichsoperationen abfangen.
  • In mindestens einem Ausführungsbeispiel kann sich der Begriff „Register“ auf prozessorinterne Speicherplätze beziehen, die als Teil von Befehlen verwendet werden können, um Operanden zu identifizieren. In mindestens einem Ausführungsbeispiel kann es sich bei den Registern um solche handeln, die von außerhalb des Prozessors (aus der Sicht eines Programmierers) verwendet werden können. In mindestens einem Ausführungsbeispiel können die Register nicht auf einen bestimmten Schaltungstyp beschränkt sein. Vielmehr kann ein Register in mindestens einem Ausführungsbeispiel Daten speichern, Daten bereitstellen und die hierin beschriebenen Funktionen ausführen. In mindestens einem Ausführungsbeispiel können die hierin beschriebenen Register durch Schaltungen innerhalb eines Prozessors implementiert werden, wobei eine beliebige Anzahl verschiedener Techniken verwendet werden kann, wie z. B. dedizierte physische Register, dynamisch zugewiesene physische Register unter Verwendung von Registerumbenennung, Kombinationen aus dedizierten und dynamisch zugewiesenen physischen Registern usw. In mindestens einem Ausführungsbeispiel werden in Ganzzahlregistern 32-Bit-Ganzzahldaten gespeichert. Eine Registerdatei in mindestens einem Ausführungsbeispiel enthält auch acht Multimedia-SIMD-Register für gepackte Daten.
  • Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel können Teile oder die Gesamtheit der Inferenz- und/oder Trainingslogik 915 in den EXE-Block 2511 und andere gezeigte oder nicht gezeigte Speicher oder Register integriert werden. Zum Beispiel können in mindestens einem Ausführungsbeispiel die hier beschriebenen Trainings- und/oder Inferenztechniken eine oder mehrere der in EXE-Block 2511 gezeigten ALUs verwenden. Darüber hinaus können Gewichtsparameter in On-Chip- oder Off-Chip-Speicher und/oder Registern (dargestellt oder nicht dargestellt) gespeichert werden, die ALUs des EXE-Blocks 2511 konfigurieren, um einen oder mehrere hierin beschriebene maschinelle Lernalgorithmen, neuronale Netzwerkarchitekturen, Anwendungsfälle oder Trainingstechniken durchzuführen.
  • 26 zeigt einen Prozessor für eine Deep-Learning-Applikation 2600 gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel verwendet der Prozessor für eine Deep-Learning-Applikation 2600 Anweisungen, die, wenn sie vom Prozessor für eine Deep-Learning-Applikation 2600 ausgeführt werden, den Prozessor für eine Deep-Learning-Applikation 2600 veranlassen, einige oder alle der in dieser Offenbarung beschriebenen Prozesse und Techniken auszuführen. In mindestens einem Ausführungsbeispiel ist der Prozessor für eine Deep-Learning-Applikation 2600 eine anwendungsspezifische integrierte Schaltung (ASIC). In mindestens einem Ausführungsbeispiel führt der Anwendungsprozessor 2600 Matrixmultiplikationsoperationen entweder „fest verdrahtet“ in Hardware als Ergebnis der Ausführung einer oder mehrerer Anweisungen oder beides durch. In mindestens einem Ausführungsbeispiel umfasst der Prozessor für eine Deep-Learning-Applikation 2600, ohne Einschränkung, Verarbeitungscluster 2610(1)-2610(12), Inter-Chip-Links („ICLs“) 2620(1)-2620(12), Inter-Chip-Controller („ICCs“) 2630(1)-2630(2), Speicher mit hoher Bandbreite der zweiten Generation („HBM2“) 2640(1)-2640(4), Speicher-Controller („Mem Ctrlrs“) 2642(1)-2642(4), physikalische Schicht für Speicher mit hoher Bandbreite („HBM PHY“) 2644(1)-2644(4), eine Management-Controller-Zentraleinheit („Management-Controller-CPU“) 2650, einen Serial Peripheral Interface, Inter-Integrated Circuit und General Purpose Input/Output Block („SPI, I2C, GPIO“) 2660, einen Peripheral Component Interconnect Express Controller und Direct Memory Access Block („PCIe Controller und DMA“) 2670, und einen sechzehnspurigen Peripheral Component Interconnect Express Port („PCI Express x 16“) 2680.
  • In mindestens einem Ausführungsbeispiel können die Verarbeitungscluster 2610 Deep-Learning-Operationen durchführen, einschließlich Inferenz- oder Vorhersageoperationen basierend auf Gewichtsparametern, die mit einer oder mehreren Trainingstechniken, einschließlich der hierin beschriebenen, berechnet wurden. In mindestens einem Ausführungsbeispiel kann jeder Verarbeitungscluster 2610 ohne Einschränkung eine beliebige Anzahl und Art von Prozessoren umfassen. In mindestens einem Ausführungsbeispiel kann der Prozessor für eine Deep-Learning-Applikation 2600 eine beliebige Anzahl und Art von Verarbeitungsclustern 2600 umfassen. In mindestens einem Ausführungsbeispiel sind die Inter-Chip-Verbindungen 2620 bidirektional. In mindestens einem Ausführungsbeispiel ermöglichen Inter-Chip-Links 2620 und Inter-Chip-Controller 2630 mehreren Prozessor für eine Deep-Learning-Applikationen 2600 den Austausch von Informationen, einschließlich Aktivierungsinformationen, die aus der Ausführung eines oder mehrerer maschineller Lernalgorithmen resultieren, die in einem oder mehreren neuronalen Netzwerken verkörpert sind. In mindestens einem Ausführungsbeispiel kann der Prozessor für eine Deep-Learning-Applikation 2600 eine beliebige Anzahl (einschließlich Null) und einen beliebigen Typ von ICLs 2620 und ICCs 2630 umfassen.
  • In mindestens einem Ausführungsbeispiel stellen die HBM2 2640 insgesamt 32 Gigabyte (GB) Speicher bereit. HBM2 2640(i) ist sowohl mit dem Speicher-Controller 2642(i) als auch mit HBM PHY 2644(i) assoziiert. In mindestens einem Ausführungsbeispiel kann eine beliebige Anzahl von HBM2 2640 einen beliebigen Typ und eine beliebige Gesamtmenge an Speicher mit hoher Bandbreite bereitstellen und mit einer beliebigen Anzahl (einschließlich Null) und einem beliebigen Typ von Speicher-Controllern 2642 und HBM PHYs 2644 assoziiert sein. In mindestens einem Ausführungsbeispiel können SPI, I2C, GPIO 2660, PCIe-Controller und DMA 2670 und/oder PCIe 2680 durch eine beliebige Anzahl und einen beliebigen Typ von Blöcken ersetzt werden, die eine beliebige Anzahl und einen beliebigen Typ von Kommunikationsstandards in einer beliebigen technisch machbaren Weise ermöglichen.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel wird der Prozessor für eine Deep-Learning-Applikation verwendet, um ein maschinelles Lernmodell, wie z. B. ein neuronales Netzwerk, zu trainieren, um Informationen vorherzusagen oder zu inferenzieren, die dem Prozessor für eine Deep-Learning-Applikation 2600 bereitgestellt werden. In mindestens einem Ausführungsbeispiel wird der Prozessor für eine Deep-Learning-Applikation 2600 verwendet, um Informationen basierend auf einem trainierten maschinellen Lernmodell (z. B. einem neuronalen Netzwerk), das von einem anderen Prozessor oder System oder vom Prozessor für eine Deep-Learning-Applikation 2600 trainiert wurde, zu inferenzieren oder vorherzusagen. In mindestens einem Ausführungsbeispiel kann der Prozessor 2600 verwendet werden, um einen oder mehrere der hier beschriebenen Anwendungsfälle für neuronale Netzwerke auszuführen. In mindestens einem Ausführungsbeispiel kann ein neuromorpher Prozessor, wie in 27 gezeigt, verwendet werden, um Worker zu implementieren, die parallel arbeiten, um ein neuronales Netzwerk wie oben beschrieben zu trainieren.
  • 27 ist ein Blockdiagramm eines neuromorphen Prozessors 2700, gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel kann der neuromorphe Prozessor 2700 eine oder mehrere Eingaben von Quellen außerhalb des neuromorphen Prozessors 2700 empfangen. In mindestens einem Ausführungsbeispiel können diese Eingaben an ein oder mehrere Neuronen 2702 innerhalb des neuromorphen Prozessors 2700 übertragen werden. In mindestens einem Ausführungsbeispiel können die Neuronen 2702 und ihre Komponenten unter Verwendung von Schaltkreisen oder Logik implementiert werden, einschließlich einer oder mehrerer arithmetischer Logikeinheiten (ALUs). In mindestens einem Ausführungsbeispiel kann der neuromorphe Prozessor 2700 ohne Einschränkung Tausende oder Millionen von Instanzen von Neuronen 2702 umfassen, es kann jedoch jede geeignete Anzahl von Neuronen 2702 verwendet werden. In mindestens einem Ausführungsbeispiel kann jede Instanz eines Neurons 2702 eine Eingabe 2704 und eine Ausgabe 2706 enthalten. In mindestens einem Ausführungsbeispiel können die Neuronen 2702 Ausgaben generieren, die auf Eingaben anderer Instanzen von Neuronen 2702 übertragen werden können. Zum Beispiel können in mindestens einem Ausführungsbeispiel die Eingaben der Neuronen 2704 und die Ausgaben der Neuronen 2706 über Synapsen 2708 miteinander verbunden sein.
  • In mindestens einem Ausführungsbeispiel können Neuronen 2702 und Synapsen 2708 so miteinander verbunden sein, dass der neuromorphe Prozessor 2700 arbeitet, um die vom neuromorphen Prozessor 2700 empfangenen Informationen zu verarbeiten oder zu analysieren. In mindestens einem Ausführungsbeispiel können die Neuronen 2702 einen Ausgabeimpuls (oder „Feuer“ oder „Spike“) senden, wenn die über die Neuroneneingabe 2704 empfangenen Eingaben einen Schwellenwert überschreiten. In mindestens einem Ausführungsbeispiel können die Neuronen 2702 die an den Neuroneneingängen 2704 empfangenen Signale summieren oder integrieren. In mindestens einem Ausführungsbeispiel können die Neuronen 2702 als undichte Integrations- und Feuerneuronen implementiert werden, wobei das Neuron 2702 eine Ausgabe (oder ein „Feuer“) generieren kann, wenn eine Summe (als „Membranpotential“ bezeichnet) einen Schwellenwert überschreitet, wobei eine Übertragungsfunktion wie eine Sigmoid- oder Schwellenfunktion verwendet wird. In mindestens einem Ausführungsbeispiel kann ein „leaky integrate and fire“-Neuron die an den Eingängen des Neurons 2704 empfangenen Signale zu einem Membranpotential summieren und auch einen Abklingfaktor (oder „leak“) anwenden, um ein Membranpotential zu reduzieren. In mindestens einem Ausführungsbeispiel kann ein undichtes Integrations- und Feuerneuron feuern, wenn mehrere Eingabesignale an den Neuroneneingängen 2704 schnell genug empfangen werden, um einen Schwellenwert zu überschreiten (d. h. bevor ein Membranpotenzial zu niedrig abfällt, um zu feuern). In mindestens einem Ausführungsbeispiel können Neuronen 2702 mit Hilfe von Schaltungen oder Logik implementiert werden, die Eingaben empfangen, Eingaben in ein Membranpotenzial integrieren und ein Membranpotenzial abbauen. In mindestens einem Ausführungsbeispiel können die Eingaben gemittelt werden, oder es kann jede andere geeignete Übertragungsfunktion verwendet werden. Darüber hinaus können in mindestens einem Ausführungsbeispiel die Neuronen 2702 ohne Einschränkung Komparatorschaltungen oder - logik enthalten, die einen Ausgabespike am Neuronenausgang 2706 generieren, wenn das Ergebnis der Anwendung einer Übertragungsfunktion auf die Neuroneneingabe 2704 einen Schwellenwert überschreitet. In mindestens einem Ausführungsbeispiel kann das Neuron 2702, sobald es feuert, zuvor empfangene Eingaben ignorieren, indem es zum Beispiel ein Membranpotential auf 0 oder einen anderen geeigneten Standardwert zurücksetzt. In mindestens einem Ausführungsbeispiel kann das Neuron 2702, sobald das Membranpotential auf 0 zurückgesetzt ist, nach einer geeigneten Zeitspanne (oder Refraktärzeit) den normalen Betrieb wiederaufnehmen.
  • In mindestens einem Ausführungsbeispiel können die Neuronen 2702 über Synapsen 2708 miteinander verbunden sein. In mindestens einem Ausführungsbeispiel können die Synapsen 2708 dazu dienen, Signale von einer Ausgabe eines ersten Neurons 2702 zu einer Eingabe eines zweiten Neurons 2702 zu übertragen. In mindestens einem Ausführungsbeispiel können Neuronen 2702 Informationen über mehr als eine Instanz von Synapse 2708 übertragen. In mindestens einem Ausführungsbeispiel kann eine oder mehrere Ausgaben des Neurons 2706 über eine Synapse 2708 mit einer Eingabe 2704 desselben Neurons 2702 verbunden sein. In mindestens einem Ausführungsbeispiel kann ein Neuron 2702, das eine über eine Synapse 2708 zu übertragende Ausgabe generiert, als „präsynaptisches Neuron“ in Bezug auf diese Synapse 2708 bezeichnet werden. In mindestens einem Ausführungsbeispiel kann ein Neuron 2702, das eine über eine Synapse 2708 übertragene Eingabe empfängt, als „postsynaptisches Neuron“ in Bezug auf diese Synapse 2708 bezeichnet werden. Da ein Neuron 2702 Eingaben von einer oder mehreren Synapsen 2708 erhalten und auch Ausgaben über eine oder mehrere Synapsen 2708 übertragen kann, kann ein einzelnes Neuron 2702 in mindestens einem Ausführungsbeispiel sowohl ein „präsynaptisches Neuron“ als auch ein „postsynaptisches Neuron“ in Bezug auf verschiedene Synapsen 2708 sein.
  • In mindestens einem Ausführungsbeispiel können die Neuronen 2702 in einer oder mehreren Schichten organisiert sein. Jede Instanz eines Neurons 2702 kann eine Ausgabe 2706 haben, die sich über eine oder mehrere Synapsen 2708 zu einer oder mehreren Eingaben 2704 auffächern kann. In mindestens einem Ausführungsbeispiel können die neuronalen Ausgaben 2706 der Neuronen 2702 in einer ersten Schicht 2710 mit den neuronalen Eingaben 2704 der Neuronen 2702 in einer zweiten Schicht 2712 verbunden sein. In mindestens einem Ausführungsbeispiel kann die Schicht 2710 als „Feed-Forward-Schicht“ bezeichnet werden. In mindestens einem Ausführungsbeispiel kann jede Instanz eines Neurons 2702 in einer Instanz der ersten Schicht 2710 zu jeder Instanz eines Neurons 2702 in der zweiten Schicht 2712 auffächern. In mindestens einem Ausführungsbeispiel kann die erste Schicht 2710 als eine „vollständig verbundene Vorwärtsschicht“ bezeichnet werden. In mindestens einem Ausführungsbeispiel kann jede Instanz des Neurons 2702 in einer Instanz der zweiten Schicht 2712 auf weniger als alle Instanzen des Neurons 2702 in einer dritten Schicht 2714 ausfächern. In mindestens einem Ausführungsbeispiel kann die zweite Schicht 2712 als eine „spärlich verbundene Vorwärtsschicht“ bezeichnet werden. In mindestens einem Ausführungsbeispiel können sich Neuronen 2702 in der zweiten Schicht 2712 zu Neuronen 2702 in mehreren anderen Schichten auffächern, einschließlich zu Neuronen 2702 in (derselben) zweiten Schicht 2712. In mindestens einem Ausführungsbeispiel kann die zweite Schicht 2712 als eine „rekurrente Schicht“ bezeichnet werden. Der neuromorphe Prozessor 2700 kann, ohne Einschränkung, jede geeignete Kombination von rekurrenten Schichten und Vorwärtsschichten enthalten, einschließlich, ohne Einschränkung, sowohl spärlich verbundene Vorwärtsschichten als auch vollständig verbundene Vorwärtsschichten.
  • In mindestens einem Ausführungsbeispiel kann der neuromorphe Prozessor 2700 ohne Einschränkung eine rekonfigurierbare Verbindungsarchitektur oder dedizierte fest verdrahtete Verbindungen enthalten, um die Synapse 2708 mit den Neuronen 2702 zu verbinden. In mindestens einem Ausführungsbeispiel kann der neuromorphe Prozessor 2700 ohne Einschränkung eine Schaltung oder Logik enthalten, die es ermöglicht, dass Synapsen je nach Bedarf basierend auf der Topologie des neuronalen Netzwerks und dem Ein/Ausfächern von Neuronen verschiedenen Neuronen 2702 zugewiesen werden. Beispielsweise können in mindestens einem Ausführungsbeispiel Synapsen 2708 mit Neuronen 2702 unter Verwendung einer Verbindungsstruktur, wie z. B. Network-on-Chip, oder mit dedizierten Verbindungen verbunden werden. In mindestens einem Ausführungsbeispiel können die Synapsenverbindungen und ihre Komponenten mit Hilfe von Schaltkreisen oder Logik implementiert werden.
  • 28 ist ein Blockdiagramm eines Verarbeitungssystems gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel umfasst das System 2800 einen oder mehrere Prozessoren 2802 und einen oder mehrere Grafikprozessoren 2808 und kann ein Einzelprozessor-Desktop-System, ein Multiprozessor-Workstation-System oder ein Server-System mit einer großen Anzahl von Prozessoren 2802 oder Prozessorkernen 2807 sein. In mindestens einem Ausführungsbeispiel ist das System 2800 eine Verarbeitungsplattform, die in einen integrierten System-on-a-Chip (SoC)-Schaltkreis zur Verwendung in mobilen, tragbaren oder eingebetteten Geräten integriert ist.
  • In mindestens einem Ausführungsbeispiel kann das System 2800 eine serverbasierte Spielplattform, eine Spielkonsole, einschließlich einer Spiel- und Medienkonsole, eine mobile Spielkonsole, eine Handheld-Spielkonsole oder eine Online-Spielkonsole umfassen oder darin integriert sein. In mindestens einem Ausführungsbeispiel ist das System 2800 ein Mobiltelefon, ein Smartphone, ein Tablet-Rechner oder ein mobiles Internetgerät. In mindestens einem Ausführungsbeispiel kann das Verarbeitungssystem 2800 auch ein tragbares Gerät umfassen, mit diesem gekoppelt oder in dieses integriert sein, wie z. B. ein tragbares Gerät mit einer intelligenten Uhr, ein Gerät mit einer intelligenten Brille, ein Augmented-Reality-Gerät oder ein Virtual-Reality-Gerät. In mindestens einem Ausführungsbeispiel ist das Verarbeitungssystem 2800 ein Fernseh- oder Set-Top-Box-Gerät mit einem oder mehreren Prozessoren 2802 und einer grafischen Schnittstelle, die von einem oder mehreren Grafikprozessoren 2808 generiert wird.
  • In mindestens einem Ausführungsbeispiel umfassen ein oder mehrere Prozessoren 2802 jeweils einen oder mehrere Prozessorkerne 2807 zur Verarbeitung von Befehlen, die bei ihrer Ausführung Operationen für System- und Benutzersoftware durchführen. In mindestens einem Ausführungsbeispiel ist jeder von einem oder mehreren Prozessorkernen 2807 so konfiguriert, dass er einen bestimmten Befehlssatz 2809 verarbeitet. In mindestens einem Ausführungsbeispiel kann der Befehlssatz 2809 das Complex Instruction Set Computing (CISC), das Reduced Instruction Set Computing (RISC) oder das Rechnen über ein Very Long Instruction Word (VLIW) ermöglichen. In mindestens einem Ausführungsbeispiel können die Prozessorkerne 2807 jeweils einen anderen Befehlssatz 2809 verarbeiten, der Befehle enthalten kann, um die Emulation anderer Befehlssätze zu erleichtern. In mindestens einem Ausführungsbeispiel kann der Prozessorkern 2807 auch andere verarbeitende Geräte, wie einen digitalen Signalprozessor (DSP), enthalten.
  • In mindestens einem Ausführungsbeispiel enthält der Prozessor 2802 einen Cache-Speicher 2804. In mindestens einem Ausführungsbeispiel kann der Prozessor 2802 einen einzigen internen Cache oder mehrere Ebenen von internen Caches aufweisen. In mindestens einem Ausführungsbeispiel wird der Cache-Speicher von verschiedenen Komponenten des Prozessors 2802 gemeinsam genutzt. In mindestens einem Ausführungsbeispiel verwendet der Prozessor 2802 auch einen externen Cache (z.B. einen Level-3 (L3) Cache oder Last Level Cache (LLC)) (nicht gezeigt), der unter Verwendung bekannter Cache-Kohärenztechniken von den Prozessorkernen 2807 gemeinsam genutzt werden kann. In mindestens einem Ausführungsbeispiel ist zusätzlich eine Registerdatei 2806 im Prozessor 2802 enthalten, die verschiedene Arten von Registern zur Speicherung unterschiedlicher Datentypen (z. B. Ganzzahlregister, Gleitkommaregister, Statusregister und ein Befehlszeigerregister) enthalten kann. In mindestens einem Ausführungsbeispiel kann die Registerdatei 2806 Allzweckregister oder andere Register enthalten.
  • In mindestens einem Ausführungsbeispiel ist (sind) ein oder mehrere Prozessor(en) 2802 mit einem oder mehreren Schnittstellenbus(en) 2810 gekoppelt, um Kommunikationssignale wie Adress-, Daten- oder Steuersignale zwischen dem Prozessor 2802 und anderen Komponenten im System 2800 zu übertragen. In mindestens einem Ausführungsbeispiel kann der Schnittstellenbus 2810 ein Prozessorbus sein, wie z.B. eine Version eines Direct Media Interface (DMI)-Busses. In mindestens einem Ausführungsbeispiel ist die Schnittstelle 2810 nicht auf einen DMI-Bus beschränkt, sondern kann einen oder mehrere Peripheral Component Interconnect-Busse (z. B. PCI, PCI Express), Speicherbusse oder andere Arten von Schnittstellenbussen umfassen. In mindestens einem Ausführungsbeispiel umfassen der/die Prozessor(en) 2802 einen integrierten Speicher-Controller 2816 und einen Plattform-Controller-Hub 2830. In mindestens einem Ausführungsbeispiel erleichtert der Speicher-Controller 2816 die Kommunikation zwischen einem Speichergerät und anderen Komponenten des Systems 2800, während der Plattform-Controller-Hub (PCH) 2830 Verbindungen zu E/A-Geräten über einen lokalen E/A-Bus bereitstellt.
  • In mindestens einem Ausführungsbeispiel kann das Gerät 2820 ein dynamischer Direktzugriffsspeicher (DRAM), ein statischer Direktzugriffsspeicher (SRAM), ein Flash-Speicher, ein Phasenwechsel-Speicher oder ein anderes Gerät mit geeigneter Leistung sein, das als Prozessspeicher dient. In mindestens einem Ausführungsbeispiel kann das Gerät 2820 als Systemspeicher für das System 2800 arbeiten, um Daten 2822 und Anweisungen 2821 zu speichern, die verwendet werden, wenn ein oder mehrere Prozessoren 2802 eine Anwendung oder einen Prozess ausführen. In mindestens einem Ausführungsbeispiel ist die Speichersteuerung 2816 auch mit einem optionalen externen Grafikprozessor 2812 gekoppelt, der mit einem oder mehreren Grafikprozessoren 2808 in den Prozessoren 2802 kommunizieren kann, um Grafik- und Medienoperationen durchzuführen. In mindestens einem Ausführungsbeispiel kann ein Anzeigegerät 2811 an den/die Prozessor(en) 2802 angeschlossen werden. In mindestens einem Ausführungsbeispiel kann das Anzeigegerät 2811 ein oder mehrere interne Anzeigegeräte, wie z. B. ein mobiles elektronisches Gerät oder ein Laptop-Gerät, oder ein externes Anzeigegerät umfassen, das über eine Anzeigeschnittstelle (z. B. DisplayPort usw.) angeschlossen ist. In mindestens einem Ausführungsbeispiel kann das Gerät 2811 ein kopfmontiertes Display (Head Mounted Display, HMD) wie ein stereoskopisches Anzeigegerät zur Verwendung in Virtual-Reality-Anwendungen (VR) oder Augmented-Reality-Anwendungen (AR) umfassen.
  • In mindestens einem Ausführungsbeispiel ermöglicht der Plattform-Controller-Hub 2830 die Verbindung von Peripheriegeräten mit dem Speichergerät 2820 und dem Prozessor 2802 über einen Hochgeschwindigkeits-E/A-Bus. In mindestens einem Ausführungsbeispiel umfassen die E/A-Peripheriegeräte unter anderem einen Audiocontroller 2846, einen Netzwerk-Controller 2834, eine Firmware-Schnittstelle 2828, einen drahtlosen Transceiver 2826, Berührungssensoren 2825 und ein Gerät zur Datenspeicherung 2824 (z. B. Festplattenlaufwerk, Flash-Speicher usw.). In mindestens einem Ausführungsbeispiel kann das Gerät 2824 über eine Speicherschnittstelle (z. B. SATA) oder über einen Peripheriebus, wie einen Peripheral Component Interconnect Bus (z. B. PCI, PCI Express), angeschlossen werden. In mindestens einem Ausführungsbeispiel können die Berührungssensoren 2825 Touchscreen-Sensoren, Drucksensoren oder Fingerabdrucksensoren umfassen. In mindestens einem Ausführungsbeispiel kann der drahtlose Transceiver 2826 ein Wi-Fi-Transceiver, ein Bluetooth-Transceiver oder ein Transceiver für ein mobiles Netzwerk sein, wie z. B. ein 3G-, 4G- oder Long Term Evolution (LTE)-Transceiver. In mindestens einem Ausführungsbeispiel ermöglicht die Firmware-Schnittstelle 2828 die Kommunikation mit der System-Firmware und kann z. B. eine einheitliche erweiterbare Firmware-Schnittstelle (UEFI) sein. In mindestens einem Ausführungsbeispiel kann der Netzwerk-Controller 2834 eine Netzwerkverbindung mit einem kabelgebundenen Netzwerk ermöglichen. In mindestens einem Ausführungsbeispiel koppelt ein leistungsstarker Netzwerk-Controller (nicht dargestellt) mit dem Schnittstellenbus 2810. In mindestens einem Ausführungsbeispiel ist der Audiocontroller 2846 ein Multikanal-High-Definition-Audiocontroller. In mindestens einem Ausführungsbeispiel enthält das System 2800 einen optionalen E/A-Controller 2840 zur Kopplung von älteren Geräten (z. B. Personal System 2 (PS/2)) mit dem System. In mindestens einem Ausführungsbeispiel kann der Plattform-Controller-Hub 2830 auch mit einem oder mehreren Universal Serial Bus (USB)-Controllern 2842 verbunden werden, um Eingabegeräte, wie z. B. Tastatur- und Mauskombinationen 2843, eine Kamera 2844 oder andere USB-Eingabegeräte anzuschließen.
  • In mindestens einem Ausführungsbeispiel kann eine Instanz des Speicher-Controllers 2816 und des Plattform-Controller-Hubs 2830 in einen diskreten externen Grafikprozessor, wie den externen Grafikprozessor 2812, integriert sein. In mindestens einem Ausführungsbeispiel können Plattform-Controller-Hub 2830 und/oder Speicher-Controller 2816 extern zu einem oder mehreren Prozessor(en) 2802 sein. Zum Beispiel kann das System 2800 in mindestens einem Ausführungsbeispiel einen externen Speicher-Controller 2816 und einen Plattform-Controller-Hub 2830 enthalten, der als Speicher-Controller-Hub und Peripherie-Controller-Hub innerhalb eines System-Chipsatzes konfiguriert sein kann, der mit dem/den Prozessor(en) 2802 kommuniziert.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel können Teile oder die Gesamtheit der Inferenz- und/oder Trainingslogik 915 in den Grafikprozessor 2800 integriert werden. Zum Beispiel können in mindestens einem Ausführungsbeispiel die hier beschriebenen Trainings- und/oder Inferenztechniken eine oder mehrere ALUs verwenden, die in der 3D-Pipeline 2812 enthalten sind. Darüber hinaus können in mindestens einem Ausführungsbeispiel die hierin beschriebenen Inferenz- und/oder Trainingsoperationen unter Verwendung einer anderen als der in den 9A oder 9B gezeigten Logik durchgeführt werden. In mindestens einem Ausführungsbeispiel können Gewichtsparameter in einem On-Chip- oder Off-Chip-Speicher und/oder Registern (dargestellt oder nicht dargestellt) gespeichert werden, die ALUs des Grafikprozessors 2800 konfigurieren, um einen oder mehrere hierin beschriebene maschinelle Lernalgorithmen, neuronale Netzwerkarchitekturen, Anwendungsfälle oder Trainingstechniken durchzuführen.
  • 29 ist ein Blockdiagramm eines Prozessors 2900 mit einem oder mehreren Prozessorkernen 2902A-2902N, einem integrierten Speichercontroller 2914 und einem integrierten Grafikprozessor 2908, gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel kann der Prozessor 2900 zusätzliche Kerne bis hin zu und einschließlich des zusätzlichen Kerns 2902N umfassen, der durch gestrichelte Kästchen dargestellt wird. In mindestens einem Ausführungsbeispiel enthält jeder der Prozessorkerne 2902A-2902N eine oder mehrere interne Cache-Einheiten 2904A-2904N. In mindestens einem Ausführungsbeispiel hat jeder Prozessorkern auch Zugriff auf eine oder mehrere gemeinsam genutzte Cache-Einheiten 2906.
  • In mindestens einem Ausführungsbeispiel stellen die internen Cache-Einheiten 2904A-2904N und die gemeinsam genutzten Cache-Einheiten 2906 eine Cache-Speicherhierarchie innerhalb des Prozessors 2900 dar. In mindestens einem Ausführungsbeispiel können die Cache-Speichereinheiten 2904A-2904N mindestens eine Ebene von Befehls- und Datencache innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen von gemeinsam genutztem Mid-Level-Cache, wie z. B. eine Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4) oder andere Cache-Ebenen, umfassen, wobei die höchste Cache-Ebene vor dem externen Speicher als LLC klassifiziert ist. In mindestens einem Ausführungsbeispiel hält die Cache-Kohärenzlogik die Kohärenz zwischen verschiedenen Cache-Einheiten 2906 und 2904A-2904N aufrecht.
  • In mindestens einem Ausführungsbeispiel kann der Prozessor 2900 auch einen Satz von einer oder mehreren Bussteuerungseinheiten 2916 und einen Systemagenten-Kern 2910 enthalten. In mindestens einem Ausführungsbeispiel verwalten eine oder mehrere Bus-Controller-Einheiten 2916 einen Satz von Peripherie-Bussen, wie einen oder mehrere PCI- oder PCI-Express-Busse. In mindestens einem Ausführungsbeispiel stellt der Systemagenten-Kern 2910 Verwaltungsfunktionen für verschiedene Prozessorkomponenten bereit. In mindestens einem Ausführungsbeispiel umfasst der Systemagenten-Kern 2910 einen oder mehrere integrierte Speicher-Controller 2914, um den Zugriff auf verschiedene externe Geräte (nicht gezeigt) zu verwalten.
  • In mindestens einem Ausführungsbeispiel umfasst einer oder mehrere der Prozessorkerne 2902A-2902N Unterstützung für gleichzeitiges Multi-Threading. In mindestens einem Ausführungsbeispiel umfasst der Kern des Systemagenten 2910 Komponenten zur Koordinierung und zum Betrieb der Kerne 2902A-2902N während der Multithreading-Verarbeitung. In mindestens einem Ausführungsbeispiel kann der Systemagenten-Kern 2910 zusätzlich eine Energiesteuerungseinheit (PCU) enthalten, die Logik und Komponenten zur Regulierung eines oder mehrerer Leistungszustände der Prozessorkerne 2902A-2902N und des Grafikprozessors 2908 umfasst.
  • In mindestens einem Ausführungsbeispiel enthält der Prozessor 2900 zusätzlich einen Grafikprozessor 2908 zur Ausführung von Grafikverarbeitungsoperationen. In mindestens einem Ausführungsbeispiel koppelt der Grafikprozessor 2908 mit gemeinsam genutzten Cache-Einheiten 2906 und dem Systemagenten-Kern 2910, der einen oder mehrere integrierte Speicher-Controller 2914 enthält. In mindestens einem Ausführungsbeispiel umfasst der Systemagenten-Kern 2910 auch einen Display-Controller 2911, um die Ausgabe des Grafikprozessors an ein oder mehrere gekoppelte Displays zu steuern. In mindestens einem Ausführungsbeispiel kann der Display-Controller 2911 auch ein separates Modul sein, das über mindestens eine Zwischenverbindung mit dem Grafikprozessor 2908 gekoppelt ist, oder er kann in den Grafikprozessor 2908 integriert sein.
  • In mindestens einem Ausführungsbeispiel wird eine ringbasierte Verbindungseinheit 2912 verwendet, um interne Komponenten des Prozessors 2900 zu koppeln. In mindestens einem Ausführungsbeispiel kann eine alternative Verbindungseinheit verwendet werden, wie z. B. eine Punkt-zu-Punkt-Verbindung, eine geschaltete Verbindung oder andere Techniken. In mindestens einem Ausführungsbeispiel ist der Grafikprozessor 2908 über eine E/A-Verbindung 2913 mit der Ringverbindung 2912 gekoppelt.
  • In mindestens einem Ausführungsbeispiel stellt die E/A-Verbindung 2913 mindestens eine von mehreren Arten von E/A-Verbindungen dar, einschließlich einer E/A-Verbindung auf dem Gehäuse, die die Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 2918, wie einem eDRAM-Modul, erleichtert. In mindestens einem Ausführungsbeispiel verwenden jeder der Prozessorkerne 2902A-2902N und der Grafikprozessor 2908 eingebettete Speichermodule 2918 als gemeinsam genutzten Last Level Cache.
  • In mindestens einem Ausführungsbeispiel sind die Prozessorkerne 2902A-2902N homogene Kerne, die eine gemeinsame Befehlssatzarchitektur ausführen. In mindestens einem Ausführungsbeispiel sind die Prozessorkerne 2902A-2902N in Bezug auf die Befehlssatzarchitektur (ISA) heterogen, wobei ein oder mehrere Prozessorkerne 2902A-2902N einen gemeinsamen Befehlssatz ausführen, während ein oder mehrere andere Kerne der Prozessorkerne 2902A-29-02N eine Teilmenge eines gemeinsamen Befehlssatzes oder einen anderen Befehlssatz ausführen. In mindestens einem Ausführungsbeispiel sind die Prozessorkerne 2902A-2902N in Bezug auf die Mikroarchitektur heterogen, wobei ein oder mehrere Kerne mit einem relativ höheren Stromverbrauch mit einem oder mehreren Leistungskernen mit einem niedrigeren Stromverbrauch gekoppelt sind. In mindestens einem Ausführungsbeispiel kann der Prozessor 2900 auf einem oder mehreren Chips oder als integrierte SoC-Schaltung implementiert werden.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel können Teile oder die Gesamtheit der Inferenz- und/oder Trainingslogik 915 in den Grafikprozessor 2910 integriert sein. Beispielsweise können in mindestens einem Ausführungsbeispiel die hier beschriebenen Trainings- und/oder Inferenztechniken eine oder mehrere der in der 3D-Pipeline 2812 enthaltenen ALUs, den/die Grafikkern(e) 2915A, die gemeinsam genutzte(n) Funktionslogik(en) 2916, den/die Grafikkern(e) 2915B, die gemeinsam genutzte(n) Funktionslogik(en) 2920 oder eine andere Logik in 29 verwenden. Darüber hinaus können in mindestens einem Ausführungsbeispiel die hier beschriebenen Inferenz- und/oder Trainingsoperationen mit einer anderen als der in den 9A oder 9B gezeigten Logik durchgeführt werden. In mindestens einem Ausführungsbeispiel können Gewichtsparameter in einem On-Chip- oder Off-Chip-Speicher und/oder Registern (dargestellt oder nicht dargestellt) gespeichert werden, die ALUs des Grafikprozessors 2910 konfigurieren, um einen oder mehrere hierin beschriebene maschinelle Lernalgorithmen, neuronale Netzwerkarchitekturen, Anwendungsfälle oder Trainingstechniken durchzuführen.
  • 30 ist ein Blockdiagramm eines Grafikprozessors 3000, bei dem es sich um eine diskrete Grafikverarbeitungseinheit oder um einen mit einer Vielzahl von Verarbeitungskernen integrierten Grafikprozessor handeln kann. In mindestens einem Ausführungsbeispiel kommuniziert der Grafikprozessor 3000 über eine speicherabgebildete E/A-Schnittstelle mit Registern des Grafikprozessors 3000 und mit Befehlen, die im Speicher abgelegt werden. In mindestens einem Ausführungsbeispiel enthält der Grafikprozessor 3000 eine Speicherschnittstelle 3014 für den Zugriff auf den Speicher. In mindestens einem Ausführungsbeispiel ist die Speicherschnittstelle 3014 eine Schnittstelle zum lokalen Speicher, einem oder mehreren internen Caches, einem oder mehreren gemeinsam genutzten externen Caches und/oder zum Systemspeicher.
  • In mindestens einem Ausführungsbeispiel umfasst der Grafikprozessor 3000 auch eine Anzeigesteuerung 3002, um die Ausgabe von Anzeigedaten an ein Anzeigegerät 3020 zu steuern. In mindestens einem Ausführungsbeispiel umfasst die Anzeigesteuerung 3002 Hardware für eine oder mehrere Überlagerungsebenen für das Gerät 3020 und die Zusammensetzung mehrerer Schichten von Video- oder Benutzerschnittstellenelementen. In mindestens einem Ausführungsbeispiel kann das Anzeigegerät 3020 ein internes oder externes Anzeigegerät sein. In mindestens einem Ausführungsbeispiel handelt es sich bei dem Anzeigegerät 3020 um ein kopfmontiertes Anzeigegerät, wie z. B. ein Virtual-Reality-(VR-) Anzeigegerät oder ein Augmented-Reality- (AR-) Anzeigegerät. In mindestens einem Ausführungsbeispiel umfasst der Grafikprozessor 3000 eine Videocodec-Engine 3006 zum Kodieren, Dekodieren oder Transkodieren von Medien in, aus oder zwischen einem oder mehreren Medienkodierformaten, einschließlich, aber nicht beschränkt auf Moving Picture Experts Group (MPEG) Formate wie MPEG-2, Advanced Video Coding (AVC) Formate wie H.264 /MPEG-4 AVC, sowie Society of Motion Picture & Television Engineers (SMPTE) 421M/VC-1, und Joint Photographic Experts Group (JPEG) Formate wie JPEG und Motion JPEG (MJPEG) Formate.
  • In mindestens einem Ausführungsbeispiel enthält der Grafikprozessor 3000 eine Block Image Transfer (BLIT) Engine 3004, um zweidimensionale (2D) Rasterisierungsoperationen durchzuführen, einschließlich beispielsweise bit-boundary block transfers. In mindestens einem Ausführungsbeispiel werden 2D-Grafikoperationen jedoch mit einer oder mehreren Komponenten der Grafikverarbeitungs-Engine (GPE) 3010 durchgeführt. In mindestens einem Ausführungsbeispiel ist die GPE 3010 eine Rechen-Engine zur Durchführung von Grafikoperationen, einschließlich dreidimensionaler (3D) Grafikoperationen und Medienoperationen.
  • In mindestens einem Ausführungsbeispiel umfasst die GPE 3010 eine 3D-Pipeline 3012 zur Durchführung von 3D-Operationen, wie z. B. das Rendern dreidimensionaler Bilder und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 3D-Primitivformen (z. B. Rechteck, Dreieck usw.) wirken. Die 3D-Pipeline 3012 umfasst programmierbare und feste Funktionselemente, die verschiedene Aufgaben ausführen und/oder Ausführungs-Threads zu einem 3D/Media-Teilsystem 3015 erzeugen. Während die 3D-Pipeline 3012 zur Durchführung von Medienoperationen verwendet werden kann, umfasst GPE 3010 in mindestens einem Ausführungsbeispiel auch eine Medien-Pipeline 3016, die zur Durchführung von Medienoperationen, wie Videonachbearbeitung und Bildverbesserung, verwendet wird.
  • In mindestens einem Ausführungsbeispiel enthält die Medienpipeline 3016 feste Funktions- oder programmierbare Logikeinheiten, um eine oder mehrere spezielle Medienoperationen wie Videodekodierbeschleunigung, Videoentflechtung und Videokodierbeschleunigung anstelle oder im Auftrag der Videocodec-Engine 3006 durchzuführen. In mindestens einem Ausführungsbeispiel umfasst die Medien-Pipeline 3016 zusätzlich eine Thread-Spawning-Einheit, um Threads zur Ausführung im 3D/Media-Subsystem 3015 zu erzeugen. In mindestens einem Ausführungsbeispiel führen die gespawnten Threads Berechnungen für Medienoperationen auf einer oder mehreren Grafikausführungseinheiten durch, die im 3D/Media-Subsystem 3015 enthalten sind.
  • In mindestens einem Ausführungsbeispiel enthält das 3D/Media-Subsystem 3015 eine Logik zur Ausführung von Threads, die von der 3D-Pipeline 3012 und der Media-Pipeline 3016 erzeugt werden. In mindestens einem Ausführungsbeispiel senden die 3D-Pipeline 3012 und die Medien-Pipeline 3016 Thread-Ausführungsanforderungen an das 3D/Media-Subsystem 3015, das eine Thread-Verteiler-Logik für die Vermittlung und Verteilung verschiedener Anforderungen an verfügbare Thread-Ausführungsressourcen enthält. In mindestens einem Ausführungsbeispiel umfassen die Ausführungsressourcen ein Array von Grafikausführungseinheiten zur Verarbeitung von 3D- und Medienthreads. In mindestens einem Ausführungsbeispiel umfasst das 3D/Medien-Subsystem 3015 einen oder mehrere interne Caches für Thread-Anweisungen und -Daten. In mindestens einem Ausführungsbeispiel umfasst das Subsystem 3015 auch einen gemeinsam genutzten Speicher, einschließlich Registern und adressierbarem Speicher, um Daten zwischen Threads zu teilen und Ausgabedaten zu speichern.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel können Teile oder die Gesamtheit der Inferenz- und/oder Trainingslogik 915 in den Grafikprozessor 3000 integriert werden. Zum Beispiel können in mindestens einem Ausführungsbeispiel die hier beschriebenen Trainings- und/oder Inferenztechniken eine oder mehrere der in der 3D-Pipeline 3012 enthaltenen ALUs verwenden. Darüber hinaus können in mindestens einem Ausführungsbeispiel die hier beschriebenen Inferenz- und/oder Trainingsoperationen unter Verwendung einer anderen als der in 9A oder 9B gezeigten Logik durchgeführt werden. In mindestens einem Ausführungsbeispiel können Gewichtsparameter in einem On-Chip- oder Off-Chip-Speicher und/oder Registern (dargestellt oder nicht dargestellt) gespeichert werden, die ALUs des Grafikprozessors 3000 konfigurieren, um einen oder mehrere hierin beschriebene maschinelle Lernalgorithmen, neuronale Netzwerkarchitekturen, Anwendungsfälle oder Trainingstechniken durchzuführen.
  • 31 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine 3110 eines Grafikprozessors gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel ist die Grafikverarbeitungs-Engine (GPE) 3110 eine Version der in 30 gezeigten GPE 3010. In mindestens einem Ausführungsbeispiel ist die Medienpipeline 3016 optional und kann nicht explizit in GPE 3110 enthalten sein. In mindestens einem Ausführungsbeispiel ist ein separater Medien- und/oder Bildprozessor mit GPE 3110 gekoppelt.
  • In mindestens einem Ausführungsbeispiel ist GPE 3110 mit einem Befehlsstreamer 3103 gekoppelt oder umfasst diesen, der einen Befehlsstrom für die 3D-Pipeline 3012 und/oder die Medienpipelines 3016 bereitstellt. In mindestens einem Ausführungsbeispiel ist der Befehlsstreamer 3103 mit einem Speicher gekoppelt, bei dem es sich um einen Systemspeicher oder um einen oder mehrere interne Cache-Speicher und gemeinsam genutzte Cache-Speicher handeln kann. In mindestens einem Ausführungsbeispiel empfängt der Befehlsstreamer 3103 Befehle vom Speicher und sendet Befehle an die 3D-Pipeline 3012 und/oder die Medienpipeline 3016. In mindestens einem Ausführungsbeispiel handelt es sich bei den Befehlen um Anweisungen, Primitive oder Mikrooperationen, die aus einem Ringpuffer abgerufen werden, in dem Befehle für die 3D-Pipeline 3012 und die Media-Pipeline 3016 gespeichert sind. In mindestens einem Ausführungsbeispiel kann ein Ringpuffer zusätzlich Batch-Befehlspuffer enthalten, die Stapel von mehreren Befehlen speichern. In mindestens einem Ausführungsbeispiel können die Befehle für die 3D-Pipeline 3012 auch Verweise auf im Speicher gespeicherte Daten enthalten, wie z. B. Scheitelpunkt- und Geometriedaten für die 3D-Pipeline 3012 und/oder Bilddaten und Speicherobjekte für die Medien-Pipeline 3016, ohne darauf beschränkt zu sein. In mindestens einem Ausführungsbeispiel verarbeiten die 3D-Pipeline 3012 und die Medien-Pipeline 3016 Befehle und Daten, indem sie Operationen durchführen oder einen oder mehrere Ausführungs-Threads an ein Grafikkern-Array 3114 weiterleiten. In mindestens einem Ausführungsbeispiel umfasst das Grafikkern-Array 3114 einen oder mehrere Blöcke von Grafikkernen (z. B. Grafikkern(e) 3115A, Grafikkern(e) 3115B), wobei jeder Block einen oder mehrere Grafikkerne enthält. In mindestens einem Ausführungsbeispiel enthält jeder Grafikkern einen Satz von Grafikausführungsressourcen, die eine allgemeine und eine grafikspezifische Ausführungslogik zur Durchführung von Grafik- und Rechenoperationen sowie eine Texturverarbeitungslogik mit fester Funktion und/oder eine Beschleunigungslogik für maschinelles Lernen und künstliche Intelligenz, einschließlich der Inferenz- und/oder Trainingslogik 915 in 9A und 9B, umfassen.
  • In mindestens einem Ausführungsbeispiel umfasst die 3D-Pipeline 3012 eine Logik mit fester Funktion und eine programmierbare Logik zur Verarbeitung eines oder mehrerer Shader-Programme, wie z. B. Vertex-Shader, Geometrie-Shader, Pixel-Shader, Fragment-Shader, Compute-Shader oder andere Shader-Programme, durch die Verarbeitung von Anweisungen und die Weiterleitung von Ausführungs-Threads an das Grafikkern-Array 3114. In mindestens einem Ausführungsbeispiel stellt das Grafikkern-Array 3114 einen einheitlichen Block von Ausführungsressourcen für die Verarbeitung von Shader-Programmen bereit. In mindestens einem Ausführungsbeispiel umfasst die Mehrzweck-Ausführungslogik (z. B. Ausführungseinheiten) in den Grafikkernen 3115A-3115B des Grafikkern-Arrays 3114 Unterstützung für verschiedene 3D-API-Shader-Sprachen und kann mehrere gleichzeitige Ausführungs-Threads ausführen, die mit mehreren Shadern assoziiert sind.
  • In mindestens einem Ausführungsbeispiel enthält das Grafikkern-Array 3114 auch eine Ausführungslogik zur Ausführung von Medienfunktionen, wie z. B. Video- und/oder Bildverarbeitung. In mindestens einem Ausführungsbeispiel enthalten die Ausführungseinheiten zusätzlich eine Allzwecklogik, die so programmiert werden kann, dass sie zusätzlich zu den Grafikverarbeitungsoperationen parallele Allzweck-Rechenoperationen durchführt.
  • In mindestens einem Ausführungsbeispiel können Ausgabedaten, die von Threads generiert werden, die auf dem Grafikkern-Array 3114 ausgeführt werden, Daten an den Speicher in einem Unified Return Buffer (URB) 3118 ausgeben. Der URB 3118 kann Daten für mehrere Threads speichern. In mindestens einem Ausführungsbeispiel kann der URB 3118 zum Senden von Daten zwischen verschiedenen Threads verwendet werden, die auf dem Grafikkern-Array 3114 ausgeführt werden. In mindestens einem Ausführungsbeispiel kann URB 3118 zusätzlich zur Synchronisation zwischen Threads auf dem Grafikkern-Array 3114 und fester Funktionslogik innerhalb der gemeinsam genutzten Funktionslogik 3120 verwendet werden.
  • In mindestens einem Ausführungsbeispiel ist das Grafikkern-Array 3114 skalierbar, so dass das Grafikkern-Array 3114 eine variable Anzahl von Grafikkernen enthält, von denen jeder eine variable Anzahl von Ausführungseinheiten basierend auf einer Zielleistung und einem Leistungsniveau des GPE 3110 hat. In mindestens einem Ausführungsbeispiel sind die Ausführungsressourcen dynamisch skalierbar, so dass die Ausführungsressourcen je nach Bedarf aktiviert oder deaktiviert werden können.
  • In mindestens einem Ausführungsbeispiel ist das Grafikkern-Array 3114 mit der gemeinsamen Funktionslogik 3120 gekoppelt, die mehrere Ressourcen enthält, die von den Grafikkernen im Grafikkern-Array 3114 gemeinsam genutzt werden. In mindestens einem Ausführungsbeispiel sind gemeinsam genutzte Funktionen, die von der gemeinsam genutzten Funktionslogik 3120 ausgeführt werden, in Hardware-Logikeinheiten verkörpert, die dem Grafikkern-Array 3114 spezielle Zusatzfunktionen bereitstellen. In mindestens einem Ausführungsbeispiel umfasst die gemeinsam genutzte Funktionslogik 3120 den Sampler 3121, die Mathematik 3122 und die Inter-Thread-Kommunikationslogik (ITC) 3123, ist aber nicht darauf beschränkt. In mindestens einem Ausführungsbeispiel sind ein oder mehrere Cache(s) 3125 in der gemeinsam genutzten Funktionslogik 3120 enthalten oder mit ihr gekoppelt.
  • In mindestens einem Ausführungsbeispiel wird eine gemeinsam genutzte Funktion verwendet, wenn die Nachfrage nach einer spezialisierten Funktion nicht ausreicht, um sie in das Grafikkern-Array 3114 aufzunehmen. In mindestens einem Ausführungsbeispiel wird eine einzelne Instanziierung einer spezialisierten Funktion in der gemeinsam genutzten Funktionslogik 3120 verwendet und gemeinsam mit anderen Ausführungsressourcen im Grafikkern-Array 3114 genutzt. In mindestens einem Ausführungsbeispiel können bestimmte gemeinsam genutzte Funktionen innerhalb der gemeinsam genutzten Funktionslogik 3120, die vom Grafikkern-Array 3114 intensiv genutzt werden, in die gemeinsam genutzte Funktionslogik 3116 innerhalb des Grafikkern-Arrays 3114 aufgenommen werden. In mindestens einem Ausführungsbeispiel kann die gemeinsam genutzte Funktionslogik 3116 im Grafikkern-Array 3114 einen Teil oder die gesamte Logik der gemeinsam genutzten Funktionslogik 3120 enthalten. In mindestens einem Ausführungsbeispiel können alle Logikelemente der gemeinsam genutzten Funktionslogik 3120 in der gemeinsam genutzten Funktionslogik 3116 des Grafikkern-Arrays 3114 dupliziert werden. In mindestens einem Ausführungsbeispiel wird die gemeinsam genutzte Funktionslogik 3120 zugunsten der gemeinsam genutzten Funktionslogik 3116 im Grafikkern-Array 3114 ausgeschlossen.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel können Teile oder die Gesamtheit der Inferenz- und/oder Trainingslogik 915 in den Grafikprozessor 3110 integriert werden. Beispielsweise können in mindestens einem Ausführungsbeispiel die hier beschriebenen Trainings- und/oder Inferenztechniken eine oder mehrere der ALUs verwenden, die in der 3D-Pipeline 3012, dem/den Grafikkern(en) 3115A, der gemeinsam genutzten Funktionslogik 3116, dem/den Grafikkern(en) 3115B, der gemeinsam genutzten Funktionslogik 3120 oder einer anderen Logik in 31 enthalten sind. Darüber hinaus können in mindestens einem Ausführungsbeispiel die hier beschriebenen Inferenz- und/oder Trainingsoperationen mit einer anderen als der in den 9A oder 9B gezeigten Logik durchgeführt werden. In mindestens einem Ausführungsbeispiel können Gewichtsparameter in einem On-Chip- oder Off-Chip-Speicher und/oder Registern (dargestellt oder nicht dargestellt) gespeichert werden, die ALUs des Grafikprozessors 3110 konfigurieren, um einen oder mehrere hierin beschriebene maschinelle Lernalgorithmen, neuronale Netzwerkarchitekturen, Anwendungsfälle oder Trainingstechniken durchzuführen.
  • 32 ist ein Blockdiagramm der Hardwarelogik eines Grafikprozessorkerns 3200, gemäß mindestens einem hierin beschriebenen Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel ist der Grafikprozessorkern 3200 in einem Grafikkern-Array enthalten. In mindestens einem Ausführungsbeispiel kann der Grafikprozessorkern 3200, der manchmal auch als Kernabschnitt bezeichnet wird, ein oder mehrere Grafikkerne innerhalb eines modularen Grafikprozessors sein. In mindestens einem Ausführungsbeispiel ist der Grafikprozessorkern 3200 ein Beispiel für einen Abschnitt eines Grafikkerns, und ein hierin beschriebener Grafikprozessor kann mehrere Abschnitte eines Grafikkerns basierend auf den angestrebten Energie- und Leistungshüllkurven umfassen. In mindestens einem Ausführungsbeispiel kann jeder Grafikkern 3200 einen festen Funktionsblock 3230 enthalten, der mit mehreren Unterkernen 3201A-3201F gekoppelt ist, die auch als Unterabschnitte bezeichnet werden und modulare Blöcke von Mehrzweck- und fester Funktionslogik enthalten.
  • In mindestens einem Ausführungsbeispiel umfasst der Festfunktionsblock 3230 eine Geometrie-/Festfunktionspipeline 3236, die von allen Unterkernen im Grafikprozessor 3200 gemeinsam genutzt werden kann, beispielsweise in Grafikprozessorimplementierungen mit geringerer Leistung und/oder geringerem Energieverbrauch. In mindestens einem Ausführungsbeispiel umfasst die Geometrie/Festfunktionspipeline 3236 eine 3D-Festfunktionspipeline, eine Video-Front-End-Einheit, einen Thread-Spawner und Thread-Verteiler sowie einen Unified-Return-Puffer-Manager, der Unified-Return-Puffer verwaltet.
  • In mindestens einem Ausführungsbeispiel umfasst der feste Funktionsblock 3230 auch eine Grafik-SoC-Schnittstelle 3237, einen Grafik-Mikrocontroller 3238 und eine Medienpipeline 3239. Die Grafik-SoC-Schnittstelle 3237 stellt eine Schnittstelle zwischen dem Grafikkern 3200 und anderen Prozessorkernen innerhalb einer integrierten System-on-Chip-Schaltung bereit. In mindestens einem Ausführungsbeispiel ist der Grafik-Mikrocontroller 3238 ein programmierbarer Unterprozessor, der so konfiguriert werden kann, dass er verschiedene Funktionen des Grafikprozessors 3200 verwaltet, einschließlich Thread-Verteilung, -Planung und -Preemption. In mindestens einem Ausführungsbeispiel umfasst die Medienpipeline 3239 eine Logik zur Erleichterung der Dekodierung, Kodierung, Vorverarbeitung und/oder Nachverarbeitung von Multimediadaten, einschließlich Bild- und Videodaten. In mindestens einem Ausführungsbeispiel implementiert die Medienpipeline 3239 Medienoperationen über Anfragen an die Rechen- oder Sample-Logik innerhalb der Sub-Kerne 3201-3201F.
  • In mindestens einem Ausführungsbeispiel ermöglicht die SoC-Schnittstelle 3237 dem Grafikkern 3200 die Kommunikation mit Allzweck-Anwendungsprozessorkernen (z. B. CPUs) und/oder anderen Komponenten innerhalb eines SoC, einschließlich Speicherhierarchieelementen wie einem gemeinsam genutzten Cache-Speicher der letzten Ebene, System-RAM und/oder eingebettetem On-Chip- oder On-Package-DRAM. In mindestens einem Ausführungsbeispiel kann die SoC-Schnittstelle 3237 auch die Kommunikation mit Geräten mit fester Funktion innerhalb eines SoCs ermöglichen, wie z. B. Kamera-Bildgebungspipelines, und sie ermöglicht die Nutzung und/oder implementiert globale Speicher-Atomik, die gemeinsam von Grafikkern 3200 und CPUs innerhalb eines SoCs genutzt werden kann. In mindestens einem Ausführungsbeispiel kann die SoC-Schnittstelle 3237 auch Energieverwaltungssteuerungen für den Grafikkern 3200 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Grafikkerns 3200 und anderen Taktdomänen innerhalb eines SoCs ermöglichen. In mindestens einem Ausführungsbeispiel ermöglicht die SoC-Schnittstelle 3237 den Empfang von Befehlspuffern von einem Befehlsstreamer und einem globalen Thread-Verteiler, die so konfiguriert sind, dass sie Befehle und Anweisungen für jeden von einem oder mehreren Grafikkernen innerhalb eines Grafikprozessors bereitstellen. In mindestens einem Ausführungsbeispiel können Befehle und Anweisungen an die Medienpipeline 3239 gesendet werden, wenn Medienoperationen durchgeführt werden sollen, oder an eine Geometrie- und Festfunktionspipeline (z. B. Geometrie- und Festfunktionspipeline 3236, Geometrie- und Festfunktionspipeline 3214), wenn Grafikverarbeitungsoperationen durchgeführt werden sollen.
  • In mindestens einem Ausführungsbeispiel kann der Grafik-Mikrocontroller 3238 so konfiguriert werden, dass er verschiedene Planungs- und Verwaltungsaufgaben für den Grafikkern 3200 ausführt. In mindestens einem Ausführungsbeispiel kann der Grafik-Mikrocontroller 3238 die Planung von Grafik- und/oder Rechenlasten auf verschiedenen parallelen Grafik-Engines innerhalb der Arrays 3202A-3202F, 3204A-3204F der Ausführungseinheiten (EU) in den Sub-Cores 3201A-3201F durchführen. In mindestens einem Ausführungsbeispiel kann Host-Software, die auf einem CPU-Kern eines SoC mit Grafikkern 3200 ausgeführt wird, Arbeitslasten an eine von mehreren Grafikprozessor-Türglocken übermitteln, die einen Planungsvorgang auf einer geeigneten Grafik-Engine aufrufen. In mindestens einem Ausführungsbeispiel umfassen die Planungsvorgänge die Bestimmung der als nächstes auszuführenden Arbeitslast, die Übermittlung einer Arbeitslast an einen Befehlsstreamer, das Vorziehen vorhandener Arbeitslasten, die auf einer Engine laufen, die Überwachung des Fortschritts einer Arbeitslast und die Benachrichtigung der Host-Software, wenn eine Arbeitslast abgeschlossen ist. In mindestens einem Ausführungsbeispiel kann der Grafik-Mikrocontroller 3238 auch stromsparende oder Leerlaufzustände für den Grafikkern 3200 erleichtern, indem er dem Grafikkern 3200 die Fähigkeit bereitstellt, Register innerhalb des Grafikkerns 3200 über stromsparende Zustandsübergänge unabhängig von einem Betriebssystem und/oder einer Grafiktreibersoftware auf einem System zu speichern und wiederherzustellen.
  • In mindestens einem Ausführungsbeispiel kann der Grafikkern 3200 mehr oder weniger als die in den Ausführungsbeispielen gezeigten Unterkerne 3201A-3201F haben, bis zu N modulare Unterkeme. In mindestens einem Ausführungsbeispiel kann der Grafikkern 3200 für jeden Satz von N Unterkernen auch eine gemeinsam genutzte Funktionslogik 3210, einen gemeinsam genutzten und/oder Cache-Speicher 3212, eine Geometrie-/Festfunktionspipeline 3214 sowie eine zusätzliche Festfunktionslogik 3216 zur Beschleunigung verschiedener Grafik- und Rechenverarbeitungsvorgänge umfassen. In mindestens einem Ausführungsbeispiel kann die gemeinsam genutzte Funktionslogik 3210 Logikeinheiten (z. B. Sampler, Mathematik und/oder Inter-Thread-Kommunikationslogik) enthalten, die von allen N Sub-Cores innerhalb des Grafikkerns 3200 gemeinsam genutzt werden können. Der gemeinsam genutzte und/oder Cache-Speicher 3212 kann ein Cache der letzten Ebene für N Unterkerne 3201A-3201F innerhalb des Grafikkerns 3200 sein und kann auch als gemeinsam genutzter Speicher dienen, auf den mehrere Unterkerne zugreifen können. In mindestens einem Ausführungsbeispiel kann die Geometrie/Festfunktionspipeline 3214 anstelle der Geometrie/Festfunktionspipeline 3236 innerhalb des Festfunktionsblocks 3230 enthalten sein und kann gleiche oder ähnliche Logikeinheiten umfassen.
  • In mindestens einem Ausführungsbeispiel enthält der Grafikkern 3200 zusätzliche Festfunktionslogik 3216, die verschiedene Festfunktionsbeschleunigungslogik zur Verwendung durch den Grafikkern 3200 enthalten kann. In mindestens einem Ausführungsbeispiel umfasst die zusätzliche feste Funktionslogik 3216 eine zusätzliche Geometrie-Pipeline zur Verwendung beim positionsabhängigen Schattieren. Bei der positionsabhängigen Schattierung gibt es mindestens zwei Geometrie-Pipelines, nämlich eine vollständige Geometrie-Pipeline innerhalb der Geometrie/Festfunktions-Pipeline 3216, 3236, und eine Cull-Pipeline, eine zusätzliche Geometrie-Pipeline, die in der zusätzlichen Festfunktionslogik 3216 enthalten sein kann. In mindestens einem Ausführungsbeispiel ist die Cull-Pipeline eine abgespeckte Version einer vollständigen Geometrie-Pipeline. In mindestens einem Ausführungsbeispiel können eine vollständige Pipeline und eine Cull-Pipeline verschiedene Instanzen einer Anwendung ausführen, wobei jede Instanz einen separaten Kontext hat. In mindestens einem Ausführungsbeispiel kann die positionsabhängige Schattierung lange Cull-Läufe von verworfenen Dreiecken verbergen, so dass die Schattierung in einigen Fällen früher abgeschlossen werden kann. Zum Beispiel kann in mindestens einem Ausführungsbeispiel die Cull-Pipeline-Logik innerhalb der zusätzlichen festen Funktionslogik 3216 Positions-Shader parallel zu einer Hauptanwendung ausführen und generiert kritische Ergebnisse im Allgemeinen schneller als eine vollständige Pipeline, da die Cull-Pipeline Positionsattribute von Scheitelpunkten abruft und schattiert, ohne eine Rasterung und ein Rendering von Pixeln in einen Frame-Buffer durchzuführen. In mindestens einem Ausführungsbeispiel kann die Cull-Pipeline generierte kritische Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke zu berechnen, unabhängig davon, ob diese Dreiecke ausgeschnitten werden. In mindestens einem Ausführungsbeispiel kann die Vollpipeline (die in diesem Fall als Wiederholungspipeline bezeichnet werden kann) Sichtbarkeitsinformationen verwenden, um aussortierte Dreiecke zu überspringen, um nur sichtbare Dreiecke zu schattieren, die schließlich an eine Rasterisierungsphase übergeben werden.
  • In mindestens einem Ausführungsbeispiel kann die zusätzliche feste Funktionslogik 3216 auch eine Logik zur Beschleunigung des maschinellen Lernens enthalten, wie z. B. eine Logik zur Matrixmultiplikation mit fester Funktion, für Implementierungen, die Optimierungen für das Training oder die Inferenzierung des maschinellen Lernens beinhalten.
  • In mindestens einem Ausführungsbeispiel enthält jeder Grafik-Subkern 3201A-3201F einen Satz von Ausführungsressourcen, die verwendet werden können, um Grafik-, Medien- und Rechenoperationen als Reaktion auf Anforderungen von Grafik-Pipeline-, Medien-Pipeline- oder Shader-Programmen durchzuführen. In mindestens einem Ausführungsbeispiel umfassen die Grafik-Subkerne 3201A-3201F mehrere EU-Arrays 3202A-3202F, 3204A-3204F, Thread-Verteiler- und Inter-Thread-Kommunikationslogik (TD/IC) 3203A-3203F, einen 3D-Sampler (z. B. Textur) 3205A-3205F, einen Media-Sampler 3206A-3206F, einen Shader-Prozessor 3207A-3207F und gemeinsam genutzten lokalen Speicher (SLM) 3208A-3208F. Die EU-Arrays 3202A 3202F, 3204A-3204F enthalten jeweils mehrere Ausführungseinheiten, bei denen es sich um universelle Grafikverarbeitungseinheiten handelt, die in der Lage sind, Gleitkomma- und Ganzzahl-/Festkomma-Logikoperationen im Dienste einer Grafik-, Medien- oder Rechenoperation durchzuführen, einschließlich Grafik-, Medien- oder Rechenshaderprogrammen. In mindestens einem Ausführungsbeispiel führt die TD/IC-Logik 3203A-3203F lokale Thread-Versand- und Thread-Steuerungsoperationen für Ausführungseinheiten innerhalb eines Kerns durch und erleichtert die Kommunikation zwischen Threads, die auf Ausführungseinheiten eines Kerns ausgeführt werden. In mindestens einem Ausführungsbeispiel kann der 3D-Sampler 3205A-3205F Textur- oder andere 3D-Grafikdaten in den Speicher einlesen. In mindestens einem Ausführungsbeispiel kann der 3D-Sampler Texturdaten basierend auf einem konfigurierten Sample-Zustand und einem mit einer bestimmten Textur assoziierten Texturformat unterschiedlich lesen. In mindestens einem Ausführungsbeispiel kann der Media-Sampler 3206A-3206F basierend auf einem Typ und einem Format, das mit Mediendaten assoziiert ist, ähnliche Lesevorgänge durchführen. In mindestens einem Ausführungsbeispiel kann jeder Grafiksubkern 3201A-3201F abwechselnd einen einheitlichen 3D- und Mediensampler enthalten. In mindestens einem Ausführungsbeispiel können Threads, die auf Ausführungseinheiten innerhalb jedes der Sub-Kerne 3201A-3201F ausgeführt werden, den gemeinsam genutzten lokalen Speicher 3208A-3208F innerhalb jedes Sub-Kerns nutzen, um Threads, die innerhalb einer Thread-Gruppe ausgeführt werden, die Ausführung unter Verwendung eines gemeinsamen Pools von On-Chip-Speicher zu ermöglichen.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel können Teile oder die Gesamtheit der Inferenz- und/oder Trainingslogik 915 in den Grafikprozessor 3210 integriert werden. Beispielsweise können in mindestens einem Ausführungsbeispiel die hier beschriebenen Trainings- und/oder Inferenztechniken eine oder mehrere der ALUs verwenden, die in der 3D-Pipeline 3210, dem Grafik-Mikrocontroller 3238, der Geometrie- und Festfunktions-Pipeline 3214 und 3236 oder einer anderen Logik in 29 enthalten sind. Darüber hinaus können in mindestens einem Ausführungsbeispiel die hier beschriebenen Inferenz- und/oder Trainingsoperationen unter Verwendung einer anderen als der in 9A oder 9B gezeigten Logik durchgeführt werden. In mindestens einem Ausführungsbeispiel können Gewichtsparameter in einem On-Chip- oder Off-Chip-Speicher und/oder Registern (dargestellt oder nicht dargestellt) gespeichert werden, die ALUs des Grafikprozessors 3200 konfigurieren, um einen oder mehrere hierin beschriebene maschinelle Lernalgorithmen, neuronale Netzwerkarchitekturen, Anwendungsfälle oder Trainingstechniken durchzuführen.
  • 33A und 33B zeigen die Thread-Ausführungslogik 3300 einschließlich eines Arrays von Verarbeitungselementen eines Grafikprozessorkerns gemäß mindestens einem Ausführungsbeispiel. 33A zeigt mindestens ein Ausführungsbeispiel, in dem die Thread-Ausführungslogik 3300 verwendet wird. 33B zeigt beispielhafte interne Details einer Ausführungseinheit gemäß mindestens einem Ausführungsbeispiel.
  • Wie in 33A gezeigt, umfasst die Thread-Ausführungslogik 3300 in mindestens einem Ausführungsbeispiel einen Shader-Prozessor 3302, einen Thread-Verteiler 3304, einen Befehls-Cache 3306, ein skalierbares Array von Ausführungseinheiten mit einer Vielzahl von Ausführungseinheiten 3308A-3308N, einen Sampler 3310, einen Daten-Cache 3312 und einen Datenport 3314. In mindestens einem Ausführungsbeispiel kann ein skalierbares Array von Ausführungseinheiten dynamisch skaliert werden, indem eine oder mehrere Ausführungseinheiten (z. B. eine der Ausführungseinheiten 3308A, 3308B, 3308C, 3308D bis 3308N-1 und 3308N) basierend auf den Berechnungsanforderungen einer Arbeitslast aktiviert oder deaktiviert werden. In mindestens einem Ausführungsbeispiel sind die skalierbaren Ausführungseinheiten über eine Verbindungsstruktur miteinander verbunden, die eine Verbindung zu jeder Ausführungseinheit herstellt. In mindestens einem Ausführungsbeispiel umfasst die Thread-Ausführungslogik 3300 eine oder mehrere Verbindungen zum Speicher, z. B. zum Systemspeicher oder zum Cache-Speicher, und zwar über einen oder mehrere der folgenden Elemente: Befehlscache 3306, Datenport 3314, Sampler 3310 und Ausführungseinheiten 3308A-3308N. In mindestens einem Ausführungsbeispiel ist jede Ausführungseinheit (z. B. 3308A) eine eigenständige programmierbare Mehrzweck-Recheneinheit, die in der Lage ist, mehrere gleichzeitige Hardware-Threads auszuführen und dabei mehrere Datenelemente parallel für jeden Thread zu verarbeiten. In mindestens einem Ausführungsbeispiel ist das Array der Ausführungseinheiten 3308A-3308N so skalierbar, dass es eine beliebige Anzahl individueller Ausführungseinheiten umfasst.
  • In mindestens einem Ausführungsbeispiel werden die Ausführungseinheiten 3308A-3308N hauptsächlich zur Ausführung von Shader-Programmen verwendet. In mindestens einem Ausführungsbeispiel kann der Shader-Prozessor 3302 verschiedene Shader-Programme verarbeiten und die mit den Shader-Programmen assoziierten Ausführungs-Threads über einen Thread-Verteiler 3304 verteilen. In mindestens einem Ausführungsbeispiel umfasst der Thread-Verteiler 3304 eine Logik zur Vermittlung von Thread-Initiierungsanforderungen von Grafik- und Medienpipelines und zur Instanziierung angeforderter Threads auf einer oder mehreren Ausführungseinheiten in den Ausführungseinheiten 3308A-3308N. In mindestens einem Ausführungsbeispiel kann eine Geometrie-Pipeline beispielsweise Vertex-, Tessellierungs- oder Geometrie-Shader zur Verarbeitung an die Thread-Ausführungslogik weiterleiten. In mindestens einem Ausführungsbeispiel kann der Thread-Verteiler 3304 auch Laufzeit-Thread-Spawning-Anforderungen von ausführenden Shader-Programmen verarbeiten.
  • In mindestens einem Ausführungsbeispiel unterstützen die Ausführungseinheiten 3308A-3308N einen Befehlssatz, der native Unterstützung für viele Standard-3D-Grafik-Shader-Befehle enthält, so dass Shader-Programme aus Grafikbibliotheken (z. B. Direct 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. In mindestens einem Ausführungsbeispiel unterstützen die Ausführungseinheiten die Scheitelpunkt- und Geometrieverarbeitung (z. B. Scheitelpunktprogramme, Geometrieprogramme, Scheitelpunkt-Shader), die Pixelverarbeitung (z. B. Pixel-Shader, Fragment-Shader) und die allgemeine Verarbeitung (z. B. Compute- und Media-Shader). In mindestens einem Ausführungsbeispiel ist jede der Ausführungseinheiten 3308A-3308N, die eine oder mehrere arithmetische Logikeinheiten (ALUs) umfassen, zur SIMD-Ausführung (Single Instruction Multiple Data) fähig, und der Multi-Thread-Betrieb ermöglicht trotz höherer Latenzzeiten bei Speicherzugriffen eine effiziente Ausführungsumgebung. In mindestens einem Ausführungsbeispiel verfügt jeder Hardware-Thread innerhalb jeder Ausführungseinheit über eine eigene Registerdatei mit hoher Bandbreite und einen assoziierten unabhängigen Thread-Status. In mindestens einem Ausführungsbeispiel erfolgt die Ausführung in Pipelines, die Ganzzahl-, Gleitkomma- und Doppelpräzisionsoperationen, SIMD-Verzweigungsfähigkeit, logische Operationen, transzendentale Operationen und andere verschiedene Operationen ausführen können. In mindestens einem Ausführungsbeispiel veranlasst die Abhängigkeitslogik in den Ausführungseinheiten 3308A-3308N beim Warten auf Daten aus dem Speicher oder einer der gemeinsam genutzten Funktionen einen wartenden Thread zu schlafen, bis die angeforderten Daten zurückgegeben wurden. In mindestens einem Ausführungsbeispiel können, während der wartende Thread schläft, Hardware-Ressourcen für die Verarbeitung anderer Threads verwendet werden. Zum Beispiel kann in mindestens einem Ausführungsbeispiel eine Ausführungseinheit während einer mit einer Vertex-Shader-Operation assoziierten Verzögerung Operationen für einen Pixel-Shader, Fragment-Shader oder eine andere Art von Shader-Programm, einschließlich eines anderen Vertex-Shaders, durchführen.
  • In mindestens einem Ausführungsbeispiel arbeitet jede Ausführungseinheit in den Ausführungseinheiten 3308A-3308N mit Arrays von Datenelementen. In mindestens einem Ausführungsbeispiel ist eine Anzahl von Datenelementen die „Ausführungsgröße“ oder die Anzahl von Kanälen für eine Anweisung. In mindestens einem Ausführungsbeispiel ist ein Ausführungskanal eine logische Ausführungseinheit für den Zugriff auf Datenelemente, die Maskierung und die Durchflusskontrolle innerhalb von Befehlen. In mindestens einem Ausführungsbeispiel kann die Anzahl der Kanäle unabhängig von der Anzahl der physischen Arithmetic Logic Units (ALUs) oder Floating Point Units (FPUs) für einen bestimmten Grafikprozessor sein. In mindestens einem Ausführungsbeispiel unterstützen die Ausführungseinheiten 3308A 3308N Ganzzahl- und Gleitkomma-Datentypen.
  • In mindestens einem Ausführungsbeispiel umfasst der Befehlssatz einer Ausführungseinheit SIMD-Befehle. In mindestens einem Ausführungsbeispiel können verschiedene Datenelemente als ein gepackter Datentyp in einem Register gespeichert werden, und die Ausführungseinheit verarbeitet verschiedene Elemente basierend auf der Datengröße der Elemente. Beispielsweise werden in mindestens einem Ausführungsbeispiel bei der Bearbeitung eines 256 Bit breiten Vektors 256 Bit eines Vektors in einem Register gespeichert, und eine Ausführungseinheit bearbeitet einen Vektor als vier separate gepackte 64-Bit-Datenelemente (Datenelemente der Größe Quad-Word (QW)), acht separate gepackte 32-Bit-Datenelemente (Datenelemente der Größe Double Word (DW)), sechzehn separate gepackte 16-Bit-Datenelemente (Datenelemente der Größe Word (W)) oder zweiunddreißig separate 8-Bit-Datenelemente (Datenelemente der Größe Byte (B)). In mindestens einem Ausführungsbeispiel sind jedoch auch andere Vektorbreiten und Registergrößen möglich.
  • In mindestens einem Ausführungsbeispiel können eine oder mehrere Ausführungseinheiten zu einer fusionierten Ausführungseinheit 3309A-3309N kombiniert werden, die über eine gemeinsame Thread-Steuerungslogik (3307A-3307N) für die fusionierten EUs verfügt. In mindestens einem Ausführungsbeispiel können mehrere EUs zu einer EU-Gruppe verschmolzen werden. In mindestens einem Ausführungsbeispiel kann jede EU in einer fusionierten EU-Gruppe so konfiguriert werden, dass sie einen separaten SIMD-Hardware-Thread ausführt. Die Anzahl der EUs in einer fusionierten EU-Gruppe kann je nach Ausführungsbeispiel variieren. In mindestens einem Ausführungsbeispiel können verschiedene SIMD-Breiten pro EU ausgeführt werden, einschließlich, aber nicht beschränkt auf SIMD8, SIMD16 und SIMD32. In mindestens einem Ausführungsbeispiel umfasst jede fusionierte Grafikausführungseinheit 3309A-3309N mindestens zwei Ausführungseinheiten. In mindestens einem Ausführungsbeispiel umfasst die fusionierte Ausführungseinheit 3309A beispielsweise eine erste EU 3308A, eine zweite EU 3308B und eine Thread-Steuerlogik 3307A, die der ersten EU 3308A und der zweiten EU 3308B gemeinsam ist. In mindestens einem Ausführungsbeispiel steuert die Thread-Steuerlogik 3307A Threads, die auf der fusionierten Grafikausführungseinheit 3309A ausgeführt werden, so dass jede EU innerhalb der fusionierten Ausführungseinheiten 3309A-3309N unter Verwendung eines gemeinsamen Befehlszeigerregisters ausgeführt werden kann.
  • In mindestens einem Ausführungsbeispiel sind ein oder mehrere interne Befehls-Caches (z. B. 3306) in der Thread-Ausführungslogik 3300 enthalten, um Thread-Befehle für Ausführungseinheiten zu cachen. In mindestens einem Ausführungsbeispiel sind ein oder mehrere Daten-Caches (z. B. 3312) enthalten, um Thread-Daten während der Thread-Ausführung zu cachen. In mindestens einem Ausführungsbeispiel ist ein Sampler 3310 enthalten, der Textur-Samples für 3D-Operationen und Medien-Samples für Medien-Operationen bereitstellt. In mindestens einem Ausführungsbeispiel umfasst der Sampler 3310 eine spezialisierte Textur- oder Mediensampling-Funktionalität, um Textur- oder Mediendaten während des Sampling-Prozesses zu verarbeiten, bevor die gesampelten Daten einer Ausführungseinheit bereitgestellt werden.
  • In mindestens einem Ausführungsbeispiel senden Grafik- und Medienpipelines während der Ausführung Thread-Initiierungsanforderungen an die Thread-Ausführungslogik 3300 über die Thread-Spawning- und Versandlogik. In mindestens einem Ausführungsbeispiel wird, sobald eine Gruppe geometrischer Objekte verarbeitet und in Pixeldaten gerastert wurde, die Pixelprozessorlogik (z. B. Pixel-Shader-Logik, Fragment-Shader-Logik usw.) innerhalb des Shader-Prozessors 3302 aufgerufen, um weitere Ausgabeinformationen zu berechnen und zu veranlassen, dass die Ergebnisse in Ausgabeflächen (z. B. Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.) geschrieben werden. In mindestens einem Ausführungsbeispiel berechnet ein Pixel-Shader oder Fragment-Shader die Werte verschiedener Vertex-Attribute, die über ein gerastertes Objekt interpoliert werden sollen. In mindestens einem Ausführungsbeispiel führt die Pixelprozessorlogik innerhalb des Shader-Prozessors 3302 dann ein über eine Anwendungsprogrammierschnittstelle (API) bereitgestelltes Pixel- oder Fragment-Shader-Programm aus. In mindestens einem Ausführungsbeispiel sendet der Shader-Prozessor 3302 zur Ausführung eines Shader-Programms Threads über den Thread-Verteiler 3304 an eine Ausführungseinheit (z. B. 3308A). In mindestens einem Ausführungsbeispiel verwendet der Shader-Prozessor 3302 die Textur-Sampling-Logik im Sampler 3310, um auf Texturdaten in den im Speicher abgelegten Texturkarten zuzugreifen. In mindestens einem Ausführungsbeispiel werden durch arithmetische Operationen an Texturdaten und Eingabegeometriedaten Pixelfarbdaten für jedes geometrische Fragment berechnet oder ein oder mehrere Pixel von der weiteren Verarbeitung ausgeschlossen.
  • In mindestens einem Ausführungsbeispiel stellt der Datenport 3314 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 3300 bereit, um verarbeitete Daten zur weiteren Verarbeitung auf einer Grafikprozessor-Ausgabepipeline in den Speicher auszugeben. In mindestens einem Ausführungsbeispiel umfasst der Datenport 3314 einen oder mehrere Cache-Speicher (z. B. den Daten-Cache 3312) oder ist mit diesen gekoppelt, um Daten für den Speicherzugriff über einen Datenport zu cachen.
  • Wie in 33B gezeigt, kann eine Grafikausführungseinheit 3308 in mindestens einem Ausführungsbeispiel eine Befehlsabrufeinheit 3337, ein allgemeines Registerdatei-Array (GRF) 3324, ein architektonisches Registerdatei-Array (ARF) 3326, einen Thread-Arbiter 3322, eine Sendeeinheit 3330, eine Verzweigungseinheit 3332, einen Satz SIMD-Gleitkommaeinheiten (FPUs) 3334 und in mindestens einem Ausführungsbeispiel einen Satz dedizierter ganzzahliger SIMD-ALUs 3335 umfassen. In mindestens einem Ausführungsbeispiel umfassen GRF 3324 und ARF 3326 einen Satz allgemeiner Registerdateien und Architektur-Registerdateien, die mit jedem gleichzeitigen Hardware-Thread assoziiert sind, der in der Grafikausführungseinheit 3308 aktiv sein kann. In mindestens einem Ausführungsbeispiel wird der Architekturzustand pro Thread in ARF 3326 verwaltet, während die während der Thread-Ausführung verwendeten Daten in GRF 3324 gespeichert werden. In mindestens einem Ausführungsbeispiel kann der Ausführungsstatus jedes Threads, einschließlich der Befehlszeiger für jeden Thread, in Thread-spezifischen Registern im ARF 3326 gespeichert werden.
  • In mindestens einem Ausführungsbeispiel hat die Grafikausführungseinheit 3308 eine Architektur, die eine Kombination aus Simultaneous Multi-Threading (SMT) und feinkörnigem Interleaved Multi-Threading (IMT) ist. In mindestens einem Ausführungsbeispiel weist die Architektur eine modulare Konfiguration auf, die zur Entwurfszeit basierend auf einer Zielanzahl gleichzeitiger Threads und einer Anzahl von Registern pro Ausführungseinheit fein abgestimmt werden kann, wobei die Ressourcen der Ausführungseinheit auf die Logik aufgeteilt werden, die zur Ausführung mehrerer gleichzeitiger Threads verwendet wird.
  • In mindestens einem Ausführungsbeispiel kann die Grafikausführungseinheit 3308 mehrere Befehle gemeinsam ausgeben, die jeweils unterschiedliche Befehle sein können. In mindestens einem Ausführungsbeispiel kann der Thread Arbiter 3322 des Threads der Grafikausführungseinheit 3308 Anweisungen an eine der Sendeeinheiten 3330, Verzweigungseinheiten 3342 oder SIMD-FPU(s) 3334 zur Ausführung weiterleiten. In mindestens einem Ausführungsbeispiel kann jeder Ausführungs-Thread auf 128 Allzweckregister innerhalb des GRF 3324 zugreifen, wobei jedes Register 32 Byte speichern kann, die als SIMD-8-Element-Vektor von 32-Bit-Datenelementen zugänglich sind. In mindestens einem Ausführungsbeispiel hat jeder Ausführungseinheitsthread Zugriff auf 4 KByte innerhalb des GRF 3324, obwohl Ausführungsbeispiele nicht so beschränkt sind und in anderen Ausführungsbeispielen mehr oder weniger Registerressourcen bereitgestellt werden können. In mindestens einem Ausführungsbeispiel können bis zu sieben Threads gleichzeitig ausgeführt werden, obwohl die Anzahl der Threads pro Ausführungseinheit je nach Ausführungsbeispiel auch variieren kann. In mindestens einem Ausführungsbeispiel, in dem sieben Threads auf 4 KByte zugreifen können, kann der GRF 3324 insgesamt 28 KByte speichern. In mindestens einem Ausführungsbeispiel können flexible Adressierungsmodi erlauben, dass Register gemeinsam adressiert werden, um effektiv breitere Register zu bilden oder um geschichtete rechteckige Blockdatenstrukturen darzustellen.
  • In mindestens einem Ausführungsbeispiel werden Speicheroperationen, Sampleroperationen und andere Systemkommunikationen mit längerer Latenzzeit über „Sende“-Befehle abgewickelt, die von der Message-Passing-Sendeeinheit 3330 ausgeführt werden. In mindestens einem Ausführungsbeispiel werden Verzweigungsbefehle an eine dedizierte Verzweigungseinheit 3332 weitergeleitet, um SIMD-Divergenz und eventuelle Konvergenz zu erleichtern.
  • In mindestens einem Ausführungsbeispiel umfasst die Grafikausführungseinheit 3308 eine oder mehrere SIMD-Gleitkommaeinheiten (FPU(s)) 3334 zur Durchführung von Gleitkommaoperationen. In mindestens einem Ausführungsbeispiel unterstützen die FPU(s) 3334 auch Ganzzahlberechnungen. In mindestens einem Ausführungsbeispiel kann (können) die FPU(s) 3334 bis zu einer Anzahl von M 32-Bit-Gleitkomma- (oder Ganzzahl-) Operationen oder bis zu 2M 16-Bit-Ganzzahl- oder 16-Bit-Gleitkomma-Operationen SIMDausführen. In mindestens einem Ausführungsbeispiel stellt mindestens eine der FPU(s) erweiterte mathematische Fähigkeiten bereit, um transzendentale mathematische Funktionen mit hohem Durchsatz und 64-Bit-Gleitkommaoperationen mit doppelter Genauigkeit zu unterstützen. In mindestens einem Ausführungsbeispiel ist auch ein Satz ganzzahliger 8-Bit-SIMD-ALUs 3335 vorhanden, die speziell für die Durchführung von Operationen optimiert sein können, die mit maschinellen Lernberechnungen assoziiert sind.
  • In mindestens einem Ausführungsbeispiel können Arrays aus mehreren Instanzen der Grafikausführungseinheit 3308 in einer Gruppierung von Grafik-Subkernen (z. B. einem Abschnitt) instanziiert werden. In mindestens einem Ausführungsbeispiel kann die Ausführungseinheit 3308 Anweisungen über eine Vielzahl von Ausführungskanälen ausführen. In mindestens einem Ausführungsbeispiel wird jeder Thread, der auf der Grafikausführungseinheit 3308 ausgeführt wird, auf einem anderen Kanal ausgeführt.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel können Teile oder die Gesamtheit der Inferenz- und/oder Trainingslogik 915 in die Ausführungslogik 3300 integriert werden. Darüber hinaus können in mindestens einem Ausführungsbeispiel die hier beschriebenen Inferenz- und/oder Trainingsoperationen unter Verwendung einer anderen als der in 9A oder 9B gezeigten Logik durchgeführt werden. In mindestens einem Ausführungsbeispiel können Gewichtsparameter in einem On-Chip- oder Off-Chip-Speicher und/oder Registern (dargestellt oder nicht dargestellt) gespeichert werden, die ALUs der Ausführungslogik 3300 konfigurieren, um einen oder mehrere hierin beschriebene maschinelle Lernalgorithmen, neuronale Netzwerkarchitekturen, Anwendungsfälle oder Trainingstechniken durchzuführen.
  • 34 zeigt eine Parallelverarbeitungseinheit („PPU“) 3400 gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel ist die PPU 3400 mit maschinenlesbarem Code konfiguriert, der, wenn er von der PPU 3400 ausgeführt wird, die PPU 3400 veranlasst, einige oder alle der in dieser Offenbarung beschriebenen Prozesse und Techniken durchzuführen. In mindestens einem Ausführungsbeispiel ist die PPU 3400 ein Multi-Thread-Prozessor, der auf einem oder mehreren Geräten mit integrierter Schaltung implementiert ist und der Multithreading als eine Technik zum Verbergen von Latenzzeiten einsetzt, die dazu dient, computerlesbare Befehle (auch als maschinenlesbare Befehle oder einfach Befehle bezeichnet) auf mehreren Threads parallel zu verarbeiten. In mindestens einem Ausführungsbeispiel bezieht sich ein Thread auf einen Ausführungsstrang und ist eine Instanziierung eines Satzes von Anweisungen, die zur Ausführung durch die PPU 3400 konfiguriert sind. In mindestens einem Ausführungsbeispiel ist die PPU 3400 eine Grafikverarbeitungseinheit („GPU“), die so konfiguriert ist, dass sie eine Grafik-Rendering-Pipeline zur Verarbeitung dreidimensionaler („3D“) Grafikdaten implementiert, um zweidimensionale („2D“) Bilddaten für die Anzeige auf einem Anzeigegerät wie einem Flüssigkristallanzeigegerät („LCD“) zu generieren. In mindestens einem Ausführungsbeispiel wird die PPU 3400 verwendet, um Berechnungen wie lineare Algebra-Operationen und Operationen des maschinellen Lernens durchzuführen. 34 zeigt ein Beispiel für einen Parallelprozessor, der nur der Veranschaulichung dient und als nicht begrenztes Beispiel für Prozessorarchitekturen zu verstehen ist, die im Rahmen dieser Offenbarung in Betracht gezogen werden, und dass jeder geeignete Prozessor zur Ergänzung und/oder zum Ersatz desselben verwendet werden kann.
  • In mindestens einem Ausführungsbeispiel sind eine oder mehrere PPUs 3400 so konfiguriert, dass sie High Performance Computing („HPC“), Rechenzentren und maschinelle Lernanwendungen beschleunigen. In mindestens einem Ausführungsbeispiel ist die PPU 3400 so konfiguriert, dass sie Deep-Learning-Systeme und -Anwendungen beschleunigt, einschließlich der folgenden, nicht einschränkenden Beispiele: autonome Fahrzeugplattformen, Deep Learning, hochpräzise Sprach-, Bild- und Texterkennungssysteme, intelligente Videoanalyse, molekulare Simulationen, Arzneimittelentdeckung, Krankheitsdiagnose, Wettervorhersage, Big-Data-Analytik, Astronomie, Molekulardynamiksimulation, Finanzmodellierung, Robotik, Fabrikautomatisierung, Echtzeit-Sprachübersetzung, Online-Suchoptimierung und personalisierte Benutzerempfehlungen und mehr.
  • In mindestens einem Ausführungsbeispiel umfasst die PPU 3400 ohne Einschränkung eine Eingabe/Ausgabe-Einheit 3406 („E/A“), eine Front-End-Einheit 3410, eine Planer-Einheit 3412, eine Arbeitsverteilungseinheit 3414, einen Hub 3416, eine Crossbar („Xbar“) 3420, einen oder mehrere allgemeine Verarbeitungscluster („GPCs“) 3418 und eine oder mehrere Partitionseinheiten („Speicherpartitionseinheiten“) 3422. In mindestens einem Ausführungsbeispiel ist die PPU 3400 mit einem Host-Prozessor oder anderen PPUs 3400 über eine oder mehrere Hochgeschwindigkeits-GPU-Verbindungen („GPU-Interconnects“) 3408 verbunden. In mindestens einem Ausführungsbeispiel ist die PPU 3400 über eine Zwischenverbindung 3402 mit einem Host-Prozessor oder anderen peripheren Geräten verbunden. In mindestens einem Ausführungsbeispiel ist die PPU 3400 mit einem lokalen Speicher verbunden, der ein oder mehrere Geräte („Speicher“) 3404 umfasst. In mindestens einem Ausführungsbeispiel umfassen die Speichergeräte 3404 ohne Einschränkung ein oder mehrere dynamische Direktzugriffsspeicher („DRAM“) Geräte. In mindestens einem Ausführungsbeispiel sind ein oder mehrere DRAM-Geräte als Subsysteme für Speicher mit hoher Bandbreite („HBM“) konfiguriert und/oder konfigurierbar, wobei mehrere DRAM-Dies in jedem Gerät gestapelt sind.
  • In mindestens einem Ausführungsbeispiel kann sich die Hochgeschwindigkeits-GPU-Verbindung 3408 auf eine drahtbasierte Multi-Lane-Kommunikationsverbindung beziehen, die von Systemen verwendet wird, die skalierbar sind und eine oder mehrere PPUs 3400 in Kombination mit einer oder mehreren Zentraleinheiten („CPUs“) umfassen, die Cache-Kohärenz zwischen PPUs 3400 und CPUs sowie CPU-Mastering unterstützen. In mindestens einem Ausführungsbeispiel werden Daten und/oder Befehle durch die Hochgeschwindigkeits-GPU-Verbindung 3408 über den Hub 3416 zu/von anderen Einheiten der PPU 3400 übertragen, wie z. B. einer oder mehreren Kopier-Engines, Video-Encodern, Video-Decodern, Energieverwaltungseinheiten und anderen Komponenten, die in 34 möglicherweise nicht explizit gezeigt sind.
  • In mindestens einem Ausführungsbeispiel ist die E/A-Einheit 3406 so konfiguriert, dass sie Kommunikationen (z. B. Befehle, Daten) von einem Host-Prozessor (in 34 nicht gezeigt) über den Systembus 3402 sendet und empfängt. In mindestens einem Ausführungsbeispiel kommuniziert die E/A-Einheit 3406 mit dem Host-Prozessor direkt über den Systembus 3402 oder über ein oder mehrere zwischengeschaltete Geräte, wie z. B. eine Speicherbrücke. In mindestens einem Ausführungsbeispiel kann die E/A-Einheit 3406 über den Systembus 3402 mit einem oder mehreren anderen Prozessoren, wie einer oder mehreren PPUs 3400, kommunizieren. In mindestens einem Ausführungsbeispiel implementiert die E/A-Einheit 3406 eine Peripheral Component Interconnect Express („PCIe“) Schnittstelle für die Kommunikation über einen PCIe-Bus. In mindestens einem Ausführungsbeispiel implementiert die E/A-Einheit 3406 Schnittstellen für die Kommunikation mit externen Geräten.
  • In mindestens einem Ausführungsbeispiel dekodiert die E/A-Einheit 3406 über den Systembus 3402 empfangene Pakete. In mindestens einem Ausführungsbeispiel stellen mindestens einige Pakete Befehle dar, die so konfiguriert sind, dass sie die PPU 3400 veranlassen, verschiedene Operationen durchzuführen. In mindestens einem Ausführungsbeispiel überträgt die E/A-Einheit 3406 dekodierte Befehle an verschiedene andere Einheiten der PPU 3400, wie durch die Befehle angegeben. In mindestens einem Ausführungsbeispiel werden Befehle an die Front-End-Einheit 3410 und/oder an den Hub 3416 oder andere Einheiten der PPU 3400, wie eine oder mehrere Copy-Engines, einen Video-Encoder, einen Video-Decoder, eine Power-Management-Einheit usw., übertragen, (in 34 nicht explizit gezeigt). In mindestens einem Ausführungsbeispiel ist die E/A-Einheit 3406 so konfiguriert, dass sie die Kommunikation zwischen und unter verschiedenen logischen Einheiten der PPU 3400 leitet.
  • In mindestens einem Ausführungsbeispiel kodiert ein vom Host-Prozessor ausgeführtes Programm einen Befehlsstrom in einem Puffer, der der PPU 3400 Arbeitslasten zur Verarbeitung bereitstellt. In mindestens einem Ausführungsbeispiel umfasst eine Arbeitslast Befehle und Daten, die von diesen Befehlen verarbeitet werden sollen. In mindestens einem Ausführungsbeispiel ist der Puffer ein Bereich in einem Speicher, auf den sowohl der Host-Prozessor als auch die PPU 3400 zugreifen können (z. B. Lesen/Schreiben) - eine Host-Schnittstelleneinheit kann so konfiguriert sein, dass sie auf den Puffer in einem mit dem Systembus 3402 verbundenen Systemspeicher über Speicheranforderungen zugreift, die von der E/A-Einheit 3406 über den Systembus 3402 übertragen werden. In mindestens einem Ausführungsbeispiel schreibt der Host-Prozessor einen Befehlsstrom in den Puffer und überträgt dann einen Zeiger auf den Beginn des Befehlsstroms an die PPU 3400, so dass die Front-End-Einheit 3410 Zeiger auf einen oder mehrere Befehlsströme empfängt und einen oder mehrere Befehlsströme verwaltet, indem sie Befehle aus den Befehlsströmen liest und Befehle an verschiedene Einheiten der PPU 3400 weiterleitet.
  • In mindestens einem Ausführungsbeispiel ist die Front-End-Einheit 3410 mit der Planer-Einheit 3412 gekoppelt, die verschiedene GPCs 3418 zur Verarbeitung von Aufgaben konfiguriert, die durch einen oder mehrere Befehlsströme definiert sind. In mindestens einem Ausführungsbeispiel ist die Planer-Einheit 3412 so konfiguriert, dass sie Zustandsinformationen in Bezug auf verschiedene, von der Planer-Einheit 3412 verwaltete Aufgaben verfolgt, wobei die Zustandsinformationen angeben können, welchem der GPCs 3418 eine Aufgabe zugewiesen ist, ob die Aufgabe aktiv oder inaktiv ist, welche Prioritätsstufe der Aufgabe assoziiert ist, und so weiter. In mindestens einem Ausführungsbeispiel verwaltet die Planereinheit 3412 die Ausführung einer Vielzahl von Aufgaben auf einem oder mehreren GPCs 3418.
  • In mindestens einem Ausführungsbeispiel ist die Planereinheit 3412 mit der Arbeitsverteilungseinheit 3414 gekoppelt, die so konfiguriert ist, dass sie Aufgaben zur Ausführung auf den GPCs 3418 verteilt. In mindestens einem Ausführungsbeispiel verfolgt die Arbeitsverteilungseinheit 3414 eine Anzahl geplanter Aufgaben, die von der Planer-Einheit 3412 empfangen wurden, und die Arbeitsverteilungseinheit 3414 verwaltet einen Pool ausstehender Aufgaben und einen Pool aktiver Aufgaben für jeden der GPCs 3418. In mindestens einem Ausführungsbeispiel umfasst der Pool ausstehender Aufgaben eine Anzahl von Slots (z.B. 32 Slots), die Aufgaben enthalten, die zur Verarbeitung durch einen bestimmten GPC 3418 zugewiesen sind; der Pool aktiver Aufgaben kann eine Anzahl von Slots (z.B. 4 Slots) für Aufgaben umfassen, die aktiv von den GPCs 3418 verarbeitet werden, so dass, wenn einer der GPCs 3418 die Ausführung einer Aufgabe abschließt, diese Aufgabe aus dem Pool aktiver Aufgaben für den GPC 3418 entfernt wird und eine der anderen Aufgaben aus dem Pool ausstehender Aufgaben ausgewählt und zur Ausführung auf dem GPC 3418 eingeplant wird. In mindestens einem Ausführungsbeispiel wird eine aktive Aufgabe, die sich auf dem GPC 3418 im Leerlauf befindet, z. B. während des Wartens auf die Auflösung einer Datenabhängigkeit, aus dem GPC 3418 entfernt und in den Pool der anstehenden Aufgaben zurückgeführt, während eine andere Aufgabe aus dem Pool der anstehenden Aufgaben ausgewählt und für die Ausführung auf dem GPC 3418 eingeplant wird.
  • In mindestens einem Ausführungsbeispiel kommuniziert die Arbeitsverteilungseinheit 3414 mit einem oder mehreren GPCs 3418 über die XBar 3420. In mindestens einem Ausführungsbeispiel ist die XBar 3420 ein Netzwerk, das viele Einheiten der PPU 3400 mit anderen Einheiten der PPU 3400 koppelt und so konfiguriert werden kann, dass es die Arbeitsverteilungseinheit 3414 mit einem bestimmten GPC 3418 koppelt. In mindestens einem Ausführungsbeispiel können auch eine oder mehrere andere Einheiten der PPU 3400 über den Hub 3416 mit der XBar 3420 verbunden sein.
  • In mindestens einem Ausführungsbeispiel werden die Aufgaben von der Planer-Einheit 3412 verwaltet und von der Arbeitsverteilungseinheit 3414 an einen der GPCs 3418 weitergeleitet. Der GPC 3418 ist so konfiguriert, dass er die Aufgabe verarbeitet und Ergebnisse generiert. In mindestens einem Ausführungsbeispiel können die Ergebnisse von anderen Aufgaben innerhalb des GPC 3418 verbraucht, über die XBar 3420 an einen anderen GPC 3418 weitergeleitet oder im Speicher 3404 gespeichert werden. In mindestens einem Ausführungsbeispiel können Ergebnisse über Partitionseinheiten 3422 in den Speicher 3404 geschrieben werden, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten in/aus dem Speicher 3404 implementieren. In mindestens einem Ausführungsbeispiel können die Ergebnisse über eine Hochgeschwindigkeits-GPU-Verbindung 3408 an eine andere PPU 3404 oder CPU übertragen werden. In mindestens einem Ausführungsbeispiel umfasst die PPU 3400 ohne Einschränkung eine Anzahl U von Partitionseinheiten 3422, die der Anzahl der mit der PPU 3400 gekoppelten separaten und unterschiedlichen Speichergeräte 3404 entspricht. In mindestens einem Ausführungsbeispiel wird die Partitionseinheit 3422 hierin in Verbindung mit 36 detaillierter beschrieben.
  • In mindestens einem Ausführungsbeispiel führt ein Hostprozessor einen Treiberkern aus, der eine Anwendungsprogrammierschnittstelle („API“) implementiert, die es einer oder mehreren auf dem Hostprozessor ausgeführten Anwendungen ermöglicht, Operationen zur Ausführung auf der PPU 3400 zu planen. In mindestens einem Ausführungsbeispiel werden mehrere Rechenanwendungen gleichzeitig von der PPU 3400 ausgeführt, und die PPU 3400 stellt Isolierung, Dienstgüte („QoS“) und unabhängige Adressräume für mehrere Rechenanwendungen bereit. In mindestens einem Ausführungsbeispiel generiert eine Anwendung Anweisungen (z. B. in Form von API-Aufrufen), die den Treiberkern veranlassen, eine oder mehrere Aufgaben zur Ausführung durch die PPU 3400 zu generieren, und der Treiberkern gibt Aufgaben an einen oder mehrere Streams aus, die von der PPU 3400 verarbeitet werden. In mindestens einem Ausführungsbeispiel umfasst jede Aufgabe eine oder mehrere Gruppen von zusammenhängenden Threads, die als Warp bezeichnet werden können. In mindestens einem Ausführungsbeispiel umfasst ein Warp eine Vielzahl von zusammenhängenden Threads (z. B. 32 Threads), die parallel ausgeführt werden können. In mindestens einem Ausführungsbeispiel können sich kooperierende Threads auf eine Vielzahl von Threads beziehen, die Anweisungen zur Ausführung von Aufgaben enthalten und Daten über gemeinsam genutzte Speicher austauschen. In mindestens einem Ausführungsbeispiel werden Threads und kooperierende Threads gemäß mindestens einem Ausführungsbeispiel in Verbindung mit 36 detaillierter beschrieben.
  • Inferenz- und/oder Trainingslogik 915 werden verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel wird der Prozessor für eine Deep-Learning-Applikation verwendet, um ein maschinelles Lernmodell, wie z. B. ein neuronales Netzwerk, zu trainieren, um Informationen, die der PPU 3400 bereitgestellt werden, vorherzusagen oder zu inferenzieren. In mindestens einem Ausführungsbeispiel wird der Prozessor für eine Deep-Learning-Applikation 3400 verwendet, um Informationen basierend auf einem trainierten maschinellen Lernmodell (z. B. einem neuronalen Netzwerk), das von einem anderen Prozessor oder System oder von der PPU 3400 trainiert wurde, zu inferenzieren oder vorherzusagen. In mindestens einem Ausführungsbeispiel kann die PPU 3400 verwendet werden, um einen oder mehrere der hier beschriebenen Anwendungsfälle für neuronale Netzwerke auszuführen. In mindestens einem Ausführungsbeispiel kann ein neuromorpher Prozessor, wie in 35 gezeigt, verwendet werden, um Worker zu implementieren, die parallel arbeiten, um ein neuronales Netzwerk wie oben beschrieben zu trainieren. wie in 27 gezeigt, verwendet werden, um Worker zu implementieren, die parallel arbeiten, um ein neuronales Netzwerk wie oben beschrieben zu trainieren.
  • 35 zeigt c („GPC“) 3500, gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel handelt es sich bei GPC 3500 um GPC 3418 aus 34. In mindestens einem Ausführungsbeispiel umfasst jeder GPC 3500, ohne Einschränkung, eine Anzahl von Hardware-Einheiten zur Verarbeitung von Aufgaben, und jeder GPC 3500 umfasst, ohne Einschränkung, einen Pipeline-Verwalter 3502, eine Pre-Raster Operations Unit („PROP“) 3504, eine Raster-Engine 3508, eine Work Distribution Crossbar („WDX“) 3516, eine Memory Management Unit („MMU“) 3518, einen oder mehrere Data Processing Clusters („DPCs“) 3506 und jede geeignete Kombination von Teilen.
  • In mindestens einem Ausführungsbeispiel wird der Betrieb des GPC 3500 durch den Pipeline-Verwalter 3502 gesteuert. In mindestens einem Ausführungsbeispiel verwaltet der Pipeline-Verwalter 3502 die Konfiguration eines oder mehrerer DPCs 3506 für die Verarbeitung der dem GPC 3500 zugewiesenen Aufgaben. In mindestens einem Ausführungsbeispiel konfiguriert der Pipeline-Verwalter 3502 mindestens einen von einem oder mehreren DPCs 3506, um mindestens einen Teil einer Grafik-Rendering-Pipeline zu implementieren. In mindestens einem Ausführungsbeispiel ist DPC 3506 so konfiguriert, dass er ein Vertex-Shader-Programm auf einem programmierbaren Streaming-Multiprozessor („SM“) 3514 ausführt. In mindestens einem Ausführungsbeispiel ist der Pipeline-Verwalter 3502 so konfiguriert, dass er die von einer Arbeitsverteilungseinheit empfangenen Pakete an die entsprechenden logischen Einheiten innerhalb des GPC 3500 weiterleitet, wobei einige Pakete an Hardwareeinheiten mit fester Funktion im PROP 3504 und/oder der Raster-Engine 3508 weitergeleitet werden können, während andere Pakete an die DPCs 3506 zur Verarbeitung durch eine Primitive-Engine 3512 oder SM 3514 weitergeleitet werden können. In mindestens einem Ausführungsbeispiel konfiguriert der Pipeline-Verwalter 3502 mindestens einen der DPCs 3506, um ein neuronales Netzwerkmodell und/oder eine Rechner-Pipeline zu implementieren.
  • In mindestens einem Ausführungsbeispiel ist die PROP-Einheit 3504 so konfiguriert, dass sie die von der Raster-Engine 3508 und den DPCs 3506 generierten Daten an eine Raster Operations („ROP“)-Einheit in der Partitionseinheit 3422 weiterleitet, die oben in Verbindung mit 34 detaillierter beschrieben ist. In mindestens einem Ausführungsbeispiel ist die PROP-Einheit 3504 so konfiguriert, dass sie Optimierungen für die Farbmischung durchführt, Pixeldaten organisiert, Adressübersetzungen vornimmt und vieles mehr. In mindestens einem Ausführungsbeispiel umfasst die Raster-Engine 3508 ohne Einschränkung eine Anzahl von Hardware-Einheiten mit fester Funktion, die so konfiguriert sind, dass sie verschiedene Rasteroperationen durchführen, und die Raster-Engine 3508 umfasst ohne Einschränkung eine Setup-Engine, eine Grobraster-Engine, eine Culling-Engine, eine Clipping-Engine, eine Feinraster-Engine, eine Tile Coalescing-Engine und jede geeignete Kombination davon. In mindestens einem Ausführungsbeispiel empfängt die Setup-Engine transformierte Scheitelpunkte und generiert Ebenengleichungen, die mit einem durch Scheitelpunkte definierten geometrischen Primitivum assoziiert sind; die Ebenengleichungen werden an die Grobraster-Engine übertragen, um Abdeckungsinformationen (z.B. eine x-, y-Abdeckungsmaske für eine Kachel) für das Primitivum zu generieren; die Ausgabe der Grobraster-Engine wird an die Culling-Engine übertragen, wo Fragmente, die mit dem Primitivum assoziiert sind und einen z-Test nicht bestehen, aussortiert werden, und an eine Clipping-Engine übertragen, wo Fragmente, die außerhalb eines Sichtkegelstumpfes liegen, abgeschnitten werden. In mindestens einem Ausführungsbeispiel werden die Fragmente, die das Clipping und Culling überstehen, an eine Fine-Raster-Engine weitergeleitet, um Attribute für Pixelfragmente basierend auf den von der Setup-Engine generierten Ebenengleichungen zu generieren. In mindestens einem Ausführungsbeispiel umfasst die Ausgabe der Raster-Engine 3508 Fragmente, die von einer geeigneten Einheit, wie einem in DPC 3506 implementierten Fragment Shader, verarbeitet werden.
  • In mindestens einem Ausführungsbeispiel umfasst jeder DPC 3506, der in GPC 3500 enthalten ist, ohne Einschränkung einen M-Pipe-Controller („MPC“) 3510, eine Primitiv-Engine 3512, einen oder mehrere SMs 3514 und jede geeignete Kombination davon. In mindestens einem Ausführungsbeispiel steuert der MPC 3510 den Betrieb des DPC 3506, indem er die vom Pipeline-Verwalter 3502 empfangenen Pakete an die entsprechenden Einheiten im DPC 3506 weiterleitet. In mindestens einem Ausführungsbeispiel werden Pakete, die mit einem Vertex assoziiert sind, an die Primitiv-Engine 3512 weitergeleitet, die so konfiguriert ist, dass sie die mit dem Vertex assoziierten Vertex-Attribute aus dem Speicher abruft; im Gegensatz dazu können Pakete, die mit einem Shader-Programm assoziiert sind, an SM 3514 übertragen werden.
  • In mindestens einem Ausführungsbeispiel umfasst SM 3514 ohne Einschränkung einen programmierbaren Streaming-Prozessor, der so konfiguriert ist, dass er Aufgaben verarbeitet, die durch eine Anzahl von Threads dargestellt werden. In mindestens einem Ausführungsbeispiel ist der SM 3514 mit mehreren Threads ausgestattet und so konfiguriert, dass er eine Vielzahl von Threads (z. B. 32 Threads) aus einer bestimmten Gruppe von Threads gleichzeitig ausführt und eine SIMD-Architektur („Single-Instruction, Multiple-Data“) implementiert, bei der jeder Thread in einer Gruppe von Threads (z. B. ein Warp) so konfiguriert ist, dass er basierend auf demselben Satz von Anweisungen einen anderen Datensatz verarbeitet. In mindestens einem Ausführungsbeispiel führen alle Threads in einer Gruppe von Threads dieselben Befehle aus. In mindestens einem Ausführungsbeispiel implementiert SM 3514 eine Single-Instruction, Multiple Thread („SIMT“)-Architektur, bei der jeder Thread in einer Gruppe von Threads so konfiguriert ist, dass er basierend auf demselben Satz von Befehlen einen anderen Datensatz verarbeitet, wobei jedoch individuelle Threads in der Gruppe von Threads während der Ausführung divergieren dürfen. In mindestens einem Ausführungsbeispiel werden ein Programmzähler, ein Aufrufstapel und ein Ausführungsstatus für jeden Warp beibehalten, wodurch die Gleichzeitigkeit zwischen Warps und die serielle Ausführung innerhalb von Warps ermöglicht wird, wenn die Threads innerhalb eines Warps divergieren. In einem anderen Ausführungsbeispiel werden ein Programmzähler, ein Aufrufstapel und ein Ausführungsstatus für jeden individuellen Thread beibehalten, was gleiche Gleichzeitigkeit zwischen allen Threads innerhalb und zwischen Warps ermöglicht. In mindestens einem Ausführungsbeispiel wird der Ausführungsstatus für jeden individuellen Thread beibehalten, und Threads, die dieselben Befehle ausführen, können zur besseren Effizienz zusammengeführt und parallel ausgeführt werden. Mindestens ein Ausführungsbeispiel von SM 3514 wird hier detaillierter beschrieben.
  • In mindestens einem Ausführungsbeispiel stellt die MMU 3518 eine Schnittstelle zwischen dem GPC 3500 und der Partitionseinheit des Speichers (z. B. der Partitionseinheit 3422 in 34) bereit, und die MMU 3518 sorgt für die Übersetzung virtueller Adressen in physikalische Adressen, den Speicherschutz und die Arbitrierung von Speicheranforderungen. In mindestens einem Ausführungsbeispiel stellt die MMU 3518 einen oder mehrere Übersetzungs-Lookaside-Puffer („TLBs“) bereit, um die Übersetzung von virtuellen Adressen in physische Adressen im Speicher durchzuführen.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel wird ein Prozessor für eine Deep-Learning-Applikation verwendet, um ein maschinelles Lernmodell, wie z. B. ein neuronales Netzwerk, zu trainieren, um Informationen, die dem GPC 3500 bereitgestellt werden, vorherzusagen oder zu inferenzieren. In mindestens einem Ausführungsbeispiel wird GPC 3500 zum Inferenzieren oder Vorhersagen von Informationen basierend auf einem trainierten maschinellen Lernmodell (z. B. einem neuronalen Netzwerk) verwendet, das von einem anderen Prozessor oder System oder von GPC 3500 trainiert wurde. In mindestens einem Ausführungsbeispiel kann GPC 3500 verwendet werden, um einen oder mehrere der hier beschriebenen Anwendungsfälle für neuronale Netzwerke auszuführen. In mindestens einem Ausführungsbeispiel kann eine Partitionseinheit des Speichers, wie in 36 gezeigt, verwendet werden, um Worker zu implementieren, die parallel arbeiten, um ein neuronales Netzwerk wie oben beschrieben zu trainieren.
  • 36 zeigt eine Speicherpartitionseinheit 3600 einer Parallelverarbeitungseinheit („PPU“) gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel umfasst die Speicherpartitionseinheit 3600 ohne Einschränkung eine Raster Operations („ROP“)-Einheit 3602, einen Level Two („L2“)-Cache 3604, eine Speicherschnittstelle 3606 und jede geeignete Kombination davon. Die Speicherschnittstelle 3606 ist mit dem Speicher gekoppelt. Die Speicherschnittstelle 3606 kann 32-, 64-, 128-, 1024-Bit-Datenbusse oder Ähnliches für die Hochgeschwindigkeitsdatenübertragung implementieren. In mindestens einem Ausführungsbeispiel enthält die PPU U-Speicherschnittstellen 3606, eine Speicherschnittstelle 3606 pro Paar von Partitionseinheiten 3600, wobei jedes Paar von Partitionseinheiten 3600 mit einem entsprechenden Gerät verbunden ist. Zum Beispiel kann die PPU in mindestens einem Ausführungsbeispiel mit bis zu Y Geräten verbunden sein, wie z. B. Speicherstapeln mit hoher Bandbreite oder synchronem dynamischem Direktzugriffsspeicher mit doppelter Datenrate, Version 5 („GDDR5 SDRAM“).
  • In mindestens einem Ausführungsbeispiel implementiert die Speicherschnittstelle 3606 eine Speicherschnittstelle der zweiten Generation mit hoher Bandbreite („HBM2“), und Y ist gleich der Hälfte von U. In mindestens einem Ausführungsbeispiel befinden sich die HBM2-Speicherstapel auf demselben physischen Gehäuse wie die PPU, was im Vergleich zu herkömmlichen GDDR5-SDRAM-Systemen erhebliche Energie- und Flächeneinsparungen bereitstellt. In mindestens einem Ausführungsbeispiel umfasst jeder HBM2-Stapel ohne Einschränkung vier Speicherchips und Y ist gleich 4, wobei jeder HBM2-Stapel zwei 128-Bit-Kanäle pro Chip für insgesamt 8 Kanäle und eine Datenbusbreite von 1024 Bit umfasst. In mindestens einem Ausführungsbeispiel unterstützt der Speicher den Single-Error Correcting Double-Error Detecting („SECDED“) Error Correction Code („ECC“) zum Schutz der Daten. ECC stellt eine höhere Zuverlässigkeit für Rechenanwendungen bereit, die empfindlich auf Datenkorruption reagieren.
  • In mindestens einem Ausführungsbeispiel implementiert die PPU eine mehrstufige Speicherhierarchie. In mindestens einem Ausführungsbeispiel unterstützt die Partitionseinheit 3600 einen einheitlichen Speicher, um einen einzigen einheitlichen virtuellen Adressraum für die Zentraleinheit („CPU“) und den PPU-Speicher bereitzustellen und so die gemeinsame Nutzung von Daten zwischen virtuellen Speichersystemen zu ermöglichen. In mindestens einem Ausführungsbeispiel wird die Häufigkeit von Zugriffen durch eine PPU auf Speicher, der sich auf anderen Prozessoren befindet, verfolgt, um sicherzustellen, dass Speicherseiten in den physischen Speicher der PPU verschoben werden, die häufiger auf Seiten zugreift. In mindestens einem Ausführungsbeispiel unterstützt die Hochgeschwindigkeits-GPU-Verbindung 3408 Adressübersetzungsdienste, die es der PPU ermöglichen, die Seitentabellen einer CPU direkt zu adressieren und der PPU vollen Zugriff auf den CPU-Speicher bereitzustellen.
  • In mindestens einem Ausführungsbeispiel übertragen Copy-Engines Daten zwischen mehreren PPUs oder zwischen PPUs und CPUs. In mindestens einem Ausführungsbeispiel können Kopier-Engines Seitenfehler für Adressen generieren, die nicht in Seitentabellen abgebildet sind, und die Speicherpartitionseinheit 3600 bearbeitet dann die Seitenfehler, indem sie die Adressen in die Seitentabelle abbildet, woraufhin die Kopier-Engine die Übertragung durchführt. In mindestens einem Ausführungsbeispiel wird der Speicher für mehrere Operationen der Copy-Engine zwischen mehreren Prozessoren gepinnt (d. h. nicht auslagerbar), wodurch der verfügbare Speicher erheblich reduziert wird. In mindestens einem Ausführungsbeispiel können mit Hardware Page Faulting Adressen an Copy-Engines weitergegeben werden, ohne Rücksicht darauf, ob Speicherseiten resident sind, und der Kopiervorgang ist transparent.
  • Daten aus dem Speicher 3404 von 34 oder einem anderen Systemspeicher werden von der Speicherpartitionseinheit 3600 abgerufen und im L2-Cache 3604 gespeichert, der sich auf dem Chip befindet und in mindestens einem Ausführungsbeispiel von verschiedenen GPCs gemeinsam genutzt wird. In mindestens einem Ausführungsbeispiel umfasst jede Partitionseinheit 3600 ohne Einschränkung mindestens einen Teil des L2-Cache, der mit einem entsprechenden Gerät assoziiert ist. In mindestens einem Ausführungsbeispiel werden Caches der unteren Ebene in verschiedenen Einheiten innerhalb von GPCs implementiert. In mindestens einem Ausführungsbeispiel kann jeder der SMs 3514 einen Cache der Ebene eins („L1“) implementieren, wobei der L1-Cache ein privater Speicher ist, der einem bestimmten SM 3514 zugeordnet ist, und Daten aus dem L2-Cache 3604 abgerufen und in jedem der L1-Caches zur Verarbeitung in Funktionseinheiten der SMs 3514 gespeichert werden. In mindestens einem Ausführungsbeispiel ist der L2-Cache 3604 mit der Speicherschnittstelle 3606 und der XBar 3420 gekoppelt.
  • Die ROP-Einheit 3602 führt in mindestens einem Ausführungsbeispiel Grafikrasteroperationen durch, die sich auf die Pixelfarbe beziehen, wie z. B. Farbkomprimierung, Pixelüberblendung und mehr. In mindestens einem Ausführungsbeispiel implementiert die ROP-Einheit 3602 eine Tiefenprüfung in Verbindung mit der Raster-Engine 3508, wobei sie eine Tiefe für eine Sample-Position, die mit einem Pixelfragment assoziiert ist, von der Culling-Engine der Raster-Engine 3508 erhält. In mindestens einem Ausführungsbeispiel wird die Tiefe gegen eine entsprechende Tiefe in einem Tiefenpuffer für eine mit dem Fragment assoziierte Sample-Position getestet. In mindestens einem Ausführungsbeispiel aktualisiert die ROP-Einheit 3602 den Tiefenpuffer und überträgt das Ergebnis der Tiefenprüfung an die Raster-Engine 3508, wenn das Fragment die Tiefenprüfung für die Sample-Position besteht. Die Anzahl der Partitionseinheiten 3600 kann sich von der Anzahl der GPCs unterscheiden, so dass jede ROP-Einheit 3602 in mindestens einem Ausführungsbeispiel mit jedem der GPCs gekoppelt werden kann. In mindestens einem Ausführungsbeispiel verfolgt die ROP-Einheit 3602 die von verschiedenen GPCs empfangenen Pakete und bestimmt, an welche ein von der ROP-Einheit 3602 generiertes Ergebnis über die XBar 3420 weitergeleitet wird.
  • 37 zeigt einen Streaming-Multiprozessor („SM“) 3700 gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel handelt es sich bei SM 3700 um SM aus 35. In mindestens einem Ausführungsbeispiel umfasst SM 3700 ohne Einschränkung einen Befehls-Cache 3702; eine oder mehrere Planer-Einheiten 3704; eine Registerdatei 3708; einen oder mehrere Verarbeitungskerne („Kerne“) 3710; eine oder mehrere Sonderfunktionseinheiten („SFUs“) 3712; eine oder mehrere Lade-/Speichereinheiten („LSUs“) 3714; ein Verbindungsnetzwerk 3716; einen gemeinsam genutzten Speicher/L1-Cache 3718; und jede geeignete Kombination davon. In mindestens einem Ausführungsbeispiel verteilt eine Arbeitsverteilungseinheit Aufgaben zur Ausführung auf allgemeinen Verarbeitungsclustern („GPCs“) von Parallelverarbeitungseinheiten („PPUs“), und jede Aufgabe wird einem bestimmten Datenverarbeitungscluster („DPC“) innerhalb eines GPCs zugewiesen, und wenn die Aufgabe mit einem Shader-Programm assoziiert ist, wird die Aufgabe einem der SMs 3700 zugewiesen. In mindestens einem Ausführungsbeispiel empfängt die Planer-Einheit 3704 Aufgaben von der Arbeitsverteilungseinheit und verwaltet die Befehlsplanung für einen oder mehrere Thread-Blöcke, die dem SM 3700 zugewiesen sind. In mindestens einem Ausführungsbeispiel plant die Planer-Einheit 3704 Thread-Blöcke für die Ausführung als Warps von parallelen Threads, wobei jedem Thread-Block mindestens ein Warp zugewiesen wird. In mindestens einem Ausführungsbeispiel führt jeder Warp Threads aus. In mindestens einem Ausführungsbeispiel verwaltet die Planer-Einheit 3704 eine Vielzahl verschiedener Thread-Blöcke, indem sie den verschiedenen Thread-Blöcken Warps zuweist und dann während jedes Taktzyklus Anweisungen aus einer Vielzahl verschiedener kooperativer Gruppen an verschiedene Funktionseinheiten (z. B. Verarbeitungskerne 3710, SFUs 3712 und LSUs 3714) verteilt.
  • In mindestens einem Ausführungsbeispiel können sich kooperative Gruppen auf ein Programmiermodell zum Organisieren von Gruppen kommunizierender Threads beziehen, das es Entwicklern ermöglicht, die Granularität auszudrücken, mit der Threads kommunizieren, und so eine reichhaltigere, effizientere parallele Dekomposition zu ermöglichen. In mindestens einem Ausführungsbeispiel unterstützen kooperative Start-APIs die Synchronisierung zwischen Thread-Blöcken zur Ausführung paralleler Algorithmen. In mindestens einem Ausführungsbeispiel stellen Anwendungen herkömmlicher Programmiermodelle ein einziges, einfaches Konstrukt für die Synchronisierung kooperierender Threads bereit: eine Barriere über alle Threads eines Thread-Blocks (z. B. die Funktion syncthreads( )). In mindestens einem Ausführungsbeispiel können Programmierer jedoch Gruppen von Threads mit einer kleineren Granularität als der des Thread-Blocks definieren und innerhalb der definierten Gruppen synchronisieren, um eine höhere Leistung, Designflexibilität und Software-Wiederverwendung in Form von gemeinsamen gruppenweiten Funktionsschnittstellen zu ermöglichen. In mindestens einem Ausführungsbeispiel ermöglicht es Cooperative Groups Programmierern, Gruppen von Threads explizit auf Sub-Block- (d.h. so klein wie ein einzelner Thread) und Multi-Block-Granularität zu definieren und kollektive Operationen wie Synchronisation auf Threads in einer kooperativen Gruppe durchzuführen. Das Programmiermodell unterstützt eine saubere Komposition über Softwaregrenzen hinweg, so dass Bibliotheken und Dienstprogramme innerhalb ihres lokalen Kontexts sicher synchronisieren können, ohne dass Annahmen über Konvergenz getroffen werden müssen. In mindestens einem Ausführungsbeispiel ermöglichen Primitive für kooperative Gruppen neue Muster kooperativer Parallelität, einschließlich, ohne Einschränkung, Producer-Consumer-Parallelität, opportunistische Parallelität und globale Synchronisierung über ein gesamtes Gitter von Thread-Blöcken.
  • In mindestens einem Ausführungsbeispiel ist eine Verteilereinheit 3706 so konfiguriert, dass sie Befehle an eine oder mehrere Funktionseinheiten überträgt, und die Planer-Einheit 3704 umfasst ohne Einschränkung zwei Verteilereinheiten 3706, die es ermöglichen, dass zwei verschiedene Befehle aus demselben Warp während jedes Taktzyklus versandt werden. In mindestens einem Ausführungsbeispiel umfasst jede Planer-Einheit 3704 eine einzelne Versandeinheit 3706 oder mehrere Versandeinheiten 3706.
  • In mindestens einem Ausführungsbeispiel umfasst jedes SM 3700 ohne Einschränkung eine Registerdatei 3708, die einen Satz von Registern für Funktionseinheiten des SM 3700 bereitstellt. In mindestens einem Ausführungsbeispiel ist die Registerdatei 3708 zwischen den einzelnen Funktionseinheiten aufgeteilt, so dass jeder Funktionseinheit ein bestimmter Teil der Registerdatei 3708 zugewiesen ist. In mindestens einem Ausführungsbeispiel ist die Registerdatei 3708 zwischen verschiedenen Warps aufgeteilt, die von SM 3700 ausgeführt werden, und die Registerdatei 3708 stellt einen temporären Speicher für Operanden bereit, die mit Datenpfaden von Funktionseinheiten verbunden sind. In mindestens einem Ausführungsbeispiel umfasst jedes SM 3700, ohne Einschränkung, eine Vielzahl von L-Verarbeitungskernen 3710. In mindestens einem Ausführungsbeispiel umfasst SM 3700 ohne Einschränkung eine große Anzahl (z. B. 128 oder mehr) verschiedener Verarbeitungskerne 3710. In mindestens einem Ausführungsbeispiel umfasst jeder Verarbeitungskern 3710 ohne Einschränkung eine vollständig als Pipeline implementierte, einfachpräzise, doppeltpräzise und/oder gemischtpräzise Verarbeitungseinheit, die ohne Einschränkung eine arithmetische Gleitkomma-Logikeinheit und eine arithmetische Ganzzahl-Logikeinheit umfasst. In mindestens einem Ausführungsbeispiel implementieren die Gleitkomma-Arithmetik-Logikeinheiten den IEEE 754-2008-Standard für Gleitkomma-Arithmetik. In mindestens einem Ausführungsbeispiel umfassen die Verarbeitungskerne 3710 ohne Einschränkung 64 Gleitkomma-Kerne mit einfacher Genauigkeit (32 Bit), 64 Ganzzahl-Kerne, 32 Gleitkomma-Kerne mit doppelter Genauigkeit (64 Bit) und 8 Tensor-Kerne.
  • Tensor-Kerne sind so konfiguriert, dass sie gemäß mindestens einem Ausführungsbeispiel Matrixoperationen durchführen. In mindestens einem Ausführungsbeispiel sind ein oder mehrere Tensor-Kerne in den Verarbeitungskernen 3710 enthalten. In mindestens einem Ausführungsbeispiel sind Tensorkerne so konfiguriert, dass sie Deep-Learning-Matrixarithmetik durchführen, wie z. B. Faltungsoperationen für das Training und die Inferenzierung neuronaler Netzwerke. In mindestens einem Ausführungsbeispiel arbeitet jeder Tensorkern mit einer 4x4-Matrix und führt eine Matrixmultiplikations- und Akkumulationsoperation D = A X B + C durch, wobei A, B, C und D 4x4-Matrizen sind.
  • In mindestens einem Ausführungsbeispiel sind die Eingaben für die Matrixmultiplikation A und B 16-Bit-Gleitkommamatrizen und die Akkumulationsmatrizen C und D 16-Bit-Gleitkomma- oder 32-Bit-Gleitkommamatrizen. In mindestens einem Ausführungsbeispiel arbeiten Tensor-Kerne mit 16-Bit-Gleitkomma-Eingabedaten und 32-Bit-Gleitkomma-Akkumulation. In mindestens einem Ausführungsbeispiel verwendet die 16-Bit-Gleitkommamultiplikation 64 Operationen und ergibt ein Produkt mit voller Genauigkeit, das dann unter Verwendung einer 32-Bit-Gleitkomma-Addition mit anderen Zwischenprodukten für eine 4x4x4-Matrixmultiplikation akkumuliert wird. In mindestens einem Ausführungsbeispiel werden Tensor-Kerne verwendet, um viel größere zweidimensionale oder höherdimensionale Matrixoperationen durchzuführen, die aus diesen kleineren Elementen aufgebaut sind. In mindestens einem Ausführungsbeispiel stellt eine API wie die CUDA 9 C++ API spezialisierte Operationen zum Laden, Multiplizieren und Akkumulieren von Matrizen sowie zum Speichern von Matrizen zur Verfügung, um Tensor-Kerne in einem CUDA-C++-Programm effizient zu nutzen. In mindestens einem Ausführungsbeispiel geht die CUDA-Schnittstelle auf Warp-Ebene von Matrizen der Größe 16x16 aus, die alle 32 Threads des Warps umfassen.
  • In mindestens einem Ausführungsbeispiel umfasst jeder SM 3700 ohne Einschränkung M SFUs 3712, die spezielle Funktionen ausführen (z. B. Attributauswertung, reziproke Quadratwurzel und dergleichen). In mindestens einem Ausführungsbeispiel umfassen die SFUs 3712 ohne Einschränkung eine Baumdurchlaufeinheit, die so konfiguriert ist, dass sie eine hierarchische Baumdatenstruktur durchläuft. In mindestens einem Ausführungsbeispiel umfassen die SFUs 3712 ohne Einschränkung eine Textureinheit, die so konfiguriert ist, dass sie Texturabbildungsfilterungsoperationen durchführt. In mindestens einem Ausführungsbeispiel sind die Textureinheiten so konfiguriert, dass sie Texturkarten (z. B. ein 2D-Array von Texeln) aus dem Speicher laden und Texturkarten samplen, um gesampelte Texturwerte zur Verwendung in von SM 3700 ausgeführten Shader-Programmen zu erzeugen. In mindestens einem Ausführungsbeispiel werden die Texturkarten im gemeinsam genutzten Speicher/L1-Cache 3718 gespeichert. In mindestens einem Ausführungsbeispiel implementieren Textureinheiten Texturoperationen, wie z. B. Filteroperationen unter Verwendung von Mip-Maps (z. B. Texture-Maps mit unterschiedlichem Detaillierungsgrad), gemäß mindestens einem Ausführungsbeispiel. In mindestens einem Ausführungsbeispiel umfasst jedes SM 3700 ohne Einschränkung zwei Textureinheiten.
  • Jedes SM 3700 umfasst ohne Einschränkung N LSUs 3714, die in mindestens einem Ausführungsbeispiel Lade- und Speicheroperationen zwischen gemeinsam genutztem Speicher/L1-Cache 3718 und Registerdatei 3708 implementieren. Jedes SM 3700 umfasst ohne Einschränkung ein Netzwerk 3716, das in mindestens einem Ausführungsbeispiel jede der Funktionseinheiten mit der Registerdatei 3708 und die LSU 3714 mit der Registerdatei 3708 und dem gemeinsam genutzten Speicher/L1-Cache 3718 verbindet. In mindestens einem Ausführungsbeispiel ist das Netzwerk 3716 eine Crossbar, die so konfiguriert werden kann, dass sie jede der Funktionseinheiten mit jedem der Register in der Registerdatei 3708 verbindet und die LSUs 3714 mit der Registerdatei 3708 und den Speicherplätzen im gemeinsam genutzten Speicher/L1-Cache 3718 verbindet.
  • In mindestens einem Ausführungsbeispiel ist der gemeinsam genutzte Speicher/Ll-Cache 3718 ein Array von On-Chip-Speicher, der die Datenspeicherung und Kommunikation zwischen SM 3700 und Primitiv-Engine und zwischen Threads in SM 3700 ermöglicht. In mindestens einem Ausführungsbeispiel umfasst der gemeinsam genutzte Speicher/L1-Cache 3718 ohne Einschränkung eine Speicherkapazität von 128 KB und befindet sich im Pfad vom SM 3700 zur Partitionseinheit. In mindestens einem Ausführungsbeispiel wird der gemeinsam genutzte Speicher/L1-Cache 3718 verwendet, um Lese- und Schreibvorgänge zu cachen. In mindestens einem Ausführungsbeispiel sind ein oder mehrere gemeinsam genutzte(r) Speicher/L1-Cache 3718, L2-Cache und Arbeitsspeicher Sicherungsspeicher.
  • Die Kombination von Daten-Cache und gemeinsam genutzter Speicherfunktionalität in einem einzigen Speicherblock stellt in mindestens einem Ausführungsbeispiel eine verbesserte Leistung für beide Arten von Speicherzugriffen bereit. In mindestens einem Ausführungsbeispiel wird die Kapazität von Programmen, die den gemeinsam genutzten Speicher nicht nutzen, als Cache genutzt oder kann von diesen genutzt werden, z. B. wenn der gemeinsam genutzte Speicher so konfiguriert ist, dass er die Hälfte der Kapazität nutzt, können Textur- und Lade-/Speicheroperationen die verbleibende Kapazität nutzen. Die Integration in den gemeinsam genutzten Speicher/L1-Cache 3718 ermöglicht es dem gemeinsam genutzten Speicher/L1-Cache 3718, gemäß mindestens einem Ausführungsbeispiel als durchsatzstarke Leitung für Streaming-Daten zu fungieren und gleichzeitig einen Zugriff mit hoher Bandbreite und geringer Latenz auf häufig wiederverwendete Daten bereitzustellen. In mindestens einem Ausführungsbeispiel kann bei der Konfiguration für parallele Allzweckberechnungen eine einfachere Konfiguration als bei der Grafikverarbeitung verwendet werden. In mindestens einem Ausführungsbeispiel werden Grafikverarbeitungseinheiten mit festen Funktionen umgangen, wodurch ein wesentlich einfacheres Programmiermodell entsteht. In mindestens einem Ausführungsbeispiel weist die Arbeitsverteilungseinheit in der Konfiguration für allgemeine parallele Berechnungen Blöcke von Threads direkt den DPCs zu und verteilt sie. In mindestens einem Ausführungsbeispiel führen Threads in einem Block dasselbe Programm aus, wobei eine eindeutige Thread-ID in der Berechnung verwendet wird, um sicherzustellen, dass jeder Thread eindeutige Ergebnisse generiert, wobei SM 3700 zur Ausführung des Programms und zur Durchführung von Berechnungen, gemeinsam genutzter Speicher/L1-Cache 3718 zur Kommunikation zwischen Threads und LSU 3714 zum Lesen und Schreiben des globalen Speichers über den gemeinsam genutzten Speicher/L1-Cache 3718 und die Speicherpartitionseinheit verwendet werden. In mindestens einem Ausführungsbeispiel schreibt SM 3700, wenn es für allgemeine parallele Berechnungen konfiguriert ist, Befehle, die die Planer-Einheit 3704 verwenden kann, um neue Arbeit auf DPCs zu starten.
  • In mindestens einem Ausführungsbeispiel ist die PPU in einem Desktop-Computer, einem Laptop-Computer, einem Tablet-Computer, Servern, Supercomputern, einem Smartphone (z. B. einem drahtlosen, handgehaltenen Gerät), einem persönlichen digitalen Assistenten („PDA“), einer Digitalkamera, einem Fahrzeug, einem Head Mounted Display, einem handgehaltenen elektronischen Gerät und mehr enthalten oder daran gekoppelt. In mindestens einem Ausführungsbeispiel ist die PPU auf einem einzigen Halbleitersubstrat untergebracht. In mindestens einem Ausführungsbeispiel ist die PPU in einem System-on-a-Chip („SoC“) zusammen mit einem oder mehreren anderen Geräten wie zusätzlichen PPUs, Speicher, einem Rechner mit reduziertem Befehlssatz („RISC“), einer Speicherverwaltungseinheit („MMU“), einem Digital-Analog-Wandler („DAC“) usw. enthalten.
  • In mindestens einem Ausführungsbeispiel kann die PPU in einer Grafikkarte enthalten sein, die ein oder mehrere Speichergeräte enthält. Die Grafikkarte kann so konfiguriert sein, dass sie mit einem PCIe-Steckplatz auf der Hauptplatine eines Desktop-Rechners verbunden werden kann. In mindestens einem Ausführungsbeispiel kann die PPU eine integrierte Grafikverarbeitungseinheit („iGPU“) sein, die im Chipsatz der Hauptplatine enthalten ist.
  • Die Inferenz- und/oder Trainingslogik 915 wird verwendet, um Inferenzierungs- und/oder Trainingsoperationen durchzuführen, die mit einem oder mehreren Ausführungsbeispielen assoziiert sind. Details zur Inferenz- und/oder Trainingslogik 915 werden hier in Verbindung mit 9A und/oder 9B bereitgestellt. In mindestens einem Ausführungsbeispiel wird ein Prozessor für eine Deep-Learning-Applikation verwendet, um ein maschinelles Lernmodell, wie z. B. ein neuronales Netzwerk, zu trainieren, um Informationen vorherzusagen oder zu inferenzieren, die dem SM 3700 bereitgestellt werden. In mindestens einem Ausführungsbeispiel wird SM 3700 verwendet, um Informationen basierend auf einem trainierten maschinellen Lernmodell (z. B. einem neuronalen Netzwerk), das von einem anderen Prozessor oder System oder von SM 3700 trainiert wurde, zu inferenzieren oder vorherzusagen. In mindestens einem Ausführungsbeispiel kann SM 3700 verwendet werden, um einen oder mehrere hierin beschriebene Anwendungsfälle eines neuronalen Netzwerks durchzuführen.
  • In mindestens einem Ausführungsbeispiel kann sich eine einzelne Halbleiterplattform auf eine einzige einheitliche halbleiterbasierte integrierte Schaltung oder einen Chip beziehen. In mindestens einem Ausführungsbeispiel können Multi-Chip-Module mit erhöhter Konnektivität verwendet werden, die einen On-Chip-Betrieb simulieren und wesentliche Verbesserungen gegenüber der Verwendung einer herkömmlichen Zentraleinheit („CPU“) und einer Bus-Implementierung bieten. In mindestens einem Ausführungsbeispiel können verschiedene Module auch separat oder in verschiedenen Kombinationen von Halbleiterplattformen je nach Wunsch des Benutzers angeordnet sein.
  • In mindestens einem Ausführungsbeispiel werden Computerprogramme in Form von maschinenlesbarem, ausführbarem Code oder Computersteuerungslogik-Algorithmen im Hauptspeicher 1504 und/oder in einem Sekundärspeicher gespeichert. Computerprogramme, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, ermöglichen es dem System 1500, verschiedene Funktionen gemäß mindestens einem Ausführungsbeispiel auszuführen. Der Speicher 1504, ein Speicher und/oder ein beliebiger anderer Speicher sind mögliche Beispiele für computerlesbare Medien. In mindestens einem Ausführungsbeispiel kann sich der Sekundärspeicher auf jedes geeignete Gerät oder System beziehen, wie z. B. ein Festplattenlaufwerk und/oder ein Wechselspeicherlaufwerk, das ein Diskettenlaufwerk, ein Magnetbandlaufwerk, ein Compact-Disk-Laufwerk, ein DVD-Laufwerk, ein Aufzeichnungsgerät, einen USB-Flash-Speicher usw. darstellt. In mindestens einem Ausführungsbeispiel werden die Architektur und/oder die Funktionalität verschiedener vorhergehender Figuren im Zusammenhang mit der CPU 1502 implementiert; dem Parallelverarbeitungssystem 1512; einem integrierten Schaltkreis, der mindestens einen Teil der Fähigkeiten sowohl der CPU 1502 als auch des Parallelverarbeitungssystems 1512 besitzt; einem Chipsatz (z.B. eine Gruppe von integrierten Schaltkreisen, die als eine Einheit zur Ausführung verwandter Funktionen entworfen und verkauft werden, usw.); und jeder geeigneten Kombination von integrierten Schaltkreisen.
  • In mindestens einem Ausführungsbeispiel wird die Architektur und/oder Funktionalität verschiedener vorhergehender Figuren im Kontext eines allgemeinen Rechnersystems, eines Leiterplattensystems, eines für Unterhaltungszwecke bestimmten Spielkonsolensystems, eines anwendungsspezifischen Systems usw. implementiert. In mindestens einem Ausführungsbeispiel kann das Computersystem 1500 die Form eines Desktop-Computers, eines Laptops, eines Tablet-Computers, eines Servers, eines Supercomputers, eines Smartphones (z.B. eines drahtlosen, handgehaltenen Geräts), eines persönlichen digitalen Assistenten („PDA“), einer Digitalkamera, eines Fahrzeugs, eines Head-Mounted-Displays, eines handgehaltenen elektronischen Geräts, eines Mobiltelefongeräts, eines Fernsehers, einer Workstation, von Spielkonsolen, eines eingebetteten Systems und/oder jeder anderen Art von Logik annehmen.
  • In mindestens einem Ausführungsbeispiel umfasst das Parallelverarbeitungssystem 1512 ohne Einschränkung eine Vielzahl von Parallelverarbeitungseinheiten („PPUs“) 1514 und assoziierte Speicher 1516. In mindestens einem Ausführungsbeispiel sind die PPUs 1514 mit einem Host-Prozessor oder anderen peripheren Geräten über eine Zwischenverbindung 1518 und einen Schalter 1520 oder Multiplexer verbunden. In mindestens einem Ausführungsbeispiel verteilt das Parallelverarbeitungssystem 1512 Rechenaufgaben auf die PPUs 1514, die parallelisierbar sein können - zum Beispiel als Teil der Verteilung von Rechenaufgaben auf mehrere Thread-Blöcke der Grafikverarbeitungseinheit („GPU“). In mindestens einem Ausführungsbeispiel wird der Speicher gemeinsam genutzt und ist für einige oder alle PPUs 1514 zugänglich (z. B. für Lese- und/oder Schreibzugriffe), obwohl ein solcher gemeinsam genutzter Speicher zu Leistungseinbußen im Vergleich zur Nutzung von lokalem Speicher und Registern führen kann, die in einer PPU 1514 resident sind. In mindestens einem Ausführungsbeispiel wird der Betrieb der PPUs 1514 durch die Verwendung eines Befehls wie _syncthreads() synchronisiert, wobei alle Threads in einem Block (z. B. über mehrere PPUs 1514 ausgeführt) einen bestimmten Punkt der Ausführung von Code erreichen müssen, bevor sie prozessiert werden.
  • Andere Variationen sind im Sinne der vorliegenden Offenbarung. Während die offengelegten Techniken für verschiedene Modifikationen und alternative Konstruktionen anfällig sind, sind bestimmte Ausführungsbeispiele davon in den Zeichnungen gezeigt und oben detailliert beschrieben worden. Es sollte jedoch verstanden werden, dass nicht beabsichtigt ist, die Offenbarung auf eine bestimmte Form oder bestimmte Formen zu beschränken, sondern dass im Gegenteil beabsichtigt ist, alle Modifikationen, alternativen Konstruktionen und Äquivalente abzudecken, die in den Geist und den Umfang der Offenbarung fallen, wie in den beigefügten Ansprüchen definiert.
  • Mindestens ein Ausführungsbeispiel kann im Hinblick auf mindestens eine der folgenden Ziffern beschrieben werden:
    1. 1. Prozessor, umfassend: zwei oder mehr Verarbeitungskerne, um Teile eines neuronalen Netzwerks separat parallel zueinander zu trainieren.
    2. 2. Prozessor nach Ziffer 1, wobei die zwei oder mehr Verarbeitungskerne einen oder mehrere Gradienten auf verschiedene Sätze von Knoten des neuronalen Netzwerks anwenden.
    3. 3. Prozessor nach Ziffer 1 oder 2, wobei das neuronale Netzwerk zumindest teilweise trainiert wird, indem eine Gewichtsaktualisierung generiert wird, indem eine Vielzahl von partiellen Gewichtsaktualisierungen kombiniert wird, die von den zwei oder mehr Verarbeitungskernen parallel zueinander erzeugt werden.
    4. 4. Prozessor nach einer der Ziffern 1 bis 3, wobei der Prozessor weiter eine Gewichtsaktualisierungsoperation in eine Vielzahl von partiellen Gewichtsaktualisierungsoperationen unterteilt und individuelle partielle Gewichtsaktualisierungsoperationen auf die zwei oder mehr Verarbeitungskerne verteilt.
    5. 5. Prozessor nach Ziffer 4, wobei die partiellen Gewichtsaktualisierungsoperationen durch Aufteilen einer initialen Gewichts- und Gradientenaktualisierung in eine Vielzahl von unterschiedlichen Teilen erzeugt werden.
    6. 6. Prozessor nach Ziffer 4 oder 5, wobei jede partielle Gewichtsaktualisierung unter Verwendung eines anderen Threads ausgeführt wird.
    7. 7. Prozessor nach einer der Ziffern 4-6, wobei der Prozessor weiter die partiellen Gewichtsaktualisierungen zusammenführt, um die Gewichtsaktualisierung zu erzeugen.
    8. 8. System, umfassend:
      • einen oder mehrere Prozessoren, um Teile eines neuronalen Netzwerks separat parallel zueinander zu trainieren, und
      • einen oder mehrere Speicher zum Speichern des neuronalen Netzwerks.
    9. 9. System nach Ziffer 8, wobei das neuronale Netzwerk zumindest teilweise trainiert wird, durch:
      • Generieren einer Vielzahl von partiellen Gewichtsaktualisierungen parallel zueinander unter Verwendung des einen oder der mehreren Prozessoren; und
      • Kombinieren der Vielzahl von partiellen Gewichtsaktualisierungen, um eine Aktualisierung des Gewichtsgradienten zu erzeugen.
    10. 10. System nach Ziffer 9, wobei die Vielzahl von partiellen Gewichtsaktualisierungen parallel zueinander unter Verwendung einer Vielzahl von Worker-Threads erzeugt wird.
    11. 11. System nach Ziffer 9 oder 10, wobei das neuronale Netzwerk zumindest teilweise trainiert wird durch:
      • Vorwärtspropagieren einer Eingabe durch das neuronale Netzwerk, um eine Ausgabe zu erzeugen;
      • Bestimmen eines Fehlers basierend zumindest teilweise auf einer Differenz zwischen der Ausgabe und einem erwarteten Wert; und
      • Rückpropagieren des Fehlers, um einen Gradienten zu bestimmen, wobei die Vielzahl partieller Gewichtsaktualisierungen zumindest teilweise auf dem Gradienten basiert.
    12. 12. System nach einer der Ziffern 9-11, wobei die Vielzahl von partiellen Gewichtsaktualisierungen zumindest erzeugt wird durch:
      • Identifizieren einer Vielzahl von Teilmengen von Netzwerkknoten des neuronalen Netzwerks; und
      • Erzeugen einer partiellen Gewichtsaktualisierung für jede Teilmenge in der Vielzahl von Teilmengen.
    13. 13. System nach Ziffer 12, wobei die Vielzahl von Teilmengen nicht überlappende Teilmengen von Gewichten des neuronalen Netzwerks sind.
    14. 14. System nach Ziffer 12 oder 13, wobei:
      • eine individuelle Teilmenge der Vielzahl von Teilmengen eine Anzahl von Knotengewichten enthält; und
      • die Anzahl der Knotengewichte zumindest teilweise basierend auf einer Menge an Verarbeitungsleistung bestimmt wird, die einem Worker, der zur Verarbeitung der individuellen Teilmenge zugewiesen ist, im Verhältnis zu anderen Workern, die zur Verarbeitung anderer Teilmengen zugewiesen sind, zur Verfügung steht.
    15. 15. System nach einer der Ziffern 8-14, wobei:
      • das System einen Satz von Gradienten für jede Eingabe eines Satzes von Eingabewerten bestimmt; und
      • der Satz von Gradienten an jeden der einen oder mehreren Prozessoren verteilt wird.
    16. 16. Verfahren, umfassend ein Trainieren eines neuronalen Netzwerks, indem, zumindest teilweise, verschiedene Teile eines neuronalen Netzwerks separat und parallel unter Verwendung einer Vielzahl von Prozessoren trainiert werden.
    17. 17. Verfahren nach Ziffer 16, wobei:
      • das neuronale Netzwerk zumindest teilweise durch Verteilen von Gradienteninformationen an die Vielzahl von Workern trainiert wird,
      • die Worker verschiedene Teile einer Gewichtsaktualisierung parallel berechnen; und
      • die verschiedenen Teile aggregiert werden, um neue Gewichtswerte des neuronalen Netzwerks zu erzeugen.
    18. 18. Verfahren nach Ziffer 17, wobei das neuronale Netzwerk zumindest teilweise trainiert wird durch:
      • Vorwärtspropagieren einer Eingabe durch das neuronale Netzwerk, um eine Ausgabe zu erzeugen;
      • Bestimmen eines Fehlers, der zumindest teilweise auf der Ausgabe basiert; und
      • Bestimmen eines Gradienten durch zumindest Rückpropagieren des Fehlers, wobei die verschiedenen Teile der Gewichtsaktualisierungen zumindest teilweise auf dem Gradienten basieren.
    19. 19. Verfahren nach Ziffer 18, wobei:
      • der Gradient an jeden der Vielzahl von Workern verteilt wird, und
      • die Vielzahl von Workern die verschiedenen Teile der Gewichtsaktualisierung berechnet.
    20. 20. Verfahren nach einer der Ziffern 16-19, wobei jeder Worker der Vielzahl von Workern auf einem anderen Prozessor ausgeführt wird.
    21. 21. Verfahren nach einer der Ziffern 16-20, wobei jeder Worker der Vielzahl von Workern parallel auf einer Graphikverarbeitungseinheit ausgeführt wird.
    22. 22. Verfahren nach Ziffer 17, wobei eine Anzahl verschiedener Teile der Gewichtsaktualisierung mit einer Anzahl verfügbarer Prozessoren eines Rechnersystems übereinstimmt.
    23. 23. Verfahren nach einer der Ziffern 17-22, wobei die Gewichtsaktualisierung in im wesentlichen gleiche, sich nicht überlappende Gruppen von Knotengewichten unterteilt wird, um die verschiedenen Teile zu erzeugen.
    24. 24. Sprachverarbeitungssystem, umfassend ein neuronales Netzwerk, das eine digitale Repräsentation von Schall als Eingabe erhält und Elemente menschlicher Sprache identifiziert, wobei Teile des neuronalen Netzwerks trainiert werden, um menschliche Sprache separat und parallel durch eine Vielzahl von Prozessen zu erkennen.
    25. 25. Sprachverarbeitungssystem nach Ziffer 24, wobei das neuronale Netzwerk:
      • eine Vielzahl von Gewichtsaktualisierungen parallel generiert; und
      • die Vielzahl der Gewichtsaktualisierungen zu einer einzigen Gewichtsaktualisierung kombiniert.
    26. 26. Sprachverarbeitungssystem nach Ziffer 24 oder 25, wobei das Sprachverarbeitungssystem weiter einen oder mehrere Prozessoren und einen Speicher umfasst, um ausführbare Anweisungen zu speichern, die als Ergebnis der Ausführung durch den einen oder die mehreren Prozessoren das Sprachverarbeitungssystem veranlassen, zumindest zum:
      • Erhalten von Daten, die Audiosignale von einem Mikrofon darstellen;
      • Verarbeiten der Daten unter Verwendung des neuronalen Netzwerks, um ein in den Daten dargestelltes gesprochenes Wort zu identifizieren; und
      • Durchführen einer Aktion, die zumindest teilweise auf der Identität des gesprochenen Wortes basiert.
    27. 27. Sprachverarbeitungssystem nach Ziffer 26, wobei die Aktion eine Navigationsanforderung ist, die von einem Navigationssystem eines Fahrzeugs verarbeitet werden soll.
  • Die Verwendung der Begriffe „ein/eine/eines“ und „der/die/das“ und ähnlicher Bezeichnungen im Zusammenhang mit der Beschreibung offengelegter Ausführungsbeispiele (insbesondere im Zusammenhang mit den folgenden Ansprüchen) ist so auszulegen, dass sie sowohl die Einzahl als auch die Mehrzahl umfasst, sofern hier nicht anders angegeben oder durch den Kontext eindeutig widerlegt, und nicht als Definition eines Begriffs. Die Begriffe „umfassend“, „mit“, „einschließlich“ und „enthaltend“ sind, sofern nicht anders angegeben, als offene Begriffe zu verstehen (d.h. „einschließlich, aber nicht beschränkt auf“). Der Begriff „verbunden“ ist, wenn er unverändert bleibt und sich auf physikalische Verbindungen bezieht, als teilweise oder ganz in einem Bauteil enthalten, an ihm angebracht oder mit ihm verbunden zu verstehen, auch wenn etwas dazwischen liegt. Die Erwähnung von Wertebereichen soll lediglich als Abkürzungsmethode dienen, um sich individuell auf jeden einzelnen Wert zu beziehen, der in den Bereich fällt, sofern hier nichts anderes angegeben ist, und jeder einzelne Wert wird in die Spezifikation aufgenommen, als ob er hier einzeln aufgeführt wäre. Die Verwendung des Begriffs „Menge“ (z. B. „eine Menge von Gegenständen“) oder „Teilmenge“ ist, sofern nicht anders angegeben oder durch den Kontext widerlegt, als eine nicht leere Sammlung zu verstehen, die ein oder mehrere Elemente umfasst. Weiter, sofern nicht anders vermerkt oder durch den Kontext widerlegt, bezeichnet der Begriff „Teilmenge“ einer entsprechenden Menge nicht notwendigerweise eine echte Teilmenge der entsprechenden Menge, sondern Teilmenge und entsprechende Menge können gleich sein.
  • Konjunktivische Ausdrücke, wie z. B. Sätze der Form „mindestens eines von A, B und C“ oder „mindestens eines von A, B und C“, werden, sofern nicht ausdrücklich anders angegeben oder durch den Kontext eindeutig widerlegt, mit dem Kontext so verstanden, wie sie im Allgemeinen verwendet werden, um darzustellen, dass ein Element, ein Begriff usw, entweder A oder B oder C oder eine beliebige nicht leere Teilmenge der Menge von A und B und C sein kann. In dem anschaulichen Beispiel einer Menge mit drei Mitgliedern beziehen sich die konjunktiven Ausdrücke „mindestens eines von A, B und C“ und „mindestens eines von A, B und C“ auf eine der folgenden Mengen: {A}, {B}, {C}, {A, B}, {A, C}, {B, C}, {A, B, C}. Derartige konjunktivische Formulierungen sollen also nicht generell bedeuten, dass bei bestimmten Ausführungsbeispielen jeweils mindestens eines von A, mindestens eines von B und mindestens eines von C vorhanden sein müssen. Sofern nicht anders vermerkt oder durch den Kontext widerlegt, bezeichnet der Begriff „Vielzahl“ einen Zustand der Pluralität (z. B. „eine Vielzahl von Gegenständen“ bezeichnet mehrere Gegenstände). Die Anzahl der Gegenstände in einer Vielzahl beträgt mindestens zwei, kann aber auch mehr sein, wenn dies entweder ausdrücklich oder aus dem Kontext hervorgeht. Weiter bedeutet „basierend auf“, sofern nicht anders angegeben oder anderweitig aus dem Kontext klar, „zumindest teilweise basierend auf“ und nicht „ausschließlich basierend auf“.
  • Die Vorgänge der hierin beschriebenen Prozesse können in jedem geeigneten Auftrag ausgeführt werden, sofern hierin nicht anders angegeben oder anderweitig durch den Kontext eindeutig widersprochen wird. In mindestens einem Ausführungsbeispiel wird ein Prozess wie die hier beschriebenen Prozesse (oder Variationen und/oder Kombinationen davon) unter der Kontrolle eines oder mehrerer Rechnersysteme durchgeführt, die mit ausführbaren Befehlen konfiguriert sind und als Code (z. B. ausführbare Befehle, ein oder mehrere Computerprogramme oder eine oder mehrere Anwendungen) implementiert sind, die gemeinsam auf einem oder mehreren Prozessoren, durch Hardware oder Kombinationen davon ausgeführt werden. In mindestens einem Ausführungsbeispiel ist der Code auf einem computerlesbaren Speichermedium gespeichert, zum Beispiel in Form eines Computerprogramms, das eine Vielzahl von Anweisungen umfasst, die von einem oder mehreren Prozessoren ausgeführt werden können. In mindestens einem Ausführungsbeispiel handelt es sich bei einem computerlesbaren Speichermedium um ein nicht-transitorisches computerlesbares Speichermedium, das transitorische Signale (z. B. eine sich ausbreitende transiente elektrische oder elektromagnetische Übertragung) ausschließt, aber nicht-transitorische Datenspeicherschaltungen (z. B. Puffer, Cache und Warteschlangen) innerhalb von Transceivern für transitorische Signale enthält. In mindestens einem Ausführungsbeispiel ist Code (z. B. ausführbarer Code oder Quellcode) auf einem Satz von einem oder mehreren nichttransitorischen, computerlesbaren Speichermedien gespeichert, auf denen ausführbare Befehle (oder ein anderer Speicher zum Speichern ausführbarer Befehle) gespeichert sind, die, wenn sie von einem oder mehreren Prozessoren eines Rechnersystems ausgeführt werden (d. h. als Ergebnis der Ausführung), das Rechnersystem veranlassen, hierin beschriebene Operationen durchzuführen. In mindestens einem Ausführungsbeispiel umfasst ein Satz nicht-transitorischer, computerlesbarer Speichermedien mehrere nicht-transitorische, computerlesbare Speichermedien, wobei auf einem oder mehreren der individuellen nichttransitorischen Speichermedien mehrerer nicht-transitorischer, computerlesbarer Speichermedien der gesamte Code fehlt, während auf mehreren nicht-transitorischen, computerlesbaren Speichermedien gemeinsam der gesamte Code gespeichert ist. In mindestens einem Ausführungsbeispiel werden ausführbare Befehle so ausgeführt, dass verschiedene Befehle von verschiedenen Prozessoren ausgeführt werden - beispielsweise speichert ein nicht transitorisches computerlesbares Speichermedium Befehle und eine zentrale Verarbeitungseinheit („CPU“) führt einige der Befehle aus, während eine Grafikverarbeitungseinheit („GPU“) andere Befehle ausführt. In mindestens einem Ausführungsbeispiel haben verschiedene Komponenten eines Rechnersystems getrennte Prozessoren, und verschiedene Prozessoren führen verschiedene Teilmengen von Befehlen aus.
  • Dementsprechend sind Rechnersysteme in mindestens einem Ausführungsbeispiel so konfiguriert, dass sie einen oder mehrere Dienste implementieren, die einzeln oder gemeinsam Operationen der hierin beschriebenen Prozesse durchführen, und solche Rechnersysteme sind mit anwendbarer Hardware und/oder Software konfiguriert, die die Durchführung der Operationen ermöglichen. Ferner ist ein Computersystem, das mindestens ein Ausführungsbeispiel der vorliegenden Offenbarung implementiert, ein einzelnes Gerät und in einer weiteren Ausführungsform ein verteiltes Computersystem, das mehrere Geräte umfasst, die unterschiedlich arbeiten, so dass das verteilte Computersystem die hierin beschriebenen Operationen durchführt und ein einzelnes Gerät nicht alle Operationen durchführt.
  • Die Verwendung aller hier bereitgestellten Ausführungsbeispiele oder beispielhaften Ausdrücke (z.B. „wie“) dient lediglich der besseren Veranschaulichung von Ausführungsbeispielen der Offenbarung und stellt keine Einschränkung des Umfangs der Offenbarung dar, sofern nicht anderweitig beansprucht. Keine Formulierung in der Beschreibung sollte so ausgelegt werden, dass sie ein nicht beanspruchtes Element als wesentlich für die Praxis der Offenbarung bezeichnet.
  • Alle Referenzen, einschließlich Veröffentlichungen, Patentanmeldungen und Patente, die hier zitiert werden, werden hiermit durch Bezugnahme in demselben Umfang einbezogen, als ob jede Referenz individuell und ausdrücklich als durch Bezugnahme einbezogen angegeben und hier in ihrer Gesamtheit dargelegt würde.
  • In der Beschreibung und den Ansprüchen können die Begriffe „gekoppelt“ und „verbunden“ sowie deren Ableitungen verwendet werden. Es sollte verstanden werden, dass diese Begriffe nicht als Synonyme füreinander zu verstehen sind. Vielmehr kann in bestimmten Beispielen „verbunden“ oder „gekoppelt“ verwendet werden, um anzuzeigen, dass zwei oder mehr Elemente in direktem oder indirektem physischen oder elektrischen Kontakt zueinander stehen. „Gekoppelt“ kann auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt miteinander stehen, aber dennoch zusammenarbeiten oder miteinander interagieren.
  • Sofern nicht ausdrücklich etwas anderes angegeben ist, beziehen sich Begriffe wie „Verarbeitung“, „Rechnen“, „Berechnen“, „Bestimmen“ oder dergleichen in der gesamten Spezifikation auf Aktionen und/oder Prozesse eines Computers oder eines Computersystems oder eines ähnlichen elektronischen Geräts, die Daten, die als physikalische, z. B. elektronische, Anzahlen in den Registern und/oder Speichern des Rechnersystems dargestellt werden, manipulieren und/oder in andere Daten umwandeln, die in ähnlicher Weise als physikalische Anzahlen in den Speichern, Registern oder anderen derartigen Informationsspeicher-, Übertragungs- oder Anzeigegeräten des Rechnersystems dargestellt werden.
  • In ähnlicher Weise kann sich der Begriff „Prozessor“ auf ein Gerät oder einen Teil eines Geräts beziehen, das elektronische Daten aus Registern und/oder Speichern verarbeitet und diese elektronischen Daten in andere elektronische Daten umwandelt, die in Registern und/oder Speichern gespeichert werden können. Als nicht einschränkende Beispiele kann der „Prozessor“ eine CPU oder eine GPU sein. Eine „Computerplattform“ kann einen oder mehrere Prozessoren umfassen. Der hier verwendete Begriff „Software“-Prozesse kann z. B. Software- und/oder Hardware-Einheiten umfassen, die im Laufe der Zeit Arbeit verrichten, wie z. B. Aufgaben, Threads und intelligente Agenten. Jeder Prozess kann sich auch auf mehrere Prozesse beziehen, um Anweisungen nacheinander oder parallel, kontinuierlich oder intermittierend auszuführen. Die Begriffe „System“ und „Methode“ werden hier austauschbar verwendet, insofern ein System eine oder mehrere Methoden umfassen kann und Methoden als System betrachtet werden können.
  • Im vorliegenden Dokument kann auf das Gewinnen, Erfassen, Empfangen oder Eingeben von analogen oder digitalen Daten in ein Teilsystem, ein Rechnersystem oder eine computerimplementierte Maschine Bezug genommen werden. Der Prozess des Erhaltens, Erfassens, Empfangens oder Eingebens von analogen und digitalen Daten kann auf verschiedene Weise durchgeführt werden, z. B. durch Empfangen von Daten als Parameter eines Funktionsaufrufs oder eines Aufrufs einer Anwendungsprogrammierschnittstelle. In einigen Implementierungen kann der Prozess des Erhaltens, Erfassens, Empfangens oder Eingebens von analogen oder digitalen Daten durch die Übertragung von Daten über eine serielle oder parallele Schnittstelle erfolgen. In einer anderen Implementierung kann der Prozess des Erhaltens, Erfassens, Empfangens oder Eingebens analoger oder digitaler Daten durch die Übertragung von Daten über ein Rechner-Netzwerk von der bereitstellenden zu der erwerbenden Einheit erfolgen. Es kann auch auf das Bereitstellen, Ausgeben, Übertragen, Senden oder Präsentieren analoger oder digitaler Daten Bezug genommen werden. In verschiedenen Beispielen kann der Prozess des Bereitstellens, Ausgebens, Übertragens, Sendens oder Darstellens analoger oder digitaler Daten durch die Übertragung von Daten als Eingabe- oder Ausgabeparameter eines Funktionsaufrufs, eines Parameters einer Anwendungsprogrammierschnittstelle oder eines Interprozess-Kommunikationsmechanismus erfolgen.
  • Obwohl die obige Diskussion Beispielimplementierungen der beschriebenen Techniken darlegt, können auch andere Architekturen verwendet werden, um die beschriebene Funktionalität zu implementieren, und sie sollen im Rahmen dieser Offenbarung liegen. Darüber hinaus, obwohl spezifische Verteilungen von Verantwortlichkeiten oben zu Diskussionszwecken definiert sind, könnten verschiedene Funktionen und Verantwortlichkeiten auf unterschiedliche Weise verteilt und aufgeteilt werden, abhängig von den Umständen.
  • Obwohl der Gegenstand in einer Sprache beschrieben wurde, die sich auf strukturelle Merkmale und/oder methodische Handlungen bezieht, ist es zu verstehen, dass der in den beigefügten Ansprüchen beanspruchte Gegenstand nicht notwendigerweise auf die beschriebenen spezifischen Merkmale oder Handlungen beschränkt ist. Vielmehr werden die spezifischen Merkmale und Handlungen als beispielhafte Formen der Implementierung der Ansprüche offengelegt.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 16/675069 [0001]

Claims (27)

  1. Prozessor, umfassend: zwei oder mehr Verarbeitungskerne, um Teile eines neuronalen Netzwerks separat und parallel zu trainieren.
  2. Prozessor nach Anspruch 1, wobei die zwei oder mehr Verarbeitungskerne einen oder mehrere Gradienten auf verschiedene Sätze von Knoten des neuronalen Netzwerks anwenden.
  3. Prozessor nach Anspruch 1, wobei das neuronale Netzwerk zumindest teilweise trainiert wird, indem eine Gewichtsaktualisierung generiert wird, wobei eine Vielzahl von partiellen Gewichtsaktualisierungen kombiniert wird, die von den zwei oder mehr Verarbeitungskernen parallel erzeugt werden.
  4. Prozessor nach Anspruch 1, wobei der Prozessor weiter eine Gewichtsaktualisierungsoperation in eine Vielzahl von partiellen Gewichtsaktualisierungsoperationen aufteilt und individuelle partielle Gewichtsaktualisierungsoperationen auf die zwei oder mehr Verarbeitungskerne verteilt.
  5. Prozessor nach Anspruch 4, wobei die partiellen Gewichtsaktualisierungsoperationen durch ein Aufteilen einer initialen Gewichts- und Gradientenaktualisierung in eine Vielzahl von unterschiedlichen Teilen erzeugt werden.
  6. Prozessor nach Anspruch 4, wobei jede partielle Gewichtsaktualisierung unter Verwendung eines unterschiedlichen Threads ausgeführt wird.
  7. Prozessor nach Anspruch 4, wobei der Prozessor weiterhin die partiellen Gewichtsaktualisierungen zusammenführt, um die Gewichtsaktualisierung zu erzeugen.
  8. System, umfassend: einen oder mehrere Prozessoren, um Teile eines neuronalen Netzwerks separat parallel zu trainieren; und einen oder mehrere Speicher zum Speichern des neuronalen Netzwerks.
  9. System nach Anspruch 8, wobei das neuronale Netzwerk zumindest teilweise trainiert wird, durch: Generieren einer Vielzahl von partiellen Gewichtsaktualisierungen parallel zueinander unter Verwendung des einen oder der mehreren Prozessoren; und Kombinieren der Vielzahl von partiellen Gewichtsaktualisierungen, um eine Gewichtsgradientenaktualisierung zu erzeugen.
  10. System nach Anspruch 9, wobei die Vielzahl von partiellen Gewichtsaktualisierungen parallel unter Verwendung einer Vielzahl von Worker-Threads erzeugt wird.
  11. System nach Anspruch 9, wobei das neuronale Netzwerk zumindest teilweise trainiert wird durch: Vorwärtspropagieren einer Eingabe durch das neuronale Netzwerk, um eine Ausgabe zu erzeugen; Bestimmen eines Fehlers basierend zumindest teilweise auf einer Differenz zwischen der Ausgabe und einem erwarteten Wert; und Rückpropagieren des Fehlers, um einen Gradienten zu bestimmen, wobei die Vielzahl partieller Gewichtsaktualisierungen zumindest teilweise auf dem Gradienten basiert.
  12. System nach Anspruch 9, wobei die Vielzahl von partiellen Gewichtsaktualisierungen zumindest erzeugt wird durch: Identifizieren einer Vielzahl von Teilmengen von Netzwerkknoten des neuronalen Netzwerks; und Erzeugen einer partiellen Gewichtsaktualisierung für jede Teilmenge in der Vielzahl von Teilmengen.
  13. System nach Anspruch 12, wobei die Vielzahl der Teilmengen nicht überlappende Teilmengen von Gewichten des neuronalen Netzwerks sind.
  14. System nach Anspruch 12, wobei: eine individuelle Teilmenge der Vielzahl von Teilmengen eine Anzahl von Knotengewichten enthält; und die Anzahl der Knotengewichte zumindest teilweise basierend auf einer Menge an Verarbeitungsleistung bestimmt wird, die einem Worker, der mit der Verarbeitung der individuellen Teilmenge beauftragt ist, relativ zu anderen Workern, die mit der Verarbeitung anderer Teilmengen beauftragt sind, zur Verfügung steht.
  15. System nach Anspruch 8, wobei: das System einen Satz von Gradienten für jede Eingabe eines Satzes von Eingabewerten bestimmt; und der Satz von Gradienten an jeden der einen oder mehreren Prozessoren verteilt wird.
  16. Verfahren, das ein Trainieren eines neuronalen Netzwerks umfasst, indem zumindest teilweise verschiedene Teile eines neuronalen Netzwerks separat und parallel unter Verwendung einer Vielzahl von Prozessoren trainiert werden.
  17. Verfahren nach Anspruch 16, wobei: das neuronale Netzwerk zumindest teilweise durch Verteilen von Gradienteninformationen an die Vielzahl von Workern trainiert wird, die Worker verschiedene Teile einer Gewichtsaktualisierung parallel berechnen; und die verschiedenen Teile aggregiert werden, um neue Gewichtswerte des neuronalen Netzwerks zu erzeugen.
  18. Verfahren nach Anspruch 17, wobei das neuronale Netzwerk zumindest teilweise trainiert wird durch: Vorwärtspropagieren einer Eingabe durch das neuronale Netzwerk, um eine Ausgabe zu erzeugen; Bestimmen eines Fehlers, der zumindest teilweise auf der Ausgabe basiert; und Bestimmen eines Gradienten zumindest durch Rückpropagieren des Fehlers, wobei die verschiedenen Teile der Gewichtsaktualisierungen zumindest teilweise auf dem Gradienten basieren.
  19. Verfahren nach Anspruch 18, wobei: der Gradient an jeden der Vielzahl von Workern verteilt wird, und die Vielzahl von Workern die verschiedenen Teile der Gewichtsaktualisierung berechnet.
  20. Verfahren nach Anspruch 16, wobei jeder Worker der Vielzahl von Workern auf einem anderen Prozessor ausgeführt wird.
  21. Verfahren nach Anspruch 16, bei dem jeder Worker der Vielzahl von Workern parallel auf einer Grafikverarbeitungseinheit ausgeführt wird.
  22. Verfahren nach Anspruch 17, wobei eine Anzahl verschiedener Teile der Gewichtsaktualisierung mit einer Anzahl verfügbarer Prozessoren eines Rechnersystems übereinstimmt.
  23. Verfahren nach Anspruch 17, bei dem die Gewichtsaktualisierung in im Wesentlichen gleiche, sich nicht überlappende Gruppen von Knotengewichten unterteilt wird, um die verschiedenen Teile zu erzeugen.
  24. Sprachverarbeitungssystem, umfassend ein neuronales Netzwerk, das eine digitale Repräsentation von Schall als Eingabe empfängt und Elemente menschlicher Sprache identifiziert, wobei Teile des neuronalen Netzwerks separat und parallel durch eine Vielzahl von Prozessen trainiert werden, um menschliche Sprache zu erkennen.
  25. Sprachverarbeitungssystem nach Anspruch 24, wobei das neuronale Netzwerk: eine Vielzahl von Gewichtsaktualisierungen parallel zueinander generiert; und die Vielzahl der Gewichtsaktualisierungen zu einer einzigen Gewichtsaktualisierung kombiniert.
  26. Sprachverarbeitungssystem nach Anspruch 24, wobei das Sprachverarbeitungssystem weiter einen oder mehrere Prozessoren und einen Speicher umfasst, um ausführbare Anweisungen zu speichern, die als Ergebnis der Ausführung durch den einen oder die mehreren Prozessoren das Sprachverarbeitungssystem zumindest veranlassen, zum: Erhalten von Daten, die Audiosignale von einem Mikrofon repräsentieren; Verarbeiten der Daten unter Verwendung des neuronalen Netzwerks, um ein in den Daten repräsentiertes gesprochenes Wort zu identifizieren; und Durchführen einer Aktion, die zumindest teilweise auf der Identität des gesprochenen Wortes basiert.
  27. Sprachverarbeitungssystem nach Anspruch 26, wobei die Aktion eine Navigationsanforderung ist, die von einem Navigationssystem eines Fahrzeugs verarbeitet werden soll.
DE112020005464.0T 2019-11-05 2020-10-30 Verteilte gewichtsaktualisierung für backpropagation eines neuronalen netzwerks Pending DE112020005464T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/675,069 US20210133583A1 (en) 2019-11-05 2019-11-05 Distributed weight update for backpropagation of a neural network
US16/675,069 2019-11-05
PCT/US2020/058424 WO2021091798A1 (en) 2019-11-05 2020-10-30 Distributed weight update for backpropagation of a neural network

Publications (1)

Publication Number Publication Date
DE112020005464T5 true DE112020005464T5 (de) 2022-09-29

Family

ID=73544392

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112020005464.0T Pending DE112020005464T5 (de) 2019-11-05 2020-10-30 Verteilte gewichtsaktualisierung für backpropagation eines neuronalen netzwerks

Country Status (8)

Country Link
US (1) US20210133583A1 (de)
JP (1) JP2023500065A (de)
KR (1) KR20220074970A (de)
CN (1) CN114631102A (de)
AU (1) AU2020377892A1 (de)
DE (1) DE112020005464T5 (de)
GB (1) GB2604262A (de)
WO (1) WO2021091798A1 (de)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018083667A1 (en) * 2016-11-04 2018-05-11 Deepmind Technologies Limited Reinforcement learning systems
US20210133571A1 (en) * 2019-11-05 2021-05-06 California Institute Of Technology Systems and Methods for Training Neural Networks
US20210295168A1 (en) * 2020-03-23 2021-09-23 Amazon Technologies, Inc. Gradient compression for distributed training
US11681905B2 (en) * 2020-03-23 2023-06-20 Microsoft Technology Licensing, Llc Hardware-assisted gradient optimization using streamed gradients
GB2593756B (en) * 2020-04-02 2022-03-30 Graphcore Ltd Control of data transfer between processing nodes
US11669473B2 (en) * 2020-06-26 2023-06-06 Advanced Micro Devices, Inc. Allreduce enhanced direct memory access functionality
CN112463056B (zh) * 2020-11-28 2023-06-09 苏州浪潮智能科技有限公司 一种多节点分布式训练方法、装置、设备及可读介质
US20220320042A1 (en) * 2021-03-30 2022-10-06 Advanced Micro Devices, Inc. Die stacking for modular parallel processors
WO2023097452A1 (en) * 2021-11-30 2023-06-08 Nokia Shanghai Bell Co., Ltd. Methods, apparatuses, and computer readable media for radio resource allocation
CN113918351B (zh) * 2021-12-08 2022-03-11 之江实验室 深度学习框架与ai加速卡片内分布式训练适配方法和装置
CN114356818A (zh) * 2022-03-17 2022-04-15 苏州浪潮智能科技有限公司 一种多通道数据传输方法、装置和存储介质
WO2024077370A1 (en) * 2022-10-11 2024-04-18 Huawei Technologies Canada Co., Ltd. System and methods for artificial intelligence inference

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9235799B2 (en) * 2011-11-26 2016-01-12 Microsoft Technology Licensing, Llc Discriminative pretraining of deep neural networks
US10720151B2 (en) * 2018-07-27 2020-07-21 Deepgram, Inc. End-to-end neural networks for speech recognition and classification
US11244242B2 (en) * 2018-09-07 2022-02-08 Intel Corporation Technologies for distributing gradient descent computation in a heterogeneous multi-access edge computing (MEC) networks
US11538463B2 (en) * 2019-04-12 2022-12-27 Adobe Inc. Customizable speech recognition system

Also Published As

Publication number Publication date
KR20220074970A (ko) 2022-06-03
CN114631102A (zh) 2022-06-14
GB2604262A (en) 2022-08-31
US20210133583A1 (en) 2021-05-06
GB202205672D0 (en) 2022-06-01
WO2021091798A1 (en) 2021-05-14
JP2023500065A (ja) 2023-01-04
AU2020377892A1 (en) 2022-06-23

Similar Documents

Publication Publication Date Title
DE112020004277T5 (de) Auf maschinellem Lernen basierendes Architektur-Suchverfahren für ein neuronales Netzwerk
DE112020004302T5 (de) Trainingsstrategiesuche unter verwendung von verstärkendem lernen
DE112020005696T5 (de) Training und ableiten unter verwendung eines neuronalen netzwerkes zum vorhersagen der ausrichtung von objekten in bildern
DE112020005509T5 (de) Prozessor und system zum identifizieren von out-of-distribution- eingabedaten in neuronalen netzwerken
DE112020005464T5 (de) Verteilte gewichtsaktualisierung für backpropagation eines neuronalen netzwerks
DE112020005156T5 (de) Verstärkendes Lernen von taktilen Greifstrategien
DE112020003832T5 (de) Neuronale netzwerke zur bildregistrierung und bildsegmentierung, die unter verwendung eines registrierungssimulators trainiert werden
DE112020003833T5 (de) Durchführen von Matrixoperationen in neuronalen Netzen
DE112020004192T5 (de) Prozessor und system, um tensoroperationen in maschinelles lernen zu konvertieren
DE112020005206T5 (de) Bestimmen der Objektorientierung aus einem Bild mit Maschinenlernen
DE102019122790A1 (de) Robotersteuerungssystem
DE112020006144T5 (de) Mastertransformationsarchitektur für Deep-Learning
DE102021108042A1 (de) Verbessertes medienengagement durch tiefes lernen
US20220398456A1 (en) Identification of multi-scale features using a neural network
DE102021118885B4 (de) Maschinelles lernen zur steuerung von objektübergaben
DE112020005476T5 (de) Neuronales netz zur bildausrichtung
DE112021000351T5 (de) Maschinenlernbasiertes objekterfassungssystem
DE112020004196T5 (de) Durchführen von zyklischen Redundanzprüfungen unter Verwendung paralleler Rechenarchitekturen
DE112020005364T5 (de) Api für rekurrente neuronale netze
DE112020004191T5 (de) Durchführen des verschlüsselns und/oder entschlüsselns auf parallelenrechenarchitekturen
DE112020004082T5 (de) Prozessor und system zum manipulieren von gleitkomma- und ganzzahlwerten in berechnungen
DE102021100919A1 (de) Bestimmen einer 3d-handpose aus einem 2d-bild unter verwenden von maschinellem lernen
DE112020006189T5 (de) Tiefenschätzung unter verwendung eines neuronalen netzes
DE102022110000A1 (de) Dynamische gewichtsaktualisierungen für neuronale netzwerke
DE102022100524A1 (de) Paralleles durchführen von nicht-maxima-unterdrückung

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: BARDEHLE PAGENBERG PARTNERSCHAFT MBB PATENTANW, DE