DE102021120605A1 - Effiziente softmax-berechnung - Google Patents

Effiziente softmax-berechnung Download PDF

Info

Publication number
DE102021120605A1
DE102021120605A1 DE102021120605.7A DE102021120605A DE102021120605A1 DE 102021120605 A1 DE102021120605 A1 DE 102021120605A1 DE 102021120605 A DE102021120605 A DE 102021120605A DE 102021120605 A1 DE102021120605 A1 DE 102021120605A1
Authority
DE
Germany
Prior art keywords
vector
softmax
memory
unit
unnormalized
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
DE102021120605.7A
Other languages
English (en)
Inventor
Jacob Robert Stevens
Rangharajan VENKATESAN
Steve Haihang Dai
Brucek Khailany
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 DE102021120605A1 publication Critical patent/DE102021120605A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/544Methods 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 for evaluating functions by calculation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/047Probabilistic or stochastic networks
    • 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/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/061Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using biological neurons, e.g. biological neurons connected to an integrated circuit
    • 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
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Molecular Biology (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Neurology (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Probability & Statistics with Applications (AREA)
  • Computer Hardware Design (AREA)
  • Image Analysis (AREA)

Abstract

Lösungen zur Verbesserung der Effizienz von Softmax-Berechnungen für effiziente Deep-Learning-Inferenz in Transformatoren und anderen neuronalen Netzen. Die Lösungen nutzen eine Implementierung verschiedener Operationen mit reduzierter Genauigkeit, indem sie exmit 2xersetzen, um den mit der Berechnung von exverbundenen Anweisungs-Overhead zu reduzieren, und Gleitkomma-max-Berechnung von Vektorelementen durch eine Ganzzahl-max - Berechnung ersetzen. Außerdem wird eine skalierbare Implementierung beschrieben, die Softmax in UnNormalized Softmax und Normalization-Operationen zerlegt.

Description

  • ALLGEMEINER STAND DER TECHNIK
  • Eine Softmax-Berechnung wird häufig in verschiedenen Arten von neuronalen Netzen und Deep-Learning-Anwendungen verwendet. Beispiele für neuronale Netze, die Softmax verwenden, sind rekurrente neuronale Netze, konvolutionelle neuronale Netze und neuronale Transformatornetze.
  • Die übliche Berechnung von Softmax hat Nachteile, darunter eine geringe Speicherauslastung und dass sie in einigen Aspekten rechenaufwändig ist. Somit können neuronale Netz- und Deep-Learning-Anwendungen von einer effizienteren Berechnung von Softmax profitieren.
  • Insbesondere neuronale Transformatornetze haben vielversprechende Ergebnisse für Anwendungen der Conversational Artificial Intelligence (KI) gezeigt. Transformatornetze verwenden Aufmerksamkeitsmechanismen, die Softmax sowohl auf der Codierer- als auch der Decodiererstufe verwenden, und können besonders von einer effizienteren Softmax-Berechnung profitieren.
  • Tiefe neuronale Netze (Deep Neural Networks - DNNs) sind eine Klasse neuronaler Netze, die sich als Schlüsselansatz zur Lösung komplexer Probleme in verschiedenen technischen Bereichen herausgestellt haben, insbesondere in denen, die Deep Machine Learning beinhalten. Anwendungen von DNNs haben je nach Implementierung unterschiedliche Leistungs-, Genauigkeits- und Stromversorgungsanforderungen. Der Aufbau von dedizierten DNNs für die Anforderungen bestimmter Implementierungen kann aufgrund der hohen Auslegungskomplexität und Herstellungsherausforderungen unerschwinglich sein. Tiefe neuronale Netze, die ebenfalls tendenziell viele Softmax-Berechnungen verwenden, können somit auch von einer effizienteren Softmax-Berechnung profitieren.
  • In einigen Aspekten beinhaltet ein System einen oder mehrere Prozessoren. Das System beinhaltet eine Logik, die, wenn sie auf den einen oder die mehreren Prozessoren angewendet wird, einen nicht normierten Softmax-Vektor aus einem Eingabevektor berechnet, indem Elemente des Eingabevektors in Zweierpotenzen angehoben werden und ein Ganzzahl-Vektormaximum des Eingabevektors berechnet wird. Das System beinhaltet ferner eine Logik, die, wenn sie auf den einen oder die mehreren Prozessoren angewendet wird, den nicht normierten Softmax-Vektor in einen normierten Softmax-Vektor umwandelt.
  • In anderen Aspekten beinhaltet ein künstliches neuronales Netz eine oder mehrere Feed-Forward-Schichten und eine oder mehrere Softmax-Schichten, die mit der einen oder den mehreren Feed-Forward-Schichten gekoppelt sind. Das künstliche neuronale Netz beinhaltet wenigstens eine der Softmax-Schichten, die dazu konfiguriert ist, einen nicht normierten Softmax-Vektor aus einem Eingabevektor zu berechnen, indem Elemente des Eingabevektors in Zweierpotenzen angehoben werden und ein Ganzzahl-Vektormaximum des Eingabevektors berechnet wird.
  • In wieder anderen Aspekten beinhaltet ein künstliches neuronales Transformatornetz eine Selbstaufmerksamkeitsschicht und eine Codierer-Decodierer-Aufmerksamkeitsschicht. Die Selbstaufmerksamkeitsschicht und die Codierer-Decodierer-Aufmerksamkeitsschicht umfassen jeweils eine Softmax-Schicht, die dazu konfiguriert ist, einen nicht normierten Softmax-Vektor aus einem Eingabevektor zu berechnen, indem Elemente des Eingabevektors in Zweierpotenzen angehoben werden und ein Ganzzahl-Vektormaximum des Eingabevektors berechnet wird.
  • Figurenliste
  • Um die Erörterung eines bestimmten Elements oder Vorgangs leicht zu identifizieren, beziehen sich die höchstwertigen Ziffern in einer Referenznummer auf das Bezugszeichen der Figur, in der dieses Element zuerst eingeführt wird.
    • 1 zeigt ein beispielhaftes System 100, das künstliche neuronale Netze verwendet.
    • 2 zeigt ein Deep-Learning-System 202 gemäß einer Ausführungsform.
    • 3 zeigt ein neuronales Transformatornetz 302 gemäß einer Ausführungsform.
    • 4 zeigt einen Codierer 402 gemäß einer Ausführungsform.
    • 5 zeigt einen Decodierer 502 gemäß einer Ausführungsform.
    • 6 zeigt eine Aufmerksamkeitsschicht 602 gemäß einer Ausführungsform.
    • 7A - 7C zeigen einen Softmax-Algorithmus 700 gemäß einer Ausführungsform.
    • 8A - 8D zeigen Softmax-Rechenlogik 800 in einer Ausführungsform.
    • 9 zeigt ein verteiltes Computersystem 900 zur Softmax-Berechnung gemäß einer Ausführungsform.
    • 10 zeigt ein Multi-Chip-Paket 1012 gemäß einer Ausführungsform.
    • 11 zeigt einen neuronalen Netzprozessor 1100, der auf einem einzelnen Chip implementiert ist, gemäß einer Ausführungsform.
    • 12 zeigt ein lokales Verarbeitungselement 1200 gemäß einer Ausführungsform.
    • 13 zeigt ein lokales Verarbeitungselement 1300 gemäß einer Ausführungsform auf detailliertere Weise.
    • 14 zeigt Details eines Postprozessors 1212 gemäß einer Ausführungsform.
    • 15 zeigt ein globales Verarbeitungselement 1522 gemäß einer Ausführungsform.
    • 16 zeigt eine Parallelverarbeitungseinheit 2008b gemäß einer Ausführungsform.
    • 17 zeigt ein allgemeines Verarbeitungscluster 1700 gemäß einer Ausführungsform.
    • 18 zeigt eine Speicherpartitionseinheit 1800 gemäß einer Ausführungsform.
    • 19 zeigt einen Streaming-Multiprozessor 1900 gemäß einer Ausführungsform.
    • 20 zeigt ein Verarbeitungssystem 2000 gemäß einer Ausführungsform.
    • 21 zeigt ein beispielhaftes Verarbeitungssystem 2100 gemäß einer weiteren Ausführungsform.
    • 22 zeigt eine Grafikverarbeitungspipeline 2200 gemäß einer Ausführungsform.
  • DETAILLIERTE BESCHREIBUNG
  • In vielen Deep-Learning-Anwendungen ist es üblich, Inferenz an einem trainierten Modell mit weniger präzisen Datendarstellungen durchzuführen, um die Leistung zu steigern (Durchsatz oder Latenz pro Inferenz zu verbessern) und den pro Inferenz aufgewendeten Rechenaufwand zu reduzieren. Diese Modelle können innerhalb von Tensor-Kernen auf programmierbaren Grafikprozessoren (GPUs) oder in dedizierten Deep-Learning-Beschleunigern angewendet werden. Einige Lösungen konzentrieren sich auf die Verbesserung der Leistung neuronaler Netzschichten, indem sie diese Schichten als Batch-Matrix-Multiply-Operationen in GPUs implementieren. „Neuronales Netz“ bezieht sich auf einen Algorithmus oder ein Rechensystem, das auf einer Sammlung verbundener Einheiten oder Knoten basiert, die als künstliche Neuronen bezeichnet werden und die Neuronen in einem biologischen System lose modellieren. Jede Verbindung zwischen Neuronen, wie die Synapsen in einem biologischen Gehirn, kann ein Signal (eine Aktivierung) von einem künstlichen Neuron zu einem anderen übertragen. Ein künstliches Neuron, das ein Signal (die Eingabeaktivierung) empfängt, kann es verarbeiten und dann weitere daran angeschlossene künstliche Neuronen (die Ausgabeaktivierung) signalisieren. „Eingabeaktivierung“ bezieht sich auf eine Aktivierung, die von einem Neuron in einem neuronalen Netz empfangen wird. „Ausgabeaktivierung“ bezieht sich auf eine Aktivierung, die von einem Neuron in einem neuronalen Netz ausgegeben wird. Eine Ausgabeaktivierung wird typischerweise basierend auf den Eingabeaktivierungen des Neurons und den auf die Eingabeaktivierungen angewendeten Gewichtungen berechnet. „Gewichtungen“ bezieht sich auf Werte, mit denen Aktivierungen multipliziert werden, um den Einfluss der Aktivierungswerte in einer Aktivierungsfunktion zu erhöhen oder zu verringern. „Aktivierungen“ bezieht sich auf die Ausgabewerte von Neuronen in einem neuronalen Netz, die zumindest teilweise auf der Grundlage von Gewichtungen, die in das Neuron eingegeben werden, und einer Aktivierungsfunktion des Neurons berechnet werden. Aktivierungen werden auch „Aktivierungswerte“ genannt.
  • Die Rechenleistung der Core-Matrix-Multiply-Berechnungen hat sich mit nachfolgenden Generationen von GPU-Hardware weiter verbessert. Andere Aspekte von Deep-Learning-Anwendungen sind somit zu Engpässen geworden.Beispielsweise können sich Softmax-Berechnungen in vielen konversationellen Arbeitslasten der künstlichen Intelligenz, wie beispielsweise transformatorbasierten neuronalen Netzen, als Engpass herausstellen.
  • Konversationelle KI-Implementierungen, die neuronale Transformatornetze verwenden, können besonders durch eine schlechte Softmax-Leistung beeinträchtigt werden. Auf einer hohen Ebene umfassen neuronale Transformatornetzstrukturen eine Codierungskomponente, eine Decodierungskomponente und Verbindungen zwischen diesen Komponenten. Die Codierungskomponente kann einen Stapel von mehreren Codierungsstufen umfassen und die Decodierungskomponente kann einen Stapel von mehreren Decodierungsstufen umfassen, typischerweise mit der gleichen Anzahl wie Codierungsstufen vorhanden sind. Die Codierungsstufen (kurz: Codierer) sind neuronale Netze und können typischerweise in ihrer Struktur zueinander identisch sein, außer dass sie während des Trainings Unterschiede erwerben (z. B. trainiert werden, um voneinander verschiedene Gewichtungen zu haben). Ebenso können die Decodierungsstufen (kurz: Decodierer) typischerweise alle den gleichen Aufbau haben, abgesehen von Unterschieden, die im Training erworben wurden. Die Codierer und Decodierer können „Schichten“ umfassen, die Operationen an Vektoreingaben durchführen, um Vektor- oder Skalarausgaben zu erzeugen. Diese Vektoren können mehrdimensional (allgemein NxMx...P, N,M,...P ≥ 1) und verschachtelt sein und werden allgemein als Tensoren bezeichnet.
  • Die übliche Softmax-Berechnung umfasst typischerweise die folgenden Operationen: (i) Berechnen eines Maximalwerts in einem Eingabevektor, (ii) Anwenden eines Exponenten auf eine Gleitkomma- oder Festkommazahl, (iii) Durchführen einer Summierung von Exponentenwerten, und (iv) Durchführen einer Division des Exponentenwertes durch die Summe. Die Formel für eine übliche Softmax-Operation lautet
  • Übliche Softmax-Gleichung
  • Ein Rechenalgorithmus für übliche Softmax ist:
    Figure DE102021120605A1_0001
  • Üblicher Softmax-Algorithmus
  • Dieser Algorithmus beinhaltet mehrere Zugriffe auf den Speicher und weist eine geringe Wiederverwendung von Operanden auf, was manchmal zu einer schlechten Leistung führt. Die Schleife 2:-4: über den Vektor V (um das maximal bewertete Element mv des Vektors V zu finden) beinhaltet einen Vektor, der aus dem Speicher gelesen wird; die Schleife 6:-8: zum Berechnen der Summe der Exponentialfunktionen beinhaltet einen anderen; und die Schleife 9:-11: zum Normieren von V beinhaltet wieder einen anderen.
  • Die Implementierung der Expontenten- und Kehrwertfunktionen in Hardware (für Geschwindigkeit) kann einen hohen Design-Overhead verursachen (Schaltungsfläche und/oder Energieverbrauch). Exponenten- und Kehrwertfunktionen können beispielsweise in der Spezialfunktionseinheit (SFU) einer GPU ausgeführt werden, die mit Nachschlagetabellen (LUTs) mit 32-Bit-Gleitkommapräzision konfiguriert ist. Der hohe Schaltungsflächen-Overhead dieser Komponenten kann die Replikation von SFU-Einheiten zum Erzielen eines hohen Durchsatzes unerschwinglich machen.
  • Hierin werden Ausführungsformen offenbart, die die Effizienz der Softmax-Berechnung verbessern. Diese Lösungen können verwendet werden, um schnelle und effiziente Deep-Learning-Inferenz in Transformatoren und anderen neuronalen Netzen zu implementieren. Die offenbarte Softmax-Berechnung umfasst die Implementierung verschiedener Operationen mit reduzierter Genauigkeit, indem sie ex mit 2x ersetzt, um den mit der Berechnung von ex verbundenen Anweisungs-Overhead zu reduzieren, und Gleitkomma-Maximumsberechnung von Vektorelementen durch eine Ganzahl-Maximumsberechnung ersetzt. Eine skalierbare Implementierung zerlegt Softmax in separate UnNormalized Softmax- und Normalization-Operationen.
  • Die offenbarten Ansätze berechnen Softmax durch Formulieren eines Vektors von 2x - wertigen Elementen. Der Ausdruck „Vektor von 2x-wertigen Elementen“ bezieht sich auf einen Vektor von Elementen, die jeweils auf eine Zweierpotenz erhöht sind, wobei der Exponent der Zweierpotenz unter Verwendung eines Eingabewertes x aus einem Eingabevektor von Elementen berechnet wird. Es versteht sich, dass der tatsächliche Exponent der Zweierpotenz, wenn auf den „Vektor von 2x-wertigen Elementen“ Bezug genommen wird, nicht tatsächlich x sein kann, sondern eher ein von x abgeleiteter Wert (z. B. x - xmax), wobei xmax ein laufender berechneter Maximalwert der Eingabevektorelemente ist.
  • Hierin werden auch Ausführungsformen eines effizienten gekachelten DNN-Prozessors beschrieben, der ein skalierbares Design verwendet. Diese Ausführungsformen können von den offenbarten Verbesserungen der Softmax-Berechnung profitieren. Die offenbarten Ausführungsformen umfassen vorteilhafte Merkmale, darunter: 1) eine vollständig verteilte, kachelbasierte Architektur, 2) flexibles und effizientes Gewichtungs- und Aktivierungskacheln auf Verarbeitungselement(processing element - PE)-Ebene, Chipebene und in einigen Ausführungsformen auf Paketebene, Verbesserung der Datenlokalität und Reduzierung der Kommunikationskosten und 3) mehrstufiger Datenfluss, wodurch die Datenwiederverwendung und Energieeffizienz verbessert werden.
  • Die Ausführungsformen des DNN-Prozessors verwenden einen Datenpfad, der ausgelegt ist, um das niedrige Verhältnis von Berechnung zu Speicher von neuronalen Netzschichten zu berücksichtigen. Der Datenpfad beinhaltet in einigen Implementierungen sowohl lokale als auch globale Verarbeitungselemente. Jedes lokale Verarbeitungselement umfasst eine Logik, um eine lokalisierte Multiplikationsakkumulation von Gewichtungen und Eingabeaktivierungen und eine Nachverarbeitung wie ReLu, MaxPool, Softmax usw. durchzuführen. „Logik“ bezieht sich auf Maschinenspeicherschaltungen und nichttransitorische maschinenlesbare Medien, die Folgendes umfassen: maschinenausführbare Anweisungen (Software und Firmware) und/oder Schaltungsanordnungen (Hardware), die aufgrund ihrer Material- und/oder Material-Energie-Konfiguration Steuerungs- und/oder Verfahrenssignale umfassen, und/oder Einstellungen und Werte (wie Widerstand, Impedanz, Kapazität, Induktivität, Nennstrom/-spannung usw.), die verwendet werden können, um den Betrieb einer Vorrichtung zu beeinflussen. Magnetische Medien, elektronische Schaltungen, elektrischer und optischer Speicher (sowohl flüchtig als auch nichtflüchtig) und Firmware sind Beispiele für Logik. Logik schließt ausdrücklich reine Signale oder Software als solche aus (aber schließt nicht Maschinenspeicher aus, die Software umfassen und dadurch materielle Konfigurationen bilden).
  • Speicherpuffer in Form von Kollektoren und Registerdateien können innerhalb des Datenpfads und/oder zwischen Verarbeitungselementen angeordnet sein. „Puffer“ bezieht sich auf einen Speicher, der Werte speichert, die in eine Berechnung eingegeben werden oder daraus resultieren. „Kollektor“ bezieht sich auf einen Puffer, der zwischen einem anderen Puffer und dem Eingang oder Ausgang eines Datenprozessors angeordnet ist, wie beispielsweise eine Multiplikations-Akkumulations-Einheit. „Multiplikations-Akkumulations-Einheit“ bezieht sich auf eine Datenverarbeitungsschaltung, die Multiplikations-Akkumulations-Operationen ausführt, die das Berechnen des Produkts zweier Zahlen und das Addieren dieses Produkts zu einem Akkumulator beinhalten. Multiplikations-Akkumulations-Einheiten können hierin durch ihr Akronym MAC oder MAC-Einheit bezeichnet werden. Eine Multiplikations-Akkumulations-Einheit führt Berechnungen der Form a ← a + (b * c) aus. Eine Vektor-Multiplikations-Akkumulations-Einheit berechnet das Produkt zweier Vektoren unter Verwendung eines Arrays von Multiplikatoren und führt dann eine Reduktionsoperation durch, indem alle Ausgaben der Multiplikatoren addiert werden, um eine Teilsumme zu erzeugen, die dann zu einem Akkumulator addiert wird. „Teilsumme“ bezieht sich auf ein intermediäres Multiplikations-Akkumulations-Ergebnis in einer Punktprodukt-Akkumulations-Berechnung. „Punktprodukt-Akkumulation“ bezieht sich auf die Berechnung eines Punktprodukts. Ein Punktprodukt ist die Summe der Produkte der entsprechenden Einträge der beiden Zahlenfolgen (Vektoren). Punktprodukte werden effizient unter Verwendung von Vektor-Multiplikations-Akkumulations-Einheiten berechnet.
  • Die Ausführungsformen des DNN-Prozessors stellen eine mehrstufige Speicher- und Berechnungshierarchie bereit, die sowohl die Gewichtungs- als auch die Ausgabeaktivierungslokalität ausnutzt, um die Energieeffizienz der Ausführung des neuronalen Netzes zu verbessern. Übliche Beschleunigerauslegungen für neuronale Netze nutzen nur die Wiederverwendungsmöglichkeiten der innersten Ausführungsebene (z. B. Schleife), während die offenbarte Architektur eine mehrstufige Speicher- und Verarbeitungshierarchie bereitstellt, um Datenwiederverwendungsmöglichkeiten über mehrere Schleifenebenen hinweg auszunutzen, wodurch ein vielfältiger Satz von energieeffiziente Datenflüsse ermöglicht wird. Anstatt beispielsweise die zeitliche Wiederverwendung nur für Gewichtungen oder Ausgaben zu erfassen, können mehrstufige Datenflüsse implementiert werden, die während der Ausführung sowohl die Wiederverwendung von Gewichtungen als auch Teilsummen ausnutzen.
  • Um einen bestimmten Datenfluss effizient zu implementieren, kann jedes lokale Verarbeitungselement einen oder mehrere Kollektoren (z. B. kleine Registerdateien) verwenden: einen vor einem Gewichtungspuffer, einen anderen vor einem Akkumulationspuffer und einen anderen vor einem Eingabeaktivierungspuffer. „Aktivierungspuffer“ bezieht sich auf einen Speicherpuffer, der verwendet wird, um Aktivierungswerte (Aktivierungen) zu speichern, die in einer Berechnung eines neuronalen Netzes verwendet werden. Aktivierungen werden von jedem Neuron in einer neuronalen Netzschicht unter Verwendung einer Aktivierungsfunktion berechnet, die manchmal auch als „Transferfunktion“ bezeichnet wird. Aktivierungen können einfache Binärwerte sein (z. B. „1“ oder „0“, die für „EIN“ oder „AUS“ stehen), oder sie können für einige Aktivierungsfunktionen einen Wertebereich annehmen. Diese Kollektoren filtern (reduzieren) teure Lese- und Schreibvorgänge in die Gewichtungs- und Teilsummenpuffer (z. B. SRAMs), was zu einer Verbesserung der Gesamtenergieeffizienz führt. Die globalen Verarbeitungselemente und/oder der Chip können zusätzlichen Speicher (z. B. eine globale oder gemeinsam genutzte Registerdatei) und Verarbeitungskapazität im Datenpfad von Berechnungen neuronaler Netze bereitstellen.
  • Die offenbarten DNN-Prozessorausführungsformen stellen eine auf heterogenen Kacheln basierende Rechenplattform für verschiedene Arten von Berechnungen neuronaler Netze bereit. Zusätzlich zur dichten Faltung führen viele neuronale Netze eine elementeweise Berechnung und eine tiefenweise Faltung durch. Um solche Berechnungen zu erleichtern, beinhaltet die Architektur zwei allgemeine Typen von Verarbeitungselementen. Der erste Typ, der als lokale Verarbeitungselemente bezeichnet wird, ist darauf spezialisiert, eine dichte Faltung mit signifikanter Datenwiederverwendung auszuführen. Der zweite Typ, der als globale Verarbeitungselemente bezeichnet wird, stellt eine Speicherung der zweiten Ebene für die lokalen Verarbeitungselemente während der dichten Faltung bereit. Außerdem können die globalen Verarbeitungselemente elementeweise Operationen und tiefenweise Faltung bei einem niedrigen Rechen-zu-Speicher-Verhältnis durchführen, ohne große Datenmengen durch Schichten des neuronalen Netzes zu übertragen.
  • 1 zeigt ein beispielhaftes System 100, das künstliche neuronale Netze verwendet. Neuronale Netze werden in großem Umfang in Anwendungen wie der Sprache-zu-Text-Umwandlung, der Verarbeitung natürlicher Sprache, der Sprachübersetzung, der Bilderkennung und -klassifizierung und -suche und vielen anderen verwendet.
  • In dem dargestellten spezifischen Beispiel spricht eine Person 102 in ein Mikrofon 110 eines digitalen Geräts 118, um beispielsweise mit einem Sprachassistenten auf einem Mobiltelefon oder einem Heimautomationsgerät (z. B. Bixby®, Siri®, Alexa®, Google Assistant ® usw.) zu interagieren, oder in einem Fahrzeug oder mit einem Roboter. Sprachbefehle oder Abfragen werden in Text und/oder Befehle umgewandelt und an IoT-Geräte 106 und/oder Cloud-Computersysteme 104 übermittelt, zum Beispiel über ein lokales Netz 108 und/oder ein Weitverkehrsnetz 112. Die Umwandlung der Sprache der Person 102 in Text und/oder Befehle, die von den IoT-Geräten 106 und/oder Cloud-Computersystemen 104 verstanden werden, kann von einem oder mehreren neuronalen Netzen 114 unter Verwendung einer oder mehrerer Softmax-Schichten 116 ausgeführt werden. Beispiele für neuronale Netze 114 , die für diese Zwecke verwendet werden können, umfassen neuronale Transformatornetze, rekurrente neuronale Netze, neuronale Faltungsnetze und Hybride dieser Typen sowie andere im Stand der Technik bekannte Typen.
  • 2 zeigt beispielhafte Szenarien für die Anwendung neuronaler Netze in einem Deep-Learning-System 202 unter Verwendung von Softmax-Berechnung gemäß einigen Ausführungsformen. Ein Deep-Learning-System 202 kann in einem Computersystem 204, einem Fahrzeug 206 und einem Roboter 208 verwendet werden, um nur einige Beispiele zu nennen. Das Deep-Learning-System 202 kann ein oder mehrere neuronale Netze umfassen, die Bilderkennung und -klassifizierung (maschinelles Sehen), Konversations-KI, Steuersysteme für selbstfahrende Fahrzeuge und Roboter und viele andere bereitstellen.
  • 3 zeigt ein neuronales Transformatornetz 302 gemäß einer Ausführungsform. Wie zuvor angemerkt, können neuronale Transformatornetze zahlreiche Softmax-Berechnungen in Aufmerksamkeitsschichten verwenden. Das neuronale Transformatornetzwerk 302 empfängt eine Eingabesequenz 304 an einem ersten Codierer 306 eines Codiererstapels 308. Der Codierer 306 führt eine Codierung an der Eingabesequenz 304 durch und leitet Ergebnisse an den Codierer 310 weiter, der eine zusätzliche Codierung durchführt und Ergebnisse an den Codierer 312 weitergibt. Obwohl im Codiererstapel 308 drei Codierer dargestellt sind, kann in der Praxis eine beliebige handhabbare Anzahl vorliegen.
  • Ergebnisse des letzten Codierers 312 im Codiererstapel 308 werden an den Decodiererstapel 314 bereitgestellt. Der Decodiererstapel 314 umfasst, wie dargestellt, drei Decodierer (Decodierer 316, Decodierer 318 und Decodierer 320), aber in der Praxis kann jede beliebige handhabbare Anzahl vorhanden sein. Die Codierergebnisse des Endcodierers 312 werden an den ersten Decodierer 316 des Decodiererstapels 314 bereitgestellt, und die Aufmerksamkeitsergebnisse des Endcodierers 312 können in einer Ausführungsform vollständig mit den Codierer-Decodierer-Aufmerksamkeitsschichten 504 jedes Codierers im Decodiererstapel 314' verbunden sein. Der Decodiererstapel 314 verarbeitet die Ergebnisse, die vom Codiererstapel 308 bereitgestellt werden, um eine Transformation der Ausgabesequenz 322 für die Eingabesequenz 304 zu erzeugen. Am Ausgang der Endstufe des Decodierers 320 können typischerweise lineare und Softmax-Schichten (nicht dargestellt) vorhanden sein, um die Ausgabesequenz 322 zu erzeugen.
  • Im Allgemeinen können Aufmerksamkeitsvektoren von jeder Codierer-Selbstaufmerksamkeitsschicht an jede Decodierer-Codierer-Decodierer-Aufmerksamkeitsschicht bereitgestellt werden. Auch die Aufmerksamkeitsschichten können, wie im Stand der Technik bekannt, „mehrköpfig“ sein.
  • 4 zeigt einen Codierer 402 gemäß einer Ausführungsform. Der Codierer 402 empfängt Eingabevektoren an einer Selbstaufmerksamkeitsschicht 404, die die Eingabevektoren transformiert, bevor sie an ein neuronales Feedforward-Netz 406 weitergeleitet werden. Ergebnisse des neuronalen Feedforward-Netzes 406 werden an eine nächste Codiererstufe (falls vorhanden) und/oder an Decodierer weitergegeben, wenn der Codierer 402 eine Endcodiererstufe ist. Abhängig von der Implementierung können Ergebnisse der Selbstaufmerksamkeitsschicht 404 auch an eine oder mehrere Decodiererstufen weitergegeben werden (z. B. wenn der Codierer 402 eine Endcodiererstufe ist). Es kann typischerweise Summierungs- und Normierungsschichten (nicht dargestellt) geben, die jeweils auf die Selbstaufmerksamkeitsschicht 404 und das neuronale Feed-Forward-Netz 406 folgen.
  • 5 zeigt einen Decodierer 502 gemäß einer Ausführungsform. Der Decodierer 502 empfängt Eingaben (von vorherigen Decodiererstufen oder von Codiererstufen) an einer Selbstaufmerksamkeitsschicht 506. Ergebnisse der Selbstaufmerksamkeitsschicht 506 werden an eine Codierer-Decodierer-Aufmerksamkeitsschicht 504 weitergeleitet, die auch Aufmerksamkeitseingaben von einer oder mehreren Selbstaufmerksamkeitsschichten 404 des Codiererstapels 308 empfangen kann. Die Codierer-Decodierer-Aufmerksamkeitsschicht 504 hilft dem Decodierer 502, sich auf relevantere Teile der Eingabesequenz an bestimmten Stellen in der Eingabesequenz zu konzentrieren (ähnlich der Wirkung von Aufmerksamkeit in seq2seq-Modellen). Auf die Codierer-Decodierer-Aufmerksamkeitsschicht 504 folgt ein neuronales Feed-Forward-Netz 508. Es kann typischerweise Summierungs- und Normierungsschichten (nicht dargestellt) geben, die jeweils auf die Selbstaufmerksamkeitsschicht 504, die Codierer-Decodierer-Aufmerksamkeitsschicht 504 und das neuronale Feed-Forward-Netz 508 folgen.
  • Ergebnisse der Codierer-Decodierer-Aufmerksamkeitsschicht 504 werden an ein neuronales Feed-Forward-Netz 508 weitergeleitet, das Ausgaben an eine nächste Decodiererstufe oder endgültige Ausgabeergebnisse (möglicherweise nach zusätzlicher Verarbeitung durch lineare und Softmax-Schichten) erzeugt.
  • 6 zeigt eine Aufmerksamkeitsschicht 602 gemäß einer Ausführungsform. An den Eingabevektoren der Aufmerksamkeitsschicht 602 wird eine Matrixmultiplikation 604 durchgeführt, um Abfragevektoren 606, Schlüsselvektoren 608 und Wertvektoren 610 zu bilden. Die in der Matrixmultiplikation 604 angewendeten Matrizen werden durch Trainieren des neuronalen Netzes abgeleitet, das die Aufmerksamkeitsschicht 602 umfasst.
  • Als Nächstes wird ein Bewertungsvektor 612 abgeleitet, indem ein Punktprodukt 614 der Abfragevektoren 606 und Schlüsselvektoren 608 durchgeführt wird. Die Elementwerte im Bewertungsvektor 612 bestimmen, wie viel Fokus auf andere Teile (z. B. Token) des Eingabevektors gelegt werden soll, während ein bestimmtes Token des Eingabevektors verarbeitet wird. Der Bewertungsvektor 612 wird dann mit einem Softmax-616-Algorithmus verarbeitet, um die Bewertungen so zu normieren, dass sie alle positiv sind und in der Summe 1 ergeben. Die Softmax-Bewertungen bestimmen, in welchem Maß jedes Token der Eingabesequenz an der bestimmten Eingabesequenz-Tokenposition ausgedrückt wird.
  • Dann wird durch die Softmax-Bewertung eine Multiplikation 618 an den Wertvektoren 610 durchgeführt und die gewichteten Wertvektoren 610 werden aufsummiert (Vektorsummierung 620).
  • 7A, 7B und 7C zeigen eine Ausführungsform eines Softmax-Algorithmus 700, der einige der Nachteile von üblichem Softmax beheben kann. Bei 7 ist eine Berechnung der Exponentialfunktion in Zeile 7 durch eine effizientere Berechnung einer Zweierpotenz ersetzt. Die Zweierpotenz wird für die Normierungsoperation in Zeile 10 anstelle der Exponentialfunktion verwendet.
  • In Fig. In 7B wird die Berechnung des Maximumelements im Vektor V mit der Berechnung der Vektorelementsummierung (Zeilen 3-8) kombiniert, um einen der drei Durchläufe über die Vektorelemente V zu eliminieren. Dies führt zu einem nicht normierten Softmax-Vektor V, der in einem weiteren Durchgang über V in den Zeilen 9-11 renormiert wird.
  • In 7C wird die Berechnung des Maximumelements mit ganzzahliger Genauigkeit berechnet (Zeile 4), wodurch die rechenaufwändige Multiplikationsoperation in 7B, Zeile 5 durch eine weniger rechenaufwändige Rechtsverschiebungsoperation in 7C Zeile 5 ersetzt werden kann. Die Multiplikationsoperation bei der Renormierung in 7B Zeile 10 wird ebenfalls durch eine weniger aufwändige Rechtsverschiebung in 7C Zeile 10 ersetzt.
  • Eine Architektur einer Ausführungsform einer Einheit für nicht normiertes Softmax 828 und einer Normierungseinheit 830 ist in 8A bis 8D gezeigt. Diese Einheiten können beispielsweise zusammenwirken, um den Softmax-Algorithmus 700 zu implementieren. Der Fachmann wird erkennen, dass diese Einheiten als Hardware (z. B. in einer Spezialfunktionseinheit 1912), als Firmware, als Software oder als Kombinationen davon (d. h. „Logik“) implementiert werden können. Zum Beispiel können Aspekte der Einheiten in Hardware mit bestimmten Funktionen (z. B. lineare stückweise Annäherung) implementiert werden, die als erweiterte ISA(Instruktionssatz-Architektur)-Anweisungen zur Ausführung durch einen Prozessor mikrocodiert sind. Einige Ausführungsformen können viele oder alle Komponenten der Einheiten in Software auf Hochleistungsrechenplattformen implementieren.
  • Der Gesamteingabevektor für Softmax kann in kleinere Vektoren zerlegt werden, die in die Einheit für nicht normiertes Softmax 828 eingespeist werden. Diese kleineren Teile des Gesamtvektors können von mehreren Verarbeitungselementen parallel verarbeitet werden (siehe z. B. 9), oder sie können sequentiell von der Einheit für nicht normiertes Softmax 828 eingegeben und verarbeitet werden.
  • Die Vektor-Ganzzahl-Maximum-Einheit 802 empfängt den Eingabevektor und berechnet den Ganzzahl-Maximumwert (LocalMax) unter den Elementen des Vektors. Jedes Element des Eingabevektors wird auf eine ganze Zahl gerundet und das Element mit dem Maximumwert nach Rundung und Vergleich (Max-Komparator 834) wird als LocalMax ausgewählt. Wenn der Eingabevektor ein Bruchteil des Gesamtvektors für Softmax ist, dann ist das Element des Vektors mit dem höchsten Wert ein „lokales“ Maximum. Dieses lokale Maximum kann mit anderen Verarbeitungselementen, die an anderen Segmenten des Gesamtvektors arbeiten, geteilt werden, um ein globales Maximum für den Vektor zu vergleichen und zu bestimmen. In einer Ausführungsform kann ein zentraler Prozessor/Controller zum Koordinieren der Ausführung des Softmax-Algorithmus über die Verarbeitungselemente hinweg auch LocalMax-Werte sammeln und einen globalen Maximumwert (GlobalMax) für den Vektor bestimmen. „Controller“ bezieht sich auf jede beliebige Logik zum Steuern des Betriebs anderer Logik. Wenn ein Controller in Hardware implementiert ist, kann es sich beispielsweise um eines von vielen bekannten Modellen eines Mikroprozessors, einer Grafikverarbeitungseinheit oder einen benutzerdefinierten Controller handeln, der unter Verwendung einer anwendungsspezifischen integrierten Schaltung (ASIC), einem System-on-Chip (SOC) oder auf viele andere in der Technik bekannte Arten implementiert ist. Ein Controller kann auch als Computeranweisungen, die in einem flüchtigen Speicher oder einem nichtflüchtigen Speicher gespeichert sind, in Software oder Firmware implementiert sein. Controller werden in der Regel verwendet, um den Betrieb einer oder mehrerer anderer Komponenten in einem System zu koordinieren, zum Beispiel durch Bereitstellen von Signalen an die anderen Komponenten, um ihren Betrieb zu starten und anzuhalten, oder um die anderen Komponenten mit bestimmten auszuführenden Befehlen anzuweisen.
  • Die Zweierpotenzberechnungseinheit 804 empfängt den Eingabevektor und den LocalMax-Wert, der von der Vektor-Ganzzahl-Maximum-Einheit 802 berechnet wird. Die Zweierpotenzberechnungseinheit 804 subtrahiert LocalMax von jedem Elementwert x des Eingabevektors und verwendet dann die Einheit für lineare stückweise Berechnung 822, um 2(x- LocalMax) zu berechnen. Eine Mikroarchitektur geringer Präzision kann implementiert werden, um die Recheneffizienz in der Zweierpotenzberechnungseinheit 804 zu verbessern (d. h. die Rechenkomplexität zu reduzieren). In einer Ausführungsform können die Eingabevektorelemente und LocalMax in einer Festkommadarstellung mit niedriger Genauigkeit (d. h. niedriger als typische Gleitkomma- oder lange Ganzzahlen) mit sechs ganzzahligen Bits und zwei Bruchteilbits implementiert werden. Die Einheit für lineare stückweise Berechnung 822 kann einen Festkomma-Bruchteiler 824 verwenden, um die Bruchteilbits zu der Nachschlagetabelle 832 und die ganzzahligen Bits zur Linksverschiebungslogik 826 zu leiten, um den Zweierpotenzwert zu erzeugen.
  • Die Einheit für lineare stückweise Berechnung 822 kann unter Verwendung einer Nachschlagetabelle 832 implementiert sein, die in einer Ausführungsform vier Einträge und jeweils zehn Bits umfasst. Die Verwendung von IntMax kann in Bezug auf Schaltungsfläche, Leistungsaufnahme und Rechengeschwindigkeit sowohl die Zweierpotenzberechnungseinheit 804 als auch die Normierungseinheit 830 vereinfachen. Dies kann die Subtraktionsoperation in der Zweierpotenzberechnungseinheit 804 von Gleitkomma zu Ganzzahl vereinfachen und die Notwendigkeit einer linearen stückweisen (linear piecewise - LPW) Berechnung von 2x in der Normierungseinheit 830 umgehen.
  • Die von der Zweierpotenzberechnungseinheit 804 erzeugten nicht normierten Softmax-Werte können sequentiell in der Reduktionseinheit 806 reduziert werden, um eine Summe der Potenzen (PowSum) zu berechnen. Für den Durchschnittsfachmann ist leicht ersichtlich, wie die Reduktion von PowSum über den gesamten Softmax-Vektor in der Reduktionseinheit 806 sequentiell unter Verwendung des Vektorelement-Addierers 836, eines Potenzsummenselektors 816 (um entweder die Potenzsumme von dem Vektorelement-Addierer 836 oder von einem anderen Verarbeitungselement auszuwählen), einem Rechtsschieber 818 und einem Addierer 820 ausgeführt wird.
  • In ähnlicher Weise kann eine Reduktion von LocalMax-Werten unter Verwendung des Max-Selektors 808 und des Max-Komparators 810 und der im Speicherpuffer 812 gespeicherten Ergebnisse durchgeführt werden. Wenn die Untervektoren der Softmax-Berechnung räumlich über mehrere Verarbeitungselemente verteilt sind, kann eine verarbeitungselement(processing element - PE)-übergreifende Reduktion der lokalen PowSum- und IntMax-Werte durchgeführt und mit den Verarbeitungselementen geteilt werden (über den Speicherpuffer 812 und den Potenzsummenpuffer 814), um globale Maxima (GlobalMax) und Potenzsummen (GlobalPowSum) zu bestimmen.
  • Die Normierungseinheit 830 kann UnnormedSoftmax (unnormierter Softmax-Vektor), LocalMax-, GlobalMax- und GlobalPowSum-Werte als Eingabe empfangen und eine Normierungsoperation durchführen, indem zuerst ein Kehrwert von GlobalPowSum unter Verwendung einer LPW-Kehrwerteinheit niedriger Genauigkeit berechnet wird, die in einer Ausführungsform als eine LUT mit einer Größe von zehn Byte implementiert sein kann. Die endgültigen Softmax-Vektorelemente können durch Rechtsverschiebung von UnnormedSoftMax-Vektorelementen und Multiplizieren mit dem Kehrwert von GlobalPowSum berechnet werden.
  • Durch die Verwendung von Operanden mit reduzierter Bitbreite und reduzierten LUTs können die Implementierungskosten (hinsichtlich Fläche, Leistung und/oder Geschwindigkeit) einer Softmax-Recheneinheit gegenüber der Gleitkomma-SFU, die zum Ausführen ähnlicher Funktionen auf üblichen GPUs verwendet wird, erheblich reduziert werden. 8D zeigt reduzierte Bitbreitenwerte Q(n,m) für eine Ausführungsform für verschiedene Faktoren in der Softmax-Berechnung, wobei n die Anzahl der ganzzahligen Bits und m die Anzahl der Bruchteilbits ist.
  • 9 zeigt ein verteiltes Computersystem 900, das konfiguriert sein kann, um einen skalierbaren neuronalen Netzprozessor in einer Ausführungsform zu implementieren. Das verteilte Computersystem 900 beinhaltet mehrere Verarbeitungselemente 904, die untereinander unter Verwendung lokaler Router-Schnittstellen 902 Werte übermitteln, um Berechnungen verteilter neuronaler Netze durchzuführen. Gewichtungen für ein tiefes neuronales Netz werden räumlich über lokale Speicher der Verarbeitungselemente 904 gekachelt. Die Verarbeitungselemente 904 können auf mehrere Chips in einem einzelnen Paket/einer einzelnen Vorrichtung/gedruckten Leiterplatte oder über mehrere Pakete/Vorrichtungen/gedruckte Leiterplatten verteilt sein.
  • Eine verteilte Berechnung des gesamten tiefen neuronalen Netzes wird von einem Controller 906 koordiniert, wobei Zwischenwerte der Berechnung in den lokalen Speichern der Verarbeitungselemente 904 oder in einem globalen globalen Speicherpuffer 910 gespeichert werden. „Globaler Speicherpuffer“ bezieht sich auf einen Puffer, der zur Nutzung durch alle oder zumindest eine Vielzahl von Verarbeitungselementen auf einem Chip verfügbar ist. Tensoren, Gewichtungen und andere Werte für und aus der Berechnung können auch, zumindest anfangs, aus einem Speicher 912 (z. B. einer größeren, aber langsameren DRAM-Vorrichtung) gelesen und geschrieben werden.
  • In einer Ausführungsform ist der Controller 906 dazu konfiguriert, die Verarbeitungselemente 904 zu koordinieren, um ein nicht normiertes Softmax durchzuführen, das dann durch eine Normierungseinheit 908 normiert wird.
  • Anwendungen für tiefe neuronale Netze können sich in ihren Anforderungen erheblich unterscheiden. Typische Inferenzanwendungen für Rechenzentren wie die Bilderkennung können beispielsweise Leistung und Skalierbarkeit bei niedriger Latenzzeit priorisieren und bereit sein, Klassifikationsgenauigkeit zu opfern, während Inferenz für Workloads im autonomen Fahren die Energieeffizienz im Rahmen von Echtzeitbeschränkungen unter Beibehaltung der bestmögliche Netzgenauigkeit priorisieren kann. Das verteilte Computersystem 900 ist eine Allzweckarchitektur, die als anwendungsspezifischer Inferenzbeschleuniger mit Leistungs- und Stromverbrauchsvorteilen gegenüber Allzwecklösungen konfiguriert sein kann.
  • Eine Ausführungsform eines Multi-Chip-Pakets 1012 zum Implementieren eines DNN-Beschleunigers ist in 10 gezeigt. Das Multi-Chip-Paket 1012 kann ein Halbleiterpaket sein, das eine Vielzahl von Rohchips 1018 (Chips) umfasst. Jeder der Chips 1018 umfasst eine Vielzahl von Verarbeitungselementen 1014, einen globalen Puffer 1002 und einen Controller 1004 (z. B. einen Open-Source-RISC-V-Prozessor). Die Elemente der einzelnen Chips kommunizieren über einen Network-on-a-Chip-Router 1008. Die mehreren Chips in einem Paket kommunizieren miteinander über einen Network-on-a-Package-Router 1016 und können über ein feldprogrammierbares Gate-Array (FPGA 1010), Joint-Test-Action-Group(JTAG)-Logik oder eine andere in der Technik bekannte Schnittstellentechnologie auch mit einem Host-System 1020 kommunizieren, das DRAM 1006 oder anderen Speicher umfasst.
  • Einige oder alle der Verarbeitungselemente sind lokale Verarbeitungselemente, die einen Gewichtungspuffer umfassen, um Gewichtungswerte für ein tiefes neuronales Netz zu empfangen und zu speichern. „Gewichtungspuffer“ bezieht sich auf einen Puffer, der Gewichtungswerte speichert. Die lokalen Verarbeitungselemente umfassen einen Aktivierungspuffer, um Aktivierungswerte für das tiefe neuronale Netz zu empfangen. Der Gewichtungspuffer und der Aktivierungspuffer können separate Elemente innerhalb jedes Verarbeitungselements sein. Die lokalen Verarbeitungselemente umfassen ferner eine Vielzahl von Multiplikations-Akkumulations-Einheiten, um die Gewichtungswerte und die Aktivierungswerte parallel zu kombinieren, um Teilsummen zu erzeugen.
  • Das Multi-Chip-Paket 1012 kann konfiguriert sein, um die Gewichtungswerte und die Aktivierungswerte unter den lokalen Verarbeitungselementen räumlich und zeitlich (über die Zeit) zu verteilen. Der globale Speicherpuffer jedes Chips kann als Puffer zweiter Ebene für die Aktivierungswerte während der Berechnung dienen. „Puffer zweiter Ebene“ bezieht sich auf einen Speicher, in dem Werte gespeichert und daraus abgerufen werden, wenn die Werte für die Berechnung benötigt werden, aber im Puffer erster Ebene nicht verfügbar sind. Hierbei kann der globale Pufferspeicher des Chips als ein Puffer der zweiten Ebene für die Aktivierungspuffer der ersten Ebene der Verarbeitungselemente des Chips wirken. Die Verteilung von Gewichtungen und Aktivierungen während der Berechnung kann durch den Controller 1004 des Chips ausgeführt werden. Der Controller 1004 oder lokale Controller beliebiger der Verarbeitungselemente 1014 können durch in einem Speicher gespeicherte Anweisungen konfiguriert werden, um verschiedene unten beschriebene Datenflüsse auszuführen. Ein derart konfigurierter Speicher kann hier zweckmäßigerweise als „Logik“ bezeichnet werden. Der Speicherort einer solchen Logik ist eine Auslegungsfrage. Der Speicher, der diese Anweisungen speichert, kann ein beliebiger der in den Figuren dargestellten Speicher oder ein anderer, nicht dargestellter Speicher sein.
  • 11 zeigt einen neuronalen Netzprozessor 1100, der auf einem einzelnen Chip verkörpert ist. Der neuronale Netzprozessor 1100 kann einen Festkomma-Datenpfad zwischen einer Vielzahl von Verarbeitungselementen 1014 verwenden. Der neuronale Netzprozessor 1100 umfasst auch den oben erwähnten globalen Puffer 1002 und den Controller 1004, der beispielsweise ein RISC-V-Prozessor sein kann. Die Verarbeitungselemente 1014 und der globale Puffer 1002 kommunizieren über den Network-on-a-Chip-Router 1008 oder eine andere Verbindungstechnik (siehe die GPU-Implementierungen, die weiter unten beschrieben werden). Wenn ein Router verwendet wird, kann er zentral oder verteilt als Router auf jedem der Verarbeitungselemente 1014 implementiert sein. Die Verarbeitungselemente 1014 verwenden die Router/Verbindungen, um mit Verarbeitungselementen auf demselben Paket oder in einigen Ausführungsformen über Pakete hinweg über einen Network-on-a-Package-Router 1016 zu kommunizieren.
  • 12 zeigt auf hoher Ebene ein beispielhaftes lokales Verarbeitungselement 1200. Das Verarbeitungselement 1200 beinhaltet eine Vielzahl von Vektor-Multiplikations-Akkumulations-Einheiten 1202, einen Gewichtungspuffer 1204, einen Aktivierungspuffer 1206, einen Router 1208, einen Controller 1214, einen Akkumulationsspeicherpuffer 1210 und einen Postprozessor 1212. „Akkumulationsspeicherpuffer“ bezieht sich auf einen Speicherpuffer, der verwendet wird, um Rechenergebnisse einer oder mehrerer Multiplikations-Akkumulations-Einheiten zu speichern. „Postprozessor“ bezieht sich auf Logik in einer Berechnung eines neuronalen Netzes, die nach Multiplikation und Akkumulation angewendet wird. Der Aktivierungspuffer 1206 kann in einer Ausführungsform als ein Dual-Port-SRAM implementiert sein, um Aktivierungswerte von dem globalen Puffer 1002 oder von anderen lokalen oder globalen Verarbeitungselementen über den Router 1208 oder eine andere Verbindung zu empfangen. Der Router 1208 kann eine Komponente eines verteilten Network-on-a-Chip-Routers 1008 sein, der in einer Ausführungsform Folgendes umfasst: Serialisierer/Deserialisierer, Paketierer, Arbitrator, Advanced eXtensible Interface und andere im Stand der Technik bekannte Komponenten.
  • Der Gewichtungspuffer 1204 kann in einer Ausführungsform als ein Single-Port-SRAM implementiert sein, der Gewichtungswerte speichert. Die Gewichtungswerte, die von den Vektor-Multiplikations-Akkumulations-Einheiten 1202 verwendet werden, können „gewichtungsstationär“ sein, was bedeutet, dass sie nicht in jedem Taktzyklus aktualisiert werden, sondern stattdessen aktualisiert werden, sobald die Ausgabeaktivierungswerte für eine bestimmte Schicht des tiefen neuronalen Netzes berechnet werden.
  • Der Akkumulationsspeicherpuffer 1210 kann eine oder mehrere SRAM-Vorrichtungen umfassen, um die Ausgabeaktivierungen zu speichern, die von den Vektor-Multiplikations-Akkumulations-Einheiten 1202 berechnet werden. Der Router 1208 übermittelt diese Ausgabeaktivierungen und Steuersignale vom Verarbeitungselement 1200 an andere Verarbeitungselemente.
  • Das Verarbeitungselement 1200 kann alle Operationen von Faltungs- und vollständig verbundenen Schichten eines DNN effizient ausführen, einschließlich Multiplizieren-Akkumulieren, Abschneiden, Skalieren, Bias-Addition, ReLU und Pooling (diese letzten fünf im Postprozessor 1212). „Bias-Addition“ bezieht sich auf das Einschließen eines Bias (z. B. eines festen Ausgabewerts oder Inkrements zu einem Ausgabewert) für ein oder mehrere Neuronen einer Schicht eines neuronalen Netzes. Bias-Addition ist eine Technik, um sicherzustellen, dass mindestens ein Neuron einer Schicht eine von Null verschiedene Aktivierung zu einer nächsten Schicht erzeugt, wenn die Schicht keine Merkmale in ihren Eingaben erkennt. Die Vektor-Multiplikations-Akkumulations-Einheiten 1202 können unter Verwendung unterschiedlicher Filter an denselben Eingaben arbeiten. In einer Ausführungsform führt jede der Vektor-Multiplikations-Akkumulations-Einheiten 1202 ein Acht-Eingangskanal-Punktprodukt durch und akkumuliert das Ergebnis in jedem Taktzyklus in den Akkumulationsspeicherpuffer 1210. Die im Gewichtungspuffer 1204 gespeicherten Gewichtungen bleiben unverändert, bis die gesamte Berechnung der Ausgabeaktivierungen abgeschlossen ist. Jedes Verarbeitungselement 1200 liest in jedem Taktzyklus die Eingabeaktivierungen im Aktivierungspuffer 1206, führt die Multiplikations-Akkumulations-Operationen durch und schreibt Ausgabeaktivierungen in den Akkumulationsspeicherpuffer 1210. Die Häufigkeit, mit der auf den Gewichtungspuffer 1204 zugegriffen wird, hängt von den Dimensionen der Eingabeaktivierungsmatrix und der Anzahl der verwendeten Filter ab.
  • Die Vektor-Multiplikations-Akkumulations-Einheiten 1202 jedes Verarbeitungselements 1200 berechnen einen Teil einer Breitpunktprodukt-Akkumulation als ein Teilergebnis und leiten das Teilergebnis an benachbarte Verarbeitungselemente weiter. „Benachbartes Verarbeitungselement“ bezieht sich auf ein Verarbeitungselement in einem Hop-Abstand von einem anderen Verarbeitungselement in der Datenübertragungsnetzstruktur, z. B. das Network-on-a-Chip oder Network-on-a-Package.
  • Die Teilergebnisse werden vom Postprozessor 1212 in ein Endergebnis umgewandelt und an den globalen Puffer 1002 übermittelt. Der globale Puffer 1002 fungiert als Staging-Bereich für die endgültigen Multiplikations-Akkumulations-Ergebnisse zwischen Schichten des tiefen neuronalen Netzes.
  • Der Akkumulationsspeicherpuffer 1210 empfängt Ausgaben von den Vektor-Multiplikations-Akkumulations-Einheiten 1202. Der zentrale Controller 1004 verteilt die Gewichtungswerte und Aktivierungswerte unter den Verarbeitungselementen und verwendet den globalen Speicherpuffer als Puffer der zweiten Ebene für die Aktivierungswerte. Beim Verarbeiten von Bildern konfiguriert der Controller 1004 die Verarbeitung durch Schichten des tiefen neuronalen Netzes räumlich über die Verarbeitungselemente hinweg durch Eingabe-/Ausgabekanaldimensionen und zeitlich durch Bildhöhe/-breite.
  • Der globale Puffer 1002 speichert sowohl Eingabeaktivierungen als auch Ausgabeaktivierungen von den Verarbeitungselementen 1014 zur Verteilung durch die oben erwähnten Transceiver an die Verarbeitungselemente über Multicast. „Multicast“ bezieht sich auf einen Gruppenkommunikationsmechanismus, bei dem die Übertragung von Daten gleichzeitig an eine Gruppe von Zielgeräten (z. B. Verarbeitungselementen) adressiert wird. Multicast kann eine Eins-zu-Viele- oder Viele-zu-Viele-Verteilung implementieren. Jedes der Verarbeitungselemente 1014 beinhaltet einen Router 1208, um in einer Ausführungsform 64 Bits Dateneingang und 64 Bits Datenausgang pro Taktzyklus zu übertragen. Dies ermöglicht die Akkumulation von Teilsummen für Breitpunktprodukte, deren Berechnung räumlich über die Verarbeitungselemente 1014 verteilt ist.
  • 13 zeigt ein beispielhaftes lokales Verarbeitungselement 1300 detaillierter. Das Verarbeitungselement 1300 beinhaltet die genannten Vektor-Multiplikations-Akkumulations-Einheiten 1202, den Gewichtungspuffer 1204, Aktivierungspuffer 1206, den Router 1208, den Controller 1214, den Akkumulationsspeicherpuffer 1210 und einen Postprozessor 1212 (z. B. den Postprozessor 1212). Ebenfalls dargestellt sind ein Gewichtungskollektor 1320, der zwischen dem Gewichtungspuffer 1204 und den Vektor-Multiplikations-Akkumulations-Einheiten 1202 eingefügt ist, und ein Akkumulations-Kollektor 1322, der zwischen den Vektor-Multiplikations-Akkumulations-Einheiten 1202 und dem Akkumulations-Speicherpuffer 1210 eingefügt ist. Der Akkumulationskollektor 1322 kann hier auch als „Ausgabekollektor“ bezeichnet werden. Ebenfalls dargestellt sind verschiedene Speicherpuffermanager, die verwendet werden können (z. B. Gewichtungsspeicherpuffermanager 1310, Aktivierungsspeicherpuffermanager 1312 und Akkumulationsspeicherpuffermanager 1316). „Speicherpuffermanager“ bezieht sich auf eine Logik zum Verwalten des Inhalts eines Speicherpuffers, beispielsweise Verwalten der Verfügbarkeit bestimmter Daten (z. B. Gewichtungen, Aktivierungen) in dem Puffer, wenn sie von einem Verarbeitungselement angefordert werden.
  • Das Verarbeitungselement 1300 beinhaltet Vektor-Multiplikations-Akkumulations-Einheiten 1202, von denen eine Anzahl N für einen gegebenen Datenfluss betriebsbereit ist. Jede Vektor-Multiplikations-Akkumulations-Einheit 1324 führt V Multiplikationen und Additionen pro Taktzyklus durch. Somit kann das Verarbeitungselement 1300 in jedem Taktzyklus eine Gewichtungsmatrix der Dimensionen N x V mit einem Eingabeaktivierungsvektor der Größe V multiplizieren, um einen Teilsummenvektor der Größe N zu erzeugen. Mit anderen Worten, jede der Vektoren-Multiplikations-Akkumulations-Einheiten 1202 kann pro Taktzyklus eine Punktproduktberechnung der Breite V durchführen. Eines oder beide von N und V können am Controller 1004 konfigurierbar sein.
  • Der Eingabeaktivierungspuffer 1206 hat eine Betriebsgröße IA und der Gewichtungspuffer 1204 hat eine Betriebsgröße W. „Betriebsgröße“ bezieht sich auf einen Ressourcenpool, der zum Durchführen von Berechnungen während des Betriebs einer Vorrichtung verfügbar ist und kleiner als die Gesamt- oder Maximalgröße des Ressourcenpools sein kann. Die Betriebsgröße kann unter Verwendung von Registern oder anderen Einstellungen (z. B. für eine höhere Leistung oder einen geringeren Stromverbrauch) konfigurierbar sein. Eines oder beide von W und IA können am Controller 1004 konfigurierbar sein. Der Akkumulationsspeicherpuffer 1210 hat eine Betriebsgröße von A.
  • Jede der Vektor-Multiplikations-Akkumulations-Einheiten 1202 beinhaltet einen Puffer des Gewichtungskollektors 1320 mit einer konfigurierbaren Tiefe (z. B. Anzahl unterschiedlicher Register oder Adressen in einer Registerdatei, die von den Vektor-Multiplikations-Akkumulations-Einheiten 1202 während Berechnungen verwendet wird) von WD und einer Breite VxNxWP (WP wird auch als Gewichtsgenauigkeit bezeichnet). Die Eingabeaktivierungen haben die Breite IAP. Jede der Vektor-Multiplikations-Akkumulations-Einheiten 1202 beinhaltet auch einen Akkumulationskollektor 1322 mit einer konfigurierbaren Betriebstiefe AD und Breite NxAP (AP wird auch als Akkumulatorgenauigkeit bezeichnet). Die Punktprodukte der Breite V und der Teilsummenvektor der Größe N können somit von jeder Vektor.Multiplikations-Akkumulations-Einheit 1324 mit gemischter Genauigkeit berechnet werden. Einige oder alle von WD, WP, IAP, AD und AP können durch den Controller 1004 konfigurierbar sein.
  • Der Lese-(Ausgabe-)Port des Gewichtungspuffers 1204 ist WP × N × V Bits breit und kann verschiedene Gewichtungsvektoren an verschiedene der Vektor-Multiplikations-Akkumulations-Einheiten 1202 liefern. Der Aktivierungspuffer 1206 ist IAP × V Bits breit, da derselbe IA-Vektor parallel für alle N Vektor-Multiplikations-Akkumulations-Einheiten 1202 bereitgestellt wird.
  • Die Werte von V und N können angepasst werden, um beispielsweise ein Maß an Rechenparallelität und Wiederverwendung von Gewichtungen zu ermöglichen. Basierend auf der Konfiguration von N und V können andere Parameter wie W, IA und A angepasst werden, um sicherzustellen, dass die Vektor-Multiplikations-Akkumulations-Einheiten 1202 während der Faltungsberechnung beschäftigt bleiben.
  • Der Gewichtungspuffer 1204 und der Aktivierungspuffer 1206 weisen jeweils einen zugehörigen Adressgenerator (Adressgenerator 1314 bzw. Adressgenerator 1318) auf, der in jedem Zyklus eine Adresse erzeugt. „Adressgenerator“ bezieht sich auf eine Logik, die Adresswerte in einem Speicher zum Lesen oder Schreiben von Daten aus der Adresse berechnet. Die Anordnung von Operationen, die von den Vektor-Multiplikations-Akkumulations-Einheiten 1202 ausgeführt werden, wird von diesen Adressgeneratoren gesteuert, die konfigurierbar sind, um eine zeitliche Wiederverwendung von Gewichtungen oder Ergebnissen im Akkumulationskollektor 1322 über Taktzyklen für verschiedene Typen von Datenflüssen hinweg zu unterstützen. Die Tiefe WD des Gewichtungskollektors 1320 kann konfigurierbar sein, um unterschiedliche Maße der vorübergehenden Wiederverwendung von Teilsummenwerten in Abhängigkeit von den Anforderungen des Datenflusses zu ermöglichen. Ebenso kann die Tiefe WD des Akkumulationskollektors 1322 konfigurierbar sein, um unterschiedliche Maße der vorübergehenden Wiederverwendung von Gewichtungswerten in Abhängigkeit von den Anforderungen des Datenflusses zu ermöglichen.
  • Das Verarbeitungselement 1300 kann ferner einen Eingabekollektor 1328 umfassen, der zwischen dem Aktivierungspuffer 1206 und den Vektor-Multiplikations-Akkumulations-Einheiten 1202 angeordnet ist. Ein Operationstiefen-IC des Eingabekollektors 1328 kann konfiguriert sein, um unterschiedliche Niveaus von stationären Datenflüssen der Eingabeaktivierung einzustellen, wie weiter unten beschrieben.
  • Sowohl der Gewichtungspuffer 1204 als auch der Aktivierungspuffer 1206 weisen auch einen Puffermanager (Gewichtungsspeicherpuffermanager 1310 bzw. Aktivierungsspeicherpuffermanager 1312) auf, der auf den Controller 1214 anspricht und die Verfügbarkeit von Daten für die Vektor-Multiplikations-Akkumulationseinheiten 1202 bestimmt. Die Dimensionen der Adressgeneratoren und die Granularität der Datenbewegung vom Gewichtungspuffer 1204 und dem Aktivierungspuffer 1206 zu den Vektor-Multiplikations-Akkumulations-Einheiten 1202 können in einigen Ausführungsformen am Controller 1004 konfigurierbar sein.
  • Der Akkumulationsspeicherpuffer 1210 speichert Teilsummen von allen N Vektor-Multiplikations-Akkumulations-Einheiten 1202 und kann optimiert sein, um in jedem Zyklus Lese-Modifizier-Schreib-Operationen durchzuführen. Teilsummen von den N Vektor-Multiplikations-Akkumulations-Einheiten 1202 werden in Vektoren der Breite AP x N gepackt und in dem Akkumulationsspeicherpuffer 1210 gespeichert. Von dort können sie entweder direkt an ein anderes Verarbeitungselement zur verarbeitungselementübergreifenden Reduktion oder an den Postprozessor 1212 gesendet werden, um endgültige Ausgabeaktivierungen zu erzeugen. Der Postprozessor 1212 kann Skalierungs- und Quantisierungsoperationen und zusätzlich ReLU- und Pooling-Operationen bereitstellen, um eine Schichtfusion zu ermöglichen.
  • Eingabegewichtungen 1302 treffen über den Router 1208 ein und werden im Gewichtungspuffer 1204 gespeichert. Eingabeaktivierungen 1304 treffen auch über den Router 1208 ein und werden im Aktivierungspuffer 1206 gespeichert. Berechnete Ausgabeaktivierungen 1326 (nach der Nachverarbeitung durch den Postprozessor 1212) oder Teilsummen 1306 aus dem Akkumulationsspeicherpuffer 1210 werden über den Router 1208 an den globalen Puffer 1002 bzw. benachbarte Verarbeitungselemente ausgegeben. Verarbeitungselementübergreifende Reduktionen 1308 von den benachbarten Verarbeitungselementen können von dem -Router 1208 empfangen und in dem Akkumulationsspeicherpuffer 1210 akkumuliert werden. „Verarbeitungselementübergreifende Reduktion“ bezieht sich auf die Reduktion eines Teilrechenergebnisses durch ein erstes Verarbeitungselement auf ein endgültiges oder vollständigeres Rechenergebnis durch ein oder mehrere andere Verarbeitungselemente.
  • 14 zeigt den Postprozessor 1212 gemäß einer Ausführungsform. Der Postprozessor 1212 kann Logik (z. B. Spezialfunktionseinheiten 1912) für häufige Operationen des neuronalen Netzes wie Pooling, ReLu-Aktivierung, Bias-Addition, Rundung und Skalierung umfassen. Die Einheit für nicht normiertes Softmax 828 kann in einigen Ausführungsformen als Spezialfunktionseinheit in den Postprozessoren 1212 der verarbeitenden Verarbeitungselemente 1014 implementiert sein.
  • 15 zeigt ein globales Verarbeitungselement 1522 gemäß einer Ausführungsform. Das globale Verarbeitungselement 1522 umfasst einen globalen Speicherpuffer 1502 mit arbitrierten Speicherbänken 1520 (z. B. ein „Scratchpad“), einen Controller 1504 zum Ausführen von Berechnungen an Daten in den arbitrierten Speicherbänken 1520 und einen Aktivierungsadressengenerator 1506 und ein Zieladressengenerator 1510, um Quell- bzw. Zieladressen für Berechnungen zu erzeugen. „Speicherbank“ bezieht sich auf eine logische Speichereinheit. Die Speicherbank kann durch den Speichercontroller zusammen mit der physischen Organisation der Hardware-Speicherschnittstellen bestimmt werden. In einem typischen synchronen dynamischen Direktzugriffsspeicher (SDRAM) oder einem synchronen dynamischen Direktzugriffsspeicher mit doppelter Datenrate (DDR SDRAM) umfasst eine Speicherbank mehrere Reihen und Spalten von Speichereinheiten und kann über mehrere Speicherchips verteilt sein. Das globale Verarbeitungselement 1522 kommuniziert mit anderen Verarbeitungselementen über den Router 1208.
  • Der Datenpfad 1508 zum und vom globalen Speicherpuffer 1502 umfasst eine Registerdatei 1512, die gemäß den Anforderungen an den Datenfluss als Kollektor für eine oder mehrere von Eingabeaktivierungen 1518, Ausgabeaktivierungen 1514 und Teilsummen 1516 zu und von lokalen Verarbeitungselementen arbeiten kann.
  • Viele neuronale Netze verwenden Berechnungen wie die elementweise Berechnung und die tiefenweise Faltung für eine verbesserte Gesamtgenauigkeit. Lokale Verarbeitungselemente sind auf die Ausführung dichter Faltung mit wesentlicher Wiederverwendung von Daten spezialisiert. Der globale Puffer 1002 kann von lokalen Verarbeitungselementen während der dichten Faltung als Datenspeicher der zweiten Ebene verwendet werden und kann auch Berechnungen für elementweise Operationen und tiefenweise Faltung durchführen. Globale Verarbeitungselemente führen lokal Berechnungen mit niedrigem Rechen-zu-Speicher-Verhältnis aus, ohne die Daten durch Schichten (und somit Chips) des neuronalen Netzes zu übertragen.
  • Der Controller 1504 kann für jedes globale Verarbeitungselement 1522 lokal sein oder kann durch den Chip-Master-Controller (Controller 1004) implementiert sein. Ebenso kann der globale Speicherpuffer 1502 lokal für das globale Verarbeitungselement 1522 sein oder durch den globalen Puffer 1002 implementiert sein.
  • Die hierin offenbarten Algorithmen und Techniken können von Computervorrichtungen ausgeführt werden, die mindestens eine Grafikverarbeitungseinheit (GPU) und/oder einen Allzweck-Datenprozessor (z. B. eine „Zentraleinheit oder CPU“) verwenden. Es werden beispielhafte Architekturen beschrieben, die konfiguriert sein können, um die hierin offenbarten Techniken auf solchen Vorrichtungen auszuführen.
  • In der folgenden Beschreibung können bestimmte Akronyme und Abkürzungen wie folgt verwendet werden:
    • • „DPC“ bezieht sich auf ein „Datenverarbeitungscluster“;
    • • „GPC“ bezieht sich auf ein „allgemeines Verarbeitungscluster“;
    • • „I/O“ bezieht sich auf „Eingang/Ausgang“;
    • • „L1-Cache“ bezieht sich auf „Cache der ersten Ebene“;
    • • „L2-Cache“ bezieht sich auf „Cache der zweiten Ebene“;
    • • „LSU“ bezieht sich auf eine „Lade-/Speichereinheit“;
    • • „MMU“ bezieht sich auf eine „Speicherverwaltungseinheit“;
    • • „MPC“ bezieht sich auf einen „M-Pipe-Controller“;
    • • „PPU“ bezieht sich auf eine „parallele Verarbeitungseinheit“;
    • • „PROP“ bezieht sich auf eine „Vor-Rasteroperationseinheit“;
    • • „ROP“ bezieht sich auf „Rasteroperationen“;
    • • „SFU“ bezieht sich auf eine „Spezialfunktionseinheit“;
    • • „SM“ bezieht sich auf einen „Streaming-Multiprozessor“;
    • • „Viewport-SCC“ bezieht sich auf „Viewport scale, cull und clip (skalieren, aussortieren und schneiden)“;
    • • „WDX“ bezieht sich auf eine „Arbeitsverteilungskreuzschiene“; und
    • • „XBar“ bezieht sich auf eine „Kreuzschiene“.
  • Parallelverarbeitungseinheit
  • 16 veranschaulicht eine Parallelverarbeitungseinheit 2008b gemäß einer Ausführungsform. In einer Ausführungsform ist die Parallelverarbeitungseinheit 2008b ein Multithread-Prozessor, der auf einer oder mehreren integrierten Schaltungsvorrichtungen implementiert ist. Die Parallelverarbeitungseinheit 2008b ist eine Latenzzeitverbergungsarchitektur, die dafür ausgelegt ist, viele Threads parallel zu verarbeiten. Ein Thread (z. B. ein Ausführungs-Thread) ist eine Instanziierung eines Satzes von Anweisungen, der zur Ausführung durch die Parallelverarbeitungseinheit 2008b konfiguriert ist. In einer Ausführungsform ist die Parallelverarbeitungseinheit 2008b eine Grafikverarbeitungseinheit (graphics processing unit - GPU), die dazu konfiguriert ist, eine Grafik-Rendering-Pipeline zum Verarbeiten von dreidimensionalen (3D) Grafikdaten umzusetzen, um zweidimensionale (2D) Bilddaten zur Anzeige auf einer Anzeigevorrichtung, wie etwa einer Flüssigkristallanzeige (liquid crystal display - LCD), zu erzeugen. In anderen Ausführungsformen kann die Parallelverarbeitungseinheit 2008b zum Durchführen von Universalberechnungen verwendet werden. Während hierin zu Veranschaulichungszwecken ein beispielhafter Parallelprozessor bereitgestellt ist, ist ausdrücklich anzumerken, dass ein solcher Prozessor nur zu Veranschaulichungszwecken dargelegt ist und dass ein beliebiger Prozessor eingesetzt werden kann, um diesen zu ergänzen und/oder zu ersetzen.
  • Wenigstens eine Parallelverarbeitungseinheit 2008b kann dazu konfiguriert sein, tausende von Anwendungen für Berechnungen mit hoher Leistungsfähigkeit (High Performance Computing - HPC), Datenzentren und maschinelles Lernen beschleunigen. Die Parallelverarbeitungseinheit 2008b kann dazu konfiguriert sein, zahlreiche Deep-Learning-Systeme und -Anwendungen für Plattformen autonomer Fahrzeuge, Deep Learning, Sprach-, Bild- und Texterkennungssysteme mit hoher Genauigkeit, intelligente Videoanalytik, molekulare Simulationen, Arzneimittelentwicklung, Krankheitsdiagnose, Wettervorhersage, Big-Data-Analytik, Astronomie, Molekulardynamiksimulation, Finanzmodellierung, Robotik, Fabrikautomatisierung, Echtzeit-Sprachübersetzung, Online-Suchoptimierung und personalisierte Benutzerempfehlungen und dergleichen zu beschleunigen.
  • Wie in 16 gezeigt, beinhaltet die Parallelverarbeitungseinheit 2008b eine I/O-Einheit 1602, eine Front-End-Einheit 1604, eine Scheduler-Einheit 1608, eine Arbeitsverteilungseinheit 1610, einen Hub 1606, eine Kreuzschiene 1614, mindestens ein allgemeines Verarbeitungsclustermodul 1700 und mindestens ein Speicherpartitionseinheitsmodul 1800. Die Parallelverarbeitungseinheit 2008b kann über mindestens eine Hochgeschwindigkeits-NVLink-1616-Verschaltung mit einem Host-Prozessor oder anderen Parallelverarbeitungseinheitsmodulen 2008b verbunden sein. Die Parallelverarbeitungseinheit 2008b kann über eine Verschaltung 1618 mit einem Host-Prozessor oder anderen Peripherievorrichtungen verbunden sein. Die Parallelverarbeitungseinheit 2008b kann auch mit einem lokalen Speicher verbunden sein, der eine Anzahl von Speichervorrichtungen 1612 umfasst. In einer Ausführungsform kann der lokale Speicher eine Anzahl Dynamischer-Direktzugriffsspeicher(DRAM)-Vorrichtungen umfassen. Die DRAM-Vorrichtungen können als ein Teilsystem mit Speicher mit hoher Bandbreite (high-bandwidth memory - HBM) konfiguriert sein, wobei in jeder Vorrichtung mehrere DRAM-Chips gestapelt sind. Der Speicher 1612 kann Logik umfassen, um die Parallelverarbeitungseinheit 2008b dazu zu konfigurieren, Aspekte der hierin offenbarten Techniken auszuführen.
  • Die NVLink-1616-Verschaltung ermöglicht es Systemen, zu skalieren und mindestens ein Parallelverarbeitungseinheitsmodul 2008b in Kombination mit mindestens einer CPU zu umfassen, unterstützt Cache-Kohärenz zwischen den Parallelverarbeitungseinheit-2008b-Modulen und CPUs sowie CPU-Mastering. Daten und/oder Befehle können vom NVLink 1616 über den Hub 1606 an/von anderen Einheiten der Parallelverarbeitungseinheit 2008b übertragen werden, wie etwa eine oder mehrere Kopier-Engines, ein Videocodierer, ein Videodecodierer, eine Energieverwaltungseinheit usw. (nicht explizit dargestellt). Der NVLink 1616 wird in Verbindung mit 20 ausführlicher beschrieben.
  • Die I/O-Einheit 1602 ist dazu konfiguriert, Übertragungen (z. B. Befehle, Daten usw.) von einem Host-Prozessor (nicht gezeigt) über die Verschaltung 1618 zu senden und zu empfangen. Die I/O-Einheit 1602 kann mit dem Host-Prozessor direkt über die Verschaltung 1618 oder durch eine oder mehrere Zwischenvorrichtungen, wie etwa eine Speicherbrücke, kommunizieren. In einer Ausführungsform kann die I/O-Einheit 1602 mit mindestens einem anderen Prozessor, wie etwa mindestens einem Parallelverarbeitungseinheitsmodul 2008b, über die Verschaltung 1618 kommunizieren. In einer Ausführungsform implementiert die I/O-Einheit 1602 eine Periphärkomponenten-Expressverschaltung(Peripheral Component Interconnect Express - PCIe)-Schnittstelle für die Kommunikation über einen PCIe-Bus und ist die Verschaltung 1618 ein PCIe-Bus. In alternativen Ausführungsformen kann die I/O-Einheit 1602 andere Arten von bekannten Schnittstellen zum Kommunizieren mit externen Vorrichtungen implementieren.
  • Die I/O-Einheit 1602 decodiert über die Verschaltung 1618 empfangene Pakete. In einer Ausführungsform stellen die Pakete Befehle dar, die so konfiguriert sind, dass sie die Parallelverarbeitungseinheit 2008b dazu veranlassen, verschiedene Operationen durchzuführen. Die I/O-Einheit 1602 überträgt die decodierten Befehle an verschiedene andere Einheiten der Parallelverarbeitungseinheit 2008b, je nachdem, wie die Befehle dies vorgeben. Zum Beispiel können einige Befehle an die Front-End-Einheit 1604 übertragen werden. Andere Befehle können an den Hub 1606 oder andere Einheiten der Parallelverarbeitungseinheit 2008b übertragen werden, wie etwa eine oder mehrere Kopier-Engines, ein Videocodierer, ein Videodecodierer, eine Energieverwaltungseinheit usw. (nicht explizit dargestellt). Mit anderen Worten ist die I/O-Einheit 1602 dazu konfiguriert, die Kommunikation zwischen und unter verschiedenen logischen Einheiten der Parallelverarbeitungseinheit 2008b routet.
  • In einer Ausführungsform codiert ein durch den Host-Prozessor ausgeführtes Programm einen Befehlsstream in einem Puffer, der der Parallelverarbeitungseinheit 2008b Arbeitslasten zur Verarbeitung bereitstellt. Eine Arbeitslast kann mehrere Anweisungen und Daten umfassen, die durch diese Anweisungen verarbeitet werden sollen. Der Puffer ist ein Bereich in einem Speicher, auf den sowohl der Host-Prozessor als auch die Parallelverarbeitungseinheit 2008b zugreifen kann (z. B. lesen/schreiben). Zum Beispiel kann die I/O-Einheit 1602 dazu konfiguriert sein, auf den Puffer in einem Systemspeicher zuzugreifen, der mit der Verschaltung 1618 über mittels der Verschaltung 1618 übertragene Speicheranfragen verbunden ist. In einer Ausführungsform schreibt der Host-Prozessor den Befehlsstream in den Puffer und überträgt dann einen auf den Anfang des Befehlsstreams weisenden Zeiger an die Parallelverarbeitungseinheit 2008b. Die Front-End-Einheit 1604 empfängt Zeiger, die auf mindestens einen Befehlsstream weisen. Die Front-End-Einheit 1604 verwaltet den mindestens einen Stream, wobei Befehle aus den Streams gelesen und Befehle an die verschiedenen Einheiten der Parallelverarbeitungseinheit 2008b weitergeleitet werden.
  • Die Front-End-Einheit 1604 ist mit einer Scheduler-Einheit 1608 gekoppelt, die die verschiedenen allgemeinen Verarbeitungsclustermodule 1700 dazu konfiguriert, Aufgaben zu verarbeiten, die durch den mindestens einen Stream definiert sind. Die Scheduler-Einheit 420 ist dazu konfiguriert, Zustandsinformationen bezüglich der verschiedenen Aufgaben zu verfolgen, die durch die Scheduler-Einheit 420 verwaltet werden. Der Zustand kann angeben, welchem allgemeinen Verarbeitungscluster 1700 eine Aufgabe zugewiesen ist, ob die Aufgabe aktiv oder inaktiv ist, eine der Aufgabe zugeordnete Prioritätsstufe und so weiter. Die Scheduler-Einheit 1608 verwaltet die Ausführung einer Vielzahl von Aufgaben auf dem mindestens einen allgemeinen Verarbeitungsclustermodul 1700.
  • Die Scheduler-Einheit 1608 ist an eine Arbeitsverteilungseinheit 1610 gekoppelt, die dazu konfiguriert ist, Aufgaben zur Ausführung auf den allgemeinen Verarbeitungsclustermodulen 1700 versendet. Die Arbeitsverteilungseinheit 1610 kann eine Anzahl geplanter Aufgaben nachverfolgen, die von der Scheduler-Einheit 1608 empfangen werden. In einer Ausführungsform verwaltet die Arbeitsverteilungseinheit 1610 einen Pool anstehender Aufgaben und einen Pool aktiver Aufgaben für jedes allgemeine Verarbeitungsclustermodul 1700. Der Pool anstehender Aufgaben kann eine Anzahl von Slots (z. B. 32 Slots) umfassen, die Aufgaben umfassen, die von einem bestimmten allgemeinen Verarbeitungscluster 1700 verarbeitet werden sollen. Der Pool aktiver Aufgaben kann eine Anzahl von Slots (z. B. 4 Slots) für Aufgaben umfassen, die aktiv von den allgemeinen Verarbeitungsclustermodulen 1700 verarbeitet werden. Wenn ein allgemeines Verarbeitungscluster 1700 die Ausführung einer Aufgabe beendet, wird diese Aufgabe aus dem Pool aktiver Aufgaben für das allgemeine Verarbeitungscluster 1700 entfernt und eine der anderen Aufgaben aus dem Pool anstehender Aufgaben wird ausgewählt und zur Ausführung auf dem allgemeinen Verarbeitungscluster 1700 angesetzt. Wenn eine aktive Aufgabe auf dem allgemeinen Verarbeitungscluster 1700 inaktiv war, etwa während sie darauf wartet, dass eine Datenabhängigkeit aufgelöst wird, dann kann die aktive Aufgabe aus dem allgemeinen Verarbeitungscluster 1700 entfernt und in den Pool anstehender Aufgaben zurückgeführt werden, während eine andere Aufgabe im Pool anstehender Aufgaben ausgewählt und zur Ausführung auf dem allgemeinen Verarbeitungscluster 1700 angesetzt wird.
  • Die Arbeitsverteilungseinheit 1610 kommuniziert mit dem mindestens einen allgemeinen Verarbeitungsclustermodul 1700 über die Kreuzschiene 1614. Die Kreuzschiene 1614 ist ein Verschaltungsnetz, das viele der Einheiten der Parallelverarbeitungseinheit 2008b mit anderen Einheiten der Parallelverarbeitungseinheit 2008b koppelt. Zum Beispiel kann die Kreuzschiene 1614 dazu konfiguriert sein, die Arbeitsverteilungseinheit 1610 an ein bestimmtes allgemeines Verarbeitungscluster 1700 zu koppeln. Obwohl nicht explizit gezeigt, kann auch mindestens eine andere Einheit der Parallelverarbeitungseinheit 2008b über den Hub 1606 mit der Kreuzschiene 1614 verbunden sein.
  • Die Aufgaben werden durch die Scheduler-Einheit 420 verwaltet und durch die Arbeitsverteilungseinheit 1610 an ein allgemeines Verarbeitungscluster 1700 versandt. Das allgemeine Verarbeitungscluster 1700 ist dazu konfiguriert, die Aufgabe zu verarbeiten und Ergebnisse zu generieren. Die Ergebnisse können von anderen Aufgaben innerhalb des allgemeinen Verarbeitungsclusters 1700 verbraucht, über die Kreuzschiene 1614 zu einem anderen allgemeinen Verarbeitungscluster 1700 geleitet oder im Speicher 1612 gespeichert werden. Die Ergebnisse können über die Speicherpartitionseinheitsmodule 1800 geschrieben werden, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten aus dem/in den Speicher 1612 implementieren, in den Speicher 1612 geschrieben werden. Die Ergebnisse können über den NVLink 1616 an eine andere Parallelverarbeitungseinheit 2008b oder CPU übertragen werden. In einer Ausführungsform beinhaltet die Parallelverarbeitungseinheit 2008b eine Anzahl U Speicherpartitionseinheitsmodule 1800, die gleich der Anzahl von separaten und unterschiedlichen Speichervorrichtungen 1612 ist, die mit der Parallelverarbeitungseinheit 2008b verbunden sind. Eine Speicherpartitionseinheit 1800 wird in Verbindung mit 18 ausführlicher beschrieben.
  • In einer Ausführungsform führt ein Host-Prozessor einen Treiberkernel aus, der eine Anwendungsprogrammierschnittstelle (application programming interface - API) implementiert, die es auf dem Host-Prozessor ausgeführten Anwendungen ermöglicht, Operationen zur Ausführung auf der Parallelverarbeitungseinheit 2008b anzusetzen. In einer Ausführungsform werden mehrere Rechenanwendungen simultan durch die Parallelverarbeitungseinheit 2008b ausgeführt und stellt die Parallelverarbeitungseinheit 2008b Isolierung, Dienstgüte (quality of service - QoS) und unabhängige Adressräume für die mehreren Rechenanwendungen bereit. Eine Anwendung kann Anweisungen (z. B. API-Aufrufe) generieren, die bewirken, dass der Treiberkernel Aufgaben zur Ausführung durch die Parallelverarbeitungseinheit 2008b generiert. Der Treiberkernel gibt Aufgaben Streams aus, die durch die Parallelverarbeitungseinheit 2008b verarbeitet werden. Jede Aufgabe kann mindestens eine Gruppe zugehöriger Threads umfassen, die hierein als Warp bezeichnet werden. In einer Ausführungsform umfasst ein Warp 32 zugehörige Threads, die parallel ausgeführt werden können.Kooperierende Threads können sich auf eine Vielzahl von Threads beziehen, die Anweisungen zum Durchführen der Aufgabe beinhalten und Daten über einen gemeinsam genutzten Speicher austauschen können.Threads und kooperierende Threads werden in Verbindung mit 19 ausführlicher beschrieben.
  • 17 zeigt ein allgemeines Verarbeitungscluster 1700 der Parallelverarbeitungseinheit 2008b aus 16 gemäß einer Ausführungsform. Wie in 17 gezeigt, beinhaltet jedes allgemeine Verarbeitungscluster 1700 eine Anzahl von Hardwareeinheiten zum Verarbeiten von Aufgaben. In einer Ausführungsform beinhaltet jedes allgemeine Verarbeitungscluster 1700 einen Pipeline-Manager 1702, eine Vor-Rasteroperationseinheit 1704, eine Raster-Engine 1708, eine Arbeitsverteilungskreuzschiene 1714, eine Speicherverwaltungseinheit 1716 und mindestens ein Datenverarbeitungscluster 1706. Es versteht sich, dass das allgemeine Verarbeitungscluster 1700 aus 17 andere Hardwareeinheiten anstelle oder zusätzlich zu den in 17 gezeigten umfassen kann.
  • In einer Ausführungsform wird der Betrieb des allgemeinen Verarbeitungsclusters 1700 durch den Pipeline-Manager 1702 gesteuert. Der Pipeline-Manager 1702 verwaltet die Konfiguration des mindestens einen Datenverarbeitungsclustermoduls 1706 zum Verarbeiten von Aufgaben, die dem allgemeinen Verarbeitungscluster 1700 zugewiesen sind. In mindestens einer Ausführungsform konfiguriert der Pipeline-Manager 1702 mindestens eins der Datenverarbeitungsclustermodule 1706, um mindestens einen Teil einer Grafik-Rendering-Pipeline zu implementieren. Zum Beispiel kann ein Datenverarbeitungscluster 1706 dazu konfiguriert sein, ein Scheitelpunkt-Shader-Programm auf dem programmierbaren Streaming-Multiprozessor 1900 auszuführen. Der Pipeline-Manager 1702 kann auch dazu konfiguriert sein, von der Arbeitsverteilungseinheit 1610 empfangene Pakete an die entsprechenden logischen Einheiten innerhalb des allgemeinen Verarbeitungsclusters 1700 weiterzuleiten. Zum Beispiel können einige Pakete an Hardwareeinheiten mit fester Funktion in der Vor-Rasteroperationseinheit 1704 und/oder Raster-Engine 1708 geroutet werden, während andere Pakete zur Verarbeitung durch die Grundelement-Engine 1712 oder den Streaming-Multiprozessor 1900 an die Datenverarbeitungsclustermodule 1706 geleitet werden können. In mindestens einer Ausführungsform konfiguriert der Pipeline-Manager 1702 mindestens eins der Datenverarbeitungsclustermodule 1706, um ein Modell des neuronalen Netzes und/oder eine Rechenpipeline zu implementieren.
  • Die Vor-Rasteroperationseinheit 1704 ist dazu konfiguriert, Daten, die von der Raster-Engine 1708 und den Datenverarbeitungsclustermodulen 1706 erzeugt werden, an eine Rasteroperationseinheit (ROP) weiterzuleiten, die in Verbindung mit 18 ausführlich beschrieben wird. Die Vor-Rasteroperationseinheit 1704 kann auch dazu konfiguriert sein, verbesserte Operationen zum Farbmischen durchzuführen, Pixeldaten zu organisieren, Adressübersetzungen durchzuführen und dergleichen.
  • Die Raster-Engine 1708 beinhaltet eine Anzahl von Hardwareeinheiten mit fester Funktion, die dazu konfiguriert sind, verschiedene Rasteroperationen durchzuführen. In einer Ausführungsform beinhaltet die Raster-Engine 1708 eine Setup-Engine, eine Grobraster-Engine, eine Culling-Engine, eine Clipping-Engine, eine Feinraster-Engine und eine Kachel-Koaleszenz-Engine. Die Setup-Engine empfängt transformierte Scheitelpunkte und erzeugt Ebenengleichungen, die dem durch die Scheitelpunkte definierten geometrischen Grundelement zugeordnet sind. Die Ebenengleichungen werden an die Grobraster-Engine übertragen, um Abdeckungsinformationen (z. B. eine x-, y-Abdeckungsmaske für eine Kachel) für das Grundelement zu erzeugen. Die Ausgabe der Grobraster-Engine wird an die Culling-Engine übertragen, wo Fragmente, die dem Grundelement zugeordnet sind und einen Z-Test nicht bestehen, aussortiert werden, und an eine Clipping-Engine übertragen, wo Fragmente, die außerhalb eines Betrachtungskegels liegen, abgeschnitten werden. Diejenigen Fragmente, die das Beschneiden und Sortieren überleben, können an eine Feinraster-Engine übergeben werden, um Attribute für die Pixelfragmente auf Grundlage von Ebenengleichungen zu erzeugen, die von der Setup-Engine erzeugt werden. Die Ausgabe der Raster-Engine 1708 umfasst Fragmente, die zum Beispiel durch einen Fragment-Shader verarbeitet werden sollen, der in einem Datenverarbeitungscluster 1706 implementiert ist.
  • Jedes Datenverarbeitungscluster 1706, das in dem allgemeinen Verarbeitungscluster 1700 enthalten ist, beinhaltet einen M-Pipe-Controller 1710, eine Grundelement-Engine 1712 und mindestens ein Streaming-Multiprozessor-Modul 1900. Der M-Pipe-Controller 1710 steuert den Betrieb des Datenverarbeitungsclusters 1706 und leitet vom Pipeline-Manager 1702 empfangene Pakete an die entsprechenden Einheiten im Datenverarbeitungscluster 1706 weiter. Zum Beispiel können einem Scheitelpunkt zugeordnete Pakete an die Grundelement-Engine 1712 geroutet werden, die dazu konfiguriert ist, dem Scheitelpunkt zugeordnete Scheitelpunktattribute aus dem Speicher 1612 abzurufen. Im Gegensatz dazu können einem Shader-Programm zugeordnete Pakete an den Streaming-Multiprozessor 1900 übertragen werden.
  • Der Streaming-Multiprozessor 1900 umfasst einen programmierbaren Streaming-Prozessor, der dazu konfiguriert ist, Aufgaben zu verarbeiten, die durch eine Anzahl von Threads repräsentiert werden. Jeder Streaming-Multiprozessor 1900 ist mit multithreaded und dazu konfiguriert, mehrere Threads (z. B. 32 Threads) aus einer bestimmten Gruppe von Threads gleichzeitig auszuführen. In einer Ausführungsform implementiert der Streaming-Multiprozessor 1900 eine SIMD(Single-Instruction, Multiple-Data)-Architektur, bei der jeder Thread in einer Gruppe von Threads (z. B. einem Warp) dazu konfiguriert ist, einen unterschiedlichen Datensatz basierend auf demselben Anweisungssatz zu verarbeiten. Alle Threads in einer Gruppe von Threads führen dieselben Anweisungen aus. In einer weiteren Ausführungsform implementiert der Streaming-Multiprozessor 1900 eine SIMT(Single-Instruction, Multiple Thread)-Architektur, bei der jeder Thread in einer Gruppe von Threads dazu konfiguriert ist, einen unterschiedlichen Datensatz basierend auf demselben Anweisungssatz zu verarbeiteen, wobei jedoch die einzelnen Threads in der Gruppe von Threads während der Ausführung divergieren dürfen. In einer Ausführungsform werden ein Programmzähler, ein Aufrufstapel und ein Ausführungszustand für jeden Warp geführt, wodurch Nebenläufigkeit zwischen Warps und serielle Ausführung innerhalb von Warps ermöglicht wird, wenn Threads innerhalb eines Warps divergieren. In einer anderen Ausführungsform werden ein Programmzähler, ein Aufrufstapel und ein Ausführungsstatus für jeden einzelnen Thread geführt, wodurch gleichwertige Nebenläufigkeit zwischen allen Threads, innerhalb und zwischen Warps, ermöglicht wird. Wenn der Ausführungszustand für jeden einzelnen Thread beibehalten wird, können Threads, die dieselben Anweisungen ausführen, für eine maximale Effizienz konvergiert und parallel ausgeführt werden. Der Streaming-Multiprozessor 1900 wird in Verbindung mit 19 ausführlich beschrieben.
  • Die Speicherverwaltungseinheit 1716 stellt eine Schnittstelle zwischen dem allgemeinen Verarbeitungscluster 1700 und der Speicherpartitionseinheit 1800 bereit. Jede Speicherverwaltungseinheit 1716 kann eine Übersetzung virtueller Adressen in physische Adressen, einen Speicherschutz und eine Arbitrierung von Speicheranfragen bereitstellen. In einer Ausführungsform stellt die Speicherverwaltungseinheit 1716 einen oder mehrere Übersetzungspuffer (translation lookaside buffer - TLB) zum Durchführen der Übersetzung von virtuellen Adressen in physische Adressen im Speicher 1612 bereit.
  • 18 zeigt ein Speicherpartitionseinheit 1800 der Parallelverarbeitungseinheit 2008b aus 16 gemäß einer Ausführungsform. Wie in 18 gezeigt, beinhaltet die Speicherpartitionseinheit 1800 eine Rasteroperationseinheit 1802, einen Cache der zweiten Ebene 1804 und eine Speicherschnittstelle 1806. Die Speicherschnittstelle 1806 ist an den Speicher 1612 gekoppelt. Die Speicherschnittstelle kann 32-, 64-, 128-, 1024-Bit-Datenbusse oder dergleichen für die Hochgeschwindigkeitsdatenübertragung implementieren. In einer Ausführungsform enthält die Parallelverarbeitungseinheit 2008b U Speicherschnittstellenmodule 1806, eine Speicherschnittstelle 1806 pro Paar Speicherpartitionseinheitmodule 1800, wobei jedes Paar Speicherpartitionseinheitsmodule 1800 mit einer entsprechenden Speichervorrichtung 1612 verbunden ist. Die Parallelverarbeitungseinheit 2008b kann mit bis zu Y Speichervorrichtungen 1612 verbunden sein, wie etwa mit Speicherstapeln mit hoher Bandbreite oder mit einem synchronen dynamischen Grafik-Double-Data-Rate(Version 5)-Direktzugriffsspeicher oder anderen Arten von dauerhaftem Speicher.
  • In mindestens einer Ausführungsform implementiert die Speicherschnittstelle 1806 eine HBM2-Speicherschnittstelle und Y ist gleich der Hälfte von U. In einer Ausführungsform befinden sich die HBM2-Speicherstapel im demselben physischen Paket wie die Parallelverarbeitungseinheit 2008b, was erhebliche Leistungs- und Flächeneinsparungen im Vergleich zu üblichen GDDR5-SDRAM-Systemen bereitstellt. In einer Ausführungsform beinhaltet jeder HBM2-Stapel vier Speicherchips und ist Y gleich 4, wobei der HBM2-Stapel zwei 128-Bit-Kanäle pro Chip für insgesamt 8 Kanäle und eine Datenbusbreite von 1024 Bit beinhaltet.
  • In einer Ausführungsform unterstützt der Speicher 1612 Single-Error-Correcting-Double-Error-Detecting(SECDED)-Fehlerkorrekturcode (Error Correction Code - ECC) zum Schützen von Daten. Der ECC stellt eine höhere Zuverlässigkeit für Rechenanwendungen bereit, die anfällig für Datenkorruption sind. Zuverlässigkeit ist besonders wichtig in großen Cluster-Computing-Umgebungen, in denen Parallelverarbeitungseinheitsmodule 2008b sehr große Datensätze verarbeiten und/oder Anwendungen über längere Zeiträume ausführen.
  • In einer Ausführungsform implementiert die Parallelverarbeitungseinheit 2008b eine Speicherhierarchie mit mehreren Ebenen. In einer Ausführungsform unterstützt die Speicherpartitionseinheit 1800 einen vereinheitlichten Speicher, um einen einzelnen vereinheitlichten virtuellen Adressraum für Speicher der CPU und der Parallelverarbeitungseinheit 2008b bereitzustellen, wodurch die gemeinsame Nutzung von Daten zwischen virtuellen Speichersystemen ermöglicht wird. In einer Ausführungsform wird die Häufigkeit von Zugriffen durch eine Parallelverarbeitungseinheit 2008b auf Speicher, der sich auf anderen Prozessoren befindet, nachverfolgt, um sicherzustellen, dass Speicherseiten in den physischen Speicher der Parallelverarbeitungseinheit 2008b verschoben werden, die häufiger auf die Seiten zugreift. In einer Ausführungsform unterstützt der NVLink 1616 Adressübersetzungsdienste, die es der Parallelverarbeitungseinheit 2008b ermöglichen, direkt auf die Seitentabellen einer CPU zuzugreifen, und der Parallelverarbeitungseinheit 2008b vollen Zugriff auf den CPU-Speicher bieten.
  • In einer Ausführungsform übertragen Kopier-Engines Daten zwischen mehreren Parallelverarbeitungseinheitsmodulen 2008b oder zwischen Parallelverarbeitungseinheitsmodulen 2008b und CPUs. Die Kopier-Engines können Seitenfehler für Adressen generieren, die nicht in den Seitentabellen abgebildet sind. Die Speicherpartitionseinheit 1800 kann dann die Seitenfehler beheben, indem sie die Adressen in den Seitentabelle abbildet, wonach die Kopier-Engine die Übertragung durchführen kann. In einem üblichen System ist der Speicher für mehrere Kopier-Engine-Operationen zwischen mehreren Prozessoren gepinnt (d. h. nicht auslagerungsfähig), was den verfügbaren Speicher reduziert. Bei Hardware-Seitenfehlergenerierung können Adressen ohne Bedenken an Kopier-Engines übergeben werden, wenn die Speicherseiten resident sind, und der Kopierprozess ist transparent.
  • Daten aus dem Speicher 1612 oder einem anderen Systemspeicher werden durch die Speicherpartitionseinheit 1800 abgerufen und im Cache der zweiten Ebene 1804 gespeichert, der sich auf dem Chip befindet und von den verschiedenen allgemeinen Verarbeitungsclustermodulen 1700 gemeinsam genutzt wird. Wie gezeigt, beinhaltet jede Speicherpartitionseinheit 1800 einen Teil des Cache der zweiten Ebene 1804, der einer entsprechenden Speichervorrichtung 1612 zugeordnet ist. Caches niedrigerer Ebene können dann in verschiedenen Einheiten innerhalb der allgemeinen Verarbeitungsclustermodule 1700 implementiert werden. Zum Beispiel kann jedes der Streaming-Multiprozessor-Module 1900 einen L1-Cache implementieren. Der L1-Cache ist ein privater Speicher, der dediziert für einen bestimmte Streaming-Multiprozessor 1900 vorgesehen ist. Daten aus dem Cache der zweiten Ebene 1804 können abgerufen und in jedem der L1-Caches zur Verarbeitung in den Funktionseinheiten der Streaming-Multiprozessormodule 1900 gespeichert werden. Der Cache der zweiten Ebene 1804 ist an die Speicherschnittstelle 1806 und die Kreuzschiene 1614 gekoppelt.
  • Die Rasteroperationseinheit 1802 führt Grafikrasteroperationen in Bezug auf die Pixelfarbe durch, wie etwa Farbkompression, Pixelmischung und dergleichen. Die Rasteroperationseinheit 1802 implementiert auch Tiefentests in Verbindung mit der Raster-Engine 1708 und empfängt von der Culling-Engine der Raster-Engine 1708 eine Tiefe für einen Abtastort, der einem Pixelfragment zugeordnet ist. In mindestens einer Ausführungsform wird die Tiefe in Bezug auf eine entsprechende Tiefe in einem Tiefenpuffer für einen dem Fragment zugeordneten Abtastort getestet. Wenn das Fragment den Tiefentest für den Abtastort besteht, dann aktualisiert die Rasteroperationseinheit 1802 den Tiefenpuffer und übermittelt ein Ergebnis des Tiefentests an die Raster-Engine 1708. Es versteht sich, dass die Anzahl der der Partitionsspeicherpartitionseinheitmodule 1800 von der Anzahl der allgemeinen Verarbeitungsclustermodule 1700 verschieden sein kann und daher jede Rasteroperationseinheit 1802 mit jedem der allgemeinen Verarbeitungsclustermodule 1700 gekoppelt sein kann. Die Rasteroperationseinheit 1802 verfolgt Pakete, die von den verschiedenen allgemeinen Verarbeitungsclustermodulen 1700 empfangen werden, und bestimmt, zu welchem allgemeinen Verarbeitungscluster 1700 ein von der Rasteroperationseinheit 1802 generiertes Ergebnis durch die Kreuzschiene 1614 geleitet wird.Obwohl die Rasteroperationseinheit 1802 in der Speicherpartitionseinheit 1800 in 18 enthalten ist, kann sich die Rasteroperationseinheit 1802 in einer anderen Ausführungsform außerhalb der Speicherpartitionseinheit 1800 befinden. Zum Beispiel kann sich die Rasteroperationseinheit 1802 in dem allgemeinen Verarbeitungscluster 1700 oder einer anderen Einheit befinden.
  • 19 zeigt den Streaming-Multiprozessor 1900 aus 17 gemäß einer Ausführungsform. Wie in 19 gezeigt, beinhaltet der Streaming-Multiprozessor 1900 einen Anweisungscache 1902, ein oder mehrere Scheduler-Einheitmodule 1904 (z. B. die Scheduler-Einheit 1608), eine Registerdatei 1908, ein oder mehrere Verarbeitungskernmodule 1910, ein oder mehrere Spezialfunktionseinheitsmodule 1912, ein oder mehrere Lade-/Speichereinheitsmodule 1914, ein Verschaltungsnetz 1916 und einen gemeinsam genutzten Speicher/L1-Cache 1918.
  • Wie oben beschrieben, verteilt die Arbeitsverteilungseinheit 1610 Aufgaben zur Ausführung an den allgemeinen Verarbeitungsclustermodulen 1700 der Parallelverarbeitungseinheit 2008b. Die Aufgaben werden einem bestimmten Datenverarbeitungscluster 1706 innerhalb eines allgemeinen Verarbeitungsclusters 1700 zugewiesen, und wenn die Aufgabe einem Shader-Programm zugeordnet ist, kann die Aufgabe einem Streaming-Multiprozessor 1900 zugewiesen werden. Die Scheduler-Einheit 1608 empfängt Aufgaben von der Arbeitsverteilungseinheit 1610 und verwaltet die Anweisungsplanung für einen oder mehrere Thread-Blöcke, die dem Streaming-Multiprozessor 1900 zugewiesen sind. Die Scheduler-Einheit 1904 setzt die Thread-Blöcke zur Ausführung als Warps von parallelen Threads an, wobei jedem Thread-Block mindestens ein Warp zugewiesen ist. In einer Ausführungsform führt jeder Warp 32 Threads aus. Die Scheduler-Einheit 1904 kann eine Vielzahl von unterschiedlichen Thread-Blöcken verwalten, indem sie die Warps den unterschiedlichen Thread-Blöcken zuweist und dann während jedes Taktzyklus Anweisungen von der Vielzahl von unterschiedlichen kooperativen Gruppen an die verschiedenen Funktionseinheiten (z. B. die Kernmodule 1910, die Spezialfunktionseinheitsmodule 1912 und/oder die Lade-/Speichereinheitsmodule 1914) versendet.
  • Kooperative Gruppen sind ein Programmierungsmodell zum Organisieren von Gruppen kommunizierender Threads, das es Entwicklern erlaubt, die Granularität auszudrücken, mit der Threads kommunizieren, und so den Ausdruck satterer, effizienterer paralleler Dekompositionen ermöglicht. Kooperative Launch-APIs unterstützen die Synchronisation zwischen Thread-Blöcken für die Ausführung paralleler Algorithmen. Übliche Programmierungsmodelle stellen ein einzelnes, einfaches Konstrukt für die Synchronisation kooperierender Threads bereit: eine Sperre über alle Threads eines Thread-Blocks hinweg (z. B. die Funktion syncthreads( )). Programmierer würden jedoch häufig gerne Gruppen von Threads mit geringerer Granularität als Thread-Block-Granularität definieren und innerhalb der definierten Gruppen synchronisieren, um eine höhere Leistungsfähigkeit, Auslegungsflexibilität und Software-Wiederverwendung in Form von kollektiven gruppenweiten Funktionsschnittstellen zu ermöglichen.
  • Kooperative Gruppen es ermöglichen Programmierern, Gruppen von Threads explizit mit Teilblock- (d. h. so klein wie ein einzelner Thread) und Mehrblock-Granularität zu definieren und kollektive Operationen, wie etwa Synchronisation, an den Threads in einer kooperativen Gruppe durchzuführen. Das Programmierungsmodell unterstützt eine saubere Komposition über Software-Grenzen hinweg, sodass sich Bibliotheken und Utility-Funktionen innerhalb ihres lokalen Kontexts sicher synchronisieren können, ohne Annahmen zu Konvergenz treffen zu müssen. Grundelemente der kooperativen Gruppen ermöglichen neue Muster der kooperativen Parallelität, einschließlich Produzent-Konsument-Parallelität, opportunistischer Parallelität und globaler Synchronisation über ein gesamtes Gitter von Thread-Blöcken hinweg.
  • In der Scheduler-Einheit 1904 ist eine Dispatch-Einheit 1906 konfiguriert, um Anweisungen an eine oder mehrere der Funktionseinheiten zu übertragen. In einer Ausführungsform beinhaltet die Scheduler-Einheit 1904 zwei Dispatch-Einheiten 1906, die es ermöglichen, während jedes Taktzyklus zwei unterschiedliche Anweisungen von demselben Warp zu versenden. In alternativen Ausführungsformen kann jede Scheduler-Einheit 1904 eine einzelne Dispatch-Einheit 1906 oder zusätzliche Dispatch-Einheiten 1906 beinhalten.
  • Jeder Streaming-Multiprozessor 1900 beinhaltet eine Registerdatei 1908, die einen Satz von Registern für die Funktionseinheiten des Streaming-Multiprozessors 1900 bereitstellt. In einer Ausführungsform wird die Registerdatei 1908 derartig zwischen den einzelnen Funktionseinheiten aufgeteilt, dass jeder Funktionseinheit ein dedizierter Teil der Registerdatei 1908 zugewiesen wird. In einer anderen Ausführungsform wird die Registerdatei 1908 auf unterschiedliche Warps aufgeteilt, die vom Streaming-Multiprozessor 1900 ausgeführt werden. Die Registerdatei 1908 stellt eine vorübergehende Speicherung für Operanden bereit, die mit den Datenpfaden der Funktionseinheiten verbunden sind.
  • Jeder Streaming-Multiprozessor 1900 umfasst L Verarbeitungskernmodule 1910. In einer Ausführungsform beinhaltet der Streaming-Multiprozessor 1900 eine große Anzahl (z. B. 128 usw.) von unterschiedlichen Verarbeitungskernmodulen 1910. Jeder Kern 1910 kann eine Verarbeitungseinheit umfassen, die vollständig gepipelinet, von einfacher Genauigkeit, doppelter Genauigkeit und/oder gemischter Genauigkeit ist und eine arithmetische Gleitkommalogikeinheit und eine arithmetische Ganzzahllogikeinheit beinhaltet. In einer Ausführungsform implementieren die arithmetischen Gleitkommalogikeinheiten den IEEE-754-2008-Standard für Gleitkommaarithmetik. In einer Ausführungsform umfassen die Kernmodule 1910 64 Gleitkommakeme mit einfacher Genauigkeit (32 Bit), 64 Ganzzahlkerne, 32 Gleitkommakeme mit doppelter Genauigkeit (64 Bit) und 8 Tensorkerne.
  • In den Kernmodulen 1910 sind Tensorkerne, die zum Durchführen von Matrixoperationen konfiguriert sind, und in einer Ausführungsform ein oder mehrere Tensorkerne enthalten. Insbesondere sind Tensorkerne dazu konfiguriert, eine Deep-Learning-Matrixarithmetik durchzuführen, wie etwa Faltungsoperationen für Training und Schlussfolgerung neuronaler Netze. In einer Ausführungsform arbeitet jeder Tensorkern an einer 4x4-Matrix und führt eine Matrixmultiplikations- und -akkumulationsoperation D = A'B+C durch, wobei A, B, C und D 4x4-Matrizen sind.
  • In einer Ausführungsform sind die Matrixmultiplikationseingänge A und B 16-Bit-Gleitkommamatrizen, während die Akkumulationsmatrizen C und D 16-Bit-Gleitkomma- oder 32-Bit-Gleitkommamatrizen sein können. In einer Ausführungsform arbeiten die Tensorkerne an 16-Bit-Gleitkommaeingabedaten mit 32-Bit-Gleitkommaakkumulation. Die 16-Bit-Gleitkommamultiplikation erfordert 64 Operationen und ergibt ein Produkt mit voller Genauigkeit, das dann unter Verwendung der 32-Bit-Gleitkommaaddition mit den anderen Zwischenprodukten für eine 4x4x4-Matrixmultiplikation akkumuliert wird. In der Praxis werden die Tensorkerne verwendet, um viel größere zweidimensionale oder höherdimensionale Matrixoperationen durchzuführen, die aus diesen kleineren Elementen aufgebaut sind. Eine API, wie etwa die CUDA 9 C++ API, legt Matrixlade-, Matrixmultiplikations- und -akkumulations- und Matrixspeicheroperationen frei, um die Tensorkerne von einem CUDA-C++-Programm effizient zu verwenden. Auf CUDA-Ebene nimmt die Warp-Ebenen-Schnittstelle Matrizen der Größe 16x16 an, die sich über alle 32 Threads des Warps erstrecken.
  • Jeder Streaming-Multiprozessor 1900 umfasst zudem M Spezialfunktionseinheitsmodule 1912, die Spezialfunktionen durchführen (z. B. Attributbewertung, Kehrwert der Quadratwurzel und dergleichen). In einer Ausführungsform können die Spezialfunktionseinheitsmodule 1912 eine Baumdurchquerungseinheit beinhalten, die dazu konfiguriert ist, eine hierarchische Baumdatenstruktur zu durchqueren. In einer Ausführungsform können die Spezialfunktionseinheitsmodule 1912 eine Textureinheit umfassen, die dazu konfiguriert ist, Texturzuordnungsfilterungsoperationen durchzuführen. In einer Ausführungsform sind die Textureinheiten dazu konfiguriert, Texturkarten (z. B. ein 2D-Array von Texeln) aus dem Speicher 1612 zu laden und die Texturkarten abzutasten, um abgetastete Texturwerte zur Verwendung in Shader-Programmen zu erzeugen, die durch den Streaming-Multiprozessor 1900 ausgeführt werden. In einer Ausführungsform werden Texturkarten im gemeinsam genutzten Speicher/L1-Cache 1918 gespeichert. Die Textureinheiten implementieren Texturoperationen, wie etwa Filterungsoperationen unter Verwendung von MIP-Karten (z. B. Texturkarten mit variierenden Detailstufen). In einer Ausführungsform beinhaltet jeder Streaming-Multiprozessor 1900 zwei Textureinheiten.
  • Jeder Streaming-Multiprozessor 1900 umfasst zudem N Lade-/Speichereinheitsmodule 1914, die Lade- und Speicheroperationen zwischen dem gemeinsam genutzten Speicher/L1-Cache 1918 und der Registerdatei 1908 implementieren. Jeder Streaming-Multiprozessor 1900 beinhaltet ein Verschaltungsnetz 1916, das die einzelnen Funktionseinheiten mit der Registerdatei 1908 und die Lade-/Speichereinheit 1914 mit der Registerdatei 1908 und dem gemeinsam genutzten Speicher/L1-Cache 1918 verbindet. In einer Ausführungsform ist das Verschaltungsnetz 1916 eine Kreuzschiene, die dazu konfiguriert sein kann, beliebige der Funktionseinheiten mit beliebigen Registern in der Registerdatei 1908 zu verbinden und die Lade-/Speichereinheitsmodule 1914 mit der Registerdatei 1908 und Speicherorten im gemeinsam genutzten Speicher/L1-Cache 1918 zu verbinden.
  • Der gemeinsame genutzte Speicher/L1-Cache 1918 ist ein On-Chip-Speicher-Array, das die Datenspeicherung und -übertragung zwischen dem Streaming-Multiprozessor 1900 und der Grundelement-Engine 1712 und zwischen Threads im Streaming-Multiprozessor 1900 ermöglicht. In einer Ausführungsform umfasst der gemeinsam genutzte Speicher/L1-Cache 1918 128 KB Speicherkapazität und befindet sich im Pfad vom Streaming-Multiprozessor 1900 zu der Speicherpartitionseinheit 1800. Der gemeinsam genutzte Speicher/L1-Cache 1918 kann verwendet werden, um Lese- und Schreibvorgänge zwischenzuspeichern. Einer oder mehrere von dem gemeinsam genutzten Speicher/L1-Cache 1918, dem Cache der zweiten Ebene 1804 und dem Speicher 1612 sind Sicherungsspeicher.
  • Die Kombination der Funktionen als Daten-Cache und gemeinsam genutztem Speicher in einem einzelnen Speicherblock stellt die beste Gesamtleistung für beide Arten von Speicherzugriffen bereit. Die Kapazität kann durch Programme, die keinen gemeinsam genutzten Speicher verwenden, als Cache verwendet werden. Wenn beispielsweise gemeinsam genutzter Speicher so konfiguriert ist, dass er die Hälfte der Kapazität verwendet, können Textur- und Lade-/Speicheroperationen die restliche Kapazität verwenden. Die Integration innerhalb des gemeinsam genutzten Speichers/L1-Cache 1918 ermöglicht dem gemeinsam genutzten Speicher/L1-Cache 1918, als eine Leitung mit hohem Durchsatz für Streaming-Daten zu fungieren, während zugleich ein Zugriff mit hoher Bandbreite und niedriger Latenz auf häufig wiederverwendete Daten bereitgestellt wird.
  • Bei einer Konfiguration für Universalparallelberechnungen kann eine einfachere Konfiguration als bei der Grafikverarbeitung verwendet werden. Insbesondere werden die in 16 gezeigten Grafikverarbeitungseinheiten mit festen Funktionen umgangen, wodurch ein wesentlich einfacheres Programmierungsmodell entsteht. Bei der Konfiguration für Universalparallelberechnungen weist die Arbeitsverteilungseinheit 1610 Blöcke von Threads direkt den Datenverarbeitungsclustermodulen 1706 zu und verteilt sie. Die Threads in einem Block führen dasselbe Programm aus, wobei eine eindeutige Thread-ID bei der Berechnung verwendet wird, um sicherzustellen, dass jeder Thread eindeutige Ergebnisse generiert, wobei der Streaming-Multiprozessor 1900 zur Ausführung des Programms und zur Durchführung von Berechnungen, der gemeinsam genutzte Speicher/L1-Cache 1918 zur Kommunikation zwischen den Threads und die Lade-/Speichereinheit 1914 zum Lesen des globalen Speichers und Schreibens darin durch den gemeinsam genutzten Speicher/L1-Cache 1918 und die Speicherpartitionseinheit 1800 verwendet werden. Wenn er zur Universalparallelberechnung konfiguriert sind, kann der Streaming-Multiprozessor 1900 auch Befehle schreiben, die die Scheduler-Einheit 1608 verwenden kann, um neue Arbeit an den Datenverarbeitungsclustermodulen 1706 zu starten.
  • Die Parallelverarbeitungseinheit 2008b kann in einem Desktop-Computer, einem Laptop-Computer, einem Tablet-Computer, Servern, Supercomputern, einem Smartphone (z. B. einer drahtlosen tragbaren Vorrichtung), einem persönlichen digitalen Assistenten (PDA), einer Digitalkamera, einem Fahrzeug, einer am Kopf befestigten Anzeige, einer elektronischen tragbaren Vorrichtung und dergleichen enthalten sein. In einer Ausführungsform ist die Parallelverarbeitungseinheit 2008b auf einem einzelnen Halbleitersubstrat verkörpert. In einer weiteren Ausführungsform ist die Parallelverarbeitungseinheit 2008b in einem System auf einem Chip (System on a Chip - SoC) zusammen mit einer oder mehreren anderen Vorrichtungen enthalten, wie etwa zusätzlichen Parallelverarbeitungseinheitsmodule 2008b, dem Speicher 1612, einer Reduced-Instruction-Set-Computer(RISC)-CPU, einer Speicherverwaltungseinheit (memory management unit - MMU), einem Digital-Analog-Wandler (digital-to-analog converter - DAC) und dergleichen.
  • In einer Ausführungsform kann die Parallelverarbeitungseinheit 2008b auf einer Grafikkarte enthalten sein, die eine oder mehrere Speichervorrichtungen beinhaltet. Die Grafikkarte kann dazu konfiguriert sein, mit einem PCIe-Steckplatz auf einer Hauptplatine eines Desktop-Computers eine Schnittstelle bildet. In noch einer weiteren Ausführungsform kann die Parallelverarbeitungseinheit 2008b eine integrierte Grafikverarbeitungseinheit (iGPU) oder ein paralleler Prozessor sein, der im Chipsatz der Hauptplatine enthalten ist.
  • Beispielhaftes Rechensystem
  • Systeme mit mehreren GPUs und CPUs werden in einer Vielzahl von Branchen verwendet, da Entwickler mehr Parallelität in Anwendungen wie dem Rechnen mit künstlicher Intelligenz erschließen und nutzen. In Rechenzentren, Forschungseinrichtungen und Supercomputern werden leistungsstarke GPU-beschleunigte Systeme mit Dutzenden bis vielen Tausend Rechenknoten eingesetzt, um immer größere Probleme zu lösen. Mit der zunehmenden Anzahl von Verarbeitungsvorrichtungen innerhalb der Hochleistungssysteme müssen die Kommunikations- und Datenübertragungsmechanismen skaliert werden, um die erhöhte Bandbreite zu unterstützen.
  • 20 ist ein konzeptionelles Schaubild eines Verarbeitungssystems 2000, das unter Verwendung der Parallelverarbeitungseinheit 2008b aus 16 gemäß einer Ausführungsform implementiert ist. Das Verarbeitungssystem 2000 beinhaltet jeweils eine Zentraleinheit 2006, einen Switch 2004 und mehrere Parallelverarbeitungseinheitsmodule 2008b sowie jeweilige Speichermodule 1612. Der NVLink 1616 stellt Hochgeschwindigkeits-Kommunikationsverbindungen zwischen den einzelnen Parallelverarbeitungseinheitsmodulen 2008b bereit. Obwohl in 20 eine bestimmten Anzahl von Verbindungen durch NVLink 1616 und Verschaltung 1618 dargestellt ist, kann die Anzahl der Verbindungen zu jeder Parallelverarbeitungseinheit 2008b und der Zentraleinheit 2006 variieren. Der Switch 2004 bildet eine Schnittstelle zwischen der Verschaltung 1618 und der Zentraleinheit 2006. Die Parallelverarbeitungseinheitsmodule 2008b, die Speichermodule 1612 und die NVLink-Verbindungen 1616 können sich auf einer einzigen Halbleiterplattform befinden, um ein Parallelverarbeitungsmodul 2002 zu bilden. In einer Ausführungsform unterstützt der Switch 2004 zwei oder mehr Protokolle, um eine Schnittstelle zwischen verschiedenen unterschiedlichen Verbindungen und/oder Links herzustellen.
  • In einer anderen (nicht gezeigten) Ausführungsform stellt der NVLink 1616 eine oder mehrere Hochgeschwindigkeits-Kommunikationsverbindungen zwischen den einzelnen Parallelverarbeitungseinheitsmodulen (Parallelverarbeitungseinheit 2008a, Parallelverarbeitungseinheit 2008b, Parallelverarbeitungseinheit 2008c ... Parallelverarbeitungseinheit 2008d) und der Zentraleinheit 2006 bereit, und der Switch 2004 bildet Schnittstellen zwischen der Verschaltung 1618 und den einzelnen Parallelverarbeitungseinheitsmodulen. Die Parallelverarbeitungseinheitsmodule, die Speichermodule 1612 und die Verschaltung 1618 können auf einer einzelnen Halbleiterplattform angeordnet sein, um ein Parallelverarbeitungsmodul 2002 zu bilden. In noch einer weiteren (nicht gezeigten) Ausführungsform stellt die Verschaltung 1618 eine oder mehrere Kommunikationsverbindungen zwischen den einzelnen Parallelverarbeitungseinheitsmodulen und der Zentraleinheit 2006 bereit, und der Switch 510 bildet Schnittstellen zwischen den einzelnen Parallelverarbeitungseinheitsmodulen unter Verwendung des NVLink 1616, um eine oder mehrere Hochgeschwindigkeits-Kommunikationsverbindungen zwischen den Parallelverarbeitungseinheitsmodulen bereitzustellen. In einer weiteren (nicht gezeigten) Ausführungsform stellt der NVLink 1616 eine oder mehrere Hochgeschwindigkeits-Kommunikationsverbindungen zwischen den Parallelverarbeitungseinheitsmodulen und der Zentraleinheit 2006 durch den Switch 2004 bereit. In noch einer weiteren (nicht gezeigten) Ausführungsform stellt die Verschaltung 1618 direkt eine oder mehrere Kommunikationsverbindungen zwischen den einzelnen Parallelverarbeitungseinheitsmodulen bereit. Eine oder mehrere der Hochgeschwindigkeits-Kommunikationsverbindungen des NVLink 1616 können als eine physische NVLink- Verschaltung oder als entweder eine chipintegrierte oder eine auf dem Chip befindliche Verschaltung unter Verwendung desselben Protokolls wie der NVLink 1616 implementiert sein.
  • Im Kontext der vorliegenden Beschreibung kann sich eine einzelne Halbleiterplattform auf eine einzige einheitliche halbleiterbasierte integrierte Schaltung, die auf einem Chip gefertigt ist, beziehen. Es sei angemerkt, dass sich der Begriff einzelne Halbleiterplattform auch auf Mehrchipmodule mit erhöhter Konnektivität beziehen kann, die einen Betrieb auf dem Chip simulieren und wesentliche Verbesserungen gegenüber der Nutzung einer üblichen Busimplementierung bewirken. Natürlich können die verschiedenen Schaltungen oder Vorrichtungen je nach Wunsch des Benutzers auch separat oder in verschiedenen Kombinationen von Halbleiterplattformen untergebracht sein. Alternativ kann das Parallelverarbeitungsmodul 2002 als ein Leiterplattensubstrat implementiert sein, und die einzelnen Parallelverarbeitungseinheitsmodule und/oder der Speichermodule 1612 können paketierte Vorrichtungen sein. In einer Ausführungsform befinden sich die Zentraleinheit 2006, der Switch 2004 und das Parallelverarbeitungsmodul 2002 auf einer einzelnen Halbleiterplattform.
  • In einer Ausführungsform beträgt die Signalisierungsrate jedes NVLink 1616 20 bis 25 Gigabit/Sekunde und beinhaltet jedes Parallelverarbeitungseinheitsmodul sechs Schnittstellen des NVLink 1616 (wie in 20 gezeigt, sind fünf des NVLink 1616 für jedes Parallelverarbeitungseinheitsmodul enthalten). Jeder NVLink 1616 stellt eine Datenübertragungsrate von 25 Gigabyte/Sekunde in jede Richtung bereit, wobei sechs Links 300 Gigabyte/Sekunde bereitstellen. Die NVLinks 1616 können ausschließlich für die PPU-zu-PPU-Kommunikation verwendet werden, wie in 20 gezeigt, oder für eine Kombination von PPU-zu-PPU und PPU-zu-CPU, wenn die Zentraleinheit 2006 ebenfalls eine oder mehrere Schnittstellen des NVLink 1616 beinhaltet.
  • In einer Ausführungsform ermöglicht der NVLink 1616 direkte Lade-/Speicher/atomischen Zugriff von der Zentraleinheit 2006 auf den Speicher 1612 jedes Parallelverarbeitungseinheitsmoduls. In einer Ausführungsform unterstützt der NVLink 1616 Kohärenzoperationen, wodurch aus den Speichermodulen 1612 gelesene Daten in der Cache-Hierarchie der Zentraleinheit 2006 gespeichert werden können, wodurch die Cache-Zugriffslatenz für die Zentraleinheit 2006 reduziert wird. In einer Ausführungsform beinhaltet der NVLink 1616 Unterstützung für Adressübersetzungsdienste (Address Translation Service - ATS), die es der dem Parallelverarbeitungseinheitsmodul ermöglichen, direkt auf Seitentabellen innerhalb der Zentraleinheit 2006 zuzugreifen. Einer oder mehrere der NVLinks 1616 können auch dazu konfiguriert sein, in einem Niedrigleistungsmodus zu arbeiten.
  • 21 veranschaulicht ein beispielhaftes Verarbeitungssystem, in dem die verschiedenen Architekturen und/oder Funktionen der verschiedenen vorstehenden Ausführungsformen implementiert sein können. Wie gezeigt, wird ein Verarbeitungssystem 2100 bereitgestellt, das mindestens eine Zentraleinheit 2006 beinhaltet, die mit einem Kommunikationsbus 2110 verbunden ist. Der Datenübertragungskommunikationsbus 2110 kann unter Verwendung eines beliebigen geeigneten Protokolls implementiert sein, wie etwa PCI (Peripheral Component Interconnect), PCI-Express, AGP (Accelerated Graphics Port), HyperTransport, oder mit beliebigen anderen Bus- oder Punkt-zu-Punkt-Kommunikationsprotokollen. Das beispielhafte Verarbeitungssystem 2100 beinhaltet auch einen Hauptspeicher 2102.Steuerlogik (Software) und Daten sind im Hauptspeicher 2102 gespeichert, der die Form eines Direktzugriffsspeichers (RAM) annehmen kann.
  • Das beispielhafte Verarbeitungssystem 2100 beinhaltet auch Eingabevorrichtungen 2108, das Parallelverarbeitungsmodul 2002 und Anzeigevorrichtungen 2106, z. B. eine CRT (cathode ray tube - Kathodenstrahlröhre), LCD (liquid crystal display - Flüssigkristallanzeige), LED (light emitting diode - Leuchtdiode), Plasmaanzeige oder dergleichen Benutzereingaben können von den Eingabevorrichtungen 2108 empfangen werden, z. B. Tastatur, Maus, Touchpad, Mikrofon und dergleichen. Jedes der genannten Module und/oder jede der genannten Vorrichtungen kann sogar auf einer einzelnen Halbleiterplattform untergebracht sein, um das beispielhafte Verarbeitungssystem 2100 zu bilden. Alternativ können verschiedene Module je nach Wunsch des Benutzers auch separat oder in verschiedenen Kombinationen von Halbleiterplattformen untergebracht sein.
  • Ferner kann das beispielhafte Verarbeitungssystem 2100 über eine Netzschnittstelle 2104 für Kommunikationszwecke an ein Netz (z. B. ein Telekommunikationsnetz, ein lokales Netz (LAN), ein drahtloses Netzwerk, ein Weitverkehrsnetz (WAN) wie das Internet, ein Peerto-Peer-Netz, ein Kabelnetz oder dergleichen) gekoppelt sein.
  • Das beispielhafte Verarbeitungssystem kann auch einen Sekundärspeicher (nicht gezeigt) beinhalten. Der Sekundärspeicher beinhaltet beispielsweise ein Festplattenlaufwerk und/oder ein Wechselspeicherlaufwerk, das ein Diskettenlaufwerk darstellt, ein Magnetbandlaufwerk, ein CD-Laufwerk, ein Digital-Versatile-Disk(DVD)-Laufwerk, eine Aufnahmevorrichtung, einen Universal-Serial-Bus(USB)-Flash-Speicher. Das Wechselspeicherlaufwerk liest in bekannter Weise von einer Wechselspeichereinheit und/oder schreibt in diese.
  • Computerprogramme oder logische Algorithmen zur Computersteuerung können im Hauptspeicher 2102 und/oder im Sekundärspeicher gespeichert sein. Diese Computerprogramme ermöglichen es bei Ausführung dem beispielhaften Verarbeitungssystem, verschiedene Funktionen durchzuführen. Der Hauptspeicher 2102, der Speicher und/oder beliebiger andere Speicher sind mögliche Beispiele für computerlesbare Medien.
  • Die Architektur und/oder Funktionen verschiedener vorstehender Figuren können im Kontext eines allgemeinen Computersystems, eines Leiterplattensystems, eines Spielkonsolensystems für Unterhaltungszwecke, eines anwendungsspezifischen Systems und/oder eines beliebigen anderen gewünschten Systems implementiert werden. Das beispielhafte Verarbeitungssystem 2100 kann zum Beispiel die Form eines Desktop-Computers, eines Laptop-Computers, eines Tablet-Computers, von Servern, Supercomputern, eines Smartphones (z. B. einer drahtlosen tragbaren Vorrichtung), eines persönlichen digitalen Assistenten (PDA), einer Digitalkamera, eines Fahrzeugs, einer am Kopf befestigten Anzeige, einer elektronischen tragbaren Vorrichtung, einer Mobiltelefonvorrichtung, eines Fernsehgeräts, einer Arbeitsstation, von Spielekonsolen, eines eingebetteten Systems und/oder einer beliebigen anderen Art von Logik annehmen.
  • Obwohl vorstehend verschiedene Ausführungsformen beschrieben wurden, versteht es sich, dass diese lediglich als Beispiele dienen und nicht als Einschränkung. Daher sollen die Breite und der Umfang einer Ausführungsform durch keine der vorstehend beschriebenen beispielhaften Ausführungsformen eingeschränkt werden, sondern sind in Übereinstimmung mit den folgenden Patentansprüchen und ihren Äquivalenten zu definieren.
  • Grafikverarbeitungs-Pipeline
  • 22 ist ein konzeptionelles Schaubild einer Grafikverarbeitungs-Pipeline 2200, die unter Verwendung der Parallelverarbeitungseinheit 2008b aus 16 gemäß einer Ausführungsform. In einer Ausführungsform umfasst die Parallelverarbeitungseinheit 2008b eine Grafikverarbeitungseinheit (GPU). Die Parallelverarbeitungseinheit 2008b ist dazu konfiguriert, Befehle zu empfangen, die Shader-Programme zum Verarbeiten von Grafikdaten angeben.Grafikdaten können als ein Satz von Grundelementen definiert sein, wie beispielsweise Punkte, Linien, Dreiecke, Quads, Dreiecksstreifen und dergleichen. In der Regel beinhaltet ein Grundelement Daten, die eine Anzahl von Scheitelpunkten für das Grundelement (z. B. in einem Modell-Raumkoordinatensystem) sowie Attribute, die jedem Scheitelpunkt des Grundelements zugeordnet sind, angeben. Die Parallelverarbeitungseinheit 2008b kann dazu konfiguriert sein, die Grafikgrundelemente zu verarbeiten, um einen Bildpuffer zu erzeugen (z. B. Pixeldaten für jedes der Pixel der Anzeige).
  • Eine Anwendung schreibt Modelldaten für eine Szene (z. B. eine Sammlung von Scheitelpunkten und Attributen) in einen Speicher, wie etwa einen Systemspeicher oder Speicher 1612. Die Modelldaten definieren jedes der Objekte, die auf einer Anzeige sichtbar sein können. Die Anwendung führt dann einen API-Aufruf an den Treiberkernel aus, der anfordert, dass die Modelldaten gerendert und angezeigt werden. Der Treiberkernel liest die Modelldaten und schreibt Befehle in den einen oder die mehreren Streams, um Operationen zum Verarbeiten der Modelldaten durchzuführen. Die Befehle können auf verschiedene Shader-Programme verweisen, die auf den Streaming-Multiprozessor-Modulen 1900 der Parallelverarbeitungseinheit 2008b zu implementieren sind, einschließlich eines oder mehrerer von einem Scheitelpunkt-Shader, Hüllen-Shader, Bereichs-Shader, Geometrie-Shader und einem Pixel-Shader. Zum Beispiel können eines oder mehrere der Streaming-Multiprozessormodule 1900 dazu konfiguriert sein, ein Scheitelpunkt-Shader-Programm auszuführen, das eine Anzahl von Scheitelpunkten verarbeitet, die durch die Modelldaten definiert sind. In einer Ausführungsform können die verschiedenen Streaming-Multiprozessormodule 1900 dazu konfiguriert sein, verschiedene Shader-Programme gleichzeitig auszuführen.Beispielsweise kann eine erste Teilmenge von Streaming-Multiprozessormodulen 1900 dazu konfiguriert sein, ein Scheitelpunkt-Shader-Programm auszuführen, während eine zweite Teilmenge von Streaming-Multiprozessormodulen 1900 dazu konfiguriert sein kann, ein Pixel-Shader-Programm auszuführen. Die erste Teilmenge von Streaming-Multiprozessormodulen 1900 verarbeitet Scheitelpunktdaten, um verarbeitete Scheitelpunktdaten zu erzeugen, und schreibt die verarbeiteten Scheitelpunktdaten in den Cache der zweiten Ebene 1804 und/oder den Speicher 1612. Nachdem die verarbeiteten Scheitelpunktdaten gerastert wurden (z. B. von dreidimensionalen Daten in zweidimensionale Daten im Bildschirmraum transformiert wurden), um Fragmentdaten zu erzeugen, führt die zweite Teilmenge der Streaming-Multiprozessormodule 1900 einen Pixel-Shader aus, um verarbeitete Fragmentdaten zu erzeugen, die dann mit anderen verarbeiteten Fragmentdaten gemischt und in den Bildpuffer im Speicher 1612 geschrieben. Das Scheitelpunkt-Shader-Programm und das Pixel-Shader-Programm können gleichzeitig ausgeführt werden, wobei verschiedene Daten aus derselben Szene in pipeline-artig verarbeitet werden, bis alle Modelldaten für die Szene in den Bildpuffer gerendert wurden. Dann werden die Inhalte des Bildpuffers an einen Anzeige-Controller zur Anzeige auf einer Anzeigevorrichtung übertragen.
  • Die Grafikverarbeitungs-Pipeline 2200 ist ein abstraktes Flussdiagramm der Verarbeitungsschritte, die implementiert werden, um computergenerierte 2D-Bilder aus 3D-Geometriedaten zu erzeugen. Wie bekannt ist, können Pipeline-Architekturen Operationen mit langer Latenz effizienter durchführen, indem sie die Operation in eine Vielzahl von Stufen aufteilen, wobei die Ausgabe jeder Stufe mit dem Eingang der nächsten nachfolgenden Stufe gekoppelt wird. Somit empfängt die Grafikverarbeitungs-Pipeline 2200 Eingabedaten 601, die von einer Stufe zur nächsten Stufe der Grafikverarbeitungs-Pipeline 2200 übertragen werden, um Ausgabedaten 2204 zu erzeugen. In einer Ausführungsform kann die Grafikverarbeitungs-Pipeline 2200 eine Grafikverarbeitungs-Pipeline darstellen, die durch die OpenGL® API definiert ist. Als Option kann die Grafikverarbeitungs-Pipeline 2200 im Kontext der Funktionalität und Architektur der vorstehenden Figuren und/oder nachfolgender Figuren implementiert werden.
  • Wie in 22 gezeigt, umfasst die Grafikverarbeitungs-Pipeline 2200 eine Pipeline-Architektur, die eine Anzahl von Stufen umfasst. Die Stufen umfassen, sind aber nicht beschränkt auf, eine Stufe der Datenanordnung 2206, eine Stufe der Scheitelpunktschattierung 2208, eine Stufe der Grundelementanordnung 2210, eine Stufe der Geometrieschattierung 2212, eine Viewport-SCC-Stufe 2214, eine Stufe der Rasterung 2216, eine Stufe der Fragmentschattierung 2218 und eine Stufe der Rasteroperation 2220. In einer Ausführungsform umfassen die Eingabedaten 2202 Befehle, die die Verarbeitungseinheiten dazu konfigurieren, die Stufen der Grafikverarbeitungs-Pipeline 2200 und von den Stufen zu verarbeitende geometrische Grundelemente (z. B. Punkte, Linien, Dreiecke, Quads, Dreiecksstreifen oder Fächer usw.) zu implementieren. Die Ausgabedaten 2204 können Pixeldaten (z. B. Farbdaten) umfassen, die in einen Bildpuffer oder eine andere Art von Oberflächendatenstruktur in einem Speicher kopiert werden.
  • Die Stufe der Datenanordnung 2206 empfängt die Eingabedaten 2202, die Scheitelpunktdaten für Oberflächen höherer Ordnung, Grundelemente oder dergleichen vorgeben. Die Stufe der Datenanordnung 2206 sammelt die Scheitelpunktdaten in einem temporären Speicher oder einer Warteschlange, beispielsweise durch Empfangen eines Befehls vom Host-Prozessor, der einen Zeiger auf einen Puffer im Speicher enthält, und Lesen der Scheitelpunktdaten aus dem Puffer. Die Scheitelpunktdaten werden dann zur Verarbeitung an die Stufe der Scheitelpunktschattierung 2208 übertragen.
  • Die Stufe der Scheitelpunktschattierung 2208 verarbeitet Scheitelpunktdaten durch einmaliges Durchführen eines Satzes von Operationen (z. B. eines Scheitelpunkt-Shaders oder eines Programms) für jeden der Scheitelpunkte. Scheitelpunkte können z. B. als 4-Koordinatenvektor angegeben werden (z. B. <x, y, z, w>), die einem oder mehreren Scheitelpunktattributen (z. B. Farbe, Texturkoordinaten, Oberflächennormale usw.) zugeordnet sind. Die Stufe der Scheitelpunktschattierung 2208 kann einzelne Scheitelpunktattribute wie Position, Farbe, Texturkoordinaten und dergleichen manipulieren. Mit anderen Worten, die Stufe der Scheitelpunktschattierung 2208 führt Operationen an den Scheitelpunktkoordinaten oder anderen Scheitelpunktattributen durch, die einem Scheitelpunkt zugeordnet sind.Solche Operationen umfassen gewöhnlich Beleuchtungsoperationen (z. B. Modifizieren von Farbattributen für einen Scheitelpunkt) und Transformationsoperationen (z. B. Modifizieren des Koordinatenraums für einen Scheitelpunkt). Scheitelpunkte können beispielsweise unter Verwendung von Koordinaten in einem Objektkoordinatenraum angegeben werden, die durch Multiplizieren der Koordinaten mit einer Matrix transformiert werden, die die Koordinaten aus dem Objektkoordinatenraum in einen Weltraum oder einen normierten Gerätekoordinaten(normalized-device-coordinate - NCD)-Raum übersetzt. Die Stufe der Scheitelpunktschattierung 2208 erzeugt transformierte Scheitelpunktdaten, die an die Stufe der Grundelementanordnung 2210 übertragen werden.
  • Die Stufe der Grundelementanordnung 2210 sammelt Scheitelpunkte, die von der Stufe der Scheitelpunktschattierung 2208 ausgegeben werden, und gruppiert die Scheitelpunkte in geometrische Grundelemente zur Verarbeitung durch die Stufe der Geometrieschattierung 2212. Zum Beispiel kann die Stufe der Grundelementanordnung 2210 dazu konfiguriert sein, jeweils drei aufeinanderfolgenden Scheitelpunkte als ein geometrisches Grundelement (z. B. ein Dreieck) zur Übertragung an die Stufe der Geometrieschattierung 2212 zu gruppieren. In einigen Ausführungsformen können spezifische Scheitelpunkte für aufeinanderfolgende geometrische Grundelemente wiederverwendet werden (z. B. können sich zwei aufeinanderfolgende Dreiecke in einem Dreiecksstreifen zwei Scheitelpunkte teilen). Die Stufe der Grundelementanordnung 2210 überträgt geometrische Grundelemente (z. B. eine Sammlung von zugeordneten Scheitelpunkten) an die Stufe der Geometrieschattierung 2212 .
  • Die Stufe der Geometrieschattierung 2212 verarbeitet geometrische Grundelemente durch Ausführen eines Satzes von Operationen (z. B. eines Geometrie-Shaders oder -Programms) an den geometrischen Grundelementen.Tessellationsoperationen können ein oder mehrere geometrische Grundelemente aus jedem geometrischen Grundelement erzeugen. Mit anderen Worten, die Stufe der Geometrieschattierung 2212 kann jedes geometrische Grundelement in ein feineres Netz von zwei oder mehr geometrischen Grundelementen zur Verarbeitung durch den Rest der Grafikverarbeitungs-Pipeline 2200 unterteilen. Die Stufe der Geometrieschattierung 2212 überträgt geometrische Grundelemente an die Stufe des Viewport-SCC 2214.
  • In einer Ausführungsform kann die Grafikverarbeitungs-Pipeline 2200 innerhalb eines Streaming-Multiprozessors arbeiten, und die Stufe der Scheitelpunktschattierung 2208, die Stufe der Grundelementanordnung 2210, die Stufe der Geometrieschattierung 2212, die Stufe der Fragmentschattierung 2218-Stufe und/oder diesen zugeordnete Hardware/Software können sequentiell Verarbeitungsoperationen durchführen. Sobald die sequentiellen Verarbeitungsoperationen abgeschlossen sind, kann in einer Ausführungsform die Stufe des Viewport-SCC 2214 die Daten verwenden. In einer Ausführungsform können Grundelementdaten, die von einer oder mehreren der Stufen in der Grafikverarbeitungs-Pipeline 2200 verarbeitet wurden, in einen Cache (z. B. L1-Cache, einen Scheitelpunkt-Cache usw.) geschrieben werden. In diesem Fall kann in einer Ausführungsform die Stufe des Viewport-SCC 2214 auf die Daten im Cache zugreifen. In einer Ausführungsform sind die Stufe des Viewport-SCC 2214 und die Stufe der Rasterung 2216 als Schaltungsanordnung mit fester Funktion implementiert.
  • Die Stufe der Viewport-SCC 2214 führt eine Viewport-Skalierung, eine Aussortierung und eine Beschneidung der geometrischen Grundelemente durch. Jede Oberfläche, auf die gerendert wird, ist einer abstrakten Kameraposition zugeordnet. Die Kameraposition stellt eine Position eines Betrachters dar, der die Szene betrachtet, und definiert einen Betrachtungsstumpf, der die Objekte der Szene umschließt. Der Betrachtungsstumpf kann eine Betrachtungsebene, eine hintere Ebene und vier Beschneidungsebenen umfassen. Jedes geometrische Grundelement außerhalb des Betrachtungsstumpfes kann aussortiert (z. B. verworfen) werden, da das geometrische Grundelement nicht zur endgültig gerenderten Szene beiträgt. Jedes geometrische Grundelement, das sich teilweise innerhalb des Betrachtungsstumpfs und teilweise außerhalb des Betrachtungsstumpfs befindet, kann abgeschnitten werden (z. B. in ein neues geometrisches Grundelement umgewandelt werden, das im Betrachtungsstumpf eingeschlossen ist). Darüber hinaus können geometrische Grundelemente jeweils basierend auf einer Tiefe des Betrachtungsstumpfs skaliert werden. Potentiell sichtbare geometrische Grundelemente werden dann an die Rasterungsstufe 2216 übertragen.
  • Die Rasterungsstufe 2216 wandelt die geometrischen 3D-Grundelemente in 2D-Fragmente um (die z. B. zur Anzeige usw. verwendet werden können). Die Rasterungsstufe 2216 kann dazu konfiguriert sein, die Scheitelpunkte der geometrischen Grundelemente zu verwenden, um einen Satz von Ebenengleichungen aufzustellen, aus denen verschiedene Attribute interpoliert werden können. Die Rasterungsstufe 2216 kann auch eine Abdeckungsmaske für eine Vielzahl von Pixeln berechnen, die anzeigt, ob eine oder mehrere Abtaststellen für das Pixel das geometrische Grundelement schneiden. In einer Ausführungsform kann auch ein z-Testen durchgeführt werden, um zu bestimmen, ob das geometrische Grundelement von anderen geometrischen Grundelementen verdeckt ist, die bereits gerastert wurden. Die Rasterungsstufe 2216 erzeugt Fragmentdaten (z. B. interpolierte Scheitelpunktattribute, die einer bestimmten Abtaststelle für jedes abgedeckte Pixel zugeordnet sind), die an die Stufe der Fragmentschattierung 2218 übertragen werden.
  • Die Stufe der Fragmentschattierung 2218 verarbeitet Fragmentdaten durch einmaliges Durchführen eines Satzes von Operationen (z. B. eines Fragment-Shaders oder eines Programms) für jedes der Fragmente. Die Stufe der Fragmentschattierung 2218 kann Pixeldaten (z. B. Farbwerte) für das Fragment erzeugen, beispielsweise durch Durchführen von Beleuchtungsoperationen oder Abtasten von Texturabbildungen unter Verwendung interpolierter Texturkoordinaten für das Fragment. Die Stufe der Fragmentschattierung 2218 erzeugt Pixeldaten, die an die Stufe der Rasteroperationen 2220 übertragen werden.
  • Die Stufe der Rasteroperationen 2220 kann verschiedene Operationen an den Pixeldaten durchführen, wie beispielsweise das Durchführen von Alphatests, Schablonentests und das Mischen der Pixeldaten mit anderen Pixeldaten, die anderen dem Pixel zugeordneten Fragmenten entsprechen. Wenn die Stufe der Rasteroperationen 2220 die Verarbeitung der Pixeldaten (z. B. der Ausgabedaten 2204) beendet hat, können die Pixeldaten in ein Wiedergabeziel geschrieben werden, wie beispielsweise einen Bildpuffer, einen Farbpuffer oder dergleichen.
  • Es versteht sich, dass eine oder mehrere zusätzliche Stufen in der Grafikverarbeitungs-Pipeline 2200 zusätzlich zu oder anstelle von einer oder mehreren der oben beschriebenen Stufen enthalten sein können. Verschiedene Implementierungen der abstrakten Grafikverarbeitungs-Pipeline können verschiedene Stufen implementieren. Darüber hinaus können in einigen Ausführungsformen eine oder mehrere der oben beschriebenen Stufen von der Grafikverarbeitungs-Pipeline ausgeschlossen werden (wie etwa die Stufe der Geometrieschattierung 2212). Andere Arten von Grafikverarbeitungs-Pipelines werden als im Umfang der vorliegenden Offenbarung liegend betrachtet. Darüber hinaus kann jede der Stufen der Grafikverarbeitungs-Pipeline 2200 durch eine oder mehrere dedizierte Hardwareeinheiten innerhalb eines Grafikprozessors wie etwa der Parallelverarbeitungseinheit 2008b implementiert werden. Andere Stufen der Grafikverarbeitungs-Pipeline 2200 können durch programmierbare Hardwareeinheiten implementiert werden, wie etwa den Streaming-Multiprozessor 1900 der Parallelverarbeitungseinheit 2008b.
  • Die Grafikverarbeitungs-Pipeline 2200 kann über eine Anwendung implementiert werden, die von einem Host-Prozessor wie etwa einer CPU ausgeführt wird. In einer Ausführungsform kann ein Gerätetreiber eine Anwendungsprogrammierschnittstelle (application programming interface - API) implementieren, die verschiedene Funktionen definiert, die von einer Anwendung verwendet werden können, um grafische Daten zur Anzeige zu erzeugen. Der Gerätetreiber ist ein Softwareprogramm, das eine Vielzahl von Anweisungen beinhaltet, die den Betrieb der Parallelverarbeitungseinheit 2008b steuern. Die API stellt eine Abstraktion für einen Programmierer bereit, die es einem Programmierer ermöglicht, spezialisierte Grafikhardware wie die Parallelverarbeitungseinheit 2008b zu verwenden, um die Grafikdaten zu erzeugen, ohne dass der Programmierer den spezifischen Befehlssatz für die Parallelverarbeitungseinheit 2008b verwenden muss. Die Anwendung kann einen API-Aufruf beinhalten, der an den Gerätetreiber für die Parallelverarbeitungseinheit 2008b geleitet wird. Der Gerätetreiber interpretiert den API-Aufruf und führt verschiedene Operationen durch, um auf den API-Aufruf zu antworten. In einigen Fällen kann der Gerätetreiber Operationen ausführen, indem er Anweisungen auf der CPU ausführt. In anderen Fällen kann der Gerätetreiber Operationen zumindest teilweise ausführen, indem er Operationen auf der Parallelverarbeitungseinheit 2008b unter Verwendung einer Eingabe-/Ausgabeschnittstelle zwischen der CPU und der Parallelverarbeitungseinheit 2008b startet. In einer Ausführungsform ist der Gerätetreiber dazu konfiguriert, die Grafikverarbeitungs-Pipeline 2200 unter Verwendung der Hardware der Parallelverarbeitungseinheit 2008b zu implementieren.
  • Innerhalb der Parallelverarbeitungseinheit 2008b können verschiedene Programme ausgeführt werden, um die verschiedenen Stufen der Grafikverarbeitungs-Pipeline 2200 zu implementieren. Zum Beispiel kann der Gerätetreiber einen Kernel auf der Parallelverarbeitungseinheit 2008b starten, um die Stufe der Scheitelpunktschattierung 2208 auf einem Streaming-Multiprozessor 1900 (oder mehreren Streaming-Multiprozessormodulen 1900) durchzuführen. Der Gerätetreiber (oder der anfängliche Kernel, der von der Parallelverarbeitungseinheit 2008b ausgeführt wird) kann auch andere Kernel auf der Parallelverarbeitungseinheit 2008b starten, um andere Stufen der Grafikverarbeitungs-Pipeline 2200 auszuführen, wie etwa die Stufe der Geometrieschattierung 2212 und die Stufe der Fragmentschattierung 2218. Außerdem können einige der Stufen der Grafikverarbeitungs-Pipeline 2200 auf Festeinheitshardware wie etwa einem Rasterizer oder einem Datenassembler implementiert sein, der in der Parallelverarbeitungseinheit 2008b implementiert ist. Es versteht sich, dass Ergebnisse von einem Kernel von einer oder mehreren dazwischenliegenden Hardwareeinheiten mit fester Funktion verarbeitet werden können, bevor sie von einem nachfolgenden Kernel auf einem Streaming-Multiprozessor 1900 verarbeitet werden.
  • Bezugszeichenliste
  • 100
    System
    102
    Person
    104
    Cloud-Computersystem
    106
    IoT-Vorrichtung
    108
    lokales Netz
    110
    Mikrofon
    112
    Weitverkehrsnetz
    114
    neuronales Netz
    116
    Softmax-Schicht
    118
    digitale Vorrichtung
    202
    Deep-Learning-System
    204
    Rechensystem
    206
    Fahrzeug
    208
    Roboter
    302
    neuronales Transformernetz
    304
    Eingabesequenz
    306
    Codierer
    308
    Codierer-Stack
    310
    Codierer
    312
    Codierer
    314
    Decodierer-Stack
    316
    Decodierer
    318
    Decodierer
    320
    Decodierer
    322
    Ausgabesequenz
    402
    Codierer
    404
    Selbstaufmerksamkeitsschicht
    406
    neuronales Feed-Forward-Netz
    502
    Decodierer
    504
    Codierer-Decodierer-Aufmerksamkeitsschicht
    506
    Selbstaufmerksamkeitsschicht
    508
    neuronales Feed-Forward-Netz
    602
    Aufmerksamkeitsschicht
    604
    Matrixmultiplikation
    606
    Abfragevektoren
    608
    Schlüsselvektoren
    610
    Wertvektoren
    612
    Beurteilungsvektor
    614
    Punktprodukt
    616
    Softmax
    618
    Multiplikation
    620
    Vektorsummierung
    700
    Softmax-Algorithmus
    800
    Softmax-Rechenlogik
    802
    Vektor-Ganzzahl-Maximum-Einheit
    804
    Zweierpotenzberechnungseinheit
    806
    Reduktionseinheit
    808
    Max-Selektor
    810
    Max-Komparator
    812
    Speicherpuffer
    814
    Potenzsummenpuffer
    816
    Potenzsummenselektor
    818
    Rechtsschieber
    820
    Addierer
    822
    Einheit zur linearen stückweisen Berechnung
    824
    Festkomma-Bruchteiler
    826
    Linksschieber
    828
    Einheit für unnormiertes Softmax
    830
    Normierungseinheit
    832
    Nachschlagetabelle
    834
    Max-Komparator
    836
    Vektorelement-Addierer
    900
    verteiltes Computersystem
    902
    Router-Schnittstelle
    904
    Verarbeitungselement
    906
    Controller
    908
    Normierungseinheit
    910
    globaler globaler Speicherpuffer
    912
    Speicher
    1002
    globaler Puffer
    1004
    Controller
    1006
    DRAM
    1008
    Network-on-a-Chip-Router
    1010
    FPGA
    1012
    Multi-Chip-Paket
    1014
    Verarbeitungselemente
    1016
    Network-on-a-Package-Router
    1018
    Chips
    1020
    Host
    1100
    neuronaler Netzwerkprozessor
    1200
    Verarbeitungselement
    1202
    Vektor-Multiplikations-Akkumulations-Einheiten
    1204
    Gewichtungspuffer
    1206
    Aktivierungspuffer
    1208
    Router
    1210
    Akkumulationsspeicherpuffer
    1212
    Postprozessor
    1214
    Controller
    1300
    Verarbeitungselement
    1302
    Eingabegewichtungen
    1304
    Eingabeaktivierungen
    1306
    Teilsummen
    1308
    verarbeitungselementübergreifende Reduktionen
    1310
    Gewichtungsspeicher-Puffermanager
    1312
    Aktivierungsspeicher-Puffermanager
    1314
    Adressgenerator
    1316
    Akkumulationsspeicher-Puffermanager
    1318
    Adressgenerator
    1320
    Gewichtungskollektor
    1322
    Akkumulationskollektor
    1324
    Vektor-Multiplikations-Akkumulations-Einheit
    1326
    Ausgabeaktivierungen
    1328
    Eingabekollektor
    1502
    globaler Speicherpuffer
    1504
    Controller
    1506
    Aktivierungsadressengenerator
    1508
    Datenpfad
    1510
    Zieladressengenerator
    1512
    Registerdatei
    1514
    Ausgabeaktivierungen
    1516
    Teilsummen
    1518
    Eingabeaktivierungen
    1520
    arbitrierte Speicherbänke
    1522
    globales Verarbeitungselement
    1602
    I/O-Einheit
    1604
    Front-End-Einheit
    1606
    Hub
    1608
    Scheduler-Einheit
    1610
    Arbeitsverteilungseinheit
    1612
    Speicher
    1614
    Kreuzschiene
    1616
    NVLink
    1618
    Verschaltung
    1700
    allgemeines Verarbeitungscluster
    1702
    Pipeline-Manager
    1704
    Vor-Rasteroperationseinheit
    1706
    Datenverarbeitungscluster
    1708
    Raster-Engine
    1710
    M-Pipe-Controller
    1712
    Grundelement-Engine
    1714
    Arbeitsverteilerkreuzschiene
    1716
    Speicherverwaltungseinheit
    1800
    Speicherpartitionseinheit
    1802
    Rasteroperationseinheit
    1804
    Cache der zweiten Ebene
    1806
    Speicherschnittstelle
    1900
    Streaming-Multiprozessor
    1902
    Anweisungscache
    1904
    Scheduler-Einheit
    1906
    Dispatch
    1908
    Registerdatei
    1910
    Kern
    1912
    Spezialfunktionseinheit
    1914
    Lade-/Speichereinheit
    1916
    Verschaltungsnetz
    1918
    gemeinsam genutzter Speicher/L1-Cache
    2000
    Verarbeitungssystem
    2002
    Parallelverarbeitungsmodul
    2004
    Switch
    2006
    Zentraleinheit
    2008a
    Parallelverarbeitungseinheit
    2008b
    Parallelverarbeitungseinheit
    2008c
    Parallelverarbeitungseinheit
    2008d
    Parallelverarbeitungseinheit
    2100
    beispielhaftes Verarbeitungssystem
    2102
    Hauptspeicher
    2104
    Netzschnittstelle
    2106
    Anzeigevorrichtungen
    2108
    Eingabevorrichtungen
    2110
    Kommunikationsbus
    2200
    Grafikverarbeitungs-Pipeline
    2202
    Eingabedaten
    2204
    Ausgabedaten
    2206
    Datenanordnung
    2208
    Scheitelpunktschattierung
    2210
    Grundelementanordnung
    2212
    Geometrieschattierung
    2214
    Viewport-SCC
    2216
    Rasterung
    2218
    Fragmentschattierung
    2220
    Rasteroperationen
  • Verschiedene hierin beschriebene funktionale Operationen können in einer Logik implementiert werden, die sich auf die Verwendung eines Nomens oder einer Nominalphrase bezieht, die die Operation oder Funktion widerspiegelt. Beispielsweise kann eine Zuordnungsoperation von einem „Zuordner“ oder „Korrelator“ ausgeführt werden. Ebenso kann ein Umschalten durch einen „Schalter“, eine Auswahl durch einen „Wähler“ usw. ausgeführt werden.
  • Innerhalb dieser Offenbarung können unterschiedliche Einheiten (die verschiedentlich als „Einheiten“, „Schaltungen“, andere Komponenten usw. bezeichnet werden können), als „konfiguriert“ beschrieben oder beansprucht werden, um eine oder mehrere Aufgaben oder Operationen auszuführen. Diese Formulierung - [Einheit] konfiguriert zum [Durchführen einer oder mehrerer Aufgaben] - wird hier verwendet, um sich auf eine Struktur (d. h. etwas Physisches, wie etwa eine elektronische Schaltung) zu beziehen. Genauer gesagt wird diese Formulierung verwendet, um anzuzeigen, dass diese Struktur eingerichtet ist, um die eine oder die mehreren Aufgaben während des Betriebs auszuführen. Eine Struktur kann als „konfiguriert“ zum Durchführen einer Aufgabe bezeichnet werden, selbst wenn die Struktur gerade nicht betrieben wird. Eine „Kreditvergabeschaltung, die dazu konfiguriert ist, Kredite an eine Vielzahl von Prozessorkernen zu vergeben“ soll beispielsweise eine integrierte Schaltung abdecken, die über eine Schaltungsanordnung verfügt, die diese Funktion während des Betriebs ausführt, selbst wenn die fragliche integrierte Schaltung derzeit nicht verwendet wird (z. B. keine Stromversorgung damit verbunden ist). Somit bezieht sich eine Einheit, die als „konfiguriert zum“ Durchführen einer Aufgabe beschrieben oder erwähnt wird, auf etwas Physisches, wie eine Vorrichtung, eine Schaltung, einen Speicher, der Programmanweisungen speichert, die ausführbar sind, um die Aufgabe zu implementieren, usw. Dieser Ausdruck wird hier nicht verwendet, um sich auf etwas Immaterielles zu beziehen.
  • Der Begriff „konfiguriert zum“ soll nicht „konfigurierbar zum“ bedeuten. Ein unprogrammiertes FPGA würde beispielsweise nicht als „konfiguriert zum“ Durchführen einer bestimmte Funktion angesehen, obwohl es „konfigurierbar zum“ sein Durchführen dieser Funktion nach dem Programmieren sein kann.
  • Die Angabe in den beigefügten Ansprüchen, dass eine Struktur „konfiguriert ist zum“ Durchführen einer oder mehrerer Aufgaben, soll sich für dieses Anspruchselement ausdrücklich nicht auf 35 USC § 112(f) berufen. Dementsprechend sind Ansprüche in dieser Anmeldung, die nicht anderweitig das Konstrukt „Mittel zum“ [Durchführen einer Funktion] beinhalten, nicht gemäß 35 USC § 112(f) auszulegen.
  • Im hier verwendeten Sinne wird der Begriff „basierend auf“ verwendet, um einen oder mehrere Faktoren zu beschreiben, die eine Bestimmung beeinflussen. Dieser Begriff schließt nicht aus, dass zusätzliche Faktoren die Bestimmung beeinflussen können. Das heißt, eine Bestimmung kann ausschließlich auf angegebenen Faktoren basieren oder auf den angegebenen Faktoren sowie anderen, nicht angegebenen Faktoren basieren. Man betrachte den Ausdruck „bestimme A basierend auf B“. Dieser Ausdruck gibt an, dass B ein Faktor ist, der zur Bestimmung von A verwendet wird oder der die Bestimmung von A beeinflusst. Dieser Ausdruck schließt nicht aus, dass die Bestimmung von A auch auf einem anderen Faktor, wie z. B. C, beruhen kann. Dieser Ausdruck soll auch eine Ausführungsform abdecken, bei der A ausschließlich basierend auf B bestimmt wird. Im hier verwendeten Sinne ist der Ausdruck „basierend auf synonym mit dem Ausdruck „zumindest teilweise basierend auf.
  • Im hier verwendeten Sinne beschreibt der Ausdruck „als Reaktion auf einen oder mehrere Faktoren, die eine Wirkung auslösen. Dieser Ausdruck schließt nicht aus, dass weitere Faktoren die Wirkung beeinflussen oder anderweitig auslösen können. Das heißt, eine Wirkung kann allein als Reaktion auf diese Faktoren oder als Reaktion auf die angegebenen Faktoren sowie auf andere, nicht angegebene Faktoren erfolgen. Man betrachte den Ausdruck „A als Reaktion auf B durchführen“. Dieser Ausdruck gibt an, dass B ein Faktor ist, der die Ausführung von A auslöst. Dieser Ausdruck schließt nicht aus, dass das Ausführen von A auch als Reaktion auf einen anderen Faktor wie C erfolgen kann. Dieser Satz soll auch eine Ausführungsform abdecken, in der A ausschließlich als Reaktion auf B durchgeführt wird.
  • Im hier verwendeten Sinne werden die Begriffe „erste“, „zweite“ usw. als Bezeichnungen für Nomen verwendet, denen sie vorangestellt sind, und implizieren keine Art von Reihenfolge (z. B. räumlich, zeitlich, logisch usw.), sofern nicht anders angegeben . Beispielsweise können in einer Registerdatei mit acht Registern die Ausdrücke „erstes Register“ und „zweites Register“ verwendet werden, um sich auf zwei beliebige der acht Register zu beziehen und nicht beispielsweise speziell auf die logischen Register 0 und 1.
  • Bei Verwendung in den Ansprüchen wird der Begriff „oder“ als einschließendes oder und nicht als ausschließendes oder verwendet. Beispielsweise bedeutet der Ausdruck „mindestens eines von x, y oder z“ eines von x, y und z sowie einer beliebige Kombination davon.
  • Im hier verwendeten Sinne ist der Gebrach von „und/oder“ in Bezug auf zwei oder mehr Elemente als nur ein Element oder eine Kombination von Elementen auszulegen. Zum Beispiel: „Element A, Element B und/oder Element C“ kann nur Element A, nur Element B, nur Element C, Element A und Element B, Element A und Element C, Element B und Element C oder Elemente A, B und C enthalten. Auch kann „mindestens eins von Element A oder Element B“ mindestens eins von Element A, mindestens eins von Element B oder mindestens eins von Element A und mindestens eines von Element B beinhalten. Ferner kann „mindestens eins von Element A und Element B“ mindestens eins von Element A, mindestens eins von Element B oder mindestens eins von Element A und mindestens eins von Element B beinhalten.
  • Der Gegenstand der vorliegenden Offenbarung wird hier genau beschrieben, um gesetzliche Anforderungen zu erfüllen. Die Beschreibung selbst soll jedoch den Umfang dieser Offenbarung nicht einschränken. Vielmehr kann der beanspruchte Gegenstand auch auf andere Weise ausgeführt sein, um andere Schritte oder Kombinationen von Schritten ähnlich den in diesem Dokument beschriebenen in Verbindung mit anderen gegenwärtigen oder zukünftigen Techniken zu umfassen.Obwohl die Begriffe „Schritt“ und/oder „Block“ hierin verwendet werden können, um verschiedene Elemente der verwendeten Verfahren zu bezeichnen, sind die Begriffe nicht so auszulegen, dass sie eine bestimmte Reihenfolge unter oder zwischen verschiedenen hierin offenbarten Schritten implizieren, es sei denn, die Reihenfolge einzelner Schritte ist explizit beschrieben.
  • Nachdem somit veranschaulichende Ausführungsformen im Detail beschrieben wurden, wird es auf der Hand liegen, dass Modifikationen und Abwandlungen möglich sind, ohne vom Umfang der beanspruchten Offenbarung abzuweichen. Der Umfang des offenbarten Gegenstands ist nicht auf die dargestellten Ausführungsformen beschränkt, sondern wird vielmehr in den folgenden Ansprüchen dargelegt.

