-
Bereich der Erfindung
-
Die vorliegende Erfindung betrifft neuronale Netze und insbesondere ein Beschneiden von neuronalen Netzen.
-
Hintergrund
-
Faltende neuronale Netze (CNN („Convolutional Neural Networks“)) werden extensiv bei computergestützten Bilderkennungsanwendungen eingesetzt, was eine Objekt-Klassifizierung und Lokalisierung, eine Fußgänger- und Fahrzeug-Erkennung und eine Video-Klassifizierung einschließt. Viele Probleme, wie diese, sind auf spezialisierte Bereiche gerichtet, für welche es nur einen geringen Umfang an sorgfältig kuratierten Trainingsdaten gibt. In diesen Fällen kann die Genauigkeit verbessert werden, indem ein existierendes tiefes Netz, welches vorher auf einem viel größeren gekennzeichneten Bilderkennungsdatensatz trainiert wurde, fein abgestimmt wird. Während die Übertragung von Gelerntem in dieser Form den Stand der Technik bezüglich Genauigkeit unterstützt, ist die Folgerung bzw. die Deduktion oder die logische Schussfolgerung teuer aufgrund der Zeit, der Energie und des Speicherbedarfs, welche von der schwergewichtigen Architektur des fein abgestimmten Netzes gefordert werden. Daher gibt es einen Bedarf, diese Probleme und/oder andere Probleme, welche dem Stand der Technik zugeordnet sind, zu lösen.
-
Zusammenfassung
-
Ein Verfahren, ein von einem Computer lesbares Medium und ein System werden offenbart, um ein neuronales Netz zu beschneiden. Das Verfahren weist die Schritte auf Gradienten erster Ordnung einer Kostenfunktion relativ zu Schichtparametern für ein trainiertes neuronales Netz aufzunehmen und ein Beschneidungskriterium für jeden Schichtparameter abhängig von dem Gradienten erster Ordnung, welcher mit dem Schichtparameter korrespondiert, zu berechnen, wobei das Beschneidungskriterium eine Wichtigkeit von jedem Neuron anzeigt, welches in dem trainierten neuronalen Netz vorhanden und dem Schichtparameter zugeordnet ist. Das Verfahren weist die zusätzlichen Schritte auf, mindestens ein Neuron, welches die geringste Wichtigkeit aufweist, zu identifizieren, und das mindestens eine Neuron von dem trainierten neuronalen Netz zu entfernen, um ein beschnittenes neuronales Netz zu erzeugen.
-
Figurenliste
-
- 1A stellt einen Flussplan eines Verfahrens zum Beschneiden eines neuronalen Netzes gemäß einer Ausführungsform dar;
- 1B und 1C stellen Graphen einer Änderung einer Verlustfunktion als Ergebnis von einem Entfernen eines bestimmten Neurons gemäß einer Ausführungsform dar;
- 1D stellt eine konzeptionelle Darstellung eines Entfernens von Neuronen von einem neuronalen Netz gemäß einer Ausführungsform dar;
- 2A stellt einen Graph der Kostenfunktion C und der Parameter h für den Trainingsdatensatz D gemäß einer Ausführungsform dar;
- 2B stellt ein Blockdiagramm eines Beschneidungssystems eines neuronalen Netzes gemäß einer Ausführungsform dar;
- 2C stellt gemäß einer Ausführungsform einen Flussplan eines anderen Verfahrens zum Beschneiden eines neuronalen Netzes dar, welches die Schritte aufweist, welche in 1A dargestellt sind;
- 3 stellt eine Parallelverarbeitungseinheit gemäß einer Ausführungsform dar;
- 4A stellt ein allgemeines Verarbeitungscluster in der Parallelverarbeitungseinheit der 3 gemäß einer Ausführungsform dar;
- 4B stellt eine Speicherpartitionseinheit der Parallelverarbeitungseinheit der 3 gemäß einer Ausführungsform dar;
- 5 stellt den Streaming-Multiprozessor der 4A gemäß einer Ausführungsform dar;
- 6 stellt ein beispielhaftes System dar, in welchem die unterschiedlichen Architekturen und/oder Funktionalitäten der verschiedenen vorherigen Ausführungsformen implementiert sein können.
-
Detaillierte Beschreibung
-
Während moderne tiefe CNNs aus einer Vielzahl von Schichttypen zusammengesetzt sind, wird die Laufzeit während einer Vorhersage durch die Auswertung der Faltungsschichten bzw. faltenden Schichten dominiert. Mit dem Ziel einer Beschleunigung der Folgerung können gesamte Merkmalsabbildungen beschnitten werden, so dass die sich ergebenden Netze sogar auf eingebetteten Vorrichtungen effizient laufen. Bei einer Ausführungsform ist ein gieriges kriterienbasiertes Beschneiden mit einer feinen Anpassung verschachtelt, woraus sich ein recheneffizientes Verfahren ergibt, was eine gute Verallgemeinerung in dem beschnitten Netz aufrechterhält. Ein Beschneidungskriterium wird berechnet, um die Wichtigkeit von Neuronen in dem Netz zu bewerten, und mindestens ein „am wenigsten wichtiges“ Neuron wird entfernt, um das Netz zu beschneiden. Das „am wenigsten wichtige“ Neuron ist das Neuron, welches den kleinsten Beitrag zu der endgültigen Vorhersage liefert.
-
1A stellt einen Flussplan 100 eines Verfahrens zum Beschneiden eines neuronalen Netzes gemäß einer Ausführungsform dar. Obwohl das Verfahren 100 im Zusammenhang mit einer Verarbeitungseinheit beschrieben wird, kann das Verfahren 100 auch durch ein Programm, eine kundenspezifische Schaltung oder durch eine Kombination einer kundenspezifischen Schaltung und ein Programm ausgeführt werden. Zum Beispiel kann das Verfahren 100 durch eine GPU (Grafikverarbeitungseinheit), eine CPU (zentrale Verarbeitungseinheit), ein neuronales Netz oder irgendeinen Prozessor, welcher in der Lage ist, ein neuronales Netz zu implementieren, ausgeführt werden. Darüber hinaus versteht der Fachmann, dass jedes System, welches das Verfahren 100 ausführt, innerhalb des Umfangs und des Geistes der Ausführungsformen der vorliegenden Erfindung liegt.
-
Im Schritt 110 werden Gradienten erster Ordnung einer Kostenfunktion bezüglich Schichtparametern für ein trainiertes neuronales Netz erfasst. Ein Kostenwert ist der Wert der Kostenfunktion für den aktuellen Zustand des Netzes, welcher die Genauigkeit des neuronalen Netzes anzeigt. Bei einer Ausführungsform ist der Schichteingangsparameter ein Gewicht oder eine Aktivierung. Es sei angemerkt, dass ein Schichteingangsparameter für eine Schicht in einem neuronalen Netz durch eine vorherige Schicht ausgegeben wird, so dass ein „Schichtparameter“ entweder einen Schichteingangsparameter oder einen Schichtausgangsparameter bezeichnet. Bei einer Ausführungsform wurde das trainierte neuronale Netz vorher mit einem großen Datensatz trainiert und die Gradienten erster Ordnung werden während eines Übertragungs-Lern-Trainings-Prozesses mit einem kleineren, spezielleren Datensatz erzeugt.
-
Im Schritt 120 wird ein Beschneidungskriterium für jeden Schichtparameter abhängig von einem Gradienten erster Ordnung, welcher mit dem Schichtparameter korrespondiert, berechnet, wobei das Beschneidungskriterium die Wichtigkeit von dem jeweiligen Neuron angibt, welches in dem trainierten neuronalen Netz vorhanden ist und dem Schichtparameter zugeordnet ist. Bei einer Ausführungsform hängt ein erstes Beschneidungskriterium von einer Taylor-Erweiterung erster Ordnung, welche den Gradienten erster Ordnung einschließt, (d.h. der ersten Ableitung) ab, die eine Änderung in der Kostenfunktion, welche durch ein Beschneiden von Netzparametern verursacht wird, abschätzt. Die Veränderung bei dem Kostenwert zeigt die Genauigkeit des neuronalen Netzes mit und ohne einen Schichteingangsparameter an, und die Änderung kann minimiert werden. Bei einer anderen Ausführungsform hängt ein zweites Kriterium von einer Summe von Quadraten, welche den Gradienten erster Ordnung der Kostenfunktion relativ zu dem Schichteingangsparameter beinhalten, ab.
-
Bei Schritt 130 wird mindestens ein Neuron, welches die geringste Wichtigkeit aufweist, identifiziert. Bei einer Ausführungsform korrespondiert das mindestens eine Neuron mit einer Merkmalsabbildung in einer Faltungsschicht. Bei einer Ausführungsform umfasst das mindestens eine Neuron Neuronen, welche eine Wichtigkeit unterhalb eines Schwellenwerts aufweisen. Bei einer Ausführungsform umfasst das mindestens eine Neuron einen vorbestimmten Prozentsatz von allen Neuronen in dem trainierten neuronalen Netz.
-
Bei Schritt 140 wird das mindestens eine Neuron von dem trainierten neuronalen Netz entfernt, um ein beschnittenes neuronales Netz zu erzeugen. Bei einer Ausführungsform kann ein Neuron entfernt werden, indem ein Schichtparameter auf Null gesetzt wird. Bei einer Ausführungsform kann ein Neuron entfernt werden, indem ein entsprechendes Beschneidungsgatter auf Null gesetzt wird. Bei einer Ausführungsform kann ein auf gierigen Kriterien basierendes Beschneiden mit einem feinen Anpassen verschachtelt sein, um iterativ Neuronen von dem trainierten neuronalen Netz zu entfernen.
-
Nun wird anschaulichere Information bezüglich verschiedenen optionalen Architekturen und Merkmalen dargelegt, mit welchen der vorab beschriebene Rahmen entsprechend den Wünschen des Benutzers implementiert oder nicht implementiert werden kann. Es sei speziell darauf hingewiesen, dass die folgende Information für erläuternde Zwecke dargelegt wird und in keiner Weise irgendwie einschränkend anzusehen ist. Jedes der folgenden Merkmale kann optional mit oder ohne den Ausschluss von anderen beschriebenen Merkmalen enthalten sein.
-
Idealerweise berücksichtigt das Beschneiden ein Entfernen von jedem Neuron individuell, indem die Kostenfunktion des neuronalen Netzes mit und ohne das jeweilige Neuron berechnet wird, wobei der Prozess jedes Mal wiederholt wird, wenn ein Neuron von dem neuronalen Netz entfernt wird. Während das ideale Beschneiden nicht praktikabel berechnet werden kann, kann das ideale Beschneiden als Vergleich eingesetzt werden, um die Leistungsfähigkeit der verschiedenen Beschneidungstechniken zu bewerten.
-
Für ein faltendes neuronales Netz (CNN) wird eine Gruppe von Bildmerkmalsabbildungen durch z
l ∈ R
H lxW lxC l mit den Dimensionen H
l x W
lund C
l individuellen Abbildungen (oder Kanälen) bezeichnet. Die Merkmalsabbildungen können entweder die Eingabe für das neuronale Netz zo oder die Ausgabe von der Faltungsschicht z
l mit I ε [1, 2, ... , L] sein. Individuelle Merkmalsabbildungen werden mit z
l (k) für k ε [1, 2, ... , C
l] bezeichnet. Eine Faltungsschicht I wendet die Faltungsoperation (*) auf eine Gruppe von Eingabemerkmalsabbildungen z
l-1 an, wobei die Kerne mit w
l (k)ε R
C l-1 xpxp parametrisiert sind:
wobei z
l (k) ∈ R
H l×W l das Ergebnis eines Faltens jedes der C
l-1-Kerne
der Größe p × p mit der entsprechenden Merkmalsabbildung und eines Addierens mit dem Bias b
l (k) ist. Es wird angenommen, dass die nichtlineare Aktivierung R der gleich gerichteten linearen Einheit entspricht. Obwohl die Techniken im Zusammenhang mit zweidimensionalen (
2D) Faltungen beschrieben werden, können die Techniken auch auf dreidimensionale (
3D) Faltungen angewendet werden.
-
Ein Trainingsdatensatz wird während der Beschneidung eingesetzt, um Neuronen von einem vorher trainierten neuronalen Netz zu entfernen. Der Trainingsdatensatz entspricht D = {X = {x
0, x
1, ..., x
N}, Y = {y
0, y
1, ..., y
N}}, wobei x bzw. y einer Eingabe bzw. Sollausgabe entsprechen. Die Parameter des neuronalen Netzes W =
werden optimiert, um einen Kostenwert C(W) zu minimieren. Bei einer Ausführungsform kann ein Parameter (w, b) ε W ein individuelles Gewicht, einen Faltungskern oder eine gesamte Gruppe von Kernen, welche eine Merkmalsabbildung berechnen, repräsentieren. Die häufigste Wahl für eine Kostenfunktion C(·) ist eine negative logarithmische Likelihood-Funktion. Eine Kostenfunktion wird unabhängig von dem Beschneiden ausgewählt und hängt nur von der Aufgabe ab, welche durch das ursprüngliche neuronale Netz zu lösen ist. In dem Fall einer Übertragung des Gelernten wird ein großes trainiertes neuronales Netz eingesetzt, welches mit den Parametern Wo initialisiert ist, welche während eines Trainings mit einem damit in Verbindung stehenden, aber eindeutigen Datensatz erzeugt wurden.
-
Während des Beschneidens wird eine Teilmenge der Parameter neu definiert. Während des Beschneidens wird die Genauigkeit des angepassten neuronalen Netzes, C(W') ≈ C(W), erhalten. Die Genauigkeit korrespondiert mit einer kombinatorischen Optimierung:
wobei die I
0-Norm bei ||W'||
0 die Anzahl der Parameter B ungleich Null in W' beschränkt. Intuitiv wird, wenn W' = W gilt, das globale Minimum einer Fehlerfunktion Ω erreicht. Jedoch befindet sich ||W'||
0 auch an einem Maximum. Die Fehlerfunktion Ω misst eine Veränderung der Kostenfunktion nach dem Beschneiden, wobei Ω(C(W') - C(W)) in Abhängigkeit von ||W'|
0 minimiert wird. Bei einer Ausführungsform entspricht die Fehlerfunktion einer absoluten Differenz oder einem euklidischen Abstand.
-
Ein Finden einer guten Teilmenge von Parametern, während ein Kostenwert so dicht wie möglich an dem ursprünglichen gehalten wird (d.h. ein Minimieren der Fehlerfunktion), ist ein kombinatorisches Problem, welches 2|W| Bewertungen der Kostenfunktion für eine ausgewählte Teilmenge von Daten erfordert. Unter Verwendung von eingebetteten Rechensystemen, welche heute verfügbar sind, ist es nicht möglich, ein optimales Beschneiden in Echtzeit zu erzielen, indem das kombinatorische Problem für neuronale Netze einer angemessenen Größe exakt optimiert wird. Daher wird eine auf Kriterien basierende Beschneidungstechnik bevorzugt, welche mit einem vollständigen Satz der Parameter W beginnt und ein Beschneiden als ein rückwärtiges Filter stattfindet, indem iterativ zumindest ein unwichtigster Schichtparameter identifiziert und entfernt wird, um der lo-Grenze bezüglich W' zu genügen. Indem Parameter bei jeder Iteration entfernt werden, kann die lo-Norm von W' minimiert werden. Ein Entfernen von einem Schichtparameter in jeder Iteration garantiert eine Minimierung des Unterschieds zwischen dem ursprünglichen neuronalen Netzmodell und dem beschnittenen neuronalen Netzmodell. Wenn einmal ein Parameter entfernt ist, wird das Kriterium erneut bewertet, da die Parameter Überkreuz-Abhängigkeiten aufweisen. Der empfindlichste Aspekt bei einem auf einem rückwärtigen Filter basierenden Beschneiden eines neuronalen Netzes ist die Schätzung der Schichtparameterwichtigkeit.
-
1B stellt einen Graph einer Änderung bei einer Verlustfunktion dar, welcher sich aus einem Entfernen eines bestimmten Neurons für eine dritte Schicht eines neuronalen Netzes gemäß einer Ausführungsform ergibt. Der Beitrag von jedem Neuron zu der Änderung bei dem Verlust reicht von leicht negativ bis positiv. Daher existieren einige Neuronen, welche, wenn sie entfernt werden, die Kostenfunktion verringern. Wie es in 1B dargestellt ist, befinden sich Neuronen, deren Entfernung zu einer Verringerung des Verlustes führt, unterhalb der x-Achse. Viele Neuronen können einen Beitrag aufweisen, welcher dicht an Null liegt, und können für eine Entfernung in Betracht gezogen werden. Eine kleine Anzahl von Neuronen erzeugt einen großen Anstieg bei dem Verlust, wenn sie entfernt werden.
-
1C stellt einen anderen Graph einer Änderung bei einer Verlustfunktion dar, welcher sich aus einem Entfernen eines bestimmten Neurons für eine achte Schicht eines neuronalen Netzes gemäß einer Ausführungsform ergibt. In ähnlicher Weise wie bei dem Graph, welcher in 1B dargestellt ist, weisen einige Neuronen einen negativen Beitrag auf, wenn sie entfernt werden, die meisten Neuronen weisen einen Beitrag in der Nähe von Null auf, und eine kleine Anzahl von Neuronen erzeugt einen großen Anstieg bei dem Verlust, wenn sie entfernt werden. Zusammengefasst weist jede Schicht des neuronalen Netzes typischerweise eine kleine Anzahl von Neuronen auf, welche, wenn sie entfernt werden, zu einem wesentlichen Anstieg des Verlustes führen. Jede Schicht weist typischerweise wenige wertvolle Neuronen auf. Daher sollte das Beschneiden über alle Schichten durchgeführt werden, anstatt sich auf bestimmte Schichten zu konzentrieren.
-
1D stellt eine Konzeptdarstellung für ein Entfernen von Neuronen von einem neuronalen Netz gemäß einer Ausführungsform dar. Neuronen (oder Merkmalsabbildungen) für eine bestimmte Schicht werden als Kreise dargestellt, und Verbindungen zwischen den Neuronen werden jeweils ein Gewicht zugeordnet. Nach einem feinen Beschneiden werden Verbindungen zwischen den Neuronen (oder Merkmalsabbildungen) entfernt. Zum Beispiel können Verbindungen, welche mit kleinen Gewichtswerten korrespondieren, entfernt werden. Jedoch kann, um eine Verarbeitung zu beschleunigen, eine bestimmte Schaltung erforderlich sein, welche eine Verarbeitung neu verteilen kann, wenn die Gewichte für eine Schicht spärlich verteilt sind. Bei einem groben Beschneiden werden ganze Neuronen (oder Merkmalsabbildungen) entfernt. Wie in 1D dargestellt ist, ist das markierte Neuron während eines groben Beschneidens entfernt worden. Wenn ein Neuron entfernt wird, werden alle Verbindungen zu und von dem Neuron entfernt.
-
Um das Lösen des kombinatorischen Problems zu vermeiden, welches 2
|W| Bewertungen der Kostenfunktion erfordert, kann ein Beschneiden als ein Optimierungsproblem betrachtet werden, um W' mit einer beschränkten Anzahl von Elementen ungleich Null zu finden zu versuchen, welche |ΔC(h
i)| = |C(W') - C(W)| minimieren. Eine Taylor-Erweiterung kann eingesetzt werden, um das Optimierungsproblem zu lösen. Eine Veränderung in der Verlustfunktion kann für ein Entfernen eines bestimmten Parameters geschätzt werden. Es sei h
i die Ausgabe, welche von einem Parameter i erzeugt wird. Für den Fall von Merkmalsabbildungen, h =
Zur Vereinfachung der Schreibweise wird die Kostenfunktion als gleichmäßig abhängig von den Parametern betrachtet, und die Ausgaben werden von den Parametern berechnet: C(h
i) = C((w,b)
i). Unter Annahme einer Unabhängigkeit der Parameter:
wobei C(D, h
i = 0) ein Kostenwert ist, wenn der Schichtparameter h
i beschnitten wird, und C(D, h
i) der Kostenwert ist, wenn der Schichtparameter h
i nicht beschnitten ist. Während die Parameter in der Realität voneinander abhängen, wird eine Annahme der Unabhängigkeit bereits bei dem Berechnungsschritt jedes Gradienten während Trainingstechniken erster Ordnung vorgenommen.
-
Um ΔC(h
i) anzunähern, wird das Taylor-Polynom erster Ordnung eingesetzt. Für eine Funktion f(x) entspricht die Taylor-Erweiterung bei einem Punkt x=a:
wobei f
(p)(a) die p-te Ableitung von f beim Punkt a und R
p(x) der Rest p-ter Ordnung ist. Eine Näherung C(D, h
i = 0) mit einem Taylor-Polynom erster Ordnung in der Nähe von h
i = 0 für den Trainingsdatensatz D ergibt:
-
Der Rest R
1(h
i = 0) kann durch die Lagrange-Form berechnet werden:
wobei ξ eine reelle Zahl zwischen 0 und h
i ist. Das erste Kriterium, welches für das Beschneiden eingesetzt wird, ist eine Näherung von C(D, h
i = 0), wobei der Rest R
1(h
i = 0) ignoriert wird (d.h. auf Null gesetzt wird), was zu der Berechnung führt:
-
Indem Gleichung (5) in Gleichung (3) eingesetzt wird und der Rest ignoriert wird, kann die Differenz ΔC(h
i) zwischen den Kostenwerten, um einen bestimmten Schichtparameter von einem neuronalen Netz zu entfernen, minimiert werden. Die Näherung wird verwendet, um das erste Kriterium Θ
TE zu berechnen:
-
Es ist wichtig, dass der Gradient erster Ordnung
eine erste Ableitung ist, welche für jeden Schichtparameter in der Kettenregel für das Zurück-Propagieren während des Trainings berechnet wird, und für eine Verwendung bei der Berechnung des ersten Kriteriums gespeichert werden kann. Das erste Kriterium beschneidet Parameter, welche einen nahezu flachen Gradienten erster Ordnung der Kostenfunktion bezüglich der Merkmalsabbildung h
i aufweisen. Das Produkt des Schichtparameters h
i und des Gradienten erster Ordnung der Kostenfunktion C bezüglich des Schichtparameters h
i. Θ
TE : R
H l×W l×C l → R
+ wird für eine mehrdimensionale Ausgabe, wie beispielsweise eine Merkmalsabbildung, berechnet durch
wobei M eine Länge eines Merkmalsabbildungs-Vektors ist. Für einen Ministapel mit T > 1 Beispielen wird das erste Kriterium für jedes Beispiel getrennt berechnet und dann über T gemittelt. Eine Skala der Werte des ersten Kriteriums variiert mit der Tiefe, in Form von Schichten innerhalb des Netzes. Daher wird eine schichtweise I
2-Normalisierung berechnet, indem das erste Kriterium über den Schichten erneut skaliert wird:
-
Eine Skalierung eines Kriteriums über den Schichten ist zum Beschneiden sehr wichtig. Wenn das Kriterium nicht geeignet skaliert wird, dann muss ein von Hand abgestimmter Multiplizierer für jede Schicht ausgewählt werden. Ohne eine Normalisierung neigt ein herkömmliches Gewichtsgrößenkriterium dazu, Merkmalsabbildungen von den ersten Schichten als wichtiger einzuordnen als von den letzten Schichten; ein herkömmliches Aktivierungskriterium ordnet mittlere Schichten wichtiger ein; und die Technik mit dem ersten Kriterium ordnet erste Schichten höher ein. Nach einer I2-Normalisierung weist jede Schicht einige Merkmalsabbildungen auf, welche sehr wichtig sind und andere, welche unwichtig sind.
-
Herkömmliche Techniken zum Beschneiden welche auf dem Einsatz einer Taylor-Erweiterung beruhen, setzen ein Taylor-Polynom zweiter Ordnung anstelle eines Taylor-Polynoms erster Ordnung ein. Die Erweiterung zweiter Ordnung weist den Gradienten erster Ordnung und einen Gradienten zweiter Ordnung auf:
-
Darüber hinaus ist eine Behandlung des Terms erster Ordnung der Taylor-Erweiterung,
für die Kostenfunktion C und den versteckten Schichtparameter h, wie es in Gleichung (8) dargestellt ist, verschieden zu den herkömmlichen Beschneidungstechniken. Nach ausreichenden Trainingsperioden tendiert der Term des Gradienten erster Ordnung gegen
und E(y) = 0. Beim Nennwert bietet y geringe nützliche Information. Daher betrachten herkömmliche Beschneidungstechniken y als gleich Null und fokussieren stattdessen auf den Term zweiter Ordnung, welcher den Gradienten zweiter Ordnung aufweist. Insbesondere setzen herkömmliche Beschneidungstechniken y = 0 und den Rest R
2(h
i = 0) auch als Null voraus, was eine Änderung in der Kostenfunktion ergibt:
-
Es sei darauf hingewiesen, dass die Varianz von y nicht Null ist und mit der Stabilität der lokalen Funktion bezüglich des Schichtparameters h korreliert. Der absolute Wert des Terms erster Ordnung |y| zeigt die absolute Änderung bezüglich der Kosten an, welche durch ein Beschneiden verursacht werden, und wird verwendet, um das erste und das zweite Kriterium zu berechnen, anstatt dass es auf 0 (wie in Gleichung (12)) gesetzt wird. Es sei angenommen, dass Werte mit einer unabhängigen und identischen Verteilung
kommen, wobei σ die Standardabweichung von y ist, welcher als der Erwartungswert der halbnormalen Verteilung bekannt ist. Während y zu Null tendiert, ist so der Erwartungswert von |y| proportional der Varianz von y, einem Wert, welcher empirisch informativer als ein Beschneidungskriterium ist. Als zusätzlicher Vorteil wird eine Berechnung des Terms der Taylor-Erweiterung zweiter Ordnung oder eine Vereinfachung (z.B. einer Diagonalen der Hesse-Matrix) vermieden. Eine Berechnung der Hesse-Matrix, entweder teilweise oder vollständig, erhöht den Speicherverbrauch und die Rechneranforderungen mehr als eine Berechnung des Kriteriums erster oder zweiter Ordnung.
-
2A stellt einen Graphen der Kostenfunktion C und der Parameter h für den Trainingsdatensatz D gemäß einer Ausführungsform dar. Wie in dem Graph dargestellt ist, sind die Gradienten erster Ordnung für die Schichtparameter hi und h2 nahezu gleich, aber der Gradient erster Ordnung für h2 ist positiv, während der Gradient erster Ordnung für h1 negativ ist. Wenn herkömmliche Techniken eingesetzt werden, heben sich die Gradienten erster Ordnung gegeneinander auf (d.h. die Summe ist nahezu Null). Wenn das erste Kriterium eingesetzt wird, welches einen absoluten Wert von jedem Produkt annimmt, heben sich die Gradienten erster Ordnung dagegen nicht gegeneinander auf. E(h) ist die mathematische Erwartung des Parameters h über einer Gruppe von Werten in dem Trainingsdatensatz. C(D, E(h)) ist ein Wert der Kostenfunktion an einer Stelle, wenn h einen Erwartungswert annimmt.
zeigt die Abweichung eines Produkts zwischen einem möglichen Wert des Parameters h und einem Gradienten erster Ordnung der Kostenfunktion bezüglich der Werte von h.
-
Bei einer anderen Ausführungsform wird ein zweites Kriterium anstelle des ersten Kriteriums eingesetzt. Das zweite Kriterium wird berechnet, indem Quadrate des Schichtparameters skaliert durch den Gradienten erster Ordnung entsprechend dem Schichtparameter über Eingangskanäle und Dimensionen bzw. Abmessungen eines Faltungskerns aufsummiert werden. Genauer hängt das zweite Kriterium von einem Schichteingangsparameter W
i ε R
M,X,Y für Parameter i ab, wobei M die Anzahl der Eingangskanäle für eine Merkmalsabbildung ist. X und Y entsprechen den Abmessungen bzw. Dimensionen des Faltungskerns. Das zweite Kriterium Θ
SS ist eine Summe von Quadraten:
-
Ähnlich wie das erste Kriterium wird das zweite Kriterium auch abhängig von einem Gradienten erster Ordnung berechnet. Der Gradient erster Ordnung
ist eine erste Ableitung, welche für jeden Schichtparameter während des Trainings berechnet wird, und kann für eine Verwendung bei der Berechnung des zweiten Kriteriums gespeichert werden.
-
2B stellt ein Blockdiagramm eines Beschneidungssystems 250 für ein neuronales Netz gemäß einer Ausführungsform dar. Das Beschneidungssystem 250 für ein neuronales Netz kann ausgestaltet sein, um die in 1A dargestellten Schritte auszuführen. Das Beschneidungssystem 250 für ein neuronales Netz weist ein trainiertes neuronales Netz 225 und einen Trainingsdatensatz, welcher Eingangsdaten 215 und Sollausgangsdaten 255, welche durch das trainierte neuronale Netz 225 erzeugt werden sollen, wenn die Eingangsdaten 215 angelegt werden, aufweist, auf. Bei einer Ausführungsform wird das trainierte neuronale Netz 225 mittels eines ersten Datensatzes trainiert, welcher allgemein ist, bevor es mittels des Trainingsdatensatzes trainiert wird, welcher die Eingangsdaten 215 aufweist und speziell ist. Bei einer Ausführungsform ist das trainierte neuronale Netz 225 ein faltendes neuronales Netz.
-
Während des Beschneidens verarbeitet das trainierte neuronale Netz 225 die Eingangsdaten 215 und erzeugt Vorhersagedaten 135 (d.h. Ausgangsdaten). Eine Berechnungseinheit 245 für einen Gradienten einer Kostenfunktion empfängt die Vorhersagedaten 235 und die Sollausgangsdaten 255 und berechnet Gradienten erster Ordnung δC / δhi von Kostenwerten C relativ zu einem Schichteingangsparameter hi, welcher von dem Parameter i des trainierten neuronalen Netzes 225 erzeugt wird. Bei einer Ausführungsform wird während einer groben Beschneidung der absolute Wert des Gradienten für einen Schichtparameter minimiert.
-
Die Gradienten erster Ordnung werden an eine Berechnungseinheit
260 für ein Beschneidungskriterium ausgegeben, welches ein Beschneidungskriterium für jeden Schichtparameter des trainierten neuronalen Netzes
125 abhängig von den Gradienten berechnet. Bei einer Ausführungsform wird das Beschneidungskriterium für einen Schichtparameter, Θ
TE(h
i), mittels des ersten Kriteriums berechnet als
Bei einer anderen Ausführungsform wird das Beschneidungskriterium für einen Schichtparameter, Θ
SS(W
i), mittels des zweiten Kriteriums berechnet. Die Beschneidungskriterien werden als Wichtigkeitswerte dargestellt, welche einer Neuronenentfernungseinheit
265 bereitgestellt werden. Die Neuronenentfernungseinheit
265 zeigt bei dem trainierten neuronalen Netz
225 an, dass ein oder mehrere Neuronen von dem trainierten neuronalen Netz
225 entfernt werden sollten.
-
Das Beschneiden von Neuronen kann als ein Logikgatter implementiert sein, welches die Ausgabe von einigen Neuronen deaktiviert. Zum Beispiel kann ein Beschneidungsgatter
ein Schalter sein, welcher bestimmt, ob eine bestimmte Merkmalsabbildung während einer Vorwärtsregelungs-Propagierung enthalten oder beschnitten ist, so dass, wenn g vektorisiert ist, W' = gW gilt. Bei einer Ausführungsform bestimmt jedes Beschneidungsgatter, ob die Ausgabe eines bestimmten Neurons während der Vorwärtsregelungs-Propagierung verwendet wird oder nicht, so dass für den Ausgang von jedem Neuron gilt:
-
2C stellt einen Flussplan 200 eines anderen Verfahrens zum Beschneiden eines neuronalen Netzes gemäß einer Ausführungsform dar. Obwohl das Verfahren 200 im Zusammenhang mit dem System 250 zum Beschneiden eines neuronalen Netzes beschrieben wird, kann das Verfahren 100 auch durch ein Programm, eine kundenspezifische Schaltung oder durch eine Kombination aus einer kundenspezifischen Schaltung und einem Programm ausgeführt werden. Das Verfahren 200 kann zum Beispiel durch eine GPU, eine CPU, ein neuronales Netz oder irgendeinen Prozessor ausgeführt werden, welcher in der Lage ist, ein neuronales Netz zu implementieren. Darüber hinaus versteht der Fachmann, dass jedes System, welches das Verfahren 200 ausführt, im Umfang und im Geist der Ausführungsformen der vorliegenden Erfindung liegt.
-
Der Flussplan 200 enthält die Schritte 110, 120, 130 und 140 der 1A. Bei Schritt 210 wird das beschnittene neuronalen Netz mittels konventioneller Techniken fein angepasst. Ein feines Anpassen umfasst ein Optimieren der Parameter des Netzes, um eine Kostenfunktion bezüglich eines vorgegebenen Datensatzes zu minimieren. Bei Schritt 220 wird eine Entscheidung getroffen, ob ein Beschneiden fortgesetzt werden sollte oder nicht. Wenn das Beschneiden fortgesetzt wird, kehrt das System 250 zum Beschneiden eines neuronalen Netzes zum Schritt 120 zurück. Andernfalls ist das Beschneiden abgeschlossen. Ein Beschneiden kann als abgeschlossen betrachtet werden, wenn eine Schwellenwertanzahl von Neuronen entfernt worden ist. Bei einer Ausführungsform werden Neuronen, welche mit einer einzigen Merkmalsabbildung korrespondieren, während jeder Iteration beschnitten, was eine feine Anpassung und erneute Bewertung des Kriteriums ermöglicht, um eine Unabhängigkeit zwischen den Parametern zu berücksichtigen. Wenn das Beschneiden einmal beendet worden ist, werden die Parameter des neuronalen Netzes und die Beschneidungsgatter festgelegt. Darüber hinaus können Parameter, welche mit Beschneidungsgattern mit dem Wert Null korrespondieren, von dem neuronalen Netz entfernt werden.
-
Einer der Hauptgründe, um ein Beschneiden anzuwenden, ist, die Anzahl von Operationen in dem Netz zu verringern. Merkmalsabbildungen von verschiedenen Schichten erfordern unterschiedliche Ausmaße einer Berechnung aufgrund der Anzahl und der Ausmaße von Eingangsmerkmalsabbildungen und Faltungskernen.
-
Um dies zu berücksichtigen, wird eine Regularisierung von Fließkommaoperationen pro Sekunde (FLOPs) eingeführt:
wobei λ den Umfang der Regularisierung steuert. λ = 10
-3 kann verwendet werden, um Θ
flops zu berechnen, wobei angenommen wird, dass eine Faltung als ein gleitendes Fenster implementiert ist. Bei einer Ausführungsform wird die FLOPs-Regularisierung während der Beschneidung angewendet, um Neuronen mit höheren FLOPs zuerst zu beschneiden. Zum Beispiel können die FLOPS pro Faltungsneuron von jeder Schicht für ein beispielhaftes neuronales Netz sein:
-
Andere Regularisierungsbedingungen können angewendet werden, z.B. Speichergröße, Kerngröße oder Speicherfußabdruck, um Neuronen basierend auf den anderen Bedingungen zu beschneiden.
-
Um die Anzahl von FLOPs zu berechnen, wird angenommen, dass die Faltung als ein gleitendes Fenster implementiert ist und dass die nichtlineare Funktion umsonst berechnet wird. Für Faltungskerne gilt:
wobei H, W und C
in die Höhe, Breite bzw. Anzahl der Kanäle der Eingangsmerkmalsabbildung sind. K ist die Kernbreite (welche als symmetrisch angenommen wird) und Cout ist die Anzahl der Ausgangskanäle.
-
Für vollständig verbundene Schichten wird FLOPs berechnet durch:
wobei I die Eingangsdimensionalität und O die Ausgangsdimensionalität ist.
-
Zusammengefasst können trainierte neuronale Netze iterativ mittels entweder eines ersten Kriteriums oder eines zweiten Kriteriums, welche abhängig von einem Gradienten erster Ordnung der Kostenfunktion bezüglich des Schichtparameters hi berechnet werden, beschnitten werden. Die unwichtigsten Schichtparameter gemäß dem ersten oder zweiten Kriterium werden entfernt. Die FLOPs-Regularisierung kann angewendet werden, um Wichtigkeiten zu berechnen und unwichtigere Neuronen mit höheren Berechnungslasten zu beschneiden. In ähnlicher Weise wie FLOPs kann eine Regularisierung von anderen Betriebsmitteln (z.B. Speichergröße, Bandbreite, usw.) eingesetzt werden, um Wichtigkeiten abhängig von anderen Bedingungen zu berechnen.
-
Parallele Verarbeitungsarchitektur
-
3 stellt eine parallele Verarbeitungseinheit (PPU) 300 gemäß einer Ausführungsform dar. Die PPU 300 kann ausgestaltet sein, um ein Beschneiden eines neuronalen Netzes zu implementieren, wenn Befehle ausgeführt werden. Bei einer Ausführungsform ist die PPU 300 ausgestaltet, um das System 250 zum Beschneiden eines neuronalen Netzes zu implementieren.
-
In einer Ausführungsform ist die PPU 300 ein Multithread-Prozessor, der auf einem oder mehreren integrierten Schaltkreisen implementiert ist. Die PPU 300 ist eine Latenzzeitverdeckungsarchitektur, die dafür ausgelegt ist, viele Threads parallel zu verarbeiten. Ein Thread (d.h. ein Thread der Ausführung) ist eine Instanziierung eines Satzes von Befehlen, die so konfiguriert sind, dass sie von der PPU 300 ausgeführt werden. In einer Ausführungsform ist die PPU 300 eine Grafikverarbeitungseinheit (GPU), die so konfiguriert ist, dass sie eine Grafik-Rendering-Pipeline für die Verarbeitung von dreidimensionalen (3D) Grafikdaten implementiert, um zweidimensionale (2D) Bilddaten für die Anzeige auf einer Anzeigevorrichtung wie einer Flüssigkristallanzeigevorrichtung (LCD) zu erzeugen. In anderen Ausführungsformen kann die PPU 300 zur Durchführung von Mehrzweckberechnungen verwendet werden. Obwohl hier ein beispielhafter Parallelprozessor zur Veranschaulichung bereitgestellt ist, ist es wichtig zu beachten, dass dieser Prozessor nur zu illustrativen Zwecken aufgeführt ist und dass jeder Prozessor eingesetzt werden kann, um diesen zu ergänzen und/oder zu ersetzen.
-
Wie in 3 dargestellt, umfasst die PPU 300 eine Input/Output (I/O)-Einheit 305, eine Host-Interface-Einheit 310, eine Frontend-Einheit 315, eine Ablaufsteuerungseinheit bzw. Scheduler-Einheit 320, eine Arbeitsverteilungseinheit 325, einen Hub 330, ein Koppelfeld (Xbar) 370, ein oder mehrere General Processing Cluster (GPCs) 350 und eine oder mehrere Partitionseinheiten 380. Die PPU 300 kann über einen Systembus 302 an einen Host-Prozessor oder andere Peripheriegeräte angeschlossen werden. Die PPU 300 kann auch an einen lokalen Speicher angeschlossen werden, der aus mehreren Speicherbausteinen 304 besteht. In einer Ausführungsform kann der lokale Speicher aus einer Anzahl von DRAM-Vorrichtungen (Dynamic Random Access Memory) bestehen.
-
Die I/O-Einheit 305 ist so konfiguriert, dass sie über den Systembus 302 Kommunikationen (d.h. Befehle, Daten, etc.) von einem Host-Prozessor (nicht abgebildet) sendet und empfängt. Die I/O-Einheit 305 kann mit dem Host-Prozessor direkt über den Systembus 302 oder über ein oder mehrere Zwischenvorrichtungen wie z.B. eine Speicherbrücke, kommunizieren. In einer Ausführungsform implementiert die I/O-Einheit 305 eine Peripheral Component Interconnect Express (PCIe)-Schnittstelle für die Kommunikation über einen PCIe-Bus. In alternativen Ausführungsformen kann die I/O-Einheit 305 auch andere Arten von bekannten Schnittstellen für die Kommunikation mit externen Vorrichtungen implementieren.
-
Die I/O-Einheit 305 ist mit einer Host-Interface-Einheit 310 gekoppelt, die über den Systembus 302 empfangene Pakete dekodiert. In einer Ausführungsform stellen die Pakete Befehle dar, die so konfiguriert sind, dass die PPU 300 verschiedene Operationen ausführt. Die Host-Schnittstelleneinheit 310 überträgt die dekodierten Befehle an verschiedene andere Einheiten der PPU 300, wie in den Befehlen angegeben. So können z.B. einige Befehle an die Frontend-Einheit 315 übertragen werden. Andere Befehle können an den Hub 330 oder andere Einheiten der PPU 300 übertragen werden, wie z.B. eine oder mehrere Kopiermaschinen, einen Video-Encoder, einen Videodecoder, einen Videodecoder, eine Power-Management-Einheit usw. (nicht explizit dargestellt). Mit anderen Worten, die Hostschnittstelleneinheit 310 ist so konfiguriert, dass sie die Kommunikation zwischen und unter den verschiedenen logischen Einheiten der PPU 300 weiterleitet.
-
In einer Ausführungsform kodiert ein vom Host-Prozessor ausgeführtes Programm einen Befehlsstrom in einen Puffer, der der PPU 300 Arbeit (Workload) zur Verarbeitung zur Verfügung stellt. Eine Workload kann mehrere Instruktionen und Daten, die von diesen Instruktionen verarbeitet werden sollen, umfassen. Der Puffer ist ein Bereich in einem Speicher, auf den sowohl der Host-Prozessor als auch die PPU 300 zugreifen (d.h. lesen/schreiben) können. Beispielsweise kann die Host-Schnittstelleneinheit 310 so konfiguriert werden, dass sie über Speicheranforderungen, die von der I/O-Einheit 305 über den Systembus 302 übertragen werden, auf den Puffer in einem an den Systembus 302 angeschlossenen Systemspeicher zugreift. In einer Ausführungsform schreibt der Host-Prozessor den Befehlsstrom in den Puffer und sendet dann einen Zeiger auf den Anfang des Befehlsstroms an die PPU 300. Die Host-Schnittstelleneinheit 310 stellt der Frontend-Einheit 315 Zeiger auf einen oder mehrere Befehlsströme zur Verfügung. Die Frontend-Einheit 315 verwaltet einen oder mehrere Ströme, liest Befehle aus den Strömen und leitet Befehle an die verschiedenen Einheiten der PPU 300 weiter.
-
Die Frontend-Einheit 315 ist mit einer Scheduler-Einheit 320 gekoppelt, die die verschiedenen GPCs 350 so konfiguriert, dass sie Aufgaben bzw. Tasks bearbeiten, die durch einen oder mehrere Ströme definiert sind. Die Scheduler-Einheit 320 ist so konfiguriert, dass sie Zustandsinformationen zu den verschiedenen Aufgaben, die von der Scheduler-Einheit 320 verwaltet werden, verfolgt. Der Zustand kann angeben, welchem GPC 350 eine Aufgabe zugeordnet ist, ob die Aufgabe aktiv oder inaktiv ist, ob sie eine Prioritätsstufe hat, die der Aufgabe zugeordnet ist, und so weiter. Die Scheduler-Einheit 320 verwaltet die Ausführung einer Vielzahl von Aufgaben auf einem oder mehreren GPCs 350.
-
Die Scheduler-Einheit 320 ist mit einer Arbeitsverteilungseinheit 325 gekoppelt, die so konfiguriert ist, dass sie Aufgaben zur Ausführung auf den GPCs 350 verteilt. Die Arbeitsverteilungseinheit 325 kann eine Reihe von geplanten Aufgaben verfolgen, die von der Scheduler-Einheit 320 empfangen wurden. In einer Ausführungsform verwaltet die Arbeitsverteilungseinheit 325 für jeden der GPCs 350 einen anstehenden Aufgabenpool und einen aktiven Aufgabenpool. Der anstehende Aufgabenpool kann eine Anzahl von Slots (z.B. 32 Slots) umfassen, die Aufgaben enthalten, die von einem bestimmten GPC 350 bearbeitet werden sollen. Der aktive Aufgabenpool kann eine Anzahl von Slots (z.B. 4 Slots) für Aufgaben umfassen, die von den GPCs 350 aktiv bearbeitet werden. Wenn ein GPC 350 die Ausführung einer Aufgabe beendet, wird diese Aufgabe aus dem aktiven Aufgabenpool für den GPC 350 entfernt und eine der anderen Aufgaben aus dem anstehenden Aufgabenpool ausgewählt und zur Ausführung auf dem GPC 350 eingeplant. Wenn eine aktive Aufgabe auf dem GPC 350 untätig war, z.B. während des Wartens auf die Auflösung einer Datenabhängigkeit, kann die aktive Aufgabe aus dem GPC 350 entfernt und in den anstehenden Aufgabenpool zurückgegeben werden, während eine andere Aufgabe im anstehenden Aufgabenpool ausgewählt und zur Ausführung auf dem GPC 350 eingeplant wird.
-
Die Arbeitsverteilungseinheit 325 kommuniziert mit einem oder mehreren GPCs 350 über ein XBar 370. Das XBar 370 ist ein Verbindungsnetzwerk, das viele Einheiten der PPU 300 mit anderen Einheiten der PPU 300 koppelt. Beispielsweise kann das XBar 370 so konfiguriert werden, dass es die Arbeitsverteilungseinheit 325 mit einem bestimmten GPC 350 koppelt. Obwohl nicht explizit dargestellt, sind eine oder mehrere andere Einheiten der PPU 300 mit der Host-Schnittstelleneinheit 310 gekoppelt. Die anderen Vorrichtungen können auch über einen Hub 330 mit dem XBar 370 verbunden sein.
-
Die Aufgaben werden von der Scheduler-Einheit 320 verwaltet und von der Arbeitsverteilungseinheit 325 an ein GPC 350 versendet. Das GPC 350 ist so konfiguriert, dass es die Aufgabe bearbeitet und Ergebnisse generiert. Die Ergebnisse können von anderen Aufgaben innerhalb des GPC 350 aufgenommen, über das XBar 370 an ein anderes GPC 350 weitergeleitet oder im Speicher 304 gespeichert werden. Die Ergebnisse können über die Partitionseinheiten 380 in den Speicher 304 geschrieben werden, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten von/in den Speicher 304 implementieren. In einer Ausführungsform enthält die PPU 300 eine Anzahl U der Partitionseinheiten 380, die der Anzahl der separaten und unterschiedlichen Speicherbausteine 304 entspricht, die mit der PPU 300 gekoppelt sind. Eine Partitionseinheit 380 wird im Folgenden in Verbindung mit 4B näher beschrieben.
-
In einer Ausführungsform führt ein Host-Prozessor einen Treiberkern aus, der eine Anwendungsprogrammierschnittstelle (API) implementiert, die es einer oder mehreren Anwendungen, die auf dem Host-Prozessor ausgeführt werden, ermöglicht, Operationen für die Ausführung auf der PPU 300 einzuplanen. Eine Anwendung kann Anweisungen (d.h. API-Aufrufe) generieren, die den Treiberkern veranlassen, eine oder mehrere Aufgaben zur Ausführung durch die PPU 300 zu generieren. Der Treiberkern gibt Aufgaben an einen oder mehrere Ströme aus, die von der PPU 300 verarbeitet werden. Jede Aufgabe kann eine oder mehrere Gruppen verwandter Threads umfassen, die hier als Warp bezeichnet werden. Ein Thread-Block kann sich auf eine Vielzahl von Gruppen von Threads beziehen, welche Anweisungen zur Ausführung der Aufgabe aufweisen. Threads in derselben Gruppe von Threads können Daten über einen Gemeinschaftsspeicher austauschen. In einer Ausführungsform umfasst eine Gruppe von Threads 32 in Bezug stehende Threads.
-
4A zeigt ein GPC 350 innerhalb der PPU 300 von 3, entsprechend einer Ausführungsform. Wie in 4A dargestellt, enthält jedes GPC 350 eine Reihe von Hardware-Einheiten für die Bearbeitung von Aufgaben. In einer Ausführungsform enthält jedes GPC 350 einen Pipeline-Manager 410, eine Pre-Raster-Operations-Einheit (PROP) 415, eine Raster-Engine 425, ein Arbeitsverteilungs-Koppelfeld (WDX) 480, eine Speicherverwaltungs-Einheit (MMU) 490 und ein oder mehrere Musterverarbeitungs-Cluster (TPCs) 420. Es sei darauf hingewiesen, dass das GPC 350 von 4A anstelle oder zusätzlich zu den in 4A gezeigten Einheiten auch andere Hardware-Einheiten enthalten kann.
-
In einer Ausführungsform wird der Betrieb des GPC 350 durch den Pipeline-Manager 410 gesteuert. Der Pipeline-Manager 410 verwaltet die Konfiguration eines oder mehrerer TPCs 420 für die Bearbeitung von Aufgaben, die dem GPC 350 zugeordnet sind. In einer Ausführungsform kann der Pipeline-Manager 410 mindestens einen der TPCs 420 so konfigurieren, dass es mindestens einen Teil einer Grafik-Rendering-Pipeline implementiert. Beispielsweise kann ein TPC 420 so konfiguriert werden, dass es ein Vertex-Shader-Programm auf dem programmierbaren Streaming-Multiprozessor (SM) 440 ausführt. Der Pipeline-Manager 410 kann auch so konfiguriert werden, dass er Pakete, die von der Arbeitsverteilungseinheit 325 empfangen werden, an die entsprechenden logischen Einheiten innerhalb des GPC 350 weiterleitet. Beispielsweise können einige Pakete an Hardware-Einheiten mit fester Funktion in der PROP 415 und/oder der Raster-Engine 425 weitergeleitet werden, während andere Pakete an die TPCs 420 zur Verarbeitung durch die Primitiv-Engine 435 oder den SM 440 weitergeleitet werden.
-
Die PROP-Einheit 415 ist so konfiguriert, dass sie Daten, die von der Raster-Engine 425 und den TPCs 420 erzeugt wurden, an eine Raster-Operations-(ROP-) Einheit in der Partitionseinheit 380 weiterleitet, was weiter unten näher beschrieben wird. Die PROP-Einheit 415 kann auch so konfiguriert werden, dass sie Optimierungen für die Farbmischung durchführt, Pixeldaten organisiert, Adressübersetzungen durchführt und ähnliches.
-
Die Raster-Engine 425 enthält eine Reihe von Hardware-Einheiten mit fester Funktion, die so konfiguriert sind, dass sie verschiedene Rasteroperationen ausführen können. In einer Ausführungsform enthält die Raster-Engine 425 eine Setup-Engine, eine grobe Raster-Engine, eine Culling-Engine, eine Clipping-Engine, eine feine Raster-Engine und eine Kachel-Coalescing-Engine. Die Setup-Engine empfängt transformierte Vertices und generiert Ebenengleichungen, die dem geometrischen Primitiv zugeordnet sind, das durch die Vertices definiert ist. Die Ebenengleichungen werden an die grobe Raster-Engine übertragen, um Abdeckungsinformationen (z.B. eine x,y-Abdeckungsmaske für eine Kachel) für das Primitiv zu generieren. Die Ausgabe der groben Raster-Engine kann zu der Culling-Engine übertragen werden, wo Fragmente, die mit dem Primitiv assoziiert sind und einen Z-Test nicht bestehen, einem Culling unterzogen werden, und zu einer Clipping-Engine übertragen werden, wo Fragmente, die außerhalb eines Betrachtungsfrustums liegen, weggeschnitten werden. Diejenigen Fragmente, die das Clipping und Culling überleben, können an eine feine Raster-Engine übergeben werden, um Attribute für die Pixelfragmente zu generieren, die auf den von der Setup-Engine generierten Ebenengleichungen basieren. Die Ausgabe der Raster-Engine 425 besteht aus Fragmenten, die z.B. von einem Fragment-Shader verarbeitet werden, der in einem TPC 420 implementiert ist.
-
Jedes im GPC 350 enthaltene TPC 420 enthält einen M-Pipe-Controller (MPC) 430, eine Primitiv-Engine 435, einen oder mehrere SMs 440 und eine oder mehrere Mustereinheiten 445. Der MPC 430 steuert den Betrieb des TPC 420 und leitet die vom Pipeline-Manager 410 empfangenen Pakete an die entsprechenden Einheiten im TPC 420 weiter. Beispielsweise können Pakete, die einem Vertex zugeordnet sind, an die Primitiv-Engine 435 weitergeleitet werden, die so konfiguriert ist, dass sie Vertex-Attribute, die dem Vertex zugeordnet sind, aus dem Speicher 304 holt. Im Gegensatz dazu können Pakete, die einem Shader-Programm zugeordnet sind, an den SM 440 übertragen werden.
-
In einer Ausführungsform sind die Muster-Einheiten 445 so konfiguriert, dass sie Musterabbildungen (z.B. ein zweidimensionales Feld von Mustern) aus dem Speicher 304 laden und die Musterabbildungen so abtasten, dass sie abgetastete Musterwerte für die Verwendung in Shader-Programmen erzeugen, die von dem SM 440 ausgeführt werden. Die Muster-Einheiten 445 implementieren Muster-Operationen, wie z.B. Filteroperationen mit Hilfe von Mip-Maps (d.h. Musterabbildungen mit unterschiedlichen Detaillierungsgraden). Die Muster-Einheit 445 wird auch als der Lade-/Speicher-Pfad für den SM 440 bis MMU 490 verwendet. In einer Ausführungsform enthält jedes TPC 420 zwei (2) Muster-Einheiten 445.
-
Der SM 440 besteht aus einem programmierbaren Streaming-Prozessor, der so konfiguriert ist, dass er Aufgaben verarbeitet, die durch eine Reihe von Threads repräsentiert werden. Jeder SM 440 ist multi-threaded und so konfiguriert, dass er mehrere Threads (z.B. 32 Threads) aus einer bestimmten Gruppe von Threads gleichzeitig ausführen kann. In einer Ausführungsvariante implementiert der SM 440 eine SIMD-Architektur (Single-Instruction, Multiple-Data), bei der jeder Thread in einer Gruppe von Threads (z.B. Warp) so konfiguriert ist, dass er einen anderen Datensatz auf der Grundlage desselben Befehlssatzes verarbeitet. Alle Threads in der Gruppe der Threads führen dieselben Anweisungen aus. In einer anderen Ausführungsvariante implementiert der SM 440 eine SIMT-Architektur (Single-Instruction, Multiple Thread), bei der jeder Thread in einer Gruppe von Threads so konfiguriert ist, dass er einen anderen Datensatz auf der Grundlage desselben Befehlssatzes verarbeitet, wobei jedoch einzelne Threads in der Gruppe von Threads während der Ausführung voneinander abweichen dürfen. Mit anderen Worten, wenn eine Anweisung für die Gruppe von Threads zur Ausführung gesendet wird, können einige Threads in der Gruppe von Threads aktiv sein, wodurch die Anweisung ausgeführt wird, während andere Threads in der Gruppe von Threads inaktiv sein können, wodurch eine No-Operation (NOP) ausgeführt wird, anstatt die Anweisung auszuführen. Der SM 440 wird im Folgenden in Verbindung mit 5 näher beschrieben.
-
Die MMU 490 stellt eine Schnittstelle zwischen dem GPC 350 und der PartitionsEinheit 380 zur Verfügung. Die MMU 490 kann die Übersetzung virtueller Adressen in physikalische Adressen, einen Speicherschutz und eine Entscheidung von Speicheranforderungen ermöglichen. In einer Ausführungsform stellt die MMU 490 einen oder mehrere Übersetzungspuffer (TLBs) zur Verfügung, um die Übersetzung virtueller Adressen in physikalische Adressen im Speicher 304 durchzuführen.
-
4B zeigt eine Speicherpartitionseinheit 380 der PPU 300 von 3, entsprechend einer Ausführungsform. Wie in 4B gezeigt, enthält die Speicherpartitionseinheit 380 eine Rasteroperations-Einheit (ROP-Einheit) 450, einen Level-2-Cache (L2-Cache) 460, eine Speicherschnittstelle 470 und ein L2-Koppelfeld (XBar) 465. Die Speicherschnittstelle 470 ist mit dem Speicher 304 gekoppelt. Die Speicherschnittstelle 470 kann 16, 32, 64, 64, 128-Bit-Datenbusse oder ähnliches für Hochgeschwindigkeits-Datenübertragungen implementieren. In einer Ausführungsform enthält die PPU 300 U Speicherschnittstellen 470, eine Speicherschnittstelle 470 pro Partitionseinheit 380, wobei jede Partitionseinheit 380 mit einer entsprechenden Speichervorrichtung 304 verbunden ist. Beispielsweise kann die PPU 300 an bis zu U Speichereinheiten 304 angeschlossen werden, wie z.B. Grafik-Doppel-Datenrate, Version 5, synchroner dynamischer Direktzugriffsspeicher (GDDR5 SDRAM). In einer Ausführungsform implementiert die Speicherschnittstelle 470 eine DRAM-Schnittstelle und U ist gleich 8.
-
In einer Ausführungsform implementiert die PPU 300 eine mehrstufige Speicherhierarchie. Der Speicher 304 befindet sich außerhalb des Chips in einem SDRAM, welcher mit der PPU 300 gekoppelt ist. Daten aus dem Speicher 304 können abgerufen und im L2-Cache 460 gespeichert werden, der sich auf dem Chip befindet und von den verschiedenen GPCs 350 gemeinsam benutzt wird. Wie gezeigt, enthält jede Partitionseinheit 380 einen Teil des L2-Cache 460, der einer entsprechenden Speichervorrichtung 304 zugeordnet ist. Untergeordnete Caches können dann in verschiedenen Einheiten innerhalb der GPCs 350 implementiert werden. Zum Beispiel kann jeder der SMs 440 einen Level-1-Cache (L1-Cache) implementieren. Der L1-Cache ist ein privater Speicher, der für einen bestimmten SM 440 reserviert ist. Daten aus dem L2-Cache 460 können geholt und in jedem der L1-Caches zur Verarbeitung in den Funktionseinheiten der SMs 440 gespeichert werden. Der L2-Cache 460 ist mit der Speicherschnittstelle 470 und dem XBar 370 gekoppelt.
-
Die ROP-Einheit 450 enthält einen ROP-Manager 455, eine Color-ROP- (CROP) Einheit 452 und eine Z-ROP- (ZROP) Einheit 454. Die CROP-Einheit 452 führt Rasteroperationen im Zusammenhang mit der Pixelfarbe durch, wie z.B. Farbkompression, Pixelblending und ähnliches. Die ZROP-Einheit 454 führt Tiefenprüfungen in Verbindung mit der Raster-Engine 425 durch. Die ZROP-Einheit 454 erhält von der Culling-Engine der Raster-Engine 425 eine Tiefe für eine Abtastposition, die einem Pixelfragment zugeordnet ist. Die ZROP-Einheit 454 prüft die Tiefe gegen eine entsprechende Tiefe in einem Tiefenpuffer für eine dem Fragment zugeordnete Abtastposition. Wenn das Fragment den Tiefen-Test für die Abtastposition besteht, aktualisiert die ZROP-Einheit 454 den Tiefenpuffer und überträgt das Ergebnis des Tiefen-Tests an die Raster-Engine 425. Der ROP-Manager 455 steuert den Betrieb der ROP-Einheit 450. Es sei angemerkt, dass die Anzahl der Partitionseinheiten 380 von der Anzahl der GPCs 350 abweichen kann und daher jede ROP-Einheit 450 mit jedem der GPCs 350 gekoppelt werden kann. Daher verfolgt der ROP-Manager 455 die von den verschiedenen GPCs 350 empfangenen Pakete und bestimmt, zu welchem GPC 350 ein Ergebnis, das von der ROP-Einheit 450 erzeugt wurde, weitergeleitet wird. Die CROP-Einheit 452 und die ZROP-Einheit 454 sind über ein L2 XBar 465 mit dem L2-Cache 460 gekoppelt.
-
5 zeigt den Streaming-Multiprozessor 440 von 4A gemäß einer Ausführungsform. Wie in 5 dargestellt, enthält der SM 440 einen Befehlscache 505, eine oder mehrere Scheduler-Einheiten 510, eine Registerdatei 520, einen oder mehrere Verarbeitungskerne 550, eine oder mehrere Spezialfunktions-Einheiten (SFUs) 552, eine oder mehrere Lade-/Speicher-Einheiten (LSUs) 554, ein Verbindungsnetzwerk 580, einen Gemeinschaftsspeicher/L1 Cache 570. In einer Ausführungsform ist der Befehlscache 105, die Lade-/Speicher-Einheit 154 und die Registerdatei 115, die in 1B gezeigt sind, der Befehlscache 505, die Lade-/SpeicherEinheit (LSU) 554 bzw. die Registerdatei 520.
-
Wie oben beschrieben, verteilt die Arbeitsverteilungs-Einheit 325 Aufgaben zur Ausführung auf die GPCs 350 der PPU 300. Die Aufgaben werden einem bestimmten TPC 420 innerhalb eines GPC 350 zugewiesen, und wenn die Aufgabe einem Shader-Programm zugeordnet ist, kann die Aufgabe einem SM 440 zugewiesen werden. Die Scheduler-Einheit 510 nimmt die Aufgaben von der Arbeitsverteilungs-Einheit 325 entgegen und verwaltet die Befehlsplanung für eine oder mehrere Gruppen von Threads (z.B. Warps), die dem SM 440 zugeordnet sind. Die Scheduler-Einheit 510 plant Threads zur Ausführung in Gruppen paralleler Threads ein, wobei jede Gruppe als Warp bezeichnet wird. In einer Ausführungsform enthält jeder Warp 32 Threads. Die Scheduler-Einheit 510 kann eine Vielzahl verschiedener Warps verwalten, die Warps zur Ausführung einplanen und dann Anweisungen von der Vielzahl verschiedener Warps an die verschiedenen Funktionseinheiten (d.h. Kerne 550, SFUs 552 und LSUs 554) während jedes Taktzyklus senden.
-
Jede Dispatcher-Einheit 515 ist so konfiguriert, dass sie Befehle an eine oder mehrere der Funktionseinheiten übermittelt. In der in 5 gezeigten Ausführungsform enthält die Scheduler-Einheit 510 zwei Dispatcher-Einheiten 515, die es ermöglichen, zwei verschiedene Instruktionen aus demselben Warp während eines Taktzyklus abzuarbeiten. In alternativen Ausführungsformen kann jede Scheduler-Einheit 510 eine einzelne Dispatcher-Einheit 515 oder zusätzliche Dispatcher-Einheiten 515 enthalten.
-
Jeder SM 440 enthält eine Registerdatei 520, die einen Satz Register für die Funktionseinheiten der SM 440 enthält. In einer Ausführungsform wird die Registerdatei 520 zwischen den einzelnen Funktionseinheiten so aufgeteilt, dass jeder Funktionseinheit ein bestimmter Teil der Registerdatei 520 zugeordnet wird. In einer anderen Ausführungsform wird die Registerdatei 520 auf die verschiedenen Warps aufgeteilt, die von dem SM 440 ausgeführt werden. Die Registerdatei 520 dient zur Zwischenspeicherung von Operanden, die mit den Datenpfaden der Funktionseinheiten verbunden sind.
-
Jeder SM 440 besteht aus L Verarbeitungskernen 550. In einer Ausführungsform enthält der SM 440 eine große Anzahl (z.B. 128, etc.) unterschiedlicher Verarbeitungskerne 550. Jeder Kern 550 kann eine Verarbeitungseinheit mit einfacher Genauigkeit und vollständiger Pipeline enthalten, die eine Gleitkomma-Arithmetik-Logik-Einheit und eine Ganzzahl-Arithmetik-Logik-Einheit enthält. Der Kern 550 kann auch eine Verarbeitungseinheit mit doppelter Genauigkeit und mit einer Gleitkomma-Arithmetik-Logik-Einheit enthalten. In einer Ausführungsform implementieren die Gleitkomma-Arithmetik-Logikeinheiten den Standard IEEE 754-2008 für Gleitkomma-Arithmetik. Jeder SM 440 enthält auch M SFUs 552, die spezielle Funktionen ausführen (z.B. Attributauswertung, reziproke Quadratwurzel und dergleichen), und N LSUs 554, die Lade- und Speicheroperationen zwischen dem Gemeinschaftsspeicher/L1-Cache 570 und der Registerdatei 520 implementieren. In einer Ausführungsform umfasst der SM 440 128 Kerne 550, 32 SFUs 552 und 32 LSUs 554.
-
Jeder SM 440 enthält ein Verbindungsnetzwerk 580, das jede der Funktionseinheiten mit der Registerdatei 520 und die LSU 554 mit der Registerdatei 520, dem Gemeinschaftsspeicher/L1-Cache 570 verbindet. In einer Ausführungsform ist das Verbindungsnetzwerk 580 ein Koppelfeld, das so konfiguriert werden kann, dass es jede der Funktionseinheiten mit einem der Register in der Registerdatei 520 verbindet und die LSUs 554 mit der Registerdatei und den Speicherplätzen im Gemeinschaftsspeicher/L1-Cache 570 verbindet.
-
Der Gemeinschaftsspeicher/L1 Cache 570 ist ein Array eines On-Chip-Speichers, das die Datenspeicherung und Kommunikation zwischen dem SM 440 und der Primitiv-Engine 435 sowie zwischen Threads im SM 440 ermöglicht. In einer Ausführungsform umfasst der Gemeinschaftsspeicher/L1 Cache 570 64KB Speicherkapazität und befindet sich in dem Pfad von der SM 440 zur Partitionseinheit 380. Mit dem Gemeinschaftsspeicher/L1-Cache 570 können Lese- und Schreibzugriffe zwischengespeichert werden. In einer Ausführungsform beinhaltet der Gemeinschaftsspeicher/L1-Cache 570 die Inspektionsschaltung 170 zur Durchführung von Inline-Dateninspektionen für Ladevorgänge. In einer Ausführungsform befindet sich mindestens eine Inspektionsschaltung 170 zwischen dem Gemeinschaftsspeicher/L1-Cache 570 und den LSUs 554.
-
Die oben beschriebene PPU 300 kann so konfiguriert werden, dass sie hochparallele Berechnungen wesentlich schneller durchführt als herkömmliche CPUs. Paralleles Rechnen hat Vorteile bei der Grafikverarbeitung, Datenkompression, neuronalen Netzen, Deep Learning, Biometrie, Stream Processing Algorithmen und dergleichen.
-
Bei der Konfiguration für allgemeine parallele Berechnungen kann eine einfachere Konfiguration verwendet werden. In diesem Modell, wie in 3 gezeigt, werden Grafikverarbeitungseinheiten mit fester Funktion umgangen, wodurch ein wesentlich einfacheres Programmiermodell entsteht. In dieser Konfiguration ordnet die Arbeitsverteilungseinheit 325 Blöcke von Threads direkt den TPCs 420 zu und verteilt an diese. Die Threads in einem Block führen dasselbe Programm aus, wobei eine eindeutige Thread-ID in der Berechnung verwendet wird, um sicherzustellen, dass jeder Thread eindeutige Ergebnisse generiert, wobei der SM 440 eingesetzt wird, um das Programm auszuführen und Berechnungen durchzuführen, der Gemeinschaftsspeicher/L1 Cache 570 eingesetzt wird, um zwischen Threads zu kommunizieren, und die LSU 554 eingesetzt wird, um den allgemeinen Speicher über einen Teil des Gemeinschaftsspeichers /L1 Cache 570 und die Partitionseinheit 380 lesen und zu schreiben. Wenn der SM 440 für allgemeine parallele Berechnungen konfiguriert ist, kann er auch Befehle schreiben, mit denen die Scheduler-Einheit 320 neue Arbeiten an den TPCs 420 starten kann.
-
In einer Ausführungsform besteht die PPU 300 aus einem Prozessor zum Deep Learning oder Machine Learning. Die PPU 300 ist so konfiguriert, dass sie Befehle empfängt, die Programme zur Modellierung neuronaler Netze und zur Verarbeitung von Daten mit einem neuronalen Netz spezifizieren.
-
In einer Ausführungsform besteht die PPU 300 aus einer Grafikprozessoreinheit (GPU). Die PPU 300 ist so konfiguriert, dass sie Befehle empfängt, die Shader-Programme zur Verarbeitung von Grafikdaten spezifizieren. Grafikdaten können als eine Menge von Primitiven definiert werden, wie Punkte, Linien, Dreiecke, Vierecke, Dreieckstreifen und dergleichen. Typischerweise enthält ein Primitiv Daten, die eine Anzahl von Vertices bzw. Eckpunkten für das Primitiv spezifizieren (z.B. in einem Modell-Raum-Koordinatensystem), sowie Attribute, die jedem Vertex des Primitives zugeordnet sind. Die PPU 300 kann so konfiguriert werden, dass sie die grafischen Primitives verarbeitet, um einen Bildspeicher zu erzeugen (d.h. Pixeldaten für jedes Pixel des Displays).
-
Eine Anwendung schreibt Modelldaten für eine Szene (d.h. eine Sammlung von Vertices und Attributen) in einen Speicher, wie z.B. einen Systemspeicher oder Speicher 304. Die Modelldaten definieren jedes der Objekte, die auf einer Anzeige sichtbar sein können. Die Anwendung führt dann einen API-Aufruf an den Treiberkern durch, der die Modelldaten anfordert, um diese zu rendern und anzuzeigen. Der Treiberkern liest die Modelldaten und schreibt Befehle an die einen oder mehrere Streams, um Operationen zur Verarbeitung der Modelldaten durchzuführen. Die Befehle können sich auf verschiedene Shader-Programme beziehen, die auf den SMs 440 der PPU 300 implementiert werden sollen, einschließlich eines oder mehrerer Vertex-Shader, Hull-Shader, Domain-Shader, Geometrie-Shader und Pixel-Shader. Beispielsweise kann ein oder können mehrere SMs 440 so konfiguriert werden, dass sie ein Vertex-Shader-Programm ausführen, das eine Anzahl von Vertices verarbeitet, die durch die Modelldaten definiert sind. In einer Ausführungsform können die verschiedenen SMs 440 so konfiguriert werden, dass sie verschiedene Shader-Programme gleichzeitig ausführen. Beispielsweise kann eine erste Teilmenge von SMs 440 so konfiguriert werden, dass sie ein Vertex-Shader-Programm ausführt, während eine zweite Teilmenge von SMs 440 so konfiguriert werden kann, dass sie ein Pixel-Shader-Programm ausführt. Die erste Untermenge von SMs 440 verarbeitet Vertexdaten zu verarbeiteten Vertexdaten und schreibt die verarbeiteten Vertexdaten in den L2-Cache 460 und/oder den Speicher 304. Nachdem die verarbeiteten Vertexdaten gerastert (d.h. von dreidimensionalen Daten in zweidimensionale Daten im Bildschirmraum transformiert) wurden, um Fragmentdaten zu erzeugen, führt die zweite Teilmenge von SMs 440 einen Pixel-Shader aus, um verarbeitete Fragmentdaten zu erzeugen, die dann mit anderen verarbeiteten Fragmentdaten gemischt und in den Bildpuffer im Speicher 304 geschrieben werden. Das Vertex-Shader-Programm und das Pixel-Shader-Programm können gleichzeitig ausgeführt werden, wobei verschiedene Daten derselben Szene gemäß einem Pipeline-Vorgehen verarbeitet werden, bis alle Modelldaten für die Szene in den Bildpuffer gerendert wurden. Anschließend wird der Inhalt des Bildpuffers an eine Anzeigesteuerung zur Anzeige auf einer Anzeigevorrichtung übertragen.
-
Die PPU 300 kann in einem Desktop-Computer, einem Laptop-Computer, einem Tablet-Computer, einem Smartphone (z. B. einem drahtlosen, tragbaren Gerät), einem PDA, einer Digitalkamera, einem tragbaren elektronischen Gerät und dergleichen enthalten sein. In einer Ausführungsform wird die PPU 300 auf einem einzigen Halbleitersubstrat ausgebildet. In einer anderen Ausführungsform ist die PPU 300 in einem System-on-a-Chip (SoC) zusammen mit einer oder mehreren anderen logischen Einheiten wie einer RISC-CPU (Computer mit reduziertem Befehlssatz), einer MMU (Memory Management Unit), einem Digital-Analog-Wandler (DAC) und dergleichen enthalten.
-
In einer Ausführungsform kann die PPU 300 auf einer Grafikkarte enthalten sein, die ein oder mehrere Speichervorrichtungen 304, wie z.B. GDDR5 SDRAM, enthält. Die Grafikkarte kann so konfiguriert werden, dass sie mit einem PCIe-Steckplatz auf einem Motherboard eines Desktop-Computers verbunden wird, der z.B. einen Northbridge-Chipsatz und einen Southbridge-Chipsatz enthält. In einer weiteren Ausführungsform kann die PPU 300 eine integrierte Grafikverarbeitungseinheit (iGPU) sein, die im Chipsatz (z.B. Northbridge) des Motherboards enthalten ist.
-
Innerhalb der PPU 300 können verschiedene Programme ausgeführt werden, um die verschiedenen Schichten eines neuronalen Netzes zu implementieren. Beispielsweise kann der Gerätetreiber einen Kern auf der PPU 300 starten, um das neuronale Netz auf einem SM 440 (oder mehreren SMs 440) zu implementieren. Der Gerätetreiber (oder der initiale Kern, der von der PPU 300 ausgeführt wird) kann auch andere Kerne auf der PPU 300 starten, um andere Schichten des neuronalen Netzes auszuführen. Darüber hinaus können einige Schichten des neuronalen Netzes auf Hardware mit festen Einheiten implementiert werden, die in der PPU 300 implementiert ist. Es sei angemerkt, dass Ergebnisse aus einem Kern von einer oder mehreren dazwischenliegenden Hardware-Einheiten mit fester Funktion verarbeitet werden können, bevor sie von einem nachfolgenden Kern auf einem SM 440 verarbeitet werden.
-
Beispielhaftes System
-
6 stellt ein beispielhaftes System 600 dar, in welchem die verschiedenen Architekturen und/oder Funktionalitäten der verschiedenen vorab beschriebenen Ausführungsformen implementiert sein können. Das beispielhafte System 600 kann ausgestaltet sein, um ein Beschneiden eines neuronalen Netzes zu implementieren.
-
Wie dargestellt ist, wird ein System 600 bereitgestellt, welches mindestens einen zentralen Prozessor 601 aufweist, welcher mit einem Kommunikationsbus 602 verbunden ist. Der Kommunikationsbus 602 kann unter Verwendung irgendeines geeigneten Protokolls, wie z.B. PCI („Peripheral Component Interconnect“), PCI-Express, AGP („Accelerated Graphics Port“), HyperTransport oder jedem anderen Bus- oder Punkt-zu-Punkt-Kommunikationsprotokoll, implementiert sein. Bei einer Ausführungsform ist der Kommunikationsbus 602 der Systembus 302, welcher in 3 dargestellt ist. Das System 600 weist auch einen Hauptspeicher 604 auf. Steuerlogik (Software) und Daten sind in dem Hauptspeicher 604 gespeichert, welcher die Ausführungsform eines Direktzugriffspeichers (RAM („Random Access Memory“)) aufweisen kann.
-
Das System 600 weist auch Eingabevorrichtungen 612, einen Grafikprozessor 606 und eine Anzeige 608, d.h. eine herkömmliche Kathodenstrahlröhre (CRT („Cathode Ray Tube“)), eine LCD-Anzeige („Liquid Crystal Display“), eine LED („Light Emitting Diode“), eine Plasmaanzeige oder Ähnliches, auf. Eine Benutzereingabe kann von den Eingabevorrichtungen 612, z.B. einer Tastatur, einer Maus, einem Touchpad, einem Mikrofon und Ähnlichem, erfasst werden. Bei einer Ausführungsform kann der Grafikprozessor 606 mehrere Shader-Module, ein Vektor-/Rastergrafik-Wandlungs-Modul, usw. aufweisen. Jedes der vorab erwähnten Module kann auf einer einzelnen Halbleiterplattform angeordnet sein, um eine Grafikprozessoreinheit (GPU („Graphic Processing Einheit“)) auszubilden.
-
Bei der vorliegenden Beschreibung kann eine einzelne Halbleiterplattform eine einzige einheitliche halbleiterbasierte integrierte Schaltung oder einen Chip bezeichnen. Es sei angemerkt, dass der Begriff einzelne Halbleiterplattform auch Module mit mehreren Chips mit erhöhten Anschlussmöglichkeiten bezeichnet, welche eine Operation auf einem Chip simulieren und wesentliche Verbesserungen gegenüber einem Einsatz einer herkömmlichen zentralen Verarbeitungseinheit (CPU) und Busimplementierung aufweisen. Natürlich können die verschiedenen Module auch getrennt oder in verschiedenen Kombinationen von Halbleiterplattformen nach den Wünschen des Benutzers angeordnet sein.
-
Das System 600 kann auch einen zweiten Speicher 610 aufweisen. Der zweite Speicher 610 weist zum Beispiel eine Festplatte und/oder ein entfernbares Speicherlaufwerk, welches ein Diskettenlaufwerk, ein Magnetbandlaufwerk, ein CD-Laufwerk, ein DVD-Laufwerk, eine Aufzeichnungsvorrichtung, einen USB-Flashspeicher repräsentiert, auf. Das entfernbare Speicherlaufwerk liest von und/oder schreibt auf eine entfernbare Speichereinheit in einer bekannten Weise.
-
Computerprogramme oder Computer-Steuerlogikalgorithmen können in dem Hauptspeicher 604 und/oder dem zweiten Speicher 610 gespeichert werden. Solche Computerprogramme ermöglichen dem System 600, wenn sie ausgeführt werden, verschiedene Funktionen auszuführen. Der Speicher 604, der Speicher 610 und/oder jeder andere Speicher sind mögliche Beispiele von Computer-lesbaren Medien.
-
Bei einer Ausführungsform können die Architektur und/oder Funktionalität der verschiedenen vorher beschriebenen Figuren im Kontext des zentralen Prozessors 601, des Grafikprozessors 606, einer integrierten Schaltung (nicht dargestellt), welche in der Lage ist, zumindest einen Teil der Fähigkeiten sowohl des zentralen Prozessor 601 als auch des Grafikprozessors 606 auszuführen, eines Chipsatzes (d.h. einer Gruppe von integrierten Schaltungen, welche entworfen sind, um als eine Einheit zu arbeiten und verkauft zu werden, um entsprechende Funktionen, usw. auszuführen) und/oder jeder anderen integrierten Schaltung für diesen Zweck, implementiert werden.
-
Dennoch kann die Architektur und/oder Funktionalität der verschiedenen vorher beschriebenen Figuren in dem Kontext eines allgemeinen Computersystems, eines Platinensystems, eines Spielekonsolensystems, welches auf Unterhaltungszwecke ausgerichtet ist, eines anwendungsspezifischen Systems und/oder jedes anderen bestimmten Systems, implementiert werden. Zum Beispiel kann das System 600 die Ausführungsform eines autonomen Fahrzeugs, eines Tischcomputers, eines Laptopcomputers, eines Servers, einer Workstations, einer Spielekonsole, eines eingebetteten Systems und/oder jedes anderen Typs einer Logik annehmen.
-
Darüber hinaus kann das System 600, obwohl es nicht dargestellt ist, mit einem Netz (z.B. einem Telekommunikationsnetz, einem lokalen Netz (LAN), einem Funknetz, einem weiträumigen Netz (WAN), wie z.B. dem Internet, einem Peer-to-Peer-Netz, einem Kabelnetz oder Ähnlichem) für Kommunikationszwecke gekoppelt sein.
-
Während verschiedene Ausführungsformen vorab beschrieben worden sind, sollte klar sein, dass sie nur als Beispiel und nicht als Einschränkung präsentiert worden sind. Daher sollten die Breite und der Umfang einer bevorzugten Ausführungsform nicht durch irgendeine der vorab beschriebenen beispielhaften Ausführungsformen eingeschränkt sein, sondern sollten nur gemäß der folgenden Ansprüche und ihrer Äquivalente definiert sein.