DE102021103492A1 - Anwendungsprogrammierschnittstelle zum beschleunigen von matrixoperationen - Google Patents

Anwendungsprogrammierschnittstelle zum beschleunigen von matrixoperationen Download PDF

Info

Publication number
DE102021103492A1
DE102021103492A1 DE102021103492.2A DE102021103492A DE102021103492A1 DE 102021103492 A1 DE102021103492 A1 DE 102021103492A1 DE 102021103492 A DE102021103492 A DE 102021103492A DE 102021103492 A1 DE102021103492 A1 DE 102021103492A1
Authority
DE
Germany
Prior art keywords
matrix
matrix multiplication
gemm
implementations
api
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
DE102021103492.2A
Other languages
English (en)
Inventor
Piotr MAJCHER
Mostafa Hagog
Philippe Vandermersch
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 DE102021103492A1 publication Critical patent/DE102021103492A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • G06F7/575Basic arithmetic logic units, i.e. devices selectable to perform either addition, subtraction or one of several logical operations, using, at least partially, the same circuitry
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/04Inference or reasoning models
    • G06N5/046Forward inferencing; Production systems
    • 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

Abstract

Einrichtungen, Systeme und Techniken, um einen Matrixmultiplikationsalgorithmus für eine Matrixmultiplikationsoperation zu bestimmen. In mindestens einer Ausführungsform wird eine Matrixmultiplikationsoperation analysiert, um einen geeigneten Matrixmultiplikationsalgorithmus zu bestimmen, um den Matrixmultiplikationsalgorithmus durchzuführen.

Description

  • GEBIET
  • Mindestens eine Ausführungsform gehört zu Verarbeitungsressourcen, um einen Algorithmus zu bestimmen, der in einer Matrixoperation zu benutzen ist. Beispielsweise gehört mindestens eine Ausführungsform zu Prozessoren oder Rechensystemen, die verwendet werden, um Algorithmen zu bestimmen, die in Matrixoperationen gemäß verschiedener neuartiger Techniken zu verwenden sind, die hier beschrieben werden.
  • HINTERGRUND
  • Das Bestimmen geeigneter Algorithmen, die in verschiedenen Matrixoperationen zu benutzen sind, kann erheblichen Speicher, Zeit oder Rechenressourcen verwenden. Mengen von Speicher, Zeit oder Rechenressourcen, die verwendet werden, um geeignete Algorithmen zu bestimmen, die in verschiedenen Matrixoperationen zu benutzen sind, können verbessert werden.
  • Figurenliste
    • 1 veranschaulicht ein Diagramm, bei dem Anwendungen eine Matrixmultiplikationsalgorithmus-Bibliothek benutzen, gemäß mindestens einer Ausführungsform;
    • 2 veranschaulicht ein Diagramm eines Matrix Multiply API-Aufrufs gemäß mindestens einer Ausführungsform;
    • 3 veranschaulicht ein Diagramm eines Get Algorithms API-Aufrufs gemäß mindestens einer Ausführungsform;
    • 4 veranschaulicht ein Diagramm eines Get Attribute API-Aufrufs gemäß mindestens einer Ausführungsform;
    • 5 veranschaulicht ein Diagramm eines Set Attribute API-Aufrufs gemäß mindestens einer Ausführungsform;
    • 6 veranschaulicht ein Diagramm eines Get Heuristic API-Aufrufs gemäß mindestens einer Ausführungsform;
    • 7 zeigt ein veranschaulichendes Beispiel eines Prozesses, um Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen, gemäß mindestens einer Ausführungsform;
    • 8 veranschaulicht ein beispielhaftes Rechenzentrum gemäß mindestens einer Ausführungsform;
    • 9 veranschaulicht ein Verarbeitungssystem gemäß mindestens einer Ausführungsform;
    • 10 veranschaulicht ein Computersystem gemäß mindestens einer Ausführungsform;
    • 11 veranschaulicht ein System gemäß mindestens einer Ausführungsform;
    • 12 veranschaulicht eine beispielhafte integrierte Schaltung gemäß mindestens einer Ausführungsform;
    • 13 veranschaulicht ein Rechensystem gemäß mindestens einer Ausführungsform;
    • 14 veranschaulicht eine APU gemäß mindestens einer Ausführungsform;
    • 15 veranschaulicht eine CPU gemäß mindestens einer Ausführungsform;
    • 16 veranschaulicht ein beispielhaftes Beschleunigungsintegrations-Slice gemäß mindestens einer Ausführungsform;
    • 17A und 17B veranschaulichen beispielhafte Graphikprozessoren gemäß mindestens einer Ausführungsform;
    • 18A veranschaulicht einen Graphikkern gemäß mindestens einer Ausführungsform;
    • 18B veranschaulicht eine GPGPU gemäß mindestens einer Ausführungsform;
    • 19A veranschaulicht einen Parallelprozessor gemäß mindestens einer Ausführungsform;
    • 19B veranschaulicht einen Verarbeitungscluster gemäß mindestens einer Ausführungsform;
    • 19C veranschaulicht einen Graphik-Multiprozessor gemäß mindestens einer Ausführungsform;
    • 20 veranschaulicht einen Graphikprozessor gemäß mindestens einer Ausführungsform;
    • 21 veranschaulicht einen Prozessor gemäß mindestens einer Ausführungsform;
    • 22 veranschaulicht einen Prozessor gemäß mindestens einer Ausführungsform;
    • 23 veranschaulicht einen Graphikprozessorkern gemäß mindestens einer Ausführungsform;
    • 24 veranschaulicht eine PPU gemäß mindestens einer Ausführungsform;
    • 25 veranschaulicht einen GPC gemäß mindestens einer Ausführungsform;
    • 26 veranschaulicht einen Streaming-Multiprozessor gemäß mindestens einer Ausführungsform;
    • 27 veranschaulicht einen Softwarestapel einer Programmierplattform gemäß mindestens einer Ausführungsform;
    • 28 veranschaulicht eine CUDA-Implementierung eines Softwarestapels von 27 gemäß mindestens einer Ausführungsform;
    • 29 veranschaulicht eine ROCm-Implementierung eines Softwarestapels von 27 gemäß mindestens einer Ausführungsform;
    • 30 veranschaulicht eine OpenCL-Implementierung eines Softwarestapels von 27 gemäß mindestens einer Ausführungsform;
    • 31 veranschaulicht Software, die von einer Programmierplattform gemäß mindestens einer Ausführungsform unterstützt wird;
    • 32 veranschaulicht ein Kompilieren von Code, um auf Programmierplattformen von 27-30 auszuführen, gemäß mindestens einer Ausführungsform;
    • 33 veranschaulicht ausführlicher ein Kompilieren von Code, um auf Programmierplattformen von 27-30 auszuführen, gemäß mindestens einer Ausführungsform;
    • 34 veranschaulicht das Übersetzen eines Quellcodes vor dem Kompilieren eines Quellcodes gemäß mindestens einer Ausführungsform;
    • 35A veranschaulicht ein System, das konfiguriert ist, um einen CUDA-Quellcode unter Verwendung von unterschiedlicher Arten von Verarbeitungseinheiten zu kompilieren und auszuführen, gemäß mindestens einer Ausführungsform;
    • 35B veranschaulicht ein System, das konfiguriert ist, um den CUDA-Quellcode von 35A unter Verwendung einer CPU und einer CUDA-aktivierten GPU zu kompilieren und auszuführen, gemäß mindestens einer Ausführungsform;
    • 35C veranschaulicht ein System, das konfiguriert ist, um den CUDA-Quellcode von 35A unter Verwendung einer CPU und einer Nicht-CUDA-aktivierten GPU zu kompilieren und auszuführen, gemäß mindestens einer Ausführungsform;
    • 36 veranschaulicht einen beispielhaften Kernel, der durch das CUDA-in-HIP-Übersetzungswerkzeug von 35C übersetzt ist, gemäß mindestens einer Ausführungsform;
    • 37 veranschaulicht ausführlicher die Nicht-CUDAaktivierte GPU von 35C gemäß mindestens einer Ausführungsform; und
    • 38 veranschaulicht, wie Threads eines beispielhaften CUDA-Grid in unterschiedlichen Recheneinheiten von 37 abgebildet werden, gemäß mindestens einer Ausführungsform.
  • AUSFÜHRLICHE BESCHREIBUNG
  • In mindestens einer Ausführungsform ist eine Matrixmultiplikationsalgorithmus-Bibliothek eine Sammlung von einer oder mehreren Rechenressourcen, die einen oder mehrere Prozesse in Verbindung mit verschiedenen Matrixmultiplikationsoperationen definiert. In mindestens einer Ausführungsform umfasst eine Matrixmultiplikationsalgorithmus-Bibliothek eine oder mehrere Datenbanken, die verschiedene Matrixmultiplikationsalgorithmen umfassen, die benutzt werden können, um verschiedene Matrixmultiplikationsoperationen durchzuführen. In mindestens einer Ausführungsform kann eine Matrixmultiplikationsalgorithmus-Bibliothek Funktionalitäten in Verbindung mit Daten bereitstellen, die verschiedene Attribute und/oder Charakteristika angeben, die einer Matrixmultiplikationsoperation zugeordnet sind, um einen geeigneten Matrixmultiplikationsalgorithmus zu bestimmen, um die Matrixmultiplikationsoperation durchzuführen.
  • In mindestens einer Ausführungsform ist eine Matrixmultiplikationsalgorithmus-Bibliothek durch eine Anwendungsprogrammierschnittstelle (Application Programming Interface; API) zugänglich. In mindestens einer Ausführungsform ist eine API ein Satz von Unterprogrammdefinitionen, Kommunikationsprotokollen, Softwarewerkzeugen und/oder anderen verschiedenen Komponenten, die ein Verfahren zur Kommunikation mit Komponenten einer Bibliothek bereitstellen, wie beispielsweise einer Matrixmultiplikationsalgorithmus-Bibliothek. In mindestens einer Ausführungsform ist eine Matrixmultiplikationsalgorithmus-Bibliothek durch eine API zugänglich und wählt eine oder mehrere optimierenden Allgemeinen Matrix-in-Matrixmultiplikation (General Matrix-to-Matrix Multiply; GEMM)-Implementierungen unter mehreren GEMM-Implementierungen aus, die mindestens teilweise basierend auf einem oder mehreren von der API empfangenen Parametern durchzuführen sind.
  • In mindestens einer Ausführungsform ist eine API nutzbar, um auf verschiedene Fähigkeiten einer Matrixmultiplikationsalgorithmus-Bibliothek zuzugreifen. In mindestens einer Ausführungsform ist eine API durch eine Rechenvorrichtung, wie beispielsweise einen Computer, einen mobilen Computer, eine mobile Vorrichtung und/oder Variationen davon zugänglich. In mindestens einer Ausführungsform kann eine API benutzt werden, um Matrixoperationen, Attribute von verschiedenen durchzuführenden Matrixoperationen zu spezifizieren und andere Operationen in Verbindung mit verschiedenen Matrixoperationen durchzuführen.
  • In mindestens einer Ausführungsform ermöglicht eine API einer Matrixmultiplikationsalgorithmus-Bibliothek Entitäten Matrixoperationen durchzuführen und verschiedene Aspekte von Matrixoperationen, wie beispielsweise Matrixdaten-Layouts, Eingabedatentypen, Algorithmus-Implementierung, Heuristiken und/oder Variationen davon, zu spezifizieren. In mindestens einer Ausführungsform ermöglicht eine API einer Matrixmultiplikationsalgorithmus-Bibliothek einer Entität, eine oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe, basierend mindestens teilweise auf durch den einen oder mehrere API-Aufrufe angegebenen Informationen, eine Liste von einem oder mehreren Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen.
  • In mindestens einer Ausführungsform ermöglicht eine API Entitäten, verschiedene parallelisierbare Operationen, wie beispielsweise verschiedene mathematische Operationen, Matrixoperationen, Faltungsoperationen und/oder Variationen davon durchzuführen, und die API ermöglicht einer Entität, einen oder mehrere API-Aufrufe vorzunehmen, die Eingaben, Charakteristika der Eingaben, eine gewünschte Operation und Charakteristika der gewünschten Operation angeben können, und als Reaktion auf den einen oder mehrerer API-Aufrufe, basierend mindestens teilweise auf Informationen, die durch den einen oder mehrere API-Aufrufe angegeben werden, eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Operation durchzuführen, einen Vergleich der Leistung von Algorithmen des eine oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Operation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Operation zu empfangen.
  • 1 veranschaulicht ein Diagramm 100, bei dem Anwendungen 102 eine Matrixmultiplikationsalgorithmus-Bibliothek 106 benutzen, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform sind die Anwendungen 102 Rechenanwendungen, die auf verschiedene Funktionalitäten der Matrixmultiplikationsalgorithmus-Bibliothek 106 zugreifen. In mindestens einer Ausführungsform benutzen die Anwendungen 102 die Matrixmultiplikationsalgorithmus-Bibliothek 106 innerhalb einer Rechenvorrichtung, bei der die Rechenvorrichtung Anwendungen 102 und die Matrixmultiplikationsalgorithmus-Bibliothek 106 umfassen können. In mindestens einer Ausführungsform können Anwendungen 102 Entitäten zugeordnet sein, die aus einer Perspektive der Matrixmultiplikationsalgorithmus-Bibliothek 106, Dritte sind, die Funktionen benutzen, die von der Matrixmultiplikationsalgorithmus-Bibliothek 106 bereitgestellt werden.
  • In mindestens einer Ausführungsform umfasst die Matrixmultiplikationsalgorithmus-Bibliothek 106 eine Algorithmusdatenbank 108. In mindestens einer Ausführungsform, greift die Matrixmultiplikationsalgorithmus-Bibliothek 106 auf die Algorithmusdatenbank 108 durch einen oder mehrere Datenbankdienste zu. In mindestens einer Ausführungsform ist die Algorithmusdatenbank 108 innerhalb der Matrixmultiplikationsalgorithmus-Bibliothek 106 hartcodiert. In mindestens einer Ausführungsform ist die Algorithmusdatenbank 108 eine Datenbank, die Informationen hinsichtlich verschiedener Matrixmultiplikationsalgorithmen umfasst, die benutzt werden können, um verschiedene Matrixmultiplikationsoperationen durchzuführen. In mindestens einer Ausführungsform kann die Matrixmultiplikation in verschiedenen Weisen durchgeführt werden, die verschiedenen Matrixmultiplikationsalgorithmen entsprechen. In mindestens einer Ausführungsform können für eine gegebene Matrixmultiplikationsoperation mehrere Matrixmultiplikationsalgorithmen benutzt werden, um die Matrixmultiplikationsoperation durchzuführen, obwohl die Leistung zwischen den mehreren Matrixmultiplikationsalgorithmen unterschiedlich sein kann. In mindestens einer Ausführungsform wird die Algorithmusdatenbank 108 von der Matrixmultiplikationsalgorithmus-Bibliothek benutzt, um einen geeigneten Matrixmultiplikationsalgorithmus für eine gegebene Matrixmultiplikationsoperation zu bestimmen, die durch die Anwendungen 102 spezifiziert sein können. In mindestens einer Ausführungsform kann die Algorithmusdatenbank 108 Kennungen für verschiedenen Matrixmultiplikationsalgorithmen umfassen, bei denen ein bestimmter Matrixmultiplikationsalgorithmus unter Benutzung einer bestimmten Kennung, die dem bestimmten Matrixmultiplikationsalgorithmus zugeordnet ist, gekennzeichnet und/oder abgerufen werden kann.
  • In mindestens einer Ausführungsform kann die Matrixmultiplikationsalgorithmus-Bibliothek 106 verschiedene Operationen in Verbindung mit der Algorithmusdatenbank 108 durchführen. In mindestens einer Ausführungsform umfasst die Matrixmultiplikationsalgorithmus-Bibliothek 106 eine API(s) 104, die verwendet wird(werden), um auf Funktionen zuzugreifen, die durch die Matrixmultiplikationsalgorithmus-Bibliothek 106 bereitgestellt werden. In mindestens einer Ausführungsform können die Anwendungen 102 auf verschiedene Funktionalitäten der Matrixmultiplikationsalgorithmus-Bibliothek 106 gemäß der API(s) 104 zugreifen. In mindestens einer Ausführungsform kann eine Anwendung der Anwendungen 102 die API(s) 104 in Verbindung mit Matrixmultiplikationsalgorithmus-Bibliothek 106 benutzen, um Attribute einer Matrixmultiplikationsoperation zu spezifizieren, ein bevorzugtes Suchverfahren für potenzielle Algorithmen zu spezifizieren, welche die Matrixmultiplikationsoperation durchführen können, um die potenziellen Algorithmen abzurufen, die den Matrixmultiplikationsalgorithmus durchführen können, und die potenziellen Algorithmen zu prüfen und/oder zu vergleichen, um einen geeigneten Algorithmus zu bestimmen, um die Matrixmultiplikationsoperation durchzuführen.
  • In mindestens einer Ausführungsform stellt/stellen die API(s) 104 Anwendungen 102 mit Fähigkeiten bereit, um auf verschiedene Funktionalitäten der Matrixmultiplikationsalgorithmus-Bibliothek 106 zuzugreifen, bei der die API(s) 104 verschiedenen Komponenten zum Zugreifen auf die verschiedenen Funktionalitäten umfasst. In mindestens einer Ausführungsform können Anwendungen 102 API(s) 104 benutzen, um verschiedene Aspekte einer Matrixmultiplikationsoperation, wie beispielsweise einen Datentyp, der einen Datentyp von Matrixdaten angeben kann, die in der Matrixmultiplikationsoperation benutzt werden, einen Skalentyp, der einen Datentyp eines Skalierungsfaktors angeben kann, der in der Matrixmultiplikationsoperation benutzt wird, einen Transformationstyp, der jegliche potenziellen Matrixtransformationsoperationen angeben kann, die in der Matrixmultiplikationsoperation durchzuführen sind, sowie auch verschiedene andere Attribute der Matrixmultiplikationsoperation anzugeben.
  • In mindestens einer Ausführungsform können Anwendungen 102 die API(s) 104 benutzen, um Suchpräferenzen anzugeben, die von der Matrixmultiplikationsalgorithmus-Bibliothek 106 zu benutzen sind, um nach potenziellen Matrixmultiplikationsalgorithmen zu suchen, um eine bestimmte Matrixmultiplikationsoperation durchzuführen, wie beispielsweise ein Suchverfahren, das ein bestimmtes Verfahren angeben kann, das die Matrixmultiplikationsalgorithmus-Bibliothek 106 benutzen kann, um nach den potenziellen Matrixmultiplikationsalgorithmen zu suchen, ein Mathematikmodus, der bestimmte Präferenzen der mathematischen Betriebsart angeben kann, welche die Matrixmultiplikationsalgorithmus-Bibliothek 106 benutzen kann, um nach den potenziellen Matrixmultiplikationsalgorithmen zu suchen, ein Verringerungsschema, das bestimmte Präferenzen des Matrixverringerungsschema angeben kann, welche die Matrixmultiplikationsalgorithmus-Bibliothek 106 benutzen kann, um nach den potenziellen Matrixmultiplikationsalgorithmen zu suchen, einen Gaußschen Modus, der zusätzliche Präferenzen der mathematische Betriebsart angeben kann, welche die Matrixmultiplikationsalgorithmus-Bibliothek 106 benutzen kann, um nach den potenziellen Matrixmultiplikationsalgorithmen zu suchen, sowie auch andere Präferenzen, wie beispielsweise bevorzugte Ressourcennutzung und/oder Variationen davon. In mindestens einer Ausführungsform kann die Matrixmultiplikationsalgorithmus-Bibliothek 106 Suchpräferenzen benutzen, um eine Suche nach potenziellen Matrixmultiplikationsalgorithmen zu begrenzen, einzuschränken und/oder zu definieren, um eine bestimmte Matrixmultiplikationsoperation durchzuführen.
  • In mindestens einer Ausführungsform kann die Matrixmultiplikationsalgorithmus-Bibliothek 106 Funktionen bereitstellen, die basierend auf eingegebenen Suchpräferenzen von einer Anwendung von Anwendungen 102 eine Liste von potenziellen Matrixmultiplikationsalgorithmen bereitstellen, die eine bestimmte Matrixmultiplikationsoperation durchführen können, bei der die Anwendung jeden Algorithmus der potenziellen Matrixmultiplikationsalgorithmen konfigurieren, prüfen und vergleichen kann. In mindestens einer Ausführungsform umfassen Matrixmultiplikationsalgorithmen verschiedene Attribute, die konfigurierbar sind und verschiedene Aspekte der Matrixmultiplikationsalgorithmen diktieren.
  • In mindestens einer Ausführungsform kann ein Matrixmultiplikationsalgorithmus ein konfigurierbares Kachel-ID Attribut umfassen, das eine Dimension von Kacheln angeben kann, die in dem Matrixmultiplikationsalgorithmus benutzt werden. In mindestens einer Ausführungsform kann ein Matrixmultiplikationsalgorithmus ein Teilen von Eingabematrizen in Kacheln umfassen, die einzeln verarbeitet werden können, bei der ein Kachel-ID-Attribut eine Dimension der Kacheln spezifizieren kann. In mindestens einer Ausführungsform kann ein Matrixmultiplikationsalgorithmus ein konfigurierbares Attribut der Anzahl k von Aufteilungen umfassen, das eine Anzahl von der in dem Matrixmultiplikationsalgorithmus benutzten Aufteilungen angeben kann. In mindestens einer Ausführungsform kann ein Matrixmultiplikationsalgorithmus Aufteilungsoperationen der Matrixmultiplikationsalgorithmus in einer Anzahl von Operationen umfassen, die parallel durchgeführt werden können, bei denen ein Attribut der Anzahl k von Aufteilungen die Anzahl von Operationen spezifizieren kann. In mindestens einer Ausführungsform kann ein Matrixmultiplikationsalgorithmus ein konfigurierbares Attribut eines Verringerungsschemas umfassen, das ein Verringerungsschema angeben kann, das in dem Matrixmultiplikationsalgorithmus benutzt wird. In mindestens einer Ausführungsform kann ein Matrixmultiplikationsalgorithmus das Benutzen eines Verringerungsschemas umfassen, um Abschnitte verschiedener Berechnungen zu verringern, die bei dem Matrixmultiplikationsalgorithmus beteiligt sind, bei dem ein Verringerungsschema-Attribut verschiedene Aspekte des Verringerungsschemas angeben kann, wie beispielsweise, ob das Verringerungsschema aktiviert/deaktiviert ist, einen Ort (z.B. Speicherort), bei dem Verringerungsprozesse des Verringerungsschemas durchgeführt werden, sowie auch Variationen davon. In mindestens einer Ausführungsform kann ein Matrixmultiplikationsalgorithmus ein Swizzlingkonfigurierbares Attribut zum Umordnen umfassen, das angeben kann, wenn Swizzling in dem Matrixmultiplikationsalgorithmus benutzt wird. In mindestens einer Ausführungsform kann sich Swizzling auf einen Prozess des Umordnens von Elementen verschiedener Matrizen beziehen, die in einer Matrixmultiplikationsoperation benutzt werden. In mindestens einer Ausführungsform kann ein Matrixmultiplikationsalgorithmus eine beliebige Anzahl von konfigurierbaren Attributen umfassen, die einen oder mehrere Aspekte des Matrixmultiplikationsalgorithmus definieren können.
  • In mindestens einer Ausführungsform können Anwendungen 102 einen oder mehrere Prozesse in Verbindung mit der Matrixmultiplikationsalgorithmus-Bibliothek 106 durchführen, um ein Datenobjekt zu erzeugen, das einen Matrixmultiplikationsalgorithmus umfasst, und Attribute des Matrixmultiplikationsalgorithmus zu empfangen. In mindestens einer Ausführungsform können Anwendungen 102 die API(s) 104 benutzen, um konfigurierbare Attribute eines bestimmten Matrixmultiplikationsalgorithmus einzustellen, wie beispielsweise Kachel-ID, die eine Dimension von Kacheln angeben kann, die in dem bestimmten Matrixmultiplikationsalgorithmus zu benutzen sind, Anzahl von Aufteilungen k, die eine Anzahl von Aufteilungen angeben kann, die in dem bestimmten Matrixmultiplikationsalgorithmus zu benutzen sind, Verringerungsschema, das ein bestimmtes Verringerungsschema angeben kann, das in dem bestimmten Matrixmultiplikationsalgorithmus zu benutzen ist, Swizzling, das angeben kann, wenn Swizzling in dem bestimmten Matrixmultiplikationsalgorithmus zu benutzen ist, sowie auch verschiedene andere konfigurierbare Attribute, die in dem bestimmten Matrixmultiplikationsalgorithmus benutzt werden können. In mindestens einer Ausführungsform können Anwendungen 102 die API(s) 104 benutzen, um Attribute einer bestimmte Matrixmultiplikationsalgorithmus zu konfigurieren, so dass der bestimmte Matrixmultiplikationsalgorithmus geprüft werden kann, um eine Leistung des bestimmten Matrixmultiplikationsalgorithmus in einer bestimmten Matrixmultiplikationsoperation zu bestimmen. In mindestens einer Ausführungsform kann(können) die API(s) 104 eine beliebige Anzahl von API-Funktionen umfassen, die benutzt werden können, um auf verschiedene Funktionalitäten der Matrixmultiplikationsalgorithmus-Bibliothek 106 zuzugreifen.
  • 2-6 veranschaulichen graphische Darstellungen von API-Aufrufen gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform entsprechen in 2-6 veranschaulichte API-Aufrufe einer API, wie beispielsweise der API(s) 104, wie in Verbindung mit 1 beschrieben. In mindestens einer Ausführungsformkönnen API-Aufrufe von Entitäten, wie beispielsweise Anwendungen 102, wie in Verbindung mit 1 beschrieben, in Verbindung mit einer Bibliothek vorgenommen werden, wie beispielsweise der Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben. Außerdem sind, während jede der 2-6 bestimmte Sammlungen von Informationen veranschaulichen, die in API-Aufrufen und Reaktionen umfasst sein können, Variationen innerhalb des Umfangs der vorliegenden Offenbarung, und API-Aufrufe können weniger oder mehr Informationskomponenten aufweisen. In mindestens einer Ausführungsform können nicht alle API-Aufrufe, die unter Verwendung einer gleichen API-Funktion vorgenommen wurden, gleiche Informationskomponenten umfassen. In mindestens einer Ausführungsform kann eine Art und/oder Existenz von nicht trivialen Informationen für einen Parameter beispielsweise von einem Wert eines anderen Parameters abhängen. In mindestens einer Ausführungsform kann ein Art und/oder Existenz von nicht trivialer Informationen für eine Komponente einer Reaktion von einem Wert eines anderen Parameters und/oder eines Parameters eines API-Aufrufs abhängen, der die Reaktion auslöste.
  • 2 veranschaulicht ein Diagramm 200 eines Matrix Multiply API-Aufrufs gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird eine Matrix Multiply API-Funktion benutzt, um eine Matrixmultiplikation von Matrizen zu berechnen. In mindestens einer Ausführungsform umfassen Parameter für einen Matrix Multiply API-Aufruf eine Operationsbeschreibung, Eingabeskalare, Eingabematrizen, Matrix-Layout-Deskriptoren, einen Ausgabeort, einen Algorithmus und kann ferner andere Parameter umfassen, die Aspekte einer Matrixmultiplikationsoperation weiter definieren können.
  • In mindestens einer Ausführungsform spezifiziert ein Operationsbeschreibungsparameter verschiedene Aspekte einer Matrixmultiplikationsoperation und Eingaben in den Operationsbeschreibungsparameter können einen Zeiger auf ein Datenobjekt umfassen, das eine Operationsbeschreibung umfasst, bei der das Datenobjekt als ein Matrixmultiplikationsoperation-Deskriptor bezeichnet werden kann, sowie auch Variationen davon. In mindestens einer Ausführungsform gibt eine Operationsbeschreibung Aspekte einer Matrixmultiplikationsoperation an und kann einen Datentyp, der einen Datentyp von Matrixdaten angeben kann, die in der Matrixmultiplikationsoperation benutzt werden, einen Skalentyp, der ein Datentyp eines Skalierungsfaktors angeben kann, der in der Matrixmultiplikationsoperation benutzt wird, einen Transformationstyp, der jegliche potenziellen Matrixtransformation Operationen angeben kann, die in der Matrixmultiplikationsoperation durchzuführen sind, sowie auch verschiedene andere Aspekte der Matrixmultiplikationsoperation umfassen.
  • In mindestens einer Ausführungsform spezifiziert ein Eingabeskalarparameter Eingabeskalare, die in einer Matrixmultiplikationsoperation zu benutzen sind, und Eingaben in den Eingabeskalarparameter können Zeiger auf Datenobjekte umfassen, die Werte der Eingabeskalare umfassen, sowie auch Variationen davon. In mindestens einer Ausführungsform spezifiziert der Eingabematrizenparameter Eingabematrizen, die in einer Matrixmultiplikationsoperation zu benutzen sind, und Eingaben in den Eingabematrizenparameter können Zeiger auf Datenobjekte, die Werte der Eingabematrizen umfassen, sowie auch Variationen davon umfassen. In mindestens einer Ausführungsform spezifiziert der Matrix-Layout-Deskriptorparameter Charakteristika von Layouts von Eingabematrizen, die in einer Matrixmultiplikationsoperation zu benutzen sind, und Eingaben in den Matrix-Layout-Deskriptorparameter können Zeiger auf Datenobjekte umfassen, die Informationen umfassen, welche die Charakteristika angeben, bei denen die Datenobjekte als Matrix-Layout-Deskriptoren bezeichnet werden können, sowie auch Variationen davon. In mindestens einer Ausführungsform ist jede Eingabematrix mindestens einem Matrix-Layout-Deskriptor zugeordnet. In mindestens einer Ausführungsform spezifiziert der Ausgabeortparameter einen Ort, bei dem ein Ergebnis einer Matrixmultiplikationsoperation zu speichern ist, und Eingaben in den Ausgabeortparameter können einen Zeiger auf den Ort umfassen, sowie auch Variationen davon. In mindestens einer Ausführungsform spezifiziert ein Algorithmusparameter einen bestimmten Algorithmus, der in einer Matrixmultiplikationsoperation zu benutzen ist, und Eingaben in den Algorithmusparameter können einen Zeiger auf ein Datenobjekt umfassen, den bestimmten Algorithmus sowie auch Variationen davon umfasst.
  • In mindestens einer Ausführungsform umfasst eine Reaktion auf einen Matrix Multiply API-Aufruf einen Betriebsstatus. In mindestens einer Ausführungsform wird im Anschluss an einen Matrix Multiply API-Aufruf, der eine Matrixmultiplikationsoperation angibt, ein Ergebnis der Matrixmultiplikationsoperation berechnet und in einem Ort gespeichert, der durch den Ausgabeortparameter spezifiziert wird. In mindestens einer Ausführungsform gibt der Betriebsstatus an, ob eine durch einen Matrix Multiply API-Aufruf angegebene Matrixmultiplikationsoperation erfolgreich ist, gescheitert ist oder ob andere Fehler aufgetreten sind. In mindestens einer Ausführungsform wird der Betriebsstatus als Reaktion auf einen Matrix Multiply API-Aufruf zurückgegeben, um einen Status des Matrix Multiply API-Aufruf anzugeben.
  • 3 veranschaulicht ein Diagramm 300 eines Get Algorithms API-Aufrufs gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird eine Get Algorithms API-Funktion benutzt, um potenzielle Algorithmen zu bekommen, die benutzt werden können, um eine spezifizierte Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform umfassen Parameter für einen Get Algorithms API-Aufruf Rechendatentypen, eine Algorithmuszählung, eine Ergebnisanordnung und eine Ergebniszählung und kann ferner andere Parameter umfassen, die weitere Aspekte einer Matrixmultiplikationsoperation definieren können.
  • In mindestens einer Ausführungsform spezifiziert ein Rechendatentypenparameter Datentypen von verschiedenen Elementen einer Matrixmultiplikationsoperation und Eingaben in den Rechendatentypenparameter können Kennungen von Datentypen einer oder mehreren Berechnungen, die in der Matrixmultiplikationsoperation durchgeführt werden, Kennungen von Datentypen eines oder mehrerer Skalierungsfaktoren, die in der Matrixmultiplikationsoperation benutzt werden, Kennungen von Datentypen einer oder mehrerer Operandenmatrizen, die bei der Matrixmultiplikationsoperation benutzt werden, sowie auch Variationen davon umfassen. In mindestens einer Ausführungsform spezifiziert ein Algorithmuszählparameter einen Wert einer Anzahl von gewünschten Algorithmen und Eingaben in den Algorithmuszählparameter können einen Ganzzahlwert der Anzahl sowie auch Variationen davon umfassen. In mindestens einer Ausführungsform spezifiziert ein Ergebnisanordnungsparameter eine Anordnung, die benutzt werden kann, um Algorithmuskennungen zu speichern, und Eingaben in den Ergebnisanordnungsparameter können die Anordnung, einen Zeiger auf die Anordnung sowie auch Variationen davon umfassen. In mindestens einer Ausführungsform spezifiziert der Ergebniszählparameter ein Datenobjekt, das benutzt werden kann, um eine Anzahl von zurückgegeben Algorithmen zu speichern, und Eingaben in den Ergebniszählparameter können einen Zeiger auf das Datenobjekt sowie auch Variationen davon umfassen.
  • In mindestens einer Ausführungsform umfasst eine Reaktion auf einen Get Algorithms API-Aufruf einen Betriebsstatus. In mindestens einer Ausführungsform werden im Anschluss an einen Get Algorithms API-Aufruf, der Kriterien für potenzielle Algorithmen angibt, die benutzt werden können, um eine spezifizierte Matrixmultiplikationsoperation durchzuführen, die potenziellen Algorithmen bestimmt und in einer Anordnung gespeichert, die durch den Ergebnisanordnungsparameter spezifiziert wird, und ein Zählwert der potenziellen Algorithmen wird in einem Datenobjekt gespeichert, das durch einen Ergebniszählparameter spezifiziert wird. In mindestens einer Ausführungsform gibt der Betriebsstatus an, wenn ein Get Algorithms API-Aufruf erfolgreich ist, gescheitert ist oder wenn andere Fehler aufgetreten sind. In mindestens einer Ausführungsform wird der Betriebsstatus als Reaktion auf einen Get Algorithms API-Aufruf zurückgegeben, um einen Status des Get Algorithms API-Aufrufs anzugeben.
  • 4 veranschaulicht ein Diagramm 400 eines Get Attribute API-Aufrufs gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird eine Get Attribute API-Funktion benutzt, um einen Wert eines Attributs eines Matrixmultiplikationsalgorithmus abzurufen. In mindestens einer Ausführungsform umfassen Parameter für einen Get Attribute API-Aufruf einen Algorithmus, ein Attribut, einen Ergebnispuffer und können ferner andere Parameter umfassen, die weitere Aspekte des Get Attribute API-Aufrufs definieren können.
  • In mindestens einer Ausführungsform spezifiziert Algorithmusparameter einen Matrixmultiplikationsalgorithmus und Eingaben in den Algorithmusparameter können einen Zeiger auf ein Datenobjekt umfassen, das den Matrixmultiplikationsalgorithmus umfasst, sowie auch Variationen davon umfasst. In mindestens einer Ausführungsform spezifiziert der Attributparameter ein Attribut eines Matrixmultiplikationsalgorithmus und Eingaben in den Attributparameter können eine Kennung des Attributs sowie auch Variationen davon umfassen. In mindestens einer Ausführungsform spezifiziert ein Ergebnispufferparameter ein Datenobjekt, das benutzt werden kann, um einen zurückgegebenen Attributwert zu speichern, und Eingaben in den Ergebnispufferparameter können das Datenobjekt, einen Zeiger auf das Datenobjekt sowie auch Variationen davon umfassen.
  • In mindestens einer Ausführungsform umfasst eine Reaktion auf einen Get Attribute API-Aufruf einen Betriebsstatus. In mindestens einer Ausführungsform wird im Anschluss an einen Get Attribute API-Aufruf, der ein Attribut einer Matrixmultiplikationsalgorithmus angibt, ein Wert des Attributs bestimmt und in einem Datenobjekt gespeichert, das durch ein Ergebnispufferparameter spezifiziert ist. In mindestens einer Ausführungsform gibt ein Betriebsstatus an, ob ein Get Attribute API-Aufruf erfolgreich ist, gescheitert ist oder ob andere Fehler aufgetreten sind. In mindestens einer Ausführungsform wird der Betriebsstatus als Reaktion auf ein Get Attribute API-Aufruf zurückgegeben, um einen Status des Get Attribute API-Aufrufs anzugeben.
  • 5 veranschaulicht ein Diagramm 500 eines Set Attribute API-Aufrufs gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird eine Set Attribute API-Funktion benutzt, um ein Attribut eines Matrixmultiplikationsalgorithmus zu konfigurieren. In mindestens einer Ausführungsform umfassen Parameter für einen Set Attribute API-Aufruf einen Algorithmus, ein Attribut und einen Wertepuffer und können ferner andere Parameter umfassen, die weitere Aspekte des Set Attribute API-Aufrufs definieren können.
  • In mindestens einer Ausführungsform spezifiziert ein Algorithmusparameter einen Matrixmultiplikationsalgorithmus und Eingaben in den Algorithmusparameter können einen Zeiger auf ein Datenobjekt umfassen, das den Matrixmultiplikationsalgorithmus sowie auch Variationen davon umfasst. In mindestens einer Ausführungsform spezifiziert der Attributparameter ein Attribut eines Matrixmultiplikationsalgorithmus und Eingaben in den Attributparameter können eine Kennung des Attributs sowie auch Variationen davon umfassen. In mindestens einer Ausführungsform spezifiziert der Wertepufferparameter einen Attributwert und Eingaben in den Wertepufferparameter können den Attributwert, ein Datenobjekt, das den Attributwert umfasst, einen Zeiger auf das Datenobjekt sowie auch Variationen davon umfassen.
  • In mindestens einer Ausführungsform umfasst eine Reaktion auf einen Set Attribute API-Aufruf einen Betriebsstatus. In mindestens einer Ausführungsform wird im Anschluss an einem Set Attribute API-Aufruf, der einen Wert eines Attributs eines Matrixmultiplikationsalgorithmus angibt, das Attribut des Matrixmultiplikationsalgorithmus auf den Wert eingestellt. In mindestens einer Ausführungsform gibt der Betriebsstatus an, ob ein Set Attribute API-Aufruf erfolgreich ist, gescheitert ist oder ob andere Fehler aufgetreten sind. In mindestens einer Ausführungsform wird der Betriebsstatus als Reaktion auf einen Set Attribute API-Aufruf zurückgegeben, um einen Status des Set Attribute API-Aufrufs anzugeben.
  • 6 veranschaulicht ein Diagramm 600 eines Get Heuristic API-Aufrufs gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird eine Get Heuristic API-Funktion benutzt, um mögliche Matrixmultiplikationsalgorithmen für eine Matrixmultiplikationsoperation basierend auf definierten Kriterien zu bestimmen. In mindestens einer Ausführungsform umfassen Parameter für einen Get Heuristic API-Aufruf eine Betriebsbeschreibung, Eingabematrizen, Suchpräferenzen, einen Algorithmuszählwert, eine Ergebnisanordnung, einen Ergebniszählwert und können ferner andere Parameter umfassen, die Aspekte des Get Heuristic API-Aufrufs ferner definieren können.
  • In mindestens einer Ausführungsform spezifiziert Betriebsbeschreibungsparameter verschiedene Aspekte einer Matrixmultiplikationsoperation und Eingaben in den Betriebsbeschreibungsparameter können einen Zeiger auf ein Datenobjekt, das eine Betriebsbeschreibung sowie auch Variationen davon umfasst. In mindestens einer Ausführungsform wird die Betriebsbeschreibung von einer Bibliothek benutzt, wie beispielsweise einer Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben, um nach potenziellen Matrixmultiplikationsalgorithmen zu suchen, um eine Matrixmultiplikationsoperation durchzuführen, wie durch die Betriebsbeschreibung angegeben, und können einen Datentyp, der einen Datentyp von Matrixdaten angeben kann, die in der Matrixmultiplikationsoperation benutzt werden, einen Skalentyp, der einen Datentyp eines Skalierungsfaktors angeben kann, der in der Matrixmultiplikationsoperation benutzt wird, einen Transformationstyp, der jegliche potenziellen Matrixtransformationsoperationen angeben kann, die in der Matrixmultiplikationsoperation durchzuführen sind, sowie auch verschiedene andere Aspekte der Matrixmultiplikationsoperation umfassen.
  • In mindestens einer Ausführungsform spezifiziert der Eingabematrizenparameter Eingabematrizen, die in einer Matrixmultiplikationsoperation zu benutzen sind, und Eingaben in den Eingabematrizenparameter können Zeiger auf Datenobjekte umfassen, die Werte der Eingabematrizen sowie auch Variationen davon umfassen. In mindestens einer Ausführungsform spezifiziert der Suchpräferenzenparameter Beschränkungen zum Bestimmen potenzieller Matrixmultiplikationsalgorithmen, um eine Matrixmultiplikationsoperation durchzuführen, und Eingaben in den Suchpräferenzenparameter können einen Zeiger auf ein Datenobjekt umfassen, das Suchpräferenzen sowie auch Variationen davon umfasst. In mindestens einer Ausführungsform werden Suchpräferenzen von einer Bibliothek benutzt, wie beispielsweise einer Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben, um nach potenziellen Matrixmultiplikationsalgorithmen zu suchen, um eine bestimmte Matrixmultiplikationsoperation durchzuführen, und kann Präferenzen umfassen, wie beispielsweise ein Suchverfahren, das ein bestimmtes Verfahren zum Benutzen angeben kann, um nach den potenziellen Matrixmultiplikationsalgorithmen zu suchen, Mathematikmodus, der bestimmte mathematische Präferenzen der ein zum Benutzen angeben kann, um nach den potenziellen Matrixmultiplikationsalgorithmen zu suchen, Verringerungsschema, das bestimmte Matrixverringerungsschemapräferenzen zum Benutzen angeben kann, um nach den potenziellen Matrixmultiplikationsalgorithmen zu suchen, einen Gaußschen Modus, der zusätzliche bestimmte Präferenzen der mathematische Betriebsart zum Benutzen angeben kann, um nach den potenziellen Matrixmultiplikationsalgorithmen zu suchen, sowie auch andere Präferenzen, wie beispielsweise bevorzugte Ressourcennutzung und/oder Variationen davon.
  • In mindestens einer Ausführungsform spezifiziert der Algorithmuszählparameter einen Wert einer Anzahl von gewünschten Algorithmen und Eingaben in den Algorithmuszählparameter können einen Ganzzahlwert der Anzahl sowie auch Variationen davon umfassen. In mindestens einer Ausführungsform spezifiziert der Ergebnisanordnungsparameter eine Anordnung, die benutzt werden kann, um Algorithmuskennungen zu speichern, und Eingaben in den Ergebnisanordnungsparameter können die Anordnung, einen Zeiger auf die Anordnung, sowie auch Variationen davon umfassen. In mindestens einer Ausführungsform spezifiziert der Ergebniszählparameter ein Datenobjekt, das benutzt werden kann, um eine Anzahl von zurückgegebenen Algorithmen zu speichern, und Eingaben in den Ergebniszählparameter können einen Zeiger auf das Datenobjekt sowie auch Variationen davon umfassen.
  • In mindestens einer Ausführungsform umfasst eine Reaktion auf einen Get Heuristic API-Aufruf einen Betriebsstatus. In mindestens einer Ausführungsform werden im Anschluss an einen Get Heuristic API-Aufruf, der Kriterien für potenzielle Algorithmen angibt, die benutzt werden können, um eine spezifizierte Matrixmultiplikationsoperation durchzuführen, die potenziellen Algorithmen bestimmt, geschätzte Rechenzeiten für Ausführungsformen der potenziellen Algorithmen bestimmt, die potenziellen Algorithmen in einer Anordnung gespeichert, die durch einen Ergebnisanordnungsparameter in der Reihenfolge zunehmender geschätzter Rechenzeit spezifiziert wird, und ein Zählwert der potenziellen Algorithmen wird in einem Datenobjekt gespeichert, das durch einen Ergebniszählparameter spezifiziert wird. In mindestens einer Ausführungsform gibt der Betriebsstatus an, ob ein Get Heuristic API-Aufruf erfolgreich ist, gescheitert ist oder ob andere Fehler aufgetreten sind. In mindestens einer Ausführungsform wird ein Betriebsstatus als Reaktion auf ein Get Heuristic API-Aufruf zurückgegeben, um einen Status des Get Heuristic API-Aufrufs anzugeben.
  • 7 zeigt ein veranschaulichendes Beispiel eines Prozesses 700, um Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird einiges oder alles des Prozesses 700 (oder jeglicher anderen hier beschriebenen Prozesse oder Variationen und/oder Kombinationen davon) unter Steuerung eines oder mehrerer Computersysteme durchgeführt, die mit computerausführbaren Anweisungen konfiguriert sind und als Code (z.B. computerausführbare Anweisungen, ein oder mehrere Computerprogramme oder eine oder mehrere Anwendungen) implementiert sein können, die zusammen auf einem oder mehreren Prozessoren durch Hardware, Software oder Kombinationen davon ausgeführt werden. Der Code wird in mindestens einer Ausführungsform auf einem computerlesbaren Speichermedium in Form eines Computerprogramms gespeichert, das mehrere computerlesbare Anweisungen umfasst, die von einem oder mehreren Prozessoren ausführbar sind. Ein computerlesbares Speichermedium ist in mindestens einer Ausführungsform ein nichttransitorisches computerlesbares Medium. In mindestens einer Ausführungsform werden einige computerlesbare Anweisungen, die nutzbar sind, um den Prozess 700 durchzuführen, nicht ausschließlich unter Verwendung von transitorischen Signalen gespeichert (z.B. eine sich ausbreitende transiente elektrische oder elektromagnetische Übertragung). Ein nicht transitorisches computerlesbares Medium umfasst nicht notwendigerweise nicht transitorische Datenspeicherungsschaltungen (z.B. Puffer, Caches und Warteschlangen) innerhalb von Transceivern von transitorischen Signalen. In mindestens einer Ausführungsform wird der Prozess 700 mindestens teilweise auf einem Computersystem durchgeführt, wie beispielsweise auf jenen, die anderswo in dieser Offenbarung beschrieben sind. In mindestens einer Ausführungsform bestimmt ein erstes Computersystem Matrixmultiplikationsalgorithmen, um eine Matrixmultiplikationsoperation durchzuführen.
  • In mindestens einer Ausführungsform umfasst ein System, das mindestens einen Teil des Prozess 700 durchführt, einen ausführbaren Code, um einen Matrixmultiplikationsoperation-Deskriptor durchzuführen 702. In mindestens einer Ausführungsform ist ein Matrixmultiplikationsoperation-Deskriptor ein Datenobjekt, das einer Matrixmultiplikationsoperation entspricht und Informationen umfasst, die verschiedene Attribute der Matrixmultiplikationsoperation angeben, wie beispielsweise einen Datentyp, der einen Datentyp von Matrixdaten angeben kann, die in der Matrixmultiplikationsoperation benutzt werden, einen Skalentyp, der einen Datentyp eines Skalierungsfaktors angeben kann, der in der Matrixmultiplikationsoperation benutzt wird, einen Transformationstyp, der jegliche potenziellen Matrixtransformation Operationen angeben kann, die in der Matrixmultiplikationsoperation durchzuführen sind, sowie auch andere Informationen, die verschiedene andere Attribute der Matrixmultiplikationsoperation angeben. In mindestens einer Ausführungsform erzeugt ein System einen Matrixmultiplikationsoperation-Deskriptor durch Instanziieren eines oder mehrerer Datenobjekte.
  • In mindestens einer Ausführungsform umfasst ein System, das mindestens einen Teil des Prozesses 700 durchführt, einen ausführbaren Code, um Matrixmultiplikationsoperation-Attribute einzustellen 704. In mindestens einer Ausführungsform stellt ein System Matrixmultiplikationsoperation-Attribute durch Modifizieren eines Datenobjekts eines Matrixmultiplikationsoperation-Deskriptors ein. In mindestens einer Ausführungsform benutzt ein System eine oder mehrere API-Aufrufe, um einen Matrixmultiplikationsoperation-Deskriptor zu modifizieren, verschiedene Attribute einer Matrixmultiplikationsoperation einzustellen, die dem Matrixmultiplikationsoperation-Deskriptor entsprechen.
  • In mindestens einer Ausführungsform umfasst ein System, das mindestens einen Teil des Prozesses 700 durchführt, einen ausführbaren Code, um Matrix-Layout-Deskriptoren zu erzeugen 706. In mindestens einer Ausführungsform ist ein Matrix-Layout-Deskriptor ein Datenobjekt, das Attribute einer Matrix angibt. In mindestens einer Ausführungsform entspricht ein Matrix-Layout-Deskriptor einer Matrix und umfasst Informationen, die verschiedene Attribute der Matrix angeben, wie beispielsweise einen Datengenauigkeitstyp, der eine Genauigkeit von Daten der Matrix angeben kann, eine Speicherreihenfolge, die eine Reihenfolge von Daten der Matrix in einem Speicherort angeben kann, eine Zeilenanzahl, die eine Anzahl von Zeilen in der Matrix angeben kann, eine Spaltenanzahl, die eine Anzahl von Spalten in der Matrix angeben kann, eine führende Dimension, die eine führende Dimension der Matrix angeben kann, einen Batch-Zählwert, der eine Anzahl von Matrixoperationen angeben kann, die in einem Batch durchzuführen sind, einen Schritt, der eine Anzahl von Elementen zu einer nächsten Matrix für eine „strided“ Batch-Operation angeben kann, sowie auch andere Informationen, die verschiedene andere Attribute der Matrix angeben. In mindestens einer Ausführungsform erzeugt ein System einen Matrix-Layout-Deskriptor durch Instanziieren eines oder mehrerer Datenobjekte. In mindestens einer Ausführungsform benutzt ein System einen oder mehrere API-Aufrufe, um einen Matrix-Layout-Deskriptor zu modifizieren, um verschiedene Attribute einer Matrix einzustellen, die dem Matrix-Layout-Deskriptor entsprechen. In mindestens einer Ausführungsform, wird ein Attribut für einen Matrix-Layout-Deskriptor für jede Matrix von einem System erzeugt und eingestellt, die in einer Matrixmultiplikationsoperation benutzt wird, die durch einen Matrixmultiplikationsoperation-Deskriptor spezifiziert wird.
  • In mindestens einer Ausführungsform umfasst ein System, das mindestens einen Teil des Prozesses 700 durchführt, einen ausführbaren Code, um nach einer Liste von Algorithmen abzufragen 708. In mindestens einer Ausführungsform fragt ein System nach einer Liste von Matrixmultiplikationsalgorithmen ab, die potenziell eine Matrixmultiplikationsoperation durchführen können. In mindestens einer Ausführungsform fragt ein System nach einer Liste von Matrixmultiplikationsalgorithmen an, die potenziell eine Matrixmultiplikationsoperation durchführen können, durch Benutzen eines oder mehrerer API-Aufrufe, die verschiedene Aspekte der Matrixmultiplikationsoperation angeben. In mindestens einer Ausführungsform spezifiziert ein System Aspekte von Eingabematrizen, die in einer Matrixmultiplikationsoperation in einem oder mehreren API-Aufrufen benutzt werden, um nach einer Liste von Algorithmen abzufragen. In mindestens einer Ausführungsform empfängt ein System als Reaktion auf einen oder mehrere API-Aufrufe eine Liste von Algorithmen. In mindestens einer Ausführungsform kann ein System einen oder mehrere API-Aufrufe benutzen, wie beispielsweise ein Get Algorithms API-Aufruf, wie in Verbindung mit 3 beschrieben, um nach einer Liste von Algorithmen abzufragen.
  • In mindestens einer Ausführungsform umfasst ein System, das mindestens einen Teil des Prozesses 700 durchführt, einen ausführbaren Code, um jeden Algorithmus einer Liste von Algorithmen zu verarbeiten 710. In mindestens einer Ausführungsform verarbeitet ein System jeden Matrixmultiplikationsalgorithmus einer Liste von Matrixmultiplikationsalgorithmen, die durch einen oder mehrere API-Aufrufen abgerufen wurden, die nach der Liste von Matrixmultiplikationsalgorithmen abfragen. In mindestens einer Ausführungsform umfasst ein System, das mindestens einen Teil des Prozesses 700 durchführt, einen ausführbaren Code, um Algorithmusattribute abzurufen 712. In mindestens einer Ausführungsform benutzt ein System eine oder mehrere API-Aufrufe, um Algorithmusattribute eines Matrixmultiplikationsalgorithmus abzurufen. In mindestens einer Ausführungsform umfasst ein Matrixmultiplikationsalgorithmus verschiedene Attribute, die verschiedene Aspekte der Matrixmultiplikationsalgorithmus angeben, wie beispielsweise eine Kachel-ID, die eine Dimension von Kacheln angeben kann, die in dem Matrixmultiplikationsalgorithmus zu benutzen sind, eine Anzahl k von Aufteilungen, die eine Anzahl von Aufteilungen angeben kann, in dem Matrixmultiplikationsalgorithmus zu benutzen sind, ein Verringerungsschema, das ein bestimmtes Verringerungsschema angeben kann, das in dem Matrixmultiplikationsalgorithmus zu benutzen ist, ein Swizzling, das angeben kann, ob Swizzling in dem Matrixmultiplikationsalgorithmus zu benutzen ist, sowie auch verschiedene andere konfigurierbare Attribute, die in dem Matrixmultiplikationsalgorithmus benutzt werden können. In mindestens einer Ausführungsform bestimmt ein System mehrere Konfigurationen von Attributen für Attribute eines Matrixmultiplikationsalgorithmus.
  • In mindestens einer Ausführungsform umfasst ein System, das mindestens einen Teil des Prozesses 700 durchführt, einen ausführbaren Code, um jede Konfiguration von Attributen von mehreren Konfigurationen von Attributen zu verarbeiten 714. In mindestens einer Ausführungsform benutzt ein System jede Konfiguration von Attributen von mehreren Konfigurationen von Attributen, um Attribute eines Matrixmultiplikationsalgorithmus einzustellen. In mindestens einer Ausführungsform umfasst ein System, das mindestens einen Teil des Prozesses 700 durchführt, einen ausführbaren Code, um Attributwerte einzustellen 716. In mindestens einer Ausführungsform stellt ein System Attribute eines Matrixmultiplikationsalgorithmus ein, wie durch eine Konfiguration von Attributen von mehreren Konfigurationen von Attributen angegeben, die verarbeitet werden. In mindestens einer Ausführungsform kann ein System eine oder mehrere API-Aufrufe benutzen, wie beispielsweise einen Set Attribute API-Aufruf, wie in Verbindung mit 5 beschrieben, um Attributwerte einzustellen.
  • In mindestens einer Ausführungsform umfasst ein System, das mindestens einen Teil des Prozesses 700 durchführt, einen ausführbaren Code, um eine Matrixmultiplikationsoperation auszuführen 718 und Zeit aufzuzeichnen. In mindestens einer Ausführungsform führt ein System eine Matrixmultiplikationsoperation durch Benutzen eines Matrixmultiplikationsalgorithmus mit Attributwerten aus, die mit einer Konfiguration von Attributen von mehreren Konfigurationen von Attribut, einem Matrixmultiplikationsoperation-Deskriptor und Matrix-Layout-Deskriptoren eingestellt werden. In mindestens einer Ausführungsform benutzt ein System einen oder mehrere Prozesse, um die Ausführungszeit eines Matrixmultiplikationsalgorithmus aufzuzeichnen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform führt ein System eine Matrixmultiplikationsoperation durch Benutzen eines oder mehrerer API-Aufrufe aus, wie beispielsweise eines Matrix Multiply API-Aufrufs, wie in Verbindung mit 2 beschrieben.
  • In mindestens einer Ausführungsform umfasst ein System, das mindestens einen Teil des Prozesses 700 durchführt, einen ausführbaren Code, um zu bestimmen 720, ob die Konfiguration von Attributen eine letzte Konfiguration von Attributen von mehreren Konfigurationen von Attributen ist. In mindestens einer Ausführungsform bestimmt ein System, ob irgendwelche Konfigurationen von Attributen von mehreren Konfigurationen von Attributen übrigbleiben, um verarbeitet zu werden. In mindestens einer Ausführungsform kann, wenn ein System bestimmt, dass eine Konfiguration von Attributen, die verarbeitet wird, eine letzte Konfiguration von Attributen von mehreren Konfigurationen von Attributen ist, kann das System zu 722 fortschreiten. In mindestens einer Ausführungsform kann, wenn ein System bestimmt, dass eine Konfiguration von Attributen, die verarbeitet wird, nicht eine letzte Konfiguration von Attributen von mehrere Konfigurationen von Attributen ist, das System zu 714 fortschreiten, um fortzufahren, jede Konfiguration der mehreren Konfigurationen von Attributen zu verarbeiten. In mindestens einer Ausführungsform kann ein System einen oder mehrere Prozesse, die in 714 bis 720 angeben werden, für jede Konfiguration von Attributen von mehrere Konfigurationen von Attributen wiederholen.
  • In mindestens einer Ausführungsform umfasst ein System, das mindestens einen Teil des Prozesses 700 durchführt, einen ausführbaren Code, um zu bestimmen 722, ob ein Algorithmus ein letzter Algorithmus einer Liste von Algorithmen ist. In mindestens einer Ausführungsform bestimmt ein System, ob beliebige Algorithmen einer Liste von Algorithmen übrigbleiben, um verarbeitet zu werden. In mindestens einer Ausführungsform kann, wenn ein System bestimmt, dass ein Algorithmus, der verarbeitet wird, ein letzter Algorithmus einer Liste von Algorithmen ist, das System zu 724 fortfahren. In mindestens einer Ausführungsform kann, wenn ein System bestimmt, dass ein Algorithmus verarbeitet wird, nicht ein letzter Algorithmus einer Liste von Algorithmen ist, das System mit 710 fortfahren, um jeden Algorithmus der Liste von Algorithmen zu verarbeiten. In mindestens einer Ausführungsform kann ein System einen oder mehrere der in 710 bis 722 angegebenen Prozesse für jeden Algorithmus einer Liste von Algorithmen wiederholen.
  • In mindestens einer Ausführungsform umfasst ein System, das mindestens einen Teil des Prozesses 700 durchführt, einen ausführbaren Code, um Ergebnisse zu erhalten 724 und zu vergleichen. In mindestens einer Ausführungsform erhält und vergleicht ein System Ausführungszeiten für verschiedene Konfigurationen, bei denen die verschiedenen Konfigurationen durch mehrere Konfigurationen von Attributen von Matrixmultiplikationsalgorithmen angegeben werden, bei denen die Matrixmultiplikationsalgorithmen durch eine Liste von Matrixmultiplikationsalgorithmen angegeben werden, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform vergleicht ein System Ausführungszeiten für verschiedene Konfigurationen von Matrixmultiplikationsalgorithmen, um eine Matrixmultiplikationsoperation durchzuführen, um eine optimale Konfiguration eines bestimmten Matrixmultiplikationsalgorithmus zu bestimmen, um die Matrixmultiplikationsoperation durchzuführen. Es sei bemerkt, dass in verschiedenen Ausführungsformen ein oder mehrere Prozesse des Prozesses 700 in beliebiger Reihenfolge, einschließlich parallel, durchgeführt werden können.
  • In der vorangehenden und folgenden Beschreibung werden zahlreiche spezifische Einzelheiten dargelegt, um ein durchgängigeres Verständnis von mindestens einer Ausführungsform bereitzustellen. Es wird jedoch für einen Fachmann ersichtlich sein, dass die erfinderischen Konzepte ohne eine oder mehrere dieser spezifischen Einzelheiten praktiziert werden kann.
  • Rechenzentrum
  • 8 veranschaulicht ein beispielhaftes Rechenzentrum 800, in welchem mindestens eine Ausführungsform verwendet werden kann. In mindestens einer Ausführungsform umfasst das Rechenzentrum 800 eine Rechenzentrum-Infrastrukturschicht 810, eine Framework-Schicht 820, eine Softwareschicht 830 und eine Anwendungsschicht 840.
  • In mindestens einer Ausführungsform kann, wie in 8 gezeigt, die Rechenzentrum-Infrastrukturschicht 810 einen Ressourcenorchestrator 812, gruppierte Rechenressourcen 814 und Knotenrechenressourcen („Knoten-C.R.“) 816(1)-816(N) umfassen, wobei „N“ eine positive ganze Zahl darstellt (die eine unterschiedliche ganze Zahl „N“ als die sein kann, die in anderen Figuren verwendet wird). In mindestens einer Ausführungsform können die Knoten-C.R.s 816(1)-816(N), sind jedoch nicht beschränkt auf, eine beliebige Anzahl von zentralen Verarbeitungseinheiten („CPUs“) oder anderen Prozessoren (einschließlich Beschleunigern, feldprogrammierbaren Gate-Arrays („FPGAs“), Graphikprozessoren usw.), Speichervorrichtungen, (z.B. dynamischer Nur-LeseSpeicher), Speicherungsvorrichtungen (z.B. Solid-State- oder Festplattenlaufwerke), Netzwerk-Eingabe-/Ausgabe („NW E/A“)-Vorrichtungen, Netzwerkschalter, virtuelle Maschinen („VMs“), Leistungsmodule und Kühlmodule usw. umfassen. In mindestens einer Ausführungsform können ein oder mehrere Knoten-C.R.s aus den Knoten-C.R.s 816(1)-816(N) ein Server mit einer oder mehreren der oben erwähnten Rechenressourcen sein.
  • In mindestens einer Ausführungsform können gruppierte Rechenressourcen 814 separate Gruppierungen von Knoten-C.R.s. umfassen, die in einem oder mehreren Racks (nicht gezeigt) untergebracht sind, oder in vielen Racks, die in Rechenzentren an verschiedenen geographischen Standorten untergebracht sind (ebenfalls nicht gezeigt). Separate Gruppierungen von Knoten-C.R.s. innerhalb gruppierter Rechenressourcen 814 können gruppierte Rechen-, Netzwerk-, Speicher- oder Speicherungsressourcen umfassen, die konfiguriert oder zugeteilt sein können, um eine oder mehrere Arbeitslasten zu unterstützen. In mindestens einer Ausführungsform können mehrere Knoten-C.R.s einschließlich CPUs oder Prozessoren innerhalb eines oder mehrerer Racks gruppiert sein, um Rechenressourcen zur Unterstützung einer oder mehrerer Arbeitslasten bereitzustellen. In mindestens einer Ausführungsform können ein oder mehrere Racks ebenfalls eine beliebige Anzahl von Leistungsmodulen, Kühlmodulen und in beliebiger Kombination umfassen.
  • In mindestens einer Ausführungsform kann der Ressourcenorchestrator 812 eine oder mehrere Knoten-C.R.s 816(1)-816(N) und/oder gruppierte Rechenressourcen 814 konfigurieren oder anderweitig steuern. In mindestens einer Ausführungsform kann der Ressourcenorchestrator 812 eine Software-Design-Infrastruktur („SDI“)-Verwaltungseinheit für das Rechenzentrum 800 umfassen. In mindestens einer Ausführungsform kann der Ressourcenorchestrator 812 Hardware, Software oder eine Kombination davon umfassen.
  • In mindestens einer Ausführungsform umfasst, wie in 8 gezeigt, die Framework-Schicht 820, ohne darauf beschränkt zu sein, einen Job-Planer 832, einen Konfigurationsverwalter 834, einen Ressourcenverwalter 836 und ein verteiltes Dateisystem 838. In mindestens einer Ausführungsform kann die Framework-Schicht 820 ein Framework zur Unterstützung der Software 852 der Softwareschicht 830 und/oder eine oder mehrere Anwendungen 842 der Anwendungsschicht 840 umfassen. In mindestens einer Ausführungsform kann(können) die Software 852 oder die Anwendung(en) 842 jeweils webbasierte Dienstsoftware oder Anwendungen umfassen, wie beispielsweise diejenigen, die von Amazon Web Services, Google Cloud und Microsoft Azure bereitgestellt werden. In mindestens einer Ausführungsform kann, ohne darauf beschränkt zu sein, die Framework-Schicht 820 eine Art von freien und quelloffene Software-Webanwendung-Framework wie beispielsweise Apache Spark™ (nachfolgend als „Spark“ bezeichnet) sein, welches das verteilte Dateisystem 838 für eine groß angelegte Datenverarbeitung (z.B. „big data“) nutzen kann. In mindestens einer Ausführungsform kann der Job-Planer 832 einen Spark-Treiber umfassen, um die Planung von Arbeitslasten zu erleichtern, die von verschiedenen Schichten des Rechenzentrums 800 unterstützt werden. In mindestens einer Ausführungsform kann der Konfigurationsverwalter 834 in der Lage sein, verschiedene Schichten, wie beispielsweise die Softwareschicht 830 und die Framework-Schicht 820 einschließlich Spark und des verteilten Dateisystems 838, zur Unterstützung der groß angelegten Datenverarbeitung zu konfigurieren. In mindestens einer Ausführungsform kann der Ressourcenverwalter 836 in der Lage sein, geclusterte oder gruppierte Rechenressourcen zu verwalten, die zur Unterstützung des verteilten Dateisystems 838 und des Job-Planers 832 gemappt oder zugeteilt sind. In mindestens einer Ausführungsform können geclusterte oder gruppierte Rechenressourcen die gruppierte Rechenressource 814 auf der Rechenzentrum-Infrastrukturschicht 810 umfassen. In mindestens einer Ausführungsform kann sich der Ressourcenverwalter 836 mit dem Ressourcenorchestrator 812 koordinieren, um diese gemappten oder zugeteilten Rechenressourcen zu verwalten.
  • In mindestens einer Ausführungsform kann die in der Softwareschicht 830 enthaltene Software 852 Software, die von mindestens Teilen der Knoten-C.R.s 816(1)-816(N) verwendet wird, gruppierte Rechenressourcen 814 und/oder das verteilte Dateisystem 838 der Framework-Schicht 820 umfassen. Eine oder mehrere Arten von Software können, ohne darauf beschränkt zu sein, Internet-Webseiten-Suchsoftware, E-Mail-Virenscanner-Software, Datenbanksoftware und Streaming-Videoinhalt-Software umfassen.
  • In mindestens einer Ausführungsform kann(können) die in der Anwendungsschicht 840 enthaltene(n) Anwendung(en) 842 eine oder mehrere Arten von Anwendungen, die von mindestens Teilen der Knoten-C.R.s 816(1)-816(N) verwendet werden, gruppierte Rechenressourcen 814 und/oder das verteilte Dateisystem 838 der Framework-Schicht 820 umfassen. Mindestens einer oder mehrere Typen von Ausführungsformen können, ohne darauf beschränkt zu sein, CUDA-Anwendungen umfassen.
  • In mindestens einer Ausführungsform kann jeder der Konfigurationsmanager 834, der Ressourcenmanager 836 und der Ressourcenorchestrator 812 eine beliebige Anzahl und Art von selbstmodifizierenden Aktionen basierend auf einer beliebigen Menge und der Art von Daten, die in beliebig technisch machbarer Weise erfasst wurden, implementieren. In mindestens einer Ausführungsform können selbstmodifizierende Aktionen einen Betreiber des Rechenzentrums 800 davon befreien, möglicherweise schlechte Konfigurationsentscheidungen zu treffen und möglicherweise ungenutzte und/oder schlecht funktionierende Abschnitte eines Rechenzentrums zu vermeiden.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 8 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden eine oder mehrere in 8 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, eine oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation sowie auch andere verschiedenen Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 8 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • Computer-basierte Systeme
  • Die folgenden Figuren legen ohne Beschränkung beispielhafte computerbasierte Systeme dar, die verwendet werden können, um mindestens eine Ausführungsform zu implementieren.
  • 9 veranschaulicht ein Verarbeitungssystem 900 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst das System 900 einen oder mehrere Prozessoren 902 und einen oder mehrere Graphikprozessoren 908 und kann ein Desktop-System mit einem einzelnen Prozessor, ein Multiprozessor-Workstation-System oder ein Serversystem mit einer großen Anzahl von Prozessoren 902 oder Prozessorkernen 907 sein. In mindestens einer Ausführungsform ist das System 900 eine Verarbeitungsplattform, die in eine System-on-a-Chip (SoC)-integrierte Schaltung zur Verwendung in mobilen, tragbaren oder eingebetteten Vorrichtungen integriert ist.
  • In mindestens einer Ausführungsform kann das System 900 eine Spielkonsole, einschließlich einer Spiel- und Medienkonsole, eine mobile Spielkonsole, eine tragbare Spielkonsole oder eine Online-Spielkonsole umfassen oder in diese innerhalb einer serverbasierten Spieleplattform integriert sein. In mindestens einer Ausführungsform ist das System 900 ein Mobiltelefon, ein Smartphone, ein Tablet-Computergerät oder ein mobiles Internetgerät. In mindestens einer Ausführungsform kann das Verarbeitungssystem 900 auch ein tragbares Gerät, wie beispielsweise ein tragbares Smart Watch-Gerät, ein intelligentes Brillengerät, ein Gerät für erweiterte Realität oder ein Gerät für virtuelle Realität umfassen, mit ihm koppeln oder in dieses integriert sein. In mindestens einer Ausführungsform ist das Verarbeitungssystem 900 ein Fernseh- oder Set-Top-Box-Gerät mit einem oder mehreren Prozessoren 902 und einer von einem oder mehreren Graphikprozessoren 908 erzeugten Graphikschnittstelle.
  • In mindestens einer Ausführungsform umfassen ein oder mehrere Prozessoren 902 jeweils einen oder mehrere Prozessorkerne 907 zum Verarbeiten von Anweisungen, die dann, wenn sie ausgeführt werden, Operationen für ein System- und Benutzersoftware ausführen. In mindestens einer Ausführungsform ist jeder eines oder mehrerer Prozessorkerne 907 konfiguriert, um eine bestimmte Befehlssequenz 909 zu verarbeiten. In mindestens einer Ausführungsform kann die Befehlssequenz 909 Complex Instruction Set Computing (CISC), Reduced Instruction Set Computing (RISC) oder das Rechnen über ein Very Long Instruction Word (VLIW) erleichtern. In mindestens einer Ausführungsform können die Prozessorkerne 907 jeweils eine andere Befehlssequenz 909 verarbeiten, die Anweisungen zum Erleichtern der Emulation anderer Befehlssequenzen umfassen kann. In mindestens einer Ausführungsform kann der Prozessorkern 907 auch andere Verarbeitungsvorrichtungen, wie beispielsweise einen digitalen Signalprozessor (DSP), umfassen.
  • In mindestens einer Ausführungsform umfasst der Prozessor 902 den Cache-Speicher 904. In mindestens einer Ausführungsform kann der Prozessor 902 einen einzelnen internen Cache oder mehrere Ebenen internen Caches aufweisen. In mindestens einer Ausführungsform wird der Cache-Speicher von verschiedenen Komponenten des Prozessors 902 gemeinsam genutzt. In mindestens einer Ausführungsform verwendet der Prozessor 902 auch einen externen Cache (z.B. einen Level 3 (L3)- Cache oder einen Last Level Cache (LLC)) (nicht gezeigt), welcher unter Verwendung bekannter Cache-Kohärenztechniken von den Prozessorkernen 907 gemeinsam genutzt werden kann. In mindestens einer Ausführungsform ist die Registerdatei 906 zusätzlich in dem Prozessor 902 enthalten, welcher verschiedene Registertypen zum Speichern verschiedener Datentypen umfassen kann (z.B. ein Ganzzahlregister, ein Gleitkommaregister, ein Zustandsregister und ein Befehlszeigerregister). In mindestens einer Ausführungsform kann die Registerdatei 906 Universalregister oder andere Register umfassen.
  • In mindestens einer Ausführungsform sind ein oder mehrere Prozessor(en) 902 mit einem oder mehreren Schnittstellenbus(en) 910 gekoppelt, um Kommunikationssignale wie Adressen, Daten oder Steuersignale zwischen dem Prozessor 902 und anderen Komponenten in dem System 900 zu übertragen. In mindestens einer Ausführungsform kann, in einer Ausführungsform, ein Schnittstellenbus 910 ein Prozessorbus sein, wie beispielsweise eine Version eines Direct Media Interface (DMI)-Busses. In mindestens einer Ausführungsform ist die Schnittstelle 910 nicht auf einen DMI-Bus beschränkt und kann einen oder mehrere Peripheral Connect Zwischenverbindung-Busse (z.B. PCI, PCI Express), Speicherbusse oder andere Arten von Schnittstellenbussen umfassen. In mindestens einer Ausführungsform umfasst(en) der/die Prozessor(en) 902 einen integrierten Speichercontroller 916 und einen Plattform-Controller-Hub 930. In mindestens einer Ausführungsform erleichtert der Speichercontroller 916 die Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 900, während der Plattform-Controller-Hub (PCH) 930 Verbindungen zu E/A-Vorrichtungen über einen lokalen E/A-Bus bereitstellt.
  • In mindestens einer Ausführungsform kann eine Speichervorrichtung 920 eine dynamische Direktzugriffspeicher (DRAM)-Vorrichtung, eine statische Direktzugriffspeicher (SRAM)-Vorrichtung, eine Flash-Speicher-Vorrichtung, eine Phasenänderungs-Speichervorrichtung oder irgendeine andere Speichervorrichtung mit geeigneter Leistung sein, um als Prozessspeicher zu dienen. In mindestens einer Ausführungsform kann die Speichervorrichtung 920 als Systemspeicher für das System 900 arbeiten, um Daten 922 und Anweisungen 921 zu speichern, die verwendet werden, wenn ein oder mehrere Prozessoren 902 eine Anwendung oder einen Prozess ausführen. In mindestens einer Ausführungsform koppelt die Speichercontroller 916 darüber hinaus mit einem optionalen externen Graphikprozessor 912, welcher mit einem oder mehreren Graphikprozessoren 908 in den Prozessoren 902 kommunizieren kann, um Graphik- und Medienoperationen durchzuführen. In mindestens einer Ausführungsform kann eine Anzeigevorrichtung 911 mit dem/den Prozessor(en) 902 verbinden. In mindestens einer Ausführungsform kann die Anzeigevorrichtung 911 eine oder mehrere einer internen Anzeigevorrichtung umfassen, wie in einer mobilen elektronischen Vorrichtung oder einer Laptopvorrichtung oder einer externen Anzeigevorrichtung, die über eine Anzeigeschnittstelle (z.B. DisplayPort, usw.) angeschlossen ist. In mindestens einer Ausführungsform kann die Anzeigevorrichtung 911 eine kopfangebrachte Anzeige (HMD) umfassen, wie beispielsweise eine stereoskopische Anzeigevorrichtung zur Verwendung in Virtual-Reality-Anwendungen (VR) oder Augmented-Reality-Anwendungen (AR).
  • In mindestens einer Ausführungsform ermöglicht der Plattform-Controller-Hub 930 Peripheriegeräten, sich mit der Speichervorrichtung 920 und dem Prozessor 902 über einen Hochgeschwindigkeits-E/A-Bus zu verbinden. In mindestens einer Ausführungsform umfassen E/A-Peripheriegeräte unter anderem, sind jedoch nicht beschränkt auf, einen Audio-Controller 946, einen Netzwerk-Controller 934, eine Firmware-Schnittstelle 921, einen drahtlosen Sender-Empfänger 926, Berührungssensoren 925, eine Datenspeichervorrichtung 924 (z.B. eine Festplatte, einen Flash-Speicher usw.). In mindestens einer Ausführungsform kann die Datenspeichervorrichtung 924 über eine Speicherschnittstelle (z.B. SATA) oder über einen Peripheriebus, wie beispielsweise einen Peripheral Component Zwischenverbindung Bus (z.B. PCI, PCI Express) verbinden. In mindestens einer Ausführungsform können die Berührungssensoren 925 Sensoren eines berührungsempfindlichen Bildschirms, Drucksensoren oder Fingerabdrucksensoren umfassen. In mindestens einer Ausführungsform kann der drahtlose Sender-Empfänger 926 ein Wi-Fi-Sender-Empfänger, ein Bluetooth-Sender-Empfänger oder ein Mobilfunk-Sender-Empfänger wie beispielsweise ein 3G-, 4G- oder Long Term Evolution (LTE)-Transceiver sein. In mindestens einer Ausführungsform ermöglicht die Firmware-Schnittstelle 921 die Kommunikation mit der System-Firmware und kann beispielsweise eine vereinheitlichte erweiterbare Firmware-Schnittstelle (UEFI) sein. In mindestens einer Ausführungsform kann der Netzwerk-Controller 934 eine Netzwerkverbindung zu einem verdrahteten Netzwerk aktivieren. In mindestens einer Ausführungsform koppelt einen Hochleistungs-Netzwerk-Controller (nicht gezeigt) mit dem Schnittstellenbus 910. In mindestens einer Ausführungsform ist der Audio-Controller 946 ein mehrkanaliger hochauflösender Audio-Controller. In mindestens einer Ausführungsform umfasst das System 900 eine optionale Legacy-E/A-Steuereinrichtung 940 zum Koppeln von Legacy-Vorrichtungen (z.B. Personal System 2 (PS/2)) mit dem System. In mindestens einer Ausführungsform kann der Plattform-Controller-Hub 930 auch mit einer oder mehreren Universal Serial Bus (USB)-Controllern 942 verbinden, um Eingabegeräte wie beispielsweise Tastatur- und Maus-Kombinationen 943, eine Kamera 944 oder andere USB-Eingabegeräte zu verbinden.
  • In mindestens einer Ausführungsform kann eine Instanz des Speichercontroller 916 und des Plattform-Controller-Hub 930 in einem diskreten externen Graphikprozessor, wie beispielsweise den externen Graphikprozessor 912, integriert sein. In mindestens einer Ausführungsform können der Plattform-Controller-Hub 930 und/oder der Speichercontroller 916 extern zu einem oder mehreren Prozessoren 902 sein. Beispielsweise kann das System 900 in mindestens einer Ausführungsform einen externen Speichercontroller 916 und einen Plattform-Controller-Hub 930 umfassen, die als ein Speichercontroller-Hub und ein peripherer Controller-Hub innerhalb eines System-Chipsatzes, der mit dem bzw. den Prozessor(en) 902 in Verbindung steht, konfiguriert sein können.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 9 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden eine oder mehrere in 9 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, eine oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation sowie auch andere verschiedenen Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 9 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 10 veranschaulicht ein Computersystem 1000 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann das Computersystem 1000 ein System mit miteinander verbundenen Vorrichtungen und Komponenten, ein SOC oder eine Kombination davon sein. In mindestens einer Ausführungsform ist das Computersystem 1000 mit einem Prozessor 1002 gebildet ist, der Ausführungseinheiten zum Ausführen einer Anweisung umfassen kann. In mindestens einer Ausführungsform kann das Computersystem 1000, ohne darauf beschränkt zu sein, eine Komponente umfassen, wie beispielsweise einen Prozessor 1002, um Ausführungseinheiten mit Logik zum Ausführen von Algorithmen für Prozessdaten in Übereinstimmung mit der vorliegenden Offenbarung, wie beispielsweise der hier beschriebenen Ausführungsformen, zu benutzen. In mindestens einer Ausführungsform kann das Computersystem 1000 Prozessoren, wie beispielsweise die PENTIUM®-Prozessorfamilie, Xeon™, Itanium®, XScale™ und/oder StrongARM™, Intel® Core™ oder Intel® Nervana™ Mikroprozessoren, umfassen, die von der Intel Corporation in Santa Clara, Kalifornien, erhältlich sind, obwohl auch andere Systeme (einschließlich PCs mit anderen Mikroprozessoren, technische Arbeitsplatzrechner, Set-Top-Boxen und dergleichen) verwendet werden können. In mindestens einer Ausführungsform kann das Computersystem 1000 eine Version des Betriebssystems WINDOWS ausführen, das bei der Microsoft Corporation in Redmond, Washington, erhältlich ist, obwohl auch andere Betriebssysteme (z.B. UNIX und Linux), eingebettete Software und/oder graphische Benutzeroberflächen verwendet werden können.
  • In mindestens einer Ausführungsform kann das Computersystem 1000 in anderen Vorrichtungen wie beispielsweise Handheld-Vorrichtungen und Eingebettete-Anwendungen verwendet werden. Einige Beispiele für tragbare bzw. Handheld-Geräte umfassen Mobiltelefone, Internet-Protokoll-Geräte, Digitalkameras, persönliche digitale Assistenten („PDAs“) und Handheld-PCs. In mindestens einer Ausführungsform können eingebettete Anwendungen einen Mikrocontroller, einen digitalen Signalprozessor („DSP“), ein System auf einem Chip, Netzwerkcomputer („NetPCs“), Set-Top-Boxen, Netzwerk-Hubs, Wide Area Network („WAN“) Schalter oder jedes andere System umfassen, das eine oder mehrere Anweisungen ausführen kann, gemäß mindestens einer Ausführungsform.
  • In mindestens einer Ausführungsform kann das Computersystem 1000, ohne darauf beschränkt zu sein, den Prozessor 1002 umfassen, der, ohne darauf beschränkt zu sein, eine oder mehrere Ausführungseinheiten 1008 umfassen kann, die konfiguriert sein können, um ein Programm einer Compute Unified Device Architecture („CUDA“) (CUDA® wird von NVIDI Corporation, Santa Clara, CA, entwickelt) auszuführen. In mindestens einer Ausführungsform ist ein CUDA-Programm mindestens ein Abschnitt einer in einer CUDA-Programmiersprache geschriebenen Softwareanwendung. In mindestens einer Ausführungsform ist das Computersystem 1000 ein Einzelprozessor-Desktop- oder Serversystem. In mindestens einer Ausführungsform kann das Computersystem 1000 ein Multiprozessorsystem sein kann. In mindestens einer Ausführungsform kann der Prozessor 1002, ohne darauf beschränkt zu sein, einen CICS-Mikroprozessor, einen RISC-Mikroprozessor, einen VLW-Mikroprozessor, einen Prozessor, der eine Kombination von Befehlssätzen implementiert, oder jede andere Prozessorvorrichtung, wie beispielsweise einen digitalen Signalprozessor, umfassen. In mindestens einer Ausführungsform kann der Prozessor 1002 mit einem Prozessorbus 1010 gekoppelt sein, der Datensignale zwischen dem Prozessor 1002 und anderen Komponenten im Computersystem 1000 übertragen kann.
  • In mindestens einer Ausführungsform kann der Prozessor 1002, ohne darauf beschränkt zu sein, einen internen Level-1(„L1“)-Cache-Speicher („Cache“) 1004 umfassen. In mindestens einer Ausführungsform kann der Prozessor 1002 einen einzelnen internen Cache oder mehrere Ebenen eines internen Caches aufweisen. In mindestens einer Ausführungsform kann sich der Cache-Speicher extern zu dem Prozessor 1002 befinden. Andere Ausführungsformen können je nach Implementierung und Bedarf auch eine Kombination aus internen und externen Caches umfassen. In mindestens einer Ausführungsform kann eine Registerdatei 1006 verschiedene Arten von Daten in verschiedenen Registern speichern, einschließlich, jedoch nicht beschränkt auf, Ganzzahlregister, Gleitkommaregister, Zustandsregister und einem Befehlszeigerregister.
  • In mindestens einer Ausführungsform befindet sich die Ausführungseinheit 1008, einschließlich, jedoch ohne darauf beschränkt zu sein, Logik zum Ausführen von Ganzzahl- und Gleitkommaoperationen ebenfalls in dem Prozessor 1002. In mindestens einer Ausführungsform kann der Prozessor 1002 auch einen Mikrocode („ucode“)-Nur-Lese-Speicher („ROM“) umfassen, der Mikrocode für bestimmte Makrobefehle speichert. In mindestens einer Ausführungsform kann die Ausführungseinheit 1008 Logik zur Handhabung eines gepackten Befehlssatzes 1009 umfassen. In mindestens einer Ausführungsform können, indem der gepackte Befehlssatz 1009 in den Befehlssatz eines Universalprozessors aufgenommen wird, zusammen mit zugehörigen Schaltungen zur Ausführung von Anweisungen Operationen, die von vielen Multimedia-Anwendungen verwendet werden, unter Verwendung von gepackten Daten in einem Universalprozessor 1002 durchgeführt werden. In einer oder mehreren Ausführungsformen können viele Multimedia-Anwendungen beschleunigt und effizienter ausgeführt werden, indem die volle Breite eines Datenbusses des Prozessors für die Ausführung von Operationen auf gepackten Daten verwendet wird, welches die Notwendigkeit eliminieren kann, kleinere Dateneinheiten über den Datenbus des Prozessors zu übertragen, um eine oder mehrere Operationen jeweils Datenelement für Datenelement durchzuführen.
  • In mindestens einer Ausführungsform kann die Ausführungseinheit 1008 auch in Mikrocontrollern, eingebetteten Prozessoren, Graphikvorrichtungen, DSPs und anderen Arten von Logikschaltungen verwendet werden. In mindestens einer Ausführungsform kann das Computersystem 1000, ohne darauf beschränkt zu sein, einen Speicher 1020 umfassen. In mindestens einer Ausführungsform kann der Speicher 1020 als eine Dynamic Random Access Memory („DRAM“)-Vorrichtung, als eine Static Random Access Memory („SRAM“)-Vorrichtung, als eine Flash-Speichervorrichtung oder eine andere Speichervorrichtung implementiert sein. In mindestens einer Ausführungsform kann der Speicher 1020 einen oder mehrere Anweisungen 1019 und/oder Daten 1021 speichern, die durch Datensignale repräsentiert werden, die von dem Prozessor 1002 ausgeführt werden können.
  • In mindestens einer Ausführungsform kann ein Systemlogikchip mit dem Prozessorbus 1010 und dem Speicher 1020 gekoppelt sein. In mindestens einer Ausführungsform kann der Systemlogikchip, ohne darauf beschränkt zu sein, einen Speichercontroller-Hub („MCH“) 1016 umfassen, und der Prozessor 1002 kann über den Prozessorbus 1010 mit dem MCH 1016 kommunizieren. In mindestens einer Ausführungsform kann der MCH 1016 einen Speicherpfad 1018 mit hoher Bandbreite zu dem Speicher 1020 für Befehls- und Datenspeicherung sowie zur Speicherung von Graphikbefehlen, Daten und Texturen bereitstellen. In mindestens einer Ausführungsform kann der MCH 1016 Datensignale zwischen dem Prozessor 1002, dem Speicher 1020 und anderen Komponenten in dem Computersystem 1000 leiten und Datensignale zwischen dem Prozessorbus 1010, dem Speicher 1020 und einer System-E/A-Schnittstelle 1022 überbrücken. In mindestens einer Ausführungsform kann ein Systemlogikchip einen Graphikport zur Kopplung an einen Graphik-Controller bereitstellen. In mindestens einer Ausführungsform kann der MCH 1016 über einen Speicherpfad 1018 mit hoher Bandbreite mit dem Speicher 1020 gekoppelt sein, und eine Graphik-/Video-Karte 1018 kann über eine Accelerated Graphics Port („AGP“) Zwischenverbindung 1014 mit dem MCH 1016 gekoppelt sein.
  • In mindestens einer Ausführungsform kann das Computersystem 1000 die System-E/A-Schnittstelle 1022 als einen proprietärer Hub-Schnittstellenbus verwenden, um den MCH 1016 mit einem E/A-Controller-Hub („ICH“) 1030 zu verbinden. In mindestens einer Ausführungsform kann der ICH 1030 über einen lokalen E/A-Bus direkte Verbindungen zu einigen E/A-Vorrichtungen bereitstellen. In mindestens einer Ausführungsform kann ein lokaler E/A-Bus, ohne darauf beschränkt zu sein, einen Hochgeschwindigkeits-E/A-Bus zum Verbinden von Peripheriegeräten mit dem Speicher 1020, einem Chipsatz und dem Prozessor 1002 umfassen. Beispiele können, ohne darauf beschränkt zu sein, einen Audio-Controller 1029, einen Firmware-Hub („Flash-BIOS“) 1028, einen drahtlosen Transceiver 1026, eine Datenspeicherung 1024, einen Legacy-E/A-Controller 1023 mit Benutzereingabe und Tastaturschnittstellen, einen seriellen Erweiterungsport 1027, wie beispielsweise einen Universal Serial Bus („USB“) Port, und ein Netzwerk-Controller 1034 sein. In mindestens einer Ausführungsform kann die Datenspeicherung 1024 ein Festplattenlaufwerk, ein Diskettenlaufwerk, eine CD-ROM-Vorrichtung, eine Flash-Speicher-Vorrichtung oder eine andere Massenspeicherungsvorrichtung umfassen.
  • In mindestens einer Ausführungsform veranschaulicht 10 ein System, welches miteinander verbundene Hardware-Vorrichtungen oder „Chips“ umfasst, während in anderen Ausführungsformen 10 ein beispielhaftes System-on-Chip („SoC“) darstellen kann. In mindestens einer Ausführungsform können in 10 veranschaulichte Vorrichtungen mit proprietären Zwischenverbindungen, standardisierten Zwischenverbindungen (z.B. PCIe) oder einer Kombination derselben verbunden sein. In mindestens einer Ausführungsform sind eine oder mehrere Komponenten des Computersystems 1000 unter Verwendung von Compute Express Link (CXL)-Zwischenverbindungen verbunden.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 10 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden eine oder mehrere in 10 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, eine oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation sowie auch andere verschiedenen Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 10 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 11 veranschaulicht ein System 1100 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist das System 1100 eine elektronische Vorrichtung, die einen Prozessor 1110 benutzt. In mindestens einer Ausführungsform kann das System 1100, beispielsweise und ohne darauf beschränkt zu sein, ein Notebook, ein Tower-Server, ein Rack-Server, ein Blade-Server, ein Laptop, ein Desktop, ein Tablett, eine mobile Vorrichtung, ein Telefon, ein eingebetteter Computer oder jede andere geeignete elektronische Vorrichtung sein.
  • In mindestens einer Ausführungsform kann das System 1100, ohne darauf beschränkt zu sein, den Prozessor 1110 umfassen, der kommunikativ mit einer beliebigen geeigneten Anzahl oder Art von Komponenten, Peripheriegeräten, Modulen oder Vorrichtungen gekoppelt ist. In mindestens einer Ausführungsform ist der Prozessor 1110 über einen Bus oder eine Schnittstelle, wie beispielsweise einen I2C-Bus, einen System Management Bus („SMBus“), einen Low Pin Count (LPC)-Bus, eine serielle Peripherieschnittstelle („SPI“), einen High Definition Audio („HDA“)-Bus, einen Serial Advance Technology Attachment („SATA“)-Bus, einen Universal Serial Bus („USB“) (Versionen 1, 2, 3 usw.) oder einen Universal Asynchronous Receiver/Transmitter („UART“)-Bus, gekoppelt. In mindestens einer Ausführungsform veranschaulicht 11 ein System, welches miteinander verbundene Hardware-Vorrichtungen oder „Chips“ umfasst, während in anderen Ausführungsformen 11 ein beispielhaftes System auf einem Chip („SoC“) darstellen kann. In mindestens einer Ausführungsform können die in 11 veranschaulichten Vorrichtungen mit proprietären Verbindungen, standardisierten Zwischenverbindungen (z.B. PCIe) oder einer Kombination davon verbunden sein. In mindestens einer Ausführungsform sind eine oder mehrere Komponenten von 11 unter Verwendung von Compute Express Link (CXL)-Zwischenverbindungen miteinander verbunden.
  • In mindestens einer Ausführungsform kann 11 eine Anzeige 1124, einen berührungsempfindlichen Bildschirm bzw. Touchscreen 1125, ein berührungsempfindliches Feld bzw. Touchpad 1130, eine Nahfeld-Kommunikationseinheit (Near Field Communications Unit; „NFC“) 1145, einen Sensor-Hub 1140, einen Thermosensor 1146, einen Express-Chipsatz („EC“) 1135, ein Trusted Platform Module („TPM“) 1138, BIOS/Firmware/Flash-Speicher („BIOS, FW-Flash“) 1122, einen DSP 1160, ein Laufwerk („SSD oder HDD“) 1112, wie beispielsweise eine Solid State Disk („SSD“) oder eine Festplatte („HDD“), eine Wireless Local Area Network Unit („WLAN“) 1150, eine Bluetooth-Einheit 1152, eine Wireless Wide Area Network Unit („WWAN“) 1156, ein Global Positioning System (GPS) Einheit 1155, eine Kamera („USB 3.0 Camera“) 1154, wie beispielsweise eine USB 3.0-Kamera, oder eine Low Power Double Data Rate („LPDDR“)-Speichereinheit („LPDDR3“) 1115, die beispielsweise in einem LPDDR3-Standard implementiert ist, umfassen. Diese Komponenten können jeweils in beliebig geeigneter Art und Weise implementiert sein.
  • In mindestens einer Ausführungsform können andere Komponenten durch die hier beschriebenen Komponenten kommunikativ mit dem Prozessor 1110 gekoppelt sein. In mindestens einer Ausführungsform können ein Beschleunigungssensor 1141, ein Umgebungslichtsensor (Ambient Light Sensor; „ALS“) 1142, ein Kompass 1143 und ein Gyroskop 1144 kommunikativ mit dem Sensor-Hub 1140 gekoppelt sein. In mindestens einer Ausführungsform können ein Thermosensor 1139, ein Lüfter 1137, eine Tastatur 1136 und ein Touchpad 1130 kommunikativ mit dem EC 1135 gekoppelt sein. In mindestens einer Ausführungsform können Lautsprecher 1163, Kopfhörer 1164 und ein Mikrofon („mic“) 1165 kommunikativ mit einer Audioeinheit („Audio-Codec und Class D-Amp“) 1162 gekoppelt sein, die wiederum kommunikativ mit dem DSP 1160 gekoppelt sein kann. In mindestens einer Ausführungsform kann eine Audioeinheit 1162, beispielsweise und ohne darauf beschränkt zu sein, einen Audio-Codierer/Decodierer („Codec“) und einen Klasse-D-Verstärker umfassen. In mindestens einer Ausführungsform kann die SIM-Karte („SIM“) 1157 kommunikativ mit der WWAN-Einheit 1156 gekoppelt sein. In mindestens einer Ausführungsform können Komponenten, wie beispielsweise die WLAN-Einheit 1150 und die Bluetooth-Einheit 1152 sowie auch die WWAN-Einheit 1156, in einem Formfaktor der nächsten Generation (Next Generation Form Faktor; „NGFF“) implementiert sein.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 11 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden eine oder mehrere in 11 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, eine oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation sowie auch andere verschiedenen Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 11 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 12 veranschaulicht eine beispielhafte integrierte Schaltung 1200 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist die integrierte Schaltung 1200 ein SoC, die unter Verwendung einer oder mehrerer IP-Kerne hergestellt werden kann. In mindestens einer Ausführungsform umfasst die integrierte Schaltung 1200 einen oder mehrere Anwendungsprozessor(en) 1205 (z.B. CPUs), mindestens einen Graphikprozessor 1210 und kann zusätzlich einen Bildprozessor 1215 und/oder einen Videoprozessor 1220 umfassen, von welchen jeder ein modularer IP-Kern sein kann. In mindestens einer Ausführungsform umfasst die integrierte Schaltung 1200 Peripherie- oder Buslogik mit einem USB-Controller 1225, einem UART-Controller 1230, einem SPI/SDIO-Controller 1235 und einem I22S/I22C-Controller 1240. In mindestens einer Ausführungsform kann die integrierte Schaltung 1200 eine Anzeigevorrichtung 1245 umfassen, die mit einem oder mehreren eines High-Definition-Multimedia-Schnittstellen-(HDMI)-Controller 1250 und einer Anzeigeschnittstelle 1255 für ein Mobile Industry Processor Interface (MIPI) gekoppelt ist. In mindestens einer Ausführungsform kann eine Speicherung durch ein Flash-Speicher-Teilsystem 1260 einschließlich eines Flash-Speichers und eines Flash-Speichercontrollers bereitgestellt sein. In mindestens einer Ausführungsform kann eine Speicherschnittstelle über einen Speichercontroller 1265 für Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt sein. In mindestens einer Ausführungsform umfassen einige integrierte Schaltungen zusätzlich eine eingebettete Sicherheits-Maschine 1270.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 12 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden eine oder mehrere in 12 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, eine oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation sowie auch andere verschiedenen Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 12 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 13 veranschaulicht ein Rechensystem 1300 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst das Computersystem 1300 ein Verarbeitungsteilsystem 1301 mit einem oder mehreren Prozessor(en) 1302 und einem Systemspeicher 1304, der über einen Zwischenverbindungspfad kommuniziert, der einen Speicher-Hub 1305 umfassen kann. In mindestens einer Ausführungsform kann der Speicher-Hub 1305 eine separate Komponente innerhalb einer Chipsatz-Komponente sein oder kann in einem oder mehreren Prozessor(en) 1302 integriert sein. In mindestens einer Ausführungsform koppelt der Speicher-Hub 1305 über eine Kommunikationsverbindung 1306 mit einem E/A-Teilsystem 1311. In mindestens einer Ausführungsform umfasst das E/A-Teilsystem 1311 einen E/A-Hub 1307, der dem Computersystem 1300 ermöglichen kann, Eingaben von einer oder mehreren Eingabevorrichtung(en) 1308 zu empfangen. In mindestens einer Ausführungsform kann der E/A-Hub 1307 einem Anzeigen-Controller, der in einem oder mehreren Prozessor(en) 1302 umfasst sein kann, ermöglichen, Ausgaben an eine oder mehrere Anzeigevorrichtung(en) 1310A bereitzustellen. In mindestens einer Ausführungsform können eine oder mehrere mit dem E/A-Hub 1307 gekoppelte Anzeigevorrichtung(en) 1310A eine lokale, interne oder eingebettete Anzeigevorrichtung umfassen.
  • In mindestens einer Ausführungsform umfasst das Verarbeitungsteilsystem 1301 einen oder mehrere Parallelprozessor(en) 1312, die über einen Bus oder eine andere Kommunikationsverbindung 1313 mit dem Speicher-Hub 1305 gekoppelt sind. In mindestens einer Ausführungsform kann die Kommunikationsverbindung 1313 eine von einer beliebigen Anzahl von auf Standards basierenden Kommunikation-Verbindungstechnologien oder - Verbindungsprotokollen sein, wie beispielsweise, jedoch nicht beschränkt auf, PCIe, oder kann sie eine anbieterspezifische Kommunikationsschnittstelle oder Kommunikationsstruktur sein. In mindestens einer Ausführungsform bilden ein oder mehrere Parallelprozessor(en) 1312 ein rechnerisch fokussiertes Parallel- oder Vektor-Verarbeitungssystem, das eine große Anzahl von Verarbeitungskernen und/oder Verarbeitungsclustern, wie beispielsweise einen Prozessor mit vielen integrierten Kernen, umfassen kann. In mindestens einer Ausführungsform bilden ein oder mehrere Parallelprozessor(en) 1312 ein Graphikverarbeitungs-Teilsystem, das Pixel an eine oder mehrere Anzeigevorrichtung(en) 1310A ausgeben kann, die über den E/A-Hub 1307 gekoppelt sind. In mindestens einer Ausführungsform können ein oder mehrere Parallelprozessor(en) 1312 ebenfalls einen Anzeigecontroller und eine Anzeigeschnittstelle (nicht gezeigt) umfassen, um eine direkte Verbindung mit einer oder mehreren Anzeigevorrichtung(en) 1310B zu ermöglichen.
  • In mindestens einer Ausführungsform kann sich eine Systemspeichereinheit 1314 mit dem E/A-Hub 1307 verbinden, um einen Speicherungsmechanismus für das Computersystem 1300 bereitzustellen. In mindestens einer Ausführungsform kann ein E/A-Schalter 1316 verwendet werden, um einen Schnittstellenmechanismus bereitzustellen, um Verbindungen zwischen dem E/A-Hub 1307 und anderen Komponenten, wie beispielsweise einem Netzwerkadapter 1318 und/oder einem drahtlosen Netzwerkadapter 1319, der in die Plattform integriert sein kann, und verschiedenen anderen Vorrichtungen, die über eine oder mehrere Add-In-Vorrichtung(en) 1312 hinzugefügt sein können, zu ermöglichen. In mindestens einer Ausführungsform kann der Netzwerkadapter 1318 ein Ethernet-Adapter oder ein anderer verdrahteter Netzwerkadapter sein. In mindestens einer Ausführungsform kann der drahtlose Netzwerkadapter 1319 ein oder mehrere Wi-Fi, Bluetooth-, Nahfeldkommunikation(NFC)- oder andere Netzwerkvorrichtung umfassen, die ein oder mehrere drahtlose Funkeinrichtungen umfasst.
  • In mindestens einer Ausführungsform kann das Computersystem 1300 andere Komponenten umfassen, die nicht explizit gezeigt sind, einschließlich USB- oder andere Portverbindungen, optische Speicherlaufwerke, Videoaufnahmevorrichtungen und dergleichen, die auch mit dem E/A-Hub 1307 verbunden sein können. In mindestens einer Ausführungsform können Kommunikationspfade, die verschiedene Komponenten in 13 miteinander verbinden, unter Verwendung beliebiger geeigneter Protokolle, wie z. B. PCI-basierter Protokolle (z.B. PCIe), oder anderer Bus- oder Punkt-zu-Punkt-Kommunikationsschnittstellen und/oder - Protokolle(n), wie beispielsweise eine NV-Link-Hochgeschwindigkeitszwischenverbindung oder Zwischenverbindungsprotokolle, implementiert sein.
  • In mindestens einer Ausführungsform umfassen ein oder mehrere Parallelprozessor(en) 1312 für Graphik- und Videoverarbeitung optimierte Schaltungen, die beispielsweise Videoausgabeschaltungen umfassen und eine Graphikverarbeitungseinheit („GPU“) bilden. In mindestens einer Ausführungsform umfassen ein oder mehrere Parallelprozessor(en) 1312 Schaltungen, die zur Verarbeitung für allgemeine Zwecke optimiert sind. In mindestens einer Ausführungsform können Komponenten des Computersystems 1300 mit einem oder mehreren anderen Systemelementen auf einer einzigen integrierten Schaltung integriert sein. Beispielsweise können in mindestens einer Ausführungsform ein oder mehrere Parallelprozessor(en) 1312, der Speicher-Hub 1305, der bzw. die Prozessor(en) 1302 und der E/A-Hub 1307 in eine SoC-integrierte Schaltung integriert sein. In mindestens einer Ausführungsform können Komponenten des Computersystems 1300 in ein einziges Gehäuse integriert sein, um eine Systemin-Package („SIP“)-Konfiguration zu bilden. In mindestens einer Ausführungsform kann mindestens ein Teil von Komponenten des Computersystems 1300 in ein Multi-Chip-Modul („MCM“) integriert sein, welches mit anderen Multi-Chip-Modulen zu einem modularen Computersystem verbunden sein kann. In mindestens einer Ausführungsform werden das Teilsystem und die Anzeigevorrichtungen 1310B von dem Rechensystem 1300 weggelassen.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 13 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden eine oder mehrere in 13 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, eine oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation sowie auch andere verschiedenen Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 13 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • Verarbeitungssysteme
  • Die folgenden Figuren legen, ohne darauf beschränkt zu sein, beispielhafte Verarbeitungssysteme dar, die verwendet werden können, um mindestens eine Ausführungsform zu implementieren.
  • 14 veranschaulicht eine beschleunigte Verarbeitungseinheit („APU“) 1400 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird die APU 1400 von AMD Corporation, Santa Clara, CA, entwickelt. In mindestens einer Ausführungsform kann die APU 1400 konfiguriert sein, um ein Anwendungsprogramm, wie beispielsweise ein CUDA-Programm, auszuführen. In mindestens einer Ausführungsform umfasst die APU 1400, ohne darauf beschränkt zu sein, einen Kernkomplex 1410, einen Graphikkomplex 1440, eine Fabric 1460, E/A-Schnittstellen 1470, einen Speichercontroller 1480, einen Anzeigecontroller 1492 und eine Multimediamaschine 1494. In mindestens einer Ausführungsform kann die APU 1400, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Kernkomplexen 1410, eine beliebige Anzahl von Graphikkomplexen 1450, eine beliebige Anzahl von Anzeigecontrollern 1492 und eine beliebige Anzahl von Multimediamaschinen 1494 in beliebiger Kombination umfassen. Für erläuternde Zwecke werden mehrere Instanzen von ähnlichen Objekten hier mit Bezugszeichen bezeichnet, die das Objekt kennzeichnen, und parenthetische Zahlen, welche die Instanz kennzeichnen, wo dies benötigt wird.
  • In mindestens einer Ausführungsform ist der Kernkomplex 1410 eine CPU, der Graphikkomplex 1440 eine GPU und die APU 1400 eine Verarbeitungseinheit, die, ohne darauf beschränkt zu sein, 1410 und 1440 auf einem einzigen Chip integriert. In mindestens einer Ausführungsform können einige Aufgaben dem Kernkomplex 1410 zugewiesen sein und andere Aufgaben können dem Graphikkomplex 1440 zugewiesen sein. In mindestens einer Ausführungsform ist der Kernkomplex 1410 konfiguriert, um eine Hauptsteuerungssoftware, die der APU 1400 zugeordnet ist, wie beispielsweise ein Betriebssystem, auszuführen. In mindestens einer Ausführungsform ist der Kernkomplex 1410 der Hauptprozessor der APU 1400, der Operationen von anderen Prozessoren steuert und koordiniert. In mindestens einer Ausführungsform gibt der Kernkomplex 1410 Befehle aus, die den Betrieb des Graphikkomplexes 1440 steuern. In mindestens einer Ausführungsform kann der Kernkomplex 1410 konfiguriert sein, um einen Host-ausführbaren Code auszuführen, der von dem CUDA-Quellencode abgeleitet ist, und Graphikkomplex 1440 kann konfiguriert sein, um einen Vorrichtung-ausführbaren Code auszuführen, der von dem CUDA-Quellencode abgeleitet ist.
  • In mindestens einer Ausführungsform umfasst der Kernkomplex 1410, ohne darauf beschränkt zu sein, Kerne 1420(1)-1420(4) und einen L3-Cache 1430. In mindestens einer Ausführungsform kann der Kernkomplex 1410, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Kernen 1420 und eine beliebige Anzahl und Art von Caches in einer beliebigen Kombination umfassen. In mindestens einer Ausführungsform sind die Kerne 1420 konfiguriert, um Anweisungen einer bestimmten Anweisungssatzarchitektur (Instruction Set Architecture; „ISA“) auszuführen. In mindestens einer Ausführungsform ist jeder Kern 1420 ein CPU-Kern.
  • In mindestens einer Ausführungsform umfasst jeder Kern 1420, ohne darauf beschränkt zu sein, eine Hol/Decodier-Einheit 1422, eine Ganzzahl-Ausführungsmaschine 1424, eine Gleitkomma-Ausführungsmaschine 1426 und einen L2-Cache 1428. In mindestens einer Ausführungsform holt die Hol/Decodier-Einheit 1422 Anweisungen, decodiert derartige Anweisungen, erzeugt Mikrooperationen und sendet separate Mikroanweisungen an die Ganzzahl-Ausführungsmaschine 1424 und die Gleitkomma-Ausführungsmaschine 1426. In mindestens einer Ausführungsform kann die Hol/Decodier-Einheit 1422 gleichzeitig eine Mikroanweisung an die Ganzzahl-Ausführungsmaschine 1424 und eine andere Mikroanweisung an die Gleitkomma-Ausführungsmaschine 1426 senden. In mindestens einer Ausführungsformführt führt die Ganzzahl-Ausführungsmaschine 1424, ohne darauf beschränkt zu sein, Ganzzahl- und Speicheroperationen aus. In mindestens einer Ausführungsform führt die Gleitkomma-Maschine 1426, ohne darauf beschränkt zu sein, Gleitkomma- und Vektoroperationen aus. In mindestens einer Ausführungsform sendet die Hol/Decodier-Einheit 1422 Mikroanweisungen an eine einzelne Ausführungsmaschine, die sowohl die Ganzzahl-Ausführungsmaschine 1424 als auch die Gleitkomma-Ausführungsmaschine 1426 ersetzt.
  • In mindestens einer Ausführungsform kann jeder Kern 1420(i), wobei i eine Ganzzahl ist, die eine bestimmte Instanz des Kerns 1420 darstellt, auf den L2-Cache 1428(i) zugreifen, der in dem Kern 1420(i) enthalten ist. In mindestens einer Ausführungsform ist jeder Kern 1420, der in dem Kernkomplex 1410(j) enthalten ist, wobei j eine Ganzzahl ist, die eine bestimmte Instanz des Kernkomplexes 1410 darstellt, mit anderen in dem Kernkomplex 1410(j) enthaltenen Kernen 1420 über den L3-Cache 1430(j) verbunden, der in dem Kernkomplex 1410(j) enthalten ist. In mindestens einer Ausführungsform können Kerne 1420, die in dem Kernkomplex 1410(j) enthalten sind, wobei j eine Ganzzahl ist, die eine bestimmte Instanz des Kernkomplexes 1410 darstellt, auf den gesamten L3-Cache 1430(j) zugreifen, der in dem Kernkomplex 1410(j) enthalten ist. In mindestens einer Ausführungsform kann der L3-Cache 1430, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Slices enthalten.
  • In mindestens einer Ausführungsform kann der Graphikkomplex 1440 konfiguriert sein, um Rechenoperationen auf eine hochparallele Art und Weise durchzuführen. In mindestens einer Ausführungsform ist der Graphikkomplex 1440 konfiguriert, um Graphik-Pipeline-Operationen auszuführen, wie beispielsweise Zeichenbefehle, Pixeloperationen, geometrische Berechnungen und andere Operationen, die dem Rendern eines Bildes auf einer Anzeige zugeordnet sind. In mindestens einer Ausführungsform ist der Graphikkomplex 1440 konfiguriert, um Operationen mit Bezug auf Graphik auszuführen. In mindestens einer Ausführungsform ist der Graphikkomplex 1440 konfiguriert, um sowohl Operationen mit Bezug auf Graphik als auch Operationen ohne Bezug auf Graphik auszuführen.
  • In mindestens einer Ausführungsform umfasst der Graphikkomplex 1440, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Recheneinheiten 1450 und einen L2-Cache 1442. In mindestens einer Ausführungsform nutzen die Recheneinheiten 1450 den L2-Cache 1442 gemeinsam. In mindestens einer Ausführungsform ist der L2-Cache 1442 partitioniert. In mindestens einer Ausführungsform umfasst der Graphikkomplex 1440, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Recheneinheiten 1450 und eine beliebige Anzahl (einschließlich null) und Art von Caches. In mindestens einer Ausführungsform umfasst der Graphikkomplex 1440, ohne darauf beschränkt zu sein, einer beliebigen Menge an fest zugeordneter Graphikhardware.
  • In mindestens einer Ausführungsform umfasst jede Recheneinheit 1450, ohne darauf beschränkt zu sein, eine beliebige Anzahl von SIMD-Einheiten 1452 und einen gemeinsam genutzten Speicher 1454. In mindestens einer Ausführungsform implementiert jede SIMD-Einheit 1452 eine SIMD-Architektur und ist konfiguriert, um Operationen parallel durchzuführen. In mindestens einer Ausführungsform kann jede Recheneinheit 1450 eine beliebige Anzahl von Thread-Blöcken ausführen, wobei jeder Thread-Block auf einer einzelnen Recheneinheit 1450 ausgeführt wird. In mindestens einer Ausführungsform umfasst ein Thread-Block, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Ausführungs-Threads. In mindestens einer Ausführungsform ist eine Arbeitsgruppe ein Thread-Block. In mindestens einer Ausführungsform führt jede SIMD-Einheit 1452 einen unterschiedlichen Warp aus. In mindestens einer Ausführungsform ist ein Warp eine Gruppe von Threads (z.B. 16 Threads), wobei jeder Thread in dem Warp zu einem einzelnen Thread-Block gehört und konfiguriert ist, um einen unterschiedlichen Satz von Daten basierend auf einem einzigen Satz von Anweisungen zu verarbeiten. In mindestens einer Ausführungsform kann Prädikation verwendet werden, um einen oder mehrere Threads in einem Warp zu deaktivieren. In mindestens einer Ausführungsform ist eine Spur ein Thread. In mindestens einer Ausführungsform ist ein Arbeitselement ein Thread. In mindestens einer Ausführungsform ist eine Wellenfront ein Warp. In mindestens einer Ausführungsform können unterschiedliche Wellenfronten in einem Thread-Block zusammen synchronisieren und über den gemeinsam genutzten Speicher 1454 kommunizieren.
  • In mindestens einer Ausführungsform ist die Fabric 1460 eine Systemzwischenverbindung, die Daten- und Steuerübertragungen über den Kernkomplex 1410, den Graphikkomplex 1440, E/A-Schnittstellen 1470, den Speichercontroller 1480, den Anzeigecontroller 1492 und die Multimediamaschine 1494 erleichtert. In mindestens einer Ausführungsform kann die APU 1400, ohne darauf beschränkt zu sein, eine beliebige Menge und Art von Systemzwischenverbindung zusätzlich zu oder anstelle der Fabric 1460 umfassen, die Daten- und Steuerübertragungen über eine beliebige Anzahl und Art von direkt oder indirekt verbundenen Komponenten erleichtert, die intern oder extern zu der APU 1400 sein können. In mindestens einer Ausführungsform sind E/A-Schnittstellen 1470 für eine beliebige Anzahl und Art von E/A-Schnittstellen (z.B. PCI, PCI-Extended („PCI-X“), PCIe, Gigabit-Ethernet („GBE“), USB usw.) repräsentativ. In mindestens einer Ausführungsform sind verschiedene Arten von peripheren Vorrichtungen mit den E/A-Schnittstellen 1470 gekoppelt. In mindestens einer Ausführungsform können periphere Vorrichtungen, die mit den E/A-Schnittstellen 1470 gekoppelt sind, ohne darauf beschränkt zu sein, Tatstaturen, Mäuse, Drucker, Scanner, Joysticks oder andere Arten von Spielecontrollern, Medienaufnahmevorrichtungen, externe Speicherungsvorrichtungen, Netzwerkschnittstellenkarten und so weiter umfassen.
  • In mindestens einer Ausführungsform zeigt der Anzeigecontroller AMD92 Bilder auf einer oder mehreren Anzeigevorrichtungen an, wie beispielsweise einer Vorrichtung einer Flüssigkristallanzeige (Liquid Crystal Display; „LCD“). In mindestens einer Ausführungsform umfasst die Multimediamaschine 240, ohne darauf beschränkt zu sein, eine beliebige Menge und Art von Schaltungen, die in Zusammenhang mit Multimedia stehen, wie beispielsweise einen Videodecodierer, einen Videocodierer, einen Bildsignalprozessor usw. In mindestens einer Ausführungsform erleichtert der Speichercontroller 1480 Datenübertragungen zwischen der APU 1400 und einem vereinheitlichten Systemspeicher 1490. In mindestens einer Ausführungsform nutzen der Kernkomplex 1410 und der Graphikkomplex 1440 den vereinheitlichten Systemspeicher 1490 gemeinsam.
  • In mindestens einer Ausführungsform implementiert die APU 1400 ein Speichersubsystem, das, ohne darauf beschränkt zu sein, eine beliebige Menge und Art von Speichercontrollern 1480 und Speichervorrichtungen (z.B. gemeinsam genutzten Speicher 1454) umfasst, die einer Komponente fest zugeordnet sein oder unter mehreren Komponenten gemeinsam genutzt werden können. In mindestens einer Ausführungsform implementiert die APU 1400 ein Cache-Subsystem, das, ohne darauf beschränkt zu sein, eine oder mehrere Cache-Speicher (z.B. L2-Caches 1528, L3-Cache 1430 und L2-Cache 1442) umfasst, die jeweils privat zu einer beliebigen Anzahl von Komponenten sein können oder zwischen diesen gemeinsam genutzt werden können (z.B. Kerne 1420, den Kernkomplex 1410, SIMD-Einheiten 1452, Recheneinheiten 1450 und den Graphikkomplex 1440).
  • In mindestens einer Ausführungsform werden ein oder mehrere in 14 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 14 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 14 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 15 veranschaulicht eine CPU 1500 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird die CPU 1500 von der AMD Corporation, Santa Clara, CA, entwickelt. In mindestens einer Ausführungsform kann die CPU 1500 konfiguriert sein, um ein Anwendungsprogramm auszuführen. In mindestens einer Ausführungsform ist die CPU 1500 konfiguriert, um Hauptsteuersoftware, wie beispielsweise ein Betriebssystem, auszuführen. In mindestens einer Ausführungsform gibt die CPU 1500 Befehle aus, die den Betrieb einer externen GPU (nicht gezeigt) steuern. In mindestens einer Ausführungsform kann die CPU 1500 konfiguriert sein, um einen Host-ausführbaren Code auszuführen, der von dem CUDA-Quellencode abgeleitet ist, und eine externe GPU kann konfiguriert sein, um einen Vorrichtung-ausführbaren Code auszuführen, der von einem derartigen CUDA-Quellencode abgeleitet ist. In mindestens einer Ausführungsform umfasst die CPU 1500, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Kernkomplexen 1510, eine Fabric 1560, E/A-Schnittstellen 1570 und einen Speichercontroller 1580.
  • In mindestens einer Ausführungsform umfasst der Kernkomplex 1510, ohne darauf beschränkt zu sein, Kerne 1520(1)-1520(4) und einen L3-Cache 1530. In mindestens einer Ausführungsform kann der Kernkomplex 1510, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Kernen 1520 und eine beliebige Anzahl und Art von Caches in beliebiger Kombination umfassen. In mindestens einer Ausführungsform sind Kerne 1520 konfiguriert, um Anweisungen einer bestimmten ISA auszuführen. In mindestens einer Ausführungsform ist jeder Kern 1520 ein CPU-Kern.
  • In mindestens einer Ausführungsform umfasst jeder Kern 1520, ohne darauf beschränkt zu sein, eine Hol/Decodier-Einheit 1522, eine Ganzzahl-Ausführungsmaschine 1524, eine Gleitkomma-Ausführungsmaschine 1526 und einen L2-Cache 1528. In mindestens einer Ausführungsform holt die Hol/Decodier-Einheit 1522 Anweisungen, decodiert derartige Anweisungen, erzeugt Mikrooperationen und sendet separate Mikroanweisungen an die Ganzzahl-Ausführungsmaschine 1524 und die Gleitkomma-Ausführungsmaschine 1526. In mindestens einer Ausführungsform kann die Hol/Decodier-Einheit 1522 gleichzeitig eine Mikroanweisung an die Ganzzahl-Ausführungsmaschine 1524 und eine andere Mikroanweisung an die Gleitkomma-Ausführungsmaschine 1526 senden. In mindestens einer Ausführungsform führt die Ganzzahl-Ausführungsmaschine 1524, ohne darauf beschränkt zu sein, Ganzzahl- und Speicheroperationen aus. In mindestens einer Ausführungsform führt die Gleitkomma-Maschine 1526, ohne darauf beschränkt zu sein, Gleitkomma- und Vektoroperationen aus. In mindestens einer Ausführungsform sendet die Hol/Decodier-Einheit 1522 Mikroanweisungen an eine einzige Ausführungsmaschine, die sowohl die Ganzzahl-Ausführungsmaschine 1524 als auch die Gleitkomma-Ausführungsmaschine 1526 ersetzt.
  • In mindestens einer Ausführungsform kann jeder Kern 1520(i), wobei i eine Ganzzahl ist, die eine bestimmte Instanz des Kerns 1520 darstellt, auf den L2-Cache 1528(i) zugreifen, der in dem Kern 1520(i) enthalten ist. In mindestens einer Ausführungsform ist jeder Kern 1520, der in dem Kernkomplex 1510(j) enthalten ist, wobei j ist eine Ganzzahl ist, die eine bestimmte Instanz von Kernkomplex 1510 darstellt, mit anderen Kernen 1520 in dem Kernkomplex 1510(j) über den in dem Kernkomplex 1510(j) enthaltenen L3-Cache 1530(j) verbunden. In mindestens einer Ausführungsform können die Kerne 1520, die in dem Kernkomplex 1510(j) enthalten sind, wobei j ein Ganzzahl ist, die eine bestimmte Instanz von Kernkomplex 1510 darstellt, auf den gesamten L3-Cache 1530(j) zugreifen, der in dem Kernkomplex 1510(j) enthalten ist. In mindestens einer Ausführungsform kann der L3-Cache 1530, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Abschnitten bzw. Slices umfassen.
  • In mindestens einer Ausführungsform ist die Fabric 1560 eine Systemzwischenverbindung, die Daten- und Steuerübertragungen über Kernkomplexe 1510(1)-1510(N) (wobei N eine Ganzzahl größer als Null ist), E/A-Schnittstellen 1570 und Speichercontrollern 1580 erleichtert. In mindestens einer Ausführungsform kann die CPU 1500 umfassen, ohne darauf beschränkt zu sein, eine beliebige Menge und Art von Systemzwischenverbindungen zusätzlich zu oder anstelle der Fabric 1560, die Daten- und Steuerübertragungen über eine beliebige Anzahl und Art von direkt oder indirekt verbundenen Komponenten erleichtern kann, die intern oder extern zu der CPU 1500 sein können. In mindestens einer Ausführungsform sind E/A-Schnittstellen 1570 für eine beliebige Anzahl und Art von E/A-Schnittstellen (z.B. PCI, PCI-X, PCIe, GBE, USB usw.) repräsentativ. In mindestens einer Ausführungsform sind verschiedene Arten von peripheren Vorrichtungen mit den E/A-Schnittstellen 1570 gekoppelt. In mindestens einer Ausführungsform können periphere Vorrichtungen, die mit den E/A-Schnittstellen 1570 gekoppelt sind, ohne darauf beschränkt zu sein, Anzeigen, Tatstaturen, Mäuse, Drucker, Scanner, Joysticks oder andere Arten von Spielecontrollern, Medienaufnahmevorrichtungen, externe Speicherungsvorrichtungen, Netzwerkschnittstellenkarten und so weiter umfassen.
  • In mindestens einer Ausführungsform erleichtert der Speichercontroller 1580 Datenübertragungen zwischen der CPU 1500 und einem Systemspeicher 1590. In mindestens einer Ausführungsform nutzen der Kernkomplex 1510 und der Graphikkomplex 1540 den Systemspeicher 1590 gemeinsam. In mindestens einer Ausführungsform implementiert die CPU 1500 ein Speichersubsystem, das umfasst, ohne darauf beschränkt zu sein, eine beliebige Menge und Art von Speichercontrollern 1580 und Speichervorrichtungen, die einer Komponente fest zugeordnet sind oder unter mehreren Komponenten gemeinsam genutzt werden. In mindestens einer Ausführungsform implementiert die CPU 1500 ein Cache-Subsystem, das umfasst, ohne darauf beschränkt zu sein, einen oder mehrere Cache-Speicher (z.B. L2-Caches 1528 und L3-Caches 1530), die jeweils private sein oder zwischen einer beliebigen Anzahl von Komponenten (z.B. Kernen 1520 und Kernkomplexen 1510) gemeinsam genutzt werden können.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 15 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 15 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 15 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 16 veranschaulicht einen beispielhaften Beschleunigungsintegration-Slice 1690 gemäß mindestens einer Ausführungsform. Wie hier verwendet, umfasst ein „Slice“ einen spezifizierten Abschnitt von Verarbeitungsressourcen einer Beschleunigungsintegrationsschaltung. In mindestens einer Ausführungsform stellt die Beschleunigungsintegrationsschaltung Cache-Verwaltung, Speicherzugriff, Kontextverwaltung und Interrupt-Verwaltungsdienste im Auftrag mehrerer Graphik-Verarbeitungsmaschinen bereit, die in einem GraphikBeschleunigungsmodul enthalten sind. Die Graphik-Verarbeitungsmaschinen können jeweils eine separate GPU umfassen. Alternativ können die Graphik-Verarbeitungsmaschinen unterschiedlichen Arten von Graphik-Verarbeitungsmaschinen innerhalb einer GPU umfassen, wie beispielsweise Graphikausführungseinheiten, Medienverarbeitungsmaschinen (z.B. Video-Codierer/Decodierer), Abtaster und Blit-Maschinen. In mindestens einer Ausführungsform kann das GraphikBeschleunigungsmodul eine GPU mit mehreren Graphik-Verarbeitungsmaschinen sein. In mindestens einer Ausführungsform können die Graphik-Verarbeitungsmaschinen einzelne GPUs sein, die auf einem gemeinsamen Gehäuse, einer gemeinsamen Leitungskarte oder einem gemeinsamen Chip integriert sind.
  • Ein Anwendung-wirksamer Adressraum 1682 innerhalb des Systemspeichers 1614 speichert Prozesselemente 1683. In einer Ausführungsform werden die Prozesselemente 1683 sind gespeicherten als Reaktion auf GPU-Aufrufe 1681 von Anwendungen 1680 gespeichert, die auf dem Prozessor 1607 ausgeführt werden. Ein Prozesselement 1683 enthält den Prozesszustand für die entsprechende Anwendung 1680. Ein Arbeitsdeskriptor (Work Descriptor; „WD“) 1684, der in dem Prozesselement 1683 enthalten ist, kann ein einzelner Job sein, der von einer Anwendung angefordert wird, oder kann einen Zeiger auf eine Warteschlange von Jobs enthalten. In mindestens einer Ausführungsform ist der WD 1684 ein Zeiger auf eine Jobanforderungs-Warteschlange in dem Anwendungwirksamen Adressraum 1682. 154 Ein Graphikbeschleunigungsmodul 1646 und/oder einzelne Graphikverarbeitungs-Maschinen 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 1684 an ein Graphikbeschleunigungsmodul 1646 zum Starten eines Auftrags in einer virtualisierten Umgebung enthalten sein.
  • In mindestens einer Ausführungsform ist ein fest zugeordnetes Prozessprogrammierungsmodell implementierungsspezifisch. In diesem Modell besitzt ein einzelner Prozess das Graphikbeschleunigungsmodul 1646 oder eine einzelne Graphikverarbeitungs-Maschine. Weil das Graphikbeschleunigungsmodul 1646 einem einzelnen Prozess gehört, initialisiert ein Hypervisor eine Beschleunigerintegrationsschaltung für eine besitzende Partition und ein Betriebssystem initialisiert eine Beschleunigerintegrationsschaltung für einen besitzenden Prozess, wenn das Graphikbeschleunigungsmodul 1646 zugewiesen ist.
  • In mindestens einer Ausführungsform holt im Betrieb eine WD-Holeinheit 1691 in dem Beschleunigerintegrations-Slice 1690 als nächstes den nächsten WD 1684, welcher eine Angabe der von einer oder mehreren Graphikverarbeitungs-Maschinen des Graphikbeschleunigungsmoduls 1646 zu verrichtenden Arbeiten umfasst. Daten aus dem WD 1684 können in Registern 1645 gespeichert und von einer Speicherverwaltungseinheit (Memory Management Unit; „MMU“) 1639, der Unterbrechungsverwaltungsschaltung 1647 und/oder der Kontextverwaltungsschaltung 1648, wie veranschaulicht, verwendet werden. Eine Ausführungsform der MMU 1639 beinhaltet beispielsweise eine Segment-/Seiten-Durchlauf-Schaltungsanordnung zum Zugreifen auf Segment-/Seitentabellen 1686 innerhalb eines virtuellen Adressraums 1685 des Betriebssystems (OS). Die Unterbrechungsverwaltungsschaltung 1647 Unterbrechungsereignisse („INT“) 1692 verarbeiten, die von dem Graphikbeschleunigungsmodul 1646 empfangen werden. Wenn Graphikoperationen durchgeführt werden, wird eine von einer Graphikverarbeitungs-Maschine erzeugte effektive Adresse 1693 von der MMU 1639 in eine reale Adresse übersetzt.
  • In einer Ausführungsform wird ein und derselbe Satz von Registern 1645 für jede Graphikverarbeitungs-Maschine und/oder Graphikbeschleunigungs-Modul 1646 dupliziert und kann von einem Hypervisor oder Betriebssystem initialisiert werden. Jedes dieser duplizierten Register kann in einem Beschleunigerintegrations-Slice 1690 umfasst sein. Beispielhafte Register, die von einem Hypervisor initialisiert werden können, werden in Tabelle 1 gezeigt. Tabelle 1 - Hypervisor-initialisierte Register
    1 Slice-Steuerregister
    2 Zeiger auf reale Adresse (RA) des Bereichs geplanter Prozesse
    3 Register für die Übersteuerung von Berechtigungsmasken
    4 Versatz des Unterbrechungsvektortabelleneintrag
    5 Grenze Unterbrechungsvektortabelleneintrag
    6 Zustands register
    7 ID der logischen Partition
    8 Zeiger auf reale Adresse (RA) des Hypervisor-Beschleunigerauslastungseintrags
    9 Speicherbeschreibungsregister
  • Beispielhafte Register, die von einem Betriebssystem initialisiert werden können, werden in Tabelle 2 gezeigt. Tabelle 2 - Betriebssystem-initialisierte Register
    1 Prozess- und Thread-Identifikation
    2 Zeiger auf effektive Adresse (EA) des Kontext-Sichern/Wiederherstellens
    3 Zeiger auf virtuelle Adresse (VA) des Beschleunigerauslastungseintrags
    4 Zeiger auf virtuelle Adresse (VA) der Speichersegmenttabelle
    5 Berechtigungsmaske
    6 Arbeitsdeskriptor
  • In mindestens einer Ausführungsform ist jeder WD 1684 spezifisch für ein bestimmtes Graphikbeschleunigungsmodul 1646 und/oder einer bestimmten Graphikverarbeitungs-Maschine. Sie enthält alle Informationen, die von einer Graphikverarbeitungs-Maschine zum Verrichten von Arbeit benötigt werden, oder sie kann ein Zeiger auf einen Speicherort sein, bei dem eine Anwendung eine Befehlswarteschlange für abzuschließende Arbeiten eingerichtet hat.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 16 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 16 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 16 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 17A-17B veranschaulichen beispielhafte Graphikprozessoren gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann ein beliebiger der beispielhaften Graphikprozessoren unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden. Zusätzlich zu dem, was veranschaulicht ist, können andere Logik und Schaltungen in mindestens einer Ausführungsform enthalten sein, einschließlich zusätzlicher Graphikprozessoren/Kerne, peripherer Schnittstellencontroller oder Allweckprozessorkerne. In mindestens einer Ausführungsform sind die beispielhaften Graphikprozessoren zur Verwendung innerhalb eines SoC.
  • 17A veranschaulicht einen beispielhaften Graphikprozessor 1710 eines Systems auf einer integrierten Chip-Schaltung, der unter Verwendung eines oder mehrerer IP-Kerne hergestellt sein kann, gemäß mindestens einer Ausführungsform. 17B veranschaulicht einen zusätzlichen beispielhaften Graphikprozessor 1740 eines Systems auf einer integrierten Chip-Schaltung, der unter Verwendung eines oder mehrerer IP-Kerne hergestellt sein kann, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist der Graphikprozessor 1710 von 17A ein Graphikprozessorkern mit niedrigem Stromverbrauch. In mindestens einer Ausführungsform ist der Graphikprozessor 1740 von 17B ein leistungsfähigerer Graphikprozessorkern. In mindestens einer Ausführungsform kann jeder der Graphikprozessoren 1710, 1740 Varianten des Graphikprozessors 1910 von 12 sein.
  • In mindestens einer Ausführungsform umfasst der Graphikprozessor 1710 einen Vertex-Prozessor 1705 und einen oder mehrere Fragment-Prozessor(en) 1715A-1715N (z.B. 1715A, 1715B, 1715C, 1715D bis 1715N-1 und 1715N). In mindestens einer Ausführungsform kann der Graphikprozessor 1710 verschiedene Shader-Programme über eine separate Logik ausführen, so dass der Vertex-Prozessor 1705 für die Ausführung von Operationen für Vertex-Shader-Programme optimiert ist, während ein oder mehrere Fragment-Prozessoren 1715A-1715N Fragment (beispielsweise Pixel)-Shading-Operationen für Fragment- oder Pixel-Shader-Programme ausführen. In mindestens einer Ausführungsform führt der Vertex-Prozessor 1705 eine Vertex-Verarbeitungsphase einer 3D-Graphikpipeline durch und erzeugt Primitive und Vertex-Daten. In mindestens einer Ausführungsform verwenden der(die) Fragment-Prozessor(en) 1715A-1715N Primitive- und Vertex-Daten, die von dem Vertex-Prozessor 1705 erzeugt wurden, um einen Frame- bzw. Einzelbildpuffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. In mindestens einer Ausführungsform sind der bzw. die Fragment-Prozessor(en) 1715A-1715N optimiert, um Fragment-Shader-Programme auszuführen, wie sie in einer OpenGL-API vorgesehen sind, welche verwendet werden können, um ähnliche Operationen wie ein Pixel-Shader-Programm durchzuführen, wie sie in einer Direct 3D-API vorgesehen sind.
  • In mindestens einer Ausführungsform umfasst der Graphikprozessor 1710 zusätzlich eine oder mehrere Speicherverwaltungseinheiten (MMUs) 1717A-1717B, Cache(s) 1725A-1725B und Schaltungszwischenverbindung(en) 1730A-1730B. In mindestens einer Ausführungsform stellen eine oder mehrere MMU(s) 1720A-1720B ein Adressmapping von virtuell nach physikalisch für den Graphikprozessor 1710 bereit, einschließlich des Vertex-Prozessors 1705 und/oder des/der Fragment-Prozessoren 1715A-1715N, die auf Vertex- oder Bild- /Texturdaten Bezug nehmen können, die im Speicher gespeichert sind, zusätzlich zu Vertex- oder Bild-/Textur-Daten, die in einem oder mehreren Cache(s) 1725A-1725B gespeichert sind. In mindestens einer Ausführungsform können eine oder mehrere MMU(s) 1720A-1720B mit anderen MMU(s) innerhalb des Systems synchronisiert werden, einschließlich einer oder mehrerer MMU(s), die einem oder mehreren Anwendungsprozessor(en) 1205, Bildprozessoren 1215 und/oder Videoprozessoren 1214 von 12 zugeordnet sind, so dass jeder Prozessor 1205-1214 an einem gemeinsam genutzten oder vereinigten virtuellen Speichersystem partizipieren kann. In mindestens einer Ausführungsform ermöglichen eine oder mehrere Schaltungs-Zwischenverbindung(en) 1730A-1730B dem Graphikprozessor 1710, sich mit anderen IP-Kernen innerhalb des SoC entweder über einen internen Bus des SoC oder über eine direkte Verbindung schnittstellenmäßig zu verbinden.
  • In mindestens einer Ausführungsform umfasst der Graphikprozessor 1740 eine oder mehrere MMU(s) 1720A-1720B, Caches 1725A-1725B und Schaltungs-Zwischenverbindungen 1730A-1730B des Graphikprozessors 1710 von 17A. In mindestens einer Ausführungsform umfasst der Graphikprozessor 1740 einen oder mehrere Shader-Kerne 1755A-1755N (z.B. 1755A, 1755B, 1755C, 1755D, 1755E, 1755F bis 1755N-1 und 1755N), welche eine vereinheitlichte Shader-Kern-Architektur bereitstellen, in welcher ein einzelner Kern oder Typ oder Kern alle Arten von programmierbarem Shader-Code ausführen kann, einschließlich Shader-Programmcode zur Implementierung von Vertex-Shadern, Fragment-Shadern und/oder Rechen-Shadern. In mindestens einer Ausführungsform kann eine Anzahl von Shader-Kernen variieren. In mindestens einer Ausführungsform umfasst der Graphikprozessor 1740 einen Inter-Core-Task-Manager 1745, der als ein Thread-Dispatcher fungiert, um Ausführung-Threads an einen oder mehrere Shader-Kerne 1755A-1755N zu senden, und eine Kachelungs-Einheit 1758, um Kachelungs-Operationen für kachelbasiertes Rendering zu beschleunigen, bei welchen Rendering-Operationen für eine Szene im Bildraum unterteilt sind, um beispielsweise lokale räumliche Kohärenz innerhalb einer Szene auszunutzen oder die Nutzung interner Caches zu optimieren.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 17A und 17B anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 17A und 17B anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 17A und 17B anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 18A veranschaulicht einen Graphikkern 1800 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann der Graphikkern innerhalb des Graphikprozessors 1210 von 12 enthalten sein. In mindestens einer Ausführungsform umfasst der Graphikkern 1800 einen gemeinsam genutzten Befehls-Cache 1802, eine Textureinheit 1818 und einen Cache/gemeinsam genutzten Speicher 18, die für Ausführungsressourcen innerhalb des Graphikkerns 1800 gemeinsam sind. In mindestens einer Ausführungsform kann der Graphikkern 1800 mehrere Slices 1801A-1801N oder Partitionen für jeden Kern umfassen und ein Graphikprozessor kann mehrere Instanzen des Graphikkerns 1800 umfassen. In mindestens einer Ausführungsform können die Slices 1801A-1801N eine Unterstützungslogik umfassen, die einen lokalen Befehls-Cache 1804A-1804N, einen Thread-Planer 1806A-1806N, einen Thread-Dispatcher 1808A-1808N und einen Satz von Registern 1810A-1810N umfasst. In mindestens einer Ausführungsform können die Slices 1801A-1801N einen Satz zusätzlicher Funktionseinheiten (AFUs 1814A-1814N), Gleitkommaeinheiten (FPU 1814A-1814N), Ganzzahl-Rechenlogikeinheiten (ALUs 1816A-1816N), Adressberechnungseinheiten (ACU 1813A-1813N), doppelt genaue Gleitkommaeinheiten (DPFPU 1815A-1815N) und Matrixverarbeitungseinheiten (MPU 1817A-1817N) umfassen.
  • In mindestens einer Ausführungsform können FPUs 1814A-1814N einfach genaue (32-Bit) und halb genaue (16-Bit) Gleitkomma-Operationen durchführen, während DPFPUs 1815A-1815N doppelt genaue (64-Bit) Gleitkomma-Operationen durchführen. In mindestens einer Ausführungsform können ALUs 1816A-1816N Ganzzahl-Operationen 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 1817A-1817N auch für Matrix-Operationen mit gemischter Genauigkeit konfiguriert sein, die halb genaue Gleitkomma- und 8-Bit Ganzzahl-Operationen umfassen. In mindestens einer Ausführungsform können die MPUs 1817-1817N ebenfalls für eine Vielzahl von Matrix-Operationen durchführen, um CUDA-Programme zu beschleunigen, die das Ermöglichen der Unterstützung für beschleunigte allgemeine bzw. generelle Matrix-zu-Matrix Multiplikation (GEMM) umfassen können. In mindestens einer Ausführungsform können die AFUs 1812A-1812N zusätzliche logische Operationen durchführen, die nicht von Gleitkomma- oder Integer-Einheiten unterstützt werden, die trigonometrische Operationen (z.B. Sinus, Cosinus usw.) umfassen.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 18A anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 18A anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 18A anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 18B veranschaulicht eine Allzweck-Verarbeitungseinheit (GPGPU) 1830, die konfiguriert sein kann, um hochparallele Rechenoperationen zu ermöglichen, die von einer Anordnung von Graphikverarbeitungseinheiten durchzuführen sind, in mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann die GPGPU 1830 direkt mit anderen Instanzen der GPGPU 1830 verknüpft sein, um einen Multi-GPU-Cluster zu erstellen, um die Trainingsgeschwindigkeit für tiefe neuronale Netzwerke zu verbessern. In mindestens einer Ausführungsform umfasst die GPGPU 1830 eine Host-Schnittstelle 1832, um eine Verbindung mit einem Host-Prozessor zu ermöglichen. In mindestens einer Ausführungsform ist die Host-Schnittstelle 1832 eine PCI-Express-Schnittstelle. In mindestens einer Ausführungsform kann die Host-Schnittstelle 1832 eine herstellerspezifische Kommunikationsschnittstelle oder Kommunikationsstruktur sein. In mindestens einer Ausführungsform empfängt die GPGPU 1830 Befehle von einem Host-Prozessor und verwendet einen globalen Planer 1834, um die diesen Befehlen zugeordneten Ausführung-Threads an einen Satz von Rechenclustern 1836A-1836H zu verteilen. In mindestens einer Ausführungsform nutzen die Rechencluster 1836A-1836H einen Cache-Speicher 1838 gemeinsam. In mindestens einer Ausführungsform kann der Cache-Speicher 1838 als ein übergeordneter Cache für Cache-Speicher innerhalb der Rechencluster 1836A-1836H dienen.
  • In mindestens einer Ausführungsform umfasst die GPGPU 1830 Speicher 1844A-1844B, die mit den Rechenclustern 1836A-1836H über einen Satz von Speichercontrollern 1842A-1842B gekoppelt sind. In mindestens einer Ausführungsform können die Speicher 1844A-1844B verschiedene Arten von Speichervorrichtungen umfassen, einschließlich eines dynamischen Direktzugriffsspeichers (DRAM) oder eines Graphik-Direktzugriff speichers , wie beispielsweise einen synchronen Graphik-Direktzugriffspeicher („SGRAM“), der einen Graphikspeicher mit doppelter Datenrate („GDDR“) umfasst.
  • In mindestens einer Ausführungsform umfassen die Rechencluster 1836A-1836H jeweils einen Satz von Graphikkernen, wie beispielsweise den Graphikkern 1800 von 18A, der mehrere Typen von Ganzzahl- und Gleitkomma-Logikeinheiten umfassen kann, die Rechenoperationen mit einer Reihe von Genauigkeitsstufen durchführen können, die für Berechnungen geeignet sind, die CUDA-Programmen zugeordnet sind. Beispielsweise kann in mindestens einer Ausführungsform mindestens eine Teilmenge von Gleitkommaeinheiten in jedem der Rechencluster 1836A-1836H konfiguriert sein, um 16-Bit- oder 32-Bit-Gleitkommaoperationen durchzuführen, während eine andere Teilmenge von Gleitkommaeinheiten konfiguriert sein kann, um 64-Bit-Gleitkommaoperationen durchzuführen.
  • In mindestens einer Ausführungsform können mehrere Instanzen der GPGPU 1830 konfiguriert sein, als Rechencluster zu arbeiten. In mindestens einer Ausführungsform variiert die Kommunikation, die von den Rechenclustern 1836A-1836H für die Synchronisation und den Datenaustausch verwendet wird, je nach Ausführungsform. In mindestens einer Ausführungsform kommunizieren mehrere Instanzen der GPGPU 1830 über die Host-Schnittstelle 1832. In mindestens einer Ausführungsform umfasst die GPGPU 1830 einen E/A-Hub 1839, der die GPGPU 1830 mit einer GPU-Verbindung 1840 koppelt, die eine direkte Verbindung zu anderen Instanzen der GPGPU 1830 ermöglicht. In mindestens einer Ausführungsform ist die GPU-Verbindung 1840 mit einer fest zugeordneten GPU-zu-GPU-Brücke gekoppelt, die die Kommunikation und Synchronisation zwischen mehreren GPGPU 1830-Instanzen ermöglicht. In mindestens einer Ausführungsform koppelt die GPU-Verbindung 1840 mit einer Hochgeschwindigkeitsverbindung, um Daten an andere GPGPUs oder Parallelprozessoren zu senden und zu empfangen. In mindestens einer Ausführungsform befinden sich mehrere Instanzen der GPGPU 1830 in separaten Datenverarbeitungssystemen und kommunizieren über eine Netzwerkvorrichtung, die über die Host-Schnittstelle 1832 zugänglich ist. In mindestens einer Ausführungsform kann die GPU-Verbindung 1840 konfiguriert sein, um eine Verbindung zu einem Host-Prozessor zusätzlich oder alternativ zu der Host-Schnittstelle 1832 zu ermöglichen.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 18B anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 18B anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 18B anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 19A veranschaulicht einen Parallelprozessor 1900 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform können verschiedene Komponenten des Parallelprozessors 1900 unter Verwendung einer oder mehrerer integrierter Schaltungsvorrichtungen, wie beispielsweise programmierbare Prozessoren, anwendungsspezifische integrierte Schaltungen (ASICs) oder feldprogrammierbare Gate-Arrays (FPGA) implementiert sein.
  • In mindestens einer Ausführungsform umfasst der Parallelprozessor 1900 eine Parallelverarbeitungseinheit 1902. In mindestens einer Ausführungsform umfasst die Parallelverarbeitungseinheit 1902 eine E/A-Einheit 1904, die eine Kommunikation mit anderen Vorrichtungen ermöglicht, einschließlich anderer Instanzen der Parallelverarbeitungseinheit 1902. In mindestens einer Ausführungsform kann die E/A-Einheit 1904 direkt mit anderen Vorrichtungen verbunden sein. In mindestens einer Ausführungsform verbindet sich die E/A-Einheit 1904 mit anderen Vorrichtungen unter Verwendung eines Hubs oder einer Schalter-Schnittstelle, wie beispielsweise dem Speicher-Hub 1905. In mindestens einer Ausführungsform bilden Verbindungen zwischen dem Speicher-Hub 1905 und der E/A-Einheit 1904 eine Kommunikationsverbindung 1913. In mindestens einer Ausführungsform verbindet sich die E/A-Einheit 1904 mit einer Host-Schnittstelle 1906 und einer Speicherquerschiene 1916, wobei die Host-Schnittstelle 1906 Befehle empfängt, die zur Durchführung von Verarbeitungsoperationen bestimmt sind, und die Speicherquerschiene 1916 Befehle empfängt, die zur Durchführung von Speicheroperationen bestimmt sind.
  • In mindestens einer Ausführungsform kann dann, wenn die Host-Schnittstelle 1906 über die E/A-Einheit 1904 einen Befehlspuffer empfängt, die Host-Schnittstelle 1906 Arbeitsoperationen anweisen, um diese Befehle an einem Frontend 1908 auszuführen. In mindestens einer Ausführungsform koppelt das Frontend 1908 mit einem Planer 1910, der konfiguriert ist, um Befehle oder andere Arbeitselemente an eine Verarbeitungsanordnung 1912 zu verteilen. In mindestens einer Ausführungsform stellt der Planer 1910 sicher, dass die Clusteranordnung 1912 richtig konfiguriert ist und sich in einem gültigen Zustand befindet, bevor Aufgaben an die Verarbeitungsanordnung 1912 der Verarbeitungsanordnung 1912 verteilt werden. In mindestens einer Ausführungsform ist der Planer 1910 über Firmware-Logik implementiert, die auf einem Mikrocontroller ausgeführt wird. In mindestens einer Ausführungsform ist der von dem Mikrocontroller implementierte Planer 1910 konfigurierbar, um komplexe Planungs- und Arbeitsverteilungsoperationen mit grober und feiner Granularität durchzuführen, was eine schnelle Vorwegnahme und Kontextumschaltung von Threads ermöglicht, die auf der Verarbeitungsanordnung 1912 ausgeführt werden. In mindestens einer Ausführungsform kann die Host-Software Arbeitslasten für die Planung auf der Verarbeitungsanordnung 1912 über eine von mehreren Graphikverarbeitungstürklingeln nachweisen. In mindestens einer Ausführungsform können dann Arbeitslasten über die Verarbeitungsanordnung 1912 hinweg durch die Logik des Planers 1910 innerhalb eines Mikrocontrollers einschließlich des Planers 1910 automatisch verteilt werden.
  • In mindestens einer Ausführungsform kann die Verarbeitungsanordnung 1912 bis zu „N“-Verarbeitungscluster (z.B. Cluster 1914A, Cluster 1914B bis Cluster 1914N) umfassen. In mindestens einer Ausführungsform kann jeder Cluster 1914A-1914N der Verarbeitungsanordnung 1912 eine große Anzahl gleichzeitiger Threads ausführen. In mindestens einer Ausführungsform kann der Planer 1910 den Clustern 1914A-1914N der Verarbeitungsanordnung 1912 unter Verwendung verschiedener Planungs- und/oder Arbeitsverteilungs-Algorithmen Arbeit zuweisen, welche je nach Arbeitsbelastung, die für jede Art von Programm oder Berechnung aufkommt, variieren kann. In mindestens einer Ausführungsform kann die Planung von dem Planer 1910 dynamisch gehandhabt werden, oder kann teilweise durch Kompiliererlogik während der Kompilierung der Programmlogik, die für die Ausführung durch die Verarbeitung der Clusteranordnung 1912 konfiguriert ist, unterstützt werden. In mindestens einer Ausführungsform können verschiedene Cluster 1914A-1914N der Verarbeitungsanordnung 1912 zur Verarbeitung verschiedener Arten von Programmen oder zur Durchführung verschiedener Arten von Berechnungen zugeteilt sein.
  • In mindestens einer Ausführungsform kann die Verarbeitungsanordnung 1912 konfiguriert sein, um verschiedene Arten von Parallelverarbeitungsoperationen durchzuführen. In mindestens einer Ausführungsform ist die Verarbeitungsanordnung 1912 konfiguriert, um allgemeine parallele Rechenoperationen durchzuführen. Beispielsweise kann in mindestens einer Ausführungsform die Verarbeitungsanordnung 1912 Logik umfassen, um Verarbeitungsaufgaben einschließlich eines Filterns von Video- und/oder Audiodaten, Durchführens von Modellierungsoperationen, einschließlich physikalischer Operationen, und Durchführens von Datentransformationen auszuführen.
  • In mindestens einer Ausführungsform ist die Verarbeitungsanordnung 1912 konfiguriert, um parallele Graphikverarbeitungsoperationen durchzuführen. In mindestens einer Ausführungsform kann die Verarbeitungsanordnung 1912 zusätzliche Logik umfassen, um die Ausführung derartiger Graphikverarbeitungsoperationen zu unterstützen, einschließlich einer, jedoch nicht beschränkt auf, Texturabtastlogik zur Durchführung von Texturoperationen, sowie einer Tessellierungslogik und anderer Vertex-Verarbeitungslogik. In mindestens einer Ausführungsform kann die Verarbeitungsanordnung 1912 konfiguriert sein, um graphikverarbeitungsbezogene Shader-Programme auszuführen, wie beispielsweise Vertex-Shaders, Tessellation-Shaders, Geometrie-Shaders und Pixel-Shaders. In mindestens einer Ausführungsform kann die Parallelverarbeitungseinheit 1902 Daten aus dem Systemspeicher über die E/A-Einheit 1904 zur Verarbeitung übertragen. In mindestens einer Ausführungsform können während der Verarbeitung übertragene Daten während der Verarbeitung in einem On-Chip-Speicher (z.B. Speicher des Parallelprozessors 1922) gespeichert und anschließend in den Systemspeicher zurückgeschrieben werden.
  • In mindestens einer Ausführungsform kann dann, wenn die Parallelverarbeitungseinheit 1902 zur Durchführung von Graphikverarbeitung verwendet wird, der Planer 1910 konfiguriert sein, um eine Verarbeitungsarbeitslast in etwa gleich große Aufgaben aufzuteilen, um die Verteilung von Graphikverarbeitungsoperationen auf mehrere Cluster 1914A-1914N der Verarbeitungsanordnung 1912 besser zu ermöglichen. In mindestens einer Ausführungsform können Abschnitte der Verarbeitungsanordnung 1912 konfiguriert sein, um verschiedene Arten von Verarbeitung durchzuführen. Beispielsweise kann in mindestens einer Ausführungsform ein erster Abschnitt konfiguriert sein, um Vertex-Shading und Topologieerzeugung durchzuführen, ein zweiter Abschnitt kann konfiguriert sein, um Tesselations- und Geometrie-Shading durchzuführen, und ein dritter Abschnitt kann konfiguriert sein, um Pixel-Shading oder andere Bildschirmraumoperationen durchzuführen, um ein gerendertes Bild für die Anzeige zu erzeugen. In mindestens einer Ausführungsform können Zwischendaten, die von einem oder mehreren der Cluster 1914A-1914N erzeugt wurden, in Puffern gespeichert werden, so dass Zwischendaten zwischen den Clustern 1914A-1914N zur weiteren Verarbeitung übertragen werden können.
  • In mindestens einer Ausführungsform kann die Verarbeitungsanordnung 1912 Verarbeitungsaufgaben empfangen, die über den Planer 1910 auszuführen sind, der von dem Frontend 1908 Befehle empfängt, die Verarbeitungsaufgaben definieren. In mindestens einer Ausführungsform können Verarbeitungsaufgaben Indizes von zu verarbeitenden Daten umfassen, z.B. Oberflächen-(Patch)-Daten, Stammfunktionsdaten, Vertex-Daten und/oder Pixeldaten, sowie Zustandsparameter und Befehle, die definieren, wie Daten zu verarbeiten sind (z.B. welches Programm auszuführen ist). In mindestens einer Ausführungsform kann der Planer 1910 konfiguriert sein, um Indizes zu holen, die Aufgaben entsprechen, oder kann Indizes von dem Frontend 1908 empfangen. In mindestens einer Ausführungsform kann das Frontend 1908 konfiguriert sein, um sicherzustellen, dass die Verarbeitungsanordnung 1912 in einen gültigen Zustand konfiguriert ist, bevor eine durch eingehende Befehlspuffer (z.B. Stapelpuffer, Schiebepuffer usw.) spezifizierte Arbeitslast initiiert wird.
  • In mindestens einer Ausführungsform kann jede von einer oder mehreren Instanzen der Parallelverarbeitungseinheit 1902 mit dem Parallelprozessorspeicher 1922 gekoppelt sein. In mindestens einer Ausführungsform kann auf den Parallelprozessorspeicher 1922 über die Speicherquerschiene 1916 zugegriffen werden, die Speicheranforderungen von der Verarbeitungsanordnung 1912 sowie der E/A-Einheit 1904 empfangen kann. In mindestens einer Ausführungsform kann die Speicherquerschiene 1916 über eine Speicherschnittstelle 1918 auf den Parallelprozessorspeicher 1922 zugreifen. In mindestens einer Ausführungsform kann die Speicherschnittstelle 1918 mehrere Partitionierungseinheiten (z.B. Partitionierungseinheit 1920A, Partitionierungseinheit 1920B bis Partitionierungseinheit 1920N) umfassen, die jeweils mit einem Abschnitt (z.B. der Speichereinheit) des Parallelprozessorspeichers 1922 koppeln können. In mindestens einer Ausführungsform ist eine Anzahl von Partitionierungseinheiten 1920A-1922N konfiguriert, um gleich einer Anzahl von Speichereinheiten zu sein, so dass eine erste Partitionierungseinheit 1920A eine entsprechende erste Speichereinheit 1924A aufweist, eine zweite Partitionierungseinheit 1920B eine entsprechende Speichereinheit 1924B aufweist und eine N-te Partitionierungseinheit 1920N eine entsprechende N-te Speichereinheit 1924N aufweist. In mindestens einer Ausführungsform kann eine Anzahl von Partitionierungseinheiten 1920A-1920N nicht gleich einer Anzahl von Speichervorrichtungen sein.
  • In mindestens einer Ausführungsform können die Speichereinheiten 1924A-1924N verschiedene Arten von Speichervorrichtungen umfassen, einschließlich eines dynamischen Direktzugriffspeicher (DRAM) oder Graphik-Direktzugriffspeicher, wie beispielsweise synchronen Graphik-Direktzugriff Speichers (SGRAM), einschließlich eines Graphikspeichers mit doppelter Datenrate (GDDR). In mindestens einer Ausführungsform können die Speichereinheiten 1924A-1924N auch 3D-Stapelspeicher umfassen, einschließlich, jedoch nicht beschränkt auf, Speicher mit hoher Bandbreite (HBM). In mindestens einer Ausführungsform können Renderziele, wie beispielsweise Einzelbildpuffer bzw. Frame-Puffer oder Texturkarten, über Speichereinheiten 1924A-1924N hinweg gespeichert sein, so dass die Partitionseinheiten 1920A-1920N Abschnitte jedes Renderziels parallel schreiben können, um die verfügbare Bandbreite des Parallelprozessorspeichers 1922 effizient zu nutzen. In mindestens einer Ausführungsform kann eine lokale Instanz des Parallelprozessorspeichers 1922 zugunsten eines vereinheitlichten Speicherdesigns, das Systemspeicher in Verbindung mit lokalem Cache-Speicher nutzt, ausgeschlossen sein.
  • In mindestens einer Ausführungsform kann jeder beliebige der Cluster 1914A-1914N der Verarbeitungsanordnung 1912 Daten verarbeiten, die in einer beliebigen der Speichereinheiten 1924A-1924N in dem Parallelprozessorspeicher 1922 geschrieben werden. In mindestens einer Ausführungsform kann die Speicherquerschiene 1916 konfiguriert sein, um eine Ausgabe jedes Clusters 1914A-1914N an eine beliebige Partitionseinheit 1912A-1912N oder an einen anderen Cluster 1914A-1914N zu übertragen, der zusätzliche Verarbeitungsoperationen an einer Ausgabe durchführen kann. In mindestens einer Ausführungsform kann jeder Cluster 1914A-1914N mit der Speicherschnittstelle 1918 über die Speicherquerschiene 1916 kommunizieren, um aus verschiedenen externen Speichervorrichtungen zu lesen oder in diese zu schreiben. In mindestens einer Ausführungsform weist die Speicherquerschiene 1916 zur Kommunikation mit der E/A-Einheit 1904 zu der Speicherschnittstelle 1918 auf, sowie eine Verbindung zu einer lokalen Instanz des Parallelprozessorspeichers 1922 auf, so dass Verarbeitungseinheiten innerhalb verschiedener Verarbeitungscluster 1914A-1914N mit dem Systemspeicher oder anderem Speicher kommunizieren können, der nicht lokal zu der Parallelverarbeitungseinheit 1902 ist. In mindestens einer Ausführungsform kann die Speicherquerschiene 1916 virtuelle Kanäle verwenden, um Ströme von Datenaufkommen zwischen den Clustern 1914A-1914N und den Partitionierungseinheiten 1920A-1920N zu trennen.
  • In mindestens einer Ausführungsform können mehrere Instanzen der Parallelverarbeitungseinheit 1902 auf einer einzelnen Erweiterungskarte bereitgestellt sein oder mehrere Erweiterungskarten können miteinander verbunden sein. In mindestens einer Ausführungsform können verschiedene Instanzen der Parallelverarbeitungseinheit 1902 konfiguriert sein, auch dann miteinander zu arbeiten, wenn verschiedene Instanzen eine unterschiedliche Anzahl von Verarbeitungskernen, unterschiedliche Mengen an lokalem Parallelprozessorspeicher und/oder andere Konfigurationsunterschiede aufweisen. Beispielsweise können in mindestens einer Ausführungsform einige Instanzen der Parallelverarbeitungseinheit 1902 relativ zu anderen Instanzen Gleitkommaeinheiten mit höherer Genauigkeit umfassen. In mindestens einer Ausführungsform können Systeme, die eine oder mehrere Instanzen der Parallelverarbeitungseinheit 1902 oder des Parallelprozessors 1900 umfassen, in einer Mehrzahl von Konfigurationen und Formfaktoren implementiert sein, einschließlich, jedoch nicht beschränkt auf, Desktop-, Laptop- oder Handheld-Personal Computer, Servern, Workstations, Spielkonsolen und/oder eingebetteten Systeme.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 19A anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 19A anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 19A anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 19B veranschaulicht einen Verarbeitungscluster 1994 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist der Verarbeitungscluster 1994 innerhalb einer Parallelverarbeitungseinheit enthalten. In mindestens einer Ausführungsform ist der Verarbeitungscluster 1994 einer der Verarbeitungscluster 1914A-1914N von 19A. In mindestens einer Ausführungsform kann der Verarbeitungscluster 1914 konfiguriert sein, um viele Threads parallel auszuführen, wobei sich der Begriff „Thread“ auf eine Instanz eines bestimmten Programms bezieht, das auf einem bestimmten Satz von Eingangsdaten ausgeführt wird. In mindestens einer Ausführungsform werden Einzelanweisungs-Mehrfachdaten (Single Instruction, Multiple Data; SIMD)-Befehlsausgabetechniken verwendet, die parallele Ausführung einer großen Anzahl von Threads zu unterstützen, ohne mehrere unabhängige Befehlseinheiten bereitzustellen. In mindestens einer Ausführungsform werden Einzelanweisungs-Mehrfachthread (Single Instruction, Multiple Thread; „SIMT“)-Techniken verwendet, um die parallele Ausführung einer großen Anzahl von im Allgemeinen synchronisierten Threads zu unterstützen, wobei eine gemeinsame Befehlseinheit verwendet wird, die konfiguriert ist, um Anweisungen an eine Anzahl von Verarbeitungs-Maschinen innerhalb jedes Verarbeitungscluster 1994 auszugeben.
  • In mindestens einer Ausführungsform kann der Betrieb des Verarbeitungsclusters 1914 über einen Pipeline-Verwalter 1932 gesteuert werden, der Verarbeitungsaufgaben an SIMT-Parallelprozessoren verteilt. In mindestens einer Ausführungsform empfängt der Pipeline-Verwalter 1932 Anweisungen von dem Planer 1910 von 19 und verwaltet die Ausführung dieser Anweisungen über einen Graphik-Multiprozessor 1934 und/oder eine Textureinheit 1936. In mindestens einer Ausführungsform ist der Graphik-Multiprozessor 1934 eine beispielhafte Instanz eines SIMT-Parallelprozessors. In mindestens einer Ausführungsform können jedoch verschiedene Arten von SIMT-Parallelprozessoren unterschiedlicher Architekturen innerhalb des Verarbeitungsclusters 1914 umfasst sein. In mindestens einer Ausführungsform können eine oder mehrere Instanzen des Graphik-Multiprozessors 1934 in einem Verarbeitungscluster 1914 umfasst sein. In mindestens einer Ausführungsform kann der Graphik-Multiprozessor 1934 Daten verarbeiten und kann eine Datenquerschiene 1940 verwendet, um verarbeitete Daten an eines von mehreren möglichen Zielen, einschließlich anderer Shader-Einheiten, zu verteilen. In mindestens einer Ausführungsform kann der Pipeline-Verwalter 1932 die Verteilung der verarbeiteten Daten erleichtern, indem er Ziele für verarbeitete Daten spezifiziert, die über die Datenquerschiene 1940 zu verteilen sind.
  • In mindestens einer Ausführungsform kann jeder Graphik-Multiprozessor 1934 innerhalb des Verarbeitungsclusters 1914 einen identischen Satz funktionaler Ausführungslogik (z.B. Arithmetik-Logikeinheiten, Lade-Speicher-Einheiten usw.) umfassen. In mindestens einer Ausführungsform kann funktionale Ausführungslogik nach Art des Pipeline-Prinzips konfiguriert sein, in welcher neue Anweisungen ausgegeben werden können, bevor frühere Anweisungen beendet sind. In mindestens einer Ausführungsform unterstützt die funktionale Ausführungslogik eine Mehrzahl von Operationen, einschließlich Ganzzahl- und Gleitkommaarithmetik, Vergleichsoperationen, boolesche Operationen, Bit-Shifting und Berechnung verschiedener algebraischer Funktionen. In mindestens einer Ausführungsform kann die gleiche Hardware der funktionalen Einheit wirksam genutzt werden, um verschiedene Operationen durchzuführen, und jede beliebige Kombination von funktionalen Einheiten kann vorhanden sein.
  • In mindestens einer Ausführungsform bilden an den Verarbeitungscluster 1914 übertragene Anweisungen einen Thread. In mindestens einer Ausführungsform ist ein Satz von Threads, der über einen Satz von Parallelverarbeitungs-Maschinen ausgeführt wird, eine Thread-Gruppe. In mindestens einer Ausführungsform führt die Thread-Gruppe ein Programm an verschiedenen Eingangsdaten aus. In mindestens einer Ausführungsform kann jeder Thread innerhalb einer Thread-Gruppe einer unterschiedlichen Verarbeitungs-Maschine innerhalb eines Graphik-Multiprozessors 1934 zugeordnet sein. In mindestens einer Ausführungsform kann eine Thread-Gruppe weniger Threads umfassen als eine Anzahl von Verarbeitungs-Maschinen innerhalb des Graphik-Multiprozessors 1934. In mindestens einer Ausführungsform kann, wenn eine Thread-Gruppe weniger Threads als eine Anzahl von Verarbeitungs-Maschinen enthält, eine oder mehrere der Verarbeitungs-Maschinen während der Zyklen, in welchen diese Thread-Gruppe verarbeitet wird, im Leerlauf sein. In mindestens einer Ausführungsform kann eine Thread-Gruppe mehr Threads als eine Anzahl von Verarbeitungs-Maschinen innerhalb des Graphik-Multiprozessors 1934 umfassen. In mindestens einer Ausführungsform kann, wenn eine Thread-Gruppe mehr Threads als eine Anzahl von Verarbeitungs-Maschinen innerhalb des Graphik-Multiprozessors 1934 umfasst, die Verarbeitung über aufeinanderfolgende Taktzyklen durchgeführt werden. In mindestens einer Ausführungsform können mehrere Thread-Gruppen nebenläufig auf einem Graphik-Multiprozessor 1934 ausgeführt werden.
  • In mindestens einer Ausführungsform umfasst der Graphik-Multiprozessor 1934 einen internen Cache-Speicher, um Lade- und Speicheroperationen durchzuführen. In mindestens einer Ausführungsform kann der Graphik-Multiprozessor 1934 auf einen internen Cache verzichten und einen Cache-Speicher (z.B. den L1-Cache 1948) innerhalb des Verarbeitungsclusters 1914 verwenden. In mindestens einer Ausführungsform weist jeder Graphik-Multiprozessor 1934 auch Zugriff auf L2-Caches innerhalb von Partitionseinheiten auf (z.B. den Partitionseinheiten 1920A-1920N von 19A), die unter allen Verarbeitungsclustern 1914 gemeinsam genutzt werden und zum Übertragen von Daten zwischen Threads verwendet werden können. In mindestens einer Ausführungsform kann der Graphik-Multiprozessor 1934 auch auf einen globalen Speicher außerhalb des Chips zugreifen, der einen oder mehrere lokale Parallelprozessorspeicher und/oder Systemspeicher umfassen kann. In mindestens einer Ausführungsform kann jeder Speicher, der außerhalb der Parallelverarbeitungseinheit 1902 liegt, als globaler Speicher verwendet werden. In mindestens einer Ausführungsform umfasst der Verarbeitungscluster 1914 mehrere Instanzen des Graphik-Multiprozessors 1934, der gemeinsame Anweisungen und Daten austauschen kann, welche in dem L1-Cache 1948 gespeichert sein können.
  • In mindestens einer Ausführungsform kann jeder Verarbeitungscluster 1914 eine MMU 1945 (Speicherverwaltungseinheit) umfassen, die konfiguriert ist, um virtuelle Adressen auf physikalische Adressen abzubilden.
  • In mindestens einer Ausführungsform können sich eine oder mehrere Instanzen der MMU 1945 innerhalb der Speicherschnittstelle 1918 von 19 befinden. In mindestens einer Ausführungsform umfasst die MMU 1945 einen Satz von Seitentabelleneinträgen (Page Table Entries; PTEs), die verwendet werden, um eine virtuelle Adresse auf eine physikalische Adresse einer Kachel und optional einen Cache-Zeilenindex abzubilden. In mindestens einer Ausführungsform kann die MMU 1945 Adressübersetzungs-Lookaside-Puffer (TLB) oder Caches umfassen, die sich in dem Graphik-Multiprozessor 1934 oder in dem L1-Cache 1948 oder in dem Verarbeitungscluster 1914 befinden können. In mindestens einer Ausführungsform wird eine physikalische Adresse verarbeitet, um den Oberflächendatenzugriff lokal zu verteilen, um eine effiziente Verschachtelung von Anforderungen zwischen Partitionierungseinheiten zu ermöglichen. In mindestens einer Ausführungsform kann der Cache-Zeilenindex verwendet werden, um zu bestimmen, ob eine Anforderung für eine Cache-Zeile ein Treffer oder ein Nichttreffer ist.
  • In mindestens einer Ausführungsform kann ein Verarbeitungscluster 1914 derart konfiguriert sein, dass jeder Graphik-Multiprozessor 1934 mit einer Textureinheit 1936 zum Durchführen von Texturmappingoperationen, z.B. einem Bestimmen von Texturprobenpositionen, einem Lesen von Texturdaten und einem Filtern von Texturdaten, gekoppelt ist. In mindestens einer Ausführungsform werden Texturdaten aus einem internen Textur-L1-Cache (nicht gezeigt) oder aus einem L1-Cache innerhalb des Graphik-Multiprozessors 1934 gelesen und bei Bedarf aus einem L2-Cache, einem lokalen Parallelprozessorspeicher oder einem Systemspeicher geholt. In mindestens einer Ausführungsform gibt jeder Graphik-Multiprozessor 1934 verarbeitete Aufgaben an die Datenquerschiene 1940 aus, um die verarbeitete Aufgabe einem anderen Verarbeitungscluster 1914 zur weiteren Verarbeitung bereitzustellen oder um die verarbeitete Aufgabe über die Speicherquerschiene 1916 in einem L2-Cache, lokalen Parallelprozessorspeicher oder Systemspeicher zu speichern. In mindestens einer Ausführungsform ist eine preROP 1942 (Pre-Raster Operations Unit) bzw. Vorrasteroperationseinheit konfiguriert, um Daten von dem Graphik-Multiprozessor 1934 zu empfangen und Daten an ROP-Einheiten zu leiten, welche mit Partitionierungseinheiten, wie hier beschrieben, angeordnet sein können (z.B. die Partitionierungseinheiten 1920A-1920N von 19). In mindestens einer Ausführungsform kann die PreROP-Einheit 1942 Optimierungen zur Farbmischung durchführen, Pixelfarbdaten organisieren und Adressübersetzungen durchführen.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 19B anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 19B anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 19B anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 19C veranschaulicht einen Graphik-Multiprozessor 1996 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist der Graphik-Multiprozessor 1996 der Graphik-Multiprozessor 1934 von 19B. In mindestens einer Ausführungsform koppelt sich der Graphik-Multiprozessor 1934 mit dem Pipeline-Verwalter 1932 des Verarbeitungsclusters 1914. In mindestens einer Ausführungsform weist der Graphik-Multiprozessor 1934 eine Ausführungspipeline auf, die einen Anweisungs-Cache 1952, eine Anweisungseinheit 1954, eine Adresszuordnungseinheit 1956, eine Registerdatei 1958, einen oder mehrere GPGPU-Kerne 1962 und eine oder mehrere LSUs 1966 umfasst, ohne darauf beschränkt zu sein. Die GPGPU-Kerne 1962 und die LSUs 1966 sind mit dem Cache-Speicher 1972 und dem gemeinsam genutzten Speicher 1970 über eine Speicher- und Cache-Zwischenverbindung 1968 gekoppelt.
  • In mindestens einer Ausführungsform empfängt der Befehls-Cache 1952 einen Strom von Anweisungen, die von dem Pipeline-Verwalter 1932 auszuführen sind. In mindestens einer Ausführungsform werden Anweisungen in dem Befehls-Cache 1952 zwischengespeichert und zur Ausführung durch die Befehlseinheit 1954 bereitgestellt. In mindestens einer Ausführungsform kann die Befehlseinheit 1954 Anweisungen als Thread-Gruppen (z.B. Warps) senden, wobei jeder Thread der Thread-Gruppe einer anderen Ausführungseinheit innerhalb des GPGPU-Kerns 1962 zugeordnet ist. In mindestens einer Ausführungsform kann eine Anweisung auf einen beliebigen eines lokalen, gemeinsam genutzten oder globalen Adressraums zugreifen, indem sie eine Adresse innerhalb eines vereinheitlichten Adressraums spezifiziert. In mindestens einer Ausführungsform kann die Adresszuordnungseinheit 1956 verwendet werden, um Adressen in einem vereinheitlichten Adressraum in eine eindeutige Speicheradresse zu übersetzen, auf die von den Lade-/Speicher-Einheiten 1966 zugegriffen werden kann.
  • In mindestens einer Ausführungsform stellt die Registerdatei 1958 einen Satz von Registern für Funktionseinheiten des Graphik-Multiprozessors 1934 bereit. In mindestens einer Ausführungsform stellt die Registerdatei 1958 einen temporären Speicher für Operanden bereit, die mit Datenpfaden von Funktionseinheiten (z.B. GPGPU-Kernen 1962, Lade-/Speicher-Einheiten 1966) des Graphik-Multiprozessors 1934 verbunden sind. In mindestens einer Ausführungsform ist die Registerdatei 1958 zwischen jeder der Funktionseinheiten aufgeteilt, so dass jeder Funktionseinheit ein fest zugeordneter Abschnitt der Registerdatei 1958 zugeordnet ist. In mindestens einer Ausführungsform ist die Registerdatei 1958 zwischen verschiedenen Thread-Gruppen aufgeteilt, die von dem Graphik-Multiprozessor 1934 ausgeführt werden.
  • In mindestens einer Ausführungsform können die GPGPU-Kerne 1962 jeweils Gleitkommaeinheiten (FPUs) und/oder Ganzzahlarithmetik-Logikeinheiten (ALUs) umfassen, die zum Ausführen von Anweisungen des Graphik-Multiprozessors 1934 verwendet werden. Die GPGPU-Kerne 1962 können in der Architektur ähnlich sein oder sich in der Architektur unterscheiden. In mindestens einer Ausführungsform umfasst ein erster Abschnitt der GPGPU-Kerne 1962 eine FPU einfacher Genauigkeit und eine Ganzzahl-ALU, während ein zweiter Abschnitt der GPGPU-Kerne eine FPU doppelter Genauigkeit umfasst. In mindestens einer Ausführungsform können FPUs den IEEE 754-1208-Standard für Gleitkommaarithmetik implementieren oder eine Gleitkommaarithmetik mit variabler Genauigkeit ermöglichen. In mindestens einer Ausführungsform kann der Graphik-Multiprozessor 1934 zusätzlich eine oder mehrere Einheiten mit fester Funktion oder Spezialfunktion zum Durchführen bestimmter Funktionen, wie beispielsweise Kopierrechteck- oder Pixelblendingoperationen, umfassen. In mindestens einer Ausführungsform kann bzw. können ein oder mehrere GPGPU-Kerne 1962 auch Logik für eine feste oder spezielle Funktion umfassen.
  • In mindestens einer Ausführungsform umfassen die GPGPU-Kerne 1962 eine SIMD-Logik, die in der Lage ist, eine einzelne Anweisung auf bzw. für mehrere Datensätze durchzuführen. In mindestens einer Ausführungsform können GPGPU-Kerne 1962 SIMD4-, SIMD8- und SIMD16-Anweisungen physikalisch ausführen und SIMD1-, SIMD2- und SIMD32-Anweisungen logisch ausführen. In mindestens einer Ausführungsform können SIMD-Anweisungen für GPGPU-Cores zur Kompilierungszeit von einem Shader-Kompilierer generiert oder automatisch bei dem Ausführen von Programmen erzeugt 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. Beispielsweise können in mindestens einer Ausführungsform acht SIMT-Threads, die gleiche oder ähnliche Operationen durchführen, über eine einzige SIMD8-Logikeinheit parallel ausgeführt werden.
  • In mindestens einer Ausführungsform ist die Speicher- und Cache-Zwischenverbindung 1968 ein Zwischenverbindungsnetzwerk, das jede Funktionseinheit des Graphik-Multiprozessors 1934 mit der Registerdatei 1958 und dem gemeinsamen Speicher 1970 verbindet. In mindestens einer Ausführungsform ist die Speicher- und Cache-Zwischenverbindung 1968 eine Querschienen-Zwischenverbindung, die der Lade-/Speicher-Einheit 1966 ermöglicht, Lade- und Speicheroperationen zwischen dem gemeinsamen Speicher 1970 und der Registerdatei 1958 zu implementieren. In mindestens einer Ausführungsform kann die Registerdatei 1958 mit der gleichen Frequenz wie die GPGPU-Kerne 1962 arbeiten, so dass die Datenübertragung zwischen den GPGPU-Kernen 1962 und der Registerdatei 1958 eine sehr geringe Latenzzeit aufweist. In mindestens einer Ausführungsform kann der gemeinsame Speicher 1970 verwendet werden, um die Kommunikation zwischen Threads zu ermöglichen, die auf Funktionseinheiten innerhalb des Graphik-Multiprozessors 1934 ausgeführt werden. In mindestens einer Ausführungsform kann der Cache-Speicher 1972 beispielsweise als ein Datencache verwendet werden, um Texturdaten zwischenzuspeichern, die zwischen Funktionseinheiten und der Textureinheit 1936 ausgetauscht werden. In mindestens einer Ausführungsform kann der gemeinsam genutzte Speicher 1970 auch als ein programmverwalteter Cache verwendet werden. In mindestens einer Ausführungsform können Threads, die auf GPGPU-Kernen 1962 ausgeführt werden, Daten innerhalb des gemeinsam genutzten Speichers programmatisch zusätzlich zu automatisch zwischengespeicherten Daten speichern, die innerhalb des Cache-Speichers 1972 gespeichert sind.
  • In mindestens einer Ausführungsform ist ein Parallelprozessor oder eine GPGPU, wie hier beschrieben, kommunikativ mit Host/Prozessor-Kernen gekoppelt, um Graphikoperationen, Maschinenlernoperationen, Musteranalyseoperationen und verschiedene allgemeine GPU (GPGPU)-Funktionen zu beschleunigen. In mindestens einer Ausführungsform kann die GPU kommunikativ mit den Host/Prozessor-Kernen über einen Bus oder eine andere Zwischenverbindung (z.B. eine Hochgeschwindigkeits-Zwischenverbindung wie PCIe oder NVLink) gekoppelt sein. In mindestens einer Ausführungsform kann die GPU in bzw. auf demselben Gehäuse oder Chip wie die Kerne integriert und kommunikativ mit Kernen über einen internen Prozessorbus/eine interne Zwischenverbindung (d.h. intern in Bezug auf das Gehäuse oder den Chip) gekoppelt sein. In mindestens einer Ausführungsform können Prozessorkerne unabhängig davon, wie die GPU verbunden ist, der GPU Arbeit in Form von Sequenzen von Befehlen/Anweisungen zuweisen, die in einem Arbeitsdeskriptor umfasst sind. In mindestens einer Ausführungsform verwendet die GPU dann fest zugeordnete Schaltkreise/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 19C anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 19C anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 19C anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 20 veranschaulicht einen Graphikprozessor 2000 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst der Graphikprozessor 2000 eine Ring-Zwischenverbindung 2002, ein Pipeline-Frontend 2004, eine Medien-Maschine 2037 und Graphikkerne 2080A-2080N. In mindestens einer Ausführungsform koppelt die Ring-Zwischenverbindung 2002 den Graphikprozessor 2000 an andere Verarbeitungseinheiten, einschließlich andere Graphikprozessoren oder einen oder mehrere universelle Prozessorkerne. In mindestens einer Ausführungsform ist der Graphikprozessor 2000 einer von vielen Prozessoren, die innerhalb eines Multikernverarbeitungssystems integriert sind.
  • In mindestens einer Ausführungsform empfängt der Graphikprozessor 2000 Stapel von Befehlen über die Ring-Zwischenverbindung 2002. In mindestens einer Ausführungsform werden eingehende Befehle von einem Befehlsstreamer 2003 in dem Pipeline-Frontend 2004 interpretiert. In mindestens einer Ausführungsform umfasst der Graphikprozessor 2000 eine skalierbare Ausführungslogik zur Durchführung von 3D-Geometrieverarbeitung und Medienverarbeitung über den/die Graphikkern(e) 2080A-2080N. In mindestens einer Ausführungsform liefert der Befehlsstreamer 2003 für 3D-Geometrieverarbeitungsbefehle Befehle an die Geometrie-Pipeline 2036. In mindestens einer Ausführungsform liefert der Befehlsstreamer 2003 für mindestens einige Befehle zur Medienverarbeitung Befehle an ein Video-Frontend 2034, das mit einer Medien-Maschine 2037 gekoppelt ist. In mindestens einer Ausführungsform umfasst die Medien-Maschine 2037 eine Videoqualitäts-Maschine (VQE) 2030 zur Video- und Bildnachbearbeitung und eine Multiformat-Codier-/Decodier-Maschine (MFX) 2023 zur hardwarebeschleunigten Mediendatencodierung und -decodierung. In mindestens einer Ausführungsform erzeugen die Geometrie-Pipeline 2036 und die Medien-Maschine 2037 jeweils Ausführungsthreads für Thread-Ausführungsressourcen, die von mindestens einem Graphikkern 2080A bereitgestellt werden.
  • In mindestens einer Ausführungsform umfasst der Graphikprozessor 2000 skalierbare Thread-Ausführungsressourcen mit modularen Graphikkernen 2080A-2080N (manchmal als Kern-Slices bezeichnet), die jeweils mehrere Unterkerne 2050A-2550N, 2060A-2560N (manchmal als Kern-Subslices bezeichnet) aufweisen. In mindestens einer Ausführungsform kann der Graphikprozessor 2000 eine beliebige Anzahl von Graphikkernen 2080A bis 2080N aufweisen. In mindestens einer Ausführungsform umfasst der Graphikprozessor 2000 einen Graphikkern 2080A mit mindestens einem ersten Unterkern 2050A und einem zweiten Unterkern 2060A. In mindestens einer Ausführungsform ist der Graphikprozessor 2000 ein stromsparender Prozessor mit einem einzigen Unterkern (z.B. 2050A). In mindestens einer Ausführungsform umfasst der Graphikprozessor 2000 mehrere Graphikkerne 2080A-2080N, die jeweils einen Satz von ersten Unterkernen 2050A-2050N und einen Satz von zweiten Unterkernen 2060A-2060N umfassen. In mindestens einer Ausführungsform umfasst jeder Unterkern in den ersten Unterkernen 2050A-2050N mindestens einen ersten Satz von Ausführungseinheiten 2052A-2052N und Medien/Textur-Abtastern 2054A-2054N. In mindestens einer Ausführungsform umfasst jeder Unterkern in den zweiten Unterkernen 2060A-2060N mindestens einen zweiten Satz von Ausführungseinheiten 2062A-2062N und Abtastern 2064A-2064N. In mindestens einer Ausführungsform teilt sich jeder Unterkern 2050A-2050N, 2060A-2060N einen Satz gemeinsamer Ressourcen 2070A-2070N. In mindestens einer Ausführungsform umfassen gemeinsam genutzte Ressourcen den gemeinsam genutzten Cache-Speicher und Pixeloperationslogik.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 20 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 20 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 20 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 21 zeigt einen Prozessor 2100 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann der Prozessor 2100, ohne darauf beschränkt zu sein, Logikschaltungen zum Ausführen von Anweisungen umfassen. In mindestens einer Ausführungsform kann der Prozessor 2100 Anweisungen ausführen, die x86-Anweisungen, ARM-Anweisungen, spezielle Anweisungen für anwendungsspezifische integrierte Schaltungen (ASICs) usw. umfassen. In mindestens einer Ausführungsform kann der Prozessor 2100 Register zum Speichern gepackter Daten umfassen, wie beispielsweise 64-Bit breite MMXTM-Register in Mikroprozessoren, die mit MMX-Technologie der Intel Corporation, Santa Clara, Kalifornien, aktiviert sind. In mindestens einer Ausführungsform können MMX-Register, die sowohl in Ganzzahl- als auch in Gleitkomma-Formen verfügbar sind, mit gepackten Datenelementen arbeiten, die SIMD- und Streaming-SIMD-Erweiterungen („SSE“) begleiten. In mindestens einer Ausführungsform können 128-Bit breite XMM-Register, die sich auf Technologie des SSE2, SSE3, SSE4, AVX oder darüber hinaus beziehen (allgemein als „SSEx“ bezeichnet), derartige gepackte Datenoperanden halten. In mindestens einer Ausführungsform können Prozessoren 2100 Anweisungen ausführen, um CUDA-Programme zu beschleunigen.
  • In mindestens einer Ausführungsform umfasst der Prozessor 2100 ein In-Reihenfolge-Frontend („Frontend“) 2101, um auszuführende Anweisungen zu holen und Anweisungen vorzubereiten, die später in der Prozessor-Pipeline zu verwenden sind. In mindestens einer Ausführungsform kann das Frontend 2101 mehrere Einheiten umfassen. In mindestens einer Ausführungsform holt ein Anweisungsvorabrufer 2126 Anweisungen aus dem Speicher und leitet Anweisungen an einen Anweisungsdecodierer 2128 weiter, der wiederum Anweisungen decodiert oder interpretiert. Beispielsweise decodiert in mindestens einer Ausführungsform der Anweisungsdecodierer 2128 eine empfangene Anweisung in eine oder mehrere Operationen, die als „Mikroanweisungen“ oder „Mikrooperationen“ bezeichnet werden (die auch als „Mikro-Ops“ oder „Uops“ bezeichnet werden), die eine Maschine ausführen kann. In mindestens einer Ausführungsform parst bzw. analysiert der Anweisungsdecodierer 2128 eine Anweisung in einen Opcode und entsprechende Daten und Steuerfelder, die von der Mikroarchitektur verwendet werden können, um Operationen durchzuführen. In mindestens einer Ausführungsform kann ein Trace-Cache 2130 decodierte Uops zu programmgeordneten Sequenzen oder Spuren in einer Uop-Warteschlange 2134 zur Ausführung zusammenstellen. In mindestens einer Ausführungsform stellt dann, wenn der Trace- Cache 2130 auf eine komplexe Anweisung trifft, ein Mikrocode-ROM 2132 die für den Abschluss einer Operation erforderlichen Uops bereit.
  • In mindestens einer Ausführungsform können einige Anweisungen in eine einzige Mikro-Op umgewandelt werden, während andere mehrere Mikro-Ops benötigen, um die volle Operation abzuschließen. In mindestens einer Ausführungsform kann dann, wenn mehr als vier Mikro-Ops benötigt werden, um eine Anweisung abzuschließen, der Anweisungsdecodierer 2128 auf den Mikrocode-ROM 2132 zugreifen, um die Anweisung auszuführen. In mindestens einer Ausführungsform kann eine Anweisung zur Verarbeitung an dem Anweisungsdecodierer 2128 in eine kleine Anzahl von Mikro-Ops decodiert werden. In mindestens einer Ausführungsform kann eine Anweisung in dem Mikrocode-ROM 2132 gespeichert werden, falls eine Anzahl von Mikro-Operationen zur Durchführung des Betriebs erforderlich sein sollte. In mindestens einer Ausführungsform bezieht sich der Trace-Cache 2130 auf einen Eintrittspunkt einer programmierbare Logikanordnung („PLA“), um einen korrekten Mikroanweisungszeiger zum Lesen von Mikrocodesequenzen zu bestimmen, um eine oder mehrere Anweisungen von dem Mikrocode-ROM 2132 abzuschließen, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform beendet der Mikrocode-ROM 2132 die Sequenzierung von Mikro-Ops für eine Anweisung, wobei das Frontend 2101 der Maschine das Abholen von Mikro-Ops aus dem Trace-Cache 2130 wieder aufnehmen kann.
  • In mindestens einer Ausführungsform kann eine Außer-Betrieb bzw. Out-of-Order-Ausführungs-Maschine („Out-of-Order-Maschine“) 2103 Anweisungen zur Ausführung vorbereiten. In mindestens einer Ausführungsform weist die Out-of-Order-Ausführungslogik eine Anzahl von Puffern auf, um den Fluss von Anweisungen zu glätten und neu zu ordnen, um die Leistung zu optimieren, während sie eine Pipeline hinuntergehen und zur Ausführung eingeplant werden. Die Out-of-Order-Ausführungs-Maschine 2103 umfasst, ohne darauf beschränkt zu sein, einen Zuteiler/Registerumbenenner 2140, eine Speicher-Uop-Warteschlange 2142, eine Ganzzahl/Gleitkomma-Uop-Warteschlange 2144, einen Speicher-Planer 2146, einen Schnell-Planer 2102, einen Langsam/Universal-Gleitkomma-Planer („slow/general FP scheduler“) 2104 und einen einfachen Gleitkomma-Planer („simple FP scheduler“) 2106. In mindestens einer Ausführungsform werden der Schnell-Planer 2102, der Langsam/Universal-Gleitkomma-Planer 2104 und der Einfach-Gleitkomma-Planer 2106 hier auch kollektiv als „Uop-Planer 2102, 2104, 2106“ bezeichnet. Der Zuteiler/Registerumbenenner 2140 teilt Maschinenpuffer und Ressourcen zu, die jeder Uop zur Ausführung benötigt. In mindestens einer Ausführungsform benennt der Zuteiler/Registerumbenenner 2140 Logikregister auf Einträge in einer Registerdatei um. In mindestens einer Ausführungsform teilt der Zuteiler/Registerumbenenner 2140 auch einen Eintrag für jede Uop in einer von zwei Uop-Warteschlangen, der Speicher-Uop-Warteschlange 2142 für Speicheroperationen und der Ganzzahl/Gleitkomma-Uop-Warteschlange 2144 für Nichtspeicher-Operationen, vor dem Speicher-Planer 2146 und den Uop-Planern 2102, 2104, 2106 zu. In mindestens einer Ausführungsform bestimmen die Uop-Planer 2102, 2104, 2106 wann ein Uop ausführbereit ist, basierend auf der Bereitschaft ihrer abhängigen Eingangsregister-Operandenquellen und der Verfügbarkeit von Ausführungsressourcen, die Uops benötigen, um ihre Operation abzuschließen. In mindestens einer Ausführungsform kann der Schnell-Planer 2102 von mindestens einer Ausführungsform auf jeder Hälfte eines Haupttaktzyklus planen, während der Langsam/Universal-Gleitkomma-Planer 2104 und der Einfach-Gleitkomma-Planer 2106 einmal pro Hauptprozessortaktzyklus planen können. In mindestens einer Ausführungsform arbitrieren die Uop-Planer 2102, 2104, 2106 für Sende-Ports, um Uops zur Ausführung einzuplanen.
  • In mindestens einer Ausführungsform umfasst ein Ausführungsblock 2111, ohne darauf beschränkt zu sein, ein Ganzzahl-Registerdatei/Umgehungs-Netzwerk 2108, ein Gleitkomma-Registerdatei/Umgehungsnetzwerk („FP register file/bypass network“) 2110, Adresserzeugungseinheiten („AGUs“) 2112 und 2114, schnelle ALUs 2116 und 2118, eine langsame ALU 2112, eine Gleitkomma-ALU („FP“) 2122 und eine Gleitkomma-Bewegungseinheit („FP move“) 2124. In mindestens einer Ausführungsform werden das Ganzzahl-Registerdatei/Umgehungs-Netzwerk 2108 und das Gleitkomma-Registerdatei/Umgehungs-Netzwerk 2110 hier auch als „Registerdateien 2108, 2110“ bezeichnet. In mindestens einer Ausführungsform werden AGUSs 2112 und 2114, schnelle ALUs 2116 und 2118, die langsame ALU 2112, die Gleitkomma-ALU 2122 und die Gleitkomma-Bewegungseinheit 2124 auch als „Ausführungseinheiten 2112, 2114, 2116, 2118, 2112, 2122 und 2124“ bezeichnet. In mindestens einer Ausführungsform kann ein Ausführungsblock, ohne darauf beschränkt zu sein, eine beliebige Anzahl (einschließlich Null) und Art von Registerdateien, Umgehungsnetzwerken, Adresserzeugungseinheiten und Ausführungseinheiten in beliebiger Kombination umfassen.
  • In mindestens einer Ausführungsform können Registerdateien 2108, 2110 zwischen Uop-Planern 2102, 2104, 2106 und Ausführungseinheiten 2112, 2114, 2116, 2118, 2112, 2122 und 2124 angeordnet sein. In mindestens einer Ausführungsform führt das Ganzzahl-Registerdatei/Umgehungs-Netzwerk 2108 Ganzzahl-Operationen aus. In mindestens einer Ausführungsform führt das Gleitkomma-Registerdatei/Umgehungs-Netzwerk 2110 Gleitkommaoperationen durch. In mindestens einer Ausführungsform kann jede der Registerdateien 2108, 2110, ohne darauf beschränkt zu sein, ein Umgehungs-Netzwerk umfassen, das gerade abgeschlossene Ergebnisse, die noch nicht in die Registerdatei geschrieben wurden, umgehen oder an neue abhängige Uops weiterleiten kann. In mindestens einer Ausführungsform können die Registerdateien 2108, 2110 Daten miteinander kommunizieren. In mindestens einer Ausführungsform kann das Ganzzahl-Registerdatei/Umgehungs-Netzwerk 2108, ohne darauf beschränkt zu sein, zwei separate Registerdateien, eine Registerdatei für 32 Datenbits niedriger Ordnung und eine zweite Registerdatei für 32 Datenbits hoher Ordnung, umfassen. In mindestens einer Ausführungsform kann das Gleitkomma-Registerdatei/Umgehungs-Netzwerk 2110, ohne darauf beschränkt zu sein, 128-Bit breite Einträge umfassen, weil Gleitkommaanweisungen typischerweise Operanden von 64 bis 128 Bit Breite aufweisen.
  • In mindestens einer Ausführungsform können die Ausführungseinheiten 2112, 2114, 2116, 2118, 2112, 2122, 2124 Anweisungen ausführen. In mindestens einer Ausführungsform speichern die Registerdateien 2108, 2110 Ganzzahl- und Gleitkomma-Daten-Operandenwerte, die Mikroanweisungen ausführen müssen. In mindestens einer Ausführungsform kann der Prozessor 2100, ohne darauf beschränkt zu sein, eine beliebige Anzahl und Kombination von Ausführungseinheiten 2112, 2114, 2116, 2118, 2112, 2122, 2124 umfassen. In mindestens einer Ausführungsform können die Gleitkomma-ALU 2122 und die Gleitkomma-Bewegungseinheit 2124 Gleitkomma-, MMX-, SIMD-, AVX- und SSE-Operationen oder andere Operationen ausführen. In mindestens einer Ausführungsform kann die Gleitkomma ALU 2122, ohne darauf beschränkt zu sein, einen 64-Bit mal 64-Bit-Gleitkommateiler umfassen, um Divisions-, Quadratwurzel- und Rest-Mikrooperationen auszuführen. In mindestens einer Ausführungsform können Anweisungen, die einen Gleitkommawert umfassen, von Gleitkomma-Hardware gehandhabt werden. In mindestens einer Ausführungsform können ALU-Operationen an schnelle ALUs 2116, 2118 übergeben werden. In mindestens einer Ausführungsform können schnelle ALUS 2116, 2118 schnelle Operationen mit einer effektiven Latenz von einem halben Taktzyklus ausführen. In mindestens einer Ausführungsform gehen die komplexesten Ganzzahl-Operationen auf die langsame ALU 2112 über, da die langsame ALU 2112, ohne darauf beschränkt zu sein, eine Ganzzahl-Ausführungshardware für Operationen mit langer Latenz umfassen kann, wie beispielsweise einen Multiplikator, einen Schieber, eine Flag- bzw. Kennzeichenbit-Logik und Zweigverarbeitung. In mindestens einer Ausführungsform können Speicher-Lade-/Speicher-Operationen von AGUs 2112, 2114 ausgeführt werden. In mindestens einer Ausführungsform können die schnelle ALU 2116, die schnelle ALU 2118 und die langsame ALU 2112 Ganzzahl-Operationen an 64-Bit-Datenoperanden durchführen. In mindestens einer Ausführungsform können die schnelle ALU 2116, die schnelle ALU 2118 und die langsame ALU 2120 implementiert sein, um eine Mehrzahl von Datenbitgrößen einschließlich sechzehn, zweiunddreißig, 128, 326 usw. zu unterstützen. In mindestens einer Ausführungsform können die Gleitkomma-ALU 2122 und die Gleitkomma-Bewegungseinheit 2124 implementiert sein, um eine Anzahl von Operanden mit Bits unterschiedlicher Breite zu unterstützen, wie beispielsweise 128-Bit breite gepackte Datenoperanden in Verbindung mit SIMD- und Multimedia-Anweisungen.
  • In mindestens einer Ausführungsform versenden die Uop-Planer 2102, 2104, 2106 abhängige Operationen, bevor die Ausführung einer Elternlast beendet ist. In mindestens einer Ausführungsform kann, da Uops spekulativ geplant und in dem Prozessor 2100 ausgeführt werden können, der Prozessor 2100 auch eine Logik zur Handhabung von Speicherfehlzugriffen umfassen. In mindestens einer Ausführungsform kann es dann, wenn eine Datenlast in einem Datencache fehlt, abhängige Operationen im Lauf der Pipeline geben, die einen Planer mit vorübergehend falschen Daten zurückgelassen 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 wiedergegeben werden und unabhängige Operationen können abgeschlossen werden. In mindestens einer Ausführungsform können Planer und ein Wiedergabemechanismus von mindestens einer Ausführungsform eines Prozessors ebenfalls ausgelegt sein, um Anweisungssequenzen für Textkettenvergleichsoperationen abzufangen.
  • In mindestens einer Ausführungsform kann sich „Register“ auf On-Board-Prozessorspeicherplätze beziehen, die als Teil von Anweisungen zum Identifizieren von Operanden verwendet werden können. In mindestens einer Ausführungsform können Register diejenigen sein, die (aus der Sicht eines Programmierers) von außerhalb des Prozessors verwendbar sind. In mindestens einer Ausführungsform sind Register möglicherweise nicht auf einen bestimmten Schaltungstyp beschränkt. Vielmehr kann in mindestens einer Ausführungsform ein Register Daten speichern, Daten bereitstellen und die hier beschriebenen Funktionen ausführen. In mindestens einer Ausführungsform können hier beschriebene Register durch Schaltkreise innerhalb eines Prozessors unter Verwendung einer beliebigen Anzahl verschiedener Techniken implementiert werden, wie beispielsweise fest zugeordnete physikalische Register, dynamisch allokierte physikalische Register, die Registerumbenennung verwenden, Kombinationen von fest zugeordneten und dynamisch zugeordneten physikalischen Registern usw. In mindestens einer Ausführungsform speichern Ganzzahlregister 32-Bit-Ganzzahldaten. Eine Registerdatei mindestens einer Ausführungsform enthält darüber hinaus acht Multimedia-SIMD-Register für gepackte Daten.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 21 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 21 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 21 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 22 veranschaulicht einen Prozessor 2200 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst der Prozessor, ohne darauf beschränkt zu sein, einen oder mehrere Prozessorkerne 2202A-2202N, einen integrierten Speichercontroller 2214 und einen integrierten Graphikprozessor 2208. In mindestens einer Ausführungsform kann der Prozessor 2200 zusätzliche Kerne bis zu und einschließlich des zusätzlichen Prozessorkerns 2202N umfassen, die durch gestrichelte, linierte Kästen dargestellt sind. In mindestens einer Ausführungsform umfasst jeder der Prozessorkerne 2202A-2202N eine oder mehrere interne Cache-Einheiten 2204A-2204N. In mindestens einer Ausführungsform weist jeder Prozessorkern auch Zugriff auf eine oder mehrere gemeinsam genutzte Cache-Einheiten 2206 auf.
  • In mindestens einer Ausführungsform stellen die internen Cache-Einheiten 2204A-2204N und die gemeinsam genutzten Cache-Einheiten 2206 eine Cache-Speicherhierarchie innerhalb des Prozessors 2200 dar. In mindestens einer Ausführungsform können die Cache-Speichereinheiten 2204A-2204N mindestens eine Befehls- und Daten-Cache-Ebene innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen gemeinsam genutzten Mid-Level-Caches, wie beispielsweise ein Level 2 (L2), ein Level 3 (L3), ein Level 4 (L4) oder andere Cache-Ebenen, umfassen, wobei eine höchste Cache-Ebene vor dem externen Speicher als eine LLC klassifiziert ist. In mindestens einer Ausführungsform behält die Cache-Kohärenzlogik Kohärenz zwischen den verschiedenen Cache-Einheiten 2206 und 2204A-2204N bei.
  • In mindestens einer Ausführungsform kann der Prozessor 2200 auch einen Satz einer oder mehrerer Bus-Controller-Einheiten 2216 und einen System-Agent-Kern 2210 umfassen. In mindestens einer Ausführungsform verwalten eine oder mehrere Bus-Controller-Einheiten 2216 einen Satz von Peripheriebussen, wie beispielsweise einen oder mehrere PCI- oder PCI-Express-Busse. In mindestens einer Ausführungsform stellt der System-Agent-Kern 2210 Verwaltungsfunktionen für verschiedene Prozessorkomponenten zur Verfügung. In mindestens einer Ausführungsform umfasst der System-Agent-Kern 2210 eine oder mehrere integrierte Speichercontroller 2214, um den Zugriff auf verschiedene externe Speichervorrichtungen (nicht gezeigt) zu verwalten.
  • In mindestens einer Ausführungsform umfassen einer oder mehrere der Prozessorkerne 2202A-2202N Unterstützung für gleichzeitiges Multithreading. In mindestens einer Ausführungsform umfasst der System-Agent-Kern 2210 Komponenten zum Koordinieren und Betreiben der Kerne 2202A-2202N während der Multithreading-Verarbeitung. In mindestens einer Ausführungsform kann der System-Agent-Kern 2210 zusätzlich eine Leistungssteuereinheit (PCU) umfassen, die Logik und Komponenten zum Regeln eines oder mehrerer Leistungszustände der Prozessorkerne 2202A-2202N und des Graphikprozessors 2208 umfasst.
  • In mindestens einer Ausführungsform umfasst der Prozessor 2200 zusätzlich den Graphikprozessor 2208, um Graphikverarbeitungsoperationen auszuführen. In mindestens einer Ausführungsform koppelt der Graphikprozessor 2208 mit den gemeinsam genutzten Cache-Einheiten 2206 und dem System-Agent-Kern 2210, einschließlich eines oder mehrerer integrierter Speichercontroller 2214. In mindestens einer Ausführungsform umfasst der System-Agent-Kern 2210 auch einen Anzeige-Controller 2211, um die Graphikprozessorausgabe auf eine oder mehrere gekoppelte Anzeigen zu treiben. In mindestens einer Ausführungsform kann der Anzeige-Controller 2211 auch ein separates Modul sein, das über mindestens eine Zwischenverbindung mit dem Graphikprozessor 2208 gekoppelt ist oder in den Graphikprozessor 2208 integriert sein kann.
  • In mindestens einer Ausführungsform wird eine ringbasierte Zwischenverbindungseinheit 2212 verwendet, um interne Komponenten des Prozessors 2200 zu koppeln. In mindestens einer Ausführungsform kann eine alternative Verbindungseinheit verwendet werden, wie beispielsweise eine Punkt-zu-Punkt-Zwischenverbindung, eine geschaltete Zwischenverbindung oder andere Techniken. In mindestens einer Ausführungsform koppelt der Graphikprozessor 2208 über eine E/A-Verbindung 2213 mit der Ring-Zwischenverbindung 2212.
  • In mindestens einer Ausführungsform stellt die E/A-Verbindung 2213 mindestens eine von mehreren Varianten von E/A-Zwischenverbindungen dar, einschließlich einer E/A-Zwischenverbindung auf dem Gehäuse, welche die Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 2218, wie beispielsweise einem eDRAM-Modul, erleichtert. In mindestens einer Ausführungsform verwenden jeder der Prozessorkerne 2202A-2202N und der Graphikprozessor 2208 eingebettete Speichermodule 2218 als einen gemeinsam genutzten Cache letzter Ebene bzw. Last Level Cache.
  • In mindestens einer Ausführungsform sind die Prozessorkerne 2202A-2202N homogene Kerne, die eine gemeinsame Befehlssatzarchitektur ausführen. In mindestens einer Ausführungsform sind die Prozessorkerne 2202A-2202N heterogen in Bezug auf die Befehlssatzarchitektur (Instruction Set Architecture; ISA), wobei einer oder mehrere der Prozessorkerne 2202A-2202N einen gemeinsamen Befehlssatz ausführen, während ein oder mehrere andere Kerne der Prozessorkerne 2202A-2202N eine Teilmenge eines gemeinsamen Befehlssatzes oder einen bzw. eines anderen Befehlssatzes ausführen. In mindestens einer Ausführungsform sind die Prozessorkerne 2202A-2202N in Bezug auf Mikroarchitektur heterogen, wobei ein oder mehrere Kerne mit einem relativ höheren Stromverbrauch mit einem oder mehreren Leistungskernen mit einem niedrigeren Stromverbrauch koppeln. In mindestens einer Ausführungsform kann der Prozessor 2200 auf einem oder mehreren Chips oder als eine in einem SoC integrierte Schaltung implementiert sein.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 22 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 22 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 22 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 23 veranschaulicht einen Graphikprozessorkerns 2300 gemäß mindestens einer beschriebenen Ausführungsform. In mindestens einer Ausführungsform ist der Graphikprozessorkern 2300 innerhalb einer Graphikkernanordnung enthalten. In mindestens einer Ausführungsform kann der Graphikprozessorkern 2300, manchmal auch als ein Kern-Slice bezeichnet, ein oder mehrere Graphikkerne innerhalb eines modularen Graphikprozessors sein. In mindestens einer Ausführungsform ist der Graphikprozessorkern 2300 beispielhaft für ein Graphikkern-Slice, und ein Graphikprozessor, wie hier beschrieben, kann mehrere Graphikkern-Slices basierend auf einer Sollleistung und Leistungshüllen umfassen. In mindestens einer Ausführungsform kann jeder Graphikkern 2300 einen Festfunktionsblock 2230 umfassen, der mit mehreren, auch als Sub-Slices bezeichneten Unterkernen 2301A-2301F gekoppelt ist, die modulare Blöcke von Allzweck- und Festfunktionslogik umfassen.
  • In mindestens einer Ausführungsform umfasst der Festfunktionsblock 2230 eine Geometrie/Festfunktions-Pipeline 2236, die von allen Unterkernen in dem Graphikprozessor 2300 beispielsweise bei Implementierungen von Graphikprozessoren mit geringerer Leistung und/oder geringerer Stromaufnahme gemeinsam genutzt werden kann. In mindestens einer Ausführungsform umfasst die Geometrie/Festfunktions-Pipeline 2236 eine 3D-Festfunktions-Pipeline, eine Video-Frontend-Einheit, einen Thread-Spawner und Thread-Dispatcher sowie einen Unified Return Buffer Manager, der vereinheitlichte Rückgabepuffer verwaltet.
  • In mindestens einer Ausführungsform umfasst der Festfunktionsblock 2230 auch eine Graphik-SoC-Schnittstelle 2233, einen Graphik-Mikrocontroller 2238 und eine Medien-Pipeline 2239. Die Graphik-SoC-Schnittstelle 2237 stellt eine Schnittstelle zwischen dem Graphikkern 2300 und anderen Prozessorkernen innerhalb einer integrierten SoC-Schaltung bereit. In mindestens einer Ausführungsform ist der Graphik-Mikrocontroller 2238 ein programmierbarer Subprozessor, der konfiguriert sein kann, um verschiedene Funktionen des Graphikprozessors 2300 zu verwalten, einschließlich der Thread-Versendung, des Scheduling und der Präemption. In mindestens einer Ausführungsform umfasst die Medien-Pipeline 2239 Logik zur Erleichterung der Decodierung, Codierung, Vorverarbeitung und/oder Nachbearbeitung von Multimedia-Daten, einschließlich Bild- und Videodaten. In mindestens einer Ausführungsform implementiert die Medien-Pipeline 2239 Medienoperationen über Anforderungen, um Logik innerhalb der Unterkerne 2301-2301F zu berechnen oder abzutasten.
  • In mindestens einer Ausführungsform ermöglicht die SoC-Schnittstelle 2337 dem Graphikkern 2300, mit universellen Anwendungsprozessorkernen (z.B. CPUs) und/oder anderen Komponenten innerhalb eines SoC, einschließlich Speicherhierarchieelementen, wie beispielsweise gemeinsam genutztem Last Level Cache-Speicher, System-RAM und/oder eingebettetem On-Chip- oder On-Package-DRAM, zu kommunizieren. In mindestens einer Ausführungsform kann die SoC-Schnittstelle 2337 auch eine Kommunikation mit Vorrichtungen mit fester Funktion innerhalb eines SoC ermöglichen, wie beispielsweise Kameraabbildung-Pipelines, und ermöglicht die Verwendung und/oder Implementierung globaler Speicher-Atome, die zwischen dem Graphikkern 2300 und CPUs innerhalb eines SoC gemeinsam genutzt werden können. In mindestens einer Ausführungsform kann die SoC-Schnittstelle 2337 auch Energieverwaltungssteuerungen für den Graphikkern 2300 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Graphikkerns 2300 und anderen Taktdomänen innerhalb eines SoC ermöglichen. In mindestens einer Ausführungsform ermöglicht die SoC-Schnittstelle 2337 den Empfang von Befehlspuffern von einem Befehlsstreamer und einem globalen Thread-Versender, die konfiguriert sind, um Befehle und Anweisungen an jeden eines einzelnen oder mehrerer Graphikkerne innerhalb eines Graphikprozessors bereitzustellen. In mindestens einer Ausführungsform können Befehle und Anweisungen an die Medien-Pipeline 2339, wenn Medienoperationen durchzuführen sind, oder an eine Geometrie/Festfunktions-Pipeline (z.B. Geometrie/Festfunktions-Pipeline 2336, Geometrie/Festfunktions-Pipeline 2314), wenn Graphikverarbeitungsoperationen durchzuführen sind, gesendet werden.
  • In mindestens einer Ausführungsform kann der Graphik-Mikrocontroller 2338 konfiguriert sein, um verschiedene Planungs- und Verwaltungsaufgaben für den Graphikkern 2300 auszuführen. In mindestens einer Ausführungsform kann der Graphik-Mikrocontroller 2338 eine Graphik- und/oder Rechen-Arbeitslast-Planung auf verschiedenen parallelen Graphik-Maschinen innerhalb der Ausführungseinheit (EU)-Anordnungen 2302A-2302F, 2304A-2304F innerhalb der Unterkerne 2301A-2301F durchführen. In mindestens einer Ausführungsform kann Host-Software, die auf einem CPU-Kern eines SoC mit dem Graphikkern 2300 ausgeführt wird, Arbeitslasten einer von mehreren Graphikprozessorpfaden übergeben, welche einen Planungsvorgang auf einer geeigneten Graphik-Maschine auslösen. In mindestens einer Ausführungsform umfassen Planungsoperationen ein Bestimmen, welche Arbeitslast als nächstes auszuführen ist, ein Übermitteln einer Arbeitslast an einen Befehlsstreamer, ein Vorbelegen existierender Arbeitslasten, die auf einer Maschine ausgeführt werden, ein Überwachen des Fortschreitens einer Arbeitslast und ein Benachrichtigen der Host-Software, wenn eine Arbeitslast abgeschlossen ist. In mindestens einer Ausführungsform kann der Graphik-Mikrocontroller 2338 auch Zustände mit geringer Stromaufnahme oder Leerlaufzustände für den Graphikkern 2300 ermöglichen, die dem Graphikkern 2300 die Möglichkeit geben, Register innerhalb des Graphikkerns 2300 über Zustandsübergänge mit geringem Stromverbrauch unabhängig von einem Betriebssystem und/oder einer Graphiktreibersoftware auf einem System zu speichern und wiederherzustellen.
  • In mindestens einer Ausführungsform kann der Graphikkern 2300 mehr als oder weniger als die veranschaulichten Unterkerne 2301A-2301F und bis zu N modularen Unterkernen aufweisen. Für jeden Satz von N-Unterkernen kann der Graphikkern 2300 in mindestens einer Ausführungsform auch eine gemeinsam genutzte Funktionslogik 2310, einen gemeinsam genutzten und/oder Cache-Speicher 2312, eine Geometrie/Festfunktions-Pipeline 2314 sowie zusätzliche Festfunktionslogik 2316 zur Beschleunigung verschiedener Graphik- und Rechenverarbeitungsoperationen umfassen. In mindestens einer Ausführungsform kann die gemeinsam genutzte Funktionslogik 2310 Logikeinheiten (z.B. Abtaster-, Mathematik- und/oder Inter-Thread-Kommunikationslogik) umfassen, die von allen N Unterkernen innerhalb des Graphikkerns 2300 gemeinsam genutzt werden können. In mindestens einer Ausführungsform kann der gemeinsam genutzte und/oder Cache-Speicher 2312 ein Last-Level-Cache für die N Unterkerne 2301A-2301F innerhalb des Graphikkerns 2300 sein und kann ebenfalls als gemeinsam genutzter Speicher dienen, auf den mehrere Unterkerne zugreifen können. In mindestens einer Ausführungsform kann die Geometrie/Festfunktions-Pipeline 2314 anstelle der Geometrie/Festfunktions-Pipeline 2336 innerhalb des Festfunktionsblocks 2330 aufgenommen sein und kann gleiche oder ähnliche Logikeinheiten umfassen.
  • In mindestens einer Ausführungsform umfasst der Graphikkern 2300 eine zusätzliche Festfunktionslogik 2316, die verschiedene Festfunktionsbeschleunigungslogik zur Verwendung durch den Graphikkern 2300 umfassen kann. In mindestens einer Ausführungsform umfasst die zusätzliche Festfunktionslogik eine zusätzliche Geometrie-Pipeline zur Verwendung in Nur-Positions-Shading. Bei dem Nur-Positions-Shading existieren mindestens zwei Geometrie-Pipelines, wohin gehend in einer Vollgeometrie-Pipeline innerhalb der Geometrie/Festfunktions-Pipeline 2316, 2336, und eine Cull-Pipeline, welche eine zusätzliche Geometrie-Pipeline ist, welche innerhalb der zusätzlichen Festfunktionslogik 2316 umfasst sein kann. In mindestens einer Ausführungsform ist die Cull-Pipeline eine abgespeckte Version einer Vollgeometrie-Pipeline. In mindestens einer Ausführungsform können eine Vollpipeline und eine Cull-Pipeline verschiedene Instanzen einer Anwendung ausführen, wobei jede Instanz einen separaten Kontext hat. In mindestens einer Ausführungsform kann das Nur-Positions-Shading lange Cull-Läufe von verworfenen Dreiecken verbergen, so dass das Shading in einigen Fällen früher abgeschlossen werden kann. Beispielsweise kann in mindestens einer Ausführungsform die Cull-Pipeline-Logik innerhalb der zusätzlichen Festfunktionslogik 2316 Positions-Shader parallel zu einer Hauptanwendung ausführen und erzeugt im Allgemeinen kritische Ergebnisse schneller als eine Vollpipeline, da die Cull-Pipeline das Attribut der Position von Vertices holt und schattiert, ohne eine Rasterung und ein Rendern von Pixeln in einem Einzelbild-Puffer durchzuführen. In mindestens einer Ausführungsform kann die Cull-Pipeline erzeugte kritische Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke unabhängig davon zu berechnen, ob diese Dreiecke gecullt werden. In mindestens einer Ausführungsform kann eine Vollpipeline (welche in diesem Fall als eine Wiedergabepipeline bezeichnet werden kann) Sichtbarkeitsinformationen verbrauchen, um gecullte Dreiecke zu überspringen, um nur sichtbare Dreiecke zu schattieren, die schließlich an eine Rasterungsphase übergeben werden.
  • In mindestens einer Ausführungsform kann die zusätzliche Festfunktionslogik 2316 auch eine Allzweck-Verarbeitungsbeschleunigungslogik, wie beispielsweise eine Festfunktion-Matrix-Multiplikationslogik, zum Beschleunigen von CUDA-Programmen umfassen.
  • In mindestens einer Ausführungsform ist innerhalb jedes Graphik-Unterkerns 2301A-2301F ein Satz von Ausführungsressourcen enthalten, die verwendet werden können, um Graphik-, Medien- und Rechenoperationen im Ansprechen auf Anfragen von der Graphikpipeline, der Medien-Pipeline oder von Shader-Programmen durchzuführen. In mindestens einer Ausführungsform umfassen die Graphik-Unterkerne 2301A-2301F mehrere EU-Arrays 2302A-2302F, 2304A-2304F, Thread-Abfertigungs- und Inter-Thread-Kommunikationslogik (Thread Dispatch and Inter-Thread Communication; „TD/IC“) 2303A-2303F, einen 3D-(z.B. Textur-)Abtaster 2305A-2305F, einen Medien-Abtaster 2306A-2306F, einen Shaderprozessor 2307A-2307F und einen gemeinsam genutzten lokalen Speicher (Shared Local Memory; „SLM“) 2308A-2308F. Die EU-Arrays 2302A-2302F, 2304A-2304F umfassen jeweils mehrere Ausführungseinheiten, welche universelle Graphikverarbeitungseinheiten sind, die in der Lage sind, Gleitkomma- und Ganzzahl/Festpunkt-Logikoperationen im Dienst einer Graphik-, Medien- oder Rechenoperation durchzuführen, einschließlich von Graphik-, Medien- oder Rechen-Shader-Programmen. In mindestens einer Ausführungsform führt eine TD/IC-Logik 2303A-2303F lokale Thread-Abfertigungs- und Thread-Steuer-Operationen für Ausführungseinheiten innerhalb eines Unterkerns durch und erleichtert die Kommunikation zwischen Threads, die auf Ausführungseinheiten eines Unterkerns ausgeführt werden. In mindestens einer Ausführungsform kann der 3D-Abtaster 2305A-2305F Texturen oder andere 3D-Graphik-bezogene Daten in den Speicher einlesen. In mindestens einer Ausführungsform kann der 3D-Abtaster Texturdaten unterschiedlich lesen, basierend auf einem konfigurierten Abtastzustand und einem Texturformat, das einer bestimmten Textur zugeordnet ist. In mindestens einer Ausführungsform kann der Medien-Abtaster 2306A-2306F ähnliche Leseoperationen durchführen, die auf einem Typ und einem Format basieren, der/das Mediendaten zugeordnet ist. In mindestens einer Ausführungsform kann jeder Graphik-Unterkern 2301A-2301F abwechselnd einen vereinheitlichten 3D- und Medien-Abtaster umfassen. In mindestens einer Ausführungsform können Threads, die auf Ausführungseinheiten innerhalb jedes der Unterkerne 2301A-2301F ausgeführt werden, den gemeinsam genutzten lokalen Speicher 2308A-2308F innerhalb jedes Unterkerns verwenden, um Threads, die innerhalb einer Thread-Gruppe ausgeführt werden, die Ausführung unter Verwendung eines gemeinsamen Pools von On-Chip-Speicher zu ermöglichen.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 23 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 23 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 23 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 24 veranschaulicht eine Parallelverarbeitungs-Einheit („PPU“) 2400 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist die PPU 2400 mit einem maschinenlesbarem Code konfiguriert, der, falls von der PPU 2400 ausgeführt, die PPU 2400 veranlasst, einige oder sämtliche der Prozesse und Techniken durchzuführen, die in dieser Offenbarung durchweg beschrieben sind. In mindestens einer Ausführungsform ist die PPU 2400 ein Multi-Threaded-Prozessor, der auf einer oder mehreren integrierten Schaltungsvorrichtungen implementiert ist, und der MultiThreading als eine Latenz-verbergende Architektur benutzt, die ausgestaltet ist, um computerlesbare Anweisungen (auch als maschinenlesbare Anweisungen oder einfach als Anweisungen bezeichnet) an mehreren Threads parallel zu verarbeiten. In mindestens einer Ausführungsform bezieht sich ein Thread auf einen Ausführungsthread und ist eine Instanziierung eines Satzes von Anweisungen, die konfiguriert sind, um von der PPU 2400 ausgeführt zu werden. In mindestens einer Ausführungsform ist die PPU 2400 eine Graphikverarbeitungseinheit („GPU“), die konfiguriert ist, um eine Graphik-Rendering-Pipeline zur Verarbeitung von dreidimensionalen („3D“) Graphikdaten zu implementieren, um zweidimensionale („2D“) Bilddaten zur Anzeige auf einer Anzeigevorrichtung, wie beispielsweise einer Flüssigkristallanzeige(„LCD“)-Vorrichtung, zu erzeugen. In mindestens einer Ausführungsform wird die PPU 2400 benutzt, um Rechnungen, wie beispielsweise Operationen der linearen Algebra und Operationen des Maschinenlernens durchführen. 24 veranschaulicht einen beispielhaften parallelen Prozessor lediglich für veranschaulichende Zwecke und sollte als ein nicht einschränkendes Beispiel von Prozessorarchitekturen ausgelegt werden, die in mindestens einer Ausführungsform implementiert werden kann.
  • In mindestens einer Ausführungsform sind eine oder mehrere PPUs 2400 konfiguriert, um HPC(High Performance Computing), Rechenzentrum und Maschinenlern-Anwendungen zu beschleunigen. In mindestens einer Ausführungsform sind eine oder mehrere PPUs 2400 konfiguriert, um CUDA-Programme zu beschleunigen. In mindestens einer Ausführungsform umfasst die PPU 2400, ohne darauf beschränkt zu sein, eine Eingabe/Ausgabe(„E/A“)-Einheit 2406, eine Frontend-Einheit 2410, eine Planer-Einheit 2412, eine Arbeitsverteilungs-Einheit 2414, einen Hub 2416, eine Kreuzschiene („XBar“) 2420, einen oder mehrere allgemeine Verarbeitungscluster („GPCs“) 2418 und eine oder mehrere Partitions-Einheiten („Speicherpartitions-Einheiten“) 2422. In mindestens einer Ausführungsform ist die PPU 2400 mit einem Host-Prozessor oder anderen PPUs 2400 über einen oder mehrere Hochgeschwindigkeits-GPU-Zwischenverbindungen („GPU-Zwischenverbindungen“) 2408 verbunden. In mindestens einer Ausführungsform ist die PPU 2400 mit einem Host-Prozessor oder anderen peripheren Vorrichtungen über eine Zwischenverbindung 2402 verbunden. In mindestens einer Ausführungsform ist die PPU 2400 mit einem lokalen Speicher verbunden, der eine oder mehrere Speichervorrichtungen („Speicher“) 2404 umfasst. In mindestens einer Ausführungsform umfassen die Speichervorrichtungen 2404, ohne darauf beschränkt zu sein, eine oder mehrere Direktzugriffsspeicher(„DRAM“)-Vorrichtungen. In mindestens einer Ausführungsform sind eine oder mehrere DRAM-Vorrichtungen als HBM(Speicher mit hoher Bandbreite)-Teilsysteme konfiguriert und/oder konfigurierbar, wobei mehrere DRAM-Dies innerhalb jeder Vorrichtung gestapelt sind.
  • In mindestens einer Ausführungsform kann sich die Hochgeschwindigkeits-GPU-Zwischenverbindung 2408 auf eine drahtgebundene mehrspurige Kommunikationsverbindung beziehen, die von Systemen verwendet wird, um eine oder mehrere PPUs 2400 zu skalieren und zu umfassen, die mit einer oder mehreren zentralen Verarbeitungseinheiten („CPUs“) kombiniert sind, unterstützt Cache-Kohärenz zwischen den PPUs 2400 und CPUs sowie CPU-Mastering. In mindestens einer Ausführungsform werden Daten und/oder Befehle mittels der Hochgeschwindigkeits-GPU-Zwischenverbindung 2408 durch den Hub 2416 an/von anderen Einheiten der PPU 2400 übertragen, wie beispielsweise eine oder mehrere Kopier-Maschinen, Videocodierer, Videodecodierer, Leistungsverwaltungseinheiten und andere Komponenten, die in 24 nicht explizit veranschaulicht werden können.
  • In mindestens einer Ausführungsform ist die E/A-Einheit 2406 konfiguriert, um Kommunikationen (d.h. Befehle, Daten usw.) von einem Host-Prozessor (in 24 nicht gezeigt) über den Systembus 2402 zu übertragen und zu empfangen. In mindestens einer Ausführungsform kommuniziert die E/A-Einheit 2406 mit dem Host-Prozessor direkt über den Systembus 2402 oder durch eine oder mehrere Zwischenvorrichtungen, wie beispielsweise eine Speicherbrücke. In mindestens einer Ausführungsform kann die E/A-Einheit 2406 mit einem oder mehreren anderen Prozessoren, wie beispielsweise einer oder mehreren PPUs, über den Systembus 2402 kommunizieren. In mindestens einer Ausführungsform implementiert die E/A-Einheit 2406 eine PCIe-Schnittstelle für Kommunikationen über einen PCIe-Bus. In mindestens einer Ausführungsform implementiert die E/A-Einheit 2406 Schnittstellen zum Kommunizieren mit externen Vorrichtungen.
  • In mindestens einer Ausführungsform decodiert die E/A-Einheit 2406 Pakete, die über den Systembus 2402 empfangen wurden. In mindestens einer Ausführungsform stellen mindestens einige Pakete Befehle dar, die konfiguriert sind, um die PPU 2400 zu veranlassen, verschiedene Operationen durchzuführen. In mindestens einer Ausführungsform überträgt die E/A-Einheit 2406 decodierte Befehle an verschiedene andere Einheiten der PPU 2400, wie durch Befehle spezifiziert. In mindestens einer Ausführungsform werden Befehle an die Frontend-Einheit 2410 und/oder an den Hub 2416 oder andere Einheiten der PPU 2400 übertragen, wie beispielsweise eine oder mehrere Kopier-Maschinen, einen Video-Codierer, einen Video-Decodierer, eine Leistungsverwaltungseinheit usw. (nicht explizit gezeigt). In mindestens einer Ausführungsform ist die E/A-Einheit 2406 konfiguriert, um Kommunikationen zwischen und unter verschiedenen logischen Einheiten der PPU 2400 weiterzuleiten.
  • In mindestens einer Ausführungsform codiert ein von dem Host-Prozessor ausgeführtes Programm einen Befehlsstrom in einem Puffer, welcher der PPU 2400 Arbeitslasten zur Verarbeitung bereitstellt. In mindestens einer Ausführungsform umfasst eine Arbeitslast Anweisungen und Daten, die durch diese Anweisungen zu verarbeiten sind. In mindestens einer Ausführungsform ist der Puffer eine Region in einem Speicher, der von sowohl dem Host-Prozessor als auch der PPU 2400 zugänglich ist (d.h. Lesen/Schreiben) - eine Host-Schnittstelleneinheit kann konfiguriert sein, um auf diesen Puffer in einem Systemspeicher, der mit dem Systembus 2402 verbunden ist, über Speicheranforderungen zuzugreifen, die über den Systembus 2402 durch die E/A-Einheit 2406 übertragen werden. In mindestens einer Ausführungsform schreibt ein Host-Prozessor einen Befehlsstrom in einen Puffer und überträgt dann einen Zeiger zu einem Start des Befehlsstroms an die PPU 2400, so dass die Frontend-Einheit 2410 Zeiger zu einem oder mehreren Befehlsströme empfängt und einen oder mehrere Ströme verwaltet, Befehle aus den Befehlsströmen liest und Befehle an verschiedene Einheiten der PPU 2400 weiterleitet.
  • In mindestens einer Ausführungsform ist die Frontend-Einheit 2410 mit einer Planer-Einheit 2412 gekoppelt, die verschiedene GPCs 2418 konfiguriert, um Aufgaben zu verarbeiten, die durch einen oder mehrere Befehlsströme definiert sind. In mindestens einer Ausführungsform ist die Planer-Einheit 2412 konfiguriert, um Zustandsinformation zu verfolgen, die verschiedene Aufgaben betrifft, die von der Planer-Einheit 2412 verwaltet werden, wobei die Zustandsinformation angeben kann, welchem der GPCs 2418 eine Aufgabe zugewiesen ist, ob die Aufgabe aktiv oder inaktiv ist, ob der Aufgabe ein Prioritätsniveau zugeordnet ist, und so weiter. In mindestens einer Ausführungsform verwaltet die Planer-Einheit 2412 die Ausführung mehrerer Aufgaben auf einem oder mehreren der GPCs 2418.
  • In mindestens einer Ausführungsform ist die Planer-Einheit 2412 mit einer Arbeitsverteilungs-Einheit 2414 gekoppelt, die konfiguriert ist, um Aufgaben zur Ausführung auf GPCs 2418 abzufertigen. In mindestens einer Ausführungsform verfolgt die Arbeitsverteilungs-Einheit 2414 eine Anzahl von eingeplanten Aufgaben, die von der Planer-Einheit 2412 empfangen werden, und die Arbeitsverteilungs-Einheit 2414 verwaltet einen Pool für anstehende Aufgaben und einen Pool für aktive Aufgaben für jeden der GPCs 2418. In mindestens einer Ausführungsform umfasst der Pool für anstehende Aufgaben eine Anzahl von Schlitzen (z.B. 32 Schlitze), die Aufgaben enthalten, die zugewiesen sind, um von einem bestimmten GPC 2418 verarbeitet zu werden; ein Pool für aktive Aufgaben kann eine Anzahl von Schlitzen (z.B. 4 Schlitze) für Aufgaben umfassen, die von den GPCs 2418 aktiv verarbeitet werden, so dass, wenn einer der GPCs 2418 die Ausführung einer Aufgabe abschließt, diese Aufgabe aus dem Pool für aktive Aufgaben für den GPC 2418 geräumt wird und eine der anderen Aufgaben aus dem Pool für anstehende Aufgaben ausgewählt und zur Ausführung auf dem GPC 2418 eingeplant wird. In mindestens einer Ausführungsform, wenn eine aktive Aufgabe auf dem GPC 2418 inaktiv ist, wie beispielsweise während darauf gewartet wird, dass eine Datenabhängigkeit behoben wird, dann wird die aktive Aufgabe aus dem GPC 2418 geräumt und zu dem Pool für anstehende Aufgaben zurückgeführt, während eine andere Aufgabe in diesem Pool für anstehende Aufgaben ausgewählt und zur Ausführung auf dem GPC 2418 eingeplant wird.
  • In mindestens einer Ausführungsform kommuniziert die Arbeitsverteilungs-Einheit 2414 mit einem oder mehreren GPCs 2418 über die Kreuzschiene bzw. XBar 2420. In mindestens einer Ausführungsform ist die XBar 2420 ein Zwischenverbindung-Netzwerk, das viele der Einheiten der PPU 2400 mit anderen Einheiten der PPU 2400 koppelt und konfiguriert sein kann, um die Arbeitsverteilungs-Einheit 2414 mit einem bestimmten GPC 2418 zu koppeln. In mindestens einer Ausführungsform können eine oder mehrere andere Einheiten der PPU 2400 ebenfalls mit der XBar 2420 über den Hub 2416 verbunden sein.
  • In mindestens einer Ausführungsform werden Aufgaben von der Planer-Einheit 2412 verwaltet und an einen der GPCs 2418 durch die Arbeitsverteilungs-Einheit 2414 gesendet. In mindestens einer Ausführungsform ist der GPC 2418 konfiguriert, um eine Aufgabe zu verarbeiten und Ergebnisse zu erzeugen. In mindestens einer Ausführungsform können Ergebnisse von anderen Aufgaben innerhalb des GPC 2418 konsumiert werden, an einen unterschiedlichen GPC 2418 über die XBar 2420 weitergeleitet oder im Speicher 2404 gespeichert werden. In mindestens einer Ausführungsform können Ergebnisse in den Speicher 2404 über Partitions-Einheiten 2422 geschrieben werden, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten in/aus dem Speicher 2404 implementieren. In mindestens einer Ausführungsform können Ergebnisse an eine andere PPU 2404 oder CPU über die Hochgeschwindigkeit-GPU-Zwischenverbindung 2408 übertragen werden. In mindestens einer Ausführungsform umfasst die PPU, ohne darauf beschränkt zu sein, eine Anzahl U von Partitionseinheiten 2422, die gleich einer Anzahl von getrennten und unterschiedlichen Speichervorrichtungen 2404 ist, die mit der PPU 2400 gekoppelt sind.
  • In mindestens einer Ausführungsform führt ein Host-Prozessor einen Treiberkernel aus, der eine Anwendungsprogrammmier-Schnittstelle („API“) implementiert, die einer oder mehreren Anwendungen ermöglicht, auf dem Host-Prozessor ausgeführt werden, um Operationen zur Ausführung auf der PPU 2400 einzuplanen. In mindestens einer Ausführungsform werden mehrere Rechenanwendungen gleichzeitig von der PPU 2400 ausgeführt und die PPU 2400 stellt Isolierung, Dienstqualität („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 einen Treiberkernel veranlassen, eine oder mehrere Aufgaben zur Ausführung durch die PPU 2400 zu erzeugen, und der Treiberkernel gibt Aufgaben an einen oder mehrere Streams aus, die von der PPU 2400 verarbeitet werden. In mindestens einer Ausführungsform umfasst jede Aufgabe eine oder mehrere Gruppen von in Beziehung stehender Threads, die als ein Warp bezeichnet werden können. In mindestens einer Ausführungsform umfasst ein Warp mehrere in Beziehung stehende Threads (z.B. 32 Threads), die parallel ausgeführt werden können. In mindestens einer Ausführungsform können sich kooperierende Threads auf mehrere Threads beziehen, die Anweisungen umfassen, um eine Aufgabe durchzuführen, und die Daten durch einen gemeinsam genutzten Speicher austauschen.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 24 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 24 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 24 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 25 veranschaulicht einen GPC 2500 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist der GPC 2500 der GPC 2418 von 24. In mindestens einer Ausführungsform umfasst jeder GPC 2500, ohne darauf beschränkt zu sein, eine Anzahl von Hardwareeinheiten zur Verarbeitung von Aufgaben, und jeder GPC 2500 umfasst, ohne darauf beschränkt zu sein, einen Pipeline-Manager 2502, eine Vor-Raster-Operationen-Einheit („PROP“) 2504, eine Raster-Maschine 2508, eine Arbeitsverteilungs-Kreuzschiene („WDX“) 2516, eine MMU 2518 und einen oder mehrere Datenverarbeitungscluster (Data Processing Clusters; „DPCs“) 2506 und jede geeignete Kombination von Teilen.
  • In mindestens einer Ausführungsform wird der Betrieb des GPC 2500 durch den Pipeline-Manager 2502 gesteuert. In mindestens einer Ausführungsform verwaltet der Pipeline-Manager 2502 die Konfiguration eines oder mehrerer DPCs 2506 zur Verarbeitung von Aufgaben, die dem GPC 2500 zugeteilt sind. In mindestens einer Ausführungsform konfiguriert der Pipeline-Manager 2502 mindestens einen von einem oder mehreren DPCs 2506, um mindestens einen Abschnitt einer Graphik-Rendering-Pipeline zu implementieren. In mindestens einer Ausführungsform ist ein DPC 2506 konfiguriert, um ein Vertex-Shader-Programm auf einem programmierbaren Streaming-Multiprozessor („SM“) 2514 auszuführen. In mindestens einer Ausführungsform ist der Pipeline-Manager 2502 konfiguriert, um Pakete, die von einer Arbeitsverteilungs-Einheit empfangen werden, in mindestens einer Ausführungsform an geeignete logische Einheiten innerhalb des GPC 2500 weiterzuleiten, und in mindestens einer Ausführungsform können einige Pakete an Festfunktions-Hardwareeinheiten in dem PROP 2504 und/oder der Raster-Maschine 2508 weitergeleitet werden, während andere Pakete an DPCs 2506 zur Verarbeitung durch eine Primitiven-Maschine 2512 oder den SM 2514 weitergeleitet werden können. In mindestens einer Ausführungsform konfiguriert der Pipeline-Manager 2502 mindestens einen der DPCs, um mindestens einen Abschnitt eines CUDA-Programms auszuführen.
  • In mindestens einer Ausführungsform ist die PROP-Einheit 2504 konfiguriert, um Daten, die von der Raster-Maschine 2508 und den DPCs 2506 erzeugt wurden, an eine Raster-Operationen („ROP“)-Einheit in der Partitions-Einheit weiterzuleiten, die oben ausführlicher in Verbindung mit 24 beschrieben ist. In mindestens einer Ausführungsform ist die PROP-Einheit 2504 konfiguriert, um Optimierungen zur Farbenmischung durchzuführen, Pixeldaten zu organisieren, Adressenübersetzungen und mehr durchzuführen. In mindestens einer Ausführungsform umfasst die Raster-Maschine 2508, ohne darauf beschränkt zu sein, eine Anzahl von Festfunktions-Hardwareeinheiten, die konfiguriert sind, um verschiedene Raster-Operationen durchzuführen, und in mindestens einer Ausführungsform umfasst die Raster-Maschine 2508, ohne darauf beschränkt zu sein, eine Setup-Maschine, eine Grobraster-Maschine, eine Aussonderungs-Maschine, eine Abschneide-Maschine, eine Feinraster-Maschine und eine Kachelverschmelzende Maschine und jede geeignete Kombination davon. In mindestens einer Ausführungsform empfängt die Setup-Maschine transformierte Vertices und erzeugt Ebenengleichungen, die geometrischen Primitiven zugeordnet sind, die durch Vertices definiert werden; Ebenengleichungen werden an die Grobraster-Maschine übertragen, um Abdeckungsinformation (z.B. eine (x,y)-Abdeckungsmaske für eine Kachel) für eine Primitive zu erzeugen; die Ausgabe der Grobraster-Maschine wird an die Aussonderungs-Maschine übertragen, wo Fragmente, die der Primitiven zugeordnet sind, die einen z-Test nicht bestehen, ausgesondert und an eine Abschneide-Maschine übertragen werden, wo Fragmente, die außerhalb eines Betrachtungsstumpfes liegen, abgeschnitten werden. In mindestens einer Ausführungsform werden diejenigen Fragmente, welche die Abschneidung und Aussonderung überleben, an eine Feinraster-Maschine weitergeben, um Attribute für Pixelfragmente basierend auf den Ebenengleichungen zu erzeugen, die durch eine Setup-Maschine erzeugt werden. In mindestens einer Ausführungsform umfasst eine Ausgabe der Raster-Maschine 2508 Fragmente, die durch eine geeignete Entität zu verarbeiten sind, wie beispielsweise durch einem Fragment-Shader, der innerhalb eines DPC 2506 implementiert ist.
  • In mindestens einer Ausführungsform umfasst jeder in dem GPC 2500 enthaltene DPC 2506, ohne darauf beschränkt zu sein, einen M-Pipe-Controller („MPC“) 2510; eine Primitiven-Maschine 2512; einen oder mehrere SMs 2514; und jede geeignete Kombination davon. In mindestens einer Ausführungsform steuert der MPC 2510 den Betrieb des DPC 2506, wobei von dem Pipeline-Manager 2502 empfangene Pakete an geeignete Einheiten im DPC 2506 weitergeleitet werden. In mindestens einer Ausführungsform werden Pakete, die einer Vertex zugeordnet sind, an die Primitiven-Maschine 2512 weitergeleitet, die konfiguriert ist, um der Vertex zugeordnete Vertexattribute aus dem Speicher abzurufen; im Gegensatz dazu können einem Shader-Programm zugeordnete Pakete an den SM 2514 übertragen werden.
  • In mindestens einer Ausführungsform umfasst der SM 2514, ohne darauf beschränkt zu sein, einen programmierbaren Streaming-Prozessor, der konfiguriert ist, um Aufgaben zu verarbeiten, die durch eine Anzahl von Threads dargestellt werden. In mindestens einer Ausführungsform ist der SM 2514 multithreaded (umfasst mehrere Threads) und ist konfiguriert, um eine Mehrzahl von Threads (z.B. 32 Threads) einer bestimmten Gruppe von Threads nebenläufig auszuführen und implementiert eine SIMD-Architektur, wobei jeder Thread in einer Gruppe von Threads (d.h. ein Warp) konfiguriert ist, um einen unterschiedlichen Satz von Daten basierend auf dem gleichen Satz von Anweisungen zu verarbeiten. In mindestens einer Ausführungsform führen alle Threads in der Gruppe von Threads einen gemeinsamen Satz von Anweisungen aus. In mindestens einer Ausführungsform implementiert der SM 2514 eine SIMT-Architektur, wobei jeder Thread in einer Gruppe von Threads konfiguriert ist, um einen unterschiedlichen Satz von Daten basierend auf dem gleichen Satz von Anweisungen zu verarbeiten, wobei jedoch einzelnen Threads in der Gruppe von Threads ermöglicht wird, während der Ausführung zu divergieren. In einer anderen Ausführungsform wird ein Programmzähler, ein Aufrufstapel und ein Ausführungszustand für jeden einzelnen Warp beibehalten, was eine Nebenläufigkeit zwischen allen Threads, innerhalb und zwischen Warps ermöglicht. In mindestens einer Ausführungsform wird ein Ausführungszustand für jeden einzelnen Thread beibehalten und Threads, welche die gleichen Anweisungen ausführen, können konvergiert und zur besseren Effizienz parallel ausgeführt werden. Mindestens eine Ausführungsform des SM 2514 wird ausführlicher in Verbindung mit 26 beschrieben.
  • In mindestens einer Ausführungsform stellt die MMU 2518 eine Schnittstelle zwischen dem GPC 2500 und einer Partitions-Einheit (z.B. Partitions-Einheit 2422 von 24) bereit und die MMU 2518 stellt eine Übersetzung von virtuellen Adressen in physische Adressen, einen Speicherschutz und eine Arbitrierung von Speicheranforderungen bereit. In mindestens einer Ausführungsform stellt die MMU 2518 einen oder mehrere Adressenübersetzungspuffer (Translation Lookaside Buffer; TLBs) zum Durchführen einer Übersetzung von virtuellen Adressen in physische Adressen im Speicher bereit.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 25 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 25 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 25 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 26 veranschaulicht einen Streaming-Multiprozessor („SM“) 2600 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist der SM 2600 der SM von 25. In mindestens einer Ausführungsform umfasst der SM 2600, ohne darauf beschränkt zu sein, einen Anweisungs-Cache-Speicher 2602; eine oder mehrere Planer-Einheiten 2604; eine Registerdatei 2608, einen oder mehrere Verarbeitungskerne („cores“) 2610, eine oder mehrere Spezialfunktionseinheiten („SFUs“) 2612, eine oder mehrere LSUs 2614, ein Zwischenverbindungsnetzwerk 2616, einen gemeinsam genutzten Speicher/ L1-Cache-Speicher 2618; und jede geeignete Kombination davon. In mindestens einer Ausführungsform fertigt eine Arbeitsverteilungs-Einheit Aufgaben zur Ausführung auf GPCs von Parallelverarbeitungs-Einheiten (PPUs) ab und jede Aufgabe wird einem bestimmten Datenverarbeitungscluster (Data Processing Cluster; DPC) innerhalb eines GPC zugeteilt, und wenn eine Aufgabe einem Shader-Programm zugeordnet ist, dann wird die Aufgabe einem der SMs 2600 zugeteilt. In mindestens einer Ausführungsform empfängt die Planer-Einheit 2604 Aufgaben von einer Arbeitsverteilungs-Einheit und verwaltet die Anweisungsplanung für einen oder mehrere Thread-Blöcke, die dem SM 2600 zugewiesen sind. In mindestens einer Ausführungsform plant die Planer-Einheit 2604 Thread-Blöcke zur Ausführung als Warps von parallelen Threads, wobei jeder Thread-Block mindestens einem Warp zugeteilt ist. In mindestens einer Ausführungsform führt jeder Warp Threads aus. In mindestens einer Ausführungsform verwaltet die Planer-Einheit 2604 mehrere unterschiedliche Thread-Blöcke, teilt Warps unterschiedlichen Thread-Blöcken zu und fertigt dann Anweisungen von mehreren unterschiedlichen kooperativen Gruppen an verschiedene Funktionseinheiten (z.B. Verarbeitungskernen 2610, SFUs 2612 und LSUs 2614) während jedes Taktzyklus ab.
  • In mindestens einer Ausführungsform können sich „Cooperative Groups“ auf ein Programmiermodell zum Organisieren von Gruppen von kommunizierenden Threads beziehen, die es Entwicklern ermöglicht, die Granularität auszudrücken, bei der Threads kommunizieren, wobei der Ausdruck von reicheren, effizienteren Parallelzerlegungen ermöglicht wird. In mindestens einer Ausführungsform unterstützen Cooperative-Start-APIs die Synchronisierung unter Thread-Blöcken zur Ausführung von parallelen Algorithmen. In mindestens einer Ausführungsform stellen herkömmliche Programmiermodelle einen einzigen, einfachen Konstrukt zum Synchronisieren von kooperierenden Threads bereit: eine Barriere über alle Threads eines Thread-Blocks (d.h. die Funktion syncthreads( )). In mindestens einer Ausführungsform können Programmierer Gruppen von Threads jedoch bei kleineren als Thread-Block-Granularitäten definieren und innerhalb der definierten Gruppen synchronisieren, um größere Leistung, Gestaltungsflexibilität und Software-Wiederverwendung in der Form von kollektiven gruppenweiten Funktionsschnittstellen zu ermöglichen. In mindestens einer Ausführungsform ermöglichen Cooperative Groups Programmierern, Gruppen von Threads explizit bei Sub-Block- und Multi-Block-Granularitäten zu definieren und kollektive Operationen, wie beispielsweise Synchronisierung, an den Threads in einer kooperativen Gruppe durchzuführen. In mindestens einer Ausführungsform ist eine Sub-Block-Granularität so klein wie ein einzelner Thread. In mindestens einer Ausführungsform unterstützt das Programmiermodell eine saubere Zusammensetzung über Softwaregrenzen, so dass Bibliotheken und Dienstprogrammfunktionen sicher innerhalb ihres lokalen Kontexts synchronisieren können, ohne Annahmen über Konvergenz machen zu müssen. In mindestens einer Ausführungsform ermöglichen Grundelemente kooperativer Gruppen neue Muster von kooperativer Parallelität, die, ohne darauf beschränkt zu sein, Erzeuger-Verbraucher Parallelität, opportunistische Parallelität und globale Synchronisierung über ein gesamtes Gitter von Threadblöcken umfassen.
  • In mindestens einer Ausführungsform ist eine Abfertigungseinheit 2606 konfiguriert, um Anweisungen an eine oder mehrere Funktionseinheiten zu übertragen, und die Planer-Einheit 2604 umfasst, ohne darauf beschränkt zu sein, zwei Abfertigungseinheiten 2606, die ermöglichen, dass zwei unterschiedliche Anweisungen von dem gleichen Warp während jedes Taktzyklus abgefertigt werden. In mindestens einer Ausführungsform umfasst jede Planer-Einheit 2604 eine einzige Abfertigungseinheit 2606 oder zusätzliche Abfertigungseinheiten 2606.
  • In mindestens einer Ausführungsform umfasst jeder SM 2600, ohne darauf beschränkt zu sein, eine Registerdatei 2608, die einen Satz von Registern für die Funktionseinheiten des SM 2600 bereitstellt. In mindestens einer Ausführungsform ist die Registerdatei 2608 zwischen jeder der Funktionseinheiten aufgeteilt, so dass jede Funktionseinheit einem zugehörigen Abschnitt der Registerdatei 2608 zugeteilt ist. In einer anderen Ausführungsform ist die Registerdatei 2608 zwischen unterschiedlichen Warps aufgeteilt, die von dem SM 2600 ausgeführt werden, und die Registerdatei 2608 stellt eine temporäre Speicherung für Operanden bereit, die mit Datenpfaden der Funktionseinheiten verbunden sind. In mindestens einer Ausführungsform umfasst jeder SM 2600, ohne darauf beschränkt zu sein, L Verarbeitungskerne 2610. In mindestens einer Ausführungsform umfasst der SM 2600, ohne darauf beschränkt zu sein, eine große Anzahl (z.B. 128 oder mehr) von distinkten Verarbeitungskernen 2610. In mindestens einer Ausführungsform umfasst jeder Verarbeitungskern 2610, ohne darauf beschränkt zu sein, eine vollständig in einer Pipeline angeordnete (fully-pipelined) Verarbeitungseinheit mit einfacher, doppelter oder gemischter Präzision, die, ohne darauf beschränkt zu sein, eine Gleitkommaarithmetik-Logikeinheit und eine Ganzzahlarithmetik-Logikeinheit umfasst. In mindestens einer Ausführungsform implementieren die Gleitkommaarithmetik-Logikeinheiten den IEEE 754-2008 Standard für Gleitkommaarithmetik. In mindestens einer Ausführungsform umfassen die Verarbeitungskerne 2610, ohne darauf beschränkt zu sein, 64 Einfach-Präzisions-(32-Bit)-Gleitkommakerne, 64 Ganzzahlkerne, 32 Doppel-Präzisions-(64-Bit)-Gleitkommakerne und 8 Tensorkerne.
  • In mindestens einer Ausführungsform sind Tensorkerne konfiguriert, um Matrixoperationen durchzuführen. In mindestens einer Ausführungsform sind ein oder mehrere Tensorkerne in Verarbeitungskernen 2610 enthalten. In mindestens einer Ausführungsform sind Tensorkerne konfiguriert, um Matrixarithmetik tiefen Lernens, wie beispielsweise Faltungsoperationen für neuronales Netzwerktraining und Inferenzieren, durchzuführen. In mindestens einer Ausführungsform arbeitet jeder Tensorkern an einer 4x4 Matrix und führt eine Matrix-Multiplikation- und Akkumulation-Operation D=A×B+C durch, wobei A, B, C und D 4x4 Matrizen sind.
  • In mindestens einer Ausführungsform sind Matrix-Multiplikations-Eingaben 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 Tensorkerne an 16-Bit-Gleitkomma-Eingangsdaten mit 32-Bit-Gleitkomma-Akkumulation. In mindestens einer Ausführungsform verwendet die 16-Bit-Gleitkomma-Multiplikation 64 Operationen und ergibt ein Produkt voller Präzision, das dann unter Verwendung einer 32-Bit-Gleitkomma-Addition mit den anderen Zwischenprodukten für eine 4×4×4-Matrix-Multiplikation akkumuliert wird. Tensorkerne werden verwendet, um viel größere zweidimensionale oder höherdimensionale Matrixoperationen durchzuführen, die in dieser Ausführungsform von diesen kleineren Elementen aufgebaut werden. In mindestens einer Ausführungsform exponiert eine API, wie beispielsweise die CUDA-C++ API, spezialisierte Matrix-Lade-, Matrix-Multiplikations- und Matrix-Akkumulations- und Matrix-Speicher-Operationen, um Tensorkerne von einem CUDA-C++ Programm effizient zu verwenden. In mindestens einer Ausführungsform nimmt eine Warp-Schnittstelle auf der CUDA-Ebene 16x16 große Matrizen an, die alle 32 Threads eines Warp überspannen.
  • In mindestens einer Ausführungsform umfasst jeder SM 2600, ohne darauf beschränkt zu sein, M SFUs 2612, die Sonderfunktionen durchführen (z.B. Attributauswertung, reziproke Quadratwurzel und ähnliches). In mindestens einer Ausführungsform können die SFUs 2612, ohne darauf beschränkt zu sein, eine Baumtraversierungseinheit umfassen, die konfiguriert ist, um eine hierarchische Baumdatenstruktur zu durchlaufen. In mindestens einer Ausführungsform umfassen die SFUs 2612, ohne darauf beschränkt zu sein, eine Textureinheit, die konfiguriert ist, um Texturkarten-Filteroperationen durchzuführen. In mindestens einer Ausführungsform sind die Textureinheiten konfiguriert, um Texturkarten (z.B. eine 2D-Anordnung von Texeln) aus dem Speicher zu laden und Texturkarten abzutasten, um abgetastete Texturwerte zum Gebrauch in Shader-Programmen zu erzeugen, die durch den SM 2600 ausgeführt werden. In mindestens einer Ausführungsform werden Texturkarten in dem gemeinsam genutzten Speicher/L1-Cache-Speicher 2618 gespeichert. In einer Ausführungsform implementieren die Textureinheiten Texturoperationen, wie beispielsweise Filteroperationen, unter Verwendung von Mip-Maps (z.B. Texturkarten von veränderlichem Detaillierungsgrad). In mindestens einer Ausführungsform umfasst jeder SM 2600, ohne darauf beschränkt zu sein, zwei Textureinheiten.
  • In mindestens einer Ausführungsform umfasst jeder SM 2600, ohne darauf beschränkt zu sein, N LSUs 2614, die Lade- und Speicheroperationen zwischen dem gemeinsam genutzten Speicher/L1-Cache-Speicher 2618 und der Registerdatei 2608 implementieren. In mindestens einer Ausführungsform umfasst jeder SM 2600, ohne darauf beschränkt zu sein, ein Zwischenverbindung-Netzwerk 2616, das jede der Funktionseinheiten mit der Registerdatei 2608 und die LSU 2614 mit der Registerdatei 2608 und dem gemeinsam genutzten Speicher/ L1-Cache-Speicher 2618 verbindet. In mindestens einer Ausführungsform ist das Zwischenverbindung-Netzwerk 2616 eine Kreuzschiene, die konfiguriert sein kann, um eine beliebige der Funktionseinheiten mit irgendeinem der Register in der Registerdatei 2608 zu verbinden und die LSUs 2614 mit der Registerdatei 2608 und Speicherstellen in dem gemeinsam genutzten Speicher/L1-Cache-Speicher 2618 zu verbinden.
  • In mindestens einer Ausführungsform ist der gemeinsam benutzte Speicher/L1-Cache-Speicher 2618 eine Anordnung eines On-Chip-Speichers, der Datenspeicherung und Kommunikation zwischen dem SM 2600 und einer Primitiven-Maschine und zwischen Threads in dem SM 2600 ermöglicht. In mindestens einer Ausführungsform umfasst der gemeinsam benutzte Speicher/Ll-Cache-Speicher 2618, ohne darauf beschränkt zu sein, 128KB von Speicherkapazität und ist in dem Pfad von dem SM 2600 zu einer Partitions-Einheit. In mindestens einer Ausführungsform wird der gemeinsam benutzte Speicher/L1-Cache-Speicher 2618 verwendet, um Lese- und Schreibvorgänge zwischenzuspeichern. In mindestens einer Ausführungsform sind ein oder mehrere von dem gemeinsam genutzten Speicher/L1-Cache-Speicher 2618, L2-Cache-Speicher und dem Speicher Hintergrundspeicher.
  • In mindestens einer Ausführungsform stellt ein Kombinieren von Daten-Cache und gemeinsam genutzter Speicherfunktionalität in einem einzigen Speicherblock eine verbesserte Leistung für beide Arten von Speicherzugriffen bereit. In mindestens einer Ausführungsform wird die Kapazität als ein Cache für Programme benutzt oder ist dafür nutzbar, die keinen gemeinsam genutzten Speicher verwenden, wie beispielsweise, wenn ein gemeinsam genutzter Speicher konfiguriert ist, dass er die Hälfte der Kapazität verwendet, und die Textur- und Lade-/Speicher-Operationen die verbleibende Kapazität verwenden können. In mindestens einer Ausführungsform ermöglicht die Integration innerhalb des gemeinsam genutzten Speichers/L1-Cache-Speichers 2618 ermöglicht dem gemeinsam genutzten Speicher/L1-Cache-Speicher 2618 als eine Hochdurchsatzleitung zum Streamen von Daten zu arbeiten, während gleichzeitig ein Zugriff auf häufig wiederverwendete Daten mit hoher Bandbreite und geringer Latenzzeit bereitgestellt wird. In mindestens einer Ausführungsform kann, wenn für Allzweck-Parallelberechnung konfiguriert, im Vergleich mit Graphikverarbeitung eine einfachere Konfiguration verwendet werden. In mindestens einer Ausführungsform werden Festfunktions-GPUs umgangen, wobei ein viel einfacheres Programmiermodell erzeugt wird. In mindestens einer Ausführungsform und in einer Allzweck-Parallelberechnungs-Konfiguration werden Blöcke von Threads von einer Arbeitsverteilungs-Einheit direkt DPCs in mindestens einer Ausführungsform zugewiesen und verteilt. In mindestens einer Ausführungsform führen Threads in einem Block das gemeinsame Programm unter Verwendung einer eindeutigen Thread-ID in einer Berechnung aus, um sicherzustellen, dass jeder Thread unter Verwendung des SM 2600 eindeutige Ergebnisse erzeugt, um das Programm auszuführen und Berechnungen durchzuführen, des gemeinsam genutzten Speicher/L1-Cache-Speichers 2618, um zwischen Threads zu kommunizieren, und der LSU 2614, um einen globalen Speicher durch den gemeinsam genutzten Speicher/L1-Cache-Speicher 2618 und die Speicherpartitions-Einheit zu lesen und zu beschreiben. In mindestens einer Ausführungsform schreibt, wenn für Allzweck-Parallelberechnung konfiguriert, der SM 2600 Befehle, welche die Planer-Einheit 2604 verwenden kann, um neue Arbeit auf DPCs zu starten.
  • In mindestens einer Ausführungsform ist die PPU enthalten in oder gekoppelt mit einem Tischcomputer, einem Laptop-Computer, einem Tablet-Computer, Servern, Supercomputern, einem Smartphone (z.B. einer drahtlosen handgehaltenen Vorrichtung), einem PDA, einer Digitalkamera, einem Fahrzeug, einer Head-Mounted-Display, einer handgehaltenen elektronischen Vorrichtung und mehr. In mindestens einer Ausführungsform ist die PPU auf einem einzelnen Halbleitersubstrat verkörpert. In mindestens einer Ausführungsform ist die PPU in einem SoC zusammen mit einer oder mehreren anderen Vorrichtungen, wie beispielsweise zusätzlichen PPUs, Speicher, einer RISC-CPU, einer MMU, einem Digital/Analog-Wandler („DAC“) und dergleichen enthalten.
  • In mindestens einer Ausführungsform kann die PPU auf einer Graphikkarte enthalten sein, die eine oder mehrere Speichervorrichtungen umfasst. In mindestens einer Ausführungsform kann eine Graphikkarte konfiguriert sein, um sich mit einem PCIe-Schlitz auf einer Hauptplatine eines Desktop-Computers schnittstellenmäßig zu verbinden. In mindestens einer Ausführungsform kann die PPU eine integrierte GPU („iGPU“) sein, die in dem Chipsatz einer Hauptplatine enthalten ist.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 26 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 26 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 26 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • Software-Konstruktionen für Allzweckberechnungen
  • Die folgenden Figuren legen, ohne darauf beschränkt zu sein, beispielhafte Softwarekonstrukte zum Implementieren mindestens einer Ausführungsform dar.
  • 27 veranschaulicht einen Softwarestapel einer Programmierplattform gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist eine Programmierplattform ein Plattform zum wirksamen Einsetzen von Hardware auf einem Rechensystem, um Rechenaufgaben zu beschleunigen. Eine Programmierplattform kann in mindestens einer Ausführungsform Softwareentwicklern durch Bibliotheken, Kompiliererdirektiven und/oder Erweiterungen zu Programmiersprachen zugänglich sein. In mindestens einer Ausführungsform kann eine Programmierplattform, ist jedoch nicht darauf beschränkt, CUDA, Radeon Open Compute Plattform („ROCm“), OpenCL (OpenCL™ wird von der Khronos Gruppe entwickelt), SYCL oder Intel One API sein.
  • In mindestens einer Ausführungsform stellt ein Softwarestapel 2700 einer Programmierplattform eine Ausführungsumgebung für eine Anwendung 2701 bereit. In mindestens einer Ausführungsform kann die Anwendung 2701 jegliche Computersoftware umfassen, die imstande ist, auf dem Softwarestapel 2700 gestartet zu werden. In mindestens einer Ausführungsform kann die Anwendung 2701 umfassen, ist jedoch nicht darauf beschränkt, eine Anwendung der künstlichen Intelligenz („KI“)/des Maschinenlernens („ML“), eine Anwendung von Hochleistungsrechnen („HPC“), eine virtuelle Desktop-Infrastruktur („VDI“) oder eine Arbeitslast eines Rechenzentrums.
  • In mindestens einer Ausführungsform werden die Anwendung 2701 und der Softwarestapel 2700 auf Hardware 2707 ausgeführt. Die Hardware 2707 kann eine oder mehrere GPUs, CPUs, FPGAs, KI-Maschinen und/oder andere Arten von Rechenvorrichtungen umfassen, die eine Programmierplattform in mindestens einer Ausführungsform unterstützen. In mindestens einer Ausführungsform kann, wie beispielsweise mit CUDA, der Softwarestapel 2700 anbieterspezifisch und lediglich mit Vorrichtungen von bestimmte Anbieter(n) kompatibel sein. In mindestens einer Ausführungsform kann, wie beispielsweise mit OpenCL, der Softwarestapel 2700 mit Vorrichtungen von unterschiedlichen Anbietern verwendet werden. In mindestens einer Ausführungsform umfasst die Hardware 2707 einen Host, der mit einer oder mehreren Vorrichtungen verbunden ist, auf den zugegriffen werden kann, um Rechenaufgaben über Aufrufe einer Anwendungsprogrammierschnittstelle („API“) durchzuführen. In mindestens einer Ausführungsform kann eine Vorrichtung innerhalb der Hardware 2707 eine GPU, eine FPGA, eine KI-Maschine oder eine andere Rechenvorrichtung (die jedoch ebenfalls eine CPU umfassen kann) und ihren Speicher im Gegensatz zu einem Host innerhalb der Hardware 2707 umfassen, der eine CPU (jedoch ebenfalls eine Rechenvorrichtung umfassen kann) und ihren Speicher umfassen kann, jedoch ohne darauf beschränkt zu sein.
  • In mindestens einer Ausführungsform umfasst der Softwarestapel 2700 einer Programmierplattform, ohne darauf beschränkt zu sein, eine Anzahl von Bibliotheken 2703, eine Laufzeit 2705 und einen Vorrichtungskerneltreiber 2706. In mindestens einer Ausführungsform kann jede der Bibliotheken 2703 Daten und einen Programmiercode umfassen, die von Computerprogrammen verwendet werden können und während der Softwareentwicklung wirksam eingesetzt werden. In mindestens einer Ausführungsform können Bibliotheken 2703, ohne jedoch darauf beschränkt zu sein, einen vorab geschriebenen Code und Subroutinen, Klassen, Werte, Typspezifikationen, Konfigurationsdaten, Dokumentation, Hilfedaten und/oder Nachrichtenvorlagen umfassen. In mindestens einer Ausführungsform umfassen Bibliotheken 2703 Funktionen, die zur Ausführung auf eine oder mehrere Arten von Vorrichtungen optimiert sind. In mindestens einer Ausführungsform können Bibliotheken 2703, ohne jedoch darauf beschränkt zu sein, Funktionen zum Durchführen von mathematischen, tiefen Lernens und/oder andere Arten von Operationen auf Vorrichtungen umfassen. In mindestens einer Ausführungsform sind Bibliotheken 2803 entsprechenden APIs 2802 zugeordnet, die eine oder die mehreren APIs umfassen können, die in Bibliotheken 2803 implementierte Funktionen freilegen.
  • In mindestens einer Ausführungsform wird die Anwendung 2701 als Quellcode geschrieben, die in ausführbaren Code kompiliert wird, wie ausführlicher nachstehend in Verbindung mit 32-34 erläutert. In mindestens einer Ausführungsform kann der ausführbare Code der Anwendung 2701 mindestens teilweise auf einer Ausführungsumgebung ausgeführt werden, die durch den Softwarestapel 2700 bereitgestellt wird. In mindestens einer Ausführungsform kann während der Ausführung der Anwendung 2701 ein Code erreicht werden, der im Gegensatz zu einem Host auf einer Vorrichtung ausgeführt werden muss. In einem derartigen Fall kann in mindestens einer Ausführungsform die Laufzeit 2705 aufgerufen werden, um den erforderlichen Code auf die Vorrichtung zu laden und zu starten. In mindestens einer Ausführungsform kann die Laufzeit 2705 jegliches technisch machbare Laufzeitsystem umfassen, das imstande ist, die Ausführung der Anwendung 2701 zu unterstützen.
  • In mindestens einer Ausführungsform wird die Laufzeit 2705 als eine oder mehrere Laufzeitbibliotheken implementiert, die entsprechenden APIs zugeordnet sind, die als API(s) 2704 gezeigt werden. Eine oder mehrere derartiger Laufzeitbibliotheken kann unter anderem, ohne darauf beschränkt zu sein, Funktionen zur Speicherverwaltung, Ausführungssteuerung, Vorrichtungsverwaltung, Fehlerbehandlung und/oder Synchronisierung in mindestens einer Ausführungsform umfassen. In mindestens einer Ausführungsform können die Speicherverwaltungsfunktionen, ohne jedoch darauf beschränkt zu sein, Funktionen umfassen, um den Vorrichtungsspeicher zuzuteilen, freizugeben und zu kopieren, sowie auch Daten zwischen dem Host-Speicher und dem Vorrichtungsspeicher zu übertragen. In mindestens einer Ausführungsform können Ausführungssteuerfunktionen, ohne jedoch darauf beschränkt zu sein, Funktionen umfassen, um eine Funktion (manchmal als ein „Kernel“ bezeichnet, wenn eine Funktion eine von einem Host aufrufbare globale Funktion ist) auf einer Vorrichtung zu starten und Attributwerte in einem von einer Laufzeitbibliothek unterhaltenen Puffer für eine gegebene Funktion einzustellen, die auf einer Vorrichtung auszuführen ist.
  • In mindestens einer Ausführungsform Laufzeitbibliotheken und entsprechende API(s) 2704 können in jeglicher technisch machbaren Art und Weise implementiert werden. In mindestens einer Ausführungsform kann eine (oder eine beliebige Anzahl von) API einen Satz von Funktionen auf niedriger Ebene zur feinkörnigen Steuerung einer Vorrichtung freilegen, während eine andere (oder eine beliebige Anzahl von) API einen Satz höherer Ebene derartiger Funktionen freilegen kann. In mindestens einer Ausführungsform kann eine Laufzeit-API hoher Ebene auf einer API niedriger Ebene aufgebaut sein. In mindestens einer Ausführungsform können eine oder mehrere Laufzeit-APIs sprachenspezifische APIs sein, die über eine sprachunabhängige Laufzeit-API geschichtet sind.
  • In mindestens einer Ausführungsform ist der Vorrichtungskerneltreiber 2706 konfiguriert, um eine Kommunikation mit einer zugrundeliegenden Vorrichtung zu erleichtern. In mindestens einer Ausführungsform kann der Vorrichtungskerneltreiber Funktionalitäten auf niedriger Ebene bereitstellen, auf die sich APIs, wie beispielsweise API(s) 2704, und/oder andere Software stützen. In mindestens einer Ausführungsform kann der Vorrichtungskerneltreiber 2706 konfiguriert sein, um einen Code einer Zwischendarstellung (Intermediate Code; „IR“) in Binärcode zur Laufzeit zu kompilieren. Für CUDA kann der Vorrichtungskerneltreiber 2706 einen Parallel Thread Execution („PTX“) IR-Code, der nicht Hardware-spezifisch ist, in Binärcode für eine spezifische Zielvorrichtung zur Laufzeit kompilieren (mit Caching von kompilierten Binärcode), der manchmal ebenfalls als „finalisierender“ Code bezeichnet wird, in mindestens einer Ausführungsform. Dabei kann in mindestens einer Ausführungsform erlaubt sein, dass der finalisierte Code auf einer Zielvorrichtung laufen kann, was nicht existieren würde, wenn der Quellcode ursprünglich in PTX-Code kompiliert worden wäre. Alternativ kann in mindestens einer Ausführungsform der Vorrichtung-Quellcode in Binärcode offline kompiliert werden, ohne zu erfordern, dass der Vorrichtungskerneltreiber 2706 den IR-Code zur Laufzeit kompiliert.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 27 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 27 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 27 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 28 veranschaulicht eine CUDA-Implementierung des Softwarestapels 2700 von 27 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst ein CUDA-Softwarestapel 2800, der auf dem eine Anwendung 2801 gestartet werden kann, CUDA-Bibliotheken 2803, eine CUDA-Laufzeit 2805, einen CUDA-Treiber 2807 und einen Vorrichtungskerneltreiber 2808. In mindestens einer Ausführungsform wird der CUDA-Softwarestapel 2800 auf Hardware 2809 ausgeführt, die eine GPU umfassen kann, die CUDA unterstützt und von NVIDIA Corporation, Santa Clara, CA, entwickelt wird.
  • In mindestens einer Ausführungsform können die Anwendung 2801, die CUDA-Laufzeit 2805 und die Vorrichtungskerneltreiber 2808 jeweils ähnliche Funktionalitäten wie die Anwendung 2701, die Laufzeit 2705 und der Vorrichtungskerneltreiber 2706 durchführen, die oben in Verbindung mit 27 beschrieben sind. In mindestens einer Ausführungsform umfasst der CUDA-Treiber 2807 eine Bibliothek (libcuda.so), die eine CUDA-Treiber-API 2806 implementiert. Ähnliche wie eine CUDA-Laufzeit-API 2804, die von einer CUDA-Laufzeitbibliothek (cudart) implementiert wird, kann die CUDA-Treiber-API 2806, ohne darauf beschränkt zu sein, Funktionen zur Speicherverwaltung, Ausführungssteuerung, Vorrichtungsverwaltung, Fehlerbehandlung, Synchronisierung und/oder Graphikinteroperabilität unter anderem in mindestens einer Ausführungsform freilegen. In mindestens einer Ausführungsform unterscheidet sich die CUDA-Treiber-API 2806 von der CUDA-Laufzeit-API 2804 dadurch, dass die CUDA-Laufzeit-API 2804 die Vorrichtungscodeverwaltung durch Bereitstellen impliziter Initialisierung, Kontext(analog zu einem Prozess)-Verwaltung und Modul(analog zu dynamisch geladenen Bibliotheken)-Verwaltung vereinfacht. Im Gegensatz zu der CUDA-Laufzeit-API 2804 hoher Ebene ist die CUDA-Treiber-API 2806 eine API niedriger Ebene, die in mindestens einer Ausführungsform eine feinkörnigere Steuerung der Vorrichtung insbesondere mit Bezug auf Kontexte und Modulladen bereitstellt. In mindestens einer Ausführungsform kann die CUDA-Treiber-API 2806 Funktionen zur Kontextverwaltung freilegen, die nicht von der CUDA-Laufzeit-API 2804 freigelegt werden. In mindestens einer Ausführungsform ist die CUDA-Treiber-API 2806 ebenfalls sprachunabhängig und unterstützt z.B. OpenCL zusätzlich zu der CUDA-Laufzeit-API 2804. Ferner können in mindestens einer Ausführungsform, Entwicklungsbibliotheken, einschließlich der CUDA-Laufzeit 2805, als getrennt von Treiberkomponenten betrachtet werden, die Benutzer-Modus CUDA-Treiber 2807 und Kernel-Modus Vorrichtungstreiber 2808 umfassen (ebenfalls manchmal als ein „Anzeigen“-Treiber bezeichnet).
  • In mindestens einer Ausführungsform können CUDA-Bibliotheken 2803, ohne jedoch darauf beschränkt zu sein, mathematische Bibliotheken, Bibliotheken mit tiefem Lernen, Parallelalgorithmusbibliotheken und/oder Signal/Bild/Video-Verarbeitungsbibliotheken umfassen, die parallele Rechenanwendungen, wie beispielsweise die Anwendung 2801, benutzen können. In mindestens einer Ausführungsform können CUDA-Bibliotheken 2803 mathematische Bibliotheken, wie beispielsweise eine cuBLAS-Bibliothek, die eine Implementierung von Basic Linear Algebra Unterprogramme („BLAS“) zum Durchführen von Operationen der linearen Algebra ist, eine cuFFT-Bibliothek zum Berechnen schneller Fouriertransformationen („FFTs“) und eine cuRAND-Bibliothek zum Erzeugen von Zufallszahlen unter anderem umfassen. In mindestens einer Ausführungsform können CUDA-Bibliotheken 2803 Bibliotheken mit tiefem Lernen, wie beispielsweise eine cuDNN-Bibliothek von Primitiven für tiefe neuronale Netzwerke und eine TensorRT-Plattform für Inferenz tiefen Lernens hoher Leistung unter anderem umfassen.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 28 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 28 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 28 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 29 veranschaulicht eine ROCm-Implementierung des Softwarestapels 2700 von 27 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst ein ROCm-Softwarestapel 2900, auf dem eine Anwendung 2901 gestartet werden kann, eine Sprachenlaufzeit 2903, eine Systemlaufzeit 2905, einen Thunk 2907, einen ROCm-Kerneltreiber 2908 und eine Hardware 2909. In mindestens einer Ausführungsform wird der ROCm-Softwarestapel 2900 auf Hardware 2909 ausgeführt, die eine GPU umfassen kann, die ROCm unterstützt und von AMD Corporation, Santa Clara, CA, entwickelt wird.
  • In mindestens einer Ausführungsform kann die Anwendung 2901 ähnliche Funktionalitäten wie die oben in Verbindung mit 27 erläuterte Anwendung 2701 durchführen. Außerdem können in mindestens einer Ausführungsform die Sprachenlaufzeit 2903 und Systemlaufzeit 2905 ähnliche Funktionalitäten wie die oben in Verbindung mit 27 erläuterte Laufzeit 2705 durchführen. In mindestens einer Ausführungsform unterscheiden sich die Sprachenlaufzeit 2903 und Systemlaufzeit 2905 dadurch, dass die Systemlaufzeit 2905 eine sprachunabhängige Laufzeit ist, die eine ROCr-Systemlaufzeit-API 2904 implementiert und eine Heterogeneous System Architecture („HAS“) Laufzeit-API benutzt. In mindestens einer Ausführungsform ist die HAS-Laufzeit-API eine dünne Benutzer-Modus-API, die Schnittstellen freilegt, um auf eine AMD-GPU zuzugreifen und mit dieser wechselzuwirken, die unter anderem Funktionen zur Speicherverwaltung, Ausführungssteuerung über architektierte Abfertigung von Kernels, Fehlerbehandlung, System- und Agenteninformation und Laufzeitinitialisierung und - abschaltung umfasst. Im Gegensatz zu der Systemlaufzeit 2905 ist die Sprachenlaufzeit 2903 eine Implementierung einer sprachenspezifischen Laufzeit-API 2902, die auf der ROCr-Systemlaufzeit-API 2904 in mindestens einer Ausführungsform geschichtet ist. In mindestens einer Ausführungsform kann die Sprachenlaufzeit-API unter anderem umfassen, ist jedoch nicht darauf beschränkt, eine Heterogeneous Compute Interface for Portability („HIP“) Sprachenlaufzeit-API, eine Heterogeneous Compute Compiler („HCC“) Sprachenlaufzeit-API oder eine OpenCL-API. Insbesondere ist die HIP-Sprache eine Erweiterung der C++ Programmiersprache mit funktionsmäßig ähnliche Versionen von CUDA-Mechanismen, und umfasst in mindestens einer Ausführungsform Funktionen einer HIP-Sprachenlaufzeit-API, die ähnlich zu denen der CUDA-Laufzeit-API 2804 sind, die oben in Verbindung mit 28 erläutert werden, wie beispielsweise unter anderem Funktionen zur Speicherverwaltung, Ausführungssteuerung, Vorrichtungsverwaltung, Fehlerbehandlung und Synchronisierung.
  • In mindestens einer Ausführungsform ist ein Thunk (ROCt) 2907 eine Schnittstelle, die verwendet wird, um mit dem zugrundeliegenden ROCm-Treiber 2908 wechselzuwirken. In mindestens einer Ausführungsform ist der ROCm-Treiber 2908 ein ROCk-Treiber, der eine Kombination eines AMDGPU-Treibers und eines HAS-Kerneltreibers (amdkfd) ist. In mindestens einer Ausführungsform ist der AMDGPU-Treiber ein Vorrichtungskerneltreiber für von AMD entwickelte GPUs, die ähnliche Funktionalitäten wie der Vorrichtungskerneltreiber 2706 durchführt, der oben in Verbindung mit 27 erläutert ist. In mindestens einer Ausführungsform ist der HAS-Kerneltreiber ein Treiber, der unterschiedlichen Arten von Prozessoren erlaubt, Systemressourcen wirksamer über Hardwaremerkmale gemeinsam zu nutzen.
  • In mindestens einer Ausführungsform können verschiedene Bibliotheken (nicht gezeigt) in dem ROCm-Softwarestapel 2900 über der Sprachenlaufzeit 2903 umfasst sein und Funktionalitätsähnlichkeit zu CUDA-Bibliotheken 2803 bereitstellen, die oben in Verbindung mit 28 erläutert werden. In mindestens einer Ausführungsform können verschiedenen Bibliotheken, jedoch ohne darauf beschränkt zu sein, unter anderem eine mathematische Bibliothek, eine Bibliotheken für tiefes Lernen und/oder andere Bibliotheken umfassen, wie beispielsweise eine hipBLAS Bibliothek, die Funktionen ähnliche zu denen von CUDA cuBLAS implementiert, ein rocFFT Bibliothek zum Berechnen von FFTs, die ähnlich zu CUDA cuFFT ist.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 29 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 29 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 29 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 30 veranschaulicht eine OpenCL-Implementierung des Softwarestapels 2700 von 27 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst ein OpenCL-Softwarestapel 3000, auf dem eine Anwendung 3001 gestartet werden kann, ein OpenCL-Framework 3005, eine OpenCL-Laufzeit 3006 und einen Treiber 3007. In mindestens einer Ausführungsform wird der OpenCL-Softwarestapel 3000 auf Hardware 2809 ausgeführt, die nicht anbieterspezifisch ist. Da OpenCL von Vorrichtungen unterstützt wird, die von unterschiedlichen Anbietern entwickelt werden, können in mindestens einer Ausführungsform spezifische OpenCL-Treiber erforderlich sein, die mit Hardware von derartigen Anbietern zusammenarbeiten.
  • In mindestens einer Ausführungsform können die Anwendung 3001, die OpenCL-Laufzeit 3006, der Vorrichtungskerneltreiber 3007 und die Hardware 3008 jeweils ähnliche Funktionalitäten wie die Anwendung 2701, die Laufzeit 2705, der Vorrichtungskerneltreiber 2706 und die Hardware 2707 durchführen, die oben in Verbindung mit 27 erläutert sind. In mindestens einer Ausführungsform umfasst die Anwendung 3001 ferner einen OpenCL-Kernel 3002 mit einem Code, der auf einer Vorrichtung auszuführen ist.
  • In mindestens einer Ausführungsform definiert OpenCL eine „Plattform“, die es einem Host ermöglicht, mit dem Host verbundene Vorrichtungen zu steuern. In mindestens einer Ausführungsform stellt ein OpenCL-Framework eine Plattformschicht-API und eine Laufzeit-API bereit, die als Plattform-API 3003 und Laufzeit-API 3005 gezeigt werden. In mindestens einer Ausführungsform verwendet die Laufzeit-API 3005 Kontexte, um die Ausführung von Kernels auf Vorrichtungen zu verwalten. In mindestens einer Ausführungsform kann jede gekennzeichnete Vorrichtung einem jeweiligen Kontext zugeordnet sein, welche die Laufzeit-API 3005 unter anderem verwenden kann, um Befehlswarteschlangen, Programmobjekte und Kernelobjekten zu verwalten und Speicherobjekte für diese Vorrichtung gemeinsam zu nutzen. In mindestens einer Ausführungsform legt die Plattform-API 3003 Funktionen frei, die erlauben, dass Vorrichtung-Kontexte verwendet werden können, um unter anderem Vorrichtungen auszuwählen und zu initialisieren, um Arbeit an Vorrichtungen über Befehlswarteschlangen zu liefern und Datenübertragung an und von Vorrichtungen zu ermöglichen. Außerdem stellt das OpenCL Framework verschiedene eingebaute Funktionen (nicht gezeigt) bereit, die unter anderem Mathematikfunktionen, relationale Funktionen und Bildverarbeitungsfunktionenin mindestens einer Ausführungsform umfassen.
  • In mindestens einer Ausführungsform ist ein Kompilierer 3004 ebenfalls in dem OpenCL-Framework 3005 enthalten. Der Quellcode kann offline vor dem Ausführen einer Anwendung oder online während der Ausführung einer Anwendung in mindestens einer Ausführungsform kompiliert werden. Im Gegensatz zu CUDA und ROCm können OpenCL-Anwendungen in mindestens einer Ausführungsform online durch den Kompilierer 3004 kompiliert werden, der enthalten ist, um für eine beliebige Anzahl von Kompilierern repräsentativ zu sein, die verwendet werden können, um Quellcode und/oder IR-Code, wie beispielsweise Standard Portable Intermediate Representation („SPIR-V“) Code, in Binärcode zu kompilieren. Alternativ können in mindestens einer Ausführungsform OpenCL-Anwendungen offline vor der Ausführung derartiger Anwendungen kompiliert werden.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 30 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 30 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 30 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 31 veranschaulicht Software, die durch eine Programmierplattform unterstützt wird, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist eine Programmierplattform 3104 konfiguriert, um verschiedene Programmiermodelle 3103, Middlewares und/oder Bibliotheken 3102 und Frameworks 3101 zu unterstützen, auf die sich eine Anwendung 3100 stützen kann. In mindestens einer Ausführungsform kann die Anwendung 3100 eine KI/ML-Anwendung sein, die beispielsweise unter Verwendung eines Framework eines tiefen Lernens implementiert werden kann, wie beispielsweise MXNet, PyTorch oder TensorFlow, die sich auf Bibliotheken stützen können, wie beispielsweise cuDNN, NVIDIA Collective Communications Library („NCCL“) und/oder NVIDA Developer Data Loading Library („DALI“) CUDA-Bibliotheken, um beschleunigtes Rechnen auf zugrundeliegender Hardware bereitzustellen.
  • 31 veranschaulicht Software, die von einer Programmierplattform unterstützt wird, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist eine Programmierplattform 3104 konfiguriert, um verschiedene Programmiermodelle 3103, Middlewares und/oder Bibliotheken 3102 und Frameworks 3101 zu unterstützen, auf die sich eine Anwendung 3100 stützen kann. In mindestens einer Ausführungsform kann die Anwendung 3100 eine KI/ML-Anwendung sein, die beispielsweise unter Verwendung eines Framework für tiefes Lernen implementiert werden kann, wie beispielsweise MXNet, PyTorch oder TensorFlow, das sich auf Bibliotheken stützen kann, wie beispielsweise cuDNN, NVIDIA Collective Communications Bibliothek („NCCL“) und/oder NVIDA Developer Data Loading Library („DALI“) CUDA-Bibliotheken, um beschleunigtes Rechnen auf zugrundeliegender Hardware bereitzustellen.
  • In mindestens einer Ausführungsform kann die Programmierplattform 3104 einer von einer CUDA-, ROCm- oder OpenCL-Plattform sein, die oben jeweils in Verbindung mit 28, 29 und 30 beschrieben sind. In mindestens einer Ausführungsform unterstützt die Programmierplattform 3104 mehrere Programmiermodelle 3103, die Abstraktionen eines zugrundeliegenden Rechensystems sind, das Ausdrücke von Algorithmen und Datenstrukturen erlaubt. In mindestens einer Ausführungsform können die Programmiermodelle 3103 Merkmale von zugrundeliegender Hardware freilegen, um Leistung in mindestens einer Ausführungsform zu verbessern. In mindestens einer Ausführungsform können die Programmiermodelle 3103, ohne jedoch darauf beschränkt zu sein, CUDA, HIP, OpenCL, C++ Accelerated Massive Parallelism („C++AMP“), Open Multi-Processing („OpenMP“), Open Accelerators („OpenACC“) und/oder Vulcan Compute umfassen.
  • In mindestens einer Ausführungsform stellen Bibliotheken und/oder Middlewares 3102 Implementierungen von Abstraktionen von Programmiermodellen 3104 bereit. In mindestens einer Ausführungsform umfassen derartige Bibliotheken Daten und einen Programmiercode, die von Computerprogrammen verwendet und während der Softwareentwicklung wirksam eingesetzt werden können. In mindestens einer Ausführungsform umfassen derartige Middlewares Software, die Dienste an Anwendungen über diejenigen hinaus bereitstellen, die von der Programmierplattform 3104 verfügbar sind. In mindestens einer Ausführungsform können Bibliotheken und/oder Middlewares 3102 cuBLAS, cuFFT, cuRAND und andere CUDA-Bibliotheken oder rocBLAS, rocFFT, rocRAND und andere ROCm-Bibliotheken umfassen, jedoch ohne darauf beschränkt zu sein. Außerdem können in mindestens einer Ausführungsform Bibliotheken und/oder Middlewares 3102 NCCL und ROCm Communication Collectives Library („RCCL“) Bibliotheken, die Kommunikationsroutinen für GPUs, eine MIOpen-Bibliothek zur Beschleunigung von tiefem Lernen und/oder eine Eigen Bibliothek für lineare Algebra, Matrix- und Vektoroperationen, geometrische Transformationen, numerische Löser und verwandte Algorithmen umfassen.
  • In mindestens einer Ausführungsform hängen Anwendung-Frameworks 3101 von Bibliotheken und/oder Middlewares 3102 ab. In mindestens einer Ausführungsform ist jede der Anwendung-Frameworks 3101 ist Software-Framework, das verwendet wird, um eine Standardstruktur von Anwendungssoftware zu implementieren. Zurückkehrend zu dem oben erläuternden KI/ML-Beispiel kann eine KI/ML-Anwendung in mindestens einer Ausführungsform unter Verwendung eines Framework, wie beispielsweise Caffe, Caffe2, TensorFlow, Keras, PyTorch oder MxNet Frameworks für tiefes Lernen, implementiert werden.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 31 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 31 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 31 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 32 veranschaulicht das Kompilieren von Code, das auf einer der Programmierplattformen von 27-30 auszuführen ist, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform empfängt ein Kompilierer 3201 Quellcode 3200, der sowohl Host-Code sowie auch Vorrichtungscode umfasst. In mindestens einer Ausführungsform, ist der Kompilierer 3201 konfiguriert, um den Quellcode 3200 in Host-ausführbaren Code 3202 zur Ausführung auf einem Host und Vorrichtung-ausführbaren Code 3203 zur Ausführung auf einer Vorrichtung zu konvertieren. In mindestens einer Ausführungsformkann kann der Quellcode 3200 entweder offline vor der Ausführung einer Anwendung oder online während Ausführung einer Anwendung kompiliert werden.
  • In mindestens einer Ausführungsform kann der Quellcode 3200 Code in jeder Programmiersprache umfassen, die durch den Kompilierer 3201 unterstützt wird, wie beispielsweise C++, C, Fortran usw. In mindestens einer Ausführungsform kann der Quellcode 3200 in einer einzigen Quelldatei enthalten sein, die eine Mischung aus Host-Code und Vorrichtung-Code aufweist, wobei Orte des Vorrichtungscodes darin angegeben werden. In mindestens einer Ausführungsform kann eine einzige Quelldatei eine .cu Datei sein, die CUDA-Code oder eine .hip.cpp Datei umfasst, die HIP-Code umfasst. Alternativ kann in mindestens einer Ausführungsform der Quellcode 3200 mehrere Quellcodedateien und keine einzige Quelldatei umfassen, in der Host-Code und Vorrichtungscode getrennt sind.
  • In mindestens einer Ausführungsform ist der Kompilierer 3201 konfiguriert, um den Quellcode 3200 in Host-ausführbaren Code 3202 zur Ausführung auf einem Host und Vorrichtung-ausführbaren Code 3203 zur Ausführung auf einer Vorrichtung zu kompilieren. In mindestens einer Ausführungsform führt der Kompilierer 3201 Operationen durch, die Parsen von Quellcode 3200 in einen abstrakten Systembaum (Abstract System Tree; AST), Durchführen von Optimierungen und Erzeugen von ausführbarem Code umfassen. In mindestens einer Ausführungsform, bei welcher der Quellcode 3200 eine einzige Quelldatei umfasst, kann der Kompilierer 3201 den Vorrichtungscode von Host-Code in eine derartige einzige Quelldatei trennen, Vorrichtungscode und Host-Code jeweils in Vorrichtung-ausführbaren Code 3203 und Host-ausführbaren Code 3202 kompilieren, und Vorrichtung-ausführbaren Code 3203 und Host-ausführbaren Code 3202 zusammen in einer einzigen Datei verbinden, wie ausführlicher nachstehend mit Bezug auf 33 erläutert.
  • In mindestens einer Ausführungsform können der Host-ausführbare Code 3202 und der Vorrichtung-ausführbare Code 3203 in jedem geeigneten Format, wie beispielsweise Binärcode und/oder IR-Code, sein. In mindestens einer Ausführungsform kann im Fall von CUDA der Host-ausführbare Code 3202 nativen Objektcode umfassen und der Vorrichtung-ausführbaren Code 3203 kann Code in PTX-Zwischendarstellung umfassen. Im Fall von ROCm kann sowohl der Host-ausführbare Code 3202 als auch der Vorrichtung-ausführbare Code 3203 einen Zielbinärcode in mindestens einer Ausführungsform umfassen.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 32 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 32 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 32 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 33 ist eine ausführlichere Veranschaulichung des Kompilierens von Code, das auf einer der Programmierplattformen von 27-30 auszuführen ist, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist ein Kompilierer 3301 konfiguriert, um den Quellcode 3300 zu empfangen, den Quellcode 3300 zu kompilieren und eine ausführbare Datei 3308 auszugeben. In mindestens einer Ausführungsform ist der Quellcode 3300 eine einzige Quelldatei, wie beispielsweise eine .cu Datei, eine .hip.cpp Datei oder eine Datei in einem anderen Format, die sowohl Host- als auch Vorrichtung-Code umfasst. In mindestens einer Ausführungsform kann der Kompilierer 3301, ohne jedoch darauf beschränkt zu sein, ein NVIDIA CUDA-Kompilierer („NVCC“) zum Kompilieren eines CUDA-Codes in .cu Dateien oder ein HCC-Kompilierer zum Kompilieren eines HIP-Codes in .hip.cpp Dateien sein.
  • In mindestens einer Ausführungsform umfasst der Kompilierer 3301 ein Kompilierer-Frontend 3302, einen Host-Kompilierer 3305, einen Vorrichtung-Kompilierer 3306 und einen Linker 3309. In mindestens einer Ausführungsform ist das Kompilierer-Frontend 3302 konfiguriert, um den Vorrichtungscode 3304 von dem Host-Code 3303 in Quellcode 3300 zu trennen. In mindestens einer Ausführungsform wird der Vorrichtungscode 3304 durch den Vorrichtung-Kompilierer 3306 in Vorrichtung-ausführbaren Code 3308 kompiliert, der, wie beschrieben, Binärcode oder IR-Code umfassen kann. Getrennt davon wird der Host-Code 3303 mindestens einer Ausführungsform durch den Host-Kompilierer 3305 in Host-ausführbaren Code 3307 kompiliert. Für NVCC kann der Host-Kompilierer 3305 ein Allzweck C/C++ Kompilierer sein, ohne jedoch darauf beschränkt zu sein, der nativen Objektcode ausgibt, während der Vorrichtung-Kompilierer 3306 ein Low Level Virtual Machine („LLVM“) basierter Kompilierer sein kann, wobei er jedoch nicht darauf beschränkt ist, der eine LLVM-Kompilierer-Infrastruktur gabelt und PTX-Code oder Binärcode in mindestens einer Ausführungsform ausgibt. Für den HCC können sowohl der Host-Kompilierer 3305 als auch der Vorrichtung-Kompilierer 3306, ohne jedoch darauf beschränkt zu sein, LLVM-basierte Kompilierer sein, die einen Zielbinärcode in mindestens einer Ausführungsform ausgeben.
  • Anschließend an das Kompilieren des Quellcodes 3300 in Host-ausführbaren Code 3307 und Vorrichtung-ausführbaren Code 3308 verbindet der Linker 3309 in mindestens einer Ausführungsform den Host- und Vorrichtung-ausführbaren Code 3307 und 3308 zusammen in eine ausführbare Datei 3310. In mindestens einer Ausführungsform können der native Objektcode für einen Host und PTX oder Binärcode für eine Vorrichtung zusammen in einer Datei mit ausführbaren und verknüpfbaren Format (Executable and Linkable Format; „ELF“) verbunden werden, das ein Containerformat ist, das verwendet wird, um Objektcode zu speichern.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 33 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 33 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 33 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 34 veranschaulicht das Übersetzen von Quellcode vor dem Kompilieren von Quellcode gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird der Quellcode 3400 durch ein Übersetzungswerkzeug 3401 geleitet, das den Quellcode 3400 in übersetzten Quellcode 3402 übersetzt. In mindestens einer Ausführungsform wird ein Kompilierer 3403 verwendet, um den übersetzten Quellcode 3402 in Host-ausführbaren Code 3404 und Vorrichtung-ausführbaren Code 3405 in einem Prozess zu kompilieren, welcher der Kompilierung von Quellcode 3200 durch den Kompilierer 3201 in Host-ausführbaren Code 3202 und Vorrichtung-ausführbaren 3203 ähnlich ist, wie oben in Verbindung mit 32 erläutert.
  • In mindestens einer Ausführungsform wird eine Übersetzung, die von dem Übersetzungswerkzeug 3401 durchgeführt wird, verwendet, um den Quellcode 3400 zur Ausführung in eine unterschiedliche Umgebung als die zu portieren, bei der ursprünglich beabsichtigt war, ihn auszuführen. In mindestens einer Ausführungsform kann das Übersetzungswerkzeug 3401 einen HIP-Übersetzer umfassen, ohne jedoch darauf beschränkt zu sein, der verwendet wird, um den CUDA-Code zu „hipify“, der für eine CUDA-Plattform in HIP-Code bestimmt ist, der auf einer ROCm-Plattform kompiliert und ausgeführt werden kann. In mindestens einer Ausführungsform kann die Übersetzung des Quellcodes 3400 Parsen des Quellcodes 3400 und Konvertieren von Aufrufen an API(s), die durch ein Programmiermodel (z.B. CUDA) bereitgestellt werden, in entsprechende Aufrufen an API(s) umfassen, die durch ein anderes Programmiermodel (z.B. HIP) bereitgestellt werden, wie nachstehend in Verbindung mit 35A-36 ausführlicher erläutert. Zurückkehrend zu dem Beispiel des „hipifying“ des CUDA-Codes, können Aufrufen an die CUDA-Laufzeit-API, CUDA-Treiber-API und/oder CUDA-Bibliotheken in mindestens einer Ausführungsform in entsprechende HIP-API-Aufrufe konvertiert werden. In mindestens einer Ausführungsform können automatisierte Übersetzungen, die von dem Übersetzungswerkzeug 3401 durchgeführt werden, manchmal unvollständig sein und zusätzlichen manuellen Aufwand erfordern, um den Quellcode 3400 vollständig zu portieren.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 34 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 34 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 34 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • Konfigurieren der GPUs für Allzweckberechnungen
  • Die folgenden Figuren legen, ohne darauf beschränkt zu sein, beispielhafte Architekturen zum Kompilieren und Ausführen des Berechnens von Quellcode dar, gemäß mindestens einer Ausführungsform.
  • 35A veranschaulicht ein System 3500, das konfiguriert ist, um den CUDA-Quellcode 3510 unter Verwendung unterschiedlichen Arten von Verarbeitungseinheiten zu kompilieren und auszuführen, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst das System 3500, ohne darauf beschränkt zu sein, den CUDA-Quellcode 3510, einen CUDA-Kompilierer 3550, einen Host-ausführbaren Code 3570(1), einen Host-ausführbaren Code 3570(2), einen CUDA-Vorrichtung-ausführbaren Code 3584, eine CPU 3590, eine CUDA-aktivierte GPU 3594, eine GPU 3592, ein CUDA-in-HIP-Übersetzungswerkzeug 3520, einen HIP-Quellcode 3530, einen HIP-Kompilierertreiber 3540, einen HCC 3560 und einen HCC-Vorrichtung-ausführbaren Code 3582.
  • In mindestens einer Ausführungsform ist der CUDA-Quellcode 3510 eine Sammlung von menschenlesbaren Code in einer CUDA-Programmiersprache. In mindestens einer Ausführungsform ist der CUDA-Code ein menschenlesbarer Code in einer CUDA-Programmiersprache. In mindestens einer Ausführungsform ist eine CUDA-Programmiersprache eine Erweiterung der C++ Programmiersprache, die, ohne darauf beschränkt zu sein, Mechanismen umfasst, um Vorrichtungscode zu definieren und zwischen Vorrichtungscode und Host-Code zu unterscheiden. In mindestens einer Ausführungsform ist der Vorrichtungscode ein Quellcode, der, nach Kompilierung, auf einer Vorrichtung parallel ausführbar ist. In mindestens einer Ausführungsform kann eine Vorrichtung ein Prozessor sein, der für parallele Anweisungsverarbeitung optimiert ist, wie beispielsweise die CUDA-aktivierte GPU 3590, die GPU 35192 oder eine andere GPGPU usw. In mindestens einer Ausführungsform ist der Host-Code-Quellcode der, der nach Kompilierung auf einem Host ausführbar iss. In mindestens einer Ausführungsform ist ein Host ein Prozessor, wie beispielsweise die CPU 3590, die zur sequenziellen Anweisungsverarbeitung optimiert ist.
  • In mindestens einer Ausführungsform umfasst der CUDA-Quellcode 3510, ohne darauf beschränkt zu sein, eine beliebige Anzahl (einschließlich null) von globalen Funktionen 3512, eine beliebige Anzahl (einschließlich null) von Vorrichtungsfunktionen 3514, eine beliebige Anzahl (einschließlich null) von Host-Funktionen 3516 und eine beliebige Anzahl (einschließlich null) von Host/Vorrichtung-Funktionen 3518. In mindestens einer Ausführungsform können globale Funktionen 3512, Vorrichtung-Funktionen 3514, Host-Funktionen 3516 und Host/Vorrichtung-Funktionen 3518 in CUDA-Quellcode 3510 gemischt werden. In mindestens einer Ausführungsform ist jede der globalen Funktionen 3512 auf einer Vorrichtung ausführbar und von einem Host aufrufbar. In mindestens einer Ausführungsform können daher eine oder mehrere globale Funktionen 3512 als Eintrittspunkte in eine Vorrichtung wirken. In mindestens einer Ausführungsform ist jede der globalen Funktionen 3512 ein Kernel. In mindestens einer Ausführungsform und in einer als dynamische Parallelität bekannte Technik definieren eine oder mehrere globale Funktionen 3512 einen Kernel, der auf einer Vorrichtung ausführbar ist und von einer derartigen Vorrichtung aufrufbar ist. In mindestens einer Ausführungsform wird ein Kernel N (wobei N eine beliebige positive Ganzzahl ist) Male parallel durch N unterschiedliche Threads auf einer Vorrichtung während der Ausführung ausgeführt.
  • In mindestens einer Ausführungsform wird jede der Vorrichtungsfunktionen 3514 auf einer Vorrichtung ausgeführt und ist nur von einer derartigen Vorrichtung aufrufbar. In mindestens einer Ausführungsform wird jede der Host-Funktionen 3516 auf einem Host ausgeführt und ist nur von einem derartigen Host aufrufbar. In mindestens einer Ausführungsform definiert jede der Host/Vorrichtung-Funktionen 3516 sowohl eine Host-Version einer Funktion, die auf einem Host ausführbar und nur von einem derartigen Host aufrufbar ist, als auch ein Vorrichtung-Version der Funktion, die auf einer Vorrichtung ausführbar und nur von einer derartigen Vorrichtung aufrufbar ist.
  • In mindestens einer Ausführungsform kann der CUDA-Quellcode 3510 ebenfalls, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Aufrufen an eine beliebige Anzahl von Funktionen umfassen, die über eine CUDA-Laufzeit-API 3502 definiert sind. In mindestens einer Ausführungsform kann die CUDA-Laufzeit-API 3502, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Funktionen umfassen, die auf einem Host ausgeführt werden, um Vorrichtungsspeicher zuzuteilen und freizugeben, Daten zwischen Host-Speicher und Vorrichtungsspeicher zu übertragen, Systeme mit mehreren Vorrichtungen zu verwalten usw. In mindestens einer Ausführungsform kann der CUDA-Quellcode 3510 ebenfalls eine beliebige Anzahl von Aufrufen an eine beliebige Anzahl von Funktionen umfassen, die in einer beliebigen Anzahl von anderen CUDA-APIs spezifiziert sind. In mindestens einer Ausführungsform kann eine CUDA-API eine beliebige API sein, die zur Verwendung durch den CUDA-Code ausgestaltet ist. In mindestens einer Ausführungsform umfassen CUDA-APIs, ohne darauf beschränkt zu sein, eine CUDA-Laufzeit-API 3502, eine CUDA-Treiber-API, APIs für eine beliebige Anzahl von CUDA-Bibliotheken usw. In mindestens einer Ausführungsform und relativ zu der CUDA-Laufzeit-API 3502 ist ein CUDA-Treiber-API eine API unterer Ebene, die jedoch eine feinkörnigere Steuerung einer Vorrichtung bereitstellt. In mindestens einer Ausführungsform umfassen Beispiele von CUDA-Bibliotheken, ohne darauf beschränkt zu sein, cuBLAS, cuFFT, cuRAND, cuDNN usw.
  • In mindestens einer Ausführungsform kompiliert der CUDA-Kompilierer 3550 den Eingabe-CUDA-Code (z.B. CUDA-Quellcode 3510), um den Host-ausführbaren Code 3570(1) und den CUDA-Vorrichtung-ausführbaren Code 3584 zu erzeugen. In mindestens einer Ausführungsform ist der CUDA-Kompilierer 3550 NVCC. In mindestens einer Ausführungsform ist der Host-ausführbare Code 3570(1) eine kompilierte Version des Host-Codes, der in dem Eingabe-Quellcode enthalten ist, der auf der CPU 3590 ausführbar ist. In mindestens einer Ausführungsform kann die CPU 3590 ein beliebiger Prozessor sein, der für eine sequenzielle Anweisungsverarbeitung optimiert ist.
  • In mindestens einer Ausführungsform ist der CUDA-Vorrichtung-ausführbarer Code 3584 eine kompilierte Version des im Eingabe-Quellcode enthaltenen Vorrichtungscode, der auf der CUDA-aktivierten GPU 3594 ausführbar ist. In mindestens einer Ausführungsform umfasst der CUDA-Vorrichtung-ausführbarer Code 3584, ohne darauf beschränkt zu sein, Binärcode. In mindestens einer Ausführungsform umfasst der CUDA-Vorrichtung-ausführbare Code 3584, ohne darauf beschränkt zu sein, einen IR-Code, wie beispielsweise den PTX-Code, der ferner zur Laufzeit in Binärcode für eine spezifische Zielvorrichtung (z.B. CUDA-aktivierte GPU 3594) durch einen Vorrichtungstreiber kompiliert ist. In mindestens einer Ausführungsform kann die CUDA-aktivierte GPU 3594 ein beliebiger Prozessor sein, der für parallele Anweisungsverarbeitung optimiert ist und der CUDA unterstützt. In mindestens einer Ausführungsform wird die CUDA-aktivierte GPU 3594 von NVIDIA Corporation, Santa Clara, CA, entwickelt.
  • In mindestens einer Ausführungsform ist das CUDA-in-HIP-Übersetzungswerkzeug 3520 konfiguriert, um den CUDA-Quellcode 3510 in einen funktionsmäßig ähnlichen HIP-Quellcode 3530 zu übersetzen. In mindestens einer Ausführungsform ist der HIP-Quellcode 3530 eine Sammlung von menschenlesbaren Code in einer HIP-Programmiersprache. In mindestens einer Ausführungsform ist der HIP-Code ein menschenlesbarer Code in einer HIP-Programmiersprache. In mindestens einer Ausführungsform ist eine HIP-Programmiersprache eine Erweiterung der C++ Programmiersprache, die, ohne darauf beschränkt zu sein, funktionsmäßig ähnliche Versionen von CUDA-Mechanismen umfasst, um Vorrichtungscode zu definieren und zwischen Vorrichtungscode und Host-Code zu unterscheiden. In mindestens einer Ausführungsform kann eine HIP-Programmiersprache eine Teilmenge der Funktionalität einer CUDA-Programmiersprache umfassen. In mindestens einer Ausführungsform umfasst eine HIP-Programmiersprache beispielsweise, ohne darauf beschränkt zu sein, einen Mechanismus(en), um globale Funktionen 3512 zu definieren, wobei einer derartigen HIP-Programmiersprache Unterstützung für dynamische Parallelität fehlen kann, und daher können in HIP-Code definierte globale Funktionen 3512 nur von einem Host aufrufbar sein.
  • In mindestens einer Ausführungsform umfasst der HIP-Quellcode 3530, ohne darauf beschränkt zu sein, eine beliebige Anzahl (einschließlich null) von globalen Funktionen 3512, eine beliebige Anzahl (einschließlich null) von Vorrichtung-Funktionen 3514, eine beliebige Anzahl (einschließlich null) von Host-Funktionen 3516 und eine beliebige Anzahl (einschließlich null) von Host/Vorrichtung-Funktionen 3518. In mindestens einer Ausführungsform kann der HIP-Quellcode 3530 ebenfalls eine beliebige Anzahl von Aufrufen an eine beliebige Anzahl von Funktionen umfassen, die in einer HIP-Laufzeit-API 3532 spezifiziert sind. In mindestens einer Ausführungsform umfasst die HIP-Laufzeit-API 3532, ohne darauf beschränkt zu sein, funktionsmäßig ähnliche Versionen einer Teilmenge von Funktionen, die in der CUDA-Laufzeit-API 3502 enthalten sind. In mindestens einer Ausführungsform kann der HIP-Quellcode 3530 ebenfalls eine beliebige Anzahl von Aufrufen an eine beliebige Anzahl von Funktionen umfassen, die in einer beliebigen Anzahl von anderen HIP-APIs spezifiziert sind. In mindestens einer Ausführungsform kann eine HIP-API eine beliebige API sein, die zum Gebrauch durch HIP-Code und/oder ROCm ausgestaltet ist. In mindestens einer Ausführungsform umfassen HIP-APIs, ohne darauf beschränkt zu sein, eine HIP-Laufzeit-API 3532, einen HIP-Treiber-API, APIs für eine beliebige Anzahl von HIP-Bibliotheken, APIs für eine beliebige Anzahl von ROCm-Bibliotheken usw.
  • In mindestens einer Ausführungsform konvertiert das CUDA-in-HIP-Übersetzungswerkzeug 3520 jeden Kernelaufruf in CUDA-Code von einem CUDA-Syntax in einen HIP-Syntax und konvertiert eine beliebige Anzahl von anderen CUDA-Aufrufen in CUDA-Code in eine beliebige Anzahl von anderen funktionsmäßig ähnliche HIP-Aufrufen. In mindestens einer Ausführungsform ist ein CUDA-Aufruf ein Aufruf an eine Funktion, die in einer CUDA-API spezifiziert ist, und ein HIP-Aufruf ist ein Aufruf an eine in einer HIP-API spezifizierte Funktion. In mindestens einer Ausführungsform konvertiert das CUDA-in-HIP-Übersetzungswerkzeug 3520 eine beliebige Anzahl von Aufrufen an Funktionen, die in der CUDA-Laufzeit-API 3502 spezifiziert sind, in eine beliebige Anzahl von Aufrufen an Funktionen, die in der HIP-Laufzeit-API 3532 spezifiziert sind.
  • In mindestens einer Ausführungsform ist ein CUDA-in-HIP-Übersetzungswerkzeug 3520 ein Werkzeug, das als hipify-per1 Werkzeug bekannt ist, das einen textbasierten Übersetzungsprozess ausführt. In mindestens einer Ausführungsform ist das CUDA-in-HIP-Übersetzungswerkzeug 3520 ein Werkzeug, das als hipify-clang bekannt ist, das relativ zu hipify-per1 einen komplexeren und robusteren Übersetzungsprozess ausführt, der das Parsen des CUDA-Codes unter Verwendung von clang (einem Kompilierer-Frontend) und dann das Übersetzen resultierender Symbole beinhaltet. In mindestens einer Ausführungsform kann das ordnungsgemäße Konvertieren von CUDA-Code in HIP-Code Modifikationen (z.B. manuelle Editiervorgänge) zusätzlich zu denen erfordern, die von dem CUDA-in-HIP-Übersetzungswerkzeug 3520 durchgeführt werden.
  • In mindestens einer Ausführungsform ist der HIP-Kompilierertreiber 3540 ein Frontend, der eine Zielvorrichtung 3546 bestimmt und dann einen Kompilierer konfiguriert, der mit der Zielvorrichtung 3546 kompatibel ist, um HIP-Quellcode 3530 zu kompilieren. In mindestens einer Ausführungsform ist die Zielvorrichtung 3546 ein Prozessor, der für parallele Anweisungsverarbeitung optimiert ist. In mindestens einer Ausführungsform kann der HIP-Kompilierertreiber 3540 die Zielvorrichtung 3546 in jeder technisch machbaren Art und Weise bestimmen.
  • In mindestens einer Ausführungsform, wenn Zielvorrichtung 3546 mit CUDA (z.B. CUDA-aktivierte GPU 3594) kompatibel ist, dann erzeugt der HIP-Kompilierertreiber 3540 einen HIP/NVCC-Kompilierungsbefehl 3542. In mindestens einer Ausführungsform und wie ausführlicher in Verbindung mit 35B beschrieben, konfiguriert der HIP/NVCC-Kompilierungsbefehl 3542 den CUDA-Kompilierer 3550, um HIP-Quellcode 3530, ohne darauf beschränkt zu sein, unter Verwendung eines HIP-zu-CUDA-Übersetzung-Headers und einer CUDA-Laufzeitbibliothek zu kompilieren. In mindestens einer Ausführungsform und als Reaktion auf den HIP/NVCC-Kompilierungsbefehl 3542 erzeugt der CUDA-Kompilierer 3550 den Host-ausführbaren Code 3570(1) und den CUDA-Vorrichtung-ausführbaren Code 3584.
  • In mindestens einer Ausführungsform, wenn die Zielvorrichtung 3546 nicht mit CUDA kompatibel ist, dann erzeugt der HIP-Kompilierertreiber 3540 einen HIP/HCC-Kompilierungsbefehl 3544. In mindestens einer Ausführungsform und wie ausführlicher in Verbindung mit 35C beschrieben, konfiguriert der HIP/HCC-Kompilierungsbefehl 3544 den HCC 3560, um HIP-Quellcode 3530, ohne darauf beschränkt zu sein, unter Verwendung eines HCC-Headers und einer HIP/HCC-Laufzeitbibliothek zu kompilieren. In mindestens einer Ausführungsform und als Reaktion auf den HIP/HCC-Kompilierungsbefehl 3544 erzeugt der HCC 3560 den Host-ausführbaren Code 3570(2) und den HCC-Vorrichtung-ausführbaren Code 3582. In mindestens einer Ausführungsform ist der HCC-Vorrichtung-ausführbare Code 3582 eine kompilierte Version des in dem HIP-Quellcode 3530 enthaltenen Vorrichtungscode, der auf der GPU 3592 ausführbar ist. In mindestens einer Ausführungsform kann die GPU 3592 ein beliebiger Prozessor sein, der für parallele Anweisungsverarbeitung optimiert ist, der mit CUDA nicht kompatibel und mit HCC kompatibel ist. In mindestens einer Ausführungsform wird die GPU 3592 von AMD Corporation, Santa Clara, CA, entwickelt. In mindestens einer Ausführungsform ist die GPU 3592 eine Nicht-CUDA-aktivierte GPU 3592.
  • Lediglich für erläuternde Zwecke können drei unterschiedliche Abläufe, die in mindestens einer Ausführungsform implementiert werden können, um den CUDA-Quellcode 3510 zur Ausführung auf CPU 3590 zu kompilieren, und unterschiedliche Vorrichtungen werden in 35A anschaulich dargestellt. In mindestens einer Ausführungsform kompiliert ein direkter CUDA-Ablauf den CUDA-Quellcode 3510 zur Ausführung auf der CPU 3590 und der CUDA-aktivierten GPU 3594 ohne Übersetzen des CUDA-Quellcodes 3510 in HIP-Quellcode 3530. In mindestens einer Ausführungsform übersetzt ein indirekter CUDA-Ablauf den CUDA-Quellcode 3510 in HIP-Quellcode 3530 und kompiliert dann den HIP-Quellcode 3530 zur Ausführung auf der CPU 3590 und der CUDA-aktivierten GPU 3594. In mindestens einer Ausführungsform übersetzt ein CUDA/HCC-Ablauf den CUDA-Quellcode 3510 in HIP-Quellcode 3530 und kompiliert dann den HIP-Quellcode 3530 zur Ausführung auf der CPU 3590 und der GPU 3592.
  • Ein direkter CUDA-Ablauf, der in mindestens einer Ausführungsform implementiert werden kann, wird über gestrichelte Linien und eine Reihe von annotierten Blasen A1-A3 anschaulich dargestellt. In mindestens einer Ausführungsform und wie mit der annotierten Blase A1 anschaulich dargestellt, empfängt der CUDA-Kompilierer 3550 den CUDA-Quellcode 3510 und einen CUDA-kompilierten Befehl 3548, der den CUDA-Kompilierer 3550 konfiguriert, um den CUDA-Quellcode 3510 zu kompilieren. In mindestens einer Ausführungsform wird der CUDA-Quellcode 3510, der in einem direkten CUDA-Ablauf verwendet wird, in einer CUDA-Programmiersprache geschrieben, die auf einer anderen Programmiersprache als C++ basiert (z.B. C, Fortran, Python, Java usw.). In mindestens einer Ausführungsform und als Reaktion auf den CUDA-kompilierten Befehl 3548 erzeugt der CUDA-Kompilierer 3550 den Host-ausführbaren Code 3570(1) und den CUDA-Vorrichtung-ausführbaren Code 3584 (mit der annotierten Blase A2 anschaulich dargestellt). In mindestens einer Ausführungsform und wie mit der annotierten Blase A3 anschaulich dargestellt, können der Host-ausführbare Code 3570(1) und der CUDA-Vorrichtung-ausführbaren Code 3584 jeweils auf der CPU 3590 und der CUDA-aktivierten GPU 3594 ausgeführt werden. In mindestens einer Ausführungsform umfasst der CUDA-Vorrichtung-ausführbaren Code 3584, ohne darauf beschränkt zu sein, Binärcode. In mindestens einer Ausführungsform umfasst der CUDA-Vorrichtung-ausführbaren Code 3584, ohne darauf beschränkt zu sein, PTX-Code und wird ferner in Binärcode für eine spezifische Zielvorrichtung zur Laufzeit kompiliert.
  • Ein indirekter CUDA-Ablauf, der in mindestens einer Ausführungsform implementiert werden kann, ist über gepunkteten Linien und ein Reihe von annotierten Blasen B1-B6 anschaulich dargestellt. In mindestens einer Ausführungsform und wie mit annotierten Blase B1 anschaulich dargestellt, empfängt das CUDA-in-HIP-Übersetzungswerkzeug 3520 den CUDA-Quellcode 3510. In mindestens einer Ausführungsform und wie mit annotierten Blase B2 anschaulich dargestellt, übersetzt das CUDA-in-HIP-Übersetzungswerkzeug 3520 den CUDA-Quellcode 3510 in HIP-Quellcode 3530. In mindestens einer Ausführungsform und wie mit annotierten Blase B3 anschaulich dargestellt, empfängt der HIP-Kompilierertreiber 3540 den HIP-Quellcode 3530 und bestimmt, dass die Zielvorrichtung 3546 CUDA-aktiviert ist.
  • In mindestens einer Ausführungsform und wie mit der annotierten Blase B4 anschaulich dargestellt, erzeugt der HIP-Kompilierertreiber 3540 den HIP/NVCC-Kompilierungsbefehl 3542 und überträgt sowohl den HIP/NVCC-Kompilierungsbefehl 3542 als auch den HIP-Quellcode 3530 an den CUDA-Kompilierer 3550. In mindestens einer Ausführungsform und wie ausführlicher in Verbindung mit 35B beschrieben, konfiguriert der HIP/NVCC-Kompilierungsbefehl 3542 den CUDA-Kompilierer 3550, um HIP-Quellcode 3530 unter Verwendung, ohne darauf beschränkt zu sein, eines HIP-zu-CUDA-Übersetzung-Headers und einer CUDA-Laufzeitbibliothek zu kompilieren. In mindestens einer Ausführungsform und als Reaktion auf HIP/NVCC-Kompilierungsbefehl 3542 erzeugt der CUDA-Kompilierer 3550 den Host-ausführbaren Code 3570(1) und den CUDA-Vorrichtung-ausführbaren Code 3584 (mit annotierten Blase B5 anschaulich dargestellt). In mindestens einer Ausführungsform und wie mit der annotierten Blase B6 anschaulich dargestellt, können der Host-ausführbare Code 3570(1) und der CUDA-Vorrichtung-ausführbare Code 3584 jeweils auf der CPU 3590 und der CUDA-aktivierten GPU 3594 ausgeführt werden. In mindestens einer Ausführungsform umfasst der CUDA-Vorrichtung-ausführbare Code 3584, ohne darauf beschränkt zu sein, Binärcode. In mindestens einer Ausführungsform umfasst der CUDA-Vorrichtung-ausführbare Code 3584, ohne darauf beschränkt zu sein, PTX-Code und ist ferner in Binärcode für eine spezifische Zielvorrichtung zur Laufzeit kompiliert.
  • Ein CUDA/HCC-Ablauf, der in mindestens einer Ausführungsform implementiert werden kann, wird über durchgezogene Linien und eine Reihe von annotierten Blasen C1-C6 anschaulich dargestellt. In mindestens einer Ausführungsform und wie mit der annotierten Blase C1 anschaulich dargestellt, empfängt das CUDA-in-HIP-Übersetzungswerkzeug 3520 den CUDA-Quellcode 3510. In mindestens einer Ausführungsform und wie mit der annotierten Blase C2 anschaulich dargestellt, übersetzt das CUDA-in-HIP-Übersetzungswerkzeug 3520 den CUDA-Quellcode 3510 in den HIP-Quellcode 3530. In mindestens einer Ausführungsform und wie mit der annotierten Blase C3 anschaulich dargestellt, empfängt der HIP-Kompilierertreiber 3540 den HIP-Quellcode 3530 und bestimmt, dass die Zielvorrichtung 3546 nicht CUDA-aktiviert ist.
  • In mindestens einer Ausführungsform erzeugt der HIP-Kompilierertreiber den 3540 HIP/HCC-Kompilierungsbefehl 3544 und überträgt sowohl den HIP/HCC-Kompilierungsbefehl 3544 als auch den HIP-Quellcode 3530 an den HCC 3560 (mit der annotierten Blase C4 anschaulich dargestellt). In mindestens einer Ausführungsform und wie ausführlicher in Verbindung mit 35C beschrieben, konfiguriert der HIP/HCC-Kompilierungsbefehl 3544 den HCC 3560, um den HIP-Quellcode 3530, ohne darauf beschränkt zu sein, unter Verwendung eines HCC-Headers und einer HIP/HCC-Laufzeitbibliothek zu kompilieren. In mindestens einer Ausführungsform und als Reaktion auf den HIP/HCC-Kompilierungsbefehl 3544 erzeugt der HCC 3560 den Host-ausführbaren Code 3570(2) und den HCC-Vorrichtung-ausführbaren Code 3582 (mit der annotierten Blase C5 anschaulich dargestellt). In mindestens einer Ausführungsform und wie mit der annotierten Blase C6 anschaulich dargestellt, kann der Host-ausführbare Code 3570(2) und der HCC-Vorrichtung-ausführbare Code 3582 auf jeweils der CPU 3590 und der GPU 3592 ausgeführt werden.
  • In mindestens einer Ausführungsform kann, nachdem der CUDA-Quellcode 3510 in den HIP-Quellcode 3530 übersetzt ist, der HIP-Kompilierertreiber 3540 anschließend verwendet werden, um einen ausführbaren Code für entweder die CUDA-aktiviert GPU 3594 oder die GPU 3592 ohne erneutes Ausführen des CUDA-in-HIP-Übersetzungswerkzeugs 3520 zu erzeugen. In mindestens einer Ausführungsform übersetzt das CUDA-in-HIP-Übersetzungswerkzeug 3520 den CUDA-Quellcode 3510 in HIP-Quellcode 3530, der dann im Speicher gespeichert wird. In mindestens einer Ausführungsform konfiguriert der HIP-Kompilierertreiber 3540 dann den HCC 3560, um den Host-ausführbaren Code 3570(2) und den HCC-Vorrichtung-ausführbaren Code 3582 basierend auf dem HIP-Quellcode 3530 zu erzeugen. In mindestens einer Ausführungsform konfiguriert der HIP-Kompilierertreiber 3540 anschließend den CUDA-Kompilierer 3550, um den Host-ausführbaren Code 3570(1) und den CUDA-Vorrichtung-ausführbaren Code 3584 basierend auf dem gespeicherten HIP-Quellcode 3530 zu erzeugen.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 35A anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 35A anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 35A anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 35B veranschaulicht ein System 3504, das konfiguriert ist, um den CUDA-Quellcode 3510 von 35A unter Verwendung der CPU 3590 und der CUDA-aktivierten GPU 3594 zu kompilieren und auszuführen, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst das System 3504, ohne darauf beschränkt zu sein, den CUDA-Quellcode 3510, das CUDA-in-HIP-Übersetzungswerkzeug 3520, den HIP-Quellcode 3530, den HIP-Kompilierertreiber 3540, den CUDA-Kompilierer 3550, den Host-ausführbaren Code 3570(1), den CUDA-Vorrichtung-ausführbaren Code 3584, die CPU 3590 und die CUDA-aktivierte GPU 3594.
  • In mindestens einer Ausführungsform und wie hier zuvor in Verbindung mit 35A beschrieben, umfasst der CUDA-Quellcode 3510, ohne darauf beschränkt zu sein, eine beliebige Anzahl (einschließlich null) von globalen Funktionen 3512, eine beliebige Anzahl (einschließlich null) von Vorrichtung-Funktionen 3514, eine beliebige Anzahl (einschließlich null) von Host-Funktionen 3516 und eine beliebige Anzahl (einschließlich null) von Host/Vorrichtung-Funktionen 3518. In mindestens einer Ausführungsform umfasst der CUDA-Quellcode 3510 ebenfalls, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Aufrufen an eine beliebige Anzahl von Funktionen, die in einer beliebigen Anzahl von CUDA-APIs spezifiziert sind.
  • In mindestens einer Ausführungsform übersetzt das CUDA-in-HIP-Übersetzungswerkzeug 3520 den CUDA-Quellcode 3510 in HIP-Quellcode 3530. In mindestens einer Ausführungsform konvertiert das CUDA-in-HIP-Übersetzungswerkzeug 3520 jeden Kernelaufruf in CUDA-Quellcode 3510 von einer CUDA-Syntax in eine HIP-Syntax und konvertiert eine beliebige Anzahl von anderen CUDA-Aufrufen in CUDA-Quellcode 3510 in eine beliebige Anzahl von anderen funktionsmäßig ähnlichen HIP-Aufrufen.
  • In mindestens einer Ausführungsform bestimmt der HIP-Kompilierertreiber 3540, dass die Zielvorrichtung 3546 CUDA-aktiviert ist und erzeugt einen HIP/NVCC-Kompilierungsbefehl 3542. In mindestens einer Ausführungsform konfiguriert der HIP-Kompilierertreiber 3540 dann den CUDA-Kompilierer 3550 über den HIP/NVCC-Kompilierungsbefehl 3542, um den HIP-Quellcode 3530 zu kompilieren. In mindestens einer Ausführungsform stellt der HIP-Kompilierertreiber 3540 einen Zugriff auf einen HIP-zu-CUDA-Übersetzung-Header 3552 als Teil des Konfigurierens des CUDA-Kompilierers 3550 bereit. In mindestens einer Ausführungsform übersetzt der HIP-zu-CUDA-Übersetzung-Header 3552 eine beliebige Anzahl von Mechanismen (z.B. Funktionen), die in einer beliebige Anzahl von HIP-APIs spezifiziert sind, in eine beliebige Anzahl von Mechanismen, die in einer beliebigen Anzahl von CUDA-APIs spezifiziert sind. In mindestens einer Ausführungsform verwendet der CUDA-Kompilierer 3550 den HIP-zu-CUDA-Übersetzung-Header 3552 in Verbindung mit einer CUDA-Laufzeitbibliothek 3554, die der CUDA-Laufzeit-API 3502 entspricht, um den Host-ausführbaren Code 3570(1) und den CUDA-Vorrichtung-ausführbaren Code 3584 zu erzeugen. In mindestens einer Ausführungsform kann dann der Host-ausführbare Code 3570(1) und der CUDA-Vorrichtung-ausführbare Code 3584 auf jeweils der CPU 3590 und der CUDA-aktivierten GPU 3594 ausgeführt werden. In mindestens einer Ausführungsform umfasst der CUDA-Vorrichtung-ausführbare Code 3584, ohne darauf beschränkt zu sein, Binärcode. In mindestens einer Ausführungsform umfasst der CUDA-Vorrichtung-ausführbaren Code 3584, ohne darauf beschränkt zu sein, PTX-Code und ist ferner in Binärcode für eine spezifische Zielvorrichtung zur Laufzeit kompiliert.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 35B anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 35B anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 35B anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 35C veranschaulicht ein System 3506, das konfiguriert ist, um den CUDA-Quellcode 3510 von 35A unter Verwendung der CPU 3590 und der Nicht-CUDA-aktivierten GPU 3592 zu kompilieren und auszuführen, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst das System 3506, ohne darauf beschränkt zu sein, den CUDA-Quellcode 3510, das CUDA-in-HIP-Übersetzungswerkzeug 3520, den HIP-Quellcode 3530, den HIP-Kompilierertreiber 3540, den HCC 3560, den Host-ausführbaren Code 3570(2), den HCC-Vorrichtung-ausführbaren Code 3582, die CPU 3590 und die GPU 3592.
  • In mindestens einer Ausführungsform und wie hier zuvor in Verbindung mit 35A beschrieben, umfasst der CUDA-Quellcode 3510, ohne darauf beschränkt zu sein, eine beliebige Anzahl (einschließlich null) von globalen Funktionen 3512, eine beliebige Anzahl (einschließlich null) von Vorrichtung-Funktionen 3514, eine beliebige Anzahl (einschließlich null) von Host-Funktionen 3516 und eine beliebige Anzahl (einschließlich null) von Host/Vorrichtung-Funktionen 3518. In mindestens einer Ausführungsform umfasst der CUDA-Quellcode 3510 ebenfalls, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Aufrufen an eine beliebige Anzahl von Funktionen, die in einer beliebigen Anzahl von CUDA-APIs spezifiziert sind.
  • In mindestens einer Ausführungsform übersetzt das CUDA-in-HIP-Übersetzungswerkzeug 3520 den CUDA-Quellcode 3510 in HIP-Quellcode 3530. In mindestens einer Ausführungsform konvertiert das CUDA-in-HIP-Übersetzungswerkzeug 3520 jeden Kernelaufruf in CUDA-Quellcode 3510 von einem CUDA-Syntax in einen HIP-Syntax und konvertiert eine beliebige Anzahl von andere CUDA-Aufrufen in Quellcode 3510 in eine beliebige Anzahl von anderen funktionsmäßig ähnlichen HIP-Aufrufen.
  • In mindestens einer Ausführungsform bestimmt der HIP-Kompilierertreiber 3540 anschließend, dass die Zielvorrichtung 3546 nicht CUDA-aktiviert ist und erzeugt einen HIP/HCC-Kompilierungsbefehl 3544. In mindestens einer Ausführungsform konfiguriert der HIP-Kompilierertreiber 3540 dann den HCC 3560, um den HIP/HCC-Kompilierungsbefehl 3544 auszuführen, um den HIP-Quellcode 3530 zu kompilieren. In mindestens einer Ausführungsform konfiguriert der HIP/HCC-Kompilierungsbefehl 3544 den HCC 3560, um, ohne darauf beschränkt zu sein, eine HIP/HCC-Laufzeitbibliothek 3558 und einen HCC-Header 3556 zu verwenden, um den Host-ausführbaren Code 3570(2) und den HCC-Vorrichtung-ausführbaren Code 3582 zu erzeugen. In mindestens einer Ausführungsform entspricht die HIP/HCC-Laufzeitbibliothek 3558 der HIP-Laufzeit-API 3532. In mindestens einer Ausführungsform umfasst der HCC-Header 3556, ohne darauf beschränkt zu sein, eine beliebige Anzahl und Art von Interoperabilitätmechanismen für HIP und HCC. In mindestens einer Ausführungsform können der Host-ausführbare Code 3570(2) und der HCC-Vorrichtung-ausführbare Code 3582 jeweils auf der CPU 3590 und der GPU 3592 ausgeführt werden.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 35C anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 35C anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 35C anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 36 veranschaulicht einen beispielhaften Kernel, der durch das CUDA-in-HIP-Übersetzungswerkzeug 3520 von 35C übersetzt wird, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform partitioniert der CUDA-Quellcode 3510 ein Gesamtproblem, dass ein gegebener Kernel ausgestaltet ist, zu lösen, in relativ grobe Teilprobleme, die unabhängig unter Verwendung von Thread-Blöcken gelöst werden können. In mindestens einer Ausführungsform umfasst jeder Thread-Block, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Threads. In mindestens einer Ausführungsform wird jedes Teilproblem in relativ feine Stücke partitioniert, die kooperativ durch Threads innerhalb eines Threadblocks parallel gelöst werden können. In mindestens einer Ausführungsform können Threads innerhalb eines Thread-Blocks durch gemeinsame Nutzung von Daten durch einen gemeinsam genutzten Speicher und durch Synchronisieren der Ausführung zusammenarbeiten, um Speicherzugriffe zu koordinieren.
  • In mindestens einer Ausführungsform organisiert der CUDA-Quellcode 3510 Thread-Blöcke, die einem gegebenen Kernel zugeordnet sind, in ein eindimensionales, ein zweidimensionales oder ein dreidimensionales Gitter von Thread-Blöcken. In mindestens einer Ausführungsform umfasst jeder Thread-Block, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Threads, und ein Gitter umfasst, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Thread-Blöcken.
  • In mindestens einer Ausführungsform ist ein Kernel eine Funktion in Vorrichtungscode, der unter Verwendung eines „_global _“ Deklaration-Spezifizierer definiert ist. In mindestens einer Ausführungsform werden die Dimension eines Gitters, das einen Kernel für einen gegebenen Kernelaufruf ausführt, und zugeordnete Streams unter Verwendung eines CUDA-Kernel-Startsyntax 3610 spezifiziert. In mindestens einer Ausführungsform wird der CUDA-Kernel-Startsyntax 3610 als „KernelName«<GridSize, BlockSize, SharedMemorySize, Stream»>(KernelArguments)“; spezifiziert. In mindestens einer Ausführungsform ist ein Ausführungskonfigurationssyntax ein „<<<... >>>“ Konstrukt, der zwischen einem Kernelnamen („KernelName“) und parenthetisierte Liste von Kernelargumenten („KernelArguments“) eingesetzt ist. In mindestens einer Ausführungsform umfasst der CUDA-Kernel-Startsyntax 3610, ohne darauf beschränkt zu sein, einen CUDA-Startfunktionssyntax anstatt eines Ausführung-Konfigurationssyntax.
  • In mindestens einer Ausführungsform ist „GridSize“ von einer dim3 Art und spezifiziert die Dimension und Größe eines Gitters. In mindestens einer Ausführungsform ist Art dim3 eine CUDA-definierte Struktur, die, ohne darauf beschränkt zu sein, vorzeichenlose Ganzzahlen x, y und z umfasst. In mindestens einer Ausführungsform ist, wenn z nicht spezifiziert ist, dann z standardmäßig eins. In mindestens einer Ausführungsform ist, wenn y nicht spezifiziert ist, dann y standardmäßig ins. In mindestens einer Ausführungsform ist die Anzahl von Thread-Blöcken in einem Gitter gleich dem Produkt aus GridSize.x, GridSize.y und GridSize.z. In mindestens einer Ausführungsform ist „BlockSize“ ist von der Art dim3 und spezifiziert die Dimension und Größe jedes Threadblocks. In mindestens einer Ausführungsform ist die Anzahl von Threads pro Thread-Block gleich dem Produkt aus BlockSize.x, BlockSize.y und BlockSize.z. In mindestens einer Ausführungsform wird jedem Thread, der einen Kernel ausführt, eine eindeutige Thread-ID gegeben, die innerhalb des Kernels durch eine eingebaute Variable (z.B. „threadIdx“) zugänglich ist.
  • In mindestens einer Ausführungsform und mit Bezug auf eine CUDA-Kernel-Startsyntax 3610 ist „SharedMemorySize“ ein optionales Argument, das eine Anzahl von Bytes in einem gemeinsam genutzten Speicher spezifiziert, die dynamisch pro Thread-Block für einen gegebenen Kernelaufruf zusätzlich zu dem statisch zugeteilten Speicher zugeteilt ist. In mindestens einer Ausführungsform und mit Bezug auf die CUDA-Kernel-Startsyntax 3610 ist SharedMemorySize standardmäßig null. In mindestens einer Ausführungsform und mit Bezug auf die CUDA-Kernel-Startsyntax 3610 ist „Stream“ ein optionales Argument, das einen zugeordneten Stream spezifiziert und standardmäßig null ist, um einen Standardstream zu spezifizieren. In mindestens einer Ausführungsform ist ein Stream eine Sequenz von Befehlen (möglicherweise von unterschiedlichen Host-Threads ausgegeben), die in der Reihenfolge ausgeführt werden. In mindestens einer Ausführungsform können unterschiedliche Streams Befehle außerhalb der Reihenfolge mit Bezug zueinander oder gleichzeitig ausführen.
  • In mindestens einer Ausführungsform umfasst der CUDA-Quellcode 3510, ohne darauf beschränkt zu sein, eine Kerneldefinition für einen beispielhaften Kernel „MatAdd“ und eine Hauptfunktion. In mindestens einer Ausführungsform ist die Hauptfunktion Host-Code, der auf einem Host ausgeführt wird, und, ohne darauf beschränkt zu sein, einen Kernelaufruf umfasst, der veranlasst, dass der Kernel MatAdd auf einer Vorrichtung ausgeführt wird. In mindestens einer Ausführungsform und wie gezeigt fügt der Kernel MatAdd zwei Matrizen A und B der Größe NxN hinzu, wobei N eine positive Ganzzahl ist, und speichert das Ergebnis in einer Matrix C. In mindestens einer Ausführungsform definiert die Hauptfunktion eine Variable threadsPerBlock als 16 mal 16 und eine numBlocks Variable als N/16 mal N/16. In mindestens einer Ausführungsform spezifiziert dann die Hauptfunktion den Kernelaufruf „MatAdd«<numBlocks, threadsPerBlock»>(A, B, C);“. In mindestens einer Ausführungsform und gemäß CUDA-Kernel-Startsyntax 3610 wird der Kernel MatAdd unter Verwendung eines Gitters von Thread-Blöcken mit einer Dimension N/16 mal N/16 ausgeführt, wobei jeder Thread-Block eine Dimension von 16 mal 16 aufweist. In mindestens einer Ausführungsform umfasst jeder Thread-Block 256 Threads, ein Gitter wird mit genug Blöcken erzeugt, um einen Thread pro Matrixelement aufzuweisen, und jeder Thread in einem derartigen Gitter führt Kernel MatAdd aus, um eine paarweise Addition durchzuführen.
  • In mindestens einer Ausführungsform übersetzt, während des Übersetzens des CUDA-Quellcodes 3510 in HIP-Quellcode 3530, das CUDA-in-HIP-Übersetzungswerkzeug 3520 jeden Kernelaufruf in CUDA-Quellcode 3510 von der CUDA-Kernel-Startsyntax 3610 in eine HIP-Kernel-Startsyntax 3620 und konvertiert eine beliebige Anzahl von anderen CUDA-Aufrufen in Quellcode 3510 in eine beliebige Anzahl von anderen funktionsmäßig ähnlichen HIP-Aufrufen. In mindestens einer Ausführungsform wird der HIP-Kernel-Startsyntax 3620 spezifiziert als „hipLaunchKernelGGL (KernelName, GridSize, BlockSize, SharedMemorySize, Stream, KernelArguments);“. In mindestens einer Ausführungsform weist jeder von KernelName, GridSize, BlockSize, SharedMemorySize, Stream und KernelArguments die gleiche Bedeutung in der HIP-Kernel-Startsyntax 3620 wie in der CUDA-Kernel-Startsyntax 3610 auf (hier zuvor beschrieben). In mindestens einer Ausführungsform sind die Argumente SharedMemorySize und Stream in der HIP-Kernel-Startsyntax 3620 erforderlich und sind in der CUDA-Kernel-Startsyntax 3610 optional.
  • In mindestens einer Ausführungsform ist ein Abschnitt des in 36 anschaulich dargestellten HIP-Quellcodes 3530 mit einem Abschnitt des in 36 anschaulich dargestellten HIP-Quellcodes 3510 mit Ausnahme eines Kernelaufrufs identisch, der veranlasst, dass der Kernel MatAdd auf einer Vorrichtung ausgeführt wird. In mindestens einer Ausführungsform ist der Kernel MatAdd in HIP-Quellcode 3530 mit dem gleichen „_global_“ Deklaration-Spezifizierer definiert, mit dem Kernel MatAdd in CUDA-Quellcode 3510 definiert ist. In mindestens einer Ausführungsform ist ein Kernelaufruf in HIP-Quellcode 3530 gleich „hipLaunchKernelGGL(MatAdd, numBlocks, threadsPerBlock, 0, 0, A, B, C)“; während ein entsprechender Kernelaufruf in CUDA-Quellcode 3510 gleich „MatAdd«<numBlocks, threadsPerBlock»>(A, B, C)“; ist.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 36 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 36 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 36 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 37 veranschaulicht die Nicht-CUDA-aktivierte GPU 3592 von 35C ausführlicher gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird die GPU 3592 von AMD Corporation, Santa Clara, CA, entwickelt. In mindestens einer Ausführungsform kann die GPU 3592 konfiguriert sein, um Rechenoperationen in einer hochparallelen Art und Weise durchzuführen. In mindestens einer Ausführungsform ist die GPU 3592 konfiguriert, um Graphik-Pipeline-Operationen auszuführen, wie beispielsweise Zeichenbefehle, Pixeloperationen, geometrische Berechnungen und andere Operationen, die dem Rendern eines Bild in einer Anzeige zugeordnet sind. In mindestens einer Ausführungsform ist die GPU 3592 konfiguriert, um Operationen ohne Bezug auf Graphik auszuführen. In mindestens einer Ausführungsform ist die GPU 3592 konfiguriert, um sowohl Operationen mit Bezug auf Graphik als auch Operationen ohne Bezug auf Graphik auszuführen. In mindestens einer Ausführungsform kann die GPU 3592 konfiguriert sein, um den im HIP-Quellcode 3530 enthaltenen Vorrichtungscode auszuführen.
  • In mindestens einer Ausführungsform umfasst die GPU 3592, ohne darauf beschränkt zu sein, eine beliebige Anzahl von programmierbaren Verarbeitungseinheiten 3720, einen Befehlsprozessor 3710, einen L2-Cache 3722, Speichercontroller 3770, DMA-Maschinen 3780(1), Systemspeichercontroller 3782, DMA-Maschinen 3780(2) und GPU-Controller 3784. In mindestens einer Ausführungsform umfasst jede programmierbare Verarbeitungseinheit 3720, ohne darauf beschränkt zu sein, einen Arbeitslastmanager 3730 und eine beliebige Anzahl von Recheneinheiten 3740. In mindestens einer Ausführungsform liest der Befehlsprozessor 3710 Befehle aus einer oder mehreren Befehlswarteschlangen (nicht gezeigt) und verteilt Befehle an den Arbeitslastmanager 3730. In mindestens einer Ausführungsform verteilt, für jede programmierbare Verarbeitungseinheit 3720, der zugeordnete Arbeitslastmanager 3730 Arbeit an Recheneinheiten 3740, die in der programmierbaren Verarbeitungseinheit 3720 enthalten sind. In mindestens einer Ausführungsform kann jede Recheneinheit 3740 eine beliebige Anzahl von Thread-Blöcken ausführen, wobei jeder Thread-Block jedoch auf einer einzigen Recheneinheit 3740 ausgeführt wird. In mindestens einer Ausführungsform ist eine Arbeitsgruppe ein Threadblock.
  • In mindestens einer Ausführungsform umfasst jede Recheneinheit 3740, ohne darauf beschränkt zu sein, eine beliebige Anzahl von SIMD-Einheiten 3750 und einen gemeinsam genutzten Speicher 3760. In mindestens einer Ausführungsform implementiert jede SIMD-Einheit 3750 eine SIMD-Architektur und ist konfiguriert, um Operationen parallel durchzuführen. In mindestens einer Ausführungsform umfasst jede SIMD-Einheit 3750, ohne darauf beschränkt zu sein, eine Vektor-ALU 3752 und eine Vektorregisterdatei 3754. In mindestens einer Ausführungsform führt jede SIMD-Einheit 3750 einen unterschiedlichen Warp aus. In mindestens einer Ausführungsform ist ein Warp eine Gruppe von Threads (z.B. 16 Threads), wobei jeder Thread in dem Warp zu einem einzigen Thread-Block gehört und konfiguriert ist, um einen unterschiedlichen Satz von Daten basierend auf einem einzigen Satz von Anweisungen zu verarbeiten. In mindestens einer Ausführungsform kann Prädikation verwendet werden, um einen oder mehrere Threads in einem Warp zu deaktivieren. In mindestens einer Ausführungsform ist eine Spur ein Thread. In mindestens einer Ausführungsform ist ein Arbeitselement ein Thread. In mindestens einer Ausführungsform ist eine Wellenfront ein Warp. In mindestens einer Ausführungsform können unterschiedlichen Wellenfronten in einem Thread-Block zusammen synchronisieren und über gemeinsam genutzten Speicher 3760 kommunizieren.
  • In mindestens einer Ausführungsform werden programmierbare Verarbeitungseinheiten 3720 als „Shader-Maschinen“ bezeichnet. In mindestens einer Ausführungsform umfasst jede programmierbare Verarbeitungseinheit 3720, ohne darauf beschränkt zu sein, eine beliebige Menge von dedizierter Graphikhardware zusätzlich zu den Recheneinheiten 3740. In mindestens einer Ausführungsform umfasst jede programmierbare Verarbeitungseinheit 3720, ohne darauf beschränkt zu sein, eine beliebige Anzahl (einschließlich null) von Geometrieprozessoren, eine beliebige Anzahl (einschließlich null) von Rasterern, eine beliebige Anzahl (einschließlich null) von Render-Backends, einen Arbeitslastmanager 3730 und eine beliebige Anzahl von Recheneinheiten 3740.
  • In mindestens einer Ausführungsform benutzen die Recheneinheiten 3740 den L2-Cache 3722 gemeinsam. In mindestens einer Ausführungsform ist der L2-Cache 3722 partitioniert. In mindestens einer Ausführungsform ist ein GPU-Speicher 3790 von allen Recheneinheiten 3740 in der GPU 3592 zugänglich. In mindestens einer Ausführungsform erleichtern der Speichercontroller 3770 und der Systemspeichercontroller 3782 Datenübertragungen zwischen der GPU 3592 und einem Host, und DMA-Maschinen 3780(1) ermöglichen asynchrone Speicherübertragungen zwischen der GPU 3592 und einem derartigen Host. In mindestens einer Ausführungsform erleichtern der Speichercontroller 3770 und der GPU-Controller 3784 Datenübertragungen zwischen der GPU 3592 und anderen GPUs 3592 und DMA-Maschinen 3780(2) ermöglichen asynchrone Speicherübertragungen zwischen der GPU 3592 und anderen GPUs 3592.
  • In mindestens einer Ausführungsform umfasst die GPU 3592, ohne darauf beschränkt zu sein, eine beliebige Menge und Art von Systemzwischenverbindung, die Daten- und Steuerübertragungen über eine beliebige Anzahl und Art von direkt oder indirekt verbundenen Komponenten erleichtert, die intern oder extern zu der GPU 3592 sein können. In mindestens einer Ausführungsform umfasst die GPU 3592, ohne darauf beschränkt zu sein, eine beliebige Anzahl und Art von E/A-Schnittstellen (z.B. PCIe), die mit einer beliebigen Anzahl und Art von peripheren Vorrichtungen gekoppelt sind. In mindestens einer Ausführungsform kann die GPU 3592, ohne darauf beschränkt zu sein, eine beliebige Anzahl (einschließlich null) von Anzeigemaschinen und eine beliebige Anzahl (einschließlich null) von Multimediamaschinen umfassen. In mindestens einer Ausführungsform implementiert die GPU 3592 ein Speichersubsystem, das, ohne darauf beschränkt zu sein, eine beliebige Menge und Art von Speichercontrollern (z.B. Speichercontroller 3770 und Systemspeichercontroller 3782) und Speichervorrichtungen (z.B. gemeinsam genutzte Speicher 3760) umfasst, die einer Komponente fest zugeordnet sein können oder unter mehreren Komponenten gemeinsam genutzt werden. In mindestens einer Ausführungsform implementiert die GPU 3592 ein Cache-Teilsystem, das, ohne darauf beschränkt zu sein, eine oder mehrere Cache-Speicher (z.B. den L2-Cache 3722) umfasst, die jeweils private sein zu oder zwischen einer beliebigen Anzahl von Komponenten gemeinsam genutzt werden (z.B. SIMD-Einheiten 3750, Recheneinheiten 3740 und programmierbare Verarbeitungseinheiten 3720).
  • In mindestens einer Ausführungsform werden ein oder mehrere in 37 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 37 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 37 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • 38 veranschaulicht, wie Threads eines beispielhaften CUDA-Gitter 3820 in unterschiedlichen Recheneinheiten 3740 von 37 abgebildet werden, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform und lediglich aus erläuternden Gründen weist das Gitter 3820 eine GridSize von BX mal BY mal 1 und eine BlockSize von TX mal TY mal 1 auf. In mindestens einer Ausführungsform umfasst das Gitter 3820 daher, ohne darauf beschränkt zu sein, (BX * BY) Thread-Blöcke 3830 und jeder Thread-Block 3830 umfasst, ohne darauf beschränkt zu sein, (TX * TY) Threads 3840. Die Threads 3840 werden in 38 als schnörkelige Pfeile anschaulich dargestellt.
  • In mindestens einer Ausführungsform wird das Gitter 3820 in die programmierbare Verarbeitungseinheit 3720(1) abgebildet, die, ohne darauf beschränkt zu sein, Recheneinheiten 3740(1)-3740(C) umfasst. In mindestens einer Ausführungsform und wie gezeigt, werden (BJ * BY) Thread-Blöcke 3830 in die Recheneinheit 3740(1) abgebildet und die verbleibenden Thread-Blöcke 3830 werden in die Recheneinheit 3740(2) abgebildet. In mindestens einer Ausführungsform kann jeder Thread-Block 3830, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Warps umfassen und jeder Warp wird in eine unterschiedliche SIMD-Einheit 3750 von 37 abgebildet.
  • In mindestens einer Ausführungsform können Warps in einem gegebenen Thread-Block 3830 zusammen synchronisieren und durch den gemeinsam genutzten Speicher 3760 kommunizieren, der in der zugeordneten Recheneinheit 3740 enthalten ist. Beispielsweise und in mindestens einer Ausführungsform können Warps in dem Thread-Block 3830(BJ,1) zusammen synchronisieren und durch den gemeinsam genutzten Speicher 3760(1) kommunizieren. Beispielsweise und in mindestens einer Ausführungsform können Warps in Thread-Block 3830(BJ+1,1) zusammen synchronisieren und durch gemeinsam genutzten Speicher 3760(2) kommunizieren.
  • In mindestens einer Ausführungsform werden ein oder mehrere in 38 anschaulich dargestellte Systeme benutzt, um eine Bibliothek zu implementieren, die Benutzern ermöglicht, die geeignete Matrixmultiplikationsalgorithmen zu bestimmen, um eine Matrixmultiplikationsoperation durchzuführen. In mindestens einer Ausführungsform werden ein oder mehrere in 38 anschaulich dargestellte Systeme benutzt, um eine API in Verbindung mit einer Bibliothek zu implementieren, die einem Benutzer ermöglicht, einen oder mehrere API-Aufrufe vorzunehmen, die Eingabematrizen, Charakteristika der Eingabematrizen, eine gewünschte Matrixoperation, Charakteristika der gewünschten Matrixoperation, sowie auch andere verschiedene Aspekte der gewünschten Matrixoperation angeben können, und als Reaktion auf den einen oder mehrere API-Aufrufe kann der Benutzer eine Liste eines oder mehrerer Algorithmen, die geeignet sind, die gewünschte Matrixoperation durchzuführen, einen Vergleich der Leistung von Algorithmen des einen oder mehrerer Algorithmen, eine Bestimmung eines oder mehrerer Algorithmen mit hoher Effizienz und/oder hoher Leistung, die geeignet sind, die gewünschte Matrixoperation durchzuführen, sowie auch andere Informationen hinsichtlich der gewünschten Matrixoperation zu empfangen. In mindestens einer Ausführungsform werden ein oder mehrere in 38 anschaulich dargestellte Systeme benutzt, um eine API und eine Bibliothek zu implementieren, wie beispielsweise jeweils die API(s) 104 und die Matrixmultiplikationsalgorithmus-Bibliothek 106, wie in Verbindung mit 1 beschrieben.
  • Mindestens eine Ausführungsform der Offenbarung kann angesichts der folgenden Klauseln beschrieben werden:
    • Klausel 1. Ein maschinenlesbares Medium mit einer oder mehreren darauf gespeicherten Anwendungsprogrammierschnittstellen (APIs), die, wenn von einem oder mehreren Prozessoren durchgeführt, den einen oder die mehreren Prozessoren veranlassen, mindestens: eine oder mehrere optimierende allgemeine Matrix-in-Matrixmultiplikation (GEMM)-Implementierungen unter mehreren GEMM-Implementierungen auszuwählen, die basierend mindestens teilweise auf einem oder mehreren Parametern auszuführen sind, die von der einen oder mehreren APIs empfangen werden.
    • Klausel 2. Das maschinenlesbare Medium gemäß Klausel 1, wobei der eine oder die mehreren Parameter einen Satz von Einschränkungen codieren, wie eine Matrixoperation durchzuführen ist, wobei der Satz von Einschränkungen verwendet wird, um die eine oder die mehreren optimierenden GEMM-Implementierungen zu kennzeichnen.
    • Klausel 3. Das maschinenlesbare Medium gemäß Klausel 1, wobei die eine oder die mehreren APIs, um die eine oder die mehreren optimierenden GEMM-Implementierungen auszuwählen, wenn von dem einen oder der mehreren Prozessoren durchgeführt, den einen oder die mehreren Prozessoren veranlassen, mindestens:
      • einen Matrixmultiplikationsoperation-Deskriptor basierend mindestens teilweise auf dem einen oder den mehreren Parametern zu bestimmen;
      • einen oder mehrere Matrix-Layout-Deskriptoren basierend mindestens teilweise auf dem einen oder den mehreren Parametern zu bestimmen; und
      • die eine oder die mehreren optimierenden GEMM-Implementierungen basierend mindestens teilweise auf dem Matrixmultiplikationsoperation-Deskriptor und dem einen oder den mehreren Matrix-Layout-Deskriptoren zu kennzeichnen.
    • Klausel 4. Das maschinenlesbare Medium gemäß Klausel 3, wobei der Matrixmultiplikationsoperation-Deskriptor ein oder mehrere Attribute einer Matrixmultiplikationsoperation codiert, wobei das eine oder die mehreren Attribute umfassen:
      • einen Rechentyp;
      • einen Skalentyp;
      • einen Zeigermodus;
      • einen Füllmodus;
      • eine Epilogfunktion; oder
      • einen Biasvektorzeiger.
    • Klausel 5. Das maschinenlesbare Medium gemäß Klausel 3, wobei der eine oder die mehreren Matrix-Layout-Deskriptoren jeweils eine oder mehrere Attribute einer Matrix für eine Matrixmultiplikationsoperation codieren, wobei das eine oder die mehreren Attribute umfassen:
      • einen Datengenauigkeitstyp;
      • eine Speicherreihenfolge von Daten der Matrix;
      • einen Batch-Zählwert;
      • einen strided Batch-Versatz; oder
      • einen Ebenenversatz.
    • Klausel 6. Das maschinenlesbare Medium gemäß Klausel 1, wobei die ausgewählte eine oder die ausgewählten mehreren optimierenden GEMM-Implementierungen als Teil eines Ergebnisvektors in der Reihenfolge der geschätzten Rechenzeit bereitgestellt werden.
    • Klausel 7. Ein System, umfassend:
      • einen oder mehrere Prozessoren, um Anweisungen auszuführen, um eine oder mehrere Anwendungsprogrammierschnittstellen (APIs) zu implementieren, wobei die eine oder die mehreren optimierenden allgemeinen Matrix-in-Matrixmultiplikation (GEMM)-Implementierungen unter mehreren GEMM-Implementierungen auswählen, die basierend mindestens teilweise auf dem einem oder den mehreren Parametern durchzuführen sind, die von der einen oder den mehreren APIs empfangen werden; und
      • einen oder mehrere Speicher, um den einen oder die mehreren Parameter zu speichern.
    • Klausel 8. Das System gemäß Klausel 7, wobei der eine oder die mehreren Parameter einen oder mehrere Suchpräferenzenparameter umfassen, die Einschränkungen zum Bestimmen spezifizieren, dass die eine oder die mehreren optimierenden GEMM-Implementierungen zum Durchführen einer Matrixoperation geeignet sind und andere GEMM-Implementierungen nicht geeignet sind, wobei die eine oder die mehreren Suchpräferenzen einem Benutzer der einen oder der mehreren APIs ermöglichen, zu spezifizieren:
      • einen Suchmodus;
      • einen maximalen erlaubten Arbeitsbereichsspeicher;
      • einen Mathematikmodus;
      • ein Verringerungsschema;
      • einen Gaußschen Modus;
      • Pufferausrichtungsinformationen für eine oder mehrere Operanden;
      • eine maximale Wellenzählung;
      • einen Zeigermodus; oder
      • eine Epilogfunktion.
    • Klausel 9. Das System gemäß Klausel 8, wobei die eine oder die mehreren Suchpräferenzen spezifizieren, ob Kerne eines Streaming-Multiprozessors zum Durchführen der Matrixoperation zu verwenden sind.
    • Klausel 10. Das System gemäß Klausel 7, wobei der eine oder die mehreren Parameter eine oder mehrere Benutzer-konfigurierbare Attribute umfassen, die spezifizieren, wie eine Matrixoperation durchzuführen ist, wobei das eine oder die mehreren Benutzer-konfigurierbare Attribute umfassen:
      • Kacheldimensionen für Eingabematrizen in die Matrixoperation;
      • k-Dimensionaufteilen der Eingabematrizen für Parallelberechnung;
      • ein Verringerungsschema zum Akkumulieren der Ergebnissen von den k-Dimensionen; oder
      • Swizzling-Unterstützung.
    • Klausel 11. Das System gemäß Klausel 7, wobei die eine oder die mehreren GEMM-Implementierungen als Datenobjekte codiert sind, bei der die Datenobjekte durch die eine oder die mehreren APIs modifiziert werden, um zu modifizieren, wie eine Matrixoperation durchzuführen ist.
    • Klausel 12. Das System gemäß Klausel 7, wobei der eine oder die mehreren Prozessoren eine Graphikverarbeitungseinheit umfassen, um die Anweisungen auszuführen.
    • Klausel 13. Das System gemäß Klausel 7, wobei die ausgewählte eine oder die ausgewählten mehreren optimierenden GEMM-Implementierungen als Teil eines Ergebnisvektors in der Reihenfolge der geschätzten Rechenzeit bereitgestellt werden.
    • Klausel 14. Ein Verfahren, umfassend Auswählen einer oder mehrerer optimierenden allgemeinen Matrix-in-Matrixmultiplikation (GEMM)-Implementierungen unter mehreren GEMM-Implementierungen, die basierend mindestens teilweise auf einem oder mehreren Parametern durchzuführen sind, die von der eine oder den mehreren Anwendungsprogrammierschnittstellen empfangen werden.
    • Klausel 15. Das Verfahren gemäß Klausel 14, wobei das Auswählen der einen oder der mehreren optimierenden allgemeinen GEMM-Implementierungen umfasst:
      • Bestimmen eines Matrixmultiplikationsoperation-Deskriptors basierend mindestens teilweise auf dem einen oder den mehreren Parametern;
      • Bestimmen eines oder mehrerer Matrix-Layout-Deskriptoren basierend mindestens teilweise auf dem einen oder den mehreren Parametern; und
      • Kennzeichnen der einen oder der mehreren optimierenden GEMM-Implementierungen basierend mindestens teilweise auf dem Matrixmultiplikationsoperation-Deskriptor und dem einen oder der mehreren Matrix-Layout-Deskriptoren.
    • Klausel 16. Das Verfahren gemäß Klausel 14, wobei der eine oder die mehreren Parameter durch einen Benutzer der einen oder mehreren APIs bereitgestellt werden, um einen Suchraum der mehreren GEMM-Implementierungen zu begrenzen.
    • Klausel 17. Das Verfahren gemäß Klausel 14, wobei die eine oder die mehreren APIs eine API umfassen, um potenzielle Algorithmen zu bekommen, die benutzt werden können, um eine spezifizierte Matrixmultiplikationsoperation durchzuführen.
    • Klausel 18. Das Verfahren gemäß Klausel 14, wobei die eine oder die mehreren APIs eine API umfassen, um einen Wert eines Attributs eines Matrixmultiplikationsalgorithmus abzurufen.
    • Klausel 19. Das Verfahren gemäß Klausel 14, wobei die eine oder die mehreren APIs eine API umfassen, um einen Wert eines Attributs einer Matrixmultiplikationsalgorithmus zu konfigurieren.
    • Klausel 20. Das Verfahren gemäß Klausel 14, wobei die eine oder die mehreren APIs eine API umfassen, um mögliche Matrixmultiplikationsalgorithmen für eine Matrixmultiplikationsoperation zu bestimmen, basierend auf: einer Betriebsbeschreibung, Eingabematrizen und einer oder mehreren Suchpräferenzen.
    • Klausel 21. Prozessor, umfassend: eine oder mehrere Schaltungen, um zu helfen, eine oder mehrere neuronale Netzwerke zu trainieren, durch Auswählen mindestens einer oder mehrerer optimierenden allgemeinen Matrix-in-Matrixmultiplikation (GEMM)-Implementierungen unter mehreren GEMM-Implementierungen, die mindestens teilweise basierend auf einem oder mehreren Parametern durchzuführen sind, die von der einen oder den mehreren Anwendungsprogrammierschnittstellen (APIs) empfangen werden.
    • Klausel 22. Der Prozessor gemäß Klausel 21, wobei die eine oder die mehreren optimierenden GEMM-Implementierungen eine geordnete Anordnung ist, die basierend auf geschätzter Rechenzeit organisiert ist.
    • Klausel 23. Der Prozessor gemäß Klausel 21, wobei der eine oder die mehreren Parameter einen Satz von Einschränkungen codieren, wie eine Matrixoperation durchzuführen ist, wobei der Satz von Einschränkungen verwendet wird, um die eine oder die mehreren optimierenden GEMM-Implementierungen zu kennzeichnen.
    • Klausel 24. Der Prozessor gemäß Klausel 21, wobei die eine oder die mehreren Schaltungen die eine oder die mehreren optimierenden GEMM-Implementierungen auswählen sollen durch mindestens:
      • Bestimmen eines Matrixmultiplikationsoperation-Deskriptors basierend mindestens teilweise auf dem einen oder den mehreren Parametern;
      • Bestimmen eines oder mehrerer Matrix-Layout-Deskriptoren basierend mindestens teilweise auf dem einen oder den mehreren Parametern; und
      • Kennzeichnen der einen oder mehreren optimierenden GEMM-Implementierungen basierend mindestens teilweise auf dem Matrixmultiplikationsoperation-Deskriptor und dem einen oder den mehreren Matrix-Layout-Deskriptoren.
    • Klausel 25. Der Prozessor gemäß Klausel 24, wobei der Matrixmultiplikationsoperation-Deskriptor ein oder mehrere Attribute einer Matrixmultiplikationsoperation codiert, wobei das eine oder die mehreren Attribute umfassen:
      • eine erste Art von Transformation, die auf einer ersten Matrix durchzuführen ist;
      • eine zweite Art von Transformation, die auf einer zweiten Matrix durchzuführen ist; oder
      • eine dritte Art von Transformation, die auf einer dritten Matrix durchzuführen ist.
    • Klausel 26. Der Prozessor gemäß Klausel 24, wobei der eine oder die mehreren Matrix-Layout-Deskriptoren jeweils eine oder mehrere Attribute einer Matrix für eine Matrixmultiplikationsoperation codieren, wobei das eine oder die mehreren Attribute umfassen:
      • eine Anzahl von Zeilen;
      • eine Anzahl von Spalten; oder
      • eine führende Dimension.
    • Klausel 27. Ein Prozessor, umfassend: eine oder mehrere Schaltungen, um unter Verwendung eines oder mehrerer neuronaler Netzwerke zu inferenzieren, die durch Auswählen mindestens einer oder mehrerer optimierenden allgemeinen Matrix-in-Matrixmultiplikation(GEMM)-Implementierungen unter den mehreren GEMM-Implementierungen trainiert werden, die basierend mindestens teilweise auf einem oder mehreren Parametern durchzuführen sind, die von einer oder mehreren Anwendungsprogrammierschnittstellen (APIs) empfangen werden.
    • Klausel 28. Der Prozessor gemäß Klausel 27, wobei der eine oder die mehreren Parameter einen oder mehrere Suchpräferenzenparameter umfassen, die Einschränkungen zum Bestimmen der einen oder mehreren optimierenden GEMM-Implementierungen spezifizieren, die zum Durchführen einer Matrixoperation geeignet sind, und anderer GEMM-Implementierungen die nicht geeignet sind.
    • Klausel 29. Der Prozessor gemäß Klausel 28, wobei die eine oder die mehreren Suchpräferenzen spezifizieren, ob Tensorkernoperationen unterstützt werden.
    • Klausel 30. Der Prozessor gemäß Klausel 27, wobei der eine oder die mehreren Parameter umfassen, die einen Suchraum zum Kennzeichnen der einen oder der mehreren optimierenden GEMM-Implementierungen spezifizieren.
    • Klausel 31. Der Prozessor gemäß Klausel 30, wobei die eine oder die mehreren optimierenden GEMM-Implementierungen alle GEMM-Implementierungen der mehreren GEMM-Implementierungen innerhalb des Suchraums umfassen.
    • Klausel 32. Der Prozessor gemäß Klausel 27, wobei die eine oder die mehreren optimierenden GEMM-Implementierungen ein oder mehrere Attribute umfassen, die durch einen Benutzer der einen oder mehreren APIs konfigurierbar sind.
    • Klausel 33. Der Prozessor gemäß Klausel 32, wobei das eine oder die mehrere Attribute durch den Benutzer über einen Handle konfigurierbar sind.
  • Andere Variationen liegen innerhalb des Wesens der vorliegenden Offenbarung. Obwohl die offenbarten Techniken für verschiedene Modifikationen und alternative Konstruktionen empfänglich sind, werden bestimmte erläuterte Ausführungsformen davon in den Zeichnungen gezeigt und wurden vorstehend ausführlich beschrieben. Es sei jedoch zu verstehen, dass keine Absicht besteht, die Offenbarung auf die offenbarte spezielle Form oder Formen zu begrenzen, sondern die Absicht besteht im Gegenteil darin, alle Modifikationen, alternativen Konstruktionen und Äquivalente abzudecken, die in innerhalb des Wesens und des Umfangs der Offenbarung fallen, wie in den beigefügten Ansprüchen definiert.
  • Die Verwendung der Begriffe „einer/eine/eines“ und „der/die/das“ und ähnliche Referenzen im Kontext des Beschreibens der offenbarten Ausführungsformen (insbesondere im Kontext der folgenden Ansprüche) sind auszulegen, als sowohl den Singular als auch den Plural umfassend, solange nichts Anderweitiges hier angegeben oder durch den Kontext deutlich widersprochen wird. Die Begriffe „umfassend“, „aufweisend“, „einschließlich“ und „enthaltend“ sind als offene Begriffe zu betrachtet (das heißt bedeutend „umfassend, jedoch nicht beschränkt auf“), solange nicht anderweitig angemerkt. Der Begriff „verbunden,“ wenn nicht modifiziert und sich auf physische Verbindungen beziehend, ist als teilweise oder vollständig innerhalb enthaltend, befestigt an oder zusammen verbunden auszulegen, sogar wenn es etwas Intervenierendes gibt. Die Nennung von Wertebereichen hier ist lediglich bestimmt, um als ein Kurzformverfahren des einzelnen Bezugnehmens auf jeden separaten Wert zu dienen, der in den Bereich fällt, es sei denn, dass hier etwas anderes angegeben ist, und jeder separate Wert wird in die Spezifikation aufgenommen, als ob er hier einzeln wiedergegeben wäre. Die Verwendung des Begriffs „Satz“ (z.B., „ein Satz von Objekten“) oder „Teilsatz“, es sei denn, es ist etwas anderes angemerkt oder dies widerspricht dem Kontext, ist als eine nicht leere Zusammenstellung auszulegen, die ein oder mehrere Elemente umfasst. Ferner bezeichnet, es sei denn, dass etwas anderes angemerkt ist oder dies dem Kontext widerspricht, der Begriff „Teilsatz“ eines entsprechenden Satzes nicht notwendigerweise einen richtigen Teilsatz des entsprechenden Satzes, sondern der Teilsatz und ein entsprechender Satz können gleich sein.
  • Verbindende Sprache, wie beispielsweise Ausdrücke der Form „mindestens eines von A, B, und C“, oder „mindestens eines von A, B und C“, es sei denn, das es speziell anders angemerkt ist oder anderweitig eindeutig durch den Kontext widersprochen wird, ist andernfalls in dem Kontext zu verstehen, wie sie allgemein verwendet wird, um darzustellen, dass ein Objekt, ein Begriff usw. entweder A oder B oder C oder einen beliebigen nicht leeren Teilsatz des Satzes aus A und B und C sein kann. Beispielsweise beziehen sich im veranschaulichten Beispiel eines Satzes, der drei Elemente aufweist, die verbindenden Ausdrücke „mindestens eines von A, B, und C“ und „mindestens eines von A, B und C“ auf einen der folgenden Sätze: {A}, {B}, {C}, {A, B}, {A, C}, {B, C}, {A, B, C}. Somit ist eine derartige verbindende Sprache allgemein nicht bestimmt, zu implizieren, dass bestimmte Ausführungsformen verlangen, dass mindestens eines von A, mindestens eines von B, und mindestens eines von C jeweils vorhanden sind. Außerdem gibt, es sei denn, dass etwas anderes angemerkt ist oder durch den Kontext widersprochen wird, der Begriff „Mehrzahl“ einen Zustand in der Mehrzahl an (z.B., „eine Mehrzahl von Objekten“ gibt mehrere Objekten an). Eine Anzahl von Elementen in einer Mehrzahl mindestens zwei, kann jedoch mehr sein, wenn so entweder explizit oder durch en Kontext angegeben. Ferner bedeutet, es sei denn, dass etwas anderes angemerkt ist oder dies anderweitig aus dem Kontext offensichtlich ist, der Ausdruck „basierend auf“ „basierend mindestens teilweise auf“ und nicht „basierend allein auf.“
  • Operationen von hier beschriebenen Prozessen können in jeder geeigneten Reihenfolge durchgeführt werden, sofern hier nicht anderweitig angegeben oder der Kontext dem anderweitig eindeutig widerspricht. In mindestens einer Ausführungsform wird ein Prozess, wie beispielsweise jene Prozesse (oder Variationen und/oder Kombinationen davon), die hier beschrieben sind, unter der Steuerung von einem oder mehreren Computersystemen durchgeführt, die mit ausführbaren Anweisungen konfiguriert sind, und wird als Code (z.B., ausführbare Anweisungen, ein oder mehrere Computerprogramme oder ein oder mehrere Anwendungen) implementiert, der zusammen auf einem oder mehreren Prozessoren durch Hardware oder Kombinationen davon ausgeführt wird. In mindestens einer Ausführungsform wird ein Code auf einem computerlesbaren Speichermedium beispielsweise in Form eines Computerprogramms ausgeführt, das mehrere Anweisungen umfasst, die durch einen oder mehrere Prozessoren ausführbar sind. In mindestens einer Ausführungsform ist ein computerlesbares Speichermedium ein nicht flüchtiges computerlesbares Speichermedium, das flüchtige Signale ausschließt (z.B., eine propagierende transiente elektrische oder elektromagnetische Übertragung), jedoch nicht flüchtige Datenspeicherschaltungen (z.B., Puffer, Cache und Warteschlangen) innerhalb Transceivern von flüchtigen Signalen umfasst. In mindestens einer Ausführungsform ist der Code (z.B., ein ausführbarer Code oder Quellencode) auf einem Satz von einem oder mehreren nicht flüchtigen computerlesbaren Speichermedien gespeichert, die darauf gespeicherte ausführbare Anweisungen aufweisen (oder anderem Speicher, um ausführbare Anweisungen zu speichern) die, wenn durch einen oder mehreren Prozessoren eines Computersystems ausgeführt (d.h., als ein Ergebnis einer Ausführung) das Computersystem veranlassen, hier beschriebene Vorgänge durchzuführen. Ein Satz von nicht flüchtigen computerlesbaren Speicherungsmedien umfasst in mindestens einer Ausführungsform mehrere nicht flüchtige computerlesbare Speicherungsmedien und eines oder mehrere von einzelnen nicht flüchtigen Speicherungsmedien der mehreren nicht flüchtigen computerlesbaren Speichermedien Fehlen sämtlicher Code, während mehrere nicht flüchtige computerlesbare Speichermedien zusammen den gesamten Code speichern. In mindestens einer Ausführungsform werden ausführbare Anweisungen ausgeführt, so dass unterschiedliche Anweisungen durch unterschiedliche Prozessoren ausgeführt werden - beispielsweise speichert ein nicht flüchtiges computerlesbares Speichermedium Anweisungen und eine zentrale Haupt-Verarbeitungseinheit („CPU“) führt einige Anweisungen aus, während eine Graphikverarbeitungseinheit („GPU“) andere Anweisungen ausführt. In mindestens einer Ausführungsform weisen unterschiedliche Komponenten eines Computersystems getrennte Prozessoren auf und unterschiedliche Prozessoren führen unterschiedliche Teilsätze von Anweisungen aus.
  • Dementsprechend sind in mindestens einer Ausführungsform Computersysteme konfiguriert, um ein oder mehrere Dienste zu implementieren, die einzeln oder gemeinsam Vorgänge von hier beschriebenen Prozessen durchführen, und derartige Computersysteme sind mit anwendbarer Hardware und/oder Software konfiguriert, welche die Durchführung von Vorgängen ermöglichen. Ferner ist ein Computersystem, das mindestens eine Ausführungsform der vorliegenden Offenbarung implementiert, eine einzelne Vorrichtung, und ist in einer anderen Ausführungsform ein verteiltes Computersystem, das mehrere Vorrichtungen umfasst, die unterschiedlich arbeiten, sodass das verteilte Computersystem die hier beschriebenen Vorgänge durchführt, und sodass eine einzelne Vorrichtung nicht alle Vorgänge durchführt.
  • Die Verwendung von einzelnen oder allen Beispielen oder einer hier beispielhaften bereitgestellten Formulierung (z.B., „wie beispielsweise“) ist bestimmt, lediglich Ausführungsformen der Offenbarung besser zu beleuchten und stellt keine Einschränkung des Umfangs der Offenbarung dar, es sei denn, dass etwas anderes beansprucht ist. Keine Sprache in der Spezifikation sollte so ausgelegt werden, dass sie ein beliebiges nichtbeanspruchtes Element als wesentlich angibt, um die Offenbarung zu praktizieren.
  • Sämtliche Bezugnahmen, einschließlich Veröffentlichungen, Patenanmeldungen und Patente, die hier zitiert sind, werden hiermit durch Bezugnahme in dem gleichen Ausmaß aufgenommen, als ob jede Bezugnahme einzeln und speziell angegeben würde, um durch Bezugnahme aufgenommen zu werden, und in ihrer Gesamtheit hier dargelegt wären.
  • In der Beschreibung und den Ansprüchen können die Begriffe „gekoppelt“ und „verbunden“ zusammen mit ihren Ableitungen verwendet werden. Es sei zu verstehen, dass diese Begriffe nicht als Synonyme füreinander bestimmt sind. Stattdessen kann in bestimmten Beispielen „verbunden“ oder „gekoppelt“ verwendet werden, um anzugeben, dass zwei oder mehr Elemente in direktem oder indirektem physischen oder elektrischen Kontakt miteinander sind. „Gekoppelt“ kann ebenfalls bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt miteinander sind, jedoch dennoch weiterhin kooperieren oder miteinander wechselwirken.
  • Sofern nicht speziell anders angegeben, wird anerkannt, dass die in dieser Spezifikation enthaltenen Begriffe wie „Verarbeiten“, „Rechnen“, „Berechnen“, „Bestimmen“ oder dergleichen sich auf eine Aktion und/oder Verfahren eines Computers oder eines Rechensystems beziehen, wie einem oder mehreren Computern oder einer ähnlichen elektronischen Vorrichtung, die Daten manipulieren oder umwandeln, die als physikalische, wie beispielsweise elektronische, Größen in den Registern des Rechensystems und/oder Speichern in andere Daten, die auf ähnliche Weise als physikalische Größen innerhalb der Speicher des Rechensystems, Registern oder anderer derartiger Informationsspeicherungs-, Übertragungs- oder Anzeigevorrichtungen dargestellt werden.
  • Auf eine ähnlichen Art und Weise kann sich der Begriff „Prozessor“ auf jede Vorrichtung oder Abschnitt einer Vorrichtung beziehen, die elektronische Daten aus Registern und/oder Speicher verarbeitet und diese elektronischen Daten in andere elektronische Daten transformiert, die in Registern und/oder Speicher gespeichert werden können. Als nicht einschränkendes Beispiel kann „Prozessor“ eine CPU oder eine GPU sein. Eine „Rechenplattform“ kann einen oder mehrere Prozessoren umfassen. Wie hier verwendet, können „Software“-Prozesse beispielsweise Software- und/oder Hardwareentitäten umfassen, die Arbeit im Laufe der Zeit durchführen, wie beispielsweise Aufgaben, Threads und intelligente Agenten. Jeder Prozess kann sich ebenfalls auf mehrere Prozesse zum Ausführen von Anweisungen der Reihe nach oder parallel, kontinuierlich oder intermittierend beziehen. Die Begriffe „System“ und „Verfahren“ werden hier austauschbar verwendet, insofern als System ein oder mehrere Verfahren verkörpern und Verfahren als ein System betrachtet werden können.
  • In dem vorliegenden Dokument können Verweise auf das Erhalten, Erfassen, Empfangen oder Eingeben von analogen oder digitalen Daten in ein Teilsystem, Computersystem oder computerimplementierte Maschine erfolgen. Der Prozess des Erhaltens, Erfassens, Empfangens oder Eingebens von analogen und digitalen Daten kann in einer Vielfalt von Möglichkeiten erreicht werden, wie beispielsweise durch Empfangen von Daten als ein Parameter eines Funktionsaufrufs oder eines Aufrufs an eine Anwendungsprogrammierschnittstelle. In einigen Implementierungen kann der Prozess des Erhaltens, Erfassens, Empfangen oder Eingebens von analogen oder digitalen Daten durch Transferieren von Daten über eine serielle oder parallele Schnittstelle erreicht werden. In einer anderen Implementierung können Prozesse des Erhaltens, Erfassens, Empfangens oder Eingebens von analogen oder digitalen Daten durch Transferieren von Daten über ein Computernetzwerk von bereitstellender Entität zu erfassender Entität erreicht werden. Verweise können ebenfalls auf das Bereitstellen, Ausgeben, Übertragen, Senden oder Repräsentieren analoger oder digitaler Daten erfolgen. In verschiedene Beispielen kann der Prozess des Bereitstellens, Ausgebens, Übertragens, Sendens oder Repräsentierens analoger oder digitaler Daten durch Transferieren von Daten als ein Eingangs- oder Ausgangsparameter eines Funktionsaufruf, eines Parameters einer Anwendungsprogrammierschnittstelle oder eines Mechanismus zur Interprozesskommunikation erreicht werden.
  • Obwohl Beschreibungen hier beispielhafte Implementierungen von beschriebenen Techniken darlegen, können andere Architekturen verwendet werden, um die beschriebene Funktionalität zu implementieren, und sind bestimmt, innerhalb des Umfangs der Offenbarung zu liegen. Des Weiteren könnten, obwohl spezifische Verteilungen von Verantwortlichkeiten obenstehend zum Zweck der Erläuterung definiert sind, verschiedene Funktionen und Verantwortlichkeiten in unterschiedlichen Weisen abhängig von den Umständen verteilt und aufgeteilt werden.
  • Des Weiteren sei zu verstehen, obwohl der Gegenstand in einer für strukturelle Merkmale und/oder methodische Handlungen spezifischen Sprache beschrieben wurde, dass der in der Offenbarung definierte Gegenstand nicht notwendigerweise auf beschriebene spezifische Merkmale oder Handlungen beschränkt ist. Vielmehr werden spezifische Merkmale und Handlungen als beispielhafte Formen des Implementierens der Ansprüche offenbart.

Claims (33)

  1. Maschinenlesbares Medium mit einer oder mehreren darauf gespeicherten Anwendungsprogrammierschnittstellen (APIs), die, wenn von einem oder mehreren Prozessoren durchgeführt, den einen oder die mehrere Prozessoren veranlassen, mindestens: eine oder mehrere optimierende allgemeine Matrix-in-Matrixmultiplikation (GEMM)-Implementierungen unter mehreren GEMM-Implementierungen auszuwählen, die basierend mindestens teilweise auf einem oder mehreren Parametern auszuführen sind, die von der einen oder mehreren APIs empfangen werden.
  2. Maschinenlesbares Medium gemäß Anspruch 1, wobei der eine oder die mehreren Parameter einen Satz von Einschränkungen codieren, wie eine Matrixoperation durchzuführen ist, wobei der Satz von Einschränkungen verwendet wird, um die eine oder die mehreren optimierende GEMM-Implementierungen zu kennzeichnen.
  3. Maschinenlesbares Medium gemäß Anspruch 1, wobei die eine oder die mehreren APIs, um die eine oder die mehreren optimierenden GEMM-Implementierungen auszuwählen, wenn durch den einen oder mehreren Prozessoren durchgeführt, den einen oder die mehreren Prozessoren veranlassen, mindestens: einen Matrixmultiplikationsoperation-Deskriptor basierend mindestens teilweise auf dem einen oder den mehreren Parametern zu bestimmen; einen oder mehrere Matrix-Layout-Deskriptoren basierend mindestens teilweise auf dem einen oder den mehreren Parametern zu bestimmen; und die eine oder die mehreren optimierenden GEMM-Implementierungen basierend mindestens teilweise auf dem Matrixmultiplikationsoperation-Deskriptor und dem einen oder den mehreren Matrix-Layout-Deskriptoren zu kennzeichnen.
  4. Maschinenlesbares Medium gemäß Anspruch 3, wobei der Matrixmultiplikationsoperation-Deskriptor ein oder mehrere Attribute einer Matrixmultiplikationsoperation codiert, wobei das eine oder mehrere Attribute umfassen: einen Rechentyp; einen Skalentyp; einen Zeigermodus; einen Füllmodus; eine Epilogfunktion; oder einen Biasvektorzeiger.
  5. Maschinenlesbares Medium gemäß Anspruch 3, wobei der eine oder die mehreren Matrix-Layout-Deskriptoren jeweils eine oder mehrere Attribute einer Matrix für eine Matrixmultiplikationsoperation codieren, wobei das eine oder die mehrere Attribute umfassen: einen Datengenauigkeitstyp; eine Speicherreihenfolge von Daten der Matrix; einen Batch-Zählwert; einen strided Batch-Versatz; oder einen Ebenenversatz.
  6. Maschinenlesbares Medium gemäß Anspruch 1, wobei die ausgewählte eine oder die mehreren optimierenden GEMM-Implementierungen als Teil eines Ergebnisvektors in der Reihenfolge der geschätzten Rechenzeit bereitgestellt werden.
  7. System, umfassend: einen oder mehrere Prozessoren, um Anweisungen auszuführen, um eine oder mehrere Anwendungsprogrammierschnittstellen (APIs) zu implementieren, wobei die eine oder die mehreren optimierenden allgemeine Matrix-in-Matrixmultiplikation (GEMM)-Implementierungen unter mehreren GEMM-Implementierungen auswählen, die basierend mindestens teilweise auf dem einen oder den mehreren Parametern durchzuführen sind, die von der einen oder den mehreren APIs empfangen werden; und einen oder mehrere Speicher, um den einen oder die mehreren Parameter zu speichern.
  8. System gemäß Anspruch 7, wobei der eine oder die mehreren Parameter einen oder mehrere Suchpräferenzenparameter umfassen, wobei der eine oder die mehreren Parameter einen oder mehrere Suchpräferenzenparameter umfassen, die Einschränkungen zum Bestimmen spezifizieren, dass die eine oder die mehreren optimierenden GEMM-Implementierungen zum Durchführen einer Matrixoperation geeignet sind und andere GEMM-Implementierungen nicht geeignet sind, wobei die eine oder die mehreren Suchpräferenzen einem Benutzer der einen oder der mehreren APIs ermöglichen, zu spezifizieren: einen Suchmodus; einen maximalen erlaubten Arbeitsbereichsspeicher; einen Mathematikmodus; ein Verringerungsschema; einen Gaußschen Modus; Pufferausrichtungsinformationen für eine oder mehrere Operanden; eine maximale Wellenzählung; einen Zeigermodus; oder eine Epilogfunktion.
  9. System gemäß Anspruch 8, wobei die eine oder die mehreren Suchpräferenzen spezifizieren, ob Kerne eines Streaming-Multiprozessors zum Durchführen der Matrixoperation zu verwenden sind.
  10. System gemäß Anspruch 7, wobei der eine oder die mehreren Parameter eine oder mehrere Benutzer-konfigurierbare Attribute umfassen, die spezifizieren, wie eine Matrixoperation durchzuführen ist, wobei das eine oder die mehreren Benutzerkonfigurierbaren Attribute umfassen: Kacheldimensionen für Eingabematrizen in die Matrixoperation; k-Dimensionsaufteilung der Eingabematrizen zur Parallelberechnung; ein Verringerungsschema zum Akkumulieren der Ergebnissen von den k-Dimensionen; oder Swizzling-Unterstützung.
  11. System gemäß Anspruch 7, wobei die eine oder die mehreren GEMM-Implementierungen als Datenobjekte codiert sind, bei der die Datenobjekte durch die eine oder die mehreren APIs modifiziert werden, um zu modifizieren, wie eine Matrixoperation durchzuführen ist.
  12. System gemäß Anspruch 7, wobei der eine oder die mehreren Prozessoren eine Graphikverarbeitungseinheit umfassen, um die Anweisungen auszuführen.
  13. System gemäß Anspruch 7, wobei die ausgewählte eine oder mehreren optimierenden GEMM-Implementierungen als Teil eines Ergebnisvektors in der Reihenfolge der geschätzten Rechenzeit bereitgestellt werden.
  14. Verfahren, umfassend Auswählen einer oder mehrerer optimierenden allgemeinen Matrix-in-Matrixmultiplikation (GEMM)-Implementierungen unter mehreren GEMM-Implementierungen, die basierend mindestens teilweise auf einem oder mehreren Parametern durchzuführen sind, die von der einen oder den mehreren Anwendungsprogrammierschnittstellen empfangen werden.
  15. Verfahren gemäß Anspruch 14, wobei das Auswählen der einen oder der mehreren optimierenden allgemeinen GEMM-Implementierungen umfasst: Bestimmen eines Matrixmultiplikationsoperation-Deskriptors basierend mindestens teilweise auf dem einen oder den mehreren Parametern; Bestimmen eines oder mehrerer Matrix-Layout-Deskriptoren basierend mindestens teilweise auf dem einen oder den mehreren Parametern; und Kennzeichnen der einen oder den mehreren optimierenden GEMM-Implementierungen basierend mindestens teilweise auf dem Matrixmultiplikationsoperation-Deskriptor und dem einen oder der mehreren Matrix-Layout-Deskriptoren.
  16. Verfahren gemäß Anspruch 14, wobei der eine oder die mehreren Parameter durch einen Benutzer der einen oder mehreren APIs bereitgestellt werden, um einen Suchraum der mehreren GEMM-Implementierungen zu begrenzen.
  17. Verfahren gemäß Anspruch 14, wobei die eine oder die mehreren APIs eine API umfassen, m potenzielle Algorithmen zu bekommen, die benutzt werden können, um eine spezifizierte Matrixmultiplikationsoperation durchzuführen.
  18. Verfahren gemäß Anspruch 14, wobei die eine oder die mehreren APIs eine API umfassen, um einen Wert eines Attributs eines Matrixmultiplikationsalgorithmus abzurufen.
  19. Verfahren gemäß Anspruch 14, wobei die eine oder die mehreren APIs eine API umfassen, um einen Wert eines Attributs einer Matrixmultiplikationsalgorithmus zu konfigurieren.
  20. Verfahren gemäß Anspruch 14, wobei die eine oder die mehreren APIs eine API umfassen, um mögliche Matrixmultiplikationsalgorithmen für eine Matrixmultiplikationsoperation zu bestimmen, basierend auf: einer Betriebsbeschreibung, Eingabematrizen und einer oder mehreren Suchpräferenzen.
  21. Prozessor, umfassend: eine oder mehrere Schaltungen, um zu helfen, eine oder mehrere neuronale Netzwerke zu trainieren, durch Auswählen mindestens einer oder mehrerer optimierenden allgemeinen Matrix-in-Matrixmultiplikation(GEMM)-Implementierungen unter mehreren GEMM-Implementierungen, die mindestens teilweise basierend auf einem oder mehreren Parametern durchzuführen sind, die von der einen oder den mehreren Anwendungsprogrammierschnittstellen (APIs) empfangen werden.
  22. Prozessor gemäß Anspruch 21, wobei die eine oder die mehreren optimierenden GEMM-Implementierungen eine geordnete Anordnung ist, die basierend auf geschätzter Rechenzeit organisiert ist.
  23. Prozessor gemäß Anspruch 21, wobei der eine oder die mehreren Parameter einen Satz von Einschränkungen codieren, wie eine Matrixoperation durchzuführen ist, wobei der Satz von Einschränkungen verwendet wird, um die eine oder die mehreren optimierenden GEMM-Implementierungen zu kennzeichnen.
  24. Prozessor gemäß Anspruch 21, wobei die eine oder die mehreren Schaltungen die eine oder die mehreren optimierenden GEMM-Implementierungen auswählen sollen durch mindestens: Bestimmen eines Matrixmultiplikationsoperation-Deskriptors basierend mindestens teilweise auf dem einen oder den mehreren Parametern; Bestimmen eines oder mehrerer Matrix-Layout-Deskriptoren basierend mindestens teilweise auf dem einen oder den mehreren Parametern; und Kennzeichnen der einen oder mehreren optimierenden GEMM-Implementierungen basierend mindestens teilweise auf dem Matrixmultiplikationsoperation-Deskriptor und dem einen oder den mehreren Matrix-Layout-Deskriptoren.
  25. Prozessor gemäß Anspruch 24, wobei der Matrixmultiplikationsoperation-Deskriptor ein oder mehrere Attribute einer Matrixmultiplikationsoperation codiert, wobei das eine oder die mehreren Attribute umfassen: eine erste Art von Transformation, die auf einer ersten Matrix durchzuführen ist; eine zweite Art von Transformation, die auf einer zweiten Matrix durchzuführen ist; oder eine dritte Art von Transformation, die auf einer dritten Matrix durchzuführen ist.
  26. Prozessor gemäß Anspruch 24, wobei der eine oder die mehreren Matrix-Layout-Deskriptoren jeweils eine oder mehrere Attribute einer Matrix für eine Matrixmultiplikationsoperation codieren, wobei das eine oder die mehreren Attribute umfassen: eine Anzahl von Zeilen; eine Anzahl von Spalten; oder eine führende Dimension.
  27. Prozessor, umfassend: eine oder mehrere Schaltungen, um unter Verwendung eines oder mehrerer neuronaler Netzwerke zu inferenzieren, die durch Auswählen mindestens einer oder mehrerer optimierenden allgemeinen Matrix-in-Matrixmultiplikation(GEMM)-Implementierungen unter den mehreren GEMM-Implementierungen trainiert werden, die basierend mindestens teilweise auf einem oder mehreren Parametern durchzuführen sind, die von einer oder mehreren Anwendungsprogrammierschnittstellen (APIs) empfangen werden.
  28. Prozessor gemäß Anspruch 27, wobei der eine oder die mehreren Parameter einen oder mehrere Suchpräferenzenparameter umfassen, die Einschränkungen zum Bestimmen der einen oder mehreren optimierenden GEMM-Implementierungen spezifizieren, die zum Durchführen einer Matrixoperation geeignet sind, und anderer GEMM-Implementierungen, die nicht geeignet sind.
  29. Prozessor gemäß Anspruch 28, wobei die eine oder die mehreren Suchpräferenzen spezifiziert, ob Tensorkernoperationen unterstützt werden.
  30. Prozessor gemäß Anspruch 27, wobei der eine oder die mehreren Parameter Parameter umfassen, die einen Suchraum zum Kennzeichnen der einen oder der mehreren optimierenden GEMM-Implementierungen spezifizieren.
  31. Prozessor gemäß Anspruch 30, wobei die eine oder die mehreren optimierenden GEMM-Implementierungen alle GEMM-Implementierungen der mehreren GEMM-Implementierungen innerhalb des Suchraums umfassen.
  32. Prozessor gemäß Anspruch 27, wobei die eine oder die mehreren optimierenden GEMM-Implementierungen ein oder mehrere Attribute umfassen, die durch einen Benutzer der einen oder mehreren APIs konfigurierbar sind.
  33. Prozessor gemäß Anspruch 32, wobei das eine oder die mehreren Attribute durch die Benutzer über einen Handle konfigurierbar sind.
DE102021103492.2A 2020-02-19 2021-02-15 Anwendungsprogrammierschnittstelle zum beschleunigen von matrixoperationen Pending DE102021103492A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/795,380 US20210256092A1 (en) 2020-02-19 2020-02-19 Application programming interface to accelerate matrix operations
US16/795,380 2020-02-19

Publications (1)

Publication Number Publication Date
DE102021103492A1 true DE102021103492A1 (de) 2021-08-19

Family

ID=75339278

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102021103492.2A Pending DE102021103492A1 (de) 2020-02-19 2021-02-15 Anwendungsprogrammierschnittstelle zum beschleunigen von matrixoperationen

Country Status (4)

Country Link
US (4) US20210256092A1 (de)
CN (3) CN115310034A (de)
DE (1) DE102021103492A1 (de)
GB (2) GB2593290A (de)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114091685B (zh) * 2021-11-08 2022-08-23 北京百度网讯科技有限公司 深度学习框架的张量切分方法、装置、设备和存储介质
CN117675608A (zh) * 2022-08-31 2024-03-08 华为技术有限公司 一种处理装置及控制方法
US20240103858A1 (en) * 2022-09-22 2024-03-28 Apple Inc. Instruction Support for Matrix Multiplication
CN115408061B (zh) * 2022-11-02 2023-01-31 北京红山微电子技术有限公司 复数矩阵运算的硬件加速方法、装置、芯片及存储介质

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7002591B1 (en) * 2000-08-23 2006-02-21 Nintendo Co., Ltd. Method and apparatus for interleaved processing of direct and indirect texture coordinates in a graphics system
US20140289445A1 (en) * 2013-03-22 2014-09-25 Antony Savich Hardware accelerator system and method
US9772890B2 (en) * 2014-12-31 2017-09-26 International Business Machines Corporation Sophisticated run-time system for graph processing
US9304835B1 (en) * 2014-12-31 2016-04-05 International Business Machines Corporation Optimized system for analytics (graphs and sparse matrices) operations
US10073815B2 (en) * 2016-05-31 2018-09-11 Palo Alto Research Cener Incorporated System and method for speeding up general matrix-matrix multiplication on the GPU
WO2018094087A1 (en) * 2016-11-17 2018-05-24 The Mathworks, Inc. Systems and methods for generating code for parallel processing units
US20180189675A1 (en) * 2016-12-31 2018-07-05 Intel Corporation Hardware accelerator architecture and template for web-scale k-means clustering
KR102520017B1 (ko) * 2016-12-31 2023-04-11 인텔 코포레이션 이종 컴퓨팅을 위한 시스템들, 방법들, 및 장치들
US11216722B2 (en) * 2016-12-31 2022-01-04 Intel Corporation Hardware accelerator template and design framework for implementing recurrent neural networks
US10146738B2 (en) * 2016-12-31 2018-12-04 Intel Corporation Hardware accelerator architecture for processing very-sparse and hyper-sparse matrix data
US10180928B2 (en) * 2016-12-31 2019-01-15 Intel Corporation Heterogeneous hardware accelerator architecture for processing sparse matrix data with skewed non-zero distributions
US10387037B2 (en) * 2016-12-31 2019-08-20 Intel Corporation Microarchitecture enabling enhanced parallelism for sparse linear algebra operations having write-to-read dependencies
US10467795B2 (en) * 2017-04-08 2019-11-05 Intel Corporation Sub-graph in frequency domain and dynamic selection of convolution implementation on a GPU
US10210137B2 (en) * 2017-06-28 2019-02-19 Intel Corporation Binary multiplier for binary vector factorization
US11717702B2 (en) * 2017-07-30 2023-08-08 Icahn School Of Medicine At Mount Sinai 3D deep planning radiotherapy system and method
US11429848B2 (en) * 2017-10-17 2022-08-30 Xilinx, Inc. Host-directed multi-layer neural network processing via per-layer work requests
CN109522254B (zh) * 2017-10-30 2022-04-12 上海寒武纪信息科技有限公司 运算装置及方法
US20190278593A1 (en) * 2018-03-09 2019-09-12 Nvidia Corporation Accelerating linear algebra kernels for any processor architecture
US11003960B2 (en) * 2018-05-25 2021-05-11 Microsoft Technology Licensing, Llc Efficient incident management in large scale computer systems
CN111124656B (zh) * 2018-10-31 2023-09-15 伊姆西Ip控股有限责任公司 用于向专用计算资源分配任务的方法、设备和计算机可读存储介质
US20210048991A1 (en) * 2019-08-13 2021-02-18 Nvidia Corporation Performing matrix operations in neural networks
US11113782B2 (en) * 2019-10-15 2021-09-07 Vmware, Inc. Dynamic kernel slicing for VGPU sharing in serverless computing systems

Also Published As

Publication number Publication date
GB202102376D0 (en) 2021-04-07
CN115310034A (zh) 2022-11-08
US20220300578A1 (en) 2022-09-22
US20240086491A1 (en) 2024-03-14
US20210256092A1 (en) 2021-08-19
GB202112943D0 (en) 2021-10-27
CN113282880A (zh) 2021-08-20
US20210406342A1 (en) 2021-12-30
GB2593290A (en) 2021-09-22
CN113961873A (zh) 2022-01-21

Similar Documents

Publication Publication Date Title
DE102021105617A1 (de) Techniken zum transferieren von daten zwischen hardwarevorrichtungen
DE102021102589A1 (de) Berechnungsgraph-optimierung
DE102021103492A1 (de) Anwendungsprogrammierschnittstelle zum beschleunigen von matrixoperationen
DE102021106796A1 (de) Techniken zur speicherfehlerisolierung
DE102021104970A1 (de) Kooperative parallele speicherzuteilung
DE102021104561A1 (de) Asynchrone datenbewegungspipeline
DE102021106797A1 (de) Techniken zur orchestrierung von phasen der thread-synchronisation
DE112021005433T5 (de) Verfahren zur leistungsbalancierung mehrerer chips
DE112022003222T5 (de) Multi-architektur-ausführungsgraphen
DE112022002140T5 (de) Licht-Resampling mit Strahlenverfolgung und Sichtbarkeit im Bildschirmraum
DE102021105251A1 (de) Konfigurierbarer kühlkörper
DE102023101893A1 (de) Graphenbasierter speicher
DE102022132008A1 (de) Asynchrone speicherdeallokation
DE102022131530A1 (de) Verfahren zum modifizieren von graphencode
DE102022132013A1 (de) Anwendungsprogrammierschnittstellen für interoperabilität
DE102022131708A1 (de) Anwendungsprogrammierschnittstelle zum begrenzen von speicher
DE102022124362A1 (de) Benutzerkonfigurierbare speicherzuweisung
DE112022002953T5 (de) Parallele verarbeitung von thread-gruppen
DE112022001917T5 (de) Synchronisieren einer graphausführung
DE112022000425T5 (de) Gleichzeitiges einführen von code
DE112022002258T5 (de) Tensormodifikation basierend auf der verarbeitung von ressourcen
DE102022107673A1 (de) Räumlich-zeitliches resampling mit entkoppeltem shading und wiederverwendung
DE112021007132T5 (de) Berechnung der bewegung von pixeln zwischen bildern
DE102023115662A1 (de) Änderung der genauigkeit von operanden
DE102023128545A1 (de) Anwendungsprogrammierschnittstelle zur angabe von operationen

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R130 Divisional application to

Ref document number: 102021006598

Country of ref document: DE

Ref document number: 102021004660

Country of ref document: DE

Ref document number: 102021006742

Country of ref document: DE

R130 Divisional application to

Ref document number: 102021004660

Country of ref document: DE

Ref document number: 102021006598

Country of ref document: DE

Ref document number: 102021006742

Country of ref document: DE

R130 Divisional application to

Ref document number: 102021004660

Country of ref document: DE

Ref document number: 102021006598

Country of ref document: DE

Ref document number: 102021006742

Country of ref document: DE