DE112020003833T5 - Durchführen von Matrixoperationen in neuronalen Netzen - Google Patents

Durchführen von Matrixoperationen in neuronalen Netzen Download PDF

Info

Publication number
DE112020003833T5
DE112020003833T5 DE112020003833.5T DE112020003833T DE112020003833T5 DE 112020003833 T5 DE112020003833 T5 DE 112020003833T5 DE 112020003833 T DE112020003833 T DE 112020003833T DE 112020003833 T5 DE112020003833 T5 DE 112020003833T5
Authority
DE
Germany
Prior art keywords
operations
data
processor
matrix
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112020003833.5T
Other languages
English (en)
Inventor
David Eldon Tanner
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 DE112020003833T5 publication Critical patent/DE112020003833T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/457Communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • 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/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Artificial Intelligence (AREA)
  • Databases & Information Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Algebra (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)

Abstract

Vorrichtungen, Systeme und Techniken zum Erkennen einer Art und Weise, in der die Ausführung von Matrix-Operationen optimiert werden kann. In mindestens einer Ausführungsform erkennt ein Rechensystem eine Matrix Operation und berechnet Daten für die Matrix Operation, bevor die Matrix-Operation abgerufen wird.

Description

  • QUERVERWEIS AUF VERWANDTE ANMELDUNGEN
  • Diese Anwendung beansprucht die Priorität der US-Patentanmeldung Nr. 16/539,989 mit dem Titel „PERFORMING MATRIX OPERATIONS IN NEURAL NETWORKS“, die am 13. August 2019 eingereicht wurde und deren gesamter Inhalt durch Bezugnahme in vollem Umfang und für alle Zwecke hierin aufgenommen ist.
  • TECHNISCHES GEBIET
  • Ein Prozessor zum Erzeugen von maschinenlesbaren, ausführbaren Anweisungen zum Durchführen von Operationen im Zusammenhang mit der Matrixmultiplikation, in mindestens einer Ausführungsform. In mindestens einer Ausführungsform erkennt ein Prozessor einen allgemeinen Vorgang der Matrix-Matrix-Multiplikation (general matrix-matrix multiplication - GEMM) oder einen GEMM-ähnlichen Vorgang und bestimmt die Art und Weise, in der Daten für den Vorgang geladen werden sollen.
  • ALLGEMEINER STAND DER TECHNIK
  • Es kann mehrere Kombinationen von maschinenlesbaren ausführbaren Anweisungen geben, die ein Ergebnis erzeugen können. Einige Befehlsfolgen können ein Ergebnis effizienter erzeugen als andere. Die Menge an Speicher, Zeit oder Rechenressourcen, die zum Generieren eines Ergebnisses verwendet werden, kann verbessert werden.
  • Figurenliste
    • 1 veranschaulicht eine Rechenumgebung zur Erkennung von Matrixoperationen und zur Optimierung der Erzeugung von ausführbarem Code gemäß mindestens einer Ausführungsform;
    • 2 ist ein Diagramm, das eine allgemeine Matrix-Matrix-zu-Matrix-Multiplikation (GEMM) gemäß mindestens einer Ausführungsform veranschaulicht;
    • 3 veranschaulicht ein Diagramm einer Datenstruktur gemäß mindestens einer Ausführungsform;
    • 4 veranschaulicht ein Diagramm, das Techniken zur Erkennung von GEMM und GEMM-ähnlichen Operationen gemäß mindestens einer Ausführungsform beschreibt;
    • 5 veranschaulicht ein Diagramm, das Techniken zur Erkennung von GEMM und GEMM-ähnlichen Operationen gemäß mindestens einer Ausführungsform beschreibt;
    • 6 veranschaulicht ein Diagramm, das Techniken zur Erkennung von GEMM und GEMM-ähnlichen Operationen gemäß mindestens einer Ausführungsform beschreibt;
    • 7 veranschaulicht ein Diagramm, das Techniken zur Erkennung von GEMM und GEMM-ähnlichen Operationen gemäß mindestens einer Ausführungsform beschreibt;
    • 8 zeigt ein anschauliches Beispiel für einen Prozess zur Erkennung und Optimierung von Matrixoperationen gemäß mindestens einer Ausführungsform;
    • 9 zeigt ein anschauliches Beispiel für einen Prozess zur Erkennung und Optimierung von Matrixoperationen gemäß mindestens einer Ausführungsform;
    • 10A veranschaulicht Inferenz- und/oder Trainingslogik gemäß mindestens einer Ausführungsform;
    • 10B veranschaulicht Inferenz- und/oder Trainingslogik gemäß mindestens einer Ausführungsform;
    • 11 veranschaulicht das Training und den Einsatz eines neuronalen Netzes gemäß mindestens einer Ausführungsform;
    • 12 veranschaulicht ein beispielhaftes Rechenzentrumssystem gemäß mindestens einer Ausführungsform;
    • 13A veranschaulicht ein beispielhaftes autonomes Fahrzeug gemäß mindestens einer Ausführungsform;
    • 13B veranschaulicht ein Beispiel für Kamerastandorte und Sichtfelder für das autonome Fahrzeug aus 13A gemäß mindestens einer Ausführungsform;
    • 13C ist ein Blockdiagramm, das eine beispielhafte Systemarchitektur für das autonome Fahrzeug aus 13A veranschaulicht, gemäß mindestens einer Ausführungsform;
    • 13D ist ein Diagramm, das ein System zur Kommunikation zwischen cloudbasierten Server(n) und dem autonomen Fahrzeug aus 13A veranschaulicht, gemäß mindestens einer Ausführungsform;
    • 14 ist ein Blockdiagramm, das ein Computersystem veranschaulicht, gemäß mindestens einer Ausführungsform;
    • 15 ist ein Blockdiagramm, das ein Computersystem veranschaulicht, gemäß mindestens einer Ausführungsform;
    • 16 veranschaulicht ein Computersystem gemäß mindestens einer Ausführungsform;
    • 17 veranschaulicht ein Computersystem gemäß mindestens einer Ausführungsform;
    • 18A veranschaulicht ein Computersystem gemäß mindestens einer Ausführungsform;
    • 18B veranschaulicht ein Computersystem gemäß mindestens einer Ausführungsform;
    • 18C veranschaulicht ein Computersystem gemäß mindestens einer Ausführungsform;
    • 18D veranschaulicht ein Computersystem gemäß mindestens einer Ausführungsform;
    • 18E und 18F veranschaulichen ein gemeinsam genutztes Programmiermodell gemäß mindestens einer Ausführungsform;
    • 19 veranschaulicht beispielhafte integrierte Schaltungen und damit assoziierte Grafikprozessoren gemäß mindestens einer Ausführungsform;
    • 20A und 20B veranschaulichen beispielhafte integrierte Schaltungen und zugehörige Grafikprozessoren gemäß mindestens einer Ausführungsform;
    • 21A und 21B veranschaulichen zusätzliche beispielhafte Grafikprozessorlogik gemäß mindestens einer Ausführungsform;
    • 22 veranschaulicht ein Computersystem gemäß mindestens einer Ausführungsform;
    • 23A veranschaulicht einen Parallelprozessor gemäß mindestens einer Ausführungsform;
    • 23B veranschaulicht eine Partitionseinheit gemäß mindestens einer Ausführungsform;
    • 23C veranschaulicht einen Verarbeitungscluster gemäß mindestens einer Ausführungsform;
    • 23D veranschaulicht einen Grafik-Multiprozessor gemäß mindestens einer Ausführungsform;
    • 24 veranschaulicht ein System mit mehreren Grafikverarbeitungseinheiten (graphics processing unit - GPU) gemäß mindestens einer Ausführungsform;
    • 25 veranschaulicht einen Grafikprozessor gemäß mindestens einer Ausführungsform;
    • 26 ist ein Blockdiagramm, das eine Prozessor-Mikroarchitektur für einen Prozessor veranschaulicht, gemäß mindestens einer Ausführungsform;
    • 27 veranschaulicht einen Deep-Learning-Anwendungsprozessor gemäß mindestens einer Ausführungsform;
    • 28 ist ein Blockdiagramm, das einen beispielhaften neuromorphen Prozessor veranschaulicht, gemäß mindestens einer Ausführungsform;
    • 29 veranschaulicht mindestens Abschnitte eines Grafikprozessors gemäß einer oder mehreren Ausführungsformen;
    • 30 veranschaulicht mindestens Abschnitte eines Grafikprozessors gemäß einer oder mehreren Ausführungsformen;
    • 31 veranschaulicht mindestens Abschnitte eines Grafikprozessors gemäß einer oder mehreren Ausführungsformen;
    • 32 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine 3210 eines Grafikprozessors gemäß mindestens einer Ausführungsform.
    • 33 ist ein Blockdiagramm von mindestens Abschnitten eines Grafikprozessorkerns gemäß mindestens einer Ausführungsform;
    • 34A-34B veranschaulichen Thread-Ausführungslogik 3400, die ein Array von Verarbeitungselementen eines Grafikprozessorkerns beinhaltet, gemäß mindestens einer Ausführungsform.
    • 35 veranschaulicht eine Parallelverarbeitungseinheit (parallel processing unit - „PPU“) gemäß mindestens einer Ausführungsform;
    • 36 veranschaulicht einen Universalverarbeitungscluster (general processing cluster - „GPC“) gemäß mindestens einer Ausführungsform;
    • 37 veranschaulicht eine Speicherpartitionseinheit einer Parallelverarbeitungseinheit („PPU“) gemäß mindestens einer Ausführungsform; und
    • 38 veranschaulicht einen Streaming-Multiprozessor gemäß mindestens einer Ausführungsform.
  • DETAILLIERTE BESCHREIBUNG
  • In mindestens einer Ausführungsform erhält ein Compiler den Quellcode, erkennt allgemeine Matrix-Matrix-Multiplikation (GEMM) Operationen und GEMM-ähnliche Operationen und erzeugt optimierten maschinenlesbaren, ausführbaren Code. In mindestens einer Ausführungsform generiert ein Compiler optimierten maschinenlesbaren ausführbaren Code basierend auf Strukturinformationen von GEMM oder GEMM-ähnlichen Operationen. In mindestens einer Ausführungsform reduzieren hierin beschriebene Techniken die Speichernutzung, bewirken, dass ein oder mehrere Prozessoren effizienter ausgeführt werden, verbessern die Parallelisierung von Computerprogrammen und Kombinationen davon. In mindestens einer Ausführungsform ermöglichen hierin beschriebene Techniken eine effizientere Zuordnung von Registern.
  • In mindestens einer Ausführungsform wird Quellcode kompiliert, der eine oder mehrere Matrixoperationen umfasst, wobei sich eine Matrixoperation auf einen Vorgang bezieht, der eine innere Reihe von äußeren Produkten beinhaltet, wie z. B. die allgemeine Matrix-Matrix-Multiplikation (GEMM), die Faltung (convolution - CONV) und weitere GEMM-ähnliche Operationen. Beispiele für GEMM-ähnliche Operationen werden an anderer Stelle ausführlicher beschrieben, z. B. im Zusammenhang mit 1 unten. Gemäß mindestens einer Ausführungsform erkennt ein Compiler, der Quellcode kompiliert, eine GEMM-ähnliche Operation und bestimmt Strukturinformationen, die verwendet werden, um eine Art und Weise zu bestimmen, in der Abschnitte von Daten einer GEMM- oder GEMM-ähnlichen Operation geladen werden und entsprechend maschinenlesbaren ausführbaren Code erzeugen.
  • In mindestens einer Ausführungsform durchläuft ein Compiler oder ein anderer geeigneter Code, der maschinenlesbaren, ausführbaren Code erzeugt, alle Anweisungen in einer Quelle oder einem Abschnitt davon in einer Schleife und sucht nach Multiplikations-Additions(multiply add - MAD)operationen. In mindestens einer Ausführungsform sind die MAD-Operationen Unteroperationen eines GEMM oder einer GEMM-ähnlichen Operation. In mindestens einer Ausführungsform beinhaltet eine MAD-Operation vier Operanden A, B, C, D. In mindestens einer Ausführungsform werden die Operanden auf folgende Weise beschrieben: D ←A*B+C. In mindestens einer Ausführungsform akkumuliert eine Variable D eine Summe von Addend C und ein Produkt von A und B. In mindestens einer Ausführungsform werden die Operanden A, B, C und D und Ladeanweisungen, die Daten für A und B erhalten, in einer Datenstruktur wie einer Liste oder einer anderen geeigneten Datenstruktur gespeichert. In mindestens einer Ausführungsform prüft ein Compiler, ob die Operanden A und B, die zusammen multipliziert werden, als Optimierungsvoraussetzung aus dem gemeinsamen Speicher geladen werden sollen. In mindestens einer Ausführungsform können die miteinander zu multiplizierenden Operanden aus dem gemeinsamen Speicher, dem globalen Speicher usw. geladen werden.
  • In mindestens einer Ausführungsform erkennt ein Compiler, ein Teilsystem davon oder ein anderes geeignetes Hardware- und/oder Softwaresystem äußere Produkte aus einer Liste von MAD-Operationen, wie sie oben beschrieben wurden. In mindestens einer Ausführungsform wird eine erste MAD-Operation einer Liste verwendet, um ein neues äußeres Produkt durch Laden (outer product by load - OPBL) zu beginnen, um für eine erste MAD-Operation MAD1 zu identifizieren: einen ersten Operanden OpdA1 und einen zweiten Operanden OpdB1 sowie jeweils eine erste Ladeanweisung LoadA1 und eine zweite Ladeoperation LoadB1. Nach dem Laden einer ersten MAD-Operation MAD1 kann eine zweite MAD-Operation MAD2 aus einer Liste von MAD-Operationen erhalten werden, um zu überprüfen, ob ein Operand von MAD1 und MAD2 übereinstimmt, was bedeutet, dass diese MAD-Operationen zum selben äußeren Produkt gehören. In mindestens einer Ausführungsform werden MAD-Operationen in einer Schleife miteinander verglichen, und wenn Übereinstimmungen gefunden werden, werden sie zu einer OPBL-Liste hinzugefügt, bis keine Übereinstimmungen mehr gefunden werden, was das Ende eines äußeren Produkts durch Laden anzeigt, und ein weiteres äußeres Produkt durch Laden kann instanziiert und beginnend mit der nächsten MAD-Operation der MAD-Operationsliste gefüllt werden, um weitere Anweisungen zu finden, die sich Operanden teilen. In mindestens einer Ausführungsform ist, wenn das Ende der Liste erreicht ist, die gesamte Struktur gefüllt. In mindestens einer Ausführungsform stehen 64 Instruktionen für ein äußeres Produkt und die restlichen Instruktionen werden in andere äußere Produkte gefüllt. In mindestens einer Ausführungsform weist ein GEMM 8 äußere Produkte auf, die jeweils 64 Anweisungen aufweisen (insgesamt 512 MAD-Operationen).
  • In mindestens einer Ausführungsform wird eine Liste von MAD-Operationen in einer Schleife geparst, um MAD-Abstammungen zu bestimmen. In mindestens einer Ausführungsform wird eine Ausgabe einer ersten MAD als Eingabe für eine zweite MAD (z. B. C2=D1) erkannt, wie im Folgenden dargestellt: D 1 = A 1 B 1 + C 1
    Figure DE112020003833T5_0001
    D 2 = A 2 B 2 + C 2
    Figure DE112020003833T5_0002
  • In mindestens einer Ausführungsform wird, wenn eine Ausgabe einer ersten MAD-Operation eine Eingabe für eine zweite MAD-Operation ist, die zu einem Produkt hinzugefügt wird, eine MAD-Abstammung zwischen ihnen erkannt. In mindestens einer Ausführungsform wird eine MAD-Abstammung zwischen einer ersten MAD-Operation, die als D1=A1*B1+ C1 und D2=A2*B2+C2 beschrieben wird, erkannt, wenn D1 gleich C2 ist. In mindestens einer Ausführungsform sind alle Ausgaben eines ersten äußeren Produkts Eingaben für ein zweites äußeres Produkt. In mindestens einer Ausführungsform gilt ein erstes äußeres Produkt als Vorgänger eines zweiten äußeren Produkts (d. h. das zweite äußere Produkt ist der Vorfahre des ersten äußeren Produkts), wenn die Ausgaben von MAD-Operationen dieses ersten äußeren Produkts Eingaben von MAD-Operationen dieses zweiten äußeren Produkts sind.
  • In mindestens einer Ausführungsform, wenn ein Zyklus so erkannt wird, dass der Vorfahre des letzten äußeren Produkts das erste äußere Produkt ist, ist die Menge der MAD-Operationen, die diese äußeren Produkte bilden, eine optimierbare GEMM- oder GEMM-ähnliche Operation.
  • In mindestens einer Ausführungsform werden, sobald eine optimierbare GEMM- oder GEMM-ähnliche Operation erkannt wird, Strukturinformationen für einen geeigneten Compiler oder ein entsprechendes Subsystem bereitgestellt. In mindestens einer Ausführungsform werden die Strukturinformationen verwendet, um den Operanden D und/oder C Register zuzuweisen. In mindestens einer Ausführungsform werden den Operanden A und B Register zugewiesen. In mindestens einigen Ausführungsformen werden die Strukturinformationen verwendet, um zu berechnen, wie viele Register für mindestens einen Abschnitt einer GEMM-Schleife verwendet werden sollen. In mindestens einer Ausführungsform werden Strukturinformationen verwendet, um zu berechnen, wie viele Register für alle Iterationen einer GEMM-Schleife benötigt werden, mit Ausnahme der Endschleife und mit Ausnahme von Nicht-GEMM-Code. In mindestens einer Ausführungsform werden Strukturinformationen verwendet, um Sätze von Lade- und MAD-Operationen zu verschachteln. In mindestens einer Ausführungsform wird ein Prozessor mit Abrufschaltungen optimiert, um Daten abzurufen, die einer oder mehreren Matrixoperationen entsprechen, bevor die eine oder mehreren Matrixoperationen von dem Prozessor abgerufen werden.
  • 1 veranschaulicht eine Rechenumgebung 100 zur Erkennung von Matrixoperationen und zur Optimierung der Erzeugung von ausführbarem Code gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird der Quellcode 102 einem Compiler 104 bereitgestellt, der ihn analysiert 106, um optimierbare Matrixoperationen zu erkennen. In mindestens einer Ausführungsform wird die Strukturinformation 108 einer Matrix Operation aus dem Quellcode extrahiert. In mindestens einer Ausführungsform wird die Strukturinformation 108 verwendet, um 110 ausführbare Befehle für Datenladungen und Unteroperationen einer Matrix Operation zu verschachteln. In einer Ausführungsform wird der einem Compiler bereitgestellte Quellcode verwendet, um den ausführbaren Code 112 zu erzeugen. In mindestens einer Ausführungsform wird der ausführbare Code einem Prozessor 114 bereitgestellt, der, wenn er ausgeführt wird, die Berechnung einer Matrix-Operation veranlasst.
  • In mindestens einer Ausführungsform bezieht sich der Quellcode 102 auf von Menschen lesbaren Code gemäß einer Programmiersprache. In mindestens einer Ausführungsform wird der Quellcode von einem Compiler 104 kompiliert, um maschinenlesbaren, ausführbaren Code 112 zu erzeugen, der von einem oder mehreren Prozessoren ausgeführt werden kann. In mindestens einer Ausführungsform wird der Quellcode 102 zumindest teilweise von einem Benutzer (z. B. einem Softwareentwickler oder Programmierer) über eine grafische Benutzeroberfläche oder eine Befehlszeilenschnittstelle erzeugt. In mindestens einer Ausführungsform ist der Quellcode 102 gemäß einer für den Menschen lesbaren, kompilierten Programmsprache gemäß einer Syntax wie C++ oder Java kodiert. In mindestens einer Ausführungsform legt eine API, wie etwa die CUDA 9 C++-API, spezielle Matrixlade-, Matrixmultiplizier- und -akkumulations- und Matrixspeicheroperationen offen, um Tensorkerne aus einem CUDA-C++-Programm effizient zu verwenden. In mindestens einer Ausführungsform wird der Quellcode 102 generiert, ohne dass Anmerkungen oder Kommentare erforderlich sind. In mindestens einer Ausführungsform beziehen sich Anmerkungen auf optionale Notationen, die im Quellcode enthalten sein können, um einem Compiler Hinweise darauf bereitzustellen, wie eine Ausgabe zu generieren ist, die aber keinen Einfluss darauf haben, wie diese Ausgabe aussehen soll. In mindestens einer Ausführungsform wird der Quellcode 102 zu einem Computerprogramm kompiliert, das eine oder mehrere Matrixmultiplikationen verwendet, um maschinelles Lernen durchzuführen, einschließlich, aber nicht beschränkt auf Inferenzieren und Training.
  • In mindestens einer Ausführungsform umfasst der Quellcode 102 eine oder mehrere Matrixoperationen. In mindestens einer Ausführungsform beinhaltet eine Matrixoperation eine allgemeine Matrix-Matrix-Multiplikationsoperation (GEMM) oder eine GEMM-ähnliche Operation. In mindestens einer Ausführungsform beinhaltet eine GEMM-ähnliche Operation einen Satz von Operationen, die eine innere Reihe von äußeren Produkten bilden. In mindestens einer Ausführungsform entspricht eine GEMM-ähnliche Operation denjenigen, die im Zusammenhang mit 2 ausführlicher diskutiert wurden. In mindestens einer Ausführungsform umfasst eine GEMM- oder GEMM-ähnliche Operation eine Reihe von Multiplikations- Additionsoperationen. In mindestens einer Ausführungsform ist eine Multiplikations-Additions-Operation ein beliebiger geeigneter Satz von Operationen, die dazu führen, dass eine Addition und Multiplikation durchgeführt wird.
  • In mindestens einer Ausführungsform wird der Quellcode 102 einem Compiler 104 bereitgestellt. In mindestens einer Ausführungsform schreibt ein Softwareentwickler oder - ingenieur mindestens einen Abschnitt des Quellcodes 102 und führt einen Compiler 104 aus, um eine Anwendung oder ein Modul in Form von ausführbarem Code 112 zu erzeugen. In mindestens einer Ausführungsform wird der Quellcode 102 anstelle des Compilers 104 oder zusätzlich zu diesem einem Interpreter bereitgestellt. In mindestens einer Ausführungsform wird ein erster ausführbarer Code (z. B. ein nicht optimierter ausführbarer Code oder ein anderer ausführbarer Code, der von der Optimierung von GEMM und GEMM-ähnlichen Operationen profitieren kann) einem Optimierer oder einer anderen geeigneten Anwendung (z. B. einem Re-Compiler) bereitgestellt, um einen zweiten ausführbaren Code zu erzeugen, der auf die eine oder andere Weise optimiert ist (z. B. verbesserte Registerzuweisung beim Berechnen von GEMM und GEMM-ähnlichen Operationen). In mindestens einer Ausführungsform wird ein erster ausführbarer Code für eine Anwendung mit Hilfe der hier beschriebenen Techniken neu strukturiert, um einen anderen ausführbaren Code zu erzeugen, der GEMM-Operationen effizienter ausführt.
  • In mindestens einer Ausführungsform erhält ein Compiler 104 einen Quellcode, der zur Identifizierung einer zu optimierenden Matrix-Operation verwendet wird. In mindestens einer Ausführungsform bestimmt ein Compiler eine Art und Weise, in der maschinenlesbarer, ausführbarer Code zumindest teilweise auf Strukturinformationen einer Matrix-Operation basieren soll. In mindestens einer Ausführungsform verschachtelt ein Compiler Sätze von Datenladeanweisungen mit Sätzen von Unteroperationen einer Matrixmultiplikation, um die Speicherlatenz zu reduzieren/minimieren. In mindestens einer Ausführungsform wird der ausführbare Code zum Durchführen einer Matrix Operation (z. B. GEMM Operation) zumindest teilweise basierend auf den Strukturinformationen der genannten Matrix Operation sequenziert, um Register effizient zuzuweisen und gleichzeitig die Speicherlatenz zu optimieren, um Speicherstaus zu verhindern. In mindestens einer Ausführungsform bezieht sich ein Speicherstillstand auf einen Wartezustand, in dem ein Prozessor einen oder mehrere Zyklen auf einen Speicherzugriff wartet. In mindestens einer Ausführungsform tritt ein Speicherstillstand auf, wenn ein Prozessor nicht in der Lage ist, eine Anweisung auszuführen, weil die Daten nicht verfügbar sind. In mindestens einer Ausführungsform weist eine verschmolzene Multiplikations-Additionsoperation (fused multiply-add operation - FMA) drei Operanden auf, und ein Prozessor bleibt stehen, wenn Ladungen zu einem der vorgenannten Operanden nicht verfügbar sind.
  • In mindestens einer Ausführungsform wird ein Compiler 104 verwendet, um Quellcode, der in einer für Menschen lesbaren Hochsprache geschrieben ist, in eine Niedrigsprache umzuwandeln, bei der es sich um eine Assemblersprache, einen Objektcode, einen ausführbaren Code usw. handeln kann, um eine Softwareanwendung zu erstellen, die von einem Prozessor ausgeführt werden kann. In mindestens einer Ausführungsform ist oder beinhaltet der Compiler 104 ein Subsystem, das eine oder mehrere der folgenden Operationen ausführt: Vorverarbeitung, lexikalische Analyse, Parsing, semantische Analyse (syntaxgeleitete Übersetzung), Umwandlung von Eingabeprogrammen in eine Zwischendarstellung, Codeoptimierung und Codegenerierung. In mindestens einer Ausführungsform konvertiert ein Compiler 104 den Quellcode 102 in ein Low-Level-Format (z. B. Assemblersprache) und der so entstandene Code wird ferner optimiert, um die Ausführung von GEMM und GEMM-ähnlichen Operationen zu verbessern. In mindestens einer Ausführungsform ist der Compiler ein OCG-Compiler (Omniscient Code Generation).
  • In mindestens einer Ausführungsform analysiert der Compiler 104 oder sein Subsystem den Quellcode 106, um eine oder mehrere optimierbare Matrixoperationen zu erkennen. In mindestens einer Ausführungsform analysiert der Compiler 104 den Quellcode 102, um Multiplikations-Additions-Operationen (MAD) zu identifizieren. In mindestens einer Ausführungsform erzeugt der Compiler 104 einen Code auf niedrigerer Ebene (z. B. Assemblercode), der geparst wird, um MAD-Operationen zu identifizieren. In mindestens einer Ausführungsform parst der Compiler 104 den Quellcode 102, um MAD-Operationen zu identifizieren. In mindestens einer Ausführungsform erkennt der Compiler 104, ob eine GEMM- oder GEMM-ähnliche Operation optimierbar ist, basierend zumindest teilweise auf Techniken, die im Zusammenhang mit den 2-9 beschrieben sind
  • In mindestens einer Ausführungsform analysiert der Compiler 104 den Quellcode (oder den daraus erzeugten Code auf mittlerer/niedriger Ebene) und bestimmt die Strukturinformationen 108 für eine Matrix-Operation. In mindestens einer Ausführungsform beinhalten die Strukturinformationen einer Matrixoperation eine Liste von Unteroperationen (z. B. MAD-Operationen). In mindestens einer Ausführungsform beinhalten die Strukturinformationen einer Matrixoperation die Speicherung einer Liste von Operanden von MAD-Operationen. In mindestens einer Ausführungsform gibt eine Liste von Operanden an, welche Register von diesen Operanden verwendet werden. In mindestens einer Ausführungsform beinhalten die Strukturinformation einer Matrixoperation die Speicherung einer Liste von Ladeoperationen von Operanden. In mindestens einer Ausführungsform gibt eine Liste von Ladeoperationen an, wann und wie Daten abgerufen, vorabgerufen oder anderweitig geladen werden, um eine MAD-Operation durchzuführen.
  • In mindestens einer Ausführungsform wird die Strukturinformation 108 als Datenstruktur gespeichert und als äußeres Produkt nach Ladung (OPBL) und äußeres Produkt nach Operand (OPBO) organisiert. In mindestens einer Ausführungsform wird die Strukturinformation 108 vom Compiler 104 verwendet, um die Zuordnung von Registern zu Operanden zu bestimmen, zu berechnen, wie viele Register für die Berechnung einer GEMM-Operation zu verwenden sind, Sätze von Ladungen und MADs zu verschachteln, Anzeiger zu äußeren Produkten zuzuordnen und OPBL und OPBO für ein feineres Pipelining zu partitionieren.
  • In mindestens einer Ausführungsform wird die Strukturinformation 108 von Compiler 104 verwendet, um 110 ausführbare Befehle für Datenladungen und Unteroperationen einer Matrix Operation zu verschachteln. In mindestens einer Ausführungsform wird die Strukturinformation 108 verwendet, um Anweisungen oder Mikroanweisungen zu planen, die Daten laden und Berechnungen mit diesen Daten durchführen. In mindestens einer Ausführungsform werden die Datenladungen für eine Matrixoperation zwischen Berechnungen (z. B. MAD-Operationen) verschachtelt. In mindestens einer Ausführungsform werden den Datenladungen Abhängigkeiten hinzugefügt, die verhindern, dass bestimmte Datenladungen vor anderen Operationen angeordnet werden. In mindestens einer Ausführungsform wird eine Abhängigkeit basierend darauf bestimmt, wie viele Prozessorzyklen für das Laden eines Datenelements benötigt werden. In mindestens einer Ausführungsform legt eine Abhängigkeit eine Obergrenze dafür fest, wie weit im Voraus ein Datenelement vorgeladen werden muss, bevor es verwendet werden kann, und eine Untergrenze wird basierend darauf bestimmt, wie lange es dauert, das Datenelement vorzuladen, um sicherzustellen, dass das Datenelement geladen und zur Verwendung verfügbar ist, wenn es für eine Berechnung verwendet werden soll, wodurch ein Speicherstillstand vermieden wird. In mindestens einer Ausführungsform ist eine Abhängigkeit für eine Datenladeanweisung so eingestellt, dass die Datenladeanweisung nach einer vorangegangenen MAD-Operation erfolgt. In mindestens einer Ausführungsform wird die Strukturinformation 108 verwendet, um eine Mindestanzahl von Registern zu berechnen, die zum Berechnen einer Matrixoperation erforderlich sind. In mindestens einer Ausführungsform begrenzen Abhängigkeiten die aktiven Bereiche von Registern, was die Registerzuweisung und das Scoreboarding sauberer macht.
  • In mindestens einer Ausführungsform erzeugt der Compiler 104 einen maschinenlesbaren ausführbaren Code 112, der zumindest teilweise auf den Strukturinformationen 108 basiert. In mindestens einer Ausführungsform ist der ausführbare Code 112 ein Abschnitt einer ausführbaren Software-Anwendung. Zum Beispiel umfasst der ausführbare Code 112 in mindestens einer Ausführungsform Anweisungen gemäß einem x86-Befehlssatz (z. B. Unterstützung der AVX2-Erweiterung der x86-Befehlssatzarchitektur).
  • In mindestens einer Ausführungsform wird der maschinenlesbare, ausführbare Code 112 einem Prozessor 114 bereitgestellt (z. B. als Teil einer Software-Anwendung). In mindestens einer Ausführungsform sind der Prozessor 114 und der Compiler 104 Teil verschiedener Computersysteme. In mindestens einer Ausführungsform sind der Prozessor 114 und der Compiler 104 Teil desselben Computersystems. In mindestens einer Ausführungsform umfasst ein Rechensystem einen Prozessor 114 und einen Speicher (z. B. Systemspeicher) zum Speichern von ausführbarem Code 112.
  • In mindestens einer Ausführungsform umfasst der Prozessor 114 Logikschaltungen zum Durchführen von Befehlen, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann der Prozessor 114 Befehle durchführen, einschließlich x86-Befehle, ARM-Befehle, spezielle Befehle für anwendungsspezifische integrierte Schaltungen (ASICs) usw. In mindestens einer Ausführungsform ist der Prozessor 114 als eine geeignete Verarbeitungseinheit implementiert, die zentrale Verarbeitungseinheiten (CPUs) der Intel Corporation aus Santa Clara, Calif. beinhaltet, aber nicht auf diese beschränkt ist: Haswell; Broadwell; Skylake; Kaby Lake; Coffee Lake; Cannon Lake; Whiskey Lake; Amber Lake; Cascade Lake; Cooper Lake; Ice Lake; Tiger Lake; Alder Lake; Meteor Lake; und weitere. In mindestens einer Ausführungsform unterstützt der Prozessor 114 den FMA3-Befehlssatz und/oder die Advanced Vector Extensions 2 (AVX2) Erweiterung der x86-Befehlssatzarchitektur.
  • In mindestens einer Ausführungsform kann der Prozessor 114 Register zum Speichern gepackter Daten beinhalten, wie z. B. 64 Bit breite MMX™-Register in Mikroprozessoren, die mit der MMX-Technologie der Intel Corporation aus Santa Clara, Kalifornien, ausgestattet sind. In mindestens einer Ausführungsform können MMX-Register, die sowohl in Integer- als auch in Gleitkommaform verfügbar sind, mit Elementen mit gepackten Daten arbeiten, die mit Single-Instruction-Multiple-Data-(„SIMD“) und Streaming-SIMD-Erweiterungs-(„SSE“)Anweisungen einhergehen. In mindestens einer Ausführungsform können 128 Bit breite XMM-Register, die sich auf die SSE2-, SSE3-, SSE4-, AVX-, AVX2- oder darüber hinausgehende Technologie beziehen (allgemein als „SSEx“ bezeichnet), derartige Operanden mit gepackten Daten aufbewahren. In mindestens einer Ausführungsform können die Prozessoren 114 Anweisungen zum Beschleunigen von Algorithmen für maschinelles Lernen oder Deep Learning, Training oder Inferenzieren durchführen.
  • In mindestens einer Ausführungsform umfasst der Prozessor 114 eine oder mehrere Datenabrufschaltungen zum Abrufen von Daten und/oder hat Zugriff darauf. In mindestens einer Ausführungsform ist eine Datenabrufschaltung eine logische Schaltung zum Abrufen eines Befehls, der einen Opcode und entsprechende Daten als Operanden umfassen kann. In mindestens einer Ausführungsform ist eine Datenabrufschaltung eine logische Schaltung zum Abrufen von Daten, die als Operand eines Opcodes verwendet werden. In mindestens einer Ausführungsform lädt eine Datenabrufschaltung Daten aus einer Speicherung in ein Register oder eine Registerdatei. In mindestens einer Ausführungsform überträgt eine Datenabrufschaltung Daten aus einem gemeinsam genutzten Speicher, Systemspeicher, Caches usw. in Register des Prozessors 114 und/oder in Register, auf die er zugreifen kann. In mindestens einer Ausführungsform ist eine Datenabrufschaltung in einen Hardwareprozessor eingebrannt. In mindestens einer Ausführungsform ist eine Datenabrufschaltung zumindest teilweise mit Software implementiert. In mindestens einer Ausführungsform ist eine Datenabrufschaltung zumindest teilweise mit Software implementiert.
  • In mindestens einer Ausführungsform können sich „Register“ auf bordeigene Prozessorspeicherorte beziehen, die als Teil von Anweisungen zum Identifizieren von Operanden verwendet werden können. In mindestens einer Ausführungsform kann es sich bei den Registern um diejenigen handeln, die von außerhalb eines Prozessors (aus der Sicht eines Programmierers) verwendbar sein können. In mindestens einer Ausführungsform sind Register möglicherweise nicht auf eine bestimmte Schaltungsart beschränkt. Vielmehr kann ein Register in mindestens einer Ausführungsform Daten speichern, Daten bereitstellen und die hierin beschriebenen Funktionen durchführen. In mindestens einer Ausführungsform können die hierin beschriebenen Register durch Schaltungen innerhalb eines Prozessors unter Verwendung einer beliebigen Anzahl unterschiedlicher Techniken implementiert (oder zumindest teilweise implementiert) werden, wie etwa dedizierter physischer Register, dynamisch zugewiesener physischer Register unter Verwendung von Registerumbenennung, Kombinationen aus dedizierten und dynamisch zugewiesenen physischen Registern usw. In mindestens einer Ausführungsform speichern Integerregister 32-Bit-Integerdaten. Eine Registerdatei von mindestens einer Ausführungsform enthält außerdem acht Multimedia-SIMD-Register für gepackte Daten.
  • In mindestens einer Ausführungsform verschachtelt der Prozessor 114 das Laden von Daten und das Berechnen. In mindestens einer Ausführungsform beinhaltet die Berechnung einer Matrix-Operation das Laden von Daten A1, A2, A3... und B1, B2, B3..., die zur Berechnung der MAD-Operationen D1=A1*B1+C1, D2=A2*B2+C2, D3=A3*B3+C3... verwendet werden. In mindestens einer Ausführungsform wird die Strukturinformation 108 verwendet, um N zu bestimmen, eine Anzahl von aktiven Registern, die für das Berechnen einer Matrix-Operation verwendet werden sollen. In einer Ausführungsform wird die Datenlast für Operanden und/oder Akkumulatoren verfolgt, um zu bestimmen, wie viele Live-Register für eine Matrix Operation verwendet werden. In mindestens einer Ausführungsform wird bei der Feststellung, dass N Live-Register verwendet werden, in einer bestimmten Phase der Operation eine Abhängigkeit an eine nachfolgende Datenlast geknüpft, die verhindert, dass weitere Register verwendet werden. In mindestens einer Ausführungsform bezieht sich ein aktives Register auf ein Register, das in Gebrauch ist, entweder weil gerade Daten in es geladen werden oder weil bereits Daten in es geladen wurden und zur Verwendung zur Verfügung stehen. In mindestens einer Ausführungsform ist eine Abhängigkeit mit einer Ladeoperation verbunden, die anzeigt, dass das Laden von Daten nach Ausführung einer MAD-Operation erlaubt ist, die nach Abschluss mindestens ein Register für andere Verwendungen freigibt. In mindestens einer Ausführungsform ist der Prozessor 114 gemäß den an anderer Stelle in dieser Offenbarung beschriebenen Verfahren implementiert, wie z. B. in Verbindung mit 26.
  • In mindestens einer Ausführungsform ist 2 ein Diagramm 200, das eine allgemeine Matrix-Matrix-zu-Matrix-Multiplikation (GEMM) veranschaulicht. Gemäß mindestens einer Ausführungsform sind ein äußeres Produkt 202, ein inneres Produkt 204 und eine innere Reihe von äußeren Produkten (inner series of outer products - ISOP) dargestellt. In mindestens einer Ausführungsform umfasst das Durchführen einer Matrix Operation das Berechnen einer Vielzahl von äußeren Produkten und deren Summierung als Reihe. In mindestens einer Ausführungsform umfasst das Berechnen einer GEMM- oder GEMM-ähnlichen Operation das Berechnen einer inneren Reihe von äußeren Produkten.
  • In mindestens einer Ausführungsform bezieht sich ein äußeres Produkt 202 auf eine Berechnung, bei der m Elemente aus einem Puffer A in Register geladen werden, n Elemente aus Puffer B in Register geladen werden und jedes Element von Puffer A mit jedem Element von Puffer B multipliziert wird, um m*n Werte zu erzeugen. In mindestens einer Ausführungsform wird ein äußeres Produkt aus Abschnitten einer ersten Matrix A mit den Abmessungen i x k und einer zweiten Matrix B mit den Abmessungen k x j berechnet. In mindestens einer Ausführungsform wird ein äußeres Produkt zwischen einem ersten Vektor mit i Elementen und einem zweiten Vektor mit j Elementen berechnet. In mindestens einer Ausführungsform sind die Vektoren eines äußeren Produkts einzelne Zeilen oder Spalten einer mehrdimensionalen Matrix. In mindestens einer Ausführungsform wird jedes Element des ersten Vektors A elementweise mit jedem Element des Vektors B multipliziert, um eine Ausgabematrix zu erhalten. In mindestens einer Ausführungsform, wenn Vektor A m Elemente und Vektor B n Elemente aufweist, dann hat ein äußeres Produkt von A und B m*n Vielfache. In mindestens einer Ausführungsform wird ein bestimmter Eintrag des äußeren Produkts Cij durch Multiplikation des i-ten Elements des ersten Vektors A mit dem j-ten Element des zweiten Vektors B berechnet: C i j = A i B j
    Figure DE112020003833T5_0003
  • In mindestens einer Ausführungsform bezieht sich ein inneres Produkt 204 auf eine Berechnung, bei der k Elemente aus einem Puffer A in Register geladen werden, k Elemente aus einem Puffer B in Register geladen werden und Multiplikations-Additions-Operationen berechnet werden, um eine akkumulierte Summe C zu erzeugen. In mindestens einer Ausführungsform wird ein äußeres Produkt unter Verwendung von Abschnitten einer ersten Matrix A mit den Abmessungen i x k und einer zweiten Matrix B mit den Abmessungen k x j berechnet. In mindestens einer Ausführungsform wird ein inneres Produkt zwischen einem ersten Vektor mit k Elementen und einem zweiten Vektor mit k Elementen berechnet. In mindestens einer Ausführungsform wird jedes Element von Vektor A mit einem entsprechenden Element von Vektor B multipliziert, um ein Produkt C zu erzeugen. In mindestens einer Ausführungsform wird ein erstes Element eines ersten Vektors A1 mit einem ersten Element eines zweiten Vektors B1 multipliziert, um ein erstes Produkt C1 zu berechnen, und andere Produkte C2,.. Ck werden entsprechend erzeugt. In mindestens einer Ausführungsform werden die Produkte C1,...Ck summiert, um eine Ausgabe des inneren Produkts 204 zu erzeugen: C = k A k B k
    Figure DE112020003833T5_0004
  • In mindestens einer Ausführungsform umfasst das Berechnen eines inneren Produkts das Laden von k Elementen aus Puffer A in Register, das Laden von k Elementen aus Puffer B in Register und das Berechnen von k MAD-Operationen unter Verwendung von Elementen, die aus den Puffern A und B erhalten wurden
  • In mindestens einer Ausführungsform ist eine allgemeine Matrix-Matrix-Multiplikationsoperation eine innere Reihe von äußeren Produkten 206. In mindestens einer Ausführungsform werden m*k Elemente aus Puffer A in Register und n*k Elemente aus Puffer B in Register geladen und m*n*k MADs werden als Teil des Berechnens einer inneren Reihe von äußeren Produkten berechnet. In mindestens einer Ausführungsform wird eine innere Reihe von äußeren Produkten basierend auf den Strukturen des äußeren Produkts 202 und des inneren Produkts 204 wie folgt beschrieben: C i j = k A i k B j k
    Figure DE112020003833T5_0005
  • In mindestens einer Ausführungsform werden GEMM- und GEMM-ähnliche Operationen auf einer Assembler- oder Pseudo-Assembler-Ebene erkannt, um alle Multiplikations-Additions-Operationen zu identifizieren und zu prüfen, ob diese Operationen äußere Produkte und innere Produkte bilden. In mindestens einer Ausführungsform wandelt ein Compiler den Quellcode (z. B. gemäß einer menschenlesbaren Programmiersprache) in Assemblercode oder Pseudo-Assemblersprache und dann von Assemblersprache in Binärcode um, der auf einem Prozessor ausgeführt werden kann. In mindestens einer Ausführungsform wird in CUDA geschriebener Quellcode in Parallel Thread Execution (PTX)-Code umgewandelt und PTX-Code wird in binären, ausführbaren Code übersetzt, der auf einem oder mehreren GPUs ausgeführt werden kann.
  • In mindestens einer Ausführungsform erkennt ein Compiler auf PTX-Assembler-Ebene verschmolzene Multiplikations-Additionsoperationen und prüft, ob diese Operationen eine innere Reihe äußerer Produkte bilden, und fasst dann diese Operationen zu GEMM-Produkten zusammen. Sobald diese Anweisungen zusammengefasst worden sind, können die Anweisungen aus dem Speicher geladen werden, aus dem die Operanden dieser Operationen stammen. In mindestens einer Ausführungsform stellen Sammlungen von Operanden und Befehlen der genannten GEMM-Operation genaue Informationen darüber bereit, wie viele Prozessorzyklen zum Durchführen einer GEMM-Operation erforderlich sind, und solche strukturellen Informationen können verwendet werden, um eine Art und Weise zu bestimmen, in der Register und Anzeigetafeln zugewiesen werden und eine Sequenz von Mikrooperationen geplant wird, um die genannte GEMM-Operation durchzuführen.
  • In mindestens einer Ausführungsform werden strukturelle Informationen, die basierend auf äußeren Produktdimensionen, inneren Produktdimensionen und spezifischen Anweisungen (z. B. Opcodes) einer Matrixoperation bestimmt werden, verwendet, um zu berechnen, wie Register zugewiesen werden müssen, um Datenelemente zu laden, und wie lange im Voraus ein Datenelement aus dem gemeinsamen Speicher geladen werden kann und so weiter. In mindestens einer Ausführungsform erkennt ein Compiler, zumindest teilweise basierend auf dem Quellcode, GEMM- und GEMM-ähnliche Operationen und erzeugt optimierten ausführbaren Code, der in Bezug auf die Speicherlatenz und die Speicherbandbreite Spitzenwerte erreicht. In mindestens einer Ausführungsform wird die Speicherbandbreite von einem Kernel bestimmt und liegt außerhalb des Optimierungsbereichs eines Compilers. In mindestens einer Ausführungsform führt ein Compiler eine Optimierung der Speicherlatenz einer GEMM- oder GEMM-ähnlichen Operation durch, indem er Datenladeoperationen mit Unteroperationen (z. B. MAD-Operationen) verschachtelt, um die Speicherlatenz zu verbergen. In mindestens einer Ausführungsform bestimmen die hierin beschriebenen Techniken eine optimale Anzahl von Registern, die für das Vorabholen einer bestimmten Datenmenge aus dem Speicher in Register zum Berechnen einer GEMM- oder GEMM-ähnlichen Operation benötigt werden, die die Speicherlatenz verbirgt (z. B. durch das Vorabholen von Daten und das Verhindern von Speicherstaus) und eine optimale (z. B. minimale) Anzahl von Registern für die GEMM- oder GEMM-ähnliche Operation verwendet.
  • In mindestens einer Ausführungsform ist ein äußeres Produkt ein Beispiel für eine sich gegenseitig ausschließende Sammlung von Multiplikations- Additionsoperationen mit einer entsprechenden sich gegenseitig ausschließenden Sammlung von Ladeoperationen. In mindestens einer Ausführungsform beinhaltet ein äußeres Produkt sowohl ganze als auch partielle äußere Produkte. In mindestens einer Ausführungsform ist ein ganzes äußeres Produkt in 2 dargestellt und ein teilweises äußeres Produkt ist ein Abschnitt davon. In mindestens einer Ausführungsform gemäß 2 beinhaltet ein vollständiges äußeres Produkt alle sechzehn Matrixausgangseinträge Cij und ein teilweises äußeres Produkt beinhaltet einige, aber nicht alle Matrixausgangseinträge Cij. In mindestens einer Ausführungsform ist eine Matrix-Operation optimierbar, wenn eine innere Reihe von partiellen äußeren Produkten erkannt wird.
  • 3 veranschaulicht ein Diagramm 300 einer Datenstruktur gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform sind die Datenstrukturen in einer Weise organisiert, die mit dem in 3 dargestellten Diagramm 300 übereinstimmt. In mindestens einer Ausführungsform ist die innerste Operation eine MAD-Operation, die eine Multiplikations-Additionsanweisung aufweist. In mindestens einer Ausführungsform weist eine MAD-Operation eine Multiplikations- Additionsanweisung auf, die in einer Liste OriInst gespeichert ist. In einer Ausführungsform ist eine Liste ein anschauliches Beispiel für eine Datenstruktur, die zum Sammeln von Dateneinträgen verwendet wird, und jede geeignete Datenstruktur kann anstelle einer Liste oder zusätzlich dazu verwendet werden. In mindestens einer Ausführungsform weisen verschiedene Arten von Anweisungen zur Durchführung von Multiplikation und Addition/Akkumulation unterschiedliche Leistungsprofile auf. In mindestens einer Ausführungsform ist eine verschmolzene Multiplikations-Additionsoperation schneller als eine getrennte Multiplikationsoperation, deren Produkt zu einer akkumulierenden Variablen addiert wird. In mindestens einer Ausführungsform werden die Operanden A, B, C und D zusammen mit den Ladungen A und B gespeichert. In mindestens einer Ausführungsform stellen A und B Operanden dar, die miteinander multipliziert werden, C stellt einen Operanden eines Akkumulators dar, der zum resultierenden Produkt von A und B addiert wird, und D ist ein Operand, der das Ergebnis der Multiplikation von A und B und der Addition von C speichert. In mindestens einer Ausführungsform ist D ← A*B+C.
  • In mindestens einer Ausführungsform ist die nächste Ebene das äußere Produkt nach Operand und darauf folgt das äußere Produkt nach Ladung. In mindestens einer Ausführungsform sind die äußeren Produkte nach Operand und nach Ladung aufgrund der Komplexität, aus der die Ladunganweisungen stammen, getrennt, so dass die Trennung dieser beiden Ebenen der äußeren Produkte die Implementierungen robuster gegenüber verschiedenen Arten von GEMM und GEMM-ähnlichen Operationen macht. In mindestens einer Ausführungsform beinhalten die verschiedenen Varianten von GEMMs komplexe Präzisions-, reale Präzisions- und HMMA-Anweisungen. In mindestens einer Ausführungsform ist die äußerste Strukturebene eine innere Reihe, die eine Liste aller äußeren Produkte in einer Reihe bildet, die zusammen addiert werden.
  • In mindestens einer Ausführungsform beschreibt das Diagramm 300 die Struktur einer GEMM. In mindestens einer Ausführungsform definiert ein Compiler wie OCG-Klassen gemäß 3. In mindestens einer Ausführungsform beschreibt eine äußerste Struktur eine innere Reihe einer Liste äußerer Produkte in einer Zeile, die summiert werden.
  • In mindestens einer Ausführungsform beinhaltet ein Prozess zur Erkennung einer GEMM oder GEMM-ähnlichen Operation den Aufbau von Strukturinformationen, wie in 3 dargestellt, und wenn am Ende eines Satzes von PTX-Anweisungen eine GEMM-Struktur aufgebaut wurde, kann aus dem erfolgreichen Aufbau einer solchen Struktur gefolgert werden, dass PTX-Anweisungen, die einer GEMM oder GEMM-ähnlichen Operation entsprechen, optimiert werden können. In mindestens einer Ausführungsform kann ein Compiler anhand von Strukturinformationen eines GEMM genau abfragen, wo Abfragen beginnen und enden, wo Ladungen beginnen und enden und welches die entsprechenden Operanden sind. In mindestens einer Ausführungsform erstellt ein Compiler wie OCG-Klassenobjekte gemäß Diagramm 300, wenn er Quellencode durchsucht, um zu optimierende GEMM oder GEMM-ähnliche Operationen zu erkennen.
  • In mindestens einer Ausführungsform illustriert das Diagramm 300 ganz rechts eine innere Reihe 302. In mindestens einer Ausführungsform ist eine innere Reihenklasse oder - aufgabe ein ganzer Container einer GEMM-Struktur, die alle Strukturinformationen beinhaltet. In mindestens einer Ausführungsform wird die Klasse oder Aufgabe der inneren Reihe ferner durch das äußere Produkt nach Ladung (OPBL) 304 unterteilt. In mindestens einer Ausführungsform sind zwei verschiedene OPBLs abgebildet - eine mit einem einzigen OPBL (links) und eine mit zwei OPBLs (rechts). In mindestens einer Ausführungsform kann eine MAD-Operation ein FMA, ein HMMA-Warp-Level-Befehl, getrennte Multiplikations- und Additionsoperatoren und jede andere geeignete Gruppe von Operationen sein, um eine Multiplikation und Addition durchzuführen.
  • In mindestens einer Ausführungsform sind Load A und Load B Anweisungen zum Laden von Daten in Register. In mindestens einer Ausführungsform werden Operanden in Register geladen und zum Durchführen einer Multiplikation und Addition verwendet (z. B. unter Verwendung eines FMA3-basierten Opcodes). In mindestens einer Ausführungsform kann es sich bei den MAD-Operationen um einen oder mehrere Opcodes handeln. In mindestens einer Ausführungsform ist OriInst eine Liste von Anweisungen, die für MAD-Operationen verwendet werden. Zum Beispiel könnte in mindestens einer Ausführungsform eine MUL-Anweisung gefolgt von einer ADD-Anweisung vorhanden sein, um eine MAD-Operation durchzuführen. In mindestens einer Ausführungsform analysiert ein Compiler eine MAD-Operation, um zu ermitteln, welche Operanden A, B, C und D sind, und speichert Punkte auf diese für einen einfachen Zugriff (z. B. wie in OPBO- und OPBL-Klassen oder -Objekten angeordnet) und in ähnlicher Weise für A- und B-Ladeoperationen für einen einfachen Zugriff.
  • 4 veranschaulicht ein Diagramm 400, das Techniken zur Erkennung von GEMM und GEMM-ähnlichen Operationen gemäß mindestens einer Ausführungsform beschreibt. In mindestens einer Ausführungsform veranschaulichen 4 - 7 eine Abfolge von Schritten zum Erfassen einer zu optimierenden GEMM- oder GEMM-ähnlichen Operation. In mindestens einer Ausführungsform veranschaulicht Ziffer 402 einen Code oder Pseudocode zur Implementierung von Techniken zur Erkennung von GEMM und GEMM-ähnlichen Operationen oder eines Abschnitts davon und Ziffer 404 veranschaulicht eine MAD-Operation. In mindestens einer Ausführungsform generiert ein Compiler Assemblercode aus Quellcode. In mindestens einer Ausführungsform wird ein Assemblercode gescannt, um Schleifen zu erkennen, die analysiert werden, um zu bestimmen, ob sie GEMM-Operationen aufweisen. In mindestens einer Ausführungsform weist eine Schleife eine GEMM auf, im Gegensatz zu einem Kernel oder beliebigen Codezeilen. In mindestens einer Ausführungsform analysiert ein Compiler pro Schleife, ob sie eine GEMM aufweist. In mindestens einer Ausführungsform sucht ein Compiler nach MAD-Operationen und prüft, ob es sich um eine Integer-Addition, Float-Addition, HMMA usw. handelt und ob die Operanden A und B (z. B. die zu multiplizierenden Operanden) zusammen geladen sind. In mindestens einer Ausführungsform, wie in 4 dargestellt, werden die Operanden A und B miteinander multipliziert und mit dem Operanden C summiert. In mindestens einer Ausführungsform wird der Operand D zum Speichern des Ergebnisses einer MAD-Operation verwendet. In mindestens einer Ausführungsform wird ein Operand D einer ersten MAD-Operation als Operand C für eine zweite MAD-Operation verwendet. In mindestens einer Ausführungsform werden Operanden, die von außerhalb des gemeinsamen Speichers geladen werden, übersprungen. In mindestens einer Ausführungsform wird der Quellcode (z. B. der aus dem Quellcode generierte Assemblercode) gescannt, um eine Liste aller MAD-Operationen in einer Schleife zu erstellen.
  • In mindestens einer Ausführungsform ist eine Multiplikations-Additions-Operation (MAD) ein beliebiger geeigneter Satz von Befehlen, der eine Multiplikations-Additionsoperation durchführt. In mindestens einer Ausführungsform wird eine Multiplikations-Additions-Operation gemäß oder basierend auf folgendem menschenlesbaren Code implementiert: d = a b + c
    Figure DE112020003833T5_0006
  • In mindestens einer Ausführungsform wird eine Multiplikations-Additions-Operation, wie oben gezeigt, als zwei getrennte Operationen - eine Multiplikations- und eine Additions-Operation - implementiert, die in eine Assemblersprache auf niedriger Ebene umgewandelt und dann in einen maschinenlesbaren, ausführbaren Code als getrennte Sätze von Anweisungen übersetzt werden, die, wenn sie aneinandergereiht werden, einen oder mehrere Prozessoren veranlassen, eine MAD-Operation durchzuführen.
  • In mindestens einer Ausführungsform wird eine Multiplikations-Additions-Operation als FMA-Operation (Fused Multiply Add) gemäß oder basierend auf folgendem menschenlesbaren Code implementiert, der C++11 und höher unterstützt: d = std : : fma ( a , b , c ) //berechnet ( a b ) + c
    Figure DE112020003833T5_0007
  • In mindestens einer Ausführungsform wird eine FMA-Operation gemäß dem FMA-Befehlssatz implementiert, der eine Erweiterung der 128- und 256-Bit Streaming SIMD Extensions-Anweisungen im x86-Mikroprozessor-Befehlssatz ist, um Fused Multiplikations-Additionsoperationen (FMA) durchzuführen.
  • In mindestens einer Ausführungsform sind FMA-Operationen wie D =A*B+C besser als das getrennte Durchführen von Multiplikation und zusätzlichen Schritten, da die Zwischenergebnisse mit unendlicher Genauigkeit behandelt werden, wobei die Rundung auf dem Speicher erfolgt, und somit für die Berechnung genauer sind. In mindestens einer Ausführungsform ist es die einfache Rundung, die dem FMA sein „verschmolzenes“ Präfix verleiht. In mindestens einer Ausführungsform ist das Berechnen einer FMA-Operation schneller als das getrennte Durchführen von Multiplikations- und Additionsoperationen.
  • In mindestens einer Ausführungsform ist eine Multiplikations-Additions-Operation als getrennte Additions-Operation (z. B. ADD-Anweisung) und Multiplikations-Operation (z. B. MUL- oder IMUL-Anweisung) implementiert. In mindestens einer Ausführungsform ist eine Multiplikations-Additions-Operation als verschmolzene Multiplikations-Additions-Operation gemäß AVX2 (z. B. FMA3-Anweisung) implementiert. In mindestens einer Ausführungsform ist eine Multiplikations-Additions-Operation als verschmolzene Multiplikations-Additions-Operation gemäß dem Volta-Befehlssatz (z. B. HMMA-Anweisung) implementiert. In mindestens einer Ausführungsform beinhaltet eine MAD-Operation FMA3-basierte Anweisungen, einschließlich, aber nicht beschränkt auf: VFMADD231PDy; VFMADD231PSy; VFMADD231PDx; VFMADD231PSx; VFMADD231SD; VFMADD231SS; VFMADD132PDy; VFMADD132PSy; VFMADD132PDx; VFMADD132PSx; VFMADD132SD; VFMADD132SS; VFMADD213PDy; VFMADD213PSy; VFMADD213PDx; VFMADD213PSx; VFMADD213SD; VFMADD213SS; und mehr.
  • 5 illustriert ein Diagramm 500, das Techniken zur Erkennung von GEMM- und GEMM-ähnlichen Operationen gemäß mindestens einer Ausführungsform beschreibt. In mindestens einer Ausführungsform veranschaulichen 4 - 7 eine Abfolge von Schritten zum Erfassen einer zu optimierenden GEMM- oder GEMM-ähnlichen Operation. In mindestens einer Ausführungsform veranschaulicht die Ziffer 502 einen Code oder Pseudocode zur Implementierung von Techniken zur Erkennung von GEMM- und GEMM-ähnlichen Operationen oder eines Abschnitts davon; die Ziffer 504 veranschaulicht eine MAD-Operation; und die Ziffer 506 veranschaulicht Schritte zur Erkennung von GEMM- und GEMM-ähnlichen Operationen oder eines Abschnitts davon. In mindestens einer Ausführungsform wird eine Liste von MAD-Operationen (z. B. basierend auf in Verbindung mit 3 beschriebenen Techniken gesammelt) in äußere Produkten organisiert. In mindestens einer Ausführungsform ist eine Liste von MAD-Operationen einer Schleife als äußeres Produkt nach Operand und äußeres Produkt nach Ladung organisiert. In mindestens einer Ausführungsform veranschaulicht 5 links einen Pseudocode zur Erkennung von äußeren Produkten. In mindestens einer Ausführungsform veranschaulicht 5 rechts eine Darstellung 506A bis 506N, wie äußere Produkte iterativ bestimmt werden.
  • In mindestens einer Ausführungsform sammelt ein Compiler eine Liste von MADs aus einer Schleife. In mindestens einer Ausführungsform weist eine GEMM Operation 512 MAD-Operationen auf, die in 8 äußere Produkte zu je 64 MADs organisiert sind (d. h. insgesamt 512 MAD-Operationen). In mindestens einer Ausführungsform wird eine erste MAD-Operation aus einer Liste erhalten, um ein neues äußeres Produkt zu beginnen (z. B. ein äußeres Produkt durch Laden). In mindestens einer Ausführungsform wird eine erste OPBL identifiziert, um ein neues äußeres Produkt durch Laden zu beginnen. In mindestens einer Ausführungsform illustriert die erste Iteration 506A einen ersten Kreis, der einen ersten MAD darstellt, der in einer OPBL platziert wird und die entsprechenden Operanden OpdA1 und OpdB1 sowie die Ladungen LoadA1 und LoadB1 ausfüllt.
  • In mindestens einer Ausführungsform wird die zweite Iteration 506B nach der ersten Iteration 506A durchgeführt und eine zweite MAD-Anweisung hinzugefügt, die in der zweiten Iteration 506B durch einen Kreis dargestellt wird. In mindestens einer Ausführungsform zeigen die Häkchen in der zweiten Iteration 506B an, dass ein Operand aus der ersten Iteration 506A und der zweiten Iteration 506B übereinstimmen, d. h. dass sie denselben Wert OpdB1multiplizieren. In mindestens einer Ausführungsform ist die gemeinsame Nutzung eines Operanden relevant für die Erstellung eines optimierten Zeitplans, der die Speicherung eines gemeinsam genutzten Operanden in einem Live-Register für eine Dauer beinhalten kann, die sich über die erste Iteration 506A und die zweite Iteration 506B erstreckt. In mindestens einer Ausführungsform gehören die MAD-Befehle der ersten Iteration 506A und der zweiten Iteration 506B zu einem gemeinsamen äußeren Produkt, da es einen gemeinsamen Operanden gibt. In mindestens einer Ausführungsform veranschaulicht die zweite Iteration 506B ein MAD, das einen gemeinsamen Operanden OpdB1 mit der ersten Iteration 506A teilt, wie durch zwei Häkchen in der zweiten Iteration 506B dargestellt. In mindestens einer Ausführungsform impliziert ein gemeinsamer Operand eine gemeinsame Ladung (z. B. impliziert ein gemeinsamer Operand OpdB1 eine gemeinsame Ladung LoadB1).
  • In mindestens einer Ausführungsform wird die dritte Iteration 506C nach der ersten Iteration 506A und der zweiten Iteration 506B durchgeführt. In mindestens einer Ausführungsform entspricht ein dritter Kreis einer dritten durchgeführten MAD-Operation, bei der ein gemeinsamer Operand OpdA1 mit der ersten Iteration 506A geteilt wird, wie durch Häkchen in der dritten Iteration 506C dargestellt. In mindestens einer Ausführungsform wird eine vierte Iteration 506D mit einem gemeinsamen Operanden OpdA2 durchgeführt, was bedeutet, dass ein äußeres Produkt vollständig gefüllt wurde. In mindestens einer Ausführungsform beinhaltet ein äußeres Produkt nach Operanden 64 MAD-Operationen, die in einer 8x8 Matrix angeordnet sind. In mindestens einer Ausführungsform gibt es 8 äußere Produkte mit 64 Anweisungen (z. B. 64 MAD-Operationen) in jedem äußeren Produkt.
  • In mindestens einer Ausführungsform illustriert die fünfte Iteration 506E ein neues äußeres Produkt nach Operanden in einem äußeren Produkt nach Ladung. In mindestens einer Ausführungsform veranschaulicht die fünfte Iteration 506E ein zweites äußeres Produkt nach Operand, das dieselbe Ladeoperation mit einem ersten äußeren Produkt nach Ladung teilt, wie durch ein einzelnes Häkchen für eine gemeinsame Ladung A veranschaulicht wird. In mindestens einer Ausführungsform ist die gemeinsame Nutzung einer gemeinsamen Ladeoperation, aber nicht die gemeinsame Nutzung eines gemeinsamen Operanden ein Hinweis darauf, ein neues äußeres Produkt nach Operand zu seeden, während die nicht gemeinsame Nutzung einer gemeinsamen Ladeoperation und auch nicht die gemeinsame Nutzung eines gemeinsamen Operanden darauf hinweist, ein neues äußeres Produkt nach Ladung zu seeden.
  • In mindestens einer Ausführungsform veranschaulicht die sechste Iteration 506F, ähnlich wie die dritte Iteration 506C, ein gemeinsames äußeres Produkt durch den Operanden OpdA1, der von der fünften Iteration 506E und der sechsten Iteration 506F gemeinsam genutzt wird. In mindestens einer Ausführungsform werden Iterationen wie die oben beschriebenen wiederholt (z. B. bis zu N-mal), bis die letzte Iteration 506N abgeschlossen ist und die Strukturinformationen für eine GEMM oder GEMM-ähnliche Operation definiert sind. In mindestens einer Ausführungsform beinhaltet der Quellcode mehrere GEMM- oder GEMM-ähnliche Operationen. In mindestens einer Ausführungsform ist N = 8 x 8 x 8 = 512 MAD - Operationen in einer GEMM - oder GEMM - ähnlichen Operation.
  • In mindestens einer Ausführungsform erzeugt ein Compiler oder ein Untersystem oder eine Unterkomponente davon bei der Ausführung von Code oder Pseudocode, der zumindest teilweise auf der Zahl 502 basiert, die zumindest teilweise durch die Iterationen 506A-N implementiert wird, eine Liste von äußeren Produkten, die voneinander unabhängig sind und eine weitere Analyse erfordern, um festzustellen, ob es eine GEMM- oder GEMM-ähnliche Operation gibt, die optimiert werden kann. In mindestens einer Ausführungsform veranschaulicht 6 Techniken zum Bestimmen, ob die von den in 5 dargestellten Techniken erzeugten äußeren Produkte in einer Reihenfolge voneinander abhängig sind.
  • In mindestens einer Ausführungsform können die in 5 beschriebenen Techniken so angepasst werden, dass sie eine spezielle Behandlung durchführen, um GEMMs mit komplexen Präzisions-Gleitkomma- und Ganzzahl-MAD-Operationen zu erkennen. In mindestens einer Ausführungsform beinhalten Operationen mit komplexer Genauigkeit einige oder alle Operanden, die einen von Null verschiedenen Realteil a und einen von Null verschiedenen Imaginärteil b aufweisen, so dass eine komplexe Zahl a + bi ein Format hat, bei dem a und b reelle Zahlen sind und i2 = -1. In mindestens einer Ausführungsform ist ein Operand wie der Operand A eine komplexe Zahl. In mindestens einer Ausführungsform gehören zwei MAD-Operationen zur gleichen OPBO, weil sie den gleichen Operanden A verwenden, der eine komplexe Zahl sein kann, aber die Ausgabe D der ersten MAD-Operation ist die Eingabe/Ausgabe C der zweiten MAD-Operation. In mindestens einer Ausführungsform, wenn zwei MAD-Operationen einen übereinstimmenden Operanden A und übereinstimmende Operanden D/C aufweisen, verstößt dies gegen die erwartete Struktur innerer Reihen äußerer Produkte, die typischerweise für reelle Zahlen erwartet werden, da MAD-Operationen, die übereinstimmende A- oder B-Operanden aufweisen, zu einem gemeinsamen äußeren Produkt gehören müssen und MADs, die übereinstimmende D/C-Operanden aufweisen, zu aufeinanderfolgenden äußeren Produkten gehören müssen. In mindestens einer Ausführungsform können jedoch Operationen mit übereinstimmenden A- oder B-Operanden und übereinstimmenden D/C-Operanden zu einer komplexen MAD-Operation gehören, und diese beiden MAD-Operationen werden zu einer einzigen MAD-Operation mit einem einzigen D- und C-Operanden kombiniert, so dass eine vollständige komplexe MAD zwei verschmolzene MAD-Operationen wie folgt umfasst: C 1 + A 1 B 1 = D 1 ( e r s t e M A D )
    Figure DE112020003833T5_0008
    C 2 + A 2 B 2 = D 2 ( z w e i t e M A D )
    Figure DE112020003833T5_0009
    A 1 = A 2 o d e r B 1 = B 2 ( p a s s e n d e A o d e r B O p e r a n d e n )
    Figure DE112020003833T5_0010
    D 1 = C 2 ( p a s s e n d e D / D O p e r a n d e n )
    Figure DE112020003833T5_0011
    C 1 + A 1 B 1 + A 2 B 2 = D 2 ( k o m p l e x e M A D O p e r a t i o n )
    Figure DE112020003833T5_0012
  • 6 veranschaulicht ein Diagramm 600, das Techniken zur Erkennung von GEMM und GEMM-ähnlichen Operationen gemäß mindestens einer Ausführungsform beschreibt. In mindestens einer Ausführungsform veranschaulichen 4 - 7 eine Abfolge von Schritten zum Erfassen eines zu optimierenden GEMM- oder GEMM-ähnlichen Betriebs. In mindestens einer Ausführungsform veranschaulicht Ziffer 602 einen Code oder Pseudocode zur Implementierung von Techniken zur Erkennung von GEMM- und GEMM-ähnlichen Operationen oder eines Abschnitts davon und Ziffer 604 veranschaulicht die Erkennung von MAD-Ahnen für einzelne Operationen und zur Erkennung von Vorfahren für äußere Produkte. In mindestens einer Ausführungsform wird eine Liste von MAD-Operationen (z. B. basierend auf in Verbindung mit 3 beschriebenen Techniken gesammelt) in äußere Produkten organisiert. In mindestens einer Ausführungsform ist eine Liste von MAD-Operationen einer Schleife als äußeres Produkt nach Operand und äußeres Produkt nach Ladung organisiert.
  • In mindestens einer Ausführungsform handelt es sich bei MAD-Operationen um Multiplikations- und Additionsoperationen, die akkumuliert werden. In mindestens einer Ausführungsform wird eine MAD-Operation als Zuweisung eines durch Multiplikation der Operanden A und B und Addition des resultierenden Produkts mit einem dritten Operanden C berechneten Wertes an den Operanden D konzipiert. In mindestens einer Ausführungsform wird eine MAD-Operation als C+A*B=D konzipiert, was bedeutet, dass eine Summe des Operanden C und ein Produkt der Operanden A und B im Operanden D gespeichert wird. In mindestens einer Ausführungsform umfasst eine GEMM- oder GEMM-ähnliche Operation.
  • In mindestens einer Ausführungsform wird die MAD-Abstammung basierend darauf bestimmt, woher der Operand C einer MAD-Operation stammt. In mindestens einer Ausführungsform wird, wenn ein Ausgangsoperand einer ersten MAD-Operation Di der Operand Ci+i einer zweiten MAD-Operation ist, die MAD-Abstammung so festgestellt, dass die i-te MAD-Operation ein Vorfahre der (i+1)-ten MAD-Operation ist - andernfalls ist die (i+1)-te MAD-Operation ein Nachfahre der i-ten MAD-Operation. In mindestens einer Ausführungsform wird bei der Ermittlung der MAD-Abstammung geprüft, ob der Operand D jeder MAD-Operation mit dem Operanden C einer anderen MAD-Operation identisch ist, was eine Datenflussabhängigkeit zwischen zwei MAD-Operationen anzeigt.
  • In mindestens einer Ausführungsform veranschaulicht Ziffer 604 die Rückverfolgung der Abstammung von MAD-Operationen. In mindestens einer Ausführungsform geht FindMadAncestor eine Liste von MAD-Operationen durch (z. B. 512 MAD-Operationen, die aus dem Quellcode oder dem aus dem Quellcode erzeugten Assemblercode ermittelt wurden), wobei die Operanden A, B, C und D für jede MAD-Operation im Format D=A*B+C angeordnet sind oder anderweitig kodiert werden können. In mindestens einer Ausführungsform stammen bei einer GEMM die C1...C512-Werte der MAD-Operationen von einem D1...D512-Wert einer anderen MAD-Operation (z. B. Ci aus Dj wobei i ≠ j ). In mindestens einer Ausführungsform ist D1 gleich C2, wenn D1 an einer Position im Speicher gespeichert ist und C2 von dieser Position im Speicher geladen wird, ohne dass irgendwelche Operationen dazwischengeschaltet sind, die die an dieser Position im Speicher gespeicherten Werte manipulieren würden.
  • In mindestens einer Ausführungsform muss ein C-Wert einer ersten MAD-Operation von einem D-Wert einer anderen, zweiten MAD-Operation stammen, um eine optimierbare GEMM- oder GEMM-ähnliche Operation zu sein. In mindestens einer Ausführungsform zeigt ein C-Wert einer MAD-Operation, der von einer anderen Stelle stammt, z. B. aus dem gemeinsamen Speicher oder dem globalen Speicher, oder eine Konstante ist, an, dass es sich nicht um eine optimierbare GEMM-Operation handelt. In mindestens einer Ausführungsform muss jeder C-Wert aus einem entsprechenden D-Wert stammen, damit es eine innere Reihe gibt, in der alle äußeren Produkte summiert werden.
  • In mindestens einer Ausführungsform veranschaulicht Ziffer 604 Techniken zum Bestimmen der Abstammung. In mindestens einer Ausführungsform zeigen gekrümmte Pfeile, wie dargestellt, MAD-Operationen, die Vorfahren füreinander sind. In mindestens einer Ausführungsform gilt: Wenn alle MADs eines ersten äußeren Produkts Vorfahren aller MADs eines zweiten äußeren Produkts sind, dann ist das erste äußere Produkt ein Vorfahre des zweiten äußeren Produkts. In mindestens einer Ausführungsform wird die Summierung entlang der k-Dimension durchgeführt, wie in 2 dargestellt. In mindestens einer Ausführungsform erhält ein Compiler wie OCG einen Operanden einer ersten MAD-Operation und bestimmt, von welcher Anweisung dieser Operand stammt, und diese Anweisung wird daraufhin überprüft, ob es sich um einen Operanden einer anderen MAD-Operation handelt.
  • 7 veranschaulicht ein Diagramm 700, das Techniken zur Erkennung von GEMM und GEMM-ähnlichen Operationen gemäß mindestens einer Ausführungsform beschreibt. In mindestens einer Ausführungsform veranschaulichen 4 - 7 eine Abfolge von Schritten zum Erfassen eines zu optimierenden GEMM- oder GEMM-ähnlichen Betriebs. In mindestens einer Ausführungsform veranschaulicht die Ziffer 702 einen Code oder Pseudocode zur Implementierung von Techniken zur Erkennung von GEMM- und GEMM-ähnlichen Operationen oder eines Abschnitts davon und die Ziffer 704 veranschaulicht die Erkennung einer gültigen inneren Reihe. In mindestens einer Ausführungsform wird eine Liste von MAD-Operationen (z. B. basierend auf in Verbindung mit 3 beschriebenen Techniken gesammelt) in äußere Produkten organisiert. In mindestens einer Ausführungsform ist eine Liste von MAD-Operationen einer Schleife als äußeres Produkt nach Operand und äußeres Produkt nach Ladung organisiert.
  • In mindestens einer Ausführungsform veranschaulicht 7 eine Technik zum Bestimmen, ob zwei oder mehr äußere Produkte eine innere Reihe bilden. In mindestens einer Ausführungsform werden die in Verbindung mit 6 beschriebenen Techniken durchgeführt, um zu bestimmen, dass alle äußeren Produkte einer kandidierenden GEMM Operation Vorfahren aufweisen, die ebenfalls äußere Produkte sind. In mindestens einer Ausführungsform umfasst das Bestimmen einer gültigen inneren Reihe das Bestimmen, dass alle äußeren Produkte einer kandidierenden GEMM-Operation einen Zyklus bilden, so dass OPBO1 ein Vorfahre von OPBO2 ist, OPBO2 ein Vorfahre von OPBO3 ist und so weiter, bis OPBON ein Vorfahre von OPBO1 ist, wodurch ein Zyklus oder eine Schleife vervollständigt wird und eine gültige innere Reihe von äußeren Produkten vervollständigt wird. In mindestens einer Ausführungsform bezieht sich ein Zyklus auf einen Graphen in der Graphentheorie und es können alle geeigneten graphentheoretischen Techniken eingesetzt werden, um zu bestimmen, ob sich eine Schleife von OPBOs schließt, wie in Ziffer 704 gezeigt In mindestens einer Ausführungsform wird die Strukturinformation eines GEMM als Datenstruktur kodiert und von einem GEMM-Detektor erzeugt, der eine in einem Compiler implementierte Softwarekomponente sein kann. In mindestens einer Ausführungsform fügt ein GEMM-Pipeliner dem Abhängigkeitsgraphen eines Compilers Befehlsabhängigkeiten hinzu, die eine bestimmte Reihenfolge zwischen den Befehlen erzwingen, die verhindert, dass bestimmte Operationen zu früh ausgeführt werden. In mindestens einer Ausführungsform führt ein zu frühes Laden von Daten für einen Operanden zu einer schlechteren Registerzuweisung, da mehr aktive Register vorhanden sind, und ein zu spätes Laden von Daten für einen Operanden führt zu Speicherstaus. In mindestens einer Ausführungsform ist ein Zyklus nicht erforderlich, damit ein GEMM oder eine GEMM-ähnliche Operation optimierbar ist, und die in Verbindung mit 7 beschriebenen Techniken zur Überprüfung, ob eine innere Reihe eine Schleife bildet, werden nicht angewendet, um zu bestimmen, ob ein GEMM optimierbar ist.
  • In mindestens einer Ausführungsform definieren die in Verbindung mit den 4-7 beschriebenen Techniken eine GEMM- oder GEMM-ähnliche Operation als eine innere Reihe von äußeren Produkten. In mindestens einer Ausführungsform bezieht sich eine GEMM-ähnliche Operation auf einen Satz von Operationen im Quellcode, der eine Berechnung einer Vielzahl von MAD-Operationen beinhaltet, die eine innere Reihe äußerer Produkte bildet. In mindestens einer Ausführungsform gelten die hier beschriebenen Techniken, die sich auf die Optimierung von GEMM-Operationen beziehen, auch für andere Matrixoperationen wie Faltungen und andere GEMM-ähnliche Operationen. In mindestens einer Ausführungsform ist die GEMM-ähnliche Operation eine oder mehrere der folgenden, nicht einschränkenden Beispiele oder beinhaltet diese: allgemeine Matrix-Matrix-Multiplikation (GEMM); Faltung (CONV); w*grad (Gewichtsgradient); dgrad (Datengradient); filterActs; syrk; trmm; schur_complement; svd; magma_bdmm; row_rotate_batch oder col_rotate_batch; gesvda; rnn; impli; ParticleCollision; stack_mm_mnk_kepler. In mindestens einer Ausführungsform werden Beispiele für GEMM-ähnliche Operationen an anderer Stelle in dieser Offenbarung ausführlicher beschrieben, z. B. im Zusammenhang mit 1. Gemäß mindestens einer Ausführungsform erkennt ein Compiler, der Quellcode kompiliert, eine GEMM-ähnliche Operation und bestimmt Strukturinformationen, die verwendet werden, um eine Art und Weise zu bestimmen, in der Abschnitte von Daten einer GEMM- oder GEMM-ähnlichen Operation geladen werden und entsprechend maschinenlesbaren ausführbaren Code erzeugen. In mindestens einer Ausführungsform können die in Verbindung mit GEMM-Operationen beschriebenen Techniken auch auf andere Arten von GEMM-ähnlichen Operationen angewendet werden.
  • In mindestens einer Ausführungsform verwendet ein Compiler wie OCG GEMM-Strukturinformationen, um einen Prozess zur Kompilierung von Quellcode zu verbessern (z. B. zu optimieren), indem er Sequenzen von Operationen zum Laden von Daten und Durchführen von Berechnungen in einer effizienteren Weise anordnet. In mindestens einer Ausführungsform erkennt ein Compiler eine GEMM- oder GEMM-ähnliche Struktur und verwendet deren Strukturinformationen, um den Operanden D/C (wobei der Operand D einer MAD-Operation der Operand C einer anderen MAD-Operation sein kann) und den Operanden A und B Register zuzuweisen. In mindestens einer Ausführungsform berechnet ein Compiler, wie viele Register für eine GEMM-Schleife erforderlich sind, mit Ausnahme der Endschleife und jeglichen Nicht-GEMM-Codes, die getrennt berücksichtigt werden können. In mindestens einer Ausführungsform sind Ladeoperationen, die Daten aus übergeordneten Speicher-Speichersystemen in die Prozessorregister holen, zwischen Rechenoperationen geschaltet, die Berechnungen durchführen, sobald die Daten geladen sind. In mindestens einer Ausführungsform ist ein Compiler in der Lage, basierend auf GEMM-Strukturinformationen Scoreboards exakt äußeren Produkten zuzuordnen. In mindestens einer Ausführungsform können äußere Produkte nach Ladung in äußere Produkte nach Operanden aufgeteilt werden, um ein feineres Pipelining zu ermöglichen.
  • 8 zeigt ein anschauliches Beispiel für einen Prozess 800 zur Erkennung und Optimierung von Matrixoperationen gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird einiges oder alles des Prozesses 800 (oder ein anderer hierin beschriebener Prozess oder Variationen und/oder Kombinationen davon) unter der Steuerung von einem oder mehreren Computersystemen durchgeführt, die mit ausführbaren Anweisungen konfiguriert sind, und als Code (z. B. ausführbare Anweisungen, ein oder mehrere Computerprogramme oder eine oder mehrere Anwendungen), der zusammen auf einem oder mehreren Prozessoren ausgeführt wird, durch Hardware, Software oder Kombinationen davon implementiert sein können. In mindestens einer Ausführungsform ist Code auf einem computerlesbaren Speichermedium in Form eines Computerprogramms, das eine Vielzahl von computerlesbaren Anweisungen umfasst, die durch einen oder mehrere Prozessoren ausgeführt werden können, gespeichert. Ein computerlesbares Speichermedium ist in mindestens einer Ausführungsform ein nichttransitorisches computerlesbares Medium. In mindestens einer Ausführungsform werden mindestens einige computerlesbare Anweisungen, die zum Durchführen des Prozesses 800 verwendbar sind, nicht ausschließlich unter Verwendung von transitorischen Signalen (z. B. einer sich ausbreitenden vorübergehenden elektrischen oder elektromagnetischen Übertragung) gespeichert. Ein nichttransitorisches computerlesbares Medium beinhaltet nicht notwendigerweise eine nichttransitorische Datenspeicherschaltung (z. B. Puffer, Caches und Warteschlangen) innerhalb von Transceivern für transitorische Signale. In mindestens einer Ausführungsform wird der Prozess 800 zumindest teilweise durch einen Compiler wie OCG implementiert.
  • In mindestens einer Ausführungsform ist ein System, das den Prozess 800 durchführt, so konfiguriert, dass es 802 eine oder mehrere Matrixoperationen erkennt. In mindestens einer Ausführungsform erhält ein Compiler Quellcode (z. B. als Reaktion auf einen Befehl eines Benutzers, Quellcode zu kompilieren) und erzeugt Assemblercode. In mindestens einer Ausführungsform generiert ein Compiler Assemblercode aus Quellcode. In mindestens einer Ausführungsform werden Strukturinformationen für eine oder mehrere GEMMs ermittelt, indem eine Vielzahl von MAD-Operationen daraufhin untersucht wird, ob und auf welche Weise (z. B. Struktur der äußeren und inneren Produkte) sie eine GEMM oder GEMM-ähnliche Operation bilden. In mindestens einer Ausführungsform verwendet ein GEMM-Optimierer strukturelle Informationen, um eine Vielzahl von Abhängigkeiten zu bestimmen, die von einem Compiler während eines Kompilierungsprozesses verwendet werden, um maschinenlesbaren, ausführbaren Code zu erzeugen, der verhindert, dass bestimmte, einer Matrixmultiplikation zugeordnete Operationen zum Laden von Daten vor bestimmten anderen Anweisungen abgerufen werden. In mindestens einer Ausführungsform führt das Rechensystem, bei dem es sich um dasselbe oder ein anderes Rechensystem als dasjenige handeln kann, das den Quellcode kompiliert hat, um einen optimierten ausführbaren Code zu erzeugen, ein Programm mit dem genannten ausführbaren Code aus, das als Ergebnis der Ausführung durch einen oder mehrere Prozessoren 804 Daten lädt, die Matrixoperationen gemäß den Strukturinformationen entsprechen. In mindestens einer Ausführungsform sind die Datenladungen mit Additions- und Multiplikationsoperationen verschachtelt. In mindestens einer Ausführungsform umfasst der von einem Compiler erzeugte ausführbare Code Opcodes zum Laden von Daten für Abschnitte einer Matrixmultiplikation in Register, die mit Rechenoperationen verschachtelt sind, die Operanden multiplizieren und addieren, die über die genannten Register zugänglich sind.
  • In mindestens einer Ausführungsform wird der Prozess 800 zumindest teilweise durch einen Prozessor implementiert, der eine oder mehrere Datenabrufschaltungen umfasst, um Daten abzurufen, die einer oder mehreren Matrixoperationen entsprechen, bevor die eine oder mehreren Matrixoperationen von dem Prozessor abgerufen werden. In mindestens einer Ausführungsform erkennt ein Compiler aus dem Quellcode die Strukturinformationen einer oder mehrerer Matrixoperationen. In mindestens einer Ausführungsform bestimmt ein Compiler, zumindest teilweise basierend auf strukturellen Informationen einer oder mehrerer Matrixoperationen, eine Art und Weise, wie eine Vielzahl von Abschnitten von Unterabschnitten der einen oder mehreren Matrixmultiplikationen geladen werden sollen. In mindestens einer Ausführungsform erzeugt ein Compiler basierend auf strukturellen Informationen einer Matrix-Operation eine oder mehrere Abhängigkeiten zwischen Opcodes zum Laden von Daten in Register und Opcodes zum Addieren und Multiplizieren von in die Register geladenen Operanden. In mindestens einer Ausführungsform erzeugt ein Compiler ausführbaren Code gemäß einer oder mehrerer Abhängigkeiten, die die Berechnung von GEMM oder GEMM-ähnlichen Operationen optimieren.
  • In mindestens einer Ausführungsform detektiert ein Compiler aus dem Quellcode eine oder mehrere sich gegenseitig ausschließende Vielzahl von Operationen, die einer oder mehreren sich gegenseitig ausschließenden Vielzahl von Datenabfragen entsprechen, detektiert aus dem Quellcode strukturelle Informationen über die Vielzahl von Operationen und die Vielzahl von Datenabfragen, bestimmt, basierend zumindest teilweise auf den Strukturinformationen der einen oder mehreren Matrixoperationen und der einen oder mehreren Datenabrufe, eine Art und Weise, in der eine Vielzahl von Abschnitten der Daten zu laden ist, und erzeugt gemäß der bestimmten Art und Weise einen ausführbaren Code, der, wenn er ausgeführt wird, bewirkt, dass die eine oder mehreren Datenabrufschaltungen die Daten abrufen, bevor die eine oder mehreren Matrixoperationen von dem Prozessor abgerufen werden. In mindestens einer Ausführungsform eine oder mehrere Datenabrufschaltungen, um aus dem Quellcode Strukturinformationen einer oder mehrerer Matrixoperationen zu erkennen, indem sie mindestens: aus dem Quellcode eine Vielzahl von Multiplikations- und Additionsoperationen der einen oder mehreren Matrixoperationen erkennen; aus dem Quellcode eine Vielzahl von Datenabrufen erkennen, die der einen oder mehreren Operationen entsprechen; aus der Vielzahl von Multiplikations- und Additionsoperationen eine sich gegenseitig ausschließende Sammlung von Multiplikations- und Additionsoperationen und eine entsprechende sich gegenseitig ausschließende Sammlung von Ladeoperationen erkennen; und eine Reihenfolge der sich gegenseitig ausschließenden Sammlungen von Operationen erkennen. In mindestens einer Ausführungsform umfasst eine Art des Ladens einer Vielzahl von Abschnitten von Daten Abhängigkeiten, die einen Compiler veranlassen, Anweisungen zum Abrufen von Abschnitten der Daten mit Anweisungen zum Berechnen von Unteroperationen einer oder mehrerer Matrixoperationen zu verschachteln. In mindestens einer Ausführungsform ist ein äußeres Produkt ein Beispiel für eine Art von sich gegenseitig ausschließender Sammlung von Multiplikations- und Additionsoperationen mit einer entsprechenden sich gegenseitig ausschließenden Operation von Ladeoperationen. In mindestens einer Ausführungsform handelt es sich bei einer Matrixoperation mit einer inneren Reihe von äußeren Produkten um eine optimierbare Matrixoperation.
  • 9 zeigt ein anschauliches Beispiel für einen Prozess 900 zur Erkennung und Optimierung von Matrixoperationen gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird einiges oder alles des Prozesses 900 (oder ein anderer hierin beschriebener Prozess oder Variationen und/oder Kombinationen davon) unter der Steuerung von einem oder mehreren Computersystemen durchgeführt, die mit ausführbaren Anweisungen konfiguriert sind, und als Code (z. B. ausführbare Anweisungen, ein oder mehrere Computerprogramme oder eine oder mehrere Anwendungen), der zusammen auf einem oder mehreren Prozessoren ausgeführt wird, durch Hardware, Software oder Kombinationen davon implementiert sein können. In mindestens einer Ausführungsform ist Code auf einem computerlesbaren Speichermedium in Form eines Computerprogramms, das eine Vielzahl von computerlesbaren Anweisungen umfasst, die durch einen oder mehrere Prozessoren ausgeführt werden können, gespeichert. Ein computerlesbares Speichermedium ist in mindestens einer Ausführungsform ein nichttransitorisches computerlesbares Medium. In mindestens einer Ausführungsform werden mindestens einige computerlesbare Anweisungen, die zum Durchführen des Prozesses 900 verwendbar sind, nicht ausschließlich unter Verwendung von transitorischen Signalen (z. B. einer sich ausbreitenden vorübergehenden elektrischen oder elektromagnetischen Übertragung) gespeichert. Ein nichttransitorisches computerlesbares Medium beinhaltet nicht notwendigerweise eine nichttransitorische Datenspeicherschaltung (z. B. Puffer, Caches und Warteschlangen) innerhalb von Transceivern für transitorische Signale. In mindestens einer Ausführungsform wird der Prozess 900 zumindest teilweise durch einen Compiler wie OCG implementiert.
  • In mindestens einer Ausführungsform ist ein System, das den Prozess 900 durchführt, konfiguriert, um Quellcode zu erhalten 902 In mindestens einer Ausführungsform umfasst der Quellcode einen Python-Quellcode, der ein Maschinenlern-Framework wie etwa PyTorch verwendet. In mindestens einer Ausführungsform wird der Quellcode von einem Benutzer eines Rechensystems erzeugt, der einen Compiler anweist, ihn zu einer ausführbaren Bibliothek oder Anwendung zu kompilieren.
  • In mindestens einer Ausführungsform ist ein System, das den Prozess 900 durchführt, so konfiguriert, dass es 904 qualifizierende MAD-Operationen identifiziert. In mindestens einer Ausführungsform wird der Quellcode in Assemblercode übersetzt, der nach qualifizierenden MAD-Operationen gescannt wird. In mindestens einer Ausführungsform beinhalten die qualifizierenden MAD-Operationen MAD-Operationen, die Daten beinhalten, die aus dem gemeinsamen Speicher geladen wurden. In mindestens einer Ausführungsform umfasst der Prozess 900 die Erhaltung von Assemblercode aus einem ersten ausführbaren Code (z. B. unter Verwendung eines Disassemblers), um optimierten ausführbaren Code zu erzeugen. In mindestens einer Ausführungsform wird eine Liste von qualifizierten MAD-Operationen erstellt und verwendet, um die Strukturinformationen einer GEMM- oder GEMM-ähnlichen Operation zu füllen. In mindestens einer Ausführungsform werden zur Identifizierung qualifizierter MAD-Operationen die in 4 beschriebenen Techniken verwendet.
  • In mindestens einer Ausführungsform ist ein System, das den Prozess 900 durchführt, so konfiguriert, dass es 906 erkennt, dass MAD-Operationen einen Satz von äußeren Produkten bilden. In mindestens einer Ausführungsform beinhaltet die Erkennung, dass MAD-Operationen einen Satz äußerer Produkte bilden, die Anwendung von Techniken, die im Zusammenhang mit 5 beschrieben sind. In mindestens einer Ausführungsform weist eine MAD-Operation vier Operanden auf, die so organisiert sind, dass D=A*B+C, wobei der Operand D ein Akkumulator ist, die Operanden A und B ein Produkt bilden und der Operand C ein Summand ist. In mindestens einer Ausführungsform, wenn ein Teil der Daten in ein Register geladen und als Operand zum Durchführen von zwei MAD-Operationen verwendet wird, sind diese MAD-Operationen Teil desselben äußeren Produkts nach Operanden (OPBO). In mindestens einer Ausführungsform sind zwei MAD-Operationen, die dieselben Daten laden, aber unterschiedliche Operanden aufweisen, Teil desselben äußeren Produkts durch Laden (OPBL). In mindestens einer Ausführungsform erkennt ein System aus einer Vielzahl von Multiplikations- und Additionsoperationen eine sich gegenseitig ausschließende Sammlung von Multiplikations- und Additionsoperationen und ihre entsprechende sich gegenseitig ausschließende Sammlung von Ladeoperationen.
  • In mindestens einer Ausführungsform ist ein System, das den Prozess 900 durchführt, so konfiguriert, dass es die MAD-Abstammung 908 erkennt. In mindestens einer Ausführungsform umfasst die Erkennung der MAD-Abstammung die Verwendung von Techniken, die im Zusammenhang mit 6 beschrieben wurden. In mindestens einer Ausführungsform umfasst das Erkennen der MAD-Abstammung das Durchlaufen einer Liste von MAD-Operationen, die aus Assemblercode (z. B. basierend auf Quellcode oder nicht optimiertem ausführbarem Code) erkannt wurden, und das Bestimmen, ob der Operand C (z. B. Summand einer MAD-Operation) vom Operand D (z. B. Akkumulator einer MAD-Operation) einer anderen MAD-Operation stammt. Wenn ein Summand einer ersten MAD-Operation von einem Akkumulator einer MAD-Operation einer zweiten MAD-Operation stammt, dann ist die zweite MAD-Operation ein Vorfahre für die erste MAD-Operation. In mindestens einer Ausführungsform, wenn alle Summanden aller MAD-Operationen in einem ersten äußeren Produkt nach Operand von Akkumulatoren von MAD-Operationen eines zweiten äußeren Produkts nach Operand stammen, dann ist die zweite OPBO ein Vorfahre der ersten OPBO. Wenn in mindestens einer Ausführungsform ein Summand einer MAD-Operation von Daten stammt, die nicht von einer anderen MAD-Operation stammen (z. B. von einer Konstanten oder von Nicht-MAD-Daten), dann handelt es sich nicht um eine optimierbare GEMM-Operation. In mindestens einer Ausführungsform lässt ein System, das einen Prozess zum Bestimmen, ob eine GEMM Operation optimierbar ist, durchführt, einen Schritt zum Erkennen der 908 MAD-Abstammung aus, da dieser entweder optional und/oder unnötig ist.
  • In mindestens einer Ausführungsform ist ein System, das den Prozess 900 durchführt, so konfiguriert, dass es 910 innere Reihen von äußeren Produkten erkennt. In mindestens einer Ausführungsform beinhaltet die Erkennung der MAD-Abstammung die Verwendung von Techniken, die in Verbindung mit 7 beschrieben sind. In mindestens einer Ausführungsform wird eine Sammlung von äußeren Produkten nach Operanden aufgelistet und topologisch analysiert, um zu bestimmen, ob sie einen geschlossenen Kreislauf bilden. In mindestens einer Ausführungsform erfordert eine innere Reihe das Bestimmen, dass ein Vorfahre für OPBO1 OPBO2ist, dass ein Vorfahre für OPBO2 OPBO3ist, und so weiter, bis festgestellt wird, dass der Vorfahre für OPBON OPBO1 ist, wodurch eine geschlossene Schleife oder ein Zyklus gebildet wird.
  • In mindestens einer Ausführungsform erzeugt ein Compiler Strukturinformationen darüber, wie ein Satz von MAD-Operationen äußere Produkte und innere Produkte bildet, indem er mindestens die Schritte 904-910 durchführt. In mindestens einer Ausführungsform umfasst die Strukturinformation einer GEMM eine Liste der Anweisungen oder Opcodes, die für Multiplikations- und Additionsoperationen verwendet werden, eine Liste der äußeren Produkte und eine Liste der inneren Produkte. In mindestens einer Ausführungsform beinhaltet die Strukturinformation sowohl eine Liste für äußere Produkte nach Operand als auch für äußere Produkte nach Ladung. In mindestens einer Ausführungsform unterscheidet eine Liste von Befehlen oder Opcodes, die angeben, welche Befehle oder Opcodes für Multiplikations- und Additionsoperationen verwendet werden, zwischen FMA3, HMMA usw., was sich darauf auswirken kann, wie Abhängigkeiten erzeugt werden, da verschiedene Implementierungen für Multiplikation und Addition unterschiedliche Leistungsmerkmale aufweisen. In mindestens einer Ausführungsform ist ein System so konfiguriert, dass es 912 Abhängigkeiten für MAD-Operationen basierend auf strukturellen Informationen einer Matrix-Operation generiert. In mindestens einer Ausführungsform veranlassen die Abhängigkeiten einen Compiler, 914 (z. B. aus Assemblercode und Abhängigkeiten) ausführbaren Code zu erzeugen, in dem Sätze von Ladungen und MAD-Operationen verschachtelt sind. In mindestens einer Ausführungsform kann ein Compiler anhand der Strukturinformationen einer GEMM bestimmen, wie viele Prozessorzyklen für das Durchführen von Datenladungen und MAD-Operationen erforderlich sind, und die Abhängigkeiten werden verwendet, um zu begrenzen, wie viele Live-Register für das Durchführen einer Matrixoperation verwendet werden. In mindestens einer Ausführungsform wird die Leistung einer Rechenumgebung mit mehreren Threads verbessert, indem begrenzt wird, wie viele Register zum Berechnen einer Matrixmultiplikation verwendet werden, während gleichzeitig ein Speicherstillstand vermieden wird. Dadurch werden mehr Register für andere Threads oder Warps verfügbar, um andere Operationen durchzuführen (z. B. eine nicht verwandte Anwendung, die auf einem anderen Thread läuft).
  • In mindestens einer Ausführungsform handelt es sich bei PTX um eine Pseudo-Assemblersprache, die in der CUDA-Programmierumgebung verwendet wird. In mindestens einer Ausführungsform unterstützt PTX gemeinsam genutzten Speicher, der von Threads in einem Block gemeinsam genutzt wird. In mindestens einer Ausführungsform unterstützt PTX Operationen zum Laden und Speichern in verschiedenen Speicherbereichen. In mindestens einer Ausführungsform können PTX-Lade- und Speicherbefehle einen oder mehrere unterschiedliche Zustandsbereiche (z. B. Speicherbänke) angeben, die eines oder mehrere der folgenden Elemente beinhalten können: Register; spezielle, nur lesbare, plattformspezifische Register; gemeinsam genutzter, nur lesbarer Speicher; globaler, von allen Threads gemeinsam genutzter Speicher; lokaler, für jeden Thread privater Speicher; an den Kernel übergebene Parameter; zwischen Threads in einem Block gemeinsam genutzter Speicher; und globaler Texturspeicher.
  • In mindestens einer Ausführungsform bezieht sich die Code-Optimierung auf Techniken, die den Code verbessern, indem sie den Speicherbedarf reduzieren, die Ausführungszeiten verkürzen, die Parallelisierung von einem oder mehreren Computerprogrammen erhöhen und jede geeignete Kombination davon. In mindestens einer Ausführungsform ist optimierter Code ein verbesserter Ablaufplan von Operationen, der besser ist als ein anderer gültiger Ablaufplan von Operationen, der dasselbe Ergebnis erzeugt, aber nicht notwendigerweise besser ist als alle möglichen Ablaufpläne und/oder nicht notwendigerweise nachweislich besser ist als alle möglichen Ablaufpläne.
  • INFERENZ- UND TRAININGSLOGIK
  • 10A veranschaulicht Inferenz- und/oder Trainingslogik 1015, die verwendet wird, um Inferenz- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Ableitungs- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt.
  • In mindestens einer Ausführungsform kann die Inferenz- und/oder Trainingslogik 1015 ohne Einschränkung Code- und/oder Datenspeicher 1001 beinhalten, um Vorwärts- und/oder Ausgabegewichtungs- und/oder Eingabe-/Ausgabedaten und/oder andere Parameter zu speichern, um Neuronen oder Schichten eines neuronalen Netzes zu konfigurieren, das in Aspekten einer oder mehrerer Ausführungsformen trainiert und/oder zum Inferenzieren verwendet wird. In mindestens einer Ausführungsform kann die Trainingslogik 1015 Code- und/oder Datenspeicher 1001 beinhalten oder an diesen gekoppelt sein, um Graphencode oder andere Software zum Steuern der Zeitsteuerung und/oder Reihenfolge zu speichern, in der Gewichtungs- und/oder andere Parameterinformationen geladen werden sollen, um Logik zu konfigurieren, einschließlich Integer- und/oder Gleitkommaeinheiten (zusammen als arithmetisch-logische Einheiten (ALUs) bezeichnet). In mindestens einer Ausführungsform lädt Code, wie etwa Diagrammcode, Gewichtungsinformationen oder Informationen zu anderen Parametern in Prozessor-ALUs auf Grundlage einer Architektur eines neuronalen Netzwerks, dem der Code entspricht. In mindestens einer Ausführungsform speichert der Code- und/oder Datenspeicher 1001 Gewichtungsparameter und/oder Eingabe-/Ausgabedaten jeder Schicht eines neuronalen Netzes, das trainiert oder in Verbindung mit einer oder mehreren Ausführungsformen während der Vorwärtspropagation von Eingabe-/Ausgabedaten und/oder Gewichtsparametern während des Trainings und/oder dem Inferenzieren unter Verwendung von Aspekten einer oder mehrerer Ausführungsformen verwendet wird. In mindestens einer Ausführungsform kann ein beliebiger Abschnitt des Code- und/oder Datenspeichers 1001 in einem anderen chipinternen oder chipexternen Datenspeicher, einschließlich des L1-, L2- oder L3-Caches oder Systemspeichers eines Prozessors, enthalten sein.
  • In mindestens einer Ausführungsform kann ein beliebiger Abschnitt des Code- und/oder Datenspeichers 1001 zu einem oder mehreren Prozessoren oder anderen Hardware-Logikvorrichtungen oder -Schaltungen intern oder extern sein. In mindestens einer Ausführungsform kann der Code und/oder Code- und/oder Datenspeicher 1001 Cache-Speicher, dynamischer zufällig adressierbarer Speicher (dynamic randomly addressable memory - „DRAM“), statischer zufällig adressierbarer Speicher (static randomly addressable memory - „SRAM“), nichtflüchtiger Speicher (z. B. Flash-Speicher) oder anderer Speicher sein. In mindestens einer Ausführungsform kann die Wahl, ob der Code- und/oder Code- und/oder Datenspeicher 1001 zum Beispiel intern oder extern von einem Prozessor ist oder DRAM, SRAM, Flash oder eine andere Speicherart umfasst, von verfügbarem chipinternen im Vergleich zu chip externen Speicher, Latenzanforderungen von ausgeführten Trainings- und/oder Ableitungsfunktionen, Batchgröße von Daten, die beim Ableitungen und/oder Trainieren eines neuronalen Netzwerkes verwendet werden, oder einer Kombination dieser Faktoren abhängen.
  • In mindestens einer Ausführungsform kann die Inferenz- und/oder Trainingslogik 1015 ohne Einschränkung einen Code- und/oder Datenspeicher 1005 beinhalten, um Rückwärts- und/oder Ausgabegewichtungs- und/oder Eingabe-/Ausgabedaten zu speichern, die Neuronen oder Schichten eines neuronalen Netzes entsprechen, das in Aspekten einer oder mehrerer Ausführungsformen trainiert und/oder zum Inferenzieren verwendet wird. In mindestens einer Ausführungsform speichert der Code- und/oder Datenspeicher 1005 Gewichtungsparameter und/oder Eingabe-/Ausgabedaten jeder Schicht eines neuronalen Netzes, die in Verbindung mit einer oder mehreren Ausführungsformen trainiert oder verwendet wird, während der Rückwärtspropagierung von Eingabe-/Ausgabedaten und/oder Gewichtungsparametern während des Trainierens und/oder Inferenzierens unter Verwendung von Aspekten einer oder mehrerer Ausführungsformen. In mindestens einer Ausführungsform kann die Trainingslogik 1015 Code- und/oder Datenspeicher 1005 beinhalten oder an diesen gekoppelt sein, um Graphencode oder andere Software zum Steuern der Zeitsteuerung und/oder Reihenfolge zu speichern, in der Gewichtungs- und/oder andere Parameterinformationen geladen werden sollen, um Logik zu konfigurieren, einschließlich Integer- und/oder Gleitkommaeinheiten (zusammen als arithmetisch-logische Einheiten (ALUs) bezeichnet). In mindestens einer Ausführungsform lädt Code, wie etwa Diagrammcode, Gewichtungsinformationen oder Informationen zu anderen Parametern in Prozessor-ALUs auf Grundlage einer Architektur eines neuronalen Netzwerks, dem der Code entspricht. In mindestens einer Ausführungsform kann ein beliebiger Abschnitt des Code- und/oder Datenspeichers 1005 in einem anderen chipinternen oder chipexternen Datenspeicher, einschließlich des L1-, L2- oder L3-Caches oder Systemspeichers eines Prozessors, enthalten sein. In mindestens einer Ausführungsform kann ein beliebiger Teil des Code- und/oder Datenspeichers 1005 auf einem oder mehreren Prozessoren oder anderen Hardwarelogikvorrichtungen oder -schaltungen intern oder extern sein. In mindestens einer Ausführungsform kann der Code- und/oder Datenspeicher 1005 ein schneller Pufferspeicher, DRAM, SRAM, ein nichtflüchtiger Speicher (z. B. Flash-Speicher) oder ein anderer Speicher sein. In mindestens einer Ausführungsform kann die Wahl, ob der Code- und/oder Datenspeicher 1005 zum Beispiel intern oder extern von einem Prozessor ist oder DRAM, SRAM, Flash oder eine andere Speicherart umfasst, von verfügbarem chipinternen im Vergleich zu chip externen Speicher, Latenzanforderungen von ausgeführten Trainings- und/oder Ableitungsfunktionen, Batchgröße von Daten, die beim Ableitungen und/oder Trainieren eines neuronalen Netzwerkes verwendet werden, oder einer Kombination dieser Faktoren abhängen.
  • In mindestens einer Ausführungsform können der Code- und/oder Datenspeicher 1001 und der Code- und/oder Datenspeicher 1005 separate Speicherstrukturen sein. In mindestens einer Ausführungsform können der Code- und/oder Datenspeicher 1001 und der Code- und/oder Datenspeicher 1005 dieselbe Speicherstruktur sein. In mindestens einer Ausführungsform können der Code- und/oder Datenspeicher 1001 und der Code- und/oder Datenspeicher 1005 teilweise dieselbe Speicherstruktur und teilweise getrennte Speicherstrukturen sein. In mindestens einer Ausführungsform kann ein beliebiger Abschnitt des Code- und/oder Datenspeichers 1001 und des Code- und/oder Datenspeichers 1005 in einem anderen chipinternen oder chipexternen Datenspeicher, einschließlich des L1-, L2- oder L3-Caches oder Systemspeichers eines Prozessors, enthalten sein.
  • In mindestens einer Ausführungsform kann die Inferenz- und/oder Trainingslogik 1015 ohne Einschränkung eine oder mehrere arithmetisch-logische Einheit(en) („ALU(s)“) 1010 beinhalten, einschließlich Integer- und/oder Gleitkommaeinheiten, um logische und/oder mathematische Operationen durchzuführen, die mindestens zum Teil auf Trainings- und/oder Inferenzcode (z. B. Graphencode) basieren oder dadurch angegeben werden, wobei ein Ergebnis davon Aktivierungen (z. B. Ausgabewerte von Schichten oder Neuronen innerhalb eines neuronalen Netzes) produzieren kann, die in einem Aktivierungsspeicher 1020 gespeichert sind und die Funktionen von Eingabe/Ausgabe- und/oder Gewichtungsparameterdaten sind, die in dem Code- und/oder Datenspeicher 1001 und/oder dem Code- und/oder Datenspeicher 1005 gespeichert sind. In mindestens einer Ausführungsform werden in dem Aktivierungsspeicher 1020 gespeicherte Aktivierungen gemäß linearer algebraischer und/oder matrixbasierter Mathematik erzeugt, die durch die ALU(s) 1010 als Reaktion auf das Durchführen von Anweisungen oder anderem Code durchgeführt wird, wobei in dem Code- und/oder Datenspeicher 1005 und/oder dem Datenspeicher 1001 gespeicherte Gewichtungswerte als Operanden zusammen mit anderen Werten, wie etwa Verzerrungswerten, Gradienteninformationen, Momentwerten oder anderen Parametern oder Hyperparametern, verwendet werden, von denen beliebige oder alle in dem Code- und/oder Datenspeicher 1005 oder dem Code- und/oder Datenspeicher 1001 oder einem anderen chipinternen oder -externen Speicher gespeichert sein können.
  • In mindestens einer Ausführungsform sind die ALU(s) 1010 innerhalb eines oder mehrerer Prozessoren oder anderer Hardware-Logikvorrichtungen oder -Schaltungen enthalten, während in einer anderen Ausführungsform die ALU(s) 1010 zu einem Prozessor oder einer anderen Hardware-Logikvorrichtung oder -Schaltung extern sein können, der/die sie verwendet (z. B. ein Koprozessor). In mindestens einer Ausführungsform können die ALUs 1010 innerhalb der Ausführungseinheiten eines Prozessors oder anderweitig innerhalb einer Bank von ALUs enthalten sein, worauf die Ausführungseinheiten eines Prozessors zugreifen können, entweder innerhalb des gleichen Prozessors oder verteilt auf unterschiedliche Prozessoren unterschiedlichen Typs (z. B. zentrale Verarbeitungseinheiten, Grafikverarbeitungseinheiten, Festfunktionseinheiten usw.). In mindestens einer Ausführungsform können sich Datenspeicher 1001, der Code- und/oder Datenspeicher 1005 und der Aktivierungsspeicher 1020 auf demselben Prozessor oder einer anderen Hardwarelogikvorrichtung oder -schaltung befinden, wohingegen sie sich in einer weiteren Ausführungsform in unterschiedlichen Prozessoren oder anderen Hardwarelogikvorrichtungen oder -schaltungen oder einer Kombination von gleichen und unterschiedlichen Prozessoren oder anderen Hardwarelogikvorrichtungen oder -schaltungen befinden können. In mindestens einer Ausführungsform kann ein beliebiger Abschnitt des Aktivierungsspeichers 1020 in einem anderen chipinternen oder chip externen Datenspeicher, einschließlich des L1-, L2- oder L3-Caches oder Systemspeichers eines Prozessors, enthalten sein. Darüber hinaus kann Ableitungs- und/oder Trainingscode mit anderem Code gespeichert werden, auf den ein Prozessor oder eine andere Hardwarelogik oder -schaltung zugreifen kann, und unter Verwendung der Abruf-, Dekodier-, Planungs-, Ausführungs-, Stilllegungs- und/oder anderen logischen Schaltungen eines Prozessors abgerufen und/oder verarbeitet werden.
  • In mindestens einer Ausführungsform kann der Aktivierungsspeicher 1020 ein schneller Pufferspeicher, DRAM, SRAM, ein nichtflüchtiger Speicher (z. B. Flash-Speicher) oder ein anderer Speicher sein. In mindestens einer Ausführungsform kann sich der Aktivierungsspeicher 1020 ganz oder teilweise innerhalb oder außerhalb eines oder mehrerer Prozessoren oder anderer logischer Schaltungen befinden. In mindestens einer Ausführungsform kann die Wahl, ob der Aktivierungsspeicher 1020 zum Beispiel intern oder extern von einem Prozessor ist oder DRAM, SRAM, Flash oder eine andere Speicherart umfasst, von verfügbarem chipinternen im Vergleich zu chipexternen Speicher, Latenzanforderungen von ausgeführten Trainings- und/oder Ableitungsfunktionen, Batchgröße von Daten, die beim Ableitungen und/oder Trainieren eines neuronalen Netzwerkes verwendet werden, oder einer Kombination dieser Faktoren abhängen. In mindestens einer Ausführungsform kann die in 10A veranschaulichte Inferenz- und/oder Trainingslogik 1015 in Verbindung mit einer anwendungsspezifischen integrierten Schaltung (ASIC) verwendet werden, wie etwa der TensorFlow® Processing Unit von Google, einer Inferenzverarbeitungseinheit (IPU) von Graphcore™ oder einem Prozessor vom Typ Nervana® (z. B. „Lake Crest“) der Intel Corp. In mindestens einer Ausführungsform kann die Inferenz-und/oder Trainingslogik 1015, die in 10A veranschaulicht ist, in Verbindung mit Hardware einer Zentraleinheit („CPU“), Hardware einer Grafikverarbeitungseinheit („GPU“) oder anderer Hardware, wie etwa feldprogrammierbaren Gatearrays („FPGA“) verwendet werden.
  • 10B veranschaulicht Inferenz- und/oder Trainingslogik 1015 gemäß mindestens einer Ausführungsform verschiedene. In mindestens einer Ausführungsform kann die Inferenz- und/oder Trainingslogik 1015 ohne Einschränkung Folgendes beinhalten: Hardwarelogik, bei der Berechnungsressourcen dediziert oder anderweitig ausschließlich in Verbindung mit Gewichtungswerten oder anderen Informationen verwendet werden, die einer oder mehreren Schichten von Neuronen innerhalb eines neuronalen Netzes entsprechen. In mindestens einer Ausführungsform kann die in 10B veranschaulichte Inferenz- und/oder Trainingslogik 1015 in Verbindung mit einer anwendungsspezifischen integrierten Schaltung (ASIC) verwendet werden, wie etwa der TensorFlow® Processing Unit von Google, einer Inferenzverarbeitungseinheit (IPU) von Graphcore™ oder einem Prozessor vom Typ Nervana® (z. B. „Lake Crest“) der Intel Corp. In mindestens einer Ausführungsform kann die Inferenz-und/oder Trainingslogik 1015, die in 10B veranschaulicht ist, in Verbindung mit Hardware einer Zentraleinheit (CPU), Hardware einer Grafikverarbeitungseinheit (GPU) oder anderer Hardware, wie etwa feldprogrammierbaren Gatearrays (FPGA) verwendet werden. In mindestens einer Ausführungsform beinhaltet die Inferenz- und/oder Trainingslogik 1015 ohne Einschränkung den Code- und/oder Datenspeicher 1001 und den Code- und/oder Datenspeicher 1005, die zum Speichern von Code (z. B. Graphencode), Gewichtungswerten und/oder anderen Informationen, einschließlich Verzerrungswerten, Gradienteninformationen, Momentwerten und/oder anderer Parameter- oder Hyperparameterinformationen, verwendet werden können. In mindestens einer Ausführungsform, die in 10B veranschaulicht ist, ist jeder von dem Code- und/oder Datenspeicher 1001 und dem Code- und/oder Datenspeicher 1005 einer dedizierten Berechnungsressource, wie etwa der Berechnungshardware 1002 bzw. der Berechnungshardware 1006, zugeordnet. In mindestens einer Ausführungsform umfasst jede von der Berechnungshardware 1002 und der Berechnungshardware 1006 eine oder mehrere ALU, die mathematische Funktionen, wie etwa lineare algebraische Funktionen, nur an Informationen durchführen, die im Code- und/oder Datenspeicher 1001 und Code- und/oder Datenspeicher 1005 gespeichert sind, deren Ergebnis im Aktivierungsspeicher 1020 gespeichert ist.
  • In mindestens einer Ausführungsform entspricht jedes der Code- und/oder Datenspeicher 1001 und 1005 und der entsprechenden Rechen-Hardware 1002 bzw. 1006 unterschiedlichen Schichten eines neuronalen Netzes, sodass die resultierende Aktivierung von einem „Speicher-/Rechenpaar 1001/1002“ des Code- und/oder Datenspeichers 1001 und der Rechen-Hardware 1002 als Eingabe einem nächsten „Speicher-/Rechenpaar 1005/1006“ des Code- und/oder Datenspeichers 1005 und der Rechen-Hardware 1006 bereitgestellt wird, um eine konzeptionelle Organisation eines neuronalen Netzes widerzuspiegeln. In mindestens einer Ausführungsform kann jedes der Speicher-/Rechenpaare 1001/1002 und 1005/1006 mehr als einer Schicht eines neuronalen Netzes entsprechen. In mindestens einer Ausführungsform können zusätzliche Speicher/Berechnungspaare (nicht gezeigt) nach oder parallel zu den Speicher/Berechnungspaaren 1001/1002 und 1005/1006 in der Inferenz- und/oder Trainingslogik 1015 beinhaltet sein.
  • TRAINING UND EINSATZ VON NEURONALEN NETZEN
  • 11 veranschaulicht das Training und den Einsatz eines tiefen neuronalen Netzes gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird das untrainierte neuronale Netz 1106 unter Verwendung eines Trainingsdatensatzes 1102 trainiert. In mindestens einer Ausführungsform ist das Trainings-Framework 1104 ein PyTorch-Framework, wohingegen das Trainings-Framework 1104 in anderen Ausführungsformen ein TensorFlow-, Boost-, Caffe-, Microsoft-Cognitive-Toolkit/CNTK-, MXNet-, Chainer-, Keras, Deeplearning4j- oder ein anderes Trainings-Framework ist. In mindestens einer Ausführungsform trainiert der Trainingsrahmen 1104 ein untrainiertes neuronales Netz 1106 und ermöglicht, dass es unter Verwendung der hierin beschriebenen Verarbeitungsressourcen trainiert wird, um ein trainiertes neuronales Netz 1108 zu erzeugen. In mindestens einer Ausführungsform können die Gewichtungen zufällig oder durch Vorabtraining unter Verwendung eines Deep-Belief-Netzes gewählt werden. In mindestens einer Ausführungsform kann das Training entweder auf überwachte, teilweise überwachte oder nicht überwachte Weise durchgeführt werden.
  • In mindestens einer Ausführungsform wird das untrainierte neuronale Netz 1106 unter Verwendung von überwachtem Lernen trainiert, wobei der Trainingsdatensatz 1102 eine Eingabe beinhaltet, die mit einer gewünschten Ausgabe für eine Eingabe gepaart ist, oder wobei der Trainingsdatensatz 1102 eine Eingabe beinhaltet, die eine bekannte Ausgabe aufweist, und eine Ausgabe des neuronalen Netzes 1106 manuell bewertet wird. In mindestens einer Ausführungsform wird das untrainierte neuronale Netz 1106 auf überwachte Weise trainiert und es verarbeitet Eingaben aus dem Trainingsdatensatz 1102 und vergleicht die resultierenden Ausgaben mit einem Satz von erwarteten oder gewünschten Ausgaben. In mindestens einer Ausführungsform werden Fehler dann durch das untrainierte neuronale Netz 1106 rückpropagiert. In mindestens einer Ausführungsform stellt der Trainingsrahmen 1104 Gewichtungen ein, die das untrainierte neuronale Netz 1106 steuern. In mindestens einer Ausführungsform beinhaltet das Trainings-Framework 1104 Werkzeuge, um zu überwachen, wie gut das untrainierte neuronale Netz 1106 zu einem Modell konvergiert, wie etwa dem trainierten neuronalen Netz 1108, das dazu geeignet ist, korrekte Antworten zu erzeugen, wie etwa in dem Ergebnis 1114, die auf Eingabedaten wie etwa einem neuen Datensatz 1112 basieren. In mindestens einer Ausführungsform trainiert der Trainingsrahmen 1104 das untrainierte neuronale Netz 1106 wiederholt, während Gewichtungen eingestellt werden, um eine Ausgabe des untrainierten neuronalen Netzes 1106 unter Verwendung einer Verlustfunktion und eines Einstellungsalgorithmus, wie etwa des stochastischen Gradientenabstiegs, zu verfeinern. In mindestens einer Ausführungsform trainiert der Trainingsrahmen 1104 das untrainierte neuronale Netz 1106, bis das untrainierte neuronale Netz 1106 eine gewünschte Genauigkeit erreicht. In mindestens einer Ausführungsform kann das trainierte neuronale Netz 1108 dann zum Implementieren einer beliebigen Anzahl von Operationen des maschinellen Lernens eingesetzt werden.
  • In mindestens einer Ausführungsform wird das untrainierte neuronale Netz 1106 unter Verwendung von nicht überwachtem Lernen trainiert, wobei das untrainierte neuronale Netz 1106 versucht, sich selbst unter Verwendung von unbeschrifteten Daten zu trainieren. In mindestens einer Ausführungsform beinhaltet der Trainingsdatensatz 1102 für nicht überwachtes Lernen Eingabedaten ohne assoziierte Ausgabedaten oder „Ground-Truth“-Daten. In mindestens einer Ausführungsform kann das untrainierte neuronale Netz 1106 Gruppierungen innerhalb des Trainingsdatensatzes 1102 lernen und bestimmen, wie einzelne Eingaben mit dem untrainierten Datensatz 1102 in Bezug stehen. In mindestens einer Ausführungsform kann unüberwachtes Training verwendet werden, um eine selbstorganisierende Karte zu erzeugen, die eine Art trainiertes neuronales Netzwerk 1108 ist, das Operationen durchführen kann, die bei der Reduzierung der Dimensionalität neuer Daten 1112 nützlich sind. In mindestens einer Ausführungsform kann nicht überwachtes Training auch verwendet werden, um Anomaliedetektion durchzuführen, was die Identifizierung von Datenpunkten in dem neuen Datensatz 1112 ermöglicht, die von normalen Mustern des neuen Datensatzes 1112 abweichen.
  • In mindestens einer Ausführungsform kann halbüberwachtes Lernen verwendet werden, wobei es sich um eine Technik handelt, bei der der Trainingsdatensatz 1102 eine Mischung aus beschrifteten und unbeschrifteten Daten beinhaltet. In mindestens einer Ausführungsform kann das Trainings-Framework 1104 verwendet werden, um inkrementelles Lernen durchzuführen, wie etwa durch Transferlerntechniken. In mindestens einer Ausführungsform ermöglicht das inkrementelle Lernen dem trainierten neuronalen Netzwerk 1108, sich an neue Daten 1112 anzupassen, ohne das Wissen zu vergessen, das dem Netzwerk während des anfänglichen Trainings eingeflößt wurde.
  • RECHENZENTRUM
  • 12 veranschaulicht ein beispielhaftes Rechenzentrum 1200, in dem mindestens eine Ausführungsform verwendet werden kann. In mindestens einer Ausführungsform beinhaltet das Rechenzentrum 1200 eine Rechenzentrumsinfrastrukturschicht 1210, eine Framework-Schicht 1220, eine Software-Schicht 1230 und eine Anwendungsschicht 1240.
  • In mindestens einer Ausführungsform kann, wie in 12 gezeigt, die Rechenzentrumsinfrastrukturschicht 1210 einen Ressourcenorchestrierer 1212, gruppierte Berechnungsressourcen 1214 und Knotenberechnungsressourcen („Knoten-CRs“) 1216(1)-1216(N) beinhalten, wobei „N“ eine beliebige ganze positive Zahl darstellt. In mindestens einer Ausführungsform können die Knoten-CR 1216(1)-1216(N) eine beliebige Anzahl von Zentraleinheiten („CPU“) oder andere Prozessoren (die Beschleuniger, feldprogrammierbare Gate-Arrays (FPGA), Grafikprozessoren usw.), Arbeitsspeichervorrichtungen (z. B. dynamischer Nur-Lese-Speicher), Datenspeichervorrichtungen (z. B. Festkörper- oder Festplattenlaufwerke), Netzwerk-Ein-/Ausgabevorrichtungen („NW E/A“), Netzwerk-Switches, virtuellen Maschinen („VM“), Leistungsmodule und Kühlmodule usw. beinhalten, ohne darauf beschränkt zu sein. In mindestens einer Ausführungsform können ein oder mehrere Knoten-CR von den Knoten-CR 1216(1)-1216(N) ein Server sein, der eine oder mehrere der vorstehend erwähnten Rechenressourcen aufweist.
  • In mindestens einer Ausführungsform können die gruppierten Rechenressourcen 1214 separate Gruppierungen von Knoten-C.R.s beinhalten, die innerhalb eines oder mehrerer Racks (nicht gezeigt) oder vieler Racks untergebracht sind, die in Rechenzentren an verschiedenen geografischen Standorten untergebracht sind (ebenfalls nicht gezeigt). Getrennte Gruppierungen von Knoten-CRs innerhalb gruppierter Berechnungsressourcen 1214 können gruppierte Rechen-, Netzwerk-, Arbeitsspeicher- oder Datenspeicherressourcen beinhalten, die konfiguriert oder zugewiesen sein können, um eine oder mehrere Arbeitslasten zu unterstützen. In mindestens einer Ausführungsform können mehrere Knoten-C.R.s, die CPUs oder Prozessoren beinhalten, innerhalb eines oder mehrerer Racks gruppiert sein, um Rechenressourcen zum Unterstützen einer oder mehrerer Arbeitslasten bereitzustellen. In mindestens einer Ausführungsform können ein oder mehrere Racks auch eine beliebige Anzahl von Leistungsmodulen, Kühlmodulen und Netz-Switches in beliebiger Kombination beinhalten.
  • In mindestens einer Ausführungsform kann der Ressourcenorchestrator 1212 eine oder mehrere Knoten-C.R.s 1216(1)-1216(N) und/oder gruppierte Rechenressourcen 1214 konfigurieren oder anderweitig steuern. In mindestens einer Ausführungsform kann der Ressourcenorchestrator 1212 eine Verwaltungsentität für Softwaregestaltungsinfrastruktur (software design infrastructure - „SDI“) für das Rechenzentrum 1200 beinhalten. In mindestens einer Ausführungsform kann der Ressourcenorchestrierer Hardware, Software oder eine Kombination davon beinhalten.
  • In mindestens einer Ausführungsform, wie in 12 gezeigt, beinhaltet die Rahmenschicht 1220 einen Aufgaben-Scheduler 1232, einen Konfigurationsverwalter 1234, einen Ressourcenverwalter 1236 und ein verteiltes Dateisystem 1238. In mindestens einer Ausführungsform kann die Framework-Schicht 1220 einen Rahmen zum Unterstützen von Software 1232 der Software-Schicht 1230 und/oder einer oder mehreren Anwendung(en) 1242 der Anwendungsschicht 1240 beinhalten. In mindestens einer Ausführungsform kann/können die Software 1232 bzw. die Anwendung(en) 1242 webbasierte Dienst-Software oder - Anwendungen beinhalten, wie etwa diejenigen, die von Amazon Web Services, Google Cloud und Microsoft Azure bereitgestellt werden. In mindestens einer Ausführungsform kann die Frameworkschicht 1220 eine Art von freiem und Open-Source-Software-Webanwendungs-Framework sein, ohne darauf beschränkt zu sein, wie etwa Apache Spark™ (im Folgenden „Spark“), welches das verteilte Dateisystem 1238 für umfangreiche Datenverarbeitungen (z. B. „Big Data“) nutzen kann. In mindestens einer Ausführungsform kann der Aufgaben-Scheduler 1232 einen Spark-Treiber beinhalten, um die Planung von Arbeitslasten zu erleichtern, die durch verschiedene Schichten des Rechenzentrums 1200 unterstützt werden. In mindestens einer Ausführungsform kann der Konfigurationsverwalter 1234 dazu in der Lage sein, unterschiedliche Schichten, wie etwa die Software-Schicht 1230 und die Framework-Schicht 1220, einschließlich Spark und des verteilten Dateisystems 1238, zu konfigurieren, um die Verarbeitung großer Datenmengen zu unterstützen. In mindestens einer Ausführungsform kann der Ressourcenverwalter 1236 dazu in der Lage sein, geclusterte oder gruppierte Rechenressourcen zu verwalten, die zur Unterstützung des verteilten Dateisystems 1238 und des Aufgaben-Schedulers 1232 abgebildet oder zugewiesen sind. In mindestens einer Ausführungsform können geclusterte oder gruppierte Berechnungsressourcen eine gruppierte Berechnungsressource 1214 auf der Rechenzentrumsinfrastrukturschicht 1210 beinhalten. In mindestens einer Ausführungsform kann sich der Ressourcenverwalter 1236 mit dem Ressourcenorchestrator 1212 koordinieren, um diese abgebildeten oder zugewiesenen Rechenressourcen zu verwalten.
  • In mindestens einer Ausführungsform kann die in der Software-Schicht 1230 enthaltene Software 1232 Software beinhalten, die mindestens durch Abschnitte der Knoten-C.R.s 1216(1)-1216(N), der gruppierten Rechenressourcen 1214 und/oder des verteilten Dateisystems 1238 der Framework-Schicht 1220 verwendet wird. Zu einem oder mehreren Typen von Software können Software zum Durchsuchen von Internet-Webseiten, Software zum Scannen von E-Mails auf Viren, Datenbank-Software und Software für Streaming-Videoinhalte gehören, ohne darauf beschränkt zu sein.
  • In mindestens einer Ausführungsform können die in der Anwendungsschicht 1240 enthaltenen Anwendung(en) 1242 einen oder mehrere Typen von Anwendungen beinhalten, die mindestens durch Abschnitte der Knoten-C.R.s 1216(1)-1216(N), der gruppierten Rechenressourcen 1214 und/oder des verteilten Dateisystems 1238 der Framework-Schicht 1220 verwendet werden. Eine oder mehrere Arten von Anwendungen können eine beliebige Anzahl einer Genomikanwendung, einer kognitiven Rechenanwendung und einer maschinellen Lernanwendung umfassen, die Trainings- oder Ableitungssoftware beinhaltet, Framework-Software des maschinellen Lernens (z. B. PyTorch, TensorFlow, Caffe usw.) oder andere maschinelle Lernanwendungen beinhalten, ohne darauf beschränkt zu sein, die in Verbindung mit einer oder mehreren Ausführungsformen verwendet werden.
  • In mindestens einer Ausführungsform können Konfigurationsverwalter 1234, Ressourcenverwalter 1236 und Ressourcenorchestrierer 1212 eine beliebige Anzahl und Art von selbstmodifizierenden Handlungen auf Grundlage einer beliebigen Menge und Art von Daten umsetzen, die auf jede technisch machbare Weise erfasst werden. In mindestens einer Ausführungsform können selbstmodifizierende Handlungen einen Rechenzentrumsbetreiber des Rechenzentrums 1200 dahingehend entlasten, möglicherweise schlechte Konfigurationsentscheidungen zu treffen und möglicherweise nicht ausgelastete und/oder schlecht funktionierende Abschnitte eines Rechenzentrums zu vermeiden.
  • In mindestens einer Ausführungsform kann das Rechenzentrum 1200 Werkzeuge, Dienste, Software oder andere Ressourcen beinhalten, um ein oder mehrere Modelle für maschinelles Lernen zu trainieren oder Informationen unter Verwendung eines oder mehrerer Modelle für maschinelles Lernen gemäß einer oder mehrerer hierin beschriebener Ausführungsformen vorherzusagen oder zu inferenzieren. Zum Beispiel kann in mindestens einer Ausführungsform ein Modell für maschinelles Lernen trainiert werden, indem Gewichtungsparameter gemäß einer Architektur eines neuronalen Netzes unter Verwendung von Software und Rechenressourcen berechnet werden, die vorstehend in Bezug auf das Rechenzentrum 1200 beschrieben sind. In mindestens einer Ausführungsform können trainierte Modelle für maschinelles Lernen, die einem oder mehreren neuronalen Netzen entsprechen, verwendet werden, um Informationen unter Verwendung der vorstehend in Bezug auf das Rechenzentrum 1200 beschriebenen Ressourcen zu inferenzieren oder vorherzusagen, indem Gewichtungsparameter verwendet werden, die durch eine oder mehrere hierin beschriebene Trainingstechniken berechnet werden.
  • In mindestens einer Ausführungsform kann das Rechenzentrum CPUs, anwendungsspezifische integrierte Schaltungen (ASICs), GPUs, FPGAs oder andere Hardware verwenden, um Training und/oder Inferenzieren unter Verwendung der vorstehend beschriebenen Ressourcen durchzuführen. Darüber hinaus können eine oder mehrere der vorstehend beschriebenen Software- und/oder Hardware-Ressourcen als Dienst konfiguriert sein, um Benutzern das Trainieren oder Durchführen des Inferenzierens von Informationen zu ermöglichen, wie etwa Bilderkennung, Spracherkennung oder andere Dienste der künstlichen Intelligenz.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder TrainingsOperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Ableitungs- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann die Inferenz- und/oder Trainingslogik 1015 in dem System aus 12 für Inferenz- oder Vorhersageoperationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von Trainingsoperationen für neuronale Netze, Funktionen und/oder Architekturen von neuronalen Netzen oder hierin beschriebenen Anwendungsfällen für neuronale Netze berechnet wurden.
  • In mindestens einer Ausführungsform wird 10 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • AUTONOMES FAHRZEUG
  • 13A veranschaulicht ein beispielhaftes autonomes Fahrzeug 1300 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann das autonome Fahrzeug 1300 (hierin alternativ als „Fahrzeug 1300“ bezeichnet) ohne Einschränkung ein Personenkraftwagen sein, wie etwa ein Auto, ein Truck, ein Bus und/oder ein anderer Fahrzeugtyp, der einen oder mehrere Fahrgäste aufnimmt. In mindestens einer Ausführungsform kann das Fahrzeug 1a00 ein Sattelschlepper sein, der zum Transport von Fracht verwendet wird. In mindestens einer Ausführungsform kann das Fahrzeug 1a00 ein Flugzeug, ein Roboterfahrzeug oder eine andere Art von Fahrzeug sein.
  • Autonome Fahrzeuge können im Hinblick auf Automatisierungslevels 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 sind. In einer oder mehreren Ausführungsformen kann das Fahrzeug 1300 zu einer Funktionalität gemäß einem oder mehreren von Level 1 - Level 5 der Levels für autonomes Fahren in der Lage sein. Zum Beispiel kann in mindestens einer Ausführungsform das Fahrzeug 1300 in Abhängigkeit von der Ausführungsform zu einer bedingten Automatisierung (Level 3), einer hohen Automatisierung (Level 4) und/oder einer vollständigen Automatisierung (Level 5) in der Lage sein.
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 ohne Einschränkung Komponenten wie etwa ein Fahrgestell, eine Fahrzeugkarosserie, Räder (z. B. 2, 4, 6, 8, 18 usw.), Reifen, Achsen und andere Komponenten eines Fahrzeugs beinhalten. In mindestens einer Ausführungsform kann das Fahrzeug 1300 ohne Einschränkung ein Antriebssystem 1350 beinhalten, wie etwa eine Brennkraftmaschine, ein Hybridelektrotriebwerk, einen vollelektrischen Motor und/oder einen anderen Typ von Antriebssystem. In mindestens einer Ausführungsform kann das Antriebssystem 1350 mit einem Antriebsstrang des Fahrzeugs 1300 verbunden sein, der ohne Einschränkung ein Getriebe beinhalten kann, um den Antrieb des Fahrzeugs 1300 zu ermöglichen. In mindestens einer Ausführungsform kann das Antriebssystem 1350 als Reaktion auf das Empfangen von Signalen von einer Drossel/Fahrpedal(en) 1352 gesteuert werden.
  • In mindestens einer Ausführungsform wird ein Lenksystem 1354, das ohne Einschränkung ein Lenkrad beinhalten kann, verwendet, um ein Fahrzeug 1300 zu lenken (z. B. entlang eines gewünschten Pfads oder einer gewünschten Route), wenn ein Antriebssystem 1350 in Betrieb ist (z. B., wenn das Fahrzeug in Bewegung ist). In mindestens einer Ausführungsform kann das Lenksystem 1354 Signale von Lenkaktor(en) 1356 empfangen. Für die vollständige Automatisierungsfunktionalität (Level 5) kann ein Lenkrad optional sein. In mindestens einer Ausführungsform kann ein Bremssensorsystem 1346 verwendet werden, um Fahrzeugbremsen als Reaktion auf das Empfangen von Signalen von Bremsaktor(en) 1348 und/oder Bremssensoren zu betreiben.
  • In mindestens einer Ausführungsform stellen Steuerung(en) 1336, die ohne Einschränkung ein oder mehrere Systeme auf einem Chip (system on chips - „SoCs“) (in 13A nicht gezeigt) und/oder Grafikverarbeitungseinheit(en) („GPU(s)“) beinhalten können, einer/einem oder mehreren Komponenten und/oder Systemen des Fahrzeugs 1300 Signale (die z. B. für Befehle repräsentativ sind) bereit. Zum Beispiel können in mindestens einer Ausführungsform die Steuerung(en) 1336 Signale zum Betreiben von Fahrzeugbremsen über die Bremsaktor(en) 1348, zum Betreiben des Lenksystems 1354 über die Lenkaktor(en) 1356, zum Betreiben des Antriebssystems 1350 über die Drossel/Fahrpedal(e) 1352 senden. Die Steuerung(en) 1336 können eine oder mehrere bordeigene (z. B. integrierte) Rechenvorrichtungen (z. B. Supercomputer) beinhalten, die Sensorsignale verarbeiten und Betriebsbefehle ausgeben (z. B. Signale, die Befehle darstellen), um autonomes Fahren zu ermöglichen und/oder einen menschlichen Fahrer beim Führen des Fahrzeugs 1300 zu unterstützen. In mindestens einer Ausführungsform können die Steuerung(en) 1336 eine erste Steuerung 1336 für Funktionen des autonomen Fahrens, eine zweite Steuerung 1336 für funktionelle Sicherheitsfunktionen, eine dritte Steuerung 1336 für eine Funktionalität der künstlichen Intelligenz (z. B. maschinelles Sehen), eine vierte Steuerung 1336 für eine Infotainment-Funktionalität, eine fünfte Steuerung 1336 für Redundanz in Notfällen und/oder andere Steuerungen beinhalten. In mindestens einer Ausführungsform kann eine einzelne Steuerung 1336 zwei oder mehr der vorstehenden Funktionalitäten handhaben, können zwei oder mehr Steuerungen 1336 eine einzelne Funktionalität handhaben und/oder eine beliebige Kombination davon.
  • In mindestens einer Ausführungsform stellen die Steuerung(en) 1336 Signale zum Steuern einer/eines oder mehrerer Komponenten und/oder Systeme des Fahrzeugs 1300 als Reaktion auf Sensordaten bereit, die von einem oder mehreren Sensoren empfangen werden (z. B. Sensoreingaben). In mindestens einer Ausführungsform können Sensordaten zum Beispiel und ohne Einschränkung empfangen werden von Sensor(en) 1358 von globalen Navigationssatellitensystemen (global navigation satellite systems - „GNSS“) (z. B. Sensor(en) des globalen Positionsbestimmungssystems), RADAR-Sensor(en) 1360, Ultraschallsensor(en) 1362, LIDAR-Sensor(en) 1364, Sensor(en) 1366 einer Trägheitsmesseinheit (inertial measurement unit - „IMU“) (z. B. Beschleunigungsmesser(n), Gyroskop(en), einem Magnetkompass(en), Magnetometer(n) usw.), Mikrofon(en) 1396, Stereokamera(s) 1368, Weitsichtkamera(s) 1370 (z. B. Fischaugenkameras), Infrarotkamera(s) 1372, Rundumkamera(s) 1374 (z. B. 360-Grad-Kameras), Langstreckenkameras (in 13A nicht gezeigt), Mittelstreckenkamera(s) (in 13A nicht gezeigt), Geschwindigkeitssensor(en) 1344 (z. B. zum Messen der Geschwindigkeit des Fahrzeugs 1300), Schwingungssensor(en) 1342, Lenksensor(en) 1340, Bremssensor(en) (z. B. als Teil des Bremssensorsystems 1346) und/oder anderen Sensortypen.
  • In mindestens einer Ausführungsform können eine oder mehrere der Steuerung(en) 1336 Eingaben (z. B. durch Eingabedaten dargestellt) von einem Kombiinstrument 1332 des Fahrzeugs 1300 empfangen und Ausgaben (z. B. durch Ausgabedaten, Anzeigedaten usw. dargestellt) über eine Anzeige 1334 einer Mensch-Maschine-Schnittstelle (human-machine interface - „HMI“), einen akustischen Melder, einen Lautsprecher und/oder über andere Komponenten des Fahrzeugs 1300 bereitstellen. In mindestens einer Ausführungsform können Ausgaben Informationen wie etwa Fahrzeuggeschwindigkeit, Drehzahl, Zeit, Kartendaten (z. B. eine hochauflösende Karte (in 13A nicht gezeigt), Standortdaten (z. B. den Standort des Fahrzeugs 1300, wie etwa auf einer Karte), Richtung, Standort anderer Fahrzeuge (z. B. ein Belegungsgitter), Informationen über Objekte und den Status von Objekten, wie durch die Steuerung(en) 1336 wahrgenommen, usw. beinhalten. Zum Beispiel kann in mindestens einer Ausführungsform die HMI-Anzeige 1334 Informationen über das Vorhandensein eines oder mehrerer Objekte (z. B. eines Straßenschilds, eines Warnschilds, einer umschaltenden Ampel usw.) und/oder Informationen über Fahrmanöver anzeigen, die das Fahrzeug durchgeführt hat, gerade durchführt oder durchführen wird (z. B. jetzt die Spur wechseln, in zwei Meilen die Ausfahrt 34B nehmen usw.).
  • In mindestens einer Ausführungsform beinhaltet das Fahrzeug 1300 ferner eine Netzschnittstelle 1324, die drahtlose Antenne(n) 1326 und/oder Modem(s) zum Kommunizieren über ein oder mehrere Netze verwenden kann. Zum Beispiel kann in mindestens einer Ausführungsform die Netzwerkschnittstelle 1324 in der Lage sein, über Long-Term-Evolution („LTE“), Breitband-Codemultiplexverfahren (Wideband Code Division Multiple Access - „WCDMA“), Universal Mobile Telecommunications System („UMTS“), Global System for Mobile Communication („GSM“), IMT-CDMA-Multi-Carrier („CDMA2000“) usw. zu kommunizieren. In mindestens einer Ausführungsform können die drahtlose(n) Antenne(n) 1326 auch die Kommunikation zwischen Objekten in der Umgebung (z. B. Fahrzeugen, mobilen Vorrichtungen usw.) unter Verwendung von (einem) lokalen Netzwerk(en), wie z. B. Bluetooth, Bluetooth Low Energy („LE“), Z-Wave, ZigBee usw., und/oder (einem) Weitverkehrsnetzwerk(en) mit geringer Leistung (low power wide-area network - „LPWANs“), wie z. B. LoRaWAN, SigFox usw., ermöglichen.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder TrainingsOperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann eine Ableitungs- und/oder Trainingslogik 1015 im System der 13A zum Ableiten oder Vorhersagen von Operationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von neuronalen Netzwerktrainingsoperationen, Funktionen und/oder Architekturen von neuronalen Netzwerken oder in dieser Schrift beschriebenen Anwendungsfällen von neuronalen Netzwerken berechnet wurden.
  • In mindestens einer Ausführungsform wird 13A verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 13B veranschaulicht ein Beispiel für Kamerastandorte und Sichtfelder für das autonome Fahrzeug 1300 aus 13A gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform stellen die Kameras und die jeweiligen Sichtfelder eine beispielhafte Ausführungsform dar und sie sollen nicht einschränkend sein. Zum Beispiel können in mindestens einer Ausführungsform zusätzliche und/oder alternative Kameras enthalten sein und/oder die Kameras können sich an unterschiedlichen Stellen an dem Fahrzeug 1300 befinden.
  • In mindestens einer Ausführungsform können Kameratypen für Kameras Digitalkameras beinhalten, ohne darauf beschränkt zu sein, die zur Verwendung mit Komponenten und/oder Systemen des Fahrzeugs 1300 ausgelegt sind. Die Kamera(s) können mit dem Automobilsicherheitsintegritätslevel (automotive safety integrity level - „ASIL“) B und/oder mit einem anderen ASIL betrieben werden. In mindestens einer Ausführungsform können die Kameratypen in Abhängigkeit von der Ausführungsform zu einer beliebigen Bildaufnahmerate in der Lage sein, wie etwa 60 Einzelbilder pro Sekunde (frames per second - fps), 1220 fps, 240 fps usw. In mindestens einer Ausführungsform können Kameras dazu in der Lage sein, Rollblendenverschlüsse, globale Blendenverschlüsse, einen anderen Typ von Blendenverschluss oder eine Kombination davon zu verwenden. In mindestens einer Ausführungsform kann das Farbfilterarray ein Red-Clear-Clear-Clear-(„RCCC“-)Farbfilterarray, ein Red-Clear-Clear-Blue-(„RCCB“-)Farbfilterarray, ein Red-Blue-Green-Clear-(„RBGC“-)Farbfilterarray, ein Foveon-X3-Farbfilterarray, ein Bayer-Sensoren-(„RGGB“-)Farbfilterarray, ein Monochromsensor-Farbfilterarray und/oder einen anderen Typ von Farbfilterarray beinhalten. In mindestens einer Ausführungsform können Klarpixelkameras, wie etwa Kameras mit einem RCCC-, einem RCCB- und/oder einem RBGC-Farbfilterarray, in einem Bestreben zum Erhöhen der Lichtempfindlichkeit verwendet werden.
  • In mindestens einer Ausführungsform können eine oder mehrere der Kamera(s) verwendet werden, um Funktionen der weiterentwickelten Fahrerassistenzsysteme (advanced driver assistance systems - „ADAS“) durchzuführen (z. B. als Teil einer redundanten oder ausfallsicheren Ausgestaltung). Zum Beispiel kann in mindestens einer Ausführungsform eine Multifunktions-Monokamera installiert sein, um Funktionen bereitzustellen, die Spurverlassenswarnung, Verkehrszeichenassistent und intelligente Scheinwerfersteuerung beinhalten. In mindestens einer Ausführungsform können eine oder mehrere der Kamera(s) (z. B. alle Kameras) simultan Bilddaten (z. B. ein Video) aufnehmen und bereitstellen.
  • In mindestens einer Ausführungsform können eine oder mehrere der Kameras in einer Montagebaugruppe, z. B. einer kundenspezifisch entworfenen (dreidimensional („3D“) gedruckten) Baugruppe, montiert sein, um Streulicht und Reflexionen aus dem Inneren des Autos (z. B. Reflexionen vom Armaturenbrett, die sich in den Windschutzscheibenspiegeln spiegeln) auszuschließen, welche die Bilddatenerfassungsfähigkeiten der Kamera beeinträchtigen können. Unter Bezugnahme auf Außenspiegel-Montagebaugruppen können in mindestens einer Ausführungsform die Außenspiegelbaugruppen kundenspezifisch in 3D gedruckt werden, sodass die Kameramontageplatte der Form des Außenspiegels entspricht. In mindestens einer Ausführungsform können die Kamera(s) in den Außenspiegel integriert sein. Bei Seitensichtkameras können die Kamera(s) in mindestens einer Ausführungsform auch in vier Säulen an jeder Ecke des Fahrerhauses integriert sein.
  • In mindestens einer Ausführungsform können Kameras mit einem Sichtfeld, das Abschnitte der Umgebung vor dem Fahrzeug 1300 beinhaltet (z. B. nach vom gerichtete Kameras), für die Rundumsicht verwendet werden, um dabei zu helfen, nach vom gerichtete Pfade und Hindernisse zu identifizieren, sowie mit Hilfe einer oder mehrerer Steuerungen 1336 und/oder Steuer-SoCs beim Bereitstellen von Informationen zu helfen, die für die Erzeugung eines Belegungsgitters und/oder die Bestimmung bevorzugter Fahrzeugpfade entscheidend sind. In mindestens einer Ausführungsform können nach vom 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 einer Ausführungsform können nach vom gerichtete Kameras auch für ADAS-Funktionen und -Systeme verwendet werden, einschließlich ohne Einschränkung Spurverlassenswarnungen (Lane Departure Warnings - „LDW“), autonomer Geschwindigkeitssteuerung (Autonomous Cruise Control - „ACC“) und/oder anderer Funktionen wie etwa Verkehrszeichenerkennung.
  • In mindestens einer Ausführungsform kann eine Vielfalt an Kameras in einer nach vom gerichteten Konfiguration verwendet werden, einschließlich zum Beispiel einer monokularen Kameraplattform, die einen Farbbildsensor mit CMOS („complementary metal oxide semiconductor“ - komplementärer Metalloxid-Halbleiter) beinhaltet. In mindestens einer Ausführungsform kann die Weitsichtkamera 1370 verwendet werden, um Objekte wahrzunehmen, die aus der Peripherie ins Blickfeld kommen (z. B. Fußgänger, kreuzender Verkehr oder Fahrräder). Obwohl in 13B nur eine Weitsichtkamera 1370 veranschaulicht ist, kann in anderen Ausführungsformen eine beliebige Anzahl (einschließlich null) von Weitsichtkamera(s) 1370 am Fahrzeug 1300 vorhanden sein. In mindestens einer Ausführungsform kann eine beliebige Anzahl von Langstreckenkamera(s) 1398 (z. B. ein Weitsichtstereokamerapaar) zur tiefenbasierten Objektdetektion verwendet werden, insbesondere für Objekte, für die ein neuronales Netz noch nicht trainiert worden ist. In mindestens einer Ausführungsform können die Langstreckenkamera(s) 1398 auch zur Objektdetektion und -klassifizierung sowie zur grundlegenden Objektverfolgung verwendet werden.
  • In mindestens einer Ausführungsform kann eine beliebige Anzahl der Stereokamera(s) 1368 auch in einer nach vorn gerichteten Konfiguration enthalten sein. In mindestens einer Ausführungsform können eine oder mehrere der Stereokamera(s) 1368 eine integrierte Steuereinheit beinhalten, die eine skalierbare Verarbeitungseinheit umfasst, die eine programmierbare Logik („FPGA“) und einen Mehrkern-Mikroprozessor mit einer integrierten Schnittstelle für ein Controller Area Network („CAN“) oder Ethernet auf einem einzelnen Chip bereitstellen kann. In mindestens einer Ausführungsform kann eine solche Einheit verwendet werden, um eine 3D-Karte der Umgebung des Fahrzeugs 1300 zu erzeugen, einschließlich einer Abstandsschätzung für alle Punkte im Bild. In mindestens einer Ausführungsform können eine oder mehrere der Stereokamera(s) 1368 ohne Einschränkung kompakte(n) Stereosichtsensor(en) beinhalten, die ohne Einschränkung zwei Kameraobjektive (je eines links und rechts) und einen Bildverarbeitungschip beinhalten können, die den Abstand von dem Fahrzeug 1300 zu einem Zielobjekt messen und die erzeugten Informationen (z. B. Metadaten) verwenden können, um autonome Notbrems- und Spurverlassenswarnfunktionen zu aktivieren. In mindestens einer Ausführungsform können andere Typen von Stereokamera(s) 1368 zusätzlich oder alternativ zu den hierin beschriebenen verwendet werden.
  • In mindestens einer Ausführungsform können Kameras mit einem Sichtfeld, das Abschnitte der Umgebung seitlich des Fahrzeugs 1300 einschließt (z. B. Seitensichtkameras), für die Rundumsicht verwendet werden, wodurch Informationen bereitgestellt werden, die zur Erstellung und Aktualisierung des Belegungsgitters sowie zur Erzeugung von Seitenaufprallkollisionswarnungen verwendet werden. Zum Beispiel könnten in mindestens einer Ausführungsform die Rundumkamera(s) 1374 (z. B. vier Rundumkameras 1374, wie in 13B veranschaulicht) an dem Fahrzeug 1300 positioniert sein. Die Rundumkamera(s) 1374 können ohne Einschränkung eine beliebige Anzahl und Kombination von Weitsichtkamera(s) 1370, Fischaugenkamera(s), 360-Grad-Kamera(s) und/oder dergleichen beinhalten. Zum Beispiel können in mindestens einer Ausführungsform vier Fischaugenkameras an der Vorderseite, der Rückseite und den Seiten des Fahrzeugs 1300 positioniert sein. In mindestens einer Ausführungsform kann das Fahrzeug 1300 drei Rundumkamera(s) 1374 (z. B. links, rechts und hinten) verwenden und eine oder mehrere andere Kamera(s) (z. B. eine nach vorn gerichtete Kamera) als vierte Rundumsichtkamera ausnutzen.
  • In mindestens einer Ausführungsform können Kameras mit einem Sichtfeld, das Abschnitte der Umgebung hinter dem Fahrzeug 1300 einschließt (z. B. Rückfahrkameras), als Einparkhilfe, für die Rundumsicht, Heckkollisionswarnungen und das Erstellen und Aktualisieren des Belegungsgitters verwendet werden. In mindestens einer Ausführungsform kann eine große Vielfalt an Kameras verwendet werden, einschließlich, aber nicht beschränkt auf, Kameras, die auch als nach vom gerichtete Kamera(s) geeignet sind (z. B. Langstreckenkameras 1398 und/oder Mittelstreckenkamera(s) 1376, Stereokamera(s) 1368, Infrarotkamera(s) 1372 usw.), wie hierin beschrieben.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder TrainingsOperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann eine Ableitungs- und/oder Trainingslogik 1015 im System der 13B zum Ableiten oder Vorhersagen von Operationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von neuronalen Netzwerktrainingsoperationen, Funktionen und/oder Architekturen von neuronalen Netzwerken oder in dieser Schrift beschriebenen Anwendungsfällen von neuronalen Netzwerken berechnet wurden.
  • In mindestens einer Ausführungsform wird 13B verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 13C ist ein Blockdiagramm, das eine beispielhafte Systemarchitektur für das autonome Fahrzeug 1300 aus 13A veranschaulicht, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist jede/jedes der Komponenten, Merkmale und Systeme des Fahrzeugs 1300 in 13C als über einen Bus 1302 verbunden veranschaulicht. In mindestens einer Ausführungsform kann der Bus 1302 ohne Einschränkung eine CAN-Datenschnittstelle (hierin alternativ als „CAN-Bus“ bezeichnet) beinhalten. In mindestens einer Ausführungsform kann ein CAN ein Netz innerhalb des Fahrzeugs 1300 sein, das zum Unterstützen beim Steuern verschiedener Merkmale und Funktionen des Fahrzeugs 1300 verwendet wird, wie etwa Betätigung von Bremsen, Beschleunigung, Bremsung, Lenkung, Scheibenwischern usw. In mindestens einer Ausführungsform kann der Bus 1302 so konfiguriert sein, dass er Dutzende oder sogar Hunderte von Knoten aufweist, jeder mit seiner eigenen eindeutigen Kennung (z. B. einer CAN-ID). In mindestens einer Ausführungsform kann der Bus 1302 ausgelesen werden, um Lenkradwinkel, Geschwindigkeit über Grund, Motorumdrehungen pro Minute (revolutions per minute - „RPMs“), Tastenpositionen und/oder andere Fahrzeugstatusindikatoren zu ermitteln. In mindestens einer Ausführungsform kann der Bus 1302 ein CAN-Bus sein, der mit ASIL B konform ist.
  • In mindestens einer Ausführungsform können zusätzlich zu oder alternativ zu CAN auch FlexRay und/oder Ethernet verwendet werden. In mindestens einer Ausführungsform kann eine beliebige Anzahl von Bussen 1302 vorhanden sein, 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 beinhalten können. In mindestens einer Ausführungsform können zwei oder mehr Busse 1302 verwendet werden, um unterschiedliche Funktionen auszuführen, und/oder können sie zur Redundanz verwendet werden. Zum Beispiel kann ein erster Bus 1302 für die Funktionalität der Kollisionsvermeidung verwendet werden und ein zweiter Bus 1302 für die Betätigungssteuerung verwendet werden. In mindestens einer Ausführungsform kann jeder Bus 1302 mit beliebigen Komponenten des Fahrzeugs 1300 kommunizieren und können zwei oder mehr Busse 1302 mit denselben Komponenten kommunizieren. In mindestens einer Ausführungsform können jedes einer beliebigen Anzahl von einem System auf einem Chip/Systemen auf Chips („SOC(s)“) 1304, jede der Steuerung(en) 1336 und/oder jeder Computer im Fahrzeug Zugriff auf dieselben Eingabedaten (z. B. Eingaben von Sensoren des Fahrzeugs 1300) haben und mit einem gemeinsamen Bus, wie z. B. dem CAN-Bus, verbunden sein.
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 eine oder mehrere Steuerung(en) 1336 beinhalten, wie etwa diejenigen, die hierin in Bezug auf 13A beschrieben sind. Die Steuerung(en) 1336 können für eine Vielfalt von Funktionen verwendet werden. In mindestens einer Ausführungsform können die Steuerung(en) 1336 mit beliebigen von verschiedenen anderen Komponenten und Systemen des Fahrzeugs 1300 gekoppelt sein und können sie zur Steuerung des Fahrzeugs 1300, der künstlichen Intelligenz des Fahrzeugs 1300, des Infotainment für das Fahrzeug 1300 und/oder dergleichen verwendet werden.
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 eine beliebige Anzahl von SoCs 1304 beinhalten. Jedes der SoCs 1304 kann ohne Einschränkung zentrale Verarbeitungseinheiten („CPU(s)“) 1306, Grafikverarbeitungseinheiten („GPU(s)“) 1308, (einen) Prozessor(en) 1310, (einen) Cache(s) 1312, (einen) Beschleuniger 1314, (einen) Datenspeicher 1316 und/oder andere nicht veranschaulichte Komponenten und Merkmale beinhalten. In mindestens einer Ausführungsform können die SoC(s) 1304 zum Steuern des Fahrzeugs 1300 in einer Vielfalt an Plattformen und Systemen verwendet werden. Zum Beispiel können in mindestens einer Ausführungsform die SoC(s) 1304 in einem System (z. B. System des Fahrzeugs 1300) mit einer hochauflösenden (High Definition - „HD“) Karte 1322 kombiniert werden, die Kartenauffrischungen und/oder -aktualisierungen über die Netzschnittstelle 1324 von einem oder mehreren Servern (in 13C nicht gezeigt) erlangen kann.
  • In mindestens einer Ausführungsform können die CPU(s) 1306 einen CPU-Cluster oder CPU-Komplex (hierin alternativ als „CCPLEX“ bezeichnet) beinhalten. In mindestens einer Ausführungsform können die CPU(s) 1306 mehrere Kerne und/oder Level-Zwei-(„L2“-)Caches beinhalten. Zum Beispiel können in mindestens einer Ausführungsform die CPU(s) 1306 acht Kerne in einer kohärenten Mehrprozessorkonfiguration beinhalten. In mindestens einer Ausführungsform können die CPU(s) 1306 vier Doppelkerncluster beinhalten, wobei jeder Cluster über einen dedizierten L2-Cache verfügt (z. B. einen L2-Cache mit 2 MB). In mindestens einer Ausführungsform können die CPU(s) 1306 (z. B. CCPLEX) so konfiguriert sein, dass sie den simultanen Clusterbetrieb unterstützen, sodass eine beliebige Kombination von Clustern von CPU(s) 1306 zu einem beliebigen gegebenen Zeitpunkt aktiv sein kann.
  • In mindestens einer Ausführungsform können eine oder mehrere der CPU(s) 1306 Leistungsverwaltungsfähigkeiten implementieren, die ohne Einschränkung eines oder mehrere der folgenden Merkmale beinhalten: einzelne Hardwareblöcke können automatisch taktgesteuert werden, wenn sie inaktiv sind, um dynamische Leistung zu sparen; jeder Kerntakt kann gesteuert werden, wenn der Kern aufgrund der Ausführung von Wait-for-Interrupt(„WFI“)-/Wait-for-Event-(„WFE“)-Anweisungen keine Anweisungen aktiv ausführt; jeder Kern kann unabhängig leistungsgesteuert sein; jeder Kerncluster kann unabhängig taktgesteuert sein, wenn alle Kerne taktgesteuert oder leistungsgesteuert sind; und/oder jeder Kerncluster kann unabhängig leistungsgesteuert sein, wenn alle Kerne leistungsgesteuert sind. In mindestens einer Ausführungsform können die CPU(s) 1306 ferner einen erweiterten Algorithmus zur Verwaltung von Leistungsstatus implementieren, bei dem zulässige Leistungsstatus und erwartete Aufwachzeiten spezifiziert werden und die Hardware/der Mikrocode den besten Leistungsstatus bestimmt, in den für einen Kern, einen Cluster und einen CCPLEX einzutreten ist. In mindestens einer Ausführungsform können die Verarbeitungskerne vereinfachte Leistungszustand-Eintrittssequenzen in Software unterstützen, wobei Arbeit an Mikrocode abgeladen wird.
  • In mindestens einer Ausführungsform können die GPU(s) 1308 eine integrierte GPU (hierin alternativ als „iGPU“ bezeichnet) beinhalten. In mindestens einer Ausführungsform können die GPU(s) 1308 programmierbar sein und für parallele Arbeitslasten effizient sein. In mindestens einer Ausführungsform können die GPU(s) 1308 einen erweiterten Tensor-Anweisungssatz verwenden. In mindestens einer Ausführungsform können die GPU(s) 1308 einen oder mehrere Streaming-Mikroprozessoren beinhalten, wobei jeder Streaming-Mikroprozessor einen Level-Eins-(„L1“-)Cache beinhalten kann (z. B. einen L1-Cache mit einer Speicherkapazität von mindestens 96 KB), und zwei oder mehr Streaming-Mikroprozessoren können einen L2-Cache gemeinsam nutzen (z. B. einen L2-Cache mit einer Speicherkapazität von 512 KB). In mindestens einer Ausführungsform können die GPU(s) 1308 mindestens acht Streaming-Mikroprozessoren beinhalten. In mindestens einer Ausführungsform können die GPU(s) 1308 Berechnungs-Anwendungsprogrammierschnittstelle(n) (application programming interface(s) - API(s)) verwenden. In mindestens einer Ausführungsform können die GPU(s) 1308 eine oder mehrere Parallelrechenplattformen und/oder Programmiermodelle (z. B. CUDA von NVIDIA) verwenden.
  • In mindestens einer Ausführungsform können eine oder mehrere der GPU(s) 1308 für die beste Rechenleistung in Automobil- und eingebetteten Anwendungsfällen leistungsoptimiert sein. In einer Ausführungsform könnten die GPU(s) 1308 zum Beispiel auf einem Fin-Feldeffekttransistor („FinFET“) gefertigt sein. In mindestens einer Ausführungsform kann jeder Streaming-Mikroprozessor eine Anzahl von Verarbeitungskernen mit gemischter Genauigkeit beinhalten, die in mehrere Blöcke partitioniert sind. Zum Beispiel und ohne Einschränkung könnten 64 PF32-Kerne und 32 PF64-Kerne in vier Verarbeitungsblöcke partitioniert sein. In mindestens einer Ausführungsform könnten jedem Verarbeitungsblock 16 FP32-Kerne, 8 FP64-Kerne, 16 INT32-Kerne, zwei NVIDIA TENSOR COREs mit gemischter Genauigkeit für Deep-Leaming-Matrixarithmetik, ein Level-Null(„L0“) Anweisungs-Cache, ein Warp-Planer, eine Verteilungseinheit und/oder eine Registerdatei mit 64 KB zugewiesen sein. In mindestens einer Ausführungsform können Streaming-Mikroprozessoren unabhängige parallele Integer- und Gleitkomma-Datenpfade beinhalten, um eine effiziente Ausführung von Arbeitslasten mit einer Mischung aus Berechnung und Adressierungsberechnungen zu ermöglichen. In mindestens einer Ausführungsform können Streaming-Mikroprozessoren eine unabhängige Thread-Planungsfähigkeit beinhalten, um eine feinkörnigere Synchronisation und Kooperation zwischen parallelen Threads zu ermöglichen. In mindestens einer Ausführungsform können Streaming-Mikroprozessoren eine kombinierte Einheit aus L1-Daten-Cache und gemeinsam genutztem Speicher beinhalten, um die Rechenleistung zu verbessern, während die Programmierung vereinfacht wird.
  • In mindestens einer Ausführungsform können eine oder mehrere der GPU(s) 1308 einen Speicher mit hoher Bandbreite (high bandwidth memory - „HBM“) und/oder ein 16-GB-HBM2-Speicherteilsystem beinhalten, um in einigen Beispielen eine Spitzenspeicherbandbreite von etwa 900 GB/Sekunde bereitzustellen. In mindestens einer Ausführungsform kann zusätzlich oder alternativ zum HBM-Speicher ein synchroner Grafik-Direktzugriffsspeicher („SGRAM“) verwendet werden, z. B. ein synchroner Grafik-Double-Data-Rate-Typ-Fünf-Direktzugriffsspeicher („GDDR5“).
  • In mindestens einer Ausführungsform können die GPU(s) 1308 einheitliche Speichertechnologie beinhalten. In mindestens einer Ausführungsform kann die Unterstützung von Adressübersetzungsdiensten (address translation services - „ATS“) verwendet werden, um zu ermöglichen, dass die GPU(s) 1308 direkt auf Seitentabellen von CPU(s) 1306 zugreifen. In mindestens einer Ausführungsform kann, wenn die Speicherverwaltungseinheit („MMU“) der GPU(s) 1308 eine Auslassung erleidet, eine Adressübersetzungsanforderung an die CPU(s) 1306 übertragen werden. Als Reaktion darauf können die CPU(s) 1306 in mindestens einer Ausführungsform in ihren Seitentabellen nach einer Virtuell-zu-Physisch-Zuordnung für die Adresse suchen und die Übersetzung zurück an die GPU(s) 1308 übertragen. In mindestens einer Ausführungsform kann die einheitliche Speichertechnologie einen einzelnen einheitlichen virtuellen Adressraum für Speicher sowohl der CPU(s) 1306 als auch der GPU(s) 1308 ermöglichen, wodurch die Programmierung der GPU(s) 1308 und die Portierung von Anwendungen auf die GPU(s) 1308 vereinfacht werden.
  • In mindestens einer Ausführungsform können die GPU(s) 1308 eine beliebige Anzahl von Zugriffszählern beinhalten, die die Häufigkeit des Zugriffs der GPU(s) 1308 auf Speicher anderer Prozessoren nachverfolgen können. In mindestens einer Ausführungsform können der/die Zugriffszähler dazu beitragen, sicherzustellen, dass Speicherseiten in den physischen Speicher des Prozessors verschoben werden, der am häufigsten auf Seiten zugreift, wodurch die Effizienz für Speicherbereiche, die von mehreren Prozessoren gemeinsam genutzt werden, verbessert wird.
  • In mindestens einer Ausführungsform können eines oder mehrere der SoC(s) 1304 eine beliebige Anzahl von Cache(s) 1312 beinhalten, einschließlich der hierin beschriebenen. In mindestens einer Ausführungsform könnten der/die Cache(s) 1312 beispielsweise einen Level-Drei(„L3“)-Cache beinhalten, der sowohl der/den CPU(s) 1306 als auch der/den GPU(s) 1308 zur Verfügung steht (der z. B. sowohl mit der/den CPU(s) 1306 als auch der/den GPU(s) 1308 verbunden ist). In mindestens einer Ausführungsform können die Cache(s) 1312 einen Rückschreib-Cache beinhalten, der die Zustände von Zeilen nachverfolgen kann, wie etwa durch Verwenden eines Cache-Kohärenzprotokolls (z. B. MEI, MESI, MSI usw.). In mindestens einer Ausführungsform kann der L3-Cache in Abhängigkeit von der Ausführungsform 4 MB oder mehr beinhalten, obwohl auch kleinere Cache-Größen verwendet werden können.
  • In mindestens einer Ausführungsform können eines oder mehrere der SoC(s) 1304 einen oder mehrere Beschleuniger 1314 beinhalten (z. B. Hardware-Beschleuniger, Software-Beschleuniger oder eine Kombination davon). In mindestens einer Ausführungsform können die SoC(s) 1304 einen Hardware-Beschleunigungscluster beinhalten, der optimierte Hardware-Beschleuniger und/oder einen großen chipinternen Speicher beinhalten kann. In mindestens einer Ausführungsform kann der großer chipinterne Speicher (z. B. 4 MB SRAM) einen Hardware-Beschleunigungscluster zur Beschleunigung neuronaler Netzwerke und anderer Berechnungen ermöglichen. In mindestens einer Ausführungsform kann ein Hardware-Beschleunigungscluster verwendet werden, um die GPU(s) 1308 zu ergänzen und einige Tasks der GPU(s) 1308 auszulagern (z. B. mehr Zyklen der GPU(s) 1308 zum Durchführen anderer Tasks freizumachen). In mindestens einer Ausführungsform könnte der/könnten die Beschleuniger 1314 für zielgerichtete Arbeitslasten (z. B. Wahrnehmung, neuronale Faltungsnetze (convolutional neural networks - „CNNs“), rekurrente neuronale Netze (recurrent neural networks - „RNNs“) usw.) verwendet werden, die stabil genug sind, um für eine Beschleunigung geeignet zu sein. In mindestens einer Ausführungsform kann ein CNN ein regionsbasiertes oder regionales neuronales Faltungsnetzwerk („RCNN“) und schnelles RCNN (wie z. B. für die Objekterkennung verwendet) oder eine andere Art von CNN beinhalten.
  • In mindestens einer Ausführungsform können der/die Beschleuniger 1314 (z.B. Hardware-Beschleunigungscluster) (einen) Deep-Learning-Beschleuniger (deep learning accelerator(s) - „DLA“) beinhalten. DLA(s) können ohne Einschränkung eine oder mehrere Tensor-Verarbeitungseinheiten („TPUs“) beinhalten, die so konfiguriert sein können, dass sie zusätzliche zehn Billionen Operationen pro Sekunde für Deep-Learning-Anwendungen und - Ableitung bereitstellen. In mindestens einer Ausführungsform können die TPUs Beschleuniger sein, die zum Durchführen von Bildverarbeitungsfunktionen (z. B. für CNNs, RCNNs usw.) konfiguriert und optimiert sind. DLA(s) können ferner für einen spezifischen Satz von Arten von neuronalen Netzwerken und FließkommaOperationen sowie für die Ableitung optimiert sein. In mindestens einer Ausführungsform kann die Ausgestaltung der DLA(s) mehr Rechenleistung pro Millimeter bereitstellen als eine typische Universal-GPU und sie übertrifft typischerweise die Rechenleistung einer CPU bei weitem. In mindestens einer Ausführungsform können die TPU(s) mehrere Funktionen durchführen, einschließlich einer Einzelinstanz-Faltungsfunktion, die zum Beispiel INT8-, INT16- und FP16-Datentypen sowohl für Merkmale als auch für Gewichtungen unterstützt, sowie Postprozessorfunktionen. In mindestens einer Ausführungsform können DLA(s) neuronale Netzwerke, insbesondere CNNs, an verarbeiteten oder unverarbeiteten Daten für eine Vielfalt von Funktionen schnell und effizient ausführen, darunter 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 Abstandsschätzung unter Verwendung von Daten von Kamerasensoren; ein CNN für die Erkennung und Identifizierung und Erkennung von Einsatzfahrzeugen unter Verwendung von Daten von Mikrofonen 1396; ein CNN für die Gesichtserkennung und Identifizierung von Fahrzeugbesitzern unter Verwendung von Daten von Kamerasensoren; und/oder ein CNN für sicherheitsrelevante Ereignisse.
  • In mindestens einer Ausführungsform können die DLA(s) eine beliebige Funktion der GPU(s) 1308 durchführen und durch Verwenden eines Inferenzbeschleunigers kann ein Gestalter zum Beispiel entweder DLA(s) oder GPU(s) 1308 für eine beliebige Funktion anvisieren. In mindestens einer Ausführungsform kann der Designer beispielsweise die Verarbeitung von CNNs und Fließkommaoperationen auf DLA(s) konzentrieren und andere Funktionen der/den GPU(s) 1308 und/oder anderen Beschleuniger(n) 1314 überlassen.
  • In mindestens einer Ausführungsform können der/die Beschleuniger 1314 (z.B. Hardware-Beschleunigungscluster) (einen) programmierbare(n) Sichtbeschleuniger (programmable vision accelerator - „PVA“) beinhalten, der hierin alternativ als ein Beschleuniger für maschinelles Sehen bezeichnet werden kann. In mindestens einer Ausführungsform können PVA(s) zur Beschleunigung von Algorithmen des maschinellen Sehens für weiterentwickelte Fahrerassistenzsysteme („ADAS“) 1338, autonomes Fahren, Augmented-Reality(„AR“)-Anwendungen und/oder Virtual-Reality(„VR“)-Anwendungen konstruiert und konfiguriert sein. PVA(s) können ein Gleichgewicht zwischen Performance und Flexibilität bereitstellen. In mindestens einer Ausführungsform können alle PVA(s) beispielsweise und ohne Einschränkung eine beliebige Anzahl von Reduced-Instruction-Set-Computer(„RISC“)-Kerne, direkten Speicherzugriff (direct memory access - „DMA“) und/oder eine beliebige Anzahl von Vektorprozessoren beinhalten.
  • In mindestens einer Ausführungsform können RISC-Kerne mit Bildsensoren (z. B. Bildsensoren einer beliebigen der hierin beschriebenen Kameras), Bildsignalprozessor(en) und/oder dergleichen interagieren. In mindestens einer Ausführungsform kann jeder der RISC-Kerne eine beliebige Menge an Speicher beinhalten. In mindestens einer Ausführungsform können RISC-Kerne in Abhängigkeit von der Ausführungsform ein beliebiges von einer Reihe von Protokollen verwenden. In mindestens einer Ausführungsform können die RISC-Kerne ein Echtzeitbetriebssystem (real-time operating system - „RTOS“) ausführen. In mindestens einer Ausführungsform können die RISC-Kerne unter Verwendung einer oder mehrerer Vorrichtungen für integrierte Schaltungen, anwendungsspezifischer integrierter Schaltungen („ASICs“) und/oder Speichervorrichtungen implementiert sein. In mindestens einer Ausführungsform könnten die RISC-Kerne zum Beispiel einen Anweisungs-Cache und/oder einen eng gekoppelten RAM beinhalten.
  • In mindestens einer Ausführungsform kann DMA es den Komponenten des/der PVA(s) ermöglichen, unabhängig von der/den CPU(s) 1306 auf den Systemspeicher zuzugreifen. In mindestens einer Ausführungsform kann DMA eine beliebige Anzahl von Merkmalen unterstützen, die zur Bereitstellung der Optimierung eines PVA verwendet werden, einschließlich der Unterstützung von mehrdimensionaler Adressierung und/oder zirkulärer Adressierung, ohne darauf beschränkt zu sein. In mindestens einer Ausführungsform kann DMA bis zu sechs oder mehr Dimensionen der Adressierung unterstützen, die ohne Einschränkung Blockbreite, Blockhöhe, Blocktiefe, horizontale Blockabstufung, vertikale Blockabstufung und/oder Tiefenabstufung beinhalten können.
  • In mindestens einer Ausführungsform können Vektorprozessoren programmierbare Prozessoren sein, die so konstruiert sein können, dass sie die Programmierung für Algorithmen des maschinellen Sehens effizient und flexibel ausführen und Signalverarbeitungsfähigkeiten bereitstellen. In mindestens einer Ausführungsform kann der PVA einen PVA-Kern und zwei Vektorverarbeitungsteilsystempartitionen beinhalten. In mindestens einer Ausführungsform kann der PVA-Kern ein Prozessorteilsystem, DMA-Engine(s) (z. B. zwei DMA-Engines) und/oder andere Peripheriegeräte beinhalten. In mindestens einer Ausführungsform kann das Vektorverarbeitungsteilsystem als primäre Verarbeitungs-Engine des PVA arbeiten und kann eine Vektorverarbeitungseinheit (vector processing unit - „VPU“), einen Anweisungs-Cache und/oder einen Vektorspeicher (z. B. „VMEM“) beinhalten. In mindestens einer Ausführungsform kann der VPU-Kern einen digitalen Signalprozessor beinhalten, wie zum Beispiel einen digitalen Single-Instruction-Multiple-Data-(„SIMD“-)Very-Long-Instruction-Word-(„VLIW“-)Signalprozessor. In mindestens einer Ausführungsform kann eine Kombination aus SIMD und VLIW den Durchsatz und die Geschwindigkeit erhöhen.
  • In mindestens einer Ausführungsform kann jeder der Vektorprozessoren einen Anweisungs-Cache beinhalten und an dedizierten Speicher gekoppelt sein. Daher kann in mindestens einer Ausführungsform jeder der Vektorprozessoren so konfiguriert sein, dass er unabhängig von anderen Vektorprozessoren ausgeführt wird. In mindestens einer Ausführungsform können Vektorprozessoren, die in einem konkreten PVA enthalten sind, so konfiguriert sein, dass sie Datenparallelität einsetzen. Zum Beispiel kann in mindestens einer Ausführungsform eine Vielzahl von Vektorprozessoren, die in einem einzelnen PVA enthalten ist, denselben Algorithmus des maschinellen Sehens ausführen, jedoch an unterschiedlichen Regionen eines Bildes. In mindestens einer Ausführungsform können die in einem konkreten PVA enthaltenen Vektorprozessoren simultan unterschiedliche Algorithmen des maschinellen Sehens an demselben Bild ausführen oder sogar unterschiedliche Algorithmen an sequentiellen Bildern oder Abschnitten eines Bildes ausführen. In mindestens einer Ausführungsform kann unter anderem eine beliebige Anzahl von PVAs in einem Hardware-Beschleunigungscluster enthalten sein und kann eine beliebige Anzahl von Vektorprozessoren in jedem der PVAs enthalten sein. In mindestens einer Ausführungsform können der/die PVA(s) einen zusätzlichen Fehlerkorrekturcode(„ECC“)-Speicher beinhalten, um die Gesamtsystemsicherheit zu erhöhen.
  • In mindestens einer Ausführungsform können der/die Beschleuniger 1314 (z. B. ein Hardware-Beschleunigungscluster) ein Netzwerk auf dem Chip für maschinelles Sehen und einen statischen Direktzugriffsspeicher („SRAM“) beinhalten, um einen SRAM mit hoher Bandbreite und niedriger Latenz für den/die Beschleuniger 1314 bereitzustellen. In mindestens einer Ausführungsform kann der chipinterne Speicher mindestens 4 MB SRAM beinhalten, der z. B. und ohne Einschränkung aus acht feldkonfigurierbaren Speicherblöcken besteht, auf die sowohl der PVA als auch der DLA zugreifen können. In mindestens einer Ausführungsform kann jedes Paar von Speicherblöcken eine weiterentwickelte Peripheriebus(advanced peripheral bus - „APB“)-Schnittstelle, eine Konfigurationsschaltung, eine Steuerung und einen Multiplexer beinhalten. In mindestens einer Ausführungsform kann ein beliebiger Typ von Speicher verwendet werden. In mindestens einer Ausführungsform können der PVA und DLA auf den Speicher über einen Backbone zugreifen, der dem PVA und DLA einen Hochgeschwindigkeitszugriff auf den Speicher bereitstellt. In mindestens einer Ausführungsform kann der Backbone ein Netzwerk auf dem Chip für maschinelles Sehen beinhalten, das den PVA und DLA mit dem Speicher verbindet (z. B. unter Verwendung von APB).
  • In mindestens einer Ausführungsform kann das Netzwerk auf dem Chip für maschinelles Sehen eine Schnittstelle beinhalten, die vor der Übertragung eines beliebigen Steuersignals/einer beliebigen Adresse/ beliebiger Daten bestimmt, dass sowohl der PVA als auch der DLA einsatzbereite und gültige Signale bereitstellen. In mindestens einer Ausführungsform kann eine Schnittstelle separate Phasen und separate Kanäle zum Übertragen von Steuersignalen/Adressen/Daten sowie Burst-artige Kommunikation für eine kontinuierliche Datenübermittlung bereitstellen. In mindestens einer Ausführungsform kann eine Schnittstelle mit den Normen der International Organization for Standardization („ISO“) 26262 oder der International Electrotechnical Commission („IEC“) 61508 konform sein, obwohl andere Standards und Protokolle verwendet werden können.
  • In mindestens einer Ausführungsform können eines oder mehrere der SoC(s) 1304 einen Echtzeitstrahlverfolgungs-Hardware-Beschleuniger beinhalten. In mindestens einer Ausführungsform kann der Echtzeitstrahlverfolgungs-Hardware-Beschleuniger verwendet werden, um schnell und effizient Positionen und Ausdehnungen von Objekten (z. B. innerhalb eines Weltmodells) zu bestimmen, um Echtzeitvisualisierungssimulationen zu erzeugen, für die RADAR-Signalinterpretation, für die Schallausbreitungssynthese und/oder -analyse, für die Simulation von SONAR-Systemen, für die allgemeine Wellenausbreitungssimulation, für den Vergleich mit LIDAR-Daten zum Zwecke der Lokalisierung und/oder für andere Funktionen und/oder für andere Verwendungen.
  • In mindestens einer Ausführungsform weisen der/die Beschleuniger 1314 (z.B. Hardware-Beschleunigercluster) ein breites Spektrum von Verwendungen für das autonome Fahren auf. In mindestens einer Ausführungsform kann der PVA ein programmierbarer Sichtbeschleuniger sein, der für wichtige Verarbeitungsstufen im ADAS und in autonomen Fahrzeugen verwendet werden kann. In mindestens einer Ausführungsform sind die Fähigkeiten des PVA eine gute Ergänzung für algorithmische Domänen, die eine vorhersagbare Verarbeitung bei niedriger Leistung und niedriger Latenz benötigen. Anders ausgedrückt zeigt der PVA eine gute Performance für halbdichte oder dichte reguläre Berechnungen, auch an kleinen Datensätzen, die vorhersagbare Laufzeiten mit niedriger Latenz und niedriger Leistung benötigen. In mindestens einer Ausführungsform sind in autonomen Fahrzeugen, wie z. B. dem Fahrzeug 1300, PVAs für die Ausführung klassischer Algorithmen für maschinelles Sehen konstruiert, da diese effizient bei der Objekterkennung sind und mit Integer-Mathematik arbeiten.
  • Zum Beispiel, gemäß mindestens einer Ausführungsform der Technologie, wird der PVA verwendet, um maschinelles Stereo-Sehen durchzuführen. In mindestens einer Ausführungsform kann in einigen Beispielen ein auf semiglobalem Abgleich basierender Algorithmus verwendet werden, obwohl dies nicht als Einschränkung auszulegen ist. In mindestens einer Ausführungsform verwenden Anwendungen für das autonome Fahren auf Level 3-5 Bewegungsschätzung/Stereo-Abgleich spontan (z. B. Struktur aus Bewegung, Fußgängererkennung, Fahrspurdetektion usw.). In mindestens einer Ausführungsform kann der PVA eine Funktion des maschinellen Stereo-Sehens an Eingaben von zwei monokularen Kameras durchführen.
  • In mindestens einer Ausführungsform kann der PVA verwendet werden, um einen dichten optischen Fluss durchzuführen. Zum Beispiel könnte der PVA in mindestens einer Ausführungsform RADAR-Rohdaten verarbeiten (z. B. unter Verwendung einer schnellen 4D-Fourier-Transformation), um verarbeitete RADAR-Daten bereitzustellen. In mindestens einer Ausführungsform wird der PVA für die Laufzeit-Tiefenverarbeitung verwendet, indem z. B. Laufzeit-Rohdaten verarbeitet werden, um verarbeitete Laufzeitdaten bereitzustellen.
  • In mindestens einer Ausführungsform kann der DLA verwendet werden, um eine beliebige Art von Netzwerk auszuführen, um die Steuerung und Fahrsicherheit zu verbessern, einschließlich zum Beispiel und ohne Einschränkung ein neuronales Netzwerk, das ein Maß an Konfidenz für jede Objekterkennung ausgibt. In mindestens einer Ausführungsform kann die Konfidenz als Wahrscheinlichkeit dargestellt oder interpretiert werden oder als Bereitstellung einer relativen „Gewichtung“ jeder Detektion im Vergleich zu anderen Detektionen. In mindestens einer Ausführungsform ermöglicht die Konfidenz es einem System, weitere Entscheidungen darüber zu treffen, welche Erkennungen als richtig positive Erkennungen und nicht als falsch positive Erkennungen betrachtet werden sollten. In mindestens einer Ausführungsform kann ein System zum Beispiel einen Schwellenwert für die Konfidenz festlegen und nur Erkennungen, die den Schwellenwert überschreiten, als richtig positive Erkennungen betrachten. In einer Ausführungsform, in der ein automatisches Notbrems(automatic emergency braking - „AEB“)-System verwendet wird, würden falsch positive Erkennungen dazu führen, dass das Fahrzeug automatisch eine Notbremsung durchführt, was natürlich unerwünscht ist. In mindestens einer Ausführungsform können Detektionen mit hoher Konfidenz als Auslöser für AEB betrachtet werden. In mindestens einer Ausführungsform kann der DLA ein neuronales Netzwerk zur Regression des Konfidenzwerts ausführen. In mindestens einer Ausführungsform kann das neuronale Netz als seine Eingabe mindestens eine Teilmenge von Parametern verwenden, wie etwa die Abmessungen des Begrenzungsrahmens, die (z. B. von einem anderen Teilsystem) erlangte Grundebenenschätzung, die Ausgabe von IMU-Sensor(en) 1366, die mit der Ausrichtung des Fahrzeugs 1300 korreliert, den Abstand, die 3D-Standortschätzungen des Objekts, die von dem neuronalen Netz und/oder anderen Sensoren (z. B. LIDAR-Sensor(en) 1364 oder RADAR-Sensor(en) 1360) erlangt werden, sowie andere.
  • In mindestens einer Ausführungsform können eines oder mehrere der SoC(s) 1304 einen oder mehrere Datenspeicher 1316 (z. B. Speicher) beinhalten. In mindestens einer Ausführungsform kann es sich bei den Datenspeicher(n) 1316 um chipinternen Speicher der SoC(s) 1304 handeln, der neuronale Netze speichern kann, die auf den GPU(s) 1308 und/oder einem DLA ausgeführt werden sollen. In mindestens einer Ausführungsform kann die Kapazität der Datenspeicher(s) 1316 groß genug sein, um mehrere Instanzen von neuronalen Netzen zur Redundanz und Sicherheit zu speichern. In mindestens einer Ausführungsform können der/die Datenspeicher 1312 (einen) L2- oder L3-Cache(s) beinhalten.
  • In mindestens einer Ausführungsform können eines oder mehrere der SoC(s) 1304 eine beliebige Anzahl von Prozessor(en) 1310 (z. B. eingebettete Prozessoren) beinhalten. Die Prozessor(en) 1310 können einen Booting- und Leistungsverwaltungsprozessor beinhalten, der ein dedizierter Prozessor und Teilsystem sein kann, um Booting-Leistungs- und - verwaltungsfunktionen und die damit verbundene Sicherheitsdurchsetzung zu handhaben. In mindestens einer Ausführungsform kann der Booting- und Leistungsverwaltungsprozessor ein Teil der Booting-Sequenz des/der SoC(s) 1304 sein und Laufzeit-Leistungsverwaltungsdienste bereitstellen. In mindestens einer Ausführungsform kann ein Booting-Leistungs- und Verwaltungsprozessor Takt- und Spannungsprogrammierung, Unterstützung bei Übergängen des Systems in einen Zustand mit niedriger Leistung, Verwaltung von Thermo- und Temperatursensoren der SoC(s) 1304 und/oder Verwaltung von Leistungszuständen der SoC(s) 1304 bereitstellen. In mindestens einer Ausführungsform kann jeder Temperatursensor als Ringoszillator implementiert sein, dessen Ausgangsfrequenz proportional zur Temperatur ist, und die SoC(s) 1304 können Ringoszillatoren verwenden, um Temperaturen von CPU(s) 1306, GPU(s) 1308 und/oder Beschleuniger(n) 1314 zu detektieren. Falls bestimmt wird, dass Temperaturen einen Schwellenwert überschreiten, kann in mindestens einer Ausführungsform ein Booting- und Leistungsverwaltungsprozessor dann in eine Temperaturfehlerroutine eintreten und die SoC(s) 1304 in einen Zustand mit niedrigerer Leistung versetzen und/oder das Fahrzeug 1300 in einen Modus des Fahrens zu einem sicheren Halt versetzen (z. B. das Fahrzeug 1300 zu einem sicheren Halt bringen).
  • In mindestens einer Ausführungsform können der/die Prozessor(en) 1310 ferner einen Satz von eingebetteten Prozessoren beinhalten, die als eine Audioverarbeitungs-Engine dienen können. In mindestens einer Ausführungsform kann die Audioverarbeitungs-Engine ein Audioteilsystem sein, das eine vollständige Hardware-Unterstützung für Mehrkanal-Audio über mehrere Schnittstellen sowie eine breite und flexible Palette von Audio-E/A-Schnittstellen ermöglicht. In mindestens einer Ausführungsform ist die Audioverarbeitungs-Engine ein dedizierter Prozessorkern mit einem digitalen Signalprozessor mit dediziertem RAM.
  • In mindestens einer Ausführungsform können der/die Prozessor(en) 1310 ferner eine stets eingeschaltete Prozessor-Engine beinhalten, welche die notwendigen Hardware-Merkmale zur Unterstützung der Sensorverwaltung mit niedriger Leistung und der Aufwach-Anwendungsfälle bereitstellen kann. In mindestens einer Ausführungsform kann die stets eingeschaltete Prozessor-Engine ohne Einschränkung einen Prozessorkern, einen eng gekoppelten RAM, unterstützende Peripheriegeräte (z. B. Timer und Unterbrechungssteuerungen), verschiedene E/A-Steuerungsperipheriegeräte und Routing-Logik beinhalten.
  • In mindestens einer Ausführungsform können der/die Prozessor(en) 1310 ferner eine Sicherheitscluster-Engine beinhalten, die ohne Einschränkung ein dediziertes Prozessorteilsystem zur Handhabung der Sicherheitsverwaltung für Automobilanwendungen beinhaltet. In mindestens einer Ausführungsform kann die Sicherheitscluster-Engine ohne Einschränkung zwei oder mehr Prozessorkerne, einen eng gekoppelten RAM, unterstützende Peripheriegeräte (z. B. Timer, eine Unterbrechungssteuerung usw.) und/oder Routing-Logik beinhalten. In einem Sicherheitsmodus können zwei oder mehr Kerne in mindestens einer Ausführungsform in einem Gleichschrittmodus arbeiten und als einzelner Kern mit einer Vergleichslogik funktionieren, um etwaige Unterschiede zwischen ihren Operationen zu detektieren. In mindestens einer Ausführungsform können die Prozessor(en) 1310 ferner eine Echtzeitkamera-Engine beinhalten, die ohne Einschränkung ein dediziertes Prozessorteilsystem zum Handhaben der Echtzeitkameraverwaltung beinhalten kann. In mindestens einer Ausführungsform können der/die Prozessor(en) 1310 ferner einen Signalprozessor mit hohem Dynamikbereich beinhalten, der ohne Einschränkung einen Bildsignalprozessor beinhalten kann, der eine Hardware-Engine ist, die Teil einer Kameraverarbeitungspipeline ist.
  • In mindestens einer Ausführungsform können der/die Prozessor(en) 1310 einen Videobildkompositor beinhalten, 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 Fenster des Wiedergabeprogramms zu erzeugen. In mindestens einer Ausführungsform kann ein Videobildkompositor eine Objektivverzeichnungskorrektur an den Weitsichtkamera(s) 1370, Rundumkamera(s) 1374 und/oder kabineninternen Überwachungskamerasensor(en) durchführen. In mindestens einer Ausführungsform werden die kabineninternen Überwachungskamerasensor(en) vorzugsweise durch ein neuronales Netz überwacht, das auf einer anderen Instanz des SoC 1304 läuft und so konfiguriert ist, dass es Ereignisse in der Kabine erkennt und entsprechend reagiert. In mindestens einer Ausführungsform kann ein kabineninternes System ohne Einschränkung Lippenlesen durchführen, um den Mobilfunkdienst zu aktivieren und einen Anruf zu tätigen, E-Mails zu diktieren, das Ziel des Fahrzeugs zu ändern, das Infotainmentsystem des Fahrzeugs und dessen Einstellungen zu aktivieren oder zu ändern oder sprachaktiviertes Surfen im Internet bereitzustellen. In mindestens einer Ausführungsform stehen dem Fahrer bestimmte Funktionen zur Verfügung, wenn das Fahrzeug in einem autonomen Modus betrieben wird, und sind ansonsten deaktiviert.
  • In mindestens einer Ausführungsform kann der Videobildkompositor eine erweiterte zeitliche Rauschunterdrückung sowohl für die räumliche als auch für die zeitliche Rauschunterdrückung beinhalten. In mindestens einer Ausführungsform, in der Bewegung in einem Video vorkommt, gewichtet die Rauschunterdrückung zum Beispiel die räumlichen Informationen entsprechend, indem sie die Gewichtung der Informationen, die von benachbarten Frames bereitgestellt werden, verringert. In mindestens einer Ausführungsform, in der ein Bild oder ein Abschnitt 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 unterdrücken.
  • In mindestens einer Ausführungsform kann der Videobildkompositor auch so konfiguriert sein, dass er eine Stereoentzerrung an den eingegebenen Stereolinsen-Frames durchführt. In mindestens einer Ausführungsform kann der Videobildkompositor ferner für die Benutzerschnittstellenzusammensetzung verwendet werden, wenn der Desktop des Betriebssystems in Gebrauch ist und die GPU(s) 1308 nicht zum kontinuierlichen Rendern neuer Oberflächen benötigt werden. Wenn die GPU(s) 1308 eingeschaltet sind und aktiv 3D-Rendering durchführen, kann in mindestens einer Ausführungsform ein Videobildkompositor verwendet werden, um die GPU(s) 1308 abzuladen, um die Rechenleistung und Reaktionsfähigkeit zu verbessern.
  • In mindestens einer Ausführungsform können ein oder mehrere der SoC(s) 1304 ferner eine serielle Mobile-Industry-Processor-Interface(„MIPI“)-Kameraschnittstelle zum Empfangen von Videos und Eingaben von Kameras, eine Hochgeschwindigkeitsschnittstelle und/oder einen Videoeingabeblock beinhalten, der für Kamera- und zugehörige Pixeleingabefunktionen verwendet werden kann. In mindestens einer Ausführungsform können eines oder mehrere der SoC(s) 1304 ferner Eingabe/Ausgabe-Steuerung(en) beinhalten, die durch Software gesteuert werden können und zum Empfangen von E/A-Signalen verwendet werden können, die keiner bestimmten Rolle zugewiesen sind.
  • In mindestens einer Ausführungsform können ein oder mehrere der SoC(s) 1304 ferner eine breite Palette von Peripherieschnittstellen beinhalten, um die Kommunikation mit Peripheriegeräten, Audiocodierern/-decodierern („Codecs“), Leistungsverwaltungs- und/oder anderen Vorrichtungen zu ermöglichen. SoC(s) 1304 können verwendet werden, um Daten von Kameras (z. B. über Gigabit Multimedia Serial Link und Ethernet verbunden), Sensoren (z. B. LIDAR-Sensor(en) 1364, RADAR-Sensor(en) 1360 usw., die über Ethernet verbunden sein können), Daten vom Bus 1302 (z. B. Geschwindigkeit des Fahrzeugs 1300, Lenkradposition usw.), Daten von GNSS-Sensor(en) 1358 (z. B. über Ethernet oder CAN-Bus verbunden) usw. zu verarbeiten. In mindestens einer Ausführungsform können ein oder mehrere der SoC(s) 1304 ferner dedizierte Massenspeichersteuerungen mit hoher Performance beinhalten, die ihre eigenen DMA-Engines beinhalten können und die verwendet werden können, um CPU(s) 1306 von routinemäßigen Datenverwaltungs-Tasks zu befreien.
  • In mindestens einer Ausführungsform können das/die SoC(s) 1304 eine Ende-zu-Ende-Plattform mit einer flexiblen Architektur sein, welche die Automatisierungslevels 3-5 überspannt und dadurch eine umfassende funktionelle Sicherheitsarchitektur bereitstellt, die Techniken des maschinellen Sehens und des ADAS für Diversität und Redundanz nutzt und effizient einsetzt und eine Plattform für einen flexiblen, zuverlässigen Fahrsoftwarestapel zusammen mit Deep-Learning-Werkzeugen bereitstellt. In mindestens einer Ausführungsform können die SoC(s) 1304 schneller, zuverlässiger und sogar energieeffizienter und platzeffizienter sein als herkömmliche Systeme. Zum Beispiel können in mindestens einer Ausführungsform der/die Beschleuniger 1314, wenn sie mit den CPU(s) 1306, GPU(s) 1308 und Datenspeicher(n) 1316 kombiniert sind, eine schnelle, effiziente Plattform für autonome Fahrzeuge der Levels 3-5 bereitstellen.
  • In mindestens einer Ausführungsform können Algorithmen des maschinellen Sehens auf CPUs ausgeführt werden, die unter Verwendung einer Programmiersprache auf hohem Level, wie z. B. der Programmiersprache C, konfiguriert werden können, um eine große Vielfalt von Verarbeitungsalgorithmen über eine große Vielfalt von visuellen Daten auszuführen. In mindestens einer Ausführungsform sind die CPUs jedoch oft nicht dazu in der Lage, die Rechenleistungsanforderungen vieler Anwendungen des maschinellen Sehens zu erfüllen, wie zum Beispiel in Bezug auf die Ausführungszeit und den Leistungsverbrauch. In mindestens einer Ausführungsform sind viele CPUs nicht dazu in der Lage, komplexe Objektdetektionsalgorithmen in Echtzeit auszuführen, die in fahrzeuginternen ADAS-Anwendungen und in praktischen autonomen Fahrzeugen der Levels 3-5 verwendet werden.
  • Die hierin beschriebenen Ausführungsformen ermöglichen es, dass mehrere neuronale Netze simultan und/oder sequenziell durchgeführt und die Ergebnisse miteinander kombiniert werden, um eine autonome Fahrfunktionalität der Levels 3-5 zu ermöglichen. Zum Beispiel kann in mindestens einer Ausführungsform ein CNN, das auf einem DLA oder einer diskreten GPU (z. B. GPU(s) 1320) ausgeführt wird, eine Text- und Worterkennung beinhalten, die es einem Supercomputer ermöglicht, Verkehrsschilder zu lesen und zu verstehen, einschließlich Schildern, für die das neuronale Netzwerk nicht speziell trainiert wurde. In mindestens einer Ausführungsform kann der DLA ferner ein neuronales Netzwerk enthalten, das in der Lage ist, Zeichen zu identifizieren, zu interpretieren und ein semantisches Verständnis davon bereitzustellen und dieses semantische Verständnis an Pfadplanungsmodule weiterzugeben, die auf CPU-Komplex laufen.
  • In mindestens einer Ausführungsform können mehrere neuronale Netzwerke simultan ausgeführt werden, z. B. für das Fahren bei Level 3, 4 oder 5. In mindestens einer Ausführungsform kann zum Beispiel ein Warnschild mit der Aufschrift „Vorsicht: Blinkende Lichter weisen auf Vereisung hin“ zusammen mit einem elektrischen Licht von mehreren neuronalen Netzwerken unabhängig oder gemeinsam interpretiert werden. In mindestens einer Ausführungsform kann ein Schild selbst von einem ersten eingesetzten neuronalen Netzwerk (z. B. einem trainierten neuronalen Netzwerk) als Verkehrsschild identifiziert werden und kann ein Text „Blinkende Lichter weisen auf Verweisung hin“ von einem zweiten eingesetzten neuronalen Netzwerk interpretiert werden, das die Wegplanungssoftware des Fahrzeugs (die vorzugsweise auf dem CPU-Komplex ausgeführt wird) darüber informiert, dass, wenn blinkende Lichter erkannt werden, Vereisungen vorliegen. In mindestens einer Ausführungsform kann ein blinkendes Licht identifiziert werden, indem ein drittes eingesetztes neuronales Netzwerk über mehrere Frames hinweg betrieben wird und die Wegplanungssoftware des Fahrzeugs über das Vorhandensein (oder Nichtvorhandensein) von blinkenden Lichtern informiert. In mindestens einer Ausführungsform können alle drei neuronalen Netzwerke simultan laufen, z. B. innerhalb des DLA und/oder auf GPU(s) 1308.
  • In mindestens einer Ausführungsform kann ein CNN zur Gesichtserkennung und Fahrzeugbesitzeridentifizierung Daten von Kamerasensoren verwenden, um das Vorhandensein eines autorisierten Fahrers und/oder Besitzers des Fahrzeugs 1300 zu identifizieren. In mindestens einer Ausführungsform kann eine stets eingeschaltete Sensorverarbeitungs-Engine verwendet werden, um das Fahrzeug zu entriegeln, wenn sich der Besitzer der Fahrertür nähert und die Lichter einschaltet, und um im Sicherheitsmodus das Fahrzeug zu deaktivieren, wenn der Besitzer das Fahrzeug verlässt. Auf diese Weise stellen die SoC(s) 1304 Sicherheit gegen Diebstahl und/oder Carjacking bereit.
  • In mindestens einer Ausführungsform kann ein CNN zur Detektion und Identifizierung von Einsatzfahrzeugen Daten von Mikrofonen 1396 verwenden, um Sirenen von Einsatzfahrzeugen zu detektieren und zu identifizieren. In mindestens einer Ausführungsform verwenden das/die SoC(s) 1304 das CNN zur Klassifizierung von Umgebungs- und Stadtgeräuschen sowie zur Klassifizierung von visuellen Daten. In mindestens einer Ausführungsform wird das CNN, das auf dem DLA läuft, dafür trainiert, die relative Annäherungsgeschwindigkeit des Einsatzfahrzeugs zu identifizieren (z. B. durch Verwendung des Dopplereffekts). In mindestens einer Ausführungsform kann das CNN auch dafür trainiert werden, Einsatzfahrzeuge zu identifizieren, die für das lokale Gebiet, in dem das Fahrzeug betrieben wird, spezifisch sind, wie durch den/die GNSS-Sensor(en) 1358. In mindestens einer Ausführungsform versucht das CNN, wenn es in Europa betrieben wird, europäische Sirenen zu erkennen, und in den Vereinigten Staaten versucht das CNN, nur nordamerikanische Sirenen zu identifizieren. In mindestens einer Ausführungsform kann, sobald ein Einsatzfahrzeug erkannt wird, ein Steuerprogramm verwendet werden, um eine Sicherheitsroutine für Einsatzfahrzeuge auszuführen, um das Fahrzeug zu verlangsamen, an den Straßenrand zu fahren, das Fahrzeug zu parken und/oder das Fahrzeug im Leerlauf laufen zu lassen, und zwar mit der Hilde des Ultraschallsensor/der Ultraschallsensoren 1362, bis das/die Einsatzfahrzeug/e vorbeigefahren ist/sind.
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 CPU(s) 1318 (z. B. diskrete CPU(s) oder dCPU(s)) beinhalten, die über eine Hochgeschwindigkeitszusammenschaltung (z. B. PCIe) an die SoC(s) 1304 gekoppelt sein können. In mindestens einer Ausführungsform können die CPU(s) 1318 zum Beispiel einen X86-Prozessor beinhalten. Die CPU(s) 1318 können dazu verwendet werden, eine beliebige einer Vielfalt von Funktionen durchzuführen, einschließlich zum Beispiel des Vermittelns potenziell inkonsistenter Ergebnisse zwischen ADAS-Sensoren und SoC(s) 1304 und/oder des Überwachens des Status und Zustands der Steuerung(en) 1336 und/oder eines Infotainmentsystems auf einem Chip („Infotainment-SoC“) 1330.
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 GPU(s) 1320 (z. B. diskrete GPU(s) oder dGPU(s)) beinhalten, die über eine Hochgeschwindigkeitszusammenschaltung (z. B. NVLINK von NVIDIA) mit dem/den SoC(s) 1304 gekoppelt sein können. In mindestens einer Ausführungsform können die GPU(s) 1320 eine zusätzliche Funktionalität für künstliche Intelligenz bereitstellen, wie etwa durch Ausführen redundanter und/oder unterschiedlicher neuronaler Netze, und sie können zum Trainieren und/oder Aktualisieren neuronaler Netze mindestens zum Teil auf Grundlage von Eingaben (z. B. Sensordaten) von Sensoren eines Fahrzeugs 1300 verwendet werden.
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 ferner die Netzschnittstelle 1324 beinhalten, die ohne Einschränkung drahtlose Antenne(n) 1326 beinhalten kann (z. B. eine oder mehrere drahtlose Antennen 1326 für unterschiedliche Kommunikationsprotokolle, wie etwa eine Mobilfunkantenne, eine Bluetooth-Antenne usw.). In mindestens einer Ausführungsform kann die Netzwerkschnittstelle 1324 verwendet werden, um eine drahtlose Verbindung über das Internet mit der Cloud (z. B. mit (einem) Server(n) und/oder anderen Netzwerkvorrichtungen), mit anderen Fahrzeugen und/oder mit Rechenvorrichtungen (z. B. Client-Vorrichtungen von Fahrgästen) zu ermöglichen. In mindestens einer Ausführungsform kann zur Kommunikation mit anderen Fahrzeugen eine direkte Verknüpfung zwischen dem Fahrzeug 130 und dem anderen Fahrzeug hergestellt werden und/oder kann eine indirekte Verknüpfung (z. B. über Netzwerke und das Internet) hergestellt werden. In mindestens einer Ausführungsform können direkte Verbindungen über eine Fahrzeug-zu-Fahrzeug-Kommunikationsverbindung bereitgestellt werden. Die Fahrzeug-zu-Fahrzeug-Kommunikationsverbindung kann dem Fahrzeug 1300 Informationen über Fahrzeuge in der Nähe des Fahrzeugs 1300 bereitstellen (z. B. Fahrzeuge vor, neben und/oder hinter dem Fahrzeug 1300). In mindestens einer Ausführungsform kann die vorgenannte Funktionalität Teil einer kooperativen adaptiven Geschwindigkeitssteuerungsfunktionalität des Fahrzeugs 1300 sein.
  • In mindestens einer Ausführungsform kann die Netzschnittstelle 1324 ein SoC beinhalten, das eine Modulations- und Demodulationsfunktionalität bereitstellt und es den Steuerung(en) 1336 ermöglicht, über drahtlose Netze zu kommunizieren. In mindestens einer Ausführungsform kann die Netzschnittstelle 1324 ein Hochfrequenz-Frontend für die Aufwärtskonvertierung vom Basisband auf die Hochfrequenz und die Abwärtskonvertierung von der Hochfrequenz auf das Basisband beinhalten. In mindestens einer Ausführungsform können Frequenzkonvertierungen auf eine beliebige technisch machbare Weise durchgeführt werden. Frequenzkonvertierungen könnten zum Beispiel durch hinreichend bekannte Prozesse und/oder unter Verwendung von Überlagerungsprozessen durchgeführt werden. In mindestens einer Ausführungsform kann die Hochfrequenz-Frontend-Funktionalität durch einen separaten Chip bereitgestellt sein. In mindestens einer Ausführungsform kann die Netzwerkschnittstelle eine drahtlose Funktionalität zur Kommunikation über LTE, WCDMA, UMTS, GSM, CDMA2000, Bluetooth, Bluetooth LE, Wi-Fi, Z-Wave, ZigBee, LoRaWAN und/oder andere drahtlose Protokolle beinhalten.
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 ferner einen oder mehrere Datenspeicher 1328 beinhalten, die ohne Einschränkung chipexternen (z. B. außerhalb der SoC(s) 1304 liegenden) Speicher beinhalten können. In mindestens einer Ausführungsform können der/die Datenspeicher 1328 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 Vorrichtungen, die mindestens ein Datenbit speichern können.
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 ferner GNSS-Sensor(en) 1358 (z. B. GPS- und/oder unterstützte GPS-Sensoren) beinhalten, um bei Funktionen zur Kartierung, Wahrnehmung, Erzeugung des Belegungsgitters und/oder Pfadplanung zu helfen. In mindestens einer Ausführungsform kann eine beliebige Anzahl von GNSS-Sensor(en) 1358 verwendet werden, einschließlich zum Beispiel und ohne Einschränkung eines GPS unter Verwendung eines USB-Steckers mit einer Ethernet-zu-Seriell-Brücke (z. B. RS-232-Brücke).
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 ferner RADAR-Sensor(en) 1360 beinhalten. Der/die RADAR-Sensor(en) 1360 können vom Fahrzeug 1300 zur Fahrzeugerkennung mit großer Reichweite verwendet werden, auch bei Dunkelheit und/oder schlechten Wetterbedingungen. In mindestens einer Ausführungsform können die RADAR-Funktionssicherheitslevel ASIL B sein. Der/die RADAR-Sensor(en) 1360 können CAN und/oder den Bus 1302 (z. B. zur Übertragung der von dem/den RADAR-Sensor(en) 1360 erzeugten Daten) zur Steuerung von und zum Zugriff auf Objektverfolgungsdaten verwenden, wobei in einigen Beispielen der Zugriff auf Rohdaten über Ethernet erfolgt. In mindestens einer Ausführungsform kann eine große Vielfalt von RADAR-Sensorarten verwendet werden. Zum Beispiel und ohne Einschränkung können die RADAR-Sensor(en) 1360 für die Verwendung als Front-, Heck- und Seiten-RADAR geeignet sein. In mindestens einer Ausführungsform sind einer oder mehrere des/der RADAR-Sensor(en) 1360 Puls-Doppler-RADAR-Sensor(en).
  • In mindestens einer Ausführungsform können die RADAR-Sensor(en) 1360 unterschiedliche Konfigurationen beinhalten, wie etwa mit großer Reichweite und schmalem Sichtfeld, mit geringer Reichweite und breitem Sichtfeld, mit seitlicher Abdeckung mit kurzer Reichweite usw. In mindestens einer Ausführungsform kann das RADAR mit großer Reichweite für die adaptive Geschwindigkeitssteuerungsfunktionalität verwendet werden. In mindestens einer Ausführungsform können RADAR-Systeme mit großer Reichweite ein breites Sichtfeld bereitstellen, das durch zwei oder mehr unabhängige Scans realisiert wird, z. B. innerhalb einer Reichweite von 250 m. In mindestens einer Ausführungsform können die RADAR-Sensor(en) 1360 dabei helfen, zwischen statischen und sich bewegenden Objekten zu unterscheiden, und durch das ADAS-System 1338 für den Notbremsassistenten und die Vorwärtskollisionswarnung verwendet werden. Der/die Sensor(en) 1360, 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 beinhalten. In mindestens einer Ausführungsform mit sechs Antennen können vier zentrale Antennen ein fokussiertes Strahlenmuster erzeugen, das dazu ausgestaltet ist, die Umgebung des Fahrzeugs 1300 bei höheren Geschwindigkeiten mit minimalen Störungen durch den Verkehr auf den benachbarten Fahrspuren aufzuzeichnen. In mindestens einer Ausführungsform können die beiden anderen Antennen das Sichtfeld erweitern, wodurch es möglich ist, Fahrzeuge, die in die Fahrspur des Fahrzeugs 1300 einfahren oder diese verlassen, schnell zu erkennen.
  • In mindestens einer Ausführungsform 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) beinhalten. In mindestens einer Ausführungsform können RADAR-Systeme mit kurzer Reichweite ohne Einschränkung eine beliebige Anzahl von RADAR-Sensor(en) 1360 beinhalten, die für die Installation an beiden Enden des hinteren Stoßfängers konstruiert sind. Wenn das RADAR-Sensorsystem an beiden Enden des hinteren Stoßfängers installiert ist, kann es in mindestens einer Ausführungsform zwei Strahlen erzeugen, die den toten Winkel hinter und neben dem Fahrzeug konstant überwachen. In mindestens einer Ausführungsform können RADAR-Systeme mit kurzer Reichweite in dem ADAS-System 1338 zur Detektion des toten Winkels und/oder zur Spurwechselassistenz verwendet werden.
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 ferner Ultraschallsensor(en) 1362 beinhalten. Der/die Ultraschallsensor(en) 1362, die vorne, hinten und/oder an den Seiten des Fahrzeugs 1300 positioniert sein können, können als Einparkhilfe und/oder zur Erstellung und Aktualisierung eines Belegungsgitters verwendet werden. In mindestens einer Ausführungsform kann eine große Vielfalt von Ultraschallsensor(en) 1362 verwendet werden und können unterschiedliche Ultraschallsensor(en) 1362 für unterschiedliche Detektionsreichweiten (z. B. 2,5 m, 4 m) verwendet werden. In mindestens einer Ausführungsform können die Ultraschallsensor(en) 1362 bei funktionellen Sicherheitslevels von ASIL B betrieben werden.
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 LIDAR-Sensor(en) 1364 beinhalten. Der/die LIDAR-Sensor(en) 1364 können zur Objekt- und Fußgängererkennung, Notbremsung, Kollisionsvermeidung und/oder andere Funktionen verwendet werden. In mindestens einer Ausführungsform können der/die LIDAR-Sensor(en) 1364 dem funktionellen Sicherheitslevel ASIL B entsprechen. In mindestens einer Ausführungsform kann das Fahrzeug 1300 mehrere LIDAR-Sensoren 1364 (z. B. zwei, vier, sechs usw.) beinhalten, die Ethernet verwenden können (um z. B. Daten für einen Gigabit-Ethernet-Switch bereitzustellen).
  • In mindestens einer Ausführungsform können die LIDAR-Sensor(en) 1364 dazu in der Lage sein, eine Liste von Objekten und deren Abstände für ein 360-Grad-Sichtfeld bereitzustellen. In mindestens einer Ausführungsform können handelsübliche LIDAR-Sensor(en) 1364 zum Beispiel eine beworbene Reichweite von ungefähr 100 m aufweisen, mit einer Genauigkeit von 2 cm-3 cm und mit Unterstützung für eine 100 Mbps-Ethernet-Verbindung. In mindestens einer Ausführungsform können ein oder mehrere nicht vorstehende LIDAR-Sensoren 1364 verwendet werden. In einer solchen Ausführungsform können der/die LIDAR-Sensor(en) 1364 als eine kleine Vorrichtung implementiert werden, das in die Front, das Heck, die Seiten und/oder die Ecken des Fahrzeugs 1300 eingebettet werden kann. In mindestens einer Ausführungsform können die LIDAR-Sensor(en) 1364 in einer derartigen Ausführungsform ein horizontales Sichtfeld von bis zu 120 Grad und ein vertikales Sichtfeld von bis zu 35 Grad mit einer Reichweite von 200 m selbst bei Objekten mit niedrigem Reflexionsvermögen bereitstellen. In mindestens einer Ausführungsform können die an der Front montierte(n) LIDAR-Sensor(en) 1364 für ein horizontales Sichtfeld zwischen 45 Grad und 135 Grad konfiguriert sein.
  • In mindestens einer Ausführungsform können auch LIDAR-Technologien, wie z. B. 3D-Blitz-LIDAR, verwendet werden. 3D-Blitz-LIDAR verwendet einen Blitz eines Lasers als eine Übertragungsquelle, um die Umgebung des Fahrzeugs 1300 bis zu ungefähr 200 m zu erleuchten. In mindestens einer Ausführungsform umfasst eine Blitz-LIDAR-Einheit ohne Einschränkung einen Rezeptor, der die Laserpuls-Laufzeit und das reflektierte Licht an jedem Pixel aufzeichnet, was wiederum der Reichweite vom Fahrzeug 1300 zu Objekten entspricht. In mindestens einer Ausführungsform kann Flash-LIDAR ermöglichen, dass mit jedem Laserblitz hochgenaue und verzeichnungsfreie Bilder der Umgebung erzeugt werden. In mindestens einer Ausführungsform können vier Flash-LIDAR-Sensoren eingesetzt werden, einer an jeder Seite des Fahrzeugs 1300. In mindestens einer Ausführungsform beinhalten 3D-Flash-LIDAR-Systeme ohne Einschränkung eine Festkörper-3D-Staring-Array-LIDAR-Kamera ohne bewegliche Teile außer einem Lüfter (z. B. eine nicht scannende LIDAR-Vorrichtung). In mindestens einer Ausführungsform kann die Blitz-LIDAR-Vorrichtung einen 5-Nanosekunden-Laserpuls der Klasse I (augensicher) pro Bild verwenden und kann das reflektierte Laserlicht in Form von 3D-Reichweitenpunktwolken und gemeinsam registrierten Intensitätsdaten erfassen.
  • In mindestens einer Ausführungsform kann das Fahrzeug ferner (einen) IMU-Sensor(en) 1366 beinhalten. In mindestens einer Ausführungsform können der/die IMU-Sensor(en) 1366 in mindestens einer Ausführungsform in der Mitte der Hinterachse des Fahrzeugs 1300 angeordnet sein. In mindestens einer Ausführungsform können der/die IMU-Sensor(en) 1366 zum Beispiel und ohne Einschränkung (einen) Beschleunigungsmesser, (ein) Magnetometer, (ein) Gyroskop(e), (einen) Magnetkompass(e) und/oder andere Sensorarten beinhalten. In mindestens einer Ausführungsform, wie z. B. in sechsachsigen Anwendungen, kann (können) der (die) IMU-Sensor(en) 1366 ohne Einschränkung Beschleunigungsmesser und Gyroskope beinhalten. In mindestens einer Ausführungsform, wie z. B. in neunachsigen Anwendungen, kann/können der/die IMU-Sensor(en) 1366 ohne Einschränkung Beschleunigungsmesser, Gyroskope und Magnetometer beinhalten.
  • In mindestens einer Ausführungsform können der/die IMU-Sensor(en) 1366 als ein miniaturisiertes GPS-gestütztes Trägheitsnavigationssystem (GPS-Aided Inertial Navigation System - „GPS/INS“) mit hoher Performance implementiert sein, das Trägheitssensoren von mikroelektromechanischen Systemen („MEMS“), einen hochempfindlichen GPS-Empfänger und weiterentwickelte Kalman-Filteralgorithmen kombiniert, um Schätzungen von Position, Geschwindigkeit und Stellung bereitzustellen. In mindestens einer Ausführungsform können der/die IMU-Sensor(en) 1366 es dem Fahrzeug 1300 ermöglichen, den Kurs zu schätzen, ohne dass Eingaben von einem Magnetsensor erforderlich sind, indem vom GPS an den/die IMU-Sensor(en) 1366 Änderungen der Geschwindigkeit direkt beobachtet und korreliert werden. In mindestens einer Ausführungsform können die IMU-Sensor(en) 1366 und GNSS-Sensor(en) 1358 in einer einzelnen integrierten Einheit kombiniert sein.
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 ein oder mehrere Mikrofone 1396 beinhalten, die im und/oder um das Fahrzeug 1300 herum angebracht sind. In mindestens einer Ausführungsform können die Mikrofon(e) 1396 unter anderem zur Detektion und Identifizierung von Einsatzfahrzeugen verwendet werden.
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 ferner eine beliebige Anzahl von Kameratypen beinhalten, darunter Stereokamera(s) 1368, Weitsichtkamera(s) 1370, Infrarotkamera(s) 1372, Rundumkamera(s) 1374, Langstreckenkamera(s) 1398, Mittelstreckenkamera(s) 1376 und/oder andere Kameratypen. In mindestens einer Ausführungsform können Kameras verwendet werden, um Bilddaten um die gesamte Peripherie des Fahrzeugs 1300 herum zu erfassen. In mindestens einer Ausführungsform hängt die Art der verwendeten Kameras vom Fahrzeug 1300 ab. In mindestens einer Ausführungsform kann eine beliebige Kombination von Kameratypen verwendet werden, um die notwendige Abdeckung um das Fahrzeug 1300 herum bereitzustellen. In mindestens einer Ausführungsform kann die Anzahl der Kameras in Abhängigkeit von der Ausführungsform unterschiedlich sein. In mindestens einer Ausführungsform könnte das Fahrzeug 1300 zum Beispiel sechs Kameras, sieben Kameras, zehn Kameras, zwölf Kameras oder eine andere Anzahl von Kameras beinhalten. Kameras können zum Beispiel und ohne Einschränkung Gigabit Multimedia Serial Link („GMSL“) und/oder Gigabit Ethernet unterstützen. In mindestens einer Ausführungsform ist jede der Kamera(s) hierin bereits in Bezug auf 13A und 13B detaillierter beschrieben.
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 ferner Schwingungssensor(en) 1342 beinhalten. Die Schwingungssensor(en) 1342 können Schwingungen von Komponenten des Fahrzeugs 1300, wie etwa Achse(n), messen. Zum Beispiel können in mindestens einer Ausführungsform Änderungen der Schwingungen eine Änderung des Straßenbelags angeben. In mindestens einer Ausführungsform, wenn zwei oder mehr Vibrationssensoren 1342 verwendet werden, können die Unterschiede zwischen den Vibrationen verwendet werden, um die Reibung oder den Schlupf des Straßenbelags zu bestimmen (z. B., wenn der Unterschied der Vibration zwischen einer leistungsbetriebenen Achse und einer sich frei drehenden Achse besteht).
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 das ADAS-System 1338 beinhalten. Das ADAS-System 1338 kann in einigen Beispielen ohne Einschränkung ein SoC beinhalten. In mindestens einer Ausführungsform kann das ADAS-System 1338 ohne Einschränkung eine beliebige Anzahl und Kombination eines Systems zur autonomen/adaptiven/automatischen Geschwindigkeitssteuerung (autonomous/adaptive/automatic cruise control - „ACC“), eines Systems zur kooperativen adaptiven Geschwindigkeitssteuerung (cooperative adaptive cruise control - „CACC“), eines Systems zur Vorwärtszusammenstoßwarnung (forward crash warning - „FCW“), eines automatischen Systems zur Notbremsung („AEB“), eines Systems zur Spurverlassenswarnung („LDW“), eines Systems zur Spurhalteassistenz (lane keep assist - „LKA“), eines Systems zur Totwinkelwarnung (blind spot warning - „BSW“), eines Systems zur Querverkehrswarnung (rear cross-traffic warning - „RCTW“), eines Systems zur Kollisionswarnung (collision warning - „CW“), eines Systems zur Spurzentrierung (lane centering - „LC“) und/oder anderer Systeme, Merkmale und/oder Funktionen beinhalten.
  • In mindestens einer Ausführungsform kann das ACC-System RADAR-Sensor(en) 1360, LIDAR-Sensor(en) 1364 und/oder eine beliebige Anzahl von Kamera(s) verwenden. In mindestens einer Ausführungsform kann das ACC-System ein Längs-ACC-System und/oder ein Quer-ACC-System beinhalten. In mindestens einer Ausführungsform überwacht und steuert das Längs-ACC-System den Abstand zum Fahrzeug, das sich unmittelbar vor dem Fahrzeug 1300 befindet, und passt die Geschwindigkeit des Fahrzeugs 1300 automatisch an, um einen sicheren Abstand zu vorausfahrenden Fahrzeugen einzuhalten. In mindestens einer Ausführungsform führt das Quer-ACC-System eine Abstandshaltung durch und rät dem Fahrzeug 1300, die Fahrspuren zu wechseln, wenn dies erforderlich ist. In mindestens einer Ausführungsform ist die Quer-ACC mit anderen ADAS-Anwendungen, wie zum Beispiel LC und CW, verbunden.
  • In mindestens einer Ausführungsform verwendet das CACC-System Informationen von anderen Fahrzeugen, die über die Netzwerkschnittstelle 1324 und/oder die drahtlose(n) Antenne(n) 1326 von anderen Fahrzeugen über eine drahtlose Verknüpfung oder indirekt über eine Netzwerkverbindung (z. B. über das Internet) empfangen werden können. In mindestens einer Ausführungsform können direkte Verknüpfungen durch eine Fahrzeug-zu-Fahrzeug-(vehicle-to-vehicle - „V2V“-) Kommunikationsverknüpfung bereitgestellt werden, während indirekte Verknüpfungen durch eine Infrastruktur-zu-Fahrzeug- (infrastructure-to-vehicle - „I2V“-) Kommunikationsverknüpfung bereitgestellt werden können. Im Allgemeinen stellt das V2V-Kommunikationskonzept Informationen über unmittelbar vorausfahrende Fahrzeuge (z. B. Fahrzeuge, die sich unmittelbar vor dem und auf derselben Spur wie das Fahrzeug 1300 befinden) bereit, während das I2V-Kommunikationskonzept Informationen über den weiter entfernt vorausfahrenden Verkehr bereitstellt. In mindestens einer Ausführungsform kann das CACC-System entweder eine oder beide der I2V- und V2V-Informationsquellen beinhalten. In mindestens einer Ausführungsform kann das CACC-System angesichts der Informationen über Fahrzeuge vor dem Fahrzeug 1300 zuverlässiger sein und hat es das Potenzial, den Gleichmäßigkeit des Verkehrsfluss zu verbessern und Staus auf der Straße zu reduzieren.
  • In mindestens einer Ausführungsform ist das FCW-System so konstruiert, dass es den Fahrer vor einer Gefahr warnt, sodass der Fahrer eine korrigierend Handlung durchführen kann. In mindestens einer Ausführungsform verwendet das FCW-System eine nach vorn gerichtete Kamera und/oder RADAR-Sensor(en) 1360, die mit einem dedizierten Prozessor, DSP, FPGA und/oder ASIC gekoppelt sind, die elektrisch mit einer Rückmeldung des Fahrers gekoppelt sind, wie z. B. einer Anzeige, einem Lautsprecher und/oder einer vibrierenden Komponente. In mindestens einer Ausführungsform 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 einer Ausführungsform 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 spezifizierten Zeit- oder Abstandsparameters eine korrigierende Handlung durchführt. In mindestens einer Ausführungsform kann das AEB-System nach vom gerichtete Kamera(s) und/oder RADAR-Sensor(en) 1360 verwenden, die mit einem dedizierten Prozessor, DSP, FPGA und/oder ASIC gekoppelt sind. In mindestens einer Ausführungsform, wenn das AEB-System eine Gefahr erkennt, warnt das AEB-System typischerweise zuerst den Fahrer, um eine korrigierende Handlung durchzuführen, um eine Kollision zu vermeiden, und, wenn der Fahrer keine korrigierenden Handlung durchführt, kann das AEB-System automatisch die Bremsen in dem Bestreben betätigen, die Auswirkungen der vorhergesagten Kollision zu verhindern oder mindestens abzuschwächen. In mindestens einer Ausführungsform kann das AEB-System Techniken, wie zum Beispiel dynamische Bremsunterstützung und/oder Bremsung aufgrund eines bevorstehenden Zusammenstoßes, beinhalten.
  • In mindestens einer Ausführungsform stellt das LDW-System optische, akustische und/oder taktile Warnungen bereit, wie z. B. Lenkrad- oder Sitzvibrationen, um den Fahrer zu warnen, wenn das Fahrzeug 1300 die Fahrspurmarkierungen überquert. In mindestens einer Ausführungsform wird das LDW-System nicht aktiviert, wenn der Fahrer ein absichtliches Verlassen der Fahrspur durch Betätigen des Blinkers angibt. In mindestens einer Ausführungsform kann das LDW-System nach vorne gerichtete Kameras verwenden, die mit einem dedizierten Prozessor, DSP, FPGA und/oder ASIC gekoppelt sind, die elektrisch mit einer Rückmeldung des Fahrers gekoppelt sind, wie z. B. einer Anzeige, einem Lautsprecher und/oder einer vibrierenden Komponente. In mindestens einer Ausführungsform ist das LKA-System eine Variation des LDW-Systems. Das LKA-System stellt eine Lenkeingabe oder eine Bremsung bereit, um das Fahrzeug 1300 zu korrigieren, wenn das Fahrzeug 1300 beginnt, die Fahrspur zu verlassen.
  • In mindestens einer Ausführungsform erkennt und warnt das BSW-System den Fahrer vor Fahrzeugen im toten Winkel eines Automobils. In mindestens einer Ausführungsform kann das BSW-System einen optischen, akustischen und/oder taktilen Alarm bereitstellen, um anzugeben, dass Einfädeln in oder Wechseln der Fahrspuren unsicher ist. In mindestens einer Ausführungsform kann das BSW-System eine zusätzliche Warnung ausgeben, wenn der Fahrer den Blinker betätigt. In mindestens einer Ausführungsform kann das BSW- System nach hinten gerichtete Kamera(s) und/oder RADAR-Sensor(en) 1360 verwenden, die mit einem dedizierten Prozessor, DSP, FPGA und/oder ASIC gekoppelt sind, die elektrisch mit einer Rückmeldung des Fahrers gekoppelt sind, wie z. B. einer Anzeige, einem Lautsprecher und/oder einer vibrierenden Komponente.
  • In mindestens einer Ausführungsform kann das RCTW-System eine optische, akustische und/oder taktile Benachrichtigung bereitstellen, wenn ein Objekt außerhalb der Reichweite der Heckkamera erkannt wird, wenn das Fahrzeug 1300 rückwärts fährt. In mindestens einer Ausführungsform beinhaltet das RCTW-System das AEB-System, um sicherzustellen, dass die Fahrzeugbremsen betätigt werden, um einen Zusammenstoß zu vermeiden. In mindestens einer Ausführungsform kann das RCTW-System einen oder mehrere nach hinten gerichtete RADAR-Sensor(en) 1360 verwenden, die mit einem dedizierten Prozessor, DSP, FPGA und/oder ASIC gekoppelt sind, die elektrisch mit einer Rückmeldung des Fahrers gekoppelt sind, wie z. B. einer Anzeige, einem Lautsprecher und/oder einer vibrierenden Komponente.
  • In mindestens einer Ausführungsform können herkömmliche ADAS-Systeme anfällig für falsch positive Ergebnisse sein, die für den Fahrer ärgerlich und ablenkend sein können, aber typischerweise nicht katastrophal sind, da herkömmliche ADAS-Systeme den Fahrer warnen und es dem Fahrer ermöglichen, zu entscheiden, ob eine Sicherheitsbedingung wirklich vorliegt und entsprechend zu handeln. In mindestens einer Ausführungsform entscheidet das Fahrzeug 1300 im Falle von widersprüchlichen Ergebnissen selbst, ob das Ergebnis eines primären Computers oder eines sekundären Computers (z. B. einer ersten Steuerung 1336 oder einer zweiten Steuerung 1336) zu beachten ist. In mindestens einer Ausführungsform kann das ADAS-System 1338 zum Beispiel ein Reserve- und/oder sekundärer Computer sein, der einem Rationalitätsmodul eines Reserve-Computers Wahrnehmungsinformationen bereitstellt. In mindestens einer Ausführungsform kann der Rationalitätsmonitor des Backup-Computers eine redundante, diverse Software auf Hardware-Komponenten ausführen, um Fehler in der Wahrnehmung und bei dynamischen Fahr-Tasks zu erkennen. In mindestens einer Ausführungsform können die Ausgaben des ADAS-Systems 1338 für eine Kontroll-MCU bereitgestellt werden. In mindestens einer Ausführungsform, wenn Ausgaben vom primären Computer und sekundären Computer einander widersprechen, bestimmt die Kontroll-MCU, wie der Widerspruch beizulegen ist, um einen sicheren Betrieb sicherzustellen.
  • In mindestens einer Ausführungsform kann der primäre Computer so konfiguriert sein, dass er der Kontroll-MCU eine Konfidenzbewertung bereitstellt, welche die Konfidenz des primären Computers in das gewählte Ergebnis angibt. In mindestens einer Ausführungsform, wenn die Konfidenzbewertung einen Schwellenwert überschreitet, kann die Kontroll-MCU der Führung des primären Computers folgen, unabhängig davon, ob der sekundäre Computer ein widersprüchliches oder inkonsistentes Ergebnis bereitstellt. In mindestens einer Ausführungsform, in der die Konfidenzbewertung den Schwellenwert nicht erreicht und der primäre und der sekundäre Computer unterschiedliche Ergebnisse angeben (z. B. einen Widerspruch), kann die Kontroll-MCU zwischen den Computern vermitteln, um ein geeignetes Resultat zu bestimmen.
  • In mindestens einer Ausführungsform kann die Kontroll-MCU so konfiguriert sein, dass sie ein neuronales Netzwerk/neuronale Netzwerke ausführt, das/die so trainiert und konfiguriert ist/sind, dass es/sie mindestens teilweise basierend auf den Ausgaben des primären Computers und des sekundären Computers die Bedingungen bestimmt/bestimmen, unter denen der sekundäre Computer Fehlalarme bereitstellt. In mindestens einer Ausführungsform kann/können das neuronale Netzwerk/die neuronalen Netzwerke in der Kotroll-MCU lernen, wann der Ausgabe des sekundären Computers vertraut werden kann und wann nicht. Zum Beispiel kann/können in mindestens einer Ausführungsform, wenn der sekundäre Computer ein RADAR-basiertes FCW-System ist, ein neuronales Netzwerk/neuronale Netzwerke in der Kontroll-MCU lernen, wenn das FCW-System metallische Objekte identifiziert, die tatsächlich keine Gefahren sind, wie z. B. ein Abflussgitter oder ein Gullydeckel, das/der einen Alarm auslöst. In mindestens einer Ausführungsform, wenn der sekundäre Computer ein kamerabasiertes LDW-System ist, kann ein neuronales Netzwerk in der Kontroll-MCU lernen, die LDW zu überschreiben, wenn Fahrradfahrer oder Fußgänger vorhanden sind und ein Verlassen der Fahrspur tatsächlich das sicherste Manöver ist. In mindestens einer Ausführungsform kann die Kontroll-MCU mindestens eines von einem DLA oder einer GPU beinhalten, der/die für die Ausführung von (einem) neuronalen Netzwerk(en) mit assoziiertem Speicher geeignet ist. In mindestens einer Ausführungsform kann die Kontroll-MCU eine Komponente eines oder mehrerer SoC(s) 1304 umfassen und/oder als solche enthalten sein.
  • In mindestens einer Ausführungsform kann das ADAS-System 1338 einen sekundären Computer beinhalten, der die ADAS-Funktionalität unter Verwendung der traditionellen Regeln des maschinellen Sehens durchführt. In mindestens einer Ausführungsform kann der sekundäre Computer klassische Regeln des maschinellen Sehens (wenn-dann) verwenden und kann das Vorhandensein eines neuronalen Netzwerks/von neuronalen Netzwerken in der Kontroll-MCU die Zuverlässigkeit, Sicherheit und Performance verbessern. Zum Beispiel macht in mindestens einer Ausführungsform die vielfältige Implementation und absichtliche Nicht-Identität das Gesamtsystem fehlertoleranter, insbesondere gegenüber Fehlern, die durch Software(oder Software-Hardware-Schnittstellen)-Funktionalität verursacht werden. Wenn zum Beispiel in mindestens einer Ausführungsform ein Software-Bug oder -Fehler in der auf dem primären Computer laufenden Software vorliegt und ein nicht identischer Software-Code, der auf dem sekundären Computer läuft, dasselbe Gesamtergebnis bereitstellt, dann kann die Kontroll-MCU eine größere Konfidenz darin haben, dass das Gesamtergebnis korrekt ist und der Bug in der Software oder Hardware auf dem primären Computer keinen wesentlichen Fehler verursacht.
  • In mindestens einer Ausführungsform kann die Ausgabe des ADAS-Systems 1338 in den Wahrnehmungsblock des primären Computers und/oder in den Block für dynamische Fahr-Tasks des primären Computers eingespeist werden. Wenn das ADAS-System 1338 z. B. eine Vorwärtszusammenstoßwarnung aufgrund eines unmittelbar vorausliegenden Objekts angibt, kann der Wahrnehmungsblock in mindestens einer Ausführungsform diese Information bei der Identifizierung von Objekten verwenden. In mindestens einer Ausführungsform kann der sekundäre Computer über sein eigenes neuronales Netzwerk verfügen, das trainiert ist und somit das Risiko von falsch positiven Ergebnissen reduziert, wie hierin beschrieben.
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 ferner ein Infotainment-SoC 1330 (z. B. ein fahrzeuginternes Infotainment-System (in-vehicle infotainment system - IVI-System)) beinhalten. Obwohl als ein SoC veranschaulicht und beschrieben, kann das Infotainment-System 1330 in mindestens einer Ausführungsform kein SoC sein und kann ohne Einschränkung zwei oder mehr diskrete Komponenten beinhalten. In mindestens einer Ausführungsform kann das Infotainment-SoC 1330 ohne Einschränkung eine Kombination aus Hardware und Software beinhalten, die verwendet werden kann, um dem Fahrzeug 1300 Audio (z. B. Musik, einen persönlichen digitalen Assistenten, Navigationsanweisungen, Nachrichten, Radio usw.), Video (z. B. TV, Filme, Streaming usw.), Telefon (z. B. Freisprechen), Netzverbindungsfähigkeit (z. B. LTE, WiFi usw.) und/oder Informationsdienste (z. B. Navigationssysteme, Rückwärtseinparkhilfe, ein Radiodatensystem, fahrzeugbezogene Informationen wie etwa Kraftstofffüllstand, insgesamt zurückgelegte Strecke, Bremskraftstofffüllstand, Ölfüllstand, Tür öffnen/schließen, Luftfilterinformationen usw.) bereitzustellen. Das Infotainment-SoC 1330 könnte zum Beispiel Radios, Plattenspieler, Navigationssysteme, Videowiedergabevorrichtungen, USB- und Bluetooth-Verbindungsfähigkeit, Carputer, In-Car-Entertainment, WiFi, Audiosteuerelemente am Lenkrad, ein Freisprech-Sprachsteuerelement, eine Heads-up-Anzeige (heads-up display - „HUD“), eine HMI-Anzeige 1334, eine Telematikvorrichtung, ein Steuerfeld (z. B. zum Steuern von und/oder Interagieren mit verschiedenen Komponenten, Merkmalen und/oder Systemen) und/oder andere Komponenten beinhalten. In mindestens einer Ausführungsform kann das Infotainment-SoC 1330 ferner dazu verwendet werden, um dem/den Benutzer(n) des Fahrzeugs Informationen (z. B. optisch und/oder akustisch) bereitzustellen, wie z. B. Informationen vom ADAS-System 1338, 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 einer Ausführungsform kann das Infotainment-SoC 1330 eine beliebige Menge und einen beliebigen Typ von GPU-Funktionalität beinhalten. In mindestens einer Ausführungsform kann das Infotainment-SoC 1330 über den Bus 1302 (z. B. CAN-Bus, Ethernet usw.) mit anderen Vorrichtungen, Systemen und/oder Komponenten des Fahrzeugs 1300 kommunizieren. In mindestens einer Ausführungsform kann das Infotainment-SoC 1330 an eine Überwachungs-MCU gekoppelt sein, sodass eine GPU eines Infotainment-Systems einige Selbstfahrfunktionen ausführen kann, falls die primäre(n) Steuerung(en) 1336 (z. B. primäre und/oder Reserve-Computer des Fahrzeugs 1300) ausfallen. In mindestens einer Ausführungsform kann das Infotainment-SoC 1330 das Fahrzeug 1300 in einen Modus des Fahrens zu einem sicheren Halt versetzen, wie hierin beschrieben.
  • In mindestens einer Ausführungsform kann das Fahrzeug 1300 ferner ein Kombiinstrument 1332 (z. B. ein digitales Armaturenbrett, ein elektronisches Kombiinstrument, eine digitale Instrumententafel usw.) beinhalten. Das Kombiinstrument 1332 kann ohne Einschränkung eine Steuerung und/oder einen Supercomputer (z. B. eine diskrete Steuerung oder einen diskreten Supercomputer) beinhalten. In mindestens einer Ausführungsform kann das Kombiinstrument 1332 ohne Einschränkung eine beliebige Anzahl und Kombination eines Satzes von Messausrüstung beinhalten, wie etwa Geschwindigkeitsmesser, Kraftstoffstand, Öldruck, Drehzahlmesser, Wegstreckenzähler, Blinker, Schaltknüppelpositionsangabe, Sicherheitsgurt-Warnleuchte(n), Feststellbremsen-Warnleuchte(n), Motorfehlfunktionsleuchte(n), Informationen über ergänzende Rückhaltesysteme (z. B. Airbags), Beleuchtungssteuerelemente, Sicherheitssystemsteuerelemente, Navigationsinformationen usw. In einigen Beispielen können Informationen angezeigt und/oder von dem Infotainment-SoC 1330 und dem Kombiinstrument 1332 gemeinsam genutzt werden. In mindestens einer Ausführungsform kann das Kombiinstrument 1332 als Teil des Infotainment-SoC 1330 enthalten sein oder umgekehrt.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann eine Ableitungs- und/oder Trainingslogik 1015 im System der 13C zum Ableiten oder Vorhersagen von Operationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von neuronalen Netzwerktrainingsoperationen, Funktionen und/oder Architekturen von neuronalen Netzwerken oder in dieser Schrift beschriebenen Anwendungsfällen von neuronalen Netzwerken berechnet wurden.
  • In mindestens einer Ausführungsform wird 13C verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 13D ist eine Darstellung eines Systems 1376 zur Kommunikation zwischen cloudbasierten Server(n) und dem autonomen Fahrzeug 1300 aus 13A gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann das System 1376 ohne Einschränkung den/die Server 1378, das/die Netzwerk(e) 1390 und eine beliebige Anzahl und Art von Fahrzeugen, einschließlich des Fahrzeugs 1300, beinhalten. Der/die Server 1378 kann/können ohne Einschränkung eine Vielzahl von GPUs 1384(A)-1384(H) (hierin zusammenfassend als GPUs 1384 bezeichnet), PCIe-Switches 1382(A)-1382(H) (hierin zusammenfassend als PCIe-Switches 1382 bezeichnet) und/oder CPUs 1380(A)-1380(B) (hierin zusammenfassend als CPUs 1380 bezeichnet) beinhalten. Die GPUs 1384, CPUs 1380 und PCIe-Switches 1382 können mit Hochgeschwindigkeitszusammenschaltungen miteinander verbunden sein, wie z. B. und ohne Einschränkung den von NVIDIA entwickelten NVLink-Schnittstellen 1388 und/oder PCIe-Verbindungen 1386. In mindestens einer Ausführungsform sind die GPUs 1384 über ein NVLink- und/oder NVSwitch-SoC verbunden und die GPUs 1384 und die PCIe-Switches 1382 über PCIe-Zusammenschaltungen verbunden. In mindestens einer Ausführungsform sind zwar acht GPUs 1384, zwei CPUs 1380 und vier PCIe-Switches 1382 veranschaulicht, jedoch ist dies nicht als Einschränkung auszulegen. In mindestens einer Ausführungsform kann jeder des/der Server(s) 1378 ohne Einschränkung eine beliebige Anzahl von GPUs 1384, CPUs 1380 und/oder PCIe-Switches 1382 in beliebiger Kombination beinhalten. Zum Beispiel könnte(n) in mindestens einer Ausführungsform der/die Server 1378 jeweils acht, sechzehn, zweiunddreißig und/oder mehr GPUs 1384 beinhalten.
  • In mindestens einer Ausführungsform kann der/können die Server 1378 über die Netz(e) 1390 und von Fahrzeugen Bilddaten empfangen, die für Bilder repräsentativ sind, die unerwartete oder veränderte Straßenbedingungen zeigen, wie etwa kürzlich begonnene Straßenarbeiten. In mindestens einer Ausführungsform können der/die Server 1378 über das/die Netzwerk(e) 1390 und an die Fahrzeuge neuronale Netzwerke 1392, aktualisierte neuronale Netzwerke 1392 und/oder Karteninformationen 1394 übertragen, einschließlich, ohne Einschränkung, Informationen über Verkehrs- und Straßenbedingungen. In mindestens einer Ausführungsform können Aktualisierungen der Karteninformationen 1394 ohne Einschränkung Aktualisierungen für die HD-Karte 1322 beinhalten, wie etwa Informationen bezüglich Baustellen, Schlaglöchern, Umleitungen, Überschwemmungen und/oder anderer Hindernisse. In mindestens einer Ausführungsform können die neuronalen Netzwerke 1392, aktualisierten neuronalen Netzwerke 1392 und/oder Karteninformationen 1394 aus einem neuen Training und/oder Erfahrungen resultieren, das/die in Daten dargestellt wird/werden, die von einer beliebigen Anzahl von Fahrzeugen in der Umgebung empfangen wurden, und/oder mindestens teilweise basierend auf Training, das in einem Rechenzentrum (z. B. unter Verwendung von dem/den Server(n) 1378 und/oder anderen Servern) durchgeführt wurde.
  • In mindestens einer Ausführungsform kann der/können die Server 1378 verwendet werden, um Modelle des maschinellen Lernens (z. B. neuronale Netze) mindestens zum Teil auf Grundlage von Trainingsdaten zu trainieren. Die Trainingsdaten kñnnen von Fahrzeugen erzeugt werden und/oder können sie in einer Simulation (z. B. unter Verwendung einer Spiele-Engine) erzeugt werden. In mindestens einer Ausführungsform wird eine beliebige Menge von Trainingsdaten mit Tags versehen (z. B., wenn das assoziierte neuronale Netz von überwachtem Lernen profitiert) und/oder einer anderen Vorverarbeitung unterzogen. In mindestens einer Ausführungsform wird eine beliebige Menge von Trainingsdaten nicht mit Tags versehen und/oder vorverarbeitet (z. B., wenn das damit assoziierte neuronale Netz kein überwachtes Lernen erfordert). In mindestens einer Ausführungsform können, sobald die Modelle des maschinellen Lernens trainiert sind, die Modelle des maschinellen Lernens durch Fahrzeuge verwendet werden (z. B. über die Netz(e) 1390 an Fahrzeuge übertragen werden) und/oder die Modelle des maschinellen Lernens können durch den/die Server 1378 verwendet werden, um Fahrzeuge aus der Ferne zu überwachen.
  • In mindestens einer Ausführungsform kann der/können die Server 1378 Daten von Fahrzeugen empfangen und die Daten auf aktuelle neuronale Echtzeit-Netze zum intelligenten Echtzeit-Inferenzieren anwenden. In mindestens einer Ausführungsform kann der/können die Server 1378 Deep-Learning-Supercomputer und/oder dedizierte KI-Computer beinhalten, die durch die GPU(s) 1384 angetrieben werden, wie etwa die von NVIDIA entwickelten DGX- und DGX-Station-Maschinen. In mindestens einer Ausführungsform können der/die Server 1378 jedoch eine Deep-Learning-Infrastruktur beinhalten, die CPU-angetriebene Rechenzentren verwendet.
  • In mindestens einer Ausführungsform kann die Deep-Learning-Infrastruktur des/der Server(s) 1378 zum schnellen Echtzeit-Inferenzieren in der Lage sein und diese Fähigkeit verwenden, um den Zustand von Prozessoren, Software und/oder assoziierter Hardware in dem Fahrzeug 1300 zu bewerten und zu verifizieren. Zum Beispiel kann in mindestens einer Ausführungsform die Deep-Learning-Infrastruktur periodische Aktualisierungen von dem Fahrzeug 1300 empfangen, wie etwa eine Sequenz von Bildern und/oder Objekten, die das Fahrzeug 1300 in dieser Sequenz von Bildern lokalisiert hat (z. B. über maschinelles Sehen und/oder andere Techniken des maschinellen Lernens zur Objektklassifizierung). In mindestens einer Ausführungsform kann die Deep-Learning-Infrastruktur ihr eigenes neuronales Netz ausführen, um Objekte zu identifizieren und sie mit Objekten zu vergleichen, die durch das Fahrzeug 1300 identifiziert wurden, und falls die Ergebnisse nicht übereinstimmen und die Deep-Learning-Infrastruktur zu dem Schluss kommt, dass die KI in dem Fahrzeug 1300 eine Fehlfunktion aufweist, dann kann der/können die Server 1378 ein Signal an das Fahrzeug 1300 übertragen, das einen ausfallsicheren Computer des Fahrzeugs 1300 anweist, die Steuerung zu übernehmen, die Fahrgäste zu benachrichtigen und ein sicheres Parkmanöver durchzuführen.
  • In mindestens einer Ausführungsform können der/die Server 1378 GPU(s) 1384 und einen oder mehrere programmierbare Ableitungsbeschleuniger (z. B. TensorRT 3 von NVIDIA) beinhalten. In mindestens einer Ausführungsform kann die Kombination von GPUangetriebenen Servern und Ableitungsbeschleunigung eine Reaktionsfähigkeit in Echtzeit ermöglichen. In mindestens einer Ausführungsform, wie etwa, wenn die Rechenleistung weniger kritisch ist, können durch CPUs, FPGAs und andere Prozessoren angetriebene Server zum Inferenzieren verwendet werden. In mindestens einer Ausführungsform werden die Hardware-Struktur(en) 1015 verwendet, um eine oder mehrere Ausführungsformen durchzuführen. Details zur Hardwarestruktur(x) 1015 werden weiter unten in Verbindung mit 10A und/oder 10B bereitgestellt.
  • COMPUTERSYSTEME
  • 14 ist ein Blockdiagramm, das ein beispielhaftes Computersystem veranschaulicht, das ein System mit zusammengeschalteten Vorrichtungen und Komponenten, ein System auf einem Chip (SOC) oder eine Kombination davon 1400 sein kann, gebildet mit einem Prozessor, der Ausführungseinheiten zum Ausführen einer Anweisung beinhalten kann, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann ein Computersystem 1400 ohne Einschränkung eine Komponente, wie etwa einen Prozessor 1402, beinhalten, um Ausführungseinheiten einschließlich Logik zum Durchführen von Algorithmen für Prozessdaten gemäß der vorliegenden Offenbarung zu verwenden, wie etwa in der hierin beschriebenen Ausführungsform. In mindestens einer Ausführungsform kann das Computersystem 1400 Prozessoren beinhalten, wie etwa PENTIUM®-Prozessorfamilie, Mikroprozessoren von Xeon™, Itanium®, XScale™ und/oder StrongARM™, Intel® Core™ oder Intel® Nervana™, die von Intel Corporation of Santa Clara, Kalifornien, erhältlich sind, obwohl auch andere Systeme (die PCs mit anderen Mikroprozessoren, Engineering-Workstations, Set-Top-Boxen und dergleichen beinhalten) verwendet werden können. In mindestens einer Ausführungsform kann das Computersystem 1400 eine Version des WINDOWS-Betriebssystems ausführen, das von der Microsoft Corporation in Redmond, Washington, erhältlich ist, obwohl auch andere Betriebssysteme (zum Beispiel UNIX und Linux), eingebettete Software und/oder grafische Benutzeroberflächen verwendet werden können.
  • Ausführungsformen können in anderen Vorrichtungen wie etwa tragbaren Vorrichtungen und eingebetteten Anwendungen verwendet werden. Einige Beispiele für tragbare Vorrichtungen sind Mobiltelefone, Internetprotokoll-Vorrichtungen, Digitalkameras, persönliche digitale Assistenten (personal digital assistants - „PDAs“) und tragbare PCs. In mindestens einer Ausführungsform können eingebettete Anwendungen einen Mikrocontroller, einen digitalen Signalprozessor (digital signal processor - „DSP“), ein System auf einem Chip, Netzcomputer („NetPCs“), Set-Top-Boxen, Netz-Hubs, Switches für ein Weitverkehrsnetz (wide area network - „WAN“) oder ein beliebiges anderes System beinhalten, das eine oder mehrere Anweisungen gemäß mindestens einer Ausführungsform durchführen kann.
  • In mindestens einer Ausführungsform kann das Computersystem 1400 ohne Einschränkung den Prozessor 1402 beinhalten, der ohne Einschränkung eine oder mehrere Ausführungseinheiten 1408 beinhalten kann, um Trainieren und/oder Inferenzieren eines Modells des maschinellen Lernens gemäß den hierin beschriebenen Techniken durchzuführen. In mindestens einer Ausführungsform ist das System 1400 ein Einzelprozessor-Desktop- oder -Serversystem, in einer weiteren Ausführungsform kann das System 1400 aber auch ein Multiprozessorsystem sein. In mindestens einer Ausführungsform kann der Prozessor 1402 ohne Einschränkung einen Mikroprozessor für einen Complex Instruction Set Computer („CISC“), einen Mikroprozessor für Reduced Instruction Set Computing („RISC“), einen Very-Long-Instruction-Word-(„VLIW“-)Mikroprozessor, einen Prozessor, der eine Kombination von Anweisungssätzen implementiert, oder eine beliebige andere Prozessorvorrichtung, wie etwa einen digitalen Signalprozessor, beinhalten. In mindestens einer Ausführungsform kann der Prozessor 1402 an einen Prozessorbus 1410 gekoppelt sein, der Datensignale zwischen dem Prozessor 1402 und anderen Komponenten in dem Computersystem 1400 übertragen kann.
  • In mindestens einer Ausführungsform kann der Prozessor 1402 ohne Einschränkung einen internen Level-1-(„L1“-)Cache-Speicher („Cache“) 1404 beinhalten. In mindestens einer Ausführungsform kann der Prozessor 1402 einen einzelnen internen Cache oder mehrere Levels von internem Cache aufweisen. In mindestens einer Ausführungsform kann sich der Cache-Speicher extern zu dem Prozessor 1402 befinden. Andere Ausführungsformen können in Abhängigkeit von der konkreten Implementation und den Anforderungen auch eine Kombination aus sowohl internen als auch externen Caches beinhalten. In mindestens einer Ausführungsform kann die Registerdatei 1406 verschiedene Arten von Daten in verschiedenen Registern speichern, die ohne Einschränkung ein Ganzzahlregister, Gleitkommaregister, Statusregister und Anweisungsverweisregister beinhalten.
  • In mindestens einer Ausführungsform befindet sich die Ausführungseinheit 1408, einschließlich ohne Einschränkung der Logik zum Durchführen von Integer- und Gleitkommaoperationen, ebenfalls in dem Prozessor 1402. Der Prozessor 1402 kann auch Festwertspeicher (read only memory - „ROM“) für Mikrocode („µcode“) beinhalten, der Mikrocode für bestimmte Makroanweisungen speichert. In mindestens einer Ausführungsform kann die Ausführungseinheit 1408 Logik zum Handhaben eines gepackten Anweisungssatzes 1409 beinhalten. In mindestens einer Ausführungsform können Operationen, die von vielen Multimediaanwendungen verwendet werden, unter Verwendung von gepackten Daten in einem Allzweckprozessor 1402 durch das Beinhalten des gepackten Anweisungssatzes 1409 in einen Anweisungssatz eines Allzweckprozessors 1402 durchgeführt werden, zusammen mit einer zugehörigen Schaltung, um Befehle auszuführen. In einer oder mehreren Ausführungsformen können viele Multimediaanwendungen beschleunigt und effizienter durch das Verwenden der vollen Breite des Datenbusses eines Prozessors zum Ausführen von Operationen an gepackten Daten ausgeführt werden, wodurch die Notwendigkeit beseitigt werden kann, kleinere Dateneinheiten über den Datenbus des Prozessors zu übertragen, um eine oder mehrere Operationen ein Datenelement nach dem anderen durchzuführen.
  • In mindestens einer Ausführungsform kann die Ausführungseinheit 1408 auch in Mikrocontrollern, eingebetteten Prozessoren, Grafikvorrichtungen, DSPs und anderen Typen von Logikschaltungen verwendet werden. In mindestens einer Ausführungsform kann das Computersystem 1400 ohne Einschränkung einen Speicher 1420 beinhalten. In mindestens einer Ausführungsform kann der Speicher 1420 als ein dynamischer Direktzugriffsspeicher (Dynamic Random Access Memory - „DRAM“), ein statischer Direktzugriffsspeicher (Static Random Access Memory - „SRAM“), eine Flash-Speichervorrichtung oder eine andere Speichervorrichtung umgesetzt sein. Der Speicher 1420 kann Anweisung(en) 1419 und/oder Daten 1421 speichern, die durch Datensignale dargestellt sind, die durch den Prozessor 1402 ausgeführt werden können.
  • In mindestens einer Ausführungsform kann der Systemlogikchip an den Prozessorbus 1410 und den Speicher 1420 gekoppelt sein. In mindestens einer Ausführungsform kann ein Systemlogikchip ohne Einschränkung einen Speichersteuerungs-Hub (memory controller hub - „MCH“) 1416 beinhalten und der Prozessor 1402 mit dem MCH 1416 über den Prozessorbus 1410 kommunizieren. In mindestens einer Ausführungsform kann der MCH 1416 dem Speicher 1420 einen Speicherpfad 1418 mit hoher Bandbreite für die Anweisungs- und Datenspeicherung sowie für die Speicherung von Grafikbefehlen, Daten und Texturen bereitstellen. In mindestens einer Ausführungsform kann der MCH 1416 Datensignale zwischen dem Prozessor 1402, dem Speicher 1420 und anderen Komponenten im Computersystem 1400 leiten und Datensignale zwischen dem Prozessorbus 1410, dem Speicher 1420 und einer System-E/A 1422 überbrücken. In mindestens einer Ausführungsform kann der Systemlogikchip einen Grafikport zum Koppeln an eine Grafiksteuerung bereitstellen. In mindestens einer Ausführungsform kann der MCH 1416 durch einen Speicherpfad 1418 mit hoher Bandbreite an den Speicher 1420 gekoppelt sein und eine Grafik-/Videokarte 1412 durch eine Accelerated-Graphics-Port-(„AGP“-)Zusammenschaltung 1414 an den MCH 1416 gekoppelt sein.
  • In mindestens einer Ausführungsform kann das Computersystem 1400 die System-E/A 1422 verwenden, die ein proprietärer Hubschnittstellenbus ist, um den MCH 1416 an den E/A-Steuerungshub (I/O controller hub - „ICH“) 1430 zu koppeln. In mindestens einer Ausführungsform kann der ICH 1430 direkte Verbindungen zu einigen E/A-Vorrichtungen über einen lokalen E/A-Bus bereitstellen. In mindestens einer Ausführungsform kann der lokale E/A-Bus ohne Einschränkung einen Hochgeschwindigkeits-E/A-Bus zum Verbinden von Peripheriegeräten mit dem Speicher 1420, dem Chipsatz und dem Prozessor 1402 beinhalten. Beispiele können ohne Einschränkung eine Audiosteuerung 1429, einen Firmware-Hub („Flash-BIOS“) 1428, einen drahtlosen Sendeempfänger 1426, einen Datenspeicher 1424, eine ältere E/A-Steuerung 1423, die Benutzereingabe- und Tastaturschnittstellen enthält, einen seriellen Erweiterungsport 1427, wie etwa einen Universal-Serial-Bus-(„USB“-)Port, und eine Netzsteuerung 1434 beinhalten. Der Datenspeicher 1424 kann ein Festplattenlaufwerk, ein Diskettenlaufwerk, eine CD-ROM-Vorrichtung, eine Flash-Speichervorrichtung oder eine andere Massenspeichervorrichtung umfassen.
  • In mindestens einer Ausführungsform veranschaulicht 14 ein System, das miteinander verbundene Hardwarevorrichtungen oder „Chips“ beinhaltet, wohingegen in anderen Ausführungsformen 14 ein beispielhaftes System auf einem Chip („SoC“) veranschaulichen kann. In mindestens einer Ausführungsform können die in 14 veranschaulichten Vorrichtungen mit proprietären Zusammenschaltungen, standardisierten Zusammenschaltungen (z. B. PCIe) oder einer Kombination davon zusammengeschaltet sein. In mindestens einer Ausführungsform sind eine oder mehrere Komponenten des Systems 1400 unter Verwendung von Compute-Express-Link (CXL)-Verbindungen miteinander verbunden.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann die Inferenz- und/oder Trainingslogik 1015 in dem System aus 14 für Inferenz- oder Vorhersageoperationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von Trainingsoperationen für neuronale Netze, Funktionen und/oder Architekturen von neuronalen Netzen oder hierin beschriebenen Anwendungsfällen für neuronale Netze berechnet wurden.
  • In mindestens einer Ausführungsform wird 14 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 15 ist ein Blockdiagramm, das eine elektronische Vorrichtung 1500 zum Nutzen eines Prozessors 1510 gemäß mindestens einer Ausführungsform veranschaulicht. In mindestens einer Ausführungsform kann die elektronische Vorrichtung 1500 zum Beispiel und ohne Einschränkung ein Notebook, ein Tower-Server, ein Rack-Server, ein Blade-Server, ein Laptop, ein Desktop, ein Tablet, eine mobile Vorrichtung, ein Telefon, ein eingebetteter Computer oder eine beliebige andere geeignete elektronische Vorrichtung sein.
  • In mindestens einer Ausführungsform kann das System 1500 ohne Einschränkung einen Prozessor1510 beinhalten, der kommunikativ an eine beliebige geeignete Anzahl oder Art von Komponenten, Peripheriegeräten, Modulen oder Vorrichtungen gekoppelt ist. In mindestens einer Ausführungsform ist der Prozessor 1510 unter Verwendung eines Busses oder einer Schnittstelle gekoppelt, wie etwa eines 1°C-Busses, eines Systemverwaltungsbusses (System Management Bus - „SMBus“), eines Busses mit geringer Pin-Anzahl (Low Pin Count - LPC), einer seriellen Peripherieschnittstelle (Serial Peripheral Interface - „SPI“), eines High-Definition-Audio-(„HDA“-)Busses, eines Serial-Advance-Technology-Attachment-(„SATA“-)Busses, eines universellen seriellen Busses („USB“) (Versionen 1, 2, 3) oder eines Busses eines universellen asynchronen Empfänger/Senders (Universal Asynchronous Receiver/Transmitter - „UART“). In mindestens einer Ausführungsform veranschaulicht 15 ein System, das miteinander verbundene Hardwarevorrichtungen oder „Chips“ beinhaltet, wohingegen in anderen Ausführungsformen 15 ein beispielhaftes System auf einem Chip („SoC“) veranschaulichen kann. In mindestens einer Ausführungsform können die in 15 veranschaulichten Vorrichtungen mit proprietären Zusammenschaltungen, standardisierten Zusammenschaltungen (z. B. PCIe) oder einer Kombination davon zusammengeschaltet sein. In mindestens einer Ausführungsform sind eine oder mehrere Komponenten aus 15 unter Verwendung von Compute-Express-Link-(CXL-)Zusammenschaltungen zusammengeschaltet.
  • In mindestens einer Ausführungsform kann 15 eine Anzeige 1524, einen Touchscreen 1525, ein Touchpad 1530, eine Einheit zur Nahfeldkommunikation (Near Field Communications - „NFC“) 1545, einen Sensor-Hub 1540, einen Thermosensor 1546, einen Express-Chipsatz (Express Chipset- „EC“) 1535, ein Trusted Platform Module („TPM“) 1538, BIOS-/Firmware-/Flash-Speicher („BIOS, FW-Flash“) 1522, einen DSP 1560, ein Laufwerk 1520, wie etwa ein Halbleiterlaufwerk (Solid State Disk - „SSD“) oder ein Festplattenlaufwerk (Hard Disk Drive - „HDD“), eine Einheit für ein drahtloses lokales Netz (wireless local area network - „WLAN“) 1550, eine Bluetooth-Einheit 1552, eine Einheit für ein drahtloses Weitverkehrsnetz (Wireless Wide Area Network - „WWAN“) 1556, eine Einheit für ein globales Positionsbestimmungssystem (Global Positioning System - GPS) 1555, eine Kamera („USB-3.0-Kamera“) 1554, wie etwa eine USB-3.0-Kamera, und/oder eine Low-Power-Double-Data-Rate-(„LPDDR“-)Speichereinheit („LPDDR3“) 1515, die zum Beispiel in einem LPDDR3-Standard implementiert ist, beinhalten. Diese Komponenten können jeweils auf eine beliebige geeignete Weise implementiert sein.
  • In mindestens einer Ausführungsform können andere Komponenten kommunikativ an den Prozessor 1510 durch die vorstehend erörterten Komponenten gekoppelt sein. In mindestens einer Ausführungsform können ein Beschleunigungsmesser 1541, ein Umgebungslichtsensor (ambient light sensor - „ALS“) 1542, ein Kompass 1543 und ein Gyroskop 1544 kommunikativ an den Sensor-Hub 1540 gekoppelt sein. In mindestens einer Ausführungsform können ein Thermosensor 1539, ein Lüfter 1537, eine Tastatur 1546 und ein Touchpad 1530 kommunikativ an den EC 1535 gekoppelt sein. In mindestens einer Ausführungsform können Lautsprecher 1563, Kopfhörer 1564 und ein Mikrofon („Mikro“) 1565 kommunikativ an eine Audioeinheit („Audiocodec und Klasse-D-Verst.“) 1564 gekoppelt sein, die wiederum kommunikativ an den DSP 1560 gekoppelt sein kann. In mindestens einer Ausführungsform kann die Audioeinheit 1564 zum Beispiel und ohne Einschränkung einen Audiocodierer/-decodierer („Codec“) und einen Klasse-D-Verstärker beinhalten. In mindestens einer Ausführungsform kann die SIM-Karte („SIM“) 1557 kommunikativ an die WWAN-Einheit 1556 gekoppelt sein. In mindestens einer Ausführungsform können Komponenten wie etwa die WLAN-Einheit 1550 und die Bluetooth-Einheit 1552 sowie die WWAN-Einheit 1556 in einem Next Generation Form Factor („NGFF“) implementiert sein.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann die Inferenz- und/oder Trainingslogik 1015 in dem System aus 15 für Inferenz- oder Vorhersageoperationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von Trainingsoperationen für neuronale Netze, Funktionen und/oder Architekturen von neuronalen Netzen oder hierin beschriebenen Anwendungsfällen für neuronale Netze berechnet wurden.
  • In mindestens einer Ausführungsform wird 15 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 16 veranschaulicht ein Computersystem 1600 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist das Computersystem 1600 so konfiguriert, dass es verschiedene Prozesse und Verfahren implementiert, die in dieser Offenbarung beschrieben sind.
  • In mindestens einer Ausführungsform umfasst das Computersystem 1600 ohne Einschränkung mindestens eine zentrale Verarbeitungseinheit („CPU“) 1602, die mit einem Kommunikationsbus 1610 verbunden ist, der unter Verwendung eines beliebigen geeigneten Protokolls implementiert ist, wie etwa PCI („Peripheral Component Interconnect“), Peripheral Component Interconnect Express („PCI-Express“), AGP („Accelerated Graphics Port“), HyperTransport oder beliebiger anderer Bus- oder Punkt-zu-Punkt-Kommunikationsprotokoll(e). In mindestens einer Ausführungsform beinhaltet das Computersystem 1600 ohne Einschränkung einen Hauptspeicher 1604 und eine Steuerlogik (z. B. umgesetzt als Hardware, Software oder eine Kombination davon) und Daten werden im Hauptspeicher 1604 gespeichert, der die Form eines Direktzugriffsspeichers (random access memory - „RAM“) annehmen kann. In mindestens einer Ausführungsform stellt ein Netzwerkschnittstellenteilsystem („Netzwerkschnittstelle“) 1622 eine Schnittstelle zu anderen Computervorrichtungen und Netzwerken zum Empfangen von Daten von anderen Systemen und Übermitteln von Daten von dem Computersystem 1600 an anderen Systemen bereit.
  • In mindestens einer Ausführungsform beinhaltet das Computersystem 1600 in mindestens einer Ausführungsform ohne Einschränkung Eingabevorrichtungen 1608, ein Parallelverarbeitungssystem 1612 und Anzeigevorrichtungen 1606, die unter Verwendung einer herkömmlichen Kathodenstrahlröhre (cathode ray tube - „CRT“), Flüssigkristallanzeige (liquid crystal display - „LCD“), Leuchtdiode (light emitting diode - „LED“), Plasmaanzeige oder anderen geeigneten Anzeigetechnologien umgesetzt sein können. In mindestens einer Ausführungsform wird eine Benutzereingabe von Eingabevorrichtungen 1608 empfangen, wie etwa Tastatur, Maus, Touchpad, Mikrofon und mehr. In mindestens einer Ausführungsform kann sich jedes der vorstehenden Module auf einer einzigen Halbleiterplattform befinden, um ein Verarbeitungssystem zu bilden.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann die Inferenz- und/oder Trainingslogik 1015 in dem System aus 16 für Inferenz- oder Vorhersageoperationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von Trainingsoperationen für neuronale Netze, Funktionen und/oder Architekturen von neuronalen Netzen oder hierin beschriebenen Anwendungsfällen für neuronale Netze berechnet wurden.
  • In mindestens einer Ausführungsform wird 16 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 17 veranschaulicht ein Computersystem 1700 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform beinhaltet das Computersystem 1700 ohne Einschränkung einen Computer 1710 und einen USB-Stick 1720. In mindestens einer Ausführungsform kann der Computer 1710 ohne Einschränkung eine beliebige Anzahl und einen beliebigen Typ von Prozessor(en) (nicht gezeigt) und einen Speicher (nicht gezeigt) beinhalten. In mindestens einer Ausführungsform beinhaltet der Computer 1710 ohne Einschränkung einen Server, eine Cloud-Instanz, einen Laptop und einen Desktop-Computer.
  • In mindestens einer Ausführungsform beinhaltet der USB-Stick 1720 ohne Einschränkung eine Verarbeitungseinheit 1730, eine USB-Schnittstelle 1740 und eine USB-Schnittstellenlogik 1750. In mindestens einer Ausführungsform kann die Verarbeitungseinheit 1730 ein(e) beliebige(s/r) Anweisungsausführungssystem, -apparat oder -vorrichtung sein, das/der/die dazu in der Lage ist, Anweisungen auszuführen. In mindestens einer Ausführungsform kann die Verarbeitungseinheit 1730 ohne Einschränkung eine beliebige Anzahl und einen beliebigen Typ von Verarbeitungskernen (nicht gezeigt) beinhalten. In mindestens einer Ausführungsform umfasst der Verarbeitungskern 1730 eine anwendungsspezifische integrierte Schaltung (application specific integrated circuit - „ASIC“), die optimiert ist, um jede Menge und Art von Operationen durchzuführen, die mit maschinellem Lernen verbunden sind. Zum Beispiel ist in mindestens einer Ausführungsform der Verarbeitungskern 1730 eine Tensor-Verarbeitungseinheit (tensor processing unit - „TPC“), die optimiert ist, um Ableitungsoperationen des maschinellen Lernens durchzuführen. In mindestens einer Ausführungsform ist der Verarbeitungskern 1730 eine Bildverarbeitungseinheit (vision processing unit - „VPU“), die optimiert ist, um Operationen maschinelles Sehen und der Ableitung durch maschinelles Lernen durchzuführen.
  • In mindestens einer Ausführungsform kann die USB-Schnittstelle 1740 ein beliebiger Typ von USB-Stecker oder USB-Buchse sein. Zum Beispiel ist in mindestens einer Ausführungsform die USB-Schnittstelle 1740 eine USB-3.0-Typ-C-Buchse für Daten und Leistung. In mindestens einer Ausführungsform ist die USB-Schnittstelle 1740 ein USB-3.0-Typ-A-Stecker. In mindestens einer Ausführungsform kann die USB-Schnittstellenlogik 1750 eine beliebige Menge und eine beliebige Art von Logik beinhalten, die es der Verarbeitungseinheit 1730 ermöglicht, mit Vorrichtungen (z. B. dem Computer 1710) über den USB-Anschluss 1740 eine Schnittstelle zu bilden.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann die Inferenz- und/oder Trainingslogik 1015 in dem System aus 17 für Inferenz- oder Vorhersageoperationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von Trainingsoperationen für neuronale Netze, Funktionen und/oder Architekturen von neuronalen Netzen oder hierin beschriebenen Anwendungsfällen für neuronale Netze berechnet wurden.
  • In mindestens einer Ausführungsform wird 17 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 18A veranschaulicht eine beispielhafte Architektur, in der eine Vielzahl von GPUs 1810-1813 kommunikativ an eine Vielzahl von Mehrkernprozessoren 1805-1806 über Hochgeschwindigkeitsverbindungen 1840-1843 (z. B. Busse, Punkt-zu-Punkt-Verbindungen usw.) gekoppelt ist. In einer Ausführungsform unterstützen die Hochgeschwindigkeitsverbindungen 1840-1843 einen Kommunikationsdurchsatz von 4 GB/s, 30 GB/s, 80 GB/s oder mehr. Verschiedene Zusammenschaltungsprotokolle können verwendet werden, einschließlich, aber nicht beschränkt auf, PCIe 4.0 oder 5.0 und NVLink 2.0.
  • Zusätzlich und in einer Ausführungsform sind zwei oder mehr der GPUs 1810-1813 über Hochgeschwindigkeitsverbindungen 1829-1830 miteinander verbunden, die unter Verwendung derselben oder anderer Protokolle/Verbindungen als denen, die für die Hochgeschwindigkeitsverbindungen 1840-1843 verwendet werden, umgesetzt sein können. Gleichermaßen können zwei oder mehr Mehrkernprozessoren 1805-1806 über eine Hochgeschwindigkeitsverbindung 1828 verbunden sein, die symmetrische Mehrprozessor-(symmetric multi-processor - SMP-)Busse sein können, die mit 20 GB/s, 30 GB/s, 120 GB/s oder mehr betrieben werden. Alternativ kann die gesamte Kommunikation zwischen verschiedenen Systemkomponenten, die in 18A gezeigt sind, unter Verwendung derselben Protokolle/Verbindungen (z. B. über eine gemeinsame Verbindungsstruktur) erreicht werden.
  • In einer Ausführungsform ist jeder Mehrkernprozessor 1805-1806 über Speicherverbindungen 1826-1827 jeweils kommunikativ an einen Prozessorspeicher 1801-1802 gekoppelt, und jede GPU 1810-1813 ist jeweils über GPU-Speicherverbindungen 1850-1853 kommunikativ an den GPU-Speicher 1820-1823 gekoppelt. Die Speicherverbindungen 1826-1827 und 1850-1853 können selbe oder unterschiedliche Speicherzugriffstechnologien nutzen. Als Beispiel und nicht als Einschränkung können Prozessorspeicher 1801-1802 und GPU-Speicher 1820-1823 flüchtige Speicher sein, wie etwa dynamische Direktzugriffsspeicher (DRAMs) (die gestapelte DRAMs beinhalten), Grafik-DDR-SDRAM (GDDR) (z. B. GDDR5, GDDR6) oder High Bandwidth Memory (HBM) und/oder können nichtflüchtige Speicher, wie etwa 3D XPoint oder Nano-Ram, sein. In einer Ausführungsform kann ein Teil der Prozessorspeicher 1801-1802 flüchtiger Speicher sein und ein anderer Teil kann nichtflüchtiger Speicher sein (z. B. unter Verwendung einer Zwei-Ebenen-Speicher-(2LM-)Hierarchie).
  • Wie nachfolgend beschrieben, kann, obwohl verschiedene Prozessoren 1805-1806 und GPUs 1810-1813 jeweils physisch an einen bestimmten Speicher 1801-1802, 1820-1823, gekoppelt sind, ein einheitliche Speicherarchitektur umgesetzt sein, bei der ein selber Adressbereich des virtuellen Systems (auch als „effektiver Adressbereich“ bezeichnet) auf verschiedene physische Speicher verteilt ist. Zum Beispiel können die Prozessorspeicher 1801-1802 jeweils 64 GB Adressbereich des Systemspeichers umfassen und die GPU-Speicher 1820-1823 können jeweils 32 GB Adressbereich des Systemspeichers umfassen (was in diesem Beispiel zu insgesamt 256 GB adressierbarem Speicher führt).
  • 18B veranschaulicht zusätzliche Details für eine Zusammenschaltung zwischen einem Mehrkernprozessor 1807 und einem Grafikbeschleunigungsmodul 1846 gemäß einer beispielhaften Ausführungsform. Das Grafikbeschleunigungsmodul 1846 kann einen oder mehrere GPU-Chips beinhalten, die auf einer Leitungskarte integriert sind, die über eine Hochgeschwindigkeitsverbindung 1840 an den Prozessor 1807 gekoppelt ist. Alternativ kann das Grafikbeschleunigungsmodul 1846 auf einem selben Gehäuse oder Chip wie der Prozessor 1807 integriert sein.
  • In mindestens einer Ausführungsform beinhaltet der veranschaulichte Prozessor 1807 eine Vielzahl von Kernen 1860A-1860D, jeder mit einem Adressenübersetzungspuffer 1861A-1861D und einem oder mehreren Zwischenspeichern 1862A-1862D. In mindestens einer Ausführungsform können die Kerne 1860A-1860D verschiedene andere Komponenten zum Ausführen von Anweisungen und zum Verarbeiten von Daten beinhalten, die nicht veranschaulicht sind. Die Zwischenspeicher 1862A-1862D können Zwischenspeicher der Ebene 1 (L1) und der Ebene 2 (L2) umfassen. Außerdem können ein oder mehrere gemeinsam genutzte Caches 1856 in den Caches 1862A-1862D enthalten sein und von Sätzen von Kernen 1860A-1860D gemeinsam genutzt werden. Eine Ausführungsform des Prozessors 1807 beinhaltet zum Beispiel 24 Kerne, jeder mit einem eigenen LI-Cache, zwölf gemeinsam genutzten L2-Caches und zwölf gemeinsam genutzten L3-Caches. In dieser Ausführungsform werden ein oder mehrere L2- und L3-Caches von zwei benachbarten Kernen gemeinsam genutzt. Der Prozessor 1807 und das Grafikbeschleunigungsmodul 1846 sind mit dem Systemspeicher 1814 verbunden, der die Prozessorspeicher 1801-1802 der 18A beinhalten kann.
  • Die Kohärenz für Daten und Anweisungen, die in verschiedenen Zwischenspeichern 1862A-1862D, 1856 und dem Systemspeicher 1814 gespeichert sind, wird über eine Kommunikation zwischen den Kernen über einen Kohärenzbus 1864 aufrechterhalten. Zum Beispiel kann jeder Zwischenspeicher eine Zwischenspeicher-Kohärenz-Logik/-Schaltung aufweisen, die damit verbunden ist, um als Reaktion auf erfasste Lese- oder SchreibOperationen in bestimmte Zwischenspeicher-Zeilen über den Kohärenzbus 1864 damit zu kommunizieren. In einer Umsetzung wird ein Zwischenspeicher-Abhörprotokoll über den Kohärenzbus 1864 umgesetzt, um Zwischenspeicher-Zugriffe abzuhören.
  • In einer Ausführungsform koppelt eine Proxy-Schaltung 1825 das Grafikbeschleunigungsmodul 1846 kommunikativ an den Kohärenzbus 1864, was es dem Grafikbeschleunigungsmodul 1846 ermöglicht, an einem Zwischenspeicher-Kohärenzprotokoll als eine Gegenstelle der Kerne 1860A-1860D teilzunehmen. Insbesondere stellt eine Schnittstelle 1835 eine Anbindung zur Proxy-Schaltung 1825 über eine Hochgeschwindigkeitsverbindung 1840 (z. B. einen PCIe-Bus, NVLink usw.) bereit, und eine Schnittstelle 1837 verbindet das Grafikbeschleunigungsmodul 1846 mit der Verbindung 1840.
  • In einer Umsetzung stellt eine Beschleunigerintegrationsschaltung 1836 Zwischenspeicherverwaltungs-, Speicherzugriffs-, Kontextverwaltungs- und Unterbrechungsverwaltungsdienste im Namen einer Vielzahl von Grafikverarbeitungsengines 1831, 1832, N des Grafikbeschleunigungsmoduls 1846 bereit. Die Grafikverarbeitungsengines 1831, 1832, N können jeweils eine getrennte Grafikverarbeitungseinheit (GPU) umfassen. Alternativ können die Grafikverarbeitungsengines 1831, 1832, N verschiedene Arten von Grafikverarbeitungsengines innerhalb einer GPU umfassen, wie etwa Grafikausführungseinheiten, Medienverarbeitungsengines (z. B. Videokodierer/-dekodierer), Abtaster und Blitengines. In mindestens einer Ausführungsform kann das Grafikbeschleunigungsmodul 1846 eine GPU mit einer Vielzahl von Grafikverarbeitungsengines 1831-1832, N oder Grafikverarbeitungsengines 1831-1832 sein, N können einzelne GPUs sein, die auf einem gemeinsamen Gehäuse, einer gemeinsamen Leitungskarte oder einem gemeinsamen Chip integriert sind.
  • In einer Ausführungsform beinhaltet die Beschleunigerintegrationsschaltung 1836 eine Speicherverwaltungseinheit (memory management unit - MMU) 1839 zum Durchführen verschiedener Speicherverwaltungsfunktionen, wie etwa Übersetzungen von virtuellem in physischen Speicher (auch als Übersetzungen von effektivem in realen Speicher bezeichnet) und Speicherzugriffsprotokolle zum Zugreifen auf den Systemspeicher 1814. Die MMU 1839 kann auch einen Adressenübersetzungspuffer (TLB) (nicht gezeigt) zum Zwischenspeichern von Übersetzungen von virtuellen/effektiven in physische/reale Adressen beinhalten. In einer Umsetzung speichert ein Zwischenspeicher 1838 Befehle und Daten für einen effizienten Zugriff durch die Grafikverarbeitungsengines 1831-1832, N. In einer Ausführungsform werden die im Zwischenspeicher 1838 und den Grafikspeichern 1833-1834, M gespeicherten Daten mit den Kernzwischenspeichern 1862A-1862D, 1856 und dem Systemspeicher 1814 kohärent gehalten. Wie erwähnt, kann dies über die Proxy-Schaltung 1825 im Auftrag des Caches 1838 und der Speicher 1833-1834, M (z. B. Senden von Aktualisierungen an den Cache 1838 in Bezug auf Modifikationen/Zugriffe auf Cache-Zeilen in den Prozessor-Caches 1862A-1862D, 1856 und Empfangen von Aktualisierungen von dem Cache 1838) erzielt werden.
  • Ein Satz von Registern 1845 speichert Kontextdaten für Threads, die von den Grafikverarbeitungsengines 1831-1832, N ausgeführt werden, und eine Kontextverwaltungsschaltung 1848 verwaltet Thread-Kontexte. Zum Beispiel kann die Kontextverwaltungsschaltung 1848 Sicherungs- und Wiederherstellungsoperationen durchführen, um Kontexte verschiedener Threads während Kontextumschaltungen zu sichern und wiederherzustellen (z. B., wenn ein erster Thread gesichert und ein zweiter Thread gespeichert wird, damit ein zweiter Thread durch eine Grafikverarbeitungs-Engine ausgeführt werden kann). Zum Beispiel kann die Kontextverwaltungsschaltung 1848 bei einer Kontextumschaltung derzeitige Registerwerte in einer bezeichneten Region in dem Speicher speichern (z. B. identifiziert durch einen Kontextzeiger). Sie kann dann bei der Rückkehr zu einem Kontext die Registerwerte wiederherstellen. In einer Ausführungsform empfängt und verarbeitet eine Unterbrechungsverwaltungsschaltung 1847 von Systemvorrichtungen empfangene Unterbrechungen.
  • In einer Implementation werden virtuelle/effektive Adressen von einer Grafikverarbeitungs-Engine 1831 durch die MMU 1839 in reale/physische Adressen in dem Systemspeicher 1814 übersetzt. Eine Ausführungsform der Beschleunigerintegrationsschaltung 1836 unterstützt mehrere (z. B. 4, 8, 16) Grafikbeschleunigermodule 1846 und/oder andere Beschleunigervorrichtungen. Das Grafikbeschleunigermodul 1846 kann einer einzelnen Anwendung gewidmet sein, die auf dem Prozessor 1807 ausgeführt wird, oder kann von mehreren Anwendungen gemeinsam genutzt werden. In einer Ausführungsform wird eine virtualisierte Grafikausführungsumgebung dargestellt, in der Ressourcen der Grafikverarbeitungsengines 1831-1832, N mit mehreren Anwendungen oder virtuellen Maschinen (VMs) gemeinsam genutzt werden. In mindestens einer Ausführungsform können die Ressourcen in „Slices“ unterteilt werden, die unterschiedlichen VMs und/oder Anwendungen basierend auf Verarbeitungsanforderungen und Prioritäten, die mit VMs und/oder Anwendungen assoziiert sind, zugewiesen sind.
  • In mindestens einer Ausführungsform fungiert die Beschleuniger-Integrationsschaltung 1836 als Brücke zu einem System für das Grafikbeschleunigungsmodul 1846 und sie stellt Adressübersetzungs- und Systemspeicher-Cache-Dienste bereit. Außerdem kann die Beschleunigerintegrationsschaltung 1836 Virtualisierungseinrichtungen für einen Hostprozessor bereitstellen, um die Virtualisierung der Grafikverarbeitungsengines 1831-1832, N, Unterbrechungen und Speicherverwaltung zu verwalten.
  • Da Hardwareressourcen der Grafikverarbeitungsengines 1831-1832, N ausdrücklich einem realen Adressbereich zugeordnet sind, den der Hostprozessor 1807 sieht, kann ein beliebiger Hostprozessor diese Ressourcen direkt unter Verwendung eines effektiven Adresswerts ansteuern. Eine Funktion der Beschleunigerintegrationsschaltung 1836 ist in einer Ausführungsform die physische Trennung der Grafikverarbeitungsengines 1831-1832, N, so dass sie einem System als unabhängige Einheiten erscheinen.
  • In mindestens einer Ausführungsform sind ein oder mehrere Grafikspeicher 1833-1834, M an jede der Grafikverarbeitungsengines 1831-1832 bzw. N gekoppelt. Grafikspeicher 1833-1834, M speichern Anweisungen und Daten, die von jeder der Grafikverarbeitungsengines 1831-1832, N verarbeitet werden. Die Grafikspeicher 1833-1834, M können flüchtige Speicher sein, wie etwa DRAMs (was gestapelte DRAMs beinhaltet), GDDR Speicher (z. B. GDDR5, GDDR6) oder HBM und/oder können nichtflüchtige Speicher sein, wie etwa 3D XPoint oder Nano-Ram.
  • Um den Datenverkehr über die Verbindung 1840 zu verringern, werden Verzerrungsmethoden verwendet, um sicherzustellen, dass die in den Grafikspeichern 1833-1834, M gespeicherten Daten Daten sind, die am häufigsten von den Grafikverarbeitungsengines 1831-1832, N verwendet und vorzugsweise nicht von den Kernen 1860A-1860D (zumindest nicht häufig) verwendet werden. Gleichermaßen versucht ein Verzerrungsmechanismus, Daten, die von Kernen (und vorzugsweise nicht von den Grafikverarbeitungsengines 1831-1832, N) benötigt werden, innerhalb der Zwischenspeicher 1862A-1862D, 1856 der Kerne und des Systemspeichers 1814 zu halten.
  • 18C veranschaulicht eine andere beispielhafte Ausführungsform, bei der die Beschleuniger-Integrationsschaltung 1836 in den Prozessor 1807 integriert ist. Zumindest in dieser Ausführungsform kommunizieren die Grafikverarbeitungsengines 1831-1832, N über die Schnittstelle 1837 und die Schnittstelle 1835 (die wiederum jede Form von Bus oder Schnittstellenprotokoll nutzen können) direkt über die Hochgeschwindigkeitsverbindung 1840 mit der Beschleunigerintegrationsschaltung 1836. Die Beschleunigerintegrationsschaltung 1836 kann die gleichen Operationen wie die im Hinblick auf 18B beschriebenen durchführen, jedoch möglicherweise mit einem höheren Durchsatz aufgrund seiner Nähe zum Kohärenzbus 1864 und den Zwischenspeichern 1862A-1862D, 1856. Mindestens eine Ausführungsform unterstützt unterschiedliche Programmiermodelle, einschließlich eines Programmiermodells mit dediziertem Prozess (ohne Virtualisierung des Grafikbeschleunigungsmoduls) und gemeinsam genutzter Programmiermodelle (mit Virtualisierung), die Programmiermodelle beinhalten können, die durch die Beschleuniger-Integrationsschaltung 1836 gesteuert werden, und Programmiermodelle, die durch das Grafikbeschleunigungsmodul 1846 gesteuert werden.
  • In mindestens einer Ausführungsform sind die Grafikverarbeitungsengines 1831-1832, N für eine einzelne Anwendung oder einen einzelnen Prozess unter einem einzigen Betriebssystem bestimmt. In mindestens einer Ausführungsform kann eine einzelne Anwendung andere Anwendungsanforderungen an die Grafikverarbeitungsengines 1831-1832, N weiterleiten, wodurch eine Virtualisierung innerhalb einer VM/Partition bereitgestellt wird.
  • In mindestens einer Ausführungsform können die Grafikverarbeitungsengines 1831-1832, N von mehreren VM-/Anwendungspartitionen gemeinsam genutzt werden. In mindestens einer Ausführungsform können gemeinsam genutzte Modelle einen Systemhypervisor verwenden, um die Grafikverarbeitungsengines 1831-1832, N zu virtualisieren, um den Zugriff durch jedes Betriebssystem zu ermöglichen. Bei Einzelpartitionssystemen ohne einen Hypervisor gehören die Grafikverarbeitungsengines 1831-1832, N einem Betriebssystem. In mindestens einer Ausführungsform kann ein Betriebssystem die Grafikverarbeitungsengines 1831-1832, N virtualisieren, um Zugriff auf jeden Prozess oder jede Anwendung bereitzustellen.
  • In mindestens einer Ausführungsform wählt das Grafikbeschleunigungsmodul 1846 oder eine einzelne Grafikverarbeitungsengine 1831-1832, N ein Prozesselement unter Verwendung eines Prozesshandles aus. In mindestens einer Ausführungsform werden Prozesselemente im Systemspeicher 1814 gespeichert und sind unter Verwendung von in dieser Schrift beschriebenen effektiven Adress-zu-Real-Adressübersetzungsmethoden ansteuerbar. In mindestens einer Ausführungsform kann ein Prozesshandle ein umsetzungsspezifischer Wert sein, der einem Hostprozess beim Registrieren seines Kontexts bei der Grafikverarbeitungsengine 1831-1832, N (d. h. das Aufrufen der Systemsoftware, um ein Prozesselement zu einer verlinkten Prozesselementliste hinzuzufügen) bereitgestellt wird. In mindestens einer Ausführungsform können die unteren 16 Bit eines Prozessidentifikators eine Abweichung des Prozesselements innerhalb einer mit dem Prozesselement verknüpften Liste sein.
  • 18D veranschaulicht eine beispielhafte Beschleuniger-Integrations-Slice 1890. Wie in dieser Schrift verwendet, umfasst ein „Slice“ einen spezifizierten Teil von Verarbeitungsressourcen der Beschleunigerintegrationsschaltung 1836. Der effektive Adressbereich 1882 der Anwendung innerhalb des Systemspeichers 1814 speichert Prozesselemente 1883. In einer Ausführungsform werden die Prozesselemente 1883 als Reaktion auf GPU-Aufrufe 1881 von Anwendungen 1880 gespeichert, die auf dem Prozessor 1807 ausgeführt werden. Ein Prozesselement 1883 enthält einen Prozesszustand für die entsprechende Anwendung 1880. Ein im Prozesselement 1883 enthaltener Arbeitsdeskriptor (work descriptor - WD) 1884 kann eine einzelne Aufgabe sein, die von einer Anwendung angefordert wird, oder kann einen Verweis auf eine Warteschlange von Aufgaben enthalten. In mindestens einer Ausführungsform ist der WD 1884 ein Verweis auf eine Aufgabenanforderungswarteschlange im Adressbereich 1882 einer Anwendung.
  • Das Grafikbeschleunigungsmodul 1846 und/oder einzelne Grafikverarbeitungsengines 1831-1832, N können von allen oder einer Teilmenge von Prozessen in einem System gemeinsam genutzt werden. In mindestens einer Ausführungsform kann eine Infrastruktur zum Einrichten des Prozesszustands und zum Senden eines WD 1884 an ein Grafikbeschleunigungsmodul 1846 zum Starten einer Aufgabe in einer virtualisierten Umgebung beinhaltet sein.
  • In mindestens einer Ausführungsform ist ein Programmiermodell mit dediziertem Prozess implementationsspezifisch. In diesem Modell besitzt ein einzelner Prozess das Grafikbeschleunigungsmodul 1846 oder eine einzelne Grafikverarbeitungsengine 1831. Da das Grafikbeschleunigungsmodul 1846 einem einzelnen Prozess gehört, initialisiert ein Hypervisor die Beschleunigerintegrationsschaltung 1836 für eine besitzende Partition und ein Betriebssystem initialisiert die Beschleunigerintegrationsschaltung 1836 für einen besitzenden Prozess, wenn das Grafikbeschleunigungsmodul 1846 zugewiesen ist.
  • Im Betrieb ruft eine WD-Abrufeinheit 1891 im Beschleunigerintegrations-Slice 1890 den nächsten WD 1884 ab, der eine Angabe der Arbeit beinhaltet, die von einer oder mehreren Grafikverarbeitungsengines des Grafikbeschleunigungsmoduls 1846 zu erledigen ist. Daten von dem WD 1884 können in den Registern 1845 gespeichert und von der MMU 1839, der Unterbrechungsverwaltungsschaltung 1847 und/oder der Kontextverwaltungsschaltung 1848 wie veranschaulicht verwendet werden. Zum Beispiel beinhaltet eine Ausführungsform der MMU 1839 eine Segment-/Page-Walk-Schaltung zum Zugreifen auf Segment-/Page-Tabellen 1886 innerhalb des virtuellen Adressbereichs 1885 des Betriebssystems. Die Unterbrechungsverwaltungsschaltung 1847 kann Unterbrechungsereignisse 1892 verarbeiten, die von dem Grafikbeschleunigungsmodul 1846 empfangen wurden. Beim Durchführen von Grafikoperationen wird eine effektive Adresse 1893, die von einer Grafikverarbeitungsengine 1831-1832 erzeugt wird, N von der MMU 1839 in eine reale Adresse übersetzt.
  • In einer Ausführungsform wird ein selber Satz von Registern 1845 für jede Grafikverarbeitungsengine 1831-1832, N und/oder Grafikbeschleunigungsmodul 1846 dupliziert und kann durch einen Hypervisor oder ein Betriebssystem initialisiert werden. Jedes dieser duplizierten Register kann in einem Beschleunigerintegrations-Slice 1890 beinhaltet sein. Beispielhafte Register, die von einem Hypervisor initialisiert werden können, sind in Tabelle 1 gezeigt. Tabelle 1 - durch Hypervisor initialisierte Register
    1 Slice-Steuerregister
    2 Bereichszeiger für geplante Prozesse der Real-Adresse (RA)
    3 Autoritätsmasken-Überschreibungsregister
    4 Unterbrechungsvektor-Tabelleneintragsversatz
    5 Unterbrechungsvektor-Tabelleneintragsbegrenzung
    6 Zustandsregister
    7 Logische Partitions-ID
    8 Datensatzzeiger für Hypervisor-Beschleunigerverwendung der Real-Adresse (RA)
    9 Speicherbeschreibungsregister
  • Beispielhafte Register, die durch ein Betriebssystem initialisiert werden können, sind in Tabelle 2 gezeigt. Tabelle 2 - durch Betriebssystem initialisierte Register
    1 Prozess- und Thread-Identifikation
    2 Zeiger zum Speichern/Wiederherstellen des Kontext der effektiven Adresse (EA)
    3 Datensatzzeiger für Beschleunigerverwendung der virtuellen Adresse (VA)
    4 Speichersegmenttabellenzeiger der virtuellen Adresse (VA).
    5 Autoritätsmaske
    6 Arbeitsdeskriptor
  • In einer Ausführungsform ist jeder WD 1884 spezifisch für ein bestimmtes Grafikbeschleunigungsmodul 1846 und/oder bestimmte Grafikverarbeitungsengines 1831-1832, N. Er enthält alle Informationen, die von einer Grafikverarbeitungsengine 1831-1832, N benötigt werden, um Arbeit zu erledigen, oder es kann ein Verweis auf einen Speicherort sein, an dem eine Anwendung eine Befehlswarteschlange mit zu erledigender Arbeit eingerichtet hat.
  • 18E veranschaulicht zusätzliche Details für eine beispielhafte Ausführungsform eines gemeinsam genutzten Modells. Diese Ausführungsform beinhaltet einen realen Hypervisor-Adressraum 1898, in dem eine Prozesselementliste 1899 gespeichert ist. Auf den realen Adressbereich 1898 des Hypervisors kann über einen Hypervisor 1896 zugegriffen werden, der Grafikbeschleunigungsmodulengines für das Betriebssystem 1895 virtualisiert.
  • In mindestens einer Ausführungsform ermöglichen gemeinsam genutzte Programmiermodelle, dass alle oder eine Teilmenge von Prozessen aus allen oder einer Teilmenge von Partitionen in einem System ein Grafikbeschleunigungsmodul 1846 verwenden. Es gibt zwei Programmiermodelle, bei denen das Grafikbeschleunigungsmodul 1846 von mehreren Prozessen und Partitionen gemeinsam genutzt wird: zeitlich geslicedte gemeinsame Nutzung und grafikgeleitete gemeinsame Nutzung.
  • In diesem Modell gehört dem Systemhypervisor 1896 das Grafikbeschleunigungsmodul 1846 und er stellt seine Funktion allen Betriebssystemen 1895 zur Verfügung. Damit ein Grafikbeschleunigungsmodul 1846 die Virtualisierung durch den Systemhypervisor 1896 unterstützt, kann das Grafikbeschleunigungsmodul 1846 Folgendes beachten: 1) Die Aufgabenanforderung einer Anwendung muss autonom sein (d. h. der Status muss zwischen den Aufträgen nicht aufrechterhalten werden) oder das Grafikbeschleunigungsmodul 1846 muss einen Kontextsicherungs- und - wiederherstellungsmechanismus bereitstellen. 2) Das Grafikbeschleunigungsmodul 1846 garantiert, dass eine Aufgabenanforderung einer Anwendung in einer bestimmten Zeit abgeschlossen wird, was etwaige Übersetzungsfehler beinhaltet, oder das Grafikbeschleunigungsmodul 1846 stellt eine Fähigkeit bereit, einer Verarbeitung einer Aufgabe zuvorzukommen. 3) Dem Grafikbeschleunigungsmodul 1846 muss die Fairness zwischen den Prozessen garantiert werden, wenn es in einem geleiteten gemeinsam genutzten Programmiermodell betrieben wird.
  • In mindestens einer Ausführungsform ist es erforderlich, dass die Anwendung 1880 einen Systemaufruf des Betriebssystems 1895 mit einem Grafikbeschleunigungsmodultyp 1846, einem Arbeitsdeskriptor (WD), einem Wert des Autoritätsmaskenregisters (authority mask register - AMR) und einem Kontext-Sicherungs-/-Wiederherstellungsbereichszeiger (context save/restore area pointer - CSRP) vornimmt. In mindestens einer Ausführungsform beschreibt die Art des Grafikbeschleunigungsmoduls 1846 eine gezielte Beschleunigungsfunktion für einen Systemaufruf. In mindestens einer Ausführungsform kann die Art des Grafikbeschleunigungsmoduls 1846 ein systemspezifischer Wert sein. In mindestens einer Ausführungsform ist der WD spezifisch für das Grafikbeschleunigungsmodul 1846 formatiert und er kann in Form eines Befehls des Grafikbeschleunigungsmoduls 1846, eines effektiven Adresszeigers auf eine benutzerdefinierte Struktur, eines effektiven Adresszeigers auf eine Befehlswarteschlange oder einer beliebigen anderen Datenstruktur vorliegen, um durch das Grafikbeschleunigungsmodul 1846 zu verrichtende Arbeit zu beschreiben. In einer Ausführungsform ist ein AMR-Wert ein AMR-Status, der für einen aktuellen Prozess zu verwenden ist. In mindestens einer Ausführungsform ist ein Wert, der an ein Betriebssystem übergeben wird, vergleichbar mit einer Anwendung, die einen AMR festlegt. Wenn Umsetzungen der Beschleunigerintegrationsschaltung 1836 und des Grafikbeschleunigungsmoduls 1846 ein Benutzerberechtigungsmaskenüberschreibungsregister (User Authority Mask Override Register - UAMOR) nicht 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 1896 kann wahlweise einen aktuellen Wert des Berechtigungsmaskenüberschreibungsregisters (Authority Mask Override Register - AMOR) anwenden, bevor ein AMR in dem Prozesselement 1883 platziert wird. In mindestens einer Ausführungsform ist CSRP eines der Register 1845, die eine effektive Adresse eines Bereichs im effektiven Adressraum 1882 einer Anwendung für das Grafikbeschleunigungsmodul 1846 zum Sichern und Wiederherstellen des Kontextzustands enthalten. Dieser Zeiger ist optional, wenn zwischen den Aufgaben oder beim Vorwegnehmen einer Aufgabe kein Status gespeichert werden muss. In mindestens einer Ausführungsform kann der Kontext-Sicherungs-/- Wiederherstellungsbereich ein gepinnter Systemspeicher sein.
  • Beim Empfangen eines Systemaufrufs kann das Betriebssystem 1895 verifizieren, ob die Anwendung 1880 registriert ist und die Autorität zum Verwenden des Grafikbeschleunigungsmoduls 1846 bekommen hat. Das Betriebssystem 1895 ruft dann den Hypervisor 1896 mit den in Tabelle 3 gezeigten Informationen auf. Tabelle 3 - Parameter für Aufrufe vom Betriebssystem an den Hypervisor
    1 Ein Arbeitsdeskriptor (WD)
    2 Ein Autoritätsmaskenregister (AMR)-Wert (möglicherweise maskiert)
    3 Ein Kontext speichern/wiederherstellen Bereichszeiger (CSRP) einer effektiven Adresse (EA)
    4 Eine Prozess-ID (PID) und optionale Thread-ID (TID)
    5 Datensatzzeiger für Beschleunigerverwendung (AURP) einer virtuellen Adresse (VA)
    6 Virtuelle Adresse des Speichersegmenttabellenzeigers (SSTP).
    7 Eine logische Unterbrechungsdienstnummer (logical interrupt service number - LISN)
  • Beim Empfang eines Hypervisor-Aufrufs überprüft der Hypervisor 1896, ob sich das Betriebssystem 1895 registriert hat und ihm die Berechtigung erteilt wurde, das Grafikbeschleunigungsmodul 1846 zu verwenden. Der Hypervisor 1896 setzt dann das Prozesselement 1883 in eine verlinkte Prozesselementliste für eine entsprechende Art des Grafikbeschleunigungsmoduls 1846. Ein Prozesselement kann die in Tabelle 4 gezeigten Informationen beinhalten. Tabelle 4 - Prozesselementeinformationen
    1 Ein Arbeitsdeskriptor (WD)
    2 Ein Autoritätsmaskenregister (AMR)-Wert (möglicherweise maskiert).
    3 Ein Kontext speichern/wiederherstellen Bereichszeiger (CSRP) einer effektiven Adresse (EA)
    4 Eine Prozess-ID (PID) und optionale Thread-ID (TID)
    5 Datensatzzeiger für Beschleunigerverwendung (AURP) einer virtuellen Adresse (VA)
    6 Virtuelle Adresse des Speichersegmenttabellenzeigers (SSTP).
    7 Eine logische Unterbrechungsdienstnummer (logical interrupt service number - LISN)
    8 Unterbrechungsvektortabelle, abgeleitet aus Hypervisor-Aufrufparametern
    9 Ein Zustandsregister (state register - SR)-Wert
    10 Eine logische Partitions-ID (LPID)
    11 Ein Datensatzzeiger für Hypervisor-Beschleunigerverwendung der Real-Adresse (RA)
    12 Speicherdeskriptorregister (Storage Descriptor Register - SDR)
  • In mindestens einer Ausführungsform initialisiert der Hypervisor eine Vielzahl von Registern 1845 der Beschleuniger-Integrations-Slice 1890.
  • Wie in 18F veranschaulicht, wird in mindestens einer Ausführungsform ein einheitlicher Speicher verwendet, der über einen gemeinsamen virtuellen Speicheradressbereich ansteuerbar ist, der verwendet wird, um auf physische Prozessorspeicher 1801-1802 und GPU-Speicher 1820-1823 zuzugreifen. In dieser Umsetzung verwenden Operationen, die auf den GPUs 1810-1813 ausgeführt werden, denselben virtuellen/effektiven Speicheradressbereich, um auf die Prozessorspeicher 1801-1802 zuzugreifen und umgekehrt, wodurch die Programmierbarkeit vereinfacht wird. In einer Ausführungsform wird ein erster Teil eines virtuellen/effektiven Adressbereichs dem Prozessorspeicher 1801, ein zweiter Teil dem zweiten Prozessorspeicher 1802, ein dritter Teil dem GPU-Speicher 1820 usw. zugewiesen. In mindestens einer Ausführungsform wird dadurch ein gesamter virtueller/effektiver Speicherbereich (manchmal als effektiver Adressbereich bezeichnet) auf jeden der Prozessorspeicher 1801-1802 und GPU-Speicher 1820-1823 verteilt, wodurch es jedem Prozessor oder jeder GPU ermöglicht wird, auf beliebige physische Speicher mit einer virtuellen Adresse zuzugreifen, die diesem Speicher zugeordnet ist.
  • In einer Ausführungsform stellt die Verzerrungs-/Kohärenzverwaltungsschaltung 1894A-1894E in einer oder mehreren der MMUs 1839A-1839E die Zwischenspeicherkohärenz zwischen Zwischenspeichern von einem oder mehreren Hostprozessoren (z. B. 1805) und den GPUs 1810-1813 sicher und setzt Verzerrungsmethoden um, die physische Speicher angeben, in denen bestimmte Arten von Daten gespeichert werden sollen. Obwohl mehrere Instanzen der Verzerrungs-/Kohärenzverwaltungsschaltungen 1894A-1894E in 18F veranschaulicht sind, kann eine Verzerrungs-/Kohärenzschaltung in einer MMU eines oder mehrerer Hostprozessoren 1805 und/oder in der Beschleunigerintegrationsschaltung 1836 umgesetzt sein.
  • Eine Ausführungsform ermöglicht, dass der an die GPU angeschlossene Speicher 1820-1823 als Teil des Systemspeichers zugeordnet ist und auf ihn unter Verwendung der Technologie des gemeinsam genutzten virtuellen Speichers (shared virtual memory - SVM) zugegriffen wird, ohne jedoch Leistungsnachteile zu erleiden, die mit der vollständigen Systemzwischenspeicherkohärenz verbunden sind. In mindestens einer Ausführungsform stellt eine Fähigkeit für den GPU-angeschlossenen Speicher 1820-1823, auf den Systemspeicher ohne lästigen Zwischenspeicherkohärenzaufwand zuzugreifen, eine vorteilhafte Betriebsumgebung für die GPU-Auslagerung bereit. Diese Anordnung ermöglicht es der Software des Hostprozessors 1805, Operanden einzurichten und auf Berechnungsergebnisse zuzugreifen, ohne Aufwand von herkömmlichen E/A-DMA-Datenkopien. Solche traditionellen Kopien beinhalten Treiberaufrufe, Unterbrechungen und speicherzugeordnete E/A(memory mapped I/O - MMIO)-Zugriffe, die alle im Vergleich zu einfachen Speicherzugriffen ineffizient sind. In mindestens einer Ausführungsform kann eine Fähigkeit, ohne Zwischenspeicherkohärenzaufwände auf den GPU-angehängten Speicher 1820-1823 zuzugreifen, für die Ausführungszeit einer ausgelagerten Berechnung entscheidend sein. In Fällen mit erheblichem Streaming-Schreibspeicherverkehr kann zum Beispiel der Zwischenspeicherkohärenzaufwand eine effektive Schreibbandbreite erheblich verringern, die von einer GPU 1810-1813 gesehen wird. In mindestens einer Ausführungsform können die Effizienz der Operandeneinrichtung, die Effizienz des Ergebniszugriffs und die Effizienz der GPU-Berechnung eine Rolle bei der Bestimmung der Effektivität einer GPU-Offload spielen.
  • In mindestens einer Ausführungsform wird die Auswahl von GPU-Verzerrung und Hostprozessor-Verzerrung durch eine Verzerrungsortungsdatenstruktur bestimmt. Es kann zum Beispiel eine Verzerrungstabelle verwendet werden, die eine seitengranulare Struktur sein kann (d. h. mit einer Granularität einer Speicherseite gesteuert), die 1 oder 2 Bits pro GPUangeschlossener Speicherseite beinhaltet. In mindestens einer Ausführungsform kann eine Verzerrungstabelle in einem gestohlenen Speicherbereich eines oder mehrerer GPUangeschlossener Speicher 1820-1823 mit oder ohne Verzerrungszwischenspeicher in der GPU 1810-1813 umgesetzt sein (z. B. um häufig/zuletzt verwendete Einträge einer Verzerrungstabelle zwischenzuspeichern). Alternativ kann eine gesamte Neigungstabelle innerhalb einer GPU gepflegt werden.
  • In mindestens einer Ausführungsform wird auf einen Verzerrungstabelleneintrag, der mit jedem Zugriff auf den GPU-angeschlossenen Speicher 1820-1823 verbunden ist, vor dem tatsächlichen Zugriff auf einen GPU-Speicher zugegriffen, was die folgenden Operationen verursacht. Zuerst werden lokale Anfragen von der GPU 1810-1813, die ihre Seite in der GPU-Verzerrung finden, direkt an einen entsprechenden GPU-Speicher 1820-1823 weitergeleitet. Lokale Anforderungen von einer GPU, die ihre Seite in der Host-Verzerrung finden, werden an den Prozessor 1805 weitergeleitet (z. B. über eine Hochgeschwindigkeitsverbindung, vorstehend erörtert). In einer Ausführungsform vervollständigen Anforderungen vom Prozessor 1805, die eine angeforderte Seite in der Hostprozessor-Verzerrung finden, eine Anforderung wie ein normaler Speicherlesevorgang. Alternativ können Anfragen, die an eine GPU-verzerrte Seite gerichtet sind, an die GPU 1810-1813 weitergeleitet werden. In mindestens einer Ausführungsform kann eine GPU dann eine Seite in eine Host-Prozessor-Neigung umwandeln, wenn er aktuell keine Seite verwendet. In mindestens einer Ausführungsform kann der Verzerrungszustand einer Seite entweder durch einen softwarebasierten Mechanismus, einen hardwareunterstützten softwarebasierten Mechanismus oder für eine begrenzte Anzahl von Fällen durch einen rein hardwarebasierten Mechanismus geändert werden.
  • Ein Mechanismus zum Ändern des Verzerrungszustands verwendet einen API-Aufruf (z. B. OpenCL), der wiederum den Vorrichtungstreiber einer GPU aufruft, der wiederum eine Mitteilung an eine GPU sendet (oder einen Befehlsdeskriptor einreiht), die sie anweist, eine Verzerrungszustand zu ändern und bei einigen Übergängen eine Zwischenspeicherleerungsoperation in einem Host durchzuführen. In mindestens einer Ausführungsform wird die Zwischenspeicherleerungsoperation für einen Übergang von der Verzerrung des Hostprozessors 1805 zur GPU-Verzerrung verwendet, jedoch nicht für einen entgegengesetzten Übergang.
  • In einer Ausführungsform wird die Cache-Kohärenz aufrechterhalten, indem bewirkt wird, dass GPU-verzerrte Seiten durch den Host-Prozessor 1805 vorübergehend nicht zwischengespeichert werden können. Um auf diese Seiten zuzugreifen, kann der Prozessor 1805 Zugriff von der GPU 1810 anfordern, die den Zugriff sofort gewähren kann oder nicht. Um die Kommunikation zwischen dem Prozessor 1805 und der GPU 1810 zu verringern, ist es daher vorteilhaft sicherzustellen, dass GPU-verzerrte Seiten diejenigen sind, die von einer GPU aber nicht von dem Hostprozessor 1805 benötigt werden und umgekehrt.
  • Die Hardware-Struktur(en) 1015 werden verwendet, um eine oder mehrere Ausführungsformen durchzuführen. Details zur Hardwarestruktur(x) 1015 werden weiter unten in Verbindung mit 10A und/oder 10B bereitgestellt.
  • 19 veranschaulicht beispielhafte integrierte Schaltungen und damit assoziierte Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden können, gemäß verschiedenen hierin beschriebenen Ausführungsformen. Zusätzlich zu dem, was veranschaulicht ist, können andere Logiken und Schaltungen in mindestens einer Ausführungsform enthalten sein, einschließlich zusätzlicher Grafikprozessoren/Kerne, Peripherieschnittstellensteuerungen oder Universalprozessorkerne.
  • 19 ist ein Blockdiagramm, das eine beispielhafte integrierte Schaltung 1900 als System auf einem Chip, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß mindestens einer Ausführungsform veranschaulicht. In mindestens einer Ausführungsform beinhaltet die integrierte Schaltung 1900 einen oder mehrere Anwendungsprozessor(en) 1905 (z. B. CPUs), mindestens einen Grafikprozessor 1910 und sie kann zusätzlich einen Bildprozessor 1915 und/oder einen Videoprozessor 1920 beinhalten, von denen jeder beliebige ein modularer IP-Kern sein kann. In mindestens einer Ausführungsform beinhaltet die integrierte Schaltung 1900 Peripherie- oder Buslogik, was eine USB-Steuerung 1925, eine UART-Steuerung 1930, eine SPI/SDIO-Steuerung 1935 und eine I.sup.2S/I.sup.2C-Steuerung 1940 beinhaltet. In mindestens einer Ausführungsform kann die integrierte Schaltung 1900 eine Anzeigevorrichtung 1945 beinhalten, die an eine oder mehrere von einer High-Definition-Multimedia-Interface-(HDMI-)Steuerung 1950 und einer Mobile-Industry-Processor-Interface-(MIPI-)Anzeigeschnittstelle 1955 gekoppelt ist. In mindestens einer Ausführungsform kann die Speicherung durch ein Flash-Speicherteilsystem 1960 bereitgestellt sein, das Flash-Speicher und eine Flash-Speichersteuerung beinhaltet. In mindestens einer Ausführungsform kann die Speicherschnittstelle über eine Speichersteuerung 1965 für den Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt sein. In mindestens einer Ausführungsform beinhalten einige integrierte Schaltungen zusätzlich eine eingebettete Sicherheits-Engine 1970.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann die Inferenz- und/oder Trainingslogik 1015 in der integrierten Schaltung 1900 für Inferenz- oder Vorhersageoperationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von Trainingsoperationen für neuronale Netze, Funktionen und/oder Architekturen von neuronalen Netzen oder hierin beschriebenen Anwendungsfällen für neuronale Netze berechnet wurden.
  • In mindestens einer Ausführungsform wird 19 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • Die 20A und 20B veranschaulichen beispielhafte integrierte Schaltungen und damit assoziierte Grafikprozessoren, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden können, gemäß verschiedenen hierin beschriebenen Ausführungsformen. Zusätzlich zu dem, was veranschaulicht ist, können andere Logiken und Schaltungen in mindestens einer Ausführungsform enthalten sein, einschließlich zusätzlicher Grafikprozessoren/Kerne, Peripherieschnittstellensteuerungen oder Universalprozessorkerne.
  • Die 20A und 20B sind Blockdiagramme, die beispielhafte Grafikprozessoren zur Verwendung innerhalb eines SoC gemäß hierin beschriebenen Ausführungsformen veranschaulichen. 20A veranschaulicht einen beispielhaften Grafikprozessor 2010 einer integrierten Schaltung als System auf einem Chip, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß mindestens einer Ausführungsform. 20B veranschaulicht einen zusätzlichen beispielhaften Grafikprozessor 2040 einer integrierten Schaltung als System auf einem Chip, die unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden kann, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist der Grafikprozessor 2010 aus 20A ein Grafikprozessorkern mit niedriger Leistung. In mindestens einer Ausführungsform ist der Grafikprozessor 2040 aus 20B ein Grafikprozessorkern mit höherer Rechenleistung. In mindestens einer Ausführungsform kann jeder der Grafikprozessoren 2010, 2040 eine Variante des Grafikprozessors 1910 aus 19 sein.
  • In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 2010 einen Vertexprozessor 2005 und einen oder mehrere Fragmentprozessor(en) 2015A-2015N (z. B. 2015A, 2015B, 2015C, 2015D bis 2015N-1 und 2015N). In mindestens einer Ausführungsform kann der Grafikprozessor 2010 unterschiedliche Shader-Programme über separate Logik ausführen, sodass der Vertexprozessor 2005 zum Ausführen von Operationen für Vertex-Shader-Programme optimiert ist, während ein oder mehrere Fragmentprozessor(en) 2015A-2015N Shading-Operationen für Fragmente (z. B. Pixel) für Fragment- oder Pixel-Shader-Programme ausführen. In mindestens einer Ausführungsform führt der Vertexprozessor 2005 eine Vertexverarbeitungsstufe einer 3D-Grafik-Pipeline durch und erzeugt Primitive und Vertexdaten. In mindestens einer Ausführungsform verwenden die Fragmentprozessor(en) 2015A-2015N Primitiv- und Vertexdaten, die durch den Vertexprozessor 2005 erzeugt wurden, um einen Bildspeicher zu produzieren, der auf einer Anzeigevorrichtung angezeigt wird. In mindestens einer Ausführungsform sind die Fragmentprozessor(en) 2015A-2015N zum Ausführen von Fragment-Shader-Programmen optimiert, wie sie in einer OpenGL-API bereitgestellt sind, die zum Durchführen ähnlicher Operationen wie ein Pixel-Shader-Programm verwendet werden können, wie es in einer Direct-3D-API bereitgestellt ist.
  • In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 2010 zusätzlich eine(n) oder mehrere Speicherverwaltungseinheiten (MMUs) 2020A-2020B, Cache(s) 2025A-2025B und Schaltungszusammenschaltung(en) 2030A-2030B. In mindestens einer Ausführungsform stellen eine oder mehrere MMU(s) 2020A-2020B die Abbildung von virtuellen auf physische Adressen für den Grafikprozessor 2010 bereit, einschließlich für den Vertexprozessor 2005 und/oder die Fragmentprozessor(en) 2015A-2015N, der/die auf in Speicher gespeicherte Vertex- oder Bild-/Texturdaten verweisen kann/können, zusätzlich zu den in einem oder mehreren Cache(s) 2025A-2025B gespeicherten Vertex- oder Bild-/Texturdaten. In mindestens einer Ausführungsform können eine oder mehrere MMU(s) 2020A-2020B mit anderen MMUs innerhalb eines Systems synchronisiert werden, einschließlich einer oder mehrerer MMUs, die mit einem oder mehreren Anwendungsprozessor(en) 1905, Bildprozessoren 1915 und/oder Videoprozessoren 1920 aus 19 assoziiert sind, sodass jeder Prozessor 1905-1920 an einem gemeinsam genutzten oder einheitlichen virtuellen Speichersystem teilnehmen kann. In mindestens einer Ausführungsform ermöglichen es eine oder mehrere Schaltungszusammenschaltung(en) 2030A-2030B dem Grafikprozessor 2010, entweder über einen internen Bus des SoC oder über eine direkte Verbindung Schnittstellen mit anderen IP-Kernen innerhalb des SoC zu bilden.
  • In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 2040 eine oder mehrere MMU 2020A-2020B, Cache 2025A-2025B und Schaltungszwischenverbindungen 2030A-2030B des Grafikprozessors 2010 aus 20A. In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 2040 einen oder mehrere Shader-Kerne 2055A-2055N (z. B. 2055A, 2055B, 2055C, 2055D, 2055E, 2055F bis 2055N-1 und 2055N), was eine vereinheitlichte Shader-Kernarchitektur bereitstellt, in der ein(e) einzelne(r) Kern oder Art oder Kern alle Arten von programmierbarem Shader-Code ausführen kann, was Shader-Programmcode beinhaltet, um Vertex-Shader, Fragment-Shader und/oder Compute-Shader zu implementieren. In mindestens einer Ausführungsform kann eine Anzahl der Shader-Kerne variieren. In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 2040 einen Zwischenkern-Task-Verwalter 2045, der als Thread-Zuteiler fungiert, um Ausführungs-Threads einem oder mehreren Shader-Kernen 2055A-2055N zuzuteilen, sowie eine Kachelungseinheit 2058 zum Beschleunigen von Kachelungsoperationen für das kachelbasierte Rendering, bei dem Rendering-Operationen für eine Szene in dem Bildraum unterteilt werden, um zum Beispiel die lokale räumliche Kohärenz innerhalb einer Szene auszunutzen oder die Verwendung interner Caches zu optimieren.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann die Inferenz- und/oder Trainingslogik 1015 in der integrierten Schaltung 20A und/oder 20B für Inferenz- oder Vorhersageoperationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von Trainingsoperationen für neuronale Netze, Funktionen und/oder Architekturen von neuronalen Netzen oder hierin beschriebenen Anwendungsfällen für neuronale Netze berechnet wurden.
  • In mindestens einer Ausführungsform werden 20A-20B verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • Die 21A und 21B veranschaulichen zusätzliche beispielhafte Grafikprozessorlogik gemäß hierin beschriebenen Ausführungsformen. 21A veranschaulicht einen Grafikkern 2100, der in mindestens einer Ausführungsform innerhalb des Grafikprozessors 1910 aus 19 enthalten sein kann und in mindestens einer Ausführungsform ein einheitlicher Shader-Kern 2055A-2055N wie in 20B sein kann. 21B veranschaulicht eine hochparallele Allzweck-Grafikverarbeitungseinheit 2130, die in mindestens einer Ausführungsform zum Einsatz auf einem Mehrchipmodul geeignet ist.
  • In mindestens einer Ausführungsform beinhaltet der Grafikkern 2100 einen gemeinsam genutzten Anweisungs-Cache 2102, eine Textureinheit 2118 und einen Cache/gemeinsam genutzten Speicher 2120, die den Ausführungsressourcen innerhalb des Grafikkerns 2100 gemeinsam sind. In mindestens einer Ausführungsform kann der Grafikkern 2100 mehrere Slices 2101A-2101N oder eine Partition für jeden Kern beinhalten und ein Grafikprozessor kann mehrere Instanzen des Grafikkerns 2100 beinhalten. Die Slices 2101A-2101N können eine Unterstützungslogik beinhalten, die einen lokalen Anweisungscache 2104A-2104N, einen Thread-Scheduler 2106A-2106N, einen Thread-Dispatcher 2108A-2108N und einen Satz von Registern 2110A-2110N beinhaltet. In mindestens einer Ausführungsform können die Slices 2101A-2101N einen Satz zusätzlicher Funktionseinheiten (additional function units - AFUs 2112A-2112N), Gleitkommaeinheiten (floating-point units - FPUs 2114A-2114N), arithmetisch-logischer Einheiten für Integer (ALUs 2116-2116N), Adressberechnungseinheiten (address computational units - ACUs 2113A-2113N), Gleitkommaeinheiten mit doppelter Genauigkeit (double-precision floating-point units - DPFPUs 2115A-2115N) und Matrixverarbeitungseinheiten (matrix processing units - MPUs 2117A-2117N) beinhalten.
  • In mindestens einer Ausführungsform können die FPUs 2114A-2114N Gleitkommaoperationen mit einfacher Genauigkeit (32 Bit) und halber Genauigkeit (16 Bit) durchführen, während die DPFPUs 2115A-2115N Gleitkommaoperationen mit doppelter Genauigkeit (64 Bit) durchführen. In mindestens einer Ausführungsform können die ALUs 2116A-2116N Integeroperationen mit variabler Genauigkeit mit 8-Bit-, 16-Bit- und 32-Bit-Genauigkeit durchführen und für Operationen mit gemischter Genauigkeit konfiguriert sein. In mindestens einer Ausführungsform können die MPUs 2117A-2117N auch für Matrixoperationen mit gemischter Genauigkeit konfiguriert sein, einschließlich Gleitkomma- und 8-Bit-Integeroperationen mit halber Genauigkeit. In mindestens einer Ausführungsform können die MPUs 2117A-2117N eine Vielfalt von Matrixoperationen durchführen, um Anwendungsrahmen für maschinelles Lernen zu beschleunigen, einschließlich des Ermöglichens der Unterstützung für eine beschleunigte allgemeine Matrix-Matrix-zu-Matrix-Multiplikation (general matrix to matrix multiplication - GEMM). In mindestens einer Ausführungsform können die AFUs 2112A-2112N zusätzliche logische Operationen durchführen, die durch Gleitkomma- oder Integereinheiten nicht unterstützt werden, einschließlich trigonometrischer Operationen (z. B. Sinus, Cosinus usw.).
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann eine Inferenz- und/oder Trainingslogik 1015 in dem Grafikkern 2100 zum Inferenzieren oder Vorhersagen von Operationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von neuronalen Netztrainingsoperationen, Funktionen und/oder Architekturen von neuronalen Netzen oder in dieser Schrift beschriebenen Anwendungsfällen von neuronalen Netzen berechnet wurden.
  • In mindestens einer Ausführungsform wird 21A verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 21B veranschaulicht in mindestens einer Ausführungsform eine Universalverarbeitungseinheit (GPGPU) 2130, die so konfiguriert sein kann, dass hochparallele Rechenoperationen durch ein Array von Grafikverarbeitungseinheiten durchgeführt werden können. In mindestens einer Ausführungsform kann die GPGPU 2130 direkt mit anderen Instanzen der GPGPU 2130 verknüpft sein, um einen Mehr-GPU-Cluster zu erzeugen, um die Trainingsgeschwindigkeit für tiefe neuronale Netze zu verbessern. In mindestens einer Ausführungsform beinhaltet die GPGPU 2130 eine Host-Schnittstelle 2132, um eine Verbindung mit einem Host-Prozessor zu ermöglichen. In mindestens einer Ausführungsform ist die Host-Schnittstelle 2132 eine PCI-Express-Schnittstelle. In mindestens einer Ausführungsform kann die Host-Schnittstelle 2132 eine herstellerspezifische Kommunikationsschnittstelle oder Kommunikationsstruktur sein. In mindestens einer Ausführungsform empfängt die GPGPU 2130 Befehle von einem Host-Prozessor und sie verwendet einen globalen Scheduler 2134, um mit diesen Befehlen assoziierte Ausführungs-Threads an einen Satz von Rechenclustern 2136A-2136H zu verteilen. In mindestens einer Ausführungsform nutzen die Rechencluster 2136A-2136H einen Cache-Speicher 2138 gemeinsam. In mindestens einer Ausführungsform kann der Cache-Speicher 2138 als übergeordneter Cache für Cache-Speicher innerhalb der Rechencluster 2136A-2136H dienen.
  • In mindestens einer Ausführungsform beinhaltet die GPGPU 2130 Speicher 2144A-2144B, der über einen Satz von Speichersteuerungen 2142A-2142B an die Rechencluster 2136A-2136H gekoppelt ist. In mindestens einer Ausführungsform kann der Speicher 2144A-2144B verschiedene Typen von Speichervorrichtungen beinhalten, darunter dynamischer Direktzugriffsspeicher (DRAM) oder Grafik-Direktzugriffsspeicher, wie etwa synchroner Grafik-Direktzugriffsspeicher (SGRAM), darunter Grafik-Double-Data-Rate-(GDDR-)Speicher.
  • In mindestens einer Ausführungsform beinhalten die Rechencluster 2136A-2136H jeweils einen Satz von Grafikkernen, wie etwa den Grafikkern 2100 aus 21A, der mehrere Typen von Logikeinheiten für Integer und Gleitkommazahlen beinhalten kann, die Rechenoperationen mit einer Reihe von Genauigkeiten durchführen können, einschließlich solcher, die für Berechnungen des maschinellen Lernens geeignet sind. Zum Beispiel kann in mindestens einer Ausführungsform mindestens eine Teilmenge der Gleitkommaeinheiten in jedem der Rechencluster 2136A-2136H so konfiguriert sein, dass sie 16-Bit- oder 32-Bit-Gleitkommaoperationen durchführt, während eine andere Teilmenge der Gleitkommaeinheiten so konfiguriert sein kann, dass sie 64-Bit-Gleitkommaoperationen durchführt.
  • In mindestens einer Ausführungsform können mehrere Instanzen der GPGPU 2130 so konfiguriert sein, dass sie als Rechencluster arbeiten. In mindestens einer Ausführungsform variiert die Kommunikation, die durch die Rechencluster 2136A-2136H für die Synchronisation und den Datenaustausch verwendet wird, je nach Ausführungsform. In mindestens einer Ausführungsform kommunizieren mehrere Instanzen der GPGPU 2130 über die Host-Schnittstelle 2132. In mindestens einer Ausführungsform beinhaltet die GPGPU 2130 einen E/A-Hub 2139, der die GPGPU 2130 mit einer GPU-Verknüpfung 2140 koppelt, die eine direkte Verbindung zu anderen Instanzen der GPGPU 2130 ermöglicht. In mindestens einer Ausführungsform ist die GPU-Verknüpfung 2140 an eine dedizierte GPU-zu-GPU-Brücke gekoppelt, die Kommunikation und Synchronisation zwischen mehreren Instanzen der GPGPU 2130 ermöglicht. In mindestens einer Ausführungsform ist die GPU-Verknüpfung 2140 mit einer Hochgeschwindigkeitszusammenschaltung gekoppelt, um Daten an andere GPGPUs oder Parallelprozessoren zu übertragen und davon zu empfangen. In mindestens einer Ausführungsform befinden sich mehrere Instanzen der GPGPU 2130 in separaten Datenverarbeitungssystemen und sie kommunizieren über eine Netzvorrichtung, auf die über die Host-Schnittstelle 2132 zugegriffen werden kann. In mindestens einer Ausführungsform kann die GPU-Verknüpfung 2140 so konfiguriert sein, dass eine Verbindung zu einem Host-Prozessor zusätzlich zu oder alternativ zu der Host-Schnittstelle 2132 ermöglicht wird.
  • In mindestens einer Ausführungsform kann die GPGPU 2130 dazu konfiguriert sein, neuronale Netze zu trainieren. In mindestens einer Ausführungsform kann die GPGPU 2130 innerhalb einer Ableitungsplattform verwendet werden. In mindestens einer Ausführungsform, in der die GPGPU 2130 für die Ableitung verwendet wird, kann die GPGPU weniger Rechencluster 2136A-2136H beinhalten, als wenn die GPGPU zum Trainieren eines neuronalen Netzwerks verwendet wird. In mindestens einer Ausführungsform kann sich die mit dem Speicher 2144A-2144B assoziierte Speichertechnologie zwischen Inferenz- und Trainingskonfigurationen unterscheiden, wobei den Trainingskonfigurationen Speichertechnologien mit höherer Bandbreite gewidmet sind. In mindestens einer Ausführungsform kann die Ableitungskonfiguration der GPGPU 2130 die Ableitung von spezifischen Anweisungen unterstützen. In mindestens einer Ausführungsform kann eine Inferenzierungskonfiguration beispielsweise Unterstützung für eine oder mehrere 8-Bit-Integer-Skalarprodukt-Anweisungen bereitstellen, die während der InferenzierungsOperationen für eingesetzte neuronale Netzwerke verwendet werden können.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann eine Inferenz- und/oder Trainingslogik 1015 in der GPGPU 2130 zum Inferenzieren oder Vorhersagen von Operationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von neuronalen Netztrainingsoperationen, Funktionen und/oder Architekturen von neuronalen Netzen oder in dieser Schrift beschriebenen Anwendungsfällen von neuronalen Netzen berechnet wurden.
  • In mindestens einer Ausführungsform wird 21B verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 22 ist ein Blockdiagramm, das ein Rechensystem 2200 gemäß mindestens einer Ausführungsform veranschaulicht. In mindestens einer Ausführungsform beinhaltet das Rechensystem 2200 ein Verarbeitungsteilsystem 2201, das einen oder mehrere Prozessor(en) 2202 und einen Systemspeicher 2204 aufweist, die über einen Zusammenschaltungspfad kommunizieren, der einen Speicher-Hub 2205 beinhalten kann. In mindestens einer Ausführungsform kann der Speicher-Hub 2205 eine getrennte Komponente innerhalb einer Chipsatzkomponente sein oder kann in einen oder mehrere Prozessoren 2202 integriert sein. In mindestens einer Ausführungsform ist der Speicher-Hub 2205 über eine Kommunikationsverknüpfung 2206 mit einem E/A-Teilsystem 2211 gekoppelt. In mindestens einer Ausführungsform beinhaltet das E/A-Teilsystem 2211 einen E/A-Hub 2207, der es dem Rechensystem 2200 ermöglichen kann, Eingaben von einer oder mehreren Eingabevorrichtung(en) 2208 zu empfangen. In mindestens einer Ausführungsform kann der E/A-Hub 2207 es einer Anzeigesteuerung, die in einem oder mehreren Prozessor(en) 2202 enthalten sein kann, ermöglichen, einer oder mehreren Anzeigevorrichtung(en) 2210A Ausgaben bereitzustellen. In mindestens einer Ausführungsform können eine oder mehrere mit dem E/A-Hub 2207 gekoppelte Anzeigevorrichtung(en) 2210A eine lokale, interne oder eingebettete Anzeigevorrichtung beinhalten.
  • In mindestens einer Ausführungsform beinhaltet das Verarbeitungsteilsystem 2201 einen oder mehrere Parallelprozessor(en) 2212, die über einen Bus oder eine andere Kommunikationsverknüpfung 2213 an den Speicher-Hub 2205 gekoppelt sind. In mindestens einer Ausführungsform kann die Kommunikationsverbindung 2213 eine von einer beliebigen Anzahl von auf Standards basierenden Kommunikationsverbindungstechnologien oder - protokollen sein, wie etwa, aber nicht beschränkt auf PCI Express, oder kann eine herstellerspezifische Kommunikationsschnittstelle oder Kommunikationsstruktur sein. In mindestens einer Ausführungsform bilden ein oder mehrere Parallelprozessoren 2212 ein rechenfokussiertes Parallel- oder Vektorverarbeitungssystem, das eine große Anzahl von Verarbeitungskernen und/oder Verarbeitungsclustern beinhalten kann, wie etwa einen Prozessor mit vielen integrierten Kernen (many integrated core - MIC). In mindestens einer Ausführungsform bilden ein oder mehrere Parallelprozessoren 2212 ein Grafikverarbeitungsteilsystem, das Pixel an eine oder mehrere Anzeigevorrichtungen 2210A ausgeben kann, die über den E/A-Hub 2207 gekoppelt sind. In mindestens einer Ausführungsform können ein oder mehrere Parallelprozessoren 2212 auch einen Anzeigesteuerung und eine Anzeigeschnittstelle (nicht gezeigt) beinhalten, um eine direkte Verbindung zu einer oder mehreren Anzeigevorrichtungen 2210B zu ermöglichen.
  • In mindestens einer Ausführungsform kann eine Systemspeichereinheit 2214 mit dem E/A-Hub 2207 verbunden sein, um einen Speichermechanismus für das Rechensystem 2200 bereitzustellen. In mindestens einer Ausführungsform kann ein E/A-Switch 2216 verwendet werden, um einen Schnittstellenmechanismus bereitzustellen, der Verbindungen zwischen dem E/A-Hub 2207 und anderen Komponenten ermöglicht, wie etwa einem Netzadapter 2218 und/oder einem drahtlosen Netzadapter 2219, die in eine Plattform integriert werden können, sowie verschiedenen anderen Vorrichtungen, die über eine oder mehrere Erweiterungsvorrichtung(en) 2220 hinzugefügt werden können. In mindestens einer Ausführungsform kann der Netzwerkadapter 2218 ein Ethernet-Adapter oder ein anderer drahtgebundener Netzwerkadapter sein. In mindestens einer Ausführungsform kann der drahtlose Netzadapter 2219 eine oder mehrere Wi-Fi-, Bluetooth-, Nahfeldkommunikations-(NFC-) oder eine andere Netzvorrichtung beinhalten, die ein oder mehrere drahtlose Funkgeräte beinhaltet.
  • In mindestens einer Ausführungsform kann das Rechensystem 2200 andere, nicht explizit gezeigte Komponenten beinhalten, einschließlich USB- oder anderer Portverbindungen, optischer Speicherlaufwerke, Videoaufnahmevorrichtungen und dergleichen, die ebenfalls mit dem E/A-Hub 2207 verbunden sein können. In mindestens einer Ausführungsform können die Kommunikationspfade, die verschiedene Komponenten in 22 zusammenschalten, unter Verwendung beliebiger geeigneter Protokolle implementiert werden, wie etwa auf PCI (Peripheral Component Interconnect) basierender Protokolle (z. B. PCI-Express) oder anderer Bus- oder Punkt-zu-Punkt-Kommunikationsschnittstellen und/oder -protokoll(e), wie etwa NV-Link-Hochgeschwindigkeitszusammenschaltung, oder Zusammenschaltungsprotokolle.
  • In mindestens einer Ausführungsform schließen ein oder mehrere Parallelprozessoren 2212 eine Schaltung ein, die für die Grafik- und Videoverarbeitung optimiert ist, was zum Beispiel eine Videoausgabeschaltung beinhaltet, und bilden eine Grafikverarbeitungseinheit (GPU). In mindestens einer Ausführungsform schließen ein oder mehrere Parallelprozessoren 2212 eine Schaltung ein, die für eine universelle Verarbeitung optimiert ist. In mindestens einer Ausführungsform können die Komponenten des Rechensystems 2200 in ein oder mehrere andere Systemelemente auf einer einzelnen integrierten Schaltung integriert sein. Zum Beispiel können in mindestens einer Ausführungsform ein oder mehrere Parallelprozessoren 2212, Speicher-Hub 2205, Prozessoren 2202 und E/A-Hub 2207 in eine integrierte System-on-Chip-(SoC-)Schaltung integriert sein. In mindestens einer Ausführungsform können die Komponenten des Rechensystems 2200 in ein einzelnes Gehäuse integriert sein, um eine Konfiguration mit einem System in einem Gehäuse (system in package - SIP) zu bilden. In mindestens einer Ausführungsform kann mindestens ein Abschnitt der Komponenten des Rechensystems 2200 in ein Multi-Chip-Modul (multi-chip module - MCM) integriert sein, das mit anderen Multi-Chip-Modulen zu einem modularen Rechensystem zusammengeschaltet sein kann.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann die Inferenz- und/oder Trainingslogik 1015 in dem System aus 22 für Inferenz- oder Vorhersageoperationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von Trainingsoperationen für neuronale Netze, Funktionen und/oder Architekturen von neuronalen Netzen oder hierin beschriebenen Anwendungsfällen für neuronale Netze berechnet wurden.
  • In mindestens einer Ausführungsform wird 22 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • PROZESSOREN
  • 23A veranschaulicht einen Parallelprozessor 2300 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform können verschiedene Komponenten des Parallelprozessors 2300 unter Verwendung einer oder mehrerer integrierter Schaltungen implementiert werden, wie etwa programmierbare Prozessoren, anwendungsspezifische integrierte Schaltungen (ASICs) oder feldprogrammierbare Gate-Arrays (FPGAs). In mindestens einer Ausführungsform ist der veranschaulichte Parallelprozessor 2300 eine Variante eines oder mehrerer Parallelprozessor(en) 2212, die in 22 gemäß einer beispielhaften Ausführungsform gezeigt sind.
  • In mindestens einer Ausführungsform beinhaltet der Parallelprozessor 2300 eine Parallelverarbeitungseinheit 2302. In mindestens einer Ausführungsform beinhaltet die Parallelverarbeitungseinheit 2302 eine E/A-Einheit 2304, die Kommunikation mit anderen Vorrichtungen ermöglicht, einschließlich anderer Instanzen der Parallelverarbeitungseinheit 2302. In mindestens einer Ausführungsform kann die E/A-Einheit 2304 direkt mit anderen Vorrichtungen verbunden sein. In mindestens einer Ausführungsform ist die E/A-Einheit 2304 über die Verwendung einer Hub- oder Switch-Schnittstelle, wie etwa eines Speicher-Hubs 2205, mit anderen Vorrichtungen verbunden. In mindestens einer Ausführungsform bilden Verbindungen zwischen dem Speicher-Hub 2205 und der E/A-Einheit 2304 eine Kommunikationsverknüpfung 2213. In mindestens einer Ausführungsform ist die E/A-Einheit 2304 mit einer Host-Schnittstelle 2306 und einer Speicherkreuzschiene 2316 verbunden, wobei die Host-Schnittstelle 2306 Befehle empfängt, die auf das Durchführen von Verarbeitungsoperationen gerichtet sind, und die Speicherkreuzschiene 2316 Befehle empfängt, die auf das Durchführen von Speicheroperationen gerichtet sind.
  • In mindestens einer Ausführungsform kann, wenn die Host-Schnittstelle 2306 einen Befehlspuffer über die E/A-Einheit 2304 empfängt, die Host-Schnittstelle 2306 Arbeitsoperationen zum Durchführen dieser Befehle an ein Frontend 2308 richten. In mindestens einer Ausführungsform ist das Frontend 2308 mit einem Scheduler 2310 gekoppelt, der so konfiguriert ist, dass er Befehle oder andere Arbeitselemente an ein Verarbeitungsclusterarray 2312 verteilt. In mindestens einer Ausführungsform stellt der Scheduler 2310 sicher, dass das Verarbeitungsclusterarray 2312 ordnungsgemäß konfiguriert ist und sich in einem gültigen Zustand befindet, bevor Tasks an ein Cluster eines Verarbeitungsclusterarrays 2312 verteilt werden. In mindestens einer Ausführungsform ist der Scheduler 2310 über Firmware-Logik implementiert, die auf einem Mikrocontroller ausgeführt wird. In mindestens einer Ausführungsform ist der Mikrocontroller-implementierte Scheduler 2310 so konfigurierbar, dass er komplexe Planungs- und Arbeitsverteilungsoperationen mit grober und feiner Granularität durchführt, was eine schnelle Präemption und Kontextumschaltung von Threads ermöglicht, die auf dem Verarbeitungsarray 2312 ausgeführt werden. In mindestens einer Ausführungsform kann die Host-Software Arbeitslasten zum Planen auf dem Verarbeitungsarray 2312 über eine von mehreren Doorbells für die Grafikverarbeitung nachweisen. In mindestens einer Ausführungsform können Arbeitslasten dann durch die Logik des Schedulers 2310 innerhalb einer Mikrosteuerung, die den Scheduler 2310 beinhaltet, automatisch über das Verarbeitungsarray 2312 verteilt werden.
  • In mindestens einer Ausführungsform kann das Verarbeitungsclusterarray 2312 bis zu „N“ Verarbeitungscluster beinhalten (z. B. Cluster 2314A, Cluster 2314B bis Cluster 2314N). In mindestens einer Ausführungsform kann jeder Cluster 2314A-2314N des Verarbeitungsclusterarrays 2312 eine große Anzahl von nebenläufigen Threads ausführen. In mindestens einer Ausführungsform kann der Scheduler 2310 den Clustern 2314A-2314N des Verarbeitungsclusterarrays 2312 Arbeit zuweisen, indem er verschiedene Planungs- und/oder Arbeitsverteilungsalgorithmen verwendet, die in Abhängigkeit von der Arbeitslast variieren können, die für jeden Typ von Programm oder Berechnung entsteht. In mindestens einer Ausführungsform kann die Planung dynamisch durch den Scheduler 2310 gehandhabt werden oder teilweise durch Compiler-Logik während der Kompilierung der Programmlogik unterstützt werden, die für die Ausführung durch das Verarbeitungsclusterarray 2312 konfiguriert ist. In mindestens einer Ausführungsform können unterschiedliche Cluster 2314A-2314N des Verarbeitungsclusterarrays 2312 zum Verarbeiten unterschiedlicher Programmtypen oder zum Durchführen unterschiedlicher Berechnungstypen zugewiesen sein.
  • In mindestens einer Ausführungsform kann das Verarbeitungsclusterarray 2312 so konfiguriert sein, dass es verschiedene Typen von Parallelverarbeitungsoperationen durchführt. In mindestens einer Ausführungsform ist das Verarbeitungsclusterarray 2312 so konfiguriert, dass es Universal-Parallelberechnungsoperationen durchführt. In mindestens einer Ausführungsform kann das Verarbeitungsclusterarray 2312 zum Beispiel Logik zum Ausführen von Verarbeitungs-Tasks beinhalten, einschließlich des Filterns von Video- und/oder Audiodaten, des Durchführens von Modellierungsoperationen, einschließlich Physikoperationen, und des Durchführens von Datentransformationen.
  • In mindestens einer Ausführungsform ist das Verarbeitungsclusterarray 2312 so konfiguriert, dass es Parallelgrafikverarbeitungsoperationen durchführt. In mindestens einer Ausführungsform kann das Verarbeitungsclusterarray 2312 zusätzliche Logik beinhalten, um die Ausführung derartiger Grafikverarbeitungsoperationen zu unterstützen, was Texturabtastlogik, um Texturoperationen durchzuführen, sowie Tessellationslogik und andere Scheitelpunktverarbeitungslogik beinhaltet, ohne darauf beschränkt zu sein. In mindestens einer Ausführungsform kann das Verarbeitungsclusterarray 2312 dazu konfiguriert sein, grafikverarbeitungsbezogene Shader-Programme auszuführen, wie etwa aber jedoch nicht beschränkt auf Scheitelpunkt-Shader, Tessellation-Shader, Geometrie-Shader und Pixel-Shader. In mindestens einer Ausführungsform kann die Parallelverarbeitungseinheit 2302 Daten aus dem Systemspeicher über die E/A-Einheit 2304 zur Verarbeitung übermitteln. In mindestens einer Ausführungsform können während der Verarbeitung die übermittelten Daten in einem chipinternen Speicher (z. B. dem Parallelprozessorspeicher 2322) während der Verarbeitung gespeichert und dann wieder in den Systemspeicher geschrieben werden.
  • Wenn die Parallelverarbeitungseinheit 2302 zum Durchführen der Grafikverarbeitung verwendet wird, kann der Scheduler 2310 in mindestens einer Ausführungsform so konfiguriert sein, dass er eine Verarbeitungsarbeitslast in annähernd gleich große Tasks aufteilt, um eine bessere Verteilung der Grafikverarbeitungsoperationen auf mehrere Cluster 2314A-2314N des Verarbeitungsclusterarrays 2312 zu ermöglichen. In mindestens einer Ausführungsform können Abschnitte des Verarbeitungsclusterarrays 2312 so konfiguriert sein, dass sie unterschiedliche Verarbeitungstypen durchführen. Zum Beispiel kann in mindestens einer Ausführungsform ein erster Abschnitt so konfiguriert sein, dass er Vertex-Shading und Topologieerzeugung durchführt, kann ein zweiter Abschnitt so konfiguriert sein, dass er Tesselations- und Geometrie-Shading durchführt, und kann ein dritter Abschnitt so konfiguriert sein, dass er Pixel-Shading oder andere BildschirmraumOperationen durchführt, um ein gerendertes Bild zur Anzeige zu produzieren. In mindestens einer Ausführungsform können Zwischendaten, die durch einen oder mehrere der Cluster 2314A-2314N produziert werden, in Puffern gespeichert werden, um zu ermöglichen, dass die Zwischendaten zur weiteren Verarbeitung zwischen den Clustern 2314A-2314N übertragen werden.
  • In mindestens einer Ausführungsform kann das Verarbeitungsclusterarray 2312 auszuführende Verarbeitungs-Tasks über den Scheduler 2310 empfangen, der von dem Frontend 2308 Befehle empfängt, die Verarbeitungs-Tasks definieren. In mindestens einer Ausführungsform können die Verarbeitungs-Tasks Indizes der zu verarbeitenden Daten beinhalten, z. B. Oberflächen(-Patch)-Daten, Primitivdaten, Vertex-Daten und/oder Pixeldaten, sowie Statusparameter und Befehle, die definieren, wie die Daten verarbeitet werden sollen (z. B. welches Programm ausgeführt werden soll). In mindestens einer Ausführungsform kann der Scheduler 2310 so konfiguriert sein, dass er den Tasks entsprechende Indizes abruft, oder er kann Indizes von dem Frontend 2308 empfangen. In mindestens einer Ausführungsform kann das Frontend 2308 so konfiguriert sein, dass es sicherstellt, dass das Verarbeitungsclusterarray 2312 in einen gültigen Zustand konfiguriert wird, bevor eine durch eingehende Befehlspuffer (z. B. Batch-Puffer, Push-Puffer usw.) vorgegebene Arbeitslast initiiert wird.
  • In mindestens einer Ausführungsform kann jede von einer oder mehreren Instanzen der Parallelverarbeitungseinheit 2302 mit einem Parallelprozessorspeicher 2322 gekoppelt sein. In mindestens einer Ausführungsform kann auf den Parallelprozessorspeicher 2322 über die Speicherkreuzschiene 2316 zugegriffen werden, die Speicheranforderungen von dem Verarbeitungsclusterarray 2312 sowie von der E/A-Einheit 2304 empfangen kann. In mindestens einer Ausführungsform kann die Speicherkreuzschiene 2316 über eine Speicherschnittstelle 2318 auf den Parallelprozessorspeicher 2322 zugreifen. In mindestens einer Ausführungsform kann die Speicherschnittstelle 2318 mehrere Partitionseinheiten (z. B. Partitionseinheit 2320A, Partitionseinheit 2320B bis Partitionseinheit 2320N) beinhalten, die jeweils an einen Abschnitt (z. B. Speichereinheit) des Parallelprozessorspeichers 2322 gekoppelt werden können. In mindestens einer Ausführungsform ist eine Anzahl der Partitionseinheiten 2320A-2320N so konfiguriert, dass sie gleich einer Anzahl von Speichereinheiten ist, sodass eine erste Partitionseinheit 2320A eine entsprechende erste Speichereinheit 2324A aufweist, eine zweite Partitionseinheit 2320B eine entsprechende Speichereinheit 2324B aufweist und eine N-te Partitionseinheit 2320N eine entsprechende N-te Speichereinheit 2324N aufweist. In mindestens einer Ausführungsform ist eine Anzahl von Partitionseinheiten 2320A-2320N möglicherweise nicht gleich einer Anzahl von Speichervorrichtungen.
  • In mindestens einer Ausführungsform können die Speichereinheiten 2324A-2324N verschiedene Typen von Speichervorrichtungen beinhalten, darunter dynamischer Direktzugriffsspeicher (DRAM) oder Grafik-Direktzugriffsspeicher, wie etwa synchroner Grafik-Direktzugriffsspeicher (SGRAM), darunter Grafik-Double-Data-Rate-(GDDR-)Speicher. In mindestens einer Ausführungsform können die Speichereinheiten 2324A-2324N auch 3D-Stapelspeicher beinhalten, einschließlich, aber nicht beschränkt auf, Speicher mit hoher Bandbreite (high bandwidth memory - HBM). In mindestens einer Ausführungsform können Rendering-Ziele, wie etwa Bildspeicher oder Texturkarten, über die Speichereinheiten 2324A-2324N hinweg gespeichert werden, was es den Partitionseinheiten 2320A-2320N ermöglicht, Abschnitte jedes Rendering-Ziels parallel zu schreiben, um die verfügbare Bandbreite des Parallelprozessorspeichers 2322 effizient zu nutzen. In mindestens einer Ausführungsform kann eine lokale Instanz des Parallelprozessorspeichers 2322 zugunsten einer einheitlichen Speicherausgestaltung ausgeschlossen werden, die Systemspeicher in Verbindung mit lokalem Cache-Speicher nutzt.
  • In mindestens einer Ausführungsform kann ein beliebiger der Cluster 2314A-2314N des Verarbeitungsclusterarrays 2312 Daten verarbeiten, die in beliebige der Speichereinheiten 2324A-2324N innerhalb des Parallelprozessorspeichers 2322 geschrieben werden. In mindestens einer Ausführungsform kann die Speicherkreuzschiene 2316 so konfiguriert sein, dass sie eine Ausgabe jedes Clusters 2314A-2314N an eine beliebige Partitionseinheit 2320A-2320N oder an einen anderen Cluster 2314A-2314N übermittelt, der zusätzliche Verarbeitungsoperationen an einer Ausgabe ausführen kann. In mindestens einer Ausführungsform kann jeder Cluster 2314A-2314N durch die Speicherkreuzschiene 2316 mit der Speicherschnittstelle 2318 kommunizieren, um aus verschiedenen externen Speichervorrichtungen zu lesen oder in diese zu schreiben. In mindestens einer Ausführungsform weist die Speicherkreuzschiene 2316 eine Verbindung mit der Speicherschnittstelle 2318 auf, um mit der E/A-Einheit 2304 zu kommunizieren, sowie eine Verbindung mit einer lokalen Instanz des Parallelprozessorspeichers 2322, was es den Verarbeitungseinheiten innerhalb der unterschiedlichen Verarbeitungscluster 2314A-2314N ermöglicht, mit Systemspeicher oder anderem Speicher zu kommunizieren, der nicht lokal zu der Parallelverarbeitungseinheit 2302 ist. In mindestens einer Ausführungsform kann die Speicherkreuzschiene 2316 virtuelle Kanäle verwenden, um Verkehrsströme zwischen Clustern 2314A-2314N und Partitionseinheiten 2320A-2320N zu trennen.
  • In mindestens einer Ausführungsform können mehrere Instanzen der Parallelverarbeitungseinheit 2302 auf einer einzelnen Erweiterungskarte bereitgestellt sein oder mehrere Erweiterungskarten zusammengeschaltet sein. In mindestens einer Ausführungsform können unterschiedliche Instanzen der Parallelverarbeitungseinheit 2302 dazu konfiguriert sein, zusammenzuarbeiten, selbst wenn unterschiedliche Instanzen unterschiedliche Anzahlen von Verarbeitungskernen, unterschiedliche Mengen an lokalem Parallelprozessorspeicher und/oder andere Konfigurationsunterschiede aufweisen. Zum Beispiel können in mindestens einer Ausführungsform einige Instanzen der Parallelverarbeitungseinheit 2302 Gleitkommaeinheiten mit höherer Genauigkeit in Bezug auf andere Instanzen beinhalten. In mindestens einer Ausführungsform können Systeme, die eine oder mehrere Instanzen der Parallelverarbeitungseinheit 2302 oder des Parallelprozessors 2300 einbeziehen, in einer Vielfalt von Konfigurationen und Formfaktoren implementiert sein, einschließlich, aber nicht beschränkt auf, Desktop-, Laptop- oder tragbarer persönlicher Computer, Server, Arbeitsstationen, Spielekonsolen und/oder eingebetteter Systeme.
  • 23B ist ein Blockdiagramm einer Partitionseinheit 2320 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist die Partitionseinheit 2320 eine Instanz einer der Partitionseinheiten 2320A-2320N aus 23A. In mindestens einer Ausführungsform beinhaltet die Partitionseinheit 2320 einen L2-Cache 2321, eine Bildspeicherschnittstelle 2325 und eine ROP 2326 (raster operations unit - Rasteroperationeneinheit). Der L2-Zwischenspeicher 2321 ist ein Lese-/Schreib-Zwischenspeicher, der dazu konfiguriert ist, Lade- und Speicheroperationen auszuführen, die von der Speicher-Crossbar 2316 und der ROP 2326 empfangen werden. In mindestens einer Ausführungsform werden Lesefehler und dringende Rückschreibanforderungen durch den L2-Cache 2321 an die Bildspeicherschnittstelle 2325 zur Verarbeitung ausgegeben. In mindestens einer Ausführungsform können Aktualisierungen auch über die Bildspeicherschnittstelle 2325 zur Verarbeitung an einen Bildspeicher gesendet werden. In mindestens einer Ausführungsform bildet die Bildspeicherschnittstelle 2325 eine Schnittstelle mit einer der Speichereinheiten in dem Parallelprozessorspeicher, wie etwa mit den Speichereinheiten 2324A-2324N aus 23 (z. B. innerhalb des Parallelprozessorspeichers 2322).
  • In mindestens einerAusführungsform ist die ROP 2326 eine Verarbeitungseinheit, die Rasteroperationen, wie etwa Schablone, Z-Test, Mischen und so weiter, durchführt. In mindestens einer Ausführungsform gibt die ROP 2326 dann verarbeitete Grafikdaten aus, die im Grafikspeicher gespeichert sind. In mindestens einer Ausführungsform beinhaltet die ROP 2326 Komprimierungslogik, um Tiefen- oder Farbdaten, die in den Speicher geschrieben werden, zu komprimieren und Tiefen- oder Farbdaten, die aus dem Speicher gelesen werden, zu dekomprimieren. In mindestens einer Ausführungsform kann die Komprimierungslogik verlustfreie Komprimierungslogik sein, die einen oder mehrere von mehreren Komprimierungsalgorithmen verwendet. Die von der ROP 2326 durchgeführte Komprimierungslogik kann auf Grundlage von statistischen Eigenschaften der zu komprimierenden Daten variieren. Zum Beispiel wird in mindestens einer Ausführungsform die Delta-Farbkomprimierung an Tiefen- und Farbdaten auf einer Kachelbasis durchgeführt.
  • In mindestens einer Ausführungsform ist die ROP 2326 innerhalb jedes Verarbeitungsclusters (z. B. Cluster 2314A-2314N aus 23A) statt innerhalb der Partitionseinheit 2320 enthalten. In mindestens einer Ausführungsform werden Lese- und Schreibanforderungen für Pixeldaten anstelle von Pixelfragmentdaten über die Speicherkreuzschiene 2316 übertragen. In mindestens einer Ausführungsform können verarbeitete Grafikdaten auf einer Anzeigevorrichtung angezeigt werden, wie etwa einer der einen oder der mehreren Anzeigevorrichtung(en) 2210 aus 22, zur weiteren Verarbeitung durch die Prozessor(en) 2202 geroutet werden oder zur weiteren Verarbeitung durch eine der Verarbeitungsentitäten innerhalb des Parallelprozessors 2300 aus 23A geroutet werden.
  • 23C ist ein Blockdiagramm eines Verarbeitungsclusters 2314 innerhalb einer Parallelverarbeitungseinheit gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist ein Verarbeitungscluster eine Instanz eines der Verarbeitungscluster 2314A-2314N aus 23. In mindestens einer Ausführungsform kann der Verarbeitungscluster 2314 so konfiguriert sein, dass er viele Threads parallel ausführt, wobei sich „Thread“ auf eine Instanz eines konkreten Programms bezieht, die an einem konkreten Satz von Eingabedaten ausgeführt wird. In mindestens einer Ausführungsform werden SIMD(Single-Instruction, Multiple-Data)-Anweisungsausgabetechniken verwendet, um die parallele Ausführung einer großen Anzahl von Threads zu unterstützen, ohne mehrere unabhängige Anweisungseinheiten bereitzustellen. In mindestens einer Ausführungsform werden SIMT(Single-Instruction, Multiple-Thread)-Techniken verwendet, um die parallele Ausführung einer großen Anzahl von im Allgemeinen synchronisierten Threads zu unterstützen, wobei eine gemeinsame Anweisungseinheit verwendet wird, die so konfiguriert ist, dass sie Anweisungen an einen Satz von Verarbeitungs-Engines in jedem der Verarbeitungscluster ausgibt.
  • In mindestens einer Ausführungsform kann der Betrieb des Verarbeitungsclusters 2314 über einen Pipelineverwalter 2332 gesteuert werden, der die Verarbeitungs-Tasks auf die SIMT-Parallelprozessoren verteilt. In mindestens einer Ausführungsform empfängt der Pipelineverwalter 2332 Anweisungen von dem Scheduler 2310 aus 23 und verwaltet die Ausführung dieser Anweisungen über einen Grafik-Multiprozessor 2334 und/oder eine Textureinheit 2336. In mindestens einer Ausführungsform ist der Grafikmultiprozessor 2334 eine beispielhafte Instanz eines SIMT-Parallelprozessors. In mindestens einer Ausführungsform können jedoch verschiedene Typen von SIMT-Parallelprozessoren mit unterschiedlichen Architekturen innerhalb des Verarbeitungsclusters 2314 enthalten sein. In mindestens einer Ausführungsform können eine oder mehrere Instanzen des Grafik-Multiprozessors 2334 innerhalb eines Verarbeitungsclusters 2314 enthalten sein. In mindestens einer Ausführungsform kann der Grafik-Multiprozessor 2334 Daten verarbeiten und eine Datenkreuzschiene 2340 kann verwendet werden, um verarbeitete Daten an eines von mehreren möglichen Zielen, einschließlich anderer Shader-Einheiten, zu verteilen. In mindestens einer Ausführungsform kann der Pipelineverwalter 2332 die Verteilung von verarbeiteten Daten erleichtern, indem er Ziele für zu verteilende verarbeitete Daten über die Datenkreuzschiene 2340 vorgibt.
  • In mindestens einer Ausführungsform kann jeder Grafik-Multiprozessor 2334 innerhalb des Verarbeitungsclusters 2314 einen identischen Satz von funktioneller Ausführungslogik (z. B. arithmetisch-logische Einheiten, Lade-Speicher-Einheiten usw.) beinhalten. In mindestens einer Ausführungsform kann funktionelle Ausführungslogik pipelineartig konfiguriert sein, wobei neue Anweisungen ausgegeben werden können, bevor vorherige Anweisungen abgeschlossen sind. In mindestens einer Ausführungsform unterstützt die funktionelle Ausführungslogik eine Vielfalt von Operationen, darunter Integer- und Fließkommaarithmetik, VergleichsOperationen, boolesche Operationen, Bitverschiebung und Berechnung verschiedener algebraischer Funktionen. In mindestens einer Ausführungsform kann dieselbe Hardware einer funktionellen Einheit ausgenutzt werden, um unterschiedliche Operationen durchzuführen, und eine beliebige Kombination von funktionellen Einheiten vorhanden sein.
  • In mindestens einer Ausführungsform stellen die an den Verarbeitungscluster 2314 übertragenen Anweisungen einen Thread dar. In mindestens einer Ausführungsform ist ein Satz von Threads, der über einen Satz von Parallelverarbeitungs-Engines ausgeführt werden, eine Thread-Gruppe. In mindestens einer Ausführungsform führt die Thread-Gruppe ein Programm an unterschiedlichen Eingabedaten aus. In mindestens einer Ausführungsform kann jeder Thread innerhalb einer Thread-Gruppe einer anderen Verarbeitungs-Engine innerhalb eines Grafik-Multiprozessors 2334 zugeordnet sein. In mindestens einer Ausführungsform kann eine Thread-Gruppe weniger Threads beinhalten als eine Anzahl von Verarbeitungs-Engines innerhalb des Grafik-Multiprozessors 2334. Wenn eine Thread-Gruppe weniger Threads beinhaltet als eine Anzahl von Verarbeitungs-Engines, können in mindestens einer Ausführungsform eine oder mehrere der Verarbeitungs-Engines während der Zyklen, in denen diese Thread-Gruppe verarbeitet wird, inaktiv sein. In mindestens einer Ausführungsform kann eine Thread-Gruppe auch mehr Threads beinhalten als eine Anzahl von Verarbeitungs-Engines innerhalb des Grafik-Multiprozessors 2334. Wenn eine Thread-Gruppe mehr Threads als eine Anzahl von Verarbeitungs-Engines innerhalb des Grafik-Multiprozessors 2334 beinhaltet, kann das Verarbeiten in mindestens einer Ausführungsform über aufeinanderfolgende Taktzyklen durchgeführt werden. In mindestens einer Ausführungsform können mehrere Thread-Gruppen nebenläufig auf einem Grafik-Multiprozessor 2334 ausgeführt werden.
  • In mindestens einer Ausführungsform beinhaltet der Grafik-Multiprozessor 2334 einen internen Cache-Speicher zum Durchführen von Lade- und Speicheroperationen. In mindestens einer Ausführungsform kann der Grafik-Multiprozessor 2334 auf einen internen Cache verzichten und einen Cache-Speicher (z. B. L1-Cache 2348) innerhalb des Verarbeitungsclusters 2314 verwenden. In mindestens einer Ausführungsform hat jeder Grafik-Multiprozessor 2334 auch Zugriff auf L2-Caches innerhalb von Partitionseinheiten (z. B. Partitionseinheiten 2320A-2320N aus 23), die von allen Verarbeitungsclustern 2314 gemeinsam genutzt werden und zum Übermitteln von Daten zwischen Threads verwendet werden können. In mindestens einer Ausführungsform kann der Grafikmultiprozessor 2334 auch auf den chip externen globalen Speicher zugreifen, der einen oder mehrere von dem lokalen Parallelprozessorspeicher und/oder dem Systemspeicher beinhalten kann. In mindestens einer Ausführungsform kann ein beliebiger Speicher, der zu der Parallelverarbeitungseinheit 2302 extern ist, als globaler Speicher verwendet werden. In mindestens einer Ausführungsform beinhaltet der Verarbeitungscluster 2314 mehrere Instanzen des Grafik-Multiprozessors 2334 und er kann gemeinsame Anweisungen und Daten teilen, die in dem L1-Cache 2348 gespeichert sein können.
  • In mindestens einer Ausführungsform kann jeder Verarbeitungscluster 2314 eine MMU 2345 (Speicherverwaltungseinheit) beinhalten, die so konfiguriert ist, dass sie virtuelle Adressen auf physische Adressen abbildet. In mindestens einer Ausführungsform können sich eine oder mehrere Instanzen der MMU 2345 innerhalb der Speicherschnittstelle 2318 aus 23A befinden. In mindestens einer Ausführungsform beinhaltet die MMU 2345 einen Satz von Seitentabelleneinträgen (page table entries - PTEs), der dazu verwendet wird, eine virtuelle Adresse auf eine physische Adresse einer Kachel abzubilden, sowie optional einen Cache-Zeilenindex. In mindestens einer Ausführungsform kann die MMU 2345 Adressenübersetzungspuffer (translation lookaside buffers - TLB) oder Caches beinhalten, die sich innerhalb des Grafik-Multiprozessors 2334 oder L1-Cache oder Verarbeitungsclusters 2314 befinden können. In mindestens einer Ausführungsform wird die physische Adresse verarbeitet, um den Oberflächendatenzugriffsstandort zu verteilen, um eine effiziente Anforderungsverschachtelung zwischen Partitionseinheiten zu ermöglichen. In mindestens einer Ausführungsform kann der Zwischenspeicherzeilenindex verwendet werden, um zu bestimmen, ob eine Anforderung nach einer Zwischenspeicherzeile ein Treffer oder ein Fehler ist.
  • In mindestens einer Ausführungsform kann ein Verarbeitungscluster 2314 derart konfiguriert sein, dass jeder Grafik-Multiprozessor 2334 an eine Textureinheit 2336 zum Durchführen von Texturabbildungsoperationen gekoppelt ist, z. B. zum Bestimmen von Texturabtastpositionen, Lesen von Texturdaten und Filtern von Texturdaten. In mindestens einer Ausführungsform werden die Texturdaten aus einem internen Textur-L1-Cache (nicht gezeigt) oder aus einem L1-Cache innerhalb des Grafik-Multiprozessors 2334 gelesen und je nach Bedarf aus einem L2-Cache, dem lokalen Parallelprozessorspeicher oder dem Systemspeicher abgerufen. In mindestens einer Ausführungsform gibt jeder Grafik-Multiprozessor 2334 verarbeitete Tasks an die Datenkreuzschiene 2340 aus, um einen verarbeiteten Task einem anderen Verarbeitungscluster 2314 zur weiteren Verarbeitung bereitzustellen oder um einen verarbeiteten Task über die Speicherkreuzschiene 2316 in einem L2-Cache, lokalen Parallelprozessorspeicher oder Systemspeicher zu speichern. In mindestens einer Ausführungsform ist eine preROP 2342 (Vor-Rasteroperationeneinheit) so konfiguriert, dass sie Daten von dem Grafik-Multiprozessor 2334 empfängt und Daten an ROP-Einheiten leitet, die sich in den hierin beschriebenen Partitionseinheiten befinden können (z. B. Partitionseinheiten 2320A-2320N aus 23). In mindestens einer Ausführungsform kann die PreROP-2342-Einheit Optimierungen für die Farbmischung durchführen, Pixelfarbdaten organisieren und Adressübersetzungen durchführen.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann die Inferenz- und/oder Trainingslogik 1015 in dem Grafikverarbeitungscluster 2314 für Inferenz- oder Vorhersageoperationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von Trainingsoperationen für neuronale Netze, Funktionen und/oder Architekturen von neuronalen Netzen oder hierin beschriebenen Anwendungsfällen für neuronale Netze berechnet wurden.
  • In mindestens einer Ausführungsform wird 23C verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 23D zeigt einen Grafik-Multiprozessor 2334 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist der Grafik-Multiprozessor 2334 mit dem Pipelineverwalter 2332 des Verarbeitungsclusters 2314 gekoppelt. In mindestens einer Ausführungsform weist der Grafik-Multiprozessor 2334 eine Ausführungspipeline auf, die einen Anweisungs-Cache 2352, eine Anweisungseinheit 2354, eine Adressabbildungseinheit 2356, eine Registerbank 2358, einen oder mehrere Kerne 2362 einer Universal-Grafikverarbeitungseinheit (GPGPU) und eine oder mehrere Lade-/Speichereinheiten 2366 beinhaltet, ohne darauf beschränkt zu sein. Ein oder mehrere GPGPU-Kerne 2362 und Lade-/Speichereinheiten 2366 sind mit dem schnellen Pufferspeicher 2372 und dem gemeinsam genutzten Speicher 2370 über eine Speicher- und Zwischenspeicher-Verbindung 2368 gekoppelt.
  • In mindestens einer Ausführungsform empfängt der Anweisungs-Cache 2352 einen Stream von auszuführenden Anweisungen von dem Pipelineverwalter 2332. In mindestens einer Ausführungsform werden Anweisungen im Anweisungszwischenspeicher 2352 zwischengespeichert und zur Ausführung durch die Anweisungseinheit 2354 gesendet. In mindestens einer Ausführungsform kann die Anweisungseinheit 2354 Anweisungen als Thread-Gruppen (z. B. Warps) zuteilen, wobei jeder Thread der Thread-Gruppe einer anderen Ausführungseinheit innerhalb der GPGPU-Kerne 2362 zugeordnet wird. In mindestens einer Ausführungsform kann eine Anweisung auf einen beliebigen von einem lokalen, gemeinsam genutzten oder globalen Adressraum zugreifen, indem sie eine Adresse innerhalb eines einheitlichen Adressraums spezifiziert. In mindestens einer Ausführungsform kann die Adressabbildungseinheit 2356 verwendet werden, um Adressen in einem einheitlichen Adressraum in eine eindeutige Speicheradresse zu übersetzen, auf die durch die Lade-/Speichereinheiten 2366 zugegriffen werden kann.
  • In mindestens einer Ausführungsform stellt die Registerbank 2358 einen Satz von Registern für funktionelle Einheiten des Grafik-Multiprozessors 2334 bereit. In mindestens einer Ausführungsform stellt die Registerbank 2358 einen temporären Datenspeicher für Operanden bereit, die mit Datenpfaden von funktionellen Einheiten (z. B. GPGPU-Kernen 2362, Lade-/Speichereinheiten 2366) des Grafik-Multiprozessors 2334 verbunden sind. In mindestens einer Ausführungsform ist die Registerbank 2358 derart zwischen den einzelnen funktionellen Einheiten aufgeteilt, dass jeder funktionellen Einheit ein dedizierter Abschnitt der Registerbank 2358 zugewiesen ist. In mindestens einer Ausführungsform ist die Registerbank 2358 auf unterschiedliche Warps aufgeteilt, die durch den Grafik-Multiprozessor 2334 ausgeführt werden.
  • In mindestens einer Ausführungsform können die GPGPU-Kerne 2362 jeweils Gleitkommaeinheiten (FPUs) und/oder arithmetisch-logische Einheiten (ALUs) für Integer beinhalten, die zum Ausführen von Anweisungen des Grafik-Multiprozessors 2334 verwendet werden. GPGPU-Kerne 2362 können eine ähnliche Architektur aufweisen oder sich in der Architektur unterscheiden. In mindestens einer Ausführungsform beinhaltet ein erster Abschnitt der GPGPU-Kerne 2362 eine FPU mit einfacher Genauigkeit und eine Integer-ALU, während ein zweiter Abschnitt der GPGPU-Kerne eine FPU mit doppelter Genauigkeit beinhaltet. In mindestens einer Ausführungsform können FPUs den Standard IEEE 754-2008 für Fließkommaarithmetik implementieren oder Fließkommaarithmetik mit variabler Genauigkeit ermöglichen. In mindestens einer Ausführungsform kann der Grafikmultiprozessor 2334 zusätzlich eine oder mehrere feste Funktions- oder Spezialfunktionseinheiten beinhalten, um konkrete Funktionen, wie etwa Kopierrechteck- oder Pixelmischoperationen, auszuführen. In mindestens einer Ausführungsform können einer oder mehrere der GPGPU-Kerne auch feste oder Spezialfunktionslogik beinhalten.
  • In mindestens einer Ausführungsform beinhalten die GPGPU-Kerne 2362 SIMD-Logik, die dazu in der Lage ist, eine einzelne Anweisung an mehreren Datensätzen durchzuführen. In mindestens einer Ausführungsform können die GPGPU-Kerne 2362 SIMD4-, SIMD8- und SIMD16-Anweisungen physisch ausführen und SIMD1-, SIMD2- und SIMD32-Anweisungen logisch ausführen. In mindestens einer Ausführungsform können SIMD-Anweisungen für GPGPU-Kerne zur Kompilierzeit durch einen Shader-Compiler erzeugt werden oder automatisch erzeugt werden, wenn Programme ausgeführt werden, die für Single-Program-Multiple-Data-(SPMD-) oder SIMT-Architekturen geschrieben und kompiliert wurden. In mindestens einer Ausführungsform können mehrere Threads eines für ein SIMT-Ausführungsmodell konfigurierten Programms über eine einzelne SIMD-Anweisung ausgeführt werden. Zum Beispiel können in mindestens einer Ausführungsform acht SIMT-Threads, die gleiche oder ähnliche Operationen durchführen, parallel über eine einzelne SIMD8-Logikeinheit ausgeführt werden.
  • In mindestens einer Ausführungsform ist die Speicher- und Cache-Zusammenschaltung 2368 ein Zusammenschaltungsnetz, das jede funktionelle Einheit des Grafik-Multiprozessors 2334 mit der Registerbank 2358 und dem gemeinsam genutzten Speicher 2370 verbindet. In mindestens einer Ausführungsform ist die Speicher- und Cache-Zusammenschaltung 2368 eine Kreuzschienen-Zusammenschaltung, die es der Lade-/Speichereinheit 2366 ermöglicht, Lade- und Speicheroperationen zwischen dem gemeinsam genutzten Speicher 2370 und der Registerbank 2358 zu implementieren. In mindestens einer Ausführungsform kann die Registerdatei 2358 mit derselben Frequenz wie die GPGPU-Kerne 2362 arbeiten, wodurch die Datenübertragung zwischen den GPGPU-Kernen 2362 und der Registerdatei 2358 eine sehr geringe Latenzzeit hat. In mindestens einer Ausführungsform kann der gemeinsam genutzte Speicher 2370 verwendet werden, um die Kommunikation zwischen Threads zu ermöglichen, die auf funktionellen Einheiten innerhalb des Grafik-Multiprozessors 2334 ausgeführt werden. In mindestens einer Ausführungsform kann der Cache-Speicher 2372 zum Beispiel als Daten-Cache verwendet werden, um Texturdaten zwischenzuspeichern, die zwischen funktionellen Einheiten und der Textureinheit 2336 kommuniziert werden. In mindestens einer Ausführungsform kann der gemeinsam genutzte Speicher 2370 auch als programmverwalteter Cache verwendet werden. In mindestens einer Ausführungsform können Threads, die auf den GPGPU-Kernen 2362 ausgeführt werden, zusätzlich zu den automatisch zwischengespeicherten Daten, die innerhalb des Cache-Speichers 2372 gespeichert sind, programmatisch Daten innerhalb des gemeinsam genutzten Speichers speichern.
  • In mindestens einer Ausführungsform ist ein Parallelprozessor oder eine GPGPU, wie hierin beschrieben, kommunikativ an Host-/Prozessorkerne gekoppelt, um Grafikoperationen, Operationen des maschinellen Lernens, Musteranalyseoperationen und verschiedene Funktionen einer Universal-GPU (GPGPU) zu beschleunigen. In mindestens einer Ausführungsform kann die GPU kommunikativ über einen Bus oder eine andere Verbindung (z. B. eine Hochgeschwindigkeitsverbindung, wie etwa PCIe oder NVLink) an Hostprozessor/Kerne gekoppelt sein. In mindestens einer Ausführungsform kann die GPU in demselben Gehäuse oder Chip wie die Kerne integriert sein und kommunikativ über einen internen Prozessorbus/eine interne Zusammenschaltung (d. h. intern zum Gehäuse oder Chip) mit den Kernen gekoppelt sein. In mindestens einer Ausführungsform können die Prozessorkerne unabhängig von der Weise, auf welche die GPU verbunden ist, der GPU Arbeit in Form von Sequenzen von Befehlen/Anweisungen zuweisen, die in einem Arbeitsdeskriptor enthalten sind. In mindestens einer Ausführungsform verwendet die GPU dann eine dedizierte Schaltung/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann die Inferenz- und/oder Trainingslogik 1015 in dem Grafik-Multiprozessor 2334 für Inferenz- oder Vorhersageoperationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von Trainingsoperationen für neuronale Netze, Funktionen und/oder Architekturen von neuronalen Netzen oder hierin beschriebenen Anwendungsfällen für neuronale Netze berechnet wurden.
  • In mindestens einer Ausführungsform wird 23D verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 24 veranschaulicht ein Mehr-GPU-Rechensystem 2400 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann das Mehr-GPU-Rechensystem 2400 einen Prozessor 2402 beinhalten, der über einen Host-Schnittstellen-Switch 2404 an mehrere Universal-Grafikverarbeitungseinheiten (GPGPUs) 2406A-D gekoppelt ist. In mindestens einer Ausführungsform ist der Host-Schnittstellen-Switch 2404 eine PCI-Express-Switch-Vorrichtung, die den Prozessor 2402 an einen PCI-Express-Bus koppelt, über den der Prozessor 2402 mit den GPGPUs 2406A-D kommunizieren kann. GPGPUs 2406A-D können über einen Satz von Hochgeschwindigkeits-Punkt-zu-Punkt-GPU-zu-GPU-Links 2416 miteinander verbunden werden. In mindestens einer Ausführungsform sind die GPU-zu-GPU-Verknüpfungen 2416 mit jeder der GPGPUs 2406A-D über eine dedizierte GPU-Verknüpfung verbunden. In mindestens einer Ausführungsform ermöglichen die P2P-GPU-Verknüpfungen 2416 direkte Kommunikation zwischen jeder der GPGPUs 2406A-D, ohne dass Kommunikation über den Host-Schnittstellenbus 2404 erforderlich ist, mit dem der Prozessor 2402 verbunden ist. In mindestens einer Ausführungsform, bei der GPU-zu-GPU-Verkehr zu den P2P-GPU-Verknüpfungen 2416 geleitet wird, bleibt der Host-Schnittstellenbus 2404 für den Systemspeicherzugriff oder zum Kommunizieren mit anderen Instanzen des Mehr-GPU-Rechensystems 2400 verfügbar, zum Beispiel über eine oder mehrere Netzvorrichtungen. Während in mindestens einer Ausführungsform die GPGPUs 2406A-D mit dem Prozessor 2402 über den Host-Schnittstellen-Switch 2404 verbunden sind, beinhaltet der Prozessor 2402 in mindestens einer Ausführungsform eine direkte Unterstützung für P2P-GPU-Verknüpfungen 2416 und kann direkt mit den GPGPUs 2406A-D verbunden sein.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann eine Inferenz- und/oder Trainingslogik 1015 in dem Multi-GPU-Computersystem 2400 zum Inferenzieren oder Vorhersagen von Operationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von neuronalen Netztrainingsoperationen, Funktionen und/oder Architekturen von neuronalen Netzen oder in dieser Schrift beschriebenen Anwendungsfällen von neuronalen Netzen berechnet wurden.
  • In mindestens einer Ausführungsform wird 24 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 25 ist ein Blockdiagramm eines Grafikprozessors 2500 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 2500 eine Ringzusammenschaltung 2502, ein Pipeline-Frontend 2504, eine Medien-Engine 2537 und Grafikkerne 2580A-2580N. In mindestens einer Ausführungsform koppelt die Ringzusammenschaltung 2502 den Grafikprozessor 2500 an andere Verarbeitungseinheiten, einschließlich anderer Grafikprozessoren oder eines oder mehrerer Universalprozessorkerne. In mindestens einer Ausführungsform ist der Grafikprozessor 2500 einer von vielen Prozessoren, die in ein Mehrkern-Verarbeitungssystem integriert sind.
  • In mindestens einer Ausführungsform empfängt der Grafikprozessor 2500 Batches von Befehlen über die Ringzusammenschaltung 2502. In mindestens einer Ausführungsform werden eingehende Befehle durch einen Befehls-Streamer 2503 in dem Pipeline-Frontend 2504 interpretiert. In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 2500 skalierbare Ausführungslogik zum Durchführen von 3D-Geometrieverarbeitung und Medienverarbeitung über die Grafikkern(e) 2580A-2580N. In mindestens einer Ausführungsform führt der Befehls-Streamer 2503 der Geometriepipeline 2536 Befehle für 3D-Geometrieverarbeitungsbefehle zu. In mindestens einer Ausführungsform führt der Befehls-Streamer 2503 für mindestens einige Medienverarbeitungsbefehle Befehle einem Video-Frontend 2534 zu, das mit der Medien-Engine 2537 gekoppelt ist. In mindestens einer Ausführungsform beinhaltet die Medienengine 2537 eine Videoqualitätsengine (VQE) 2530 für die Video- und Bildnachbearbeitung und eine Mehrformat-Kodierungs-/Dekodierungs-(MFX) 2533 engine, um eine hardwarebeschleunigte Mediendatenkodierung und -dekodierung bereitzustellen. In mindestens einer Ausführungsform erzeugen die Geometriepipeline 2536 und die Medien-Engine 2537 jeweils Ausführungs-Threads für Thread-Ausführungsressourcen, die durch mindestens einen Grafikkern 2580 bereitgestellt sind.
  • In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 2500 skalierbare Thread-Ausführungsressourcen mit modularen Kernen 2580A-2580N (manchmal als Kern-Slices bezeichnet), die jeweils mehrere Teilkerne 2550A-550N, 2560A-2560N (manchmal als Kern-Teil-Slices bezeichnet) aufweisen. In mindestens einer Ausführungsform kann der Grafikprozessor 2500 eine beliebige Anzahl von Grafikkernen 2580A bis 2580N aufweisen. In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 2500 einen Grafikkern 2580A, der mindestens einen ersten Teilkern 2550A und einen zweiten Teilkern 2560A aufweist. In mindestens einer Ausführungsform ist der Grafikprozessor 2500 ein Prozessor niedriger Leistung mit einem einzelnen Teilkern (z. B. 2550A). In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 2500 mehrere Grafikkerne 2580A-2580N, von denen jeder einen Satz von ersten Teilkernen 2550A-2550N und einen Satz von zweiten Teilkernen 2560A-2560N beinhaltet. In mindestens einer Ausführungsform beinhaltet jeder Teilkern in den ersten Teilkernen 2550A-2550N mindestens einen ersten Satz von Ausführungseinheiten 2552A-2552N und Medien-/Texturabtastern 2554A-2554N. In mindestens einer Ausführungsform beinhaltet jeder Teilkern in den zweiten Teilkernen 2560A-2560N mindestens einen zweiten Satz von Ausführungseinheiten 2562A-2562N und Abtastern 2564A-2564N. In mindestens einer Ausführungsform nutzen die Teilkerne 2550A-2550N, 2560A-2560N jeweils einen Satz von gemeinsam genutzten Ressourcen 2570A-2570N gemeinsam. In mindestens einer Ausführungsform gehören ein gemeinsam genutzter Cache-Speicher und eine Pixelvorgangslogik zu den gemeinsam genutzten Ressourcen.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform kann die Inferenz- und/oder Trainingslogik 1015 in dem Grafikprozessor 2500 für Inferenz- oder Vorhersageoperationen mindestens zum Teil auf Grundlage von Gewichtungsparametern verwendet werden, die unter Verwendung von Trainingsoperationen für neuronale Netze, Funktionen und/oder Architekturen von neuronalen Netzen oder hierin beschriebenen Anwendungsfällen für neuronale Netze berechnet wurden.
  • In mindestens einer Ausführungsform wird 25 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 26 ist ein Blockdiagramm, das die Mikroarchitektur für einen Prozessor 2600, der Logikschaltungen zum Durchführen von Anweisungen beinhalten kann, gemäß mindestens einer Ausführungsform veranschaulicht. In mindestens einer Ausführungsform kann der Prozessor 2600 Anweisungen ausführen, die x86-Anweisungen, ARM-Anweisungen, spezialisierte Anweisungen für anwendungsspezifische integrierte Schaltkreise (ASICs) usw. beinhalten In mindestens einer Ausführungsform kann der Prozessor 2610 Register beinhalten, um gepackte Daten zu speichern, wie etwa 64 Bit breite MMX™-Register in Mikroprozessoren, die mit MMX-Technologie der Intel Corporation aus Santa Clara, Kalifornien, aktiviert sind. In mindestens einer Ausführungsform können MMX-Register, die sowohl in Integer- als auch in Gleitkommaform verfügbar sind, mit Elementen mit gepackten Daten arbeiten, die mit Single-Instruction-Multiple-Data-(„SIMD“-) und Streaming-SIMD-Erweiterungs-(„SSE“-)Anweisungen einhergehen. In mindestens einer Ausführungsform können 128 Bit breite XMM-Register, die sich auf die SSE2-, SSE3-, SSE4-, AVX- oder darüber hinausgehende Technologie beziehen (allgemein als „SSEx“ bezeichnet), derartige Operanden mit gepackten Daten aufbewahren. In mindestens einer Ausführungsform kann der Prozessor 2610 Anweisungen zum Beschleunigen von Algorithmen für maschinelles Lernen oder Deep Learning, Training oder Inferenzieren durchführen.
  • In mindestens einer Ausführungsform beinhaltet der Prozessor 2600 ein reihenfolgengetreues Front-End („Front-End“) 2601, um auszuführende Anweisungen abzurufen und Anweisungen vorzubereiten, die später in der Prozessorpipeline verwendet werden sollen. In mindestens einer Ausführungsform kann das Frontend 2601 mehrere Einheiten beinhalten. In mindestens einer Ausführungsform ruft ein Anweisungsvorababrufer 2626 Anweisungen aus dem Speicher ab und speist die Anweisungen in einen Anweisungsdecodierer 2628 ein, der die Anweisungen wiederum decodiert oder interpretiert. Zum Beispiel dekodiert der Anweisungsdekodierer 2628 in mindestens einer Ausführungsform eine empfangene Anweisung in eine oder mehrere Operationen, die als „Mikroanweisungen“ oder „Mikrooperationen“ (auch als „Mikroops“ oder „uops“ bezeichnet) bezeichnet werden, welche diese Maschine ausführen kann. In mindestens einer Ausführungsform zerlegt der Anweisungsdekodierer 2628 die Anweisung in einen Operationscode und entsprechende Daten- und Steuerfelder, die möglicherweise von der Mikroarchitektur verwendet werden, um Operationen gemäß mindestens einer Ausführungsform durchzuführen. In mindestens einer Ausführungsform kann ein Ablaufverfolgungscache 2630 decodierte µops in programmgeordnete Sequenzen oder Abläufe in einer µορ-Warteschlange 2634 zur Ausführung zusammenstellen. In mindestens einer Ausführungsform stellt ein Mikrocode-ROM 2632 uops bereit, die benötigt werden, um die Operation abzuschließen, wenn der Ablaufverfolgungszwischenspeicher 2630 auf eine komplexe Anweisung trifft.
  • In mindestens einer Ausführungsform können einige Anweisungen in eine einzelne Mikro-Op umgewandelt werden, während andere mehrere Mikro-Ops benötigen, um eine vollständige Operation abzuschließen. In mindestens einer Ausführungsform kann der Anweisungsdekodierer 2628 auf den Mikrocode-ROM 2632 zugreifen, um eine Anweisung auszuführen, wenn mehr als vier Mikroops benötigt werden, um eine Anweisung abzuschließen. In mindestens einer Ausführungsform kann eine Anweisung in eine kleine Anzahl von Mikro-Ops zur Verarbeitung in dem Anweisungsdecodierer 2628 decodiert werden. In mindestens einer Ausführungsform kann eine Anweisung im Mikrocode-ROM 2632 gespeichert werden, falls eine Anzahl von Mikroops benötigt wird, um den Betrieb durchzuführen. In mindestens einer Ausführungsform bezieht sich der Ablaufverfolgungscache 2630 auf ein programmierbares logisches Array (programmable logic array - „PLA“) für den Einsprungpunkt, um einen korrekten Mikroanweisungszeiger zum Lesen von Mikrocodesequenzen zu bestimmen, um eine oder mehrere Anweisungen aus dem Mikrocode-ROM 2632 gemäß mindestens einer Ausführungsform abzuschließen. In mindestens einer Ausführungsform kann das Front-End 2601 der Maschine, nachdem der Mikrocode-ROM 2632 die Sequenzierung von Mikroops für eine Anweisung beendet hat, das Abrufen von Mikroops aus dem Ablaufverfolgungszwischenspeicher 2630 wieder aufnehmen.
  • In mindestens einer Ausführungsform kann die Engine zur Ausführung in einer anderen Reihenfolge („Out-of-Order-Engine“) 2603 Anweisungen zur Ausführung vorbereiten. In mindestens einer Ausführungsform umfasst die Out-of-Order-Ausführungs-Engine 2603 ohne Einschränkung einen Zuweiser/Registerumbenenner 2640, eine Speicherµop-Warteschlange 2642, eine Integer-/Gleitkomma-µop-Warteschlange 2644, einen Speicher-Scheduler 2646, einen schnellen Scheduler 2602, einen langsamen/allgemeinen Gleitkomma-Scheduler („langsamer/allgemeiner FP-Scheduler“) 2604 und einen einfachen Gleitkomma-Scheduler („einfacher FP-Scheduler“) 2606. In mindestens einer Ausführungsform werden der schnelle Scheduler 2602, der langsame/allgemeine Gleitkomma-Scheduler 2604 und der einfache Gleitkomma-Scheduler 2606 hier auch gemeinsam als „µop-Scheduler 2602, 2604, 2606“ bezeichnet. Der Zuweiser/Registerumbenenner 2640 weist den Maschinenpuffern und -ressourcen zu, die jeder µtop benötigt, um ausgeführt zu werden. In mindestens einer Ausführungsform benennt der Zuweiser/Registerumbenenner 2640 logische Register in Einträge in einer Registerbank um. In mindestens einer Ausführungsform weist der Zuweiser/Registerumbenenner 2640 auch einen Eintrag für jede µοp in einer von zwei µop-Warteschlangen zu, und zwar in der Speicher-µop-Warteschlange 2642 für Speicheroperationen und der Integer-/Gleitkomma-µop-Warteschlange 2644 für Nicht-Speicheroperationen, vor dem Speicher-Scheduler 2646 und den µop-Schedulern 2602, 2604, 2606. In mindestens einer Ausführungsform bestimmen die µop-Scheduler 2602, 2604, 2606 auf Grundlage der Bereitschaft ihrer abhängigen Eingaberegister-Operandenquellen und der Verfügbarkeit der Ausführungsressourcen, die µops benötigen, um ihre Operation abzuschließen, wann eine µοp zur Ausführung bereit ist. In mindestens einer Ausführungsform kann der schnelle Planer 2602 von mindestens einer Ausführungsform auf jede Hälfte des Haupttaktzyklus planen, während der langsame/allgemeine Gleitkomma-Planer 2604 und der einfache Gleitkomma-Planer 2606 einmal pro Hauptprozessortaktzyklus planen können. In mindestens einer Ausführungsform vermitteln die µop-Scheduler 2602, 2604, 2606 Zuteilungsports, um µops zur Ausführung einzuplanen.
  • In mindestens einer Ausführungsform beinhaltet der Ausführungsblock b11 ohne Einschränkung eine Integerregisterbank/ein Umgehungsnetz 2608, eine Gleitkommaregisterbank/ein Umgehungsnetz („FP-Registerbank/Umgehungsnetz“) 2610, Adresserzeugungseinheiten (address generation units - „AGUs“) 2612 und 2614, schnelle arithmetisch-logische Einheiten (ALUs) („schnelle ALUs“) 2616 und 2618, eine langsame arithmetisch-logische Einheit („langsame ALU“) 2620, eine Gleitkomma-ALU („FP“) 2622 und eine Gleitkomma-Bewegungseinheit („FP-Bewegung“) 2624. In mindestens einer Ausführungsform werden die Integerregisterbank/das Umgehungsnetz 2608 und die Gleitkommaregisterbank/das Umgehungsnetz 2610 hierin auch als „Registerbänke 2608, 2610“ bezeichnet. In mindestens einer Ausführungsform werden die AGUSs 2612 und 2614, die schnellen ALUs 2616 und 2618, die langsame ALU 2620, die Gleitkomma-ALU 2622 und die Gleitkomma-Bewegungseinheit 2624 hierin auch als „Ausführungseinheiten 2612, 2614, 2616, 2618, 2620, 2622 und 2624“ bezeichnet. In mindestens einer Ausführungsform kann der Ausführungsblock b11 ohne Einschränkung eine beliebige Anzahl (die Null beinhaltet) und eine beliebige Art von Registerdatei, Umgehungsnetzwerk, Adresserzeugungseinheit und Ausführungseinheit in beliebiger Kombination beinhalten.
  • In mindestens einer Ausführungsform können die Registerdateien 2608, 2610 zwischen den uop-Planern 2602, 2604, 2606 und den Ausführungseinheiten 2612, 2614, 2616, 2618, 2620, 2622 und 2624 angeordnet sein. In mindestens einer Ausführungsform führt die Integerregisterbank/das Umgehungsnetz 2608 Integeroperationen durch. In mindestens einer Ausführungsform führt die Gleitkommaregisterbank/das Umgehungsnetz 2610 Gleitkommaoperationen durch. In mindestens einer Ausführungsform kann jede der Registerdateien 2608, 2610 ohne Einschränkung ein Umgehungsnetzwerk beinhalten, das gerade abgeschlossene Ergebnisse, die noch nicht in die Registerdatei geschrieben wurden, an neue abhängige uops umleiten oder weiterleiten kann. In mindestens einer Ausführungsform können die Registerdateien 2608, 2610 Daten miteinander austauschen. In mindestens einer Ausführungsform kann das Ganzzahlregisterdatei/Umgehungsnetzwerk 2608 ohne Einschränkung zwei getrennte Registerdateien beinhalten, eine Registerdatei für niederwertige zweiunddreißig Datenbits und eine zweite Registerdatei für höherwertige zweiunddreißig Datenbits. In mindestens einer Ausführungsform kann die Gleitkommaregisterbank/das Umgehungsnetz 2610 ohne Einschränkung 128 Bit breite Einträge beinhalten, da Gleitkommaanweisungen typischerweise Operanden mit einer Breite von 64 bis 128 Bit aufweisen.
  • In mindestens einer Ausführungsform können die Ausführungseinheiten 2612, 2614, 2616, 2618, 2620, 2622, 2624 Anweisungen ausführen. In mindestens einer Ausführungsform speichern die Registerdateien 2608, 2610 Ganzzahl- und Gleitkomma-Datenoperandenwerte, die Mikroanweisungen ausführen müssen. In mindestens einer Ausführungsform kann der Prozessor 2600 ohne Einschränkung eine beliebige Anzahl und Kombination von Ausführungseinheiten 2612, 2614, 2616, 2618, 2620, 2622, 2624 beinhalten. In mindestens einer Ausführungsform können die Gleitkomma-ALU 2622 und die Gleitkomma-Bewegungseinheit 2624 Gleitkomma-, MMX-, SIMD-, AVX- und SSE- oder andere Operationen ausführen, einschließlich spezialisierter Anweisungen des maschinellen Lernens. In mindestens einer Ausführungsform kann die Gleitkomma-ALU 2622 ohne Einschränkung einen 64 Bit mal 64 Bit großen Gleitkommadividierer zum Ausführen von Divisions-, Quadratwurzel- und Rest-Mikro-Ops beinhalten. In mindestens einer Ausführungsform können Anweisungen, an denen ein Gleitkommawert beteiligt ist, mit Gleitkomma-Hardware gehandhabt werden. In mindestens einer Ausführungsform können ALU-Operationen an die schnellen ALUs 2616, 2618 übergeben werden. In mindestens einer Ausführungsform können die schnellen ALUs 2616, 2618 schnelle Operationen mit einer effektiven Latenz von einem halben Taktzyklus ausführen. In mindestens einer Ausführungsform gehen die meisten komplexen Integeroperationen an die langsame ALU 2620, da die langsame ALU 2620 ohne Einschränkung Integerausführungs-Hardware für Operationen vom Typ mit langer Latenz beinhalten kann, wie etwa einen Multiplikator, Verschiebungen, Flag-Logik und Verzweigungsverarbeitung. In mindestens einer Ausführungsform können die Lade-/Speicheroperationen eines Speichers durch die AGUs 2612, 2614 ausgeführt werden. In mindestens einer Ausführungsform können die schnelle ALU 2616, die schnelle ALU 2618 und die langsame ALU 2620 Integeroperationen an 64-Bit-Datenoperanden durchführen. In mindestens eine Ausführungsform können die schnelle ALU 2616, die schnelle ALU 2618 und die langsame ALU 2620 umgesetzt sein, um eine Reihe von Datenbitgrößen zu unterstützen, die sechzehn, zweiunddreißig, 128, 256, usw. beinhalten. In mindestens einer Ausführungsform können die Gleitkomma-ALU 2622 und die Gleitkomma-Bewegungseinheit 2624 umgesetzt sein, um einen Bereich von Operanden mit Bits verschiedener Breiten zu unterstützen. In mindestens einer Ausführungsform können die Gleitkomma-ALU 2622 und die Gleitkomma-Bewegungseinheit 2624 an 128 Bit breiten gepackten Datenoperanden in Verbindung mit SIMD- und Multimedia-Anweisungen arbeiten.
  • In mindestens einer Ausführungsform verteilen die uop-Planer 2602, 2604, 2606 abhängige Operationen, bevor die Ausführung der übergeordneten Ladung beendet ist. In mindestens einer Ausführungsform kann der Prozessor 2600, da µops in dem Prozessor 2600 spekulativ geplant und ausgeführt werden können, auch Logik zum Handhaben von Speicherfehlern beinhalten. In mindestens einer Ausführungsform kann es, wenn ein Datenladen im Datenzwischenspeicher fehlschlägt, abhängige Operationen im Flug in der Pipeline geben, die den Planer mit vorübergehend falschen Daten verlassen haben. In mindestens einer Ausführungsform verfolgt ein Wiedergabemechanismus Anweisungen, die falsche Daten verwenden, und führt sie erneut aus. In mindestens einer Ausführungsform müssen abhängige Operationen möglicherweise wiederholt werden und es unabhängige wird möglicherweise ermöglicht, dass sie abgeschlossen werden. In mindestens einer Ausführungsform können die Planer und der Wiedergabemechanismus mindestens einer Ausführungsform eines Prozessors auch so ausgelegt sein, dass sie Anweisungssequenzen für Zeichenkettenvergleichsoperationen abfangen.
  • In mindestens einer Ausführungsform kann sich der Ausdruck „Register“ auf Speicherorte des integrierten Prozessors beziehen, die als Teil von Anweisungen verwendet werden können, um Operanden zu identifizieren. In mindestens einer Ausführungsform können Register derartige sein, die von außerhalb des Prozessors (aus der Perspektive eines Programmierers) verwendet werden können. In mindestens einer Ausführungsform sind Register möglicherweise nicht auf eine bestimmte Schaltungsart beschränkt. Vielmehr kann ein Register in mindestens einer Ausführungsform Daten speichern, Daten bereitstellen und die hierin beschriebenen Funktionen durchführen. In mindestens einer Ausführungsform können die hierin beschriebenen Register durch Schaltungen innerhalb eines Prozessors unter Verwendung einer beliebigen Anzahl unterschiedlicher Techniken implementiert werden, wie etwa dedizierter physischer Register, dynamisch zugewiesener physischer Register unter Verwendung von Registerumbenennung, Kombinationen aus dedizierten und dynamisch zugewiesenen physischen Registern usw. In mindestens einer Ausführungsform speichern Integerregister 32-Bit-Integerdaten. Eine Registerdatei von mindestens einer Ausführungsform enthält außerdem acht Multimedia-SIMD-Register für gepackte Daten.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform können Abschnitte der oder die gesamte Inferenz- und/oder Trainingslogik 1015 in den EXE-Block 2611 und andere gezeigte oder nicht gezeigte Speicher oder Register einbezogen sein. Zum Beispiel können in mindestens einer Ausführungsform die hierin beschriebenen Trainings- und/oder Inferenztechniken eine oder mehrere der in dem EXE-Block 2611 veranschaulichten ALUs verwenden. Darüber hinaus können Gewichtungsparameter im chipinternem oder chip externem Speicher und/oder in Registern (gezeigt oder nicht gezeigt) gespeichert werden, die ALUs des EXE-Blocks 2611 konfigurieren, um eine(n) oder mehrere hierin beschriebene Algorithmen des maschinellen Lernens, neuronale Netzarchitekturen, Anwendungsfälle oder Trainingstechniken durchzuführen.
  • In mindestens einer Ausführungsform wird 26 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 27 veranschaulicht einen Deep-Learning-Anwendungsprozessor 2700 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform verwendet der Deep-Learning-Anwendungsprozessor 2700 Anweisungen, die bei Ausführung durch den Deep-Learning-Anwendungsprozessor 2700 den Deep-Learning-Anwendungsprozessor 2700 dazu veranlassen, einige oder alle der in dieser gesamten Offenbarung beschriebenen Prozesse und Techniken durchzuführen. In mindestens einer Ausführungsform ist der Deep-Learning-Anwendungsprozessor 2700 eine anwendungsspezifische integrierte Schaltung (ASIC). In mindestens einer Ausführungsform führt der Anwendungsprozessor 2700 Matrixmultiplikationsoperationen entweder „fest verdrahtet“ in Hardware als Ergebnis des Durchführens einer oder mehrerer Anweisungen oder beides durch. In mindestens einer Ausführungsform beinhaltet der Deep-Learning-Anwendungsprozessor 2700 ohne Einschränkung Verarbeitungscluster 2710(1)-2710(12), chipübergreifende Verknüpfungen (Inter-Chip Links - „ICLs“) 2720(1)-2720(12), chipübergreifende Steuerungen (Inter-Chip Controllers - „ICCs“) 2730(1)-2730(2), Speicher mit hoher Bandbreite der zweiten Generation (high-bandwidth memory second generation - „HBM2“) 2740(1)-2740(4), Speichersteuerungen (memory controllers - „Mem Ctrlrs“) 2742(1)-2742(4), eine Bitübertragungsschicht mit Speicher mit hoher Bandbreite (high bandwidth memory physical layer - „HBM PHY“) 2744(1)-2744(4), eine zentrale Verwaltungssteuerungs-Verarbeitungseinheit („Verwaltungssteuerungs-CPU“) 2750, eine serielle Peripherieschnittstelle, eine zwischenintegrierte Schaltung und einen Universal-Eingabe/Ausgabe-Block („SPI, I2C, GPIO“) 2760, eine Interconnect-Express-Steuerung für Peripheriekomponenten und einen Direktspeicherzugriffsblock („PCIe-Steuerung und DMA“) 2770 und einen sechzehnspurigen Interconnect-Express-Port für Peripheriekomponenten („PCI-Express x 16“) 2780.
  • In mindestens einer Ausführungsform können die Verarbeitungscluster 2710 Deep-Learning-Operationen durchführen, einschließlich Inferenz- oder Vorhersageoperationen auf Grundlage von Gewichtungsparametern, die mit einer oder mehreren Trainingstechniken, einschließlich der hierin beschriebenen, berechnet wurden. In mindestens einer Ausführungsform kann jeder Verarbeitungscluster 2710 ohne Einschränkung eine beliebige Anzahl und einen beliebigen Typ von Prozessoren beinhalten. In mindestens einer Ausführungsform kann der Deep-Learning-Anwendungsprozessor 2700 eine beliebige Anzahl und einen beliebigen Typ von Verarbeitungsclustern 2700 beinhalten. In mindestens einer Ausführungsform sind die chipübergreifenden Verknüpfungen 2720 bidirektional. In mindestens einer Ausführungsform ermöglichen die chipübergreifenden Verknüpfungen 2720 und die chipübergreifenden Steuerungen 2730 mehreren Deep-Learning-Anwendungsprozessoren 2700 den Austausch von Informationen, einschließlich Aktivierungsinformationen, die aus dem Durchführen eines oder mehrerer Algorithmen des maschineller Lernens resultieren, die in einem oder mehreren neuronalen Netzen verkörpert sind. In mindestens einer Ausführungsform kann der Deep-Learning-Anwendungsprozessor 2700 eine beliebige Anzahl (einschließlich null) und einen beliebigen Typ von ICLs 2720 und ICCs 2730 beinhalten.
  • In mindestens einer Ausführungsform stellen die HBM2s 2740 insgesamt 32 Gigabyte (GB) Speicher bereit. HBM2 2740(i) ist sowohl der Speichersteuerung 2742(i) als auch HBM PHY 2744(i) zugeordnet. In mindestens einer Ausführungsform kann eine beliebige Anzahl von HBM2s 2740 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 Speichersteuerungen 2742 und HBM PHYs 2744 assoziiert sein. In mindestens einer Ausführungsform können SPI, I2C, GPIO 2760, PCIe-Steuerung und DMA 2770 und/oder PCIe 2780 durch eine beliebige Anzahl und einen beliebigen Typ von Blöcken ersetzt werden, die eine beliebige Anzahl und einen beliebigen Typ von Kommunikationsstandards auf eine beliebige technisch machbare Weise ermöglichen.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform wird der Deep-Learning-Anwendungsprozessor verwendet, um ein Modell des maschinellen Lernens, wie etwa ein neuronales Netz, zu trainieren, um dem Deep-Learning-Anwendungsprozessor 2700 bereitgestellte Informationen vorherzusagen oder zu inferenzieren. In mindestens einer Ausführungsform wird der Deep-Learning-Anwendungsprozessor 2700 verwendet, um Informationen auf Grundlage eines trainierten Modells des maschinellen Lernens (z. B. eines neuronalen Netzes) zu inferenzieren oder vorherzusagen, das durch einen anderen Prozessor oder ein anderes System oder durch den Deep-Learning-Anwendungsprozessor 2700 trainiert wurde. In mindestens einer Ausführungsform kann der Prozessor 2700 verwendet werden, um einen oder mehrere der hierin beschriebenen Anwendungsfälle für neuronale Netze durchzuführen.
  • In mindestens einer Ausführungsform wird 27 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 28 ist ein Blockdiagramm eines neuromorphen Prozessors 2800 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann der neuromorphe Prozessor 2800 eine oder mehrere Eingaben von Quellen außerhalb des neuromorphen Prozessors 2800 empfangen. In mindestens einer Ausführungsform können diese Eingaben an ein oder mehrere Neuronen 2802 innerhalb des neuromorphen Prozessors 2800 übertragen werden. In mindestens einer Ausführungsform können die Neuronen 2802 und Komponenten davon unter Verwendung von Schaltungen oder Logik implementiert sein, einschließlich einer oder mehrerer arithmetisch-logischer Einheiten (ALUs). In mindestens einer Ausführungsform kann der neuromorphe Prozessor 2800 ohne Einschränkung Tausende oder Millionen von Instanzen von Neuronen 2802 beinhalten, aber es kann eine beliebige geeignete Anzahl von Neuronen 2802 verwendet werden. In mindestens einer Ausführungsform kann jede Instanz des Neurons 2802 einen Neuroneneingang 2804 und einen Neuronenausgang 2806 beinhalten. In mindestens einer Ausführungsform können die Neuronen 2802 Ausgaben erzeugen, die an Eingänge anderer Instanzen von Neuronen 2802 übertragen werden können. Zum Beispiel können in mindestens einer Ausführungsform die Neuroneneingänge 2804 und die Neuronenausgänge 2806 über Synapsen 2808 zusammengeschaltet sein.
  • In mindestens einer Ausführungsform können die Neuronen 2802 und die Synapsen 2808 derart zusammengeschaltet sein, dass der neuromorphe Prozessor 2800 arbeitet, um die durch den neuromorphen Prozessor 2800 empfangenen Informationen zu verarbeiten oder zu analysieren. In mindestens einer Ausführungsform können die Neuronen 2802 einen Ausgabeimpuls (oder „Fire“ oder „Spike“) übertragen, wenn die über den Neuroneneingang 2804 empfangenen Eingaben einen Schwellenwert überschreiten. In mindestens einer Ausführungsform können die Neuronen 2802 die an den Neuroneneingängen 2804 empfangenen Signale summieren oder integrieren. Zum Beispiel können in mindestens einer Ausführungsform die Neuronen 2802 als leckende Integrate-and-Fire-Neuronen implementiert sein, wobei, falls eine Summe (als „Membranpotential“ bezeichnet) einen Schwellenwert überschreitet, das Neuron 2802 eine Ausgabe (oder „Feuern“) unter Verwendung einer Übertragungsfunktion, wie etwa einer Sigmoid- oder Schwellenwertfunktion, erzeugen kann. In mindestens einer Ausführungsform kann ein leckendes Integrate-and-Fire-Neuron Signale, die an den Neuroneneingängen 2804 empfangen werden, zu einem Membranpotential summieren und auch einen Abklingfaktor (oder ein Leck) anwenden, um ein Membranpotential zu reduzieren. In mindestens einer Ausführungsform kann ein leckendes Integrate-and-Fire-Neuron feuern, falls mehrere Eingabesignale an den Neuroneneingängen 2804 schnell genug empfangen werden, um einen Schwellenwert zu überschreiten (d. h., bevor ein Membranpotential zu weit nach unten abklingt, um zu feuern). In mindestens einer Ausführungsform können die Neuronen 2802 unter Verwendung von Schaltungen oder Logik implementiert sein, die Eingaben empfangen, Eingaben in ein Membranpotential integrieren und ein Membranpotential abklingen lassen. In mindestens einer Ausführungsform können Eingaben gemittelt werden oder kann eine beliebige andere geeignete Übertragungsfunktion verwendet werden. Darüber hinaus können die Neuronen 2802 in mindestens einer Ausführungsform ohne Einschränkung Komparatorschaltungen oder -logik beinhalten, die einen Ausgabe-Spike an dem Neuronenausgang 2806 erzeugen, wenn das Ergebnis des Anwendens einer Übertragungsfunktion auf den Neuroneneingang 2804 einen Schwellenwert überschreitet. In mindestens einer Ausführungsform kann das Neuron 2802, sobald es feuert, zuvor empfangene Eingabeinformationen ignorieren, indem es zum Beispiel ein Membranpotential auf 0 oder einen anderen geeigneten Standardwert zurücksetzt. In mindestens einer Ausführungsform kann das Neuron 2802, sobald das Membranpotential auf 0 zurückgesetzt wurde, nach einer geeigneten Zeitspanne (oder Refraktärzeit) den normalen Betrieb wiederaufnehmen.
  • In mindestens einer Ausführungsform können die Neuronen 2802 durch die Synapsen 2808 zusammengeschaltet sein. In mindestens einer Ausführungsform können die Synapsen 2808 arbeiten, um Signale von einem Ausgang eines ersten Neurons 2802 an einen Eingang eines zweiten Neurons 2802 zu übertragen. In mindestens einer Ausführungsform können die Neuronen 2802 Informationen über mehr als eine Instanz der Synapse 2808 übertragen. In mindestens einer Ausführungsform können eine oder mehrere Instanzen des Neuronenausgangs 2806 über eine Instanz der Synapse 2808 mit einer Instanz des Neuroneneingangs 2804 in dem gleichen Neuron 2802 verbunden sein. In mindestens einer Ausführungsform kann eine Instanz des Neurons 2802, die eine über eine Instanz der Synapse 2808 zu übertragende Ausgabe erzeugt, als „präsynaptisches Neuron“ in Bezug auf diese Instanz der Synapse 2808 bezeichnet werden. In mindestens einer Ausführungsform kann eine Instanz des Neurons 2802, die eine über eine Instanz der Synapse 2808 übertragene Eingabe empfängt, als „postsynaptisches Neuron“ in Bezug auf diese Instanz der Synapse 2808 bezeichnet werden. Da eine Instanz des Neurons 2802 Eingaben von einer oder mehreren Instanzen der Synapse 2808 empfangen kann und auch Ausgaben über eine oder mehrere Instanzen der Synapse 2808 übertragen kann, kann in mindestens einer Ausführungsform eine einzelne Instanz des Neurons 2802 daher sowohl ein „präsynaptisches Neuron“ als auch ein „postsynaptisches Neuron“ in Bezug auf verschiedene Instanzen der Synapsen 2808 sein.
  • In mindestens einer Ausführungsform können die Neuronen 2802 in eine oder mehrere Schichten organisiert sein. Jede Instanz des Neurons 2802 kann einen Neuronenausgang 2806 aufweisen, der durch eine oder mehrere Synapsen 2808 zu einem oder mehreren Neuroneneingängen 2804 auffächern kann. In mindestens einer Ausführungsform können die Neuronenausgänge 2806 der Neuronen 2802 in einer ersten Schicht 2810 mit den Neuroneneingängen 2804 der Neuronen 2802 in einer zweiten Schicht 2812 verbunden sein. In mindestens einer Ausführungsform kann die Schicht 2810 als „vorwärtsgekoppelte Schicht“ bezeichnet werden. In mindestens einer Ausführungsform kann sich jede Instanz des Neurons 2802 in einer Instanz der ersten Schicht 2810 zu jeder Instanz des Neurons 2802 in der zweiten Schicht 2812 auffächern. In mindestens einer Ausführungsform kann die erste Schicht 2810 als „vollständig verbundene vorwärtsgekoppelte Schicht“ bezeichnet werden. In mindestens einer Ausführungsform kann sich jede Instanz des Neurons 2802 in einer Instanz der zweiten Schicht 2812 zu weniger als allen Instanzen des Neurons 2802 in einer dritten Schicht 2814 auffächern. In mindestens einer Ausführungsform kann die zweite Schicht 2812 als „spärlich verbundene vorwärtsgekoppelte Schicht“ bezeichnet werden. In mindestens einer Ausführungsform können sich Neuronen 2802 in der zweiten Schicht 2812 zu Neuronen 2802 in mehreren anderen Schichten auffächern, was zu Neuronen 2802 in (derselben) zweiten Schicht 2812 beinhaltet. In mindestens einer Ausführungsform kann die zweite Schicht 2812 als „rekurrente Schicht“ bezeichnet werden. In mindestens einer Ausführungsform kann der neuromorphe Prozessor 2800 ohne Einschränkung eine beliebige geeignete Kombination von rekurrenten Schichten und vorwärtsgekoppelten Schichten beinhalten, einschließlich ohne Einschränkung sowohl spärlich verbundener vorwärtsgekoppelter Schichten als auch vollständig verbundener vorwärtsgekoppelter Schichten.
  • In mindestens einer Ausführungsform kann der neuromorphe Prozessor 2800 ohne Einschränkung eine rekonfigurierbare Zusammenschaltungsarchitektur oder dedizierte fest verdrahtete Zusammenschaltungen beinhalten, um die Synapse 2808 mit den Neuronen 2802 zu verbinden. In mindestens einer Ausführungsform kann der neuromorphe Prozessor 2800 ohne Einschränkung Schaltung oder Logik beinhalten, die es ermöglicht, Synapsen je nach Bedarf auf Grundlage der Topologie des neuronalen Netzes und des Neuronen-Fan-In/-Out unterschiedlichen Neuronen 2802 zuzuweisen. Zum Beispiel können in mindestens einer Ausführungsform die Synapsen 2808 mit den Neuronen 2802 unter Verwendung einer Zusammenschaltungsstruktur, wie etwa eines Netzes auf einem Chip, oder mit dedizierten Verbindungen verbunden sein. In mindestens einer Ausführungsform können die Synapsenzusammenschaltungen und Komponenten davon unter Verwendung von Schaltungen oder Logik implementiert sein.
  • In mindestens einer Ausführungsform wird 28 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 29 ist ein Blockdiagramm eines Verarbeitungssystems gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform beinhaltet das System 2900 einen oder mehrere Prozessoren 2902 und einen oder mehrere Grafikprozessoren 2908 und kann ein Einzelprozessor-Desktop-System, ein Mehrprozessor-Workstation-System oder ein Server-System sein, dass eine große Anzahl von Prozessoren 2902 oder Prozessorkernen 2907 aufweist. In mindestens einer Ausführungsform ist das System 2900 eine Verarbeitungsplattform, die in eine integrierte Schaltung als System auf einem Chip (SoC) zur Verwendung in mobilen, tragbaren oder eingebetteten Vorrichtungen integriert ist.
  • In mindestens einer Ausführungsform kann das System 2900 eine serverbasierte Spieleplattform, eine Spielekonsole, einschließlich einer Spiele- und Medienkonsole, eine mobile Spielekonsole, eine tragbare Spielekonsole oder eine Online-Spielekonsole beinhalten oder in diese integriert sein. In mindestens einer Ausführungsform ist das System 2900 ein Mobiltelefon, ein Smartphone, eine Tablet-Rechenvorrichtung oder eine mobile Internetvorrichtung. In mindestens einer Ausführungsform kann das Verarbeitungssystem 2900 auch eine tragbare Vorrichtung, wie etwa eine tragbare Smartwatch-Vorrichtung, eine intelligente Brillenvorrichtung, eine Augmented-Reality-Vorrichtung oder eine Virtual-Reality-Vorrichtung beinhalten, mit dieser gekoppelt oder darin integriert sein. In mindestens einer Ausführungsform ist das Verarbeitungssystem 2900 eine Fernseh- oder Set-Top-Box-Vorrichtung, die einen oder mehrere Prozessoren 2902 und eine grafische Schnittstelle aufweist, die durch einen oder mehrere Grafikprozessoren 2908 erzeugt wird.
  • In mindestens einer Ausführungsform beinhalten ein oder mehrere Prozessoren 2902 jeweils einen oder mehrere Prozessorkerne 2907 zum Verarbeiten von Anweisungen, die bei ihrer Ausführung Operationen für System- und Benutzer-Software durchführen. In mindestens einer Ausführungsform ist jeder von einem oder mehreren Prozessorkernen 2907 dazu konfiguriert, einen konkreten Anweisungssatz 2909 zu verarbeiten. In mindestens einer Ausführungsform kann der Anweisungssatz 2909 das Berechnen mit komplexem Anweisungssatz (Complex Instruction Set Computing - CISC), das Berechnen mit verringertem Anweisungssatz (Reduced Instruction Set Computing - RISC) oder das Berechnen über ein sehr langes Anweisungswort (Very Long Instruction Word - VLIW) erleichtern. In mindestens einer Ausführungsform können die Prozessorkerne 2907 jeweils einen anderen Anweisungssatz 2909 verarbeiten, der Anweisungen beinhalten kann, um die Emulation anderer Anweisungssätze zu erleichtern. In mindestens einer Ausführungsform kann der Prozessorkern 2907 auch andere Verarbeitungsvorrichtungen beinhalten, wie etwa einen digitalen Signalprozessor (DSP).
  • In mindestens einer Ausführungsform beinhaltet der Prozessor 2902 einen schnellen Pufferspeicher 2904. In mindestens einer Ausführungsform kann der Prozessor 2902 einen einzelnen internen Cache oder mehrere Levels von internem Cache aufweisen. In mindestens einer Ausführungsform wird der Cache-Speicher von verschiedenen Komponenten des Prozessors 2902 gemeinsam genutzt. In mindestens einer Ausführungsform verwendet der Prozessor 2902 auch einen externen Cache (z. B. einen Level-3-(L3-)Cache oder Ladung-Level-Cache (LLC)) (nicht gezeigt), der unter Verwendung bekannter Cache-Kohärenztechniken von den Prozessorkernen 2907 gemeinsam genutzt werden kann. In mindestens einer Ausführungsform ist die Registerdatei 2906 zusätzlich im Prozessor 2902 beinhaltet, der unterschiedliche Arten von Registern zum Speichern verschiedener Arten von Daten (z. B. Ganzzahlregister, Gleitkommaregister, Statusregister und ein Anweisungsverweisregister) beinhalten kann. In mindestens einer Ausführungsform kann die Registerdatei 2906 Allzweckregister oder andere Register beinhalten.
  • In mindestens einer Ausführungsform sind ein oder mehrere Prozessor(en) 2902 mit einem oder mehreren Schnittstellenbus(sen) 2910 gekoppelt, um Kommunikationssignale, wie etwa Adress-, Daten- oder Steuersignale, zwischen dem Prozessor 2902 und anderen Komponenten in dem System 2900 zu übertragen. In mindestens einer Ausführungsform kann der Schnittstellenbus 2910 ein Prozessorbus sein, wie etwa eine Version eines Direct-Media-Interface-(DMI-)Busses. In mindestens einer Ausführungsform ist die Schnittstelle 2910 nicht auf einen DMI-Bus beschränkt und kann einen oder mehrere Peripheriegerätekomponentenverbindungsbusse (z. B. PCI, PCI Express), Speicherbusse oder andere Arten von Schnittstellenbussen beinhalten. In mindestens einer Ausführungsform beinhalten die Prozessor(en) 2902 eine integrierte Speichersteuerung 2916 und einen Plattformsteuerungs-Hub 2930. In mindestens einer Ausführungsform ermöglicht die Speichersteuerung 2916 die Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 2900, während der Plattformsteuerungs-Hub (platform controller hub - PCH) 2930 Verbindungen mit E/A-Vorrichtungen über einen lokalen E/A-Bus bereitstellt.
  • In mindestens einer Ausführungsform kann die Speichervorrichtung 2920 ein dynamischer Direktzugriffsspeicher (DRAM), ein statischer Direktzugriffsspeicher (SRAM), eine Flash-Speichervorrichtung, eine Phasenänderungsspeichervorrichtung oder eine andere Speichervorrichtung sein, die eine geeignete Leistung aufweist, um als Prozessspeicher zu dienen. In mindestens einer Ausführungsform kann die Speichervorrichtung 2920 als Systemspeicher für das System 2900 arbeiten, um Daten 2922 und Anweisungen 2921 zur Verwendung zu speichern, wenn ein oder mehrere Prozessoren 2902 eine Anwendung oder einen Prozess ausführen. In mindestens einer Ausführungsform ist die Speichersteuerung 2916 zudem an einen optionalen externen Grafikprozessor 2912 gekoppelt, der mit einem oder mehreren Grafikprozessoren 2908 in den Prozessoren 2902 kommunizieren kann, um Grafik- und Medienoperationen durchzuführen. In mindestens einer Ausführungsform kann eine Anzeigevorrichtung 2911 mit den Prozessor(en) 2902 verbunden sein. In mindestens einer Ausführungsform kann die Anzeigevorrichtung 2911 eine oder mehrere von einer internen Anzeigevorrichtung, wie in einer mobilen elektronischen Vorrichtung oder einer Laptopvorrichtung, oder einer externen Anzeigevorrichtung beinhalten, die über eine Anzeigeschnittstelle (z. B. DisplayPort usw.) angeschlossen ist. In mindestens einer Ausführungsform kann die Anzeigevorrichtung 2911 eine am Kopf befestigte Anzeige (head mounted display - HMD) beinhalten, wie etwa eine stereoskopische Anzeigevorrichtung zur Verwendung bei Virtual-Reality-(VR-)Anwendungen oder Augmented-Reality-(AR-)Anwendungen.
  • In mindestens einer Ausführungsform ermöglicht der Plattformsteuerungs-Hub 2930, dass Peripheriegeräte mit der Speichervorrichtung 2920 und dem Prozessor 2902 über einen Hochgeschwindigkeits-E/A-Bus verbunden werden. In mindestens einer Ausführungsform beinhalten die E/A-Peripheriegeräte eine Audiosteuerung 2946, eine Netzsteuerung 2934, eine Firmware-Schnittstelle 2928, einen drahtlosen Sendeempfänger 2926, Berührungssensoren 2925 und eine Datenspeichervorrichtung 2924 (z. B. Festplattenlaufwerk, Flash-Speicher usw.). In mindestens einer Ausführungsform kann die Datenspeichervorrichtung 2924 über eine Speicherschnittstelle (z. B. SATA) oder über einen Peripheriebus, wie etwa einen Peripheral-Component-Interconnect-Bus (z. B. PCI, PCI Express), verbunden sein. In mindestens einer Ausführungsform können die Berührungssensoren 2925 Touchscreen-Sensoren, Drucksensoren oder Fingerabdrucksensoren beinhalten. In mindestens einer Ausführungsform kann der drahtlose Sendeempfänger 2926 ein Wi-Fi-Sendeempfänger, ein Bluetooth-Sendeempfänger oder ein Sendeempfänger für ein mobiles Netz, wie etwa ein 3G-, 4G- oder Long-Term-Evolution-(LTE-)Sendeempfänger sein. In mindestens einer Ausführungsform ermöglicht die Firmware-Schnittstelle 2928 die Kommunikation mit der System-Firmware und kann zum Beispiel eine Unified Extensible Firmware Interface (UEFI) sein. In mindestens einer Ausführungsform kann die Netzwerksteuerung 2934 eine Netzwerkverbindung zu einem drahtgebundenen Netzwerk ermöglichen. In mindestens einer Ausführungsform ist eine Hochleistungsnetzwerksteuerung (nicht gezeigt) mit dem Schnittstellenbus 2910 gekoppelt. In mindestens einer Ausführungsform ist die Audiosteuerung 2946 eine Mehrkanal-High-Definition-Audiosteuerung. In mindestens einer Ausführungsform beinhaltet das System 2900 eine optionale Alt-E/A-Steuerung 2940 zum Koppeln von Alt-Vorrichtungen (z. B. Personal System 2 (PS/2)) an das System. In mindestens einer Ausführungsform kann der Plattformsteuerungs-Hub 2930 auch mit einer oder mehreren Universal-Serial-Bus-(USB-)Steuerungen 2942 verbunden sein, die mit Eingabevorrichtungen, wie etwa Kombinationen aus Tastatur und Maus 2943, einer Kamera 2944 oder anderen USB-Eingabevorrichtungen, verbunden sind.
  • In mindestens einer Ausführungsform kann eine Instanz der Speichersteuerung 2916 und des Plattformsteuerungs-Hubs 2930 in einen diskreten externen Grafikprozessor, wie etwa den externen Grafikprozessor 2912, integriert sein. In mindestens einer Ausführungsform können der Plattformsteuerungs-Hub 2930 und/oder die Speichersteuerung 2916 extern zu einem oder mehreren Prozessor(en) 2902 sein. Zum Beispiel kann das System 2900 in mindestens einer Ausführungsform eine externe Speichersteuerung 2916 und einen Plattformsteuerungs-Hub 2930 beinhalten, der als Speichersteuerungs-Hub und Peripheriesteuerungs-Hub innerhalb eines Systemchipsatzes konfiguriert sein kann, der mit den Prozessor(en) 2902 in Kommunikation steht.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform können Abschnitte der oder die gesamte Inferenz- und/oder Trainingslogik 1015 in den Grafikprozessor 2900 einbezogen sein. Zum Beispiel können in mindestens einer Ausführungsform die hierin beschriebenen Trainings- und/oder Inferenztechniken eine oder mehrere der in der 3D-Pipeline 2912 verkörperten ALUs verwenden. Darüber hinaus können in mindestens einer Ausführungsform die hierin beschriebenen Inferenz- und/oder Trainingsoperationen unter Verwendung von anderer Logik als der in 10A oder 10B veranschaulichten Logik durchgeführt werden. In mindestens einer Ausführungsform können Gewichtungsparameter in chipinternem oder chip externem Speicher und/oder in Registern (gezeigt oder nicht gezeigt) gespeichert werden, die ALUs des Grafikprozessors 2900 konfigurieren, um eine(n) oder mehrere hierin beschriebene Algorithmen des maschinellen Lernens, neuronale Netzarchitekturen, Anwendungsfälle oder Trainingstechniken durchzuführen.
  • In mindestens einer Ausführungsform wird 29 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 30 ist ein Blockdiagramm eines Prozessors 3000, der einen oder mehrere Prozessorkerne 3002A-3002N, eine integrierte Speichersteuerung 3014 und einen integrierten Grafikprozessor 3008 aufweist, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann der Prozessor 3000 zusätzliche Kerne bis einschließlich des zusätzlichen Kerns 3002N beinhalten, die durch Kästen mit gestrichelten Linien dargestellt sind. In mindestens einer Ausführungsform beinhaltet jeder der Prozessorkerne 3002A-3002N eine oder mehrere interne Cache-Einheiten 3004A-3004N. In mindestens einer Ausführungsform weist jeder Prozessorkern auch Zugriff auf eine oder mehrere gemeinsam genutzte Cache-Einheiten 3006 auf.
  • In mindestens einer Ausführungsform stellen die internen Cache-Einheiten 3004A-3004N und die gemeinsam genutzten Cache-Einheiten 3006 eine Cache-Speicherhierarchie innerhalb des Prozessors 3000 dar. In mindestens einer Ausführungsform können die Cache-Speichereinheiten 3004A-3004N mindestens ein Level von Anweisungs- und Daten-Cache innerhalb jedes Prozessorkerns und ein oder mehrere Levels von gemeinsam genutztem Cache mittleren Levels, wie etwa ein Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cache-Levels, beinhalten, wobei ein höchstes Cache-Level vor dem externen Speicher als LLC klassifiziert ist. In mindestens einer Ausführungsform hält die Cache-Kohärenzlogik die Kohärenz zwischen verschiedenen Cache-Einheiten 3006 und 3004A-3004N aufrecht.
  • In mindestens einer Ausführungsform kann der Prozessor 3000 auch einen Satz von einer oder mehreren Bussteuerungseinheiten 3016 und einen Systemagentenkern 3010 beinhalten. In mindestens einer Ausführungsform verwalten eine oder mehrere Bussteuerungseinheiten 3016 einen Satz von Peripheriegerätebussen, wie etwa einen oder mehrere PCI- oder PCI-Express-Busse. In mindestens einer Ausführungsform stellt der Systemagentenkern 3010 eine Verwaltungsfunktionalität für verschiedene Prozessorkomponenten bereit. In mindestens einer Ausführungsform beinhaltet der Systemagentenkern 3010 eine oder mehrere integrierte Speichersteuerungen 3014, um den Zugriff auf verschiedene externe Speichervorrichtungen (nicht gezeigt) zu verwalten.
  • In mindestens einer Ausführungsform beinhalten einer oder mehrere der Prozessorkerne 3002A-3002N Unterstützung für simultanes Multi-Threading. In mindestens einer Ausführungsform beinhaltet der Systemagentenkern 3010 Komponenten zum Koordinieren und Betreiben der Kerne 3002A-3002N während der Multi-Thread-Verarbeitung. In mindestens einer Ausführungsform kann der Systemagentenkern 3010 zusätzlich eine Leistungssteuereinheit (power control unit - PCU) beinhalten, die Logik und Komponenten zum Regulieren eines oder mehrerer Leistungszustände der Prozessorkerne 3002A-3002N und des Grafikprozessors 3008 beinhaltet.
  • In mindestens einer Ausführungsform beinhaltet der Prozessor 3000 zusätzlich den Grafikprozessor 3008 zum Ausführen von Grafikverarbeitungsoperationen. In mindestens einer Ausführungsform ist der Grafikprozessor 3008 mit gemeinsam genutzten Cache-Einheiten 3006 und dem Systemagentenkern 3010 gekoppelt, der eine oder mehrere integrierte Speichersteuerungen 3014 beinhaltet. In mindestens einer Ausführungsform beinhaltet der Systemagentenkern 3010 zudem eine Anzeigesteuerung 3011, um die Grafikprozessorausgabe zu einer oder mehreren gekoppelten Anzeigen zu treiben. In mindestens einer Ausführungsform kann die Anzeigesteuerung 3011 auch ein separates Modul sein, das über mindestens eine Zusammenschaltung mit dem Grafikprozessor 3008 gekoppelt ist, oder sie kann in den Grafikprozessor 3008 integriert sein.
  • In mindestens einer Ausführungsform wird eine ringbasierte Verbindungseinheit 3012 verwendet, um interne Komponenten des Prozessors 3000 zu koppeln. In mindestens einer Ausführungsform kann eine alternative Zusammenschaltungseinheit verwendet werden, wie z. B. eine Punkt-zu-Punkt-Zusammenschaltung, eine geschaltete Zusammenschaltung oder andere Techniken. In mindestens einer Ausführungsform ist der Grafikprozessor 3008 über eine E/A-Verknüpfung 3013 mit der Ringzusammenschaltung 3012 gekoppelt.
  • In mindestens einer Ausführungsform stellt die E/A-Verknüpfung 3013 mindestens eine von mehreren Sorten von E/A-Zusammenschaltungen dar, einschließlich einer gehäuseinternen E/A-Zusammenschaltung, die Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Speichermodul 3018 mit hoher Rechenleistung, wie etwa einem eDRAM-Modul, erleichtert. In mindestens einer Ausführungsform verwenden jeder der Prozessorkerne 3002A-3002N und der Grafikprozessor 3008 eingebettete Speichermodule 3018 als gemeinsam genutzten Zwischenspeicher der letzten Ebene.
  • In mindestens einer Ausführungsform sind die Prozessorkerne 3002A-3002N homogene Kerne, die eine gemeinsame Anweisungssatzarchitektur ausführen. In mindestens einer Ausführungsform sind die Prozessorkerne 3002A-3002N im Hinblick auf die Anweisungssatzarchitektur (instruction set architecture - ISA) heterogen, wobei einer oder mehrere der Prozessorkerne 3002A-3002N einen gemeinsamen Anweisungssatz ausführen, während ein oder mehrere andere Kerne der Prozessorkerne 3002A-30-02N eine Teilmenge eines gemeinsamen Anweisungssatzes oder einen anderen Anweisungssatz ausführen. In mindestens einer Ausführungsform sind die Prozessorkerne 3002A-3002N bezüglich der Mikroarchitektur heterogen, wobei ein oder mehrere Kerne, die einen relativ betrachtet höheren Leistungsverbrauch aufweisen, mit einem oder mehreren Kernen, die einen niedrigeren Leistungsverbrauch aufweisen, gekoppelt sind. In mindestens einer Ausführungsform kann der Prozessor 3000 auf einem oder mehreren Chips oder als SoC-integrierte Schaltung implementiert sein.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform können Abschnitte der oder die gesamte Inferenz- und/oder Trainingslogik 1015 in den Grafikprozessor 3008 einbezogen sein. Zum Beispiel können in mindestens einer Ausführungsform die hierin beschriebenen Trainings- und/oder Inferenztechniken eine oder mehrere der in der 3D-Pipeline 2912 verkörperten ALUs, Grafikkern(e) 3015A, gemeinsam genutzte Logik 3016, Grafikkern(e) 3015B oder andere Logik in 30 verwenden. Darüber hinaus können in mindestens einer Ausführungsform die hierin beschriebenen Inferenz- und/oder Trainingsoperationen unter Verwendung von anderer Logik als der in 10A oder 10B veranschaulichten Logik durchgeführt werden. In mindestens einer Ausführungsform können Gewichtungsparameter in chipinternem oder chip externem Speicher und/oder in Registern (gezeigt oder nicht gezeigt) gespeichert werden, die ALUs des Grafikprozessors 3008 konfigurieren, um eine(n) oder mehrere hierin beschriebene Algorithmen des maschinellen Lernens, neuronale Netzarchitekturen, Anwendungsfälle oder Trainingstechniken durchzuführen.
  • In mindestens einer Ausführungsform wird 30 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 31 ist ein Blockdiagramm eines Grafikprozessors 3100, bei dem es sich um eine diskrete Grafikverarbeitungseinheit oder um einen mit einer Vielzahl von Verarbeitungskernen integrierten Grafikprozessor handeln kann. In mindestens einer Ausführungsform kommuniziert der Grafikprozessor 3100 über eine auf Speicher abgebildete E/A-Schnittstelle mit Registern auf dem Grafikprozessor 3100 und mit in Speicher abgelegten Befehlen. In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 3100 eine Speicherschnittstelle 3114 zum Zugreifen auf Speicher. In mindestens einer Ausführungsform ist die Speicherschnittstelle 3114 eine Schnittstelle zu lokalem Speicher, einem oder mehreren internen Caches, einem oder mehreren gemeinsam genutzten externen Caches und/oder zu Systemspeicher.
  • In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 3100 zudem eine Anzeigesteuerung 3102, um Anzeigeausgabedaten zu einer Anzeigevorrichtung 3120 zu treiben. In mindestens einer Ausführungsform beinhaltet die Anzeigesteuerung 3102 Hardware für eine oder mehrere Überlagerungsebenen für die Anzeigevorrichtung 3120 und die Komposition mehrerer Schichten von Video- oder Benutzerschnittstellenelementen. In mindestens einer Ausführungsform kann die Anzeigevorrichtung 3120 eine interne oder externe Anzeigevorrichtung sein. In mindestens einer Ausführungsform ist die Anzeigevorrichtung 3120 eine am Kopf befestigte Anzeigevorrichtung, wie etwa eine Virtual-Reality-(VR-)Anzeigevorrichtung oder eine Augmented-Reality-(AR-)Anzeigevorrichtung. In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 3100 eine Videocodec-Engine 3106 zum Codieren, Decodieren oder Transcodieren von Medien in, aus oder zwischen einem oder mehreren Mediencodierformaten, einschließlich, aber nicht beschränkt auf, Moving-Picture-Experts-Group-(MPEG-)Formate wie etwa MPEG-2, Advanced-Video-Coding-(AVC-)Formate wie etwa H.264/MPEG-4 AVC sowie Society of Motion Picture & Television Engineers (SMPTE) 421M/VC-1 und Joint-Photographic-Experts-Group-(JPEG- )Formate wie etwa JPEG und Motion JPEG (MJPEG).
  • In mindestens einer Ausführungsform beinhaltet der Grafikprozessor 3100 eine Block-Image-Transfer-(BLIT-)Engine 3104, um zweidimensionale (2D) Rastereroperationen durchzuführen, einschließlich zum Beispiel Bit-Boundary Block Transfers. In mindestens einer Ausführungsform werden jedoch 2D-Grafikoperationen unter Verwendung einer oder mehreren Komponenten einer Grafikverarbeitungs-Engine (graphics processing engine - GPE) 3110 durchgeführt. In mindestens einer Ausführungsform ist die GPE 3110 eine Rechen-Engine zum Durchführen von Grafikoperationen, einschließlich dreidimensionaler (3D) Grafikoperationen und Medienoperationen.
  • In mindestens einer Ausführungsform beinhaltet GPE 3110 eine 3D-Pipeline 3112 zum Durchführen von 3D-Operationen, wie z. B. das Rendern von dreidimensionalen Bildern und Szenen unter Verwendung von Verarbeitungsfunktionen, die auf 3D-Primitivformen (z. B. Rechteck, Dreieck usw.) wirken. Die 3D-Pipeline 3112 beinhaltet programmierbare und feste Funktionselemente, die verschiedene Aufgaben durchführen und/oder Ausführungs-Threads an ein 3D/Media-Subsystem 3115 weiterleiten. Während die 3D-Pipeline 3112 zum Durchführen von Medienoperationen verwendet werden kann, beinhaltet die GPE 3110 in mindestens einer Ausführungsform auch eine Medienpipeline 3116, die zum Durchführen von Medienoperationen, wie etwa Videonachverarbeitung und Bildverbesserung, verwendet wird.
  • In mindestens einer Ausführungsform beinhaltet die Medienpipeline 3116 Festfunktions- oder programmierbare Logikeinheiten, um eine oder mehrere spezialisierte Medienoperationen durchzuführen, wie etwa Beschleunigung von Videodecodierung, Videoentschachtelung und Beschleunigung von Videocodierung anstelle oder im Auftrag der Videocodec-Engine 3106. In mindestens einer Ausführungsform beinhaltet die Medienpipeline 3116 zusätzlich eine Thread-Erzeugungseinheit, um Threads zum Ausführen auf dem 3D-/Medienteilsystem 3115 zu erzeugen. In mindestens einer Ausführungsform führen erzeugte Threads Berechnungen für Medienoperationen auf einer oder mehreren Grafikausführungseinheiten aus, die in dem 3D-/Medienteilsystem 3115 enthalten sind.
  • In mindestens einer Ausführungsform beinhaltet das 3D-/Medienteilsystem 3115 Logik zum Ausführen von Threads, die durch die 3D-Pipeline 3112 und die Medienpipeline 3116 erzeugt werden. In mindestens einer Ausführungsform senden die 3D-Pipeline 3112 und die Medienpipeline 3116 Thread-Ausführungsanforderungen an das 3D-/Medienteilsystem 3115, das Thread-Zuteilungslogik zum Vermitteln und Zuteilen verschiedener Anforderungen an verfügbare Thread-Ausführungsressourcen beinhaltet. In mindestens einer Ausführungsform beinhalten die Ausführungsressourcen ein Array von Grafikausführungseinheiten zum Verarbeiten von 3D- und Medien-Threads. In mindestens einer Ausführungsform beinhaltet das 3D-/Medienteilsystem 3115 einen oder mehrere interne Caches für Thread-Anweisungen und Daten. In mindestens einer Ausführungsform beinhaltet das Teilsystem 3115 auch gemeinsam genutzten Speicher, einschließlich Registern und adressierbaren Speichers, um Daten zwischen Threads gemeinsam zu nutzen und Ausgabedaten zu speichern.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform können Abschnitte der oder die gesamte Inferenz- und/oder Trainingslogik 1015 in den Grafikprozessor 3100 einbezogen sein. Zum Beispiel können in mindestens einer Ausführungsform die hierin beschriebenen Trainings- und/oder Inferenztechniken eine oder mehrere der in der 3D-Pipeline 3112 verkörperten ALUs verwenden. Darüber hinaus können in mindestens einer Ausführungsform die hierin beschriebenen Inferenz- und/oder Trainingsoperationen unter Verwendung von anderer Logik als der in 10A oder 10B veranschaulichten Logik durchgeführt werden. In mindestens einer Ausführungsform können Gewichtungsparameter in chipinternem oder chipexternem Speicher und/oder in Registern (gezeigt oder nicht gezeigt) gespeichert werden, die ALUs des Grafikprozessors 3100 konfigurieren, um eine(n) oder mehrere hierin beschriebene Algorithmen des maschinellen Lernens, neuronale Netzarchitekturen, Anwendungsfälle oder Trainingstechniken durchzuführen.
  • In mindestens einer Ausführungsform wird 31 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 32 ist ein Blockdiagramm einer Grafikverarbeitungs-Engine 3210 eines Grafikprozessors gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist die Grafikverarbeitungs-Engine (GPE) 3210 eine Version der in 31 gezeigten GPE 3110. In mindestens einer Ausführungsform ist eine Medienpipeline 3116 optional und möglicherweise nicht explizit innerhalb der GPE 3210 enthalten. In mindestens einer Ausführungsform ist ein separater Medien- und/oder Bildprozessor an die GPE 3210 gekoppelt.
  • In mindestens einer Ausführungsform ist die GPE 3210 an einen Befehls-Streamer 3203 gekoppelt oder sie beinhaltet einen solchen, der einer 3D-Pipeline 3112 und/oder der Medienpipeline 3116 einen Befehlsstrom bereitstellt. In mindestens einer Ausführungsform ist der Befehls-Streamer 3203 an Speicher gekoppelt, bei dem es sich um Systemspeicher oder um einen oder mehrere von internem Cache-Speicher und gemeinsam genutztem Cache-Speicher handeln kann. In mindestens einer Ausführungsform empfängt der Befehls-Streamer 3203 Befehle aus Speicher und sendet Befehle an die 3D-Pipeline 3112 und/oder die Medienpipeline 3116. In mindestens einer Ausführungsform handelt es sich bei den Befehlen um Anweisungen, Primitive oder Mikrooperationen, die aus einem Ringpuffer abgerufen werden, der Befehle für die 3D-Pipeline 3112 und die Medienpipeline 3116 speichert. In mindestens einer Ausführungsform kann ein Ringpuffer zusätzlich Batch-Befehlspuffer beinhalten, die Batches von mehreren Befehlen speichern. In mindestens einer Ausführungsform können die Befehle für die 3D-Pipeline 3112 auch Bezugnahmen auf Daten beinhalten, die in Speicher gespeichert sind, wie etwa, aber nicht beschränkt auf, Vertex- und Geometriedaten für die 3D-Pipeline 3112 und/oder Bilddaten und Speicherobjekte für die Medienpipeline 3116. In mindestens einer Ausführungsform verarbeiten die 3D-Pipeline 3112 und die Medienpipeline 3116 Befehle und Daten, indem sie Operationen durchführen oder einen oder mehrere Ausführungs-Threads einem Grafikkernarray 3214 zuteilen. In mindestens einer Ausführungsform beinhaltet das Grafikkernarray 3214 einen oder mehrere Blöcke von Grafikkernen (z. B. Grafikkern(e) 3215A, Grafikkern(e) 3215B), wobei jeder Block einen oder mehrere Grafikkerne beinhaltet. In mindestens einer Ausführungsform beinhaltet jeder Grafikkern einen Satz von Grafikausführungsressourcen, der eine Universal- und eine grafikspezifische Ausführungslogik zum Durchführen von Grafik- und Rechenoperationen sowie Logik zur Texturverarbeitung mit fester Funktion und/oder zur Beschleunigung des maschinellen Lernens und der künstlichen Intelligenz, einschließlich der Inferenz- und/oder Trainingslogik 1015 in 10A und 10B, beinhaltet.
  • In mindestens einer Ausführungsform beinhaltet die 3D-Pipeline 3112 Festfunktionslogik und programmierbare Logik, um ein oder mehrere Shader-Programme, wie etwa Vertex-Shader, Geometrie-Shader, Pixel-Shader, Fragment-Shader, Rechen-Shader oder andere Shader-Programme, zu verarbeiten, indem Anweisungen verarbeitet und Ausführungs-Threads dem Grafikkernarray 3214 zugeteilt werden. In mindestens einer Ausführungsform stellt das Grafikkernarray 3214 einen einheitlichen Block von Ausführungsressourcen zur Verwendung beim Verarbeiten von Shader-Programmen bereit. In mindestens einer Ausführungsform beinhaltet eine Mehrzweck-Ausführungslogik (z. B. Ausführungseinheiten) innerhalb der Grafikkern(e) 3215A-3215B des Grafikkernarrays 3214 Unterstützung für verschiedene 3D-API-Shader-Sprachen und sie kann mehrere simultane Ausführungs-Threads ausführen, die mit mehreren Shadern assoziiert sind.
  • In mindestens einer Ausführungsform beinhaltet das Grafikkernarray 3214 auch Ausführungslogik zum Durchführen von Medienfunktionen, wie etwa Video- und/oder Bildverarbeitung. In mindestens einer Ausführungsform beinhalten die Ausführungseinheiten zusätzlich Universallogik, die so programmiert werden kann, dass sie zusätzlich zu Grafikverarbeitungsoperationen parallele Universalrechenoperationen durchführt.
  • In mindestens einer Ausführungsform können Ausgabedaten, die durch Threads erzeugt werden, die auf dem Grafikkernarray 3214 ausgeführt werden, Daten in einem einheitlichen Rückgabepuffer (unified return buffer - URB) 3218 an Speicher ausgeben. URB 3218 kann Daten für mehrere Threads speichern. In mindestens einer Ausführungsform kann der URB 3218 verwendet werden, um Daten zwischen unterschiedlichen Threads zu senden, die auf dem Grafikkernarray 3214 ausgeführt werden. In mindestens einer Ausführungsform kann der URB 3218 zusätzlich für die Synchronisation zwischen Threads auf dem Grafikkernarray 3214 und der Festfunktionslogik innerhalb der gemeinsam genutzten Funktionslogik 3220 verwendet werden.
  • In mindestens einer Ausführungsform ist das Grafikkernarray 3214 skalierbar, sodass das Grafikkernarray 3214 eine variable Anzahl von Grafikkernen beinhaltet, die jeweils eine variable Anzahl von Ausführungseinheiten auf Grundlage eines angestrebten Leistungs- und Rechenleistungslevels der GPE 3210 aufweisen. In mindestens einer Ausführungsform sind die Ausführungsressourcen dynamisch skalierbar, sodass die Ausführungsressourcen nach Bedarf aktiviert oder deaktiviert werden können.
  • In mindestens einer Ausführungsform ist das Grafikkernarray 3214 an die gemeinsam genutzte Funktionslogik 3220 gekoppelt, die mehrere Ressourcen beinhaltet, die von den Grafikkernen in dem Grafikkernarray 3214 gemeinsam genutzt werden. In mindestens einer Ausführungsform sind die gemeinsam genutzten Funktionen, die durch die gemeinsam genutzte Funktionslogik 3220 durchgeführt werden, in Hardware-Logikeinheiten verkörpert, die eine spezialisierte Ergänzungsfunktionalität für das Grafikkernarray 3214 bereitstellen. In mindestens einer Ausführungsform beinhaltet die gemeinsam genutzte Funktionslogik 3220 eine Abtastereinheit 3221, eine Mathematikeinheit 3222 und Logik 3223 zur Zwischen-Thread-Kommunikation (inter-thread communication - ITC), ist aber nicht darauf beschränkt. In mindestens einer Ausführungsform sind ein oder mehrere Cache(s) 3225 in der gemeinsam genutzten Funktionslogik 3220 enthalten oder an diese gekoppelt.
  • In mindestens einer Ausführungsform wird eine gemeinsam genutzte Funktion verwendet, falls die Nachfrage nach einer spezialisierten Funktion für die Aufnahme in das Grafikkernarray 3214 nicht ausreicht. In mindestens einer Ausführungsform wird eine einzelne Instanziierung einer spezialisierten Funktion in der gemeinsam genutzten Funktionslogik 3220 verwendet und von anderen Ausführungsressourcen innerhalb des Grafikkernarrays 3214 gemeinsam genutzt. In mindestens einer Ausführungsform können spezifische gemeinsam genutzte Funktionen innerhalb der gemeinsam genutzten Funktionslogik 3220, die durch das Grafikkernarray 3214 intensiv genutzt werden, in der gemeinsam genutzten Funktionslogik 3216 innerhalb des Grafikkernarrays 3214 enthalten sein. In mindestens einer Ausführungsform kann die gemeinsam genutzte Funktionslogik 3216 innerhalb des Grafikkernarrays 3214 einen Teil der oder die gesamte Logik innerhalb der gemeinsam genutzten Funktionslogik 3220 beinhalten. In mindestens einer Ausführungsform können alle Logikelemente innerhalb der gemeinsam genutzten Funktionslogik 3220 innerhalb der gemeinsam genutzten Funktionslogik 3216 des Grafikkernarrays 3214 dupliziert werden. In mindestens einer Ausführungsform ist die gemeinsam genutzte Funktionslogik 3220 zugunsten der gemeinsam genutzten Funktionslogik 3216 innerhalb des Grafikkernarrays 3214 ausgeschlossen.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform können Abschnitte der oder die gesamte Inferenz- und/oder Trainingslogik 1015 in den Grafikprozessor 3210 einbezogen sein. Zum Beispiel können in mindestens einer Ausführungsform die hierin beschriebenen Trainings- und/oder Inferenztechniken eine oder mehrere der in der 3D-Pipeline 3112 verkörperten ALUs, Grafikkern(e) 3215A, gemeinsam genutzte Logik 3216, Grafikkern(e) 3015B oder andere Logik in 32 verwenden. Darüber hinaus können in mindestens einer Ausführungsform die hierin beschriebenen Inferenz- und/oder Trainingsoperationen unter Verwendung von anderer Logik als der in 10A oder 10B veranschaulichten Logik durchgeführt werden. In mindestens einer Ausführungsform können Gewichtungsparameter in chipinternem oder chip externem Speicher und/oder in Registern (gezeigt oder nicht gezeigt) gespeichert werden, die ALUs des Grafikprozessors 3210 konfigurieren, um eine(n) oder mehrere hierin beschriebene Algorithmen des maschinellen Lernens, neuronale Netzarchitekturen, Anwendungsfälle oder Trainingstechniken durchzuführen.
  • In mindestens einer Ausführungsform wird 32 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 33 ist ein Blockdiagramm von Hardware-Logik eines Grafikprozessorkerns 3300 gemäß mindestens einer hierin beschriebenen Ausführungsform. In mindestens einer Ausführungsform ist der Grafikprozessorkern 3300 in einem Grafikkernarray enthalten. In mindestens einer Ausführungsform kann es sich bei dem Grafikprozessorkern 3300, mitunter als Kern-Slice bezeichnet, um einen oder mehrere Grafikkerne innerhalb eines modularen Grafikprozessors handeln. In mindestens einer Ausführungsform ist der Grafikprozessorkern 3300 beispielhaft für einen Grafikkern-Slice und ein Grafikprozessor, wie hierin beschrieben, kann auf Grundlage der angestrebten Leistungs- und Rechenleistungshüllkurven mehrere Grafikkern-Slices beinhalten. In mindestens einer Ausführungsform kann jeder Grafikkern 3300 einen Festfunktionsblock 3330 beinhalten, der mit mehreren Teilkernen 3301A-3301F gekoppelt ist, die auch als Teil-Slices bezeichnet werden und modulare Blöcke von Universal- und Festfunktionslogik beinhalten.
  • In mindestens einer Ausführungsform beinhaltet der Festfunktionsblock 3330 eine Geometrie-/Festfunktionspipeline 3336, die von allen Teilkernen im Grafikprozessor 3300 geteilt werden kann, zum Beispiel in Umsetzungen von Grafikprozessoren mit geringerer Leistung und/oder niedrigerer Leistung. In mindestens einer Ausführungsform beinhaltet die Geometrie-/Festfunktionspipeline 3336 eine 3D-Festfunktionspipeline, eine Video-Front-End-Einheit, einen Thread-Schaffer und Thread-Versender und einen einheitlichen Rückgabepufferverwalter, der einheitliche Rückgabepuffer verwaltet.
  • In mindestens einer Ausführungsform beinhaltet der Festfunktionsblock 3330 auch eine Grafik-SoC-Schnittstelle 3337, einen Grafik-Mikrocontroller 3338 und eine Medienpipeline 3339. In mindestens einer Ausführungsform stellt die Grafik-SoC-Schnittstelle 3337 eine Schnittstelle zwischen dem Grafikkern 3300 und anderen Prozessorkernen innerhalb einer integrierten Schaltung als System auf einem Chip bereit. In mindestens einer Ausführungsform ist der Grafik-Mikrocontroller 3338 ein programmierbarer Teilprozessor, der so konfiguriert werden kann, dass er verschiedene Funktionen des Grafikprozessors 3300 verwaltet, einschließlich Thread-Zuteilung, -Planung und -Präemption. In mindestens einer Ausführungsform beinhaltet die Medienpipeline 3339 Logik zum Erleichtern der Decodierung, Codierung, Vorverarbeitung und/oder Nachverarbeitung von Multimedia-Daten, einschließlich Bild- und Videodaten. In mindestens einer Ausführungsform implementiert die Medienpipeline 3339 Medienoperationen über Anforderungen an Rechen- oder Abtastlogik innerhalb der Teilkerne 3301A-3301F.
  • In mindestens einer Ausführungsform ermöglicht die SoC-Schnittstelle 3337 es dem Grafikkern 3300, mit Universal-Anwendungsprozessorkernen (z. B. CPUs) und/oder anderen Komponenten innerhalb eines SoC zu kommunizieren, einschließlich Speicherhierarchieelementen, wie etwa einem gemeinsam genutzten Ladung-Level-Cache-Speicher, System-RAM und/oder eingebettetem chipinternem oder gehäuseinternem DRAM. In mindestens einer Ausführungsform kann die SoC-Schnittstelle 3337 auch Kommunikation mit Festfunktionsvorrichtungen innerhalb eines SoC ermöglichen, wie etwa Kamera-Bildgebungspipelines, und sie ermöglicht die Verwendung von globalem atomarem Speicher und/oder implementiert diesen, der von dem Grafikkern 3300 und den CPUs innerhalb eines SoCs gemeinsam genutzt werden kann. In mindestens einer Ausführungsform kann die SoC-Schnittstelle 3337 auch Leistungsverwaltungssteuerungen für den Grafikkern 3300 umsetzen und eine Schnittstelle zwischen einer Taktdomäne des Grafikkerns 3300 und anderen Taktdomänen innerhalb eines SoC ermöglichen. In mindestens einer Ausführungsform ermöglicht die SoC-Schnittstelle 3337 den Empfang von Befehlspuffern von einem Befehls-Streamer und einem globalen Thread-Zuteiler, die so konfiguriert sind, dass sie jedem von einem oder mehreren Grafikkernen innerhalb eines Grafikprozessors Befehle und Anweisungen bereitstellen. In mindestens einer Ausführungsform können Befehle und Anweisungen an die Medienpipeline 3339 gesendet werden, wenn Medienoperationen ausgeführt werden sollen, oder an eine Geometrie- und Festfunktionspipeline (z. B. Geometrie- und Festfunktionspipeline 3336, Geometrie- und Festfunktionspipeline 3314), wenn Grafikverarbeitungsoperationen durchgeführt werden.
  • In mindestens einer Ausführungsform kann der Grafik-Mikrocontroller 3338 so konfiguriert sein, dass er verschiedene Planungs- und Verwaltungs-Tasks für den Grafikkern 3300 durchführt. In mindestens einer Ausführungsform kann der Grafik-Mikrocontroller 3338 die Planung der Grafik- und/oder Rechenarbeitslast auf verschiedenen Grafikparallel-Engines innerhalb der Arrays 3302A-3302F, 3304A-3304F der Ausführungseinheiten (execution unit - EU) innerhalb der Teilkerne 3301A-3301F durchführen. In mindestens einer Ausführungsform kann Hostsoftware, die auf einem CPU-Kern eines SoCs ausgeführt wird, der den Grafikkern 3300 beinhaltet, Arbeitslasten an eine von mehreren Grafikprozessor-Doorbells senden, die eine Planungsoperation auf einer geeigneten Grafikengine aufruft. In mindestens einer Ausführungsform umfassen die PlanungsOperationen das Bestimmen, welche Arbeitslast als Nächstes laufen soll, das Übermitteln einer Arbeitslast an einen Befehls-Streamer, das Vorwegnehmen vorhandener Arbeitslasten, die auf einer Engine laufen, das Überwachen des Fortschritts einer Arbeitslast und das Benachrichtigen der Host-Software, wenn eine Arbeitslast abgeschlossen ist. In mindestens einer Ausführungsform kann der Grafik-Mikrocontroller 3338 auch Zustände mit niedriger Leistung oder inaktive Zustände für den Grafikkern 3300 erleichtern, wobei dem Grafikkern 3300 eine Fähigkeit bereitgestellt wird, Register innerhalb des Grafikkerns 3300 über Zustandsübergänge mit niedriger Leistung unabhängig von einem Betriebssystem und/oder einer Grafiktreiber-Software auf einem System zu sichern und wiederherzustellen.
  • In mindestens einer Ausführungsform kann der Grafikkern 3300 mehr oder weniger als die veranschaulichten Teilkerne 3301A-3301F aufweisen, bis zu N modulare Teilkerne. Für jeden Satz von N Teilkernen kann der Grafikkern 3300 in mindestens einer Ausführungsform auch gemeinsam genutzte Funktionslogik 3310, gemeinsam genutzten und/oder Cache-Speicher 3312, eine Geometrie-/Festfunktionspipeline 3314 sowie zusätzliche Festfunktionslogik 3316 zum Beschleunigen verschiedener Grafik- und Rechenverarbeitungsoperationen beinhalten. In mindestens einer Ausführungsform kann die gemeinsam genutzte Funktionslogik 3310 Logikeinheiten (z. B. Abtaster-, Mathematik- und/oder Zwischen-Thread-Kommunikationslogik) beinhalten, die von N Teilkernen innerhalb des Grafikkerns 3300 gemeinsam genutzt werden können. In mindestens einer Ausführungsform kann der gemeinsam genutzte und/oder Cache-Speicher 3312 Ladung-Level-Cache für N Teilkerne 3301A-3301F innerhalb des Grafikkerns 3300 sein und auch als gemeinsam genutzter Speicher dienen, auf den mehrere Teilkerne zugreifen können. In mindestens einer Ausführungsform kann die Geometrie-/Festfunktionspipeline 3314 anstelle der Geometrie-/Festfunktionspipeline 3336 innerhalb des Festfunktionsblocks 3330 beinhaltet sein und kann selbe oder ähnliche Logikeinheiten beinhalten.
  • In mindestens einer Ausführungsform beinhaltet der Grafikkern 3300 zusätzliche Festfunktionslogik 3316, die verschiedene Festfunktionsbeschleunigungslogik zur Verwendung durch den Grafikkern 3300 beinhalten kann. In mindestens einer Ausführungsform beinhaltet die zusätzliche Festfunktionslogik 3316 eine zusätzliche Geometriepipeline zur Verwendung bei der Schattierung von lediglich der Position. Bei einer Schattierung von lediglich der Position existieren mindestens zwei Geometriepipelines, wohingegen in einer Vollgeometriepipeline innerhalb der Geometrie-/Fixfunktionspipeline 3316, 3336 und eine Auslesepipeline, die eine zusätzliche Geometriepipeline ist, die innerhalb der zusätzlichen Festfunktionslogik 3316 beinhaltet sein kann. In mindestens einer Ausführungsform ist die Culling-Pipeline eine abgespeckte Version einer vollständigen Geometriepipeline. In mindestens einer Ausführungsform können eine vollständige Pipeline und eine Auslesepipeline verschiedene Instanzen einer Anwendung ausführen, wobei jede Instanz einen getrennten Kontext aufweist. In mindestens einer Ausführungsform kann eine Schattierung von lediglich der Position lange Ausleseläufe von verworfenen Dreiecken verbergen, wodurch die Schattierung in einigen Fällen früher abgeschlossen werden kann. Zum Beispiel kann in mindestens einer Ausführungsform die Auslesepipeline-Logik innerhalb der zusätzlichen Festfunktionslogik 3316 Positions-Shader parallel zu einer Hauptanwendung ausführen und erzeugt im Allgemeinen kritische Ergebnisse schneller als eine vollständige Pipeline, da die Auslesepipeline das Positionsattribut von Scheitelpunkten abruft und schattiert, ohne eine Rasterisierung und ein Rendern von Pixeln in einen Bildspeicher durchzuführen. In mindestens einer Ausführungsform kann die Auslesepipeline erzeugte kritische Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke zu berechnen, unabhängig davon, ob diese Dreiecke aussortiert wurden. In mindestens einer Ausführungsform kann eine vollständige Pipeline (die in diesem Fall als eine Wiedergabepipeline bezeichnet werden kann) Sichtbarkeitsinformationen verbrauchen, um aussortierte Dreiecke zu überspringen, um nur sichtbare Dreiecke zu schattieren, die schließlich zu einer Rasterisierungsphase weitergeleitet werden.
  • In mindestens einer Ausführungsform kann die zusätzliche Festfunktionslogik 3316 auch Logik zur Beschleunigung des maschinellen Lernens wie etwa Festfunktions-Matrixmultiplikationslogik für Implementationen beinhalten, die Optimierungen für das Training oder das Inferenzieren des maschinellen Lernens beinhalten.
  • In mindestens einer Ausführungsform beinhaltet jeder Grafikteilkern 3301A-3301F einen Satz von Ausführungsressourcen, die verwendet werden können, um Grafik-, Medien- und Rechenoperationen als Reaktion auf Anforderungen durch Grafikpipeline-, Medienpipeline- oder Shader-Programme durchzuführen. In mindestens einer Ausführungsform beinhalten die Grafikteilkerne 3301A-3301F mehrere EU-Arrays 3302A-3302F, 3304A-3304F, Logik 3303A-3303F zur Thread-Zuteilung und Zwischen-Thread-Kommunikation (thread dispatch/inter-thread communication - TD/IC), einen 3D- (z. B. Textur-) Abtaster 3305A-3305F, einen Medienabtaster 3306A-3306F, einen Shader-Prozessor 3307A-3307F und gemeinsam genutzten lokalen Speicher (shared local memory - SLM) 3308A-3308F. Die EU-Arrays 3302A-3302F, 3304A-3304F beinhalten jeweils mehrere Ausführungseinheiten, die Allzweck-Grafikverarbeitungseinheiten sind, die Gleitkomma- und Ganzzahl-/Festkomma-Logikoperationen im Dienst einer Grafik-, Medien- oder Rechenoperation ausführen können, was Grafik-, Medien- oder Rechen-Shader-Programme beinhaltet. In mindestens einer Ausführungsform führt die TD/IC-Logik 3303A-3303F lokale Thread-Zuteilungs- und Thread-Steueroperationen für Ausführungseinheiten innerhalb eines Teilkerns aus und sie erleichtert die Kommunikation zwischen Threads, die auf Ausführungseinheiten eines Teilkerns ausgeführt werden. In mindestens einer Ausführungsform kann der 3D-Abtaster 3305A-3305F Daten mit Bezug zu Textur- oder anderer 3D-Grafik in den Speicher einlesen. In mindestens einer Ausführungsform kann der 3D-Abtaster Texturdaten auf Grundlage eines konfigurierten Sample-Zustands und eines Texturformats unterschiedlich lesen, das einer bestimmten Textur zugeordnet ist. In mindestens einer Ausführungsform können die Medienabtaster 3306A-3306F ähnliche Leseoperationen auf Grundlage eines Typs und Formats, die mit den Mediendaten assoziiert sind, durchführen. In mindestens einer Ausführungsform kann jeder Grafikteilkern 3301A-3301F alternativ einen einheitlichen 3D-Abtaster und Medienabtaster beinhalten. In mindestens einer Ausführungsform können Threads, die auf Ausführungseinheiten innerhalb jedes der Teilkerne 3301A-3301F ausgeführt werden, den gemeinsam genutzten lokalen Speicher 3308A-3308F innerhalb jedes Teilkerns verwenden, um es Threads, die innerhalb einer Thread-Gruppe ausgeführt werden, zu ermöglichen, unter Verwendung eines gemeinsamen Pools von chipinternem Speicher ausgeführt zu werden.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform können Abschnitte der oder die gesamte Inferenz- und/oder Trainingslogik 1015 in den Grafikprozessor 3310 einbezogen sein. Zum Beispiel können in mindestens einer Ausführungsform die hierin beschriebenen Trainings- und/oder Inferenztechniken eine oder mehrere der in einer 3D-Pipeline verkörperten ALUs, den Grafik-Mikrocontroller 3338, die Geometrie- und Festfunktionspipeline 3314 und 3336 oder andere Logik in 30 verwenden. Darüber hinaus können in mindestens einer Ausführungsform die hierin beschriebenen Inferenz- und/oder Trainingsoperationen unter Verwendung von anderer Logik als der in 10A oder 10B veranschaulichten Logik durchgeführt werden. In mindestens einer Ausführungsform können Gewichtungsparameter in chipinternem oder chip externem Speicher und/oder in Registern (gezeigt oder nicht gezeigt) gespeichert werden, die ALUs des Grafikprozessors 3300 konfigurieren, um eine(n) oder mehrere hierin beschriebene Algorithmen des maschinellen Lernens, neuronale Netzarchitekturen, Anwendungsfälle oder Trainingstechniken durchzuführen.
  • In mindestens einer Ausführungsform wird 33 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 34A-34B veranschaulichen Thread-Ausführungslogik 3400, die ein Array von Verarbeitungselementen eines Grafikprozessorkerns beinhaltet, gemäß mindestens einer Ausführungsform. 34A veranschaulicht mindestens eine Ausführungsform, in der die Thread-Ausführungslogik 3400 verwendet wird. 34B veranschaulicht beispielhafte interne Details einer Ausführungseinheit gemäß mindestens einer Ausführungsform.
  • Wie in 34A veranschaulicht, beinhaltet die Thread-Ausführungslogik 3400 in mindestens einer Ausführungsform einen Shader-Prozessor 3402, einen Thread-Zuteiler 3404, einen Anweisungs-Cache 3406, ein skalierbares Ausführungseinheitenarray einschließlich einer Vielzahl von Ausführungseinheiten 3408A-3408N, einen Abtaster 3410, einen Daten-Cache 3412 und einen Datenport 3414. In mindestens einer Ausführungsform kann ein skalierbares Ausführungseinheitenarray dynamisch skalieren, indem eine oder mehrere Ausführungseinheiten (z. B. eine der Ausführungseinheiten 3408A, 3408B, 3408C, 3408D bis 3408N-1 und 3408N) zum Beispiel auf Grundlage der Rechenanforderungen von einer Arbeitslast aktiviert oder deaktiviert werden. In mindestens einer Ausführungsform sind skalierbare Ausführungseinheiten über eine Verbindungsstruktur miteinander verbunden, die mit jeder der Ausführungseinheiten verbunden ist. In mindestens einer Ausführungsform beinhaltet die Thread-Ausführungslogik 3400 eine oder mehrere Verbindungen mit Speicher, wie etwa Systemspeicher oder Cache-Speicher, durch eines oder mehrere des Anweisungs-Caches 3406, des Datenports 3414, des Abtasters 3410 und der Ausführungseinheiten 3408A-3408N. In mindestens einer Ausführungsform ist jede Ausführungseinheit (z. B. 3408A) eine eigenständige programmierbare Universalrecheneinheit, die dazu in der Lage ist, mehrere simultane Hardware-Threads auszuführen, während mehrere Datenelemente parallel für jeden Thread verarbeitet werden. In mindestens einer Ausführungsform ist das Array von Ausführungseinheiten 3408A-3408N skalierbar, um eine beliebige Anzahl einzelner Ausführungseinheiten zu beinhalten.
  • In mindestens einer Ausführungsform werden die Ausführungseinheiten 3408A-3408N hauptsächlich verwendet, um Shader-Programme auszuführen. In mindestens einer Ausführungsform kann der Shader-Prozessor 3402 verschiedene Shader-Programme verarbeiten und mit den Shader-Programmen assoziierte Ausführungs-Threads über einen Thread-Zuteiler 3404 zuteilen. In mindestens einer Ausführungsform beinhaltet der Thread-Versender 3404 eine Logik, um Thread-Initiierungsanforderungen von Grafik- und Medienpipelines zu vermitteln und angeforderte Threads auf einer oder mehreren Ausführungseinheiten in den Ausführungseinheiten 3408A-3408N zu instanziieren. Zum Beispiel kann in mindestens einer Ausführungsform eine Geometriepipeline Vertex-, Tesselations- oder Geometrie-Shader zur Verarbeitung an die Thread-Ausführungslogik versenden. In mindestens einer Ausführungsform kann der Thread-Zuteiler 3404 auch Laufzeit-Thread-Erzeugungsanforderungen von ausführenden Shader-Programmen verarbeiten.
  • In mindestens einer Ausführungsform unterstützen die Ausführungseinheiten 3408A-3408N einen Anweisungssatz, der derartig native Unterstützung für viele standardmäßige 3D-Grafik-Shader-Befehle beinhaltet, dass Shader-Programme von Grafikbibliotheken (z. B. Direct 3D und OpenGL) mit einer minimalen Übersetzung ausgeführt werden. In mindestens einer Ausführungsform unterstützen Ausführungseinheiten Scheitelpunkt- und Geometrieverarbeitung (z. B. Scheitelpunktprogramme, Geometrieprogramme, Scheitelpunkt-Shader), Pixelverarbeitung (z. B. Pixel-Shader, Fragment-Shader) und Allzweckverarbeitung (z. B. Rechen- und Medien-Shader). In mindestens einer Ausführungsform ist jede der Ausführungseinheiten 3408A-3408N, die eine oder mehrere arithmetische Logikeinheiten (ALUs) beinhalten, zu einer Mehrfachausgabe-Einzelbefehl-Mehrfachdaten-(SIMD- )Ausführung in der Lage, und eine Multithread-Operation ermöglicht eine effiziente Ausführungsumgebung trotz höherer Latenzspeicherzugriffe. In mindestens einer Ausführungsform weist jeder Hardware-Thread innerhalb jeder Ausführungseinheit eine dedizierte Registerbank mit hoher Bandbreite und einen damit assoziierten unabhängigen Thread-Zustand auf. In mindestens einer Ausführungsform erfolgt die Ausführung mit mehreren Ausgaben pro Takt an Pipelines, die für Integer- und FließkommaOperationen mit einfacher oder doppelter Genauigkeit, SIMD-Verzweigungsfähigkeit, logische Operationen, transzendentale Operationen und andere verschiedene Operationen in der Lage sind. In mindestens einer Ausführungsform veranlasst die Abhängigkeitslogik innerhalb der Ausführungseinheiten 3408A-3408N, während auf Daten aus dem Speicher oder einer von gemeinsam genutzten Funktionen gewartet wird, dass ein wartender Thread im Ruhezustand bleibt, bis angeforderte Daten zurückgegeben wurden. In mindestens einer Ausführungsform können, während ein wartender Thread schläft, Hardware-Ressourcen für die Verarbeitung anderer Threads verwendet werden. Zum Beispiel kann in mindestens einer Ausführungsform eine Ausführungseinheit während einer Verzögerung, die mit einem Vertex-Shader-Vorgang assoziiert ist, 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 einer Ausführungsform arbeitet jede Ausführungseinheit in den Ausführungseinheiten 3408A-3408N an Arrays von Datenelementen. In mindestens einer Ausführungsform ist eine Anzahl von Datenelementen die „Ausführungsgröße“ oder die Anzahl von Kanälen für eine Anweisung. In mindestens einer Ausführungsform ist ein Ausführungskanal eine logische Ausführungseinheit für den Datenelementzugriff, die Maskierung und die Ablaufsteuerung innerhalb von Anweisungen. In mindestens einer Ausführungsform kann eine Anzahl von Kanälen unabhängig von einer Anzahl von physischen arithmetischen Logikeinheiten (ALUs) oder Gleitkommaeinheiten (FPUs) für einen bestimmten Grafikprozessor sein. In mindestens einer Ausführungsform unterstützen die Ausführungseinheiten 3408A-3408N Ganzzahl- und Gleitkomma-Datenarten.
  • In mindestens einer Ausführungsform beinhaltet ein Anweisungssatz einer Ausführungseinheit SIMD-Anweisungen. In mindestens einer Ausführungsform können verschiedene Datenelemente als gepackter Datentyp in einem Register gespeichert werden und die Ausführungseinheit verarbeitet verschiedene Elemente auf Grundlage der Datengröße der Elemente. Zum Beispiel werden in mindestens einer Ausführungsform bei dem Betrieb an einem 256 Bit breiten Vektor 256 Bit eines Vektors in einem Register gespeichert und wird eine Ausführungseinheit an einem Vektor als vier separate 64-Bit-Paket-Datenelemente (Datenelemente der Größe Quad-Word (QW)), acht separate 32-Bit-Paket-Datenelemente (Datenelemente der Größe Double Word (DW)), sechzehn separate 16-Bit-Paket-Datenelemente (Datenelemente der Größe Word (W)) oder zweiunddreißig separate 8-Bit-Datenelemente (Datenelemente der Größe Byte (B)) betrieben. In mindestens einer Ausführungsform sind jedoch andere Vektorbreiten und Registergrößen möglich.
  • In mindestens einer Ausführungsform können eine oder mehrere Ausführungseinheiten zu einer verschmolzenen Ausführungseinheit 3409A-3409N mit einer Thread-Steuerungslogik (3407A-3407N) kombiniert werden, die verschmolzenen EUs gemeinsam ist. In mindestens einer Ausführungsform können mehrere EUs zu einer EU-Gruppe fusioniert werden. In mindestens einer Ausführungsform kann jede EU in der fusionierten EU-Gruppe so konfiguriert sein, dass sie einen separaten SIMD-Hardware-Thread ausführt. Die Anzahl von EUs in einer verschmolzenen EU-Gruppe kann gemäß verschiedenen Ausführungsformen variieren. In mindestens einer Ausführungsform können verschiedene SIMD-Breiten pro EU durchgeführt werden, einschließlich, aber nicht beschränkt auf, SIMD8, SIMD16 und SIMD32. In mindestens einer Ausführungsform beinhaltet jede fusionierte Grafikausführungseinheit 3409A-3409N mindestens zwei Ausführungseinheiten. Zum Beispiel beinhaltet in mindestens einer Ausführungsform die fusionierte Ausführungseinheit 3409A eine erste EU 3408A, eine zweite EU 3408B und Thread-Steuerlogik 3407A, die der ersten EU 3408A und der zweiten EU 3408B gemeinsam ist. In mindestens einer Ausführungsform steuert die Thread-Steuerlogik 3407A Threads, die auf der fusionierten Grafikausführungseinheit 3409A ausgeführt werden, sodass jede EU innerhalb der fusionierten Ausführungseinheiten 3409A-3409N unter Verwendung eines gemeinsamen Anweisungszeigerregisters ausgeführt werden kann.
  • In mindestens einer Ausführungsform sind ein oder mehrere interne Anweisungs-Caches (z. B. 3406) in der Thread-Ausführungslogik 3400 enthalten, um Thread-Anweisungen für Ausführungseinheiten zwischenzuspeichern. In mindestens einer Ausführungsform sind ein oder mehrere Daten-Caches (z. B. 3412) enthalten, um Thread-Daten während der Thread-Ausführung zwischenzuspeichern. In mindestens einer Ausführungsform ist ein Abtaster 3410 beinhaltet, um eine Texturabtastung für 3D-Operationen und eine Medienabtastung für Medienoperationen bereitzustellen. In mindestens einer Ausführungsform beinhaltet der Abtaster 3410 eine spezialisierte Textur- oder Medienabtastfunktionalität, um Textur- oder Mediendaten während eines Abtastprozesses zu verarbeiten, bevor die abgetasteten Daten einer Ausführungseinheit bereitgestellt werden.
  • Während der Ausführung senden Grafik- und Medienpipelines in mindestens einer Ausführungsform Thread-Initiierungsanforderungen über die Thread-Erzeugungs- und - Zuteilungslogik an die Thread-Ausführungslogik 3400. In mindestens einer Ausführungsform 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 3402 aufgerufen, um Ausgabeinformationen weiter zu berechnen und zu veranlassen, dass die Ergebnisse in Ausgabeflächen (z. B. Farbpuffer, Tiefenpuffer, Schablonenpuffer usw.) geschrieben werden. In mindestens einer Ausführungsform berechnet ein Pixel-Shader oder Fragment-Shader die Werte verschiedener Vertex-Attribute, die über ein gerastertes Objekt interpoliert werden sollen. In mindestens einer Ausführungsform führt die Pixelprozessorlogik innerhalb des Shader-Prozessors 3402 dann ein über eine Anwendungsprogrammierschnittstelle (API) zugeführtes Pixel- oder Fragment-Shader-Programm aus. In mindestens einer Ausführungsform teilt der Shader-Prozessor 3402 zum Ausführen eines Shader-Programms Threads über den Thread-Zuteiler 3404 einer Ausführungseinheit (z. B. 3408A) zu. In mindestens einer Ausführungsform verwendet der Shader-Prozessor 3402 die Texturabtastlogik in dem Abtaster 3410, um auf Texturdaten in Texturkarten zuzugreifen, die in Speicher gespeichert sind. In mindestens einer Ausführungsform werden durch arithmetische Operationen an Texturdaten und eingegebenen Geometriedaten Pixelfarbdaten für jedes geometrische Fragment berechnet oder ein oder mehrere Pixel von der weiteren Verarbeitung ausgeschlossen.
  • In mindestens einer Ausführungsform stellt der Datenport 3414 einen Speicherzugriffsmechanismus für die Thread-Ausführungslogik 3400 bereit, um verarbeitete Daten zur weiteren Verarbeitung an einer Grafikprozessor-Ausgabepipeline an Speicher auszugeben. In mindestens einer Ausführungsform beinhaltet der Datenport 3414 einen oder mehrere Cache-Speicher (z. B. den Daten-Cache 3412) oder ist an diesen gekoppelt, um Daten für den Speicherzugriff über einen Datenport zwischenzuspeichern.
  • Wie in 34B veranschaulicht, kann eine Grafikausführungseinheit 3408 in mindestens einer Ausführungsform eine Anweisungsabrufeinheit 3437, ein Array von allgemeinen Registerbänken (general register file - GRF) 3424, ein Array von architektonischen Registerbänken (architectural register file - ARF) 3426, einen Thread-Vermittler 3422, eine Sendeeinheit 3430, eine Verzweigungseinheit 3432, einen Satz SIMD-Gleitkommaeinheiten (FPUs) 3434 und einen Satz dedizierter Integer-SIMD-ALUs 3435 beinhalten. In mindestens einer Ausführungsform beinhalten die GRF 3424 und die ARF 3426 einen Satz allgemeiner Registerbänke und Architekturregisterbänke, die mit jedem simultanen Hardware-Thread assoziiert sind, der in der Grafikausführungseinheit 3408 aktiv sein kann. In mindestens einer Ausführungsform wird der architektonische Zustand pro Thread in der ARF 3426 verwaltet, während die während der Thread-Ausführung verwendeten Daten in der GRF 3424 gespeichert werden. In mindestens einer Ausführungsform kann der Ausführungszustand jedes Threads, einschließlich der Anweisungszeiger für jeden Thread, in Thread-spezifischen Registern in der ARF 3426 aufbewahrt werden.
  • In mindestens einer Ausführungsform weist die Grafikausführungseinheit 3408 eine Architektur auf, die eine Kombination aus simultanem Multi-Threading (Simultaneous Multi-Threading - SMT) und feinkörnigem verschachteltem Multi-Threading (Interleaved Multi-Threading - IMT) ist. In mindestens einer Ausführungsform weist die Architektur eine modulare Konfiguration auf, die zur Ausgestaltungszeit auf Grundlage einer Zielanzahl von simultanen Threads und Anzahl von Registern pro Ausführungseinheit fein abgestimmt werden kann, wobei die Ressourcen der Ausführungseinheit auf die Logik aufgeteilt werden, die zum Ausführen mehrerer simultaner Threads verwendet wird.
  • In mindestens einer Ausführungsform kann die Grafikausführungseinheit 3408 mehrere Anweisungen gleichzeitig ausgeben, die jeweils unterschiedliche Anweisungen sein können. In mindestens einer Ausführungsform kann der Thread-Vermittler 3422 des Grafikausführungseinheits-Threads 3408 Anweisungen einer der Sendeeinheit 3430, der Verzweigungseinheit 3442 oder der SIMD-FPU(s) 3434 zur Ausführung zuteilen. In mindestens einer Ausführungsform kann jeder Ausführungs-Thread auf 128 Universalregister innerhalb der GRF 3424 zugreifen, wobei jedes Register 32 Byte speichern kann, die als SIMD-8-Elementvektor von 32-Bit-Datenelementen zugänglich sind. In mindestens einer Ausführungsform hat jeder Ausführungseinheits-Thread Zugriff auf 4 KByte innerhalb des GRF 3424, obwohl Ausführungsformen nicht darauf beschränkt sind und in anderen Ausführungsformen mehr oder weniger Registerressourcen bereitgestellt sein können. In mindestens einer Ausführungsform können bis zu sieben Threads simultan ausgeführt werden, obwohl die Anzahl der Threads pro Ausführungseinheit gemäß Ausführungsform auch variieren kann. In mindestens einer Ausführungsform, in der sieben Threads auf 4 Kbyte zugreifen können, kann das GRF 3424 insgesamt 28 Kbyte speichern. In mindestens einer Ausführungsform können flexible Adressierungsmodi zulassen, dass Register gemeinsam adressiert werden, um effektiv breitere Register aufzubauen oder gestaffelte rechteckige Blockdatenstrukturen darzustellen.
  • In mindestens einer Ausführungsform werden Speicheroperationen, Abtastoperationen und andere Systemkommunikationen mit längerer Latenz über „Sende“-Anweisungen versendet, die von der Mitteilungsweiterleitungssendeeinheit 3430 ausgeführt werden. In mindestens einer Ausführungsform werden Verzweigungsanweisungen an eine dedizierte Verzweigungseinheit 3432 versendet, um die SIMD-Abweichung und eventuelle Annäherung zu erleichtern.
  • In mindestens einer Ausführungsform beinhaltet die Grafikausführungseinheit 3408 eine oder mehrere SIMD-Gleitkommaeinheiten (FPU(s)) 3434 zum Durchführen von Gleitkommaoperationen. In mindestens einer Ausführungsform unterstützen die FPU(s) 3434 auch Integerberechnung. In mindestens einer Ausführungsform können die FPU(s) 3434 bis zu einer Anzahl von M 32-Bit-Gleitkomma- (oder -Integer-) Operationen über SIMD ausführen oder bis zu 2M 16-Bit-Integer- oder 16-Bit-Gleitkommaoperationen über SIMD ausführen. In mindestens einer Ausführungsform stellt mindestens eine der FPU(s) erweiterte mathematische Fähigkeiten bereit, um transzendentale mathematische Funktionen mit hohem Durchsatz und 64-Bit-Fließkomma mit doppelter Genauigkeit zu unterstützen. In mindestens einer Ausführungsform ist auch ein Satz von 8-Bit-Integer-SIMD-ALUs 3435 vorhanden, der spezifisch zum Durchführen von Operationen, die mit Berechnungen für maschinelles Lernen assoziiert sind, optimiert sein kann.
  • In mindestens einer Ausführungsform können Arrays von mehreren Instanzen der Grafikausführungseinheit 3408 in einer Grafikteilkern-Gruppierung (z. B. einem Teil-Slice) instanziiert sein. In mindestens einer Ausführungsform kann die Ausführungseinheit 3408 Anweisungen über eine Vielzahl von Ausführungskanälen hinweg ausführen. In mindestens einer Ausführungsform wird jeder Thread, der auf der Grafikausführungseinheit 3408 ausgeführt wird, auf einem anderen Kanal ausgeführt.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform können Teile der oder die gesamte Ableitungs- und/oder Trainingslogik 1015 in die Ausführungslogik 3400 integriert sein. Darüber hinaus können in mindestens einer Ausführungsform die hierin beschriebenen Inferenz- und/oder Trainingsoperationen unter Verwendung von anderer Logik als der in 10A oder 10B veranschaulichten Logik durchgeführt werden. In mindestens einer Ausführungsform können Gewichtungsparameter in chipinternen oder chip externen Speicher und/oder Registern (gezeigt oder nichtgezeigt) gespeichert werden, die ALUs der Ausführungslogik 3400 konfigurieren, um einen oder mehrere Algorithmen maschinellen Lernens, neuronale Netzwerkarchitekturen, Anwendungsfälle oder in dieser Schrift beschriebene Trainingsmethoden auszuführen.
  • In mindestens einer Ausführungsform werden 34A und 34B verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 35 veranschaulicht eine Parallelverarbeitungseinheit („PPU“) 3500 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist die PPU 3500 mit maschinenlesbarem Code konfiguriert, der bei Ausführung durch die PPU 3500 die PPU 3500 dazu veranlasst, einige oder alle der in dieser gesamten Offenbarung beschriebenen Prozesse und Techniken durchzuführen. In mindestens einer Ausführungsform ist die PPU 3500 ein Multi-Thread-Prozessor, der auf einer oder mehreren Vorrichtungen mit integrierter Schaltung implementiert ist und der Multi-Threading als Technik zur Latenzverbergung nutzt, die dazu ausgestaltet ist, computerlesbare Anweisungen (auch als maschinenlesbare Anweisungen oder einfach Anweisungen bezeichnet) auf mehreren Threads parallel zu verarbeiten. In mindestens einer Ausführungsform bezieht sich ein Thread auf einen Ausführungs-Thread und er ist eine Instanziierung eines Satzes von Anweisungen, der dazu konfiguriert ist, durch die PPU 3500 ausgeführt zu werden. In mindestens einer Ausführungsform ist die PPU 3500 eine Grafikverarbeitungseinheit („GPU“), die so konfiguriert ist, dass sie eine Grafik-Rendering-Pipeline zum Verarbeiten dreidimensionaler („3D“) Grafikdaten implementiert, um zweidimensionale („2D“) Bilddaten zur Anzeige auf einer Anzeigevorrichtung, wie etwa einer Vorrichtung mit Flüssigkristallanzeige („LCD“), zu erzeugen. In mindestens einer Ausführungsform wird die PPU 3500 genutzt, um Berechnungen, wie etwa lineare Algebraoperationen und Operationen des maschinellen Lernens, durchzuführen. 35 veranschaulicht ein Beispiel für einen Parallelprozessor, der nur zu Veranschaulichungszwecken dient und als nicht einschränkendes Beispiel für Prozessorarchitekturen ausgelegt werden sollte, die innerhalb des Umfangs dieser Offenbarung in Betracht gezogen werden, und dass ein beliebiger geeigneter Prozessor zur Ergänzung und/oder als Ersatz für diesen eingesetzt werden kann.
  • In mindestens einer Ausführungsform sind eine oder mehrere PPUs 3500 so konfiguriert, dass sie Anwendungen für Hochleistungsrechnen (High Performance Computing - „HPC“), für ein Rechenzentrum und für maschinelles Lernen beschleunigen. In mindestens einer Ausführungsform ist die PPU 3500 so konfiguriert, dass sie Deep-Learning-Systeme und -Anwendungen beschleunigt, einschließlich der folgenden nicht einschränkenden Beispiele: Plattformen für autonome Fahrzeuge, Deep Learning, Sprach-, Bild- und Texterkennungssysteme mit hoher Genauigkeit, intelligente Video analytik, Molekularsimulationen, Arzneimittelforschung, Krankheitsdiagnose, Wettervorhersage, Big-Data-Analytik, Astronomie, Molekulardynamiksimulation, Finanzmodellierung, Robotik, Fabrikautomatisierung, Echtzeit-Sprachübersetzung, Online-Suchoptimierungen und personalisierte Benutzerempfehlungen und mehr.
  • In mindestens einer Ausführungsform beinhaltet die PPU 3500 ohne Einschränkung eine Eingabe/Ausgabe-(„E/A“-)Einheit 3506, eine Frontend-Einheit 3510, eine Scheduler-Einheit 3512, eine Arbeitsverteilungseinheit 3514, einen Hub 3516, eine Kreuzschiene (crossbar - „XBar“) 3520, einen oder mehrere Universalverarbeitungscluster („GPCs“) 3518 und eine oder mehrere Partitionseinheiten („Speicherpartitionseinheiten“) 3522. In mindestens einer Ausführungsform ist die PPU 3500 mit einem Host-Prozessor oder anderen PPUs 3500 über eine oder mehrere Hochgeschwindigkeits-GPU-Zusammenschaltungen („GPU-Zusammenschaltungen“) 3508 verbunden. In mindestens einer Ausführungsform ist die PPU 3500 über eine Verbindung 3502 mit einem Hostprozessor oder anderen Peripherievorrichtungen verbunden. In mindestens einer Ausführungsform ist die PPU 3500 mit einem lokalen Speicher verbunden, der eine oder mehrere Speichervorrichtungen („Speicher“) 3504 umfasst. In mindestens einer Ausführungsform beinhalten die Speichervorrichtungen 3504 ohne Einschränkung eine oder mehrere Vorrichtungen mit dynamischem Direktzugriffsspeicher („DRAM“). In mindestens einer Ausführungsform sind eine oder mehrere DRAM-Vorrichtungen als Teilsysteme mit Speicher mit hoher Bandbreite („HBM“) konfiguriert und/oder konfigurierbar, wobei mehrere DRAM-Dies innerhalb jeder Vorrichtung gestapelt sind.
  • In mindestens einer Ausführungsform kann sich die Hochgeschwindigkeits-GPU-Zusammenschaltung 3508 auf eine drahtbasierte mehrspurige Kommunikationsverknüpfung beziehen, die durch Systeme zum Skalieren verwendet wird und eine oder mehrere PPUs 3500 in Kombination mit einer oder mehreren zentralen Verarbeitungseinheiten („CPUs“) beinhaltet und die Cache-Kohärenz zwischen PPUs 3500 und CPUs sowie CPU-Mastering unterstützt. In mindestens einer Ausführungsform werden Daten und/oder Befehle durch die Hochgeschwindigkeits-GPU-Zusammenschaltung 3508 über den Hub 3516 zu/von anderen Einheiten der PPU 3500 übertragen, wie etwa einer/einem oder mehreren Kopier-Engines, Videocodierern, Videodecodierern, Leistungsverwaltungseinheiten und anderen Komponenten, die in 35 möglicherweise nicht explizit veranschaulicht sind.
  • In mindestens einer Ausführungsform ist die E/A-Einheit 3506 so konfiguriert, dass sie Kommunikation (z. B. Befehle, Daten) von einem Host-Prozessor (in 35 nicht veranschaulicht) über den Systembus 3502 überträgt und empfängt. In mindestens einer Ausführungsform kommuniziert die E/A-Einheit 3506 mit dem Host-Prozessor direkt über den Systembus 3502 oder durch eine oder mehrere Zwischenvorrichtungen wie etwa eine Speicherbrücke. In mindestens einer Ausführungsform kann die E/A-Einheit 3506 über den Systembus 3502 mit einem oder mehreren anderen Prozessoren kommunizieren, wie etwa einer oder mehreren der PPUs 3500. In mindestens einer Ausführungsform implementiert die E/A-Einheit 3506 eine Peripheral-Component-Interconnect-Express-(„PCIe“-)Schnittstelle für die Kommunikation über einen PCIe-Bus. In mindestens einer Ausführungsform implementiert die E/A-Einheit 3506 Schnittstellen zum Kommunizieren mit externen Vorrichtungen.
  • In mindestens einer Ausführungsform decodiert die E/A-Einheit 3506 über den Systembus 3502 empfangene Pakete. In mindestens einer Ausführungsform stellen mindestens einige Pakete Befehle dar, die so konfiguriert sind, dass sie die PPU 3500 dazu veranlassen, verschiedene Operationen durchzuführen. In mindestens einer Ausführungsform überträgt die E/A-Einheit 3506 decodierte Befehle an verschiedene andere Einheiten der PPU 3500, wie durch Befehle vorgegeben. In mindestens einer Ausführungsform werden Befehle an die Frontend-Einheit 3510 übertragen und/oder an den Hub 3516 oder andere Einheiten der PPU 3500 übertragen, wie etwa eine oder mehrere Kopier-Engines, einen Videocodierer, einen Videodecodierer, eine Leistungsverwaltungseinheit usw. (in 35 nicht explizit veranschaulicht). In mindestens einer Ausführungsform ist die E/A-Einheit 3506 so konfiguriert, dass sie Kommunikation zwischen und unter verschiedenen logischen Einheiten der PPU 3500 routet.
  • In mindestens einer Ausführungsform codiert ein durch den Host-Prozessor ausgeführtes Programm einen Befehlsstream in einem Puffer, der der PPU 3500 Arbeitslasten zur Verarbeitung bereitstellt. In mindestens einer Ausführungsform umfasst eine Arbeitslast Anweisungen und Daten, die durch diese Anweisungen verarbeitet werden sollen. In mindestens einer Ausführungsform ist der Puffer ein Bereich in einem Speicher, auf den sowohl der Hostprozessor als auch die PPU 3500 zugreifen (z. B. lesen/schreiben) können - eine Host-Schnittstelleneinheit kann dazu konfiguriert sein, auf Puffer in einem Systemspeicher zuzugreifen, der mit dem Systembus 3502 über Speicheranforderungen verbunden ist, die über den Systembus 3502 durch die E/A-Einheit 3506 übermittelt werden. In mindestens einer Ausführungsform schreibt der Hostprozessor den Befehlsstrom in den Puffer und übermittelt dann derartig einen Verweis zum Anfang des Befehlsstroms an die PPU 3500, dass die FrontEnd-Einheit 3510 Verweise auf einen oder mehrere Befehlsströme empfängt und einen oder mehrere Befehlsströme verwaltet, wobei Befehle aus Befehlsströmen gelesen und Befehle an verschiedene Einheiten der PPU 3500 weitergeleitet werden.
  • In mindestens einer Ausführungsform ist die Frontend-Einheit 3510 an die Scheduler-Einheit 3512 gekoppelt, die verschiedene GPCs 3518 zum Verarbeiten von Tasks konfiguriert, die durch einen oder mehrere Befehlsströme definiert sind. In mindestens einer Ausführungsform ist die Scheduler-Einheit 3512 so konfiguriert, dass sie Zustandsinformationen in Bezug auf verschiedene durch die Scheduler-Einheit 3512 verwaltete Tasks verfolgt, wobei die Zustandsinformationen angeben können, welchem der GPCs 3518 ein Task zugeordnet ist, ob der Task aktiv oder inaktiv ist, welcher Prioritätslevel mit dem Task assoziiert ist, und so weiter. In mindestens einer Ausführungsform verwaltet die Scheduler-Einheit 3512 die Ausführung einer Vielzahl von Tasks auf einem oder mehreren GPCs 3518.
  • In mindestens einer Ausführungsform ist die Scheduler-Einheit 3512 an die Arbeitsverteilungseinheit 3514 gekoppelt, die so konfiguriert ist, dass sie Tasks zur Ausführung auf den GPCs 3518 zuteilt. In mindestens einer Ausführungsform verfolgt die Arbeitsverteilungseinheit 3514 eine Anzahl geplanter Tasks nach, die von der Scheduler-Einheit 3512 empfangen wurde, und die Arbeitsverteilungseinheit 3514 verwaltet einen Pool ausstehender Tasks und einen Pool aktiver Tasks für jeden der GPCs 3518. In mindestens einer Ausführungsform umfasst der Pool anstehender Aufgaben eine Anzahl von Steckplätzen (z. B. 32 Steckplätze), die Aufgaben enthalten, die einem bestimmten GPC 3518 zur Verarbeitung zugewiesen sind; der Pool aktiver Aufgaben kann eine Anzahl von Steckplätzen (z. B. 4 Steckplätze) für Aufgaben umfassen, die derartig aktiv von den GPCs 3518 verarbeitet werden, dass, wenn einer der GPCs 3518 die Ausführung einer Aufgabe abschließt, diese Aufgabe aus dem aktiven Aufgabenpool für den GPC 3518 entfernt wird und eine der anderen Aufgaben aus dem Pool anstehender Aufgaben ausgewählt und zur Ausführung auf dem GPC 3518 geplant wird. In mindestens einer Ausführungsform wird, wenn sich eine aktive Aufgabe auf dem GPC 3518 im Ruhezustand befindet, wie etwa während auf die Auflösung einer Datenabhängigkeit gewartet wird, dann die aktive Aufgabe aus dem GPC 3518 entfernt und zum Pool anstehender Aufgaben zurückgegeben, während eine andere Aufgabe im Pool anstehender Aufgaben ausgewählt und zur Ausführung auf GPC 3518 geplant wird.
  • In mindestens einer Ausführungsform kommuniziert die Arbeitsverteilungseinheit 3514 mit einem oder mehreren GPCs 3518 über die XBar 3520. In mindestens einer Ausführungsform ist die XBar 3520 ein Zusammenschaltungsnetz, das viele Einheiten der PPU 3500 an andere Einheiten der PPU 3500 koppelt und dazu konfiguriert sein kann, die Arbeitsverteilungseinheit 3514 an einen konkreten GPC 3518 zu koppeln. In mindestens einer Ausführungsform können auch eine oder mehrere andere Einheiten der PPU 3500 über den Hub 3516 mit der XBar 3520 verbunden sein.
  • In mindestens einer Ausführungsform werden Tasks durch die Scheduler-Einheit 3512 verwaltet und durch die Arbeitsverteilungseinheit 3514 einem der GPCs 3518 zugeteilt. Der GPC 3518 ist dazu konfiguriert, Aufgaben zu verarbeiten und Ergebnisse zu erzeugen. In mindestens einer Ausführungsform können die Ergebnisse durch andere Tasks innerhalb des GPC 3518 verbraucht, über die XBar 3520 an einen anderen GPC 3518 geroutet oder in dem Speicher 3504 gespeichert werden. In mindestens einer Ausführungsform können die Ergebnisse über die Partitionseinheiten 3522, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten in den/aus dem Speicher 3504 implementieren, in den Speicher 3504 geschrieben werden. In mindestens einer Ausführungsform können die Ergebnisse über die Hochgeschwindigkeits-GPU-Zusammenschaltung 3508 an eine andere PPU 3504 oder CPU übertragen werden. In mindestens einer Ausführungsform beinhaltet die PPU 3500 ohne Einschränkung eine Anzahl U von Partitionseinheiten 3522, die gleich der Anzahl von getrennten und unterschiedlichen Speichervorrichtungen 3504 ist, die an die PPU 3500 gekoppelt sind. In mindestens einer Ausführungsform wird die Partitionseinheit 3522 nachfolgend in Verbindung mit 37 ausführlicher beschrieben.
  • In mindestens einer Ausführungsform führt ein Hostprozessor einen Treiber-Kernel aus, der eine Anwendungsprogrammierschnittstelle („API“) umsetzt, die es einer oder mehreren Anwendungen ermöglicht, die auf dem Hostprozessor ausgeführt werden, Operationen zur Ausführung auf der PPU 3500 zu planen. In mindestens einer Ausführungsform werden mehrere Rechenanwendungen simultan durch die PPU 3500 ausgeführt und die PPU 3500 stellt Isolierung, Dienstgüte (quality of service - „QoS“) und unabhängige Adressräume für mehrere Rechenanwendungen bereit. In mindestens einer Ausführungsform erzeugt eine Anwendung Anweisungen (z. B. in Form von API-Aufrufen), die den Treiberkernel veranlassen, eine oder mehrere Aufgaben zur Ausführung durch die PPU 3500 zu erzeugen, und der Treiberkernel gibt Aufgaben an einen oder mehrere Streams aus, die von der PPU 3500 verarbeitet werden. In mindestens einer Ausführungsform umfasst jeder Task eine oder mehrere Gruppen von verwandten Threads, die als Warp bezeichnet werden können. In mindestens einer Ausführungsform umfasst ein Warp eine Vielzahl von verwandten Threads (z. B. 32 Threads), die parallel ausgeführt werden kann. In mindestens einer Ausführungsform können sich kooperierende Threads auf eine Vielzahl von Threads beziehen, die Anweisungen zum Durchführen von Tasks beinhalten und die Daten durch einen gemeinsam genutzten Speicher austauschen. In mindestens einer Ausführungsform werden Threads und zusammenwirkende Threads gemäß mindestens einer Ausführungsform in Verbindung mit 37 ausführlicher beschrieben.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform wird der Deep-Learning-Anwendungsprozessor verwendet, um ein Modell des maschinellen Lernens, wie etwa ein neuronales Netz, zu trainieren, um der PPU 3500 bereitgestellte Informationen vorherzusagen oder abzuleiten. In mindestens einer Ausführungsform wird der Deep-Learning-Anwendungsprozessor 3500 verwendet, um Informationen auf Grundlage eines trainierten Modells des maschinellen Lernens (z. B. eines neuronalen Netzes) zu inferenzieren oder vorherzusagen, das durch einen anderen Prozessor oder ein anderes System oder durch die PPU 3500 trainiert wurde. In mindestens einer Ausführungsform kann die PPU 3500 verwendet werden, um einen oder mehrere der hierin beschriebenen Anwendungsfälle für neuronale Netze durchzuführen.
  • In mindestens einer Ausführungsform wird 35 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 36 veranschaulicht einen Universalverarbeitungscluster („GPC“) 3600 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform handelt es sich bei dem GPC 3600 um den GPC 3518 aus 35. In mindestens einer Ausführungsform beinhaltet jeder GPC 3600 ohne Einschränkung eine Anzahl von Hardware-Einheiten zum Verarbeiten von Tasks und beinhaltet jeder GPC 3600 ohne Einschränkung einen Pipelineverwalter 3602, eine Vor-Rasteroperationeneinheit (pre-raster operations unit - „preROP“) 3604, eine Raster-Engine 3608, eine Arbeitsverteilungskreuzschiene (work distribution crossbar - „WDX“) 3616, eine Speicherverwaltungseinheit („MMU“) 3618, einen oder mehrere Datenverarbeitungscluster (Data Processing Clusters - „DPCs“) 3606 und eine beliebige geeignete Kombination von Teilen.
  • In mindestens einer Ausführungsform wird der Betrieb des GPC 3600 durch den Pipelineverwalter 3602 gesteuert. In mindestens einer Ausführungsform verwaltet der Pipelineverwalter 3602 die Konfiguration eines oder mehrerer DPCs 3606 für die Verarbeitung von Tasks, die dem GPC 3600 zugewiesen sind. In mindestens einer Ausführungsform konfiguriert der Pipelineverwalter 3602 mindestens einen von einem oder mehreren DPCs 3606 dazu, mindestens einen Abschnitt einer Grafik-Rendering-Pipeline zu implementieren. In mindestens einer Ausführungsform ist der DPC 3606 dazu konfiguriert, ein Vertex-Shader-Programm auf einem programmierbaren Streaming-Multiprozessor (streaming multi-processor - „SM“) 3614 auszuführen. In mindestens einer Ausführungsform ist der Pipelineverwalter 3602 so konfiguriert, dass er die von einer Arbeitsverteilungseinheit empfangenen Pakete an zweckmäßige logische Einheiten innerhalb des GPC 3600 routet, und in mindestens einer Ausführungsform können einige Pakete an Festfunktions-Hardwareeinheiten in dem preROP 3604 und/oder der Raster-Engine 3608 geroutet werden, während andere Pakete zum Verarbeiten durch eine Primitiv-Engine 3612 oder den SM 3614 an die DPCs 3606 geroutet werden können. In mindestens einer Ausführungsform konfiguriert der Pipelineverwalter 3602 mindestens einen der DPCs 3606 zum Implementieren eines Modells eines neuronalen Netzes und/oder einer Rechenpipeline.
  • In mindestens einer Ausführungsform ist die preROP-Einheit 3604 so konfiguriert, dass sie in mindestens einer Ausführungsform die durch die Raster-Engine 3608 und die DPCs 3606 erzeugten Daten an eine Einheit für Rasteroperationen (Raster Operations - „ROP“) in der Partitionseinheit 3522 routet, die vorstehend in Verbindung mit 35 detaillierter beschrieben ist. In mindestens einer Ausführungsform ist die PROP-Einheit 3604 dazu konfiguriert, Optimierungen für die Farbmischung durchzuführen, Pixeldaten zu organisieren, Adressübersetzungen durchzuführen und mehr. In mindestens einer Ausführungsform beinhaltet die Raster-Engine 3608 ohne Einschränkung eine Anzahl von Festfunktions-Hardwareeinheiten, die so konfiguriert sind, dass sie verschiedene Rasteroperationen durchführen, und in mindestens einer Ausführungsform beinhaltet die Raster-Engine 3608 ohne Einschränkung eine Setup-Engine, eine Grobraster-Engine, eine Culling-Engine, eine Clipping-Engine, eine Feinraster-Engine, eine Kachelverschmelzungs-Engine und eine beliebige geeignete Kombination davon. In mindestens einer Ausführungsform empfängt die Einrichtungsengine transformierte Scheitelpunkte und erzeugt Ebenengleichungen, die mit geometrischen Primitiven verbunden sind, die durch Scheitelpunkte definiert sind; werden Ebenengleichungen an eine Grobrasterengine übermittelt, um Abdeckungsinformationen (z. B. eine x, y-Abdeckungsmaske für eine Kachel) für Primitive zu erzeugen; wird die Ausgabe der Grobrasterengine an eine Ausleseengine übermittelt, wo Fragmente, die mit Primitiven verbunden sind, die einen Z-Test nicht bestehen, aussortiert werden, und an eine Zuschneideengine übermittelt werden, wo Fragmente, die außerhalb eines Sichtkegels liegen, abgeschnitten werden. In mindestens einer Ausführungsform werden Fragmente, die das Ausschneiden und die Auslese überleben, an eine Feinrasterengine übergeben, um Attribute für Pixelfragmente auf Grundlage von Ebenengleichungen zu erzeugen, die von der Einrichtungsengine erzeugt werden. In mindestens einer Ausführungsform umfasst die Ausgabe der Rasterengine 3608 Fragmente, die von einer beliebigen geeigneten Entität verarbeitet werden sollen, wie etwa von einem innerhalb des DPC 3606 umgesetzten Fragment-Shader.
  • In mindestens einer Ausführungsform umfasst jeder DPC 3606, der in dem GPC 3600 enthalten ist, ohne Einschränkung eine M-Pipe-Steuerung (M-Pipe Controller - „MPC“) 3610; die Primitiv-Engine 3612; einen oder mehrere SMs 3614 und eine beliebige geeignete Kombination davon. In mindestens einer Ausführungsform steuert die MPC 3610 den Betrieb des DPC 3606 und routet von dem Pipelineverwalter 3602 empfangene Pakete an die entsprechenden Einheiten in dem DPC 3606. In mindestens einer Ausführungsform werden Pakete, die mit einem Vertex assoziiert sind, an die Primitiv-Engine 3612 geroutet, die so konfiguriert ist, dass sie Vertexattribute, die mit einem Vertex assoziiert sind, aus dem Speicher abruft; im Gegensatz dazu können Pakete, die mit einem Shader-Programm assoziiert sind, an den SM 3614 übertragen werden.
  • In mindestens einer Ausführungsform umfasst der SM 3614 ohne Einschränkung einen programmierbaren Streaming-Prozessor, der so konfiguriert ist, dass er Tasks verarbeitet, die durch eine Anzahl von Threads dargestellt sind. In mindestens einer Ausführungsform weist der SM 3614 mehrere Threads auf und ist so konfiguriert, dass er eine Vielzahl von Threads (z. B. 32 Threads) aus einer konkreten Gruppe von Threads nebenläufig ausführt und eine Single-Instruction-Multiple-Data-(„SIMD“-)Architektur implementiert, bei der jeder Thread in einer Gruppe von Threads (z. B. ein Warp) so konfiguriert ist, dass er einen anderen Datensatz auf Grundlage des gleichen Anweisungssatzes verarbeitet. In mindestens einer Ausführungsform führen alle Threads in der Gruppe von Threads dieselben Anweisungen aus. In mindestens einer Ausführungsform setzt der SM 3614 eine Einzelbefehls-Mehrfachthread-(„SIMT“)-Architektur um, wobei jeder Thread in einer Gruppe von Threads dazu konfiguriert ist, einen anderen Datensatz auf Grundlage desselben Anweisungssatzes zu verarbeiten, wobei jedoch einzelne Threads in einer Gruppe von Threads während der Ausführung abweichen dürfen. In mindestens einer Ausführungsform werden ein Programmzähler, ein Aufrufstapel und ein Ausführungszustand für jeden Warp aufrechterhalten, was eine Gleichzeitigkeit zwischen Warps und eine serielle Ausführung innerhalb von Warps ermöglicht, wenn Threads innerhalb des Warps abweichen. In einer anderen Ausführungsform werden ein Programmzähler, ein Aufrufstapel und ein Ausführungszustand für jeden einzelnen Thread aufrechterhalten, was eine gleichberechtigte Gleichzeitigkeit zwischen allen Threads innerhalb und zwischen Warps ermöglicht. In mindestens einer Ausführungsform wird der Ausführungszustand für jeden einzelnen Thread aufrechterhalten, und Threads, die dieselben Anweisungen ausführen, können zusammengeführt und für eine bessere Effizienz parallel ausgeführt werden. Mindestens eine Ausführungsform des SM 3614 ist nachfolgend ausführlicher beschrieben.
  • In mindestens einer Ausführungsform stellt die MMU 3618 eine Schnittstelle zwischen dem GPC 3600 und einer Speicherpartitionseinheit (z. B. der Partitionseinheit 3522 aus 35) bereit und stellt die MMU 3618 Übersetzung virtueller Adressen in physische Adressen, Speicherschutz und Vermittlung von Speicheranforderungen bereit. In mindestens einer Ausführungsform stellt die MMU 3618 einen oder mehrere Adressenübersetzungspuffer („TLBs“) zum Durchführen der Übersetzung von virtuellen Adressen in physische Adressen in Speicher bereit.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Inferenz- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform wird der Deep-Learning-Anwendungsprozessor verwendet, um ein Modell des maschinellen Lernens, wie etwa ein neuronales Netz, zu trainieren, um dem GPC 3600 bereitgestellte Informationen vorherzusagen oder zu inferenzieren. In mindestens einer Ausführungsform wird der GPC 3600 verwendet, um Informationen auf Grundlage eines trainierten Modells des maschinellen Lernens (z. B. eines neuronalen Netzes) zu inferenzieren oder vorherzusagen, das durch einen anderen Prozessor oder ein anderes System oder durch den GPC 3600 trainiert wurde. In mindestens einer Ausführungsform kann der GPC 3600 verwendet werden, um einen oder mehrere der hierin beschriebenen Anwendungsfälle für neuronale Netze durchzuführen.
  • In mindestens einer Ausführungsform wird 36 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • 37 veranschaulicht eine Speicherpartitionseinheit 3700 einer Parallelverarbeitungseinheit („PPU“) gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform beinhaltet die Speicherpartitionseinheit 3700 ohne Einschränkung eine Einheit 3702 für Rasteroperationen („ROP“), einen Level-Zwei-(„L2“- )Cache 3704, eine Speicherschnittstelle 3706 und eine beliebige geeignete Kombination davon. Die Speicherschnittstelle 3706 ist mit dem Speicher gekoppelt. Die Speicherschnittstelle 3706 kann 32-, 64-, 128-, 1024-Bit-Datenbusse oder Ähnliches für die Hochgeschwindigkeitsdatenübertragung implementieren. In mindestens einer Ausführungsform integriert die PPU U-Speicherschnittstellen 3706, eine Speicherschnittstelle 3706 pro Paar von Partitionseinheiten 3700, wobei jedes Paar von Partitionseinheiten 3700 mit einer entsprechenden Speichervorrichtung verbunden ist. In mindestens einer Ausführungsform kann die PPU zum Beispiel mit bis zu Y Speichervorrichtungen verbunden sein, wie etwa mit Speicherstapeln mit hoher Bandbreite oder mit einem synchronen dynamischen Direktzugriffsspeicher mit Graphics-Double-Data-Rate-Version 5 („GDDR5-SDRAM“).
  • In mindestens einer Ausführungsform setzt die Speicherschnittstelle 3706 eine Speicherschnittstelle der zweiten Generation mit hoher Bandbreite (high bandwidth memory second generation - „HBM2“) um und Y ist gleich der Hälfte von U. In mindestens einer Ausführungsform befinden sich die HBM2-Speicherstapel auf demselben physischen Gehäuse wie die PPU, was erhebliche Leistungs- und Flächeneinsparungen im Vergleich zu herkömmlichen GDDR5-SDRAM-Systemen bereitstellt. In mindestens einer Ausführungsform beinhaltet jeder HBM2-Stapel ohne Einschränkung vier Speichermatrizen und Y ist gleich 4, wobei jeder HBM2-Stapel zwei 128-Bit-Kanäle pro Matrize für insgesamt 8 Kanäle und eine Datenbusbreite von 1024 Bit beinhaltet. In mindestens einer Ausführungsform unterstützt der Speicher Einzelfehlerkorrektur-Doppelfehlererfassungs-(Single-Error Correcting Double-Error Detecting - „SECDED“-)Fehlerkorrekturcode (Error Correction Code - „ECC“), um Daten zu schützen. Der ECC stellt eine höhere Zuverlässigkeit für Rechenanwendungen bereit, die empfindlich auf Datenkorruption reagieren.
  • In mindestens einer Ausführungsform implementiert die PPU eine Speicherhierarchie mit mehreren Levels. In mindestens einer Ausführungsform unterstützt die Speicherpartitionseinheit 3700 einen einheitlichen Speicher, um einen einzelnen einheitlichen virtuellen Adressraum für den Speicher der zentralen Verarbeitungseinheit („CPU“) und der PPU bereitzustellen, wodurch die gemeinsame Nutzung von Daten zwischen virtuellen Speichersystemen ermöglicht wird. In mindestens einer Ausführungsform wird die Häufigkeit von Zugriffen durch eine PPU auf einen 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 einer Ausführungsform unterstützt die Hochgeschwindigkeits-GPU-Verbindung 3508 Adressübersetzungsdienste, die es der PPU ermöglichen, direkt auf die Seitentabellen einer CPU zuzugreifen, und den vollen Zugriff auf den CPU-Speicher durch die PPU bereitzustellen.
  • In mindestens einer Ausführungsform übermitteln Kopier-Engines Daten zwischen mehreren PPUs oder zwischen PPUs und CPUs. In mindestens einer Ausführungsform können Kopierengines Seitenfehler für Adressen erzeugen, die nicht Seitentabellen zugeordnet sind, und die Speicherpartitionseinheit 3700 bedient dann Seitenfehler, indem sie Adressen Seitentabellen zuordnet, wonach die Kopierengine die Übertragung durchführt. In mindestens einer Ausführungsform ist der Speicher für mehrere Kopier-Engine-Operationen zwischen mehreren Prozessoren gepinnt (d. h. nicht auslagerbar), was den verfügbaren Speicher erheblich reduziert. In mindestens einer Ausführungsform können bei Hardwareseitenfehlern Adressen an Kopierengines weitergegeben werden, ohne Rücksicht darauf, ob Speicherseiten resident sind, und der Kopierprozess ist transparent.
  • Daten aus dem Speicher 3504 aus 35 oder einem anderen Systemspeicher werden gemäß mindestens einer Ausführungsform durch die Speicherpartitionseinheit 3700 abgerufen und in L2-Cache 3704 gespeichert, der sich auf dem Chip befindet und von verschiedenen GPCs gemeinsam genutzt wird. Jede Speicherpartitionseinheit 3700 beinhaltet in mindestens einer Ausführungsform ohne Einschränkung mindestens einen Abschnitt des L2-Caches, der mit einer entsprechenden Speichervorrichtung assoziiert ist. In mindestens einer Ausführungsform sind die Caches der unteren Levels in verschiedenen Einheiten innerhalb der GPCs implementiert. In mindestens einer Ausführungsform kann jeder der SMs 3614 einen Zwischenspeicher der Ebene eins („LI“) umsetzen, wobei der L1-Zwischenspeicher ein privater Speicher ist, der einem bestimmten SM 3614 gewidmet ist, und Daten aus dem L2-Zwischenspeicher 3704 werden abgerufen und in jedem der L1-Zwischenspeicher zur Verarbeitung in Funktionseinheiten der SMs 3614 gespeichert. In mindestens einer Ausführungsform ist der L2-Zwischenspeicher 3704 an die Speicherschnittstelle 3706 und XBar 3520 gekoppelt.
  • In mindestens einer Ausführungsform führt die ROP-Einheit 3702 Grafikrasteroperationen durch, die mit der Pixelfarbe in Bezug stehen, wie etwa Farbkomprimierung, Pixel-Blending und mehr. In mindestens einer Ausführungsform implementiert die ROP-Einheit 3702 die Tiefenprüfung in Verbindung mit der Raster-Engine 3608, wobei sie eine Tiefe für eine Abtaststelle, die mit einem Pixelfragment assoziiert ist, von einer Culling-Engine der Raster-Engine 3608 empfängt. In mindestens einer Ausführungsform wird die Tiefe gegen eine entsprechende Tiefe in einem Tiefenpuffer für einen dem Fragment zugeordneten Abtastort getestet. Wenn in mindestens einer Ausführungsform das Fragment den Tiefentest für den Abtastort besteht, dann aktualisiert die ROP-Einheit 3702 den Tiefenpuffer und übermittelt ein Ergebnis des Tiefentests an die Rasterengine 3608. Es versteht sich, dass die Anzahl der Partitionseinheiten 3700 von der Anzahl der GPCs verschieden sein kann und daher jede ROP-Einheit 3702 in mindestens einer Ausführungsform an jede der GPCs gekoppelt sein kann. In mindestens einer Ausführungsform verfolgt die ROP-Einheit 3702 Pakete, die von verschiedenen GPCs empfangen werden, und bestimmt, an welche ein von der ROP-Einheit 3702 erzeugtes Ergebnis durch die XBar 3520 weitergeleitet wird.
  • 38 veranschaulicht einen Streaming-Multiprozessor („SM“) 3800 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist der SM 3800 der SM aus 36. In mindestens einer Ausführungsform beinhaltet der SM 3800 ohne Einschränkung einen Anweisungszwischenspeicher 3802; eine oder mehrere Planereinheiten 3804; eine Registerdatei 3808; einen oder mehrere Verarbeitungskerne („Kerne“) 3810; eine oder mehrere Sonderfunktionseinheiten (special function units - „SFUs“) 3812; eine oder mehrere Lade-/Speichereinheiten („LSUs“) 3814; ein Verbindungsnetzwerk 3816; einen gemeinsam genutzten Speicher/Ebene-1-Zwischenspeicher („LI“) 3818; und eine beliebige geeignete Kombination davon. In mindestens einer Ausführungsform versendet eine Arbeitsverteilungseinheit Aufgaben zur Ausführung auf allgemeinen Verarbeitungsclustern („GPCs“) von Parallelverarbeitungseinheiten („PPUs“) und jede Aufgabe wird einem bestimmten Datenverarbeitungscluster („DPC“) innerhalb eines GPC zugewiesen und, wenn die Aufgabe einem Shader-Programm verbunden ist, wird die Aufgabe einem der SMs 3800 zugewiesen. In mindestens einer Ausführungsform empfängt die Planereinheit 3804 Aufgaben von der Arbeitsverteilungseinheit und verwaltet die Anweisungsplanung für einen oder mehrere Thread-Blöcke, die dem SM 3800 zugewiesen sind. In mindestens einer Ausführungsform plant die Scheduler-Einheit 3804 Thread-Blöcke für die Ausführung als Warps aus parallelen Threads, wobei jedem Thread-Block mindestens ein Warp zugewiesen ist. In mindestens einer Ausführungsform führt jeder Warp Threads aus. In mindestens einer Ausführungsform verwaltet die Scheduler-Einheit 3804 eine Vielzahl von unterschiedlichen Thread-Blöcken, indem sie unterschiedlichen Thread-Blöcken Warps zuweist und dann während jedes Taktzyklus Anweisungen aus einer Vielzahl von unterschiedlichen kooperativen Gruppen verschiedenen funktionellen Einheiten (z. B. Verarbeitungskernen 3810, SFUs 3812 und LSUs 3814) zuteilt.
  • In mindestens einer Ausführungsform können sich kooperative Gruppen auf ein Programmiermodell zum Organisieren von Gruppen kommunizierender Threads beziehen, das es Entwicklern erlaubt, die Granularität auszudrücken, mit der Threads kommunizieren, und so den Ausdruck satterer, effizienterer paralleler Dekompositionen ermöglicht. In mindestens einer Ausführungsform unterstützen kooperative Start-APIs die Synchronisation zwischen Thread-Blöcken zur Ausführung paralleler Algorithmen. In mindestens einer Ausführungsform stellen Anwendungen herkömmlicher Programmiermodelle ein einzelnes, einfaches Konstrukt zum Synchronisieren von kooperierenden Threads bereit: eine Sperre über alle Threads eines Thread-Blocks (z. B. die Funktion syncthreads( )). In mindestens einer Ausführungsform können Programmierer jedoch Gruppen von Threads mit einer geringeren als Thread-Block-Granularität definieren und innerhalb definierter Gruppen synchronisieren, um eine höhere Rechenleistung, Ausgestaltungsflexibilität und Software-Wiederverwendung in Form von kollektiven gruppenweiten Funktionsschnittstellen zu ermöglichen. In mindestens einer Ausführungsform ermöglichen es kooperative Gruppen Programmierern, Gruppen von Threads explizit auf Teilblock- (d. h. so klein wie ein einzelner Thread) und Mehrblock-Granularität zu definieren und kollektive Operationen, wie zum Beispiel Synchronisation, an Threads in einer kooperativen Gruppe durchzuführen. Das Programmierungsmodell unterstützt eine saubere Komposition über Software-Grenzen hinweg, sodass sich Bibliotheken und Utility-Funktionen innerhalb ihres lokalen Kontexts sicher synchronisieren können, ohne Annahmen zu Konvergenz treffen zu müssen. In mindestens einer Ausführungsform ermöglichen Primitive der kooperativen Gruppen neue Muster der kooperativen Parallelität, einschließlich, aber nicht beschränkt auf, Produzent-Konsument-Parallelität, opportunistischer Parallelität und globaler Synchronisation über ein gesamtes Gitter von Thread-Blöcken.
  • In mindestens einer Ausführungsform ist eine Versendeeinheit 3806 dazu konfiguriert, Anweisungen an eine oder mehrere der funktionellen Einheiten zu übermitteln, und die Planereinheit 3804 beinhaltet ohne Einschränkung zwei Versendeeinheiten 3806, die es zwei unterschiedlichen Anweisungen desselben Warps ermöglichen, während jedes Taktzyklus versendet zu werden. In mindestens einer Ausführungsform beinhaltet jede Scheduler-Einheit 3804 eine einzelne Zuteilungseinheit 3806 oder zusätzliche Zuteilungseinheiten 3806.
  • In mindestens einer Ausführungsform beinhaltet jeder SM 3800 in mindestens einer Ausführungsform ohne Einschränkung die Registerbank 3808, die einen Satz von Registern für funktionelle Einheiten des SM 3800 bereitstellt. In mindestens einer Ausführungsform wird die Registerdatei 3808 derartig zwischen jeder der funktionellen Einheiten aufgeteilt, dass jeder funktionellen Einheit ein dedizierter Teil der Registerdatei 3808 zugewiesen wird. In mindestens einer Ausführungsform ist die Registerbank 3808 auf unterschiedliche Warps aufgeteilt, die durch den SM 3800 ausgeführt werden, und die Registerbank 3808 stellt temporären Datenspeicher für Operanden bereit, die mit Datenpfaden von funktionellen Einheiten verbunden sind. In mindestens einer Ausführungsform umfasst jeder SM 3800 ohne Einschränkung eine Vielzahl von L Verarbeitungskernen 3810. In mindestens einer Ausführungsform beinhaltet der SM 3800 ohne Einschränkung eine große Anzahl (z. B. 128 oder mehr) von unterschiedlichen Verarbeitungskernen 3810. In mindestens einer Ausführungsform beinhaltet jeder Verarbeitungskern 3810 in mindestens einer Ausführungsform ohne Einschränkung eine vollständig gepipelinete Verarbeitungseinheit mit einfacher Genauigkeit, doppelter Genauigkeit und/oder gemischter Genauigkeit, die ohne Einschränkung eine arithmetische Gleitkommalogikeinheit und eine arithmetische Ganzzahllogikeinheit beinhaltet. In mindestens einer Ausführungsform implementieren die arithmetisch-logischen Einheiten für Gleitkommazahlen den Standard IEEE 754-2008 für Gleitkommaarithmetik. In mindestens einer Ausführungsform beinhalten die Verarbeitungskerne 3810 ohne Einschränkung 64 Gleitkommakerne mit einfacher Genauigkeit (32 Bit), 64 Integerkerne, 32 Gleitkommakerne mit doppelter Genauigkeit (64 Bit) und 8 Tensorkerne.
  • Tensorkerne sind gemäß mindestens einer Ausführungsform dazu konfiguriert, Matrixoperationen durchzuführen. In mindestens einer Ausführungsform sind ein oder mehrere Tensorkerne in den Verarbeitungskernen 3810 enthalten. In mindestens einer Ausführungsform sind die Tensorkerne so konfiguriert, dass sie Deep-Learning-Matrixarithmetik durchführen, wie etwa Faltungsoperationen zum Trainieren und Inferenzieren neuronaler Netze. In mindestens einer Ausführungsform arbeitet jeder Tensorkern auf 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 einer Ausführungsform sind die Matrixmultiplikationseingänge A und B 16-Bit-Gleitkomma-Matrizen und die Akkumulationsmatrizen C und D sind 16-Bit-Gleitkomma- oder 32-Bit-Gleitkomma-Matrizen. In mindestens einer Ausführungsform arbeiten die Tensorkerne an 16-Bit-Gleitkommaeingabedaten mit 32-Bit-Gleitkommaakkumulation. In mindestens einer Ausführungsform verwendet die 16-Bit-Gleitkommamultiplikation 64 Operationen und ergibt ein Produkt mit voller Genauigkeit, das dann unter Verwendung von 32-Bit-Gleitkommaaddition mit anderen Zwischenprodukten für eine 4x4x4-Matrixmultiplikation akkumuliert wird. In mindestens einer Ausführungsform werden Tensorkerne verwendet, um viel größere zweidimensionale oder höherdimensionale Matrixoperationen durchzuführen, die aus diesen kleineren Elementen aufgebaut sind. In mindestens einer Ausführungsform legt eine API, wie etwa die CUDA 9 C++-API, spezielle Matrixlade-, Matrixmultiplizier- und -akkumulations- und Matrixspeicheroperationen offen, um Tensorkerne aus einem CUDA-C++-Programm effizient zu verwenden. In mindestens einer Ausführungsform geht die Warp-Ebenen-Schnittstelle auf CUDA-Ebene von 16×16 großen Matrizen aus, die alle 32 Warp-Threads überspannen.
  • In mindestens einer Ausführungsform umfasst jeder SM 3800 ohne Einschränkung M SFUs 3812, die Spezialfunktionen durchführen (z. B. Attributbewertung, reziproke Quadratwurzel und dergleichen). In mindestens einer Ausführungsform beinhalten die SFUs 3812 ohne Einschränkung eine Baumtraversierungseinheit, die so konfiguriert ist, dass sie eine hierarchische Baumdatenstruktur traversiert. In mindestens einer Ausführungsform beinhalten die SFUs 3812 ohne Einschränkung eine Textureinheit, die dazu konfiguriert ist, Texturkartenfilteroperationen durchzuführen. In mindestens einer Ausführungsform sind die Textureinheiten dazu konfiguriert, Texturkarten (z. B. ein 2D-Array von Texeln) aus Speicher zu laden und Texturkarten abzutasten, um abgetastete Texturwerte zur Verwendung in Shader-Programmen zu produzieren, die durch den SM 3800 ausgeführt werden. In mindestens einer Ausführungsform werden die Texturkarten in dem gemeinsam genutzten Speicher/L1-Cache 3818 gespeichert. In mindestens einer Ausführungsform implementieren die Textureinheiten Texturoperationen, wie etwa Filteroperationen unter Verwendung von Mip-Karten (z. B. Texturkarten mit variierenden Detailgraden), gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform beinhaltet jeder SM 3800 ohne Einschränkung zwei Textureinheiten.
  • Jeder SM 3800 umfasst in mindestens einer Ausführungsform ohne Einschränkung N LSUs 3814, die Lade- und Speicheroperationen zwischen dem gemeinsam genutzten Speicher/L1-Cache 3818 und der Registerbank 3808 implementieren. Jeder SM 3800 beinhaltet ohne Einschränkung ein Verbindungsnetzwerk 3816, das in mindestens einer Ausführungsform jede der Funktionseinheiten mit der Registerdatei 3808 und die LSU 3814 mit der Registerdatei 3808 und dem gemeinsam genutzten Speicher/L1-Zwischenspeicher 3818 verbindet. In mindestens einer Ausführungsform ist das Verbindungsnetzwerk 3816 eine Crossbar, die dazu konfiguriert sein kann, eine beliebige der funktionellen Einheiten mit einem beliebigen der Register in der Registerdatei 3808 zu verbinden und die LSUs 3814 mit der Registerdatei 3808 und Speicherstellen im gemeinsam genutzten Speicher/L1-Zwischenspeicher 3818 zu verbinden.
  • In mindestens einer Ausführungsform ist der gemeinsam genutzte Speicher/L1-Cache 3818 ein Array von chipinternem Speicher, das in mindestens einer Ausführungsform die Datenspeicherung und die Kommunikation zwischen dem SM 3800 und der Primitiv-Engine sowie zwischen Threads in dem SM 3800 ermöglicht. In mindestens einer Ausführungsform umfasst der gemeinsam genutzte Speicher/L1-Zwischenspeicher 3818 ohne Einschränkung eine Speicherkapazität von 128 KB und befindet sich im Pfad vom SM 3800 zur Partitionseinheit. In mindestens einer Ausführungsform wird der gemeinsam genutzte Speicher/L1-Cache 3818 in mindestens einer Ausführungsform zum Zwischenspeichern von Lese- und Schreiboperationen verwendet. In mindestens einer Ausführungsform sind einer oder mehrere von dem gemeinsam genutzten Speicher/L1-Cache 3818, L2-Cache und Speicher Ergänzungsspeicher.
  • Das Kombinieren der Funktionalität des Daten-Cache und des gemeinsam genutzten Speichers in einem einzelnen Speicherblock stellt in mindestens einer Ausführungsform eine verbesserte Rechenleistung für beide Typen von Speicherzugriffen bereit. In mindestens einer Ausführungsform wird die Kapazität von Programmen, die keinen gemeinsam genutzten Speicher verwenden, als ein Zwischenspeicher verwendet oder kann als ein Zwischenspeicher verwendet werden, wie etwa, wenn der gemeinsam genutzte Speicher dazu konfiguriert ist, die Hälfte der Kapazität zu verwenden, und Textur- und Lade-/Speicheroperationen können die verbleibende Kapazität verwenden. Die Integration in den gemeinsam genutzten Speicher/L1-Cache 3818 ermöglicht dem gemeinsam genutzten Speicher/L1-Cache 3818 gemäß mindestens einer Ausführungsform das Fungieren als Leitung mit hohem Durchsatz für Streaming-Daten, während simultan Zugriff mit hoher Bandbreite und niedriger Latenz auf häufig wiederverwendete Daten bereitgestellt wird. In mindestens einer Ausführungsform kann bei einer Konfiguration für Universalparallelberechnung eine einfachere Konfiguration im Vergleich zur Grafikverarbeitung verwendet werden. In mindestens einer Ausführungsform werden Grafikverarbeitungseinheiten mit feststehender Funktion umgangen, wodurch ein viel einfacheres Programmiermodell erzeugt wird. In einer Konfiguration für parallele Berechnungen für allgemeine Zwecke weist die Arbeitsverteilungseinheit in mindestens einer Ausführungsform Blöcke von Threads direkt zu DPCs zu und verteilt sie. In mindestens einer Ausführungsform führen Threads in einem Block dasselbe Programm unter Verwendung einer eindeutigen Thread-ID bei der Berechnung aus, um sicherzustellen, dass jeder Thread eindeutige Ergebnisse erzeugt, unter Verwendung von SM 3800, um Programme auszuführen und Berechnungen durchzuführen, gemeinsam genutztem Speicher/L1-Zwischenspeicher 3818, um zwischen Threads zu kommunizieren, und LSU 3814, um globalen Speicher über den gemeinsam genutzten Speicher/Ll -Zwischenspeicher 3818 und die Speicherpartitionseinheit auszulesen und zu schreiben. Bei der Konfiguration für Universalparallelberechnungen schreibt der SM 3800 in mindestens einer Ausführungsform Befehle, die durch die Scheduler-Einheit 3804 verwendet werden können, um neue Arbeit in den DPCs zu starten.
  • In mindestens einer Ausführungsform ist die PPU in Folgendem beinhaltet: einem Desktop-Computer, einem Laptop-Computer, einem Tablet-Computer, Servern, Supercomputern, einem Smartphone (z. B. einer drahtlosen tragbaren Vorrichtung), einem persönlichen digitalen Assistenten („PDA“), einer Digitalkamera, einem Fahrzeug, einer am Kopf befestigten Anzeige, einer tragbaren elektronischen Vorrichtung und mehr. In mindestens einer Ausführungsform ist die PPU auf einem einzelnen Halbleitersubstrat realisiert. In mindestens einer Ausführungsform ist die PPU in einem System auf einem Chip („SoC“) zusammen mit einer oder mehreren anderen Vorrichtungen beinhaltet, wie etwa zusätzliche PPUs, Speicher, einer CPU mit verringertem Anweisungssatz („RISC“), einer Speicherverwaltungseinheit („MMU“), einem Digital-Analog-Wandler („DAC“) und dergleichen.
  • In mindestens einer Ausführungsform kann die PPU auf einer Grafikkarte beinhaltet sein, die ein oder mehrere Speichervorrichtungen beinhaltet. Eine Grafikkarte kann dazu konfiguriert sein, mit einem PCIe-Steckplatz auf einem Motherboard eines Desktop-Computers verbunden zu sein. In mindestens einer Ausführungsform kann die PPU eine integrierte Grafikverarbeitungseinheit (integrated graphics processing unit - „iGPU“) sein, die im Chipsatz des Motherboards beinhaltet ist.
  • Die Ableitungs- und/oder Trainingslogik 1015 wird verwendet, um Ableitungs- und/oder Trainingsoperationen durchzuführen, die mit einer oder mehreren Ausführungsformen assoziiert sind. Details bezüglich der Ableitungs- und/oder Trainingslogik 1015 sind unten in Verbindung mit den 10A und/oder 10B bereitgestellt. In mindestens einer Ausführungsform wird der Deep-Learning-Anwendungsprozessor verwendet, um ein Modell des maschinellen Lernens, wie etwa ein neuronales Netz, zu trainieren, um dem SM 3800 bereitgestellte Informationen vorherzusagen oder zu inferenzieren. In mindestens einer Ausführungsform wird der SM 3800 verwendet, um Informationen auf Grundlage eines trainierten Modells des maschinellen Lernens (z. B. eines neuronalen Netzes) zu inferenzieren oder vorherzusagen, das durch einen anderen Prozessor oder ein anderes System oder durch den SM 3800 trainiert wurde. In mindestens einer Ausführungsform kann der SM 3800 verwendet werden, um einen oder mehrere der hierin beschriebenen Anwendungsfälle für neuronale Netze durchzuführen.
  • In mindestens einer Ausführungsform wird 38 verwendet, um Techniken zu implementieren, die in Verbindung mit 1-9 beschrieben wurden, um allgemeine Matrix-Matrix-Multiplikationsoperationen zu erkennen und zu optimieren.
  • Mindestens eine Ausführungsform der Offenbarung kann im Hinblick auf die folgenden Absätze beschrieben werden:
    • Absatz 1. Prozessor, der Folgendes umfasst:
      • eine oder mehrere Datenabrufschaltungen zum Abrufen von Daten, die einer oder mehreren Matrixoperationen entsprechen, bevor die ein oder mehreren Matrixoperationen vom Prozessor abgerufen werden.
    • Absatz 2. Prozessor nach Absatz 1, wobei die eine oder die mehreren Datenabrufschaltungen zum Abrufen der Daten, die dem einen oder den mehreren Matrixoperationen entsprechen, bevor die eine oder die mehreren Matrixoperationen vom Prozessor abgerufen werden, mindestens zu Folgendem dienen:
      • Erkennen, anhand des Quellcodes, einer oder mehrere sich gegenseitig ausschließende Vielzahl von Operationen, die einer oder mehreren sich gegenseitig ausschließenden Vielzahl von Datenabfragen entsprechen;
      • Erkennen, anhand des Quellcodes, struktureller Informationen über die Vielzahl der Operationen und die Vielzahl der Datenabrufe;
      • Bestimmen, mindestens teilweise auf der Grundlage der strukturellen Informationen der einen oder mehreren Matrixoperationen und des einen oder der mehreren Datenabrufe, einer Art und Weise, in der mehrere Teile der Daten geladen werden; und
      • Generieren von ausführbarem Code gemäß der bestimmten Weise, der, wenn er ausgeführt wird, bewirkt, dass die eine oder mehreren Datenabrufschaltungen die Daten abrufen, bevor die eine oder mehreren Matrixoperationen durch den Prozessor abgerufen werden.
    • Absatz 3. Prozessor nach Absatz 2, wobei die eine oder mehreren Datenabrufschaltungen zum Erkennender Strukturinformationen der einen oder mehreren Matrixoperationen aus dem Quellcode mindestens zu Folgendem dienen:
      • Erkennen von mehreren Multiplikations- und Additionsoperationen der einen oder mehreren Matrixoperationen aus dem Quellcode;
      • Erkennen einer Vielzahl von Datenabrufen, die der einen oder den mehreren Operationen entsprechen, aus dem Quellcode;
      • Erkennen einer Vielzahl von sich gegenseitig ausschließenden Sammlungen von Multiplikations- und Additionsoperationen und einer entsprechenden sich gegenseitig ausschließenden Sammlung von LadeOperationen aus der Vielzahl von Multiplikations- und Additionsoperationen; und
      • Erkennen einer Reihenfolge dieser sich gegenseitig ausschließenden Sammlungen von Operationen.
    • Absatz 4. Prozessor nach Absatz 2 oder 3, wobei eine Art des Ladens der Vielzahl von Abschnitten der Daten Abhängigkeiten, die einen Compiler veranlassen, Anweisungen zum Abrufen von Abschnitten der Daten mit Anweisungen zum Berechnen von Unteroperationen der einen oder mehreren Matrixoperationen zu verschachteln.
    • Absatz 5. Prozessor nach einem der Absätze 2-4, wobei der Quellcode ein von Menschen lesbarer Code mit einer Syntax gemäß einer kompilierten Sprache ist.
    • Absatz 6. Prozessor nach einem der Absätze 1-5, wobei die eine oder mehrere Matrixoperationen mindestens eine allgemeine Matrix-Matrix-Multiplikation (GEMM) umfassen.
    • Absatz7. System, das Folgendes umfasst:
      • einen oder mehrere Speicher; und
      • eine oder mehrere Datenabrufschaltungen zum Abrufen von Daten, die einem oder mehreren Matrixoperationen entsprechen, bevor die ein oder mehreren Matrixoperationen vom Prozessor abgerufen werden.
    • Absatz 8. System nach Absatz 7, wobei der eine oder die mehreren Prozessoren zum Abrufen der Daten, die dem einen oder den mehreren Matrixoperationen entsprechen, bevor die eine oder die mehreren Matrixoperationen von dem einen oder den mehreren Prozessoren abgerufen werden, mindestens zu Folgendem dienen:
      • Bestimmen von Strukturinformationen der einen oder mehreren Matrixoperationen; und
      • Bestimmen einer Art und Weise, in der ausführbare Anweisungen zum Abrufen von Teilen der Daten und ausführbare Anweisungen von Unteroperationen der einen oder mehreren Matrixoperationen zu verschachteln sind, die unter Verwendung von zumindest den Abschnitten der Daten auszuführen sind.
    • Absatz 9. System nach Absatz 8, wobei die Strukturinformationen der einen oder mehreren Matrixoperationen Folgendes umfassen:
      • eine erste Liste von Multiplikations- und Additionsoperationen;
      • eine zweite Liste von Datenabrufen;
      • eine dritte Liste sich gegenseitig ausschließender Gruppen von Multiplikations- und Additionsoperationen; und
      • eine vierte Liste von aufeinanderfolgenden Reihenfolgen der sich gegenseitig ausschließenden Gruppen von Multiplikations- und Additionsoperationen.
    • Absatz 10. System nach Absatz 9, wobei die zweite Liste äußere Produkte nach Ladung enthält und die Strukturinformationen ferner eine vierte Liste äußerer Produkte nach Operanden umfassen.
    • Absatz 11. System nach einem der Absätze 8-10, wobei die Art und Weise, wie die ausführbaren Befehle verschachtelt werden, dazu dient, Abschnitte der Daten und der ausführbaren Befehle der Unteroperationen zu holen, ohne die für den Prozessor erforderliche Speicherung von Daten zu erhöhen.
    • Absatz 12. System nach einem der Absätze 7-11, wobei die Daten eine oder mehrere komplexe Zahlen umfassen.
    • Absatz 13. System nach einem der Absätze 7-12, wobei die eine oder mehreren Matrixoperationen mindestens eine Faltungsoperation umfassen.
    • Absatz 14. Verfahren, das Folgendes umfasst:
      • Abrufen von Daten, durch einen Prozessor, die einem oder mehreren Matrixoperationen entsprechen, bevor die ein oder mehreren Matrixoperationen vom Prozessor abgerufen werden.
    • Absatz 15. Verfahren nach Anspruch 14, ferner umfassend:
      • Erkennen von Strukturinformationen der einen oder mehreren Matrixoperationen;
      • Bestimmen, zumindest teilweise basierend auf der Strukturinformation der einen oder mehreren Matrixoperationen, einer Art und Weise, in der die Daten vor einer oder mehreren Unteroperationen der einen oder mehreren Matrixoperationen abgerufen werden sollen; und
      • Generieren von ausführbarem Code gemäß der bestimmten Weise.
    • Absatz 16. Verfahren gemäß Absatz 15, wobei das Erzeugen von ausführbarem Code gemäß der Art und Weise das Erzeugen eines Satzes von Abhängigkeiten umfasst, die die Datenabrufe mit den Unteroperationen der Matrixmultiplikation verschachteln, um zu begrenzen, wie viele Register gleichzeitig in Gebrauch sind, um die eine oder mehrere Matrixoperationen durchzuführen.
    • Absatz 17. Verfahren nach Absatz 15 oder 16, wobei das Erkennen der Strukturinformationen der einen oder mehreren Matrixoperationen Folgendes umfasst:
      • Erkennen von mehreren Multiplikations- und Additionsoperationen der einen oder mehreren Matrixoperationen aus dem Quellcode;
      • Erkennen einer Vielzahl von Datenabrufen, die der einen oder den mehreren Operationen entsprechen, aus dem Quellcode;
      • Erkennen einer Vielzahl von sich gegenseitig ausschließenden Sammlungen von Multiplikations- und Additionsoperationen und einer entsprechenden sich gegenseitig ausschließenden Sammlung von LadeOperationen aus der Vielzahl von Multiplikations- und Additionsoperationen; und
      • Erkennen einer Reihenfolge dieser sich gegenseitig ausschließenden Sammlungen von Operationen.
    • Absatz 18. Verfahren nach Absatz 17, wobei die Vielzahl von Multiplikations- und Additionsoperationen aus Assemblercode erkannt werden, der zumindest teilweise basierend auf Quellcode erzeugt wird.
    • Absatz 19. Verfahren nach einem der Absätze 15-18, wobei die eine oder mehreren Unteroperationen eine oder mehrere Multiplikations-Additionsoperationen enthalten.
    • Absatz 20. Verfahren nach Absatz 19, wobei die eine oder mehreren Multiplikations-Add-Operationen mindestens eine Fused-Multiplikations-Add (FMAs) gemäß der AVX2-Erweiterung zur x86-Anweisungssatzarchitektur umfassen.
    • Absatz 21. Verfahren nach einem der Absätze 14-20, wobei die eine oder mehreren Matrixoperationen das Berechnen eines Gradienten in Bezug auf Daten oder Gewichte umfassen.
    • Absatz 22. Prozessor, der Folgendes umfasst:
      • eine oder mehrere arithmetische Logikeinheiten (ALUs), um ein neuronales Netzwerk zu trainieren, das mindestens eine oder mehrere Datenabrufschaltungen verwendet, um Daten abzurufen, die einer oder mehreren Matrixoperationen entsprechen, bevor die eine oder mehreren Matrixoperationen vom Prozessor abgerufen werden.
    • Absatz 23. Prozessor nach Absatz 22, wobei die eine oder die mehreren Datenabrufschaltungen zum Abrufen der Daten, die dem einen oder den mehreren Matrixoperationen entsprechen, bevor die eine oder die mehreren Matrixoperationen vom Prozessor abgerufen werden, mindestens zu Folgendem dienen:
      • Erkennen, anhand des Quellcodes, einer oder mehrere sich gegenseitig ausschließende Vielzahl von Operationen, die einer oder mehreren sich gegenseitig ausschließenden Vielzahl von Datenabfragen entsprechen;
      • Erkennen, anhand des Quellcodes, struktureller Informationen über die Vielzahl der Operationen und die Vielzahl der Datenabrufe;
      • Bestimmen, mindestens teilweise auf der Grundlage der strukturellen Informationen der einen oder mehreren Matrixoperationen und des einen oder der mehreren Datenabrufe, einer Art und Weise, in der mehrere Teile der Daten geladen werden; und
      • Generieren von ausführbarem Code gemäß der bestimmten Weise, der, wenn er ausgeführt wird, bewirkt, dass die eine oder mehreren Datenabrufschaltungen die Daten abrufen, bevor die eine oder mehreren Matrixoperationen durch den Prozessor abgerufen werden.
    • Absatz 24. Prozessor nach Absatz 23, wobei die eine oder mehreren Datenabrufschaltungen zum Erkennender Strukturinformationen der einen oder mehreren Matrixoperationen aus dem Quellcode mindestens zu Folgendem dienen:
      • Erkennen von mehreren Multiplikations- und Additionsoperationen der einen oder mehreren Matrixoperationen aus dem Quellcode;
      • Erkennen einer Vielzahl von Datenabrufen, die der einen oder den mehreren Operationen entsprechen, aus dem Quellcode;
      • Erkennen einer Vielzahl von sich gegenseitig ausschließenden Sammlungen von Multiplikations- und Additionsoperationen und einer entsprechenden sich gegenseitig ausschließenden Sammlung von LadeOperationen aus der Vielzahl von Multiplikations- und Additionsoperationen; und
      • Erkennen einer Reihenfolge dieser sich gegenseitig ausschließenden Sammlungen von Operationen.
    • Absatz 25. Prozessor nach Absatz 23 oder 24, wobei eine Art des Ladens der Vielzahl von Abschnitten der Daten Abhängigkeiten, die einen Compiler veranlassen, Anweisungen zum Abrufen von Abschnitten der Daten mit Anweisungen zum Berechnen von Unteroperationen der einen oder mehreren Matrixoperationen zu verschachteln.
    • Absatz 26. Prozessor nach einem der Absätze 23-25, wobei der Quellcode ein von Menschen lesbarer Code mit einer Syntax gemäß einer kompilierten Sprache ist.
    • Absatz 27. Prozessor nach einem der Absätze 22-26, wobei die eine oder mehrere Matrixoperationen mindestens eine allgemeine Matrix-Matrix-Multiplikation (GEMM) umfassen.
    • Absatz 28. Prozessor, der Folgendes umfasst:
      • eine oder mehrere arithmetische Logikeinheiten (ALUs), um ein neuronales Netzwerk für die Inferenz zu verwenden, wobei das neuronale Netzwerk mit mindestens einer oder mehreren Datenabrufschaltungen trainiert wird, um Daten abzurufen, die einer oder mehreren Matrixoperationen entsprechen, bevor die eine oder mehreren Matrixoperationen vom Prozessor abgerufen werden.
    • Absatz 29. Prozessor nach Absatz 28, wobei die eine oder die mehreren Datenabrufschaltungen zum Abrufen der Daten, die dem einen oder den mehreren Matrixoperationen entsprechen, bevor die eine oder die mehreren Matrixoperationen vom Prozessor abgerufen werden, mindestens zu Folgendem dienen:
      • Erkennen, anhand des Quellcodes, einer oder mehrere sich gegenseitig ausschließende Vielzahl von Operationen, die einer oder mehreren sich gegenseitig ausschließenden Vielzahl von Datenabfragen entsprechen;
      • Erkennen, anhand des Quellcodes, struktureller Informationen über die Vielzahl der Operationen und die Vielzahl der Datenabrufe;
      • Bestimmen, mindestens teilweise auf der Grundlage der strukturellen Informationen der einen oder mehreren Matrixoperationen und des einen oder der mehreren Datenabrufe, einer Art und Weise, in der mehrere Teile der Daten geladen werden; und
      • Generieren von ausführbarem Code gemäß der bestimmten Weise, der, wenn er ausgeführt wird, bewirkt, dass die eine oder mehreren Datenabrufschaltungen die Daten abrufen, bevor die eine oder mehreren Matrixoperationen durch den Prozessor abgerufen werden.
    • Absatz 30. Prozessor nach Absatz 29, wobei die eine oder mehreren Datenabrufschaltungen zum Erkennender Strukturinformationen der einen oder mehreren Matrixoperationen aus dem Quellcode mindestens zu Folgendem dienen:
      • Erkennen von mehreren Multiplikations- und Additionsoperationen der einen oder mehreren Matrixoperationen aus dem Quellcode;
      • Erkennen einer Vielzahl von Datenabrufen, die der einen oder den mehreren Operationen entsprechen, aus dem Quellcode;
      • Erkennen einer Vielzahl von sich gegenseitig ausschließenden Sammlungen von Multiplikations- und Additionsoperationen und einer entsprechenden sich gegenseitig ausschließenden Sammlung von LadeOperationen aus der Vielzahl von Multiplikations- und Additionsoperationen; und
      • Erkennen einer Reihenfolge dieser sich gegenseitig ausschließenden Sammlungen von Operationen.
    • Absatz 31. Prozessor nach Absatz 29 oder 30, wobei eine Art des Ladens der Vielzahl von Abschnitten der Daten Abhängigkeiten, die einen Compiler veranlassen, Anweisungen zum Abrufen von Abschnitten der Daten mit Anweisungen zum Berechnen von Unteroperationen der einen oder mehreren Matrixoperationen zu verschachteln.
    • Absatz 32. Prozessor nach einem der Absätze 29-31, wobei der Quellcode ein von Menschen lesbarer Code mit einer Syntax gemäß einer kompilierten Sprache ist.
    • Absatz 33. Prozessor nach einem der Absätze 29-32, wobei die eine oder mehreren sich gegenseitig ausschließenden Vielzahlen von Operationen, die der einen oder mehreren sich gegenseitig ausschließenden Vielzahlen von Datenabrufen entsprechen, ein oder mehrere äußere Produkte bilden.
    • Absatz 34. Prozessor nach einem der Abschnitte 29-33, wobei das eine oder die mehreren Außenprodukte ein oder mehrere Teilaußenprodukte enthalten.
    • Absatz 35. Prozessor nach einem der Absätze 28-34, wobei die eine oder mehrere Matrixoperationen mindestens eine allgemeine Matrix-Matrix-Multiplikation (GEMM) umfassen.
  • In mindestens einer Ausführungsform kann sich eine einzelne Halbleiterplattform auf eine einzige einheitliche halbleiterbasierte integrierte Schaltung oder einen solchen Chip beziehen. In mindestens einer Ausführungsform können Multi-Chip-Module mit erhöhter Verbindungsfähigkeit verwendet werden, die den chipinternen Betrieb simulieren und wesentliche Verbesserungen gegenüber der Nutzung einer herkömmlichen Implementation mit einer zentralen Verarbeitungseinheit („CPU“) und einem Bus bieten. In mindestens einer Ausführungsform können verschiedene Module je nach Wunsch des Benutzers auch separat oder in verschiedenen Kombinationen von Halbleiterplattformen untergebracht sein.
  • In mindestens einer Ausführungsform werden Computerprogramme in Form von maschinenlesbarem ausführbarem Code oder Computersteuerlogikalgorithmen im Hauptspeicher 1604 und/oder im Sekundärspeicher gespeichert. Falls sie durch einen oder mehrere Prozessoren ausgeführt werden, ermöglichen es Computerprogramme dem System 1600, verschiedene Funktionen gemäß mindestens einer Ausführungsform durchzuführen. Speicher 1604, der Datenspeicher und/oder ein beliebiger anderer Datenspeicher sind mögliche Beispiele für computerlesbare Medien. In mindestens einer Ausführungsform kann sich sekundärer Speicher auf ein(e) beliebige(s) geeignete(s) Speichervorrichtung oder -system beziehen, wie etwa ein Festplattenlaufwerk und/oder ein Wechselspeicherlaufwerk, das ein Diskettenlaufwerk, ein Magnetbandlaufwerk, ein Compact-Disk-Laufwerk, digitales vielseitiges Plattenlaufwerk („DVD“), Aufzeichnungsvorrichtung, universeller serieller Bus („USB“) Flash-Speicher usw. darstellt. In mindestens einer Ausführungsform werden Architektur und/oder Funktion verschiedener früherer Figuren im folgenden Kontext umgesetzt: die CPU 1602; das Parallelverarbeitungssystem 1612; eine integrierte Schaltung, die mindestens einen Teil der Fähigkeiten beider CPU 1602 erfüllen kann; ein Parallelverarbeitungssystem 1612; ein Chipsatz (z. B. eine Gruppe integrierter Schaltungen, die ausgestaltet wurden, um zum Durchzuführen zusammengehöriger Funktionen zu funktionieren und als eine Einheit verkauft zu werden usw.); und jede geeignete Kombination von einer oder mehreren integrierten Schaltungen.
  • In mindestens einer Ausführungsform werden die Architektur und/oder Funktionalität verschiedener vorhergehender Figuren im Kontext eines allgemeinen Computersystems, eines Leiterplattensystems, eines für Unterhaltungszwecke dedizierten Spielekonsolensystems, eines anwendungsspezifischen Systems und mehr implementiert. In mindestens einer Ausführungsform kann das Computersystem 1600 die Form eines Desktop-Computers, eines Laptop-Computers, eines Tablet-Computers, von Servern, von Supercomputern, eines Smartphones (z. B. einer drahtlosen tragbaren Vorrichtung), eines persönlichen digitalen Assistenten („PDA“), einer Digitalkamera, eines Fahrzeugs, einer am Kopf befestigten Anzeige, einer tragbaren elektronischen Vorrichtung, einer Mobiltelefonvorrichtung, eines Fernsehgeräts, einer Arbeitsstation, von Spielekonsolen, eines eingebetteten Systems und/oder eines beliebigen anderen Typs von Logik annehmen.
  • In mindestens einer Ausführungsform beinhaltet das Parallelverarbeitungssystem 1612 ohne Einschränkung eine Vielzahl von Parallelverarbeitungseinheiten („PPUs“) 1614 und damit assoziierte Speicher 1616. In mindestens einer Ausführungsform sind die PPUs 1614 über eine Zusammenschaltung 1618 und einen Switch 1620 oder Multiplexer mit einem Host-Prozessor oder anderen Peripherievorrichtungen verbunden. In mindestens einer Ausführungsform verteilt das Parallelverarbeitungssystem 1612 Rechen-Tasks auf PPUs 1614, die parallelisierbar sein können - zum Beispiel als Teil der Verteilung von Rechen-Tasks auf mehrere Thread-Blöcke einer Grafikverarbeitungseinheit („GPU“). In mindestens einer Ausführungsform wird der Speicher von einigen oder allen PPUs 1614 gemeinsam genutzt und ist er für diese zugänglich (z. B. für Lese- und/oder Schreibzugriff), obwohl ein derartiger gemeinsam genutzter Speicher Einbußen bei der Rechenleistung in Bezug auf die Verwendung von lokalem Speicher und Registern, die in einer PPU 1614 resident sind, mit sich bringen kann. In mindestens einer Ausführungsform wird der Betrieb der PPUs 1614 durch Verwendung eines Befehls wie etwa syncthreads() synchronisiert, wobei alle Threads in einem Block (z. B. über mehrere PPUs 1614 hinweg ausgeführt) einen bestimmten Punkt der Codeausführung erreichen müssen, bevor sie fortfahren.
  • Andere Variationen liegen innerhalb des Geistes der vorliegenden Offenbarung. Somit können zwar bezüglich der offenbarten Techniken diverse Modifikationen und alternative Konstruktionen vorgenommen werden, bestimmte veranschaulichte Ausführungsformen davon werden jedoch in den Zeichnungen gezeigt und wurden vorangehend ausführlich beschrieben. Allerdings versteht es sich, dass nicht die Absicht verfolgt wird, die Offenbarung auf die spezifische(n) offenbarte(n) Form oder Formen einzuschränken, sondern die Absicht ganz im Gegenteil darin besteht, sämtliche Modifikationen, alternativen Konstruktionen und Äquivalente abzudecken, die in den Geist und Umfang der wie in den beigefügten Ansprüchen definierten Offenbarung fallen.
  • Die Verwendung der Ausdrücke „ein“ und „eine“ und „der/die/das“ und ähnlicher Referenten im Kontext des Beschreibens offenbarter Ausführungsformen (insbesondere im Kontext der folgenden Ansprüche) ist so auszulegen, dass sie sowohl den Singular als auch den Plural abdeckt, sofern hierin nichts anderes angegeben ist oder der Kontext dem eindeutig widerspricht, und nicht als Definition eines Ausdrucks. Die Begriffe „umfassend“, „aufweisend“, „einschließlich“ und „enthaltend“ sind, sofern nicht anders angegeben, als offene Begriffe zu verstehen (d. h. „beinhaltend, aber nicht beschränkt auf“). Der Begriff „verbunden“ ist, wenn er unverändert bleibt und sich auf physische Verbindungen bezieht, als teilweise oder ganz in ihm enthalten, an ihm angebracht oder mit ihm verbunden zu verstehen, auch wenn etwas dazwischen liegt. Die Nennung von Wertebereichen hierin soll lediglich als kurzes Verfahren zur einzelnen Bezugnahme auf jeden separaten Wert dienen, der in den Bereich fällt, es sei denn, hierin ist etwas anderes angegeben, und jeder separate Wert ist in die Beschreibung eingeschlossen, als ob er einzeln hierin wiedergegeben wäre. Die Verwendung des Ausdrucks „Satz“ (z. B. „ein Satz von Objekten“) oder „Teilsatz“ ist als eine nichtleere Zusammenstellung auszulegen, die ein oder mehrere Elemente umfasst, es sei denn, es ist etwas anderes angemerkt oder dies widerspricht dem Kontext. Sofern nichts anderes angegeben ist oder der Kontext dem widerspricht, bezeichnet ferner der Ausdruck „Teilmenge“ eines entsprechenden Satzes nicht notwendigerweise eine richtige Teilmenge des entsprechenden Satzes, sondern die Teilmenge und der entsprechende Satz können gleich sein.
  • Sofern nicht spezifisch etwas anderes genannt ist oder der Kontext dem eindeutig widerspricht, ist verbindende Sprache, wie etwa Formulierungen der Form „wenigstens eines von A, B und C“ oder „mindestens eines von A, B und C“, andernfalls in dem Kontext zu verstehen, in dem sie allgemein verwendet werden, um darzustellen, dass ein Gegenstand, ein Ausdruck usw. entweder A oder B oder C oder eine beliebige nicht leere Teilmenge des Satzes aus A und B und C sein kann. Zum Beispiel beziehen sich in dem veranschaulichenden Beispiel für einen Satz, der drei Elemente aufweist, die verbindenden Formulierungen „wenigstens eines von A, B und C“ und „mindestens eines von A, B und C“ auf einen beliebigen der folgenden Sätze: {A}, {B}, {C}, {A, B}, {A, C}, {B, C}, {A, B, C}. Somit soll derartige verbindende Sprache im Allgemeinen nicht implizieren, dass bestimmte Ausführungen es erforderlich machen, dass mindestens eines von A, mindestens eines von B und mindestens eines von C vorhanden ist. Sofern nichts anderes angemerkt ist oder der Kontext dem widerspricht, gibt der Ausdruck „Vielzahl“ einen Zustand der Pluralität an (z. B. gibt „eine Vielzahl von Gegenständen“ mehrere Gegenstände an). Die Anzahl der Objekte in einer Vielzahl ist zumindest zwei, es können aber auch mehr sein, wenn dies entweder explizit oder durch den Kontext angegeben wird. Sofern nichts anderes genannt ist oder es anderweitig aus dem Kontext ersichtlich ist, bedeutet die Formulierung „auf Grundlage von“ „mindestens zum Teil auf Grundlage von“ und nicht „ausschließlich auf Grundlage von“.
  • Hierin beschriebene Operationen von Prozessen können in einer beliebigen geeigneten Reihenfolge durchgeführt werden, sofern hierin nichts anderes angegeben ist oder der Kontext dem eindeutig widerspricht. In mindestens einer Ausführungsform wird ein Prozess, wie etwa die hierin beschriebenen Prozesse (oder Variationen und/oder Kombinationen davon), unter der Steuerung von einem oder mehreren Computersystemen durchgeführt, die mit ausführbaren Anweisungen konfiguriert sind, und er ist als Code (z. B. ausführbare Anweisungen, ein oder mehrere Computerprogramme oder eine oder mehrere Anwendungen), der zusammen auf einem oder mehreren Prozessoren ausgeführt wird, durch Hardware oder Kombinationen davon implementiert. In mindestens einer Ausführungsform ist Code auf einem computerlesbaren Speichermedium gespeichert, zum Beispiel in Form eines Computerprogramms, das eine Vielzahl von Anweisungen umfasst, die durch einen oder mehrere Prozessoren ausgeführt werden können. In mindestens einer Ausführungsform ist ein computerlesbares Speichermedium ein nichttransitorisches computerlesbares Speichermedium, das transitorische Signale (z. B. eine sich ausbreitende transiente elektrische oder elektromagnetische Übertragung) ausschließt, aber nichttransitorische Datenspeicherschaltungen (z. B. Puffer, Cache und Warteschlangen) innerhalb von Sendeempfängern von transitorischen Signalen einschließt. In mindestens einer Ausführungsform ist der Code (z. B. ausführbarer Code oder Quellcode) auf einem Satz von einem oder mehreren nicht transitorischen computerlesbaren Speichermedien gespeichert, auf denen ausführbare Anweisungen gespeichert sind (oder ein anderer Speicher zum Speichern ausführbarer Anweisungen), die bei Ausführung (d. h. als Ergebnis der Ausführung) durch einen oder mehrere Prozessoren eines Computersystems das Computersystem dazu veranlassen, hierin beschriebene Operationen durchzuführen. Ein Satz von nichtflüchtigen computerlesbaren Speichermedien kann in mindestens einer Ausführungsform mehrere nichtflüchtige computerlesbare Speichermedien umfassen und eines oder mehrere von einzelnen nichtflüchtigen Speichermedien der mehreren nichtflüchtigen computerlesbaren Speichermedien verfügen möglicherweise nicht über den gesamten Code, während mehrere nichtflüchtige computerlesbares Speichermedien gemeinschaftlich den gesamten Code speichern. In mindestens einer Ausführungsform werden die ausführbaren Anweisungen so ausgeführt, dass unterschiedliche Anweisungen durch unterschiedliche Prozessoren ausgeführt werden - zum Beispiel speichert ein nichttransitorisches computerlesbares Speichermedium Anweisungen und eine hauptsächliche zentrale Verarbeitungseinheit („CPU“) führt einige der Anweisungen aus, während eine Grafikverarbeitungseinheit („GPU“) andere Anweisungen ausführt. In mindestens einer Ausführungsform weisen unterschiedliche Komponenten eines Computersystems separate Prozessoren auf und unterschiedliche Prozessoren führen unterschiedliche Teilmengen von Anweisungen aus.
  • Dementsprechend sind in mindestens einer Ausführungsform Computersysteme so konfiguriert, dass sie einen oder mehrere Dienste implementieren, die einzeln oder zusammen Operationen der hierin beschriebenen Prozesse durchführen, und derartige Computersysteme sind mit geeigneter Hardware und/oder Software konfiguriert, die eine Durchführung der Operationen ermöglichen. Ferner ist ein Computersystem, das mindestens eine Ausführungsform der vorliegenden Offenbarung implementiert, eine einzelne Vorrichtung und in einer anderen Ausführungsform ein verteiltes Computersystem, das mehrere Vorrichtungen umfasst, die unterschiedlich arbeiten, sodass das verteilte Computersystem die hierin beschriebenen Operationen durchführt und sodass eine einzelne Vorrichtung nicht alle Operationen durchführt.
  • Die Verwendung jeglicher und aller Beispiele oder beispielhafter Wortwahl (z. B. „wie etwa“), die hierin bereitgestellt ist, soll lediglich die Ausführungsformen der Offenbarung besser verdeutlichen und stellt keine Einschränkung des Umfangs der Offenbarung dar, es sei denn, es ist etwas anderes beansprucht. Keinerlei Wortwahl in der Beschreibung sollte so ausgelegt werden, dass sie ein beliebiges nicht beanspruchtes Element als für die Umsetzung der Offenbarung wesentlich angibt.
  • Jegliche Bezugnahmen, einschließlich Veröffentlichungen, Patentanmeldungen und Patenten, die hierin genannt werden, sind hiermit durch Bezugnahme in demselben Maße aufgenommen, als wäre jede Bezugnahme einzeln und spezifisch als durch Bezugnahme eingeschlossen angegeben und in ihrer Gesamtheit hierin dargelegt.
  • In der Beschreibung und den Ansprüchen können die Begriffe „gekoppelt“ und „verbunden“ zusammen mit ihren Ableitungen verwendet werden. Es versteht sich, dass diese Ausdrücke nicht als Synonyme füreinander beabsichtigt sein können. Vielmehr kann in konkreten Beispielen „verbunden“ oder „gekoppelt“ verwendet werden, um anzugeben, dass zwei oder mehr Elemente in direktem oder indirektem physischem oder elektrischem Kontakt miteinander stehen. Mit „gekoppelt“ kann auch gemeint sein, dass zwei oder mehr Elemente nicht in direktem Kontakt miteinander stehen, jedoch trotzdem miteinander zusammenwirken oder interagieren.
  • Sofern nicht ausdrücklich anders angegeben, versteht es sich, dass sich Begriffe wie „Verarbeitung“, „Berechnung“, „Berechnen“, „Bestimmen“ oder dergleichen in der gesamten Beschreibung auf Handlungen und/oder Prozesse eines Computers oder Rechensystems oder einer ähnlichen elektronischen Rechenvorrichtung, die Daten, die als physische, z. B. elektronische, Größen in den Registern und/oder Speichern des Rechensystems dargestellt sind, manipulieren und/oder in andere Daten umwandeln, die auf ähnliche Weise als physische Größen in den Speichern, Registern oder anderen derartigen Informationsspeicher-, - übertragungs- oder -anzeigevorrichtungen des Rechensystems dargestellt sind.
  • Auf ähnliche Weise kann sich der Ausdruck „Prozessor“ auf eine beliebige Vorrichtung oder einen beliebigen Abschnitt einer Vorrichtung beziehen, die/der elektronische Daten aus Registern und/oder Speicher verarbeitet und diese elektronischen Daten in andere elektronische Daten umwandelt, die in Registern und/oder Speicher gespeichert werden können. Als nicht einschränkende Beispiele kann der „Prozessor“ eine CPU oder eine GPU sein. Eine „Rechenplattform“ kann einen oder mehrere Prozessoren umfassen. Wie hierin verwendet, können „Software“-Prozesse zum Beispiel Software- und/oder Hardware-Entitäten beinhalten, die im Verlauf der Zeit Arbeit verrichten, wie etwa Tasks, Threads und intelligente Agenten. Außerdem kann sich jeder Prozess auf mehrere Prozesse zum Ausführen von Anweisungen nacheinander oder parallel, kontinuierlich oder intermittierend beziehen. Die Begriffe „System“ und „Verfahren“ werden hierin insofern austauschbar verwendet, dass ein System ein oder mehrere Verfahren verkörpern kann und die Verfahren als System betrachtet werden können.
  • Im vorliegenden Dokument kann auf das Erlangen, Erfassen, Empfangen oder Eingeben von analogen oder digitalen Daten in ein Teilsystem, ein Computersystem oder eine computerimplementierte Maschine Bezug genommen werden. Der Prozess des Erhaltens, Erfassens, Empfangens oder Eingebens von analogen und digitalen Daten kann auf vielfältige Weise erfolgen, z. B. durch das Empfangen von Daten als Parameter eines Funktionsaufrufs oder eines Aufrufs einer Anwendungsprogrammierschnittstelle. In einigen Umsetzungen kann der Prozess des Erhaltens, Übernehmens, Empfangens oder Eingebens von analogen oder digitalen Daten durch das Übertragen von Daten über eine serielle oder parallele Schnittstelle erreicht werden. In einer anderen Implementation kann der Prozess des Erlangens, Erfassens, Empfangens oder Eingebens von analogen oder digitalen Daten durch das Übermitteln von Daten über ein Computernetz von der bereitstellenden Entität zu der erfassenden Entität erfolgen. Es kann auch auf das Bereitstellen, Ausgeben, Übertragen, Senden oder Darstellen von analogen oder digitalen Daten Bezug genommen werden. In verschiedenen Beispielen kann der Prozess des Bereitstellens, Ausgebens, Übertragens, Sendens oder Darstellens von analogen oder digitalen Daten durch das Übermitteln von Daten als Eingabe- oder Ausgabeparameter eines Funktionsaufrufs, eines Parameters einer Anwendungsprogrammierschnittstelle oder eines Interprozesskommunikationsmechanismus erfolgen.
  • Obwohl die vorstehende Erörterung beispielhafte Implementationen der beschriebenen Techniken darlegt, können auch andere Architekturen verwendet werden, um die beschriebene Funktionalität zu implementieren, und sie sollen im Umfang dieser Offenbarung liegen. Darüber hinaus könnten, obwohl spezifische Verteilungen von Zuständigkeiten vorstehend zum Zwecke der Erörterung definiert sind, verschiedene Funktionen und Zuständigkeiten in Abhängigkeit von den Umständen anders verteilt und aufgeteilt werden.
  • Obwohl der Gegenstand ferner in für Strukturmerkmale und/oder Verfahrenshandlungen spezifischer Sprache beschrieben wurde, versteht sich, dass der in den beigefügten Ansprüchen beanspruchte Gegenstand nicht unbedingt auf die beschriebenen spezifischen Merkmale oder Handlungen beschränkt ist. Vielmehr werden spezifische Merkmale und Handlungen als beispielhafte Formen zum Implementieren der Ansprüche offenbart.
  • 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 16539989 B [0001]

Claims (35)

  1. Prozessor, der Folgendes umfasst: eine oder mehrere Datenabrufschaltungen zum Abrufen von Daten, die einem oder mehreren Matrixoperationen entsprechen, bevor die ein oder mehreren Matrixoperationen vom Prozessor abgerufen werden.
  2. Prozessor nach Anspruch 1, wobei die eine oder die mehreren Datenabrufschaltungen zum Abrufen der Daten, die dem einen oder den mehreren Matrixoperationen entsprechen, bevor die eine oder die mehreren Matrixoperationen vom Prozessor abgerufen werden, mindestens zu Folgendem dienen: Erkennen, anhand des Quellcodes, einer oder mehrere sich gegenseitig ausschließende Vielzahl von Operationen, die einer oder mehreren sich gegenseitig ausschließenden Vielzahl von Datenabfragen entsprechen; Erkennen, anhand des Quellcodes, struktureller Informationen über die Vielzahl der Operationen und die Vielzahl der Datenabrufe; Bestimmen, mindestens teilweise auf der Grundlage der strukturellen Informationen der einen oder mehreren Matrixoperationen und des einen oder der mehreren Datenabrufe, einer Art und Weise, in der mehrere Teile der Daten geladen werden; und Generieren von ausführbarem Code gemäß der bestimmten Weise, der, wenn er ausgeführt wird, bewirkt, dass die eine oder mehreren Datenabrufschaltungen die Daten abrufen, bevor die eine oder mehreren Matrixoperationen durch den Prozessor abgerufen werden.
  3. Prozessor nach Anspruch 2, wobei die eine oder mehreren Datenabrufschaltungen zum Erkennender Strukturinformationen der einen oder mehreren Matrixoperationen aus dem Quellcode mindestens zu Folgendem dienen: Erkennen von mehreren Multiplikations- und Additionsoperationen der einen oder mehreren Matrixoperationen aus dem Quellcode; Erkennen einer Vielzahl von Datenabrufen, die der einen oder den mehreren Operationen entsprechen, aus dem Quellcode; Erkennen von sich gegenseitig ausschließenden Sammlungen von Multiplikations- und Additionsoperationen und einer entsprechenden sich gegenseitig ausschließenden Sammlung von LadeOperationen aus der Vielzahl von Multiplikations- und Additionsoperationen; und Erkennen einer Reihenfolge der sich gegenseitig ausschließenden Sammlungen von Operationen.
  4. Prozessor nach Anspruch 2, wobei eine Art des Ladens der Vielzahl von Abschnitten der Daten Abhängigkeiten, die einen Compiler veranlassen, Anweisungen zum Abrufen von Abschnitten der Daten mit Anweisungen zum Berechnen von Unteroperationen der einen oder mehreren Matrixoperationen zu verschachteln.
  5. Prozessor nach Anspruch 2, wobei der Quellcode ein von Menschen lesbarer Code mit einer Syntax gemäß einer kompilierten Sprache ist.
  6. Prozessor nach Anspruch 1, wobei die eine oder mehrere Matrixoperationen mindestens eine allgemeine Matrix-Matrix-Multiplikation (GEMM) umfassen.
  7. System, das Folgendes umfasst: einen oder mehrere Speicher; und eine oder mehrere Datenabrufschaltungen zum Abrufen von Daten, die einem oder mehreren Matrixoperationen entsprechen, bevor die ein oder mehreren Matrixoperationen vom Prozessor abgerufen werden.
  8. System nach Anspruch 7, wobei der eine oder die mehreren Prozessoren zum Abrufen der Daten, die dem einen oder den mehreren Matrixoperationen entsprechen, bevor die eine oder die mehreren Matrixoperationen von dem einen oder den mehreren Prozessoren abgerufen werden, mindestens zu Folgendem dienen: Bestimmen von Strukturinformationen der einen oder mehreren Matrixoperationen; und Bestimmen einer Art und Weise, in der ausführbare Anweisungen zum Abrufen von Teilen der Daten und ausführbare Anweisungen von Unteroperationen der einen oder mehreren Matrixoperationen zu verschachteln sind, die unter Verwendung von zumindest den Abschnitten der Daten auszuführen sind.
  9. System nach Anspruch 8, wobei die Strukturinformationen der einen oder mehreren Matrixoperationen Folgendes umfassen: eine erste Liste von Multiplikations- und Additionsoperationen; eine zweite Liste von Datenabrufen; eine dritte Liste sich gegenseitig ausschließender Gruppen von Multiplikations- und Additionsoperationen; und eine vierte Liste von aufeinanderfolgenden Reihenfolgen der sich gegenseitig ausschließenden Gruppen von Multiplikations- und Additionsoperationen.
  10. System nach Anspruch 9, wobei die zweite Liste äußere Produkte nach Ladung enthält und die Strukturinformationen ferner eine vierte Liste äußerer Produkte nach Operanden umfassen.
  11. System nach Anspruch 8, wobei die Art und Weise, wie die ausführbaren Befehle verschachtelt werden, dazu dient, Abschnitte der Daten und der ausführbaren Befehle der Unteroperationen zu holen, ohne die für den Prozessor erforderliche Speicherung von Daten zu erhöhen.
  12. System nach Anspruch 7, wobei die Daten eine oder mehrere komplexe Zahlen umfassen.
  13. System nach Anspruch 7, wobei die eine oder mehreren Matrixoperationen mindestens eine Faltungsoperation umfassen.
  14. Verfahren, das Folgendes umfasst: Abrufen von Daten, durch einen Prozessor, die einem oder mehreren Matrixoperationen entsprechen, bevor die ein oder mehreren Matrixoperationen vom Prozessor abgerufen werden.
  15. Verfahren nach Anspruch 14, ferner umfassend: Bestimmen von Strukturinformationen der einen oder mehreren Matrixoperationen; Bestimmen, zumindest teilweise basierend auf der Strukturinformation der einen oder mehreren Matrixoperationen, einer Art und Weise, in der die Daten vor einer oder mehreren Unteroperationen der einen oder mehreren Matrixoperationen abgerufen werden sollen; und Generieren von ausführbarem Code gemäß der bestimmten Weise.
  16. Verfahren nach Anspruch 15, wobei das Erzeugen von ausführbarem Code gemäß der Art und Weise das Erzeugen eines Satzes von Abhängigkeiten umfasst, die die Datenabrufe mit den Unteroperationen der Matrixmultiplikation verschachteln, um zu begrenzen, wie viele Register gleichzeitig in Gebrauch sind, um die eine oder mehrere Matrixoperationen durchzuführen.
  17. Verfahren nach Anspruch 15, wobei das Erkennen der Strukturinformationen der einen oder mehreren Matrixoperationen Folgendes umfasst: Erkennen von mehreren Multiplikations- und Additionsoperationen der einen oder mehreren Matrixoperationen aus dem Quellcode; Erkennen einer Vielzahl von Datenabrufen, die der einen oder den mehreren Operationen entsprechen, aus dem Quellcode; Erkennen von sich gegenseitig ausschließenden Sammlungen von Multiplikations- und Additionsoperationen und einer entsprechenden sich gegenseitig ausschließenden Sammlung von Ladeoperationen aus der Vielzahl von Multiplikations- und Additionsoperationen; und Erkennen einer Reihenfolge der sich gegenseitig ausschließenden Sammlungen von Operationen.
  18. Verfahren nach Anspruch 17, wobei die Vielzahl von Multiplikationsund Additionsoperationen aus Assemblercode erkannt werden, der zumindest teilweise basierend auf Quellcode erzeugt wird.
  19. Verfahren nach Anspruch 15, wobei die eine oder mehreren Unteroperationen eine oder mehrere Multiplikations-Additionsoperationen enthalten.
  20. Verfahren nach Anspruch 19, wobei die eine oder mehreren Multiply-Add-Operationen mindestens eine Fused-Multiply-Add (FMAs) gemäß der AVX2-Erweiterung zur x86-Anweisungssatzarchitektur umfassen.
  21. Verfahren nach Anspruch 14, wobei die eine oder mehreren Matrixoperationen das Berechnen eines Gradienten in Bezug auf Daten oder Gewichte umfassen.
  22. Prozessor, der Folgendes umfasst: eine oder mehrere arithmetische Logikeinheiten (ALUs), um ein neuronales Netzwerk zu trainieren, das mindestens eine oder mehrere Datenabrufschaltungen zum Abrufen von Daten verwendet, die einem oder mehreren Matrixoperationen entsprechen, bevor die ein oder mehreren Matrixoperationen vom Prozessor abgerufen werden.
  23. Prozessor nach Anspruch 22, wobei die eine oder die mehreren Datenabrufschaltungen zum Abrufen der Daten, die dem einen oder den mehreren Matrixoperationen entsprechen, bevor die eine oder die mehreren Matrixoperationen vom Prozessor abgerufen werden, mindestens zu Folgendem dienen: Erkennen, anhand des Quellcodes, einer oder mehrere sich gegenseitig ausschließende Operationen, die einer oder mehreren sich gegenseitig ausschließenden Vielzahl von Datenabfragen entsprechen; Erkennen, anhand des Quellcodes, struktureller Informationen über die Vielzahl der Operationen und die Vielzahl der Datenabrufe; Bestimmen, mindestens teilweise auf der Grundlage der strukturellen Informationen der einen oder mehreren Matrixoperationen und des einen oder der mehreren Datenabrufe, einer Art und Weise, in der mehrere Teile der Daten geladen werden; und Generieren von ausführbarem Code gemäß der bestimmten Weise, der, wenn er ausgeführt wird, bewirkt, dass die eine oder mehreren Datenabrufschaltungen die Daten abrufen, bevor die eine oder mehreren Matrixoperationen durch den Prozessor abgerufen werden.
  24. Prozessor nach Anspruch 23, wobei die eine oder mehreren Datenabrufschaltungen zum Erkennender Strukturinformationen der einen oder mehreren Matrixoperationen aus dem Quellcode mindestens zu Folgendem dienen: Erkennen von mehreren Multiplikations- und Additionsoperationen der einen oder mehreren Matrixoperationen aus dem Quellcode; Erkennen einer Vielzahl von Datenabrufen, die der einen oder den mehreren Operationen entsprechen, aus dem Quellcode; Erkennen von sich gegenseitig ausschließenden Sammlungen von Multiplikations- und Additionsoperationen und einer entsprechenden sich gegenseitig ausschließenden Sammlung von LadeOperationen aus der Vielzahl von Multiplikations- und Additionsoperationen; und Erkennen einer Reihenfolge der sich gegenseitig ausschließenden Sammlungen von Operationen.
  25. Prozessor nach Anspruch 23, wobei eine Art des Ladens der Vielzahl von Abschnitten der Daten Abhängigkeiten, die einen Compiler veranlassen, Anweisungen zum Abrufen von Abschnitten der Daten mit Anweisungen zum Berechnen von Unteroperationen der einen oder mehreren Matrixoperationen zu verschachteln.
  26. Prozessor nach Anspruch 23, wobei der Quellcode ein von Menschen lesbarer Code mit einer Syntax gemäß einer kompilierten Sprache ist.
  27. Prozessor nach Anspruch 22, wobei die eine oder mehrere Matrixoperationen mindestens eine allgemeine Matrix-Matrix-Multiplikation (GEMM) umfassen.
  28. Prozessor, der Folgendes umfasst: eine oder mehrere arithmetische Logikeinheiten (ALUs), um ein neuronales Netzwerk für die Inferenz zu verwenden, wobei das neuronale Netzwerk mit mindestens einer oder mehreren Datenabrufschaltungen trainiert wird, um Daten abzurufen, die einer oder mehreren Matrixoperationen entsprechen, bevor die eine oder mehreren Matrixoperationen vom Prozessor abgerufen werden.
  29. Prozessor nach Anspruch 28, wobei die eine oder die mehreren Datenabrufschaltungen zum Abrufen der Daten, die dem einen oder den mehreren Matrixoperationen entsprechen, bevor die eine oder die mehreren Matrixoperationen vom Prozessor abgerufen werden, mindestens zu Folgendem dienen: Erkennen, anhand des Quellcodes, einer oder mehrere sich gegenseitig ausschließende Vielzahl von Operationen, die einer oder mehreren sich gegenseitig ausschließenden Vielzahl von Datenabfragen entsprechen; Erkennen, anhand des Quellcodes, struktureller Informationen über die Vielzahl der Operationen und die Vielzahl der Datenabrufe; Bestimmen, mindestens teilweise auf der Grundlage der strukturellen Informationen der einen oder mehreren Matrixoperationen und des einen oder der mehreren Datenabrufe, einer Art und Weise, in der mehrere Teile der Daten geladen werden; und Generieren von ausführbarem Code gemäß der bestimmten Weise, der, wenn er ausgeführt wird, bewirkt, dass die eine oder mehreren Datenabrufschaltungen die Daten abrufen, bevor die eine oder mehreren Matrixoperationen durch den Prozessor abgerufen werden.
  30. Prozessor nach Anspruch 29, wobei die eine oder mehreren Datenabrufschaltungen zum Erkennender Strukturinformationen der einen oder mehreren Matrixoperationen aus dem Quellcode mindestens zu Folgendem dienen: Erkennen von mehreren Multiplikations- und Additionsoperationen der einen oder mehreren Matrixoperationen aus dem Quellcode; Erkennen einer Vielzahl von Datenabrufen, die der einen oder den mehreren Operationen entsprechen, aus dem Quellcode; Erkennen von sich gegenseitig ausschließenden Sammlungen von Multiplikations- und Additionsoperationen und einer entsprechenden sich gegenseitig ausschließenden Sammlung von LadeOperationen aus der Vielzahl von Multiplikations- und Additionsoperationen; und Erkennen einer Reihenfolge der sich gegenseitig ausschließenden Sammlungen von Operationen.
  31. Prozessor nach Anspruch 29, wobei eine Art des Ladens der Vielzahl von Abschnitten der Daten Abhängigkeiten, die einen Compiler veranlassen, Anweisungen zum Abrufen von Abschnitten der Daten mit Anweisungen zum Berechnen von Unteroperationen der einen oder mehreren Matrixoperationen zu verschachteln.
  32. Prozessor nach Anspruch 29, wobei der Quellcode ein von Menschen lesbarer Code mit einer Syntax gemäß einer kompilierten Sprache ist.
  33. Prozessor nach Anspruch 29, wobei die eine oder mehreren sich gegenseitig ausschließenden Vielzahlen von Operationen, die der einen oder mehreren sich gegenseitig ausschließenden Vielzahlen von Datenabrufen entsprechen, ein oder mehrere äußere Produkte bilden.
  34. Prozessor nach Anspruch 29, wobei das eine oder die mehreren Außenprodukte ein oder mehrere Teilaußenprodukte enthalten.
  35. Prozessor nach Anspruch 28, wobei die eine oder mehrere Matrixoperationen mindestens eine allgemeine Matrix-Matrix-Multiplikation (GEMM) umfassen.
DE112020003833.5T 2019-08-13 2020-08-11 Durchführen von Matrixoperationen in neuronalen Netzen Pending DE112020003833T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/539,989 2019-08-13
US16/539,989 US20210048991A1 (en) 2019-08-13 2019-08-13 Performing matrix operations in neural networks
PCT/US2020/045824 WO2021030376A1 (en) 2019-08-13 2020-08-11 Performing matrix operations in neural networks

Publications (1)

Publication Number Publication Date
DE112020003833T5 true DE112020003833T5 (de) 2022-06-02

Family

ID=72266818

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112020003833.5T Pending DE112020003833T5 (de) 2019-08-13 2020-08-11 Durchführen von Matrixoperationen in neuronalen Netzen

Country Status (5)

Country Link
US (1) US20210048991A1 (de)
CN (1) CN114365154A (de)
DE (1) DE112020003833T5 (de)
GB (2) GB2600356A (de)
WO (1) WO2021030376A1 (de)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10290141B2 (en) * 2017-04-17 2019-05-14 Intel Corporation Cloud based distributed single game calculation of shared computational work for multiple cloud gaming client devices
CN111090464B (zh) * 2018-10-23 2023-09-22 华为技术有限公司 一种数据流处理方法及相关设备
US11094376B2 (en) * 2019-06-06 2021-08-17 Stmicroelectronics International N.V. In-memory compute array with integrated bias elements
US20210256092A1 (en) * 2020-02-19 2021-08-19 Nvidia Corporation Application programming interface to accelerate matrix operations
US20210303987A1 (en) * 2020-03-26 2021-09-30 Advanced Micro Devices, Inc. Power reduction for machine learning accelerator background
US11347486B2 (en) * 2020-03-27 2022-05-31 Advanced Micro Devices, Inc. Compiler-initiated tile replacement to enable hardware acceleration resources
US11640443B2 (en) * 2020-05-28 2023-05-02 Hewlett Packard Enterprise Development Lp Distributing matrix multiplication processing among processing nodes
US11301218B2 (en) * 2020-07-29 2022-04-12 Bank Of America Corporation Graph-based vectorization for software code optimization references
US11663010B2 (en) * 2021-03-08 2023-05-30 Unisys Corporation System and method for securely debugging across multiple execution contexts
US20220300816A1 (en) * 2021-03-19 2022-09-22 Rebellions Inc. Neural processing device and method for pruning thereof
US11614527B2 (en) * 2021-06-21 2023-03-28 Cyngn, Inc. Self-adaptive liDAR-camera synchronization system
US20230037780A1 (en) * 2021-07-21 2023-02-09 Azimuth Technology, Llc Computing device with one or more hardware accelerators directly coupled with cluster of processors
CN113705802B (zh) * 2021-07-26 2023-09-08 深圳市易成自动驾驶技术有限公司 自动驾驶的同步计算方法、装置、系统、程序产品及介质
US11755489B2 (en) 2021-08-31 2023-09-12 Apple Inc. Configurable interface circuit
CN117980898A (zh) * 2021-12-07 2024-05-03 英特尔公司 重叠操作的计算和数据存储的交错数据加载系统
CN117632607A (zh) * 2023-11-28 2024-03-01 中国科学院半导体研究所 可编程数字信号并行处理器及其异常检测与故障识别方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9600281B2 (en) * 2010-07-12 2017-03-21 International Business Machines Corporation Matrix multiplication operations using pair-wise load and splat operations
US10409560B1 (en) * 2015-11-18 2019-09-10 Amazon Technologies, Inc. Acceleration techniques for graph analysis programs
US10521225B2 (en) * 2017-06-29 2019-12-31 Oracle International Corporation Matrix multiplication at memory bandwidth
US11093225B2 (en) * 2018-06-28 2021-08-17 Xilinx, Inc. High parallelism computing system and instruction scheduling method thereof
US11561833B1 (en) * 2018-06-28 2023-01-24 Amazon Technologies, Inc. Allocation and placement of resources for network computation
US11361050B2 (en) * 2018-11-20 2022-06-14 Hewlett Packard Enterprise Development Lp Assigning dependent matrix-vector multiplication operations to consecutive crossbars of a dot product engine
US11392376B2 (en) * 2019-04-11 2022-07-19 Arm Limited Processor for sparse matrix computation

Also Published As

Publication number Publication date
WO2021030376A1 (en) 2021-02-18
US20210048991A1 (en) 2021-02-18
GB202317254D0 (en) 2023-12-27
CN114365154A (zh) 2022-04-15
GB2600356A (en) 2022-04-27

Similar Documents

Publication Publication Date Title
DE112020003833T5 (de) Durchführen von Matrixoperationen in neuronalen Netzen
DE112020004277T5 (de) Auf maschinellem Lernen basierendes Architektur-Suchverfahren für ein neuronales Netzwerk
DE112020004302T5 (de) Trainingsstrategiesuche unter verwendung von verstärkendem lernen
DE112020005509T5 (de) Prozessor und system zum identifizieren von out-of-distribution- eingabedaten in neuronalen netzwerken
DE112020005696T5 (de) Training und ableiten unter verwendung eines neuronalen netzwerkes zum vorhersagen der ausrichtung von objekten in bildern
DE112020003832T5 (de) Neuronale netzwerke zur bildregistrierung und bildsegmentierung, die unter verwendung eines registrierungssimulators trainiert werden
DE112020005156T5 (de) Verstärkendes Lernen von taktilen Greifstrategien
DE102019122790A1 (de) Robotersteuerungssystem
DE102021108042A1 (de) Verbessertes medienengagement durch tiefes lernen
DE112020004192T5 (de) Prozessor und system, um tensoroperationen in maschinelles lernen zu konvertieren
DE112020005206T5 (de) Bestimmen der Objektorientierung aus einem Bild mit Maschinenlernen
DE102021124008A1 (de) Training eines neuronalen netzes unter verwendung robuster temporaler ensemblebildung
DE112021000351T5 (de) Maschinenlernbasiertes objekterfassungssystem
DE112020005464T5 (de) Verteilte gewichtsaktualisierung für backpropagation eines neuronalen netzwerks
DE112021001762T5 (de) Erzeugen von kennzeichnungen für synthetische bilder unter verwenden eines oder mehrerer neuronaler netzwerke
DE112020006144T5 (de) Mastertransformationsarchitektur für Deep-Learning
DE112019007906T5 (de) Identifizierung von mehrskaligen Merkmalen unter Verwendung eines neuronalen Netzes
DE102021122617A1 (de) Globales föderiertes training für neuronale netze
DE112020005476T5 (de) Neuronales netz zur bildausrichtung
DE102021129825A1 (de) Objekterkennung und kollisionsvermeidung unter verwendung eines neuronalen netzes
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
DE112020004196T5 (de) Durchführen von zyklischen Redundanzprüfungen unter Verwendung paralleler Rechenarchitekturen
DE112021000953T5 (de) Erzeugung von kennzeichen mittels neuronaler netze

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R081 Change of applicant/patentee

Owner name: NVIDIA CORPORATION, SANTA CLARA, US

Free format text: FORMER OWNER: NVIDIA CORPORATION, SANTA CLARA, CA, US

R082 Change of representative

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