Claims (25)

  1. System, umfassend: einen oder mehrere Prozessoren; und Logik, die bei Anwendung auf den einen oder die mehreren Prozessoren einen nicht normierten Softmax-Vektor aus einem Eingabevektor berechnet durch: Erhöhen von Elementen des Eingabevektors in Zweierpotenzen; Berechnen eines Ganzzahl-Vektormaximums des Eingabevektors; und Logik, die bei Anwendung auf den einen oder die mehreren Prozessoren den nicht normierten Softmax-Vektor in einen normierten Softmax-Vektor umwandelt.
  2. System nach Anspruch 1, ferner umfassend: wobei der eine oder die mehreren Prozessoren eine Vielzahl von Verarbeitungselementen umfassen; und Logik zum Konfigurieren der Vielzahl von Verarbeitungselementen zum Berechnen des nicht normierten Softmax-Vektors in einer verteilten Berechnung.
  3. System nach Anspruch 2, ferner umfassend Logik zum: Konfigurieren zumindest einiger der Vielzahl von Verarbeitungselementen, um lokale Ganzzahl-Maxima ihrer jeweiligen Eingabevektoren zu berechnen; und Konfigurieren zumindest einiger der Vielzahl von Verarbeitungselementen, um eine verarbeitungselementübergreifende Reduktion der lokalen Ganzzahl-Maxima auf ein globales Ganzzahl-Maximum durchzuführen.
  4. System nach Anspruch 2 oder 3, ferner umfassend Logik zum: Konfigurieren des einen oder der mehreren Prozessoren, um eine Summe der Zweierpotenzen zu berechnen.
  5. System nach Anspruch 4, ferner umfassend Logik zum: Konfigurieren zumindest einiger der Vielzahl von Verarbeitungselementen, um lokale Summen der Zweierpotenzen für ihre jeweiligen Eingabevektoren zu berechnen; und Konfigurieren zumindest einiger der Vielzahl von Verarbeitungselementen, um eine verarbeitungselementübergreifende Reduktion der lokalen Summen der Zweierpotenzen auf eine globale Summe der Zweierpotenzen durchzuführen.
  6. System nach einem der Ansprüche 2 bis 5, ferner umfassend: eine zentrale Normierungseinheit, um den nicht normierten Softmax-Vektor in den normierten Softmax-Vektor umzuwandeln.
  7. System nach einem der vorhergehenden Ansprüche, wobei die Logik zum Berechnen des nicht normierten Softmax-Vektors den einen oder die mehreren Prozessoren ferner konfiguriert zum: Erhöhen der Elemente des Eingabevektors in Zweierpotenzen und Berechnen des Maximums des Ganzzahlvektors in einer einzigen Ausführungsschleife.
  8. System nach Anspruch 7, wobei die Logik zum Berechnen eines nicht normierten Softmax-Vektors ferner den einen oder die mehreren Prozessoren konfiguriert zum: Berechnen einer Summe der Zweierpotenzen in der einzelnen Ausführungsschleife.
  9. Künstliches neuronales Netz, umfassend: eine oder mehrere Feed-Forward-Schichten; und eine oder mehrere Softmax-Schichten, die mit der einen oder den mehreren Feed-Forward-Schichten gekoppelt sind; mindestens eine der Softmax-Schichten, die konfiguriert ist zum Berechnen eines nicht normierten Softmax-Vektors aus einem Eingabevektor durch: Erhöhen von Elementen des Eingabevektors in Zweierpotenzen; und Berechnen eines Ganzzahl-Vektormaximums des Eingabevektors.
  10. Künstliches neuronales Netz nach Anspruch 9, wobei die mindestens eine Softmax-Schicht ferner konfiguriert ist zum: Transformieren des nicht normierten Softmax-Vektors in einen normierten Softmax-Vektor.
  11. Künstliches neuronales Netz nach Anspruch 10, wobei die mindestens eine Softmax-Schicht ferner konfiguriert ist zum: Transformieren des nicht normierten Softmax-Vektors in einen normierten Softmax-Vektor unter Verwendung von Schiebe- und Kehrwertoperationen, ohne Multiplikationsoperationen durchzuführen.
  12. Künstliches neuronales Netz nach einem der Ansprüche 9 bis 11, wobei die mindestens eine Softmax-Schicht ferner konfiguriert ist zum: Verwenden einer Vielzahl von Verarbeitungselementen zum Berechnen des nicht normierten Softmax-Vektors in einer verteilten Berechnung.
  13. Künstliches neuronales Netz nach Anspruch 12, wobei die mindestens eine Softmax-Schicht ferner konfiguriert ist zum: Verwenden zumindest einiger der Vielzahl von Verarbeitungselementen, um lokale Ganzzahl-Maxima ihrer jeweiligen Eingabevektoren zu berechnen; und Verwenden zumindest einiger der Vielzahl von Verarbeitungselementen, um eine verarbeitungselementübergreifende Reduktion der lokalen Ganzzahl-Maxima auf ein globales Ganzzahl-Maximum durchzuführen.
  14. Künstliches neuronales Netz nach Anspruch 12 oder 13, wobei die mindestens eine Softmax-Schicht ferner konfiguriert ist zum Berechnen einer Summe der Zweierpotenzen.
  15. Künstliches neuronales Netz nach Anspruch 14, wobei die mindestens eine Softmax-Schicht ferner konfiguriert ist zum: Verwenden zumindest einiger der Vielzahl von Verarbeitungselementen, um lokale Summen der Zweierpotenzen für ihre jeweiligen Eingabevektoren zu berechnen; und Verwenden zumindest einiger der Vielzahl von Verarbeitungselementen, um eine verarbeitungselementübergreifende Reduktion der lokalen Summen der Zweierpotenzen auf eine globale Summe der Zweierpotenzen durchzuführen.
  16. Künstliches neuronales Netz nach einem der Ansprüche 12 bis 15, wobei die mindestens eine Softmax-Schicht ferner konfiguriert ist zum: Transformieren des nicht normierten Softmax-Vektors in einen normierten Softmax-Vektor.
  17. Künstliches neuronales Netz nach einem der Ansprüche 9 bis 16, wobei die mindestens eine Softmax-Schicht ferner konfiguriert ist zum: Erhöhen der Elemente des Eingabevektors in Zweierpotenzen und Berechnen des Maximums des Ganzzahlvektors in einer einzigen Ausführungsschleife.
  18. Künstliches neuronales Netz nach Anspruch 17, wobei die mindestens eine Softmax-Schicht ferner konfiguriert ist zum: Berechnen einer Summe der Zweierpotenzen in der einzelnen Ausführungsschleife.
  19. Künstliches neuronales Transformatornetz, umfassend: eine Selbstaufmerksamkeitsschicht; und eine Codierer-Decodierer-Aufmerksamkeitsschicht; wobei die Selbstaufmerksamkeitsschicht und die Codierer-Decodierer-Aufmerksamkeitsschicht eine Softmax-Schicht umfassen, die zum Generieren eines nicht normierten Softmax-Vektors aus einem Eingabevektor konfiguriert ist durch: Erhöhen von Elementen des Eingabevektors in Zweierpotenzen; und Berechnen eines Ganzzahl-Vektormaximums des Eingabevektors.
  20. Künstliches neuronales Transformatornetz nach Anspruch 19, wobei jede Softmax-Schicht ferner konfiguriert ist zum: Erzeugen des nicht normierten Softmax-Vektors durch Erhöhen der Elemente des Eingabevektors in Zweierpotenzen, Berechnen des Ganzzahl-Vektormaximums und Berechnen einer Summe der Zweierpotenzen in einer einzigen Ausführungsschleife; und Transformieren des nicht normierten Softmax-Vektors in einen normierten Softmax-Vektor unter Verwendung von Schiebe- und Kehrwertoperationen, ohne Multiplikationsoperationen durchzuführen.
  21. Nichttransitorisches computerlesbares Speichermedium, wobei das computerlesbare Speichermedium Anweisungen beinhaltet, die bei Ausführung durch einen Computer bewirken, dass der Computer neuronale Netzinferenzen durchführt durch: Formulieren eines Vektors 2x-wertigen Elementen in einer Softmax-Berechnung, wobei jedes x ein Element eines Eingabevektors der Softmax-Berechnung ist; und Berechnen eines Ganzzahl-Maximum-Werts von x in dem Eingabevektor.
  22. Nichttransitorisches computerlesbares Speichermedium nach Anspruch 21, wobei das computerlesbare Speichermedium Anweisungen beinhaltet, die bei Ausführung durch einen Computer den Computer veranlassen zum: Generieren eines unnormierten Softmax-Vektors aus dem Vektor von 2x-Elementen und dem Ganzzahl-Maximum-Wert.
  23. Nichttransitorisches computerlesbares Speichermedium nach Anspruch 22, wobei das computerlesbare Speichermedium Anweisungen beinhaltet, die bei Ausführung durch einen Computer den Computer veranlassen zum: Normieren des nicht normierten Softmax-Vektors.
  24. Nichttransitorisches computerlesbares Speichermedium nach einem der Ansprüche 21 bis 23, wobei das computerlesbare Speichermedium Anweisungen beinhaltet, die bei Ausführung durch einen Computer den Computer veranlassen zum: Formulieren des Vektors von 2x-Elementen in einer Softmax-Berechnung, Berechnen des Ganzzahl-Maximum-Werts von x im Eingabevektor und Berechnen einer Summe des Vektors von 2x-Elementen in einer einzigen Ausführungsschleife.
  25. Verfahren, das in einer künstlichen neuronalen Netzschicht ausgeführt wird, wobei das Verfahren umfasst: Ausführen erster Maschinenanweisungen zum Formulieren eines Vektors 2x-wertigen Elementen in einer Softmax-Berechnung, wobei jedes x ein Element eines Eingabevektors der Softmax-Berechnung ist; und Ausführen zweiter Anweisungen zum Berechnen eines Ganzzahl-Maximum-Werts von x in dem Eingabevektor.
DE102021120605.7A 2020-08-28 2021-08-09 Effiziente softmax-berechnung Pending DE102021120605A1 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063071968P 2020-08-28 2020-08-28
US63/071,968 2020-08-28
US17/112,795 2020-12-04
US17/112,795 US20220067513A1 (en) 2020-08-28 2020-12-04 Efficient softmax computation

Publications (1)

Publication Number Publication Date
DE102021120605A1 true DE102021120605A1 (de) 2022-03-03

Family

ID=80221877

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102021120605.7A Pending DE102021120605A1 (de) 2020-08-28 2021-08-09 Effiziente softmax-berechnung

Country Status (3)

Country Link
US (1) US20220067513A1 (de)
CN (1) CN114118354A (de)
DE (1) DE102021120605A1 (de)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11995448B1 (en) 2018-02-08 2024-05-28 Marvell Asia Pte Ltd Method and apparatus for performing machine learning operations in parallel on machine learning hardware
US10997510B1 (en) 2018-05-22 2021-05-04 Marvell Asia Pte, Ltd. Architecture to support tanh and sigmoid operations for inference acceleration in machine learning
US11016801B1 (en) 2018-05-22 2021-05-25 Marvell Asia Pte, Ltd. Architecture to support color scheme-based synchronization for machine learning
US11494645B2 (en) * 2018-12-06 2022-11-08 Egis Technology Inc. Convolutional neural network processor and data processing method thereof
US20220244911A1 (en) * 2021-01-29 2022-08-04 Microsoft Technology Licensing, Llc Digital circuitry for normalization functions
US11657260B2 (en) * 2021-10-26 2023-05-23 Edgecortix Pte. Ltd. Neural network hardware accelerator data parallelism
US11514370B1 (en) * 2021-12-03 2022-11-29 FriendliAI Inc. Selective batching for inference system for transformer-based generation tasks
US11442775B1 (en) 2021-12-03 2022-09-13 FriendliAI Inc. Dynamic batching for inference system for transformer-based generation tasks
CN114626489A (zh) * 2022-05-17 2022-06-14 深圳比特微电子科技有限公司 一种softmax函数定点化实现方法和装置
TWI831588B (zh) * 2023-01-30 2024-02-01 創鑫智慧股份有限公司 神經網路演算裝置以及在神經網路演算中的數值轉換方法
CN117009729B (zh) * 2023-10-08 2024-01-26 之江实验室 基于softmax的数据处理方法及装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11861452B1 (en) * 2019-06-17 2024-01-02 Cadence Design Systems, Inc. Quantized softmax layer for neural networks
WO2021262053A1 (en) * 2020-06-25 2021-12-30 Telefonaktiebolaget Lm Ericsson (Publ) Method and system for image compressing and coding with deep learning

Also Published As

Publication number Publication date
US20220067513A1 (en) 2022-03-03
CN114118354A (zh) 2022-03-01

Similar Documents

Publication Publication Date Title
DE102021120605A1 (de) Effiziente softmax-berechnung
DE102021118444A1 (de) Einrichtung und Verfahren zum Komprimieren von Strahlverfolgungsbeschleunigungsstrukturaufbaudaten
DE112020004702T5 (de) Bildgenerierung unter verwendung eines oder mehrerer neuronaler netze
DE102020124932A1 (de) Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel
DE102018126670A1 (de) Fortschreitende Modifizierung von generativen adversativen neuronalen Netzen
DE102018108324A1 (de) System und Verfahren zur Schätzung eines optischen Flusses
DE102018117813A1 (de) Zeitlich stabile Datenrekonstruktion mit einem externen rekurrenten neuronalen Netzwerk
DE102019102279A1 (de) Erzeugung von synthetischen Bildern zum Trainieren eines Neuronal-Netzwerkmodells
DE102019133028A1 (de) Für neuronale netzwerke geeignetes effizientes matrixformat
DE102019103310A1 (de) Schätzer for einen optimalen betriebspunkt für hardware, die unter einer beschränkung der gemeinsam genutzten leistung/wärme arbeitet
DE102020132557A1 (de) Vorrichtung und verfahren für asynchrones raytracing
DE102019102009A1 (de) Reduzierung des rauschens während des renderings durch parallele path-space-filterung unter verwendung von hashing
DE102020132377A1 (de) Vorrichtung und Verfahren zur Drosselung einer Raytracing-Pipeline
DE102021119722A1 (de) Feingranulare pro-vektor-skalierung für neuronale netzwerkquantisierung
DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
DE102020131901A1 (de) Vorrichtung und verfahren zum durchführen nicht lokaler mittelwertfilterung unter verwendung eines bewegungsschätzschaltkreises eines grafikprozessors
DE102020132544A1 (de) Vorrichtung und verfahren für doppelpräzisionsstrahlquerung in einer raytracing-pipeline
DE112020003165T5 (de) Videointerpolation unter Verwendung eines oder mehrerer neuronaler Netze
DE102020118860A1 (de) Techniken zum vorladen von texturen beim rendering von graphik
DE102019134020A1 (de) Dekompprimierungstechniken zur verarbeitung komprimierter daten, die für künstliche neuronale netzwerke geeignet sind
DE102020121601A1 (de) Persistenter Notizblockspeicher zum Datenaustausch zwischen Programmen
DE102019106996A1 (de) Darstellen eines neuronalen netzwerks unter verwendung von pfaden innerhalb des netzwerks zum verbessern der leistung des neuronalen netzwerks
DE102021121109A1 (de) Wiederherstellung dreidimensionaler modelle aus zweidimensionalen bildern
DE102020131852A1 (de) Vorrichtung und verfahren zum ausführen eines stabilen sortiervorgangs mit kurzer latenz
DE102022103358A1 (de) Training für maschinelles lernen im logarithmischen zahlensystem

Legal Events

Date Code Title Description
R012 Request for examination validly filed